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)); }
public virtual void Visit(SoftBreak inline) { WriteLine(); }