isodoc 2.0.2 → 2.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/isodoc/convert.rb +36 -18
- data/lib/isodoc/function/inline.rb +24 -13
- data/lib/isodoc/function/references.rb +18 -6
- data/lib/isodoc/html_function/html.rb +6 -0
- data/lib/isodoc/i18n.rb +20 -7
- data/lib/isodoc/metadata.rb +1 -1
- data/lib/isodoc/metadata_contributor.rb +1 -1
- data/lib/isodoc/presentation_function/bibdata.rb +26 -9
- data/lib/isodoc/presentation_function/block.rb +24 -0
- data/lib/isodoc/presentation_function/image.rb +3 -4
- data/lib/isodoc/presentation_function/inline.rb +118 -76
- data/lib/isodoc/presentation_function/math.rb +1 -0
- data/lib/isodoc/presentation_function/xrefs.rb +100 -0
- data/lib/isodoc/presentation_xml_convert.rb +1 -0
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +11 -1
- data/lib/isodoc/word_function/postprocess.rb +4 -6
- data/lib/isodoc/word_function/postprocess_cover.rb +82 -1
- data/lib/isodoc/xref/xref_anchor.rb +1 -0
- data/lib/isodoc/xref/xref_gen.rb +2 -1
- data/lib/isodoc/xref/xref_sect_gen.rb +14 -8
- data/lib/isodoc/xslfo_convert.rb +19 -19
- data/lib/isodoc-yaml/i18n-ar.yaml +11 -0
- data/lib/isodoc-yaml/i18n-de.yaml +11 -0
- data/lib/isodoc-yaml/i18n-en.yaml +11 -0
- data/lib/isodoc-yaml/i18n-es.yaml +11 -0
- data/lib/isodoc-yaml/i18n-fr.yaml +11 -0
- data/lib/isodoc-yaml/i18n-ru.yaml +11 -0
- data/lib/isodoc-yaml/i18n-zh-Hans.yaml +11 -0
- data/spec/isodoc/blocks_spec.rb +13 -77
- data/spec/isodoc/inline_spec.rb +565 -22
- data/spec/isodoc/metadata_spec.rb +1 -1
- data/spec/isodoc/postproc_spec.rb +466 -2
- data/spec/isodoc/presentation_xml_spec.rb +380 -78
- data/spec/isodoc/ref_spec.rb +96 -11
- data/spec/isodoc/section_spec.rb +1 -2
- data/spec/isodoc/table_spec.rb +1 -1
- data/spec/isodoc/terms_spec.rb +8 -8
- data/spec/isodoc/xref_spec.rb +71 -1190
- data/spec/isodoc/xslfo_convert_spec.rb +12 -7
- metadata +3 -2
@@ -0,0 +1,100 @@
|
|
1
|
+
module IsoDoc
|
2
|
+
class PresentationXMLConvert < ::IsoDoc::Convert
|
3
|
+
def prefix_container(container, linkend, _target)
|
4
|
+
l10n("#{@xrefs.anchor(container, :xref)}, #{linkend}")
|
5
|
+
end
|
6
|
+
|
7
|
+
def anchor_value(id)
|
8
|
+
@xrefs.anchor(id, :value) || @xrefs.anchor(id, :label) ||
|
9
|
+
@xrefs.anchor(id, :xref)
|
10
|
+
end
|
11
|
+
|
12
|
+
def anchor_linkend(node, linkend)
|
13
|
+
if node["citeas"].nil? && node["bibitemid"]
|
14
|
+
return @xrefs.anchor(node["bibitemid"], :xref) || "???"
|
15
|
+
elsif node.at(ns("./location"))
|
16
|
+
linkend = combine_xref_locations(node)
|
17
|
+
elsif node["target"] && node["droploc"]
|
18
|
+
return anchor_value(node["target"]) || "???"
|
19
|
+
elsif node["target"] && !/.#./.match(node["target"])
|
20
|
+
linkend = anchor_linkend1(node)
|
21
|
+
end
|
22
|
+
|
23
|
+
linkend || "???"
|
24
|
+
end
|
25
|
+
|
26
|
+
def anchor_linkend1(node)
|
27
|
+
linkend = @xrefs.anchor(node["target"], :xref)
|
28
|
+
container = @xrefs.anchor(node["target"], :container, false)
|
29
|
+
(container && get_note_container_id(node) != container &&
|
30
|
+
@xrefs.get[node["target"]]) and
|
31
|
+
linkend = prefix_container(container, linkend, node["target"])
|
32
|
+
capitalise_xref(node, linkend, anchor_value(node["target"]))
|
33
|
+
end
|
34
|
+
|
35
|
+
def combine_xref_locations(node)
|
36
|
+
locs = gather_xref_locations(node)
|
37
|
+
linkend = if can_conflate_xref_rendering?(locs)
|
38
|
+
out = locs.each { |l| l[:target] = anchor_value(l[:target]) }
|
39
|
+
l10n("#{locs.first[:elem]} #{combine_conn(out)}")
|
40
|
+
else
|
41
|
+
out = locs.each { |l| l[:target] = anchor_linked1(l[:node]) }
|
42
|
+
l10n(combine_conn(out))
|
43
|
+
end
|
44
|
+
capitalise_xref(node, linkend, anchor_value(node["target"]))
|
45
|
+
end
|
46
|
+
|
47
|
+
def gather_xref_locations(node)
|
48
|
+
node.xpath(ns("./location")).each_with_object([]) do |l, m|
|
49
|
+
type = @xrefs.anchor(l["target"], :type)
|
50
|
+
m << { conn: l["connective"], target: l["target"],
|
51
|
+
type: type, node: l, elem: @xrefs.anchor(l["target"], :elem),
|
52
|
+
container: @xrefs.anchor(node["target"], :container, false) ||
|
53
|
+
%w(termnote).include?(type) }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def combine_conn(list)
|
58
|
+
return list.first[:target] if list.size == 1
|
59
|
+
|
60
|
+
if list[1..-1].all? { |l| l[:conn] == "and" }
|
61
|
+
@i18n.boolean_conj(list.map { |l| l[:target] }, "and")
|
62
|
+
elsif list[1..-1].all? { |l| l[:conn] == "or" }
|
63
|
+
@i18n.boolean_conj(list.map { |l| l[:target] }, "or")
|
64
|
+
else
|
65
|
+
ret = list[0][:target]
|
66
|
+
list[1..-1].each { |l| ret = i18n_chain_boolean(ret, l) }
|
67
|
+
ret
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def i18n_chain_boolean(value, entry)
|
72
|
+
@i18n.send("chain_#{entry[:conn]}").sub(/%1/, value)
|
73
|
+
.sub(/%2/, entry[:target])
|
74
|
+
end
|
75
|
+
|
76
|
+
def can_conflate_xref_rendering?(locs)
|
77
|
+
!locs.all? { |l| l[:container].nil? } &&
|
78
|
+
locs.all? { |l| l[:type] == locs[0][:type] }
|
79
|
+
end
|
80
|
+
|
81
|
+
def capitalise_xref(node, linkend, label)
|
82
|
+
linktext = linkend.gsub(/<[^>]+>/, "")
|
83
|
+
(label && !label.empty? && /^#{Regexp.escape(label)}/.match?(linktext)) ||
|
84
|
+
linktext[0, 1].match?(/\p{Upper}/) and return linkend
|
85
|
+
node["case"] and
|
86
|
+
return Common::case_with_markup(linkend, node["case"], @script)
|
87
|
+
|
88
|
+
capitalise_xref1(node, linkend)
|
89
|
+
end
|
90
|
+
|
91
|
+
def capitalise_xref1(node, linkend)
|
92
|
+
prec = nearest_block_parent(node).xpath("./descendant-or-self::text()") &
|
93
|
+
node.xpath("./preceding::text()")
|
94
|
+
if prec.empty? || /(?!<[^.].)\.\s+$/.match(prec.map(&:text).join)
|
95
|
+
Common::case_with_markup(linkend, "capital", @script)
|
96
|
+
else linkend
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
data/lib/isodoc/version.rb
CHANGED
@@ -233,11 +233,21 @@ module IsoDoc
|
|
233
233
|
end
|
234
234
|
|
235
235
|
def suffix_url(url)
|
236
|
-
return url if %r{^https?://}.match?(url)
|
236
|
+
return url if url.nil? || %r{^https?://}.match?(url)
|
237
237
|
return url unless File.extname(url).empty?
|
238
238
|
|
239
239
|
url.sub(/#{File.extname(url)}$/, ".doc")
|
240
240
|
end
|
241
|
+
|
242
|
+
def info(isoxml, out)
|
243
|
+
@tocfigurestitle =
|
244
|
+
isoxml&.at(ns("//misc-container/toc[@type = 'figure']/title"))&.text
|
245
|
+
@toctablestitle =
|
246
|
+
isoxml&.at(ns("//misc-container/toc[@type = 'table']/title"))&.text
|
247
|
+
@tocrecommendationstitle = isoxml
|
248
|
+
&.at(ns("//misc-container/toc[@type = 'recommendation']/title"))&.text
|
249
|
+
super
|
250
|
+
end
|
241
251
|
end
|
242
252
|
end
|
243
253
|
end
|
@@ -165,9 +165,7 @@ module IsoDoc
|
|
165
165
|
xpath.each do |list|
|
166
166
|
(list.xpath(".//li") - list.xpath(".//ol//li | .//ul//li")).each do |l|
|
167
167
|
l.xpath("./p | ./div | ./table").each_with_index do |p, i|
|
168
|
-
|
169
|
-
|
170
|
-
p.wrap(%{<div class="ListContLevel#{lvl}"/>})
|
168
|
+
i.zero? or p.wrap(%{<div class="ListContLevel#{lvl}"/>})
|
171
169
|
end
|
172
170
|
list_add(l.xpath(".//ul") - l.xpath(".//ul//ul | .//ol//ul"),
|
173
171
|
lvl + 1)
|
@@ -212,10 +210,10 @@ module IsoDoc
|
|
212
210
|
def word_remove_pb_before_annex(docxml)
|
213
211
|
docxml.xpath("//div[p/br]").each do |d|
|
214
212
|
/^WordSection\d+_\d+$/.match(d["class"]) or next
|
215
|
-
d.elements[0].name == "p" && !d.elements[0].elements.empty? or next
|
216
|
-
d.elements[0].elements[0].name == "br" &&
|
213
|
+
(d.elements[0].name == "p" && !d.elements[0].elements.empty?) or next
|
214
|
+
(d.elements[0].elements[0].name == "br" &&
|
217
215
|
d.elements[0].elements[0]["style"] ==
|
218
|
-
"mso-special-character:line-break;page-break-before:always" or next
|
216
|
+
"mso-special-character:line-break;page-break-before:always") or next
|
219
217
|
d.elements[0].remove
|
220
218
|
end
|
221
219
|
end
|
@@ -24,7 +24,12 @@ module IsoDoc
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def insert_toc(intro, docxml, level)
|
27
|
-
|
27
|
+
toc = ""
|
28
|
+
toc += make_WordToC(docxml, level)
|
29
|
+
toc += make_TableWordToC(docxml)
|
30
|
+
toc += make_FigureWordToC(docxml)
|
31
|
+
toc += make_RecommendationWordToC(docxml)
|
32
|
+
intro.sub(/WORDTOC/, toc)
|
28
33
|
end
|
29
34
|
|
30
35
|
def word_toc_entry(toclevel, heading)
|
@@ -77,6 +82,82 @@ module IsoDoc
|
|
77
82
|
%{\\1#{word_toc_preface(level)}}) + WORD_TOC_SUFFIX1
|
78
83
|
end
|
79
84
|
|
85
|
+
WORD_TOC_RECOMMENDATION_PREFACE1 = <<~TOC.freeze
|
86
|
+
<span lang="EN-GB"><span
|
87
|
+
style='mso-element:field-begin'></span><span
|
88
|
+
style='mso-spacerun:yes'> </span>TOC
|
89
|
+
\\h \\z \\t "RecommendationTitle,RecommendationTestTitle,recommendationtitle,recommendationtesttitle"
|
90
|
+
<span style='mso-element:field-separator'></span></span>
|
91
|
+
TOC
|
92
|
+
|
93
|
+
WORD_TOC_TABLE_PREFACE1 = <<~TOC.freeze
|
94
|
+
<span lang="EN-GB"><span
|
95
|
+
style='mso-element:field-begin'></span><span
|
96
|
+
style='mso-spacerun:yes'> </span>TOC
|
97
|
+
\\h \\z \\t "TableTitle,tabletitle" <span
|
98
|
+
style='mso-element:field-separator'></span></span>
|
99
|
+
TOC
|
100
|
+
|
101
|
+
WORD_TOC_FIGURE_PREFACE1 = <<~TOC.freeze
|
102
|
+
<span lang="EN-GB"><span
|
103
|
+
style='mso-element:field-begin'></span><span
|
104
|
+
style='mso-spacerun:yes'> </span>TOC
|
105
|
+
\\h \\z \\t "FigureTitle,figuretitle" <span
|
106
|
+
style='mso-element:field-separator'></span></span>
|
107
|
+
TOC
|
108
|
+
|
109
|
+
def make_TableWordToC(docxml)
|
110
|
+
(docxml.at("//p[@class = 'TableTitle']") && @toctablestitle) or
|
111
|
+
return ""
|
112
|
+
toc = %{<p class="TOCTitle">#{@toctablestitle}</p>}
|
113
|
+
docxml.xpath("//p[@class = 'TableTitle']").each do |h|
|
114
|
+
toc += word_toc_entry(1, header_strip(h))
|
115
|
+
end
|
116
|
+
toc.sub(/(<p class="MsoToc1">)/,
|
117
|
+
%{\\1#{WORD_TOC_TABLE_PREFACE1}}) + WORD_TOC_SUFFIX1
|
118
|
+
end
|
119
|
+
|
120
|
+
def make_FigureWordToC(docxml)
|
121
|
+
(docxml.at("//p[@class = 'FigureTitle']") && @tocfigurestitle) or
|
122
|
+
return ""
|
123
|
+
toc = %{<p class="TOCTitle">#{@tocfigurestitle}</p>}
|
124
|
+
docxml.xpath("//p[@class = 'FigureTitle']").each do |h|
|
125
|
+
toc += word_toc_entry(1, header_strip(h))
|
126
|
+
end
|
127
|
+
toc.sub(/(<p class="MsoToc1">)/,
|
128
|
+
%{\\1#{WORD_TOC_FIGURE_PREFACE1}}) + WORD_TOC_SUFFIX1
|
129
|
+
end
|
130
|
+
|
131
|
+
def make_RecommendationWordToC(docxml)
|
132
|
+
(docxml.at("//p[@class = 'RecommendationTitle']") &&
|
133
|
+
@tocrecommendationstitle) or return ""
|
134
|
+
toc = %{<p class="TOCTitle">#{@tocrecommendationstitle}</p>}
|
135
|
+
docxml.xpath("//p[@class = 'RecommendationTitle' or @class = 'RecommendationTestTitle']").sort_by do |h|
|
136
|
+
recommmendation_sort_key(h.text)
|
137
|
+
end.each do |h|
|
138
|
+
toc += word_toc_entry(1, header_strip(h))
|
139
|
+
end
|
140
|
+
toc.sub(/(<p class="MsoToc1">)/,
|
141
|
+
%{\\1#{WORD_TOC_RECOMMENDATION_PREFACE1}}) + WORD_TOC_SUFFIX1
|
142
|
+
end
|
143
|
+
|
144
|
+
def recommmendation_sort_key(header)
|
145
|
+
m = /^([^0-9]+) (\d+)/.match(header) || /^([^:]+)/.match(header)
|
146
|
+
m ||= [header, nil]
|
147
|
+
ret = "#{recommmendation_sort_key1(m[1])}::"
|
148
|
+
m[2] and ret += ("%04d" % m[2].to_i).to_s
|
149
|
+
ret
|
150
|
+
end
|
151
|
+
|
152
|
+
def recommmendation_sort_key1(type)
|
153
|
+
case type&.downcase
|
154
|
+
when "requirement" then "04"
|
155
|
+
when "recommendation" then "05"
|
156
|
+
when "permission" then "06"
|
157
|
+
else type
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
80
161
|
def authority_cleanup1(docxml, klass)
|
81
162
|
dest = docxml.at("//div[@id = 'boilerplate-#{klass}-destination']")
|
82
163
|
auth = docxml.at("//div[@id = 'boilerplate-#{klass}' "\
|
data/lib/isodoc/xref/xref_gen.rb
CHANGED
@@ -48,7 +48,8 @@ module IsoDoc
|
|
48
48
|
t.xpath(ns("./termnote")).reject { |n| blank?(n["id"]) }.each do |n|
|
49
49
|
c.increment(n)
|
50
50
|
@anchors[n["id"]] =
|
51
|
-
{ label: termnote_label(c.print), type: "termnote",
|
51
|
+
{ label: termnote_label(c.print), type: "termnote",
|
52
|
+
value: c.print, elem: @labels["termnote"],
|
52
53
|
xref: l10n("#{anchor(t['id'], :xref)}, "\
|
53
54
|
"#{@labels['note_xref']} #{c.print}") }
|
54
55
|
end
|
@@ -49,7 +49,7 @@ module IsoDoc
|
|
49
49
|
|
50
50
|
@anchors[clause["id"]] =
|
51
51
|
{ label: nil, level: 1, xref: preface_clause_name(clause),
|
52
|
-
type: "clause" }
|
52
|
+
type: "clause", elem: @labels["clause"] }
|
53
53
|
clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
|
54
54
|
preface_names1(c, c.at(ns("./title"))&.text,
|
55
55
|
"#{preface_clause_name(clause)}, #{i + 1}", 2)
|
@@ -58,8 +58,8 @@ module IsoDoc
|
|
58
58
|
|
59
59
|
def preface_names1(clause, title, parent_title, level)
|
60
60
|
label = title || parent_title
|
61
|
-
@anchors[clause["id"]] =
|
62
|
-
|
61
|
+
@anchors[clause["id"]] = { label: nil, level: level, xref: label,
|
62
|
+
type: "clause", elem: @labels["clause"] }
|
63
63
|
clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
|
64
64
|
preface_names1(c, c.at(ns("./title"))&.text, "#{label} #{i + 1}",
|
65
65
|
level + 1)
|
@@ -86,7 +86,7 @@ module IsoDoc
|
|
86
86
|
num.increment(clause)
|
87
87
|
@anchors[clause["id"]] =
|
88
88
|
{ label: num.print, xref: l10n("#{@labels['clause']} #{num.print}"),
|
89
|
-
level: lvl, type: "clause" }
|
89
|
+
level: lvl, type: "clause", elem: @labels["clause"] }
|
90
90
|
i = Counter.new
|
91
91
|
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
92
92
|
section_names1(c, "#{num.print}.#{i.increment(c).print}", lvl + 1)
|
@@ -97,7 +97,7 @@ module IsoDoc
|
|
97
97
|
def section_names1(clause, num, level)
|
98
98
|
@anchors[clause["id"]] =
|
99
99
|
{ label: num, level: level, xref: l10n("#{@labels['clause']} #{num}"),
|
100
|
-
type: "clause" }
|
100
|
+
type: "clause", elem: @labels["clause"] }
|
101
101
|
i = Counter.new
|
102
102
|
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
103
103
|
section_names1(c, "#{num}.#{i.increment(c).print}", level + 1)
|
@@ -121,10 +121,15 @@ module IsoDoc
|
|
121
121
|
a[0]
|
122
122
|
end
|
123
123
|
|
124
|
+
def annex_name_anchors(clause, num)
|
125
|
+
{ label: annex_name_lbl(clause, num),
|
126
|
+
elem: @labels["annex"],
|
127
|
+
type: "clause", value: num.to_s, level: 1,
|
128
|
+
xref: "#{@labels['annex']} #{num}" }
|
129
|
+
end
|
130
|
+
|
124
131
|
def annex_names(clause, num)
|
125
|
-
@anchors[clause["id"]] =
|
126
|
-
type: "clause", value: num.to_s, level: 1,
|
127
|
-
xref: "#{@labels['annex']} #{num}" }
|
132
|
+
@anchors[clause["id"]] = annex_name_anchors(clause, num)
|
128
133
|
if a = single_annex_special_section(clause)
|
129
134
|
annex_names1(a, num.to_s, 1)
|
130
135
|
else
|
@@ -138,6 +143,7 @@ module IsoDoc
|
|
138
143
|
|
139
144
|
def annex_names1(clause, num, level)
|
140
145
|
@anchors[clause["id"]] = { xref: "#{@labels['annex']} #{num}",
|
146
|
+
elem: @labels["annex"],
|
141
147
|
label: num, level: level, type: "clause" }
|
142
148
|
i = Counter.new
|
143
149
|
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
data/lib/isodoc/xslfo_convert.rb
CHANGED
@@ -2,8 +2,21 @@ require "metanorma"
|
|
2
2
|
|
3
3
|
module IsoDoc
|
4
4
|
class XslfoPdfConvert < ::IsoDoc::Convert
|
5
|
-
MN2PDF_OPTIONS = :mn2pdf
|
5
|
+
# MN2PDF_OPTIONS = :mn2pdf
|
6
6
|
MN2PDF_FONT_MANIFEST = :font_manifest
|
7
|
+
MN2PDF_OPTIONS = { pdfencryptionlength: "--encryption-length",
|
8
|
+
pdfownerpassword: "--owner-password",
|
9
|
+
pdfuserpassword: "--user-password",
|
10
|
+
pdfallowprint: "--allow-print",
|
11
|
+
pdfallowcopycontent: "--allow-copy-content",
|
12
|
+
pdfalloweditcontent: "--allow-edit-content",
|
13
|
+
pdfalloweditannotations: "--allow-edit-annotations",
|
14
|
+
pdfallowfillinforms: "--allow-fill-in-forms",
|
15
|
+
pdfallowaccesscontent: "--allow-access-content",
|
16
|
+
pdfallowassembledocument: "--allow-assemble-document",
|
17
|
+
pdfallowprinthq: "--allow-print-hq",
|
18
|
+
pdfencryptmetadata: "--encrypt-metadata" }.freeze
|
19
|
+
MN2PDF_DEFAULT_ARGS = { "--syntax-highlight": nil }.freeze
|
7
20
|
|
8
21
|
def initialize(options)
|
9
22
|
@format = :pdf
|
@@ -13,22 +26,10 @@ module IsoDoc
|
|
13
26
|
end
|
14
27
|
|
15
28
|
def extract_cmd_options(options)
|
16
|
-
ret =
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
a = options[:pdfallowprint] and ret["--allow-print"] = a
|
21
|
-
a = options[:pdfallowcopycontent] and ret["--allow-copy-content"] = a
|
22
|
-
a = options[:pdfalloweditcontent] and ret["--allow-edit-content"] = a
|
23
|
-
a = options[:pdfalloweditannotations] and
|
24
|
-
ret["--allow-edit-annotations"] = a
|
25
|
-
a = options[:pdfallowfillinforms] and ret["--allow-fill-in-forms"] = a
|
26
|
-
a = options[:pdfallowaccesscontent] and
|
27
|
-
ret["--allow-access-content"] = a
|
28
|
-
a = options[:pdfallowassembledocument] and
|
29
|
-
ret["--allow-assemble-document"] = a
|
30
|
-
a = options[:pdfallowprinthq] and ret["--allow-print-hq"] = a
|
31
|
-
a = options[:pdfencryptmetadata] and ret["--encrypt-metadata"] = a
|
29
|
+
ret = MN2PDF_DEFAULT_ARGS.dup
|
30
|
+
MN2PDF_OPTIONS.each do |key, opt|
|
31
|
+
value = options[key] and ret[opt] = value
|
32
|
+
end
|
32
33
|
ret
|
33
34
|
end
|
34
35
|
|
@@ -42,8 +43,7 @@ module IsoDoc
|
|
42
43
|
|
43
44
|
def pdf_options(_docxml)
|
44
45
|
ret = {}
|
45
|
-
font_manifest = @options
|
46
|
-
MN2PDF_FONT_MANIFEST) and
|
46
|
+
font_manifest = @options[MN2PDF_FONT_MANIFEST] and
|
47
47
|
ret[MN2PDF_FONT_MANIFEST] = font_manifest
|
48
48
|
@aligncrosselements && !@aligncrosselements.empty? and
|
49
49
|
ret["--param align-cross-elements="] =
|
@@ -30,6 +30,14 @@ external_terms_boilerplate: |
|
|
30
30
|
internal_external_terms_boilerplate: |
|
31
31
|
<p>لأغراض هذه الوثيقة ،تنطبق المصطلحات والتعاريف الواردة في % وما يلي.</p>
|
32
32
|
term_defined_in: "[المصطلح المحدد في %]"
|
33
|
+
binary_and: "%1 و %2"
|
34
|
+
multiple_and: "%1, و %2"
|
35
|
+
binary_or: "%1 او %2"
|
36
|
+
multiple_or: "%1, او %2"
|
37
|
+
chain_and: "%1 و %2"
|
38
|
+
chain_or: "%1 او %2"
|
39
|
+
chain_from: "%1 %من 2"
|
40
|
+
chain_to: "من %1 إلى %2"
|
33
41
|
note: ملاحظة
|
34
42
|
note_xref: ملاحظة
|
35
43
|
termnote: ملاحظة % للقيد
|
@@ -55,6 +63,9 @@ deprecated: مهمل
|
|
55
63
|
source: مصدر
|
56
64
|
and: و
|
57
65
|
all_parts: كل الأجزاء
|
66
|
+
toc_figures: جدول الأرقام
|
67
|
+
toc_tables: جدول الجداول
|
68
|
+
toc_recommendations: جدول التوصيات
|
58
69
|
month_january: يناير
|
59
70
|
month_february: فبراير
|
60
71
|
month_march: مارس
|
@@ -32,6 +32,14 @@ external_terms_boilerplate: |
|
|
32
32
|
internal_external_terms_boilerplate: |
|
33
33
|
<p>Für die Zwecke dieses Dokuments gelten die in % und im Folgenden aufgeführten Begriffe und Definitionen.</p>
|
34
34
|
term_defined_in: "[Begriff definiert in %]"
|
35
|
+
binary_and: "%1 und %2"
|
36
|
+
multiple_and: "%1, und %2"
|
37
|
+
binary_or: "%1 oder %2"
|
38
|
+
multiple_or: "%1, oder %2"
|
39
|
+
chain_and: "%1 und %2"
|
40
|
+
chain_or: "%1 oder %2"
|
41
|
+
chain_from: "%1 von %2"
|
42
|
+
chain_to: "%1 bis %2"
|
35
43
|
note: HINWEIS
|
36
44
|
note_xref: Hinweis
|
37
45
|
termnote: Hinweis % zum Eintrag
|
@@ -57,6 +65,9 @@ deprecated: DEPRECATED
|
|
57
65
|
source: QUELLE
|
58
66
|
and: und
|
59
67
|
all_parts: Alle Teile
|
68
|
+
toc_figures: Abbildungsverzeichnis
|
69
|
+
toc_tables: Tabellenverzeichnis
|
70
|
+
toc_recommendations: Empfehlungenverzeichnis
|
60
71
|
month_january: Januar
|
61
72
|
month_february: Februar
|
62
73
|
month_march: März
|
@@ -38,6 +38,14 @@ internal_external_terms_boilerplate: |
|
|
38
38
|
<p>For the purposes of this document, the terms and definitions
|
39
39
|
given in % and the following apply.</p>
|
40
40
|
term_defined_in: "[term defined in %]"
|
41
|
+
binary_and: "%1 and %2"
|
42
|
+
multiple_and: "%1, and %2"
|
43
|
+
binary_or: "%1 or %2"
|
44
|
+
multiple_or: "%1, or %2"
|
45
|
+
chain_and: "%1 and %2"
|
46
|
+
chain_or: "%1 or %2"
|
47
|
+
chain_from: "%1 from %2"
|
48
|
+
chain_to: "%1 to %2"
|
41
49
|
note: NOTE
|
42
50
|
note_xref: Note
|
43
51
|
termnote: Note % to entry
|
@@ -63,6 +71,9 @@ deprecated: DEPRECATED
|
|
63
71
|
source: SOURCE
|
64
72
|
and: and
|
65
73
|
all_parts: All Parts
|
74
|
+
toc_figures: List of figures
|
75
|
+
toc_tables: List of tables
|
76
|
+
toc_recommendations: List of recommendations
|
66
77
|
month_january: January
|
67
78
|
month_february: February
|
68
79
|
month_march: March
|
@@ -34,6 +34,14 @@ external_terms_boilerplate: |
|
|
34
34
|
internal_external_terms_boilerplate: |
|
35
35
|
<p>Para los propósitos de este documento, se aplican los términos y definiciones dados en % y los siguientes.</p>
|
36
36
|
term_defined_in: "[término definido en %]"
|
37
|
+
binary_and: "%1 y %2"
|
38
|
+
multiple_and: "%1, y %2"
|
39
|
+
binary_or: "%1 o %2"
|
40
|
+
multiple_or: "%1, o %2"
|
41
|
+
chain_and: "%1 y %2"
|
42
|
+
chain_or: "%1 o %2"
|
43
|
+
chain_from: "%1 del %2"
|
44
|
+
chain_to: "%1 al %2"
|
37
45
|
note: NOTA
|
38
46
|
note_xref: Nota
|
39
47
|
termnote: Nota % a la entrada
|
@@ -59,6 +67,9 @@ deprecated: OBSOLETO
|
|
59
67
|
source: FUENTE
|
60
68
|
and: y
|
61
69
|
all_parts: Todas las partes
|
70
|
+
toc_figures: Table de figuras
|
71
|
+
toc_tables: Tabla de tablas
|
72
|
+
toc_recommendations: Tabla de recomendaciones
|
62
73
|
month_january: Enero
|
63
74
|
month_february: Febrero
|
64
75
|
month_march: Marzo
|
@@ -31,6 +31,14 @@ external_terms_boilerplate: |
|
|
31
31
|
internal_external_terms_boilerplate: |
|
32
32
|
<p>Pour les besoins du présent document, les termes et définitions de % ainsi que les suivants, s’appliquent.</p>
|
33
33
|
term_defined_in: "[terme défini dans %]"
|
34
|
+
binary_and: "%1 et %2"
|
35
|
+
multiple_and: "%1, et %2"
|
36
|
+
binary_or: "%1 ou %2"
|
37
|
+
multiple_or: "%1, ou %2"
|
38
|
+
chain_and: "%1 et %2"
|
39
|
+
chain_or: "%1 ou %2"
|
40
|
+
chain_from: "%1 de %2"
|
41
|
+
chain_to: "%1 à %2"
|
34
42
|
note: NOTE
|
35
43
|
note_xref: Note
|
36
44
|
termnote: Note % à l’article
|
@@ -56,6 +64,9 @@ deprecated: DÉCONSEILLÉ
|
|
56
64
|
source: SOURCE
|
57
65
|
and: et
|
58
66
|
all_parts: toutes les parties
|
67
|
+
toc_figures: Table des figures
|
68
|
+
toc_tables: Table des tableaux
|
69
|
+
toc_recommendations: Table de recommandations
|
59
70
|
month_january: Janvier
|
60
71
|
month_february: Février
|
61
72
|
month_march: Mars
|
@@ -37,6 +37,14 @@ internal_external_terms_boilerplate: |
|
|
37
37
|
<p>Для целей этого документа применяются
|
38
38
|
термины и определения, данные в % и следующие.</p>
|
39
39
|
term_defined_in: "[термин, определенный в %]"
|
40
|
+
binary_and: "%1 и %2"
|
41
|
+
multiple_and: "%1, и %2"
|
42
|
+
binary_or: "%1 или %2"
|
43
|
+
multiple_or: "%1, или %2"
|
44
|
+
chain_and: "%1 и %2"
|
45
|
+
chain_or: "%1 или %2"
|
46
|
+
chain_from: "%1 от %2"
|
47
|
+
chain_to: "%1 до %2"
|
40
48
|
note: ПРИМЕЧАНИЕ
|
41
49
|
note_xref: Примечание
|
42
50
|
termnote: Примечание % к определению
|
@@ -62,6 +70,9 @@ deprecated: НЕ РЕКОМЕНДУЕТСЯ
|
|
62
70
|
source: ИСТОЧНИК
|
63
71
|
and: и
|
64
72
|
all_parts: Все части
|
73
|
+
toc_figures: Таблица фигур
|
74
|
+
toc_tables: Таблица таблиц
|
75
|
+
toc_recommendations: Таблица рекомендаций
|
65
76
|
month_january: Январь
|
66
77
|
month_february: Февраль
|
67
78
|
month_march: Март
|
@@ -33,6 +33,14 @@ external_terms_boilerplate: |
|
|
33
33
|
internal_external_terms_boilerplate: |
|
34
34
|
<p>% 界定的以及下列术语和定义适用于本文件。</p>
|
35
35
|
term_defined_in: "〖术语于%中定义〗"
|
36
|
+
binary_and: "%1和%2"
|
37
|
+
multiple_and: "%1和%2"
|
38
|
+
binary_or: "%1或%2"
|
39
|
+
multiple_or: "%1或%2"
|
40
|
+
chain_and: "%1和%2"
|
41
|
+
chain_or: "%1或%2"
|
42
|
+
chain_from: "%1从%2"
|
43
|
+
chain_to: "%1到%2"
|
36
44
|
note: 注
|
37
45
|
note_xref: 注
|
38
46
|
termnote: 注%
|
@@ -58,6 +66,9 @@ deprecated: 被取代
|
|
58
66
|
source: 定义
|
59
67
|
and: 和
|
60
68
|
all_parts: 所有部分
|
69
|
+
toc_figures: 数字列表
|
70
|
+
toc_tables: 表列表
|
71
|
+
toc_recommendations: 建议清单
|
61
72
|
month_january: 一月
|
62
73
|
month_february: 二月
|
63
74
|
month_march: 三月
|