isodoc 2.1.2 → 2.1.4

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: 28ac8ba37e46dab584c5c8b31b651a3c35554c48a286edbe27380837d8cf2bcb
4
- data.tar.gz: b8aa34af74f5ea34f01a8e80e5c9d3d9d1c8f04623e490efcd4ef405fa3d9d89
3
+ metadata.gz: 214cd3cfadc0aeca476766aff0722c06a46b5410beedbb9a49fd47ed15249850
4
+ data.tar.gz: f0e79db9f9dd1b456da5ba4eda163e7189509236e45f688faa92fcf821c158de
5
5
  SHA512:
6
- metadata.gz: 48b4097c940f272ce85bb6ccce887df0640525d90176246b00772f2b858daf1a8a3710ccd06766048a2c57030abbed6a72f122dddd084717604e30d08290b01d
7
- data.tar.gz: 21cc6a5137d95431098706c1f0a71f2ce759da10fdd892bb8cf7fcbc7a74dbc671a5d8bb90d7e1ec072d7eb3a3aa618112dade4dda0a3944a4a9e95455bd1748
6
+ metadata.gz: 2e57a7551ccebc9fedc40520a1ff96d87d25de8f4c3501400d9cfdac41d4e0014f25e9b5a7d0eb9c03c6c3cf0c0a0dd3a992327591ecfcb474c6c7c369377e15
7
+ data.tar.gz: 630fb8c95eccafb843d2f25459494705087dde8c4fe857be5183fdab62eb71da7fb9211d2bbe2dc30c67a87e4ce199c200c9a53eabf5ba90a74e249005f8d997
@@ -62,5 +62,21 @@ module IsoDoc
62
62
  end
63
63
  xml.root.children.to_xml
64
64
  end
65
+
66
+ def nearest_block_parent(node)
67
+ until %w(p title td th name formula li dt dd sourcecode pre quote
68
+ note example)
69
+ .include?(node.name)
70
+ node = node.parent
71
+ end
72
+ node
73
+ end
74
+
75
+ # node is at the start of sentence in a Metanorma XML context
76
+ def start_of_sentence(node)
77
+ prec = nearest_block_parent(node).xpath("./descendant-or-self::text()") &
78
+ node.xpath("./preceding::text()")
79
+ prec.empty? || /(?!<[^.].)\.\s+$/.match(prec.map(&:text).join)
80
+ end
65
81
  end
66
82
  end
@@ -19,7 +19,8 @@ module IsoDoc
19
19
  ref << (idents[:ordinal] || idents[:metanorma] || idents[:sdo]).to_s
20
20
  ref << ", #{idents[sdo]}" if idents[:ordinal] && idents[:sdo]
21
21
  end
22
- ref << ", " unless biblio && !idents[:sdo]
22
+ ref << "," if idents[:sdo]
23
+ ref << " "
23
24
  reference_format(bib, ref)
24
25
  end
25
26
  end
@@ -34,7 +35,8 @@ module IsoDoc
34
35
  idents[:metanorma]) && idents[:sdo]
35
36
  end
36
37
  date_note_process(bib, ref)
37
- ref << ", " unless biblio && !idents[:sdo]
38
+ ref << "," if idents[:sdo]
39
+ ref << " "
38
40
  reference_format(bib, ref)
39
41
  end
40
42
  end
@@ -48,13 +50,21 @@ module IsoDoc
48
50
  end
49
51
 
50
52
  def pref_ref_code(bib)
51
- ret = bib.xpath(ns("./docidentifier[@primary = 'true']"))
53
+ return nil if bib["suppress_identifier"] == "true"
54
+
55
+ ret = bib.xpath(ns("./docidentifier[@primary = 'true'][@language = '#{@lang}']"))
56
+ ret.empty? and
57
+ ret = bib.xpath(ns("./docidentifier[@primary = 'true']"))
52
58
  ret.empty? and
53
59
  ret = bib.at(ns("./docidentifier[not(@type = 'DOI' or "\
54
60
  "@type = 'metanorma' "\
55
61
  "or @type = 'metanorma-ordinal' or "\
56
- "@type = 'ISSN' or @type = 'ISBN' or "\
57
- "@type = 'rfc-anchor')]"))
62
+ "@type = 'ISSN' or @type = 'ISBN')]"\
63
+ "[@language = '#{@lang}']")) ||
64
+ bib.at(ns("./docidentifier[not(@type = 'DOI' or "\
65
+ "@type = 'metanorma' "\
66
+ "or @type = 'metanorma-ordinal' or "\
67
+ "@type = 'ISSN' or @type = 'ISBN')]"))
58
68
  ret
59
69
  end
60
70
 
@@ -66,6 +76,7 @@ module IsoDoc
66
76
  "@type = 'ISBN']"))
67
77
  id3 = bib.at(ns("./docidentifier[@type = 'metanorma-ordinal']"))
68
78
  return [id, id1, id2, id3] if id || id1 || id2 || id3
79
+ return [nil, nil, nil, nil] if bib["suppress_identifier"] == "true"
69
80
 
70
81
  id = Nokogiri::XML::Node.new("docidentifier", bib.document)
71
82
  id << "(NO ID)"
@@ -11,6 +11,10 @@ module IsoDoc
11
11
  self.class.ns(xpath)
12
12
  end
13
13
 
14
+ def start_of_sentence(node)
15
+ self.class.start_of_sentence(node)
16
+ end
17
+
14
18
  def insert_tab(out, count)
15
19
  tab = %w(Hans Hant).include?(@script) ? "&#x3000;" : "&#xa0; "
16
20
  [1..count].each { out << tab }
@@ -8,6 +8,10 @@ module IsoDoc
8
8
  text.capitalize
9
9
  end
10
10
 
11
+ def block_delim
12
+ "&#xa0;&#x2014; "
13
+ end
14
+
11
15
  def prefix_name(node, delim, number, elem)
12
16
  return if number.nil? || number.empty?
13
17
 
@@ -16,8 +20,8 @@ module IsoDoc
16
20
  node.children.first.previous = "<#{elem}></#{elem}>"
17
21
  name = node.children.first
18
22
  end
19
- if name.children.empty? then name.add_child(cleanup_entities(number))
20
- else (name.children.first.previous = "#{number}#{delim}")
23
+ if name.children.empty? then name.add_child(cleanup_entities(number.strip))
24
+ else (name.children.first.previous = "#{number.strip}#{delim}")
21
25
  end
22
26
  end
23
27
 
@@ -31,7 +35,7 @@ module IsoDoc
31
35
  return if labelled_ancestor(elem)
32
36
 
33
37
  lbl = @xrefs.anchor(elem["id"], :label, false) or return
34
- prefix_name(elem, "&#xa0;&#x2014; ",
38
+ prefix_name(elem, block_delim,
35
39
  l10n("#{lower2cap @i18n.figure} #{lbl}"), "name")
36
40
  end
37
41
 
@@ -60,7 +64,7 @@ module IsoDoc
60
64
  else
61
65
  l10n("#{@i18n.example} #{n[:label]}")
62
66
  end
63
- prefix_name(elem, "&#xa0;&#x2014; ", lbl, "name")
67
+ prefix_name(elem, block_delim, lbl, "name")
64
68
  end
65
69
 
66
70
  def note(docxml)
@@ -130,7 +134,7 @@ module IsoDoc
130
134
  return if elem["unnumbered"] && !elem.at(ns("./name"))
131
135
 
132
136
  n = @xrefs.anchor(elem["id"], :label, false)
133
- prefix_name(elem, "&#xa0;&#x2014; ", l10n("#{lower2cap @i18n.table} #{n}"),
137
+ prefix_name(elem, block_delim, l10n("#{lower2cap @i18n.table} #{n}"),
134
138
  "name")
135
139
  end
136
140
 
@@ -32,7 +32,7 @@ module IsoDoc
32
32
  return if elem.at(ns("./figure")) && !elem.at(ns("./name"))
33
33
 
34
34
  lbl = @xrefs.anchor(elem["id"], :label, false) or return
35
- prefix_name(elem, "&#xa0;&#x2014; ",
35
+ prefix_name(elem, block_delim,
36
36
  l10n("#{lower2cap @i18n.figure} #{lbl}"), "name")
37
37
  end
38
38
 
@@ -3,14 +3,6 @@ require_relative "xrefs"
3
3
 
4
4
  module IsoDoc
5
5
  class PresentationXMLConvert < ::IsoDoc::Convert
6
- def nearest_block_parent(node)
7
- until %w(p title td th name formula li dt dd sourcecode pre)
8
- .include?(node.name)
9
- node = node.parent
10
- end
11
- node
12
- end
13
-
14
6
  def non_locality_elems(node)
15
7
  node.children.reject do |c|
16
8
  %w{locality localityStack location}.include? c.name
@@ -11,7 +11,8 @@ module IsoDoc
11
11
  end
12
12
 
13
13
  def clause1(elem)
14
- level = @xrefs.anchor(elem["id"], :level, false) || "1"
14
+ level = @xrefs.anchor(elem["id"], :level, false) ||
15
+ (elem.ancestors("clause, annex").size + 1)
15
16
  t = elem.at(ns("./title")) and t["depth"] = level
16
17
  return if !elem.ancestors("boilerplate").empty? ||
17
18
  @suppressheadingnumbers || elem["unnumbered"]
@@ -91,15 +92,26 @@ module IsoDoc
91
92
 
92
93
  def bibrender(xml)
93
94
  if f = xml.at(ns("./formattedref"))
94
- code = render_identifier(bibitem_ref_code(xml))
95
- f << " [#{code[:sdo]}] " if code[:sdo]
96
- else
97
- xml.children =
98
- "#{bibrenderer.render(xml.to_xml)}"\
99
- "#{xml.xpath(ns('./docidentifier | ./uri | ./note')).to_xml}"
95
+ bibrender_formattedref(f, xml)
96
+ else bibrender_relaton(xml)
100
97
  end
101
98
  end
102
99
 
100
+ def bibrender_formattedref(formattedref, xml)
101
+ code = render_identifier(bibitem_ref_code(xml))
102
+ (code[:sdo] && xml["suppress_identifier"] != "true") and
103
+ formattedref << " [#{code[:sdo]}] "
104
+ end
105
+
106
+ def bibrender_relaton(xml)
107
+ bib = xml.dup
108
+ bib["suppress_identifier"] == true and
109
+ bib.xpath(ns("./docidentifier")).each(&:remove)
110
+ xml.children =
111
+ "#{bibrenderer.render(bib.to_xml)}"\
112
+ "#{xml.xpath(ns('./docidentifier | ./uri | ./note')).to_xml}"
113
+ end
114
+
103
115
  def bibrenderer
104
116
  ::Relaton::Render::IsoDoc::General.new(language: @lang)
105
117
  end
@@ -177,7 +189,7 @@ module IsoDoc
177
189
 
178
190
  def toc(docxml)
179
191
  docxml.xpath(ns("//toc//xref[text()]")).each do |x|
180
- lbl = @xrefs.get[x["target"]][:label] or next
192
+ lbl = @xrefs.anchor(x["target"], :label) or next
181
193
  x.children.first.previous = "#{lbl}<tab/>"
182
194
  end
183
195
  end
@@ -105,9 +105,7 @@ module IsoDoc
105
105
  end
106
106
 
107
107
  def capitalise_xref1(node, linkend)
108
- prec = nearest_block_parent(node).xpath("./descendant-or-self::text()") &
109
- node.xpath("./preceding::text()")
110
- if prec.empty? || /(?!<[^.].)\.\s+$/.match(prec.map(&:text).join)
108
+ if start_of_sentence(node)
111
109
  Common::case_with_markup(linkend, "capital", @script)
112
110
  else linkend
113
111
  end
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "2.1.2".freeze
2
+ VERSION = "2.1.4".freeze
3
3
  end
@@ -176,7 +176,7 @@ module IsoDoc
176
176
  div.p **{ class: "Note" } do |p|
177
177
  if name
178
178
  name.children.each { |n| parse(n, p) }
179
- p << l10n(": ")
179
+ p << termnote_delim
180
180
  end
181
181
  para_then_remainder(node.first_element_child, node, p, div)
182
182
  end
@@ -1,9 +1,14 @@
1
1
  module IsoDoc
2
2
  module WordFunction
3
3
  module Body
4
- def section_break(body)
4
+ def section_break(body, continuous: false)
5
5
  body.p do |p|
6
- p.br **{ clear: "all", class: "section" }
6
+ if continuous
7
+ p.br **{ clear: "all", style: "page-break-before:auto;"\
8
+ "mso-break-type:section-break" }
9
+ else
10
+ p.br **{ clear: "all", class: "section" }
11
+ end
7
12
  end
8
13
  end
9
14
 
@@ -88,11 +88,20 @@ module IsoDoc
88
88
  word_pseudocode_cleanup(docxml)
89
89
  word_image_caption(docxml)
90
90
  word_section_breaks(docxml)
91
+ word_tab_clean(docxml)
91
92
  authority_cleanup(docxml)
92
93
  word_footnote_format(docxml)
93
94
  docxml
94
95
  end
95
96
 
97
+ def word_tab_clean(docxml)
98
+ docxml.xpath("//p[@class='Biblio']//span[@style='mso-tab-count:1']")
99
+ .each do |s|
100
+ s.next.text? or next
101
+ s.next.replace(s.next.text.sub(/^\s+/, ""))
102
+ end
103
+ end
104
+
96
105
  def word_colgroup(docxml)
97
106
  cells2d = {}
98
107
  docxml.xpath("//table[colgroup]").each do |t|
@@ -151,8 +151,8 @@ module IsoDoc
151
151
  label = "#{prev_label}) #{label}" unless prev_label.empty?
152
152
  label = "#{list_anchor[:xref]} #{label}" if refer_list
153
153
  li["id"] and @anchors[li["id"]] =
154
- { xref: "#{label})", type: "listitem",
155
- container: list_anchor[:container] }
154
+ { xref: "#{label})", type: "listitem", refer_list:
155
+ refer_list, container: list_anchor[:container] }
156
156
  (li.xpath(ns(".//ol")) - li.xpath(ns(".//ol//ol"))).each do |ol|
157
157
  list_item_anchor_names(ol, list_anchor, depth + 1, label, false)
158
158
  end
data/lib/isodoc/xref.rb CHANGED
@@ -52,7 +52,7 @@ module IsoDoc
52
52
 
53
53
  # extract names for all anchors, xref and label
54
54
  def parse(docxml)
55
- amend_preprocess(docxml) if @parse_settings.empty?
55
+ amend_preprocess(docxml) if @parse_settings.empty?
56
56
  initial_anchor_names(docxml)
57
57
  back_anchor_names(docxml)
58
58
  # preempt clause notes with all other types of note (ISO default)
@@ -94,6 +94,7 @@ admonition:
94
94
  caution: حذر
95
95
  important: مهم
96
96
  safety precautions: احتياطات السلامة
97
+ editorial: ملاحظة تحريرية
97
98
  locality:
98
99
  section: قسم
99
100
  clause: فقرة
@@ -132,6 +133,7 @@ relatedterms:
132
133
  contrast: مضاد
133
134
  # تباين
134
135
  see: انظر
136
+ seealso: انظر أيضا
135
137
  inflection:
136
138
  فقرة:
137
139
  sg: فقرة
@@ -99,7 +99,8 @@ admonition: {
99
99
  warning: Warnung,
100
100
  caution: Vorsicht,
101
101
  important: Wichtig,
102
- safety precautions: Sicherheitsvorkehrungen
102
+ safety precautions: Sicherheitsvorkehrungen,
103
+ editorial: Redaktioneller Hinweis
103
104
  }
104
105
  locality: {
105
106
  section: Abschnitt,
@@ -138,6 +139,7 @@ relatedterms:
138
139
  compare: vergleiche
139
140
  contrast: dagegen
140
141
  see: siehe
142
+ seealso: siehe auch
141
143
  inflection:
142
144
  Klausel:
143
145
  sg: Klausel
@@ -99,7 +99,8 @@ admonition: {
99
99
  warning: Warning,
100
100
  caution: Caution,
101
101
  important: Important,
102
- safety precautions: Safety Precautions
102
+ safety precautions: Safety Precautions,
103
+ editorial: Editorial Note
103
104
  }
104
105
  locality: {
105
106
  section: Section,
@@ -138,6 +139,7 @@ relatedterms:
138
139
  compare: compare
139
140
  contrast: contrast
140
141
  see: see
142
+ seealso: see also
141
143
  inflection:
142
144
  Clause:
143
145
  sg: Clause
@@ -99,7 +99,8 @@ admonition: {
99
99
  warning: Advertencia,
100
100
  caution: Precaución,
101
101
  important: Importante,
102
- safety precautions: Precauciones de seguridad
102
+ safety precautions: Precauciones de seguridad,
103
+ editorial: Note editorial
103
104
  }
104
105
  locality: {
105
106
  section: Sección,
@@ -138,6 +139,7 @@ relatedterms:
138
139
  compare: relacionado
139
140
  contrast: difiere
140
141
  see: véase
142
+ seealso: véase tambien
141
143
  inflection:
142
144
  Cláusula:
143
145
  sg: Cláusula
@@ -98,6 +98,7 @@ admonition: {
98
98
  caution: Attention,
99
99
  important: Important,
100
100
  safety precautions: Précautions de Sécurité,
101
+ editorial: Note éditoriale
101
102
  }
102
103
  locality: {
103
104
  section: Section,
@@ -136,6 +137,7 @@ relatedterms:
136
137
  compare: comparez
137
138
  contrast: contrastez
138
139
  see: voir
140
+ seealso: voir aussi
139
141
  inflection:
140
142
  Clause:
141
143
  sg: Article
@@ -104,7 +104,8 @@ admonition: {
104
104
  warning: Предупреждение,
105
105
  caution: Предостережение,
106
106
  important: Важно,
107
- safety precautions: Меры безопасности
107
+ safety precautions: Меры безопасности,
108
+ editorial: Редакционная Заметка
108
109
  }
109
110
  locality: {
110
111
  section: Раздел,
@@ -143,6 +144,7 @@ relatedterms:
143
144
  compare: наравне
144
145
  contrast: противоположный
145
146
  see: см.
147
+ seealso: см. также
146
148
  inflection:
147
149
  Пункт:
148
150
  sg: Пункт
@@ -95,6 +95,7 @@ admonition: {
95
95
  caution: 注意,
96
96
  important: 重要,
97
97
  safety precautions: 安全须知,
98
+ editorial: 编辑说明
98
99
  }
99
100
  locality: {
100
101
  section: 条,
@@ -132,4 +133,5 @@ relatedterms:
132
133
  compare: 比较
133
134
  contrast: 对比
134
135
  see: 见
136
+ seealso: 参见
135
137
 
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.1.2
4
+ version: 2.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-06 00:00:00.000000000 Z
11
+ date: 2022-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciimath
@@ -504,7 +504,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
504
504
  - !ruby/object:Gem::Version
505
505
  version: '0'
506
506
  requirements: []
507
- rubygems_version: 3.3.7
507
+ rubygems_version: 3.3.16
508
508
  signing_key:
509
509
  specification_version: 4
510
510
  summary: Convert documents in IsoDoc into Word and HTML in AsciiDoc.