feat(tree): Color lines by dependency type

This commit is contained in:
Ed Page 2025-02-27 16:35:00 -06:00
parent fb5407db7a
commit 9b6e11e9b0
3 changed files with 85 additions and 57 deletions

View File

@ -300,7 +300,7 @@ fn print_node<'a>(
no_dedupe: bool,
display_depth: DisplayDepth,
visited_deps: &mut HashSet<NodeId>,
levels_continue: &mut Vec<bool>,
levels_continue: &mut Vec<(anstyle::Style, bool)>,
print_stack: &mut Vec<NodeId>,
) {
let new = no_dedupe || visited_deps.insert(node_index);
@ -308,10 +308,10 @@ fn print_node<'a>(
match prefix {
Prefix::Depth => drop_print!(ws.gctx(), "{}", levels_continue.len()),
Prefix::Indent => {
if let Some((last_continues, rest)) = levels_continue.split_last() {
for continues in rest {
if let Some(((last_style, last_continues), rest)) = levels_continue.split_last() {
for (style, continues) in rest {
let c = if *continues { symbols.down } else { " " };
drop_print!(ws.gctx(), "{} ", c);
drop_print!(ws.gctx(), "{style}{c}{style:#} ");
}
let c = if *last_continues {
@ -319,7 +319,12 @@ fn print_node<'a>(
} else {
symbols.ell
};
drop_print!(ws.gctx(), "{0}{1}{1} ", c, symbols.right);
drop_print!(
ws.gctx(),
"{last_style}{0}{1}{1}{last_style:#} ",
c,
symbols.right
);
}
}
Prefix::None => {}
@ -379,7 +384,7 @@ fn print_dependencies<'a>(
no_dedupe: bool,
display_depth: DisplayDepth,
visited_deps: &mut HashSet<NodeId>,
levels_continue: &mut Vec<bool>,
levels_continue: &mut Vec<(anstyle::Style, bool)>,
print_stack: &mut Vec<NodeId>,
kind: &EdgeKind,
) {
@ -390,19 +395,23 @@ fn print_dependencies<'a>(
let name = match kind {
EdgeKind::Dep(DepKind::Normal) => None,
EdgeKind::Dep(DepKind::Build) => Some("[build-dependencies]"),
EdgeKind::Dep(DepKind::Development) => Some("[dev-dependencies]"),
EdgeKind::Dep(DepKind::Build) => {
Some(color_print::cstr!("<blue,bold>[build-dependencies]</>"))
}
EdgeKind::Dep(DepKind::Development) => {
Some(color_print::cstr!("<cyan,bold>[dev-dependencies]</>"))
}
EdgeKind::Feature => None,
};
if let Prefix::Indent = prefix {
if let Some(name) = name {
for continues in &**levels_continue {
for (style, continues) in &**levels_continue {
let c = if *continues { symbols.down } else { " " };
drop_print!(ws.gctx(), "{} ", c);
drop_print!(ws.gctx(), "{style}{c}{style:#} ");
}
drop_println!(ws.gctx(), "{}", name);
drop_println!(ws.gctx(), "{name}");
}
}
@ -433,7 +442,8 @@ fn print_dependencies<'a>(
.peekable();
while let Some(dependency) = it.next() {
levels_continue.push(it.peek().is_some());
let style = edge_line_color(dependency.kind());
levels_continue.push((style, it.peek().is_some()));
print_node(
ws,
graph,
@ -451,3 +461,16 @@ fn print_dependencies<'a>(
levels_continue.pop();
}
}
fn edge_line_color(kind: EdgeKind) -> anstyle::Style {
match kind {
EdgeKind::Dep(DepKind::Normal) => anstyle::Style::new() | anstyle::Effects::DIMMED,
EdgeKind::Dep(DepKind::Build) => {
anstyle::AnsiColor::Blue.on_default() | anstyle::Effects::BOLD
}
EdgeKind::Dep(DepKind::Development) => {
anstyle::AnsiColor::Cyan.on_default() | anstyle::Effects::BOLD
}
EdgeKind::Feature => anstyle::AnsiColor::Magenta.on_default() | anstyle::Effects::DIMMED,
}
}

View File

@ -20,13 +20,13 @@
<text xml:space="preserve" class="container fg">
<tspan x="10px" y="28px"><tspan>foo v0.1.0 ([ROOT]/foo)</tspan>
</tspan>
<tspan x="10px" y="46px"><tspan>├── a v1.0.0</tspan>
<tspan x="10px" y="46px"><tspan class="dimmed">├──</tspan><tspan> a v1.0.0</tspan>
</tspan>
<tspan x="10px" y="64px"><tspan>│ └── b v1.0.0</tspan>
<tspan x="10px" y="64px"><tspan class="dimmed"></tspan><tspan> </tspan><tspan class="dimmed">└──</tspan><tspan> b v1.0.0</tspan>
</tspan>
<tspan x="10px" y="82px"><tspan>│ └── c v1.0.0</tspan>
<tspan x="10px" y="82px"><tspan class="dimmed"></tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="dimmed">└──</tspan><tspan> c v1.0.0</tspan>
</tspan>
<tspan x="10px" y="100px"><tspan>└── b v1.0.0 </tspan><tspan class="fg-yellow dimmed">(*)</tspan>
<tspan x="10px" y="100px"><tspan class="dimmed">└──</tspan><tspan> b v1.0.0 </tspan><tspan class="fg-yellow dimmed">(*)</tspan>
</tspan>
<tspan x="10px" y="118px">
</tspan>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -2,10 +2,15 @@
<style>
.fg { fill: #AAAAAA }
.bg { background: #000000 }
.fg-blue { fill: #0000AA }
.fg-cyan { fill: #00AAAA }
.fg-magenta { fill: #AA00AA }
.container {
padding: 0 10px;
line-height: 18px;
}
.bold { font-weight: bold; }
.dimmed { opacity: 0.7; }
tspan {
font: 14px SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
white-space: pre;
@ -18,87 +23,87 @@
<text xml:space="preserve" class="container fg">
<tspan x="10px" y="28px"><tspan>foo v0.1.0 ([ROOT]/foo)</tspan>
</tspan>
<tspan x="10px" y="46px"><tspan>├── normal_a feature "default"</tspan>
<tspan x="10px" y="46px"><tspan class="dimmed">├──</tspan><tspan> normal_a feature "default"</tspan>
</tspan>
<tspan x="10px" y="64px"><tspan>│ └── normal_a v1.0.0</tspan>
<tspan x="10px" y="64px"><tspan class="dimmed"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> normal_a v1.0.0</tspan>
</tspan>
<tspan x="10px" y="82px"><tspan>│ └── normal_b feature "default"</tspan>
<tspan x="10px" y="82px"><tspan class="dimmed"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed">└──</tspan><tspan> normal_b feature "default"</tspan>
</tspan>
<tspan x="10px" y="100px"><tspan>│ └── normal_b v1.0.0</tspan>
<tspan x="10px" y="100px"><tspan class="dimmed"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> normal_b v1.0.0</tspan>
</tspan>
<tspan x="10px" y="118px"><tspan>│ └── normal_c feature "default"</tspan>
<tspan x="10px" y="118px"><tspan class="dimmed"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed">└──</tspan><tspan> normal_c feature "default"</tspan>
</tspan>
<tspan x="10px" y="136px"><tspan>│ └── normal_c v1.0.0</tspan>
<tspan x="10px" y="136px"><tspan class="dimmed"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> normal_c v1.0.0</tspan>
</tspan>
<tspan x="10px" y="154px"><tspan>│ [build-dependencies]</tspan>
<tspan x="10px" y="154px"><tspan class="dimmed"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold">[build-dependencies]</tspan>
</tspan>
<tspan x="10px" y="172px"><tspan>│ └── normal_b_build_a feature "default"</tspan>
<tspan x="10px" y="172px"><tspan class="bold dimmed"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold">└──</tspan><tspan> normal_b_build_a feature "default"</tspan>
</tspan>
<tspan x="10px" y="190px"><tspan>│ └── normal_b_build_a v1.0.0</tspan>
<tspan x="10px" y="190px"><tspan class="dimmed"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> normal_b_build_a v1.0.0</tspan>
</tspan>
<tspan x="10px" y="208px"><tspan>│ └── normal_b_build_a_normal_a feature "default"</tspan>
<tspan x="10px" y="208px"><tspan class="dimmed"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed">└──</tspan><tspan> normal_b_build_a_normal_a feature "default"</tspan>
</tspan>
<tspan x="10px" y="226px"><tspan>│ └── normal_b_build_a_normal_a v1.0.0</tspan>
<tspan x="10px" y="226px"><tspan class="dimmed"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> normal_b_build_a_normal_a v1.0.0</tspan>
</tspan>
<tspan x="10px" y="244px"><tspan>└── normal_d feature "default"</tspan>
<tspan x="10px" y="244px"><tspan class="dimmed">└──</tspan><tspan> normal_d feature "default"</tspan>
</tspan>
<tspan x="10px" y="262px"><tspan> └── normal_d v1.0.0</tspan>
<tspan x="10px" y="262px"><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> normal_d v1.0.0</tspan>
</tspan>
<tspan x="10px" y="280px"><tspan>[build-dependencies]</tspan>
<tspan x="10px" y="280px"><tspan class="fg-blue bold">[build-dependencies]</tspan>
</tspan>
<tspan x="10px" y="298px"><tspan>├── build_a feature "default"</tspan>
<tspan x="10px" y="298px"><tspan class="fg-blue bold">├──</tspan><tspan> build_a feature "default"</tspan>
</tspan>
<tspan x="10px" y="316px"><tspan>│ └── build_a v1.0.0</tspan>
<tspan x="10px" y="316px"><tspan class="fg-blue bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> build_a v1.0.0</tspan>
</tspan>
<tspan x="10px" y="334px"><tspan>│ └── build_b feature "default"</tspan>
<tspan x="10px" y="334px"><tspan class="fg-blue bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed">└──</tspan><tspan> build_b feature "default"</tspan>
</tspan>
<tspan x="10px" y="352px"><tspan>│ └── build_b v1.0.0</tspan>
<tspan x="10px" y="352px"><tspan class="fg-blue bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> build_b v1.0.0</tspan>
</tspan>
<tspan x="10px" y="370px"><tspan>│ └── build_c feature "default"</tspan>
<tspan x="10px" y="370px"><tspan class="fg-blue bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed">└──</tspan><tspan> build_c feature "default"</tspan>
</tspan>
<tspan x="10px" y="388px"><tspan>│ └── build_c v1.0.0</tspan>
<tspan x="10px" y="388px"><tspan class="fg-blue bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> build_c v1.0.0</tspan>
</tspan>
<tspan x="10px" y="406px"><tspan>│ [build-dependencies]</tspan>
<tspan x="10px" y="406px"><tspan class="fg-blue bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold">[build-dependencies]</tspan>
</tspan>
<tspan x="10px" y="424px"><tspan>│ └── build_b_build_a feature "default"</tspan>
<tspan x="10px" y="424px"><tspan class="fg-blue bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold">└──</tspan><tspan> build_b_build_a feature "default"</tspan>
</tspan>
<tspan x="10px" y="442px"><tspan>│ └── build_b_build_a v1.0.0</tspan>
<tspan x="10px" y="442px"><tspan class="fg-blue bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> build_b_build_a v1.0.0</tspan>
</tspan>
<tspan x="10px" y="460px"><tspan>│ └── build_b_build_a_normal_a feature "default"</tspan>
<tspan x="10px" y="460px"><tspan class="fg-blue bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed">└──</tspan><tspan> build_b_build_a_normal_a feature "default"</tspan>
</tspan>
<tspan x="10px" y="478px"><tspan>│ └── build_b_build_a_normal_a v1.0.0</tspan>
<tspan x="10px" y="478px"><tspan class="fg-blue bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> build_b_build_a_normal_a v1.0.0</tspan>
</tspan>
<tspan x="10px" y="496px"><tspan>└── build_d feature "default"</tspan>
<tspan x="10px" y="496px"><tspan class="fg-blue bold">└──</tspan><tspan> build_d feature "default"</tspan>
</tspan>
<tspan x="10px" y="514px"><tspan> └── build_d v1.0.0</tspan>
<tspan x="10px" y="514px"><tspan class="fg-blue bold"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> build_d v1.0.0</tspan>
</tspan>
<tspan x="10px" y="532px"><tspan>[dev-dependencies]</tspan>
<tspan x="10px" y="532px"><tspan class="fg-cyan bold">[dev-dependencies]</tspan>
</tspan>
<tspan x="10px" y="550px"><tspan>├── dev_a feature "default"</tspan>
<tspan x="10px" y="550px"><tspan class="fg-cyan bold">├──</tspan><tspan> dev_a feature "default"</tspan>
</tspan>
<tspan x="10px" y="568px"><tspan>│ └── dev_a v1.0.0</tspan>
<tspan x="10px" y="568px"><tspan class="fg-cyan bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> dev_a v1.0.0</tspan>
</tspan>
<tspan x="10px" y="586px"><tspan>│ └── dev_b feature "default"</tspan>
<tspan x="10px" y="586px"><tspan class="fg-cyan bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed">└──</tspan><tspan> dev_b feature "default"</tspan>
</tspan>
<tspan x="10px" y="604px"><tspan>│ └── dev_b v1.0.0</tspan>
<tspan x="10px" y="604px"><tspan class="fg-cyan bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> dev_b v1.0.0</tspan>
</tspan>
<tspan x="10px" y="622px"><tspan>│ └── dev_c feature "default"</tspan>
<tspan x="10px" y="622px"><tspan class="fg-cyan bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed">└──</tspan><tspan> dev_c feature "default"</tspan>
</tspan>
<tspan x="10px" y="640px"><tspan>│ └── dev_c v1.0.0</tspan>
<tspan x="10px" y="640px"><tspan class="fg-cyan bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> dev_c v1.0.0</tspan>
</tspan>
<tspan x="10px" y="658px"><tspan>│ [build-dependencies]</tspan>
<tspan x="10px" y="658px"><tspan class="fg-cyan bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold">[build-dependencies]</tspan>
</tspan>
<tspan x="10px" y="676px"><tspan>│ └── dev_b_build_a feature "default"</tspan>
<tspan x="10px" y="676px"><tspan class="fg-cyan bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold">└──</tspan><tspan> dev_b_build_a feature "default"</tspan>
</tspan>
<tspan x="10px" y="694px"><tspan>│ └── dev_b_build_a v1.0.0</tspan>
<tspan x="10px" y="694px"><tspan class="fg-cyan bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> dev_b_build_a v1.0.0</tspan>
</tspan>
<tspan x="10px" y="712px"><tspan>│ └── dev_b_build_a_normal_a feature "default"</tspan>
<tspan x="10px" y="712px"><tspan class="fg-cyan bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed">└──</tspan><tspan> dev_b_build_a_normal_a feature "default"</tspan>
</tspan>
<tspan x="10px" y="730px"><tspan>│ └── dev_b_build_a_normal_a v1.0.0</tspan>
<tspan x="10px" y="730px"><tspan class="fg-cyan bold"></tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="fg-blue bold"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed"> </tspan><tspan> </tspan><tspan class="dimmed"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> dev_b_build_a_normal_a v1.0.0</tspan>
</tspan>
<tspan x="10px" y="748px"><tspan>└── dev_d feature "default"</tspan>
<tspan x="10px" y="748px"><tspan class="fg-cyan bold">└──</tspan><tspan> dev_d feature "default"</tspan>
</tspan>
<tspan x="10px" y="766px"><tspan> └── dev_d v1.0.0</tspan>
<tspan x="10px" y="766px"><tspan class="fg-cyan bold"> </tspan><tspan> </tspan><tspan class="fg-magenta dimmed">└──</tspan><tspan> dev_d v1.0.0</tspan>
</tspan>
<tspan x="10px" y="784px">
</tspan>

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 12 KiB