Beispiel #1
0
        public MasmParser(TextReader reader)
        {
            for (int i = 0; ; i++)
            {
                string temp_line = reader.ReadLine();
                if (temp_line == null)
                {
                    break;
                }

                string line = temp_line;

                // remove comments and empty lines
                if (line.Contains('/'))
                {
                    line = temp_line.Substring(0, temp_line.IndexOf('/'));
                }

                if (!string.IsNullOrWhiteSpace(line))
                {
                    lines.Add((i, line));
                }

                OriginalLines.Add(temp_line);
            }
        }
Beispiel #2
0
        public void Decompile(string filepath)
        {
            using (FileStream stream = new FileStream(filepath, FileMode.Open))
            {
                using (BinaryReader reader = new BinaryReader(stream, Encoding.Latin1))
                {
                    string signature = reader.ReadFixedString(15);
                    if (signature != TRA_SIGNATURE)
                    {
                        Debug.Assert(false, "Invalid TRA signature!");
                        return;
                    }

                    for (; ;)
                    {
                        Int32 blockType = reader.ReadInt32();
                        Int32 blockSize = reader.ReadInt32();

                        if (blockType == (int)BlockType.Content)
                        {
                            for (; ;)
                            {
                                string original    = reader.ReadEncryptedCString();
                                string translation = reader.ReadEncryptedCString();

                                if ((original.Length < 1) && (translation.Length < 1))
                                {
                                    break;
                                }

                                OriginalLines.Add(original);
                                TranslatedLines.Add(translation);
                            }
                        }
                        else if (blockType == (int)BlockType.Header)
                        {
                            GameID   = reader.ReadInt32();
                            GameName = reader.ReadEncryptedCString();
                        }
                        else if (blockType == (int)BlockType.Settings)
                        {
                            //TODO(adm244): read settings
                            break;
                        }
                        else if (blockType == (int)BlockType.End)
                        {
                            break;
                        }
                        else
                        {
                            Debug.Assert(false, "Unknown block type encountered!");
                            break;
                        }
                    }
                }
            }
        }
Beispiel #3
0
        public bool Add(string original, string translation)
        {
            if (string.IsNullOrEmpty(original) || string.IsNullOrEmpty(translation))
            {
                return(false);
            }

            OriginalLines.Add(original);
            TranslatedLines.Add(translation);

            return(true);
        }
Beispiel #4
0
        public Ctl(string filename)
        {
            Filename = filename;

            OriginalLines = File.ReadLines(filename).Select(x => x.TrimEnd()).ToList();
            int v = OriginalLines.FindIndex(x => x.Substring(0, startMarker.Length) == startMarker);

            Preamble = OriginalLines.Take(v).ToList();
            Body     = OriginalLines.Skip(v).ToList();

            vbpLines = Preamble.Select(x => new VbpLine(x)).ToList();
        }
Beispiel #5
0
        private void Button左_Click(object sender, RoutedEventArgs e)
        {
            // 减少控制器访问次数,失败时便于回滚
            var returnedLines   = OriginalLines;
            var translatedLines = TranslatedLines;

            // 同步内容
            if (TranslatedTexts != this.textBox右.Text)
            {
                if (MessageBoxResult.No == MessageBox.Show("检测到右边已被修改,是否继续本操作?", "修改确认", MessageBoxButton.YesNo))
                {
                    return;
                }
                TranslatedTexts = this.textBox右.Text;
            }

            int leftLineIndex = 0, rightLineIndex = 0;

            for (; leftLineIndex < returnedLines.Count(); leftLineIndex++)
            {
                string leftLine = returnedLines[leftLineIndex];
                if (leftLine.Contains(" --> ") || leftLine == "" || Regex.IsMatch(leftLine, @"^\d+$"))
                {
                    continue;
                }
                try
                {
                    returnedLines[leftLineIndex] = translatedLines[rightLineIndex++];
                }
                catch (IndexOutOfRangeException)
                {
                    MessageBox.Show("检测到右方行数与左边对应行数不一致,请重新检查译文的正确性!", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
            }
            if (leftLineIndex < OriginalLines.Count() || rightLineIndex < translatedLines.Length)
            {
                MessageBox.Show("检测到右方行数与左边对应行数不一致,请重新检查译文的正确性!", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            else
            {
                OriginalLines = returnedLines;
            }
        }
Beispiel #6
0
        public MasmParser(string path)
        {
            int i = 0;

            foreach (var temp_line in File.ReadLines(path))
            {
                string line = temp_line;

                // remove comments and empty lines
                if (line.Contains('/'))
                {
                    line = temp_line.Substring(0, temp_line.IndexOf('/'));
                }

                if (!string.IsNullOrWhiteSpace(line))
                {
                    lines.Add((i, line));
                }
                i++;

                OriginalLines.Add(temp_line);
            }
        }
Beispiel #7
0
 public AGSTranslation(IEnumerable <string> originalLines, IEnumerable <string> translatedLines)
 {
     OriginalLines.AddRange(originalLines);
     TranslatedLines.AddRange(translatedLines);
 }
Beispiel #8
0
 public Vbp(string filename)
 {
     Filename      = filename;
     OriginalLines = File.ReadLines(filename).Select(x => x.TrimEnd()).ToList();
     vbpLines      = OriginalLines.Select(x => new VbpLine(x)).ToList();
 }