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); }
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); }
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); }