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);
 }
Beispiel #3
0
        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);
            }
        }
Beispiel #6
0
 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));
 }
Beispiel #8
0
        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);