isodoc 2.6.0 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 14b2734abde4e3ab09b2a0637134ff9346bf2e378cebd580d154ae3799461c92
4
- data.tar.gz: 3a1594d3c372cced922b30641dcdda21b1b2c95f8a921bd2d309eb7218952d35
3
+ metadata.gz: 7b149d913a483c336d7463e587e980fe234f4d1e32d8d683a070d919b0ce7429
4
+ data.tar.gz: 46e568e2b91f13069f62131ab1b86e28fd74416c55ae0937935575927a578430
5
5
  SHA512:
6
- metadata.gz: 5638291318ca9a1eaa7c626b031afa8116dfb933cb6c8e408904126c367852b3e298735629c356e1d6192b49eec3c5fd8e94f39f5219d486b5aab9832158f43f
7
- data.tar.gz: 52320e6fd84d57978a2c803417cfccfedf13e63b3b83c5bcbc73d69f2234a231ff35709b6bcd57dcbd9a622efda6c74c8fae50d132704fe8a655f71e996d2c71
6
+ metadata.gz: ae43a3f990e70f7d1929357172ca48b4cbc5db2750e61d1f91768c8087e796f5e333de64b60fc928434862e1fb874151c6a00a0cd41e25d491fe79e8604dfa9d
7
+ data.tar.gz: 9abab47db0d610e3971c1f9a19af240449dc11d6cd1d8d0f9e1e860f4b00e4a6947cce60d8483ba8701a180472278badaee6d431a07bd32ba1727ea5ad4d9a16
@@ -1,6 +1,3 @@
1
- div.table_container {
2
- margin-bottom: 14pt; }
3
-
4
1
  ol {
5
2
  margin-bottom: 0cm; }
6
3
 
@@ -54,3 +51,6 @@ table.rouge-line-table {
54
51
 
55
52
  td.rouge-code p.Sourcecode {
56
53
  margin: 0px; }
54
+
55
+ div.table_container {
56
+ margin-bottom: 14pt; }
@@ -1,6 +1,4 @@
1
- div.table_container {
2
- margin-bottom: 14pt;
3
- }
1
+
4
2
 
5
3
  ol
6
4
  {margin-bottom:0cm;}
@@ -53,3 +51,7 @@ table.rouge-line-table {
53
51
  td.rouge-code p.Sourcecode {
54
52
  margin: 0px;
55
53
  }
54
+
55
+ div.table_container {
56
+ margin-bottom: 14pt;
57
+ }
data/lib/isodoc/common.rb CHANGED
@@ -1,16 +1,16 @@
1
- require_relative "./function/blocks"
2
- require_relative "./function/cleanup"
3
- require_relative "./function/form"
4
- require_relative "./function/inline"
5
- require_relative "./function/lists"
6
- require_relative "./function/references"
7
- require_relative "./function/section"
8
- require_relative "./function/table"
9
- require_relative "./function/terms"
10
- require_relative "./function/to_word_html"
11
- require_relative "./function/utils"
12
- require_relative "./function/reqt"
13
- require_relative "./class_utils"
1
+ require_relative "function/blocks"
2
+ require_relative "function/cleanup"
3
+ require_relative "function/form"
4
+ require_relative "function/inline"
5
+ require_relative "function/lists"
6
+ require_relative "function/references"
7
+ require_relative "function/section"
8
+ require_relative "function/table"
9
+ require_relative "function/terms"
10
+ require_relative "function/to_word_html"
11
+ require_relative "function/utils"
12
+ require_relative "function/reqt"
13
+ require_relative "class_utils"
14
14
 
15
15
  module IsoDoc
16
16
  class Common
data/lib/isodoc/init.rb CHANGED
@@ -129,5 +129,13 @@ module IsoDoc
129
129
  @toctables = options[:toctables]
130
130
  @tocrecommendations = options[:tocrecommendations]
131
131
  end
132
+
133
+ AGENCIES = %w(ISO IEC ITU IETF NIST OGC IEEE BIPM BSI BS JIS IANA UN W3C
134
+ IHO CSA IEV)
135
+ .freeze
136
+
137
+ def agency?(text)
138
+ self.class::AGENCIES.include?(text)
139
+ end
132
140
  end
133
141
  end
@@ -1,5 +1,5 @@
1
- require_relative "./metadata_date"
2
- require_relative "./metadata_contributor"
1
+ require_relative "metadata_date"
2
+ require_relative "metadata_contributor"
3
3
 
4
4
  module IsoDoc
5
5
  class Metadata
@@ -15,7 +15,7 @@ module IsoDoc
15
15
 
16
16
  def initialize(lang, script, locale, i18n, fonts_options = {})
17
17
  @metadata = { lang: lang, script: script }
18
- DATETYPES.each { |w| @metadata["#{w.gsub(/-/, '_')}date".to_sym] = "XXX" }
18
+ DATETYPES.each { |w| @metadata["#{w.gsub('-', '_')}date".to_sym] = "XXX" }
19
19
  @lang = lang
20
20
  @script = script
21
21
  @locale = locale
@@ -67,7 +67,7 @@ module IsoDoc
67
67
  publisher = []
68
68
  xml.xpath(ns("//bibdata/contributor[xmlns:role/@type = 'publisher']/" \
69
69
  "organization")).each do |org|
70
- name = org.at(ns("./name"))&.text
70
+ name = extract_variant(org.at(ns("./name")))
71
71
  agency1 = org.at(ns("./abbreviation"))&.text || name
72
72
  publisher << name if name
73
73
  agency = iso?(org) ? "ISO/#{agency}" : "#{agency}#{agency1}/"
@@ -75,6 +75,12 @@ module IsoDoc
75
75
  [agency, publisher]
76
76
  end
77
77
 
78
+ def extract_variant(node)
79
+ node.nil? and return node
80
+ x = node.at(ns("./variant[@language = '#{@lang}']")) and node = x
81
+ node.text
82
+ end
83
+
78
84
  def agency(xml)
79
85
  agency, publisher = agency1(xml)
80
86
  set(:agency, agency.sub(%r{/$}, ""))
@@ -10,10 +10,10 @@ module IsoDoc
10
10
 
11
11
  def get_linkend(node)
12
12
  node["style"] == "id" and anchor_id_postprocess(node)
13
- return unless xref_empty?(node)
14
-
15
- link = anchor_linkend(node, docid_l10n(node["target"] ||
16
- expand_citeas(node["citeas"])))
13
+ xref_empty?(node) or return
14
+ target = docid_l10n(node["target"]) ||
15
+ expand_citeas(docid_l10n(node["citeas"]))
16
+ link = anchor_linkend(node, target)
17
17
  link += eref_localities(node.xpath(ns("./locality | ./localityStack")),
18
18
  link, node)
19
19
  non_locality_elems(node).each(&:remove)
@@ -24,8 +24,7 @@ module IsoDoc
24
24
  # <locality type="section"><reference>3.1</reference></locality></origin>
25
25
 
26
26
  def unnest_linkend(node)
27
- return unless node.at(ns("./xref[@nested]"))
28
-
27
+ node.at(ns("./xref[@nested]")) or return
29
28
  node.xpath(ns("./xref[@nested]")).each { |x| x.delete("nested") }
30
29
  node.xpath(ns("./location | ./locationStack")).each(&:remove)
31
30
  node.replace(node.children)
@@ -64,15 +63,15 @@ module IsoDoc
64
63
  get_linkend(node)
65
64
  end
66
65
 
67
- def variant(docxml)
68
- docxml.xpath(ns("//variant")).each { |f| variant1(f) }
69
- docxml.xpath(ns("//variant[@remove = 'true']")).each(&:remove)
70
- docxml.xpath(ns("//variant")).each do |v|
71
- next unless v&.next&.name == "variant"
72
-
66
+ def variant(xml)
67
+ b = xml.xpath(ns("//bibdata//variant"))
68
+ (xml.xpath(ns("//variant")) - b).each { |f| variant1(f) }
69
+ (xml.xpath(ns("//variant[@remove = 'true']")) - b).each(&:remove)
70
+ (xml.xpath(ns("//variant")) - b).each do |v|
71
+ v.next&.name == "variant" or next
73
72
  v.next = "/"
74
73
  end
75
- docxml.xpath(ns("//variant")).each { |f| f.replace(f.children) }
74
+ (xml.xpath(ns("//variant")) - b).each { |f| f.replace(f.children) }
76
75
  end
77
76
 
78
77
  def variant1(node)
@@ -25,9 +25,8 @@ module IsoDoc
25
25
  level = @xrefs.anchor(elem["id"], :level, false) ||
26
26
  (elem.ancestors("clause, annex").size + 1)
27
27
  t = elem.at(ns("./title")) and t["depth"] = level
28
- return if !elem.ancestors("boilerplate, metanorma-extension").empty? ||
29
- @suppressheadingnumbers || elem["unnumbered"]
30
-
28
+ !elem.ancestors("boilerplate, metanorma-extension").empty? ||
29
+ @suppressheadingnumbers || elem["unnumbered"] and return
31
30
  lbl = @xrefs.anchor(elem["id"], :label,
32
31
  elem.parent.name != "sections") or return
33
32
  prefix_name(elem, "<tab/>", "#{lbl}#{clausedelim}", "title")
@@ -133,17 +132,15 @@ module IsoDoc
133
132
 
134
133
  def display_order(docxml)
135
134
  i = 0
136
- i = display_order_xpath(docxml, "//preface/*", i)
137
- i = display_order_at(docxml, "//clause[@type = 'scope']", i)
138
- i = display_order_at(docxml, @xrefs.klass.norm_ref_xpath, i)
139
- i = display_order_at(docxml, "//sections/terms | " \
140
- "//sections/clause[descendant::terms]", i)
141
- i = display_order_at(docxml, "//sections/definitions", i)
142
- i = display_order_xpath(docxml, @xrefs.klass.middle_clause(docxml), i)
143
- i = display_order_xpath(docxml, "//annex", i)
144
- i = display_order_xpath(docxml, @xrefs.klass.bibliography_xpath, i)
145
- i = display_order_xpath(docxml, "//indexsect", i)
146
- display_order_xpath(docxml, "//colophon/*", i)
135
+ d = @xrefs.clause_order(docxml)
136
+ %i(preface main annex back).each do |s|
137
+ d[s].each do |a|
138
+ i = if a[:multi]
139
+ display_order_xpath(docxml, a[:path], i)
140
+ else display_order_at(docxml, a[:path], i)
141
+ end
142
+ end
143
+ end
147
144
  end
148
145
 
149
146
  def clausetitle(docxml)
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "2.6.0".freeze
2
+ VERSION = "2.6.1".freeze
3
3
  end
@@ -1,18 +1,66 @@
1
1
  module IsoDoc
2
2
  module XrefGen
3
3
  module Sections
4
+ def clause_order(docxml)
5
+ { preface: clause_order_preface(docxml),
6
+ main: clause_order_main(docxml),
7
+ annex: clause_order_annex(docxml),
8
+ back: clause_order_back(docxml) }
9
+ end
10
+
11
+ def clause_order_preface(_docxml)
12
+ [{ path: "//preface/*", multi: true }]
13
+ end
14
+
15
+ def clause_order_main(docxml)
16
+ [
17
+ { path: "//clause[@type = 'scope']" },
18
+ { path: @klass.norm_ref_xpath },
19
+ { path: "//sections/terms | " \
20
+ "//sections/clause[descendant::terms]" },
21
+ { path: "//sections/definitions | " \
22
+ "//sections/clause[descendant::definitions][not(descendant::terms)]" },
23
+ { path: @klass.middle_clause(docxml), multi: true },
24
+ ]
25
+ end
26
+
27
+ def clause_order_annex(_docxml)
28
+ [{ path: "//annex", multi: true }]
29
+ end
30
+
31
+ def clause_order_back(_docxml)
32
+ [
33
+ { path: @klass.bibliography_xpath },
34
+ { path: "//indexsect", multi: true },
35
+ { path: "//colophon/*", multi: true },
36
+ ]
37
+ end
38
+
4
39
  def back_anchor_names(xml)
5
40
  if @parse_settings.empty? || @parse_settings[:clauses]
6
- i = Counter.new("@")
7
- xml.xpath(ns("//annex")).each do |c|
41
+ annex_anchor_names(xml)
42
+ back_clauses_anchor_names(xml)
43
+ end
44
+ references(xml) if @parse_settings.empty? || @parse_settings[:refs]
45
+ end
46
+
47
+ def annex_anchor_names(xml)
48
+ i = Counter.new("@")
49
+ clause_order_annex(xml).each do |a|
50
+ xml.xpath(ns(a[:path])).each do |c|
8
51
  annex_names(c, i.increment(c).print)
52
+ a[:multi] or break
9
53
  end
10
- xml.xpath(ns(@klass.bibliography_xpath)).each do |b|
11
- preface_names(b)
54
+ end
55
+ end
56
+
57
+ def back_clauses_anchor_names(xml)
58
+ clause_order_back(xml).each do |a|
59
+ xml.xpath(ns(a[:path])).each do |c|
60
+ back_names(c)
61
+ a[:multi] or break
12
62
  end
13
- xml.xpath(ns("//colophon/clause")).each { |b| preface_names(b) }
14
63
  end
15
- references(xml) if @parse_settings.empty? || @parse_settings[:refs]
16
64
  end
17
65
 
18
66
  def references(docxml)
@@ -21,20 +69,29 @@ module IsoDoc
21
69
  end
22
70
  end
23
71
 
24
- def initial_anchor_names(doc)
72
+ def initial_anchor_names(xml)
25
73
  if @parse_settings.empty? || @parse_settings[:clauses]
26
- doc.xpath(ns("//preface/*")).each do |c|
27
- c.element? and preface_names(c)
74
+ preface_anchor_names(xml)
75
+ main_anchor_names(xml)
76
+ end
77
+ end
78
+
79
+ def preface_anchor_names(xml)
80
+ clause_order_preface(xml).each do |a|
81
+ xml.xpath(ns(a[:path])).each do |c|
82
+ preface_names(c)
83
+ a[:multi] or break
84
+ end
85
+ end
86
+ end
87
+
88
+ def main_anchor_names(xml)
89
+ n = Counter.new
90
+ clause_order_main(xml).each do |a|
91
+ xml.xpath(ns(a[:path])).each do |c|
92
+ section_names(c, n, 1)
93
+ a[:multi] or break
28
94
  end
29
- # potentially overridden in middle_section_asset_names()
30
- sequential_asset_names(doc.xpath(ns("//preface/*")))
31
- n = Counter.new
32
- n = section_names(doc.at(ns("//clause[@type = 'scope']")), n, 1)
33
- n = section_names(doc.at(ns(@klass.norm_ref_xpath)), n, 1)
34
- n = section_names(doc.at(ns("//sections/terms | " \
35
- "//sections/clause[descendant::terms]")), n, 1)
36
- n = section_names(doc.at(ns("//sections/definitions")), n, 1)
37
- clause_names(doc, n)
38
95
  end
39
96
  end
40
97
 
@@ -57,8 +114,7 @@ module IsoDoc
57
114
  ret = clause.at(ns("./title"))&.text
58
115
  if use_elem_name && !ret
59
116
  clause.name.capitalize
60
- else
61
- ret
117
+ else ret
62
118
  end
63
119
  end
64
120
 
@@ -67,8 +123,15 @@ module IsoDoc
67
123
 
68
124
  # in StanDoc, prefaces have no numbering; they are referenced only by title
69
125
  def preface_names(clause)
70
- return if clause.nil?
126
+ unnumbered_names(clause)
127
+ end
128
+
129
+ def back_names(clause)
130
+ unnumbered_names(clause)
131
+ end
71
132
 
133
+ def unnumbered_names(clause)
134
+ clause.nil? and return
72
135
  preface_name_anchors(clause, 1,
73
136
  clause_title(clause, use_elem_name: true))
74
137
  clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
@@ -94,23 +157,15 @@ module IsoDoc
94
157
  end
95
158
 
96
159
  def middle_section_asset_names(doc)
97
- middle_sections = "//clause[@type = 'scope'] | " \
98
- "#{@klass.norm_ref_xpath} | " \
99
- "//sections/terms | //preface/* | " \
100
- "//sections/definitions | //clause[parent::sections]"
160
+ middle_sections =
161
+ "//clause[@type = 'scope'] | #{@klass.norm_ref_xpath} | " \
162
+ "//sections/terms | //preface/* | " \
163
+ "//sections/definitions | //clause[parent::sections]"
101
164
  sequential_asset_names(doc.xpath(ns(middle_sections)))
102
165
  end
103
166
 
104
- def clause_names(docxml, num)
105
- docxml.xpath(ns(@klass.middle_clause(docxml)))
106
- .each_with_index do |c, _i|
107
- section_names(c, num, 1)
108
- end
109
- end
110
-
111
167
  def section_names(clause, num, lvl)
112
168
  clause.nil? and return num
113
-
114
169
  num.increment(clause)
115
170
  section_name_anchors(clause, num.print, lvl)
116
171
  clause.xpath(ns(SUBCLAUSES)).each_with_object(Counter.new) do |c, i|
@@ -138,7 +193,8 @@ module IsoDoc
138
193
  obl = l10n("(#{@labels['inform_annex']})")
139
194
  clause["obligation"] == "normative" and
140
195
  obl = l10n("(#{@labels['norm_annex']})")
141
- title = Common::case_with_markup(@labels["annex"], "capital", @script)
196
+ title = Common::case_with_markup(@labels["annex"], "capital",
197
+ @script)
142
198
  l10n("<strong>#{title} #{num}</strong><br/>#{obl}")
143
199
  end
144
200
 
@@ -30,7 +30,7 @@ external_terms_boilerplate: |
30
30
  <p> لأغراض هذا المستند ، تنطبق المصطلحات والتعريفات الواردة في%. </ p>
31
31
  internal_external_terms_boilerplate: |
32
32
  <p>لأغراض هذه الوثيقة ،تنطبق المصطلحات والتعاريف الواردة في % وما يلي.</p>
33
- term_defined_in: "[المصطلح المحدد في %]"
33
+ term_defined_in: "(%)"
34
34
  binary_and: "%1 و %2"
35
35
  multiple_and: "%1, و %2"
36
36
  binary_or: "%1 او %2"
@@ -32,7 +32,7 @@ external_terms_boilerplate: |
32
32
  <p>Für die Zwecke dieses Dokuments gelten die in % angegebenen Begriffe und Definitionen.</p>
33
33
  internal_external_terms_boilerplate: |
34
34
  <p>Für die Zwecke dieses Dokuments gelten die in % und im Folgenden aufgeführten Begriffe und Definitionen.</p>
35
- term_defined_in: "[Begriff definiert in %]"
35
+ term_defined_in: "(%)"
36
36
  binary_and: "%1 und %2"
37
37
  multiple_and: "%1, und %2"
38
38
  binary_or: "%1 oder %2"
@@ -38,7 +38,7 @@ external_terms_boilerplate: |
38
38
  internal_external_terms_boilerplate: |
39
39
  <p>For the purposes of this document, the terms and definitions
40
40
  given in % and the following apply.</p>
41
- term_defined_in: "[term defined in %]"
41
+ term_defined_in: "(%)"
42
42
  binary_and: "%1 and %2"
43
43
  multiple_and: "%1, and %2"
44
44
  binary_or: "%1 or %2"
@@ -34,7 +34,7 @@ external_terms_boilerplate: |
34
34
  <p>Para los propósitos de este documento, se aplican los términos y definiciones dados en %.</p>
35
35
  internal_external_terms_boilerplate: |
36
36
  <p>Para los propósitos de este documento, se aplican los términos y definiciones dados en % y los siguientes.</p>
37
- term_defined_in: "[término definido en %]"
37
+ term_defined_in: "(%)"
38
38
  binary_and: "%1 y %2"
39
39
  multiple_and: "%1, y %2"
40
40
  binary_or: "%1 o %2"
@@ -31,7 +31,7 @@ external_terms_boilerplate: |
31
31
  <p>Pour les besoins du présent document, les termes et définitions de % s’appliquent.</p>
32
32
  internal_external_terms_boilerplate: |
33
33
  <p>Pour les besoins du présent document, les termes et définitions de % ainsi que les suivants, s’appliquent.</p>
34
- term_defined_in: "[terme défini dans %]"
34
+ term_defined_in: "(%)"
35
35
  binary_and: "%1 et %2"
36
36
  multiple_and: "%1, et %2"
37
37
  binary_or: "%1 ou %2"
@@ -31,7 +31,7 @@ external_terms_boilerplate: |
31
31
  <p>この規格で用いる主な用語及び定義は,% による。</p>
32
32
  internal_external_terms_boilerplate: |
33
33
  <p>この規格で用いる主な用語及び定義は,次によるほか,% による。</p>
34
- term_defined_in: "[term defined in %]"
34
+ term_defined_in: "(%)"
35
35
  binary_and: "%1 and %2"
36
36
  multiple_and: "%1, and %2"
37
37
  binary_or: "%1 or %2"
@@ -37,7 +37,7 @@ external_terms_boilerplate: |
37
37
  internal_external_terms_boilerplate: |
38
38
  <p>Для целей этого документа применяются
39
39
  термины и определения, данные в % и следующие.</p>
40
- term_defined_in: "[термин, определенный в %]"
40
+ term_defined_in: "(%)"
41
41
  binary_and: "%1 и %2"
42
42
  multiple_and: "%1, и %2"
43
43
  binary_or: "%1 или %2"
@@ -33,7 +33,7 @@ external_terms_boilerplate: |
33
33
  <p>% 界定的术语和定义适用于本文件。</p>
34
34
  internal_external_terms_boilerplate: |
35
35
  <p>% 界定的以及下列术语和定义适用于本文件。</p>
36
- term_defined_in: "〖术语于%中定义〗"
36
+ term_defined_in: "(%)"
37
37
  binary_and: "%1和%2"
38
38
  multiple_and: "%1、和%2"
39
39
  binary_or: "%1或%2"
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: 2.6.0
4
+ version: 2.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-07 00:00:00.000000000 Z
11
+ date: 2023-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: html2doc