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)); } } }
public void Formatting() { FormattedContent = ParsedContent; for (int i = 0; i < Paranthesis.Count; i++) { Paranthesis[i].Formatting(); FormattedContent = FormattedContent.Replace(Paranthesis[i].ReplaceFormat(), "[" + i + "]"); } }
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(); }