metanorma-itu 2.0.2 → 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,6 +11,7 @@ module IsoDoc
11
11
  set(:logo_comb, fileloc("itu-document-comb.png"))
12
12
  set(:logo_word, fileloc(n))
13
13
  set(:logo_sp, fileloc("logo-sp.png"))
14
+ @isodoc = IsoDoc::ITU::HtmlConvert.new({})
14
15
  end
15
16
 
16
17
  def fileloc(file)
@@ -19,30 +20,30 @@ module IsoDoc
19
20
  end
20
21
 
21
22
  def title(isoxml, _out)
22
- main = isoxml&.at(ns("//bibdata/title[@language='#{@lang}']"\
23
- "[@type = 'main']"))&.text
24
- set(:doctitle, main)
25
- main = isoxml&.at(ns("//bibdata/title[@language='#{@lang}']"\
26
- "[@type = 'subtitle']"))&.text
27
- set(:docsubtitle, main)
28
- main = isoxml&.at(ns("//bibdata/title[@language='#{@lang}']"\
29
- "[@type = 'amendment']"))&.text
30
- set(:amendmenttitle, main)
31
- main = isoxml&.at(ns("//bibdata/title[@language='#{@lang}']"\
32
- "[@type = 'corrigendum']"))&.text
33
- set(:corrigendumtitle, main)
34
- series = isoxml&.at(ns("//bibdata/series[@type='main']/title"))&.text
35
- set(:series, series)
36
- series1 =
37
- isoxml&.at(ns("//bibdata/series[@type='secondary']/title"))&.text
38
- set(:series1, series1)
39
- series2 =
40
- isoxml&.at(ns("//bibdata/series[@type='tertiary']/title"))&.text
41
- set(:series2, series2)
42
- annext = isoxml&.at(ns("//bibdata/title[@type='annex']"))&.text
43
- set(:annextitle, annext)
44
- annext = isoxml&.at(ns("//bibdata/title[@type='position-sp']"))&.text
45
- set(:positiontitle, annext)
23
+ { doctitle: "//bibdata/title[@language='#{@lang}'][@type = 'main']",
24
+ docsubtitle: "//bibdata/title[@language='#{@lang}']"\
25
+ "[@type = 'subtitle']",
26
+ amendmenttitle: "//bibdata/title[@language='#{@lang}']"\
27
+ "[@type = 'amendment']",
28
+ corrigendumtitle: "//bibdata/title[@language='#{@lang}']"\
29
+ "[@type = 'corrigendum']",
30
+ series: "//bibdata/series[@type='main']/title",
31
+ series1: "//bibdata/series[@type='secondary']/title",
32
+ series2: "//bibdata/series[@type='tertiary']/title",
33
+ annextitle: "//bibdata/title[@type='annex']",
34
+ positiontitle: "//bibdata/title[@type='position-sp']" }.each do |k, v|
35
+ titleset(isoxml, k, v)
36
+ end
37
+ end
38
+
39
+ def titleset(isoxml, key, xpath)
40
+ value = isoxml.at(ns(xpath)) or return
41
+ out = @isodoc.noko do |xml|
42
+ xml.span do |s|
43
+ value.children.each { |c| @isodoc.parse(c, s) }
44
+ end
45
+ end.join
46
+ set(key, out.sub(%r{^<span>}, "").sub(%r{</span>$}, ""))
46
47
  end
47
48
 
48
49
  def subtitle(_isoxml, _out)
@@ -174,6 +174,19 @@ module IsoDoc
174
174
  t.children = "<strong>#{t.children.to_xml}</strong>"
175
175
  end
176
176
 
177
+ def ol_depth(node)
178
+ return super unless node["class"] == "steps" ||
179
+ node.at(".//ancestor::xmlns:ol[@class = 'steps']")
180
+
181
+ depth = node.ancestors("ul, ol").size + 1
182
+ type = :arabic
183
+ type = :alphabet if [2, 7].include? depth
184
+ type = :roman if [3, 8].include? depth
185
+ type = :alphabet_upper if [4, 9].include? depth
186
+ type = :roman_upper if [5, 10].include? depth
187
+ type
188
+ end
189
+
177
190
  include Init
178
191
  end
179
192
  end
@@ -44,24 +44,26 @@ module IsoDoc
44
44
  end
45
45
  end
46
46
 
47
- def bracket_if_num(x)
48
- return nil if x.nil?
47
+ def bracket_if_num(num)
48
+ return nil if num.nil?
49
49
 
50
- x = x.text.sub(/^\[/, "").sub(/\]$/, "")
51
- "[#{x}]"
50
+ num = num.text.sub(/^\[/, "").sub(/\]$/, "")
51
+ "[#{num}]"
52
52
  end
53
53
 
54
- def reference_format(b, r)
55
- reference_format_start(b, r)
56
- reference_format_title(b, r)
54
+ def reference_format(biblio, ref)
55
+ reference_format_start(biblio, ref)
56
+ reference_format_title(biblio, ref)
57
57
  end
58
58
 
59
- def titlecase(s)
60
- s.gsub(/ |_|-/, " ").split(/ /).map(&:capitalize).join(" ")
59
+ def titlecase(str)
60
+ str.gsub(/ |_|-/, " ").split(/ /).map(&:capitalize).join(" ")
61
61
  end
62
62
 
63
- def pref_ref_code(b)
64
- b.at(ns("./docidentifier[@type = 'ITU']")) || super
63
+ def pref_ref_code(bibitem)
64
+ ret = bibitem.xpath(ns("./docidentifier[@type = 'ITU']"))
65
+ ret.empty? and ret = super
66
+ ret
65
67
  end
66
68
 
67
69
  IGNORE_IDS = "@type = 'DOI' or @type = 'ISSN' or @type = 'ISBN' or "\
@@ -84,7 +86,7 @@ module IsoDoc
84
86
  else
85
87
  docid_prefix(id["type"], id.text.sub(/^\[/, "").sub(/\]$/, ""))
86
88
  end
87
- end.join(" | ")
89
+ end.join("&#xA0;| ")
88
90
  end
89
91
 
90
92
  def doctype_title(id)
@@ -98,20 +100,28 @@ module IsoDoc
98
100
  end
99
101
  end
100
102
 
101
- def reference_format_start(b, r)
102
- id = multi_bibitem_ref_code(b)
103
+ def unbracket(ident)
104
+ if ident.respond_to?(:size)
105
+ ident.map { |x| unbracket1(x) }.join("&#xA0;| ")
106
+ else
107
+ unbracket1(ident)
108
+ end
109
+ end
110
+
111
+ def reference_format_start(bib, r)
112
+ id = multi_bibitem_ref_code(bib)
103
113
  id1 = render_multi_identifiers(id)
104
114
  r << id1
105
- date = b.at(ns("./date[@type = 'published']")) and
115
+ date = bib.at(ns("./date[@type = 'published']")) and
106
116
  r << " (#{date.text.sub(/-.*$/, '')})"
107
117
  r << ", " if date || !id1.empty?
108
118
  end
109
119
 
110
- def reference_format_title(b, r)
111
- if ftitle = b.at(ns("./formattedref"))
120
+ def reference_format_title(bib, r)
121
+ if ftitle = bib.at(ns("./formattedref"))
112
122
  ftitle&.children&.each { |n| parse(n, r) }
113
123
  /\.$/.match(ftitle&.text) or r << "."
114
- elsif title = iso_title(b)
124
+ elsif title = iso_title(bib)
115
125
  r.i do |i|
116
126
  title&.children&.each { |n| parse(n, i) }
117
127
  end
@@ -23,7 +23,7 @@ module IsoDoc
23
23
 
24
24
  def make_body2(body, docxml)
25
25
  body.div **{ class: "WordSection2" } do |div2|
26
- info docxml, div2
26
+ info docxml, div2
27
27
  boilerplate docxml, div2
28
28
  preface_block docxml, div2
29
29
  abstract docxml, div2
@@ -46,14 +46,14 @@ module IsoDoc
46
46
  kw = @meta.get[:keywords]
47
47
  kw.nil? || kw.empty? and return
48
48
  out.div **attr_code(class: "Keyword") do |div|
49
- clause_name(nil, "Keywords", div, class: "IntroTitle")
49
+ clause_name(nil, "Keywords", div, class: "IntroTitle")
50
50
  div.p kw.join(", ") + "."
51
51
  end
52
52
  end
53
53
 
54
54
  def formula_parse1(node, out)
55
55
  out.div **attr_code(class: "formula") do |div|
56
- div.p **attr_code(class: "formula") do |p|
56
+ div.p **attr_code(class: "formula") do |_p|
57
57
  insert_tab(div, 1)
58
58
  parse(node.at(ns("./stem")), div)
59
59
  if lbl = node&.at(ns("./name"))&.text
@@ -74,29 +74,34 @@ module IsoDoc
74
74
  end
75
75
 
76
76
  def default_fonts(options)
77
- { bodyfont: (options[:script] == "Hans" ? '"Source Han Sans",serif' :
78
- '"Times New Roman",serif'),
79
- headerfont: (options[:script] == "Hans" ? '"Source Han Sans",sans-serif' :
80
- '"Times New Roman",serif'),
81
- monospacefont: '"Courier New",monospace',
82
- normalfontsize: "12.0pt",
83
- footnotefontsize: "11.0pt",
84
- smallerfontsize: "11.0pt",
85
- monospacefontsize: "10.0pt",
86
- }
77
+ { bodyfont: (if options[:script] == "Hans"
78
+ '"Source Han Sans",serif'
79
+ else
80
+ '"Times New Roman",serif'
81
+ end),
82
+ headerfont: (if options[:script] == "Hans"
83
+ '"Source Han Sans",sans-serif'
84
+ else
85
+ '"Times New Roman",serif'
86
+ end),
87
+ monospacefont: '"Courier New",monospace',
88
+ normalfontsize: "12.0pt",
89
+ footnotefontsize: "11.0pt",
90
+ smallerfontsize: "11.0pt",
91
+ monospacefontsize: "10.0pt" }
87
92
  end
88
93
 
89
- def default_file_locations(options)
94
+ def default_file_locations(_options)
90
95
  { wordstylesheet: html_doc_path("wordstyle.scss"),
91
96
  standardstylesheet: html_doc_path("itu.scss"),
92
97
  header: html_doc_path("header.html"),
93
98
  wordcoverpage: html_doc_path("word_itu_titlepage.html"),
94
99
  wordintropage: html_doc_path("word_itu_intro.html"),
95
100
  ulstyle: "l3",
96
- olstyle: "l2", }
101
+ olstyle: "l2" }
97
102
  end
98
103
 
99
- def make_tr_attr(td, row, totalrows, header)
104
+ def make_tr_attr(tcell, row, totalrows, header)
100
105
  super.merge(valign: "top")
101
106
  end
102
107
 
@@ -105,7 +110,7 @@ module IsoDoc
105
110
  end
106
111
 
107
112
  def link_parse(node, out)
108
- out.a **attr_code(href: node["target"], title: node["alt"],
113
+ out.a **attr_code(href: node["target"], title: node["alt"],
109
114
  class: "url") do |l|
110
115
  if node.text.empty?
111
116
  l << node["target"].sub(/^mailto:/, "")
@@ -16,11 +16,16 @@ module IsoDoc
16
16
  end
17
17
  end
18
18
 
19
- def annex_names(clause, num)
19
+ def annex_name_anchors(clause, num)
20
20
  lbl = annextype(clause)
21
- @anchors[clause["id"]] =
22
- { label: annex_name_lbl(clause, num), type: "clause",
23
- xref: l10n("#{lbl} #{num}"), level: 1, value: num }
21
+ { label: annex_name_lbl(clause, num),
22
+ elem: lbl,
23
+ type: "clause", value: num.to_s, level: 1,
24
+ xref: l10n("#{lbl} #{num}") }
25
+ end
26
+
27
+ def annex_names(clause, num)
28
+ @anchors[clause["id"]] = annex_name_anchors(clause, num)
24
29
  if a = single_annex_special_section(clause)
25
30
  annex_names1(a, num.to_s, 1)
26
31
  else
@@ -36,7 +41,7 @@ module IsoDoc
36
41
 
37
42
  def annex_names1(clause, num, level)
38
43
  @anchors[clause["id"]] =
39
- { label: num,
44
+ { label: num, elem: @labels["annex_subclause"],
40
45
  xref: @doctype == "resolution" ? num : l10n("#{@labels['annex_subclause']} #{num}"),
41
46
  level: level, type: "clause" }
42
47
  i = Counter.new
@@ -65,7 +70,7 @@ module IsoDoc
65
70
  lbl = @doctype == "resolution" ? @labels["section"] : @labels["clause"]
66
71
  @anchors[clause["id"]] =
67
72
  { label: num.print, xref: l10n("#{lbl} #{num.print}"),
68
- level: lvl, type: "clause" }
73
+ level: lvl, type: "clause", elem: lbl }
69
74
  i = Counter.new
70
75
  clause.xpath(ns(SUBCLAUSES)).each do |c|
71
76
  i.increment(c)
@@ -77,6 +82,7 @@ module IsoDoc
77
82
  def section_names1(clause, num, level)
78
83
  @anchors[clause["id"]] =
79
84
  { label: num, level: level,
85
+ elem: @doctype == "resolution" ? "" : @labels["clause"],
80
86
  xref: @doctype == "resolution" ? num : l10n("#{@labels['clause']} #{num}") }
81
87
  i = Counter.new
82
88
  clause.xpath(ns(SUBCLAUSES)).each do |c|
@@ -173,9 +173,11 @@
173
173
  <data type="dateTime"/>
174
174
  </attribute>
175
175
  </optional>
176
- <attribute name="from">
177
- <data type="IDREF"/>
178
- </attribute>
176
+ <optional>
177
+ <attribute name="from">
178
+ <data type="IDREF"/>
179
+ </attribute>
180
+ </optional>
179
181
  <optional>
180
182
  <attribute name="to">
181
183
  <data type="IDREF"/>
@@ -209,9 +209,6 @@
209
209
  <zeroOrMore>
210
210
  <ref name="contact"/>
211
211
  </zeroOrMore>
212
- <zeroOrMore>
213
- <ref name="uri"/>
214
- </zeroOrMore>
215
212
  </element>
216
213
  </define>
217
214
  <define name="fullname">
@@ -828,6 +825,11 @@
828
825
  <optional>
829
826
  <attribute name="scope"/>
830
827
  </optional>
828
+ <optional>
829
+ <attribute name="primary">
830
+ <data type="boolean"/>
831
+ </attribute>
832
+ </optional>
831
833
  <text/>
832
834
  </element>
833
835
  </define>
@@ -152,9 +152,7 @@
152
152
  <data type="boolean"/>
153
153
  </attribute>
154
154
  </optional>
155
- <oneOrMore>
156
- <ref name="PureTextElement"/>
157
- </oneOrMore>
155
+ <ref name="XrefBody"/>
158
156
  </element>
159
157
  </define>
160
158
  <define name="erefType">
@@ -188,6 +186,42 @@
188
186
  <ref name="PureTextElement"/>
189
187
  </oneOrMore>
190
188
  </define>
189
+ <define name="localityStack">
190
+ <element name="localityStack">
191
+ <optional>
192
+ <attribute name="connective">
193
+ <choice>
194
+ <value>and</value>
195
+ <value>or</value>
196
+ <value>from</value>
197
+ <value>to</value>
198
+ <value/>
199
+ </choice>
200
+ </attribute>
201
+ </optional>
202
+ <zeroOrMore>
203
+ <ref name="locality"/>
204
+ </zeroOrMore>
205
+ </element>
206
+ </define>
207
+ <define name="sourceLocalityStack">
208
+ <element name="sourceLocalityStack">
209
+ <optional>
210
+ <attribute name="connective">
211
+ <choice>
212
+ <value>and</value>
213
+ <value>or</value>
214
+ <value>from</value>
215
+ <value>to</value>
216
+ <value/>
217
+ </choice>
218
+ </attribute>
219
+ </optional>
220
+ <zeroOrMore>
221
+ <ref name="sourceLocality"/>
222
+ </zeroOrMore>
223
+ </element>
224
+ </define>
191
225
  <define name="ul">
192
226
  <element name="ul">
193
227
  <attribute name="id">
@@ -1098,6 +1132,16 @@
1098
1132
  </define>
1099
1133
  </include>
1100
1134
  <!-- end overrides -->
1135
+ <define name="image" combine="choice">
1136
+ <element name="svg">
1137
+ <oneOrMore>
1138
+ <choice>
1139
+ <text/>
1140
+ <ref name="AnyElement"/>
1141
+ </choice>
1142
+ </oneOrMore>
1143
+ </element>
1144
+ </define>
1101
1145
  <define name="MultilingualRenderingType">
1102
1146
  <choice>
1103
1147
  <value>common</value>
@@ -2631,4 +2675,30 @@
2631
2675
  </zeroOrMore>
2632
2676
  </element>
2633
2677
  </define>
2678
+ <define name="XrefBody">
2679
+ <zeroOrMore>
2680
+ <ref name="XrefTarget"/>
2681
+ </zeroOrMore>
2682
+ <oneOrMore>
2683
+ <ref name="PureTextElement"/>
2684
+ </oneOrMore>
2685
+ </define>
2686
+ <define name="XrefTarget">
2687
+ <element name="location">
2688
+ <attribute name="target">
2689
+ <data type="string">
2690
+ <param name="pattern">\i\c*|\c+#\c+</param>
2691
+ </data>
2692
+ </attribute>
2693
+ <attribute name="connective">
2694
+ <choice>
2695
+ <value>and</value>
2696
+ <value>or</value>
2697
+ <value>from</value>
2698
+ <value>to</value>
2699
+ <value/>
2700
+ </choice>
2701
+ </attribute>
2702
+ </element>
2703
+ </define>
2634
2704
  </grammar>
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module ITU
3
- VERSION = "2.0.2".freeze
3
+ VERSION = "2.0.5".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-itu
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-22 00:00:00.000000000 Z
11
+ date: 2022-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: htmlentities