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