public ScriptParseResult Translate(string fileName, StringTranslateHandle translator) { ScriptParseResult result = new() { Strings = new List <ScriptString>() }; using MemoryStream memory = new(); using StreamWriter writer = new(memory, this.win1251); using (StreamReader reader = new(fileName, this.win1251)) { string?line; while ((line = reader.ReadLine()) != null) { Match match = this.regex.Match(line); if (match.Success) { string key = match.Groups[1].Value; string engValue = match.Groups[2].Value; string?rusValue = translator(new ScriptString(key, engValue)); if (rusValue != null) { writer.WriteLine($"{key};{rusValue};x"); result.Strings.Add(new ScriptString(key, rusValue)); continue; } } writer.WriteLine(line); } } writer.Flush(); using (FileStream fileStream = File.Create(fileName)) { memory.Seek(0, SeekOrigin.Begin); memory.CopyTo(fileStream); } return(result); } }
public TranslateListener(ITokenStream tokens, StringTranslateHandle translator) { this.Rewriter = new TokenStreamRewriter(tokens); this.translator = translator; }