isodoc 1.6.4 → 1.7.0

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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +1 -1
  3. data/.rubocop.yml +1 -1
  4. data/isodoc.gemspec +2 -1
  5. data/lib/isodoc-yaml/i18n-ar.yaml +19 -25
  6. data/lib/isodoc-yaml/i18n-de.yaml +1 -0
  7. data/lib/isodoc-yaml/i18n-en.yaml +2 -0
  8. data/lib/isodoc-yaml/i18n-es.yaml +1 -0
  9. data/lib/isodoc-yaml/i18n-fr.yaml +2 -0
  10. data/lib/isodoc-yaml/i18n-ru.yaml +1 -0
  11. data/lib/isodoc-yaml/i18n-zh-Hans.yaml +2 -0
  12. data/lib/isodoc/convert.rb +4 -2
  13. data/lib/isodoc/function/blocks.rb +6 -5
  14. data/lib/isodoc/function/references.rb +33 -52
  15. data/lib/isodoc/function/section.rb +0 -1
  16. data/lib/isodoc/function/table.rb +21 -22
  17. data/lib/isodoc/function/terms.rb +6 -7
  18. data/lib/isodoc/gem_tasks.rb +8 -9
  19. data/lib/isodoc/html_convert.rb +5 -1
  20. data/lib/isodoc/html_function/comments.rb +12 -12
  21. data/lib/isodoc/html_function/html.rb +2 -2
  22. data/lib/isodoc/html_function/postprocess.rb +195 -185
  23. data/lib/isodoc/html_function/sectionsplit.rb +244 -0
  24. data/lib/isodoc/metadata.rb +22 -20
  25. data/lib/isodoc/metadata_contributor.rb +31 -28
  26. data/lib/isodoc/presentation_function/bibdata.rb +7 -0
  27. data/lib/isodoc/presentation_function/block.rb +7 -4
  28. data/lib/isodoc/presentation_function/inline.rb +7 -12
  29. data/lib/isodoc/presentation_function/section.rb +38 -1
  30. data/lib/isodoc/presentation_xml_convert.rb +2 -0
  31. data/lib/isodoc/version.rb +1 -1
  32. data/lib/isodoc/xref.rb +10 -7
  33. data/lib/isodoc/xref/xref_anchor.rb +45 -44
  34. data/lib/isodoc/xref/xref_counter.rb +113 -103
  35. data/lib/isodoc/xref/xref_gen.rb +39 -11
  36. data/spec/isodoc/blocks_spec.rb +184 -447
  37. data/spec/isodoc/cleanup_spec.rb +40 -42
  38. data/spec/isodoc/i18n_spec.rb +694 -821
  39. data/spec/isodoc/inline_spec.rb +197 -208
  40. data/spec/isodoc/metadata_spec.rb +384 -379
  41. data/spec/isodoc/postproc_spec.rb +121 -30
  42. data/spec/isodoc/presentation_xml_spec.rb +4 -4
  43. data/spec/isodoc/ref_spec.rb +5 -5
  44. data/spec/isodoc/section_spec.rb +216 -199
  45. data/spec/isodoc/sectionsplit_spec.rb +190 -0
  46. data/spec/isodoc/table_spec.rb +41 -42
  47. data/spec/isodoc/terms_spec.rb +1 -1
  48. data/spec/isodoc/xref_spec.rb +684 -1020
  49. metadata +19 -3
@@ -3,7 +3,7 @@ require_relative "xref_gen_seq"
3
3
  module IsoDoc::XrefGen
4
4
  module Blocks
5
5
  NUMBERED_BLOCKS = %w(termnote termexample note example requirement
6
- recommendation permission figure table formula admonition sourcecode).freeze
6
+ recommendation permission figure table formula admonition sourcecode).freeze
7
7
 
8
8
  def amend_preprocess(xmldoc)
9
9
  xmldoc.xpath(ns("//amend[newcontent]")).each do |a|
@@ -60,9 +60,9 @@ module IsoDoc::XrefGen
60
60
 
61
61
  c.increment(n)
62
62
  idx = increment_label(examples, n, c, false)
63
- @anchors[n["id"]] = {
64
- type: "termexample", label: idx, value: c.print,
65
- xref: l10n("#{anchor(t['id'], :xref)}, "\
63
+ @anchors[n["id"]] =
64
+ { type: "termexample", label: idx, value: c.print,
65
+ xref: l10n("#{anchor(t['id'], :xref)}, "\
66
66
  "#{@labels['example_xref']} #{c.print}") }
67
67
  end
68
68
  end
@@ -86,9 +86,8 @@ module IsoDoc::XrefGen
86
86
 
87
87
  def note_anchor_names(sections)
88
88
  sections.each do |s|
89
- notes = s.xpath(CHILD_NOTES_XPATH)
90
89
  c = Counter.new
91
- notes.each do |n|
90
+ (notes = s.xpath(CHILD_NOTES_XPATH)).each do |n|
92
91
  next if @anchors[n["id"]] || n["id"].nil? || n["id"].empty?
93
92
 
94
93
  @anchors[n["id"]] =
@@ -105,13 +104,12 @@ module IsoDoc::XrefGen
105
104
  "xmlns:example | ./xmlns:example".freeze
106
105
 
107
106
  CHILD_SECTIONS = "./clause | ./appendix | ./terms | ./definitions | "\
108
- "./references"
107
+ "./references".freeze
109
108
 
110
109
  def example_anchor_names(sections)
111
110
  sections.each do |s|
112
- notes = s.xpath(CHILD_EXAMPLES_XPATH)
113
111
  c = Counter.new
114
- notes.each do |n|
112
+ (notes = s.xpath(CHILD_EXAMPLES_XPATH)).each do |n|
115
113
  next if @anchors[n["id"]] || n["id"].nil? || n["id"].empty?
116
114
 
117
115
  @anchors[n["id"]] =
@@ -145,14 +143,44 @@ module IsoDoc::XrefGen
145
143
  label = "#{prev_label}.#{label}" unless prev_label.empty?
146
144
  label = "#{list_anchor[:xref]} #{label}" if refer_list
147
145
  li["id"] and @anchors[li["id"]] =
148
- { xref: "#{label})", type: "listitem",
149
- container: list_anchor[:container] }
146
+ { xref: "#{label})", type: "listitem",
147
+ container: list_anchor[:container] }
150
148
  li.xpath(ns("./ol")).each do |ol|
151
149
  list_item_anchor_names(ol, list_anchor, depth + 1, label, false)
152
150
  end
153
151
  end
154
152
  end
155
153
 
154
+ def deflist_anchor_names(sections)
155
+ sections.each do |s|
156
+ notes = s.xpath(ns(".//dl")) - s.xpath(ns(".//clause//dl")) -
157
+ s.xpath(ns(".//appendix//dl")) - s.xpath(ns(".//dl//dl"))
158
+ c = Counter.new
159
+ notes.each do |n|
160
+ next if n["id"].nil? || n["id"].empty?
161
+
162
+ @anchors[n["id"]] =
163
+ anchor_struct(increment_label(notes, n, c), n,
164
+ @labels["deflist"], "deflist", false)
165
+ deflist_term_anchor_names(n, @anchors[n["id"]])
166
+ end
167
+ deflist_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
168
+ end
169
+ end
170
+
171
+ def deflist_term_anchor_names(list, list_anchor)
172
+ list.xpath(ns("./dt")).each do |li|
173
+ label = li.text
174
+ label = l10n("#{list_anchor[:xref]}: #{label}")
175
+ li["id"] and @anchors[li["id"]] =
176
+ { xref: label, type: "deflistitem",
177
+ container: list_anchor[:container] }
178
+ li.xpath(ns("./dl")).each do |dl|
179
+ deflist_term_anchor_names(dl, list_anchor)
180
+ end
181
+ end
182
+ end
183
+
156
184
  def bookmark_anchor_names(docxml)
157
185
  docxml.xpath(ns(".//bookmark")).each do |n|
158
186
  next if n["id"].nil? || n["id"].empty?
@@ -100,7 +100,7 @@ RSpec.describe IsoDoc do
100
100
  </ext>
101
101
  </bibdata>
102
102
  <sections>
103
- <clause id="A" inline-header="false" obligation="normative">
103
+ <clause id="A" inline-header="false" obligation="normative" displayorder="1">
104
104
  <title depth="1">1.<tab/>Change Clause</title>
105
105
  <p id="C">
106
106
  <em>
@@ -256,7 +256,7 @@ RSpec.describe IsoDoc do
256
256
  <?xml version='1.0'?>
257
257
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
258
258
  <preface>
259
- <foreword>
259
+ <foreword displayorder="1">
260
260
  <note id='A' keep-with-next='true' keep-lines-together='true'>
261
261
  <name>NOTE</name>
262
262
  <p id='_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f'>
@@ -332,7 +332,7 @@ RSpec.describe IsoDoc do
332
332
  <?xml version='1.0'?>
333
333
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
334
334
  <preface>
335
- <foreword>
335
+ <foreword displayorder="1">
336
336
  <note id='note1'>
337
337
  <name>NOTE 1</name>
338
338
  <p id='_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f'>
@@ -591,7 +591,7 @@ RSpec.describe IsoDoc do
591
591
  presxml = <<~OUTPUT
592
592
  <?xml version='1.0'?>
593
593
  <iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
594
- <preface><foreword>
594
+ <preface><foreword displayorder="1">
595
595
  <figure id="figureA-1" keep-with-next="true" keep-lines-together="true">
596
596
  <name>Figure 1&#xA0;&#x2014; Split-it-right <em>sample</em> divider<fn reference="1"><p>X</p></fn></name>
597
597
  <image src="rice_images/rice_image1.png" height="20" width="30" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" mimetype="image/png" alt="alttext" title="titletxt"/>
@@ -735,7 +735,7 @@ RSpec.describe IsoDoc do
735
735
  presxml = <<~OUTPUT
736
736
  <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
737
737
  <preface>
738
- <foreword>
738
+ <foreword displayorder="1">
739
739
  <figure id='figureA-1'>
740
740
  <name>Figure 1</name>
741
741
  <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'>
@@ -955,7 +955,7 @@ RSpec.describe IsoDoc do
955
955
  <?xml version='1.0'?>
956
956
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
957
957
  <preface>
958
- <foreword>
958
+ <foreword displayorder="1">
959
959
  <example id='samplecode' keep-with-next='true' keep-lines-together='true'>
960
960
  <name>EXAMPLE&#xA0;&#x2014; Title</name>
961
961
  <p>Hello</p>
@@ -1030,9 +1030,12 @@ RSpec.describe IsoDoc do
1030
1030
  </body>
1031
1031
  </html>
1032
1032
  OUTPUT
1033
- expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
1034
- expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
1035
- expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(doc)
1033
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
1034
+ .convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
1035
+ expect(xmlpp(IsoDoc::HtmlConvert.new({})
1036
+ .convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
1037
+ expect(xmlpp(IsoDoc::WordConvert.new({})
1038
+ .convert("test", presxml, true))).to be_equivalent_to xmlpp(doc)
1036
1039
  end
1037
1040
 
1038
1041
  it "processes sequences of examples" do
@@ -1056,7 +1059,7 @@ RSpec.describe IsoDoc do
1056
1059
  <?xml version='1.0'?>
1057
1060
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
1058
1061
  <preface>
1059
- <foreword>
1062
+ <foreword displayorder="1">
1060
1063
  <example id='samplecode'>
1061
1064
  <name>EXAMPLE 1</name>
1062
1065
  <p>Hello</p>
@@ -1073,7 +1076,8 @@ RSpec.describe IsoDoc do
1073
1076
  </preface>
1074
1077
  </iso-standard>
1075
1078
  OUTPUT
1076
- expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", input, true))).to be_equivalent_to xmlpp(output)
1079
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
1080
+ .convert("test", input, true))).to be_equivalent_to xmlpp(output)
1077
1081
  end
1078
1082
 
1079
1083
  it "processes sourcecode" do
@@ -1094,7 +1098,7 @@ RSpec.describe IsoDoc do
1094
1098
  <?xml version='1.0'?>
1095
1099
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
1096
1100
  <preface>
1097
- <foreword>
1101
+ <foreword displayorder="1">
1098
1102
  <sourcecode lang='ruby' id='samplecode'>
1099
1103
  <name>
1100
1104
  Figure 1&#xA0;&#x2014; Ruby
@@ -1153,13 +1157,16 @@ RSpec.describe IsoDoc do
1153
1157
  </body>
1154
1158
  </html>
1155
1159
  OUTPUT
1156
- expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
1157
- expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
1158
- expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(doc)
1160
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
1161
+ .convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
1162
+ expect(xmlpp(IsoDoc::HtmlConvert.new({})
1163
+ .convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
1164
+ expect(xmlpp(IsoDoc::WordConvert.new({})
1165
+ .convert("test", presxml, true))).to be_equivalent_to xmlpp(doc)
1159
1166
  end
1160
1167
 
1161
1168
  it "processes sourcecode with escapes preserved" do
1162
- expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1169
+ input = <<~INPUT
1163
1170
  <iso-standard xmlns="http://riboseinc.com/isoxml">
1164
1171
  <preface><foreword>
1165
1172
  <sourcecode id="samplecode">
@@ -1169,6 +1176,7 @@ RSpec.describe IsoDoc do
1169
1176
  </foreword></preface>
1170
1177
  </iso-standard>
1171
1178
  INPUT
1179
+ output = <<~OUTPUT
1172
1180
  #{HTML_HDR}
1173
1181
  <br/>
1174
1182
  <div>
@@ -1181,10 +1189,12 @@ RSpec.describe IsoDoc do
1181
1189
  </body>
1182
1190
  </html>
1183
1191
  OUTPUT
1192
+ expect(xmlpp(IsoDoc::HtmlConvert.new({})
1193
+ .convert("test", input, true))).to be_equivalent_to xmlpp(output)
1184
1194
  end
1185
1195
 
1186
1196
  it "processes sourcecode with annotations" do
1187
- expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1197
+ input = <<~INPUT
1188
1198
  <iso-standard xmlns="http://riboseinc.com/isoxml">
1189
1199
  <preface><foreword>
1190
1200
  <sourcecode id="_">puts "Hello, world." <callout target="A">1</callout>
@@ -1198,6 +1208,7 @@ RSpec.describe IsoDoc do
1198
1208
  </foreword></preface>
1199
1209
  </iso-standard>
1200
1210
  INPUT
1211
+ output = <<~OUTPUT
1201
1212
  #{HTML_HDR}
1202
1213
  <br/>
1203
1214
  <div>
@@ -1209,10 +1220,12 @@ RSpec.describe IsoDoc do
1209
1220
  </body>
1210
1221
  </html>
1211
1222
  OUTPUT
1223
+ expect(xmlpp(IsoDoc::HtmlConvert.new({})
1224
+ .convert("test", input, true))).to be_equivalent_to xmlpp(output)
1212
1225
  end
1213
1226
 
1214
1227
  it "processes admonitions" do
1215
- expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1228
+ input = <<~INPUT
1216
1229
  <iso-standard xmlns="http://riboseinc.com/isoxml">
1217
1230
  <preface><foreword>
1218
1231
  <admonition id="_70234f78-64e5-4dfc-8b6f-f3f037348b6a" type="caution" keep-with-next="true" keep-lines-together="true">
@@ -1221,6 +1234,7 @@ RSpec.describe IsoDoc do
1221
1234
  </foreword></preface>
1222
1235
  </iso-standard>
1223
1236
  INPUT
1237
+ output = <<~OUTPUT
1224
1238
  #{HTML_HDR}
1225
1239
  <br/>
1226
1240
  <div>
@@ -1234,10 +1248,12 @@ RSpec.describe IsoDoc do
1234
1248
  </body>
1235
1249
  </html>
1236
1250
  OUTPUT
1251
+ expect(xmlpp(IsoDoc::HtmlConvert.new({})
1252
+ .convert("test", input, true))).to be_equivalent_to xmlpp(output)
1237
1253
  end
1238
1254
 
1239
1255
  it "processes admonitions with titles" do
1240
- expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1256
+ input = <<~INPUT
1241
1257
  <iso-standard xmlns="http://riboseinc.com/isoxml">
1242
1258
  <preface><foreword>
1243
1259
  <admonition id="_70234f78-64e5-4dfc-8b6f-f3f037348b6a" type="caution">
@@ -1247,6 +1263,7 @@ RSpec.describe IsoDoc do
1247
1263
  </foreword></preface>
1248
1264
  </iso-standard>
1249
1265
  INPUT
1266
+ output = <<~OUTPUT
1250
1267
  #{HTML_HDR}
1251
1268
  <br/>
1252
1269
  <div>
@@ -1260,10 +1277,12 @@ RSpec.describe IsoDoc do
1260
1277
  </body>
1261
1278
  </html>
1262
1279
  OUTPUT
1280
+ expect(xmlpp(IsoDoc::HtmlConvert.new({})
1281
+ .convert("test", input, true))).to be_equivalent_to xmlpp(output)
1263
1282
  end
1264
1283
 
1265
- it "processes formulae (PresentationXML)" do
1266
- expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1284
+ it "processes formulae" do
1285
+ input = <<~INPUT
1267
1286
  <iso-standard xmlns="http://riboseinc.com/isoxml">
1268
1287
  <preface><foreword>
1269
1288
  <formula id="_be9158af-7e93-4ee2-90c5-26d31c181934" unnumbered="true" keep-with-next="true" keep-lines-together="true">
@@ -1286,43 +1305,9 @@ RSpec.describe IsoDoc do
1286
1305
  </foreword></preface>
1287
1306
  </iso-standard>
1288
1307
  INPUT
1289
- <?xml version='1.0'?>
1290
- <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
1291
- <preface>
1292
- <foreword>
1293
- <formula id='_be9158af-7e93-4ee2-90c5-26d31c181934' unnumbered='true' keep-with-next='true' keep-lines-together='true'>
1294
- <stem type='AsciiMath'>r = 1 %</stem>
1295
- <dl id='_e4fe94fe-1cde-49d9-b1ad-743293b7e21d'>
1296
- <dt>
1297
- <stem type='AsciiMath'>r</stem>
1298
- </dt>
1299
- <dd>
1300
- <p id='_1b99995d-ff03-40f5-8f2e-ab9665a69b77'>is the repeatability limit.</p>
1301
- </dd>
1302
- </dl>
1303
- <note id='_83083c7a-6c85-43db-a9fa-4d8edd0c9fc0'>
1304
- <name>NOTE</name>
1305
- <p id='_511aaa98-4116-42af-8e5b-c87cdf5bfdc8'>
1306
- [durationUnits] is essentially a duration statement without the "P"
1307
- prefix. "P" is unnecessary because between "G" and "U" duration is
1308
- always expressed.
1309
- </p>
1310
- </note>
1311
- </formula>
1312
- <formula id='_be9158af-7e93-4ee2-90c5-26d31c181935'>
1313
- <name>1</name>
1314
- <stem type='AsciiMath'>r = 1 %</stem>
1315
- </formula>
1316
- </foreword>
1317
- </preface>
1318
- </iso-standard>
1319
- OUTPUT
1320
- end
1321
-
1322
- it "processes formulae (HTML)" do
1323
- expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1324
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1325
- <preface><foreword>
1308
+ presxml = <<~INPUT
1309
+ <iso-standard xmlns="http://riboseinc.com/isoxml" type='presentation'>
1310
+ <preface><foreword displayorder="1">
1326
1311
  <formula id="_be9158af-7e93-4ee2-90c5-26d31c181934" unnumbered="true" keep-with-next="true" keep-lines-together="true">
1327
1312
  <stem type="AsciiMath">r = 1 %</stem>
1328
1313
  <dl id="_e4fe94fe-1cde-49d9-b1ad-743293b7e21d">
@@ -1344,6 +1329,7 @@ RSpec.describe IsoDoc do
1344
1329
  </foreword></preface>
1345
1330
  </iso-standard>
1346
1331
  INPUT
1332
+ html = <<~OUTPUT
1347
1333
  #{HTML_HDR}
1348
1334
  <br/>
1349
1335
  <div>
@@ -1364,33 +1350,8 @@ RSpec.describe IsoDoc do
1364
1350
  </body>
1365
1351
  </html>
1366
1352
  OUTPUT
1367
- end
1368
1353
 
1369
- it "processes formulae (Word)" do
1370
- expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1371
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1372
- <preface><foreword>
1373
- <formula id="_be9158af-7e93-4ee2-90c5-26d31c181934" unnumbered="true" keep-with-next="true" keep-lines-together="true">
1374
- <stem type="AsciiMath">r = 1 %</stem>
1375
- <dl id="_e4fe94fe-1cde-49d9-b1ad-743293b7e21d">
1376
- <dt>
1377
- <stem type="AsciiMath">r</stem>
1378
- </dt>
1379
- <dd>
1380
- <p id="_1b99995d-ff03-40f5-8f2e-ab9665a69b77">is the repeatability limit.</p>
1381
- </dd>
1382
- </dl>
1383
- <note id="_83083c7a-6c85-43db-a9fa-4d8edd0c9fc0">
1384
- <name>NOTE</name>
1385
- <p id="_511aaa98-4116-42af-8e5b-c87cdf5bfdc8">[durationUnits] is essentially a duration statement without the "P" prefix. "P" is unnecessary because between "G" and "U" duration is always expressed.</p>
1386
- </note>
1387
- </formula>
1388
- <formula id="_be9158af-7e93-4ee2-90c5-26d31c181935"><name>1</name>
1389
- <stem type="AsciiMath">r = 1 %</stem>
1390
- </formula>
1391
- </foreword></preface>
1392
- </iso-standard>
1393
- INPUT
1354
+ word = <<~OUTPUT
1394
1355
  <html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'>
1395
1356
  <head>
1396
1357
  <style>
@@ -1458,10 +1419,16 @@ RSpec.describe IsoDoc do
1458
1419
  </body>
1459
1420
  </html>
1460
1421
  OUTPUT
1422
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
1423
+ .convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
1424
+ expect(xmlpp(IsoDoc::HtmlConvert.new({})
1425
+ .convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
1426
+ expect(xmlpp(IsoDoc::WordConvert.new({})
1427
+ .convert("test", presxml, true))).to be_equivalent_to xmlpp(word)
1461
1428
  end
1462
1429
 
1463
1430
  it "processes paragraph attributes" do
1464
- expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1431
+ input = <<~INPUT
1465
1432
  <iso-standard xmlns="http://riboseinc.com/isoxml">
1466
1433
  <preface><foreword>
1467
1434
  <p align="left" id="_08bfe952-d57f-4150-9c95-5d52098cc2a8">Vache Equipment<br/>
@@ -1471,6 +1438,7 @@ RSpec.describe IsoDoc do
1471
1438
  </foreword></preface>
1472
1439
  </iso-standard>
1473
1440
  INPUT
1441
+ html = <<~OUTPUT
1474
1442
  #{HTML_HDR}
1475
1443
  <br/>
1476
1444
  <div>
@@ -1486,19 +1454,8 @@ RSpec.describe IsoDoc do
1486
1454
  </body>
1487
1455
  </html>
1488
1456
  OUTPUT
1489
- end
1490
1457
 
1491
- it "processes paragraph attributes (Word)" do
1492
- expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1493
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1494
- <preface><foreword>
1495
- <p align="left" id="_08bfe952-d57f-4150-9c95-5d52098cc2a8">Vache Equipment<br/>
1496
- Fictitious<br/>
1497
- World</p>
1498
- <p align="justify" keep-with-next="true" keep-lines-together="true">Justify</p>
1499
- </foreword></preface>
1500
- </iso-standard>
1501
- INPUT
1458
+ word = <<~OUTPUT
1502
1459
  <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
1503
1460
  <head><style/></head>
1504
1461
  <body lang="EN-US" link="blue" vlink="#954F72">
@@ -1525,10 +1482,14 @@ RSpec.describe IsoDoc do
1525
1482
  </body>
1526
1483
  </html>
1527
1484
  OUTPUT
1485
+ expect(xmlpp(IsoDoc::HtmlConvert.new({})
1486
+ .convert("test", input, true))).to be_equivalent_to xmlpp(html)
1487
+ expect(xmlpp(IsoDoc::WordConvert.new({})
1488
+ .convert("test", input, true))).to be_equivalent_to xmlpp(word)
1528
1489
  end
1529
1490
 
1530
- it "processes blockquotes (Presentation XML)" do
1531
- expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1491
+ it "processes blockquotes" do
1492
+ input = <<~INPUT
1532
1493
  <iso-standard xmlns="http://riboseinc.com/isoxml">
1533
1494
  <preface><foreword>
1534
1495
  <quote id="_044bd364-c832-4b78-8fea-92242402a1d1">
@@ -1539,37 +1500,10 @@ RSpec.describe IsoDoc do
1539
1500
  </foreword></preface>
1540
1501
  </iso-standard>
1541
1502
  INPUT
1542
- <?xml version='1.0'?>
1543
- <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
1544
- <preface>
1545
- <foreword>
1546
- <quote id='_044bd364-c832-4b78-8fea-92242402a1d1'>
1547
- <source type='inline' bibitemid='ISO7301' citeas='ISO 7301:2011'>
1548
- <locality type='clause'>
1549
- <referenceFrom>1</referenceFrom>
1550
- </locality>ISO 7301:2011, Clause 1
1551
- </source>
1552
- <author>ISO</author>
1553
- <p id='_d4fd0a61-f300-4285-abe6-602707590e53'>
1554
- This International Standard gives the minimum specifications for rice
1555
- (
1556
- <em>Oryza sativa</em>
1557
- L.) which is subject to international trade. It is applicable to the
1558
- following types: husked rice and milled rice, parboiled or not,
1559
- intended for direct human consumption. It is neither applicable to
1560
- other products derived from rice, nor to waxy rice (glutinous rice).
1561
- </p>
1562
- </quote>
1563
- </foreword>
1564
- </preface>
1565
- </iso-standard>
1566
- OUTPUT
1567
- end
1568
1503
 
1569
- it "processes blockquotes (HTML)" do
1570
- expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1571
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1572
- <preface><foreword>
1504
+ presxml = <<~INPUT
1505
+ <iso-standard xmlns="http://riboseinc.com/isoxml" type='presentation'>
1506
+ <preface><foreword displayorder="1">
1573
1507
  <quote id="_044bd364-c832-4b78-8fea-92242402a1d1">
1574
1508
  <source type="inline" bibitemid="ISO7301" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>1</referenceFrom></locality>ISO 7301:2011, Clause 1</source>
1575
1509
  <author>ISO</author>
@@ -1578,21 +1512,26 @@ RSpec.describe IsoDoc do
1578
1512
  </foreword></preface>
1579
1513
  </iso-standard>
1580
1514
  INPUT
1515
+ html = <<~OUTPUT
1581
1516
  #{HTML_HDR}
1582
- <br/>
1583
- <div>
1584
- <h1 class="ForewordTitle">Foreword</h1>
1585
- <div class="Quote" id="_044bd364-c832-4b78-8fea-92242402a1d1">
1517
+ <br/>
1518
+ <div>
1519
+ <h1 class="ForewordTitle">Foreword</h1>
1520
+ <div class="Quote" id="_044bd364-c832-4b78-8fea-92242402a1d1">
1586
1521
 
1587
1522
 
1588
- <p id="_d4fd0a61-f300-4285-abe6-602707590e53">This International Standard gives the minimum specifications for rice (<i>Oryza sativa</i> L.) which is subject to international trade. It is applicable to the following types: husked rice and milled rice, parboiled or not, intended for direct human consumption. It is neither applicable to other products derived from rice, nor to waxy rice (glutinous rice).</p>
1589
- <p class="QuoteAttribution">&#8212; ISO, <a href="#ISO7301">ISO 7301:2011, Clause 1</a></p></div>
1590
- </div>
1591
- <p class="zzSTDTitle1"/>
1592
- </div>
1593
- </body>
1594
- </html>
1523
+ <p id="_d4fd0a61-f300-4285-abe6-602707590e53">This International Standard gives the minimum specifications for rice (<i>Oryza sativa</i> L.) which is subject to international trade. It is applicable to the following types: husked rice and milled rice, parboiled or not, intended for direct human consumption. It is neither applicable to other products derived from rice, nor to waxy rice (glutinous rice).</p>
1524
+ <p class="QuoteAttribution">&#8212; ISO, <a href="#ISO7301">ISO 7301:2011, Clause 1</a></p></div>
1525
+ </div>
1526
+ <p class="zzSTDTitle1"/>
1527
+ </div>
1528
+ </body>
1529
+ </html>
1595
1530
  OUTPUT
1531
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
1532
+ .convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
1533
+ expect(xmlpp(IsoDoc::HtmlConvert.new({})
1534
+ .convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
1596
1535
  end
1597
1536
 
1598
1537
  it "processes term domains" do
@@ -1621,273 +1560,11 @@ RSpec.describe IsoDoc do
1621
1560
  OUTPUT
1622
1561
  end
1623
1562
 
1624
- it "processes permissions (Presentation XML)" do
1625
- expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1626
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1627
- <preface><foreword>
1628
- <permission id="_" keep-with-next="true" keep-lines-together="true">
1629
- <label>/ogc/recommendation/wfs/2</label>
1630
- <inherit>/ss/584/2015/level/1</inherit>
1631
- <inherit><eref type="inline" bibitemid="rfc2616" citeas="RFC 2616">RFC 2616 (HTTP/1.1)</eref></inherit>
1632
- <subject>user</subject>
1633
- <classification> <tag>control-class</tag> <value>Technical</value> </classification><classification> <tag>priority</tag> <value>P0</value> </classification><classification> <tag>family</tag> <value>System and Communications Protection</value> </classification><classification> <tag>family</tag> <value>System and Communications Protocols</value> </classification>
1634
- <description>
1635
- <p id="_">I recommend <em>this</em>.</p>
1636
- </description>
1637
- <specification exclude="true" type="tabular">
1638
- <p id="_">This is the object of the recommendation:</p>
1639
- <table id="_">
1640
- <tbody>
1641
- <tr>
1642
- <td style="text-align:left;">Object</td>
1643
- <td style="text-align:left;">Value</td>
1644
- </tr>
1645
- <tr>
1646
- <td style="text-align:left;">Mission</td>
1647
- <td style="text-align:left;">Accomplished</td>
1648
- </tr>
1649
- </tbody>
1650
- </table>
1651
- </specification>
1652
- <description>
1653
- <p id="_">As for the measurement targets,</p>
1654
- </description>
1655
- <measurement-target exclude="false">
1656
- <p id="_">The measurement target shall be measured as:</p>
1657
- <formula id="_">
1658
- <stem type="AsciiMath">r/1 = 0</stem>
1659
- </formula>
1660
- </measurement-target>
1661
- <verification exclude="false">
1662
- <p id="_">The following code will be run for verification:</p>
1663
- <sourcecode id="_">CoreRoot(success): HttpResponse
1664
- if (success)
1665
- recommendation(label: success-response)
1666
- end
1667
- </sourcecode>
1668
- </verification>
1669
- <import exclude="true">
1670
- <sourcecode id="_">success-response()</sourcecode>
1671
- </import>
1672
- </permission>
1673
- </foreword></preface>
1674
- <bibliography><references id="_bibliography" obligation="informative" normative="false">
1675
- <title>Bibliography</title>
1676
- <bibitem id="rfc2616" type="standard"> <fetched>2020-03-27</fetched> <title format="text/plain" language="en" script="Latn">Hypertext Transfer Protocol — HTTP/1.1</title> <uri type="xml">https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2616.xml</uri> <uri type="src">https://www.rfc-editor.org/info/rfc2616</uri> <docidentifier type="IETF">RFC 2616</docidentifier> <docidentifier type="rfc-anchor">RFC2616</docidentifier> <docidentifier type="DOI">10.17487/RFC2616</docidentifier> <date type="published"> <on>1999-06</on> </date> <contributor> <role type="author"/> <person> <name> <completename language="en">R. Fielding</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">J. Gettys</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">J. Mogul</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">H. Frystyk</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">L. Masinter</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">P. Leach</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">T. Berners-Lee</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <language>en</language> <script>Latn</script> <abstract format="text/plain" language="en" script="Latn">HTTP has been in use by the World-Wide Web global information initiative since 1990. This specification defines the protocol referred to as “HTTP/1.1”, and is an update to RFC 2068. [STANDARDS-TRACK]</abstract> <series type="main"> <title format="text/plain" language="en" script="Latn">RFC</title> <number>2616</number> </series> <place>Fremont, CA</place></bibitem>
1677
- </references></bibliography>
1678
- </iso-standard>
1679
- INPUT
1680
- <?xml version='1.0'?>
1681
- <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
1682
- <preface>
1683
- <foreword>
1684
- <permission id='_' keep-with-next='true' keep-lines-together='true'>
1685
- <name>Permission 1</name>
1686
- <label>/ogc/recommendation/wfs/2</label>
1687
- <inherit>/ss/584/2015/level/1</inherit>
1688
- <inherit>
1689
- <eref type='inline' bibitemid='rfc2616' citeas='RFC 2616'>RFC 2616 (HTTP/1.1)</eref>
1690
- </inherit>
1691
- <subject>user</subject>
1692
- <classification>
1693
- <tag>control-class</tag>
1694
- <value>Technical</value>
1695
- </classification>
1696
- <classification>
1697
- <tag>priority</tag>
1698
- <value>P0</value>
1699
- </classification>
1700
- <classification>
1701
- <tag>family</tag>
1702
- <value>System and Communications Protection</value>
1703
- </classification>
1704
- <classification>
1705
- <tag>family</tag>
1706
- <value>System and Communications Protocols</value>
1707
- </classification>
1708
- <description>
1709
- <p id='_'>
1710
- I recommend
1711
- <em>this</em>
1712
- .
1713
- </p>
1714
- </description>
1715
- <specification exclude='true' type='tabular'>
1716
- <p id='_'>This is the object of the recommendation:</p>
1717
- <table id='_'>
1718
- <tbody>
1719
- <tr>
1720
- <td style='text-align:left;'>Object</td>
1721
- <td style='text-align:left;'>Value</td>
1722
- </tr>
1723
- <tr>
1724
- <td style='text-align:left;'>Mission</td>
1725
- <td style='text-align:left;'>Accomplished</td>
1726
- </tr>
1727
- </tbody>
1728
- </table>
1729
- </specification>
1730
- <description>
1731
- <p id='_'>As for the measurement targets,</p>
1732
- </description>
1733
- <measurement-target exclude='false'>
1734
- <p id='_'>The measurement target shall be measured as:</p>
1735
- <formula id='_'>
1736
- <name>1</name>
1737
- <stem type='AsciiMath'>r/1 = 0</stem>
1738
- </formula>
1739
- </measurement-target>
1740
- <verification exclude='false'>
1741
- <p id='_'>The following code will be run for verification:</p>
1742
- <sourcecode id='_'>
1743
- CoreRoot(success): HttpResponse if (success) recommendation(label:
1744
- success-response) end
1745
- </sourcecode>
1746
- </verification>
1747
- <import exclude='true'>
1748
- <sourcecode id='_'>success-response()</sourcecode>
1749
- </import>
1750
- </permission>
1751
- </foreword>
1752
- </preface>
1753
- <bibliography>
1754
- <references id='_bibliography' obligation='informative' normative='false'>
1755
- <title depth="1">Bibliography</title>
1756
- <bibitem id='rfc2616' type='standard'>
1757
- <fetched>2020-03-27</fetched>
1758
- <title format='text/plain' language='en' script='Latn'>Hypertext Transfer Protocol&#x2009;&#x2014;&#x2009;HTTP/1.1</title>
1759
- <uri type='xml'>https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2616.xml</uri>
1760
- <uri type='src'>https://www.rfc-editor.org/info/rfc2616</uri>
1761
- <docidentifier type='IETF'>RFC 2616</docidentifier>
1762
- <docidentifier type='rfc-anchor'>RFC2616</docidentifier>
1763
- <docidentifier type='DOI'>10.17487/RFC2616</docidentifier>
1764
- <date type='published'>
1765
- <on>1999-06</on>
1766
- </date>
1767
- <contributor>
1768
- <role type='author'/>
1769
- <person>
1770
- <name>
1771
- <completename language='en'>R. Fielding</completename>
1772
- </name>
1773
- <affiliation>
1774
- <organization>
1775
- <name>IETF</name>
1776
- <abbreviation>IETF</abbreviation>
1777
- </organization>
1778
- </affiliation>
1779
- </person>
1780
- </contributor>
1781
- <contributor>
1782
- <role type='author'/>
1783
- <person>
1784
- <name>
1785
- <completename language='en'>J. Gettys</completename>
1786
- </name>
1787
- <affiliation>
1788
- <organization>
1789
- <name>IETF</name>
1790
- <abbreviation>IETF</abbreviation>
1791
- </organization>
1792
- </affiliation>
1793
- </person>
1794
- </contributor>
1795
- <contributor>
1796
- <role type='author'/>
1797
- <person>
1798
- <name>
1799
- <completename language='en'>J. Mogul</completename>
1800
- </name>
1801
- <affiliation>
1802
- <organization>
1803
- <name>IETF</name>
1804
- <abbreviation>IETF</abbreviation>
1805
- </organization>
1806
- </affiliation>
1807
- </person>
1808
- </contributor>
1809
- <contributor>
1810
- <role type='author'/>
1811
- <person>
1812
- <name>
1813
- <completename language='en'>H. Frystyk</completename>
1814
- </name>
1815
- <affiliation>
1816
- <organization>
1817
- <name>IETF</name>
1818
- <abbreviation>IETF</abbreviation>
1819
- </organization>
1820
- </affiliation>
1821
- </person>
1822
- </contributor>
1823
- <contributor>
1824
- <role type='author'/>
1825
- <person>
1826
- <name>
1827
- <completename language='en'>L. Masinter</completename>
1828
- </name>
1829
- <affiliation>
1830
- <organization>
1831
- <name>IETF</name>
1832
- <abbreviation>IETF</abbreviation>
1833
- </organization>
1834
- </affiliation>
1835
- </person>
1836
- </contributor>
1837
- <contributor>
1838
- <role type='author'/>
1839
- <person>
1840
- <name>
1841
- <completename language='en'>P. Leach</completename>
1842
- </name>
1843
- <affiliation>
1844
- <organization>
1845
- <name>IETF</name>
1846
- <abbreviation>IETF</abbreviation>
1847
- </organization>
1848
- </affiliation>
1849
- </person>
1850
- </contributor>
1851
- <contributor>
1852
- <role type='author'/>
1853
- <person>
1854
- <name>
1855
- <completename language='en'>T. Berners-Lee</completename>
1856
- </name>
1857
- <affiliation>
1858
- <organization>
1859
- <name>IETF</name>
1860
- <abbreviation>IETF</abbreviation>
1861
- </organization>
1862
- </affiliation>
1863
- </person>
1864
- </contributor>
1865
- <language>en</language>
1866
- <script>Latn</script>
1867
- <abstract format='text/plain' language='en' script='Latn'>
1868
- HTTP has been in use by the World-Wide Web global information
1869
- initiative since 1990. This specification defines the protocol
1870
- referred to as &#x201C;HTTP/1.1&#x201D;, and is an update to RFC 2068.
1871
- [STANDARDS-TRACK]
1872
- </abstract>
1873
- <series type='main'>
1874
- <title format='text/plain' language='en' script='Latn'>RFC</title>
1875
- <number>2616</number>
1876
- </series>
1877
- <place>Fremont, CA</place>
1878
- </bibitem>
1879
- </references>
1880
- </bibliography>
1881
- </iso-standard>
1882
- OUTPUT
1883
- end
1884
-
1885
- it "processes permissions (HTML)" do
1886
- expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1563
+ it "processes permissions" do
1564
+ input = <<~INPUT
1887
1565
  <iso-standard xmlns="http://riboseinc.com/isoxml">
1888
1566
  <preface><foreword>
1889
1567
  <permission id="_" keep-with-next="true" keep-lines-together="true">
1890
- <name>Permission 1</name>
1891
1568
  <label>/ogc/recommendation/wfs/2</label>
1892
1569
  <inherit>/ss/584/2015/level/1</inherit>
1893
1570
  <inherit><eref type="inline" bibitemid="rfc2616" citeas="RFC 2616">RFC 2616 (HTTP/1.1)</eref></inherit>
@@ -1933,52 +1610,112 @@ RSpec.describe IsoDoc do
1933
1610
  </import>
1934
1611
  </permission>
1935
1612
  </foreword></preface>
1936
- <bibliography><references id="_bibliography" obligation="informative" normative="false">
1613
+ <bibliography><references id="_bibliography" obligation="informative" normative="false" displayorder="2">
1937
1614
  <title>Bibliography</title>
1938
1615
  <bibitem id="rfc2616" type="standard"> <fetched>2020-03-27</fetched> <title format="text/plain" language="en" script="Latn">Hypertext Transfer Protocol — HTTP/1.1</title> <uri type="xml">https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2616.xml</uri> <uri type="src">https://www.rfc-editor.org/info/rfc2616</uri> <docidentifier type="IETF">RFC 2616</docidentifier> <docidentifier type="rfc-anchor">RFC2616</docidentifier> <docidentifier type="DOI">10.17487/RFC2616</docidentifier> <date type="published"> <on>1999-06</on> </date> <contributor> <role type="author"/> <person> <name> <completename language="en">R. Fielding</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">J. Gettys</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">J. Mogul</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">H. Frystyk</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">L. Masinter</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">P. Leach</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">T. Berners-Lee</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <language>en</language> <script>Latn</script> <abstract format="text/plain" language="en" script="Latn">HTTP has been in use by the World-Wide Web global information initiative since 1990. This specification defines the protocol referred to as “HTTP/1.1”, and is an update to RFC 2068. [STANDARDS-TRACK]</abstract> <series type="main"> <title format="text/plain" language="en" script="Latn">RFC</title> <number>2616</number> </series> <place>Fremont, CA</place></bibitem>
1939
1616
  </references></bibliography>
1940
1617
  </iso-standard>
1941
1618
  INPUT
1942
- #{HTML_HDR}
1943
- <br/>
1944
- <div>
1945
- <h1 class="ForewordTitle">Foreword</h1>
1946
- <div class="permission" id='_' style='page-break-after: avoid;page-break-inside: avoid;'>
1947
- <p class="RecommendationTitle">Permission 1:<br/>/ogc/recommendation/wfs/2</p>
1948
- <p><i>Subject: user<br/>
1949
- Inherits: /ss/584/2015/level/1
1950
- <br/>
1951
- Inherits: <a href='#rfc2616'>RFC 2616 (HTTP/1.1)</a>
1952
- <br/>Control-class: Technical<br/>Priority: P0<br/>Family: System and Communications Protection<br/>Family: System and Communications Protocols</i></p>
1953
- <div class="requirement-description">
1954
- <p id="_">I recommend <i>this</i>.</p>
1955
- </div>
1956
- <div class="requirement-description">
1957
- <p id="_">As for the measurement targets,</p>
1958
- </div>
1959
- <div class="requirement-measurement-target">
1960
- <p id="_">The measurement target shall be measured as:</p>
1961
- <div id="_"><div class="formula"><p><span class="stem">(#(r/1 = 0)#)</span></p></div></div>
1962
- </div>
1963
- <div class="requirement-verification">
1964
- <p id="_">The following code will be run for verification:</p>
1965
- <pre id="_" class="prettyprint ">CoreRoot(success): HttpResponse<br/>&#160;&#160;&#160;&#160;&#160; if (success)<br/>&#160;&#160;&#160;&#160;&#160; recommendation(label: success-response)<br/>&#160;&#160;&#160;&#160;&#160; end<br/>&#160;&#160;&#160; </pre>
1619
+ presxml = <<~OUTPUT
1620
+ <iso-standard xmlns="http://riboseinc.com/isoxml" type='presentation'>
1621
+ <preface><foreword displayorder='1'>
1622
+ <permission id="_" keep-with-next="true" keep-lines-together="true">
1623
+ <name>Permission 1</name>
1624
+ <label>/ogc/recommendation/wfs/2</label>
1625
+ <inherit>/ss/584/2015/level/1</inherit>
1626
+ <inherit><eref type="inline" bibitemid="rfc2616" citeas="RFC 2616">RFC 2616 (HTTP/1.1)</eref></inherit>
1627
+ <subject>user</subject>
1628
+ <classification> <tag>control-class</tag> <value>Technical</value> </classification><classification> <tag>priority</tag> <value>P0</value> </classification><classification> <tag>family</tag> <value>System and Communications Protection</value> </classification><classification> <tag>family</tag> <value>System and Communications Protocols</value> </classification>
1629
+ <description>
1630
+ <p id="_">I recommend <em>this</em>.</p>
1631
+ </description>
1632
+ <specification exclude="true" type="tabular">
1633
+ <p id="_">This is the object of the recommendation:</p>
1634
+ <table id="_">
1635
+ <tbody>
1636
+ <tr>
1637
+ <td style="text-align:left;">Object</td>
1638
+ <td style="text-align:left;">Value</td>
1639
+ </tr>
1640
+ <tr>
1641
+ <td style="text-align:left;">Mission</td>
1642
+ <td style="text-align:left;">Accomplished</td>
1643
+ </tr>
1644
+ </tbody>
1645
+ </table>
1646
+ </specification>
1647
+ <description>
1648
+ <p id="_">As for the measurement targets,</p>
1649
+ </description>
1650
+ <measurement-target exclude="false">
1651
+ <p id="_">The measurement target shall be measured as:</p>
1652
+ <formula id="_">
1653
+ <name>1</name>
1654
+ <stem type="AsciiMath">r/1 = 0</stem>
1655
+ </formula>
1656
+ </measurement-target>
1657
+ <verification exclude="false">
1658
+ <p id="_">The following code will be run for verification:</p>
1659
+ <sourcecode id="_">CoreRoot(success): HttpResponse
1660
+ if (success)
1661
+ recommendation(label: success-response)
1662
+ end
1663
+ </sourcecode>
1664
+ </verification>
1665
+ <import exclude="true">
1666
+ <sourcecode id="_">success-response()</sourcecode>
1667
+ </import>
1668
+ </permission>
1669
+ </foreword></preface>
1670
+ <bibliography><references id="_bibliography" obligation="informative" normative="false" displayorder='2'>
1671
+ <title depth='1'>Bibliography</title>
1672
+ <bibitem id="rfc2616" type="standard"> <fetched>2020-03-27</fetched> <title format="text/plain" language="en" script="Latn">Hypertext Transfer Protocol — HTTP/1.1</title> <uri type="xml">https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2616.xml</uri> <uri type="src">https://www.rfc-editor.org/info/rfc2616</uri> <docidentifier type="IETF">IETF RFC 2616</docidentifier> <docidentifier type="rfc-anchor">RFC2616</docidentifier> <docidentifier type="DOI">DOI 10.17487/RFC2616</docidentifier> <date type="published"> <on>1999-06</on> </date> <contributor> <role type="author"/> <person> <name> <completename language="en">R. Fielding</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">J. Gettys</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">J. Mogul</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">H. Frystyk</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">L. Masinter</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">P. Leach</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">T. Berners-Lee</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <language>en</language> <script>Latn</script> <abstract format="text/plain" language="en" script="Latn">HTTP has been in use by the World-Wide Web global information initiative since 1990. This specification defines the protocol referred to as “HTTP/1.1”, and is an update to RFC 2068. [STANDARDS-TRACK]</abstract> <series type="main"> <title format="text/plain" language="en" script="Latn">RFC</title> <number>2616</number> </series> <place>Fremont, CA</place></bibitem>
1673
+ </references></bibliography>
1674
+ </iso-standard>
1675
+ OUTPUT
1676
+ html = <<~OUTPUT
1677
+ #{HTML_HDR}
1678
+ <br/>
1679
+ <div>
1680
+ <h1 class="ForewordTitle">Foreword</h1>
1681
+ <div class="permission" id='_' style='page-break-after: avoid;page-break-inside: avoid;'>
1682
+ <p class="RecommendationTitle">Permission 1:<br/>/ogc/recommendation/wfs/2</p>
1683
+ <p><i>Subject: user<br/>
1684
+ Inherits: /ss/584/2015/level/1
1685
+ <br/>
1686
+ Inherits: <a href='#rfc2616'>RFC 2616 (HTTP/1.1)</a>
1687
+ <br/>Control-class: Technical<br/>Priority: P0<br/>Family: System and Communications Protection<br/>Family: System and Communications Protocols</i></p>
1688
+ <div class="requirement-description">
1689
+ <p id="_">I recommend <i>this</i>.</p>
1690
+ </div>
1691
+ <div class="requirement-description">
1692
+ <p id="_">As for the measurement targets,</p>
1693
+ </div>
1694
+ <div class="requirement-measurement-target">
1695
+ <p id="_">The measurement target shall be measured as:</p>
1696
+ <div id="_"><div class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>&#160; (1)</p></div></div>
1697
+ </div>
1698
+ <div class="requirement-verification">
1699
+ <p id="_">The following code will be run for verification:</p>
1700
+ <pre id="_" class="prettyprint ">CoreRoot(success): HttpResponse<br/>&#160;&#160;&#160;&#160;&#160; if (success)<br/>&#160;&#160;&#160;&#160;&#160; recommendation(label: success-response)<br/>&#160;&#160;&#160;&#160;&#160; end<br/>&#160;&#160;&#160; </pre>
1701
+ </div>
1966
1702
  </div>
1967
- </div>
1703
+ </div>
1704
+ <p class="zzSTDTitle1"/>
1705
+ <br/>
1706
+ <div>
1707
+ <h1 class='Section3'>Bibliography</h1>
1708
+ <p id='rfc2616' class='Biblio'>
1709
+ [1]&#160; IETF RFC 2616,
1710
+ <i>Hypertext Transfer Protocol&#8201;&#8212;&#8201;HTTP/1.1</i>
1711
+ </p>
1712
+ </div>
1968
1713
  </div>
1969
- <p class="zzSTDTitle1"/>
1970
- <br/>
1971
- <div>
1972
- <h1 class='Section3'>Bibliography</h1>
1973
- <p id='rfc2616' class='Biblio'>
1974
- [1]&#160; IETF RFC 2616,
1975
- <i>Hypertext Transfer Protocol&#8201;&#8212;&#8201;HTTP/1.1</i>
1976
- </p>
1977
- </div>
1978
- </div>
1979
- </body>
1980
- </html>
1714
+ </body>
1715
+ </html>
1981
1716
  OUTPUT
1717
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
1718
+ expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
1982
1719
  end
1983
1720
 
1984
1721
  it "processes requirements (Presentation XML)" do
@@ -2035,7 +1772,7 @@ RSpec.describe IsoDoc do
2035
1772
  <?xml version='1.0'?>
2036
1773
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
2037
1774
  <preface>
2038
- <foreword>
1775
+ <foreword displayorder="1">
2039
1776
  <requirement id='A' unnumbered='true' keep-with-next='true' keep-lines-together='true'>
2040
1777
  <name>Requirement</name>
2041
1778
  <title>A New Requirement</title>
@@ -2234,7 +1971,7 @@ RSpec.describe IsoDoc do
2234
1971
  <language current="true">fr</language>
2235
1972
  <script current="true">Latn</script>
2236
1973
  </bibdata>
2237
- <preface><foreword>
1974
+ <preface><foreword displayorder="1">
2238
1975
  <requirement id="A" unnumbered="true"><name>Exigence</name>
2239
1976
  <title>A New Requirement</title>
2240
1977
  <label>/ogc/recommendation/wfs/2</label>
@@ -2400,7 +2137,7 @@ RSpec.describe IsoDoc do
2400
2137
  <?xml version='1.0'?>
2401
2138
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
2402
2139
  <preface>
2403
- <foreword>
2140
+ <foreword displayorder="1">
2404
2141
  <recommendation id='_' obligation='shall,could' keep-with-next='true' keep-lines-together='true'>
2405
2142
  <name>Recommendation 1</name>
2406
2143
  <label>/ogc/recommendation/wfs/2</label>
@@ -2563,7 +2300,7 @@ RSpec.describe IsoDoc do
2563
2300
  <bibdata>
2564
2301
  <language current="true">en</language>
2565
2302
  </bibdata>
2566
- <preface><foreword>
2303
+ <preface><foreword displayorder="1">
2567
2304
  <figure id="_" class="pseudocode" keep-with-next="true" keep-lines-together="true"><name>Figure 1&#xA0;&#x2014; Label</name><p id="_">&#xA0;&#xA0;<strong>A</strong><br/>
2568
2305
  &#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<smallcap>B</smallcap></p>
2569
2306
  <p id="_">&#xA0;&#xA0;<em>C</em></p></figure>
@@ -2742,7 +2479,7 @@ RSpec.describe IsoDoc do
2742
2479
  </figure>
2743
2480
  </sections>
2744
2481
  <bibliography>
2745
- <references hidden='true' normative='false'>
2482
+ <references hidden='true' normative='false' displayorder="1">
2746
2483
  <bibitem id='express_action_schema' type='internal'>
2747
2484
  <docidentifier type='repository'>express/action_schema</docidentifier>
2748
2485
  </bibitem>