isodoc 1.7.6.1 → 1.7.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 411fdbd359b728afea9bcab7225c1e79a2a2698dd37c6219c70a1434cfa09286
4
- data.tar.gz: 05a4997c47971d8cc74985ea8a0cf7b4e2c0d0e15a144e68eae007ce24176c9a
3
+ metadata.gz: 5df030f2a89267d4acde57361f2c6338b29bf5928b5bb3c7b24a18903adf1531
4
+ data.tar.gz: 7e1923d7293b6b0703a15799e9bc3334637145adf8219c4230c63809267770cf
5
5
  SHA512:
6
- metadata.gz: 7db1599bdd9d90aada565fbb02d4744a1ac85de0798c2dfd33d2b76905e5f40894042df0e0131a282fa669509f590cf471285188f6dd8e3c091d3bf6c0809bb3
7
- data.tar.gz: cd90f9f57aa3ccd37d59d7ebc14438dd37c8812e3d131d7d82618499bfd69c25f660716a508621f536e72a68b942571347fb7218a746c42e61296e4e7fef3da8
6
+ metadata.gz: 24e8cf7a71167da62d5bdea85b009f982996e1513db82b42d6c01edf031b045dac7f9992a10e29946368df70dc32301e5edfa5937fad11e49e661edf8311058c
7
+ data.tar.gz: f61bb6a9b3833c0c4080c0804ae12869f15051ebec0f3fa6b3cc7d925b44de41559d472dde0ad737f54b02b040532a0a944e90a563fd1fcec4566965bda26fa4
@@ -27,5 +27,28 @@ module IsoDoc
27
27
  end.join
28
28
  Liquid::Template.parse(doc)
29
29
  end
30
+
31
+ def case_strict(text, casing, script)
32
+ return text unless %w(Latn Cyrl Grek Armn).include?(script)
33
+
34
+ letters = text.chars
35
+ case casing
36
+ when "capital" then letters.first.upcase!
37
+ when "lowercase" then letters.first.downcase!
38
+ end
39
+ letters.join
40
+ end
41
+
42
+ def case_with_markup(linkend, casing, script)
43
+ seen = false
44
+ xml = Nokogiri::XML("<root>#{linkend}</root>")
45
+ xml.traverse do |b|
46
+ next unless b.text? && !seen
47
+
48
+ b.replace(Common::case_strict(b.text, casing, script))
49
+ seen = true
50
+ end
51
+ xml.root.children.to_xml
52
+ end
30
53
  end
31
54
  end
@@ -102,6 +102,7 @@ module IsoDoc
102
102
  @bookmarks_allocated = { "X" => true }
103
103
  @fn_bookmarks = {}
104
104
  @baseassetpath = options[:baseassetpath]
105
+ @aligncrosselements = options[:aligncrosselements]
105
106
  end
106
107
 
107
108
  def tmpimagedir_suffix
@@ -7,13 +7,16 @@ module IsoDoc
7
7
  l10n("#{@xrefs.anchor(container, :xref)}, #{linkend}")
8
8
  end
9
9
 
10
+ def anchor_value(id)
11
+ @xrefs.anchor(id, :value) || @xrefs.anchor(id, :label) ||
12
+ @xrefs.anchor(id, :xref)
13
+ end
14
+
10
15
  def anchor_linkend(node, linkend)
11
16
  if node["citeas"].nil? && node["bibitemid"]
12
17
  return @xrefs.anchor(node["bibitemid"], :xref) || "???"
13
18
  elsif node["target"] && node["droploc"]
14
- return @xrefs.anchor(node["target"], :value) ||
15
- @xrefs.anchor(node["target"], :label) ||
16
- @xrefs.anchor(node["target"], :xref) || "???"
19
+ return anchor_value(node["target"]) || "???"
17
20
  elsif node["target"] && !/.#./.match(node["target"])
18
21
  linkend = anchor_linkend1(node)
19
22
  end
@@ -27,14 +30,15 @@ module IsoDoc
27
30
  (container && get_note_container_id(node) != container &&
28
31
  @xrefs.get[node["target"]]) and
29
32
  linkend = prefix_container(container, linkend, node["target"])
30
- capitalise_xref(node, linkend)
33
+ capitalise_xref(node, linkend, anchor_value(node["target"]))
31
34
  end
32
35
 
33
- def capitalise_xref(node, linkend)
34
- return linkend unless %w(Latn Cyrl Grek).include? @script
35
- return linkend&.capitalize if node["case"] == "capital"
36
- return linkend&.downcase if node["case"] == "lowercase"
37
- return linkend if linkend[0, 1].match?(/\p{Upper}/)
36
+ def capitalise_xref(node, linkend, label)
37
+ linktext = linkend.gsub(/<[^>]+>/, "")
38
+ (label && !label.empty? && /^#{Regexp.escape(label)}/.match?(linktext) ||
39
+ linktext[0, 1].match?(/\p{Upper}/)) and return linkend
40
+ node["case"] and
41
+ return Common::case_with_markup(linkend, node["case"], @script)
38
42
 
39
43
  capitalise_xref1(node, linkend)
40
44
  end
@@ -43,7 +47,7 @@ module IsoDoc
43
47
  prec = nearest_block_parent(node).xpath("./descendant-or-self::text()") &
44
48
  node.xpath("./preceding::text()")
45
49
  if prec.empty? || /(?!<[^.].)\.\s+$/.match(prec.map(&:text).join)
46
- linkend&.capitalize
50
+ Common::case_with_markup(linkend, "capital", @script)
47
51
  else linkend
48
52
  end
49
53
  end
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "1.7.6.1".freeze
2
+ VERSION = "1.7.7".freeze
3
3
  end
@@ -1,160 +1,165 @@
1
- module IsoDoc::XrefGen
2
- module Sections
3
- def back_anchor_names(docxml)
4
- i = Counter.new("@")
5
- docxml.xpath(ns("//annex")).each do |c|
6
- i.increment(c)
7
- annex_names(c, i.print)
1
+ module IsoDoc
2
+ module XrefGen
3
+ module Sections
4
+ def back_anchor_names(docxml)
5
+ i = Counter.new("@")
6
+ docxml.xpath(ns("//annex")).each do |c|
7
+ i.increment(c)
8
+ annex_names(c, i.print)
9
+ end
10
+ docxml.xpath(ns(@klass.bibliography_xpath)).each do |b|
11
+ preface_names(b)
12
+ end
13
+ docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
14
+ reference_names(ref)
15
+ end
8
16
  end
9
- docxml.xpath(ns(@klass.bibliography_xpath)).each do |b|
10
- preface_names(b)
17
+
18
+ def initial_anchor_names(doc)
19
+ doc.xpath(ns("//preface/*")).each do |c|
20
+ c.element? and preface_names(c)
21
+ end
22
+ # potentially overridden in middle_section_asset_names()
23
+ sequential_asset_names(doc.xpath(ns("//preface/*")))
24
+ n = Counter.new
25
+ n = section_names(doc.at(ns("//clause[@type = 'scope']")), n, 1)
26
+ n = section_names(doc.at(ns(@klass.norm_ref_xpath)), n, 1)
27
+ n = section_names(doc.at(ns("//sections/terms | "\
28
+ "//sections/clause[descendant::terms]")), n, 1)
29
+ n = section_names(doc.at(ns("//sections/definitions")), n, 1)
30
+ clause_names(doc, n)
31
+ middle_section_asset_names(doc)
32
+ termnote_anchor_names(doc)
33
+ termexample_anchor_names(doc)
11
34
  end
12
- docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
13
- reference_names(ref)
35
+
36
+ def preface_clause_name(clause)
37
+ clause.at(ns("./title"))&.text || clause.name.capitalize
14
38
  end
15
- end
16
39
 
17
- def initial_anchor_names(doc)
18
- doc.xpath(ns("//preface/*")).each { |c| c.element? and preface_names(c) }
19
- # potentially overridden in middle_section_asset_names()
20
- sequential_asset_names(doc.xpath(ns("//preface/*")))
21
- n = Counter.new
22
- n = section_names(doc.at(ns("//clause[@type = 'scope']")), n, 1)
23
- n = section_names(doc.at(ns(@klass.norm_ref_xpath)), n, 1)
24
- n = section_names(doc.at(ns("//sections/terms | "\
25
- "//sections/clause[descendant::terms]")), n, 1)
26
- n = section_names(doc.at(ns("//sections/definitions")), n, 1)
27
- clause_names(doc, n)
28
- middle_section_asset_names(doc)
29
- termnote_anchor_names(doc)
30
- termexample_anchor_names(doc)
31
- end
40
+ SUBCLAUSES =
41
+ "./clause | ./references | ./term | ./terms | ./definitions".freeze
32
42
 
33
- def preface_clause_name(clause)
34
- clause.at(ns("./title"))&.text || clause.name.capitalize
35
- end
43
+ # in StanDoc, prefaces have no numbering; they are referenced only by title
44
+ def preface_names(clause)
45
+ return if clause.nil?
36
46
 
37
- SUBCLAUSES =
38
- "./clause | ./references | ./term | ./terms | ./definitions".freeze
47
+ @anchors[clause["id"]] =
48
+ { label: nil, level: 1, xref: preface_clause_name(clause),
49
+ type: "clause" }
50
+ clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
51
+ preface_names1(c, c.at(ns("./title"))&.text,
52
+ "#{preface_clause_name(clause)}, #{i + 1}", 2)
53
+ end
54
+ end
39
55
 
40
- # in StanDoc, prefaces have no numbering; they are referenced only by title
41
- def preface_names(clause)
42
- return if clause.nil?
56
+ def preface_names1(clause, title, parent_title, level)
57
+ label = title || parent_title
58
+ @anchors[clause["id"]] =
59
+ { label: nil, level: level, xref: label, type: "clause" }
60
+ clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
61
+ preface_names1(c, c.at(ns("./title"))&.text, "#{label} #{i + 1}",
62
+ level + 1)
63
+ end
64
+ end
43
65
 
44
- @anchors[clause["id"]] =
45
- { label: nil, level: 1, xref: preface_clause_name(clause),
46
- type: "clause" }
47
- clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
48
- preface_names1(c, c.at(ns("./title"))&.text,
49
- "#{preface_clause_name(clause)}, #{i + 1}", 2)
66
+ def middle_section_asset_names(doc)
67
+ middle_sections = "//clause[@type = 'scope'] | "\
68
+ "#{@klass.norm_ref_xpath} | "\
69
+ "//sections/terms | //preface/* | "\
70
+ "//sections/definitions | //clause[parent::sections]"
71
+ sequential_asset_names(doc.xpath(ns(middle_sections)))
50
72
  end
51
- end
52
73
 
53
- def preface_names1(clause, title, parent_title, level)
54
- label = title || parent_title
55
- @anchors[clause["id"]] =
56
- { label: nil, level: level, xref: label, type: "clause" }
57
- clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
58
- preface_names1(c, c.at(ns("./title"))&.text, "#{label} #{i + 1}",
59
- level + 1)
74
+ def clause_names(docxml, num)
75
+ docxml.xpath(ns(@klass.middle_clause(docxml))).each_with_index do |c, _i|
76
+ section_names(c, num, 1)
77
+ end
60
78
  end
61
- end
62
79
 
63
- def middle_section_asset_names(doc)
64
- middle_sections = "//clause[@type = 'scope'] | "\
65
- "#{@klass.norm_ref_xpath} | "\
66
- "//sections/terms | //preface/* | "\
67
- "//sections/definitions | //clause[parent::sections]"
68
- sequential_asset_names(doc.xpath(ns(middle_sections)))
69
- end
80
+ def section_names(clause, num, lvl)
81
+ return num if clause.nil?
70
82
 
71
- def clause_names(docxml, num)
72
- docxml.xpath(ns(@klass.middle_clause(docxml))).each_with_index do |c, _i|
73
- section_names(c, num, 1)
83
+ num.increment(clause)
84
+ @anchors[clause["id"]] =
85
+ { label: num.print, xref: l10n("#{@labels['clause']} #{num.print}"),
86
+ level: lvl, type: "clause" }
87
+ i = Counter.new
88
+ clause.xpath(ns(SUBCLAUSES)).each do |c|
89
+ i.increment(c)
90
+ section_names1(c, "#{num.print}.#{i.print}", lvl + 1)
91
+ end
92
+ num
74
93
  end
75
- end
76
94
 
77
- def section_names(clause, num, lvl)
78
- return num if clause.nil?
79
-
80
- num.increment(clause)
81
- @anchors[clause["id"]] =
82
- { label: num.print, xref: l10n("#{@labels['clause']} #{num.print}"),
83
- level: lvl, type: "clause" }
84
- i = Counter.new
85
- clause.xpath(ns(SUBCLAUSES)).each do |c|
86
- i.increment(c)
87
- section_names1(c, "#{num.print}.#{i.print}", lvl + 1)
95
+ def section_names1(clause, num, level)
96
+ @anchors[clause["id"]] =
97
+ { label: num, level: level, xref: l10n("#{@labels['clause']} #{num}"),
98
+ type: "clause" }
99
+ i = Counter.new
100
+ clause.xpath(ns(SUBCLAUSES)).each do |c|
101
+ i.increment(c)
102
+ section_names1(c, "#{num}.#{i.print}", level + 1)
103
+ end
88
104
  end
89
- num
90
- end
91
105
 
92
- def section_names1(clause, num, level)
93
- @anchors[clause["id"]] =
94
- { label: num, level: level, xref: l10n("#{@labels['clause']} #{num}"),
95
- type: "clause" }
96
- i = Counter.new
97
- clause.xpath(ns(SUBCLAUSES)).each do |c|
98
- i.increment(c)
99
- section_names1(c, "#{num}.#{i.print}", level + 1)
106
+ def annex_name_lbl(clause, num)
107
+ obl = l10n("(#{@labels['inform_annex']})")
108
+ clause["obligation"] == "normative" and
109
+ obl = l10n("(#{@labels['norm_annex']})")
110
+ title = Common::case_with_markup(@labels["annex"], "capital", @script)
111
+ l10n("<strong>#{title} #{num}</strong><br/>#{obl}")
100
112
  end
101
- end
102
113
 
103
- def annex_name_lbl(clause, num)
104
- obl = l10n("(#{@labels['inform_annex']})")
105
- clause["obligation"] == "normative" and
106
- obl = l10n("(#{@labels['norm_annex']})")
107
- l10n("<strong>#{@labels['annex']} #{num}</strong><br/>#{obl}")
108
- end
114
+ def single_annex_special_section(clause)
115
+ a = clause.xpath(ns("./references | ./terms | ./definitions"))
116
+ a.size == 1 or return nil
117
+ clause.xpath(ns("./clause | ./p | ./table | ./ol | ./ul | ./dl | "\
118
+ "./note | ./admonition | ./figure")).empty? or
119
+ return nil
120
+ a[0]
121
+ end
109
122
 
110
- def single_annex_special_section(clause)
111
- a = clause.xpath(ns("./references | ./terms | ./definitions"))
112
- a.size == 1 or return nil
113
- clause.xpath(ns("./clause | ./p | ./table | ./ol | ./ul | ./dl | "\
114
- "./note | ./admonition | ./figure")).empty? or
115
- return nil
116
- a[0]
117
- end
123
+ def annex_names(clause, num)
124
+ @anchors[clause["id"]] = { label: annex_name_lbl(clause, num),
125
+ type: "clause", value: num.to_s, level: 1,
126
+ xref: "#{@labels['annex']} #{num}" }
127
+ if a = single_annex_special_section(clause)
128
+ annex_names1(a, num.to_s, 1)
129
+ else
130
+ i = Counter.new
131
+ clause.xpath(ns(SUBCLAUSES)).each do |c|
132
+ i.increment(c)
133
+ annex_names1(c, "#{num}.#{i.print}", 2)
134
+ end
135
+ end
136
+ hierarchical_asset_names(clause, num)
137
+ end
118
138
 
119
- def annex_names(clause, num)
120
- @anchors[clause["id"]] = { label: annex_name_lbl(clause, num),
121
- type: "clause", value: num.to_s,
122
- xref: "#{@labels['annex']} #{num}", level: 1 }
123
- if a = single_annex_special_section(clause)
124
- annex_names1(a, num.to_s, 1)
125
- else
139
+ def annex_names1(clause, num, level)
140
+ @anchors[clause["id"]] = { xref: "#{@labels['annex']} #{num}",
141
+ label: num, level: level, type: "clause" }
126
142
  i = Counter.new
127
143
  clause.xpath(ns(SUBCLAUSES)).each do |c|
128
144
  i.increment(c)
129
- annex_names1(c, "#{num}.#{i.print}", 2)
145
+ annex_names1(c, "#{num}.#{i.print}", level + 1)
130
146
  end
131
147
  end
132
- hierarchical_asset_names(clause, num)
133
- end
134
148
 
135
- def annex_names1(clause, num, level)
136
- @anchors[clause["id"]] = { label: num, xref: "#{@labels['annex']} #{num}",
137
- level: level, type: "clause" }
138
- i = Counter.new
139
- clause.xpath(ns(SUBCLAUSES)).each do |c|
140
- i.increment(c)
141
- annex_names1(c, "#{num}.#{i.print}", level + 1)
149
+ ISO_PUBLISHER_XPATH =
150
+ "./contributor[xmlns:role/@type = 'publisher']/"\
151
+ "organization[abbreviation = 'ISO' or xmlns:abbreviation = 'IEC' or "\
152
+ "xmlns:name = 'International Organization for Standardization' or "\
153
+ "xmlns:name = 'International Electrotechnical Commission']".freeze
154
+
155
+ def reference_names(ref)
156
+ # isopub = ref.at(ns(ISO_PUBLISHER_XPATH))
157
+ ids = @klass.bibitem_ref_code(ref)
158
+ identifiers = @klass.render_identifier(ids)
159
+ # date = ref.at(ns("./date[@type = 'published']"))
160
+ reference = @klass.docid_l10n(identifiers[0] || identifiers[1])
161
+ @anchors[ref["id"]] = { xref: reference }
142
162
  end
143
163
  end
144
-
145
- ISO_PUBLISHER_XPATH =
146
- "./contributor[xmlns:role/@type = 'publisher']/"\
147
- "organization[abbreviation = 'ISO' or xmlns:abbreviation = 'IEC' or "\
148
- "xmlns:name = 'International Organization for Standardization' or "\
149
- "xmlns:name = 'International Electrotechnical Commission']".freeze
150
-
151
- def reference_names(ref)
152
- # isopub = ref.at(ns(ISO_PUBLISHER_XPATH))
153
- ids = @klass.bibitem_ref_code(ref)
154
- identifiers = @klass.render_identifier(ids)
155
- # date = ref.at(ns("./date[@type = 'published']"))
156
- reference = @klass.docid_l10n(identifiers[0] || identifiers[1])
157
- @anchors[ref["id"]] = { xref: reference }
158
- end
159
164
  end
160
165
  end
@@ -20,12 +20,13 @@ module IsoDoc
20
20
  end
21
21
 
22
22
  def pdf_options(_docxml)
23
- if font_manifest_file = @options.dig(MN2PDF_OPTIONS,
24
- MN2PDF_FONT_MANIFEST)
25
- "--font-manifest #{font_manifest_file}"
26
- else
27
- ""
28
- end
23
+ ret = ""
24
+ font_manifest_file = @options.dig(MN2PDF_OPTIONS,
25
+ MN2PDF_FONT_MANIFEST) and
26
+ ret += " --font-manifest #{font_manifest_file}"
27
+ @aligncrosselements && !@aligncrosselements.empty? and
28
+ ret += %( --param align-cross-elements = "#{@aligncrosselements.gsub(/,/, ' ')}")
29
+ ret
29
30
  end
30
31
 
31
32
  def convert(input_filename, file = nil, debug = false,
@@ -6,12 +6,14 @@ source: SOURCE
6
6
  modified: modified
7
7
  scope: Amplekso
8
8
  symbols: Simboloj kai mallongigitaj terminoj
9
- annex: Aldono
9
+ annex: <strong>aldono</strong>
10
10
  normref: Normaj citaĵoj
11
11
  bibliography: Bibliografio
12
12
  inform_annex: informa
13
13
  all_parts: ĉiuj partoj
14
14
  norm_annex: normative
15
+ figure: figur-etikedo duvorta
16
+ example: Ekzempl-etikedo Duvorta
15
17
  note: NOTO
16
18
  locality: {
17
19
  table: Tabelo
@@ -877,7 +877,7 @@ RSpec.describe IsoDoc do
877
877
  <ext>
878
878
  <doctype language="">brochure</doctype><doctype language="eo">bro&#x15D;uro</doctype>
879
879
  </ext>
880
- </bibdata><localized-strings><localized-string key="foreword" language="eo">Anta&#x16D;parolo</localized-string><localized-string key="introduction" language="eo">Enkonduko</localized-string><localized-string key="clause" language="eo">kla&#x16D;zo</localized-string><localized-string key="table" language="eo">tabelo</localized-string><localized-string key="source" language="eo">SOURCE</localized-string><localized-string key="modified" language="eo">modified</localized-string><localized-string key="scope" language="eo">Amplekso</localized-string><localized-string key="symbols" language="eo">Simboloj kai mallongigitaj terminoj</localized-string><localized-string key="annex" language="eo">Aldono</localized-string><localized-string key="normref" language="eo">Normaj cita&#x135;oj</localized-string><localized-string key="bibliography" language="eo">Bibliografio</localized-string><localized-string key="inform_annex" language="eo">informa</localized-string><localized-string key="all_parts" language="eo">&#x109;iuj partoj</localized-string><localized-string key="norm_annex" language="eo">normative</localized-string><localized-string key="note" language="eo">NOTO</localized-string><localized-string key="locality.table" language="eo">Tabelo</localized-string><localized-string key="doctype_dict.brochure" language="eo">bro&#x15D;uro</localized-string><localized-string key="doctype_dict.conference_proceedings" language="eo">konferencaktoj</localized-string><localized-string key="stage_dict.published" language="eo">publikigita</localized-string><localized-string key="substage_dict.withdrawn" language="eo">fortirita</localized-string><localized-string key="array.0" language="eo">elem1</localized-string><localized-string key="array.1" language="eo">elem2</localized-string><localized-string key="array.2.elem3" language="eo">elem4</localized-string><localized-string key="array.2.elem5" language="eo">elem6</localized-string><localized-string key="language" language="eo">eo</localized-string><localized-string key="script" language="eo">Latn</localized-string></localized-strings>
880
+ </bibdata><localized-strings><localized-string key="foreword" language="eo">Anta&#x16D;parolo</localized-string><localized-string key="introduction" language="eo">Enkonduko</localized-string><localized-string key="clause" language="eo">kla&#x16D;zo</localized-string><localized-string key="table" language="eo">tabelo</localized-string><localized-string key="source" language="eo">SOURCE</localized-string><localized-string key="modified" language="eo">modified</localized-string><localized-string key="scope" language="eo">Amplekso</localized-string><localized-string key="symbols" language="eo">Simboloj kai mallongigitaj terminoj</localized-string><localized-string key="annex" language="eo"><strong>aldono</strong></localized-string><localized-string key="normref" language="eo">Normaj cita&#x135;oj</localized-string><localized-string key="bibliography" language="eo">Bibliografio</localized-string><localized-string key="inform_annex" language="eo">informa</localized-string><localized-string key="all_parts" language="eo">&#x109;iuj partoj</localized-string><localized-string key="norm_annex" language="eo">normative</localized-string><localized-string key='figure' language='eo'>figur-etikedo duvorta</localized-string><localized-string key='example' language='eo'>Ekzempl-etikedo Duvorta</localized-string><localized-string key="note" language="eo">NOTO</localized-string><localized-string key="locality.table" language="eo">Tabelo</localized-string><localized-string key="doctype_dict.brochure" language="eo">bro&#x15D;uro</localized-string><localized-string key="doctype_dict.conference_proceedings" language="eo">konferencaktoj</localized-string><localized-string key="stage_dict.published" language="eo">publikigita</localized-string><localized-string key="substage_dict.withdrawn" language="eo">fortirita</localized-string><localized-string key="array.0" language="eo">elem1</localized-string><localized-string key="array.1" language="eo">elem2</localized-string><localized-string key="array.2.elem3" language="eo">elem4</localized-string><localized-string key="array.2.elem5" language="eo">elem6</localized-string><localized-string key="language" language="eo">eo</localized-string><localized-string key="script" language="eo">Latn</localized-string></localized-strings>
881
881
  <preface>
882
882
  <foreword obligation="informative" displayorder="1">
883
883
  <title>Foreword</title>
@@ -920,7 +920,7 @@ RSpec.describe IsoDoc do
920
920
  <title depth="2">5.2.<tab/>Clause 4.2</title>
921
921
  </clause></clause>
922
922
  </sections><annex id="P" inline-header="false" obligation="normative" displayorder="8">
923
- <title><strong>Aldono A</strong><br/>(normative)<br/><br/><strong>Annex</strong></title>
923
+ <title><strong><strong>Aldono</strong> A</strong><br/>(normative)<br/><br/><strong>Annex</strong></title>
924
924
  <clause id="Q" inline-header="false" obligation="normative">
925
925
  <title depth="2">A.1.<tab/>Annex A.1</title>
926
926
  <clause id="Q1" inline-header="false" obligation="normative">
@@ -1041,7 +1041,7 @@ RSpec.describe IsoDoc do
1041
1041
  <br/>
1042
1042
  <div id='P' class='Section3'>
1043
1043
  <h1 class='Annex'>
1044
- <b>Aldono A</b>
1044
+ <b><b>Aldono</b> A</b>
1045
1045
  <br/>
1046
1046
  (normative)
1047
1047
  <br/>
@@ -1505,6 +1505,122 @@ RSpec.describe IsoDoc do
1505
1505
  end
1506
1506
 
1507
1507
  it "cases xrefs" do
1508
+ input = <<~INPUT
1509
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
1510
+ <preface>
1511
+ <clause id="CC"><title>Introduction</title></clause>
1512
+ <sections>
1513
+ <clause id="A">
1514
+ <table id="B">
1515
+ </table>
1516
+ <figure id="B1"/>
1517
+ <example id="B2"/>
1518
+ </clause>
1519
+ <clause id="C">
1520
+ <p>This is <xref target="A"/> and <xref target="B"/>.
1521
+ This is <xref target="A" case="capital"/> and <xref target="B" case="lowercase"/>.
1522
+ This is <xref target="A" case="lowercase"/> and <xref target="B" case="capital"/>.
1523
+ Downcasing an xref affects only the first letter: <xref target="B2" case="lowercase"/>.
1524
+ Capitalising an xref affects only the first letter: <xref target="B1" case="capital"/>.
1525
+ <xref target="A"/> is clause <em>initial.</em><br/>
1526
+ <xref target="A"/> is too. </p>
1527
+ <p><xref target="A"/> is also.</p>
1528
+ <p>Annex has formatting, and crossreferences ignore it when determining casing. <xref target="AA"/>.</p>
1529
+ <p>Labels are not subject to casing: <xref target="CC" case="lowercase"/>
1530
+ </clause>
1531
+ <annex id="AA">
1532
+ <clause id="AA1"/>
1533
+ </annex>
1534
+ </sections>
1535
+ </iso-standard>
1536
+ INPUT
1537
+ output = <<~OUTPUT
1538
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
1539
+ <preface>
1540
+ <clause id='CC' displayorder='1'>
1541
+ <title depth='1'>Introduction</title>
1542
+ </clause>
1543
+ <sections displayorder='2'>
1544
+ <clause id='A' displayorder='3'>
1545
+ <title>1.</title>
1546
+ <table id='B'>
1547
+ <name>Tabelo 1</name>
1548
+ </table>
1549
+ <figure id='B1'>
1550
+ <name>Figur-etikedo duvorta 1</name>
1551
+ </figure>
1552
+ <example id='B2'>
1553
+ <name>Ekzempl-etikedo Duvorta</name>
1554
+ </example>
1555
+ </clause>
1556
+ <clause id='C' displayorder='4'>
1557
+ <title>2.</title>
1558
+ <p>
1559
+ This is
1560
+ <xref target='A'>kla&#x16D;zo 1</xref>
1561
+ and
1562
+ <xref target='B'>tabelo 1</xref>
1563
+ . This is
1564
+ <xref target='A' case='capital'>Kla&#x16D;zo 1</xref>
1565
+ and
1566
+ <xref target='B' case='lowercase'>tabelo 1</xref>
1567
+ . This is
1568
+ <xref target='A' case='lowercase'>kla&#x16D;zo 1</xref>
1569
+ and
1570
+ <xref target='B' case='capital'>Tabelo 1</xref>
1571
+ . Downcasing an xref affects only the first letter:
1572
+ <xref target='B2' case='lowercase'>kla&#x16D;zo 1, Example</xref>
1573
+ . Capitalising an xref affects only the first letter:
1574
+ <xref target='B1' case='capital'>Figur-etikedo duvorta 1</xref>
1575
+ .
1576
+ <xref target='A'>Kla&#x16D;zo 1</xref>
1577
+ is clause
1578
+ <em>initial.</em>
1579
+ <br/>
1580
+ <xref target='A'>Kla&#x16D;zo 1</xref>
1581
+ is too.
1582
+ </p>
1583
+ <p>
1584
+ <xref target='A'>Kla&#x16D;zo 1</xref>
1585
+ is also.
1586
+ </p>
1587
+ <p>
1588
+ Annex has formatting, and crossreferences ignore it when determining
1589
+ casing.
1590
+ <xref target='AA'>
1591
+ <strong>Aldono</strong>
1592
+ A
1593
+ </xref>
1594
+ .
1595
+ </p>
1596
+ <p>
1597
+ Labels are not subject to casing:
1598
+ <xref target='CC' case='lowercase'>Introduction</xref>
1599
+ </p>
1600
+ <annex id='AA' displayorder='5'>
1601
+ <title>
1602
+ <strong>
1603
+ <strong>Aldono</strong>
1604
+ A
1605
+ </strong>
1606
+ <br/>
1607
+ (informa)
1608
+ </title>
1609
+ <clause id='AA1'>
1610
+ <title>A.1.</title>
1611
+ </clause>
1612
+ </annex>
1613
+ </clause>
1614
+ </sections>
1615
+ </preface>
1616
+ </iso-standard>
1617
+ OUTPUT
1618
+ expect(xmlpp(IsoDoc::PresentationXMLConvert
1619
+ .new({ i18nyaml: "spec/assets/i18n.yaml" })
1620
+ .convert("test", input, true))).to be_equivalent_to xmlpp(output)
1621
+ end
1622
+
1623
+ it "ignores casing of xrefs in unicameral scripts" do
1508
1624
  input = <<~INPUT
1509
1625
  <iso-standard xmlns="http://riboseinc.com/isoxml">
1510
1626
  <sections>
@@ -1541,23 +1657,23 @@ RSpec.describe IsoDoc do
1541
1657
  and
1542
1658
  <xref target='B'>tabelo 1</xref>
1543
1659
  . This is
1544
- <xref target='A' case='capital'>Kla&#x16D;zo 1</xref>
1660
+ <xref target='A' case='capital'>kla&#x16D;zo 1</xref>
1545
1661
  and
1546
1662
  <xref target='B' case='lowercase'>tabelo 1</xref>
1547
1663
  . This is
1548
1664
  <xref target='A' case='lowercase'>kla&#x16D;zo 1</xref>
1549
1665
  and
1550
- <xref target='B' case='capital'>Tabelo 1</xref>
1666
+ <xref target='B' case='capital'>tabelo 1</xref>
1551
1667
  .
1552
- <xref target='A'>Kla&#x16D;zo 1</xref>
1668
+ <xref target='A'>kla&#x16D;zo 1</xref>
1553
1669
  is clause
1554
1670
  <em>initial.</em>
1555
1671
  <br/>
1556
- <xref target='A'>Kla&#x16D;zo 1</xref>
1672
+ <xref target='A'>kla&#x16D;zo 1</xref>
1557
1673
  is too.
1558
1674
  </p>
1559
1675
  <p>
1560
- <xref target='A'>Kla&#x16D;zo 1</xref>
1676
+ <xref target='A'>kla&#x16D;zo 1</xref>
1561
1677
  is also.
1562
1678
  </p>
1563
1679
  </clause>
@@ -1565,7 +1681,7 @@ RSpec.describe IsoDoc do
1565
1681
  </iso-standard>
1566
1682
  OUTPUT
1567
1683
  expect(xmlpp(IsoDoc::PresentationXMLConvert
1568
- .new({ i18nyaml: "spec/assets/i18n.yaml" })
1684
+ .new({ i18nyaml: "spec/assets/i18n.yaml", script: "Hans" })
1569
1685
  .convert("test", input, true))).to be_equivalent_to xmlpp(output)
1570
1686
  end
1571
1687
 
@@ -5,7 +5,7 @@ RSpec.describe IsoDoc do
5
5
  convert = IsoDoc::XslfoPdfConvert.new(
6
6
  {
7
7
  datauriimage: false,
8
- }
8
+ },
9
9
  )
10
10
 
11
11
  expect(convert.pdf_options(nil)).to eq("")
@@ -18,7 +18,7 @@ RSpec.describe IsoDoc do
18
18
  IsoDoc::XslfoPdfConvert::MN2PDF_OPTIONS => {
19
19
  IsoDoc::XslfoPdfConvert::MN2PDF_FONT_MANIFEST => nil,
20
20
  },
21
- }
21
+ },
22
22
  )
23
23
 
24
24
  expect(convert.pdf_options(nil)).to eq("")
@@ -31,9 +31,21 @@ RSpec.describe IsoDoc do
31
31
  IsoDoc::XslfoPdfConvert::MN2PDF_OPTIONS => {
32
32
  IsoDoc::XslfoPdfConvert::MN2PDF_FONT_MANIFEST => "/tmp/manifest.yml",
33
33
  },
34
- }
34
+ },
35
35
  )
36
36
 
37
- expect(convert.pdf_options(nil)).to eq("--font-manifest /tmp/manifest.yml")
37
+ expect(convert.pdf_options(nil)).to eq(" --font-manifest /tmp/manifest.yml")
38
+ end
39
+
40
+ it "test --param align-cross-elements pdf_options" do
41
+ convert = IsoDoc::XslfoPdfConvert.new(
42
+ {
43
+ datauriimage: false,
44
+ aligncrosselements: "clause table note",
45
+ },
46
+ )
47
+
48
+ expect(convert.pdf_options(nil))
49
+ .to eq(" --param align-cross-elements = \"clause table note\"")
38
50
  end
39
51
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isodoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.6.1
4
+ version: 1.7.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-27 00:00:00.000000000 Z
11
+ date: 2021-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciimath