isodoc 1.1.3.pre.alpha3 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/isodoc.gemspec +1 -1
- data/lib/isodoc-yaml/i18n-en.yaml +4 -1
- data/lib/isodoc-yaml/i18n-fr.yaml +4 -1
- data/lib/isodoc-yaml/i18n-zh-Hans.yaml +4 -1
- data/lib/isodoc.rb +1 -0
- data/lib/isodoc/common.rb +0 -2
- data/lib/isodoc/convert.rb +50 -45
- data/lib/isodoc/function/blocks.rb +10 -22
- data/lib/isodoc/function/blocks_example_note.rb +14 -15
- data/lib/isodoc/function/cleanup.rb +5 -4
- data/lib/isodoc/function/inline.rb +6 -76
- data/lib/isodoc/function/references.rb +10 -9
- data/lib/isodoc/function/reqt.rb +12 -11
- data/lib/isodoc/function/section.rb +39 -54
- data/lib/isodoc/function/table.rb +1 -6
- data/lib/isodoc/function/terms.rb +13 -6
- data/lib/isodoc/function/to_word_html.rb +1 -0
- data/lib/isodoc/function/utils.rb +5 -4
- data/lib/isodoc/html_function/html.rb +0 -1
- data/lib/isodoc/{function/i18n.rb → i18n.rb} +37 -36
- data/lib/isodoc/metadata.rb +4 -3
- data/lib/isodoc/metadata_date.rb +1 -1
- data/lib/isodoc/presentation_function/block.rb +138 -0
- data/lib/isodoc/presentation_function/inline.rb +131 -0
- data/lib/isodoc/presentation_function/section.rb +46 -0
- data/lib/isodoc/presentation_xml_convert.rb +38 -5
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +12 -8
- data/lib/isodoc/word_function/inline.rb +3 -1
- data/lib/isodoc/xref.rb +5 -3
- data/lib/isodoc/xref/xref_sect_gen.rb +3 -3
- data/spec/assets/i18n.yaml +12 -1
- data/spec/isodoc/blocks_spec.rb +1101 -147
- data/spec/isodoc/cleanup_spec.rb +2 -2
- data/spec/isodoc/footnotes_spec.rb +2 -2
- data/spec/isodoc/i18n_spec.rb +679 -110
- data/spec/isodoc/inline_spec.rb +323 -142
- data/spec/isodoc/lists_spec.rb +2 -2
- data/spec/isodoc/postproc_spec.rb +1311 -1333
- data/spec/isodoc/ref_spec.rb +181 -3
- data/spec/isodoc/section_spec.rb +508 -680
- data/spec/isodoc/table_spec.rb +155 -4
- data/spec/isodoc/terms_spec.rb +111 -79
- data/spec/isodoc/xref_spec.rb +1569 -1186
- metadata +11 -8
@@ -5,7 +5,7 @@ module IsoDoc::Function
|
|
5
5
|
# references anyway; keeping here instead of in IsoDoc::Iso for now
|
6
6
|
def docid_l10n(x)
|
7
7
|
return x if x.nil?
|
8
|
-
x.gsub(/All Parts/i, @
|
8
|
+
x.gsub(/All Parts/i, @i18n.all_parts.downcase) if @i18n.all_parts
|
9
9
|
x
|
10
10
|
end
|
11
11
|
|
@@ -155,14 +155,14 @@ module IsoDoc::Function
|
|
155
155
|
|
156
156
|
def norm_ref_xpath
|
157
157
|
"//bibliography/references[@normative = 'true'] | "\
|
158
|
-
|
158
|
+
"//bibliography/clause[.//references[@normative = 'true']]"
|
159
159
|
end
|
160
160
|
|
161
161
|
def norm_ref(isoxml, out, num)
|
162
162
|
f = isoxml.at(ns(norm_ref_xpath)) or return num
|
163
163
|
out.div do |div|
|
164
164
|
num = num + 1
|
165
|
-
clause_name(num,
|
165
|
+
clause_name(num, f.at(ns("./title")), div, nil)
|
166
166
|
if f.name == "clause"
|
167
167
|
f.elements.each { |e| parse(e, div) unless e.name == "title" }
|
168
168
|
else
|
@@ -174,15 +174,18 @@ module IsoDoc::Function
|
|
174
174
|
|
175
175
|
def bibliography_xpath
|
176
176
|
"//bibliography/clause[.//references]"\
|
177
|
-
|
178
|
-
|
177
|
+
"[not(.//references[@normative = 'true'])] | "\
|
178
|
+
"//bibliography/references[@normative = 'false']"
|
179
179
|
end
|
180
180
|
|
181
181
|
def bibliography(isoxml, out)
|
182
182
|
f = isoxml.at(ns(bibliography_xpath)) || return
|
183
183
|
page_break(out)
|
184
184
|
out.div do |div|
|
185
|
-
div.h1 @bibliography_lbl, **{ class: "Section3" }
|
185
|
+
#div.h1 @bibliography_lbl, **{ class: "Section3" }
|
186
|
+
div.h1 **{class: "Section3"} do |h1|
|
187
|
+
f&.at(ns("./title"))&.children&.each { |c2| parse(c2, h1) }
|
188
|
+
end
|
186
189
|
biblio_list(f, div, true)
|
187
190
|
end
|
188
191
|
end
|
@@ -190,9 +193,7 @@ module IsoDoc::Function
|
|
190
193
|
def bibliography_parse(node, out)
|
191
194
|
title = node&.at(ns("./title"))&.text || ""
|
192
195
|
out.div do |div|
|
193
|
-
|
194
|
-
clause_parse_title(node, div, node.at(ns("./title")), out) or
|
195
|
-
div.h2 title, **{ class: "Section3" }
|
196
|
+
clause_parse_title(node, div, node.at(ns("./title")), out, { class: "Section3" })
|
196
197
|
biblio_list(node, div, true)
|
197
198
|
end
|
198
199
|
end
|
data/lib/isodoc/function/reqt.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
module IsoDoc::Function
|
2
2
|
module Blocks
|
3
3
|
def recommendation_labels(node)
|
4
|
-
[node.at(ns("./label")), node.at(ns("./title")),
|
5
|
-
@xrefs.anchor(node['id'], :label, false)]
|
4
|
+
[node.at(ns("./label")), node.at(ns("./title")), node.at(ns("./name"))]
|
6
5
|
end
|
7
6
|
|
8
|
-
def recommendation_name(node, out,
|
7
|
+
def recommendation_name(node, out, _type)
|
9
8
|
label, title, lbl = recommendation_labels(node)
|
10
9
|
out.p **{ class: "RecommendationTitle" } do |b|
|
11
|
-
|
10
|
+
lbl and lbl.children.each { |n| parse(n, b) }
|
11
|
+
b << l10n(":")
|
12
12
|
if label || title
|
13
13
|
b.br
|
14
14
|
label and label.children.each { |n| parse(n,b) }
|
@@ -21,11 +21,11 @@ module IsoDoc::Function
|
|
21
21
|
def recommendation_attributes1(node)
|
22
22
|
out = []
|
23
23
|
oblig = node["obligation"] and
|
24
|
-
out << l10n("#{@
|
24
|
+
out << l10n("#{@i18n.obligation}: #{oblig}")
|
25
25
|
subj = node&.at(ns("./subject"))&.text and
|
26
|
-
out << l10n("#{@
|
26
|
+
out << l10n("#{@i18n.subject}: #{subj}")
|
27
27
|
node.xpath(ns("./inherit")).each do |i|
|
28
|
-
out << recommendation_attr_parse(i, @
|
28
|
+
out << recommendation_attr_parse(i, @i18n.inherits)
|
29
29
|
end
|
30
30
|
node.xpath(ns("./classification")).each do |c|
|
31
31
|
line = recommendation_attr_keyvalue(c, "tag", "value") and out << line
|
@@ -57,7 +57,8 @@ module IsoDoc::Function
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def reqt_metadata_node(n)
|
60
|
-
%w(label title subject classification tag value
|
60
|
+
%w(label title subject classification tag value
|
61
|
+
inherit name).include? n.name
|
61
62
|
end
|
62
63
|
|
63
64
|
def reqt_attrs(node, klass)
|
@@ -66,7 +67,7 @@ module IsoDoc::Function
|
|
66
67
|
|
67
68
|
def recommendation_parse(node, out)
|
68
69
|
out.div **reqt_attrs(node, "recommend") do |t|
|
69
|
-
recommendation_name(node, t, @
|
70
|
+
recommendation_name(node, t, @i18n.recommendation)
|
70
71
|
recommendation_attributes(node, out)
|
71
72
|
node.children.each do |n|
|
72
73
|
parse(n, t) unless reqt_metadata_node(n)
|
@@ -76,7 +77,7 @@ module IsoDoc::Function
|
|
76
77
|
|
77
78
|
def requirement_parse(node, out)
|
78
79
|
out.div **reqt_attrs(node, "require") do |t|
|
79
|
-
recommendation_name(node, t, @
|
80
|
+
recommendation_name(node, t, @i18n.requirement)
|
80
81
|
recommendation_attributes(node, out)
|
81
82
|
node.children.each do |n|
|
82
83
|
parse(n, t) unless reqt_metadata_node(n)
|
@@ -86,7 +87,7 @@ module IsoDoc::Function
|
|
86
87
|
|
87
88
|
def permission_parse(node, out)
|
88
89
|
out.div **reqt_attrs(node, "permission") do |t|
|
89
|
-
recommendation_name(node, t, @
|
90
|
+
recommendation_name(node, t, @i18n.permission)
|
90
91
|
recommendation_attributes(node, out)
|
91
92
|
node.children.each do |n|
|
92
93
|
parse(n, t) unless reqt_metadata_node(n)
|
@@ -8,36 +8,37 @@ module IsoDoc::Function
|
|
8
8
|
insert_tab(out, 1)
|
9
9
|
end
|
10
10
|
|
11
|
-
def inline_header_title(out, node,
|
11
|
+
def inline_header_title(out, node, title)
|
12
12
|
out.span **{ class: "zzMoveToFollowing" } do |s|
|
13
13
|
s.b do |b|
|
14
|
-
|
15
|
-
|
16
|
-
clausedelimspace(out)
|
17
|
-
end
|
18
|
-
c1&.children&.each { |c2| parse(c2, b) }
|
19
|
-
clausedelimspace(out) if /\S/.match(c1&.text)
|
14
|
+
title&.children&.each { |c2| parse(c2, b) }
|
15
|
+
clausedelimspace(out) if /\S/.match(title&.text)
|
20
16
|
end
|
21
17
|
end
|
22
18
|
end
|
23
19
|
|
24
20
|
# used for subclauses
|
25
|
-
def clause_parse_title(node, div,
|
21
|
+
def clause_parse_title(node, div, title, out, header_class = {})
|
22
|
+
return if title.nil?
|
26
23
|
if node["inline-header"] == "true"
|
27
|
-
inline_header_title(out, node,
|
24
|
+
inline_header_title(out, node, title)
|
28
25
|
else
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
26
|
+
depth = (title && title["depth"]) ? title["depth"] :
|
27
|
+
node.ancestors("clause, annex, terms, references, definitions, "\
|
28
|
+
"acknowledgements, introduction, foreword").size + 1
|
29
|
+
div.send "h#{depth}", **attr_code(header_class) do |h|
|
30
|
+
title&.children&.each { |c2| parse(c2, h) }
|
34
31
|
end
|
35
32
|
end
|
36
33
|
end
|
37
34
|
|
35
|
+
def clause_attrs(node)
|
36
|
+
{ id: node["id"] }
|
37
|
+
end
|
38
|
+
|
38
39
|
# used for subclauses
|
39
40
|
def clause_parse(node, out)
|
40
|
-
out.div **attr_code(
|
41
|
+
out.div **attr_code(clause_attrs(node)) do |div|
|
41
42
|
clause_parse_title(node, div, node.at(ns("./title")), out)
|
42
43
|
node.children.reject { |c1| c1.name == "title" }.each do |c1|
|
43
44
|
parse(c1, div)
|
@@ -45,13 +46,9 @@ module IsoDoc::Function
|
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
48
|
-
def clause_name(
|
49
|
+
def clause_name(_num, title, div, header_class)
|
49
50
|
header_class = {} if header_class.nil?
|
50
51
|
div.h1 **attr_code(header_class) do |h1|
|
51
|
-
if num && !@suppressheadingnumbers
|
52
|
-
h1 << "#{num}#{clausedelim}"
|
53
|
-
clausedelimspace(h1)
|
54
|
-
end
|
55
52
|
title.is_a?(String) ? h1 << title :
|
56
53
|
title&.children&.each { |c2| parse(c2, h1) }
|
57
54
|
end
|
@@ -60,9 +57,8 @@ module IsoDoc::Function
|
|
60
57
|
|
61
58
|
def clause(isoxml, out)
|
62
59
|
isoxml.xpath(ns(middle_clause)).each do |c|
|
63
|
-
out.div **attr_code(
|
64
|
-
clause_name(
|
65
|
-
c&.at(ns("./title")), s, nil)
|
60
|
+
out.div **attr_code(clause_attrs(c)) do |s|
|
61
|
+
clause_name(nil, c&.at(ns("./title")), s, nil)
|
66
62
|
c.elements.reject { |c1| c1.name == "title" }.each do |c1|
|
67
63
|
parse(c1, s)
|
68
64
|
end
|
@@ -71,19 +67,20 @@ module IsoDoc::Function
|
|
71
67
|
end
|
72
68
|
|
73
69
|
def annex_name(annex, name, div)
|
70
|
+
return if name.nil?
|
74
71
|
div.h1 **{ class: "Annex" } do |t|
|
75
|
-
|
76
|
-
t.b do |b|
|
77
|
-
name&.children&.each { |c2| parse(c2, b) }
|
78
|
-
end
|
72
|
+
name.children.each { |c2| parse(c2, t) }
|
79
73
|
end
|
80
74
|
end
|
81
75
|
|
76
|
+
def annex_attrs(node)
|
77
|
+
{ id: node["id"], class: "Section3" }
|
78
|
+
end
|
79
|
+
|
82
80
|
def annex(isoxml, out)
|
83
81
|
isoxml.xpath(ns("//annex")).each do |c|
|
84
82
|
page_break(out)
|
85
|
-
out.div **attr_code(
|
86
|
-
annex_name(c, nil, s) unless c.at(ns("./title"))
|
83
|
+
out.div **attr_code(annex_attrs(c)) do |s|
|
87
84
|
c.elements.each do |c1|
|
88
85
|
if c1.name == "title" then annex_name(c, c1, s)
|
89
86
|
else
|
@@ -95,10 +92,10 @@ module IsoDoc::Function
|
|
95
92
|
end
|
96
93
|
|
97
94
|
def scope(isoxml, out, num)
|
98
|
-
f = isoxml.at(ns("//clause[
|
95
|
+
f = isoxml.at(ns("//clause[@type = 'scope']")) or return num
|
99
96
|
out.div **attr_code(id: f["id"]) do |div|
|
100
97
|
num = num + 1
|
101
|
-
clause_name(num,
|
98
|
+
clause_name(num, f&.at(ns("./title")), div, nil)
|
102
99
|
f.elements.each do |e|
|
103
100
|
parse(e, div) unless e.name == "title"
|
104
101
|
end
|
@@ -109,26 +106,11 @@ module IsoDoc::Function
|
|
109
106
|
TERM_CLAUSE = "//sections/terms | "\
|
110
107
|
"//sections/clause[descendant::terms]".freeze
|
111
108
|
|
112
|
-
def term_def_title(title)
|
113
|
-
case title&.text
|
114
|
-
when "Terms, definitions, symbols and abbreviated terms"
|
115
|
-
@labels["termsdefsymbolsabbrev"]
|
116
|
-
when "Terms, definitions and symbols"
|
117
|
-
@labels["termsdefsymbols"]
|
118
|
-
when "Terms, definitions and abbreviated terms"
|
119
|
-
@labels["termsdefabbrev"]
|
120
|
-
when "Terms and definitions"
|
121
|
-
@labels["termsdef"]
|
122
|
-
else
|
123
|
-
title
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
109
|
def terms_defs(isoxml, out, num)
|
128
110
|
f = isoxml.at(ns(TERM_CLAUSE)) or return num
|
129
111
|
out.div **attr_code(id: f["id"]) do |div|
|
130
112
|
num = num + 1
|
131
|
-
clause_name(num,
|
113
|
+
clause_name(num, f&.at(ns("./title")), div, nil)
|
132
114
|
f.elements.each do |e|
|
133
115
|
parse(e, div) unless %w{title source}.include? e.name
|
134
116
|
end
|
@@ -145,7 +127,7 @@ module IsoDoc::Function
|
|
145
127
|
f = isoxml.at(ns("//sections/definitions")) or return num
|
146
128
|
out.div **attr_code(id: f["id"], class: "Symbols") do |div|
|
147
129
|
num = num + 1
|
148
|
-
clause_name(num, f&.at(ns("./title")) || @
|
130
|
+
clause_name(num, f&.at(ns("./title")) || @i18n.symbols, div, nil)
|
149
131
|
f.elements.each do |e|
|
150
132
|
parse(e, div) unless e.name == "title"
|
151
133
|
end
|
@@ -156,7 +138,7 @@ module IsoDoc::Function
|
|
156
138
|
# subclause
|
157
139
|
def symbols_parse(isoxml, out)
|
158
140
|
isoxml.at(ns("./title")) or
|
159
|
-
isoxml.children.first.previous = "<title>#{@
|
141
|
+
isoxml.children.first.previous = "<title>#{@i18n.symbols}</title>"
|
160
142
|
clause_parse(isoxml, out)
|
161
143
|
end
|
162
144
|
|
@@ -165,7 +147,7 @@ module IsoDoc::Function
|
|
165
147
|
title_attr = { class: "IntroTitle" }
|
166
148
|
page_break(out)
|
167
149
|
out.div **{ class: "Section3", id: f["id"] } do |div|
|
168
|
-
clause_name(nil,
|
150
|
+
clause_name(nil, f.at(ns("./title")), div, { class: "IntroTitle" })
|
169
151
|
f.elements.each do |e|
|
170
152
|
parse(e, div) unless e.name == "title"
|
171
153
|
end
|
@@ -176,7 +158,9 @@ module IsoDoc::Function
|
|
176
158
|
f = isoxml.at(ns("//foreword")) || return
|
177
159
|
page_break(out)
|
178
160
|
out.div **attr_code(id: f["id"]) do |s|
|
179
|
-
|
161
|
+
clause_name(nil, f.at(ns("./title")) || @i18n.foreword, s,
|
162
|
+
{ class: "ForewordTitle" })
|
163
|
+
#s.h1(**{ class: "ForewordTitle" }) { |h1| h1 << @i18n.foreword }
|
180
164
|
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
181
165
|
end
|
182
166
|
end
|
@@ -197,15 +181,16 @@ module IsoDoc::Function
|
|
197
181
|
f = isoxml.at(ns("//preface/abstract")) || return
|
198
182
|
page_break(out)
|
199
183
|
out.div **attr_code(id: f["id"]) do |s|
|
200
|
-
|
184
|
+
clause_name(nil, f.at(ns("./title")), s, { class: "AbstractTitle" })
|
185
|
+
#s.h1(**{ class: "AbstractTitle" }) { |h1| h1 << @i18n.abstract }
|
201
186
|
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
202
187
|
end
|
203
188
|
end
|
204
189
|
|
205
190
|
def preface(isoxml, out)
|
206
191
|
title_attr = { class: "IntroTitle" }
|
207
|
-
isoxml.xpath(ns("//preface/clause | //preface/
|
208
|
-
"//preface/
|
192
|
+
isoxml.xpath(ns("//preface/clause | //preface/references | "\
|
193
|
+
"//preface/definitions | //preface/terms")).each do |f|
|
209
194
|
page_break(out)
|
210
195
|
out.div **{ class: "Section3", id: f["id"] } do |div|
|
211
196
|
clause_name(nil, f&.at(ns("./title")), div, title_attr)
|
@@ -2,13 +2,8 @@ module IsoDoc::Function
|
|
2
2
|
module Table
|
3
3
|
|
4
4
|
def table_title_parse(node, out)
|
5
|
-
name = node.at(ns("./name"))
|
6
|
-
lbl = @xrefs.anchor(node['id'], :label, false)
|
7
|
-
lbl = nil if labelled_ancestor(node)
|
8
|
-
return if name.nil? && lbl.nil?
|
5
|
+
name = node.at(ns("./name")) or return
|
9
6
|
out.p **{ class: "TableTitle", style: "text-align:center;" } do |p|
|
10
|
-
lbl.nil? or p << l10n("#{@table_lbl} #{lbl}")
|
11
|
-
name and !lbl.nil? and p << l10n(" — ")
|
12
7
|
name and name.children.each { |n| parse(n, p) }
|
13
8
|
end
|
14
9
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module IsoDoc::Function
|
2
2
|
module Terms
|
3
|
-
|
4
3
|
def definition_parse(node, out)
|
5
4
|
node.children.each { |n| parse(n, out) }
|
6
5
|
end
|
@@ -13,7 +12,7 @@ module IsoDoc::Function
|
|
13
12
|
|
14
13
|
def deprecated_term_parse(node, out)
|
15
14
|
out.p **{ class: "DeprecatedTerms", style:"text-align:left;" } do |p|
|
16
|
-
p << l10n("#{@
|
15
|
+
p << l10n("#{@i18n.deprecated}: ")
|
17
16
|
node.children.each { |c| parse(c, p) }
|
18
17
|
end
|
19
18
|
end
|
@@ -39,12 +38,19 @@ module IsoDoc::Function
|
|
39
38
|
end
|
40
39
|
end
|
41
40
|
|
41
|
+
def termnote_delim
|
42
|
+
l10n(": ")
|
43
|
+
end
|
44
|
+
|
42
45
|
def termnote_parse(node, out)
|
46
|
+
name = node&.at(ns("./name"))&.remove
|
43
47
|
out.div **note_attrs(node) do |div|
|
44
|
-
first = node.first_element_child
|
45
48
|
div.p do |p|
|
46
|
-
|
47
|
-
|
49
|
+
if name
|
50
|
+
name.children.each { |n| parse(n, p) }
|
51
|
+
p << termnote_delim
|
52
|
+
end
|
53
|
+
para_then_remainder(node.first_element_child, node, p, div)
|
48
54
|
end
|
49
55
|
end
|
50
56
|
end
|
@@ -58,8 +64,9 @@ module IsoDoc::Function
|
|
58
64
|
end
|
59
65
|
|
60
66
|
def termdef_parse(node, out)
|
67
|
+
name = node&.at(ns("./name"))&.remove
|
61
68
|
out.p **{ class: "TermNum", id: node["id"] } do |p|
|
62
|
-
p
|
69
|
+
name&.children&.each { |n| parse(n, p) }
|
63
70
|
end
|
64
71
|
set_termdomain("")
|
65
72
|
node.children.each { |n| parse(n, out) }
|
@@ -220,6 +220,7 @@ module IsoDoc::Function
|
|
220
220
|
when "feedback-statement" then feedback_parse(node, out)
|
221
221
|
when "passthrough" then passthrough_parse(node, out)
|
222
222
|
when "variant" then variant_parse(node, out)
|
223
|
+
when "tab" then clausedelimspace(out) # in Presentation XML only
|
223
224
|
else
|
224
225
|
error_parse(node, out)
|
225
226
|
end
|
@@ -11,7 +11,8 @@ module IsoDoc::Function
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def insert_tab(out, n)
|
14
|
-
|
14
|
+
tab = %w(Hans Hant).include?(@script) ? " " : " "
|
15
|
+
[1..n].each { out << tab }
|
15
16
|
end
|
16
17
|
|
17
18
|
# add namespaces for Word fragments
|
@@ -99,8 +100,8 @@ module IsoDoc::Function
|
|
99
100
|
return '' if array.nil? || array.empty?
|
100
101
|
if array.length == 1 then array[0]
|
101
102
|
else
|
102
|
-
|
103
|
-
|
103
|
+
@i18n.l10n("#{array[0..-2].join(', ')} "\
|
104
|
+
"#{@i18n.and} #{array.last}",
|
104
105
|
@lang, @script)
|
105
106
|
end
|
106
107
|
end
|
@@ -153,7 +154,7 @@ module IsoDoc::Function
|
|
153
154
|
.get
|
154
155
|
.merge(@labels || {})
|
155
156
|
.merge(@meta.labels || {})
|
156
|
-
.merge(
|
157
|
+
.merge(fonts_options || {})
|
157
158
|
template = liquid(docxml)
|
158
159
|
template.render(meta.map { |k, v| [k.to_s, empty2nil(v)] }.to_h)
|
159
160
|
.gsub('<', '<').gsub('>', '>').gsub('&', '&')
|
@@ -1,29 +1,49 @@
|
|
1
1
|
require "yaml"
|
2
2
|
|
3
3
|
# TODO: Cleanup and generalize
|
4
|
-
module IsoDoc
|
5
|
-
|
6
|
-
def load_yaml(lang, script)
|
7
|
-
|
8
|
-
|
4
|
+
module IsoDoc
|
5
|
+
class I18n
|
6
|
+
def load_yaml(lang, script, i18nyaml = nil)
|
7
|
+
ret = load_yaml1(lang, script)
|
8
|
+
return ret.merge(YAML.load_file(i18nyaml)) if i18nyaml
|
9
|
+
ret
|
10
|
+
end
|
11
|
+
|
12
|
+
def load_yaml1(lang, script)
|
13
|
+
if lang == "en"
|
9
14
|
YAML.load_file(File.join(File.dirname(__FILE__),
|
10
|
-
"
|
15
|
+
"../isodoc-yaml/i18n-en.yaml"))
|
11
16
|
elsif lang == "fr"
|
12
17
|
YAML.load_file(File.join(File.dirname(__FILE__),
|
13
|
-
"
|
18
|
+
"../isodoc-yaml/i18n-fr.yaml"))
|
14
19
|
elsif lang == "zh" && script == "Hans"
|
15
20
|
YAML.load_file(File.join(File.dirname(__FILE__),
|
16
|
-
"
|
21
|
+
"../isodoc-yaml/i18n-zh-Hans.yaml"))
|
17
22
|
else
|
18
23
|
YAML.load_file(File.join(File.dirname(__FILE__),
|
19
|
-
"
|
24
|
+
"../isodoc-yaml/i18n-en.yaml"))
|
20
25
|
end
|
21
26
|
end
|
22
27
|
|
23
|
-
def
|
28
|
+
def get
|
29
|
+
@labels
|
30
|
+
end
|
31
|
+
|
32
|
+
def set(x, y)
|
33
|
+
@labels[x] = y
|
34
|
+
end
|
35
|
+
|
36
|
+
def initialize(lang, script, i18nyaml = nil)
|
24
37
|
@lang = lang
|
25
38
|
@script = script
|
26
|
-
y = load_yaml(lang, script)
|
39
|
+
y = load_yaml(lang, script, i18nyaml)
|
40
|
+
@labels = y
|
41
|
+
@labels["language"] = @lang
|
42
|
+
@labels["script"] = @script
|
43
|
+
@labels.each do |k, v|
|
44
|
+
self.class.send(:define_method, k.downcase) { v }
|
45
|
+
end
|
46
|
+
=begin
|
27
47
|
@term_def_boilerplate = y["term_def_boilerplate"]
|
28
48
|
@scope_lbl = y["scope"]
|
29
49
|
@symbols_lbl = y["symbols"]
|
@@ -71,30 +91,11 @@ module IsoDoc::Function
|
|
71
91
|
@requirement_lbl = y["requirement"]
|
72
92
|
@locality = y["locality"]
|
73
93
|
@admonition = y["admonition"]
|
74
|
-
|
75
|
-
@labels["language"] = @lang
|
76
|
-
@labels["script"] = @script
|
94
|
+
=end
|
77
95
|
end
|
78
96
|
|
79
|
-
|
80
|
-
|
81
|
-
ret = "#{delim} 第#{from.text}" if from
|
82
|
-
ret += "–#{to}" if to
|
83
|
-
loc = (@locality[type] || type.sub(/^locality:/, "").capitalize )
|
84
|
-
ret += " #{loc}"
|
85
|
-
ret
|
86
|
-
end
|
87
|
-
|
88
|
-
# TODO: move to localization file
|
89
|
-
def eref_localities1(target, type, from, to, delim, lang = "en")
|
90
|
-
return "" if type == "anchor"
|
91
|
-
return l10n(eref_localities1_zh(target, type, from, to, delim)) if lang == "zh"
|
92
|
-
ret = delim
|
93
|
-
loc = @locality[type] || type.sub(/^locality:/, "").capitalize
|
94
|
-
ret += " #{loc}"
|
95
|
-
ret += " #{from.text}" if from
|
96
|
-
ret += "–#{to.text}" if to
|
97
|
-
l10n(ret)
|
97
|
+
def self.l10n(x, lang = @lang, script = @script)
|
98
|
+
l10n(x, lang, script)
|
98
99
|
end
|
99
100
|
|
100
101
|
# TODO: move to localization file
|
@@ -106,8 +107,8 @@ module IsoDoc::Function
|
|
106
107
|
xml.traverse do |n|
|
107
108
|
next unless n.text?
|
108
109
|
n.replace(n.text.gsub(/ /, "").gsub(/:/, ":").gsub(/,/, "、").
|
109
|
-
|
110
|
-
|
110
|
+
gsub(/\(/, "(").gsub(/\)/, ")").
|
111
|
+
gsub(/\[/, "【").gsub(/\]/, "】"))
|
111
112
|
end
|
112
113
|
xml.to_xml.gsub(/<b>/, "").gsub("</b>", "").gsub(/<\?[^>]+>/, "")
|
113
114
|
else
|
@@ -115,7 +116,7 @@ module IsoDoc::Function
|
|
115
116
|
end
|
116
117
|
end
|
117
118
|
|
118
|
-
module_function :l10n
|
119
|
+
#module_function :l10n
|
119
120
|
|
120
121
|
end
|
121
122
|
end
|