Example #1
0
        /// <summary>
        /// Creates XML file from Numenera items extracted from PDF
        /// </summary>
        /// <param name="info"></param>
        /// <param name="sourcebookName"></param>
        /// <param name="objectsName"></param>
        /// <param name="objectName"></param>
        private static void NumeneraCreateXML(PDFTextFileInfo info, string sourcebookName, string objectsName, string objectName)
        {
            var linesFromFile = File.ReadAllLines(info.ItemsFileName);
            var itemsLines    = new List <string>(linesFromFile);

            itemsLines = PDFTextParser.FixBrokenWords(itemsLines);
            itemsLines = PDFTextParser.SplitLinesByKeywords(itemsLines, info.KeywordsList);
            var objects = PDFTextParser.SplitItemsToObjects(info, itemsLines.ToArray());

            var smthToWrite = new List <string>();

            objects.ForEach(x => x.ForEach(s => smthToWrite.Add(s)));
            File.WriteAllLines(info.ItemsFileName + "_Cleared.txt", smthToWrite);

            var parsedDic = PDFTextParser.CreateDictionariesFromObjects(objects, info.KeywordsList);

            // and make XML from it
            var xmlInfo = new PDFTextXmlInfo()
            {
                XmlFileName = Path.GetDirectoryName(info.ItemsFileName) +
                              @"\OUTPUT_" + objectsName + "_" + sourcebookName + ".xml",
                ObjectsName = objectsName,
                ObjectName  = objectName,
                Source      = sourcebookName
            };

            PDFTextXmlCreator.CreateXMLWithRollTable(xmlInfo, parsedDic, info.TableKeyword);
        }
Example #2
0
        public static void CreateXMLTableWithRollCell(PDFTextXmlInfo info, XElement tableString)
        {
            var rows = tableString.Value.Split('#');

            tableString.RemoveAll();
            foreach (var row in rows)
            {
                if (string.IsNullOrEmpty(row))
                {
                    continue;
                }
                if (!char.IsDigit(row[0]))
                {
                    tableString.Descendants().Last().Value += " " + row;
                    continue;
                }

                var curRow     = new XElement("Row", "");
                var spaceIndex = row.IndexOf(' ');
                var rollCell   = row.Substring(0, spaceIndex);
                var resultCell = row.Substring(spaceIndex + 1, row.Length - spaceIndex - 1);

                curRow.Add(new XElement("Roll", rollCell));
                curRow.Add(new XElement("Result", resultCell));

                tableString.Add(curRow);
            }
        }
Example #3
0
        public static void CreateXML(PDFTextXmlInfo info, List <Dictionary <string, string> > objList, string tableKeyword = null)
        {
            XDocument xdoc = new XDocument();
            // root element
            var objects = new XElement(info.ObjectsName);

            objects.Add(new XAttribute("source", info.Source));

            foreach (var obj in objList)
            {
                // current element
                var curObject = new XElement(info.ObjectName);
                objects.Add(curObject);
                // loop for lines in one object
                foreach (var element in obj)
                {
                    // clear string for xmlKey
                    // by the best practices is better to avoid -, _, .
                    string xmlKey = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(element.Key.ToLower());
                    xmlKey = new string(xmlKey.Where(c => char.IsLetterOrDigit(c)).ToArray());

                    var feature = new XElement(xmlKey, element.Value);
                    curObject.Add(feature);
                    if (tableKeyword != null && element.Key == tableKeyword)
                    {
                        CreateXMLTable(info, feature);
                    }
                }
            }

            // saving final document
            xdoc.Add(objects);
            xdoc.Save(info.XmlFileName);
        }
Example #4
0
        public static void CreateXMLWithRollTable(PDFTextXmlInfo info, List <Dictionary <string, string> > objList, string tableKeyword = null)
        {
            XDocument xdoc = new XDocument();
            // root element
            var objects = new XElement(info.ObjectsName);

            if (!string.IsNullOrEmpty(info.Source))
            {
                objects.Add(new XAttribute("source", info.Source));
            }
            var count = 0;

            foreach (var obj in objList)
            {
                // current element
                var curObject = new XElement(info.ObjectName);
                objects.Add(curObject);
                // loop for lines in one object
                foreach (var element in obj)
                {
                    // clear string for xmlKey
                    // by the best practices is better to avoid -, _, .
                    string xmlKey = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(element.Key.ToLower());
                    xmlKey = new string(xmlKey.Where(c => char.IsLetterOrDigit(c)).ToArray());

                    if (tableKeyword != null && element.Key == tableKeyword)
                    {
                        var feature = new XElement("Roll" + xmlKey, element.Value);
                        curObject.Add(feature);
                        CreateXMLTableWithRollCell(info, feature);
                    }
                    else
                    {
                        var feature = new XElement(xmlKey, element.Value);
                        curObject.Add(feature);
                    }
                }
                count++;
            }

            objects.Add(new XAttribute("quantity", count));
            // saving final document
            xdoc.Add(objects);
            try
            {
                xdoc.Save(info.XmlFileName);
            }
            catch (Exception ex)
            {
                ex.Data["UserMessage"] += "An error occured while trying to save XML file;";
                throw;
            }
        }
Example #5
0
        public static void CreateXMLTable(PDFTextXmlInfo info, XElement tableString)
        {
            var rows = tableString.Value.Split('#');

            tableString.RemoveAll();
            foreach (var row in rows)
            {
                if (!string.IsNullOrEmpty(row))
                {
                    tableString.Add(new XElement("Row", row));
                }
            }
        }
Example #6
0
        /// <summary>
        /// Create XML from file with oddities
        /// First digits are passed by (roll numbers)
        /// </summary>
        /// <param name="source"></param>
        /// <param name="itemsFileName"></param>
        public static void OdditiesParseFileToXML(string source, string itemsFileName)
        {
            var strings = PDFTextParser.ParseFileWithRollTableToStrings(itemsFileName);

            var xmlInfo = new PDFTextXmlInfo()
            {
                XmlFileName = Path.GetDirectoryName(itemsFileName) +
                              @"\OUTPUT_Oddities_" + source + ".xml",
                ObjectsName = "Oddities",
                ObjectName  = "Oddity",
                Source      = "Discovery"
            };

            PDFTextXmlCreator.CreateXMLForStrings(xmlInfo, strings);
        }
Example #7
0
        /// <summary>
        /// Parse list of string to XML (for oddities)
        /// </summary>
        /// <param name="info"></param>
        /// <param name="objList"></param>
        public static void CreateXMLForStrings(PDFTextXmlInfo info, List <string> objList)
        {
            XDocument xdoc    = new XDocument();
            var       objects = new XElement(info.ObjectsName);

            if (!string.IsNullOrEmpty(info.Source))
            {
                objects.Add(new XAttribute("source", info.Source));
            }
            var count = 0;

            foreach (var obj in objList)
            {
                if (!string.IsNullOrEmpty(obj))
                {
                    objects.Add(new XElement(info.ObjectName, obj));
                    count++;
                }
            }
            objects.Add(new XAttribute("quantity", count));
            xdoc.Add(objects);
            xdoc.Save(info.XmlFileName);
        }