isodoc 2.1.2 → 2.1.4

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: 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.