Method: rich.text.Text.with_indent_guides
Calls: 37, Exceptions: 0, Paths: 4Back
Path 1: 25 calls (0.68)
4 (25)
'│' (25)
Style (13) 'repr.indent' (12)
Text (25)
1def with_indent_guides(
2 self,
3 indent_size: Optional[int] = None,
4 *,
5 character: str = "│",
6 style: StyleType = "dim green",
7 ) -> "Text":
8 """Adds indent guide lines to text.
9
10 Args:
11 indent_size (Optional[int]): Size of indentation, or None to auto detect. Defaults to None.
12 character (str, optional): Character to use for indentation. Defaults to "│".
13 style (Union[Style, str], optional): Style of indent guides.
14
15 Returns:
16 Text: New text with indentation guides.
17 """
18
19 _indent_size = self.detect_indentation() if indent_size is None else indent_size
20
21 text = self.copy()
22 text.expand_tabs()
23 indent_line = f"{character}{' ' * (_indent_size - 1)}"
24
25 re_indent = re.compile(r"^( *)(.*)$")
26 new_lines: List[Text] = []
27 add_line = new_lines.append
28 blank_lines = 0
29 for line in text.split(allow_blank=True):
30 match = re_indent.match(line.plain)
31 if not match or not match.group(2):
32 blank_lines += 1
33 continue
34 indent = match.group(1)
35 full_indents, remaining_space = divmod(len(indent), _indent_size)
36 new_indent = f"{indent_line * full_indents}{' ' * remaining_space}"
37 line.plain = new_indent + line.plain[len(new_indent) :]
38 line.stylize(style, 0, len(new_indent))
39 if blank_lines:
40 new_lines.extend([Text(new_indent, style=style)] * blank_lines)
41 blank_lines = 0
42 add_line(line)
43 if blank_lines:
44 new_lines.extend([Text("", style=style)] * blank_lines)
45
46 new_text = text.blank_copy("\n").join(new_lines)
47 return new_text
Path 2: 7 calls (0.19)
4 (7)
'│' (7)
Style (7)
Text (7)
1def with_indent_guides(
2 self,
3 indent_size: Optional[int] = None,
4 *,
5 character: str = "│",
6 style: StyleType = "dim green",
7 ) -> "Text":
8 """Adds indent guide lines to text.
9
10 Args:
11 indent_size (Optional[int]): Size of indentation, or None to auto detect. Defaults to None.
12 character (str, optional): Character to use for indentation. Defaults to "│".
13 style (Union[Style, str], optional): Style of indent guides.
14
15 Returns:
16 Text: New text with indentation guides.
17 """
18
19 _indent_size = self.detect_indentation() if indent_size is None else indent_size
20
21 text = self.copy()
22 text.expand_tabs()
23 indent_line = f"{character}{' ' * (_indent_size - 1)}"
24
25 re_indent = re.compile(r"^( *)(.*)$")
26 new_lines: List[Text] = []
27 add_line = new_lines.append
28 blank_lines = 0
29 for line in text.split(allow_blank=True):
30 match = re_indent.match(line.plain)
31 if not match or not match.group(2):
32 blank_lines += 1
33 continue
34 indent = match.group(1)
35 full_indents, remaining_space = divmod(len(indent), _indent_size)
36 new_indent = f"{indent_line * full_indents}{' ' * remaining_space}"
37 line.plain = new_indent + line.plain[len(new_indent) :]
38 line.stylize(style, 0, len(new_indent))
39 if blank_lines:
40 new_lines.extend([Text(new_indent, style=style)] * blank_lines)
41 blank_lines = 0
42 add_line(line)
43 if blank_lines:
44 new_lines.extend([Text("", style=style)] * blank_lines)
45
46 new_text = text.blank_copy("\n").join(new_lines)
47 return new_text
Path 3: 4 calls (0.11)
4 (3) None (1)
'│' (4)
Style (3) 'dim green' (1)
Text (4)
1def with_indent_guides(
2 self,
3 indent_size: Optional[int] = None,
4 *,
5 character: str = "│",
6 style: StyleType = "dim green",
7 ) -> "Text":
8 """Adds indent guide lines to text.
9
10 Args:
11 indent_size (Optional[int]): Size of indentation, or None to auto detect. Defaults to None.
12 character (str, optional): Character to use for indentation. Defaults to "│".
13 style (Union[Style, str], optional): Style of indent guides.
14
15 Returns:
16 Text: New text with indentation guides.
17 """
18
19 _indent_size = self.detect_indentation() if indent_size is None else indent_size
20
21 text = self.copy()
22 text.expand_tabs()
23 indent_line = f"{character}{' ' * (_indent_size - 1)}"
24
25 re_indent = re.compile(r"^( *)(.*)$")
26 new_lines: List[Text] = []
27 add_line = new_lines.append
28 blank_lines = 0
29 for line in text.split(allow_blank=True):
30 match = re_indent.match(line.plain)
31 if not match or not match.group(2):
32 blank_lines += 1
33 continue
34 indent = match.group(1)
35 full_indents, remaining_space = divmod(len(indent), _indent_size)
36 new_indent = f"{indent_line * full_indents}{' ' * remaining_space}"
37 line.plain = new_indent + line.plain[len(new_indent) :]
38 line.stylize(style, 0, len(new_indent))
39 if blank_lines:
40 new_lines.extend([Text(new_indent, style=style)] * blank_lines)
41 blank_lines = 0
42 add_line(line)
43 if blank_lines:
44 new_lines.extend([Text("", style=style)] * blank_lines)
45
46 new_text = text.blank_copy("\n").join(new_lines)
47 return new_text
Path 4: 1 calls (0.03)
4 (1)
'│' (1)
Style (1)
Text (1)
1def with_indent_guides(
2 self,
3 indent_size: Optional[int] = None,
4 *,
5 character: str = "│",
6 style: StyleType = "dim green",
7 ) -> "Text":
8 """Adds indent guide lines to text.
9
10 Args:
11 indent_size (Optional[int]): Size of indentation, or None to auto detect. Defaults to None.
12 character (str, optional): Character to use for indentation. Defaults to "│".
13 style (Union[Style, str], optional): Style of indent guides.
14
15 Returns:
16 Text: New text with indentation guides.
17 """
18
19 _indent_size = self.detect_indentation() if indent_size is None else indent_size
20
21 text = self.copy()
22 text.expand_tabs()
23 indent_line = f"{character}{' ' * (_indent_size - 1)}"
24
25 re_indent = re.compile(r"^( *)(.*)$")
26 new_lines: List[Text] = []
27 add_line = new_lines.append
28 blank_lines = 0
29 for line in text.split(allow_blank=True):
30 match = re_indent.match(line.plain)
31 if not match or not match.group(2):
32 blank_lines += 1
33 continue
34 indent = match.group(1)
35 full_indents, remaining_space = divmod(len(indent), _indent_size)
36 new_indent = f"{indent_line * full_indents}{' ' * remaining_space}"
37 line.plain = new_indent + line.plain[len(new_indent) :]
38 line.stylize(style, 0, len(new_indent))
39 if blank_lines:
40 new_lines.extend([Text(new_indent, style=style)] * blank_lines)
41 blank_lines = 0
42 add_line(line)
43 if blank_lines:
44 new_lines.extend([Text("", style=style)] * blank_lines)
45
46 new_text = text.blank_copy("\n").join(new_lines)
47 return new_text