Exemple #1
0
        public void Read(StreamReader reader)
        {
            m_domCreator = XEP_EmdFactrory.CreateEmdLinesParser();
            List <IXEP_EmdLine> linesEmd = new List <IXEP_EmdLine>();
            string line;
            int    counter = 0;

            while ((line = reader.ReadLine()) != null)
            {
                IXEP_EmdLine
                    element = XEP_EmdFactrory.CreateEmdLine();
                element.Parse(line, counter);
                linesEmd.Add(element);
                counter++;
            }
            m_domCreator.CreateDom(linesEmd);
        }
Exemple #2
0
        public void CreateDom(List <IXEP_EmdLine> linesEmd)
        {
            List <IXEP_EmdLine> linesEmd4Dom = linesEmd;
            List <IXEP_EmdLine> roots        = linesEmd4Dom.Where(item => item.IntendationLevel == 0).ToList();

            Root = PrepareRoot(roots);
            List <IXEP_EmdLine> linesEmd4DomReversed = Enumerable.Reverse(linesEmd4Dom).ToList();

            foreach (var actLineEmd in linesEmd4DomReversed)
            {
                if (actLineEmd.IntendationLevel == 0)
                {
                    continue;
                }
                IXEP_EmdLine ownerLine = FindOwnerInReversed(linesEmd4DomReversed, actLineEmd);
                ownerLine.Lines.Add(actLineEmd);
            }
            Root.ReverseLines();
        }
Exemple #3
0
        static private IXEP_EmdLine PrepareRoot(List <IXEP_EmdLine> roots)
        {
            if (roots == null || roots.Count == 0)
            {
                throw new InvalidOperationException("There are no root elements !");
            }
            IXEP_EmdLine preparedRoot = roots[0];

            if (roots.Count > 1)
            {
                preparedRoot = XEP_EmdFactrory.CreateEmdLine();
                preparedRoot.CreateFakeRoot();
                List <IXEP_EmdLine> rootsReversed = Enumerable.Reverse(roots).ToList();
                foreach (var root in rootsReversed)
                {
                    preparedRoot.Lines.Add(root);
                }
            }
            return(preparedRoot);
        }
Exemple #4
0
 static private IXEP_EmdLine FindOwnerInReversed(List <IXEP_EmdLine> linesEmd4DomReversed, IXEP_EmdLine actLineEmd)
 {
     foreach (var actItem in linesEmd4DomReversed)
     {
         if (actItem.LineIndex > actLineEmd.LineIndex)
         {
             continue;
         }
         if (actItem.IntendationLevel < actLineEmd.IntendationLevel)
         {
             return(actItem);
         }
     }
     throw new InvalidOperationException("Element does not have a owner !");
 }