Lines Matching +full:3 +full:- +full:line
1 //===- lib/DebugInfo/Symbolize/Markup.cpp ------------------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
12 //===----------------------------------------------------------------------===//
25 // "\033[30m" -- "\033[37m"
26 static const char SGRSyntaxStr[] = "\033\\[([0-1]|3[0-7])m";
32 return Str.take_front(Pos - Str.begin()); in takeTo()
35 Str = Str.drop_front(Pos - Str.begin()); in advanceTo()
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()
123 EndPos += 3; in parseElement()
125 Element.Text = Line.slice(BeginPos, EndPos); in parseElement()
126 Line = Line.substr(EndPos); in parseElement()
129 StringRef Content = Element.Text.drop_front(3).drop_back(3); in parseElement()
160 if (Matches.begin()->begin() != Text.begin()) in parseTextOutsideMarkup()
161 Buffer.push_back(textNode(takeTo(Text, Matches.begin()->begin()))); in parseTextOutsideMarkup()
164 advanceTo(Text, Matches.begin()->end()); in parseTextOutsideMarkup()
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()
177 size_t BeginTagPos = BeginPos + 3; 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()