victor-cli 0.3.4 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/victor +1 -1
- data/lib/victor/cli/command_line.rb +4 -4
- data/lib/victor/cli/commands/base.rb +1 -1
- data/lib/victor/cli/commands/convert.rb +17 -15
- data/lib/victor/cli/commands/init.rb +20 -18
- data/lib/victor/cli/commands/render.rb +16 -14
- data/lib/victor/cli/css_data.rb +1 -4
- data/lib/victor/cli/refinements/rendering.rb +7 -9
- data/lib/victor/cli/ruby_source.rb +0 -1
- data/lib/victor/cli/svg_node.rb +5 -6
- data/lib/victor/cli/templates/init/cli.rb +2 -2
- data/lib/victor/cli/templates/init/dsl.rb +3 -3
- data/lib/victor/cli/templates/init/standalone.rb +3 -3
- data/lib/victor/cli/version.rb +2 -2
- metadata +35 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: afafb8c88c6da7d1af79069ad31bb509ff5888c69e659a753e0eb753004defcd
|
4
|
+
data.tar.gz: 849b54edb118a6e4a2b3c5c91c0dbb21c4067fa712aef3984e46928d3ca63696
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1dc516300e9686ad0b9418f653ecdc4a78853f8f7a93334beb8d834fffdb741649b369e001c5b2f13f763f270239654d75d28c50ddadf6a9d0f3ace1aec80544
|
7
|
+
data.tar.gz: 13d73e7b3017f22ddbf4394ae263f5d9adfd50eb95f6060b4b8e7ee0aad40096fc47456e2440b6754f11342d46dd573feb155c093a28886896d8ac9dcadcfb58
|
data/bin/victor
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
require 'mister_bin'
|
2
|
-
requires 'commands/base'
|
2
|
+
requires 'commands/base'
|
3
|
+
requires 'commands'
|
3
4
|
|
4
5
|
module Victor
|
5
6
|
module CLI
|
6
7
|
class CommandLine
|
7
8
|
def self.router
|
8
9
|
router = MisterBin::Runner.new version: VERSION,
|
9
|
-
header:
|
10
|
+
header: 'Victor SVG Utilities'
|
10
11
|
|
11
12
|
router.route 'init', to: Commands::Init
|
12
13
|
router.route 'convert', to: Commands::Convert
|
@@ -15,6 +16,5 @@ module Victor
|
|
15
16
|
router
|
16
17
|
end
|
17
18
|
end
|
18
|
-
|
19
19
|
end
|
20
|
-
end
|
20
|
+
end
|
@@ -2,30 +2,32 @@ module Victor
|
|
2
2
|
module CLI
|
3
3
|
module Commands
|
4
4
|
class Convert < Base
|
5
|
-
summary
|
5
|
+
summary 'Convert SVG to Ruby code'
|
6
6
|
|
7
|
-
usage
|
8
|
-
usage
|
7
|
+
usage 'victor convert SVG_FILE [RUBY_FILE --template NAME]'
|
8
|
+
usage 'victor convert (-h|--help)'
|
9
9
|
|
10
|
-
option
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
option '-t, --template NAME', <<~USAGE
|
11
|
+
Name of the Ruby template to use. Can be:
|
12
|
+
standalone a full standalone Ruby script
|
13
|
+
dsl a Victor DSL script
|
14
|
+
cli a Victor CLI compatible DSL script (default)
|
15
|
+
USAGE
|
14
16
|
|
15
|
-
param
|
16
|
-
param
|
17
|
+
param 'SVG_FILE', 'Input SVG file'
|
18
|
+
param 'RUBY_FILE', 'Output Ruby file. Leave empty to write to stdout'
|
17
19
|
|
18
|
-
example
|
20
|
+
example 'victor convert example.svg example.rb'
|
19
21
|
|
20
22
|
def run
|
21
|
-
svg_file = args[
|
23
|
+
svg_file = args['SVG_FILE']
|
22
24
|
template = args['--template']
|
23
25
|
svg_node = SVGNode.load_file svg_file, layout: template
|
24
26
|
|
25
27
|
validate_template template if template
|
26
28
|
|
27
29
|
code = svg_node.render
|
28
|
-
ruby_file = args[
|
30
|
+
ruby_file = args['RUBY_FILE']
|
29
31
|
|
30
32
|
if ruby_file
|
31
33
|
File.write ruby_file, code
|
@@ -37,9 +39,9 @@ module Victor
|
|
37
39
|
|
38
40
|
def validate_template(template)
|
39
41
|
allowed = %w[cli dsl standalone]
|
40
|
-
|
41
|
-
|
42
|
-
|
42
|
+
return if allowed.include? template
|
43
|
+
|
44
|
+
raise "Template not found #{template}\nAvailable templates: #{allowed.join ', '}"
|
43
45
|
end
|
44
46
|
end
|
45
47
|
end
|
@@ -2,20 +2,22 @@ module Victor
|
|
2
2
|
module CLI
|
3
3
|
module Commands
|
4
4
|
class Init < Base
|
5
|
-
summary
|
5
|
+
summary 'Create a sample Victor Ruby script'
|
6
6
|
|
7
|
-
usage
|
8
|
-
usage
|
7
|
+
usage 'victor init RUBY_FILE [--template TEMPLATE]'
|
8
|
+
usage 'victor init (-h|--help)'
|
9
9
|
|
10
|
-
option
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
option '-t, --template NAME', <<~USAGE
|
11
|
+
Name of the Ruby template to use. Can be:
|
12
|
+
standalone a full standalone Ruby script
|
13
|
+
dsl a Victor DSL script
|
14
|
+
cli a Victor CLI compatible DSL script (default)
|
15
|
+
USAGE
|
14
16
|
|
15
|
-
param
|
17
|
+
param 'RUBY_FILE', 'Output Ruby file'
|
16
18
|
|
17
|
-
example
|
18
|
-
example
|
19
|
+
example 'victor init ghost.rb'
|
20
|
+
example 'victor init ghost.rb --template standalone'
|
19
21
|
|
20
22
|
def run
|
21
23
|
raise "File already exists #{filename}" if File.exist? filename
|
@@ -26,21 +28,21 @@ module Victor
|
|
26
28
|
|
27
29
|
File.write filename, content
|
28
30
|
say "Saved #{filename}"
|
29
|
-
|
31
|
+
|
30
32
|
if template == 'cli'
|
31
|
-
say %
|
33
|
+
say %[Run !txtblu!victor render "#{filename}"!txtrst! to render]
|
32
34
|
else
|
33
|
-
say %
|
35
|
+
say %[Run !txtblu!ruby "#{filename}"!txtrst! to render]
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
37
39
|
private
|
38
40
|
|
39
41
|
def filename
|
40
|
-
@filename ||= if args[
|
41
|
-
args[
|
42
|
+
@filename ||= if args['RUBY_FILE'].end_with? '.rb'
|
43
|
+
args['RUBY_FILE']
|
42
44
|
else
|
43
|
-
args['RUBY_FILE']
|
45
|
+
"#{args['RUBY_FILE']}.rb"
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
@@ -59,11 +61,11 @@ module Victor
|
|
59
61
|
end
|
60
62
|
|
61
63
|
def templates_path
|
62
|
-
@templates_path ||= File.expand_path
|
64
|
+
@templates_path ||= File.expand_path '../templates/init', __dir__
|
63
65
|
end
|
64
66
|
|
65
67
|
def available_templates
|
66
|
-
[
|
68
|
+
%w[cli dsl standalone]
|
67
69
|
end
|
68
70
|
end
|
69
71
|
end
|
@@ -4,22 +4,24 @@ module Victor
|
|
4
4
|
module CLI
|
5
5
|
module Commands
|
6
6
|
class Render < Base
|
7
|
-
summary
|
7
|
+
summary 'Render Ruby code to SVG'
|
8
8
|
|
9
|
-
usage
|
10
|
-
usage
|
9
|
+
usage 'victor render RUBY_FILE [SVG_FILE] [options]'
|
10
|
+
usage 'victor render (-h|--help)'
|
11
11
|
|
12
|
-
option '-t, --template TEMPLATE',
|
13
|
-
|
12
|
+
option '-t, --template TEMPLATE', <<~USAGE
|
13
|
+
Set SVG template
|
14
|
+
Can be: default, html, minimal, or a file path
|
15
|
+
USAGE
|
14
16
|
|
15
17
|
option '-w, --watch', 'Watch the source file and regenerate on change'
|
16
18
|
|
17
|
-
param
|
18
|
-
param
|
19
|
+
param 'RUBY_FILE', 'Input Ruby file'
|
20
|
+
param 'SVG_FILE', 'Output SVG file. Leave empty to write to stdout'
|
19
21
|
|
20
|
-
example
|
21
|
-
example
|
22
|
-
example
|
22
|
+
example 'victor render input.rb output.svg'
|
23
|
+
example 'victor render input.rb output.svg --watch'
|
24
|
+
example 'victor render input.rb --template minimal'
|
23
25
|
|
24
26
|
def run
|
25
27
|
if args['--watch']
|
@@ -49,7 +51,7 @@ module Victor
|
|
49
51
|
def watch
|
50
52
|
say "Watching #{ruby_file} for changes"
|
51
53
|
file_watcher.watch do |changes|
|
52
|
-
changes.each do |
|
54
|
+
changes.each do |_path, event|
|
53
55
|
yield unless event == :deleted
|
54
56
|
end
|
55
57
|
end
|
@@ -58,7 +60,7 @@ module Victor
|
|
58
60
|
def watch_and_generate
|
59
61
|
watch do
|
60
62
|
generate
|
61
|
-
rescue
|
63
|
+
rescue => e
|
62
64
|
say! "!undred!#{e.class}!txtrst!\n#{e.message}"
|
63
65
|
end
|
64
66
|
end
|
@@ -68,11 +70,11 @@ module Victor
|
|
68
70
|
end
|
69
71
|
|
70
72
|
def ruby_file
|
71
|
-
args[
|
73
|
+
args['RUBY_FILE']
|
72
74
|
end
|
73
75
|
|
74
76
|
def svg_file
|
75
|
-
args[
|
77
|
+
args['SVG_FILE']
|
76
78
|
end
|
77
79
|
|
78
80
|
def template
|
data/lib/victor/cli/css_data.rb
CHANGED
@@ -7,28 +7,27 @@ module Victor
|
|
7
7
|
map do |key, value|
|
8
8
|
key = key.to_key if key.is_a? String
|
9
9
|
|
10
|
-
if key ==
|
10
|
+
if key == 'style'
|
11
11
|
value = "{ #{value.style_to_hash.render} }"
|
12
12
|
elsif value.is_a? String
|
13
13
|
value = value.to_value
|
14
14
|
end
|
15
15
|
|
16
16
|
"#{key}: #{value}"
|
17
|
-
end.join
|
17
|
+
end.join ', '
|
18
18
|
end
|
19
|
-
|
20
19
|
end
|
21
20
|
|
22
21
|
refine String do
|
23
22
|
def to_key
|
24
|
-
|
23
|
+
tr('-', '_').to_sym.inspect[1..]
|
25
24
|
end
|
26
25
|
|
27
26
|
def to_value
|
28
|
-
if to_f.to_s == self
|
27
|
+
if (to_f.to_s == self) || (to_i.to_s == self)
|
29
28
|
self
|
30
29
|
else
|
31
|
-
%
|
30
|
+
%["#{self}"]
|
32
31
|
end
|
33
32
|
end
|
34
33
|
|
@@ -37,10 +36,9 @@ module Victor
|
|
37
36
|
def style_to_hash
|
38
37
|
parser = CssParser::Parser.new
|
39
38
|
parser.load_string! "victor { #{self} }"
|
40
|
-
parser.to_h[
|
39
|
+
parser.to_h['all']['victor']
|
41
40
|
end
|
42
|
-
|
43
41
|
end
|
44
42
|
end
|
45
43
|
end
|
46
|
-
end
|
44
|
+
end
|
data/lib/victor/cli/svg_node.rb
CHANGED
@@ -29,7 +29,7 @@ module Victor
|
|
29
29
|
# Returns formatted Ruby code
|
30
30
|
def render
|
31
31
|
Rufo::Formatter.format ruby_code
|
32
|
-
rescue Rufo::SyntaxError
|
32
|
+
rescue Rufo::SyntaxError
|
33
33
|
raise ruby_code
|
34
34
|
end
|
35
35
|
|
@@ -87,7 +87,7 @@ module Victor
|
|
87
87
|
# Returns the path to the appropriate ERB template, based on type
|
88
88
|
def erb_template_file
|
89
89
|
file = type == :root ? "root_#{layout}" : type
|
90
|
-
|
90
|
+
File.expand_path "templates/nodes/#{file}.erb", __dir__
|
91
91
|
end
|
92
92
|
|
93
93
|
# Returns the internal element type
|
@@ -114,13 +114,13 @@ module Victor
|
|
114
114
|
|
115
115
|
# Returns a hash of attributes
|
116
116
|
def attributes!
|
117
|
-
node.attribute_nodes.
|
117
|
+
node.attribute_nodes.to_h do |attr|
|
118
118
|
name = attr.name
|
119
119
|
value = attr.value
|
120
120
|
key = attr.respond_to?(:prefix) ? "#{attr.prefix}:#{name}" : name
|
121
|
-
|
121
|
+
|
122
122
|
[key, value]
|
123
|
-
end
|
123
|
+
end
|
124
124
|
end
|
125
125
|
|
126
126
|
def content!
|
@@ -135,7 +135,6 @@ module Victor
|
|
135
135
|
# :nocov:
|
136
136
|
end
|
137
137
|
end
|
138
|
-
|
139
138
|
end
|
140
139
|
end
|
141
140
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Render this by running:
|
2
2
|
# victor render "%{filename}"
|
3
3
|
|
4
|
-
setup viewBox:
|
4
|
+
setup viewBox: '0 0 100 100'
|
5
5
|
|
6
6
|
build do
|
7
7
|
circle cx: 50, cy: 50, r: 40, fill: 'yellow'
|
@@ -11,5 +11,5 @@ build do
|
|
11
11
|
circle cx: x, cy: 40, r: 8, fill: 'white'
|
12
12
|
end
|
13
13
|
|
14
|
-
path d:
|
14
|
+
path d: 'M11 100 l13 -15 l13 15 l13 -15 l13 15 l13 -15 l13 15 Z', fill: 'white'
|
15
15
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# ruby "%{filename}"
|
3
3
|
require 'victor/script'
|
4
4
|
|
5
|
-
setup viewBox:
|
5
|
+
setup viewBox: '0 0 100 100'
|
6
6
|
|
7
7
|
build do
|
8
8
|
circle cx: 50, cy: 50, r: 40, fill: 'yellow'
|
@@ -12,8 +12,8 @@ build do
|
|
12
12
|
circle cx: x, cy: 40, r: 8, fill: 'white'
|
13
13
|
end
|
14
14
|
|
15
|
-
path d:
|
15
|
+
path d: 'M11 100 l13 -15 l13 15 l13 -15 l13 15 l13 -15 l13 15 Z', fill: 'white'
|
16
16
|
end
|
17
17
|
|
18
18
|
puts render
|
19
|
-
save
|
19
|
+
save '%{basename}'
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# ruby "%{filename}"
|
3
3
|
require 'victor'
|
4
4
|
|
5
|
-
svg = Victor::SVG.new viewBox:
|
5
|
+
svg = Victor::SVG.new viewBox: '0 0 100 100'
|
6
6
|
|
7
7
|
svg.build do
|
8
8
|
circle cx: 50, cy: 50, r: 40, fill: 'yellow'
|
@@ -12,8 +12,8 @@ svg.build do
|
|
12
12
|
circle cx: x, cy: 40, r: 8, fill: 'white'
|
13
13
|
end
|
14
14
|
|
15
|
-
path d:
|
15
|
+
path d: 'M11 100 l13 -15 l13 15 l13 -15 l13 15 l13 -15 l13 15 Z', fill: 'white'
|
16
16
|
end
|
17
17
|
|
18
18
|
puts svg.render
|
19
|
-
svg.save
|
19
|
+
svg.save '%{basename}'
|
data/lib/victor/cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: victor-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Ben Shitrit
|
@@ -9,120 +9,126 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-01-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: colsole
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '0.8'
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.8.1
|
21
24
|
type: :runtime
|
22
25
|
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
25
28
|
- - "~>"
|
26
29
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
30
|
+
version: '0.8'
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.8.1
|
28
34
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
35
|
+
name: css_parser
|
30
36
|
requirement: !ruby/object:Gem::Requirement
|
31
37
|
requirements:
|
32
38
|
- - "~>"
|
33
39
|
- !ruby/object:Gem::Version
|
34
|
-
version: '1.
|
40
|
+
version: '1.7'
|
35
41
|
type: :runtime
|
36
42
|
prerelease: false
|
37
43
|
version_requirements: !ruby/object:Gem::Requirement
|
38
44
|
requirements:
|
39
45
|
- - "~>"
|
40
46
|
- !ruby/object:Gem::Version
|
41
|
-
version: '1.
|
47
|
+
version: '1.7'
|
42
48
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
49
|
+
name: filewatcher
|
44
50
|
requirement: !ruby/object:Gem::Requirement
|
45
51
|
requirements:
|
46
52
|
- - "~>"
|
47
53
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
54
|
+
version: '2.0'
|
49
55
|
type: :runtime
|
50
56
|
prerelease: false
|
51
57
|
version_requirements: !ruby/object:Gem::Requirement
|
52
58
|
requirements:
|
53
59
|
- - "~>"
|
54
60
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
61
|
+
version: '2.0'
|
56
62
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
63
|
+
name: mister_bin
|
58
64
|
requirement: !ruby/object:Gem::Requirement
|
59
65
|
requirements:
|
60
66
|
- - "~>"
|
61
67
|
- !ruby/object:Gem::Version
|
62
|
-
version: '0.
|
68
|
+
version: '0.7'
|
63
69
|
type: :runtime
|
64
70
|
prerelease: false
|
65
71
|
version_requirements: !ruby/object:Gem::Requirement
|
66
72
|
requirements:
|
67
73
|
- - "~>"
|
68
74
|
- !ruby/object:Gem::Version
|
69
|
-
version: '0.
|
75
|
+
version: '0.7'
|
70
76
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
77
|
+
name: nokogiri
|
72
78
|
requirement: !ruby/object:Gem::Requirement
|
73
79
|
requirements:
|
74
80
|
- - "~>"
|
75
81
|
- !ruby/object:Gem::Version
|
76
|
-
version: '
|
82
|
+
version: '1.10'
|
77
83
|
type: :runtime
|
78
84
|
prerelease: false
|
79
85
|
version_requirements: !ruby/object:Gem::Requirement
|
80
86
|
requirements:
|
81
87
|
- - "~>"
|
82
88
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
89
|
+
version: '1.10'
|
84
90
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
91
|
+
name: pretty_trace
|
86
92
|
requirement: !ruby/object:Gem::Requirement
|
87
93
|
requirements:
|
88
94
|
- - "~>"
|
89
95
|
- !ruby/object:Gem::Version
|
90
|
-
version: '0.
|
96
|
+
version: '0.2'
|
91
97
|
type: :runtime
|
92
98
|
prerelease: false
|
93
99
|
version_requirements: !ruby/object:Gem::Requirement
|
94
100
|
requirements:
|
95
101
|
- - "~>"
|
96
102
|
- !ruby/object:Gem::Version
|
97
|
-
version: '0.
|
103
|
+
version: '0.2'
|
98
104
|
- !ruby/object:Gem::Dependency
|
99
|
-
name:
|
105
|
+
name: requires
|
100
106
|
requirement: !ruby/object:Gem::Requirement
|
101
107
|
requirements:
|
102
108
|
- - "~>"
|
103
109
|
- !ruby/object:Gem::Version
|
104
|
-
version: '1.
|
110
|
+
version: '1.0'
|
105
111
|
type: :runtime
|
106
112
|
prerelease: false
|
107
113
|
version_requirements: !ruby/object:Gem::Requirement
|
108
114
|
requirements:
|
109
115
|
- - "~>"
|
110
116
|
- !ruby/object:Gem::Version
|
111
|
-
version: '1.
|
117
|
+
version: '1.0'
|
112
118
|
- !ruby/object:Gem::Dependency
|
113
|
-
name:
|
119
|
+
name: rufo
|
114
120
|
requirement: !ruby/object:Gem::Requirement
|
115
121
|
requirements:
|
116
122
|
- - "~>"
|
117
123
|
- !ruby/object:Gem::Version
|
118
|
-
version: '0.
|
124
|
+
version: '0.12'
|
119
125
|
type: :runtime
|
120
126
|
prerelease: false
|
121
127
|
version_requirements: !ruby/object:Gem::Requirement
|
122
128
|
requirements:
|
123
129
|
- - "~>"
|
124
130
|
- !ruby/object:Gem::Version
|
125
|
-
version: '0.
|
131
|
+
version: '0.12'
|
126
132
|
- !ruby/object:Gem::Dependency
|
127
133
|
name: victor
|
128
134
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,7 +175,8 @@ files:
|
|
169
175
|
homepage: https://github.com/dannyben/victor-cli
|
170
176
|
licenses:
|
171
177
|
- MIT
|
172
|
-
metadata:
|
178
|
+
metadata:
|
179
|
+
rubygems_mfa_required: 'true'
|
173
180
|
post_install_message:
|
174
181
|
rdoc_options: []
|
175
182
|
require_paths:
|
@@ -185,7 +192,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
185
192
|
- !ruby/object:Gem::Version
|
186
193
|
version: '0'
|
187
194
|
requirements: []
|
188
|
-
rubygems_version: 3.3
|
195
|
+
rubygems_version: 3.4.3
|
189
196
|
signing_key:
|
190
197
|
specification_version: 4
|
191
198
|
summary: CLI for Victor, the SVG Library
|