isodoc 1.0.24 → 1.0.25

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: 50ac1215a8065519d1dbab07c61a8c4e84dbc90923300bef4f6e44e4b9a8a843
4
- data.tar.gz: b89e80351f424c11fb7cb2b92c838a8b8b05f2791a1f91a1d531b14611632229
3
+ metadata.gz: b0256be2230e0c8757987eb82dee6f8ced68e1cc8794964fabbc446e78d53195
4
+ data.tar.gz: a8bc10c2952aacf1542b3a4a1edae6c363bee78604dea3c541f9fd769031ea13
5
5
  SHA512:
6
- metadata.gz: d5ca6cf434f62383545145ccb02adccc060cc9fc5b79478655a5eaa21ca03332f1032baa87abc670935a586fa2cd957f3b8c9358e40802f33dcbc978e8da4b0a
7
- data.tar.gz: 01f839c290c1e557a162e2ae43aba2c8ecb291b86664759d72eeacd80b1f338734ce470827cd35485446b589f77b637a5cece6f3118b0855d2494f7537adc1e1
6
+ metadata.gz: b54f7daa32cc4e7e80a560dfd660f76bf4acae581cda2c3b7f89012ab368da2d0951dec308982bea80e07b1e9d59eed1d170aecae686f42b82f31843a9fff4e9
7
+ data.tar.gz: 75bceea7c655e1bf34de59ed6eb185596966c70b09f4da3c786c80fb57394a8e28c7f87cd47b1a795bee0b5e72d08f372981c587f27e3fb31240a96668cebeaf
@@ -29,10 +29,10 @@ jobs:
29
29
  - name: Use Node
30
30
  uses: actions/setup-node@v1
31
31
  with:
32
- node-version: '8'
32
+ node-version: '12'
33
33
  - name: Install Puppeteer
34
34
  run: |
35
- npm install -g puppeteer
35
+ npm install -g puppeteer@3.0.1
36
36
  - name: Run specs
37
37
  run: |
38
38
  bundle exec rake
@@ -29,10 +29,12 @@ jobs:
29
29
  - name: Use Node
30
30
  uses: actions/setup-node@v1
31
31
  with:
32
- node-version: '8'
32
+ node-version: '12'
33
33
  - name: Install Puppeteer
34
34
  run: |
35
- npm install -g puppeteer
35
+ sudo apt-get update
36
+ sudo apt-get install libgbm1
37
+ npm install -g puppeteer@3.0.1
36
38
  - name: Run specs
37
39
  run: |
38
40
  bundle exec rake
@@ -31,10 +31,10 @@ jobs:
31
31
  - name: Use Node
32
32
  uses: actions/setup-node@v1
33
33
  with:
34
- node-version: '8'
34
+ node-version: '12'
35
35
  - name: Install Puppeteer
36
36
  run: |
37
- npm install -g puppeteer
37
+ npm install -g puppeteer@3.0.1
38
38
  - name: Run specs
39
39
  run: |
40
40
  bundle exec rake
@@ -6,7 +6,9 @@ introduction: Introduction
6
6
  foreword: Foreword
7
7
  abstract: Abstract
8
8
  termsdef: Terms and definitions
9
- termsdefsymbols: Terms, definitions, symbols and abbreviated terms
9
+ termsdefsymbolsabbrev: Terms, definitions, symbols and abbreviated terms
10
+ termsdefsymbols: Terms, definitions and symbols
11
+ termsdefabbrev: Terms, definitions and abbreviated terms
10
12
  normref: Normative references
11
13
  bibliography: Bibliography
12
14
  clause: Clause
@@ -6,7 +6,9 @@ introduction: Introduction
6
6
  foreword: Avant-propos
7
7
  abstract: Résumé
8
8
  termsdef: Terms et définitions
9
- termsdefsymbols: Terms, définitions, symboles et termes abrégés
9
+ termsdefsymbolsabbrev: Terms, définitions, symboles et termes abrégés
10
+ termsdefsymbols: Terms, définitions et symboles
11
+ termsdefabbrev: Terms, définitions et termes abrégés
10
12
  normref: Références normatives
11
13
  bibliography: Bibliographie
12
14
  clause: Article
@@ -6,7 +6,9 @@ introduction: 引言
6
6
  foreword: 前言
7
7
  abstract: 摘要
8
8
  termsdef: 术语和定义
9
- termsdefsymbols: 术语、定义、符号、代号和缩略语
9
+ termsdefsymbolsabbrev: 术语、定义、符号、代号和缩略语
10
+ termsdefsymbols: 术语、定义、符号和代号
11
+ termsdefabbrev: 术语、定义、符号和缩略语
10
12
  normref: 规范性引用文件
11
13
  bibliography: 参考文献
12
14
  clause: 条
@@ -48,6 +48,7 @@ module IsoDoc
48
48
  @olstyle = options[:olstyle]
49
49
  @datauriimage = options[:datauriimage]
50
50
  @suppressheadingnumbers = options[:suppressheadingnumbers]
51
+ @break_up_urls_in_tables = options[:break_up_urls_in_tables] == "true"
51
52
  @termdomain = ""
52
53
  @termexample = false
53
54
  @note = false
@@ -20,6 +20,7 @@ module IsoDoc::Function
20
20
  end
21
21
 
22
22
  def table_long_strings_cleanup(docxml)
23
+ return unless @break_up_urls_in_tables == true
23
24
  docxml.xpath("//td | //th").each do |d|
24
25
  d.traverse do |n|
25
26
  next unless n.text?
@@ -30,6 +31,7 @@ module IsoDoc::Function
30
31
  end
31
32
 
32
33
  def break_up_long_strings(t)
34
+ return t if t.match(/^\s*$/)
33
35
  t.split(/(?=\s)/).map do |w|
34
36
  (/^\s*$/.match(t) or w.size < 30) ? w :
35
37
  w.scan(/.{,30}/).map do |w1|
@@ -107,6 +107,14 @@ module IsoDoc::Function
107
107
  end
108
108
  end
109
109
 
110
+ def origin_parse(node, out)
111
+ if t = node.at(ns("./termref"))
112
+ termrefelem_parse(t, out)
113
+ else
114
+ eref_parse(node, out)
115
+ end
116
+ end
117
+
110
118
  def termrefelem_parse(node, out)
111
119
  out << "Termbase #{node['base']}, term ID #{node['target']}"
112
120
  end
@@ -109,20 +109,29 @@ module IsoDoc::Function
109
109
  num
110
110
  end
111
111
 
112
- def terms_defs_title(f)
113
- symbols = f.at(ns(".//definitions"))
114
- return @termsdefsymbols_lbl if symbols
115
- @termsdef_lbl
116
- end
117
-
118
112
  TERM_CLAUSE = "//sections/terms | "\
119
113
  "//sections/clause[descendant::terms]".freeze
120
114
 
115
+ def term_def_title(title)
116
+ case title&.text
117
+ when "Terms, definitions, symbols and abbreviated terms"
118
+ @labels["termsdefsymbolsabbrev"]
119
+ when "Terms, definitions and symbols"
120
+ @labels["termsdefsymbols"]
121
+ when "Terms, definitions and abbreviated terms"
122
+ @labels["termsdefabbrev"]
123
+ when "Terms and definitions"
124
+ @labels["termsdef"]
125
+ else
126
+ title
127
+ end
128
+ end
129
+
121
130
  def terms_defs(isoxml, out, num)
122
131
  f = isoxml.at(ns(TERM_CLAUSE)) or return num
123
132
  out.div **attr_code(id: f["id"]) do |div|
124
133
  num = num + 1
125
- clause_name(num, terms_defs_title(f), div, nil)
134
+ clause_name(num, term_def_title(f&.at(ns("./title"))), div, nil)
126
135
  f.elements.each do |e|
127
136
  parse(e, div) unless %w{title source}.include? e.name
128
137
  end
@@ -157,7 +157,7 @@ module IsoDoc::Function
157
157
  when "clause" then clause_parse(node, out)
158
158
  when "xref" then xref_parse(node, out)
159
159
  when "eref" then eref_parse(node, out)
160
- when "origin" then eref_parse(node, out)
160
+ when "origin" then origin_parse(node, out)
161
161
  when "link" then link_parse(node, out)
162
162
  when "ul" then ul_parse(node, out)
163
163
  when "ol" then ol_parse(node, out)
@@ -64,7 +64,7 @@ module IsoDoc::Function
64
64
 
65
65
  CLAUSE_ANCESTOR =
66
66
  ".//ancestor::*[local-name() = 'annex' or "\
67
- "local-name() = 'acknowledgements' or "\
67
+ "local-name() = 'acknowledgements' or local-name() = 'term' or "\
68
68
  "local-name() = 'appendix' or local-name() = 'foreword' or "\
69
69
  "local-name() = 'introduction' or local-name() = 'terms' or "\
70
70
  "local-name() = 'clause' or local-name() = 'references']/@id".freeze
@@ -78,7 +78,7 @@ module IsoDoc::Function
78
78
  ".//ancestor::*[local-name() = 'annex' or "\
79
79
  "local-name() = 'foreword' or local-name() = 'appendix' or "\
80
80
  "local-name() = 'introduction' or local-name() = 'terms' or "\
81
- "local-name() = 'acknowledgements' or "\
81
+ "local-name() = 'acknowledgements' or local-name() = 'term' or "\
82
82
  "local-name() = 'clause' or local-name() = 'references' or "\
83
83
  "local-name() = 'figure' or local-name() = 'formula' or "\
84
84
  "local-name() = 'table' or local-name() = 'example']/@id".freeze
@@ -110,7 +110,8 @@ module IsoDoc::Function
110
110
  end
111
111
 
112
112
  def header_strip(h)
113
- h = h.to_s.gsub(%r{<br/>}, " ").sub(/<\/?h[123456][^>]*>/, "")
113
+ h = h.to_s.gsub(%r{<br\s*/>}, " ").gsub(/<\/?h[123456][^>]*>/, "").
114
+ gsub(/<\/?b[^>]*>/, "")
114
115
  h1 = to_xhtml_fragment(h.dup)
115
116
  h1.traverse do |x|
116
117
  x.replace(" ") if x.name == "span" && /mso-tab-count/.match(x["style"])
@@ -79,7 +79,7 @@ module IsoDoc::Function
79
79
  "//references[title = 'Normative References' or title = "\
80
80
  "'Normative references'] | "\
81
81
  "//sections/terms | //preface/abstract | //foreword | "\
82
- "//introduction | //preface/clause | //acknowledgements "\
82
+ "//introduction | //preface/clause | //acknowledgements | "\
83
83
  "//sections/definitions | //clause[parent::sections]"
84
84
  sequential_asset_names(d.xpath(ns(middle_sections)))
85
85
  end
@@ -48,7 +48,7 @@ module IsoDoc::HtmlFunction
48
48
  end
49
49
 
50
50
  def table_footnote_parse(node, out)
51
- fn = node["reference"]
51
+ fn = node["reference"] || UUIDTools::UUID.random_create.to_s
52
52
  tid = get_table_ancestor_id(node)
53
53
  make_table_footnote_link(out, tid + fn, fn)
54
54
  # do not output footnote text if we have already seen it for this table
@@ -64,7 +64,7 @@ module IsoDoc::HtmlFunction
64
64
  def footnote_parse(node, out)
65
65
  return table_footnote_parse(node, out) if (@in_table || @in_figure) &&
66
66
  !node.ancestors.map {|m| m.name }.include?("name")
67
- fn = node["reference"]
67
+ fn = node["reference"] || UUIDTools::UUID.random_create.to_s
68
68
  attrs = { "epub:type": "footnote", rel: "footnote", href: "#fn:#{fn}" }
69
69
  out.a **attrs do |a|
70
70
  a.sup { |sup| sup << fn }
@@ -108,7 +108,7 @@ module IsoDoc::HtmlFunction
108
108
  idx = docxml.at("//div[@id = 'toc']") or return docxml
109
109
  toc = "<ul>"
110
110
  path = toclevel_classes.map do |l|
111
- "//main//#{l}[not(@class = 'TermNum')][not(@class = 'noTOC')][not(text())]"
111
+ "//main//#{l}[not(@class = 'TermNum')][not(@class = 'noTOC')][text()]"
112
112
  end
113
113
  docxml.xpath(path.join(" | ")).each_with_index do |h, tocidx|
114
114
  h["id"] ||= "toc#{tocidx}"
@@ -3,7 +3,8 @@ require_relative "./metadata_date"
3
3
  module IsoDoc
4
4
  class Metadata
5
5
  DATETYPES = %w{published accessed created implemented obsoleted confirmed
6
- updated issued received transmitted copied unchanged circulated}.freeze
6
+ updated issued received transmitted copied unchanged circulated vote-started
7
+ vote-ended}.freeze
7
8
 
8
9
  def ns(xpath)
9
10
  Common::ns(xpath)
@@ -15,7 +16,7 @@ module IsoDoc
15
16
 
16
17
  def initialize(lang, script, labels)
17
18
  @metadata = {}
18
- DATETYPES.each { |w| @metadata["#{w}date".to_sym] = "XXX" }
19
+ DATETYPES.each { |w| @metadata["#{w.gsub(/-/, "_")}date".to_sym] = "XXX" }
19
20
  @lang = lang
20
21
  @script = script
21
22
  @c = HTMLEntities.new
@@ -84,7 +85,7 @@ module IsoDoc
84
85
 
85
86
  def bibdate(isoxml, _out)
86
87
  isoxml.xpath(ns("//bibdata/date")).each do |d|
87
- set("#{d['type']}date".to_sym, Common::date_range(d))
88
+ set("#{d['type'].gsub(/-/, "_")}date".to_sym, Common::date_range(d))
88
89
  end
89
90
  end
90
91
 
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "1.0.24".freeze
2
+ VERSION = "1.0.25".freeze
3
3
  end
@@ -204,10 +204,6 @@ module IsoDoc::WordFunction
204
204
  alt: node["alt"],
205
205
  title: node["title"],
206
206
  width: node["width"] }
207
- if node["height"] == "auto" || node["width"] == "auto"
208
- attrs[:height] = nil
209
- attrs[:width] = nil
210
- end
211
207
  out.img **attr_code(attrs)
212
208
  image_title_parse(out, caption)
213
209
  end
@@ -56,7 +56,7 @@ module IsoDoc::WordFunction
56
56
  end
57
57
 
58
58
  def table_footnote_parse(node, out)
59
- fn = node["reference"]
59
+ fn = node["reference"] || UUIDTools::UUID.random_create.to_s
60
60
  tid = get_table_ancestor_id(node)
61
61
  make_table_footnote_link(out, tid + fn, fn)
62
62
  # do not output footnote text if we have already seen it for this table
@@ -80,7 +80,7 @@ module IsoDoc::WordFunction
80
80
  def footnote_parse(node, out)
81
81
  return table_footnote_parse(node, out) if (@in_table || @in_figure) &&
82
82
  !node.ancestors.map {|m| m.name }.include?("name")
83
- fn = node["reference"]
83
+ fn = node["reference"] || UUIDTools::UUID.random_create.to_s
84
84
  return seen_footnote_parse(node, out, fn) if @seen_footnote.include?(fn)
85
85
  @fn_bookmarks[fn] = bookmarkid
86
86
  out.span **{style: "mso-bookmark:_Ref#{@fn_bookmarks[fn]}"} do |s|
@@ -39,7 +39,6 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
39
39
  end
40
40
 
41
41
  def toWord(result, filename, dir, header)
42
- #result = populate_template(result, :word)
43
42
  result = from_xhtml(word_cleanup(to_xhtml(result)))
44
43
  unless @landscapestyle.empty?
45
44
  @wordstylesheet&.open
@@ -196,6 +195,8 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
196
195
  @landscapestyle = ""
197
196
  word_section_breaks1(docxml, "WordSection2")
198
197
  word_section_breaks1(docxml, "WordSection3")
198
+ word_remove_pb_before_annex(docxml)
199
+ docxml.xpath("//br[@orientation]").each { |br| br.delete("orientation") }
199
200
  end
200
201
 
201
202
  def word_section_breaks1(docxml, sect)
@@ -203,7 +204,6 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
203
204
  each_with_index do |br, i|
204
205
  @landscapestyle += "\ndiv.#{sect}_#{i} {page:#{sect}"\
205
206
  "#{br["orientation"] == "landscape" ? "L" : "P"};}\n"
206
- br.delete("orientation")
207
207
  split_at_section_break(docxml, sect, br, i)
208
208
  end
209
209
  end
@@ -219,6 +219,17 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
219
219
  end
220
220
  end
221
221
 
222
+ # applies for <div class="WordSectionN_M"><p><pagebreak/></p>...
223
+ def word_remove_pb_before_annex(docxml)
224
+ docxml.xpath("//div[p/br]").each do |d|
225
+ /^WordSection\d+_\d+$/.match(d["class"]) or next
226
+ d.elements[0].name == "p" && !d.elements[0].elements.empty? or next
227
+ d.elements[0].elements[0].name == "br" && d.elements[0].elements[0]["style"] ==
228
+ "mso-special-character:line-break;page-break-before:always" or next
229
+ d.elements[0].remove
230
+ end
231
+ end
232
+
222
233
  def word_footnote_format(docxml)
223
234
  # the content is in a[@epub:type = 'footnote']//sup, but in Word,
224
235
  # we need to inject content around the autonumbered footnote reference
@@ -417,8 +417,8 @@ B</pre>
417
417
  <div id="figureA-1" class="figure">
418
418
 
419
419
  <img src="rice_images/rice_image1.png" height="20" width="30" alt="alttext" title="titletext"/>
420
- <img src="rice_images/rice_image1.png"/>
421
- <img src="_.gif"/>
420
+ <img src="rice_images/rice_image1.png" height='20' width='auto'/>
421
+ <img src='_.gif' height='20' width='auto'/>
422
422
  <a href="#_" class="TableFootnoteRef">a</a><aside><div id="ftn_"><span><span id="_" class="TableFootnoteRef">a</span><span style="mso-tab-count:1">&#160; </span></span>
423
423
  <p id="_">The time <span class="stem">(#(t_90)#)</span> was estimated to be 18,2 min for this example.</p>
424
424
  </div></aside>
@@ -969,7 +969,7 @@ World</p>
969
969
  INPUT
970
970
  #{HTML_HDR}
971
971
  <p class="zzSTDTitle1"/>
972
- <div><h1>1.&#160; Terms and definitions</h1>
972
+ <div><h1>1.&#160; </h1>
973
973
  <p class="TermNum" id="_extraneous_matter">1.1.</p><p class="Terms" style="text-align:left;">extraneous matter</p><p class="AltTerms" style="text-align:left;">EM</p>
974
974
 
975
975
  <p id="_318b3939-be09-46c4-a284-93f9826b981e">&lt;rice&gt; organic and inorganic components other than whole or broken kernels</p>
@@ -715,7 +715,7 @@ INPUT
715
715
  OUTPUT
716
716
  end
717
717
 
718
- it "breaks up very long strings in tables" do
718
+ it "does not break up very long strings in tables by default" do
719
719
  expect(xmlpp(IsoDoc::HtmlConvert.new({}).cleanup(Nokogiri::XML(<<~"INPUT")).to_s)).to be_equivalent_to xmlpp(<<~"OUTPUT")
720
720
  <html xmlns:epub="http://www.idpf.org/2007/ops">
721
721
  <head>
@@ -739,6 +739,7 @@ INPUT
739
739
  <td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">Description</td>
740
740
  <td align="center" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;">Rice sample</td>
741
741
  </tr>
742
+ </thead>
742
743
  <tbody>
743
744
  <tr>
744
745
  <td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBB</td>
@@ -775,6 +776,90 @@ INPUT
775
776
  <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>Description</td>
776
777
  <td align='center' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;'>Rice sample</td>
777
778
  </tr>
779
+ </thead>
780
+ <tbody>
781
+ <tr>
782
+ <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
783
+ http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBB
784
+ </td>
785
+ <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
786
+ http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB </td>
787
+ <td align='center' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;'>
788
+ www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB
789
+ </td>
790
+ </tr>
791
+ </tbody>
792
+ </table>
793
+ </div>
794
+ </div>
795
+ </body>
796
+ </head>
797
+ </html>
798
+ OUTPUT
799
+ end
800
+
801
+ it "breaks up very long strings in tables on request" do
802
+ expect(xmlpp(IsoDoc::HtmlConvert.new({break_up_urls_in_tables: "true"}).cleanup(Nokogiri::XML(<<~"INPUT")).to_s)).to be_equivalent_to xmlpp(<<~"OUTPUT")
803
+ <html xmlns:epub="http://www.idpf.org/2007/ops">
804
+ <head>
805
+ <title>test</title>
806
+ <body lang="EN-US" link="blue" vlink="#954F72">
807
+ <div class="WordSection1">
808
+ <p>&#160;</p>
809
+ </div>
810
+ <br clear="all" class="section"/>
811
+ <div class="WordSection2">
812
+ <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
813
+ <div>
814
+ <h1 class="ForewordTitle">Foreword</h1>
815
+ <p class="TableTitle" align="center">
816
+ <b>Table 1&#160;&#8212; Repeatability and reproducibility of husked rice yield</b>
817
+ </p>
818
+ <table id="tableD-1" class="MsoISOTable" border="1" cellspacing="0" cellpadding="0">
819
+ <thead>
820
+ <tr>
821
+ <td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">Description</td>
822
+ <td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">Description</td>
823
+ <td align="center" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;">Rice sample</td>
824
+ </tr>
825
+ </thead>
826
+ <tbody>
827
+ <tr>
828
+ <td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBB</td>
829
+ <td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB</td>
830
+ <td align="center" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;">www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB</td>
831
+ </tr>
832
+ </tbody>
833
+ </table>
834
+ </div>
835
+ </div>
836
+ </body>
837
+ </html>
838
+ INPUT
839
+ <?xml version='1.0'?>
840
+ <html xmlns:epub='http://www.idpf.org/2007/ops'>
841
+ <head>
842
+ <title>test</title>
843
+ <body lang='EN-US' link='blue' vlink='#954F72'>
844
+ <div class='WordSection1'>
845
+ <p>&#xA0;</p>
846
+ </div>
847
+ <br clear='all' class='section'/>
848
+ <div class='WordSection2'>
849
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
850
+ <div>
851
+ <h1 class='ForewordTitle'>Foreword</h1>
852
+ <p class='TableTitle' align='center'>
853
+ <b>Table 1&#xA0;&#x2014; Repeatability and reproducibility of husked rice yield</b>
854
+ </p>
855
+ <table id='tableD-1' class='MsoISOTable' border='1' cellspacing='0' cellpadding='0'>
856
+ <thead>
857
+ <tr>
858
+ <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>Description</td>
859
+ <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>Description</td>
860
+ <td align='center' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;'>Rice sample</td>
861
+ </tr>
862
+ </thead>
778
863
  <tbody>
779
864
  <tr>
780
865
  <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
@@ -794,7 +879,6 @@ ABBBBBBBBBBBBBBBBBBBBBBBBBBBB
794
879
  </td>
795
880
  </tr>
796
881
  </tbody>
797
- </thead>
798
882
  </table>
799
883
  </div>
800
884
  </div>
@@ -804,7 +888,8 @@ ABBBBBBBBBBBBBBBBBBBBBBBBBBBB
804
888
  OUTPUT
805
889
  end
806
890
 
807
- it "breaks up very long strings in tables (Word)" do
891
+
892
+ it "does not break up very long strings in tables by default (Word)" do
808
893
  expect(xmlpp(IsoDoc::WordConvert.new({}).cleanup(Nokogiri::XML(<<~"INPUT")).to_s)).to be_equivalent_to xmlpp(<<~"OUTPUT")
809
894
  <html xmlns:epub="http://www.idpf.org/2007/ops">
810
895
  <head>
@@ -828,16 +913,17 @@ ABBBBBBBBBBBBBBBBBBBBBBBBBBBB
828
913
  <td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">Description</td>
829
914
  <td align="center" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;">Rice sample</td>
830
915
  </tr>
916
+ </thead>
831
917
  <tbody>
832
918
  <tr>
833
919
  <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
834
- http://www.example.com/ &amp;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA/ BBBBBBBBBBBBBBBBBBBBBBBBBBBB
920
+ http://www.example.com/&amp;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBB
835
921
  </td>
836
922
  <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
837
- http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAABBBBBBBBBBBBBBBBBBBBBB BBBBBB
923
+ http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB
838
924
  </td>
839
925
  <td align='center' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;'>
840
- www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABBBBBBBBBBBBBBBBBBBBBBBBBBBB
926
+ www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB
841
927
  </td>
842
928
  </tr>
843
929
  </tbody>
@@ -870,20 +956,104 @@ ABBBBBBBBBBBBBBBBBBBBBBBBBBBB
870
956
  <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>Description</td>
871
957
  <td align='center' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;'>Rice sample</td>
872
958
  </tr>
959
+ </thead>
873
960
  <tbody>
874
961
  <tr>
875
962
  <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
876
- http://www.example.com/ &amp;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA/ BBBBBBBBBBBBBBBBBBBBBBBBBBBB
963
+ http://www.example.com/&amp;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBB
877
964
  </td>
878
965
  <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
879
- http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAABBBBBBBBBBBBBBBBBBBBBB BBBBBB
966
+ http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB
880
967
  </td>
881
968
  <td align='center' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;'>
882
- www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABBBBBBBBBBBBBBBBBBBBBBBBBBBB
969
+ www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB
970
+ </td>
971
+ </tr>
972
+ </tbody>
973
+ </table>
974
+ </div>
975
+ </div>
976
+ </body>
977
+ </head>
978
+ </html>
979
+ OUTPUT
980
+ end
981
+
982
+ it "breaks up very long strings in tables on request (Word)" do
983
+ expect(xmlpp(IsoDoc::WordConvert.new({break_up_urls_in_tables: "true"}).cleanup(Nokogiri::XML(<<~"INPUT")).to_s)).to be_equivalent_to xmlpp(<<~"OUTPUT")
984
+ <html xmlns:epub="http://www.idpf.org/2007/ops">
985
+ <head>
986
+ <title>test</title>
987
+ <body lang="EN-US" link="blue" vlink="#954F72">
988
+ <div class="WordSection1">
989
+ <p>&#160;</p>
990
+ </div>
991
+ <br clear="all" class="section"/>
992
+ <div class="WordSection2">
993
+ <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
994
+ <div>
995
+ <h1 class="ForewordTitle">Foreword</h1>
996
+ <p class="TableTitle" align="center">
997
+ <b>Table 1&#160;&#8212; Repeatability and reproducibility of husked rice yield</b>
998
+ </p>
999
+ <table id="tableD-1" class="MsoISOTable" border="1" cellspacing="0" cellpadding="0">
1000
+ <thead>
1001
+ <tr>
1002
+ <td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">Description</td>
1003
+ <td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">Description</td>
1004
+ <td align="center" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;">Rice sample</td>
1005
+ </tr>
1006
+ </thead>
1007
+ <tbody>
1008
+ <tr>
1009
+ <td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBB</td>
1010
+ <td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB</td>
1011
+ <td align="center" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;">www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB</td>
1012
+ </tr>
1013
+ </tbody>
1014
+ </table>
1015
+ </div>
1016
+ </div>
1017
+ </body>
1018
+ </html>
1019
+ INPUT
1020
+ <?xml version='1.0'?>
1021
+ <html xmlns:epub='http://www.idpf.org/2007/ops'>
1022
+ <head>
1023
+ <title>test</title>
1024
+ <body lang='EN-US' link='blue' vlink='#954F72'>
1025
+ <div class='WordSection1'>
1026
+ <p>&#xA0;</p>
1027
+ </div>
1028
+ <br clear='all' class='section'/>
1029
+ <div class='WordSection2'>
1030
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1031
+ <div>
1032
+ <h1 class='ForewordTitle'>Foreword</h1>
1033
+ <p class='TableTitle' align='center'>
1034
+ <b>Table 1&#xA0;&#x2014; Repeatability and reproducibility of husked rice yield</b>
1035
+ </p>
1036
+ <table id='tableD-1' class='MsoISOTable' border='1' cellspacing='0' cellpadding='0'>
1037
+ <thead>
1038
+ <tr>
1039
+ <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>Description</td>
1040
+ <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>Description</td>
1041
+ <td align='center' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;'>Rice sample</td>
1042
+ </tr>
1043
+ </thead>
1044
+ <tbody>
1045
+ <tr>
1046
+ <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
1047
+ http://www.example.com/ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA/ BBBBBBBBBBBBBBBBBBBBBBBBBBBB
1048
+ </td>
1049
+ <td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
1050
+ http://www.example.com/ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAABBBBBBBBBBBBBBBBBBBBBB BBBBBB
1051
+ </td>
1052
+ <td align='center' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;'>
1053
+ www.example.com/ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABBBBBBBBBBBBBBBBBBBBBBBBBBBB
883
1054
  </td>
884
1055
  </tr>
885
1056
  </tbody>
886
- </thead>
887
1057
  </table>
888
1058
  </div>
889
1059
  </div>
@@ -21,7 +21,7 @@ RSpec.describe IsoDoc do
21
21
  <p id="E">Text</p>
22
22
  </clause>
23
23
 
24
- <clause id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title><terms id="I" obligation="normative">
24
+ <clause id="H" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title><terms id="I" obligation="normative">
25
25
  <title>Normal Terms</title>
26
26
  <term id="J">
27
27
  <preferred>Term2</preferred>
@@ -157,7 +157,7 @@ RSpec.describe IsoDoc do
157
157
  <p id="E">Text</p>
158
158
  </clause>
159
159
 
160
- <clause id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title><terms id="I" obligation="normative">
160
+ <clause id="H" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title><terms id="I" obligation="normative">
161
161
  <title>Normal Terms</title>
162
162
  <term id="J">
163
163
  <preferred>Term2</preferred>
@@ -293,7 +293,7 @@ RSpec.describe IsoDoc do
293
293
  <p id="E">Text</p>
294
294
  </clause>
295
295
 
296
- <clause id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title><terms id="I" obligation="normative">
296
+ <clause id="H" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title><terms id="I" obligation="normative">
297
297
  <title>Normal Terms</title>
298
298
  <term id="J">
299
299
  <preferred>Term2</preferred>
@@ -430,7 +430,7 @@ RSpec.describe IsoDoc do
430
430
  <p id="E"><eref type="inline" bibitemid="ISO712"><locality type="table"><referenceFrom>1</referenceFrom><referenceTo>1</referenceTo></locality></eref></p>
431
431
  </clause>
432
432
 
433
- <clause id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title><terms id="I" obligation="normative">
433
+ <clause id="H" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title><terms id="I" obligation="normative">
434
434
  <title>Normal Terms</title>
435
435
  <term id="J">
436
436
  <preferred>Term2</preferred>
@@ -30,6 +30,8 @@ RSpec.describe IsoDoc do
30
30
  <date type="updated"><on>2018</on></date>
31
31
  <date type="unchanged"><on>2019</on></date>
32
32
  <date type="transmitted"><on>2020</on></date>
33
+ <date type="vote-started"><on>2021</on></date>
34
+ <date type="vote-ended"><on>2022</on></date>
33
35
  <edition>2</edition>
34
36
  <version>
35
37
  <revision-date>2016-05-01</revision-date>
@@ -92,7 +94,7 @@ RSpec.describe IsoDoc do
92
94
  </bibdata>
93
95
  </iso-standard>
94
96
  INPUT
95
- {:accesseddate=>"2012", :activateddate=>"2013", :agency=>"ISO", :authors=>["Barney Rubble", "Fred Flintstone"], :authors_affiliations=>{"Slate Inc., Bedrock"=>["Barney Rubble"], ""=>["Fred Flintstone"]}, :circulateddate=>"2015", :confirmeddate=>"2017", :copieddate=>"2016", :createddate=>"2010&ndash;2011", :doc=>"URL E", :docnumber=>"17301-1", :docnumeric=>"17301", :doctitle=>"Cereals and pulses", :doctype=>"International Standard", :docyear=>"2016", :draft=>"0.4", :draftinfo=>" (draft 0.4, 2016-05-01)", :edition=>"2", :html=>"URL B", :implementeddate=>"XXX", :issueddate=>"XXX", :iteration=>"2", :obsoleteddate=>"2014", :pdf=>"URL D", :publisheddate=>"2011", :publisher=>"", :receiveddate=>"XXX", :revdate=>"2016-05-01", :revdate_monthyear=>"May 2016", :stage=>"Committee draft", :stageabbr=>"CD", :substage=>"Withdrawn", :transmitteddate=>"2020", :unchangeddate=>"2019", :unpublished=>true, :updateddate=>"2018", :url=>"URL A", :xml=>"URL C"}
97
+ {:accesseddate=>"2012", :activateddate=>"2013", :agency=>"ISO", :authors=>["Barney Rubble", "Fred Flintstone"], :authors_affiliations=>{"Slate Inc., Bedrock"=>["Barney Rubble"], ""=>["Fred Flintstone"]}, :circulateddate=>"2015", :confirmeddate=>"2017", :copieddate=>"2016", :createddate=>"2010&ndash;2011", :doc=>"URL E", :docnumber=>"17301-1", :docnumeric=>"17301", :doctitle=>"Cereals and pulses", :doctype=>"International Standard", :docyear=>"2016", :draft=>"0.4", :draftinfo=>" (draft 0.4, 2016-05-01)", :edition=>"2", :html=>"URL B", :implementeddate=>"XXX", :issueddate=>"XXX", :iteration=>"2", :obsoleteddate=>"2014", :pdf=>"URL D", :publisheddate=>"2011", :publisher=>"", :receiveddate=>"XXX", :revdate=>"2016-05-01", :revdate_monthyear=>"May 2016", :stage=>"Committee draft", :stageabbr=>"CD", :substage=>"Withdrawn", :transmitteddate=>"2020", :unchangeddate=>"2019", :unpublished=>true, :updateddate=>"2018", :url=>"URL A", :vote_endeddate=>"2022", :vote_starteddate=>"2021", :xml=>"URL C"}
96
98
  OUTPUT
97
99
  end
98
100
 
@@ -166,7 +168,7 @@ OUTPUT
166
168
  </version>
167
169
  </iso-standard>
168
170
  INPUT
169
- {:accesseddate=>"XXX", :agency=>"ISO/IEC/IEEE", :authors=>[], :authors_affiliations=>{}, :circulateddate=>"XXX", :confirmeddate=>"XXX", :copieddate=>"XXX", :createddate=>"XXX", :docnumber=>"17301-1-3", :docnumeric=>"17301", :doctitle=>"Cereals and pulses", :doctype=>"International Standard", :docyear=>"2016", :draft=>"12", :draftinfo=>" (draft 12, 2016-05)", :edition=>nil, :implementeddate=>"XXX", :issueddate=>"XXX", :obsoleteddate=>"XXX", :obsoletes=>"IEC 8121", :obsoletes_part=>"3.1", :partof=>"IEC 8122", :publisheddate=>"2011-01", :publisher=>"International Organization for Standardization, International Electrotechnical Commission and Institute of Electrical and Electronics Engineers", :receiveddate=>"XXX", :revdate=>"2016-05", :revdate_monthyear=>"May 2016", :stage=>"Published", :transmitteddate=>"XXX", :unchangeddate=>"XXX", :unpublished=>false, :updateddate=>"XXX"}
171
+ {:accesseddate=>"XXX", :agency=>"ISO/IEC/IEEE", :authors=>[], :authors_affiliations=>{}, :circulateddate=>"XXX", :confirmeddate=>"XXX", :copieddate=>"XXX", :createddate=>"XXX", :docnumber=>"17301-1-3", :docnumeric=>"17301", :doctitle=>"Cereals and pulses", :doctype=>"International Standard", :docyear=>"2016", :draft=>"12", :draftinfo=>" (draft 12, 2016-05)", :edition=>nil, :implementeddate=>"XXX", :issueddate=>"XXX", :obsoleteddate=>"XXX", :obsoletes=>"IEC 8121", :obsoletes_part=>"3.1", :partof=>"IEC 8122", :publisheddate=>"2011-01", :publisher=>"International Organization for Standardization, International Electrotechnical Commission and Institute of Electrical and Electronics Engineers", :receiveddate=>"XXX", :revdate=>"2016-05", :revdate_monthyear=>"May 2016", :stage=>"Published", :transmitteddate=>"XXX", :unchangeddate=>"XXX", :unpublished=>false, :updateddate=>"XXX", :vote_endeddate=>"XXX", :vote_starteddate=>"XXX"}
170
172
  OUTPUT
171
173
  end
172
174
 
@@ -225,7 +227,7 @@ OUTPUT
225
227
  </bibdata>
226
228
  </iso-standard>
227
229
  INPUT
228
- {:accesseddate=>"XXX", :agency=>"ISO/IEC", :authors=>[], :authors_affiliations=>{}, :circulateddate=>"XXX", :confirmeddate=>"XXX", :copieddate=>"XXX", :createddate=>"XXX", :docnumber=>"17301-1-3", :docnumeric=>"17301", :doctitle=>"Cereals and pulses", :docyear=>"2016", :draft=>nil, :draftinfo=>"", :edition=>nil, :implementeddate=>"XXX", :issueddate=>"XXX", :obsoleteddate=>"XXX", :publisheddate=>"2011-01", :publisher=>"International Organization for Standardization et International Electrotechnical Commission", :receiveddate=>"XXX", :revdate=>"2016-05", :revdate_monthyear=>"Mai 2016", :stage=>"Published", :transmitteddate=>"XXX", :unchangeddate=>"XXX", :unpublished=>false, :updateddate=>"XXX"}
230
+ {:accesseddate=>"XXX", :agency=>"ISO/IEC", :authors=>[], :authors_affiliations=>{}, :circulateddate=>"XXX", :confirmeddate=>"XXX", :copieddate=>"XXX", :createddate=>"XXX", :docnumber=>"17301-1-3", :docnumeric=>"17301", :doctitle=>"Cereals and pulses", :docyear=>"2016", :draft=>nil, :draftinfo=>"", :edition=>nil, :implementeddate=>"XXX", :issueddate=>"XXX", :obsoleteddate=>"XXX", :publisheddate=>"2011-01", :publisher=>"International Organization for Standardization et International Electrotechnical Commission", :receiveddate=>"XXX", :revdate=>"2016-05", :revdate_monthyear=>"Mai 2016", :stage=>"Published", :transmitteddate=>"XXX", :unchangeddate=>"XXX", :unpublished=>false, :updateddate=>"XXX", :vote_endeddate=>"XXX", :vote_starteddate=>"XXX"}
229
231
  OUTPUT
230
232
  end
231
233
 
@@ -299,7 +299,7 @@ expect(File.exist?("test.doc")).to be true
299
299
  expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
300
300
  <div class="WordSection3">
301
301
  <p class="zzSTDTitle1"></p>
302
- <div><a name="_terms_and_definitions" id="_terms_and_definitions"></a><h1>1.<span style="mso-tab-count:1">&#xA0; </span>Terms and definitions</h1>
302
+ <div><a name="_terms_and_definitions" id="_terms_and_definitions"></a><h1>1.<span style="mso-tab-count:1">&#xA0; </span>Terms and Definitions</h1>
303
303
  <p class="TermNum"><a name="paddy1" id="paddy1"></a>1.1.</p><p class="Terms" style="text-align:left;">paddy</p>
304
304
  <p class="MsoNormal"><a name="_eb29b35e-123e-4d1c-b50b-2714d41e747f" id="_eb29b35e-123e-4d1c-b50b-2714d41e747f"></a>rice retaining its husk after threshing</p>
305
305
  <p class="MsoNormal">[SOURCE: <a href="#ISO7301">ISO 7301:2011, Clause 3.1</a>, modified &#x2014; The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here]</p></div>
@@ -1316,7 +1316,11 @@ OUTPUT
1316
1316
  <pagebreak orientation="portrait"/>
1317
1317
  <p>And up</p>
1318
1318
  </note>
1319
+ <pagebreak orientation="portrait"/>
1319
1320
  </clause></sections>
1321
+ <annex id="_level_1" inline-header="false" obligation="normative">
1322
+ <title>Annex 1</title>
1323
+ </annex>
1320
1324
  </standard-document>
1321
1325
  INPUT
1322
1326
  expect(File.exist?("test.doc")).to be true
@@ -1324,7 +1328,9 @@ OUTPUT
1324
1328
  expect(html).to include "div.WordSection2_0 {page:WordSection2P;}"
1325
1329
  expect(html).to include "div.WordSection2_1 {page:WordSection2L;}"
1326
1330
  expect(html).to include "div.WordSection3_0 {page:WordSection3P;}"
1327
- expect(html).to include "div.WordSection3_1 {page:WordSection3L;}"
1331
+ expect(html).to include "div.WordSection3_1 {page:WordSection3P;}"
1332
+ expect(html).to include "div.WordSection3_2 {page:WordSection3L;}"
1333
+
1328
1334
 
1329
1335
  expect(xmlpp(html.sub(/^.*<body /m, "<body ").sub(%r{</body>.*$}m, "</body>"))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1330
1336
  <body lang='EN-US' xml:lang='EN-US' link='blue' vlink='#954F72'>
@@ -1335,9 +1341,9 @@ expect(xmlpp(html.sub(/^.*<body /m, "<body ").sub(%r{</body>.*$}m, "</body>"))).
1335
1341
  <br clear='all' class='section'/>
1336
1342
  </p>
1337
1343
  <div class='WordSection2'>
1338
- <p class='MsoNormal'>
1339
- <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1340
- </p>
1344
+ <p class='MsoNormal'>
1345
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1346
+ </p>
1341
1347
  <div class='Section3' id=''>
1342
1348
  <h1 class='IntroTitle'>Introduction</h1>
1343
1349
  <p align='center' style='text-align:center' class='MsoNormal'>
@@ -1396,7 +1402,7 @@ expect(xmlpp(html.sub(/^.*<body /m, "<body ").sub(%r{</body>.*$}m, "</body>"))).
1396
1402
  </div>
1397
1403
  </div>
1398
1404
  </div>
1399
- <div class='WordSection3_1'>
1405
+ <div class='WordSection3_2'>
1400
1406
  <p class='TableTitle' style='text-align:center;'>Table 1</p>
1401
1407
  <div align='center' class='table_container'>
1402
1408
  <table class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;'>
@@ -1433,8 +1439,24 @@ expect(xmlpp(html.sub(/^.*<body /m, "<body ").sub(%r{</body>.*$}m, "</body>"))).
1433
1439
  <br clear='all' class='section'/>
1434
1440
  </p>
1435
1441
  </div>
1436
- <div class='WordSection3_0'>
1442
+ <div class='WordSection3_1'>
1437
1443
  <p class='Note'>And up</p>
1444
+ <p class='MsoNormal'>
1445
+ <br clear='all' class='section'/>
1446
+ </p>
1447
+ </div>
1448
+ <div class='WordSection3_0'>
1449
+ <div class='Section3'>
1450
+ <a name='_level_1' id='_level_1'/>
1451
+ <h1 class='Annex'>
1452
+ <b>Annex A</b>
1453
+ <br/>
1454
+ (normative)
1455
+ <br/>
1456
+ <br/>
1457
+ <b>Annex 1</b>
1458
+ </h1>
1459
+ </div>
1438
1460
  </div>
1439
1461
  <div style='mso-element:footnote-list'/>
1440
1462
  </body>
@@ -188,7 +188,7 @@ RSpec.describe IsoDoc do
188
188
  <div>
189
189
  <h1>2.&#160; Normative references</h1>
190
190
  </div>
191
- <div id="H"><h1>3.&#160; Terms, definitions, symbols and abbreviated terms</h1>
191
+ <div id="H"><h1>3.&#160; Terms, Definitions, Symbols and Abbreviated Terms</h1>
192
192
  <div id="I">
193
193
  <h2>3.1.&#160; Normal Terms</h2>
194
194
  <p class="TermNum" id="J">3.1.1.</p>
@@ -429,7 +429,7 @@ OUTPUT
429
429
  <div>
430
430
  <h1>2.<span style="mso-tab-count:1">&#160; </span>Normative references</h1>
431
431
  </div>
432
- <div id="H"><h1>3.<span style="mso-tab-count:1">&#160; </span>Terms, definitions, symbols and abbreviated terms</h1>
432
+ <div id="H"><h1>3.<span style="mso-tab-count:1">&#160; </span>Terms, Definitions, Symbols and Abbreviated Terms</h1>
433
433
  <div id="I">
434
434
  <h2>3.1.<span style="mso-tab-count:1">&#160; </span>Normal Terms</h2>
435
435
  <p class="TermNum" id="J">3.1.1.</p>
@@ -669,7 +669,12 @@ OUTPUT
669
669
  </div>
670
670
  <p class='zzSTDTitle1'/>
671
671
  <div id='H'>
672
- <h1>1.&#160; Terms, definitions, symbols and abbreviated terms</h1>
672
+ <h1>
673
+ 1.&#160; Terms, Definitions, Symbols and Abbreviated Terms
674
+ <a rel='footnote' href='#fn:10' epub:type='footnote'>
675
+ <sup>10</sup>
676
+ </a>
677
+ </h1>
673
678
  <div id='I'>
674
679
  <h2>
675
680
  1.1.&#160; Normal Terms
@@ -872,7 +877,7 @@ OUTPUT
872
877
  <div>
873
878
  <h1>Normative references</h1>
874
879
  </div>
875
- <div id="H"><h1>Terms, definitions, symbols and abbreviated terms</h1>
880
+ <div id="H"><h1>Terms, Definitions, Symbols and Abbreviated Terms</h1>
876
881
  <div id="I"><h2>Normal Terms</h2>
877
882
 
878
883
  <p class="TermNum" id="J">3.1.1.</p>
@@ -964,7 +969,7 @@ OUTPUT
964
969
  INPUT
965
970
  #{HTML_HDR}
966
971
  <p class="zzSTDTitle1"/>
967
- <div id="H"><h1>1.&#160; Terms and definitions</h1>
972
+ <div id="H"><h1>1.&#160; Terms, Definitions, Symbols and Abbreviated Terms</h1>
968
973
  <p class="TermNum" id="J">1.1.</p>
969
974
  <p class="Terms" style="text-align:left;">Term2</p>
970
975
  </div>
@@ -28,7 +28,26 @@ RSpec.describe IsoDoc do
28
28
  <modification>
29
29
  <p id="_e73a417d-ad39-417d-a4c8-20e4e2529489">The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here</p>
30
30
  </modification>
31
- </termsource></term>
31
+ </termsource>
32
+
33
+ <termsource status='identical'>
34
+ <origin citeas=''>
35
+ <termref base='IEV' target='xyz'>t1</termref>
36
+ </origin>
37
+ </termsource>
38
+
39
+ <termsource status='modified'>
40
+ <origin citeas=''>
41
+ <termref base='IEV' target='xyz'/>
42
+ </origin>
43
+ <modification>
44
+ <p id='_'>with adjustments</p>
45
+ </modification>
46
+ </termsource>
47
+
48
+
49
+
50
+ </term>
32
51
 
33
52
  <term id="paddy"><preferred>paddy</preferred><admitted>paddy rice</admitted>
34
53
  <admitted>rough rice</admitted>
@@ -55,7 +74,7 @@ RSpec.describe IsoDoc do
55
74
  INPUT
56
75
  #{HTML_HDR}
57
76
  <p class="zzSTDTitle1"/>
58
- <div id="_terms_and_definitions"><h1>1.&#160; Terms and definitions</h1><p>For the purposes of this document,
77
+ <div id="_terms_and_definitions"><h1>1.&#160; Terms and Definitions</h1><p>For the purposes of this document,
59
78
  the following terms and definitions apply.</p>
60
79
  <p class="TermNum" id="paddy1">1.1.</p><p class="Terms" style="text-align:left;">paddy</p>
61
80
 
@@ -75,7 +94,10 @@ RSpec.describe IsoDoc do
75
94
  <p>[TERMREF]
76
95
  <a href="#ISO7301">ISO 7301:2011, Clause 3.1</a>
77
96
  [MODIFICATION]The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here
78
- [/TERMREF]</p><p class="TermNum" id="paddy">1.2.</p><p class="Terms" style="text-align:left;">paddy</p><p class="AltTerms" style="text-align:left;">paddy rice</p>
97
+ [/TERMREF]</p>
98
+ <p>[TERMREF] Termbase IEV, term ID xyz [/TERMREF]</p>
99
+ <p>[TERMREF] Termbase IEV, term ID xyz [MODIFICATION]with adjustments [/TERMREF]</p>
100
+ <p class="TermNum" id="paddy">1.2.</p><p class="Terms" style="text-align:left;">paddy</p><p class="AltTerms" style="text-align:left;">paddy rice</p>
79
101
  <p class="AltTerms" style="text-align:left;">rough rice</p>
80
102
  <p class="DeprecatedTerms" style="text-align:left;">DEPRECATED: cargo rice</p>
81
103
  <p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p>
@@ -122,7 +144,26 @@ OUTPUT
122
144
  <modification>
123
145
  <p id="_e73a417d-ad39-417d-a4c8-20e4e2529489">The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here</p>
124
146
  </modification>
125
- </termsource></term>
147
+ </termsource>
148
+
149
+ <termsource status='identical'>
150
+ <origin citeas=''>
151
+ <termref base='IEV' target='xyz'>t1</termref>
152
+ </origin>
153
+ </termsource>
154
+
155
+ <termsource status='modified'>
156
+ <origin citeas=''>
157
+ <termref base='IEV' target='xyz'/>
158
+ </origin>
159
+ <modification>
160
+ <p id='_'>with adjustments</p>
161
+ </modification>
162
+ </termsource>
163
+
164
+
165
+
166
+ </term>
126
167
 
127
168
  <term id="paddy"><preferred>paddy</preferred><admitted>paddy rice</admitted>
128
169
  <admitted>rough rice</admitted>
@@ -149,7 +190,7 @@ OUTPUT
149
190
  INPUT
150
191
  #{WORD_HDR}
151
192
  <p class="zzSTDTitle1"/>
152
- <div id="_terms_and_definitions"><h1>1.<span style="mso-tab-count:1">&#160; </span>Terms and definitions</h1><p>For the purposes of this document,
193
+ <div id="_terms_and_definitions"><h1>1.<span style="mso-tab-count:1">&#160; </span>Terms and Definitions</h1><p>For the purposes of this document,
153
194
  the following terms and definitions apply.</p>
154
195
  <p class="TermNum" id="paddy1">1.1.</p><p class="Terms" style="text-align:left;">paddy</p>
155
196
 
@@ -169,7 +210,10 @@ OUTPUT
169
210
  <p>[TERMREF]
170
211
  <a href="#ISO7301">ISO 7301:2011, Clause 3.1</a>
171
212
  [MODIFICATION]The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here
172
- [/TERMREF]</p><p class="TermNum" id="paddy">1.2.</p><p class="Terms" style="text-align:left;">paddy</p><p class="AltTerms" style="text-align:left;">paddy rice</p>
213
+ [/TERMREF]</p>
214
+ <p>[TERMREF] Termbase IEV, term ID xyz [/TERMREF]</p>
215
+ <p>[TERMREF] Termbase IEV, term ID xyz [MODIFICATION]with adjustments [/TERMREF]</p>
216
+ <p class="TermNum" id="paddy">1.2.</p><p class="Terms" style="text-align:left;">paddy</p><p class="AltTerms" style="text-align:left;">paddy rice</p>
173
217
  <p class="AltTerms" style="text-align:left;">rough rice</p>
174
218
  <p class="DeprecatedTerms" style="text-align:left;">DEPRECATED: cargo rice</p>
175
219
  <p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p>
@@ -176,7 +176,7 @@ RSpec.describe IsoDoc do
176
176
  <a href="#N">Note</a>
177
177
  </p>
178
178
  </div>
179
- <div id="terms"><h1>2.&#160; Terms and definitions</h1>
179
+ <div id="terms"><h1>2.&#160; </h1>
180
180
  </div>
181
181
  <div id="widgets">
182
182
  <h1>3.&#160; Widgets</h1>
@@ -345,7 +345,7 @@ RSpec.describe IsoDoc do
345
345
  <a href="#N">Figure 2</a>
346
346
  </p>
347
347
  </div>
348
- <div id="terms"><h1>2.&#160; Terms and definitions</h1>
348
+ <div id="terms"><h1>2.&#160; </h1>
349
349
  </div>
350
350
  <div id="widgets">
351
351
  <h1>3.&#160; Widgets</h1>
@@ -492,7 +492,7 @@ RSpec.describe IsoDoc do
492
492
  <div id="scope">
493
493
  <h1>1.&#160; Scope</h1>
494
494
  </div>
495
- <div id="terms"><h1>2.&#160; Terms and definitions</h1>
495
+ <div id="terms"><h1>2.&#160; </h1>
496
496
  </div>
497
497
  <div id="widgets">
498
498
  <h1>3.&#160; Widgets</h1>
@@ -642,7 +642,7 @@ RSpec.describe IsoDoc do
642
642
  <a href="#N">Example</a>
643
643
  </p>
644
644
  </div>
645
- <div id="terms"><h1>2.&#160; Terms and definitions</h1>
645
+ <div id="terms"><h1>2.&#160; </h1>
646
646
  </div>
647
647
  <div id="widgets">
648
648
  <h1>3.&#160; Widgets</h1>
@@ -781,7 +781,7 @@ RSpec.describe IsoDoc do
781
781
  <a href="#N">Formula (2)</a>
782
782
  </p>
783
783
  </div>
784
- <div id="terms"><h1>2.&#160; Terms and definitions</h1>
784
+ <div id="terms"><h1>2.&#160; </h1>
785
785
  </div>
786
786
  <div id="widgets">
787
787
  <h1>3.&#160; Widgets</h1>
@@ -916,7 +916,7 @@ RSpec.describe IsoDoc do
916
916
  <a href="#N">Requirement 2</a>
917
917
  </p>
918
918
  </div>
919
- <div id="terms"><h1>2.&#160; Terms and definitions</h1>
919
+ <div id="terms"><h1>2.&#160; </h1>
920
920
  </div>
921
921
  <div id="widgets">
922
922
  <h1>3.&#160; Widgets</h1>
@@ -1061,7 +1061,7 @@ OUTPUT
1061
1061
  <a href="#N">Recommendation 2</a>
1062
1062
  </p>
1063
1063
  </div>
1064
- <div id="terms"><h1>2.&#160; Terms and definitions</h1>
1064
+ <div id="terms"><h1>2.&#160; </h1>
1065
1065
  </div>
1066
1066
  <div id="widgets">
1067
1067
  <h1>3.&#160; Widgets</h1>
@@ -1206,7 +1206,7 @@ OUTPUT
1206
1206
  <a href="#N">Permission 2</a>
1207
1207
  </p>
1208
1208
  </div>
1209
- <div id="terms"><h1>2.&#160; Terms and definitions</h1>
1209
+ <div id="terms"><h1>2.&#160; </h1>
1210
1210
  </div>
1211
1211
  <div id="widgets">
1212
1212
  <h1>3.&#160; Widgets</h1>
@@ -1520,7 +1520,7 @@ OUTPUT
1520
1520
  <a href="#N">Table 2</a>
1521
1521
  </p>
1522
1522
  </div>
1523
- <div id="terms"><h1>2.&#160; Terms and definitions</h1>
1523
+ <div id="terms"><h1>2.&#160; </h1>
1524
1524
  </div>
1525
1525
  <div id="widgets">
1526
1526
  <h1>3.&#160; Widgets</h1>
@@ -1599,7 +1599,7 @@ OUTPUT
1599
1599
  <div id="scope">
1600
1600
  <h1>1.&#160; Scope</h1>
1601
1601
  </div>
1602
- <div id="terms"><h1>2.&#160; Terms and definitions</h1>
1602
+ <div id="terms"><h1>2.&#160; </h1>
1603
1603
  <p class="TermNum" id="_waxy_rice">2.1.</p><p class="Terms" style="text-align:left;">waxy rice</p>
1604
1604
  <div class="Note"><p>Note 1 to entry: The starch of waxy rice consists almost entirely of amylopectin. The kernels have a tendency to stick together after cooking.</p></div><p class="TermNum" id="_nonwaxy_rice">2.2.</p><p class="Terms" style="text-align:left;">nonwaxy rice</p>
1605
1605
  <div class="Note"><p>Note 1 to entry: The starch of waxy rice consists almost entirely of amylopectin. The kernels have a tendency to stick together after cooking.</p></div>
@@ -1875,7 +1875,7 @@ OUTPUT
1875
1875
  <li><p>A</p></li>
1876
1876
  </ol>
1877
1877
  </div>
1878
- <div id="terms"><h1>2.&#160; Terms and definitions</h1>
1878
+ <div id="terms"><h1>2.&#160; </h1>
1879
1879
  </div>
1880
1880
  <div id="widgets">
1881
1881
  <h1>3.&#160; Widgets</h1>
@@ -2014,7 +2014,7 @@ OUTPUT
2014
2014
  <li id="N"><p>A</p></li>
2015
2015
  </ol>
2016
2016
  </div>
2017
- <div id="terms"><h1>2.&#160; Terms and definitions</h1>
2017
+ <div id="terms"><h1>2.&#160; </h1>
2018
2018
  </div>
2019
2019
  <div id="widgets">
2020
2020
  <h1>3.&#160; Widgets</h1>
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: 1.0.24
4
+ version: 1.0.25
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-17 00:00:00.000000000 Z
11
+ date: 2020-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciimath