Beispiel #1
0
        public LineBreak Parse(ParserContext context, Subject subject)
        {
            if (subject.Char != '\\' && subject.Char != ' ' && subject.Char != '\n')
            {
                return(null);
            }

            var saved = subject.Save();

            LineBreak result = null;

            if (subject.Char == ' ')
            {
                var count = subject.AdvanceWhile(' ');
                if (subject.Char == '\n')
                {
                    result = count >= 2 ? (LineBreak) new HardBreak() : new SoftBreak();
                }
            }
            else if (subject.StartsWith("\\\n"))
            {
                subject.Advance(2);
                result = new HardBreak();
            }
            else if (subject.Char == '\n')
            {
                subject.Advance();
                result = new SoftBreak();
            }

            if (result != null)
            {
                subject.SkipWhiteSpace();
                return(result);
            }

            saved.Restore();
            return(null);
        }
 public override SoftBreak VisitSoftBreak(SoftBreak softBreak)
 {
     softBreak = softBreakDelegate?.Invoke(softBreak) ?? softBreak;
     return(base.VisitSoftBreak(softBreak));
 }
Beispiel #3
0
 public virtual void Visit(SoftBreak inline)
 {
     WriteLine();
 }
 public virtual void Visit(SoftBreak inline)
 {
     WriteLine();
 }