Merge branch 'master' into fix-arrowhead

This commit is contained in:
Júlio César Batista 2022-11-09 15:40:13 -03:00
commit 9bb0ad203a
37 changed files with 3716 additions and 632 deletions

View file

@ -828,12 +828,14 @@ func (g *Graph) SetDimensions(mtexts []*d2target.MText, ruler *textmeasure.Ruler
}
var dims *d2target.TextDimensions
var innerLabelPadding = 5
if obj.Attributes.Shape.Value == d2target.ShapeText {
var err error
dims, err = getMarkdownDimensions(mtexts, ruler, obj.Text())
if err != nil {
return err
}
innerLabelPadding = 0
} else {
dims = getTextDimensions(mtexts, ruler, obj.Text())
}
@ -855,7 +857,6 @@ func (g *Graph) SetDimensions(mtexts []*d2target.MText, ruler *textmeasure.Ruler
}
}
const innerLabelPadding = 5
dims.Width += innerLabelPadding
dims.Height += innerLabelPadding
obj.LabelDimensions = *dims

View file

@ -73,7 +73,7 @@ func Layout(ctx context.Context, d2graph *d2graph.Graph) (err error) {
loadScript := ""
for _, obj := range d2graph.Objects {
id := obj.AbsID()
loadScript += generateAddNodeLine(id, obj.Attributes.Label.Value, int(obj.Width), int(obj.Height))
loadScript += generateAddNodeLine(id, int(obj.Width), int(obj.Height))
if obj.Parent != d2graph.Root {
loadScript += generateAddParentLine(id, obj.Parent.AbsID())
}
@ -93,7 +93,7 @@ func Layout(ctx context.Context, d2graph *d2graph.Graph) (err error) {
// for `b <- a`, edge.Edge is `a -> b` and we expect this routing result
src, dst = dst, src
}
loadScript += generateAddEdgeLine(src.AbsID(), dst.AbsID(), edge.AbsID(), edge.Attributes.Label.Value)
loadScript += generateAddEdgeLine(src.AbsID(), dst.AbsID(), edge.AbsID())
}
if debugJS {
@ -234,15 +234,15 @@ func setGraphAttrs(attrs dagreGraphAttrs) string {
)
}
func generateAddNodeLine(id, label string, width, height int) string {
return fmt.Sprintf("g.setNode(`%s`, { label: `%s`, width: %d, height: %d });\n", id, label, width, height)
func generateAddNodeLine(id string, width, height int) string {
return fmt.Sprintf("g.setNode(`%s`, { width: %d, height: %d });\n", id, width, height)
}
func generateAddParentLine(childID, parentID string) string {
return fmt.Sprintf("g.setParent(`%s`, `%s`);\n", childID, parentID)
}
func generateAddEdgeLine(fromID, toID, edgeID, label string) string {
func generateAddEdgeLine(fromID, toID, edgeID string) string {
// in dagre v is from, w is to, name is to uniquely identify
return fmt.Sprintf("g.setEdge({v:`%s`, w:`%s`, name:`%s`, label:`%s`});\n", fromID, toID, edgeID, label)
return fmt.Sprintf("g.setEdge({v:`%s`, w:`%s`, name:`%s` });\n", fromID, toID, edgeID)
}

View file

@ -717,7 +717,17 @@ func embedFonts(buf *bytes.Buffer) {
break
}
}
if strings.Contains(content, `class="text-mono"`) {
triggers = []string{
`class="text-mono"`,
`<pre>`,
`<code>`,
`<kbd>`,
`<samp>`,
}
for _, t := range triggers {
if strings.Contains(content, t) {
fmt.Fprintf(buf, `
.text-mono {
font-family: "font-mono";
@ -727,6 +737,8 @@ func embedFonts(buf *bytes.Buffer) {
src: url("%s");
}`,
d2fonts.FontEncodings[d2fonts.SourceCodePro.Font(0, d2fonts.FONT_STYLE_REGULAR)])
break
}
}
buf.WriteString(`]]></style>`)

View file

@ -8,6 +8,18 @@
font-family: "font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "font-mono";
font-size: 1em;
}
.md {
tab-size: 4;
}
/* based on https://github.com/sindresorhus/github-markdown-css */
@media (prefers-color-scheme: dark) {
.md {
@ -131,14 +143,6 @@
background-color: var(--color-canvas-default);
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: monospace, monospace;
font-size: 1em;
}
.md figure {
margin: 1em 40px;
}
@ -254,9 +258,6 @@
.md kbd {
display: inline-block;
padding: 3px 5px;
font: 11px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
line-height: 10px;
color: var(--color-fg-default);
vertical-align: middle;
background-color: var(--color-canvas-subtle);
@ -341,19 +342,9 @@
margin-left: 0;
}
.md tt,
.md code {
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
}
.md pre {
margin-top: 0;
margin-bottom: 0;
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
word-wrap: normal;
}

View file

@ -17,6 +17,7 @@ import (
var markdownRenderer goldmark.Markdown
// these are css values from github-markdown.css so we can accurately compute the rendered dimensions
const (
MarkdownFontSize = d2fonts.FONT_SIZE_M
MarkdownLineHeight = 1.5
@ -38,6 +39,11 @@ const (
Padding_pre = 16
MarginBottom_pre = 16
LineHeight_pre = 1.45
FontSize_pre_code_em = 0.85
PaddingTopBottom_code_em = 0.2
PaddingLeftRight_code_em = 0.4
PaddingLR_blockquote_em = 1.
MarginBottom_blockquote = 16
@ -96,9 +102,11 @@ func MeasureMarkdown(mdText string, ruler *Ruler) (width, height int, err error)
{
originalLineHeight := ruler.LineHeightFactor
ruler.boundsWithDot = true
ruler.LineHeightFactor = MarkdownLineHeight
defer func() {
ruler.LineHeightFactor = originalLineHeight
ruler.boundsWithDot = false
}()
}
@ -185,6 +193,11 @@ func hasAncestorElement(n *html.Node, elType string) bool {
// measures node dimensions to match rendering with styles in github-markdown.css
func (ruler *Ruler) measureNode(depth int, n *html.Node, font d2fonts.Font) (width, height, marginTop, marginBottom float64) {
var parentElementType string
if n.Parent != nil && n.Parent.Type == html.ElementNode {
parentElementType = n.Parent.Data
}
switch n.Type {
case html.TextNode:
if strings.TrimSpace(n.Data) == "" {
@ -198,10 +211,11 @@ func (ruler *Ruler) measureNode(depth int, n *html.Node, font d2fonts.Font) (wid
spaceWidth := ruler.atlases[font].glyph(spaceRune).advance
str := n.Data
hasCodeParent := n.Parent != nil && n.Parent.Type == html.ElementNode && (n.Parent.Data == "pre" || n.Parent.Data == "code")
if !hasCodeParent {
str = strings.ReplaceAll(n.Data, "\n", " ")
}
isCode := parentElementType == "pre" || parentElementType == "code"
if !isCode {
str = strings.ReplaceAll(str, "\n", " ")
str = strings.ReplaceAll(str, "\t", " ")
if strings.HasPrefix(str, " ") {
str = strings.TrimPrefix(str, " ")
if hasPrev(n) {
@ -214,16 +228,22 @@ func (ruler *Ruler) measureNode(depth int, n *html.Node, font d2fonts.Font) (wid
spaceWidths += spaceWidth
}
}
w, h := ruler.MeasurePrecise(font, str)
w += spaceWidths
// fmt.Printf("%d:%s width %v height %v fontStyle %s\n", depth, n.Data, w, h, font.Style)
if h > 0 && h < MarkdownLineHeightPx {
h = MarkdownLineHeightPx
}
return w, h, 0, 0
if parentElementType == "pre" {
originalLineHeight := ruler.LineHeightFactor
ruler.LineHeightFactor = LineHeight_pre
defer func() {
ruler.LineHeightFactor = originalLineHeight
}()
}
w, h := ruler.MeasurePrecise(font, str)
if isCode {
w *= FontSize_pre_code_em
h *= FontSize_pre_code_em
}
return w + spaceWidths, h, 0, 0
case html.ElementNode:
// fmt.Printf("%d: %v node\n", depth, n.Data)
switch n.Data {
case "h1", "h2", "h3", "h4", "h5", "h6":
font = HeaderFonts[n.Data]
@ -237,7 +257,8 @@ func (ruler *Ruler) measureNode(depth int, n *html.Node, font d2fonts.Font) (wid
case "b", "strong":
font.Style = d2fonts.FONT_STYLE_BOLD
case "pre", "code":
// TODO monospaced font
font.Family = d2fonts.SourceCodePro
font.Style = d2fonts.FONT_STYLE_REGULAR
}
if n.FirstChild != nil {
@ -284,10 +305,10 @@ func (ruler *Ruler) measureNode(depth int, n *html.Node, font d2fonts.Font) (wid
switch n.Data {
case "blockquote":
width += float64(font.Size) * (2*PaddingLR_blockquote_em + BorderLeft_blockquote_em)
width += (2*PaddingLR_blockquote_em + BorderLeft_blockquote_em) * float64(font.Size)
marginBottom = go2.Max(marginBottom, MarginBottom_blockquote)
case "p":
if n.Parent != nil && n.Parent.Type == html.ElementNode && n.Parent.Data == "li" {
if parentElementType == "li" {
marginTop = go2.Max(marginTop, MarginTop_li_p)
}
marginBottom = go2.Max(marginBottom, MarginBottom_p)
@ -296,7 +317,7 @@ func (ruler *Ruler) measureNode(depth int, n *html.Node, font d2fonts.Font) (wid
marginBottom = go2.Max(marginBottom, MarginBottom_h)
switch n.Data {
case "h1", "h2":
height += float64(HeaderToFontSize[n.Data]) * PaddingBottom_h1_h2_em
height += PaddingBottom_h1_h2_em * float64(font.Size)
}
case "li":
width += PaddingLeft_ul_ol
@ -314,12 +335,20 @@ func (ruler *Ruler) measureNode(depth int, n *html.Node, font d2fonts.Font) (wid
width += 2 * Padding_pre
height += 2 * Padding_pre
marginBottom = go2.Max(marginBottom, MarginBottom_pre)
case "code":
if parentElementType != "pre" {
width += 2 * PaddingLeftRight_code_em * float64(font.Size)
height += 2 * PaddingTopBottom_code_em * float64(font.Size)
}
case "hr":
height += Height_hr
marginTop = go2.Max(marginTop, MarginTopBottom_hr)
marginBottom = go2.Max(marginBottom, MarginTopBottom_hr)
}
// fmt.Printf("%d:%s width %v height %v mt %v mb %v\n", depth, n.Data, width, height, marginTop, marginBottom)
if height > 0 && height < MarkdownLineHeightPx {
height = MarkdownLineHeightPx
}
}
return width, height, marginTop, marginBottom
}

View file

@ -14,6 +14,8 @@ import (
"oss.terrastruct.com/d2/lib/geo"
)
const TAB_SIZE = 4
// ASCII is a set of all ASCII runes. These runes are codepoints from 32 to 127 inclusive.
var ASCII []rune
@ -77,6 +79,9 @@ type Ruler struct {
buf []byte
prevR rune
bounds *rect
// when drawing text also union Ruler.bounds with Dot
boundsWithDot bool
}
// New creates a new Ruler capable of drawing runes contained in the provided atlas. Orig and Dot
@ -118,7 +123,7 @@ func NewRuler() (*Ruler, error) {
atlas := NewAtlas(face, ASCII)
atlases[font] = atlas
lineHeights[font] = atlas.lineHeight
tabWidths[font] = atlas.glyph(' ').advance * 4
tabWidths[font] = atlas.glyph(' ').advance * TAB_SIZE
}
}
}
@ -199,10 +204,15 @@ func (txt *Ruler) drawBuf(font d2fonts.Font) {
txt.prevR = r
if txt.boundsWithDot {
txt.bounds = txt.bounds.union(&rect{txt.Dot, txt.Dot})
txt.bounds = txt.bounds.union(bounds)
} else {
if txt.bounds.w()*txt.bounds.h() == 0 {
txt.bounds = bounds
} else {
txt.bounds = txt.bounds.union(bounds)
}
}
}
}

View file

@ -88,13 +88,19 @@ _italics are all measured correctly_
`: {214, 24},
`
**bold is measured correctly**
`: {187, 24},
`: {188, 24},
`
**Note:** This document
`: {141, 24},
`: {143, 24},
`
**Note:**
`: {37, 24},
`: {39, 24},
`a`: {9, 24},
`w`: {12, 24},
`ww`: {24, 24},
"`inline code`": {103, 24},
"`code`": {46, 24},
"`a`": {21, 24},
}
func TestTextMeasureMarkdown(t *testing.T) {

View file

@ -677,6 +677,41 @@ x -> hey -> y`,
c -- a: {style.stroke-width: 7}
Oval <-> c`,
},
{
name: "md_code_inline",
script: `md: |md
` + "`code`" + `
|
a -> md -> b
`,
},
{
name: "md_code_block_fenced",
script: `md: |md
` + "```" + `
{
fenced: "block",
of: "json",
}
` + "```" + `
|
a -> md -> b
`,
},
{
name: "md_code_block_indented",
script: `md: |md
a line of text and an
{
indented: "block",
of: "json",
}
|
a -> md -> b
`,
},
}
runa(t, tcs)

View file

@ -8,8 +8,8 @@
"x": 0,
"y": 0
},
"width": 1123,
"height": 1659,
"width": 1117,
"height": 1654,
"level": 1,
"opacity": 1,
"strokeDash": 0,
@ -46,8 +46,8 @@
"x": 40,
"y": 50
},
"width": 779,
"height": 1559,
"width": 776,
"height": 1554,
"level": 2,
"opacity": 1,
"strokeDash": 0,
@ -84,8 +84,8 @@
"x": 80,
"y": 878
},
"width": 513,
"height": 681,
"width": 510,
"height": 676,
"level": 3,
"opacity": 1,
"strokeDash": 0,
@ -122,7 +122,7 @@
"x": 120,
"y": 928
},
"width": 357,
"width": 355,
"height": 226,
"level": 4,
"opacity": 1,
@ -157,11 +157,11 @@
"id": "aa.bb.cc.dd.ee",
"type": "text",
"pos": {
"x": 230,
"y": 1027
"x": 232,
"y": 1029
},
"width": 21,
"height": 29,
"width": 16,
"height": 24,
"level": 5,
"opacity": 1,
"strokeDash": 0,
@ -187,14 +187,14 @@
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 21,
"labelHeight": 29
"labelWidth": 16,
"labelHeight": 24
},
{
"id": "aa.bb.cc.dd.ff",
"type": "",
"pos": {
"x": 311,
"x": 308,
"y": 978
},
"width": 117,
@ -232,11 +232,11 @@
"id": "aa.bb.cc.gg",
"type": "text",
"pos": {
"x": 408,
"x": 409,
"y": 1254
},
"width": 22,
"height": 29,
"width": 17,
"height": 24,
"level": 4,
"opacity": 1,
"strokeDash": 0,
@ -262,15 +262,15 @@
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 22,
"labelHeight": 29
"labelWidth": 17,
"labelHeight": 24
},
{
"id": "aa.bb.cc.hh",
"type": "",
"pos": {
"x": 357,
"y": 1383
"x": 356,
"y": 1378
},
"width": 123,
"height": 126,
@ -383,8 +383,8 @@
"id": "aa.bb.kk",
"type": "oval",
"pos": {
"x": 643,
"y": 1383
"x": 641,
"y": 1378
},
"width": 126,
"height": 126,
@ -421,7 +421,7 @@
"id": "aa.ll",
"type": "",
"pos": {
"x": 919,
"x": 915,
"y": 652
},
"width": 114,
@ -459,7 +459,7 @@
"id": "aa.mm",
"type": "cylinder",
"pos": {
"x": 906,
"x": 902,
"y": 426
},
"width": 131,
@ -497,11 +497,11 @@
"id": "aa.nn",
"type": "text",
"pos": {
"x": 869,
"y": 1432
"x": 867,
"y": 1429
},
"width": 21,
"height": 29,
"width": 18,
"height": 24,
"level": 2,
"opacity": 1,
"strokeDash": 0,
@ -527,15 +527,15 @@
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 21,
"labelHeight": 29
"labelWidth": 18,
"labelHeight": 24
},
{
"id": "aa.oo",
"type": "",
"pos": {
"x": 950,
"y": 1383
"x": 945,
"y": 1378
},
"width": 123,
"height": 126,
@ -597,19 +597,19 @@
"route": [
{
"x": 240,
"y": 1055.5
"y": 1053
},
{
"x": 240,
"y": 1134.3
"y": 1133.8
},
{
"x": 273.55,
"y": 1216.1061538461538
"x": 273.8,
"y": 1215.8
},
{
"x": 407.75,
"y": 1264.5307692307692
"x": 409,
"y": 1263
}
],
"isCurve": true,
@ -643,20 +643,20 @@
"labelPercentage": 0,
"route": [
{
"x": 418.75,
"y": 1283
"x": 417.5,
"y": 1278
},
{
"x": 418.75,
"y": 1323
"x": 417.5,
"y": 1318
},
{
"x": 418.75,
"y": 1343
"x": 417.5,
"y": 1338
},
{
"x": 418.75,
"y": 1383
"x": 417.5,
"y": 1378
}
],
"isCurve": true,
@ -785,20 +785,20 @@
"labelPercentage": 0,
"route": [
{
"x": 918.5,
"y": 723.757307953773
"x": 914.5,
"y": 723.8051948051948
},
{
"x": 839.3,
"y": 735.757307953773
"x": 836.1,
"y": 735.8051948051948
},
{
"x": 898.7,
"y": 726.757307953773
"x": 894.9,
"y": 726.8051948051948
},
{
"x": 819.5,
"y": 738.757307953773
"x": 816.5,
"y": 738.8051948051948
}
],
"isCurve": true,
@ -832,11 +832,11 @@
"labelPercentage": 0,
"route": [
{
"x": 906,
"x": 902,
"y": 500
},
{
"x": 405.2,
"x": 404.4,
"y": 581.6
},
{
@ -891,19 +891,19 @@
"labelPercentage": 0,
"route": [
{
"x": 974,
"x": 970,
"y": 552
},
{
"x": 975.2,
"x": 971.2,
"y": 592
},
{
"x": 975.5,
"x": 971.5,
"y": 612
},
{
"x": 975.5,
"x": 971.5,
"y": 652
}
],
@ -938,20 +938,20 @@
"labelPercentage": 0,
"route": [
{
"x": 906,
"x": 902,
"y": 500
},
{
"x": 836.2,
"y": 512.2920537428023
"x": 833.8,
"y": 512.3482425646968
},
{
"x": 888.55,
"y": 503.07301343570055
"x": 884.95,
"y": 503.08706064117416
},
{
"x": 818.75,
"y": 515.3650671785028
"x": 816.75,
"y": 515.4353032058709
}
],
"isCurve": true,
@ -985,67 +985,67 @@
"labelPercentage": 0,
"route": [
{
"x": 918.5,
"y": 729.0633187772926
"x": 914.5,
"y": 729.1095290251917
},
{
"x": 597.7,
"y": 808.2126637554585
"x": 594.9,
"y": 808.2219058050383
},
{
"x": 517.5,
"x": 515,
"y": 838
},
{
"x": 517.5,
"x": 515,
"y": 853
},
{
"x": 517.5,
"x": 515,
"y": 868
},
{
"x": 517.5,
"x": 515,
"y": 888
},
{
"x": 517.5,
"x": 515,
"y": 903
},
{
"x": 517.5,
"x": 515,
"y": 918
},
{
"x": 517.5,
"x": 515,
"y": 950.6
},
{
"x": 517.5,
"x": 515,
"y": 984.5
},
{
"x": 517.5,
"x": 515,
"y": 1018.4
},
{
"x": 517.5,
"x": 515,
"y": 1063.6
},
{
"x": 517.5,
"x": 515,
"y": 1097.5
},
{
"x": 517.5,
"x": 515,
"y": 1131.4
},
{
"x": 499.9,
"x": 497.2,
"y": 1215.4
},
{
"x": 429.5,
"x": 426,
"y": 1261
}
],
@ -1080,11 +1080,11 @@
"labelPercentage": 0,
"route": [
{
"x": 906,
"x": 902,
"y": 476
},
{
"x": 501.2,
"x": 500.4,
"y": 396
},
{
@ -1127,20 +1127,20 @@
"labelPercentage": 0,
"route": [
{
"x": 378.75,
"x": 377.5,
"y": 878
},
{
"x": 378.75,
"x": 377.5,
"y": 838
},
{
"x": 486.7,
"y": 807.5586929199833
"x": 484.9,
"y": 807.5686868686869
},
{
"x": 918.5,
"y": 725.7934645999162
"x": 914.5,
"y": 725.8434343434343
}
],
"isCurve": true,
@ -1194,12 +1194,12 @@
"y": 466.4
},
{
"x": 471.7,
"y": 622.5070674248578
"x": 470.9,
"y": 622.493376941946
},
{
"x": 918.5,
"y": 704.5353371242892
"x": 914.5,
"y": 704.4668847097302
}
],
"isCurve": true,

View file

@ -2,7 +2,7 @@
<svg
style="background: white;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="1323" height="1859" viewBox="-100 -100 1323 1859"><style type="text/css">
width="1317" height="1854" viewBox="-100 -100 1317 1854"><style type="text/css">
<![CDATA[
.shape {
shape-rendering: geometricPrecision;
@ -22,6 +22,18 @@ width="1323" height="1859" viewBox="-100 -100 1323 1859"><style type="text/css">
font-family: "font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "font-mono";
font-size: 1em;
}
.md {
tab-size: 4;
}
/* based on https://github.com/sindresorhus/github-markdown-css */
@media (prefers-color-scheme: dark) {
.md {
@ -145,14 +157,6 @@ width="1323" height="1859" viewBox="-100 -100 1323 1859"><style type="text/css">
background-color: var(--color-canvas-default);
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: monospace, monospace;
font-size: 1em;
}
.md figure {
margin: 1em 40px;
}
@ -268,9 +272,6 @@ width="1323" height="1859" viewBox="-100 -100 1323 1859"><style type="text/css">
.md kbd {
display: inline-block;
padding: 3px 5px;
font: 11px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
line-height: 10px;
color: var(--color-fg-default);
vertical-align: middle;
background-color: var(--color-canvas-subtle);
@ -355,19 +356,9 @@ width="1323" height="1859" viewBox="-100 -100 1323 1859"><style type="text/css">
margin-left: 0;
}
.md tt,
.md code {
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
}
.md pre {
margin-top: 0;
margin-bottom: 0;
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
word-wrap: normal;
}
@ -797,34 +788,34 @@ width="1323" height="1859" viewBox="-100 -100 1323 1859"><style type="text/css">
.md .contains-task-list:dir(rtl) .task-list-item-checkbox {
margin: 0 -1.6em 0.25em 0.2em;
}
</style><rect class="shape" x="0" y="0" width="1123" height="1659" style="fill:#E3E9FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="561.500000" y="33.000000" style="text-anchor:middle;font-size:28px;fill:black">aa</text><rect class="shape" x="40" y="50" width="779" height="1559" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="429.500000" y="79.000000" style="text-anchor:middle;font-size:24px;fill:black">bb</text><rect class="shape" x="919" y="652" width="114" height="126" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="976.000000" y="718.000000" style="text-anchor:middle;font-size:16px;fill:black">ll</text><path class="shape" d="M 906 450 C 906 426 964.95 426 971.5 426 C 978.05 426 1037 426 1037 450 V 528 C 1037 552 978.05 552 971.5 552 C 964.95 552 906 552 906 528 V 450 Z" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><path class="shape" d="M 906 450 C 906 474 964.95 474 971.5 474 C 978.05 474 1037 474 1037 450" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="971.500000" y="504.000000" style="text-anchor:middle;font-size:16px;fill:black">mm</text><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="869.000000" y="1432.000000" width="21" height="29"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><p>nn</p>
</div></foreignObject></g><rect class="shape" x="950" y="1383" width="123" height="126" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="1011.500000" y="1449.000000" style="text-anchor:middle;font-size:16px;fill:black">oo</text><rect class="shape" x="80" y="878" width="513" height="681" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="336.500000" y="903.000000" style="text-anchor:middle;font-size:20px;fill:black">cc</text><path class="shape" d="M 106 100 L 256 100 L 256 145.2 L 473 145.2 L 473 326 L 106 326 Z" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="289.500000" y="125.000000" style="text-anchor:middle;font-size:20px;fill:black">ii</text><ellipse class="shape" cx="706.000000" cy="1446.000000" rx="63.000000" ry="63.000000" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="706.000000" y="1449.000000" style="text-anchor:middle;font-size:16px;fill:black">kk</text><rect class="shape" x="120" y="928" width="357" height="226" style="fill:#FFFFFF;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="298.500000" y="949.000000" style="text-anchor:middle;font-size:16px;fill:black">dd</text><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="408.000000" y="1254.000000" width="22" height="29"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><p>gg</p>
</div></foreignObject></g><rect class="shape" x="357" y="1383" width="123" height="126" style="fill:#FFFFFF;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="418.500000" y="1449.000000" style="text-anchor:middle;font-size:16px;fill:black">hh</text><path class="shape" d="M 300.5 276 C 300.0519 276 299.7532 275.8362 299.4545 275.5085 L 243.4481 214.2289 C 242.8507 213.5735 242.8507 212.5904 243.4481 211.935 L 299.4545 150.4915 C 300.0519 149.8361 300.948 149.8361 301.5454 150.4915 L 357.5519 211.9349 C 358.1493 212.5903 358.1493 213.5734 357.5519 214.2288 L 301.5455 275.5085 C 301.2468 275.8362 300.9481 276 300.5 276 Z" style="fill:#CFD2DD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="300.500000" y="216.000000" style="text-anchor:middle;font-size:16px;fill:black">jj</text><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="230.000000" y="1027.000000" width="21" height="29"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><p>ee</p>
</div></foreignObject></g><rect class="shape" x="311" y="978" width="117" height="126" style="fill:#FFFFFF;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="369.500000" y="1044.000000" style="text-anchor:middle;font-size:16px;fill:black">ff</text><mask id="mask-3834907066" maskUnits="userSpaceOnUse" x="238.000000" y="1053.500000" width="171.750000" height="213.030769">
<rect x="238.000000" y="1053.500000" width="171.750000" height="213.030769" fill="white"></rect>
<rect x="261.000000" y="1194.000000" width="15" height="21" fill="black"></rect>
</mask><path d="M 240.000000 1057.500000 C 240.000000 1134.300000 273.550000 1216.106154 405.868729 1263.851933" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" mask="url(#mask-3834907066)" /><text class="text-italic" x="268.500000" y="1210.000000" style="text-anchor:middle;font-size:16px;fill:black">11</text><mask id="mask-1342911600" maskUnits="userSpaceOnUse" x="410.000000" y="1281.000000" width="17.000000" height="104.000000">
<rect x="410.000000" y="1281.000000" width="17.000000" height="104.000000" fill="white"></rect>
<rect x="410.000000" y="1323.000000" width="17" height="21" fill="black"></rect>
</mask><path d="M 418.750000 1285.000000 C 418.750000 1323.000000 418.750000 1343.000000 418.750000 1381.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" mask="url(#mask-1342911600)" /><text class="text-italic" x="418.500000" y="1339.000000" style="text-anchor:middle;font-size:16px;fill:black">22</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 200.000000 328.000000 C 200.000000 366.000000 200.000000 398.600000 200.000000 432.500000 C 200.000000 466.400000 200.000000 511.600000 200.000000 545.500000 C 200.000000 579.400000 200.000000 624.600000 200.000000 658.500000 C 200.000000 692.400000 200.000000 737.600000 200.000000 771.500000 C 200.000000 805.400000 200.000000 888.000000 200.000000 924.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><marker id="mk-2510427236" markerWidth="10.000000" markerHeight="12.000000" refX="3.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="10.000000,0.000000 0.000000,6.000000 10.000000,12.000000" /> </marker><mask id="mask-2288667663" maskUnits="userSpaceOnUse" x="797.500000" y="697.757308" width="143.000000" height="67.000000">
<rect x="797.500000" y="697.757308" width="143.000000" height="67.000000" fill="white"></rect>
<rect x="861.000000" y="721.000000" width="17" height="21" fill="black"></rect>
</mask><path d="M 914.545138 724.356529 C 839.300000 735.757308 898.700000 726.757308 823.454862 738.158086" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-start="url(#mk-2510427236)" marker-end="url(#mk-3990223579)" mask="url(#mask-2288667663)" /><text class="text-italic" x="869.500000" y="737.000000" style="text-anchor:middle;font-size:16px;fill:black">33</text><mask id="mask-2170131283" maskUnits="userSpaceOnUse" x="268.000000" y="486.000000" width="650.000000" height="406.000000">
<rect x="268.000000" y="486.000000" width="650.000000" height="406.000000" fill="white"></rect>
<rect x="457.000000" y="561.000000" width="16" height="21" fill="black"></rect>
</mask><path d="M 904.026032 500.321637 C 405.200000 581.600000 280.000000 624.600000 280.000000 658.500000 C 280.000000 692.400000 280.000000 838.000000 280.000000 874.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#mask-2170131283)" /><text class="text-italic" x="465.000000" y="577.000000" style="text-anchor:middle;font-size:16px;fill:black">44</text><path d="M 974.059973 553.999101 C 975.200000 592.000000 975.500000 612.000000 975.500000 648.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><mask id="mask-3699877661" maskUnits="userSpaceOnUse" x="796.750000" y="474.000000" width="131.250000" height="67.365067">
<rect x="796.750000" y="474.000000" width="131.250000" height="67.365067" fill="white"></rect>
<rect x="854.000000" y="497.000000" width="16" height="21" fill="black"></rect>
</mask><path d="M 902.060619 500.693740 C 836.200000 512.292054 888.550000 503.073013 822.689381 514.671327" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-start="url(#mk-2510427236)" marker-end="url(#mk-3990223579)" mask="url(#mask-3699877661)" /><text class="text-italic" x="862.000000" y="513.000000" style="text-anchor:middle;font-size:16px;fill:black">55</text><path d="M 914.616456 730.021486 C 597.700000 808.212664 517.500000 838.000000 517.500000 853.000000 C 517.500000 868.000000 517.500000 888.000000 517.500000 903.000000 C 517.500000 918.000000 517.500000 950.600000 517.500000 984.500000 C 517.500000 1018.400000 517.500000 1063.600000 517.500000 1097.500000 C 517.500000 1131.400000 499.900000 1215.400000 432.857257 1258.825413" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-start="url(#mk-2510427236)" marker-end="url(#mk-3990223579)" /><mask id="mask-3134112715" maskUnits="userSpaceOnUse" x="388.000000" y="312.000000" width="530.000000" height="178.000000">
<rect x="388.000000" y="312.000000" width="530.000000" height="178.000000" fill="white"></rect>
<rect x="624.000000" y="411.000000" width="16" height="21" fill="black"></rect>
</mask><path d="M 902.075898 475.224486 C 501.200000 396.000000 400.000000 366.000000 400.000000 328.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-start="url(#mk-2510427236)" mask="url(#mask-3134112715)" /><text class="text-italic" x="632.000000" y="427.000000" style="text-anchor:middle;font-size:16px;fill:black">66</text><mask id="mask-3003327047" maskUnits="userSpaceOnUse" x="366.750000" y="711.793465" width="563.750000" height="180.206535">
<rect x="366.750000" y="711.793465" width="563.750000" height="180.206535" fill="white"></rect>
<rect x="620.000000" y="770.000000" width="16" height="21" fill="black"></rect>
</mask><path d="M 378.750000 874.000000 C 378.750000 838.000000 486.700000 807.558693 916.534920 726.165570" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-start="url(#mk-2510427236)" mask="url(#mask-3003327047)" /><text class="text-italic" x="628.000000" y="786.000000" style="text-anchor:middle;font-size:16px;fill:black">77</text><mask id="mask-4288302333" maskUnits="userSpaceOnUse" x="338.000000" y="300.000000" width="602.500000" height="430.535337">
<rect x="338.000000" y="300.000000" width="602.500000" height="430.535337" fill="white"></rect>
<rect x="524.000000" y="623.000000" width="16" height="21" fill="black"></rect>
</mask><path d="M 360.000000 330.000000 C 360.000000 366.000000 360.000000 398.600000 360.000000 432.500000 C 360.000000 466.400000 471.700000 622.507067 914.565753 703.813047" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-start="url(#mk-2510427236)" marker-end="url(#mk-3990223579)" mask="url(#mask-4288302333)" /><text class="text-italic" x="532.000000" y="639.000000" style="text-anchor:middle;font-size:16px;fill:black">88</text><style type="text/css"><![CDATA[
</style><rect class="shape" x="0" y="0" width="1117" height="1654" style="fill:#E3E9FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="558.500000" y="33.000000" style="text-anchor:middle;font-size:28px;fill:black">aa</text><rect class="shape" x="40" y="50" width="776" height="1554" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="428.000000" y="79.000000" style="text-anchor:middle;font-size:24px;fill:black">bb</text><rect class="shape" x="915" y="652" width="114" height="126" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="972.000000" y="718.000000" style="text-anchor:middle;font-size:16px;fill:black">ll</text><path class="shape" d="M 902 450 C 902 426 960.95 426 967.5 426 C 974.05 426 1033 426 1033 450 V 528 C 1033 552 974.05 552 967.5 552 C 960.95 552 902 552 902 528 V 450 Z" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><path class="shape" d="M 902 450 C 902 474 960.95 474 967.5 474 C 974.05 474 1033 474 1033 450" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="967.500000" y="504.000000" style="text-anchor:middle;font-size:16px;fill:black">mm</text><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="867.000000" y="1429.000000" width="18" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><p>nn</p>
</div></foreignObject></g><rect class="shape" x="945" y="1378" width="123" height="126" style="fill:#EDF0FD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="1006.500000" y="1444.000000" style="text-anchor:middle;font-size:16px;fill:black">oo</text><rect class="shape" x="80" y="878" width="510" height="676" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="335.000000" y="903.000000" style="text-anchor:middle;font-size:20px;fill:black">cc</text><path class="shape" d="M 106 100 L 256 100 L 256 145.2 L 473 145.2 L 473 326 L 106 326 Z" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="289.500000" y="125.000000" style="text-anchor:middle;font-size:20px;fill:black">ii</text><ellipse class="shape" cx="704.000000" cy="1441.000000" rx="63.000000" ry="63.000000" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="704.000000" y="1444.000000" style="text-anchor:middle;font-size:16px;fill:black">kk</text><rect class="shape" x="120" y="928" width="355" height="226" style="fill:#FFFFFF;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="297.500000" y="949.000000" style="text-anchor:middle;font-size:16px;fill:black">dd</text><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="409.000000" y="1254.000000" width="17" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><p>gg</p>
</div></foreignObject></g><rect class="shape" x="356" y="1378" width="123" height="126" style="fill:#FFFFFF;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="417.500000" y="1444.000000" style="text-anchor:middle;font-size:16px;fill:black">hh</text><path class="shape" d="M 300.5 276 C 300.0519 276 299.7532 275.8362 299.4545 275.5085 L 243.4481 214.2289 C 242.8507 213.5735 242.8507 212.5904 243.4481 211.935 L 299.4545 150.4915 C 300.0519 149.8361 300.948 149.8361 301.5454 150.4915 L 357.5519 211.9349 C 358.1493 212.5903 358.1493 213.5734 357.5519 214.2288 L 301.5455 275.5085 C 301.2468 275.8362 300.9481 276 300.5 276 Z" style="fill:#CFD2DD;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="300.500000" y="216.000000" style="text-anchor:middle;font-size:16px;fill:black">jj</text><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="232.000000" y="1029.000000" width="16" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><p>ee</p>
</div></foreignObject></g><rect class="shape" x="308" y="978" width="117" height="126" style="fill:#FFFFFF;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="366.500000" y="1044.000000" style="text-anchor:middle;font-size:16px;fill:black">ff</text><mask id="mask-3834907066" maskUnits="userSpaceOnUse" x="238.000000" y="1051.000000" width="173.000000" height="214.000000">
<rect x="238.000000" y="1051.000000" width="173.000000" height="214.000000" fill="white"></rect>
<rect x="261.000000" y="1193.000000" width="15" height="21" fill="black"></rect>
</mask><path d="M 240.000000 1054.000000 C 240.000000 1133.800000 273.800000 1215.800000 408.055881 1262.670396" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" mask="url(#mask-3834907066)" /><text class="text-italic" x="268.500000" y="1209.000000" style="text-anchor:middle;font-size:16px;fill:black">11</text><mask id="mask-1342911600" maskUnits="userSpaceOnUse" x="409.000000" y="1276.000000" width="17.000000" height="104.000000">
<rect x="409.000000" y="1276.000000" width="17.000000" height="104.000000" fill="white"></rect>
<rect x="409.000000" y="1318.000000" width="17" height="21" fill="black"></rect>
</mask><path d="M 417.500000 1279.000000 C 417.500000 1318.000000 417.500000 1338.000000 417.500000 1377.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" mask="url(#mask-1342911600)" /><text class="text-italic" x="417.500000" y="1334.000000" style="text-anchor:middle;font-size:16px;fill:black">22</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="8.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 200.000000 327.000000 C 200.000000 366.000000 200.000000 398.600000 200.000000 432.500000 C 200.000000 466.400000 200.000000 511.600000 200.000000 545.500000 C 200.000000 579.400000 200.000000 624.600000 200.000000 658.500000 C 200.000000 692.400000 200.000000 737.600000 200.000000 771.500000 C 200.000000 805.400000 200.000000 888.000000 200.000000 925.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><marker id="mk-2510427236" markerWidth="10.000000" markerHeight="12.000000" refX="2.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="10.000000,0.000000 0.000000,6.000000 10.000000,12.000000" /> </marker><mask id="mask-2288667663" maskUnits="userSpaceOnUse" x="794.500000" y="697.805195" width="142.000000" height="67.000000">
<rect x="794.500000" y="697.805195" width="142.000000" height="67.000000" fill="white"></rect>
<rect x="857.000000" y="721.000000" width="17" height="21" fill="black"></rect>
</mask><path d="M 911.534536 724.259092 C 836.100000 735.805195 894.900000 726.805195 819.465464 738.351297" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-start="url(#mk-2510427236)" marker-end="url(#mk-3990223579)" mask="url(#mask-2288667663)" /><text class="text-italic" x="865.500000" y="737.000000" style="text-anchor:middle;font-size:16px;fill:black">33</text><mask id="mask-2170131283" maskUnits="userSpaceOnUse" x="268.000000" y="486.000000" width="646.000000" height="406.000000">
<rect x="268.000000" y="486.000000" width="646.000000" height="406.000000" fill="white"></rect>
<rect x="455.000000" y="561.000000" width="16" height="21" fill="black"></rect>
</mask><path d="M 901.013181 500.161826 C 404.400000 581.600000 280.000000 624.600000 280.000000 658.500000 C 280.000000 692.400000 280.000000 838.000000 280.000000 875.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" mask="url(#mask-2170131283)" /><text class="text-italic" x="463.000000" y="577.000000" style="text-anchor:middle;font-size:16px;fill:black">44</text><path d="M 970.029987 552.999550 C 971.200000 592.000000 971.500000 612.000000 971.500000 649.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><mask id="mask-3699877661" maskUnits="userSpaceOnUse" x="794.750000" y="474.000000" width="129.250000" height="67.435303">
<rect x="794.750000" y="474.000000" width="129.250000" height="67.435303" fill="white"></rect>
<rect x="851.000000" y="497.000000" width="16" height="21" fill="black"></rect>
</mask><path d="M 899.047997 500.534488 C 833.800000 512.348243 884.950000 503.087061 819.702003 514.900816" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-start="url(#mk-2510427236)" marker-end="url(#mk-3990223579)" mask="url(#mask-3699877661)" /><text class="text-italic" x="859.000000" y="513.000000" style="text-anchor:middle;font-size:16px;fill:black">55</text><path d="M 911.587892 729.830379 C 594.900000 808.221906 515.000000 838.000000 515.000000 853.000000 C 515.000000 868.000000 515.000000 888.000000 515.000000 903.000000 C 515.000000 918.000000 515.000000 950.600000 515.000000 984.500000 C 515.000000 1018.400000 515.000000 1063.600000 515.000000 1097.500000 C 515.000000 1131.400000 497.200000 1215.400000 428.526299 1259.382034" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-start="url(#mk-2510427236)" marker-end="url(#mk-3990223579)" /><mask id="mask-3134112715" maskUnits="userSpaceOnUse" x="388.000000" y="312.000000" width="526.000000" height="178.000000">
<rect x="388.000000" y="312.000000" width="526.000000" height="178.000000" fill="white"></rect>
<rect x="622.000000" y="411.000000" width="16" height="21" fill="black"></rect>
</mask><path d="M 899.057808 475.413906 C 500.400000 396.000000 400.000000 366.000000 400.000000 327.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-start="url(#mk-2510427236)" mask="url(#mask-3134112715)" /><text class="text-italic" x="630.000000" y="427.000000" style="text-anchor:middle;font-size:16px;fill:black">66</text><mask id="mask-3003327047" maskUnits="userSpaceOnUse" x="365.500000" y="711.843434" width="561.000000" height="180.156566">
<rect x="365.500000" y="711.843434" width="561.000000" height="180.156566" fill="white"></rect>
<rect x="617.000000" y="770.000000" width="16" height="21" fill="black"></rect>
</mask><path d="M 377.500000 875.000000 C 377.500000 838.000000 484.900000 807.568687 913.517618 726.030318" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-start="url(#mk-2510427236)" mask="url(#mask-3003327047)" /><text class="text-italic" x="625.000000" y="786.000000" style="text-anchor:middle;font-size:16px;fill:black">77</text><mask id="mask-4288302333" maskUnits="userSpaceOnUse" x="338.000000" y="300.000000" width="598.500000" height="430.466885">
<rect x="338.000000" y="300.000000" width="598.500000" height="430.466885" fill="white"></rect>
<rect x="522.000000" y="623.000000" width="16" height="21" fill="black"></rect>
</mask><path d="M 360.000000 329.000000 C 360.000000 366.000000 360.000000 398.600000 360.000000 432.500000 C 360.000000 466.400000 470.900000 622.493377 911.549946 703.921740" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-start="url(#mk-2510427236)" marker-end="url(#mk-3990223579)" mask="url(#mask-4288302333)" /><text class="text-italic" x="530.000000" y="639.000000" style="text-anchor:middle;font-size:16px;fill:black">88</text><style type="text/css"><![CDATA[
.text {
font-family: "font-regular";
}

Before

Width:  |  Height:  |  Size: 813 KiB

After

Width:  |  Height:  |  Size: 813 KiB

View file

@ -9,7 +9,7 @@
"y": 226
},
"width": 3051,
"height": 4843,
"height": 4848,
"level": 1,
"opacity": 1,
"strokeDash": 0,
@ -36,7 +36,7 @@
"bold": true,
"underline": false,
"labelWidth": 3051,
"labelHeight": 4843
"labelHeight": 4848
},
{
"id": "a",
@ -81,7 +81,7 @@
"type": "",
"pos": {
"x": 1469,
"y": 5169
"y": 5174
},
"width": 113,
"height": 126,
@ -190,19 +190,19 @@
"route": [
{
"x": 1525.5,
"y": 5069
"y": 5074
},
{
"x": 1525.5,
"y": 5109
"y": 5114
},
{
"x": 1525.5,
"y": 5129
"y": 5134
},
{
"x": 1525.5,
"y": 5169
"y": 5174
}
],
"isCurve": true,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 813 KiB

After

Width:  |  Height:  |  Size: 993 KiB

View file

@ -9,7 +9,7 @@
"y": 226
},
"width": 738,
"height": 119,
"height": 134,
"level": 1,
"opacity": 1,
"strokeDash": 0,
@ -36,7 +36,7 @@
"bold": true,
"underline": false,
"labelWidth": 738,
"labelHeight": 119
"labelHeight": 134
},
{
"id": "a",
@ -81,7 +81,7 @@
"type": "",
"pos": {
"x": 313,
"y": 445
"y": 460
},
"width": 113,
"height": 126,
@ -190,19 +190,19 @@
"route": [
{
"x": 369,
"y": 345
"y": 360
},
{
"x": 369,
"y": 385
"y": 400
},
{
"x": 369,
"y": 405
"y": 420
},
{
"x": 369,
"y": 445
"y": 460
}
],
"isCurve": true,

View file

@ -2,7 +2,7 @@
<svg
style="background: white;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="938" height="771" viewBox="-100 -100 938 771"><style type="text/css">
width="938" height="786" viewBox="-100 -100 938 786"><style type="text/css">
<![CDATA[
.shape {
shape-rendering: geometricPrecision;
@ -22,6 +22,18 @@ width="938" height="771" viewBox="-100 -100 938 771"><style type="text/css">
font-family: "font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "font-mono";
font-size: 1em;
}
.md {
tab-size: 4;
}
/* based on https://github.com/sindresorhus/github-markdown-css */
@media (prefers-color-scheme: dark) {
.md {
@ -145,14 +157,6 @@ width="938" height="771" viewBox="-100 -100 938 771"><style type="text/css">
background-color: var(--color-canvas-default);
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: monospace, monospace;
font-size: 1em;
}
.md figure {
margin: 1em 40px;
}
@ -268,9 +272,6 @@ width="938" height="771" viewBox="-100 -100 938 771"><style type="text/css">
.md kbd {
display: inline-block;
padding: 3px 5px;
font: 11px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
line-height: 10px;
color: var(--color-fg-default);
vertical-align: middle;
background-color: var(--color-canvas-subtle);
@ -355,19 +356,9 @@ width="938" height="771" viewBox="-100 -100 938 771"><style type="text/css">
margin-left: 0;
}
.md tt,
.md code {
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
}
.md pre {
margin-top: 0;
margin-bottom: 0;
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
word-wrap: normal;
}
@ -797,11 +788,11 @@ width="938" height="771" viewBox="-100 -100 938 771"><style type="text/css">
.md .contains-task-list:dir(rtl) .task-list-item-checkbox {
margin: 0 -1.6em 0.25em 0.2em;
}
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="738" height="119"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><p><strong>Note:</strong> This document is itself written using Markdown; you
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="738" height="134"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><p><strong>Note:</strong> This document is itself written using Markdown; you
can <a href="/projects/markdown/syntax.text">see the source for it by adding '.text' to the URL</a>.</p>
<hr />
<h2>Overview</h2>
</div></foreignObject></g><rect class="shape" x="313" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="369.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">a</text><rect class="shape" x="313" y="445" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="369.500000" y="511.000000" style="text-anchor:middle;font-size:16px;fill:black">b</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 369.000000 128.000000 C 369.000000 166.000000 369.000000 186.000000 369.000000 222.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 369.000000 347.000000 C 369.000000 385.000000 369.000000 405.000000 369.000000 441.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
</div></foreignObject></g><rect class="shape" x="313" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="369.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">a</text><rect class="shape" x="313" y="460" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="369.500000" y="526.000000" style="text-anchor:middle;font-size:16px;fill:black">b</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="8.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 369.000000 127.000000 C 369.000000 166.000000 369.000000 186.000000 369.000000 223.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 369.000000 361.000000 C 369.000000 400.000000 369.000000 420.000000 369.000000 457.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
.text {
font-family: "font-regular";
}

Before

Width:  |  Height:  |  Size: 661 KiB

After

Width:  |  Height:  |  Size: 660 KiB

View file

@ -8,8 +8,8 @@
"x": 0,
"y": 226
},
"width": 384,
"height": 105,
"width": 379,
"height": 100,
"level": 1,
"opacity": 1,
"strokeDash": 0,
@ -35,14 +35,14 @@
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 384,
"labelHeight": 105
"labelWidth": 379,
"labelHeight": 100
},
{
"id": "a",
"type": "",
"pos": {
"x": 136,
"x": 133,
"y": 0
},
"width": 113,
@ -80,8 +80,8 @@
"id": "b",
"type": "",
"pos": {
"x": 136,
"y": 431
"x": 133,
"y": 426
},
"width": 113,
"height": 126,
@ -142,19 +142,19 @@
"labelPercentage": 0,
"route": [
{
"x": 192,
"x": 189.5,
"y": 126
},
{
"x": 192,
"x": 189.5,
"y": 166
},
{
"x": 192,
"x": 189.5,
"y": 186
},
{
"x": 192,
"x": 189.5,
"y": 226
}
],
@ -189,20 +189,20 @@
"labelPercentage": 0,
"route": [
{
"x": 192,
"y": 331
"x": 189.5,
"y": 326
},
{
"x": 192,
"y": 371
"x": 189.5,
"y": 366
},
{
"x": 192,
"y": 391
"x": 189.5,
"y": 386
},
{
"x": 192,
"y": 431
"x": 189.5,
"y": 426
}
],
"isCurve": true,

View file

@ -2,7 +2,7 @@
<svg
style="background: white;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="584" height="757" viewBox="-100 -100 584 757"><style type="text/css">
width="579" height="752" viewBox="-100 -100 579 752"><style type="text/css">
<![CDATA[
.shape {
shape-rendering: geometricPrecision;
@ -22,6 +22,18 @@ width="584" height="757" viewBox="-100 -100 584 757"><style type="text/css">
font-family: "font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "font-mono";
font-size: 1em;
}
.md {
tab-size: 4;
}
/* based on https://github.com/sindresorhus/github-markdown-css */
@media (prefers-color-scheme: dark) {
.md {
@ -145,14 +157,6 @@ width="584" height="757" viewBox="-100 -100 584 757"><style type="text/css">
background-color: var(--color-canvas-default);
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: monospace, monospace;
font-size: 1em;
}
.md figure {
margin: 1em 40px;
}
@ -268,9 +272,6 @@ width="584" height="757" viewBox="-100 -100 584 757"><style type="text/css">
.md kbd {
display: inline-block;
padding: 3px 5px;
font: 11px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
line-height: 10px;
color: var(--color-fg-default);
vertical-align: middle;
background-color: var(--color-canvas-subtle);
@ -355,19 +356,9 @@ width="584" height="757" viewBox="-100 -100 584 757"><style type="text/css">
margin-left: 0;
}
.md tt,
.md code {
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
}
.md pre {
margin-top: 0;
margin-bottom: 0;
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
word-wrap: normal;
}
@ -797,7 +788,7 @@ width="584" height="757" viewBox="-100 -100 584 757"><style type="text/css">
.md .contains-task-list:dir(rtl) .task-list-item-checkbox {
margin: 0 -1.6em 0.25em 0.2em;
}
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="384" height="105"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><ul>
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="379" height="100"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><ul>
<li><a href="#overview">Overview</a>
<ul>
<li><a href="#philosophy">Philosophy</a></li>
@ -809,7 +800,7 @@ width="584" height="757" viewBox="-100 -100 584 757"><style type="text/css">
</ul>
</li>
</ul>
</div></foreignObject></g><rect class="shape" x="136" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="192.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">a</text><rect class="shape" x="136" y="431" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="192.500000" y="497.000000" style="text-anchor:middle;font-size:16px;fill:black">b</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 192.000000 128.000000 C 192.000000 166.000000 192.000000 186.000000 192.000000 222.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 192.000000 333.000000 C 192.000000 371.000000 192.000000 391.000000 192.000000 427.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
</div></foreignObject></g><rect class="shape" x="133" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="189.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">a</text><rect class="shape" x="133" y="426" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="189.500000" y="492.000000" style="text-anchor:middle;font-size:16px;fill:black">b</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="8.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 189.500000 127.000000 C 189.500000 166.000000 189.500000 186.000000 189.500000 223.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 189.500000 327.000000 C 189.500000 366.000000 189.500000 386.000000 189.500000 423.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
.text {
font-family: "font-regular";
}

Before

Width:  |  Height:  |  Size: 661 KiB

After

Width:  |  Height:  |  Size: 660 KiB

View file

@ -8,8 +8,8 @@
"x": 0,
"y": 226
},
"width": 250,
"height": 81,
"width": 245,
"height": 76,
"level": 1,
"opacity": 1,
"strokeDash": 0,
@ -35,14 +35,14 @@
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 250,
"labelHeight": 81
"labelWidth": 245,
"labelHeight": 76
},
{
"id": "a",
"type": "",
"pos": {
"x": 69,
"x": 66,
"y": 0
},
"width": 113,
@ -80,8 +80,8 @@
"id": "b",
"type": "",
"pos": {
"x": 69,
"y": 407
"x": 66,
"y": 402
},
"width": 113,
"height": 126,
@ -142,19 +142,19 @@
"labelPercentage": 0,
"route": [
{
"x": 125,
"x": 122.5,
"y": 126
},
{
"x": 125,
"x": 122.5,
"y": 166
},
{
"x": 125,
"x": 122.5,
"y": 186
},
{
"x": 125,
"x": 122.5,
"y": 226
}
],
@ -189,20 +189,20 @@
"labelPercentage": 0,
"route": [
{
"x": 125,
"y": 307
"x": 122.5,
"y": 302
},
{
"x": 125,
"y": 347
"x": 122.5,
"y": 342
},
{
"x": 125,
"y": 367
"x": 122.5,
"y": 362
},
{
"x": 125,
"y": 407
"x": 122.5,
"y": 402
}
],
"isCurve": true,

View file

@ -2,7 +2,7 @@
<svg
style="background: white;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="450" height="733" viewBox="-100 -100 450 733"><style type="text/css">
width="445" height="728" viewBox="-100 -100 445 728"><style type="text/css">
<![CDATA[
.shape {
shape-rendering: geometricPrecision;
@ -22,6 +22,18 @@ width="450" height="733" viewBox="-100 -100 450 733"><style type="text/css">
font-family: "font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "font-mono";
font-size: 1em;
}
.md {
tab-size: 4;
}
/* based on https://github.com/sindresorhus/github-markdown-css */
@media (prefers-color-scheme: dark) {
.md {
@ -145,14 +157,6 @@ width="450" height="733" viewBox="-100 -100 450 733"><style type="text/css">
background-color: var(--color-canvas-default);
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: monospace, monospace;
font-size: 1em;
}
.md figure {
margin: 1em 40px;
}
@ -268,9 +272,6 @@ width="450" height="733" viewBox="-100 -100 450 733"><style type="text/css">
.md kbd {
display: inline-block;
padding: 3px 5px;
font: 11px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
line-height: 10px;
color: var(--color-fg-default);
vertical-align: middle;
background-color: var(--color-canvas-subtle);
@ -355,19 +356,9 @@ width="450" height="733" viewBox="-100 -100 450 733"><style type="text/css">
margin-left: 0;
}
.md tt,
.md code {
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
}
.md pre {
margin-top: 0;
margin-bottom: 0;
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
word-wrap: normal;
}
@ -797,7 +788,7 @@ width="450" height="733" viewBox="-100 -100 450 733"><style type="text/css">
.md .contains-task-list:dir(rtl) .task-list-item-checkbox {
margin: 0 -1.6em 0.25em 0.2em;
}
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="250" height="81"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><ul>
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="245" height="76"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><ul>
<li><a href="#overview">Overview</a> ok <em>this is all measured</em>
<ul>
<li><a href="#philosophy">Philosophy</a></li>
@ -805,7 +796,7 @@ width="450" height="733" viewBox="-100 -100 450 733"><style type="text/css">
</ul>
</li>
</ul>
</div></foreignObject></g><rect class="shape" x="69" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="125.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">a</text><rect class="shape" x="69" y="407" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="125.500000" y="473.000000" style="text-anchor:middle;font-size:16px;fill:black">b</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 125.000000 128.000000 C 125.000000 166.000000 125.000000 186.000000 125.000000 222.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 125.000000 309.000000 C 125.000000 347.000000 125.000000 367.000000 125.000000 403.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
</div></foreignObject></g><rect class="shape" x="66" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="122.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">a</text><rect class="shape" x="66" y="402" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="122.500000" y="468.000000" style="text-anchor:middle;font-size:16px;fill:black">b</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="8.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 122.500000 127.000000 C 122.500000 166.000000 122.500000 186.000000 122.500000 223.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 122.500000 303.000000 C 122.500000 342.000000 122.500000 362.000000 122.500000 399.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
.text {
font-family: "font-regular";
}

Before

Width:  |  Height:  |  Size: 803 KiB

After

Width:  |  Height:  |  Size: 803 KiB

View file

@ -8,8 +8,8 @@
"x": 0,
"y": 226
},
"width": 352,
"height": 517,
"width": 347,
"height": 512,
"level": 1,
"opacity": 1,
"strokeDash": 0,
@ -35,14 +35,14 @@
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 352,
"labelHeight": 517
"labelWidth": 347,
"labelHeight": 512
},
{
"id": "a",
"type": "",
"pos": {
"x": 120,
"x": 117,
"y": 0
},
"width": 113,
@ -80,8 +80,8 @@
"id": "b",
"type": "",
"pos": {
"x": 120,
"y": 843
"x": 117,
"y": 838
},
"width": 113,
"height": 126,
@ -142,19 +142,19 @@
"labelPercentage": 0,
"route": [
{
"x": 176,
"x": 173.5,
"y": 126
},
{
"x": 176,
"x": 173.5,
"y": 166
},
{
"x": 176,
"x": 173.5,
"y": 186
},
{
"x": 176,
"x": 173.5,
"y": 226
}
],
@ -189,20 +189,20 @@
"labelPercentage": 0,
"route": [
{
"x": 176,
"y": 743
"x": 173.5,
"y": 738
},
{
"x": 176,
"y": 783
"x": 173.5,
"y": 778
},
{
"x": 176,
"y": 803
"x": 173.5,
"y": 798
},
{
"x": 176,
"y": 843
"x": 173.5,
"y": 838
}
],
"isCurve": true,

View file

@ -2,7 +2,7 @@
<svg
style="background: white;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="552" height="1169" viewBox="-100 -100 552 1169"><style type="text/css">
width="547" height="1164" viewBox="-100 -100 547 1164"><style type="text/css">
<![CDATA[
.shape {
shape-rendering: geometricPrecision;
@ -22,6 +22,18 @@ width="552" height="1169" viewBox="-100 -100 552 1169"><style type="text/css">
font-family: "font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "font-mono";
font-size: 1em;
}
.md {
tab-size: 4;
}
/* based on https://github.com/sindresorhus/github-markdown-css */
@media (prefers-color-scheme: dark) {
.md {
@ -145,14 +157,6 @@ width="552" height="1169" viewBox="-100 -100 552 1169"><style type="text/css">
background-color: var(--color-canvas-default);
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: monospace, monospace;
font-size: 1em;
}
.md figure {
margin: 1em 40px;
}
@ -268,9 +272,6 @@ width="552" height="1169" viewBox="-100 -100 552 1169"><style type="text/css">
.md kbd {
display: inline-block;
padding: 3px 5px;
font: 11px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
line-height: 10px;
color: var(--color-fg-default);
vertical-align: middle;
background-color: var(--color-canvas-subtle);
@ -355,19 +356,9 @@ width="552" height="1169" viewBox="-100 -100 552 1169"><style type="text/css">
margin-left: 0;
}
.md tt,
.md code {
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
}
.md pre {
margin-top: 0;
margin-bottom: 0;
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
word-wrap: normal;
}
@ -797,7 +788,7 @@ width="552" height="1169" viewBox="-100 -100 552 1169"><style type="text/css">
.md .contains-task-list:dir(rtl) .task-list-item-checkbox {
margin: 0 -1.6em 0.25em 0.2em;
}
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="352" height="517"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><ul>
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="347" height="512"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><ul>
<li><a href="#overview">Overview</a>
<ul>
<li><a href="#philosophy">Philosophy</a></li>
@ -830,7 +821,7 @@ width="552" height="1169" viewBox="-100 -100 552 1169"><style type="text/css">
</ul>
</li>
</ul>
</div></foreignObject></g><rect class="shape" x="120" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="176.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">a</text><rect class="shape" x="120" y="843" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="176.500000" y="909.000000" style="text-anchor:middle;font-size:16px;fill:black">b</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 176.000000 128.000000 C 176.000000 166.000000 176.000000 186.000000 176.000000 222.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 176.000000 745.000000 C 176.000000 783.000000 176.000000 803.000000 176.000000 839.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
</div></foreignObject></g><rect class="shape" x="117" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="173.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">a</text><rect class="shape" x="117" y="838" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="173.500000" y="904.000000" style="text-anchor:middle;font-size:16px;fill:black">b</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="8.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 173.500000 127.000000 C 173.500000 166.000000 173.500000 186.000000 173.500000 223.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 173.500000 739.000000 C 173.500000 778.000000 173.500000 798.000000 173.500000 835.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
.text {
font-family: "font-regular";
}

Before

Width:  |  Height:  |  Size: 661 KiB

After

Width:  |  Height:  |  Size: 661 KiB

View file

@ -8,8 +8,8 @@
"x": 0,
"y": 226
},
"width": 924,
"height": 381,
"width": 920,
"height": 376,
"level": 1,
"opacity": 1,
"strokeDash": 0,
@ -35,14 +35,14 @@
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 924,
"labelHeight": 381
"labelWidth": 920,
"labelHeight": 376
},
{
"id": "a",
"type": "",
"pos": {
"x": 406,
"x": 404,
"y": 0
},
"width": 113,
@ -80,8 +80,8 @@
"id": "b",
"type": "",
"pos": {
"x": 406,
"y": 707
"x": 404,
"y": 702
},
"width": 113,
"height": 126,
@ -142,19 +142,19 @@
"labelPercentage": 0,
"route": [
{
"x": 462,
"x": 460,
"y": 126
},
{
"x": 462,
"x": 460,
"y": 166
},
{
"x": 462,
"x": 460,
"y": 186
},
{
"x": 462,
"x": 460,
"y": 226
}
],
@ -189,20 +189,20 @@
"labelPercentage": 0,
"route": [
{
"x": 462,
"y": 607
"x": 460,
"y": 602
},
{
"x": 462,
"y": 647
"x": 460,
"y": 642
},
{
"x": 462,
"y": 667
"x": 460,
"y": 662
},
{
"x": 462,
"y": 707
"x": 460,
"y": 702
}
],
"isCurve": true,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 661 KiB

After

Width:  |  Height:  |  Size: 842 KiB

View file

@ -8,8 +8,8 @@
"x": 0,
"y": 226
},
"width": 268,
"height": 55,
"width": 266,
"height": 50,
"level": 1,
"opacity": 1,
"strokeDash": 0,
@ -35,14 +35,14 @@
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 268,
"labelHeight": 55
"labelWidth": 266,
"labelHeight": 50
},
{
"id": "a",
"type": "",
"pos": {
"x": 78,
"x": 77,
"y": 0
},
"width": 113,
@ -80,8 +80,8 @@
"id": "b",
"type": "",
"pos": {
"x": 78,
"y": 381
"x": 77,
"y": 376
},
"width": 113,
"height": 126,
@ -142,19 +142,19 @@
"labelPercentage": 0,
"route": [
{
"x": 134,
"x": 133,
"y": 126
},
{
"x": 134,
"x": 133,
"y": 166
},
{
"x": 134,
"x": 133,
"y": 186
},
{
"x": 134,
"x": 133,
"y": 226
}
],
@ -189,20 +189,20 @@
"labelPercentage": 0,
"route": [
{
"x": 134,
"y": 281
"x": 133,
"y": 276
},
{
"x": 134,
"y": 321
"x": 133,
"y": 316
},
{
"x": 134,
"y": 341
"x": 133,
"y": 336
},
{
"x": 134,
"y": 381
"x": 133,
"y": 376
}
],
"isCurve": true,

View file

@ -2,7 +2,7 @@
<svg
style="background: white;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="468" height="707" viewBox="-100 -100 468 707"><style type="text/css">
width="466" height="702" viewBox="-100 -100 466 702"><style type="text/css">
<![CDATA[
.shape {
shape-rendering: geometricPrecision;
@ -22,6 +22,18 @@ width="468" height="707" viewBox="-100 -100 468 707"><style type="text/css">
font-family: "font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "font-mono";
font-size: 1em;
}
.md {
tab-size: 4;
}
/* based on https://github.com/sindresorhus/github-markdown-css */
@media (prefers-color-scheme: dark) {
.md {
@ -145,14 +157,6 @@ width="468" height="707" viewBox="-100 -100 468 707"><style type="text/css">
background-color: var(--color-canvas-default);
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: monospace, monospace;
font-size: 1em;
}
.md figure {
margin: 1em 40px;
}
@ -268,9 +272,6 @@ width="468" height="707" viewBox="-100 -100 468 707"><style type="text/css">
.md kbd {
display: inline-block;
padding: 3px 5px;
font: 11px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
line-height: 10px;
color: var(--color-fg-default);
vertical-align: middle;
background-color: var(--color-canvas-subtle);
@ -355,19 +356,9 @@ width="468" height="707" viewBox="-100 -100 468 707"><style type="text/css">
margin-left: 0;
}
.md tt,
.md code {
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
}
.md pre {
margin-top: 0;
margin-bottom: 0;
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
word-wrap: normal;
}
@ -797,8 +788,8 @@ width="468" height="707" viewBox="-100 -100 468 707"><style type="text/css">
.md .contains-task-list:dir(rtl) .task-list-item-checkbox {
margin: 0 -1.6em 0.25em 0.2em;
}
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="268" height="55"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><h1>Markdown: Syntax</h1>
</div></foreignObject></g><rect class="shape" x="78" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="134.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">a</text><rect class="shape" x="78" y="381" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="134.500000" y="447.000000" style="text-anchor:middle;font-size:16px;fill:black">b</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 134.000000 128.000000 C 134.000000 166.000000 134.000000 186.000000 134.000000 222.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 134.000000 283.000000 C 134.000000 321.000000 134.000000 341.000000 134.000000 377.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="266" height="50"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><h1>Markdown: Syntax</h1>
</div></foreignObject></g><rect class="shape" x="77" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="133.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">a</text><rect class="shape" x="77" y="376" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="133.500000" y="442.000000" style="text-anchor:middle;font-size:16px;fill:black">b</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="8.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 133.000000 127.000000 C 133.000000 166.000000 133.000000 186.000000 133.000000 223.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 133.000000 277.000000 C 133.000000 316.000000 133.000000 336.000000 133.000000 373.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
.text {
font-family: "font-regular";
}

Before

Width:  |  Height:  |  Size: 660 KiB

After

Width:  |  Height:  |  Size: 660 KiB

View file

@ -8,8 +8,8 @@
"x": 0,
"y": 226
},
"width": 535,
"height": 191,
"width": 531,
"height": 186,
"level": 1,
"opacity": 1,
"strokeDash": 0,
@ -35,14 +35,14 @@
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 535,
"labelHeight": 191
"labelWidth": 531,
"labelHeight": 186
},
{
"id": "x",
"type": "",
"pos": {
"x": 211,
"x": 209,
"y": 0
},
"width": 113,
@ -80,8 +80,8 @@
"id": "y",
"type": "",
"pos": {
"x": 211,
"y": 517
"x": 209,
"y": 512
},
"width": 114,
"height": 126,
@ -142,19 +142,19 @@
"labelPercentage": 0,
"route": [
{
"x": 267.5,
"x": 265.5,
"y": 126
},
{
"x": 267.5,
"x": 265.5,
"y": 166
},
{
"x": 267.5,
"x": 265.5,
"y": 186
},
{
"x": 267.5,
"x": 265.5,
"y": 226
}
],
@ -189,20 +189,20 @@
"labelPercentage": 0,
"route": [
{
"x": 267.5,
"y": 417
"x": 265.5,
"y": 412
},
{
"x": 267.5,
"y": 457
"x": 265.5,
"y": 452
},
{
"x": 267.5,
"y": 477
"x": 265.5,
"y": 472
},
{
"x": 267.5,
"y": 517
"x": 265.5,
"y": 512
}
],
"isCurve": true,

View file

@ -2,7 +2,7 @@
<svg
style="background: white;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="735" height="843" viewBox="-100 -100 735 843"><style type="text/css">
width="731" height="838" viewBox="-100 -100 731 838"><style type="text/css">
<![CDATA[
.shape {
shape-rendering: geometricPrecision;
@ -22,6 +22,18 @@ width="735" height="843" viewBox="-100 -100 735 843"><style type="text/css">
font-family: "font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "font-mono";
font-size: 1em;
}
.md {
tab-size: 4;
}
/* based on https://github.com/sindresorhus/github-markdown-css */
@media (prefers-color-scheme: dark) {
.md {
@ -145,14 +157,6 @@ width="735" height="843" viewBox="-100 -100 735 843"><style type="text/css">
background-color: var(--color-canvas-default);
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: monospace, monospace;
font-size: 1em;
}
.md figure {
margin: 1em 40px;
}
@ -268,9 +272,6 @@ width="735" height="843" viewBox="-100 -100 735 843"><style type="text/css">
.md kbd {
display: inline-block;
padding: 3px 5px;
font: 11px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
line-height: 10px;
color: var(--color-fg-default);
vertical-align: middle;
background-color: var(--color-canvas-subtle);
@ -355,19 +356,9 @@ width="735" height="843" viewBox="-100 -100 735 843"><style type="text/css">
margin-left: 0;
}
.md tt,
.md code {
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
}
.md pre {
margin-top: 0;
margin-bottom: 0;
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
word-wrap: normal;
}
@ -797,14 +788,14 @@ width="735" height="843" viewBox="-100 -100 735 843"><style type="text/css">
.md .contains-task-list:dir(rtl) .task-list-item-checkbox {
margin: 0 -1.6em 0.25em 0.2em;
}
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="535" height="191"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><h1>Every frustum longs to be a cone</h1>
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="531" height="186"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><h1>Every frustum longs to be a cone</h1>
<ul>
<li>A continuing flow of paper is sufficient to continue the flow of paper</li>
<li>Please remain calm, it's no use both of us being hysterical at the same time</li>
<li>Visits always give pleasure: if not on arrival, then on the departure</li>
</ul>
<p><em>Festivity Level 1</em>: Your guests are chatting amiably with each other.</p>
</div></foreignObject></g><rect class="shape" x="211" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="267.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">x</text><rect class="shape" x="211" y="517" width="114" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="268.000000" y="583.000000" style="text-anchor:middle;font-size:16px;fill:black">y</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 267.500000 128.000000 C 267.500000 166.000000 267.500000 186.000000 267.500000 222.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 267.500000 419.000000 C 267.500000 457.000000 267.500000 477.000000 267.500000 513.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
</div></foreignObject></g><rect class="shape" x="209" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="265.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">x</text><rect class="shape" x="209" y="512" width="114" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="266.000000" y="578.000000" style="text-anchor:middle;font-size:16px;fill:black">y</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="8.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 265.500000 127.000000 C 265.500000 166.000000 265.500000 186.000000 265.500000 223.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 265.500000 413.000000 C 265.500000 452.000000 265.500000 472.000000 265.500000 509.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
.text {
font-family: "font-regular";
}

Before

Width:  |  Height:  |  Size: 804 KiB

After

Width:  |  Height:  |  Size: 803 KiB

View file

@ -0,0 +1,214 @@
{
"name": "",
"shapes": [
{
"id": "md",
"type": "text",
"pos": {
"x": 0,
"y": 226
},
"width": 196,
"height": 111,
"level": 1,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#FFFFFF",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "```\n{\n\tfenced: \"block\",\n\tof: \"json\",\n}\n```",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "markdown",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 196,
"labelHeight": 111
},
{
"id": "a",
"type": "",
"pos": {
"x": 42,
"y": 0
},
"width": 113,
"height": 126,
"level": 1,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#F7F8FE",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "a",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"labelPosition": "INSIDE_MIDDLE_CENTER"
},
{
"id": "b",
"type": "",
"pos": {
"x": 42,
"y": 437
},
"width": 113,
"height": 126,
"level": 1,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#F7F8FE",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "b",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"labelPosition": "INSIDE_MIDDLE_CENTER"
}
],
"connections": [
{
"id": "(a -> md)[0]",
"src": "a",
"srcArrow": "none",
"srcLabel": "",
"dst": "md",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 98,
"y": 126
},
{
"x": 98,
"y": 166
},
{
"x": 98,
"y": 186
},
{
"x": 98,
"y": 226
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null
},
{
"id": "(md -> b)[0]",
"src": "md",
"srcArrow": "none",
"srcLabel": "",
"dst": "b",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 98,
"y": 337
},
{
"x": 98,
"y": 377
},
{
"x": 98,
"y": 397
},
{
"x": 98,
"y": 437
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 841 KiB

View file

@ -0,0 +1,214 @@
{
"name": "",
"shapes": [
{
"id": "md",
"type": "text",
"pos": {
"x": 0,
"y": 226
},
"width": 212,
"height": 151,
"level": 1,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#FFFFFF",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "a line of text and an\n\n\t{\n\t\tindented: \"block\",\n\t\tof: \"json\",\n\t}\n",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "markdown",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 212,
"labelHeight": 151
},
{
"id": "a",
"type": "",
"pos": {
"x": 50,
"y": 0
},
"width": 113,
"height": 126,
"level": 1,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#F7F8FE",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "a",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"labelPosition": "INSIDE_MIDDLE_CENTER"
},
{
"id": "b",
"type": "",
"pos": {
"x": 50,
"y": 477
},
"width": 113,
"height": 126,
"level": 1,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#F7F8FE",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "b",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"labelPosition": "INSIDE_MIDDLE_CENTER"
}
],
"connections": [
{
"id": "(a -> md)[0]",
"src": "a",
"srcArrow": "none",
"srcLabel": "",
"dst": "md",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 106,
"y": 126
},
{
"x": 106,
"y": 166
},
{
"x": 106,
"y": 186
},
{
"x": 106,
"y": 226
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null
},
{
"id": "(md -> b)[0]",
"src": "md",
"srcArrow": "none",
"srcLabel": "",
"dst": "b",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 106,
"y": 377
},
{
"x": 106,
"y": 417
},
{
"x": 106,
"y": 437
},
{
"x": 106,
"y": 477
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 841 KiB

View file

@ -0,0 +1,214 @@
{
"name": "",
"shapes": [
{
"id": "md",
"type": "text",
"pos": {
"x": 34,
"y": 226
},
"width": 46,
"height": 24,
"level": 1,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#FFFFFF",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "`code`",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "markdown",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 46,
"labelHeight": 24
},
{
"id": "a",
"type": "",
"pos": {
"x": 0,
"y": 0
},
"width": 113,
"height": 126,
"level": 1,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#F7F8FE",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "a",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"labelPosition": "INSIDE_MIDDLE_CENTER"
},
{
"id": "b",
"type": "",
"pos": {
"x": 0,
"y": 350
},
"width": 113,
"height": 126,
"level": 1,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#F7F8FE",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "b",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"labelPosition": "INSIDE_MIDDLE_CENTER"
}
],
"connections": [
{
"id": "(a -> md)[0]",
"src": "a",
"srcArrow": "none",
"srcLabel": "",
"dst": "md",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 56.5,
"y": 126
},
{
"x": 56.5,
"y": 166
},
{
"x": 56.5,
"y": 186
},
{
"x": 56.5,
"y": 226
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null
},
{
"id": "(md -> b)[0]",
"src": "md",
"srcArrow": "none",
"srcLabel": "",
"dst": "b",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 56.5,
"y": 250
},
{
"x": 56.5,
"y": 290
},
{
"x": 56.5,
"y": 310
},
{
"x": 56.5,
"y": 350
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 841 KiB

View file

@ -8,8 +8,8 @@
"x": 0,
"y": 226
},
"width": 1861,
"height": 29,
"width": 1857,
"height": 24,
"level": 1,
"opacity": 1,
"strokeDash": 0,
@ -35,14 +35,14 @@
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 1861,
"labelHeight": 29
"labelWidth": 1857,
"labelHeight": 24
},
{
"id": "a",
"type": "",
"pos": {
"x": 874,
"x": 872,
"y": 0
},
"width": 113,
@ -80,8 +80,8 @@
"id": "b",
"type": "",
"pos": {
"x": 874,
"y": 355
"x": 872,
"y": 350
},
"width": 113,
"height": 126,
@ -142,19 +142,19 @@
"labelPercentage": 0,
"route": [
{
"x": 930.5,
"x": 928.5,
"y": 126
},
{
"x": 930.5,
"x": 928.5,
"y": 166
},
{
"x": 930.5,
"x": 928.5,
"y": 186
},
{
"x": 930.5,
"x": 928.5,
"y": 226
}
],
@ -189,20 +189,20 @@
"labelPercentage": 0,
"route": [
{
"x": 930.5,
"y": 255
"x": 928.5,
"y": 250
},
{
"x": 930.5,
"y": 295
"x": 928.5,
"y": 290
},
{
"x": 930.5,
"y": 315
"x": 928.5,
"y": 310
},
{
"x": 930.5,
"y": 355
"x": 928.5,
"y": 350
}
],
"isCurve": true,

View file

@ -2,7 +2,7 @@
<svg
style="background: white;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="2061" height="681" viewBox="-100 -100 2061 681"><style type="text/css">
width="2057" height="676" viewBox="-100 -100 2057 676"><style type="text/css">
<![CDATA[
.shape {
shape-rendering: geometricPrecision;
@ -22,6 +22,18 @@ width="2061" height="681" viewBox="-100 -100 2061 681"><style type="text/css">
font-family: "font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "font-mono";
font-size: 1em;
}
.md {
tab-size: 4;
}
/* based on https://github.com/sindresorhus/github-markdown-css */
@media (prefers-color-scheme: dark) {
.md {
@ -145,14 +157,6 @@ width="2061" height="681" viewBox="-100 -100 2061 681"><style type="text/css">
background-color: var(--color-canvas-default);
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: monospace, monospace;
font-size: 1em;
}
.md figure {
margin: 1em 40px;
}
@ -268,9 +272,6 @@ width="2061" height="681" viewBox="-100 -100 2061 681"><style type="text/css">
.md kbd {
display: inline-block;
padding: 3px 5px;
font: 11px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
line-height: 10px;
color: var(--color-fg-default);
vertical-align: middle;
background-color: var(--color-canvas-subtle);
@ -355,19 +356,9 @@ width="2061" height="681" viewBox="-100 -100 2061 681"><style type="text/css">
margin-left: 0;
}
.md tt,
.md code {
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
}
.md pre {
margin-top: 0;
margin-bottom: 0;
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
monospace;
font-size: 12px;
word-wrap: normal;
}
@ -797,11 +788,11 @@ width="2061" height="681" viewBox="-100 -100 2061 681"><style type="text/css">
.md .contains-task-list:dir(rtl) .task-list-item-checkbox {
margin: 0 -1.6em 0.25em 0.2em;
}
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="1861" height="29"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><p>A paragraph is simply one or more consecutive lines of text, separated
</style><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="0.000000" y="226.000000" width="1857" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><p>A paragraph is simply one or more consecutive lines of text, separated
by one or more blank lines. (A blank line is any line that looks like a
blank line -- a line containing nothing but spaces or tabs is considered
blank.) Normal paragraphs should not be indented with spaces or tabs.</p>
</div></foreignObject></g><rect class="shape" x="874" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="930.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">a</text><rect class="shape" x="874" y="355" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="930.500000" y="421.000000" style="text-anchor:middle;font-size:16px;fill:black">b</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 930.500000 128.000000 C 930.500000 166.000000 930.500000 186.000000 930.500000 222.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 930.500000 257.000000 C 930.500000 295.000000 930.500000 315.000000 930.500000 351.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
</div></foreignObject></g><rect class="shape" x="872" y="0" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="928.500000" y="66.000000" style="text-anchor:middle;font-size:16px;fill:black">a</text><rect class="shape" x="872" y="350" width="113" height="126" style="fill:#F7F8FE;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" /><text class="text-bold" x="928.500000" y="416.000000" style="text-anchor:middle;font-size:16px;fill:black">b</text><marker id="mk-3990223579" markerWidth="10.000000" markerHeight="12.000000" refX="8.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon class="connection" fill="#0D32B2" stroke-width="2" points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" /> </marker><path d="M 928.500000 127.000000 C 928.500000 166.000000 928.500000 186.000000 928.500000 223.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><path d="M 928.500000 251.000000 C 928.500000 290.000000 928.500000 310.000000 928.500000 347.000000" class="connection" style="fill:none;stroke:#0D32B2;opacity:1.000000;stroke-width:2;" marker-end="url(#mk-3990223579)" /><style type="text/css"><![CDATA[
.text {
font-family: "font-regular";
}

Before

Width:  |  Height:  |  Size: 661 KiB

After

Width:  |  Height:  |  Size: 660 KiB

View file

@ -8,8 +8,8 @@
"x": 0,
"y": 226
},
"width": 606,
"height": 186,
"width": 602,
"height": 170,
"level": 1,
"opacity": 1,
"strokeDash": 0,
@ -35,14 +35,14 @@
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 606,
"labelHeight": 186
"labelWidth": 602,
"labelHeight": 170
},
{
"id": "a",
"type": "",
"pos": {
"x": 247,
"x": 245,
"y": 0
},
"width": 113,
@ -80,8 +80,8 @@
"id": "b",
"type": "",
"pos": {
"x": 247,
"y": 512
"x": 245,
"y": 496
},
"width": 113,
"height": 126,
@ -142,19 +142,19 @@
"labelPercentage": 0,
"route": [
{
"x": 303,
"x": 301,
"y": 126
},
{
"x": 303,
"x": 301,
"y": 166
},
{
"x": 303,
"x": 301,
"y": 186
},
{
"x": 303,
"x": 301,
"y": 226
}
],
@ -189,20 +189,20 @@
"labelPercentage": 0,
"route": [
{
"x": 303,
"y": 412
"x": 301,
"y": 396
},
{
"x": 303,
"y": 452
"x": 301,
"y": 436
},
{
"x": 303,
"y": 472
"x": 301,
"y": 456
},
{
"x": 303,
"y": 512
"x": 301,
"y": 496
}
],
"isCurve": true,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 661 KiB

After

Width:  |  Height:  |  Size: 841 KiB

View file

@ -6,19 +6,7 @@ import (
)
func testTodo(t *testing.T) {
tcs := []testCase{
// https://github.com/terrastruct/d2/issues/24
// string monstrosity from not being able to escape backticks within string literals
{
skip: true,
name: "backtick",
script: `md: |md
` + "`" + "code`" + `
|
a -> md -> b
`,
},
}
tcs := []testCase{}
runa(t, tcs)
}