示例#1
0
        public static CompiledLine Read(BinaryReader reader, Encoding originalEncoding, Encoding translatedEncoding)
        {
            CompiledLine line = new CompiledLine();

            int length = reader.ReadInt32();

            line.OriginalLine = originalEncoding.GetString(reader.ReadBytes(length));

            length = reader.ReadInt32();
            line.TranslatedLine = translatedEncoding.GetString(reader.ReadBytes(length));

            List <byte> levels = new List <byte>();

            length = reader.ReadByte();
            for (int i = 0; i < length; i++)
            {
                levels.Add(reader.ReadByte());
            }

            line.Levels = levels.ToArray();

            length     = reader.ReadByte();
            line.Flags = LineFlags.Create(reader.ReadBytes(length));

            byte fontSize = reader.ReadByte();

            line.FontSize = fontSize != 0 ? fontSize : (byte?)null;

            return(line);
        }
示例#2
0
文件: Section.cs 项目: bbepis/TARC
        public static Section Read(BinaryReader reader, Encoding originalEncoding, Encoding translatedEncoding)
        {
            Section section = new Section();

            int length = reader.ReadInt32();

            section.Exe = Encoding.UTF8.GetString(reader.ReadBytes(length));

            length = reader.ReadInt32();
            for (int i = 0; i < length; i++)
            {
                section.Lines.Add(CompiledLine.Read(reader, originalEncoding, translatedEncoding));
            }

            return(section);
        }
示例#3
0
文件: Compiler.cs 项目: bbepis/TARC
        protected IEnumerable <Section> Compile(IEnumerable <Statement> statements, out IEnumerable <string> messages)
        {
            List <Section> sections     = new List <Section>();
            List <string>  messagesList = new List <string>();

            byte[] levels             = { 255 };
            bool   convertWideNumbers = false;
            bool?  useAutosize        = null;
            bool?  allowOverflow      = null;
            byte?  fontsize           = null;
            string exe = "all";

            bool AssertDirectiveArgument(Statement statement)
            {
                if (statement.Arguments.Count != 2)
                {
                    messagesList.Add($"WARNING: Expected 2 arguments for '#set {statement.Arguments[0]}', ignoring");
                    return(false);
                }

                return(true);
            }

            foreach (Statement statement in statements)
            {
                switch (statement.Type)
                {
                case StatementType.DirectiveSet:
                    switch (statement.Arguments[0].ToLower())
                    {
                    case "exe":
                        if (AssertDirectiveArgument(statement))
                        {
                            exe = statement.Arguments[1];
                        }
                        break;

                    case "level":
                        if (AssertDirectiveArgument(statement))
                        {
                            levels = statement.Arguments[1].Split(',').Select(x => x.StartsWith("-") ? "255" : x).Select(byte.Parse).ToArray();
                        }
                        break;

                    case "autosize":
                        if (AssertDirectiveArgument(statement))
                        {
                            useAutosize = statement.Arguments[1].ToLower() == "default" ? (bool?)null : bool.Parse(statement.Arguments[1].ToLower());
                        }
                        break;

                    case "overflow":
                        if (AssertDirectiveArgument(statement))
                        {
                            allowOverflow = statement.Arguments[1].ToLower() == "default" ? (bool?)null : bool.Parse(statement.Arguments[1].ToLower());
                        }
                        break;

                    case "fontsize":
                        if (AssertDirectiveArgument(statement))
                        {
                            fontsize = statement.Arguments[1].ToLower() == "default" ? (byte?)null : byte.Parse(statement.Arguments[1].ToLower());
                        }
                        break;

                    case "widenumbers":
                        if (AssertDirectiveArgument(statement))
                        {
                            convertWideNumbers = bool.Parse(statement.Arguments[1].ToLower());
                        }
                        break;
                    }
                    break;

                case StatementType.TranslationEntry:
                    CompiledLine line = new CompiledLine
                    {
                        OriginalLine   = statement.Arguments[1],
                        TranslatedLine = statement.Arguments[3],
                    };

                    line.Flags.IsOriginalRegex    = bool.Parse(statement.Arguments[0]);
                    line.Flags.IsTranslationRegex = bool.Parse(statement.Arguments[2]);

                    line.Flags.AllowOverflow      = allowOverflow;
                    line.Flags.UseAutosize        = useAutosize;
                    line.Flags.ConvertWideNumbers = convertWideNumbers;

                    line.FontSize = fontsize;
                    line.Levels   = (byte[])levels.Clone();

                    Section section = sections.FirstOrDefault(x => x.Exe.Equals(exe, StringComparison.OrdinalIgnoreCase));

                    if (section == null)
                    {
                        section = new Section
                        {
                            Exe = exe
                        };

                        sections.Add(section);
                    }

                    section.Lines.Add(line);

                    break;
                }
            }

            messages = messagesList;
            return(sections);
        }