private void ParseNode(XmlNode node)
 {
     if (node.Attributes != null)
     {
         foreach (XmlAttribute att in node.Attributes)
         {
             Attributes.Add(att.Name, att.Value);
         }
     }
     if (node.NodeType == XmlNodeType.Text)
     {
         FormattedContent = node.Value;
         FormattedContent = Regex.Replace(FormattedContent, @"^[\s\r\n]{" + LeadingSpaceLength + "}", string.Empty);
         FormattedContent = Regex.Replace(FormattedContent, @"\r\n[\s\r\n]{" + LeadingSpaceLength + "}", "\r\n");
         FormattedContent = FormattedContent.Replace(Environment.NewLine, Environment.NewLine + Environment.NewLine);
     }
     else
     {
         FormattedContent = string.Join(" ",
                                        Enumerable.Range(0, node.ChildNodes.Count).Select(i => $"{{{i}}}"));
         DocumentationType = node.Name;
         foreach (XmlNode childNode in node.ChildNodes)
         {
             SubDocumentation.Add(new Documentation(childNode, LeadingSpaceLength));
         }
     }
 }
Exemplo n.º 2
0
 public void Formatting()
 {
     FormattedContent = ParsedContent;
     for (int i = 0; i < Paranthesis.Count; i++)
     {
         Paranthesis[i].Formatting();
         FormattedContent = FormattedContent.Replace(Paranthesis[i].ReplaceFormat(), "[" + i + "]");
     }
 }
Exemplo n.º 3
0
        public void Resolve()
        {
            if (Paranthesis.Count == 0)
            {
                for (int i = 0; i < ContentArray.Length; i++)
                {
                    char current = ContentArray[i];

                    if (!char.IsDigit(current) && current != ',')
                    {
                        Operators.Add(new Operator(current,
                                                   Utilities.ExtractDoubleAtOperator(ContentArray, i, false),
                                                   Utilities.ExtractDoubleAtOperator(ContentArray, i, true)));

                        if (Operators.Count > 1)
                        {
                            Operators[Operators.Count - 1].LeftOperator  = Operators[Operators.Count - 2];
                            Operators[Operators.Count - 2].RightOperator = Operators[Operators.Count - 1];
                        }
                    }
                }

                if (Operators.Count == 0)
                {
                    Value = double.Parse(FormattedContent);
                    return;
                }



                List <Operator> operatorBuffer  = new List <Operator>(Operators);
                int             priorityCounter = 0;


                for (int i = 0; i < Operators.Count; i++)
                {
                    switch (Operators[i].HasPriority)
                    {
                    case true:
                        Operators[i].Process();
                        if (i + 1 < Operators.Count)
                        {
                            Operators[i + 1].Left = Operators[i].Result;
                        }

                        if (i - 1 >= 0)
                        {
                            if (!Operators[i - 1].HasPriority)
                            {
                                Operators[i - 1].Right = Operators[i].Result;
                            }
                            else
                            {
                                Operators[i - 1].Result = Operators[i].Result;
                                Operators[i].UpdateLeft();
                            }
                        }

                        priorityCounter++;
                        operatorBuffer.Remove(Operators[i]);
                        break;
                    }
                }

                if (priorityCounter == Operators.Count)
                {
                    Value = Operators[Operators.Count - 1].Result;
                    return;
                }



                for (int i = 0; i < operatorBuffer.Count; i++)
                {
                    operatorBuffer[i].Process();
                    if (i + 1 >= operatorBuffer.Count)
                    {
                        break;
                    }
                    operatorBuffer[i + 1].Left = operatorBuffer[i].Result;
                }

                Value = operatorBuffer[operatorBuffer.Count - 1].Result;
                operatorBuffer.Clear();

                return;
            }

            for (int i = 0; i < Paranthesis.Count; i++)
            {
                Paranthesis[i].Resolve();
            }

            for (int i = 0; i < Paranthesis.Count; i++)
            {
                FormattedContent = FormattedContent.Replace("[" + i + "]", Paranthesis[i].Value + "");
            }


            ContentArray = FormattedContent.ToCharArray();
            Paranthesis.Clear();
            Resolve();
        }