asciidoctor-rsd 0.2.5 → 0.2.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 +5 -5
- data/Gemfile +1 -0
- data/Gemfile.lock +51 -36
- data/asciidoctor-rsd.gemspec +3 -2
- data/lib/asciidoctor-rsd.rb +2 -1
- data/lib/asciidoctor/rsd/biblio.rng +35 -6
- data/lib/asciidoctor/rsd/converter.rb +38 -23
- data/lib/asciidoctor/rsd/isodoc.rng +1 -1
- data/lib/asciidoctor/rsd/isostandard.rng +64 -15
- data/lib/asciidoctor/rsd/m3d.rng +154 -0
- data/lib/asciidoctor/rsd/version.rb +1 -1
- data/lib/{asciidoctor → isodoc}/rsd/html/dots-w@2x.png +0 -0
- data/lib/{asciidoctor → isodoc}/rsd/html/dots@2x.png +0 -0
- data/lib/{asciidoctor → isodoc}/rsd/html/header.html +8 -8
- data/lib/{asciidoctor → isodoc}/rsd/html/html_rsd_intro.html +0 -0
- data/lib/{asciidoctor → isodoc}/rsd/html/html_rsd_titlepage.html +11 -9
- data/lib/{asciidoctor → isodoc}/rsd/html/htmlstyle.scss +184 -95
- data/lib/isodoc/rsd/html/logo.jpg +0 -0
- data/lib/{asciidoctor → isodoc}/rsd/html/rsd.scss +2 -2
- data/lib/isodoc/rsd/html/scripts.html +82 -0
- data/lib/isodoc/rsd/html/word_rsd_intro.html +72 -0
- data/lib/isodoc/rsd/html/word_rsd_titlepage.html +54 -0
- data/lib/isodoc/rsd/html/wordstyle.scss +944 -0
- data/lib/isodoc/rsd/metadata.rb +82 -0
- data/lib/{asciidoctor/rsd/rsdconvert.rb → isodoc/rsd/rsdhtmlconvert.rb} +69 -73
- data/lib/isodoc/rsd/rsdhtmlrender.rb +68 -0
- data/lib/isodoc/rsd/rsdwordconvert.rb +88 -0
- data/lib/isodoc/rsd/rsdwordrender.rb +68 -0
- metadata +25 -16
- data/lib/asciidoctor/rsd/html/scripts.html +0 -68
@@ -0,0 +1,82 @@
|
|
1
|
+
require "isodoc"
|
2
|
+
|
3
|
+
module IsoDoc
|
4
|
+
module Rsd
|
5
|
+
# A {Converter} implementation that generates CSAND output, and a document
|
6
|
+
# schema encapsulation of the document for validation
|
7
|
+
class Metadata < IsoDoc::Metadata
|
8
|
+
def initialize(lang, script, labels)
|
9
|
+
super
|
10
|
+
set(:status, "XXX")
|
11
|
+
end
|
12
|
+
|
13
|
+
def title(isoxml, _out)
|
14
|
+
main = isoxml&.at(ns("//title[@language='en']"))&.text
|
15
|
+
set(:doctitle, main)
|
16
|
+
end
|
17
|
+
|
18
|
+
def subtitle(_isoxml, _out)
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def author(isoxml, _out)
|
23
|
+
set(:tc, "XXXX")
|
24
|
+
tc = isoxml.at(ns("//editorialgroup/technical-committee"))
|
25
|
+
set(:tc, tc.text) if tc
|
26
|
+
end
|
27
|
+
|
28
|
+
def docid(isoxml, _out)
|
29
|
+
docnumber = isoxml.at(ns("//bibdata/docidentifier"))
|
30
|
+
docstatus = isoxml.at(ns("//bibdata/status"))
|
31
|
+
dn = docnumber&.text
|
32
|
+
if docstatus
|
33
|
+
set(:status, status_print(docstatus.text))
|
34
|
+
abbr = status_abbr(docstatus.text)
|
35
|
+
dn = "#{dn}(#{abbr})" unless abbr.empty?
|
36
|
+
end
|
37
|
+
set(:docnumber, dn)
|
38
|
+
end
|
39
|
+
|
40
|
+
def status_print(status)
|
41
|
+
status.split(/-/).map{ |w| w.capitalize }.join(" ")
|
42
|
+
end
|
43
|
+
|
44
|
+
def status_abbr(status)
|
45
|
+
case status
|
46
|
+
when "working-draft" then "wd"
|
47
|
+
when "committee-draft" then "cd"
|
48
|
+
when "draft-standard" then "d"
|
49
|
+
else
|
50
|
+
""
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def version(isoxml, _out)
|
55
|
+
super
|
56
|
+
revdate = get[:revdate]
|
57
|
+
set(:revdate_monthyear, monthyr(revdate))
|
58
|
+
end
|
59
|
+
|
60
|
+
MONTHS = {
|
61
|
+
"01": "January",
|
62
|
+
"02": "February",
|
63
|
+
"03": "March",
|
64
|
+
"04": "April",
|
65
|
+
"05": "May",
|
66
|
+
"06": "June",
|
67
|
+
"07": "July",
|
68
|
+
"08": "August",
|
69
|
+
"09": "September",
|
70
|
+
"10": "October",
|
71
|
+
"11": "November",
|
72
|
+
"12": "December",
|
73
|
+
}.freeze
|
74
|
+
|
75
|
+
def monthyr(isodate)
|
76
|
+
m = /(?<yr>\d\d\d\d)-(?<mo>\d\d)/.match isodate
|
77
|
+
return isodate unless m && m[:yr] && m[:mo]
|
78
|
+
return "#{MONTHS[m[:mo].to_sym]} #{m[:yr]}"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -1,66 +1,89 @@
|
|
1
1
|
require "isodoc"
|
2
|
+
require_relative "metadata"
|
3
|
+
require_relative "rsdhtmlrender"
|
2
4
|
|
3
|
-
module
|
5
|
+
module IsoDoc
|
4
6
|
module Rsd
|
5
|
-
# A {Converter} implementation that generates
|
7
|
+
# A {Converter} implementation that generates CSAND output, and a document
|
6
8
|
# schema encapsulation of the document for validation
|
7
|
-
class
|
8
|
-
def
|
9
|
-
|
10
|
-
set_metadata(:status, "XXX")
|
9
|
+
class Convert < IsoDoc::Convert
|
10
|
+
def html_doc_path(file)
|
11
|
+
File.join(File.dirname(__FILE__), File.join("html", file))
|
11
12
|
end
|
12
13
|
|
13
|
-
def
|
14
|
+
def initialize(options)
|
14
15
|
super
|
16
|
+
@htmlstylesheet = generate_css(html_doc_path("htmlstyle.scss"), true, default_fonts(options))
|
17
|
+
@htmlcoverpage = html_doc_path("html_rsd_titlepage.html")
|
18
|
+
@htmlintropage = html_doc_path("html_rsd_intro.html")
|
19
|
+
@scripts = html_doc_path("scripts.html")
|
20
|
+
system "cp #{html_doc_path('logo.jpg')} logo.jpg"
|
21
|
+
@files_to_delete << "logo.jpg"
|
15
22
|
end
|
16
23
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
24
|
+
def default_fonts(options)
|
25
|
+
b = options[:bodyfont] ||
|
26
|
+
(options[:script] == "Hans" ? '"SimSun",serif' :
|
27
|
+
'"Overpass",sans-serif')
|
28
|
+
h = options[:headerfont] ||
|
29
|
+
(options[:script] == "Hans" ? '"SimHei",sans-serif' :
|
30
|
+
'"Overpass",sans-serif')
|
31
|
+
m = options[:monospacefont] || '"Space Mono",monospace'
|
32
|
+
"$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n"
|
20
33
|
end
|
21
34
|
|
22
|
-
def
|
23
|
-
|
35
|
+
def metadata_init(lang, script, labels)
|
36
|
+
@meta = Metadata.new(lang, script, labels)
|
24
37
|
end
|
25
38
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
set_metadata(:tc, tc.text) if tc
|
30
|
-
end
|
39
|
+
def html_head()
|
40
|
+
<<~HEAD.freeze
|
41
|
+
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
31
42
|
|
43
|
+
<!--TOC script import-->
|
44
|
+
<script type="text/javascript" src="https://cdn.rawgit.com/jgallen23/toc/0.3.2/dist/toc.min.js"></script>
|
45
|
+
|
46
|
+
<!--Google fonts-->
|
47
|
+
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i|Space+Mono:400,700" rel="stylesheet">
|
48
|
+
<link href="https://fonts.googleapis.com/css?family=Overpass:300,300i,600,900" rel="stylesheet">
|
49
|
+
<!--Font awesome import for the link icon-->
|
50
|
+
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.8/css/solid.css" integrity="sha384-v2Tw72dyUXeU3y4aM2Y0tBJQkGfplr39mxZqlTBDUZAb9BGoC40+rdFCG0m10lXk" crossorigin="anonymous">
|
51
|
+
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.8/css/fontawesome.css" integrity="sha384-q3jl8XQu1OpdLgGFvNRnPdj5VIlCvgsDQTQB6owSOHWlAurxul7f+JpUOVdAiJ5P" crossorigin="anonymous">
|
52
|
+
<style class="anchorjs"></style>
|
53
|
+
HEAD
|
54
|
+
end
|
32
55
|
|
33
|
-
def
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
abbr = status_abbr(docstatus.text)
|
40
|
-
dn = "#{dn}(#{abbr})" unless abbr.empty?
|
56
|
+
def make_body(xml, docxml)
|
57
|
+
body_attr = { lang: "EN-US", link: "blue", vlink: "#954F72", "xml:lang": "EN-US", class: "container" }
|
58
|
+
xml.body **body_attr do |body|
|
59
|
+
make_body1(body, docxml)
|
60
|
+
make_body2(body, docxml)
|
61
|
+
make_body3(body, docxml)
|
41
62
|
end
|
42
|
-
set_metadata(:docnumber, dn)
|
43
63
|
end
|
44
64
|
|
45
|
-
def
|
46
|
-
|
65
|
+
def html_toc(docxml)
|
66
|
+
docxml
|
47
67
|
end
|
48
68
|
|
49
|
-
def
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
when "draft-standard" then "d"
|
54
|
-
else
|
55
|
-
""
|
69
|
+
def annex_name(annex, name, div)
|
70
|
+
div.h1 **{ class: "Annex" } do |t|
|
71
|
+
t << "#{get_anchors[annex['id']][:label]} "
|
72
|
+
t << "<b>#{name.text}</b>"
|
56
73
|
end
|
57
74
|
end
|
58
75
|
|
76
|
+
def annex_name_lbl(clause, num)
|
77
|
+
obl = l10n("(#{@inform_annex_lbl})")
|
78
|
+
obl = l10n("(#{@norm_annex_lbl})") if clause["obligation"] == "normative"
|
79
|
+
l10n("<b>#{@annex_lbl} #{num}</b> #{obl}")
|
80
|
+
end
|
81
|
+
|
59
82
|
def pre_parse(node, out)
|
60
83
|
out.pre node.text # content.gsub(/</, "<").gsub(/>/, ">")
|
61
84
|
end
|
62
85
|
|
63
|
-
def term_defs_boilerplate(div, source, term)
|
86
|
+
def term_defs_boilerplate(div, source, term, preface)
|
64
87
|
if source.empty? && term.nil?
|
65
88
|
div << @no_terms_boilerplate
|
66
89
|
else
|
@@ -85,49 +108,22 @@ module Asciidoctor
|
|
85
108
|
end
|
86
109
|
end
|
87
110
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
<!--TOC script import-->
|
92
|
-
<script type="text/javascript" src="https://cdn.rawgit.com/jgallen23/toc/0.3.2/dist/toc.min.js"></script>
|
93
|
-
|
94
|
-
<!--Google fonts-->
|
95
|
-
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i|Space+Mono:400,700" rel="stylesheet">
|
96
|
-
<link href="https://fonts.googleapis.com/css?family=Overpass:300,300i,600,900" rel="stylesheet">
|
97
|
-
<!--Font awesome import for the link icon-->
|
98
|
-
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.8/css/solid.css" integrity="sha384-v2Tw72dyUXeU3y4aM2Y0tBJQkGfplr39mxZqlTBDUZAb9BGoC40+rdFCG0m10lXk" crossorigin="anonymous">
|
99
|
-
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.8/css/fontawesome.css" integrity="sha384-q3jl8XQu1OpdLgGFvNRnPdj5VIlCvgsDQTQB6owSOHWlAurxul7f+JpUOVdAiJ5P" crossorigin="anonymous">
|
100
|
-
HEAD
|
101
|
-
|
102
|
-
BUTTON = '<button onclick="topFunction()" id="myBtn" '\
|
103
|
-
'title="Go to top">Top</button>'.freeze
|
104
|
-
|
105
|
-
|
106
|
-
def html_main(docxml)
|
107
|
-
d = docxml.at('//div[@class="WordSection3"]')
|
108
|
-
s = d.replace("<main></main>")
|
109
|
-
s.first.children = d
|
110
|
-
s.first.children.first.previous = BUTTON
|
111
|
+
def fileloc(loc)
|
112
|
+
File.join(File.dirname(__FILE__), loc)
|
111
113
|
end
|
112
114
|
|
113
|
-
def
|
115
|
+
def cleanup(docxml)
|
114
116
|
super
|
115
|
-
docxml
|
116
|
-
html_main(docxml)
|
117
|
-
docxml
|
117
|
+
term_cleanup(docxml)
|
118
118
|
end
|
119
119
|
|
120
|
-
def
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
make_body3(body, docxml)
|
120
|
+
def term_cleanup(docxml)
|
121
|
+
docxml.xpath("//p[@class = 'Terms']").each do |d|
|
122
|
+
h2 = d.at("./preceding-sibling::*[@class = 'TermNum'][1]")
|
123
|
+
h2.add_child(" ")
|
124
|
+
h2.add_child(d.remove)
|
126
125
|
end
|
127
|
-
|
128
|
-
|
129
|
-
def html_toc(docxml)
|
130
|
-
docxml
|
126
|
+
docxml
|
131
127
|
end
|
132
128
|
end
|
133
129
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module IsoDoc
|
2
|
+
module Rsd
|
3
|
+
# A {Converter} implementation that generates CSAND output, and a document
|
4
|
+
# schema encapsulation of the document for validation
|
5
|
+
class Convert < IsoDoc::Convert
|
6
|
+
def annex_name(annex, name, div)
|
7
|
+
div.h1 **{ class: "Annex" } do |t|
|
8
|
+
t << "#{get_anchors[annex['id']][:label]} "
|
9
|
+
t << "<b>#{name.text}</b>"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def annex_name_lbl(clause, num)
|
14
|
+
obl = l10n("(#{@inform_annex_lbl})")
|
15
|
+
obl = l10n("(#{@norm_annex_lbl})") if clause["obligation"] == "normative"
|
16
|
+
l10n("<b>#{@annex_lbl} #{num}</b> #{obl}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def pre_parse(node, out)
|
20
|
+
out.pre node.text # content.gsub(/</, "<").gsub(/>/, ">")
|
21
|
+
end
|
22
|
+
|
23
|
+
def term_defs_boilerplate(div, source, term, preface)
|
24
|
+
if source.empty? && term.nil?
|
25
|
+
div << @no_terms_boilerplate
|
26
|
+
else
|
27
|
+
div << term_defs_boilerplate_cont(source, term)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def i18n_init(lang, script)
|
32
|
+
super
|
33
|
+
@annex_lbl = "Appendix"
|
34
|
+
end
|
35
|
+
|
36
|
+
def error_parse(node, out)
|
37
|
+
# catch elements not defined in ISO
|
38
|
+
case node.name
|
39
|
+
when "pre"
|
40
|
+
pre_parse(node, out)
|
41
|
+
when "keyword"
|
42
|
+
out.span node.text, **{ class: "keyword" }
|
43
|
+
else
|
44
|
+
super
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def fileloc(loc)
|
49
|
+
File.join(File.dirname(__FILE__), loc)
|
50
|
+
end
|
51
|
+
|
52
|
+
def cleanup(docxml)
|
53
|
+
super
|
54
|
+
term_cleanup(docxml)
|
55
|
+
end
|
56
|
+
|
57
|
+
def term_cleanup(docxml)
|
58
|
+
docxml.xpath("//p[@class = 'Terms']").each do |d|
|
59
|
+
h2 = d.at("./preceding-sibling::*[@class = 'TermNum'][1]")
|
60
|
+
h2.add_child(" ")
|
61
|
+
h2.add_child(d.remove)
|
62
|
+
end
|
63
|
+
docxml
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require "isodoc"
|
2
|
+
require_relative "rsdwordrender"
|
3
|
+
require_relative "metadata"
|
4
|
+
|
5
|
+
module IsoDoc
|
6
|
+
module Rsd
|
7
|
+
# A {Converter} implementation that generates GB output, and a document
|
8
|
+
# schema encapsulation of the document for validation
|
9
|
+
|
10
|
+
class WordConvert < IsoDoc::WordConvert
|
11
|
+
def html_doc_path(file)
|
12
|
+
File.join(File.dirname(__FILE__), File.join("html", file))
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(options)
|
16
|
+
super
|
17
|
+
@wordstylesheet = generate_css(html_doc_path("wordstyle.scss"), false, default_fonts(options))
|
18
|
+
@standardstylesheet = generate_css(html_doc_path("rsd.scss"), false, default_fonts(options))
|
19
|
+
@header = html_doc_path("header.html")
|
20
|
+
@wordcoverpage = html_doc_path("word_rsd_titlepage.html")
|
21
|
+
@wordintropage = html_doc_path("word_rsd_intro.html")
|
22
|
+
@ulstyle = "l3"
|
23
|
+
@olstyle = "l2"
|
24
|
+
system "cp #{html_doc_path('logo.jpg')} logo.jpg"
|
25
|
+
end
|
26
|
+
|
27
|
+
def default_fonts(options)
|
28
|
+
b = options[:bodyfont] ||
|
29
|
+
(options[:script] == "Hans" ? '"SimSun",serif' :
|
30
|
+
'"Garamond",serif')
|
31
|
+
h = options[:headerfont] ||
|
32
|
+
(options[:script] == "Hans" ? '"SimHei",sans-serif' :
|
33
|
+
'"Garamond",serif')
|
34
|
+
m = options[:monospacefont] || '"Courier New",monospace'
|
35
|
+
"$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n"
|
36
|
+
end
|
37
|
+
|
38
|
+
def metadata_init(lang, script, labels)
|
39
|
+
@meta = Metadata.new(lang, script, labels)
|
40
|
+
end
|
41
|
+
|
42
|
+
def make_body(xml, docxml)
|
43
|
+
body_attr = { lang: "EN-US", link: "blue", vlink: "#954F72" }
|
44
|
+
xml.body **body_attr do |body|
|
45
|
+
make_body1(body, docxml)
|
46
|
+
make_body2(body, docxml)
|
47
|
+
make_body3(body, docxml)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def make_body2(body, docxml)
|
52
|
+
body.div **{ class: "WordSection2" } do |div2|
|
53
|
+
info docxml, div2
|
54
|
+
div2.p { |p| p << " " } # placeholder
|
55
|
+
end
|
56
|
+
body.br **{ clear: "all", style: "page-break-before:auto;mso-break-type:section-break;" }
|
57
|
+
end
|
58
|
+
|
59
|
+
def title(isoxml, _out)
|
60
|
+
main = isoxml&.at(ns("//title[@language='en']"))&.text
|
61
|
+
set_metadata(:doctitle, main)
|
62
|
+
end
|
63
|
+
|
64
|
+
def generate_header(filename, dir)
|
65
|
+
return unless @header
|
66
|
+
template = Liquid::Template.parse(File.read(@header, encoding: "UTF-8"))
|
67
|
+
meta = @meta.get
|
68
|
+
meta[:filename] = filename
|
69
|
+
params = meta.map { |k, v| [k.to_s, v] }.to_h
|
70
|
+
File.open("header.html", "w") { |f| f.write(template.render(params)) }
|
71
|
+
@files_to_delete << "header.html"
|
72
|
+
end
|
73
|
+
|
74
|
+
def header_strip(h)
|
75
|
+
h = h.to_s.gsub(%r{<br/>}, " ").sub(/<\/?h[12][^>]*>/, "")
|
76
|
+
h1 = to_xhtml_fragment(h.dup)
|
77
|
+
h1.traverse do |x|
|
78
|
+
x.replace(" ") if x.name == "span" &&
|
79
|
+
/mso-tab-count/.match?(x["style"])
|
80
|
+
x.remove if x.name == "span" && x["class"] == "MsoCommentReference"
|
81
|
+
x.remove if x.name == "a" && x["epub:type"] == "footnote"
|
82
|
+
x.replace(x.children) if x.name == "a"
|
83
|
+
end
|
84
|
+
from_xhtml(h1)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module IsoDoc
|
2
|
+
module Rsd
|
3
|
+
# A {Converter} implementation that generates CSAND output, and a document
|
4
|
+
# schema encapsulation of the document for validation
|
5
|
+
class WordConvert < IsoDoc::WordConvert
|
6
|
+
def annex_name(annex, name, div)
|
7
|
+
div.h1 **{ class: "Annex" } do |t|
|
8
|
+
t << "#{get_anchors[annex['id']][:label]} "
|
9
|
+
t << "<b>#{name.text}</b>"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def annex_name_lbl(clause, num)
|
14
|
+
obl = l10n("(#{@inform_annex_lbl})")
|
15
|
+
obl = l10n("(#{@norm_annex_lbl})") if clause["obligation"] == "normative"
|
16
|
+
l10n("<b>#{@annex_lbl} #{num}</b> #{obl}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def pre_parse(node, out)
|
20
|
+
out.pre node.text # content.gsub(/</, "<").gsub(/>/, ">")
|
21
|
+
end
|
22
|
+
|
23
|
+
def term_defs_boilerplate(div, source, term, preface)
|
24
|
+
if source.empty? && term.nil?
|
25
|
+
div << @no_terms_boilerplate
|
26
|
+
else
|
27
|
+
div << term_defs_boilerplate_cont(source, term)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def i18n_init(lang, script)
|
32
|
+
super
|
33
|
+
@annex_lbl = "Appendix"
|
34
|
+
end
|
35
|
+
|
36
|
+
def error_parse(node, out)
|
37
|
+
# catch elements not defined in ISO
|
38
|
+
case node.name
|
39
|
+
when "pre"
|
40
|
+
pre_parse(node, out)
|
41
|
+
when "keyword"
|
42
|
+
out.span node.text, **{ class: "keyword" }
|
43
|
+
else
|
44
|
+
super
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def fileloc(loc)
|
49
|
+
File.join(File.dirname(__FILE__), loc)
|
50
|
+
end
|
51
|
+
|
52
|
+
def cleanup(docxml)
|
53
|
+
super
|
54
|
+
term_cleanup(docxml)
|
55
|
+
end
|
56
|
+
|
57
|
+
def term_cleanup(docxml)
|
58
|
+
docxml.xpath("//p[@class = 'Terms']").each do |d|
|
59
|
+
h2 = d.at("./preceding-sibling::*[@class = 'TermNum'][1]")
|
60
|
+
h2.add_child(" ")
|
61
|
+
h2.add_child(d.remove)
|
62
|
+
end
|
63
|
+
docxml
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|