d2sequence: self-referential messages account for message height

This commit is contained in:
Alexander Wang 2024-08-03 10:45:14 -06:00
parent d2004d073e
commit b0a6c01883
No known key found for this signature in database
GPG key ID: BE3937D0D52D8927
12 changed files with 1295 additions and 305 deletions

View file

@ -585,7 +585,7 @@ func (sd *sequenceDiagram) routeMessages() error {
if isSelfMessage || isToDescendant || isFromDescendant || isToSibling { if isSelfMessage || isToDescendant || isFromDescendant || isToSibling {
midX := startX + SELF_MESSAGE_HORIZONTAL_TRAVEL midX := startX + SELF_MESSAGE_HORIZONTAL_TRAVEL
endY := startY + MIN_MESSAGE_DISTANCE*1.5 endY := startY + math.Max(float64(message.LabelDimensions.Height), MIN_MESSAGE_DISTANCE)*1.5
message.Route = []*geo.Point{ message.Route = []*geo.Point{
geo.NewPoint(startX, startY), geo.NewPoint(startX, startY),
geo.NewPoint(midX, startY), geo.NewPoint(midX, startY),
@ -600,7 +600,7 @@ func (sd *sequenceDiagram) routeMessages() error {
} }
prevIsLoop = false prevIsLoop = false
} }
messageOffset += sd.yStep messageOffset += math.Max(sd.yStep, float64(message.LabelDimensions.Height)+MIN_MESSAGE_DISTANCE*1.5)
if message.Label.Value != "" { if message.Label.Value != "" {
message.LabelPosition = go2.Pointer(label.InsideMiddleCenter.String()) message.LabelPosition = go2.Pointer(label.InsideMiddleCenter.String())

View file

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" d2Version="v0.6.6-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 368 766"><svg id="d2-svg" width="368" height="766" viewBox="-101 -101 368 766"><style type="text/css"><![CDATA[ <?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" d2Version="v0.6.6-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 358 766"><svg id="d2-svg" width="358" height="766" viewBox="-101 -101 358 766"><style type="text/css"><![CDATA[
.d2-1574744994 .text-bold { .d2-4171532301 .text-bold {
font-family: "d2-1574744994-font-bold"; font-family: "d2-4171532301-font-bold";
} }
@font-face { @font-face {
font-family: d2-1574744994-font-bold; font-family: d2-4171532301-font-bold;
src: url("data:application/font-woff;base64,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"); src: url("data:application/font-woff;base64,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");
}]]></style><style type="text/css"><![CDATA[.shape { }]]></style><style type="text/css"><![CDATA[.shape {
shape-rendering: geometricPrecision; shape-rendering: geometricPrecision;
@ -18,78 +18,78 @@
opacity: 0.5; opacity: 0.5;
} }
.d2-1574744994 .fill-N1{fill:#0A0F25;} .d2-4171532301 .fill-N1{fill:#0A0F25;}
.d2-1574744994 .fill-N2{fill:#676C7E;} .d2-4171532301 .fill-N2{fill:#676C7E;}
.d2-1574744994 .fill-N3{fill:#9499AB;} .d2-4171532301 .fill-N3{fill:#9499AB;}
.d2-1574744994 .fill-N4{fill:#CFD2DD;} .d2-4171532301 .fill-N4{fill:#CFD2DD;}
.d2-1574744994 .fill-N5{fill:#DEE1EB;} .d2-4171532301 .fill-N5{fill:#DEE1EB;}
.d2-1574744994 .fill-N6{fill:#EEF1F8;} .d2-4171532301 .fill-N6{fill:#EEF1F8;}
.d2-1574744994 .fill-N7{fill:#FFFFFF;} .d2-4171532301 .fill-N7{fill:#FFFFFF;}
.d2-1574744994 .fill-B1{fill:#0D32B2;} .d2-4171532301 .fill-B1{fill:#0D32B2;}
.d2-1574744994 .fill-B2{fill:#0D32B2;} .d2-4171532301 .fill-B2{fill:#0D32B2;}
.d2-1574744994 .fill-B3{fill:#E3E9FD;} .d2-4171532301 .fill-B3{fill:#E3E9FD;}
.d2-1574744994 .fill-B4{fill:#E3E9FD;} .d2-4171532301 .fill-B4{fill:#E3E9FD;}
.d2-1574744994 .fill-B5{fill:#EDF0FD;} .d2-4171532301 .fill-B5{fill:#EDF0FD;}
.d2-1574744994 .fill-B6{fill:#F7F8FE;} .d2-4171532301 .fill-B6{fill:#F7F8FE;}
.d2-1574744994 .fill-AA2{fill:#4A6FF3;} .d2-4171532301 .fill-AA2{fill:#4A6FF3;}
.d2-1574744994 .fill-AA4{fill:#EDF0FD;} .d2-4171532301 .fill-AA4{fill:#EDF0FD;}
.d2-1574744994 .fill-AA5{fill:#F7F8FE;} .d2-4171532301 .fill-AA5{fill:#F7F8FE;}
.d2-1574744994 .fill-AB4{fill:#EDF0FD;} .d2-4171532301 .fill-AB4{fill:#EDF0FD;}
.d2-1574744994 .fill-AB5{fill:#F7F8FE;} .d2-4171532301 .fill-AB5{fill:#F7F8FE;}
.d2-1574744994 .stroke-N1{stroke:#0A0F25;} .d2-4171532301 .stroke-N1{stroke:#0A0F25;}
.d2-1574744994 .stroke-N2{stroke:#676C7E;} .d2-4171532301 .stroke-N2{stroke:#676C7E;}
.d2-1574744994 .stroke-N3{stroke:#9499AB;} .d2-4171532301 .stroke-N3{stroke:#9499AB;}
.d2-1574744994 .stroke-N4{stroke:#CFD2DD;} .d2-4171532301 .stroke-N4{stroke:#CFD2DD;}
.d2-1574744994 .stroke-N5{stroke:#DEE1EB;} .d2-4171532301 .stroke-N5{stroke:#DEE1EB;}
.d2-1574744994 .stroke-N6{stroke:#EEF1F8;} .d2-4171532301 .stroke-N6{stroke:#EEF1F8;}
.d2-1574744994 .stroke-N7{stroke:#FFFFFF;} .d2-4171532301 .stroke-N7{stroke:#FFFFFF;}
.d2-1574744994 .stroke-B1{stroke:#0D32B2;} .d2-4171532301 .stroke-B1{stroke:#0D32B2;}
.d2-1574744994 .stroke-B2{stroke:#0D32B2;} .d2-4171532301 .stroke-B2{stroke:#0D32B2;}
.d2-1574744994 .stroke-B3{stroke:#E3E9FD;} .d2-4171532301 .stroke-B3{stroke:#E3E9FD;}
.d2-1574744994 .stroke-B4{stroke:#E3E9FD;} .d2-4171532301 .stroke-B4{stroke:#E3E9FD;}
.d2-1574744994 .stroke-B5{stroke:#EDF0FD;} .d2-4171532301 .stroke-B5{stroke:#EDF0FD;}
.d2-1574744994 .stroke-B6{stroke:#F7F8FE;} .d2-4171532301 .stroke-B6{stroke:#F7F8FE;}
.d2-1574744994 .stroke-AA2{stroke:#4A6FF3;} .d2-4171532301 .stroke-AA2{stroke:#4A6FF3;}
.d2-1574744994 .stroke-AA4{stroke:#EDF0FD;} .d2-4171532301 .stroke-AA4{stroke:#EDF0FD;}
.d2-1574744994 .stroke-AA5{stroke:#F7F8FE;} .d2-4171532301 .stroke-AA5{stroke:#F7F8FE;}
.d2-1574744994 .stroke-AB4{stroke:#EDF0FD;} .d2-4171532301 .stroke-AB4{stroke:#EDF0FD;}
.d2-1574744994 .stroke-AB5{stroke:#F7F8FE;} .d2-4171532301 .stroke-AB5{stroke:#F7F8FE;}
.d2-1574744994 .background-color-N1{background-color:#0A0F25;} .d2-4171532301 .background-color-N1{background-color:#0A0F25;}
.d2-1574744994 .background-color-N2{background-color:#676C7E;} .d2-4171532301 .background-color-N2{background-color:#676C7E;}
.d2-1574744994 .background-color-N3{background-color:#9499AB;} .d2-4171532301 .background-color-N3{background-color:#9499AB;}
.d2-1574744994 .background-color-N4{background-color:#CFD2DD;} .d2-4171532301 .background-color-N4{background-color:#CFD2DD;}
.d2-1574744994 .background-color-N5{background-color:#DEE1EB;} .d2-4171532301 .background-color-N5{background-color:#DEE1EB;}
.d2-1574744994 .background-color-N6{background-color:#EEF1F8;} .d2-4171532301 .background-color-N6{background-color:#EEF1F8;}
.d2-1574744994 .background-color-N7{background-color:#FFFFFF;} .d2-4171532301 .background-color-N7{background-color:#FFFFFF;}
.d2-1574744994 .background-color-B1{background-color:#0D32B2;} .d2-4171532301 .background-color-B1{background-color:#0D32B2;}
.d2-1574744994 .background-color-B2{background-color:#0D32B2;} .d2-4171532301 .background-color-B2{background-color:#0D32B2;}
.d2-1574744994 .background-color-B3{background-color:#E3E9FD;} .d2-4171532301 .background-color-B3{background-color:#E3E9FD;}
.d2-1574744994 .background-color-B4{background-color:#E3E9FD;} .d2-4171532301 .background-color-B4{background-color:#E3E9FD;}
.d2-1574744994 .background-color-B5{background-color:#EDF0FD;} .d2-4171532301 .background-color-B5{background-color:#EDF0FD;}
.d2-1574744994 .background-color-B6{background-color:#F7F8FE;} .d2-4171532301 .background-color-B6{background-color:#F7F8FE;}
.d2-1574744994 .background-color-AA2{background-color:#4A6FF3;} .d2-4171532301 .background-color-AA2{background-color:#4A6FF3;}
.d2-1574744994 .background-color-AA4{background-color:#EDF0FD;} .d2-4171532301 .background-color-AA4{background-color:#EDF0FD;}
.d2-1574744994 .background-color-AA5{background-color:#F7F8FE;} .d2-4171532301 .background-color-AA5{background-color:#F7F8FE;}
.d2-1574744994 .background-color-AB4{background-color:#EDF0FD;} .d2-4171532301 .background-color-AB4{background-color:#EDF0FD;}
.d2-1574744994 .background-color-AB5{background-color:#F7F8FE;} .d2-4171532301 .background-color-AB5{background-color:#F7F8FE;}
.d2-1574744994 .color-N1{color:#0A0F25;} .d2-4171532301 .color-N1{color:#0A0F25;}
.d2-1574744994 .color-N2{color:#676C7E;} .d2-4171532301 .color-N2{color:#676C7E;}
.d2-1574744994 .color-N3{color:#9499AB;} .d2-4171532301 .color-N3{color:#9499AB;}
.d2-1574744994 .color-N4{color:#CFD2DD;} .d2-4171532301 .color-N4{color:#CFD2DD;}
.d2-1574744994 .color-N5{color:#DEE1EB;} .d2-4171532301 .color-N5{color:#DEE1EB;}
.d2-1574744994 .color-N6{color:#EEF1F8;} .d2-4171532301 .color-N6{color:#EEF1F8;}
.d2-1574744994 .color-N7{color:#FFFFFF;} .d2-4171532301 .color-N7{color:#FFFFFF;}
.d2-1574744994 .color-B1{color:#0D32B2;} .d2-4171532301 .color-B1{color:#0D32B2;}
.d2-1574744994 .color-B2{color:#0D32B2;} .d2-4171532301 .color-B2{color:#0D32B2;}
.d2-1574744994 .color-B3{color:#E3E9FD;} .d2-4171532301 .color-B3{color:#E3E9FD;}
.d2-1574744994 .color-B4{color:#E3E9FD;} .d2-4171532301 .color-B4{color:#E3E9FD;}
.d2-1574744994 .color-B5{color:#EDF0FD;} .d2-4171532301 .color-B5{color:#EDF0FD;}
.d2-1574744994 .color-B6{color:#F7F8FE;} .d2-4171532301 .color-B6{color:#F7F8FE;}
.d2-1574744994 .color-AA2{color:#4A6FF3;} .d2-4171532301 .color-AA2{color:#4A6FF3;}
.d2-1574744994 .color-AA4{color:#EDF0FD;} .d2-4171532301 .color-AA4{color:#EDF0FD;}
.d2-1574744994 .color-AA5{color:#F7F8FE;} .d2-4171532301 .color-AA5{color:#F7F8FE;}
.d2-1574744994 .color-AB4{color:#EDF0FD;} .d2-4171532301 .color-AB4{color:#EDF0FD;}
.d2-1574744994 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]></style><style type="text/css"><![CDATA[@keyframes d2Transition-d2-1574744994-0 { .d2-4171532301 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]></style><style type="text/css"><![CDATA[@keyframes d2Transition-d2-4171532301-0 {
0%, 0.000000% { 0%, 0.000000% {
opacity: 0; opacity: 0;
} }
@ -99,7 +99,7 @@
33.333333%, 100% { 33.333333%, 100% {
opacity: 0; opacity: 0;
} }
}@keyframes d2Transition-d2-1574744994-1 { }@keyframes d2Transition-d2-4171532301-1 {
0%, 33.309524% { 0%, 33.309524% {
opacity: 0; opacity: 0;
} }
@ -109,28 +109,28 @@
66.666667%, 100% { 66.666667%, 100% {
opacity: 0; opacity: 0;
} }
}@keyframes d2Transition-d2-1574744994-2 { }@keyframes d2Transition-d2-4171532301-2 {
0%, 66.642857% { 0%, 66.642857% {
opacity: 0; opacity: 0;
} }
66.666667%, 100.000000% { 66.666667%, 100.000000% {
opacity: 1; opacity: 1;
} }
}]]></style><g style="animation: d2Transition-d2-1574744994-0 4200ms infinite" class="d2-1574744994" width="255" height="434" viewBox="-101 -101 255 434"><rect x="-101.000000" y="-101.000000" width="255.000000" height="434.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="a"><g class="shape" ><rect x="0.000000" y="0.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="26.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">a</text></g><g id="b"><g class="shape" ><rect x="0.000000" y="166.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="26.500000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">b</text></g><g id="(a -&gt; b)[0]"><marker id="mk-3488378134" 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 points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 26.500000 68.000000 C 26.500000 106.000000 26.500000 126.000000 26.500000 162.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-1919875308)" /></g><mask id="d2-1919875308" maskUnits="userSpaceOnUse" x="-101" y="-101" width="255" height="434"> }]]></style><g style="animation: d2Transition-d2-4171532301-0 4200ms infinite" class="d2-4171532301" width="255" height="434" viewBox="-101 -101 255 434"><rect x="-101.000000" y="-101.000000" width="255.000000" height="434.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="a"><g class="shape" ><rect x="0.000000" y="0.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="26.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">a</text></g><g id="b"><g class="shape" ><rect x="0.000000" y="166.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="26.500000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">b</text></g><g id="(a -&gt; b)[0]"><marker id="mk-3488378134" 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 points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 26.500000 68.000000 C 26.500000 106.000000 26.500000 126.000000 26.500000 162.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-1919875308)" /></g><mask id="d2-1919875308" maskUnits="userSpaceOnUse" x="-101" y="-101" width="255" height="434">
<rect x="-101" y="-101" width="255" height="434" fill="white"></rect> <rect x="-101" y="-101" width="255" height="434" fill="white"></rect>
<rect x="22.500000" y="22.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect> <rect x="22.500000" y="22.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="22.500000" y="188.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect> <rect x="22.500000" y="188.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect>
</mask></g><g style="animation: d2Transition-d2-1574744994-1 4200ms infinite" class="d2-1574744994" width="368" height="600" viewBox="-101 -101 368 600"><rect x="-101.000000" y="-101.000000" width="368.000000" height="600.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="a"><g class="shape" ><rect x="0.000000" y="0.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="26.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">a</text></g><g id="b"><g class="shape" ><rect x="0.000000" y="166.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="26.500000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">b</text></g><g id="d"><g class="shape" ><rect x="56.000000" y="332.000000" width="54.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="83.000000" y="370.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">d</text></g><g id="c"><g class="shape" ><rect x="113.000000" y="166.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="139.500000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">c</text></g><g id="(a -&gt; b)[0]"><marker id="mk-3488378134" 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 points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 26.500000 68.000000 C 26.500000 106.000000 26.500000 126.000000 26.500000 162.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-483309782)" /></g><g id="(b -&gt; d)[0]"><path d="M 26.500000 234.000000 C 26.500000 272.000000 33.299999 292.000000 58.250760 328.692294" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-483309782)" /></g><g id="(c -&gt; d)[0]"><path d="M 139.500000 234.000000 C 139.500000 272.000000 132.699997 292.000000 107.749240 328.692294" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-483309782)" /></g><mask id="d2-483309782" maskUnits="userSpaceOnUse" x="-101" y="-101" width="368" height="600"> </mask></g><g style="animation: d2Transition-d2-4171532301-1 4200ms infinite" class="d2-4171532301" width="358" height="600" viewBox="-101 -101 358 600"><rect x="-101.000000" y="-101.000000" width="358.000000" height="600.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="a"><g class="shape" ><rect x="0.000000" y="0.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="26.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">a</text></g><g id="b"><g class="shape" ><rect x="0.000000" y="166.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="26.500000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">b</text></g><g id="d"><g class="shape" ><rect x="51.000000" y="332.000000" width="54.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="78.000000" y="370.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">d</text></g><g id="c"><g class="shape" ><rect x="103.000000" y="166.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="129.500000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">c</text></g><g id="(a -&gt; b)[0]"><marker id="mk-3488378134" 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 points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 26.500000 68.000000 C 26.500000 106.000000 26.500000 126.000000 26.500000 162.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-3474616616)" /></g><g id="(b -&gt; d)[0]"><path d="M 26.500000 234.000000 C 26.500000 272.000000 32.700001 292.000000 55.392241 328.600389" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-3474616616)" /></g><g id="(c -&gt; d)[0]"><path d="M 129.500000 234.000000 C 129.500000 272.000000 123.300003 292.000000 100.607759 328.600389" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-3474616616)" /></g><mask id="d2-3474616616" maskUnits="userSpaceOnUse" x="-101" y="-101" width="358" height="600">
<rect x="-101" y="-101" width="368" height="600" fill="white"></rect> <rect x="-101" y="-101" width="358" height="600" fill="white"></rect>
<rect x="22.500000" y="22.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect> <rect x="22.500000" y="22.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="22.500000" y="188.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect> <rect x="22.500000" y="188.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="78.500000" y="354.500000" width="9" height="21" fill="rgba(0,0,0,0.75)"></rect> <rect x="73.500000" y="354.500000" width="9" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="135.500000" y="188.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect> <rect x="125.500000" y="188.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect>
</mask></g><g style="animation: d2Transition-d2-1574744994-2 4200ms infinite" class="d2-1574744994" width="368" height="766" viewBox="-101 -101 368 766"><rect x="-101.000000" y="-101.000000" width="368.000000" height="766.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="a"><g class="shape" ><rect x="0.000000" y="0.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="26.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">a</text></g><g id="b"><g class="shape" ><rect x="0.000000" y="166.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="26.500000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">b</text></g><g id="d"><g class="shape" ><rect x="56.000000" y="332.000000" width="54.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="83.000000" y="370.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">d</text></g><g id="c"><g class="shape" ><rect x="113.000000" y="166.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="139.500000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">c</text></g><g id="e"><g class="shape" ><rect x="57.000000" y="498.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="83.500000" y="536.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">e</text></g><g id="(a -&gt; b)[0]"><marker id="mk-3488378134" 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 points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 26.500000 68.000000 C 26.500000 106.000000 26.500000 126.000000 26.500000 162.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2079318802)" /></g><g id="(b -&gt; d)[0]"><path d="M 26.500000 234.000000 C 26.500000 272.000000 33.299999 292.000000 58.250760 328.692294" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2079318802)" /></g><g id="(c -&gt; d)[0]"><path d="M 139.500000 234.000000 C 139.500000 272.000000 132.699997 292.000000 107.749240 328.692294" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2079318802)" /></g><g id="(d -&gt; e)[0]"><path d="M 83.000000 400.000000 C 83.000000 438.000000 83.000000 458.000000 83.000000 494.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2079318802)" /></g><mask id="d2-2079318802" maskUnits="userSpaceOnUse" x="-101" y="-101" width="368" height="766"> </mask></g><g style="animation: d2Transition-d2-4171532301-2 4200ms infinite" class="d2-4171532301" width="358" height="766" viewBox="-101 -101 358 766"><rect x="-101.000000" y="-101.000000" width="358.000000" height="766.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="a"><g class="shape" ><rect x="0.000000" y="0.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="26.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">a</text></g><g id="b"><g class="shape" ><rect x="0.000000" y="166.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="26.500000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">b</text></g><g id="d"><g class="shape" ><rect x="51.000000" y="332.000000" width="54.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="78.000000" y="370.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">d</text></g><g id="c"><g class="shape" ><rect x="103.000000" y="166.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="129.500000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">c</text></g><g id="e"><g class="shape" ><rect x="52.000000" y="498.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="78.500000" y="536.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">e</text></g><g id="(a -&gt; b)[0]"><marker id="mk-3488378134" 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 points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 26.500000 68.000000 C 26.500000 106.000000 26.500000 126.000000 26.500000 162.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2477141911)" /></g><g id="(b -&gt; d)[0]"><path d="M 26.500000 234.000000 C 26.500000 272.000000 32.700001 292.000000 55.392241 328.600389" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2477141911)" /></g><g id="(c -&gt; d)[0]"><path d="M 129.500000 234.000000 C 129.500000 272.000000 123.300003 292.000000 100.607759 328.600389" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2477141911)" /></g><g id="(d -&gt; e)[0]"><path d="M 78.000000 400.000000 C 78.000000 438.000000 78.000000 458.000000 78.000000 494.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2477141911)" /></g><mask id="d2-2477141911" maskUnits="userSpaceOnUse" x="-101" y="-101" width="358" height="766">
<rect x="-101" y="-101" width="368" height="766" fill="white"></rect> <rect x="-101" y="-101" width="358" height="766" fill="white"></rect>
<rect x="22.500000" y="22.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect> <rect x="22.500000" y="22.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="22.500000" y="188.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect> <rect x="22.500000" y="188.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="78.500000" y="354.500000" width="9" height="21" fill="rgba(0,0,0,0.75)"></rect> <rect x="73.500000" y="354.500000" width="9" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="135.500000" y="188.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect> <rect x="125.500000" y="188.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect>
<rect x="79.500000" y="520.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect> <rect x="74.500000" y="520.500000" width="8" height="21" fill="rgba(0,0,0,0.75)"></rect>
</mask></g></svg></svg> </mask></g></svg></svg>

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -79,7 +79,7 @@ a -> c
func testTxtar(t *testing.T) { func testTxtar(t *testing.T) {
var tcs []testCase var tcs []testCase
archive, err := txtar.ParseFile("./testdata/txtar.txt") archive, err := txtar.ParseFile("./txtar.txt")
assert.Success(t, err) assert.Success(t, err)
for _, f := range archive.Files { for _, f := range archive.Files {
tcs = append(tcs, testCase{ tcs = append(tcs, testCase{

View file

@ -11,7 +11,7 @@
"y": 0 "y": 0
}, },
"width": 424, "width": 424,
"height": 1387, "height": 1407,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 0, "strokeWidth": 0,
@ -175,7 +175,7 @@
"y": 232 "y": 232
}, },
"width": 254, "width": 254,
"height": 904, "height": 919,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 0, "strokeWidth": 0,
@ -214,7 +214,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 22, "x": 22,
"y": 968 "y": 983
}, },
"width": 230, "width": 230,
"height": 156, "height": 156,
@ -256,7 +256,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 172, "x": 172,
"y": 1140 "y": 1160
}, },
"width": 230, "width": 230,
"height": 156, "height": 156,
@ -359,11 +359,11 @@
"route": [ "route": [
{ {
"x": 62, "x": 62,
"y": 467 "y": 472
}, },
{ {
"x": 212, "x": 212,
"y": 467 "y": 472
} }
], ],
"animated": false, "animated": false,
@ -397,11 +397,11 @@
"route": [ "route": [
{ {
"x": 62, "x": 62,
"y": 608 "y": 618
}, },
{ {
"x": 212, "x": 212,
"y": 608 "y": 618
} }
], ],
"animated": false, "animated": false,
@ -435,11 +435,11 @@
"route": [ "route": [
{ {
"x": 62, "x": 62,
"y": 749 "y": 759
}, },
{ {
"x": 212, "x": 212,
"y": 749 "y": 759
} }
], ],
"animated": false, "animated": false,
@ -473,11 +473,11 @@
"route": [ "route": [
{ {
"x": 62, "x": 62,
"y": 890 "y": 900
}, },
{ {
"x": 212, "x": 212,
"y": 890 "y": 900
} }
], ],
"animated": false, "animated": false,
@ -511,11 +511,11 @@
"route": [ "route": [
{ {
"x": 62, "x": 62,
"y": 1062 "y": 1077
}, },
{ {
"x": 212, "x": 212,
"y": 1062 "y": 1077
} }
], ],
"animated": false, "animated": false,
@ -549,11 +549,11 @@
"route": [ "route": [
{ {
"x": 362, "x": 362,
"y": 1234 "y": 1254
}, },
{ {
"x": 212, "x": 212,
"y": 1234 "y": 1254
} }
], ],
"animated": false, "animated": false,
@ -591,7 +591,7 @@
}, },
{ {
"x": 62, "x": 62,
"y": 1375 "y": 1395
} }
], ],
"animated": false, "animated": false,
@ -629,7 +629,7 @@
}, },
{ {
"x": 212, "x": 212,
"y": 1375 "y": 1395
} }
], ],
"animated": false, "animated": false,
@ -667,7 +667,7 @@
}, },
{ {
"x": 362, "x": 362,
"y": 1375 "y": 1395
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View file

@ -11,7 +11,7 @@
"y": 12 "y": 12
}, },
"width": 424, "width": 424,
"height": 1387, "height": 1407,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 0, "strokeWidth": 0,
@ -175,7 +175,7 @@
"y": 244 "y": 244
}, },
"width": 254, "width": 254,
"height": 904, "height": 919,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 0, "strokeWidth": 0,
@ -214,7 +214,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 34, "x": 34,
"y": 980 "y": 995
}, },
"width": 230, "width": 230,
"height": 156, "height": 156,
@ -256,7 +256,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 184, "x": 184,
"y": 1152 "y": 1172
}, },
"width": 230, "width": 230,
"height": 156, "height": 156,
@ -359,11 +359,11 @@
"route": [ "route": [
{ {
"x": 74, "x": 74,
"y": 479 "y": 484
}, },
{ {
"x": 224, "x": 224,
"y": 479 "y": 484
} }
], ],
"animated": false, "animated": false,
@ -397,11 +397,11 @@
"route": [ "route": [
{ {
"x": 74, "x": 74,
"y": 620 "y": 630
}, },
{ {
"x": 224, "x": 224,
"y": 620 "y": 630
} }
], ],
"animated": false, "animated": false,
@ -435,11 +435,11 @@
"route": [ "route": [
{ {
"x": 74, "x": 74,
"y": 761 "y": 771
}, },
{ {
"x": 224, "x": 224,
"y": 761 "y": 771
} }
], ],
"animated": false, "animated": false,
@ -473,11 +473,11 @@
"route": [ "route": [
{ {
"x": 74, "x": 74,
"y": 902 "y": 912
}, },
{ {
"x": 224, "x": 224,
"y": 902 "y": 912
} }
], ],
"animated": false, "animated": false,
@ -511,11 +511,11 @@
"route": [ "route": [
{ {
"x": 74, "x": 74,
"y": 1074 "y": 1089
}, },
{ {
"x": 224, "x": 224,
"y": 1074 "y": 1089
} }
], ],
"animated": false, "animated": false,
@ -549,11 +549,11 @@
"route": [ "route": [
{ {
"x": 374, "x": 374,
"y": 1246 "y": 1266
}, },
{ {
"x": 224, "x": 224,
"y": 1246 "y": 1266
} }
], ],
"animated": false, "animated": false,
@ -591,7 +591,7 @@
}, },
{ {
"x": 74, "x": 74,
"y": 1387 "y": 1407
} }
], ],
"animated": false, "animated": false,
@ -629,7 +629,7 @@
}, },
{ {
"x": 224, "x": 224,
"y": 1387 "y": 1407
} }
], ],
"animated": false, "animated": false,
@ -667,7 +667,7 @@
}, },
{ {
"x": 374, "x": 374,
"y": 1387 "y": 1407
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View file

@ -0,0 +1,383 @@
{
"name": "",
"isFolderOnly": false,
"fontFamily": "SourceSansPro",
"shapes": [
{
"id": "x",
"type": "rectangle",
"pos": {
"x": 12,
"y": 52
},
"width": 100,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "B5",
"stroke": "B1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "x",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 7,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "y",
"type": "rectangle",
"pos": {
"x": 162,
"y": 52
},
"width": 100,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "B5",
"stroke": "B1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "y",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 8,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
}
],
"connections": [
{
"id": "(x -> x)[0]",
"src": "x",
"srcArrow": "none",
"dst": "x",
"dstArrow": "triangle",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "B1",
"borderRadius": 10,
"label": "self referential long description which is\nmultirow\n3 rows",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 261,
"labelHeight": 53,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 62,
"y": 211
},
{
"x": 142,
"y": 211
},
{
"x": 142,
"y": 290.5
},
{
"x": 62,
"y": 290.5
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 4
},
{
"id": "(x -> x)[1]",
"src": "x",
"srcArrow": "none",
"dst": "x",
"dstArrow": "triangle",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "B1",
"borderRadius": 10,
"label": "self referential long description which is\nmultirow",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 261,
"labelHeight": 37,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 62,
"y": 309
},
{
"x": 142,
"y": 309
},
{
"x": 142,
"y": 364.5
},
{
"x": 62,
"y": 364.5
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 4
},
{
"id": "(x -> y)[0]",
"src": "x",
"srcArrow": "none",
"dst": "y",
"dstArrow": "triangle",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "B1",
"borderRadius": 10,
"label": "normal",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 48,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 62,
"y": 402
},
{
"x": 212,
"y": 402
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 4
},
{
"id": "(y -> y)[0]",
"src": "y",
"srcArrow": "none",
"dst": "y",
"dstArrow": "triangle",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "B1",
"borderRadius": 10,
"label": "self referential long description which is\nmultirow\n3 rows",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 261,
"labelHeight": 53,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 212,
"y": 495
},
{
"x": 292,
"y": 495
},
{
"x": 292,
"y": 574.5
},
{
"x": 212,
"y": 574.5
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 4
},
{
"id": "(x -- )[0]",
"src": "x",
"srcArrow": "none",
"dst": "x-lifeline-end-1678191278",
"dstArrow": "none",
"opacity": 1,
"strokeDash": 6,
"strokeWidth": 2,
"stroke": "B2",
"borderRadius": 10,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 62,
"y": 118
},
{
"x": 62,
"y": 667.5
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 1
},
{
"id": "(y -- )[0]",
"src": "y",
"srcArrow": "none",
"dst": "y-lifeline-end-35261543",
"dstArrow": "none",
"opacity": 1,
"strokeDash": 6,
"strokeWidth": 2,
"stroke": "B2",
"borderRadius": 10,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 212,
"y": 118
},
{
"x": 212,
"y": 667.5
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 1
}
],
"root": {
"id": "",
"type": "",
"pos": {
"x": 0,
"y": 0
},
"width": 0,
"height": 0,
"opacity": 0,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 0,
"fill": "N7",
"stroke": "",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 0,
"fontFamily": "",
"language": "",
"color": "",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"zIndex": 0,
"level": 0
}
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -0,0 +1,383 @@
{
"name": "",
"isFolderOnly": false,
"fontFamily": "SourceSansPro",
"shapes": [
{
"id": "x",
"type": "rectangle",
"pos": {
"x": 12,
"y": 52
},
"width": 100,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "B5",
"stroke": "B1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "x",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 7,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "y",
"type": "rectangle",
"pos": {
"x": 162,
"y": 52
},
"width": 100,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "B5",
"stroke": "B1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "y",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 8,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
}
],
"connections": [
{
"id": "(x -> x)[0]",
"src": "x",
"srcArrow": "none",
"dst": "x",
"dstArrow": "triangle",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "B1",
"borderRadius": 10,
"label": "self referential long description which is\nmultirow\n3 rows",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 261,
"labelHeight": 53,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 62,
"y": 211
},
{
"x": 142,
"y": 211
},
{
"x": 142,
"y": 290.5
},
{
"x": 62,
"y": 290.5
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 4
},
{
"id": "(x -> x)[1]",
"src": "x",
"srcArrow": "none",
"dst": "x",
"dstArrow": "triangle",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "B1",
"borderRadius": 10,
"label": "self referential long description which is\nmultirow",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 261,
"labelHeight": 37,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 62,
"y": 309
},
{
"x": 142,
"y": 309
},
{
"x": 142,
"y": 364.5
},
{
"x": 62,
"y": 364.5
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 4
},
{
"id": "(x -> y)[0]",
"src": "x",
"srcArrow": "none",
"dst": "y",
"dstArrow": "triangle",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "B1",
"borderRadius": 10,
"label": "normal",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 48,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 62,
"y": 402
},
{
"x": 212,
"y": 402
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 4
},
{
"id": "(y -> y)[0]",
"src": "y",
"srcArrow": "none",
"dst": "y",
"dstArrow": "triangle",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "B1",
"borderRadius": 10,
"label": "self referential long description which is\nmultirow\n3 rows",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 261,
"labelHeight": 53,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 212,
"y": 495
},
{
"x": 292,
"y": 495
},
{
"x": 292,
"y": 574.5
},
{
"x": 212,
"y": 574.5
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 4
},
{
"id": "(x -- )[0]",
"src": "x",
"srcArrow": "none",
"dst": "x-lifeline-end-1678191278",
"dstArrow": "none",
"opacity": 1,
"strokeDash": 6,
"strokeWidth": 2,
"stroke": "B2",
"borderRadius": 10,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 62,
"y": 118
},
{
"x": 62,
"y": 667.5
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 1
},
{
"id": "(y -- )[0]",
"src": "y",
"srcArrow": "none",
"dst": "y-lifeline-end-35261543",
"dstArrow": "none",
"opacity": 1,
"strokeDash": 6,
"strokeWidth": 2,
"stroke": "B2",
"borderRadius": 10,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 212,
"y": 118
},
{
"x": 212,
"y": 667.5
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 1
}
],
"root": {
"id": "",
"type": "",
"pos": {
"x": 0,
"y": 0
},
"width": 0,
"height": 0,
"opacity": 0,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 0,
"fill": "N7",
"stroke": "",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 0,
"fontFamily": "",
"language": "",
"color": "",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"zIndex": 0,
"level": 0
}
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -303,3 +303,13 @@ Sequence: {
A -> File: One\nTwo\nThree\nFour\nFive\nSix A -> File: One\nTwo\nThree\nFour\nFive\nSix
} }
} }
-- sequence-multiline-self-reference --
shape: sequence_diagram
x
y
x -> x: self referential long description which is\nmultirow\n3 rows
x -> x: self referential long description which is\nmultirow
x -> y: normal
y -> y: self referential long description which is\nmultirow\n3 rows