Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
                    }
                }
            }
        }
Exemplo n.º 4
0
        // 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;
            }
        }
Exemplo n.º 5
0
        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);
                }
            }
        }