Beispiel #1
0
 public static string ResolveReference(string valueString, Doc doc)
 {
     if (valueString.StartsWith("{") && valueString.EndsWith("}"))
     {
         string[] parts = valueString.Substring(1, valueString.Length - 2).Split(' ');
         if (parts.Length < 2)
         {
             return(valueString);
         }
         else
         {
             // Find the element with the given key in the doc's definitions
             Models.String refValue = doc.Definitions.Find(def => def.Key == parts[1] && def is Models.String) as Models.String;
             if (refValue != null)
             {
                 if (refValue.Language == Language.Coptic && refValue.Font != null)
                 {
                     // Coptic text needs to be interpreted before it can be displayed
                     var font = CopticFont.Fonts.Find(f => f.Name.ToLower() == refValue.Font.ToLower());
                     return(ConvertFont(refValue.Value, font, CopticFont.CopticUnicode));
                 }
                 else
                 {
                     return(refValue.Value);
                 }
             }
             else
             {
                 return(valueString);
             }
         }
     }
     else
     {
         return(valueString);
     }
 }
Beispiel #2
0
        public static Doc ParseDocXml(string xmlText)
        {
            var xml = XDocument.Parse(xmlText);

            // The actual content can't be deserialized, so it needs to be manually parsed

            Doc doc = new Doc()
            {
                Name = xml.Root.Element("Name")?.Value,
                Uuid = xml.Root.Element("Uuid")?.Value,
            };

            var defsElem = xml.Root.Element("Definitions");

            if (defsElem != null)
            {
                foreach (XElement defElem in defsElem?.Elements())
                {
                    if (defElem.Name == nameof(Script))
                    {
                        var script = new Script()
                        {
                            LuaScript = defElem.Value,
                            Key       = defElem.Attribute("Key")?.Value
                        };
                        doc.Definitions.Add(script);
                    }
                    else if (defElem.Name == nameof(Variable))
                    {
                        var variable = new Variable()
                        {
                            Label        = defElem.Attribute("Label")?.Value,
                            DefaultValue = defElem.Attribute("DefaultValue")?.Value,
                            Configurable = Boolean.Parse(defElem.Attribute("Configurable")?.Value),
                            Key          = defElem.Attribute("Key")?.Value
                        };
                        doc.Definitions.Add(variable);
                    }
                    else if (defElem.Name == nameof(Models.String))
                    {
                        var _string = new Models.String()
                        {
                            Value    = defElem.Value,
                            Font     = defElem.Attribute("Font")?.Value,
                            Language = (Language)Enum.Parse(typeof(Language),
                                                            defElem.Attribute("Language")?.Value ?? "Default"),
                            Key = defElem.Attribute("Key")?.Value
                        };
                        doc.Definitions.Add(_string);
                    }
                }
            }

            foreach (XElement transElem in xml.Root.Element("Translations").Elements())
            {
                Translation translation = new Translation()
                {
                    Font     = transElem.Attribute("Font")?.Value,
                    Language = (Language)Enum.Parse(typeof(Language),
                                                    transElem.Attribute("Language")?.Value),
                };
                translation.Content = ParseContentParts(transElem.Elements(), translation, doc);
                doc.Translations.Add(translation);
            }

            return(doc);
        }