diagrammatron 0.4.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/edges.yaml ADDED
@@ -0,0 +1,45 @@
1
+ type: object
2
+ properties:
3
+ edges:
4
+ type: array
5
+ minItems: 0
6
+ default: []
7
+ items:
8
+ $ref: "#/$defs/Edge"
9
+ nodes:
10
+ type: array
11
+ minItems: 0
12
+ default: []
13
+ items:
14
+ $ref: "#/$defs/Node"
15
+ additionalProperties: true
16
+ $defs:
17
+ Node:
18
+ type: object
19
+ required:
20
+ - label
21
+ - sid
22
+ - xo
23
+ - yo
24
+ properties:
25
+ label:
26
+ type: string
27
+ sid:
28
+ type: integer
29
+ xo:
30
+ type: integer
31
+ yo:
32
+ type: integer
33
+ additionalProperties: true
34
+ Edge:
35
+ type: object
36
+ required:
37
+ - between
38
+ properties:
39
+ between:
40
+ type: array
41
+ items:
42
+ type: string
43
+ minItems: 2
44
+ maxItems: 2
45
+ additionalProperties: true
data/lib/nodes.yaml ADDED
@@ -0,0 +1,36 @@
1
+ type: object
2
+ properties:
3
+ edges:
4
+ type: array
5
+ minItems: 0
6
+ default: []
7
+ items:
8
+ $ref: "#/$defs/Edge"
9
+ nodes:
10
+ type: array
11
+ minItems: 0
12
+ default: []
13
+ items:
14
+ $ref: "#/$defs/Node"
15
+ additionalProperties: true
16
+ $defs:
17
+ Node:
18
+ type: object
19
+ required:
20
+ - label
21
+ properties:
22
+ label:
23
+ type: string
24
+ additionalProperties: true
25
+ Edge:
26
+ type: object
27
+ required:
28
+ - between
29
+ properties:
30
+ between:
31
+ type: array
32
+ items:
33
+ type: string
34
+ minItems: 2
35
+ maxItems: 2
36
+ additionalProperties: true
data/lib/place.yaml ADDED
@@ -0,0 +1,65 @@
1
+ type: object
2
+ properties:
3
+ edges:
4
+ type: array
5
+ minItems: 0
6
+ default: []
7
+ items:
8
+ $ref: "#/$defs/Edge"
9
+ nodes:
10
+ type: array
11
+ minItems: 0
12
+ default: []
13
+ items:
14
+ $ref: "#/$defs/Node"
15
+ additionalProperties: true
16
+ $defs:
17
+ Node:
18
+ type: object
19
+ required:
20
+ - label
21
+ - sid
22
+ - xo
23
+ - yo
24
+ properties:
25
+ label:
26
+ type: string
27
+ sid:
28
+ type: integer
29
+ xo:
30
+ type: integer
31
+ yo:
32
+ type: integer
33
+ additionalProperties: true
34
+ Edge:
35
+ type: object
36
+ required:
37
+ - between
38
+ - path
39
+ - sid
40
+ properties:
41
+ between:
42
+ type: array
43
+ items:
44
+ type: string
45
+ minItems: 2
46
+ maxItems: 2
47
+ path:
48
+ type: array
49
+ items:
50
+ $ref: "#/$defs/Position"
51
+ minItems: 2
52
+ sid:
53
+ type: integer
54
+ additionalProperties: true
55
+ Position:
56
+ type: object
57
+ required:
58
+ - xo
59
+ - yo
60
+ properties:
61
+ xo:
62
+ type: number
63
+ yo:
64
+ type: number
65
+
data/lib/render.yaml ADDED
@@ -0,0 +1,111 @@
1
+ type: object
2
+ properties:
3
+ diagram:
4
+ type: object
5
+ default: {}
6
+ properties:
7
+ style:
8
+ $ref: "#/$defs/Style"
9
+ default: 'default'
10
+ edges:
11
+ type: array
12
+ minItems: 0
13
+ default: []
14
+ items:
15
+ $ref: "#/$defs/Edge"
16
+ nodes:
17
+ type: array
18
+ minItems: 0
19
+ default: []
20
+ items:
21
+ $ref: "#/$defs/Node"
22
+ styles:
23
+ type: object
24
+ properties:
25
+ node:
26
+ type: object
27
+ properties:
28
+ default:
29
+ type: object
30
+ default: {}
31
+ additionalProperties: true
32
+ edge:
33
+ type: object
34
+ default: {}
35
+ properties:
36
+ default:
37
+ type: object
38
+ default: {}
39
+ additionalProperties: true
40
+ diagram:
41
+ type: object
42
+ default: {}
43
+ properties:
44
+ default:
45
+ type: object
46
+ default: {}
47
+ additionalProperties: true
48
+ additionalProperties: true
49
+ additionalProperties: true
50
+ $defs:
51
+ Node:
52
+ type: object
53
+ required:
54
+ - label
55
+ - sid
56
+ - xo
57
+ - yo
58
+ properties:
59
+ label:
60
+ type: string
61
+ sid:
62
+ type: integer
63
+ xo:
64
+ type: integer
65
+ yo:
66
+ type: integer
67
+ style:
68
+ $ref: "#/$defs/Style"
69
+ default: 'default'
70
+ additionalProperties: true
71
+ Edge:
72
+ type: object
73
+ required:
74
+ - between
75
+ - path
76
+ - sid
77
+ properties:
78
+ between:
79
+ type: array
80
+ items:
81
+ type: string
82
+ minItems: 2
83
+ maxItems: 2
84
+ path:
85
+ type: array
86
+ items:
87
+ $ref: "#/$defs/Position"
88
+ minItems: 2
89
+ sid:
90
+ type: integer
91
+ style:
92
+ $ref: "#/$defs/Style"
93
+ default: 'default'
94
+ additionalProperties: true
95
+ Position:
96
+ type: object
97
+ required:
98
+ - xo
99
+ - yo
100
+ properties:
101
+ xo:
102
+ type: number
103
+ yo:
104
+ type: number
105
+ Style:
106
+ oneOf:
107
+ - type: string
108
+ - type: array
109
+ items:
110
+ type: string
111
+
data/lib/subset.yaml ADDED
@@ -0,0 +1,55 @@
1
+ type: object
2
+ properties:
3
+ expressions:
4
+ type: array
5
+ minItems: 0
6
+ default: []
7
+ items:
8
+ type: object
9
+ required:
10
+ - name
11
+ properties:
12
+ name:
13
+ type: string
14
+ expression:
15
+ type: string
16
+ default: ''
17
+ sets:
18
+ type: array
19
+ items:
20
+ $ref: "#/$defs/SetRules"
21
+ minItems: 0
22
+ default: []
23
+ $defs:
24
+ SetRules:
25
+ type: object
26
+ required:
27
+ - name
28
+ properties:
29
+ name:
30
+ type: string
31
+ nodes:
32
+ $ref: "#/$defs/Rules"
33
+ edges:
34
+ $ref: "#/$defs/Rules"
35
+ any:
36
+ $ref: "#/$defs/Rules"
37
+ Rules:
38
+ type: array
39
+ items:
40
+ $ref: "#/$defs/FieldRules"
41
+ minItems: 0
42
+ default: []
43
+ FieldRules:
44
+ type: object
45
+ required:
46
+ - name
47
+ - rules
48
+ properties:
49
+ name:
50
+ type: string
51
+ rules:
52
+ type: array
53
+ items:
54
+ type: string
55
+ minItems: 0
@@ -19,6 +19,7 @@ styles:
19
19
  fill: "#ffffff"
20
20
  stroke: "#000000"
21
21
  stroke_width: 2
22
+ depth: 0
22
23
  size_estimator: |
23
24
  $render.default_size($render.node['font_size'],
24
25
  $render.node['font_width'], $render.node['font_height'],
@@ -29,4 +30,5 @@ styles:
29
30
  default:
30
31
  stroke_width: 2
31
32
  stroke: "#000000"
32
- base64template: PD94bWwgdmVyc2lvbj0iMS4wIj8+CjwlPQp3LCBoaCA9ICRyZW5kZXIuZGltZW5zaW9ucwpoaCArPSAkcmVuZGVyLmRvYy5kaWcoJ2RpYWdyYW0nLCAnaGVpZ2h0X21hcmdpbicpCgpvdXQgPSBbCiAgJSg8c3ZnIHdpZHRoPSIje3cgKyAkcmVuZGVyLmRvYy5kaWcoJ2RpYWdyYW0nLCAnd2lkdGhfbWFyZ2luJyl9IiBoZWlnaHQ9IiN7aGh9IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiPikKXQokcmVuZGVyLmRvYy5mZXRjaCgnZWRnZXMnLCBbXSkuZWFjaCBkbyB8ZWRnZXwKICBsaW5lc3R5bGUgPSAlKGZpbGw9Im5vbmUiIHN0cm9rZT0iI3tlZGdlWydzdHJva2UnXX0iIHN0cm9rZS13aWR0aD0iI3tlZGdlWydzdHJva2Vfd2lkdGgnXX0iKQogIHBhdGggPSBlZGdlLmZldGNoKCdwYXRoJywgbmlsKQogIG5leHQgaWYgcGF0aC5uaWw/CiAgcGF0aC5lYWNoIGRvIHxwfAogICAgcFsneG8nXSA9IHBbJ3hvJ10udG9faS50b19zCiAgICBwWyd5byddID0gKGhoIC0gcFsneW8nXSkudG9faS50b19zCiAgZW5kCiAgaWYgcGF0aC5zaXplID09IDIKICAgIG91dC5wdXNoKCUoPGxpbmUgI3tsaW5lc3R5bGV9IHgxPSIje3BhdGhbMF1bJ3hvJ119IiB4Mj0iI3twYXRoWzFdWyd4byddfSIgeTE9IiN7cGF0aFswXVsneW8nXX0iIHkyPSIje3BhdGhbMV1bJ3lvJ119Ii8+KSkKICBlbHNlCiAgICBwdHMgPSBwYXRoLm1hcCB7IHxwfCAiI3twWyd4byddfSwje3BbJ3lvJ119IiB9CiAgICBvdXQucHVzaCglKDxwb2x5bGluZSAje2xpbmVzdHlsZX0gcG9pbnRzPSIje3B0cy5qb2luKCcgJyl9Ii8+KSkKICBlbmQKZW5kCiRyZW5kZXIuZG9jLmZldGNoKCdub2RlcycsIFtdKS5lYWNoIGRvIHxub2RlfAogIHcgPSBub2RlWyd3J10udG9faQogIGggPSBub2RlWydoJ10udG9faQogIHggPSBub2RlWyd4byddLnRvX2kKICB5ID0gaGggLSBub2RlWyd5byddLnRvX2kgLSBoCiAgbm9kZXN0eWxlID0gJShmaWxsPSIje25vZGVbJ2ZpbGwnXX0iIHN0cm9rZT0iI3tub2RlWydzdHJva2UnXX0iIHN0cm9rZS13aWR0aD0iI3tub2RlWydzdHJva2Vfd2lkdGgnXX0iKQogIG91dC5wdXNoKCUoPHJlY3QgI3tub2Rlc3R5bGV9IGhlaWdodD0iI3tofSIgd2lkdGg9IiN7d30iIHg9IiN7eH0iIHk9IiN7eX0iLz4pKQogIHggKz0gbm9kZVsnd2lkdGhfbWFyZ2luJ10KICBmcyA9IG5vZGVbJ2ZvbnRfc2l6ZSddCiAgbGggPSBmcyAqICgxICsgbm9kZVsnZm9udF9saW5lX3NwYWNpbmcnXSkKICB5ICs9IG5vZGVbJ2hlaWdodF9tYXJnaW4nXSArIGZzICogbm9kZVsnZm9udF9hc2NlbmQnXSAjIEJhc2VsaW5lIGZvciBmaXJzdCBsaW5lLgogIHVybCA9IG5vZGUuZmV0Y2goJ3VybCcsIG5pbCkKICB1cmwuZW5jb2RlISg6eG1sID0+IDphdHRyKSB1bmxlc3MgdXJsLm5pbD8KICB5MCA9IHkKICB0ZXh0c3R5bGUgPSAlKGZpbGw9IiN7bm9kZVsnZm9udF9maWxsJ119IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iI3tmc30iIHN0cm9rZT0iI3tub2RlWydmb250X2ZpbGwnXX0iIHN0cm9rZS13aWR0aD0iMCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIpCiAgbGlua3N0eWxlID0gJShmaWxsPSIje25vZGVbJ3VybF9maWxsJ119IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iI3tmc30iIHN0cm9rZT0iI3tub2RlWyd1cmxfZmlsbCddfSIgc3Ryb2tlLXdpZHRoPSIwIiB4bWw6c3BhY2U9InByZXNlcnZlIikKICBub2RlWyd0ZXh0J10uZWFjaCBkbyB8bGluZXwKICAgIGxpbmUuZW5jb2RlISg6eG1sID0+IDp0ZXh0KQogICAgaWYgdXJsLm5pbD8KICAgICAgb3V0LnB1c2goJSg8dGV4dCAje3RleHRzdHlsZX0geD0iI3t4fSIgeT0iI3t5MH0iPiN7bGluZX08L3RleHQ+KSkKICAgIGVsc2UKICAgICAgb3V0LnB1c2goJSg8YSB4bGluazpocmVmPSN7dXJsfSB0YXJnZXQ9Il9wYXJlbnQiPjx0ZXh0ICN7bGlua3N0eWxlfSB4PSIje3h9IiB5PSIje3kwfSI+I3tsaW5lfTwvdGV4dD48L2E+KSkKICAgIGVuZAogICAgeTAgKz0gbGggIyBTaGlmdCBiYXNlbGluZSBieSBmdWxsIGxpbmUgKyBzcGFjaW5nIGhlaWdodC4KICBlbmQKZW5kCm91dC5qb2luKCJcbiIpCiU+Cjwvc3ZnPgo=
33
+ depth: 0
34
+ base64template: PD94bWwgdmVyc2lvbj0iMS4wIj8+CjwlPQp3LCBoaCA9ICRyZW5kZXIuZGltZW5zaW9ucwpoaCArPSAkcmVuZGVyLmRvYy5kaWcoJ2RpYWdyYW0nLCAnaGVpZ2h0X21hcmdpbicpCgpvdXQgPSBbCiAgJSg8c3ZnIHdpZHRoPSIje3cgKyAkcmVuZGVyLmRvYy5kaWcoJ2RpYWdyYW0nLCAnd2lkdGhfbWFyZ2luJyl9IiBoZWlnaHQ9IiN7aGh9IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiPikKXQokcmVuZGVyLmRvY1snYWxsJ10uZWFjaCBkbyB8aXRlbXwKICBpZiBpdGVtWydraW5kJ10gPT0gJ25vZGUnCiAgICBub2RlID0gaXRlbVsnaXRlbSddCiAgICB3ID0gbm9kZVsndyddLnRvX2kKICAgIGggPSBub2RlWydoJ10udG9faQogICAgeCA9IG5vZGVbJ3hvJ10udG9faQogICAgeSA9IGhoIC0gbm9kZVsneW8nXS50b19pIC0gaAogICAgbm9kZXN0eWxlID0gJShmaWxsPSIje25vZGVbJ2ZpbGwnXX0iIHN0cm9rZT0iI3tub2RlWydzdHJva2UnXX0iIHN0cm9rZS13aWR0aD0iI3tub2RlWydzdHJva2Vfd2lkdGgnXX0iKQogICAgb3V0LnB1c2goJSg8cmVjdCAje25vZGVzdHlsZX0gaGVpZ2h0PSIje2h9IiB3aWR0aD0iI3t3fSIgeD0iI3t4fSIgeT0iI3t5fSIvPikpCiAgICB4ICs9IG5vZGVbJ3dpZHRoX21hcmdpbiddCiAgICBmcyA9IG5vZGVbJ2ZvbnRfc2l6ZSddCiAgICBsaCA9IGZzICogKDEgKyBub2RlWydmb250X2xpbmVfc3BhY2luZyddKQogICAgeSArPSBub2RlWydoZWlnaHRfbWFyZ2luJ10gKyBmcyAqIG5vZGVbJ2ZvbnRfYXNjZW5kJ10gIyBCYXNlbGluZSBmb3IgZmlyc3QgbGluZS4KICAgIHVybCA9IG5vZGUuZmV0Y2goJ3VybCcsIG5pbCkKICAgIHVybC5lbmNvZGUhKDp4bWwgPT4gOmF0dHIpIHVubGVzcyB1cmwubmlsPwogICAgeTAgPSB5CiAgICB0ZXh0c3R5bGUgPSAlKGZpbGw9IiN7bm9kZVsnZm9udF9maWxsJ119IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iI3tmc30iIHN0cm9rZT0iI3tub2RlWydmb250X2ZpbGwnXX0iIHN0cm9rZS13aWR0aD0iMCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIpCiAgICBsaW5rc3R5bGUgPSAlKGZpbGw9IiN7bm9kZVsndXJsX2ZpbGwnXX0iIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSIje2ZzfSIgc3Ryb2tlPSIje25vZGVbJ3VybF9maWxsJ119IiBzdHJva2Utd2lkdGg9IjAiIHhtbDpzcGFjZT0icHJlc2VydmUiKQogICAgbm9kZVsndGV4dCddLmVhY2ggZG8gfGxpbmV8CiAgICAgIGxpbmUuZW5jb2RlISg6eG1sID0+IDp0ZXh0KQogICAgICBpZiB1cmwubmlsPwogICAgICAgIG91dC5wdXNoKCUoPHRleHQgI3t0ZXh0c3R5bGV9IHg9IiN7eH0iIHk9IiN7eTB9Ij4je2xpbmV9PC90ZXh0PikpCiAgICAgIGVsc2UKICAgICAgICBvdXQucHVzaCglKDxhIHhsaW5rOmhyZWY9I3t1cmx9IHRhcmdldD0iX3BhcmVudCI+PHRleHQgI3tsaW5rc3R5bGV9IHg9IiN7eH0iIHk9IiN7eTB9Ij4je2xpbmV9PC90ZXh0PjwvYT4pKQogICAgICBlbmQKICAgICAgeTAgKz0gbGggIyBTaGlmdCBiYXNlbGluZSBieSBmdWxsIGxpbmUgKyBzcGFjaW5nIGhlaWdodC4KICAgIGVuZAogIGVsc2UKICAgIGVkZ2UgPSBpdGVtWydpdGVtJ10KICAgIGxpbmVzdHlsZSA9ICUoZmlsbD0ibm9uZSIgc3Ryb2tlPSIje2VkZ2VbJ3N0cm9rZSddfSIgc3Ryb2tlLXdpZHRoPSIje2VkZ2VbJ3N0cm9rZV93aWR0aCddfSIpCiAgICBwYXRoID0gZWRnZS5mZXRjaCgncGF0aCcsIG5pbCkKICAgIG5leHQgaWYgcGF0aC5uaWw/CiAgICBwYXRoLmVhY2ggZG8gfHB8CiAgICAgIHBbJ3hvJ10gPSBwWyd4byddLnRvX2kudG9fcwogICAgICBwWyd5byddID0gKGhoIC0gcFsneW8nXSkudG9faS50b19zCiAgICBlbmQKICAgIGlmIHBhdGguc2l6ZSA9PSAyCiAgICAgIG91dC5wdXNoKCUoPGxpbmUgI3tsaW5lc3R5bGV9IHgxPSIje3BhdGhbMF1bJ3hvJ119IiB4Mj0iI3twYXRoWzFdWyd4byddfSIgeTE9IiN7cGF0aFswXVsneW8nXX0iIHkyPSIje3BhdGhbMV1bJ3lvJ119Ii8+KSkKICAgIGVsc2UKICAgICAgcHRzID0gcGF0aC5tYXAgeyB8cHwgIiN7cFsneG8nXX0sI3twWyd5byddfSIgfQogICAgICBvdXQucHVzaCglKDxwb2x5bGluZSAje2xpbmVzdHlsZX0gcG9pbnRzPSIje3B0cy5qb2luKCcgJyl9Ii8+KSkKICAgIGVuZAogIGVuZAplbmQKb3V0LmpvaW4oIlxuIikKJT4KPC9zdmc+Cg==
data/template/root.yaml CHANGED
@@ -18,6 +18,7 @@ styles:
18
18
  fill: "#ffffff"
19
19
  stroke: "#000000"
20
20
  stroke_width: 2
21
+ depth: 0
21
22
  size_estimator: |
22
23
  $render.default_size($render.node['font_size'],
23
24
  $render.node['font_width'], $render.node['font_height'],
@@ -28,3 +29,4 @@ styles:
28
29
  default:
29
30
  stroke_width: 2
30
31
  stroke: "#000000"
32
+ depth: 0
data/template/svg_1.1.erb CHANGED
@@ -6,45 +6,48 @@ hh += $render.doc.dig('diagram', 'height_margin')
6
6
  out = [
7
7
  %(<svg width="#{w + $render.doc.dig('diagram', 'width_margin')}" height="#{hh}" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">)
8
8
  ]
9
- $render.doc.fetch('edges', []).each do |edge|
10
- linestyle = %(fill="none" stroke="#{edge['stroke']}" stroke-width="#{edge['stroke_width']}")
11
- path = edge.fetch('path', nil)
12
- next if path.nil?
13
- path.each do |p|
14
- p['xo'] = p['xo'].to_i.to_s
15
- p['yo'] = (hh - p['yo']).to_i.to_s
16
- end
17
- if path.size == 2
18
- out.push(%(<line #{linestyle} x1="#{path[0]['xo']}" x2="#{path[1]['xo']}" y1="#{path[0]['yo']}" y2="#{path[1]['yo']}"/>))
9
+ $render.doc['all'].each do |item|
10
+ if item['kind'] == 'node'
11
+ node = item['item']
12
+ w = node['w'].to_i
13
+ h = node['h'].to_i
14
+ x = node['xo'].to_i
15
+ y = hh - node['yo'].to_i - h
16
+ nodestyle = %(fill="#{node['fill']}" stroke="#{node['stroke']}" stroke-width="#{node['stroke_width']}")
17
+ out.push(%(<rect #{nodestyle} height="#{h}" width="#{w}" x="#{x}" y="#{y}"/>))
18
+ x += node['width_margin']
19
+ fs = node['font_size']
20
+ lh = fs * (1 + node['font_line_spacing'])
21
+ y += node['height_margin'] + fs * node['font_ascend'] # Baseline for first line.
22
+ url = node.fetch('url', nil)
23
+ url.encode!(:xml => :attr) unless url.nil?
24
+ y0 = y
25
+ textstyle = %(fill="#{node['font_fill']}" font-family="serif" font-size="#{fs}" stroke="#{node['font_fill']}" stroke-width="0" xml:space="preserve")
26
+ linkstyle = %(fill="#{node['url_fill']}" font-family="serif" font-size="#{fs}" stroke="#{node['url_fill']}" stroke-width="0" xml:space="preserve")
27
+ node['text'].each do |line|
28
+ line.encode!(:xml => :text)
29
+ if url.nil?
30
+ out.push(%(<text #{textstyle} x="#{x}" y="#{y0}">#{line}</text>))
31
+ else
32
+ out.push(%(<a xlink:href=#{url} target="_parent"><text #{linkstyle} x="#{x}" y="#{y0}">#{line}</text></a>))
33
+ end
34
+ y0 += lh # Shift baseline by full line + spacing height.
35
+ end
19
36
  else
20
- pts = path.map { |p| "#{p['xo']},#{p['yo']}" }
21
- out.push(%(<polyline #{linestyle} points="#{pts.join(' ')}"/>))
22
- end
23
- end
24
- $render.doc.fetch('nodes', []).each do |node|
25
- w = node['w'].to_i
26
- h = node['h'].to_i
27
- x = node['xo'].to_i
28
- y = hh - node['yo'].to_i - h
29
- nodestyle = %(fill="#{node['fill']}" stroke="#{node['stroke']}" stroke-width="#{node['stroke_width']}")
30
- out.push(%(<rect #{nodestyle} height="#{h}" width="#{w}" x="#{x}" y="#{y}"/>))
31
- x += node['width_margin']
32
- fs = node['font_size']
33
- lh = fs * (1 + node['font_line_spacing'])
34
- y += node['height_margin'] + fs * node['font_ascend'] # Baseline for first line.
35
- url = node.fetch('url', nil)
36
- url.encode!(:xml => :attr) unless url.nil?
37
- y0 = y
38
- textstyle = %(fill="#{node['font_fill']}" font-family="serif" font-size="#{fs}" stroke="#{node['font_fill']}" stroke-width="0" xml:space="preserve")
39
- linkstyle = %(fill="#{node['url_fill']}" font-family="serif" font-size="#{fs}" stroke="#{node['url_fill']}" stroke-width="0" xml:space="preserve")
40
- node['text'].each do |line|
41
- line.encode!(:xml => :text)
42
- if url.nil?
43
- out.push(%(<text #{textstyle} x="#{x}" y="#{y0}">#{line}</text>))
37
+ edge = item['item']
38
+ linestyle = %(fill="none" stroke="#{edge['stroke']}" stroke-width="#{edge['stroke_width']}")
39
+ path = edge.fetch('path', nil)
40
+ next if path.nil?
41
+ path.each do |p|
42
+ p['xo'] = p['xo'].to_i.to_s
43
+ p['yo'] = (hh - p['yo']).to_i.to_s
44
+ end
45
+ if path.size == 2
46
+ out.push(%(<line #{linestyle} x1="#{path[0]['xo']}" x2="#{path[1]['xo']}" y1="#{path[0]['yo']}" y2="#{path[1]['yo']}"/>))
44
47
  else
45
- out.push(%(<a xlink:href=#{url} target="_parent"><text #{linkstyle} x="#{x}" y="#{y0}">#{line}</text></a>))
48
+ pts = path.map { |p| "#{p['xo']},#{p['yo']}" }
49
+ out.push(%(<polyline #{linestyle} points="#{pts.join(' ')}"/>))
46
50
  end
47
- y0 += lh # Shift baseline by full line + spacing height.
48
51
  end
49
52
  end
50
53
  out.join("\n")
metadata CHANGED
@@ -1,15 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diagrammatron
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ismo Kärkkäinen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-31 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2023-12-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json_schemer
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.0.0
13
33
  description: |2
14
34
 
15
35
  Generates diagrams in SVG format from input material. Split into multiple
@@ -22,6 +42,8 @@ executables:
22
42
  - diagrammatron-place
23
43
  - diagrammatron-prune
24
44
  - diagrammatron-render
45
+ - diagrammatron-schema
46
+ - diagrammatron-subset
25
47
  - diagrammatron-template
26
48
  - dot_json2diagrammatron
27
49
  extensions: []
@@ -34,16 +56,24 @@ files:
34
56
  - bin/diagrammatron-place
35
57
  - bin/diagrammatron-prune
36
58
  - bin/diagrammatron-render
59
+ - bin/diagrammatron-schema
60
+ - bin/diagrammatron-subset
37
61
  - bin/diagrammatron-template
38
62
  - bin/dot_json2diagrammatron
39
63
  - lib/common.rb
64
+ - lib/edges.yaml
65
+ - lib/nodes.yaml
66
+ - lib/place.yaml
67
+ - lib/render.yaml
68
+ - lib/subset.yaml
40
69
  - template/internal.yaml
41
70
  - template/root.yaml
42
71
  - template/svg_1.1.erb
43
72
  homepage: https://xn--ismo-krkkinen-gfbd.fi/diagrammatron/index.html
44
73
  licenses:
45
74
  - UPL-1.0
46
- metadata: {}
75
+ metadata:
76
+ rubygems_mfa_required: 'true'
47
77
  post_install_message:
48
78
  rdoc_options: []
49
79
  require_paths:
@@ -52,14 +82,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
52
82
  requirements:
53
83
  - - ">="
54
84
  - !ruby/object:Gem::Version
55
- version: 2.7.0
85
+ version: 3.0.0
56
86
  required_rubygems_version: !ruby/object:Gem::Requirement
57
87
  requirements:
58
88
  - - ">="
59
89
  - !ruby/object:Gem::Version
60
90
  version: '0'
61
91
  requirements: []
62
- rubygems_version: 3.1.2
92
+ rubygems_version: 3.2.33
63
93
  signing_key:
64
94
  specification_version: 4
65
95
  summary: Generates diagrams from input graph.