Lines Matching full:line

38 void MarkupParser::parseLine(StringRef Line) {  in parseLine()  argument
42 this->Line = Line; in parseLine()
54 // The buffer is empty, so parse the next bit of the line. in nextNode()
56 if (Line.empty()) in nextNode()
60 if (std::optional<StringRef> MultilineEnd = parseMultiLineEnd(Line)) { in nextNode()
63 "At most one multi-line element can be finished at a time."); in nextNode()
65 // Parse the multi-line element as if it were contiguous. in nextNode()
66 advanceTo(Line, MultilineEnd->end()); in nextNode()
70 // The whole line is part of the multi-line element. in nextNode()
71 llvm::append_range(InProgressMultiline, Line); in nextNode()
72 Line = Line.drop_front(Line.size()); in nextNode()
77 if (std::optional<MarkupNode> Element = parseElement(Line)) { in nextNode()
78 parseTextOutsideMarkup(takeTo(Line, Element->Text.begin())); in nextNode()
80 advanceTo(Line, Element->Text.end()); in nextNode()
84 // Since there were no valid elements remaining, see if the line opens a in nextNode()
85 // multi-line element. in nextNode()
86 if (std::optional<StringRef> MultilineBegin = parseMultiLineBegin(Line)) { in nextNode()
88 parseTextOutsideMarkup(takeTo(Line, MultilineBegin->begin())); in nextNode()
90 // Begin recording the multi-line element. in nextNode()
92 Line = Line.drop_front(Line.size()); in nextNode()
96 // The line doesn't contain any more markup elements, so emit it as text. in nextNode()
97 parseTextOutsideMarkup(Line); in nextNode()
98 Line = Line.drop_front(Line.size()); in nextNode()
105 Line = {}; in flush()
112 // Finds and returns the next valid markup element in the given line. Returns
113 // std::nullopt if the line contains no valid elements.
114 std::optional<MarkupNode> MarkupParser::parseElement(StringRef Line) { in parseElement() argument
117 size_t BeginPos = Line.find("{{{"); in parseElement()
120 size_t EndPos = Line.find("}}}", BeginPos + 3); in parseElement()
125 Element.Text = Line.slice(BeginPos, EndPos); in parseElement()
126 Line = Line.substr(EndPos); in parseElement()
170 // Given that a line doesn't contain any valid markup, see if it ends with the
171 // start of a multi-line element. If so, returns the beginning.
172 std::optional<StringRef> MarkupParser::parseMultiLineBegin(StringRef Line) { in parseMultiLineBegin() argument
173 // A multi-line begin marker must be the last one on the line. in parseMultiLineBegin()
174 size_t BeginPos = Line.rfind("{{{"); in parseMultiLineBegin()
180 // a multi-line element. in parseMultiLineBegin()
181 size_t EndPos = Line.find("}}}", BeginTagPos); in parseMultiLineBegin()
185 // Check whether the tag is registered multi-line. in parseMultiLineBegin()
186 size_t EndTagPos = Line.find(':', BeginTagPos); in parseMultiLineBegin()
189 StringRef Tag = Line.slice(BeginTagPos, EndTagPos); in parseMultiLineBegin()
192 return Line.substr(BeginPos); in parseMultiLineBegin()
195 // See if the line begins with the ending of an in-progress multi-line element.
197 std::optional<StringRef> MarkupParser::parseMultiLineEnd(StringRef Line) { in parseMultiLineEnd() argument
198 size_t EndPos = Line.find("}}}"); in parseMultiLineEnd()
201 return Line.take_front(EndPos + 3); in parseMultiLineEnd()