public override (INonTerminalExpression parrentTag, string text) Parse(INonTerminalExpression parrentTag, string text) { int headerLevel = 0; if (text.Length > 0) { while (headerLevel < text.Length && text[headerLevel] == '#') { headerLevel++; } } if (headerLevel <= 6 && headerLevel > 0) { parrentTag.Children.Add(new Header(headerLevel)); return(parrentTag, text.Remove(0, headerLevel)); } else { if (Succesor != null) { return(Succesor.Parse(parrentTag, text)); } else { return(parrentTag, text); } } }
List <INonTerminalExpression> AddParrentNode(INonTerminalExpression newParrent, INonTerminalExpression oldParrent, List <INonTerminalExpression> document) { if (newParrent.Equals(oldParrent)) { document.Add(oldParrent); } return(document); }
public Int32 InitExpression(string strContent) { string strValue = string.Empty; for (Int32 i = 0; i < strContent.Length; i++) { if (strContent[i] == '(') { EquationExpression equation = new EquationExpression(); i += equation.InitExpression(strContent.Substring(i + 1)); _stackValues.Push(equation); } else if (_dicExpressions.ContainsKey(strContent[i])) { if (!string.IsNullOrEmpty(strValue)) { _stackValues.Push(new ValueExpression(strValue)); strValue = string.Empty; } Type type = _dicExpressions[strContent[i]]; INonTerminalExpression next = (INonTerminalExpression)Activator.CreateInstance(type); if (_stackExpressions.Count > 0) { INonTerminalExpression top = _stackExpressions.Peek(); if (top.Level > next.Level) { ITerminalExpression value1 = _stackValues.Pop(); ITerminalExpression value2 = _stackValues.Pop(); _stackValues.Push(next.Interpret(value1, value2)); _stackExpressions.Pop(); } } _stackExpressions.Push(next); } else if (strContent[i] == ')') { _stackValues.Push(new ValueExpression(strValue)); strValue = string.Empty; return(i + 1); } else { strValue += strContent[i]; } } if (!string.IsNullOrEmpty(strValue)) { _stackValues.Push(new ValueExpression(strValue)); strValue = string.Empty; } return(-1); }
INonTerminalExpression ParseChildren(INonTerminalExpression parrentNode, string text) { ChildrenParser.ParsingMode mode = ChildrenParser.ParsingMode.Text; text += "\n"; string parsedText = ""; foreach (char character in text) { mode = _childrenParser.SwitchMode(mode, character); (parsedText, parrentNode) = _childrenParser.ParseString(mode, parrentNode, parsedText, character); } if (parsedText != "") { parrentNode.Children.Add(new Text(parsedText)); } return(parrentNode); }
public override (INonTerminalExpression parrentTag, string text) Parse(INonTerminalExpression parrentTag, string text) { if (parrentTag.Children.Count == 0) { parrentTag.Children.Add(new Paragraph()); return(parrentTag, text); } IMarkdownExpression previousTag = parrentTag.Children[parrentTag.Children.Count - 1]; if (text == "" || previousTag == null || previousTag.GetType() == typeof(Header)) { parrentTag.Children.Add(new Paragraph()); return(parrentTag, text); } else { return(parrentTag, text); } }
public abstract (INonTerminalExpression parrentTag, string text) Parse(INonTerminalExpression parrentTag, string text);
public override (string, INonTerminalExpression) ParseString(ParsingMode mode, INonTerminalExpression parrentNode, string text, char character) { if (mode == ParsingMode.Src || mode == ParsingMode.Href) { _src += character; text += character; } else if (mode == ParsingMode.BeginAlt || mode == ParsingMode.BeginNestedText || mode == ParsingMode.EndAlt || mode == ParsingMode.EndNestedText) { _alt += character; text += character; } else if (mode == ParsingMode.AddMediaNode) { var MakeChildNodeResult = MakeChildNode(text, _alt, _src, mode, parrentNode); _src = ""; _alt = ""; return(CallSuccesor(mode, parrentNode, MakeChildNodeResult.text, character)); } return(CallSuccesor(mode, parrentNode, text, character)); }
public override (string, INonTerminalExpression) ParseString(ParsingMode mode, INonTerminalExpression parrentNode, string text, char character) { if (mode == ParsingMode.Text) { text += character; } if (Succesor != null) { return(Succesor.ParseString(mode, parrentNode, text, character)); } else { return(text, parrentNode); } }
public abstract (string, INonTerminalExpression) ParseString(ParsingMode mode, INonTerminalExpression parrentNode, string text, char character);