Method: rich.text.Text.join
Calls: 1357, Exceptions: 0, Paths: 2Back
Path 1: 1068 calls (0.79)
Lines (888) list (139) Text.from_ansi.
Text (1068)
1def join(self, lines: Iterable["Text"]) -> "Text":
2 """Join text together with this instance as the separator.
3
4 Args:
5 lines (Iterable[Text]): An iterable of Text instances to join.
6
7 Returns:
8 Text: A new text instance containing join text.
9 """
10
11 new_text = self.blank_copy()
12
13 def iter_text() -> Iterable["Text"]:
14 if self.plain:
15 for last, line in loop_last(lines):
16 yield line
17 if not last:
18 yield self
19 else:
20 yield from lines
21
22 extend_text = new_text._text.extend
23 append_span = new_text._spans.append
24 extend_spans = new_text._spans.extend
25 offset = 0
26 _Span = Span
27
28 for text in iter_text():
29 extend_text(text._text)
30 if text.style:
31 append_span(_Span(offset, offset + len(text), text.style))
32 extend_spans(
33 _Span(offset + start, offset + end, style)
34 for start, end, style in text._spans
35 )
36 offset += len(text)
37 new_text._length = offset
38 return new_text
Path 2: 289 calls (0.21)
Lines (231) list (50) Text.from_ansi.
Text (289)
1def join(self, lines: Iterable["Text"]) -> "Text":
2 """Join text together with this instance as the separator.
3
4 Args:
5 lines (Iterable[Text]): An iterable of Text instances to join.
6
7 Returns:
8 Text: A new text instance containing join text.
9 """
10
11 new_text = self.blank_copy()
12
13 def iter_text() -> Iterable["Text"]:
14 if self.plain:
15 for last, line in loop_last(lines):
16 yield line
17 if not last:
18 yield self
19 else:
20 yield from lines
21
22 extend_text = new_text._text.extend
23 append_span = new_text._spans.append
24 extend_spans = new_text._spans.extend
25 offset = 0
26 _Span = Span
27
28 for text in iter_text():
29 extend_text(text._text)
30 if text.style:
31 append_span(_Span(offset, offset + len(text), text.style))
32 extend_spans(
33 _Span(offset + start, offset + end, style)
34 for start, end, style in text._spans
35 )
36 offset += len(text)
37 new_text._length = offset
38 return new_text