private LanguageProcessor.DocCode MakeCode(IList <LanguageProcessor.LanguageElement> elements, ref int index) { List <LanguageProcessor.LanguageElement> languageElementList = new List <LanguageProcessor.LanguageElement> (); do { languageElementList.Add(elements [index]); ++index; } while (index < elements.Count && elements [index].IsParameter); List <string> stringList = new List <string> (); Priority priority; ICodeTemplate code = this.ParseCode((IList <LanguageProcessor.LanguageElement>)languageElementList, (ICollection <string>)stringList, out priority); LanguageProcessor.DocCode docCode = new LanguageProcessor.DocCode(); docCode.code = code; docCode.priority = priority; docCode.languages = stringList.Count <= 0 ? this.languages.Keys.ToArray <string> () : stringList.ToArray(); if (this.collectDocComments) { docCode.mainDoc = new List <string> ((IEnumerable <string>)languageElementList [0].GetDocLines()); docCode.parameterDocs = new Dictionary <string, List <string> > (); for (int index1 = 1; index1 < languageElementList.Count; ++index1) { docCode.parameterDocs.GetOldOrSetNew <string, List <string> > (languageElementList [index1].ParsedLine.name).AddRange((IEnumerable <string>)languageElementList [index1].GetDocLines()); } } return(docCode); }
private void AddCode(LanguageProcessor.DocCode doc_, string language) { /*var doc = new DocCode(); * doc = doc_;*/ // var doc = Program.DeepCopyWithXmlSerializer<DocCode>(doc_); var doc = doc_.CopyCode(); FixCode(ref doc, language); ICodeTemplateStorer codeTemplateStorer; if (!this.languages.TryGetValue(language, out codeTemplateStorer)) { this.languages [language] = (ICodeTemplateStorer) new CodeTemplateStorer(this.templateComparer); } this.languages [language].AddCode(doc.code, doc.priority); if (doc.code.ID != 0) { ICodeTemplate fourByte = doc.code.CopyWithNewName("_0x" + doc.code.ID.ToString("X4")); fourByte.CanBeDisassembled = false; this.languages [language].AddCode(fourByte, doc.priority); if (doc.code.ID <= 0xFF) { ICodeTemplate twoByte = doc.code.CopyWithNewName("_0x" + doc.code.ID.ToString("X2")); twoByte.CanBeDisassembled = false; this.languages [language].AddCode(twoByte, doc.priority); } } // Console.WriteLine("{0}: {1} {2}", language, doc.code.Name, doc.code.ID); }
private void ParseLinesInFile(string file, IEnumerable <string> lines) { List <LanguageProcessor.LanguageElement> languageElementList = new List <LanguageProcessor.LanguageElement> (); LanguageProcessor.LanguageElement languageElement = new LanguageProcessor.LanguageElement(); foreach (string line in lines) { if (line.ContainsNonWhiteSpace()) { if ((int)line [0] == 35) { if (this.collectDocComments && line.Length > 1 && (int)line [1] == 35) { languageElement.AddDoc(line.Substring(2)); } } else { languageElement.SetMainLine(line); languageElementList.Add(languageElement); languageElement = new LanguageProcessor.LanguageElement(); } } } if (this.collectDocComments) { int index = 0; while (index < languageElementList.Count) { LanguageProcessor.DocCode doc = this.MakeCode((IList <LanguageProcessor.LanguageElement>)languageElementList, ref index); foreach (string language in doc.languages) { this.AddCode(doc, language); } this.docs.GetOldOrSetNew <string, List <LanguageProcessor.DocCode> > (file.Replace('\\', '.')).Add(doc); } this.elements [file] = languageElementList; } else { int index = 0; while (index < languageElementList.Count) { LanguageProcessor.DocCode doc = this.MakeCode((IList <LanguageProcessor.LanguageElement>)languageElementList, ref index); foreach (string language in doc.languages) { this.AddCode(doc, language); } } } }
// Fix code for JP version private void FixCode(ref LanguageProcessor.DocCode doc, string language) { if (language == "FE7J") { // if (doc.code.ID == 0x3E) // FixRoutine(doc, language); // Console.WriteLine(language); /* FE7J and FE7U are troublesome because the instruction codes are irregularly shifted. * Looking from FE7J, * 0x01 - 0x16 shift + 0 * 0x17 - 0x18 shift + 1 * 0x19 - 0xA6 shift + 2 * 0xAB - 0xCC shift - 1 * 0xD2 - 0xDB shift - 3 * 0xDC - 0xEB shift - 4 * For details, see event_FE7.txt.*/ if (doc.code.ID == 0xE2) { doc.code.ID += 2; } else if (doc.code.ID > 0xE0) { doc.code.ID += 5; } else if (doc.code.ID > 0xD8) { doc.code.ID += 4; } else if (doc.code.ID > 0xCE) { doc.code.ID += 3; } else if (doc.code.ID > 0xA9) { doc.code.ID += 1; } else if (doc.code.ID > 0x19) { doc.code.ID -= 2; } else if (doc.code.ID > 0x17) { doc.code.ID -= 1; } return; } if (language == "FE8J") { // It seems that everything except routines is the same, so do nothing here return; } }
private void AddCode(LanguageProcessor.DocCode doc, string language) { ICodeTemplateStorer codeTemplateStorer; if (!this.languages.TryGetValue(language, out codeTemplateStorer)) { this.languages [language] = (ICodeTemplateStorer) new CodeTemplateStorer(this.templateComparer); } this.languages [language].AddCode(doc.code, doc.priority); if (doc.code.ID != 0) { ICodeTemplate fourByte = doc.code.CopyWithNewName("_0x" + doc.code.ID.ToString("X4")); fourByte.CanBeDisassembled = false; this.languages [language].AddCode(fourByte, doc.priority); if (doc.code.ID <= 0xFF) { ICodeTemplate twoByte = doc.code.CopyWithNewName("_0x" + doc.code.ID.ToString("X2")); twoByte.CanBeDisassembled = false; this.languages [language].AddCode(twoByte, doc.priority); } } }