markdoc 1.2.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|