metanorma-acme 0.3.3 → 0.3.6
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/.travis.yml +1 -0
- data/Gemfile +0 -4
- data/README.adoc +33 -3
- data/lib/asciidoctor/acme/converter.rb +4 -20
- data/lib/isodoc/acme/html_convert.rb +132 -131
- data/lib/isodoc/acme/pdf_convert.rb +18 -17
- data/lib/isodoc/acme/word_convert.rb +23 -21
- data/lib/metanorma/acme/processor.rb +29 -8
- data/lib/metanorma/acme/version.rb +1 -1
- data/metanorma-acme.gemspec +3 -2
- metadata +22 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50076c0a8cec8d60eaec16b8844110b892a462ad28485e4e56b73202da4e8af4
|
4
|
+
data.tar.gz: 72134238abb869d305b46246de35bb0523de8753ad717e2ab1bc472f49ac7a65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa00611552960fa5afeb6a99af13792df6fa25238f47aba6a899d7efca11991e03188c6281b376e1367f10252ac24233be09656be7c96fbe6e00faa8b7c372cb
|
7
|
+
data.tar.gz: 872af1e115d6316d43477e78e142493b6a58c38d2be7fdd6265e2909540ddc66c1664ccd292a5d1884fd8e6c1404ca44a31d75a3809078d0513478b6c0f0b456
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.adoc
CHANGED
@@ -1,13 +1,43 @@
|
|
1
1
|
= metanorma-acme: Sample Asciidoctor processor for Metanorma documents
|
2
2
|
|
3
|
-
////
|
4
3
|
image:https://img.shields.io/gem/v/metanorma-acme.svg["Gem Version", link="https://rubygems.org/gems/metanorma-acme"]
|
5
4
|
image:https://img.shields.io/travis/riboseinc/metanorma-acme/master.svg["Build Status", link="https://travis-ci.org/riboseinc/metanorma-acme"]
|
6
5
|
image:https://codeclimate.com/github/riboseinc/metanorma-acme/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/riboseinc/metanorma-acme"]
|
7
|
-
////
|
8
6
|
|
9
7
|
== Functionality
|
10
8
|
|
11
9
|
This is an example of a https://github.com/riboseinc/metanorma[Metanorma] gem for processing input formats (Asciidoctor) and generating output formats (Word, HTML, PDF).
|
12
|
-
It has been created as an exemplar for generating new instances of Metanorma gems, as illustrated in https://github.com/riboseinc/
|
10
|
+
It has been created as an exemplar for generating new instances of Metanorma gems, as illustrated in https://github.com/riboseinc/metanorma-iso/wiki/Gem-Customisation-Guide
|
13
11
|
|
12
|
+
You can customise output of this gem for your own purposes without needing to customise the gem fully. You can use the
|
13
|
+
following asciidoctor document variables to set the stylesheets that are passed as arguments to the `isodoc` gem:
|
14
|
+
|
15
|
+
````
|
16
|
+
:body-font: (name of the main font to be used)
|
17
|
+
:header-font: (name of the header font to be used)
|
18
|
+
:monospace-font: (name of the monospace font to be used)
|
19
|
+
:htmlstylesheet: (stylesheet for HTML)
|
20
|
+
:htmlcoverpage: (cover page for HTML)
|
21
|
+
:htmlintropage: (intro page for HTML)
|
22
|
+
:scripts: (scripts for HTML)
|
23
|
+
:wordstylesheet: (default stylesheet for Word)
|
24
|
+
:standardstylesheet: (standard-specific stylesheet for Word)
|
25
|
+
:header: (header/footer HTML for Word)
|
26
|
+
:wordcoverpage: (cover page for Word)
|
27
|
+
:wordintropage: (intro page for Word)
|
28
|
+
:ulstyle: (list style selector for unordered lists for Word)
|
29
|
+
:olstyle: (list style selector for ordered lists for Word)
|
30
|
+
````
|
31
|
+
|
32
|
+
You should run the gem through the https://github.com/riboseinc/metanorma-cli[Metanorma CLI]:
|
33
|
+
|
34
|
+
[source, console]
|
35
|
+
----
|
36
|
+
metanorma -r metanorma-acme -t acme test.adoc
|
37
|
+
----
|
38
|
+
|
39
|
+
The CSS stylesheets are normally expected to be https://sass-lang.com/guide[SCSS], with the font names `$body-font, $header-font, $monospace-font` used as variables; but if you supply the stylesheets, you can bypass that customisation, and give the font names in the stylesheets.
|
40
|
+
|
41
|
+
The cover page and intro page are still expected to be http://liquidmarkup.org[Liquid Template] files, giving metadata fields from `isodoc/metadata.rb` in curly brackets. See https://github.com/riboseinc/isodoc/blob/master/lib/isodoc/metadata.rb for the default metadata field settings.
|
42
|
+
|
43
|
+
The use of HTML and CSS for Word is idiosyncratic, and involves some trial and error; consult the documentation above for more information.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require "asciidoctor"
|
2
|
-
require "asciidoctor/
|
2
|
+
require "asciidoctor/standoc/converter"
|
3
3
|
|
4
4
|
module Asciidoctor
|
5
5
|
module Acme
|
@@ -7,7 +7,7 @@ module Asciidoctor
|
|
7
7
|
# A {Converter} implementation that generates RSD output, and a document
|
8
8
|
# schema encapsulation of the document for validation
|
9
9
|
#
|
10
|
-
class Converter <
|
10
|
+
class Converter < Standoc::Converter
|
11
11
|
|
12
12
|
register_for "acme"
|
13
13
|
|
@@ -154,27 +154,11 @@ module Asciidoctor
|
|
154
154
|
end
|
155
155
|
|
156
156
|
def html_converter(node)
|
157
|
-
IsoDoc::Acme::HtmlConvert.new(
|
158
|
-
script: node.attr("script"),
|
159
|
-
bodyfont: node.attr("body-font"),
|
160
|
-
headerfont: node.attr("header-font"),
|
161
|
-
monospacefont: node.attr("monospace-font"),
|
162
|
-
titlefont: node.attr("title-font"),
|
163
|
-
i18nyaml: node.attr("i18nyaml"),
|
164
|
-
scope: node.attr("scope"),
|
165
|
-
)
|
157
|
+
IsoDoc::Acme::HtmlConvert.new(html_extract_attributes(node))
|
166
158
|
end
|
167
159
|
|
168
160
|
def word_converter(node)
|
169
|
-
IsoDoc::Acme::WordConvert.new(
|
170
|
-
script: node.attr("script"),
|
171
|
-
bodyfont: node.attr("body-font"),
|
172
|
-
headerfont: node.attr("header-font"),
|
173
|
-
monospacefont: node.attr("monospace-font"),
|
174
|
-
titlefont: node.attr("title-font"),
|
175
|
-
i18nyaml: node.attr("i18nyaml"),
|
176
|
-
scope: node.attr("scope"),
|
177
|
-
)
|
161
|
+
IsoDoc::Acme::WordConvert.new(doc_extract_attributes(node))
|
178
162
|
end
|
179
163
|
|
180
164
|
def inline_quoted(node)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require "isodoc"
|
2
2
|
require_relative "metadata"
|
3
|
+
require "fileutils"
|
3
4
|
|
4
5
|
module IsoDoc
|
5
6
|
module Acme
|
@@ -8,37 +9,37 @@ module IsoDoc
|
|
8
9
|
# schema encapsulation of the document for validation
|
9
10
|
#
|
10
11
|
class HtmlConvert < IsoDoc::HtmlConvert
|
11
|
-
def html_path_acme(file)
|
12
|
-
File.join(File.dirname(__FILE__), File.join("html", file))
|
13
|
-
end
|
14
|
-
|
15
12
|
def initialize(options)
|
13
|
+
@libdir = File.dirname(__FILE__)
|
16
14
|
super
|
17
|
-
|
18
|
-
|
19
|
-
@htmlintropage = html_path_acme("html_acme_intro.html")
|
20
|
-
@scripts = html_path_acme("scripts.html")
|
21
|
-
system "cp #{html_path_acme('logo.jpg')} logo.jpg"
|
15
|
+
#system "cp #{html_doc_path('logo.jpg')} logo.jpg"
|
16
|
+
FileUtils.cp html_doc_path('logo.jpg'), "logo.jpg"
|
22
17
|
@files_to_delete << "logo.jpg"
|
23
18
|
end
|
24
19
|
|
25
20
|
def default_fonts(options)
|
26
|
-
|
27
|
-
(options[:script] == "Hans" ? '"SimSun",serif' :
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
'"Overpass",sans-serif')
|
32
|
-
m = options[:monospacefont] || '"Space Mono",monospace'
|
33
|
-
"$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n"
|
21
|
+
{
|
22
|
+
bodyfont: (options[:script] == "Hans" ? '"SimSun",serif' : '"Overpass",sans-serif'),
|
23
|
+
headerfont: (options[:script] == "Hans" ? '"SimHei",sans-serif' : '"Overpass",sans-serif'),
|
24
|
+
monospacefont: '"Space Mono",monospace'
|
25
|
+
}
|
34
26
|
end
|
35
27
|
|
36
|
-
def
|
37
|
-
|
28
|
+
def default_file_locations(_options)
|
29
|
+
{
|
30
|
+
htmlstylesheet: html_doc_path("htmlstyle.scss"),
|
31
|
+
htmlcoverpage: html_doc_path("html_acme_titlepage.html"),
|
32
|
+
htmlintropage: html_doc_path("html_acme_intro.html"),
|
33
|
+
scripts: html_doc_path("scripts.html"),
|
34
|
+
}
|
38
35
|
end
|
39
36
|
|
40
|
-
|
41
|
-
|
37
|
+
def metadata_init(lang, script, labels)
|
38
|
+
@meta = Metadata.new(lang, script, labels)
|
39
|
+
end
|
40
|
+
|
41
|
+
def html_head
|
42
|
+
<<~HEAD.freeze
|
42
43
|
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
43
44
|
|
44
45
|
<!--TOC script import-->
|
@@ -51,148 +52,148 @@ module IsoDoc
|
|
51
52
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.8/css/solid.css" integrity="sha384-v2Tw72dyUXeU3y4aM2Y0tBJQkGfplr39mxZqlTBDUZAb9BGoC40+rdFCG0m10lXk" crossorigin="anonymous">
|
52
53
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.8/css/fontawesome.css" integrity="sha384-q3jl8XQu1OpdLgGFvNRnPdj5VIlCvgsDQTQB6owSOHWlAurxul7f+JpUOVdAiJ5P" crossorigin="anonymous">
|
53
54
|
<style class="anchorjs"></style>
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
def make_body(xml, docxml)
|
58
|
-
body_attr = { lang: "EN-US", link: "blue", vlink: "#954F72", "xml:lang": "EN-US", class: "container" }
|
59
|
-
xml.body **body_attr do |body|
|
60
|
-
make_body1(body, docxml)
|
61
|
-
make_body2(body, docxml)
|
62
|
-
make_body3(body, docxml)
|
55
|
+
HEAD
|
63
56
|
end
|
64
|
-
end
|
65
57
|
|
66
|
-
|
67
|
-
|
68
|
-
|
58
|
+
def make_body(xml, docxml)
|
59
|
+
body_attr = { lang: "EN-US", link: "blue", vlink: "#954F72", "xml:lang": "EN-US", class: "container" }
|
60
|
+
xml.body **body_attr do |body|
|
61
|
+
make_body1(body, docxml)
|
62
|
+
make_body2(body, docxml)
|
63
|
+
make_body3(body, docxml)
|
64
|
+
end
|
65
|
+
end
|
69
66
|
|
70
|
-
|
71
|
-
|
72
|
-
t << "#{get_anchors[annex['id']][:label]} "
|
73
|
-
t << "<b>#{name.text}</b>"
|
67
|
+
def html_toc(docxml)
|
68
|
+
docxml
|
74
69
|
end
|
75
|
-
end
|
76
70
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
71
|
+
def annex_name(annex, name, div)
|
72
|
+
div.h1 **{ class: "Annex" } do |t|
|
73
|
+
t << "#{get_anchors[annex['id']][:label]} "
|
74
|
+
t << "<b>#{name.text}</b>"
|
75
|
+
end
|
76
|
+
end
|
82
77
|
|
83
|
-
|
84
|
-
|
85
|
-
|
78
|
+
def annex_name_lbl(clause, num)
|
79
|
+
obl = l10n("(#{@inform_annex_lbl})")
|
80
|
+
obl = l10n("(#{@norm_annex_lbl})") if clause["obligation"] == "normative"
|
81
|
+
l10n("<b>#{@annex_lbl} #{num}</b> #{obl}")
|
82
|
+
end
|
86
83
|
|
87
|
-
|
88
|
-
|
89
|
-
div << @no_terms_boilerplate
|
90
|
-
else
|
91
|
-
div << term_defs_boilerplate_cont(source, term)
|
84
|
+
def pre_parse(node, out)
|
85
|
+
out.pre node.text # content.gsub(/</, "<").gsub(/>/, ">")
|
92
86
|
end
|
93
|
-
end
|
94
87
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
88
|
+
def term_defs_boilerplate(div, source, term, preface)
|
89
|
+
if source.empty? && term.nil?
|
90
|
+
div << @no_terms_boilerplate
|
91
|
+
else
|
92
|
+
div << term_defs_boilerplate_cont(source, term)
|
93
|
+
end
|
94
|
+
end
|
99
95
|
|
100
|
-
|
101
|
-
# catch elements not defined in ISO
|
102
|
-
case node.name
|
103
|
-
when "pre"
|
104
|
-
pre_parse(node, out)
|
105
|
-
when "keyword"
|
106
|
-
out.span node.text, **{ class: "keyword" }
|
107
|
-
else
|
96
|
+
def i18n_init(lang, script)
|
108
97
|
super
|
98
|
+
@annex_lbl = "Appendix"
|
109
99
|
end
|
110
|
-
end
|
111
100
|
|
112
|
-
|
113
|
-
|
114
|
-
|
101
|
+
def error_parse(node, out)
|
102
|
+
# catch elements not defined in ISO
|
103
|
+
case node.name
|
104
|
+
when "pre"
|
105
|
+
pre_parse(node, out)
|
106
|
+
when "keyword"
|
107
|
+
out.span node.text, **{ class: "keyword" }
|
108
|
+
else
|
109
|
+
super
|
110
|
+
end
|
111
|
+
end
|
115
112
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
end
|
113
|
+
def fileloc(loc)
|
114
|
+
File.join(File.dirname(__FILE__), loc)
|
115
|
+
end
|
120
116
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
h2.add_child(" ")
|
125
|
-
h2.add_child(d.remove)
|
117
|
+
def cleanup(docxml)
|
118
|
+
super
|
119
|
+
term_cleanup(docxml)
|
126
120
|
end
|
127
|
-
docxml
|
128
|
-
end
|
129
121
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
122
|
+
def term_cleanup(docxml)
|
123
|
+
docxml.xpath("//p[@class = 'Terms']").each do |d|
|
124
|
+
h2 = d.at("./preceding-sibling::*[@class = 'TermNum'][1]")
|
125
|
+
h2.add_child(" ")
|
126
|
+
h2.add_child(d.remove)
|
127
|
+
end
|
128
|
+
docxml
|
129
|
+
end
|
134
130
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
t << "<b>#{name.text}</b>"
|
131
|
+
def info(isoxml, out)
|
132
|
+
@meta.security isoxml, out
|
133
|
+
super
|
139
134
|
end
|
140
|
-
end
|
141
135
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
136
|
+
def annex_name(annex, name, div)
|
137
|
+
div.h1 **{ class: "Annex" } do |t|
|
138
|
+
t << "#{get_anchors[annex['id']][:label]} "
|
139
|
+
t << "<b>#{name.text}</b>"
|
140
|
+
end
|
141
|
+
end
|
147
142
|
|
148
|
-
|
149
|
-
|
150
|
-
|
143
|
+
def annex_name_lbl(clause, num)
|
144
|
+
obl = l10n("(#{@inform_annex_lbl})")
|
145
|
+
obl = l10n("(#{@norm_annex_lbl})") if clause["obligation"] == "normative"
|
146
|
+
l10n("<b>#{@annex_lbl} #{num}</b> #{obl}")
|
147
|
+
end
|
151
148
|
|
152
|
-
|
153
|
-
|
154
|
-
div << @no_terms_boilerplate
|
155
|
-
else
|
156
|
-
div << term_defs_boilerplate_cont(source, term)
|
149
|
+
def pre_parse(node, out)
|
150
|
+
out.pre node.text # content.gsub(/</, "<").gsub(/>/, ">")
|
157
151
|
end
|
158
|
-
end
|
159
152
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
153
|
+
def term_defs_boilerplate(div, source, term, preface)
|
154
|
+
if source.empty? && term.nil?
|
155
|
+
div << @no_terms_boilerplate
|
156
|
+
else
|
157
|
+
div << term_defs_boilerplate_cont(source, term)
|
158
|
+
end
|
159
|
+
end
|
164
160
|
|
165
|
-
|
166
|
-
# catch elements not defined in ISO
|
167
|
-
case node.name
|
168
|
-
when "pre"
|
169
|
-
pre_parse(node, out)
|
170
|
-
when "keyword"
|
171
|
-
out.span node.text, **{ class: "keyword" }
|
172
|
-
else
|
161
|
+
def i18n_init(lang, script)
|
173
162
|
super
|
163
|
+
@annex_lbl = "Appendix"
|
174
164
|
end
|
175
|
-
end
|
176
165
|
|
177
|
-
|
178
|
-
|
179
|
-
|
166
|
+
def error_parse(node, out)
|
167
|
+
# catch elements not defined in ISO
|
168
|
+
case node.name
|
169
|
+
when "pre"
|
170
|
+
pre_parse(node, out)
|
171
|
+
when "keyword"
|
172
|
+
out.span node.text, **{ class: "keyword" }
|
173
|
+
else
|
174
|
+
super
|
175
|
+
end
|
176
|
+
end
|
180
177
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
end
|
178
|
+
def fileloc(loc)
|
179
|
+
File.join(File.dirname(__FILE__), loc)
|
180
|
+
end
|
185
181
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
h2.add_child(" ")
|
190
|
-
h2.add_child(d.remove)
|
182
|
+
def cleanup(docxml)
|
183
|
+
super
|
184
|
+
term_cleanup(docxml)
|
191
185
|
end
|
192
|
-
docxml
|
193
|
-
end
|
194
186
|
|
187
|
+
def term_cleanup(docxml)
|
188
|
+
docxml.xpath("//p[@class = 'Terms']").each do |d|
|
189
|
+
h2 = d.at("./preceding-sibling::*[@class = 'TermNum'][1]")
|
190
|
+
h2.add_child(" ")
|
191
|
+
h2.add_child(d.remove)
|
192
|
+
end
|
193
|
+
docxml
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
195
197
|
end
|
196
198
|
end
|
197
|
-
end
|
198
199
|
|
@@ -1,34 +1,35 @@
|
|
1
1
|
require "isodoc"
|
2
2
|
require_relative "metadata"
|
3
|
+
require "fileutils"
|
3
4
|
|
4
5
|
module IsoDoc
|
5
6
|
module Acme
|
6
7
|
# A {Converter} implementation that generates PDF HTML output, and a
|
7
8
|
# document schema encapsulation of the document for validation
|
8
9
|
class PdfConvert < IsoDoc::PdfConvert
|
9
|
-
def html_path_acme(file)
|
10
|
-
File.join(File.dirname(__FILE__), File.join("html", file))
|
11
|
-
end
|
12
|
-
|
13
10
|
def initialize(options)
|
11
|
+
@libdir = File.dirname(__FILE__)
|
14
12
|
super
|
15
|
-
|
16
|
-
|
17
|
-
@htmlintropage = html_path_acme("html_acme_intro.html")
|
18
|
-
@scripts = html_path_acme("scripts.html")
|
19
|
-
system "cp #{html_path_acme('logo.jpg')} logo.jpg"
|
13
|
+
#system "cp #{html_doc_path('logo.jpg')} logo.jpg"
|
14
|
+
FileUtils.cp html_doc_path('logo.jpg'), "logo.jpg"
|
20
15
|
@files_to_delete << "logo.jpg"
|
21
16
|
end
|
22
17
|
|
23
18
|
def default_fonts(options)
|
24
|
-
|
25
|
-
(options[:script] == "Hans" ? '"SimSun",serif' :
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
19
|
+
{
|
20
|
+
bodyfont: (options[:script] == "Hans" ? '"SimSun",serif' : '"Overpass",sans-serif'),
|
21
|
+
headerfont: (options[:script] == "Hans" ? '"SimHei",sans-serif' : '"Overpass",sans-serif'),
|
22
|
+
monospacefont: '"Space Mono",monospace'
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def default_file_locations(_options)
|
27
|
+
{
|
28
|
+
htmlstylesheet: html_doc_path("htmlstyle.scss"),
|
29
|
+
htmlcoverpage: html_doc_path("html_acme_titlepage.html"),
|
30
|
+
htmlintropage: html_doc_path("html_acme_intro.html"),
|
31
|
+
scripts: html_doc_path("scripts.html"),
|
32
|
+
}
|
32
33
|
end
|
33
34
|
|
34
35
|
def metadata_init(lang, script, labels)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require "isodoc"
|
2
2
|
require_relative "metadata"
|
3
|
+
require "fileutils"
|
3
4
|
|
4
5
|
module IsoDoc
|
5
6
|
module Acme
|
@@ -7,33 +8,34 @@ module IsoDoc
|
|
7
8
|
# schema encapsulation of the document for validation
|
8
9
|
|
9
10
|
class WordConvert < IsoDoc::WordConvert
|
10
|
-
def html_path_acme(file)
|
11
|
-
File.join(File.dirname(__FILE__), File.join("html", file))
|
12
|
-
end
|
13
|
-
|
14
11
|
def initialize(options)
|
12
|
+
@libdir = File.dirname(__FILE__)
|
15
13
|
super
|
16
|
-
|
17
|
-
|
18
|
-
@header = html_path_acme("header.html")
|
19
|
-
@wordcoverpage = html_path_acme("word_acme_titlepage.html")
|
20
|
-
@wordintropage = html_path_acme("word_acme_intro.html")
|
21
|
-
@ulstyle = "l3"
|
22
|
-
@olstyle = "l2"
|
23
|
-
system "cp #{html_path_acme('logo.jpg')} logo.jpg"
|
14
|
+
#system "cp #{html_doc_path('logo.jpg')} logo.jpg"
|
15
|
+
FileUtils.cp html_doc_path('logo.jpg'), "logo.jpg"
|
24
16
|
end
|
25
17
|
|
26
18
|
def default_fonts(options)
|
27
|
-
|
28
|
-
(options[:script] == "Hans" ? '"SimSun",serif' :
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
'"Arial",sans-serif')
|
33
|
-
m = options[:monospacefont] || '"Courier New",monospace'
|
34
|
-
"$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n"
|
19
|
+
{
|
20
|
+
bodyfont: (options[:script] == "Hans" ? '"SimSun",serif' : '"Arial",sans-serif'),
|
21
|
+
headerfont: (options[:script] == "Hans" ? '"SimHei",sans-serif' : '"Arial",sans-serif'),
|
22
|
+
monospacefont: '"Courier New",monospace'
|
23
|
+
}
|
35
24
|
end
|
36
25
|
|
26
|
+
def default_file_locations(options)
|
27
|
+
{
|
28
|
+
wordstylesheet: html_doc_path("wordstyle.scss"),
|
29
|
+
standardstylesheet: html_doc_path("acme.scss"),
|
30
|
+
header: html_doc_path("header.html"),
|
31
|
+
wordcoverpage: html_doc_path("word_acme_titlepage.html"),
|
32
|
+
wordintropage: html_doc_path("word_acme_intro.html"),
|
33
|
+
ulstyle: "l3",
|
34
|
+
olstyle: "l2",
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
|
37
39
|
def metadata_init(lang, script, labels)
|
38
40
|
@meta = Metadata.new(lang, script, labels)
|
39
41
|
end
|
@@ -77,7 +79,7 @@ module IsoDoc
|
|
77
79
|
h1 = to_xhtml_fragment(h.dup)
|
78
80
|
h1.traverse do |x|
|
79
81
|
x.replace(" ") if x.name == "span" &&
|
80
|
-
/mso-tab-count/.match
|
82
|
+
/mso-tab-count/.match(x["style"])
|
81
83
|
x.remove if x.name == "span" && x["class"] == "MsoCommentReference"
|
82
84
|
x.remove if x.name == "a" && x["epub:type"] == "footnote"
|
83
85
|
x.replace(x.children) if x.name == "a"
|
@@ -26,6 +26,35 @@ module Metanorma
|
|
26
26
|
Metanorma::Input::Asciidoc.new.process(file, @asciidoctor_backend)
|
27
27
|
end
|
28
28
|
|
29
|
+
def extract_options(file)
|
30
|
+
head = file.sub(/\n\n.*$/m, "\n")
|
31
|
+
/\n:htmlstylesheet: (?<htmlstylesheet>[^\n]+)\n/ =~ head
|
32
|
+
/\n:htmlcoverpage: (?<htmlcoverpage>[^\n]+)\n/ =~ head
|
33
|
+
/\n:htmlintropage: (?<htmlintropage>[^\n]+)\n/ =~ head
|
34
|
+
/\n:scripts: (?<scripts>[^\n]+)\n/ =~ head
|
35
|
+
/\n:wordstylesheet: (?<wordstylesheet>[^\n]+)\n/ =~ head
|
36
|
+
/\n:standardstylesheet: (?<standardstylesheet>[^\n]+)\n/ =~ head
|
37
|
+
/\n:header: (?<header>[^\n]+)\n/ =~ head
|
38
|
+
/\n:wordcoverpage: (?<wordcoverpage>[^\n]+)\n/ =~ head
|
39
|
+
/\n:wordintropage: (?<wordintropage>[^\n]+)\n/ =~ head
|
40
|
+
/\n:ulstyle: (?<ulstyle>[^\n]+)\n/ =~ head
|
41
|
+
/\n:olstyle: (?<olstyle>[^\n]+)\n/ =~ head
|
42
|
+
new_options = {
|
43
|
+
htmlstylesheet: defined?(htmlstylesheet) ? htmlstylesheet : nil,
|
44
|
+
htmlcoverpage: defined?(htmlcoverpage) ? htmlcoverpage : nil,
|
45
|
+
htmlintropage: defined?(htmlintropage) ? htmlintropage : nil,
|
46
|
+
scripts: defined?(scripts) ? scripts : nil,
|
47
|
+
wordstylesheet: defined?(wordstylesheet) ? wordstylesheet : nil,
|
48
|
+
standardstylesheet: defined?(standardstylesheet) ? standardstylesheet : nil,
|
49
|
+
header: defined?(header) ? header : nil,
|
50
|
+
wordcoverpage: defined?(wordcoverpage) ? wordcoverpage : nil,
|
51
|
+
wordintropage: defined?(wordintropage) ? wordintropage : nil,
|
52
|
+
ulstyle: defined?(ulstyle) ? ulstyle : nil,
|
53
|
+
olstyle: defined?(olstyle) ? olstyle : nil,
|
54
|
+
}.reject { |_, val| val.nil? }
|
55
|
+
super.merge(new_options)
|
56
|
+
end
|
57
|
+
|
29
58
|
def output(isodoc_node, outname, format, options={})
|
30
59
|
case format
|
31
60
|
when :html
|
@@ -34,14 +63,6 @@ module Metanorma
|
|
34
63
|
IsoDoc::Acme::WordConvert.new(options).convert(outname, isodoc_node)
|
35
64
|
when :pdf
|
36
65
|
IsoDoc::Acme::PdfConvert.new(options).convert(outname, isodoc_node)
|
37
|
-
=begin
|
38
|
-
require 'tempfile'
|
39
|
-
outname_html = outname + ".html"
|
40
|
-
IsoDoc::Acme::HtmlConvert.new(options).convert(outname_html, isodoc_node)
|
41
|
-
puts outname_html
|
42
|
-
system "cat #{outname_html}"
|
43
|
-
Metanorma::Output::Pdf.new.convert(outname_html, outname)
|
44
|
-
=end
|
45
66
|
else
|
46
67
|
super
|
47
68
|
end
|
data/metanorma-acme.gemspec
CHANGED
@@ -29,8 +29,8 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_dependency "htmlentities", "~> 4.3.4"
|
30
30
|
spec.add_dependency "ruby-jing"
|
31
31
|
|
32
|
-
spec.add_dependency "
|
33
|
-
spec.add_dependency "isodoc", "~> 0.8.
|
32
|
+
spec.add_dependency "metanorma-standoc", "~> 1.0.0"
|
33
|
+
spec.add_dependency "isodoc", "~> 0.8.8"
|
34
34
|
|
35
35
|
spec.add_development_dependency "bundler", "~> 1.15"
|
36
36
|
spec.add_development_dependency "byebug", "~> 9.1"
|
@@ -43,4 +43,5 @@ Gem::Specification.new do |spec|
|
|
43
43
|
spec.add_development_dependency "simplecov", "~> 0.15"
|
44
44
|
spec.add_development_dependency "timecop", "~> 0.9"
|
45
45
|
spec.add_development_dependency "metanorma", "~> 0.2.5"
|
46
|
+
spec.add_development_dependency "metanorma-cli", "~> 0.0.1"
|
46
47
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-acme
|
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
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -53,33 +53,33 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: metanorma-standoc
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 1.0.0
|
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: 0.
|
68
|
+
version: 1.0.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: isodoc
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.8.
|
75
|
+
version: 0.8.8
|
76
76
|
type: :runtime
|
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: 0.8.
|
82
|
+
version: 0.8.8
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: bundler
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -234,6 +234,20 @@ dependencies:
|
|
234
234
|
- - "~>"
|
235
235
|
- !ruby/object:Gem::Version
|
236
236
|
version: 0.2.5
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: metanorma-cli
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - "~>"
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: 0.0.1
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - "~>"
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: 0.0.1
|
237
251
|
description: |
|
238
252
|
Metanorma for the (fictitious) Acme Corp.
|
239
253
|
|
@@ -301,7 +315,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
301
315
|
version: '0'
|
302
316
|
requirements: []
|
303
317
|
rubyforge_project:
|
304
|
-
rubygems_version: 2.7.
|
318
|
+
rubygems_version: 2.7.6
|
305
319
|
signing_key:
|
306
320
|
specification_version: 4
|
307
321
|
summary: Metanorma for the (fictitious) Acme Corp.
|