Pad text to reach target width with proper alignment. Args: text: Text to pad (may contain ANSI codes) target_width: Target width in terminal columns align: Alignment mode - "left", "right", or "center" fill_char: Character to use for padding (default: space)
(text: str, target_width: int, align: str = "left", fill_char: str = " ")
| 118 | |
| 119 | |
| 120 | def pad_to_width(text: str, target_width: int, align: str = "left", fill_char: str = " ") -> str: |
| 121 | """Pad text to reach target width with proper alignment. |
| 122 | |
| 123 | Args: |
| 124 | text: Text to pad (may contain ANSI codes) |
| 125 | target_width: Target width in terminal columns |
| 126 | align: Alignment mode - "left", "right", or "center" |
| 127 | fill_char: Character to use for padding (default: space) |
| 128 | |
| 129 | Returns: |
| 130 | Padded text |
| 131 | |
| 132 | Examples: |
| 133 | >>> pad_to_width("Hello", 10) |
| 134 | 'Hello ' |
| 135 | >>> pad_to_width("你好", 10) |
| 136 | '你好 ' |
| 137 | >>> pad_to_width("Test", 10, align="center") |
| 138 | ' Test ' |
| 139 | """ |
| 140 | current_width = calculate_display_width(text) |
| 141 | |
| 142 | if current_width >= target_width: |
| 143 | return text |
| 144 | |
| 145 | padding_needed = target_width - current_width |
| 146 | |
| 147 | if align == "left": |
| 148 | return text + (fill_char * padding_needed) |
| 149 | elif align == "right": |
| 150 | return (fill_char * padding_needed) + text |
| 151 | elif align == "center": |
| 152 | left_padding = padding_needed // 2 |
| 153 | right_padding = padding_needed - left_padding |
| 154 | return (fill_char * left_padding) + text + (fill_char * right_padding) |
| 155 | else: |
| 156 | raise ValueError(f"Invalid align value: {align}. Must be 'left', 'right', or 'center'") |