railroad_diagrams 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 992d560c768d0ad4991ea5c774a60083b4a2f8c407b88c91abfe6c92ab73fea5
4
- data.tar.gz: 108ce587863fb33a368d2e5278002ff6ee6bd6885576f6f7b9a7cd4e7c8eec3a
3
+ metadata.gz: 24208e2a21a6b8889468b2c4e3e2333e104acb223cc1611a42e294722b342c19
4
+ data.tar.gz: 30d4b980d2716ff688177c13ff1ea8c1a9aff4d4dd174417a940e9e5ec369e31
5
5
  SHA512:
6
- metadata.gz: 6795906adf826df7a16207cea05cc54a3724cd66ab5dd0a9120643d5b2bf24f08ab7ac2b66d517478cd826c1baccc6faadfe1365b40dc6636bcd102e2ab393cf
7
- data.tar.gz: e041c348cea71435c688dedb451eb368b00e71dac41cce239492766e7dd2991c61576c0087774064a948d9248538f74b233dfde439117b6587ed46df310a4ba3
6
+ metadata.gz: 98ab7a7089c41b92a6d923f51d7d5739e32d5db695a6a729038679409facc160eeecf0e7e7f3f80bf5d106a83e45d152ac00a8034405b220f667b092501b0cc9
7
+ data.tar.gz: fcf14ebcd8d09f4e21a464c44fae0b83d780e5a4d10f85ca0619c5dc5735b6afbfbe7313fa10676b79a02aff10b8de8a1c1fd987635c4999ee6c7cc6a3641025
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.2.0 - 2025-02-01
6
+
7
+ - Fix an error for standalone mode.
8
+ - Support Ruby 2.5 ~ 3.4.
9
+ - Change default style.
10
+
5
11
  ## 0.1.0 - 2025-02-01
6
12
 
7
- - Initial release
13
+ - Initial release.
@@ -201,7 +201,7 @@ module RailroadDiagrams
201
201
  else
202
202
  []
203
203
  end
204
- diagram_td = diagram_td.append_below(item_td, separator, move_entry:, move_exit:)
204
+ diagram_td = diagram_td.append_below(item_td, separator, move_entry: move_entry, move_exit: move_exit)
205
205
  end
206
206
  diagram_td
207
207
  end
@@ -31,7 +31,7 @@ module RailroadDiagrams
31
31
  text: @text
32
32
  )
33
33
  if @href
34
- a = DiagramItem.new('a', attrs: { 'xlink:href' => @href }, text:).add(self)
34
+ a = DiagramItem.new('a', attrs: { 'xlink:href' => @href }, text: text).add(self)
35
35
  text.add(a)
36
36
  else
37
37
  text.add(self)
@@ -71,8 +71,8 @@ module RailroadDiagrams
71
71
 
72
72
  def text_diagram
73
73
  separator, = TextDiagram.get_parts(['separator'])
74
- diagram_td = items[0].text_diagram
75
- items[1..].each do |item|
74
+ diagram_td = @items[0].text_diagram
75
+ @items[1..-1].each do |item|
76
76
  item_td = item.text_diagram
77
77
  item_td.expand(1, 1, 0, 0) if item.needs_space
78
78
  diagram_td = diagram_td.append_right(separator)
@@ -85,7 +85,7 @@ module RailroadDiagrams
85
85
  super
86
86
  end
87
87
 
88
- def write_text(_write)
88
+ def write_text(write)
89
89
  output = text_diagram
90
90
  output = "#{output.lines.join("\n")}\n"
91
91
  output = output.gsub('&', '&amp;').gsub('<', '&lt;').gsub('>', '&gt;').gsub('"', '&quot;') if ESCAPE_HTML
@@ -98,7 +98,7 @@ module RailroadDiagrams
98
98
  Style.new(css).add(self)
99
99
  @attrs['xmlns'] = 'http://www.w3.org/2000/svg'
100
100
  @attrs['xmlns:xlink'] = 'http://www.w3.org/1999/xlink'
101
- DiagramItem.write_svg(write)
101
+ super(write)
102
102
  @children.pop
103
103
  @attrs.delete('xmlns')
104
104
  @attrs.delete('xmlns:xlink')
@@ -34,7 +34,7 @@ module RailroadDiagrams
34
34
  write.call(" #{name}=\"#{RailroadDiagrams.escape_attr(value)}\"")
35
35
  end
36
36
  write.call('>')
37
- write.call("\n") if @name in %w[g svg]
37
+ write.call("\n") if %w[g svg].include?(@name)
38
38
  @children.each do |child|
39
39
  if child.is_a?(DiagramItem) || child.is_a?(Path) || child.is_a?(Style)
40
40
  child.write_svg(write)
@@ -73,5 +73,9 @@ module RailroadDiagrams
73
73
  [diff / 2, diff / 2]
74
74
  end
75
75
  end
76
+
77
+ def write_standalone(write, css = nil)
78
+ write_svg(write)
79
+ end
76
80
  end
77
81
  end
@@ -3,7 +3,7 @@
3
3
  module RailroadDiagrams
4
4
  class DiagramMultiContainer < DiagramItem
5
5
  def initialize(name, items, attrs = nil, text = nil)
6
- super(name, attrs:, text:)
6
+ super(name, attrs: attrs, text: text)
7
7
  @items = items.map { |item| wrap_string(item) }
8
8
  end
9
9
 
@@ -74,7 +74,7 @@ module RailroadDiagrams
74
74
 
75
75
  # lower track
76
76
  lower_span =
77
- @items[1..].sum { |item| item.width + (item.needs_space ? 20 : 0) } +
77
+ @items[1..-1].sum { |item| item.width + (item.needs_space ? 20 : 0) } +
78
78
  ((@items.size - 2) * AR * 2) +
79
79
  (last.height.positive? ? AR : 0) -
80
80
  AR
@@ -70,7 +70,7 @@ module RailroadDiagrams
70
70
  Path.new(x + 30 + AR + @inner_width, y + @height).right(AR).add(self)
71
71
 
72
72
  # Do the elements that curve below
73
- below = @items[(@default + 1)..] || []
73
+ below = @items[(@default + 1)..-1] || []
74
74
  distance_from_y = [10 + AR, default.height + default.down + VS + below.first.up].max if below.any?
75
75
 
76
76
  below.each_with_index do |item, i|
@@ -49,7 +49,7 @@ module RailroadDiagrams
49
49
  attrs: {
50
50
  'xlink:href' => @href
51
51
  },
52
- text:
52
+ text: text
53
53
  ).add(self)
54
54
  text.add(a)
55
55
  else
@@ -103,7 +103,7 @@ module RailroadDiagrams
103
103
  # The bottom item exits directly to its right.
104
104
  right_lines += [line * 2]
105
105
  end
106
- left_pad, right_pad = TextDiagram._gaps(max_width, item_td.width)
106
+ left_pad, right_pad = TextDiagram.gaps(max_width, item_td.width)
107
107
  item_td = item_td.expand(left_pad, right_pad, 0, 0)
108
108
  diagram_td = if item_num.zero?
109
109
  item_td
@@ -9,8 +9,11 @@ module RailroadDiagrams
9
9
  class << self
10
10
  def default_style
11
11
  <<~CSS
12
+ * {
13
+ color: #333333;
14
+ }
12
15
  svg.railroad-diagram {
13
- background-color:hsl(30,20%,95%);
16
+ background-color: white;
14
17
  }
15
18
  svg.railroad-diagram path {
16
19
  stroke-width:3;
@@ -21,17 +24,26 @@ module RailroadDiagrams
21
24
  font:bold 14px monospace;
22
25
  text-anchor:middle;
23
26
  }
24
- svg.railroad-diagram text.label{
27
+ svg.railroad-diagram text.label {
25
28
  text-anchor:start;
26
29
  }
27
- svg.railroad-diagram text.comment{
30
+ svg.railroad-diagram text.comment {
28
31
  font:italic 12px monospace;
29
32
  }
30
- svg.railroad-diagram rect{
33
+ svg.railroad-diagram rect {
31
34
  stroke-width:3;
32
- stroke:black;
35
+ stroke: #333333;
33
36
  fill:hsl(120,100%,90%);
34
37
  }
38
+ svg.railroad-diagram path {
39
+ stroke: #333333;
40
+ }
41
+ svg.railroad-diagram .terminal rect {
42
+ fill: hsl(190, 100%, 83%);
43
+ }
44
+ svg.railroad-diagram .non-terminal rect {
45
+ fill: hsl(223, 100%, 83%);
46
+ }
35
47
  svg.railroad-diagram rect.group-box {
36
48
  stroke: gray;
37
49
  stroke-dasharray: 10 5;
@@ -46,7 +46,7 @@ module RailroadDiagrams
46
46
  text: @text
47
47
  )
48
48
  if @href
49
- a = DiagramItem.new('a', attrs: { 'xlink:href' => @href }, text:).add(self)
49
+ a = DiagramItem.new('a', attrs: { 'xlink:href' => @href }, text: text).add(self)
50
50
  text.add(a)
51
51
  else
52
52
  text.add(self)
@@ -139,6 +139,32 @@ module RailroadDiagrams
139
139
  string + (pad * (gap / pad.length))
140
140
  end
141
141
 
142
+ def get_parts(part_names)
143
+ part_names.map { |name| @parts[name] }
144
+ end
145
+
146
+ def enclose_lines(lines, lefts, rights)
147
+ unless lines.length == lefts.length && lines.length == rights.length
148
+ raise 'All arguments must be the same length'
149
+ end
150
+
151
+ lines.each_with_index.map { |line, i| lefts[i] + line + rights[i] }
152
+ end
153
+
154
+ def gaps(outer_width, inner_width)
155
+ diff = outer_width - inner_width
156
+ case INTERNAL_ALIGNMENT
157
+ when 'left'
158
+ [0, diff]
159
+ when 'right'
160
+ [diff, 0]
161
+ else
162
+ left = diff / 2
163
+ right = diff - left
164
+ [left, right]
165
+ end
166
+ end
167
+
142
168
  private
143
169
 
144
170
  def rectish(rect_type, data, dashed)
@@ -192,32 +218,6 @@ module RailroadDiagrams
192
218
 
193
219
  new(entry, exit, new_lines)
194
220
  end
195
-
196
- def enclose_lines(lines, lefts, rights)
197
- unless lines.length == lefts.length && lines.length == rights.length
198
- raise 'All arguments must be the same length'
199
- end
200
-
201
- lines.each_with_index.map { |line, i| lefts[i] + line + rights[i] }
202
- end
203
-
204
- def gaps(outer_width, inner_width)
205
- diff = outer_width - inner_width
206
- case INTERNAL_ALIGNMENT
207
- when 'left'
208
- [0, diff]
209
- when 'right'
210
- [diff, 0]
211
- else
212
- left = diff / 2
213
- right = diff - left
214
- [left, right]
215
- end
216
- end
217
-
218
- def get_parts(part_names)
219
- part_names.map { |name| @parts[name] }
220
- end
221
221
  end
222
222
 
223
223
  attr_reader :entry, :exit, :height, :lines, :width
@@ -282,7 +282,7 @@ module RailroadDiagrams
282
282
  left = [pad * left_width] * @height
283
283
  right = [pad * (total_padding - left_width)] * @height
284
284
 
285
- self.class.new(@entry, @exit, enclose_lines(@lines, left, right))
285
+ self.class.new(@entry, @exit, self.class.enclose_lines(@lines, left, right))
286
286
  end
287
287
 
288
288
  def copy
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailroadDiagrams
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railroad_diagrams
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yudai Takada
8
+ autorequire:
8
9
  bindir: exe
9
10
  cert_chain: []
10
- date: 2025-01-31 00:00:00.000000000 Z
11
+ date: 2025-02-01 00:00:00.000000000 Z
11
12
  dependencies: []
12
13
  description: Generate SVG railroad syntax diagrams, like on JSON.org.
13
14
  email:
@@ -60,6 +61,7 @@ metadata:
60
61
  changelog_uri: https://github.com/ydah/railroad_diagrams/releases
61
62
  bug_tracker_uri: https://github.com/ydah/railroad_diagrams/issues
62
63
  rubygems_mfa_required: 'true'
64
+ post_install_message:
63
65
  rdoc_options: []
64
66
  require_paths:
65
67
  - lib
@@ -67,14 +69,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
67
69
  requirements:
68
70
  - - ">="
69
71
  - !ruby/object:Gem::Version
70
- version: 3.1.0
72
+ version: 2.5.0
71
73
  required_rubygems_version: !ruby/object:Gem::Requirement
72
74
  requirements:
73
75
  - - ">="
74
76
  - !ruby/object:Gem::Version
75
77
  version: '0'
76
78
  requirements: []
77
- rubygems_version: 3.7.0.dev
79
+ rubygems_version: 3.3.3
80
+ signing_key:
78
81
  specification_version: 4
79
82
  summary: "\U0001F6E4️ A tiny Ruby+SVG library for drawing railroad syntax diagrams
80
83
  like JSON.org."