markdoc 1.2.1 → 2.0.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.
- checksums.yaml +4 -4
- data/bin/markdoc +1 -0
- data/bin/pseudo2svg +1 -0
- data/bin/sequence2svg +1 -0
- data/lib/markdoc/pseudocode.rb +31 -27
- data/lib/markdoc/renderer.rb +19 -18
- data/lib/markdoc/sequence.rb +52 -55
- data/lib/markdoc/version.rb +3 -1
- data/lib/markdoc.rb +2 -0
- metadata +20 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a313ccc3aef3a547c0d688e8a84dac9097c6fad2e7e5e27e46475311646e1e67
|
4
|
+
data.tar.gz: 4491396850eac63988494d4e68f110db83813304a9cc1bab00458eb5875e497e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 949e3a80919e9b9b54f624b659c5bbb72ca0cf9b7746c9080dd8fd08a27b012147099cc2c50397d68694f05a717eb8265d14bb058146b8174416cb59dbce9db3
|
7
|
+
data.tar.gz: a32fbb8e268d9035ff15c4b2d93726e48a9bb5ab3fb9af6e13c95a7d8979f7b6ee57b1d469c23871c6179b3d2b83c0da9c6658351cf8932a66c6ecf777682f7b
|
data/bin/markdoc
CHANGED
data/bin/pseudo2svg
CHANGED
data/bin/sequence2svg
CHANGED
data/lib/markdoc/pseudocode.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'polyglot'
|
2
4
|
require 'treetop'
|
3
5
|
|
@@ -13,14 +15,17 @@ module Markdoc
|
|
13
15
|
|
14
16
|
class ActionLiteral < Treetop::Runtime::SyntaxNode
|
15
17
|
def out(file)
|
16
|
-
file.write %
|
18
|
+
file.write %(#{id} [shape=box label="#{label}"]\n)
|
17
19
|
end
|
20
|
+
|
18
21
|
def id
|
19
22
|
sentence.id
|
20
23
|
end
|
24
|
+
|
21
25
|
def label
|
22
26
|
sentence.value
|
23
27
|
end
|
28
|
+
|
24
29
|
def ends
|
25
30
|
[id]
|
26
31
|
end
|
@@ -28,33 +33,34 @@ module Markdoc
|
|
28
33
|
|
29
34
|
class IfLiteral < Treetop::Runtime::SyntaxNode
|
30
35
|
def out(file)
|
31
|
-
file.write %
|
36
|
+
file.write %(#{id} [shape=diamond label="#{cond.value}"]\n)
|
32
37
|
|
33
38
|
unless yes.nil?
|
34
39
|
yes.out(file)
|
35
|
-
file.write %
|
40
|
+
file.write %( #{id} -> #{yes.id} [label="Yes"]\n)
|
36
41
|
end
|
37
42
|
unless no.nil?
|
38
43
|
no.out(file)
|
39
|
-
file.write %
|
44
|
+
file.write %( #{id} -> #{no.id} [label="No"]\n)
|
40
45
|
end
|
41
46
|
end
|
42
47
|
|
43
48
|
def id
|
44
49
|
cond.id
|
45
50
|
end
|
51
|
+
|
46
52
|
def ends
|
47
53
|
ary = []
|
48
|
-
if yes.elements.empty?
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
if no.elements.empty?
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
ary << if yes.elements.empty?
|
55
|
+
yes.id
|
56
|
+
else
|
57
|
+
yes.elements.last.ends
|
58
|
+
end
|
59
|
+
ary << if no.elements.empty?
|
60
|
+
no.id
|
61
|
+
else
|
62
|
+
no.elements.last.ends
|
63
|
+
end
|
58
64
|
ary.flatten
|
59
65
|
end
|
60
66
|
end
|
@@ -63,6 +69,7 @@ module Markdoc
|
|
63
69
|
def value
|
64
70
|
text_value.strip
|
65
71
|
end
|
72
|
+
|
66
73
|
def id
|
67
74
|
@id ||= Register.id
|
68
75
|
end
|
@@ -73,11 +80,10 @@ module Markdoc
|
|
73
80
|
prev = nil
|
74
81
|
elements.each do |node|
|
75
82
|
next if node.nil?
|
83
|
+
|
76
84
|
node.out(file)
|
77
|
-
|
78
|
-
|
79
|
-
file.write %Q(#{endid} -> #{node.id}\n)
|
80
|
-
end
|
85
|
+
prev&.ends&.each do |endid|
|
86
|
+
file.write %(#{endid} -> #{node.id}\n)
|
81
87
|
end
|
82
88
|
prev = node
|
83
89
|
end
|
@@ -90,11 +96,11 @@ module Markdoc
|
|
90
96
|
def ends
|
91
97
|
ary = []
|
92
98
|
elements.each do |node|
|
93
|
-
if node.elements.empty?
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
99
|
+
ary << if node.elements.empty?
|
100
|
+
node.id
|
101
|
+
else
|
102
|
+
node.ends
|
103
|
+
end
|
98
104
|
end
|
99
105
|
ary.flatten
|
100
106
|
end
|
@@ -104,7 +110,7 @@ module Markdoc
|
|
104
110
|
parser = PseudocodeParser.new
|
105
111
|
tree = parser.parse(code)
|
106
112
|
|
107
|
-
if
|
113
|
+
if tree.nil?
|
108
114
|
puts parser.failure_reason
|
109
115
|
raise "Can't generate graphviz code"
|
110
116
|
else
|
@@ -118,9 +124,7 @@ module Markdoc
|
|
118
124
|
graphviz = file.path
|
119
125
|
end
|
120
126
|
|
121
|
-
if format == :graphviz
|
122
|
-
return IO.read(graphviz)
|
123
|
-
end
|
127
|
+
return IO.read(graphviz) if format == :graphviz
|
124
128
|
|
125
129
|
image = Tempfile.new([digest, ".#{format}"])
|
126
130
|
image.close
|
data/lib/markdoc/renderer.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'redcarpet'
|
2
4
|
require 'pygments'
|
3
5
|
|
4
6
|
module Markdoc
|
5
7
|
class Renderer < Redcarpet::Render::HTML
|
6
|
-
|
7
8
|
def block_code(code, language)
|
8
9
|
case language
|
9
10
|
when 'pseudo', 'pseudocode'
|
@@ -17,27 +18,27 @@ module Markdoc
|
|
17
18
|
|
18
19
|
# removes xml or doctype meta info
|
19
20
|
def wrap_svg(source)
|
20
|
-
stripped = source
|
21
|
-
sub(/<\?xml[^>]+>/i, '')
|
22
|
-
sub(/<!DOCTYPE[^>]+>/im, '')
|
23
|
-
gsub(
|
21
|
+
stripped = source
|
22
|
+
.sub(/<\?xml[^>]+>/i, '')
|
23
|
+
.sub(/<!DOCTYPE[^>]+>/im, '')
|
24
|
+
.gsub(/<!--[^>]+-->/, '')
|
24
25
|
|
25
|
-
%
|
26
|
+
%(<div class="svg-holder">\n#{stripped}\n</div>)
|
26
27
|
end
|
27
28
|
|
28
29
|
def doc_header
|
29
|
-
|
30
|
-
<html>
|
31
|
-
<head>
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
#{IO.read File.expand_path('
|
36
|
-
#{IO.read File.expand_path('
|
37
|
-
|
38
|
-
</head>
|
39
|
-
<body>
|
40
|
-
|
30
|
+
<<~HEADER
|
31
|
+
<html>
|
32
|
+
<head>
|
33
|
+
<title>Doc</title>
|
34
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
35
|
+
<style>
|
36
|
+
#{IO.read File.expand_path('../../css/style.css', __dir__)}
|
37
|
+
#{IO.read File.expand_path('../../css/pygments.css', __dir__)}
|
38
|
+
</style>
|
39
|
+
</head>
|
40
|
+
<body>
|
41
|
+
HEADER
|
41
42
|
end
|
42
43
|
|
43
44
|
def doc_footer
|
data/lib/markdoc/sequence.rb
CHANGED
@@ -1,21 +1,23 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
1
3
|
module Markdoc
|
2
4
|
module Sequence
|
3
5
|
DEFAULTS = {
|
4
6
|
diagram: {
|
5
7
|
offsetx: 10,
|
6
8
|
offsety: 10,
|
7
|
-
width:
|
8
|
-
height:
|
9
|
+
width: 900,
|
10
|
+
height: 600
|
9
11
|
},
|
10
12
|
role: {
|
11
13
|
font: "'Roboto Condensed', sans-serif",
|
12
14
|
border: '#3c4260',
|
13
|
-
fill:
|
14
|
-
radius:
|
15
|
+
fill: '#dcd7d7',
|
16
|
+
radius: 2,
|
15
17
|
spacing: 100,
|
16
|
-
width:
|
17
|
-
height:
|
18
|
-
line:
|
18
|
+
width: 100,
|
19
|
+
height: 55,
|
20
|
+
line: 3
|
19
21
|
},
|
20
22
|
message: {
|
21
23
|
color: '#3c4260',
|
@@ -23,10 +25,10 @@ module Markdoc
|
|
23
25
|
size: 11,
|
24
26
|
spacing: 40,
|
25
27
|
offset: 100, # from top
|
26
|
-
line:
|
28
|
+
line: 3,
|
27
29
|
dash: '4,2'
|
28
30
|
}
|
29
|
-
}
|
31
|
+
}.freeze
|
30
32
|
|
31
33
|
def self.draw(code)
|
32
34
|
diagram = Diagram.new(code)
|
@@ -60,8 +62,8 @@ module Markdoc
|
|
60
62
|
self.font = args[:ui][:font]
|
61
63
|
end
|
62
64
|
|
63
|
-
def <=>
|
64
|
-
column <=>
|
65
|
+
def <=>(other)
|
66
|
+
column <=> other.column
|
65
67
|
end
|
66
68
|
|
67
69
|
def type
|
@@ -80,11 +82,11 @@ module Markdoc
|
|
80
82
|
end
|
81
83
|
|
82
84
|
def center
|
83
|
-
x + width/2
|
85
|
+
x + width / 2
|
84
86
|
end
|
85
87
|
|
86
88
|
def x
|
87
|
-
offsetx + column*(width + spacing)
|
89
|
+
offsetx + column * (width + spacing)
|
88
90
|
end
|
89
91
|
|
90
92
|
def y
|
@@ -95,18 +97,18 @@ module Markdoc
|
|
95
97
|
elements = []
|
96
98
|
case type
|
97
99
|
when :actor
|
98
|
-
elements << %
|
99
|
-
elements << %
|
100
|
+
elements << %[<g transform="translate(#{x + 10},0)"><path d="M74,64 a30,30 0 0,0 -27,-27 a16,18 0 1,0 -16,0 a30,30 0, 0,0 -27,27 z" stroke-width="#{line}" fill="#{fill}" stroke="#{border}"/></g>]
|
101
|
+
elements << %(<text x="#{x + 46 - 2 * id.size}" y="#{y + height - 5}" font-family="#{font}" font-size="12" fill="#{border}">#{id}</text>)
|
100
102
|
else
|
101
|
-
elements << %
|
102
|
-
elements << %
|
103
|
+
elements << %(<rect fill="#{fill}" stroke="#{border}" rx="#{radius}" ry="#{radius}" x="#{x}" y="#{y}" width="#{width}" height="#{height}" stroke-width="#{line}"/>)
|
104
|
+
elements << %(<text x="#{x + 10}" y="#{y + 20}" font-family="#{font}" font-size="12" fill="#{border}">#{label}</text>)
|
103
105
|
end
|
104
106
|
|
105
107
|
x1 = center
|
106
108
|
y1 = offsety + height
|
107
109
|
x2 = center
|
108
110
|
y2 = messages.last.y + 10
|
109
|
-
elements << %
|
111
|
+
elements << %(<line x1="#{x1}" y1="#{y1}" x2="#{x2}" y2="#{y2}" stroke="#{border}" stroke-width="#{line}"/>)
|
110
112
|
|
111
113
|
elements.join("\n")
|
112
114
|
end
|
@@ -134,17 +136,19 @@ module Markdoc
|
|
134
136
|
self.dash = args[:ui][:dash]
|
135
137
|
|
136
138
|
if op.index('~')
|
137
|
-
options << %
|
139
|
+
options << %(stroke-dasharray="#{dash}")
|
138
140
|
elsif op.index('-').nil?
|
139
|
-
raise
|
141
|
+
raise 'Message direction must be one of ->, ~>, <-, <~'
|
140
142
|
end
|
141
143
|
|
142
144
|
if op.index('>')
|
143
|
-
self.source
|
145
|
+
self.source = args[:role1]
|
146
|
+
self.dest = args[:role2]
|
144
147
|
elsif op.index('<')
|
145
|
-
self.source
|
148
|
+
self.source = args[:role2]
|
149
|
+
self.dest = args[:role1]
|
146
150
|
else
|
147
|
-
raise
|
151
|
+
raise 'Message direction must be one of ->, ~>, <-, <~'
|
148
152
|
end
|
149
153
|
|
150
154
|
source.messages << self
|
@@ -155,36 +159,35 @@ module Markdoc
|
|
155
159
|
role1, role2 = *(source < dest ? [source, dest] : [dest, source])
|
156
160
|
elements = []
|
157
161
|
|
162
|
+
x1 = role1.center
|
158
163
|
if role1.eql?(role2)
|
159
|
-
x1 = role1.center
|
160
164
|
y1 = y
|
161
165
|
x2 = x1 + 50
|
162
166
|
y2 = y1 + spacing
|
163
167
|
|
164
|
-
elements << %
|
165
|
-
elements << %
|
166
|
-
elements << %
|
168
|
+
elements << %(<polyline points="#{x1},#{y1} #{x2},#{y1} #{x2},#{y2} #{x1 + 5},#{y2}" fill="none" stroke-width="2" stroke-linejoin="round" stroke="#{color}" #{options.join ' '}/>)
|
169
|
+
elements << %(<polygon points="#{x1 + 10},#{y2 - 5} #{x1},#{y2} #{x1 + 10},#{y2 + 5}" fill="#{color}"/>)
|
170
|
+
elements << %(<text x="#{x1 + 10}" y="#{y1 - 5}" font-family="#{font}" font-size="#{size}" fill="#{color}">#{label}</text>)
|
167
171
|
else
|
168
|
-
x1 = role1.center
|
169
172
|
x2 = role2.center
|
170
173
|
|
171
174
|
if role1 == source
|
172
175
|
x2 -= 10
|
173
|
-
elements << %
|
176
|
+
elements << %(<polygon points="#{x2},#{y - 5} #{x2 + 10},#{y} #{x2},#{y + 5}" fill="#{color}"/>)
|
174
177
|
else
|
175
178
|
x1 += 10
|
176
|
-
elements << %
|
179
|
+
elements << %(<polygon points="#{x1},#{y - 5} #{x1 - 10},#{y} #{x1},#{y + 5}" fill="#{color}"/>)
|
177
180
|
end
|
178
181
|
|
179
|
-
elements << %
|
180
|
-
elements << %
|
182
|
+
elements << %(<line x1="#{x1}" y1="#{y}" x2="#{x2}" y2="#{y}" stroke="#{color}" stroke-width="2" #{options.join ' '}/>)
|
183
|
+
elements << %(<text x="#{x1 + 40}" y="#{y - 5}" font-family="#{font}" font-size="#{size}" fill="#{color}">#{label}</text>)
|
181
184
|
|
182
|
-
if comment.size
|
185
|
+
if comment.size.positive?
|
183
186
|
x = role2.prev.center + 15
|
184
|
-
elements << %
|
185
|
-
elements << %
|
187
|
+
elements << %(<path fill="#eeeeee" d="M#{x2 - 30},#{y + 1} L#{x2 - 30},#{y + 10} H#{x} V#{y + 2 * spacing - 25} H#{x2} V#{y + 10} H#{x2 - 20} z" />)
|
188
|
+
elements << %(<text x="#{x + 5}" y="#{y + 23}" font-family="#{font}" font-size="#{size}" fill="#{color}">)
|
186
189
|
split(comment).each_with_index do |line, i|
|
187
|
-
elements << %
|
190
|
+
elements << %(<tspan x="#{x + 5}" y="#{y + 23 + 13 * i}">#{line}</tspan>)
|
188
191
|
end
|
189
192
|
elements << '</text>'
|
190
193
|
end
|
@@ -194,7 +197,7 @@ module Markdoc
|
|
194
197
|
end
|
195
198
|
|
196
199
|
def y
|
197
|
-
offset + row*spacing
|
200
|
+
offset + row * spacing
|
198
201
|
end
|
199
202
|
|
200
203
|
private
|
@@ -210,10 +213,9 @@ module Markdoc
|
|
210
213
|
line = word
|
211
214
|
end
|
212
215
|
end
|
213
|
-
ary << line if line.length
|
216
|
+
ary << line if line.length.positive?
|
214
217
|
ary
|
215
218
|
end
|
216
|
-
|
217
219
|
end
|
218
220
|
|
219
221
|
class Diagram
|
@@ -233,14 +235,14 @@ module Markdoc
|
|
233
235
|
end
|
234
236
|
|
235
237
|
def find(id)
|
236
|
-
roles.detect{|role| role.id == id.strip} or raise("Non-declared role: #{id}")
|
238
|
+
roles.detect { |role| role.id == id.strip } or raise("Non-declared role: #{id}")
|
237
239
|
end
|
238
240
|
|
239
241
|
def parse
|
240
242
|
input.split("\n").each do |line|
|
241
243
|
next if line.strip.empty?
|
242
244
|
|
243
|
-
if matches = line.match(/^(?<id>[a-zA-Z0-9_ \t]+) *= *(?<label>[a-zA-Z0-9_ \t]+)/)
|
245
|
+
if (matches = line.match(/^(?<id>[a-zA-Z0-9_ \t]+) *= *(?<label>[a-zA-Z0-9_ \t]+)/))
|
244
246
|
# User = Actor
|
245
247
|
roles << Role.new(
|
246
248
|
id: matches[:id],
|
@@ -249,7 +251,7 @@ module Markdoc
|
|
249
251
|
diagram: attributes[:diagram],
|
250
252
|
ui: attributes[:role]
|
251
253
|
)
|
252
|
-
elsif matches = line.match(/^(?<role1>[a-zA-Z0-9_ \t]+) *(?<op>[<\-~>]{2}) *(?<role2>[a-zA-Z0-9_ \t]+):(?<label>[^#]+)#?(?<comment>.*)/)
|
254
|
+
elsif (matches = line.match(/^(?<role1>[a-zA-Z0-9_ \t]+) *(?<op>[<\-~>]{2}) *(?<role2>[a-zA-Z0-9_ \t]+):(?<label>[^#]+)#?(?<comment>.*)/))
|
253
255
|
# User -> Web : Login
|
254
256
|
messages << Message.new(
|
255
257
|
role1: find(matches[:role1]),
|
@@ -263,8 +265,8 @@ module Markdoc
|
|
263
265
|
)
|
264
266
|
self.rows += 1
|
265
267
|
# comment takes 1 more row
|
266
|
-
self.rows += 1 if matches[:comment].length
|
267
|
-
elsif matches = line.match(/^(?<role>[a-zA-Z0-9_ \t]+) *:(?<label>[^#]+)#?(?<comment>.*)/)
|
268
|
+
self.rows += 1 if matches[:comment].length.positive?
|
269
|
+
elsif (matches = line.match(/^(?<role>[a-zA-Z0-9_ \t]+) *:(?<label>[^#]+)#?(?<comment>.*)/))
|
268
270
|
# Web : Save the form
|
269
271
|
messages << Message.new(
|
270
272
|
role1: find(matches[:role]),
|
@@ -290,11 +292,7 @@ module Markdoc
|
|
290
292
|
end
|
291
293
|
|
292
294
|
def print
|
293
|
-
template
|
294
|
-
width: width,
|
295
|
-
height: height,
|
296
|
-
content: (roles + messages).map(&:print).join("\n")
|
297
|
-
}
|
295
|
+
format(template, width: width, height: height, content: (roles + messages).map(&:print).join("\n"))
|
298
296
|
end
|
299
297
|
|
300
298
|
def height
|
@@ -311,13 +309,12 @@ module Markdoc
|
|
311
309
|
private
|
312
310
|
|
313
311
|
def template
|
314
|
-
'<svg xmlns="http://www.w3.org/2000/svg" '
|
315
|
-
'xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" '
|
316
|
-
'width="
|
317
|
-
'viewBox="0 0
|
318
|
-
'
|
312
|
+
'<svg xmlns="http://www.w3.org/2000/svg" ' \
|
313
|
+
'xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" ' \
|
314
|
+
'width="%<width>s" height="%<height>s" ' \
|
315
|
+
'viewBox="0 0 %<width>s %<height>s">' \
|
316
|
+
'%<content>s</svg>'
|
319
317
|
end
|
320
|
-
|
321
318
|
end
|
322
319
|
end
|
323
320
|
end
|
data/lib/markdoc/version.rb
CHANGED
data/lib/markdoc.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: markdoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Ochirkhuyag.L
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: polyglot
|
@@ -25,61 +25,61 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: pygments.rb
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '3
|
33
|
+
version: '2.3'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '3
|
40
|
+
version: '2.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: redcarpet
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '3.5'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '3.5'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: treetop
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '1.6'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '1.6'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: '13.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: '13.0'
|
83
83
|
description: Markdown with support for pseudocode to flowchart and sequence diagram
|
84
84
|
generation
|
85
85
|
email: ochkoo@gmail.com
|
@@ -113,14 +113,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
113
113
|
requirements:
|
114
114
|
- - ">="
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version:
|
116
|
+
version: 2.7.6
|
117
117
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
118
|
requirements:
|
119
119
|
- - ">="
|
120
120
|
- !ruby/object:Gem::Version
|
121
121
|
version: '0'
|
122
122
|
requirements: []
|
123
|
-
rubygems_version: 3.
|
123
|
+
rubygems_version: 3.1.6
|
124
124
|
signing_key:
|
125
125
|
specification_version: 4
|
126
126
|
summary: Markdown to HTML converter with diagrams
|