/** * This function parses an XML file formatted like * what Twallan's STBL.exe awaits */ private static int parseTwallanFormat(XElement Root, STBLWriter stblWriter) { bool awaits_key = true; bool warnings = false; string key = ""; foreach(XElement elem in Root.Descendants()) { // KEY tag if (awaits_key) { if (elem.Name == "KEY") { key = preprocessKey(elem.Value); awaits_key = false; } else { Console.WriteLine ("WARN: <KEY> awaited at {0}. Skipping.", ((IXmlLineInfo)elem).LineNumber); warnings = true; } // STR tag } else { if (elem.Name == "STR") { if (stblWriter.add(key, elem.Value) != 0) { Console.WriteLine ("WARN: element at {0} is duplicate.", ((IXmlLineInfo)elem).LineNumber); } awaits_key = true; } else { Console.WriteLine ("WARN: <STR> awaited at {0}. Skipping.", ((IXmlLineInfo)elem).LineNumber); awaits_key = true; warnings = true; } } } if (warnings) { return -2; } return 0; }
/** * This is where the real things are handled. */ public static int convertFile(string filein, string fileout) { try { XDocument doc = XDocument.Load(filein); STBLWriter stblWriter = new STBLWriter(fileout); int result; if (doc.Root.Name == "TEXT") { result = parseTwallanFormat (doc.Root, stblWriter); } else { result = parseXSTBLFormat (doc.Root, stblWriter); } stblWriter.write (); stblWriter.close (); return result; } catch (System.IO.FileNotFoundException e) { Console.WriteLine (e.Message); return -1; } }
/** * This function parses an XML file in the new format * allowed by stblc */ private static int parseXSTBLFormat(XElement Root, STBLWriter stblWriter) { Console.WriteLine("Unimplemented at the moment"); return 0; }