From 8de7711e68b8fdb6d24416dff71ddc1f32e8cacc Mon Sep 17 00:00:00 2001 From: Bernard Xie Date: Wed, 31 May 2023 16:30:11 -0700 Subject: [PATCH 1/7] fix --- d2renderers/d2fonts/d2fonts.go | 5 +- d2renderers/d2fonts/d2fonts_test.go | 5 +- .../d2fonts/testdata/d2fonts/cut.exp.txt | Bin 4184 -> 4184 bytes .../testdata/all_shapes/sketch.exp.svg | 2 +- .../testdata/all_shapes_dark/sketch.exp.svg | 2 +- .../d2sketch/testdata/animated/sketch.exp.svg | 4 +- .../testdata/animated_dark/sketch.exp.svg | 4 +- .../testdata/arrowheads/sketch.exp.svg | 4 +- .../testdata/arrowheads_dark/sketch.exp.svg | 4 +- .../d2sketch/testdata/basic/sketch.exp.svg | 2 +- .../testdata/basic_dark/sketch.exp.svg | 2 +- .../testdata/child_to_child/sketch.exp.svg | 4 +- .../child_to_child_dark/sketch.exp.svg | 4 +- .../d2sketch/testdata/class/sketch.exp.svg | 2 +- .../sketch.exp.svg | 4 +- .../testdata/class_dark/sketch.exp.svg | 2 +- .../testdata/crows_feet/sketch.exp.svg | 2 +- .../testdata/crows_feet_dark/sketch.exp.svg | 2 +- .../d2sketch/testdata/dots-3d/sketch.exp.svg | 2 +- .../d2sketch/testdata/dots-all/sketch.exp.svg | 2 +- .../testdata/dots-multiple/sketch.exp.svg | 2 +- .../testdata/dots-real/sketch.exp.svg | 4 +- .../testdata/double-border/sketch.exp.svg | 4 +- .../testdata/elk_corners/sketch.exp.svg | 2 +- .../long_arrowhead_label/sketch.exp.svg | 4 +- .../d2sketch/testdata/opacity/sketch.exp.svg | 8 +- .../testdata/opacity_dark/sketch.exp.svg | 8 +- .../d2sketch/testdata/overlay/sketch.exp.svg | 2 +- .../testdata/paper-real/sketch.exp.svg | 4 +- .../testdata/root-fill/sketch.exp.svg | 6 +- .../testdata/sql_tables/sketch.exp.svg | 2 +- .../testdata/sql_tables_dark/sketch.exp.svg | 2 +- .../d2sketch/testdata/terminal/sketch.exp.svg | 4 +- .../d2sketch/testdata/twitter/sketch.exp.svg | 8 +- .../testdata/twitter_dark/sketch.exp.svg | 8 +- .../diagram_wider_than_tooltip/sketch.exp.svg | 4 +- .../testdata/internal-links/sketch.exp.svg | 2 +- .../appendix/testdata/links/sketch.exp.svg | 2 +- .../testdata/links_dark/sketch.exp.svg | 2 +- .../testdata/tooltip_fill/sketch.exp.svg | 2 +- .../tooltip_wider_than_diagram/sketch.exp.svg | 2 +- .../testdata/all_shapes/dark_theme.exp.svg | 2 +- .../testdata/animated/dark_theme.exp.svg | 4 +- .../testdata/arrowheads/dark_theme.exp.svg | 4 +- .../testdata/basic/dark_theme.exp.svg | 2 +- .../child_to_child/dark_theme.exp.svg | 4 +- .../testdata/class/dark_theme.exp.svg | 2 +- .../testdata/code/dark_theme.exp.svg | 10 +- .../testdata/opacity/dark_theme.exp.svg | 8 +- .../testdata/overlay/dark_theme.exp.svg | 2 +- .../testdata/sql_tables/dark_theme.exp.svg | 2 +- .../testdata/twitter/dark_theme.exp.svg | 8 +- .../testdata/TestCLI_E2E/abspath.exp.svg | 2 +- .../testdata/TestCLI_E2E/animation.exp.svg | 4 +- .../testdata/TestCLI_E2E/center.exp.svg | 2 +- .../TestCLI_E2E/internal_linked_pdf.exp.pdf | Bin 79721 -> 79990 bytes .../TestCLI_E2E/multiboard/life/index.exp.svg | 2 +- .../multiboard/life/layers/broker.exp.svg | 2 +- .../multiboard/life/layers/stocks.exp.svg | 2 +- .../multiboard/life/scenarios/why.exp.svg | 2 +- .../multiboard/life_index_d2/index.exp.svg | 2 +- .../life_index_d2/layers/broker.exp.svg | 2 +- .../life_index_d2/layers/stocks.exp.svg | 2 +- .../life_index_d2/scenarios/why.exp.svg | 2 +- .../testdata/TestCLI_E2E/stdin.exp.svg | 2 +- .../testdata/TestCLI_E2E/with-font.exp.svg | 4 +- .../empty-markdown/dagre/sketch.exp.svg | 4 +- .../testdata/patterns/3d/dagre/sketch.exp.svg | 2 +- .../patterns/all_shapes/dagre/sketch.exp.svg | 2 +- .../patterns/multiple/dagre/sketch.exp.svg | 2 +- .../patterns/paper/dagre/sketch.exp.svg | 2 +- .../patterns/real-lines/dagre/sketch.exp.svg | 6 +- .../patterns/real/dagre/sketch.exp.svg | 4 +- .../root-dots-with-fill/dagre/sketch.exp.svg | 2 +- .../patterns/root-dots/dagre/sketch.exp.svg | 2 +- .../patterns/shape/dagre/sketch.exp.svg | 2 +- .../ampersand-escape/dagre/sketch.exp.svg | 2 +- .../ampersand-escape/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 6 +- .../elk/sketch.exp.svg | 6 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 6 +- .../elk/sketch.exp.svg | 6 +- .../cylinder_grid_label/dagre/sketch.exp.svg | 4 +- .../cylinder_grid_label/elk/sketch.exp.svg | 4 +- .../dagre-disconnect/dagre/sketch.exp.svg | 6 +- .../dagre-disconnect/elk/sketch.exp.svg | 6 +- .../dagre/sketch.exp.svg | 6 +- .../dagre_broken_arrowhead/elk/sketch.exp.svg | 6 +- .../dagre/sketch.exp.svg | 6 +- .../elk/sketch.exp.svg | 6 +- .../dagre_special_ids/dagre/sketch.exp.svg | 2 +- .../dagre_special_ids/elk/sketch.exp.svg | 2 +- .../elk_alignment/dagre/sketch.exp.svg | 6 +- .../elk_alignment/elk/sketch.exp.svg | 6 +- .../elk_loop_panic/dagre/sketch.exp.svg | 4 +- .../elk_loop_panic/elk/sketch.exp.svg | 4 +- .../regression/elk_order/dagre/sketch.exp.svg | 6 +- .../regression/elk_order/elk/sketch.exp.svg | 6 +- .../empty_class_height/dagre/sketch.exp.svg | 2 +- .../empty_class_height/elk/sketch.exp.svg | 2 +- .../empty_md_measurement/dagre/sketch.exp.svg | 6 +- .../empty_md_measurement/elk/sketch.exp.svg | 6 +- .../empty_sequence/dagre/sketch.exp.svg | 2 +- .../empty_sequence/elk/sketch.exp.svg | 2 +- .../regression/grid_oom/dagre/sketch.exp.svg | 2 +- .../regression/grid_oom/elk/sketch.exp.svg | 2 +- .../grid_panic/dagre/sketch.exp.svg | 4 +- .../regression/grid_panic/elk/sketch.exp.svg | 4 +- .../regression/hex-fill/dagre/sketch.exp.svg | 2 +- .../regression/hex-fill/elk/sketch.exp.svg | 2 +- .../just-width/dagre/sketch.exp.svg | 2 +- .../regression/just-width/elk/sketch.exp.svg | 2 +- .../link_with_ampersand/dagre/sketch.exp.svg | 2 +- .../link_with_ampersand/elk/sketch.exp.svg | 2 +- .../long_arrowhead_label/dagre/sketch.exp.svg | 4 +- .../long_arrowhead_label/elk/sketch.exp.svg | 4 +- .../md_font_weight/dagre/sketch.exp.svg | 4 +- .../md_font_weight/elk/sketch.exp.svg | 4 +- .../md_h1_li_li/dagre/sketch.exp.svg | 6 +- .../regression/md_h1_li_li/elk/sketch.exp.svg | 6 +- .../nested_steps/dagre/sketch.exp.svg | 4 +- .../nested_steps/elk/sketch.exp.svg | 4 +- .../regression/no-lexer/dagre/sketch.exp.svg | 2 +- .../regression/no-lexer/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../opacity-on-label/dagre/sketch.exp.svg | 8 +- .../opacity-on-label/elk/sketch.exp.svg | 8 +- .../dagre/sketch.exp.svg | 6 +- .../overlapping-edge-label/elk/sketch.exp.svg | 6 +- .../query_param_escape/dagre/sketch.exp.svg | 2 +- .../query_param_escape/elk/sketch.exp.svg | 2 +- .../root-container/dagre/sketch.exp.svg | 4 +- .../root-container/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../regression/slow_grid/dagre/sketch.exp.svg | 2 +- .../regression/slow_grid/elk/sketch.exp.svg | 2 +- .../sql_table_overflow/dagre/sketch.exp.svg | 2 +- .../sql_table_overflow/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../unconnected/dagre/sketch.exp.svg | 6 +- .../regression/unconnected/elk/sketch.exp.svg | 6 +- .../dagre/sketch.exp.svg | 6 +- .../elk/sketch.exp.svg | 6 +- .../root/border-radius/dagre/sketch.exp.svg | 2 +- .../root/border-radius/elk/sketch.exp.svg | 2 +- .../root/double-border/dagre/sketch.exp.svg | 2 +- .../root/double-border/elk/sketch.exp.svg | 2 +- .../even-stroke-width/dagre/sketch.exp.svg | 2 +- .../root/even-stroke-width/elk/sketch.exp.svg | 2 +- .../testdata/root/fill/dagre/sketch.exp.svg | 2 +- .../testdata/root/fill/elk/sketch.exp.svg | 2 +- .../root/stroke-dash/dagre/sketch.exp.svg | 2 +- .../root/stroke-dash/elk/sketch.exp.svg | 2 +- .../root/stroke-no-width/dagre/sketch.exp.svg | 2 +- .../root/stroke-no-width/elk/sketch.exp.svg | 2 +- .../root/stroke-width/dagre/sketch.exp.svg | 2 +- .../root/stroke-width/elk/sketch.exp.svg | 2 +- .../sanity/1_to_2/dagre/sketch.exp.svg | 2 +- .../testdata/sanity/1_to_2/elk/sketch.exp.svg | 2 +- .../sanity/basic/dagre/sketch.exp.svg | 2 +- .../testdata/sanity/basic/elk/sketch.exp.svg | 2 +- .../child_to_child/dagre/sketch.exp.svg | 4 +- .../sanity/child_to_child/elk/sketch.exp.svg | 4 +- .../3d_fill_and_stroke/dagre/sketch.exp.svg | 2 +- .../3d_fill_and_stroke/elk/sketch.exp.svg | 2 +- .../stable/all_shapes/dagre/sketch.exp.svg | 2 +- .../stable/all_shapes/elk/sketch.exp.svg | 2 +- .../all_shapes_multiple/dagre/sketch.exp.svg | 2 +- .../all_shapes_multiple/elk/sketch.exp.svg | 2 +- .../all_shapes_shadow/dagre/sketch.exp.svg | 2 +- .../all_shapes_shadow/elk/sketch.exp.svg | 2 +- .../stable/animated/dagre/sketch.exp.svg | 4 +- .../stable/animated/elk/sketch.exp.svg | 4 +- .../stable/array-classes/dagre/sketch.exp.svg | 2 +- .../stable/array-classes/elk/sketch.exp.svg | 2 +- .../arrowhead_adjustment/dagre/sketch.exp.svg | 4 +- .../arrowhead_adjustment/elk/sketch.exp.svg | 4 +- .../arrowhead_labels/dagre/sketch.exp.svg | 4 +- .../arrowhead_labels/elk/sketch.exp.svg | 4 +- .../arrowhead_scaling/dagre/sketch.exp.svg | 6 +- .../arrowhead_scaling/elk/sketch.exp.svg | 6 +- .../stable/binary_tree/dagre/sketch.exp.svg | 2 +- .../stable/binary_tree/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../stable/border-radius/dagre/sketch.exp.svg | 2 +- .../stable/border-radius/elk/sketch.exp.svg | 2 +- .../testdata/stable/br/dagre/sketch.exp.svg | 4 +- .../testdata/stable/br/elk/sketch.exp.svg | 4 +- .../stable/chaos2/dagre/sketch.exp.svg | 6 +- .../testdata/stable/chaos2/elk/sketch.exp.svg | 6 +- .../circle_arrowhead/dagre/sketch.exp.svg | 4 +- .../circle_arrowhead/elk/sketch.exp.svg | 4 +- .../circular_dependency/dagre/sketch.exp.svg | 2 +- .../circular_dependency/elk/sketch.exp.svg | 2 +- .../stable/class/dagre/sketch.exp.svg | 2 +- .../testdata/stable/class/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../stable/classes/dagre/sketch.exp.svg | 4 +- .../stable/classes/elk/sketch.exp.svg | 4 +- .../stable/code_snippet/dagre/sketch.exp.svg | 8 +- .../stable/code_snippet/elk/sketch.exp.svg | 8 +- .../complex-layers/dagre/sketch.exp.svg | 4 +- .../stable/complex-layers/elk/sketch.exp.svg | 4 +- .../connected_container/dagre/sketch.exp.svg | 4 +- .../connected_container/elk/sketch.exp.svg | 4 +- .../constant_near_stress/dagre/sketch.exp.svg | 6 +- .../constant_near_stress/elk/sketch.exp.svg | 6 +- .../constant_near_title/dagre/sketch.exp.svg | 6 +- .../constant_near_title/elk/sketch.exp.svg | 6 +- .../container_edges/dagre/sketch.exp.svg | 4 +- .../stable/container_edges/elk/sketch.exp.svg | 4 +- .../crow_foot_arrowhead/dagre/sketch.exp.svg | 2 +- .../crow_foot_arrowhead/elk/sketch.exp.svg | 2 +- .../stable/cycle-order/dagre/sketch.exp.svg | 4 +- .../stable/cycle-order/elk/sketch.exp.svg | 4 +- .../stable/dagger_grid/dagre/sketch.exp.svg | 2 +- .../stable/dagger_grid/elk/sketch.exp.svg | 2 +- .../stable/dense/dagre/sketch.exp.svg | 2 +- .../testdata/stable/dense/elk/sketch.exp.svg | 2 +- .../different_subgraphs/dagre/sketch.exp.svg | 4 +- .../different_subgraphs/elk/sketch.exp.svg | 4 +- .../stable/direction/dagre/sketch.exp.svg | 4 +- .../stable/direction/elk/sketch.exp.svg | 4 +- .../edge-label-overflow/dagre/sketch.exp.svg | 4 +- .../edge-label-overflow/elk/sketch.exp.svg | 4 +- .../elk_container_height/dagre/sketch.exp.svg | 4 +- .../elk_container_height/elk/sketch.exp.svg | 4 +- .../stable/elk_shim/dagre/sketch.exp.svg | 6 +- .../stable/elk_shim/elk/sketch.exp.svg | 6 +- .../stable/ent2d2_basic/dagre/sketch.exp.svg | 4 +- .../stable/ent2d2_basic/elk/sketch.exp.svg | 4 +- .../stable/ent2d2_right/dagre/sketch.exp.svg | 4 +- .../stable/ent2d2_right/elk/sketch.exp.svg | 4 +- .../executive_grid/dagre/sketch.exp.svg | 2 +- .../stable/executive_grid/elk/sketch.exp.svg | 2 +- .../stable/font_colors/dagre/sketch.exp.svg | 4 +- .../stable/font_colors/elk/sketch.exp.svg | 4 +- .../stable/font_sizes/dagre/sketch.exp.svg | 4 +- .../stable/font_sizes/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../giant_markdown_test/dagre/sketch.exp.svg | 10 +- .../giant_markdown_test/elk/sketch.exp.svg | 10 +- .../stable/grid_animated/dagre/sketch.exp.svg | 4 +- .../stable/grid_animated/elk/sketch.exp.svg | 4 +- .../stable/grid_even/dagre/sketch.exp.svg | 4 +- .../stable/grid_even/elk/sketch.exp.svg | 4 +- .../stable/grid_gap/dagre/sketch.exp.svg | 4 +- .../stable/grid_gap/elk/sketch.exp.svg | 4 +- .../stable/grid_icon/dagre/sketch.exp.svg | 4 +- .../stable/grid_icon/elk/sketch.exp.svg | 4 +- .../stable/grid_nested/dagre/sketch.exp.svg | 4 +- .../stable/grid_nested/elk/sketch.exp.svg | 4 +- .../grid_nested_gap0/dagre/sketch.exp.svg | 4 +- .../grid_nested_gap0/elk/sketch.exp.svg | 4 +- .../stable/grid_tests/dagre/sketch.exp.svg | 4 +- .../stable/grid_tests/elk/sketch.exp.svg | 4 +- .../stable/hexagon_3d/dagre/sketch.exp.svg | 2 +- .../stable/hexagon_3d/elk/sketch.exp.svg | 2 +- .../testdata/stable/hr/dagre/sketch.exp.svg | 6 +- .../testdata/stable/hr/elk/sketch.exp.svg | 6 +- .../icon-containers/dagre/sketch.exp.svg | 4 +- .../stable/icon-containers/elk/sketch.exp.svg | 4 +- .../stable/icon-label/dagre/sketch.exp.svg | 2 +- .../stable/icon-label/elk/sketch.exp.svg | 2 +- .../stable/images/dagre/sketch.exp.svg | 2 +- .../testdata/stable/images/elk/sketch.exp.svg | 2 +- .../stable/investigate/dagre/sketch.exp.svg | 6 +- .../stable/investigate/elk/sketch.exp.svg | 6 +- .../stable/large_arch/dagre/sketch.exp.svg | 4 +- .../stable/large_arch/elk/sketch.exp.svg | 4 +- .../stable/latex/dagre/sketch.exp.svg | 4 +- .../testdata/stable/latex/elk/sketch.exp.svg | 4 +- .../legend_with_near_key/dagre/sketch.exp.svg | 4 +- .../legend_with_near_key/elk/sketch.exp.svg | 4 +- .../testdata/stable/li1/dagre/sketch.exp.svg | 6 +- .../testdata/stable/li1/elk/sketch.exp.svg | 6 +- .../testdata/stable/li2/dagre/sketch.exp.svg | 8 +- .../testdata/stable/li2/elk/sketch.exp.svg | 8 +- .../testdata/stable/li3/dagre/sketch.exp.svg | 6 +- .../testdata/stable/li3/elk/sketch.exp.svg | 6 +- .../testdata/stable/li4/dagre/sketch.exp.svg | 8 +- .../testdata/stable/li4/elk/sketch.exp.svg | 8 +- .../stable/links/dagre/sketch.exp.svg | 2 +- .../testdata/stable/links/elk/sketch.exp.svg | 2 +- .../stable/lone_h1/dagre/sketch.exp.svg | 6 +- .../stable/lone_h1/elk/sketch.exp.svg | 6 +- .../stable/markdown/dagre/sketch.exp.svg | 8 +- .../stable/markdown/elk/sketch.exp.svg | 8 +- .../markdown_stroke_fill/dagre/sketch.exp.svg | 6 +- .../markdown_stroke_fill/elk/sketch.exp.svg | 6 +- .../md_2space_newline/dagre/sketch.exp.svg | 4 +- .../md_2space_newline/elk/sketch.exp.svg | 4 +- .../md_backslash_newline/dagre/sketch.exp.svg | 4 +- .../md_backslash_newline/elk/sketch.exp.svg | 4 +- .../md_code_block_fenced/dagre/sketch.exp.svg | 8 +- .../md_code_block_fenced/elk/sketch.exp.svg | 8 +- .../dagre/sketch.exp.svg | 8 +- .../md_code_block_indented/elk/sketch.exp.svg | 8 +- .../md_fontsize_10/dagre/sketch.exp.svg | 8 +- .../stable/md_fontsize_10/elk/sketch.exp.svg | 8 +- .../stable/mono-edge/dagre/sketch.exp.svg | 6 +- .../stable/mono-edge/elk/sketch.exp.svg | 6 +- .../stable/mono-font/dagre/sketch.exp.svg | 4 +- .../stable/mono-font/elk/sketch.exp.svg | 4 +- .../multiline_text/dagre/sketch.exp.svg | 2 +- .../stable/multiline_text/elk/sketch.exp.svg | 2 +- .../multiple_offset/dagre/sketch.exp.svg | 4 +- .../stable/multiple_offset/elk/sketch.exp.svg | 4 +- .../multiple_offset_left/dagre/sketch.exp.svg | 4 +- .../multiple_offset_left/elk/sketch.exp.svg | 4 +- .../multiple_trees/dagre/sketch.exp.svg | 2 +- .../stable/multiple_trees/elk/sketch.exp.svg | 2 +- .../stable/n22_e32/dagre/sketch.exp.svg | 2 +- .../stable/n22_e32/elk/sketch.exp.svg | 2 +- .../stable/near-alone/dagre/sketch.exp.svg | 2 +- .../stable/near-alone/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../number_connections/dagre/sketch.exp.svg | 2 +- .../number_connections/elk/sketch.exp.svg | 2 +- .../one_container_loop/dagre/sketch.exp.svg | 4 +- .../one_container_loop/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 6 +- .../elk/sketch.exp.svg | 6 +- .../testdata/stable/p/dagre/sketch.exp.svg | 6 +- e2etests/testdata/stable/p/elk/sketch.exp.svg | 6 +- .../testdata/stable/pre/dagre/sketch.exp.svg | 8 +- .../testdata/stable/pre/elk/sketch.exp.svg | 8 +- .../self-referencing/dagre/sketch.exp.svg | 4 +- .../self-referencing/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 8 +- .../elk/sketch.exp.svg | 8 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 4 +- .../sequence_diagram_note/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../sequence_diagram_real/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../sequence_diagram_span/elk/sketch.exp.svg | 4 +- .../sequence_diagrams/dagre/sketch.exp.svg | 6 +- .../sequence_diagrams/elk/sketch.exp.svg | 6 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../stable/sql_tables/dagre/sketch.exp.svg | 2 +- .../stable/sql_tables/elk/sketch.exp.svg | 2 +- .../stable/square_3d/dagre/sketch.exp.svg | 2 +- .../stable/square_3d/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../stable/stylish/dagre/sketch.exp.svg | 4 +- .../stable/stylish/elk/sketch.exp.svg | 4 +- .../stable/teleport_grid/dagre/sketch.exp.svg | 8 +- .../stable/teleport_grid/elk/sketch.exp.svg | 8 +- .../text_font_sizes/dagre/sketch.exp.svg | 6 +- .../stable/text_font_sizes/elk/sketch.exp.svg | 6 +- .../stable/tooltips/dagre/sketch.exp.svg | 2 +- .../stable/tooltips/elk/sketch.exp.svg | 2 +- .../transparent_3d/dagre/sketch.exp.svg | 2 +- .../stable/transparent_3d/elk/sketch.exp.svg | 2 +- .../unnamed_only_height/dagre/sketch.exp.svg | 6 +- .../unnamed_only_height/elk/sketch.exp.svg | 6 +- .../unnamed_only_width/dagre/sketch.exp.svg | 6 +- .../unnamed_only_width/elk/sketch.exp.svg | 6 +- .../stable/us_map/dagre/sketch.exp.svg | 2 +- .../testdata/stable/us_map/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 12 +- .../elk/sketch.exp.svg | 12 +- .../themes/origami/dagre/sketch.exp.svg | 6 +- .../themes/origami/elk/sketch.exp.svg | 6 +- .../themes/terminal/dagre/sketch.exp.svg | 10 +- .../themes/terminal/elk/sketch.exp.svg | 10 +- .../terminal_grayscale/dagre/sketch.exp.svg | 4 +- .../terminal_grayscale/elk/sketch.exp.svg | 4 +- .../container_icon_label/dagre/sketch.exp.svg | 4 +- .../container_icon_label/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 6 +- .../elk/sketch.exp.svg | 6 +- .../dagre/sketch.exp.svg | 6 +- .../elk/sketch.exp.svg | 6 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 10 +- .../shape_set_width_height/elk/sketch.exp.svg | 10 +- .../unicode/chinese/dagre/sketch.exp.svg | 6 +- .../unicode/chinese/elk/sketch.exp.svg | 6 +- .../unicode/emojis/dagre/sketch.exp.svg | 2 +- .../unicode/emojis/elk/sketch.exp.svg | 2 +- .../japanese-basic/dagre/sketch.exp.svg | 2 +- .../unicode/japanese-basic/elk/sketch.exp.svg | 2 +- .../japanese-full/dagre/sketch.exp.svg | 4 +- .../unicode/japanese-full/elk/sketch.exp.svg | 4 +- .../japanese-mixed/dagre/sketch.exp.svg | 2 +- .../unicode/japanese-mixed/elk/sketch.exp.svg | 2 +- .../unicode/korean/dagre/sketch.exp.svg | 2 +- .../unicode/korean/elk/sketch.exp.svg | 2 +- .../mixed-language-2/dagre/sketch.exp.svg | 2 +- .../mixed-language-2/elk/sketch.exp.svg | 2 +- .../mixed-language/dagre/sketch.exp.svg | 6 +- .../unicode/mixed-language/elk/sketch.exp.svg | 6 +- .../unicode/with-style/dagre/sketch.exp.svg | 2 +- .../unicode/with-style/elk/sketch.exp.svg | 2 +- lib/font/subsetFont.go | 898 ++++++++++++++++++ 447 files changed, 1768 insertions(+), 872 deletions(-) create mode 100644 lib/font/subsetFont.go diff --git a/d2renderers/d2fonts/d2fonts.go b/d2renderers/d2fonts/d2fonts.go index 0583710178..2c692ab35e 100644 --- a/d2renderers/d2fonts/d2fonts.go +++ b/d2renderers/d2fonts/d2fonts.go @@ -10,8 +10,7 @@ import ( "fmt" "strings" - "github.com/jung-kurt/gofpdf" - + "oss.terrastruct.com/d2/lib/font" fontlib "oss.terrastruct.com/d2/lib/font" ) @@ -44,7 +43,7 @@ func (f Font) GetEncodedSubset(corpus string) string { fontBuf := make([]byte, len(FontFaces[f])) copy(fontBuf, FontFaces[f]) - fontBuf = gofpdf.UTF8CutFont(fontBuf, uniqueChars) + fontBuf = font.UTF8CutFont(fontBuf, uniqueChars) fontBuf, err := fontlib.Sfnt2Woff(fontBuf) if err != nil { diff --git a/d2renderers/d2fonts/d2fonts_test.go b/d2renderers/d2fonts/d2fonts_test.go index 0d28aece8e..fc95ff310a 100644 --- a/d2renderers/d2fonts/d2fonts_test.go +++ b/d2renderers/d2fonts/d2fonts_test.go @@ -4,8 +4,7 @@ import ( "path/filepath" "testing" - "github.com/jung-kurt/gofpdf" - + "oss.terrastruct.com/d2/lib/font" "oss.terrastruct.com/util-go/assert" "oss.terrastruct.com/util-go/diff" ) @@ -17,7 +16,7 @@ func TestCutFont(t *testing.T) { } fontBuf := make([]byte, len(FontFaces[f])) copy(fontBuf, FontFaces[f]) - fontBuf = gofpdf.UTF8CutFont(fontBuf, " 1") + fontBuf = font.UTF8CutFont(fontBuf, " 1") err := diff.Testdata(filepath.Join("testdata", "d2fonts", "cut"), ".txt", fontBuf) assert.Success(t, err) } diff --git a/d2renderers/d2fonts/testdata/d2fonts/cut.exp.txt b/d2renderers/d2fonts/testdata/d2fonts/cut.exp.txt index 358066a59c49de994965d28b17e733ba662a0b9b..1a4140c5f257c75c1e05d3f37e6ee07fbcb5018e 100644 GIT binary patch delta 24 gcmcbia6@5&GNa!{6>&yJjmb8QhZ%QmVv67c0Awo%aR2}S delta 24 gcmcbia6@5&GGow26>&yJoyj(ghZ#3*Vv67c0AzCqaR2}S diff --git a/d2renderers/d2sketch/testdata/all_shapes/sketch.exp.svg b/d2renderers/d2sketch/testdata/all_shapes/sketch.exp.svg index 9d1f0775f8..c71244a52f 100644 --- a/d2renderers/d2sketch/testdata/all_shapes/sketch.exp.svg +++ b/d2renderers/d2sketch/testdata/all_shapes/sketch.exp.svg @@ -4,7 +4,7 @@ } @font-face { font-family: d2-2495420426-font-bold; - src: url("data:application/font-woff;base64,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"); + src: url("data:application/font-woff;base64,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"); }]]>