metanorma-itu 2.0.7 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,7 @@
1
1
  require_relative "init"
2
2
  require "roman-numerals"
3
3
  require "isodoc"
4
+ require_relative "../../relaton/render/general"
4
5
 
5
6
  module IsoDoc
6
7
  module ITU
@@ -121,6 +122,21 @@ module IsoDoc
121
122
  end
122
123
  end
123
124
 
125
+ def bibrenderer
126
+ ::Relaton::Render::ITU::General.new(language: @lang)
127
+ end
128
+
129
+ def bibrender(xml)
130
+ if f = xml.at(ns("./formattedref"))
131
+ f << "." unless /\.$/.match?(f.text)
132
+ else
133
+ # retain date in order to generate reference tag
134
+ xml.children =
135
+ "#{bibrenderer.render(xml.to_xml)}"\
136
+ "#{xml.xpath(ns('./docidentifier | ./uri | ./note | ./date')).to_xml}"
137
+ end
138
+ end
139
+
124
140
  def ddmmmmyyyy(date)
125
141
  if @lang == "zh"
126
142
  ddMMMyyyy(date)
@@ -5,27 +5,27 @@ require "fileutils"
5
5
  module IsoDoc
6
6
  module ITU
7
7
  module BaseConvert
8
- def nonstd_bibitem(list, b, _ordinal, biblio)
9
- list.tr **attr_code(iso_bibitem_entry_attrs(b, biblio)) do |ref|
10
- id = render_identifier(bibitem_ref_code(b))
8
+ def nonstd_bibitem(list, bibitem, _ordinal, biblio)
9
+ list.tr **attr_code(iso_bibitem_entry_attrs(bibitem, biblio)) do |ref|
10
+ id = render_identifier(bibitem_ref_code(bibitem))
11
11
  ref.td **{ style: "vertical-align:top" } do |td|
12
12
  td << (id[:metanorma] || "[#{id[:sdo]}]")
13
13
  &.gsub(/-/, "&#x2011;")&.gsub(/ /, "&#xa0;")
14
- date_note_process(b, td)
14
+ date_note_process(bibitem, td)
15
15
  end
16
- ref.td { |td| reference_format(b, td) }
16
+ ref.td { |td| reference_format(bibitem, td) }
17
17
  end
18
18
  end
19
19
 
20
- def std_bibitem_entry(list, b, ordinal, biblio)
21
- nonstd_bibitem(list, b, ordinal, biblio)
20
+ def std_bibitem_entry(list, bibitem, ordinal, biblio)
21
+ nonstd_bibitem(list, bibitem, ordinal, biblio)
22
22
  end
23
23
 
24
- def biblio_list(f, div, biblio)
24
+ def biblio_list(clause, div, biblio)
25
25
  div.table **{ class: "biblio", border: "0" } do |t|
26
26
  i = 0
27
27
  t.tbody do |tbody|
28
- f.elements.each do |b|
28
+ clause.elements.each do |b|
29
29
  if b.name == "bibitem"
30
30
  next if implicit_reference(b)
31
31
 
@@ -39,7 +39,7 @@ module IsoDoc
39
39
  end
40
40
  end
41
41
  end
42
- f.xpath(ns("./clause | ./references")).each do |x|
42
+ clause.xpath(ns("./clause | ./references")).each do |x|
43
43
  parse(x, div)
44
44
  end
45
45
  end
@@ -53,7 +53,7 @@ module IsoDoc
53
53
 
54
54
  def reference_format(biblio, ref)
55
55
  reference_format_start(biblio, ref)
56
- reference_format_title(biblio, ref)
56
+ super
57
57
  end
58
58
 
59
59
  def titlecase(str)
@@ -61,7 +61,7 @@ module IsoDoc
61
61
  end
62
62
 
63
63
  def pref_ref_code(bibitem)
64
- ret = bibitem.xpath(ns("./docidentifier[@type = 'ITU']"))
64
+ ret = bibitem.xpath(ns("./docidentifier[@type = 'ITU']"))
65
65
  ret.empty? and ret = super
66
66
  ret
67
67
  end
@@ -69,11 +69,11 @@ module IsoDoc
69
69
  IGNORE_IDS = "@type = 'DOI' or @type = 'ISSN' or @type = 'ISBN' or "\
70
70
  "@type = 'rfc-anchor' or @type = 'metanorma-ordinal'".freeze
71
71
 
72
- def multi_bibitem_ref_code(b)
73
- id = b.xpath(ns("./docidentifier[not(@type = 'metanorma' or "\
74
- "#{IGNORE_IDS})]"))
72
+ def multi_bibitem_ref_code(bibitem)
73
+ id = bibitem.xpath(ns("./docidentifier[not(@type = 'metanorma' or "\
74
+ "#{IGNORE_IDS})]"))
75
75
  id.empty? and
76
- id = b.xpath(ns("./docidentifier[not(@type = 'metanorma')]"))
76
+ id = bibitem.xpath(ns("./docidentifier[not(@type = 'metanorma')]"))
77
77
  return [] if id.empty?
78
78
 
79
79
  id.sort_by { |i| i["type"] == "ITU" ? 0 : 1 }
@@ -108,25 +108,13 @@ module IsoDoc
108
108
  end
109
109
  end
110
110
 
111
- def reference_format_start(bib, r)
111
+ def reference_format_start(bib, out)
112
112
  id = multi_bibitem_ref_code(bib)
113
113
  id1 = render_multi_identifiers(id)
114
- r << id1
114
+ out << id1
115
115
  date = bib.at(ns("./date[@type = 'published']")) and
116
- r << " (#{date.text.sub(/-.*$/, '')})"
117
- r << ", " if date || !id1.empty?
118
- end
119
-
120
- def reference_format_title(bib, r)
121
- if ftitle = bib.at(ns("./formattedref"))
122
- ftitle&.children&.each { |n| parse(n, r) }
123
- /\.$/.match(ftitle&.text) or r << "."
124
- elsif title = iso_title(bib)
125
- r.i do |i|
126
- title&.children&.each { |n| parse(n, i) }
127
- end
128
- /\.$/.match(title&.text) or r << "."
129
- end
116
+ out << " (#{date.text.sub(/-.*$/, '')})"
117
+ out << ", " if date || !id1.empty?
130
118
  end
131
119
  end
132
120
  end
@@ -70,18 +70,19 @@ module IsoDoc
70
70
  def toWord(result, filename, dir, header)
71
71
  result = populate_template(result, :word)
72
72
  result = from_xhtml(word_cleanup(to_xhtml(result)))
73
+ .gsub(/-DOUBLE_HYPHEN_ESCAPE-/, "--")
73
74
  unless @landscapestyle.nil? || @landscapestyle.empty?
74
75
  @wordstylesheet&.open
75
76
  @wordstylesheet&.write(@landscapestyle)
76
77
  @wordstylesheet&.close
77
78
  end
78
- Html2Doc.process(
79
- result, filename: filename,
79
+ Html2Doc.new(
80
+ filename: filename,
80
81
  stylesheet: @wordstylesheet&.path,
81
82
  header_file: header&.path, dir: dir,
82
83
  asciimathdelims: [@openmathdelim, @closemathdelim],
83
84
  liststyles: { ul: @ulstyle, ol: @olstyle, steps: "l4" }
84
- )
85
+ ).process(result)
85
86
  header&.unlink
86
87
  @wordstylesheet&.unlink
87
88
  end
@@ -133,6 +134,7 @@ module IsoDoc
133
134
  auth << "<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>"
134
135
  dest.replace(auth.remove)
135
136
  end
137
+ coverpage_note_cleanup(docxml)
136
138
  end
137
139
 
138
140
  TOPLIST = "[not(ancestor::ul) and not(ancestor::ol)]".freeze
@@ -6,8 +6,11 @@ module IsoDoc
6
6
  module ITU
7
7
  class Counter < IsoDoc::XrefGen::Counter
8
8
  def print
9
- super.sub(/([0-9])(bis|ter|quater|quinquies|sexies|septies|octies|nonies)$/,
10
- "\\1<em>\\2</em>")
9
+ ret = super or return nil
10
+
11
+ ret
12
+ .sub(/([0-9])(bis|ter|quater|quinquies|sexies|septies|octies|nonies)$/,
13
+ "\\1<em>\\2</em>")
11
14
  end
12
15
  end
13
16
 
@@ -19,12 +22,14 @@ module IsoDoc
19
22
 
20
23
  def back_anchor_names(docxml)
21
24
  super
22
- if annexid = docxml
23
- &.at(ns("//bibdata/ext/structuredidentifier/annexid"))&.text
24
- docxml.xpath(ns("//annex")).each { |c| annex_names(c, annexid) }
25
- else
26
- informative_annex_names(docxml)
27
- normative_annex_names(docxml)
25
+ if @parse_settings.empty? || @parse_settings[:clauses]
26
+ if annexid = docxml
27
+ &.at(ns("//bibdata/ext/structuredidentifier/annexid"))&.text
28
+ docxml.xpath(ns("//annex")).each { |c| annex_names(c, annexid) }
29
+ else
30
+ informative_annex_names(docxml)
31
+ normative_annex_names(docxml)
32
+ end
28
33
  end
29
34
  end
30
35
 
@@ -48,25 +53,33 @@ module IsoDoc
48
53
 
49
54
  def initial_anchor_names(doc)
50
55
  @doctype = doc&.at(ns("//bibdata/ext/doctype"))&.text
51
- doc.xpath(ns("//boilerplate//clause")).each { |c| preface_names(c) }
52
- doc.xpath("//xmlns:preface/child::*").each { |c| preface_names(c) }
53
- if @hierarchical_assets
54
- hierarchical_asset_names(doc.xpath("//xmlns:preface/child::*"),
55
- "Preface")
56
- else
57
- sequential_asset_names(doc.xpath("//xmlns:preface/child::*"))
56
+ if @parse_settings.empty? || @parse_settings[:clauses]
57
+ doc.xpath(ns("//boilerplate//clause")).each { |c| preface_names(c) }
58
+ doc.xpath("//xmlns:preface/child::*").each { |c| preface_names(c) }
59
+ end
60
+ if @parse_settings.empty?
61
+ if @hierarchical_assets
62
+ hierarchical_asset_names(doc.xpath("//xmlns:preface/child::*"),
63
+ "Preface")
64
+ else
65
+ sequential_asset_names(doc.xpath("//xmlns:preface/child::*"))
66
+ end
67
+ end
68
+ if @parse_settings.empty? || @parse_settings[:clauses]
69
+ n = Counter.new
70
+ n = section_names(doc.at(ns("//clause[@type = 'scope']")), n, 1)
71
+ n = section_names(doc.at(ns(@klass.norm_ref_xpath)), n, 1)
72
+ n = section_names(
73
+ doc.at(ns("//sections/terms | //sections/clause[descendant::terms]")), n, 1
74
+ )
75
+ n = section_names(doc.at(ns("//sections/definitions")), n, 1)
76
+ clause_names(doc, n)
77
+ end
78
+ if @parse_settings.empty?
79
+ middle_section_asset_names(doc)
80
+ termnote_anchor_names(doc)
81
+ termexample_anchor_names(doc)
58
82
  end
59
- n = Counter.new
60
- n = section_names(doc.at(ns("//clause[@type = 'scope']")), n, 1)
61
- n = section_names(doc.at(ns(@klass.norm_ref_xpath)), n, 1)
62
- n = section_names(
63
- doc.at(ns("//sections/terms | //sections/clause[descendant::terms]")), n, 1
64
- )
65
- n = section_names(doc.at(ns("//sections/definitions")), n, 1)
66
- clause_names(doc, n)
67
- middle_section_asset_names(doc)
68
- termnote_anchor_names(doc)
69
- termexample_anchor_names(doc)
70
83
  end
71
84
 
72
85
  def middle_sections
@@ -134,7 +147,9 @@ module IsoDoc
134
147
 
135
148
  def hierarchical_formula_names(clause, num)
136
149
  c = Counter.new
137
- clause.xpath(ns(".//formula")).reject { |n| blank?(n["id"]) }.each do |t|
150
+ clause.xpath(ns(".//formula")).reject do |n|
151
+ blank?(n["id"])
152
+ end.each do |t|
138
153
  @anchors[t["id"]] = anchor_struct(
139
154
  "#{num}-#{c.increment(t).print}", nil,
140
155
  t["inequality"] ? @labels["inequality"] : @labels["formula"],
@@ -24,21 +24,6 @@ module IsoDoc
24
24
  xref: l10n("#{lbl} #{num}") }
25
25
  end
26
26
 
27
- def annex_names(clause, num)
28
- @anchors[clause["id"]] = annex_name_anchors(clause, num)
29
- if a = single_annex_special_section(clause)
30
- annex_names1(a, num.to_s, 1)
31
- else
32
- i = Counter.new
33
- clause.xpath(ns("./clause | ./references | ./terms | ./definitions"))
34
- .each do |c|
35
- i.increment(c)
36
- annex_names1(c, "#{num}.#{i.print}", 2)
37
- end
38
- end
39
- hierarchical_asset_names(clause, num)
40
- end
41
-
42
27
  def annex_names1(clause, num, level)
43
28
  @anchors[clause["id"]] =
44
29
  { label: num, elem: @labels["annex_subclause"],
@@ -527,7 +527,7 @@
527
527
  </define>
528
528
  <define name="LocalityType">
529
529
  <data type="string">
530
- <param name="pattern">section|clause|part|paragraph|chapter|page|whole|table|annex|figure|note|list|example|volume|issue|time|anchor|locality:[a-zA-Z0-9_]+</param>
530
+ <param name="pattern">section|clause|part|paragraph|chapter|page|title|line|whole|table|annex|figure|note|list|example|volume|issue|time|anchor|locality:[a-zA-Z0-9_]+</param>
531
531
  </data>
532
532
  </define>
533
533
  <define name="referenceFrom">
@@ -677,6 +677,9 @@
677
677
  <zeroOrMore>
678
678
  <ref name="extent"/>
679
679
  </zeroOrMore>
680
+ <optional>
681
+ <ref name="bibliographic_size"/>
682
+ </optional>
680
683
  <zeroOrMore>
681
684
  <ref name="accesslocation"/>
682
685
  </zeroOrMore>
@@ -848,17 +851,46 @@
848
851
  </define>
849
852
  <define name="bplace">
850
853
  <element name="place">
851
- <optional>
852
- <attribute name="uri">
853
- <data type="anyURI"/>
854
- </attribute>
855
- </optional>
856
- <optional>
857
- <attribute name="region"/>
858
- </optional>
854
+ <choice>
855
+ <text/>
856
+ <group>
857
+ <ref name="bibliocity"/>
858
+ <zeroOrMore>
859
+ <ref name="biblioregion"/>
860
+ </zeroOrMore>
861
+ <zeroOrMore>
862
+ <ref name="bibliocountry"/>
863
+ </zeroOrMore>
864
+ </group>
865
+ </choice>
866
+ </element>
867
+ </define>
868
+ <define name="bibliocity">
869
+ <element name="city">
859
870
  <text/>
860
871
  </element>
861
872
  </define>
873
+ <define name="biblioregion">
874
+ <element name="region">
875
+ <ref name="RegionType"/>
876
+ </element>
877
+ </define>
878
+ <define name="bibliocountry">
879
+ <element name="country">
880
+ <ref name="RegionType"/>
881
+ </element>
882
+ </define>
883
+ <define name="RegionType">
884
+ <optional>
885
+ <attribute name="iso"/>
886
+ </optional>
887
+ <optional>
888
+ <attribute name="recommended">
889
+ <data type="boolean"/>
890
+ </attribute>
891
+ </optional>
892
+ <text/>
893
+ </define>
862
894
  <define name="bprice">
863
895
  <element name="price">
864
896
  <attribute name="currency"/>
@@ -922,9 +954,29 @@
922
954
  <text/>
923
955
  </element>
924
956
  </define>
957
+ <define name="sizevalue">
958
+ <element name="value">
959
+ <attribute name="type"/>
960
+ <text/>
961
+ </element>
962
+ </define>
963
+ <define name="bibliographic_size">
964
+ <element name="size">
965
+ <oneOrMore>
966
+ <ref name="sizevalue"/>
967
+ </oneOrMore>
968
+ </element>
969
+ </define>
925
970
  <define name="extent">
926
971
  <element name="extent">
927
- <ref name="BibItemLocality"/>
972
+ <choice>
973
+ <zeroOrMore>
974
+ <ref name="locality"/>
975
+ </zeroOrMore>
976
+ <zeroOrMore>
977
+ <ref name="localityStack"/>
978
+ </zeroOrMore>
979
+ </choice>
928
980
  </element>
929
981
  </define>
930
982
  <define name="series">
@@ -32,6 +32,43 @@
32
32
  <ref name="DocumentType"/>
33
33
  </element>
34
34
  </define>
35
+ <define name="admonition">
36
+ <element name="admonition">
37
+ <attribute name="type">
38
+ <ref name="AdmonitionType"/>
39
+ </attribute>
40
+ <optional>
41
+ <attribute name="class"/>
42
+ </optional>
43
+ <attribute name="id">
44
+ <data type="ID"/>
45
+ </attribute>
46
+ <optional>
47
+ <attribute name="uri">
48
+ <data type="anyURI"/>
49
+ </attribute>
50
+ </optional>
51
+ <optional>
52
+ <attribute name="coverpage">
53
+ <data type="boolean"/>
54
+ </attribute>
55
+ </optional>
56
+ <optional>
57
+ <attribute name="notag">
58
+ <data type="boolean"/>
59
+ </attribute>
60
+ </optional>
61
+ <optional>
62
+ <ref name="tname"/>
63
+ </optional>
64
+ <zeroOrMore>
65
+ <ref name="paragraph-with-footnote"/>
66
+ </zeroOrMore>
67
+ <zeroOrMore>
68
+ <ref name="note"/>
69
+ </zeroOrMore>
70
+ </element>
71
+ </define>
35
72
  <define name="index">
36
73
  <element name="index">
37
74
  <optional>
@@ -851,6 +888,16 @@
851
888
  <ref name="MultilingualRenderingType"/>
852
889
  </attribute>
853
890
  </optional>
891
+ <optional>
892
+ <attribute name="coverpage">
893
+ <data type="boolean"/>
894
+ </attribute>
895
+ </optional>
896
+ <optional>
897
+ <attribute name="notag">
898
+ <data type="boolean"/>
899
+ </attribute>
900
+ </optional>
854
901
  <oneOrMore>
855
902
  <choice>
856
903
  <ref name="paragraph"/>
@@ -1178,6 +1225,7 @@
1178
1225
  <ref name="concept"/>
1179
1226
  <ref name="add"/>
1180
1227
  <ref name="del"/>
1228
+ <ref name="span"/>
1181
1229
  </choice>
1182
1230
  </define>
1183
1231
  <define name="add">
@@ -1204,6 +1252,14 @@
1204
1252
  </choice>
1205
1253
  </element>
1206
1254
  </define>
1255
+ <define name="span">
1256
+ <element name="span">
1257
+ <attribute name="class"/>
1258
+ <oneOrMore>
1259
+ <ref name="TextElement"/>
1260
+ </oneOrMore>
1261
+ </element>
1262
+ </define>
1207
1263
  <define name="concept">
1208
1264
  <element name="concept">
1209
1265
  <optional>
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module ITU
3
- VERSION = "2.0.7".freeze
3
+ VERSION = "2.1.0".freeze
4
4
  end
5
5
  end
@@ -0,0 +1,3 @@
1
+ template:
2
+ # skip standardidentifier, it is inserted in front of formattedref within metanorma
3
+ standard: "<em>{{ title }}</em> ,_{{ edition | capitalize_first }} . {{ extent }}."
@@ -0,0 +1,13 @@
1
+ require "relaton-render"
2
+
3
+ module Relaton
4
+ module Render
5
+ module ITU
6
+ class General < ::Relaton::Render::IsoDoc::General
7
+ def config_loc
8
+ YAML.load_file(File.join(File.dirname(__FILE__), "config.yml"))
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
26
26
 
27
27
  spec.add_dependency "htmlentities", "~> 4.3.4"
28
- spec.add_dependency "metanorma-standoc", "~> 2.0.0"
28
+ spec.add_dependency "metanorma-standoc", "~> 2.1.0"
29
29
  spec.add_dependency "ruby-jing"
30
30
  spec.add_dependency "twitter_cldr", ">= 3.0.0"
31
31
  spec.add_dependency "tzinfo-data" # we need this for windows only
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.7
4
+ version: 2.1.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: 2022-04-04 00:00:00.000000000 Z
11
+ date: 2022-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: htmlentities
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.0.0
33
+ version: 2.1.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: 2.0.0
40
+ version: 2.1.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: ruby-jing
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -335,6 +335,8 @@ files:
335
335
  - lib/metanorma/itu/reqt.rng
336
336
  - lib/metanorma/itu/validate.rb
337
337
  - lib/metanorma/itu/version.rb
338
+ - lib/relaton/render/config.yml
339
+ - lib/relaton/render/general.rb
338
340
  - metanorma-itu.gemspec
339
341
  homepage: https://github.com/metanorma/metanorma-itu
340
342
  licenses: