Example #1
0
        private static DfmDataNode ReadObjectProperties(IEnumerable <string> objectData)
        {
            var obj  = "object";
            var inh  = "inherited";
            var node = new DfmDataNode();
            var s    = objectData.ElementAt(0);
            var k1   = s.IndexOf(obj) + obj.Length;

            if (k1 == obj.Length - 1)
            {
                k1 = s.IndexOf(inh) + inh.Length;
            }
            var k2 = s.IndexOf(":");

            k2 = k2 > -1 ? k2 : k1 + 1;
            node.PropertyName  = s.Substring(k1 + 1, k2 - k1 - 1).Trim();
            node.PropertyClass = s.Substring(k2 + 1, s.Length - k2 - 1).Trim();

            var index = 0;
            var count = objectData.Count() - 2;

            while (index < count)
            {
                index = index + ReadObjectProperty(objectData.Skip(index + 1), node);
            }

            return(node);
        }
Example #2
0
        private static DfmDataNode ReadItemsProperties(IEnumerable <string> objectData, DfmDataNode parent)
        {
            var node = new DfmDataNode();
            var s    = objectData.ElementAt(0);
            var k    = s.IndexOf("=");

            if (k > -1)
            {
                node.PropertyName = s.Substring(0, k - 1).Trim();
                ItemCounter.Reset();
            }
            else
            {
                node.PropertyName = "item" + ItemCounter.NextValue;
            }

            var index = 0;
            var count = objectData.Count() - 1;

            while (index < count)
            {
                index = index + ReadObjectProperty(objectData.Skip(index + 1), node);
            }

            return(node);
        }
Example #3
0
        private static int ReadObjectProperty(IEnumerable <string> objectData, DfmDataNode parent)
        {
            var         endIndex = 0;
            var         s        = objectData.ElementAt(0);
            DfmDataNode node     = null;

            if (s.EndsWith(" item"))
            {
                var ident = s.Substring(0, s.IndexOf("item"));
                endIndex = objectData.ToList().IndexOf(
                    objectData.First(o => {
                    return(o.EndsWith(ident + "end") || o.EndsWith(ident + "end>"));
                })
                    );

                node = ReadItemsProperties(
                    objectData.Take(endIndex),
                    parent
                    );
            }
            else if (s.IndexOf("inherited") > -1)
            {
                var ident = s.Substring(0, s.IndexOf("inherited"));
                endIndex = objectData.ToList().IndexOf(ident + "end");
                node     = ReadObjectProperties(
                    objectData.Take(endIndex + 1)
                    );
            }
            else if (s.Trim().StartsWith("object "))
            {
                var ident = s.Substring(0, s.IndexOf("object"));
                endIndex = objectData.ToList().IndexOf(ident + "end");
                node     = ReadObjectProperties(
                    objectData.Take(endIndex + 1)
                    );
            }
            else
            {
                var k = s.IndexOf("=");
                node = new DfmDataNode();
                node.PropertyName = s.Substring(0, k - 1).Trim();
                var b0 = (!s.StartsWith("'")) && (!s.StartsWith("#"));
                var b1 = s.EndsWith("= (");
                var b2 = s.EndsWith("= {");
                var b3 = s.EndsWith("= <");

                if ((b0) && (b1 || b2 || b3))
                {
                    var    endTerm1 = ")";
                    var    endTerm2 = "}";
                    var    endTerm3 = ">";
                    string endTerm  = endTerm1;
                    if (b2)
                    {
                        endTerm = endTerm2;
                    }
                    if (b3)
                    {
                        endTerm = endTerm3;
                    }
                    endIndex = objectData.ToList().IndexOf(
                        objectData.First(o => {
                        return(o.EndsWith(endTerm) && !o.EndsWith("<>"));
                    })
                        );
                    if (b1 || b2)
                    {
                        node.PropertyValue = new List <string>();
                        if (b1)
                        {
                            ((List <string>)node.PropertyValue).Add("(");
                        }
                        else
                        {
                            ((List <string>)node.PropertyValue).Add("{");
                        }
                        ((List <string>)node.PropertyValue).AddRange(
                            objectData.Skip(1).Take(endIndex)
                            );
                    }
                    else
                    {
                        node = ReadItemsProperties(
                            objectData.Take(endIndex + 1),
                            parent
                            );
                    }
                }
                else
                {
                    if (s.Trim().EndsWith("="))
                    {
                        endIndex = objectData.Skip(1).ToList().IndexOf(
                            objectData.Skip(1).First(o => {
                            return(!o.EndsWith("+"));
                        })
                            ) + 1;
                        node.PropertyValue = objectData.Skip(1).Take(endIndex).Select(l => ClearDfmString(l)).Aggregate((text, line) => text + line);
                    }
                    else
                    {
                        node.PropertyValue = s.Substring(k + 1, s.Length - k - 1).Trim();
                        if ((s.Contains("'")) || (s.Contains("#")))
                        {
                            node.PropertyValue = ClearDfmString((string)node.PropertyValue);
                        }
                    }
                }
            }
            parent.Nodes.Add(node);
            return(endIndex + 1);
        }