Skip to content

Commit 80b5bca

Browse files
committed
improved SVG
1 parent 37cde9d commit 80b5bca

File tree

4 files changed

+23
-8
lines changed

4 files changed

+23
-8
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [12.4.4] - 2022-05-24
9+
10+
### Changed
11+
12+
- Added clipping per line to SVG output to avoid box characters overlapping
13+
- Optimized SVG output
14+
815
## [12.4.3] - 2022-05-23
916

1017
### Changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name = "rich"
33
homepage = "https://github.com/willmcgugan/rich"
44
documentation = "https://rich.readthedocs.io/en/latest/"
5-
version = "12.4.3"
5+
version = "12.4.4"
66
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
77
authors = ["Will McGugan <[email protected]>"]
88
license = "MIT"

rich/_export_format.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
<clipPath id="{unique_id}-clip-terminal">
6262
<rect x="0" y="0" width="{terminal_width}" height="{terminal_height}" />
6363
</clipPath>
64+
{lines}
6465
</defs>
6566
6667
{chrome}

rich/console.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2330,11 +2330,7 @@ def stringify(value: object) -> str:
23302330
)
23312331

23322332
with self._record_buffer_lock:
2333-
segments = list(
2334-
Segment.filter_control(
2335-
Segment.simplify(self._record_buffer),
2336-
)
2337-
)
2333+
segments = list(Segment.filter_control(self._record_buffer))
23382334
if clear:
23392335
self._record_buffer.clear()
23402336

@@ -2383,6 +2379,7 @@ def stringify(value: object) -> str:
23832379
y=y * line_height + 1.5,
23842380
width=char_width * text_length,
23852381
height=line_height + 0.25,
2382+
shape_rendering="crispEdges",
23862383
)
23872384
)
23882385

@@ -2395,10 +2392,19 @@ def stringify(value: object) -> str:
23952392
x=x * char_width,
23962393
y=y * line_height + char_height,
23972394
textLength=char_width * len(text),
2395+
clip_path=f"url(#{unique_id}-line-{y})",
23982396
)
23992397
)
24002398
x += cell_len(text)
24012399

2400+
line_offsets = [line_no * line_height + 1.5 for line_no in range(y)]
2401+
lines = "\n".join(
2402+
f"""<clipPath id="{unique_id}-line-{line_no}">
2403+
{make_tag("rect", x=0, y=offset, width=char_width * width, height=line_height + 0.25)}
2404+
</clipPath>"""
2405+
for line_no, offset in enumerate(line_offsets)
2406+
)
2407+
24022408
styles = "\n".join(
24032409
f".{unique_id}-r{rule_no} {{ {css} }}" for css, rule_no in classes.items()
24042410
)
@@ -2443,8 +2449,8 @@ def stringify(value: object) -> str:
24432449
char_width=char_width,
24442450
char_height=char_height,
24452451
line_height=line_height,
2446-
terminal_width=char_width * width,
2447-
terminal_height=(y + 1) * line_height,
2452+
terminal_width=char_width * width - 1,
2453+
terminal_height=(y + 1) * line_height - 1,
24482454
width=terminal_width + margin_width,
24492455
height=terminal_height + margin_height,
24502456
terminal_x=margin_left + padding_left,
@@ -2453,6 +2459,7 @@ def stringify(value: object) -> str:
24532459
chrome=chrome,
24542460
backgrounds=backgrounds,
24552461
matrix=matrix,
2462+
lines=lines,
24562463
)
24572464
return svg
24582465

0 commit comments

Comments
 (0)