Path 1: 1068 calls (0.79)

Lines (888) list (139) Text.from_ansi.. def (40) FileProxy.write.. def (1)

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.. def (8)

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