metanorma-cli 1.2.13.1 → 1.3.3
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/05-020r26.rxl +75 -0
- data/05-020r26.xml.zip +0 -0
- data/Gemfile.lock +336 -0
- data/README.adoc +31 -0
- data/a +3 -0
- data/a.json +33 -0
- data/a.rb +13 -0
- data/a.rxl +45 -0
- data/b +85 -0
- data/csd-tofix 2.zip +0 -0
- data/csd-tofix.zip +0 -0
- data/exe/metanorma.old +178 -0
- data/extract/sourcecode/sourcecode-0000.txt +5 -0
- data/files.zip +0 -0
- data/lib/metanorma/cli.rb +3 -16
- data/lib/metanorma/cli/command.rb +35 -7
- data/lib/metanorma/cli/compiler.rb +6 -1
- data/lib/metanorma/cli/setup.rb +26 -12
- data/lib/metanorma/cli/version.rb +1 -1
- data/metanorma-cli.gemspec +20 -19
- data/relaton/cache/version +1 -0
- data/rice.rxl +51 -0
- data/sourcecode/0 +5 -0
- data/test.rxl +52 -0
- data/tmp/my-custom-csd/Gemfile +4 -0
- data/tmp/my-custom-csd/Makefile +144 -0
- data/tmp/my-custom-csd/Makefile.win +116 -0
- data/tmp/my-custom-csd/appveyor.yml +29 -0
- data/tmp/my-custom-csd/metanorma.yml +4 -0
- data/tmp/my-document/Gemfile +4 -0
- data/tmp/my-document/Makefile +144 -0
- data/tmp/my-document/Makefile.win +116 -0
- data/tmp/my-document/appveyor.yml +29 -0
- data/tmp/my-document/metanorma.yml +4 -0
- data/tmp/my-local-document/Gemfile +4 -0
- data/tmp/my-local-document/Makefile +144 -0
- data/tmp/my-local-document/Makefile.win +116 -0
- data/tmp/my-local-document/appveyor.yml +29 -0
- data/tmp/my-local-document/metanorma.yml +4 -0
- metadata +88 -41
data/a
ADDED
data/a.json
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
{
|
2
|
+
"id": "<GUID>",
|
3
|
+
"actor": {
|
4
|
+
"name": "<Student Name>",
|
5
|
+
"mbox": "<Student Email Address>",
|
6
|
+
"objectType": "Person"
|
7
|
+
},
|
8
|
+
"verb": {
|
9
|
+
"id": "http://adlnet.gov/expapi/verbs/completed",
|
10
|
+
"display": {
|
11
|
+
"en-US": "completed"
|
12
|
+
}
|
13
|
+
},
|
14
|
+
"object": {
|
15
|
+
"id": "<Activity URL>",
|
16
|
+
"definition": {
|
17
|
+
"name": {
|
18
|
+
"en-US": "<Activity name>"
|
19
|
+
},
|
20
|
+
"description": {
|
21
|
+
"en-US": "<Activity description>"
|
22
|
+
},
|
23
|
+
"type": "http://id.tincanapi.com/activitytype/resource"
|
24
|
+
},
|
25
|
+
"objectType": "Activity"
|
26
|
+
},
|
27
|
+
"result": {
|
28
|
+
"completion": "<Boolean>",
|
29
|
+
"duration": "<Cumulative ISO 8601 Duration>"
|
30
|
+
},
|
31
|
+
"timestamp": "<Start, ISO 8601 DATE>"
|
32
|
+
}
|
33
|
+
|
data/a.rb
ADDED
data/a.rxl
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
<bibdata type="standard">
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
<contributor>
|
8
|
+
<role type="author"/>
|
9
|
+
<organization>
|
10
|
+
<name>International Organization for Standardization</name>
|
11
|
+
<abbreviation>ISO</abbreviation>
|
12
|
+
</organization>
|
13
|
+
</contributor>
|
14
|
+
<contributor>
|
15
|
+
<role type="publisher"/>
|
16
|
+
<organization>
|
17
|
+
<name>International Organization for Standardization</name>
|
18
|
+
<abbreviation>ISO</abbreviation>
|
19
|
+
</organization>
|
20
|
+
</contributor>
|
21
|
+
|
22
|
+
<language>en</language>
|
23
|
+
<script>Latn</script>
|
24
|
+
<status>
|
25
|
+
<stage>60</stage>
|
26
|
+
<substage>60</substage>
|
27
|
+
</status>
|
28
|
+
<copyright>
|
29
|
+
<from>2020</from>
|
30
|
+
<owner>
|
31
|
+
<organization>
|
32
|
+
<name>International Organization for Standardization</name>
|
33
|
+
<abbreviation>ISO</abbreviation>
|
34
|
+
</organization>
|
35
|
+
</owner>
|
36
|
+
</copyright>
|
37
|
+
<ext>
|
38
|
+
<doctype>article</doctype>
|
39
|
+
<editorialgroup>
|
40
|
+
<technical-committee/>
|
41
|
+
<subcommittee/>
|
42
|
+
<workgroup/>
|
43
|
+
</editorialgroup>
|
44
|
+
</ext>
|
45
|
+
</bibdata>
|
data/b
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<gb-standard xmlns="http://riboseinc.com/gbstandard">
|
3
|
+
<bibdata type="standard">
|
4
|
+
<title>
|
5
|
+
|
6
|
+
</title>
|
7
|
+
<title>
|
8
|
+
|
9
|
+
</title>
|
10
|
+
<docidentifier type="gb">T/AAA 123</docidentifier>
|
11
|
+
<docidentifier type="gb-structured">
|
12
|
+
<project-number>T/AAA 123</project-number>
|
13
|
+
</docidentifier>
|
14
|
+
<docnumber>123</docnumber>
|
15
|
+
<contributor>
|
16
|
+
<role type="author"/>
|
17
|
+
<person>
|
18
|
+
<name>
|
19
|
+
<surname>Author</surname>
|
20
|
+
</name>
|
21
|
+
</person>
|
22
|
+
</contributor>
|
23
|
+
<contributor>
|
24
|
+
<role type="author"/>
|
25
|
+
<organization>
|
26
|
+
<name>GB</name>
|
27
|
+
</organization>
|
28
|
+
</contributor>
|
29
|
+
<contributor>
|
30
|
+
<role type="publisher"/>
|
31
|
+
<organization>
|
32
|
+
<name>GB</name>
|
33
|
+
</organization>
|
34
|
+
</contributor>
|
35
|
+
<contributor>
|
36
|
+
<role type="authority"/>
|
37
|
+
<organization>
|
38
|
+
<name>GB</name>
|
39
|
+
</organization>
|
40
|
+
</contributor>
|
41
|
+
<contributor>
|
42
|
+
<role type="proposer"/>
|
43
|
+
<organization>
|
44
|
+
<name>GB</name>
|
45
|
+
</organization>
|
46
|
+
</contributor>
|
47
|
+
<contributor>
|
48
|
+
<role type="issuer"/>
|
49
|
+
<organization>
|
50
|
+
<name>GB</name>
|
51
|
+
</organization>
|
52
|
+
</contributor>
|
53
|
+
|
54
|
+
<language>en</language>
|
55
|
+
<script>Latn</script>
|
56
|
+
<status>
|
57
|
+
<stage>60</stage>
|
58
|
+
<substage>60</substage>
|
59
|
+
</status>
|
60
|
+
<copyright>
|
61
|
+
<from>2019</from>
|
62
|
+
<owner>
|
63
|
+
<organization>
|
64
|
+
<name>GB</name>
|
65
|
+
</organization>
|
66
|
+
</owner>
|
67
|
+
</copyright>
|
68
|
+
<relation type="nonequivalent">
|
69
|
+
<bibitem>
|
70
|
+
<title> Televisual Frequencies</title>
|
71
|
+
<docidentifier>ISO 1012</docidentifier>
|
72
|
+
</bibitem>
|
73
|
+
</relation>
|
74
|
+
<ext>
|
75
|
+
<doctype>recommendation</doctype>
|
76
|
+
<gbtype>
|
77
|
+
<gbscope>social-group</gbscope>
|
78
|
+
<gbprefix>AAA</gbprefix>
|
79
|
+
<gbmandate>recommendation</gbmandate>
|
80
|
+
<gbtopic>basic</gbtopic>
|
81
|
+
</gbtype>
|
82
|
+
</ext>
|
83
|
+
</bibdata>
|
84
|
+
<sections/>
|
85
|
+
</gb-standard
|
data/csd-tofix 2.zip
ADDED
Binary file
|
data/csd-tofix.zip
ADDED
Binary file
|
data/exe/metanorma.old
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "optparse"
|
4
|
+
require "metanorma"
|
5
|
+
require "fileutils"
|
6
|
+
require "nokogiri"
|
7
|
+
|
8
|
+
registry = Metanorma::Registry.instance
|
9
|
+
|
10
|
+
supported_gem_paths = [
|
11
|
+
"asciidoctor-rfc",
|
12
|
+
"metanorma-iso",
|
13
|
+
"metanorma-gb",
|
14
|
+
"metanorma-csd",
|
15
|
+
"metanorma-csand",
|
16
|
+
"metanorma-m3d",
|
17
|
+
"metanorma-rsd",
|
18
|
+
"metanorma-acme",
|
19
|
+
"metanorma-standoc",
|
20
|
+
]
|
21
|
+
|
22
|
+
puts "[metanorma] detecting backends:"
|
23
|
+
supported_gem_paths.each do |backend|
|
24
|
+
begin
|
25
|
+
puts backend
|
26
|
+
require backend
|
27
|
+
rescue LoadError
|
28
|
+
puts "[metanorma] backend #{backend} not present"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
puts
|
32
|
+
|
33
|
+
options = {
|
34
|
+
format: :asciidoc
|
35
|
+
}
|
36
|
+
opt_parser = OptionParser.new do |opts|
|
37
|
+
opts.banner += " <file>"
|
38
|
+
opts.on(
|
39
|
+
'-t',
|
40
|
+
'--type TYPE',
|
41
|
+
"Type of standard to generate: #{registry.supported_backends.join(", ")}"
|
42
|
+
) { |v| options[:type] = v.to_sym }
|
43
|
+
|
44
|
+
opts.on(
|
45
|
+
'-x',
|
46
|
+
'--extensions EXT1,EXT2,... | all',
|
47
|
+
Array,
|
48
|
+
"Type of extension to generate per type: #{registry.output_formats}\n"
|
49
|
+
) { |v| options[:extension_keys] = v.map(&:to_sym) }
|
50
|
+
|
51
|
+
opts.on(
|
52
|
+
'-f',
|
53
|
+
'--format FORMAT',
|
54
|
+
'Format of source file: asciidoc (current default, only format supported)'
|
55
|
+
) { |v| options[:format] = v.to_sym }
|
56
|
+
|
57
|
+
opts.on(
|
58
|
+
'-r',
|
59
|
+
'--require LIBRARY',
|
60
|
+
'Require LIBRARY prior to execution'
|
61
|
+
) { |v|
|
62
|
+
options[:require] ||= []
|
63
|
+
options[:require] << v
|
64
|
+
}
|
65
|
+
|
66
|
+
opts.on(
|
67
|
+
'-v',
|
68
|
+
'--version',
|
69
|
+
"Print version of code (accompanied with -t)",
|
70
|
+
) { options[:version] = true }
|
71
|
+
|
72
|
+
opts.on(
|
73
|
+
'-w',
|
74
|
+
'--wrapper',
|
75
|
+
'Create wrapper folder for HTML output'
|
76
|
+
) { options[:wrapper] = true }
|
77
|
+
|
78
|
+
opts.on(
|
79
|
+
'-d',
|
80
|
+
'--data-uri-image',
|
81
|
+
'Encode HTML output images as data URIs'
|
82
|
+
) { options[:datauriimage] = true }
|
83
|
+
|
84
|
+
opts.on(
|
85
|
+
'-R',
|
86
|
+
'--relaton FILENAME',
|
87
|
+
'Export Relaton XML for document to nominated filename'
|
88
|
+
) { |v| options[:relaton] = v }
|
89
|
+
|
90
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
91
|
+
puts opts
|
92
|
+
exit
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
opt_parser.parse!(ARGV)
|
98
|
+
|
99
|
+
if options[:require]
|
100
|
+
options[:require].each do |r|
|
101
|
+
require r
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
if options[:version]
|
106
|
+
case options[:format]
|
107
|
+
when :asciidoc
|
108
|
+
processor = registry.find_processor(options[:type].to_sym)
|
109
|
+
puts processor.version
|
110
|
+
exit
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
options[:filename] = ARGV.pop
|
115
|
+
|
116
|
+
unless options[:type]
|
117
|
+
puts "[metanorma] Error: Please specify a standard type."
|
118
|
+
puts opt_parser.help
|
119
|
+
exit 0
|
120
|
+
end
|
121
|
+
|
122
|
+
unless registry.supported_backends.include? options[:type]
|
123
|
+
puts "[metanorma] Error: #{options[:type]} is not a supported standard type."
|
124
|
+
exit 0
|
125
|
+
end
|
126
|
+
|
127
|
+
unless options[:format] == :asciidoc
|
128
|
+
puts "[metanorma] Error: Only source file format currently supported is 'asciidoc'."
|
129
|
+
exit 0
|
130
|
+
end
|
131
|
+
|
132
|
+
unless options[:filename]
|
133
|
+
puts "[metanorma] Error: Need to specify a file to process."
|
134
|
+
exit 0
|
135
|
+
end
|
136
|
+
|
137
|
+
options[:extension_keys] = nil if options[:extension_keys] == [:all]
|
138
|
+
|
139
|
+
case options[:format]
|
140
|
+
when :asciidoc
|
141
|
+
processor = registry.find_processor(options[:type].to_sym)
|
142
|
+
options[:extension_keys] ||= processor.output_formats.inject([]) do |memo, (k, _)|
|
143
|
+
memo << k; memo
|
144
|
+
end
|
145
|
+
extensions = options[:extension_keys].inject([]) do |memo, e|
|
146
|
+
if processor.output_formats[e]
|
147
|
+
memo << e
|
148
|
+
else
|
149
|
+
warn "[metanorma] Error: #{e} format is not supported for this standard"
|
150
|
+
end
|
151
|
+
memo
|
152
|
+
end
|
153
|
+
exit 0 if extensions.empty?
|
154
|
+
|
155
|
+
file = File.read(options[:filename], encoding: "utf-8")
|
156
|
+
isodoc = processor.input_to_isodoc(file)
|
157
|
+
if options[:relaton]
|
158
|
+
xml = Nokogiri::XML(isodoc)
|
159
|
+
bibdata = xml.at("//xmlns:bibdata")
|
160
|
+
#docid = bibdata&.at("./xmlns:docidentifier")&.text || options[:filename]
|
161
|
+
#outname = docid.sub(/^\s+/, "").sub(/\s+$/, "").gsub(/\s+/, "-") + ".xml"
|
162
|
+
File.open(options[:relaton], "w:UTF-8") { |f| f.write bibdata.to_xml }
|
163
|
+
end
|
164
|
+
isodoc_options = processor.extract_options(file)
|
165
|
+
isodoc_options[:datauriimage] = true if options[:datauriimage]
|
166
|
+
extensions.each do |ext|
|
167
|
+
file_extension = processor.output_formats[ext]
|
168
|
+
outfilename = options[:filename].sub(/\.[^.]+$/, ".#{file_extension}")
|
169
|
+
processor.output(isodoc, outfilename, ext, isodoc_options)
|
170
|
+
if options[:wrapper] and /html$/.match file_extension
|
171
|
+
outfilename = outfilename.sub(/\.html$/, "")
|
172
|
+
FileUtils.mkdir_p outfilename
|
173
|
+
FileUtils.mv "#{outfilename}.html", outfilename
|
174
|
+
FileUtils.mv "#{outfilename}_images", outfilename
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
data/files.zip
ADDED
Binary file
|
data/lib/metanorma/cli.rb
CHANGED
@@ -10,10 +10,10 @@ module Metanorma
|
|
10
10
|
"metanorma-iec",
|
11
11
|
"metanorma-ietf",
|
12
12
|
"metanorma-gb",
|
13
|
-
"metanorma-
|
13
|
+
"metanorma-cc",
|
14
14
|
"metanorma-csa",
|
15
15
|
"metanorma-iho",
|
16
|
-
"metanorma-
|
16
|
+
"metanorma-m3aawg",
|
17
17
|
"metanorma-generic",
|
18
18
|
"metanorma-standoc",
|
19
19
|
"metanorma-un",
|
@@ -22,20 +22,7 @@ module Metanorma
|
|
22
22
|
"metanorma-itu",
|
23
23
|
]
|
24
24
|
|
25
|
-
|
26
|
-
#
|
27
|
-
# This is temporary, we are going to extend this to
|
28
|
-
# each of the metanorma gem, so they can specifcy their
|
29
|
-
# own font requirements.
|
30
|
-
#
|
31
|
-
# Please add the whole set here.
|
32
|
-
#
|
33
|
-
REQUIRED_FONTS = [
|
34
|
-
"CALIBRI.TTF",
|
35
|
-
"CAMBRIA.TTC",
|
36
|
-
].freeze
|
37
|
-
|
38
|
-
PRIVATE_SUPPORTED_GEMS = ["metanorma-rsd", "metanorma-mpfd"]
|
25
|
+
PRIVATE_SUPPORTED_GEMS = ["metanorma-ribose", "metanorma-mpfa"]
|
39
26
|
|
40
27
|
def self.load_flavors(flavor_names = SUPPORTED_GEMS + PRIVATE_SUPPORTED_GEMS)
|
41
28
|
flavor_names.each do |flavor|
|
@@ -29,11 +29,14 @@ module Metanorma
|
|
29
29
|
option :relaton, aliases: "-R", desc: "Export Relaton XML for document to nominated filename"
|
30
30
|
option :extract, aliases: "-e", desc: "Export sourcecode fragments from this document to nominated directory"
|
31
31
|
option :version, aliases: "-v", desc: "Print version of code (accompanied with -t)"
|
32
|
+
option "output-dir", aliases: "-o", desc: "Directory to save compiled files"
|
32
33
|
|
33
34
|
def compile(file_name = nil)
|
34
35
|
if file_name && !options[:version]
|
35
36
|
Metanorma::Cli.load_flavors
|
36
|
-
Metanorma::Cli::Compiler.compile(file_name, options.dup)
|
37
|
+
errs = Metanorma::Cli::Compiler.compile(file_name, options.dup)
|
38
|
+
errs.each { |e| Util.log e, :error }
|
39
|
+
exit(1) if errs.any?
|
37
40
|
|
38
41
|
elsif options[:version]
|
39
42
|
invoke(:version, [], type: options[:type], format: options[:format])
|
@@ -51,6 +54,7 @@ module Metanorma
|
|
51
54
|
option :format, aliases: "-f", default: :asciidoc, desc: "Format of source file: eg. asciidoc"
|
52
55
|
|
53
56
|
def version
|
57
|
+
Metanorma::Cli.load_flavors
|
54
58
|
backend_version(options[:type]) || supported_backends
|
55
59
|
rescue NameError => error
|
56
60
|
UI.say(error)
|
@@ -76,11 +80,15 @@ module Metanorma
|
|
76
80
|
)
|
77
81
|
|
78
82
|
def setup
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
83
|
+
list_required_fonts.each do |font|
|
84
|
+
begin
|
85
|
+
Metanorma::Cli::Setup.run(
|
86
|
+
font: font,
|
87
|
+
term_agreement: options[:agree_to_terms],
|
88
|
+
)
|
89
|
+
rescue Fontist::Errors::NonSupportedFontError
|
90
|
+
UI.say("[info]: Font `#{font}` is not supported yet!")
|
91
|
+
end
|
84
92
|
end
|
85
93
|
end
|
86
94
|
|
@@ -113,7 +121,7 @@ module Metanorma
|
|
113
121
|
end
|
114
122
|
|
115
123
|
def find_backend(type)
|
116
|
-
|
124
|
+
load_flavours(type)
|
117
125
|
Metanorma::Registry.instance.find_processor(type&.to_sym)
|
118
126
|
end
|
119
127
|
|
@@ -141,6 +149,26 @@ module Metanorma
|
|
141
149
|
overwrite: options[:overwrite],
|
142
150
|
)
|
143
151
|
end
|
152
|
+
|
153
|
+
def list_required_fonts
|
154
|
+
Metanorma::Cli.load_flavors
|
155
|
+
|
156
|
+
Metanorma::Registry.instance.processors.map do |_key, processor|
|
157
|
+
flavour = processor.class.to_s.gsub("::Processor", "")
|
158
|
+
flavour_module = Object.const_get(flavour)
|
159
|
+
|
160
|
+
if flavour_module.respond_to?(:fonts_used)
|
161
|
+
flavour_module.fonts_used.map { |_, value| value }.flatten
|
162
|
+
end
|
163
|
+
end.compact.flatten.uniq
|
164
|
+
end
|
165
|
+
|
166
|
+
def load_flavours(type)
|
167
|
+
Metanorma::Cli.load_flavors
|
168
|
+
unless Metanorma::Registry.instance.find_processor(type&.to_sym)
|
169
|
+
require "metanorma-#{type}"
|
170
|
+
end
|
171
|
+
end
|
144
172
|
end
|
145
173
|
end
|
146
174
|
end
|