metanorma-gb 1.4.3 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/asciidoctor/gb/cleanup.rb +130 -0
- data/lib/asciidoctor/gb/converter.rb +15 -126
- data/lib/asciidoctor/gb/front_id.rb +2 -2
- data/lib/asciidoctor/gb/isodoc.rng +12 -6
- data/lib/asciidoctor/gb/section_input.rb +11 -0
- data/lib/asciidoctor/gb/validate.rb +0 -1
- data/lib/isodoc/gb/base_convert.rb +24 -76
- data/lib/isodoc/gb/cleanup.rb +0 -11
- data/lib/isodoc/gb/html_convert.rb +6 -13
- data/lib/isodoc/gb/i18n.rb +16 -0
- data/lib/isodoc/gb/init.rb +29 -0
- data/lib/isodoc/gb/metadata.rb +1 -1
- data/lib/isodoc/gb/presentation_xml_convert.rb +17 -1
- data/lib/isodoc/gb/word_convert.rb +5 -10
- data/lib/isodoc/gb/xref.rb +6 -0
- data/lib/metanorma/gb/version.rb +1 -1
- data/metanorma-gb.gemspec +2 -2
- metadata +10 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe9a20b1e4d09c3ed8151c2021f51c1b8e412f823f0363db5bf0b9e4eb182908
|
4
|
+
data.tar.gz: 6601454ed383cbb484434deebc8195d280a50f36282e0d84a096c1406751e322
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd3154c799e5794a5b9a7a13b8cfe3eb2d70a0a1b1bb36ea6e1d85a9b14d8a5658726320734105f5abfcf1f0c8990ce2e9ce681cbc8d600d0702430f8416f048
|
7
|
+
data.tar.gz: 8f90f5d26fe2601454ad8f6a27d6103d494443ce9948a25d2b2d697b9eb562018802cb08e529855916f2d8e7b4c0296e1e7001af8201374eda350ee4bf2fece0
|
@@ -0,0 +1,130 @@
|
|
1
|
+
module Asciidoctor
|
2
|
+
module Gb
|
3
|
+
class Converter < ISO::Converter
|
4
|
+
def termdef_cleanup(xmldoc)
|
5
|
+
super
|
6
|
+
# TODO this should become variant tag
|
7
|
+
localisedstr(xmldoc)
|
8
|
+
end
|
9
|
+
|
10
|
+
ROMAN_TEXT = /\s*[a-z\u00c0-\u00d6\u00d8-\u00f0\u0100-\u0240]/i
|
11
|
+
HAN_TEXT = /\s*[\u4e00-\u9fff]+/
|
12
|
+
|
13
|
+
LOCALISED_ELEMS = "//admitted | //deprecates | //preferred | //prefix | "\
|
14
|
+
"//initial | //addition | //surname | //forename | //name | "\
|
15
|
+
"//abbreviation | //role/description | //affiliation/description | "\
|
16
|
+
"//bibdata/item | //bibitem/title | //bibdata/formattedref | "\
|
17
|
+
"//bibitem/formattedref | //bibdata/note | //bibitem/note | "\
|
18
|
+
"//bibdata/abstract | //bibitem/note ".freeze
|
19
|
+
|
20
|
+
MUST_LOCALISE_ELEMS = %w{admitted deprecates preferred}.freeze
|
21
|
+
|
22
|
+
def localisedstr(xmldoc)
|
23
|
+
xmldoc.xpath(LOCALISED_ELEMS).each do |zh|
|
24
|
+
if zh.at("./string")
|
25
|
+
extract_localisedstrings(zh)
|
26
|
+
elsif MUST_LOCALISE_ELEMS.include? zh.name
|
27
|
+
duplicate_localisedstrings(zh)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# element consists solely of localised strings, with no attributes
|
33
|
+
def extract_localisedstrings(elem)
|
34
|
+
elem.xpath("./string").each do |s|
|
35
|
+
s.name = elem.name
|
36
|
+
end
|
37
|
+
elem.replace(elem.children)
|
38
|
+
end
|
39
|
+
|
40
|
+
def text_clean(text)
|
41
|
+
text.gsub(/^\s*/, "").gsub(/</, "<").gsub(/>/, ">")
|
42
|
+
end
|
43
|
+
|
44
|
+
def duplicate_localisedstrings(zh)
|
45
|
+
en = zh.dup.remove
|
46
|
+
zh.after(en).after(" ")
|
47
|
+
zh["language"] = "zh"
|
48
|
+
en["language"] = "en"
|
49
|
+
en.traverse do |c|
|
50
|
+
c.text? && c.content = text_clean(c.text.gsub(HAN_TEXT, ""))
|
51
|
+
end
|
52
|
+
zh.traverse do |c|
|
53
|
+
c.text? && c.content = text_clean(c.text.gsub(ROMAN_TEXT, ""))
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def termdef_boilerplate_cleanup(xmldoc)
|
58
|
+
return if @keepboilerplate
|
59
|
+
super
|
60
|
+
end
|
61
|
+
|
62
|
+
def cleanup(xmldoc)
|
63
|
+
lang = xmldoc.at("//language")&.text
|
64
|
+
@agencyclass = GbAgencies::Agencies.new(lang, {}, "")
|
65
|
+
super
|
66
|
+
contributor_cleanup(xmldoc)
|
67
|
+
xmldoc
|
68
|
+
end
|
69
|
+
|
70
|
+
def docidentifier_cleanup(xmldoc)
|
71
|
+
id = xmldoc.at("//bibdata/docidentifier[@type = 'gb']") or return
|
72
|
+
scope = xmldoc.at("//gbscope")&.text
|
73
|
+
prefix = xmldoc.at("//gbprefix")&.text
|
74
|
+
mand = xmldoc.at("//gbmandate")&.text || "mandatory"
|
75
|
+
idtext = @agencyclass.docidentifier(scope, prefix, mand, nil, id.text)
|
76
|
+
id.content = idtext&.gsub(/\ /, " ")
|
77
|
+
id = xmldoc.at("//bibdata/ext/structuredidentifier/"\
|
78
|
+
"project-number") or return
|
79
|
+
idtext = @agencyclass.docidentifier(scope, prefix, mand, nil, id.text)
|
80
|
+
id.content = idtext&.gsub(/\ /, " ")
|
81
|
+
end
|
82
|
+
|
83
|
+
def committee_cleanup(xmldoc)
|
84
|
+
xmldoc.xpath("//gbcommittee").each do |c|
|
85
|
+
xmldoc.at("//bibdata/contributor").next =
|
86
|
+
"<contributor><role type='technical-committee'/><organization>"\
|
87
|
+
"<name>#{c.text}</name></organization></contributor>"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def agency_value(issuer, scope, prefix, mandate)
|
92
|
+
agency = issuer.content
|
93
|
+
agency == "GB" and
|
94
|
+
agency = @agencyclass.standard_agency1(scope, prefix, mandate)
|
95
|
+
agency = "GB" if agency.nil? || agency.empty?
|
96
|
+
agency
|
97
|
+
end
|
98
|
+
|
99
|
+
def contributor_cleanup(xmldoc)
|
100
|
+
issuer = xmldoc.at("//bibdata/contributor[role/@type = 'issuer']/"\
|
101
|
+
"organization/name")
|
102
|
+
scope = xmldoc.at("//gbscope")&.text
|
103
|
+
prefix = xmldoc.at("//gbprefix")&.text
|
104
|
+
mandate = xmldoc.at("//gbmandate")&.text || "mandatory"
|
105
|
+
agency = agency_value(issuer, scope, prefix, mandate)
|
106
|
+
owner = xmldoc.at("//copyright/owner/organization/name")
|
107
|
+
owner.content = agency
|
108
|
+
issuer.content = agency
|
109
|
+
committee_cleanup(xmldoc)
|
110
|
+
end
|
111
|
+
|
112
|
+
def omit_docid_prefix(prefix)
|
113
|
+
IsoDoc::Gb::HtmlConvert.new({}).omit_docid_prefix(prefix)
|
114
|
+
end
|
115
|
+
|
116
|
+
def boilerplate_cleanup(xmldoc)
|
117
|
+
isodoc = boilerplate_isodoc(xmldoc)
|
118
|
+
initial_boilerplate(xmldoc, isodoc)
|
119
|
+
return if @keepboilerplate
|
120
|
+
xmldoc.xpath(self.class::TERM_CLAUSE).each do |f|
|
121
|
+
term_defs_boilerplate(f.at("./title"),
|
122
|
+
xmldoc.xpath(".//termdocsource"),
|
123
|
+
f.at(".//term"), f.at(".//p"), isodoc)
|
124
|
+
end
|
125
|
+
f = xmldoc.at(self.class::NORM_REF) and
|
126
|
+
norm_ref_preface(f)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require "asciidoctor"
|
2
2
|
require "asciidoctor/iso/converter"
|
3
|
-
require "metanorma/gb/version"
|
4
3
|
require "isodoc/gb/common"
|
5
4
|
require "isodoc/gb/word_convert"
|
6
5
|
require "isodoc/gb/pdf_convert"
|
@@ -9,6 +8,7 @@ require "gb_agencies"
|
|
9
8
|
require_relative "./section_input.rb"
|
10
9
|
require_relative "./front.rb"
|
11
10
|
require_relative "./validate.rb"
|
11
|
+
require_relative "cleanup.rb"
|
12
12
|
require "fileutils"
|
13
13
|
|
14
14
|
module Asciidoctor
|
@@ -74,62 +74,15 @@ module Asciidoctor
|
|
74
74
|
def outputs(node, ret)
|
75
75
|
File.open(@filename + ".xml", "w:UTF-8") { |f| f.write(ret) }
|
76
76
|
presentation_xml_converter(node).convert(@filename + ".xml")
|
77
|
-
html_compliant_converter(node).
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
|
-
ROMAN_TEXT = /\s*[a-z\u00c0-\u00d6\u00d8-\u00f0\u0100-\u0240]/i
|
89
|
-
HAN_TEXT = /\s*[\u4e00-\u9fff]+/
|
90
|
-
|
91
|
-
LOCALISED_ELEMS = "//admitted | //deprecates | //preferred | //prefix | "\
|
92
|
-
"//initial | //addition | //surname | //forename | //name | "\
|
93
|
-
"//abbreviation | //role/description | //affiliation/description | "\
|
94
|
-
"//bibdata/item | //bibitem/title | //bibdata/formattedref | "\
|
95
|
-
"//bibitem/formattedref | //bibdata/note | //bibitem/note | "\
|
96
|
-
"//bibdata/abstract | //bibitem/note ".freeze
|
97
|
-
|
98
|
-
MUST_LOCALISE_ELEMS = %w{admitted deprecates preferred}.freeze
|
99
|
-
|
100
|
-
def localisedstr(xmldoc)
|
101
|
-
xmldoc.xpath(LOCALISED_ELEMS).each do |zh|
|
102
|
-
if zh.at("./string")
|
103
|
-
extract_localisedstrings(zh)
|
104
|
-
elsif MUST_LOCALISE_ELEMS.include? zh.name
|
105
|
-
duplicate_localisedstrings(zh)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
# element consists solely of localised strings, with no attributes
|
111
|
-
def extract_localisedstrings(elem)
|
112
|
-
elem.xpath("./string").each do |s|
|
113
|
-
s.name = elem.name
|
114
|
-
end
|
115
|
-
elem.replace(elem.children)
|
116
|
-
end
|
117
|
-
|
118
|
-
def text_clean(text)
|
119
|
-
text.gsub(/^\s*/, "").gsub(/</, "<").gsub(/>/, ">")
|
120
|
-
end
|
121
|
-
|
122
|
-
def duplicate_localisedstrings(zh)
|
123
|
-
en = zh.dup.remove
|
124
|
-
zh.after(en).after(" ")
|
125
|
-
zh["language"] = "zh"
|
126
|
-
en["language"] = "en"
|
127
|
-
en.traverse do |c|
|
128
|
-
c.text? && c.content = text_clean(c.text.gsub(HAN_TEXT, ""))
|
129
|
-
end
|
130
|
-
zh.traverse do |c|
|
131
|
-
c.text? && c.content = text_clean(c.text.gsub(ROMAN_TEXT, ""))
|
132
|
-
end
|
77
|
+
html_compliant_converter(node).
|
78
|
+
convert(@filename + ".presentation.xml",
|
79
|
+
nil, false, "#{@filename}_compliant.html")
|
80
|
+
html_converter(node).convert(@filename + ".presentation.xml",
|
81
|
+
nil, false, "#{@filename}.html")
|
82
|
+
doc_converter(node).convert(@filename + ".presentation.xml",
|
83
|
+
nil, false, "#{@filename}.doc")
|
84
|
+
pdf_converter(node)&.convert(@filename + ".presentation.xml",
|
85
|
+
nil, false, "#{@filename}.pdf")
|
133
86
|
end
|
134
87
|
|
135
88
|
def inline_quoted(node)
|
@@ -149,11 +102,6 @@ module Asciidoctor
|
|
149
102
|
super
|
150
103
|
end
|
151
104
|
|
152
|
-
def termdef_boilerplate_cleanup(xmldoc)
|
153
|
-
return if @keepboilerplate
|
154
|
-
super
|
155
|
-
end
|
156
|
-
|
157
105
|
GBCODE = "((AQ|BB|CB|CH|CJ|CY|DA|DB|DL|DZ|EJ|FZ|GA|GH|GM|GY|HB|HG|"\
|
158
106
|
"HJ|HS|HY|JB|JC|JG|JR|JT|JY|LB|LD|LS|LY|MH|MT|MZ|NY|QB|QC|QJ|"\
|
159
107
|
"QZ|SB|SC|SH|SJ|SN|SY|TB|TD|TJ|TY|WB|WH|WJ|WM|WS|WW|XB|YB|YC|"\
|
@@ -186,71 +134,12 @@ module Asciidoctor
|
|
186
134
|
super
|
187
135
|
end
|
188
136
|
|
189
|
-
def
|
190
|
-
|
191
|
-
|
137
|
+
def init(node)
|
138
|
+
node.attr("language") or node.set_attr("language", "zh")
|
139
|
+
node.attr("script") or
|
140
|
+
node.set_attr("script", node.attr("language") == "zh" ?
|
141
|
+
"Hans" : "Latn")
|
192
142
|
super
|
193
|
-
contributor_cleanup(xmldoc)
|
194
|
-
xmldoc
|
195
|
-
end
|
196
|
-
|
197
|
-
def docidentifier_cleanup(xmldoc)
|
198
|
-
id = xmldoc.at("//bibdata/docidentifier[@type = 'gb']") or return
|
199
|
-
scope = xmldoc.at("//gbscope")&.text
|
200
|
-
prefix = xmldoc.at("//gbprefix")&.text
|
201
|
-
mand = xmldoc.at("//gbmandate")&.text || "mandatory"
|
202
|
-
idtext = @agencyclass.docidentifier(scope, prefix, mand, nil, id.text)
|
203
|
-
id.content = idtext&.gsub(/\ /, " ")
|
204
|
-
id = xmldoc.at("//bibdata/ext/structuredidentifier/"\
|
205
|
-
"project-number") or return
|
206
|
-
idtext = @agencyclass.docidentifier(scope, prefix, mand, nil, id.text)
|
207
|
-
id.content = idtext&.gsub(/\ /, " ")
|
208
|
-
end
|
209
|
-
|
210
|
-
def committee_cleanup(xmldoc)
|
211
|
-
xmldoc.xpath("//gbcommittee").each do |c|
|
212
|
-
xmldoc.at("//bibdata/contributor").next =
|
213
|
-
"<contributor><role type='technical-committee'/><organization>"\
|
214
|
-
"<name>#{c.text}</name></organization></contributor>"
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
def agency_value(issuer, scope, prefix, mandate)
|
219
|
-
agency = issuer.content
|
220
|
-
agency == "GB" and
|
221
|
-
agency = @agencyclass.standard_agency1(scope, prefix, mandate)
|
222
|
-
agency = "GB" if agency.nil? || agency.empty?
|
223
|
-
agency
|
224
|
-
end
|
225
|
-
|
226
|
-
def contributor_cleanup(xmldoc)
|
227
|
-
issuer = xmldoc.at("//bibdata/contributor[role/@type = 'issuer']/"\
|
228
|
-
"organization/name")
|
229
|
-
scope = xmldoc.at("//gbscope")&.text
|
230
|
-
prefix = xmldoc.at("//gbprefix")&.text
|
231
|
-
mandate = xmldoc.at("//gbmandate")&.text || "mandatory"
|
232
|
-
agency = agency_value(issuer, scope, prefix, mandate)
|
233
|
-
owner = xmldoc.at("//copyright/owner/organization/name")
|
234
|
-
owner.content = agency
|
235
|
-
issuer.content = agency
|
236
|
-
committee_cleanup(xmldoc)
|
237
|
-
end
|
238
|
-
|
239
|
-
def omit_docid_prefix(prefix)
|
240
|
-
IsoDoc::Gb::HtmlConvert.new({}).omit_docid_prefix(prefix)
|
241
|
-
end
|
242
|
-
|
243
|
-
def boilerplate_cleanup(xmldoc)
|
244
|
-
isodoc = boilerplate_isodoc(xmldoc)
|
245
|
-
initial_boilerplate(xmldoc, isodoc)
|
246
|
-
return if @keepboilerplate
|
247
|
-
xmldoc.xpath(self.class::TERM_CLAUSE).each do |f|
|
248
|
-
term_defs_boilerplate(f.at("./title"),
|
249
|
-
xmldoc.xpath(".//termdocsource"),
|
250
|
-
f.at(".//term"), f.at(".//p"), isodoc)
|
251
|
-
end
|
252
|
-
f = xmldoc.at(self.class::NORM_REF) and
|
253
|
-
norm_ref_preface(f)
|
254
143
|
end
|
255
144
|
end
|
256
145
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Asciidoctor
|
2
2
|
module Gb
|
3
3
|
class Converter < ISO::Converter
|
4
|
-
|
4
|
+
STAGE_ABBRS_CN = {
|
5
5
|
"00": "新工作项目建议",
|
6
6
|
"10": "新工作项目",
|
7
7
|
"20": "标准草案工作组讨论稿",
|
@@ -43,7 +43,7 @@ module Asciidoctor
|
|
43
43
|
|
44
44
|
def id_stage_prefix(dn, node)
|
45
45
|
if node.attr("docstage") && node.attr("docstage").to_i < 60
|
46
|
-
abbr = IsoDoc::Gb::Metadata.new("en", "Latn",
|
46
|
+
abbr = IsoDoc::Gb::Metadata.new("en", "Latn", @i18n).
|
47
47
|
status_abbrev(node.attr("docstage"), nil, node.attr("iteration"),
|
48
48
|
node.attr("draft"), node.attr("doctype"))
|
49
49
|
dn = "/#{abbr} #{dn}" # prefixes added in cleanup
|
@@ -922,6 +922,9 @@
|
|
922
922
|
<optional>
|
923
923
|
<attribute name="script"/>
|
924
924
|
</optional>
|
925
|
+
<optional>
|
926
|
+
<attribute name="type"/>
|
927
|
+
</optional>
|
925
928
|
<optional>
|
926
929
|
<attribute name="obligation">
|
927
930
|
<choice>
|
@@ -961,9 +964,6 @@
|
|
961
964
|
</define>
|
962
965
|
<define name="content-subsection">
|
963
966
|
<element name="clause">
|
964
|
-
<optional>
|
965
|
-
<attribute name="type"/>
|
966
|
-
</optional>
|
967
967
|
<ref name="Content-Section"/>
|
968
968
|
</element>
|
969
969
|
</define>
|
@@ -992,6 +992,9 @@
|
|
992
992
|
</choice>
|
993
993
|
</attribute>
|
994
994
|
</optional>
|
995
|
+
<optional>
|
996
|
+
<attribute name="type"/>
|
997
|
+
</optional>
|
995
998
|
<optional>
|
996
999
|
<ref name="section-title"/>
|
997
1000
|
</optional>
|
@@ -1011,9 +1014,6 @@
|
|
1011
1014
|
</define>
|
1012
1015
|
<define name="clause">
|
1013
1016
|
<element name="clause">
|
1014
|
-
<optional>
|
1015
|
-
<attribute name="type"/>
|
1016
|
-
</optional>
|
1017
1017
|
<ref name="Clause-Section"/>
|
1018
1018
|
</element>
|
1019
1019
|
</define>
|
@@ -1042,6 +1042,9 @@
|
|
1042
1042
|
</choice>
|
1043
1043
|
</attribute>
|
1044
1044
|
</optional>
|
1045
|
+
<optional>
|
1046
|
+
<attribute name="type"/>
|
1047
|
+
</optional>
|
1045
1048
|
<optional>
|
1046
1049
|
<ref name="section-title"/>
|
1047
1050
|
</optional>
|
@@ -1180,6 +1183,9 @@
|
|
1180
1183
|
<optional>
|
1181
1184
|
<attribute name="script"/>
|
1182
1185
|
</optional>
|
1186
|
+
<optional>
|
1187
|
+
<attribute name="type"/>
|
1188
|
+
</optional>
|
1183
1189
|
<optional>
|
1184
1190
|
<attribute name="obligation">
|
1185
1191
|
<choice>
|
@@ -8,6 +8,8 @@ module Asciidoctor
|
|
8
8
|
class Converter < ISO::Converter
|
9
9
|
def sectiontype_streamline(ret)
|
10
10
|
case ret
|
11
|
+
when "前言" then "foreword"
|
12
|
+
when "致謝" then "acknowledgements"
|
11
13
|
when "引言" then "introduction"
|
12
14
|
when "范围" then "scope"
|
13
15
|
when "规范性引用文件" then "normative references"
|
@@ -21,6 +23,15 @@ module Asciidoctor
|
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
26
|
+
def symbols_attrs(node, a)
|
27
|
+
case sectiontype1(node)
|
28
|
+
when "符号" then a.merge(type: "symbols")
|
29
|
+
when "代号和缩略语" then a.merge(type: "abbreviated_terms")
|
30
|
+
else
|
31
|
+
super
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
24
35
|
def appendix_parse(attrs, xml, node)
|
25
36
|
# UNSAFE, there is no unset_option() in asciidoctor
|
26
37
|
node.remove_attr("appendix-option")
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require_relative "common"
|
2
2
|
require "gb_agencies"
|
3
3
|
require_relative "cleanup"
|
4
|
-
require_relative "metadata"
|
5
4
|
require "fileutils"
|
6
5
|
|
7
6
|
module IsoDoc
|
@@ -16,18 +15,9 @@ module IsoDoc
|
|
16
15
|
"$titlefont: #{t};\n"
|
17
16
|
end
|
18
17
|
|
19
|
-
def metadata_init(lang, script, labels)
|
20
|
-
unless ["en", "zh"].include? lang
|
21
|
-
lang = "zh"
|
22
|
-
script = "Hans"
|
23
|
-
end
|
24
|
-
@meta = Metadata.new(lang, script, labels)
|
25
|
-
@meta.set(:standardclassimg, @standardclassimg)
|
26
|
-
@common.meta = @meta
|
27
|
-
end
|
28
|
-
|
29
18
|
def cleanup(docxml)
|
30
|
-
@
|
19
|
+
@i18n ||= i18n_init(@lang, @script)
|
20
|
+
@cleanup = Cleanup.new(@script, @i18n.deprecated)
|
31
21
|
super
|
32
22
|
@cleanup.cleanup(docxml)
|
33
23
|
docxml
|
@@ -38,43 +28,26 @@ module IsoDoc
|
|
38
28
|
@cleanup.example_cleanup(docxml)
|
39
29
|
end
|
40
30
|
|
41
|
-
def i18n_init(lang, script)
|
42
|
-
super
|
43
|
-
y = if lang == "en"
|
44
|
-
YAML.load_file(File.join(File.dirname(__FILE__), "i18n-en.yaml"))
|
45
|
-
elsif lang == "zh" && script == "Hans"
|
46
|
-
YAML.load_file(File.join(File.dirname(__FILE__),
|
47
|
-
"i18n-zh-Hans.yaml"))
|
48
|
-
else
|
49
|
-
YAML.load_file(File.join(File.dirname(__FILE__),
|
50
|
-
"i18n-zh-Hans.yaml"))
|
51
|
-
end
|
52
|
-
@labels = @labels.merge(y)
|
53
|
-
end
|
54
|
-
|
55
31
|
def omit_docid_prefix(prefix)
|
56
32
|
super || prefix == "Chinese Standard"
|
57
33
|
end
|
58
34
|
|
59
|
-
def
|
60
|
-
|
61
|
-
div1.div **attr_code(class: "formula") do |div|
|
35
|
+
def formula_parse1(node, out)
|
36
|
+
out.div **attr_code(class: "formula") do |div|
|
62
37
|
insert_tab(div, 1)
|
63
38
|
parse(node.at(ns("./stem")), div)
|
64
|
-
lbl =
|
39
|
+
lbl = node&.at(ns("./name"))&.text
|
65
40
|
unless lbl.nil?
|
66
41
|
insert_tab(div, 1)
|
67
42
|
div << "(#{lbl})"
|
68
43
|
end
|
69
44
|
end
|
70
|
-
formula_where(node.at(ns("./dl")), div1)
|
71
|
-
end
|
72
45
|
end
|
73
46
|
|
74
47
|
def formula_where(dl, out)
|
75
48
|
return unless dl
|
76
49
|
out.p **{ style: "page-break-after:avoid;"} do |p|
|
77
|
-
p << @
|
50
|
+
p << @i18n.where
|
78
51
|
end
|
79
52
|
formula_dl_parse(dl, out)
|
80
53
|
end
|
@@ -99,32 +72,37 @@ module IsoDoc
|
|
99
72
|
{ class: "example_label",
|
100
73
|
style: "padding:2pt 2pt 2pt 2pt;vertical-align:top;" }.freeze
|
101
74
|
|
102
|
-
def
|
103
|
-
l10n(
|
75
|
+
def note_delim
|
76
|
+
l10n(": ")
|
104
77
|
end
|
105
78
|
|
106
79
|
def note_parse(node, out)
|
107
|
-
note_parse_table(node, out
|
80
|
+
note_parse_table(node, out)
|
108
81
|
end
|
109
82
|
|
110
|
-
def note_parse_table(node, out
|
83
|
+
def note_parse_table(node, out)
|
111
84
|
@note = true
|
85
|
+
name = node&.at(ns("./name"))&.remove
|
86
|
+
note_parse_table1(node, out, name)
|
87
|
+
@note = false
|
88
|
+
end
|
89
|
+
|
90
|
+
def note_parse_table1(node, out, name)
|
112
91
|
out.table **note_attrs(node) do |t|
|
113
92
|
t.tr do |tr|
|
114
|
-
@libdir = File.dirname(__FILE__)
|
115
93
|
tr.td **EXAMPLE_TBL_ATTR do |td|
|
116
|
-
|
94
|
+
name and name.children.each { |n| parse(n, td) }
|
95
|
+
td << note_delim
|
117
96
|
end
|
118
97
|
tr.td **{ style: "vertical-align:top;", class: "Note" } do |td|
|
119
98
|
node.children.each { |n| parse(n, td) }
|
120
99
|
end
|
121
100
|
end
|
122
101
|
end
|
123
|
-
@note = false
|
124
102
|
end
|
125
103
|
|
126
104
|
def termnote_parse(node, out)
|
127
|
-
note_parse_table(node, out
|
105
|
+
note_parse_table(node, out)
|
128
106
|
end
|
129
107
|
|
130
108
|
def middle(isoxml, out)
|
@@ -157,19 +135,19 @@ module IsoDoc
|
|
157
135
|
|
158
136
|
def deprecated_term_parse(node, out)
|
159
137
|
out.p **{ class: "DeprecatedTerms" } do |p|
|
160
|
-
p << l10n("#{@
|
138
|
+
p << l10n("#{@i18n.deprecated}: ")
|
161
139
|
node.children.each { |c| parse(c, p) }
|
162
140
|
end
|
163
141
|
end
|
164
142
|
|
165
143
|
def termref_render(x)
|
166
|
-
x.sub!(%r{\s*\[MODIFICATION\]\s*$}m, l10n(", #{@
|
144
|
+
x.sub!(%r{\s*\[MODIFICATION\]\s*$}m, l10n(", #{@i18n.modified}"))
|
167
145
|
parts = x.split(%r{(\s*\[MODIFICATION\]|,)}m)
|
168
|
-
parts[1] = l10n(", #{@
|
169
|
-
parts[1] == "," && !/^\s*#{@
|
146
|
+
parts[1] = l10n(", #{@i18n.source}") if parts.size > 1 &&
|
147
|
+
parts[1] == "," && !/^\s*#{@i18n.modified}/.match(parts[2])
|
170
148
|
parts.map do |p|
|
171
149
|
/\s*\[MODIFICATION\]/.match(p) ?
|
172
|
-
l10n(", #{@
|
150
|
+
l10n(", #{@i18n.modified} — ") : p
|
173
151
|
end.join.sub(/\A\s*/m, l10n("[")).sub(/\s*\z/m, l10n("]"))
|
174
152
|
end
|
175
153
|
|
@@ -181,42 +159,12 @@ module IsoDoc
|
|
181
159
|
end.join
|
182
160
|
end
|
183
161
|
|
184
|
-
def foreword(isoxml, out)
|
185
|
-
f = isoxml.at(ns("//foreword")) || return
|
186
|
-
page_break(out)
|
187
|
-
out.div do |s|
|
188
|
-
s.h1 **{ class: "ForewordTitle" } do |h1|
|
189
|
-
h1 << "#{@foreword_lbl} "
|
190
|
-
# insert_tab(h1, 1)
|
191
|
-
end
|
192
|
-
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
162
|
def clausedelimspace(out)
|
197
163
|
out << " "
|
198
164
|
end
|
199
165
|
|
200
|
-
def clause_name(num, title, div, header_class)
|
201
|
-
header_class = {} if header_class.nil?
|
202
|
-
div.h1 **attr_code(header_class) do |h1|
|
203
|
-
if num && !@suppressheadingnumbers
|
204
|
-
h1 << "#{num}."
|
205
|
-
h1 << " "
|
206
|
-
end
|
207
|
-
title.is_a?(String) ? h1 << title :
|
208
|
-
title&.children&.each { |c2| parse(c2, h1) }
|
209
|
-
end
|
210
|
-
div.parent.at(".//h1")
|
211
|
-
end
|
212
|
-
|
213
166
|
def example_span_label(node, div, name)
|
214
|
-
n = @xrefs.get[node["id"]]
|
215
167
|
div.span **{ class: "example_label" } do |p|
|
216
|
-
lbl = (n.nil? || n[:label].nil? || n[:label].empty?) ? @example_lbl :
|
217
|
-
l10n("#{@example_lbl} #{n[:label]}")
|
218
|
-
p << l10n(lbl + ":")
|
219
|
-
name and !lbl.nil? and p << " — "
|
220
168
|
name and name.children.each { |n| parse(n, div) }
|
221
169
|
end
|
222
170
|
end
|
data/lib/isodoc/gb/cleanup.rb
CHANGED
@@ -74,17 +74,6 @@ module IsoDoc
|
|
74
74
|
term_merge(docxml, "DeprecatedTerms")
|
75
75
|
docxml
|
76
76
|
end
|
77
|
-
|
78
|
-
=begin
|
79
|
-
def intro_cleanup(docxml)
|
80
|
-
# insert tab for purposes of ToC lining up
|
81
|
-
docxml.xpath("//h1[@class = 'IntroTitle']").each do |h1|
|
82
|
-
if h1.content == "引言"
|
83
|
-
h1.add_child('<span style="mso-tab-count:1">  </span>')
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
=end
|
88
77
|
end
|
89
78
|
end
|
90
79
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require_relative "init"
|
1
2
|
require_relative "base_convert"
|
2
3
|
require "isodoc"
|
3
4
|
|
@@ -47,31 +48,23 @@ module IsoDoc
|
|
47
48
|
end
|
48
49
|
|
49
50
|
def populate_template(docxml, format)
|
50
|
-
meta = @meta.get.merge(@
|
51
|
+
meta = @meta.get.merge(@i18n.get).merge(@meta.fonts_options || {})
|
51
52
|
logo = @common.format_logo(meta[:gbprefix], meta[:gbscope], format, @localdir)
|
52
53
|
logofile = @meta.standard_logo(meta[:gbprefix])
|
53
54
|
meta[:standard_agency_formatted] =
|
54
55
|
@common.format_agency(meta[:standard_agency], format, @localdir)
|
55
56
|
meta[:standard_logo] = logo
|
56
|
-
|
57
57
|
template = Liquid::Template.parse(docxml)
|
58
58
|
template.render(meta.map { |k, v| [k.to_s, v] }.to_h)
|
59
|
-
|
60
|
-
#template = liquid(docxml)
|
61
|
-
#template.render(meta.map { |k, v| [k.to_s, empty2nil(v)] }.to_h).
|
62
|
-
#gsub('<', '<').gsub('>', '>').gsub('&', '&')
|
63
59
|
end
|
64
60
|
|
65
|
-
def
|
66
|
-
|
67
|
-
|
68
|
-
t.b do |b|
|
69
|
-
name&.children&.each { |c2| parse(c2, b) }
|
70
|
-
end
|
71
|
-
end
|
61
|
+
def insert_tab(out, n)
|
62
|
+
tab = " "
|
63
|
+
[1..n].each { out << tab }
|
72
64
|
end
|
73
65
|
|
74
66
|
include BaseConvert
|
67
|
+
include Init
|
75
68
|
end
|
76
69
|
end
|
77
70
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module IsoDoc
|
2
|
+
module Gb
|
3
|
+
class I18n < IsoDoc::Iso::I18n
|
4
|
+
def load_yaml1(lang, script)
|
5
|
+
y = if lang == "en"
|
6
|
+
YAML.load_file(File.join(File.dirname(__FILE__), "i18n-en.yaml"))
|
7
|
+
elsif lang == "zh" && script == "Hans"
|
8
|
+
YAML.load_file(File.join(File.dirname(__FILE__), "i18n-zh-Hans.yaml"))
|
9
|
+
else
|
10
|
+
YAML.load_file(File.join(File.dirname(__FILE__), "i18n-zh-Hans.yaml"))
|
11
|
+
end
|
12
|
+
super.merge(y)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "isodoc"
|
2
|
+
require_relative "metadata"
|
3
|
+
require_relative "xref"
|
4
|
+
require_relative "i18n"
|
5
|
+
|
6
|
+
module IsoDoc
|
7
|
+
module Gb
|
8
|
+
module Init
|
9
|
+
def metadata_init(lang, script, labels)
|
10
|
+
unless ["en", "zh"].include? lang
|
11
|
+
lang = "zh"
|
12
|
+
script = "Hans"
|
13
|
+
end
|
14
|
+
@meta = Metadata.new(lang, script, labels)
|
15
|
+
@meta.set(:standardclassimg, @standardclassimg)
|
16
|
+
@common&.meta = @meta
|
17
|
+
end
|
18
|
+
|
19
|
+
def xref_init(lang, script, klass, labels, options)
|
20
|
+
@xrefs = Xref.new(lang, script, HtmlConvert.new(language: lang, script: script), labels, options)
|
21
|
+
end
|
22
|
+
|
23
|
+
def i18n_init(lang, script, i18nyaml = nil)
|
24
|
+
@i18n = I18n.new(lang, script, i18nyaml || @i18nyaml)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
data/lib/isodoc/gb/metadata.rb
CHANGED
@@ -8,7 +8,7 @@ module IsoDoc
|
|
8
8
|
# A {Converter} implementation that generates GB output, and a document
|
9
9
|
# schema encapsulation of the document for validation
|
10
10
|
class Metadata < IsoDoc::Iso::Metadata
|
11
|
-
def initialize(lang, script,
|
11
|
+
def initialize(lang, script, i18n)
|
12
12
|
super
|
13
13
|
set(:docmaintitlezh, "")
|
14
14
|
set(:docsubtitlezh, "XXXX")
|
@@ -1,9 +1,25 @@
|
|
1
|
-
require_relative "
|
1
|
+
require_relative "init"
|
2
2
|
require "isodoc"
|
3
3
|
|
4
4
|
module IsoDoc
|
5
5
|
module Gb
|
6
6
|
class PresentationXMLConvert < IsoDoc::Iso::PresentationXMLConvert
|
7
|
+
def example1(f)
|
8
|
+
n = @xrefs.get[f["id"]]
|
9
|
+
lbl = (n.nil? || n[:label].nil? || n[:label].empty?) ? @i18n.example :
|
10
|
+
l10n("#{@i18n.example} #{n[:label]}")
|
11
|
+
prefix_name(f, " — ", l10n(lbl + ":"), "name")
|
12
|
+
end
|
13
|
+
|
14
|
+
def annex1(f)
|
15
|
+
lbl = @xrefs.anchor(f['id'], :label)
|
16
|
+
if t = f.at(ns("./title"))
|
17
|
+
t.children = "#{t.children.to_xml}"
|
18
|
+
end
|
19
|
+
prefix_name(f, "<br/><br/>", lbl, "title")
|
20
|
+
end
|
21
|
+
|
22
|
+
include Init
|
7
23
|
end
|
8
24
|
end
|
9
25
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative "base_convert"
|
2
|
+
require_relative "init"
|
2
3
|
require "isodoc"
|
3
4
|
|
4
5
|
module IsoDoc
|
@@ -71,17 +72,17 @@ module IsoDoc
|
|
71
72
|
out.table **attr_code(id: node["id"], class: "example") do |t|
|
72
73
|
t.tr do |tr|
|
73
74
|
tr.td **EXAMPLE_TBL_ATTR do |td|
|
74
|
-
|
75
|
+
node.at(ns("./name")).children.each { |n| parse(n, td) }
|
75
76
|
end
|
76
77
|
tr.td **{ valign: "top", class: "example" } do |td|
|
77
|
-
node.children.each { |n| parse(n, td) }
|
78
|
+
node.children.each { |n| parse(n, td) unless n.name == "name" }
|
78
79
|
end
|
79
80
|
end
|
80
81
|
end
|
81
82
|
end
|
82
83
|
|
83
84
|
def populate_template(docxml, format)
|
84
|
-
meta = @meta.get.merge(@
|
85
|
+
meta = @meta.get.merge(@i18n.get).merge(@meta.fonts_options || {})
|
85
86
|
logo = @common.format_logo(meta[:gbprefix], meta[:gbscope], format, @localdir)
|
86
87
|
logofile = @meta.standard_logo(meta[:gbprefix])
|
87
88
|
meta[:standard_agency_formatted] =
|
@@ -92,13 +93,6 @@ module IsoDoc
|
|
92
93
|
gsub('<', '<').gsub('>', '>').gsub('&', '&')
|
93
94
|
end
|
94
95
|
|
95
|
-
def annex_name(annex, name, div)
|
96
|
-
div.h1 **{ class: "Annex" } do |t|
|
97
|
-
t << "#{@xrefs.anchor(annex['id'], :label)}<br/><br/>"
|
98
|
-
name&.children&.each { |c2| parse(c2, t) }
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
96
|
def make_body(xml, docxml)
|
103
97
|
body_attr = { lang: "EN-US", link: "blue", vlink: "#954F72" }
|
104
98
|
xml.body **body_attr do |body|
|
@@ -126,6 +120,7 @@ module IsoDoc
|
|
126
120
|
end
|
127
121
|
|
128
122
|
include BaseConvert
|
123
|
+
include Init
|
129
124
|
end
|
130
125
|
end
|
131
126
|
end
|
data/lib/metanorma/gb/version.rb
CHANGED
data/metanorma-gb.gemspec
CHANGED
@@ -29,8 +29,8 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.require_paths = ["lib"]
|
30
30
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
|
31
31
|
|
32
|
-
spec.add_dependency "metanorma-iso", "~> 1.
|
33
|
-
spec.add_dependency "isodoc", "~> 1.
|
32
|
+
spec.add_dependency "metanorma-iso", "~> 1.5.0"
|
33
|
+
spec.add_dependency "isodoc", "~> 1.2.0"
|
34
34
|
spec.add_dependency "twitter_cldr", "~> 4.4.4"
|
35
35
|
spec.add_dependency "gb-agencies", "~> 0.0.4"
|
36
36
|
spec.add_dependency "htmlentities", "~> 4.3.4"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-gb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: metanorma-iso
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.5.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 1.5.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: isodoc
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
33
|
+
version: 1.2.0
|
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: 1.
|
40
|
+
version: 1.2.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: twitter_cldr
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -267,6 +267,7 @@ files:
|
|
267
267
|
- lib/asciidoctor/gb/basicdoc.rng
|
268
268
|
- lib/asciidoctor/gb/biblio.rng
|
269
269
|
- lib/asciidoctor/gb/boilerplate.xml
|
270
|
+
- lib/asciidoctor/gb/cleanup.rb
|
270
271
|
- lib/asciidoctor/gb/converter.rb
|
271
272
|
- lib/asciidoctor/gb/front.rb
|
272
273
|
- lib/asciidoctor/gb/front_id.rb
|
@@ -324,10 +325,13 @@ files:
|
|
324
325
|
- lib/isodoc/gb/html_convert.rb
|
325
326
|
- lib/isodoc/gb/i18n-en.yaml
|
326
327
|
- lib/isodoc/gb/i18n-zh-Hans.yaml
|
328
|
+
- lib/isodoc/gb/i18n.rb
|
329
|
+
- lib/isodoc/gb/init.rb
|
327
330
|
- lib/isodoc/gb/metadata.rb
|
328
331
|
- lib/isodoc/gb/pdf_convert.rb
|
329
332
|
- lib/isodoc/gb/presentation_xml_convert.rb
|
330
333
|
- lib/isodoc/gb/word_convert.rb
|
334
|
+
- lib/isodoc/gb/xref.rb
|
331
335
|
- lib/metanorma-gb.rb
|
332
336
|
- lib/metanorma/gb.rb
|
333
337
|
- lib/metanorma/gb/processor.rb
|