metanorma-standoc 2.1.4 → 2.2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/lib/metanorma/standoc/base.rb +1 -0
  3. data/lib/metanorma/standoc/blocks.rb +3 -7
  4. data/lib/metanorma/standoc/cleanup.rb +4 -2
  5. data/lib/metanorma/standoc/cleanup_biblio.rb +204 -0
  6. data/lib/metanorma/standoc/cleanup_block.rb +46 -4
  7. data/lib/metanorma/standoc/cleanup_maths.rb +2 -15
  8. data/lib/metanorma/standoc/cleanup_ref.rb +22 -13
  9. data/lib/metanorma/standoc/cleanup_reqt.rb +37 -4
  10. data/lib/metanorma/standoc/cleanup_symbols.rb +1 -1
  11. data/lib/metanorma/standoc/cleanup_terms.rb +6 -2
  12. data/lib/metanorma/standoc/cleanup_text.rb +10 -8
  13. data/lib/metanorma/standoc/cleanup_xref.rb +1 -2
  14. data/lib/metanorma/standoc/converter.rb +2 -0
  15. data/lib/metanorma/standoc/front.rb +1 -1
  16. data/lib/metanorma/standoc/inline.rb +8 -4
  17. data/lib/metanorma/standoc/isodoc.rng +16 -1
  18. data/lib/metanorma/standoc/macros.rb +1 -180
  19. data/lib/metanorma/standoc/macros_inline.rb +194 -0
  20. data/lib/metanorma/standoc/ref_sect.rb +2 -2
  21. data/lib/metanorma/standoc/ref_utility.rb +5 -6
  22. data/lib/metanorma/standoc/reqt.rb +5 -5
  23. data/lib/metanorma/standoc/reqt.rng +1 -1
  24. data/lib/metanorma/standoc/section.rb +2 -0
  25. data/lib/metanorma/standoc/term_lookup_cleanup.rb +1 -1
  26. data/lib/metanorma/standoc/utils.rb +1 -1
  27. data/lib/metanorma/standoc/validate.rb +1 -69
  28. data/lib/metanorma/standoc/validate_table.rb +91 -0
  29. data/lib/metanorma/standoc/version.rb +1 -1
  30. data/metanorma-standoc.gemspec +2 -3
  31. data/spec/metanorma/{refs_dl_spec.rb → biblio_spec.rb} +84 -1
  32. data/spec/metanorma/blocks_spec.rb +68 -8
  33. data/spec/metanorma/cleanup_blocks_spec.rb +107 -27
  34. data/spec/metanorma/inline_spec.rb +4 -0
  35. data/spec/metanorma/isobib_cache_spec.rb +6 -4
  36. data/spec/metanorma/macros_spec.rb +6 -2
  37. data/spec/metanorma/refs_spec.rb +261 -232
  38. data/spec/metanorma/validate_spec.rb +106 -7
  39. data/spec/vcr_cassettes/bsi16341.yml +63 -51
  40. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +62 -62
  41. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec1.yml +12 -12
  42. data/spec/vcr_cassettes/hide_refs.yml +58 -58
  43. data/spec/vcr_cassettes/isobib_get_123.yml +12 -12
  44. data/spec/vcr_cassettes/isobib_get_123_1.yml +22 -22
  45. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +33 -33
  46. data/spec/vcr_cassettes/isobib_get_123_2.yml +295 -0
  47. data/spec/vcr_cassettes/isobib_get_123_2001.yml +11 -11
  48. data/spec/vcr_cassettes/isobib_get_124.yml +12 -12
  49. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +24 -30
  50. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +46 -46
  51. data/spec/vcr_cassettes/std-link.yml +14 -72
  52. metadata +9 -6
  53. data/lib/metanorma/standoc/cleanup_ref_dl.rb +0 -113
@@ -0,0 +1,91 @@
1
+ module Metanorma
2
+ module Standoc
3
+ module Validate
4
+ def table_validate(doc)
5
+ doc.xpath("//table[colgroup]").each do |t|
6
+ maxrowcols_validate(t, t.xpath("./colgroup/col").size)
7
+ end
8
+ doc.xpath("//table[.//*[@colspan] | .//*[@rowspan]]").each do |t|
9
+ maxrowcols_validate(t, max_td_count(t), mode: "row_cols")
10
+ end
11
+ doc.xpath("//table[.//*[@rowspan]]").each do |t|
12
+ maxrowcols_validate(t, max_td_count(t), mode: "thead_row")
13
+ end
14
+ end
15
+
16
+ def max_td_count(table)
17
+ max = 0
18
+ table.xpath("./tr").each do |tr|
19
+ n = tr.xpath("./td | ./th").size
20
+ max < n and max = n
21
+ end
22
+ max
23
+ end
24
+
25
+ def maxrowcols_validate(table, maxcols, mode: "row_cols")
26
+ case mode
27
+ when "row_cols"
28
+ maxrowcols_validate0(table, maxcols, "*", mode)
29
+ when "thead_row"
30
+ %w{thead tbody tfoot}.each do |w|
31
+ maxrowcols_validate0(table, maxcols, w, mode)
32
+ end
33
+ end
34
+ end
35
+
36
+ def maxrowcols_validate0(table, maxcols, tablechild, mode)
37
+ cells2d = table.xpath("./#{tablechild}/tr")
38
+ .each_with_object([]) { |_r, m| m << {} }
39
+ table.xpath("./#{tablechild}/tr").each_with_index do |tr, r|
40
+ curr = 0
41
+ tr.xpath("./td | ./th").each do |td|
42
+ curr = maxcols_validate1(td, r, curr, cells2d, maxcols, mode)
43
+ end
44
+ end
45
+ maxrows_validate(table, cells2d, tablechild, mode)
46
+ end
47
+
48
+ # code doesn't actually do anything, since Asciidoctor refuses to generate
49
+ # table with inconsistent column count
50
+ def maxcols_validate1(tcell, row, curr, cells2d, maxcols, mode)
51
+ rs = tcell&.attr("rowspan")&.to_i || 1
52
+ cs = tcell&.attr("colspan")&.to_i || 1
53
+ curr = table_tracker_update(cells2d, row, curr, rs, cs)
54
+ maxcols_check(curr + cs - 1, maxcols, tcell) if mode == "row_cols"
55
+ curr + cs
56
+ end
57
+
58
+ def table_tracker_update(cells2d, row, curr, rowspan, colspan)
59
+ cells2d[row] ||= {}
60
+ while cells2d[row][curr]
61
+ curr += 1
62
+ end
63
+ (row..(row + rowspan - 1)).each do |y2|
64
+ cells2d[y2] ||= {}
65
+ (curr..(curr + colspan - 1)).each { |x2| cells2d[y2][x2] = 1 }
66
+ end
67
+ curr
68
+ end
69
+
70
+ def maxrows_validate(table, cells2d, tablechild, mode)
71
+ err = "are inconsistent"
72
+ mode == "thead_row" and err = "cannot go outside #{tablechild}"
73
+ err = "Table rows in table #{err}: check rowspan"
74
+ if cells2d.any? { |x| x.size != cells2d.first.size }
75
+ @log.add("Table", table, err)
76
+ @fatalerror << err
77
+ end
78
+ end
79
+
80
+ # if maxcols or maxrows negative, do not check them
81
+ def maxcols_check(col, maxcols, tcell)
82
+ if maxcols.positive? && col > maxcols
83
+ @log.add("Table", tcell, "Table exceeds maximum number of columns "\
84
+ "defined (#{maxcols})")
85
+ @fatalerror << "Table exceeds maximum number of columns defined "\
86
+ "(#{maxcols})"
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
@@ -19,6 +19,6 @@ module Metanorma
19
19
  end
20
20
 
21
21
  module Standoc
22
- VERSION = "2.1.4".freeze
22
+ VERSION = "2.2.0.1".freeze
23
23
  end
24
24
  end
@@ -23,12 +23,11 @@ Gem::Specification.new do |spec|
23
23
  spec.bindir = "bin"
24
24
  spec.require_paths = ["lib"]
25
25
  spec.files = `git ls-files`.split("\n")
26
- spec.test_files = `git ls-files -- {spec}/*`.split("\n")
27
26
  spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
28
27
 
29
28
  spec.add_dependency "asciidoctor", "~> 2.0.0"
30
29
  spec.add_dependency "iev", "~> 0.3.0"
31
- spec.add_dependency "isodoc", "~> 2.1.0"
30
+ spec.add_dependency "isodoc", "~> 2.2.0"
32
31
  spec.add_dependency "metanorma-plugin-datastruct", "~> 0.2.0"
33
32
  spec.add_dependency "metanorma-plugin-lutaml"
34
33
  spec.add_dependency "ruby-jing"
@@ -55,5 +54,5 @@ Gem::Specification.new do |spec|
55
54
  spec.add_development_dependency "timecop", "~> 0.9"
56
55
  spec.add_development_dependency "vcr", "~> 6.1.0"
57
56
  spec.add_development_dependency "webmock"
58
- #spec.metadata["rubygems_mfa_required"] = "true"
57
+ # spec.metadata["rubygems_mfa_required"] = "true"
59
58
  end
@@ -840,7 +840,7 @@ RSpec.describe Metanorma::Standoc do
840
840
 
841
841
  INPUT
842
842
  output = <<~OUTPUT
843
- #{BLANK_HDR}
843
+ #{BLANK_HDR}
844
844
  <sections>
845
845
  <clause id='_' inline-header='false' obligation='normative'>
846
846
  <title>Section</title>
@@ -888,4 +888,87 @@ RSpec.describe Metanorma::Standoc do
888
888
  expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
889
889
  .to be_equivalent_to xmlpp(output)
890
890
  end
891
+
892
+ it "processes microformatting of formatted references" do
893
+ input = <<~INPUT
894
+ #{ASCIIDOC_BLANK_HDR}
895
+
896
+ [bibliography]
897
+ === Normative References
898
+
899
+ * [[[A, B]]], span:surname[Wozniak], span:initials[S.] & span:givenname[Steve] span:surname[Jobs]. span:pubyear[1996]. span:title[_Work_]. In span:surname.editor[Gates], span:initials.editor[W. H], Collected Essays. span:docid.ISO[ISO 1234]. span:pubplace[Geneva]: span:publisher[International Standardization Organization]. span:uri.citation[http://www.example.com]. span:type[inbook]
900
+ INPUT
901
+ output = <<~OUTPUT
902
+ #{BLANK_HDR}
903
+ <sections> </sections>
904
+ <bibliography>
905
+ <references id='_' normative='true' obligation='informative'>
906
+ <title>Normative references</title>
907
+ <p id='_'>
908
+ The following documents are referred to in the text in such a way that
909
+ some or all of their content constitutes requirements of this document.
910
+ For dated references, only the edition cited applies. For undated
911
+ references, the latest edition of the referenced document (including any
912
+ amendments) applies.
913
+ </p>
914
+ <bibitem id='A' type="inbook">
915
+ <formattedref format='application/x-isodoc+xml'>
916
+ Wozniak, S. &amp; Steve Jobs. 1996.
917
+ <em>Work</em>
918
+ . In Gates, W. H, Collected Essays. ISO 1234. Geneva: International
919
+ Standardization Organization.
920
+ <link target='http://www.example.com'/>
921
+ .
922
+ </formattedref>
923
+ <title>
924
+ <em>Work</em>
925
+ </title>
926
+ <uri type='citation'>
927
+ <link target='http://www.example.com'/>
928
+ </uri>
929
+ <docidentifier>B</docidentifier>
930
+ <docidentifier type='ISO'>ISO 1234</docidentifier>
931
+ <date type='published'>1996</date>
932
+ <contributor>
933
+ <role type='author'/>
934
+ <person>
935
+ <name>
936
+ <initial>S.</initial>
937
+ <surname>Wozniak</surname>
938
+ </name>
939
+ </person>
940
+ </contributor>
941
+ <contributor>
942
+ <role type='author'/>
943
+ <person>
944
+ <name>
945
+ <forename>Steve</forename>
946
+ <surname>Jobs</surname>
947
+ </name>
948
+ </person>
949
+ </contributor>
950
+ <contributor>
951
+ <role type='editor'/>
952
+ <person>
953
+ <name>
954
+ <initial>W. H</initial>
955
+ <surname>Gates</surname>
956
+ </name>
957
+ </person>
958
+ </contributor>
959
+ <contributor>
960
+ <role type='publisher'/>
961
+ <organization>
962
+ <name>International Standardization Organization</name>
963
+ </organization>
964
+ </contributor>
965
+ <place/>
966
+ </bibitem>
967
+ </references>
968
+ </bibliography>
969
+ </standard-document>
970
+ OUTPUT
971
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
972
+ .to be_equivalent_to xmlpp(output)
973
+ end
891
974
  end
@@ -764,7 +764,7 @@ RSpec.describe Metanorma::Standoc do
764
764
  ====
765
765
  INPUT
766
766
  output = <<~OUTPUT
767
- #{BLANK_HDR}
767
+ #{BLANK_HDR}
768
768
  <sections>
769
769
  <clause id='_' inline-header='false' obligation='normative'>
770
770
  <title>Clause</title>
@@ -940,6 +940,9 @@ RSpec.describe Metanorma::Standoc do
940
940
 
941
941
  .Final stages: All kernels are fully gelatinized
942
942
  image::spec/examples/rice_images/rice_image3_3.png[]
943
+
944
+ [%key]
945
+ A:: B
943
946
  ====
944
947
  INPUT
945
948
  output = <<~OUTPUT
@@ -956,7 +959,14 @@ RSpec.describe Metanorma::Standoc do
956
959
  <figure id="_">
957
960
  <name>Final stages: All kernels are fully gelatinized</name>
958
961
  <image src="spec/examples/rice_images/rice_image3_3.png" id="_" mimetype="image/png" height="auto" width="auto"/>
959
- </figure></figure>
962
+ </figure>
963
+ <dl id='_' key='true'>
964
+ <dt>A</dt>
965
+ <dd>
966
+ <p id='_'>B</p>
967
+ </dd>
968
+ </dl>
969
+ </figure>
960
970
  </sections>
961
971
  </standard-document>
962
972
  OUTPUT
@@ -1070,6 +1080,56 @@ RSpec.describe Metanorma::Standoc do
1070
1080
  .to be_equivalent_to xmlpp(output)
1071
1081
  end
1072
1082
 
1083
+ it "ignores index terms when processing figures marked up as examples" do
1084
+ input = <<~INPUT
1085
+ #{ASCIIDOC_BLANK_HDR}
1086
+
1087
+ ====
1088
+ image::spec/examples/rice_images/rice_image3_1.png[]
1089
+ ====
1090
+
1091
+ ====
1092
+ ((indexterm))
1093
+
1094
+ image::spec/examples/rice_images/rice_image3_3.png[]
1095
+ ====
1096
+
1097
+ ====
1098
+ (((indexterm2)))
1099
+
1100
+ image::spec/examples/rice_images/rice_image3_2.png[]
1101
+ ====
1102
+ INPUT
1103
+ output = <<~OUTPUT
1104
+ #{BLANK_HDR}
1105
+ <sections>
1106
+ <figure id='_'>
1107
+ <image src='spec/examples/rice_images/rice_image3_1.png' id='_' mimetype='image/png' height='auto' width='auto'/>
1108
+ </figure>
1109
+ <example id='_'>
1110
+ <p id='_'>
1111
+ indexterm
1112
+ <index>
1113
+ <primary>indexterm</primary>
1114
+ </index>
1115
+ </p>
1116
+ <figure id='_'>
1117
+ <image src='spec/examples/rice_images/rice_image3_3.png' id='_' mimetype='image/png' height='auto' width='auto'/>
1118
+ </figure>
1119
+ </example>
1120
+ <figure id='_'>
1121
+ <index>
1122
+ <primary>indexterm2</primary>
1123
+ </index>
1124
+ <image src='spec/examples/rice_images/rice_image3_2.png' id='_' mimetype='image/png' height='auto' width='auto'/>
1125
+ </figure>
1126
+ </sections>
1127
+ </standard-document>
1128
+ OUTPUT
1129
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
1130
+ .to be_equivalent_to xmlpp(output)
1131
+ end
1132
+
1073
1133
  it "processes images" do
1074
1134
  input = <<~INPUT
1075
1135
  #{ASCIIDOC_BLANK_HDR}
@@ -1559,7 +1619,7 @@ RSpec.describe Metanorma::Standoc do
1559
1619
  it "processes recommendation" do
1560
1620
  input = <<~"INPUT"
1561
1621
  #{ASCIIDOC_BLANK_HDR}
1562
- [.recommendation,label="/ogc/recommendation/wfs/2",subject="user;developer, implementer",inherit="/ss/584/2015/level/1; /ss/584/2015/level/2",options="unnumbered",type=verification,model=ogc,tag=X,multilingual-rendering=common]
1622
+ [.recommendation,identifier="/ogc/recommendation/wfs/2",subject="user;developer, implementer",inherit="/ss/584/2015/level/1; /ss/584/2015/level/2",options="unnumbered",type=verification,model=ogc,tag=X,multilingual-rendering=common]
1563
1623
  ====
1564
1624
  I recommend this
1565
1625
  ====
@@ -1568,7 +1628,7 @@ RSpec.describe Metanorma::Standoc do
1568
1628
  #{BLANK_HDR}
1569
1629
  <sections>
1570
1630
  <recommendation id="_" unnumbered="true" type="verification" model="ogc" tag='X' multilingual-rendering='common'>
1571
- <label>/ogc/recommendation/wfs/2</label>
1631
+ <identifier>/ogc/recommendation/wfs/2</identifier>
1572
1632
  <subject>user</subject>
1573
1633
  <subject>developer, implementer</subject>
1574
1634
  <inherit>/ss/584/2015/level/1</inherit>
@@ -1669,7 +1729,7 @@ RSpec.describe Metanorma::Standoc do
1669
1729
  . List
1670
1730
  =====
1671
1731
 
1672
- [requirement,type="general",label="/req/core/quantities-uom"]
1732
+ [requirement,type="general",identifier="/req/core/quantities-uom"]
1673
1733
  ======
1674
1734
  ======
1675
1735
  ====
@@ -1694,7 +1754,7 @@ RSpec.describe Metanorma::Standoc do
1694
1754
  </description>
1695
1755
  </permission>
1696
1756
  <requirement id='_' type='general'>
1697
- <label>/req/core/quantities-uom</label>
1757
+ <identifier>/req/core/quantities-uom</identifier>
1698
1758
  </requirement>
1699
1759
  </permission>
1700
1760
  </sections>
@@ -1710,7 +1770,7 @@ RSpec.describe Metanorma::Standoc do
1710
1770
  #{ASCIIDOC_BLANK_HDR}
1711
1771
 
1712
1772
  [[ABC]]
1713
- [.recommendation,label="/ogc/recommendation/wfs/2",subject="user",classification="control-class:Technical;priority:P0;family:System &amp; Communications Protection,System and Communications Protocols",obligation="permission,recommendation",filename="reqt1.rq"]
1773
+ [.recommendation,identifier="/ogc/recommendation/wfs/2",subject="user",classification="control-class:Technical;priority:P0;family:System &amp; Communications Protection,System and Communications Protocols",obligation="permission,recommendation",filename="reqt1.rq"]
1714
1774
  ====
1715
1775
  I recommend _this_.
1716
1776
 
@@ -1769,7 +1829,7 @@ RSpec.describe Metanorma::Standoc do
1769
1829
  output = <<~"OUTPUT"
1770
1830
  #{BLANK_HDR}
1771
1831
  <sections>
1772
- <recommendation id="ABC" obligation="permission,recommendation" filename="reqt1.rq"><label>/ogc/recommendation/wfs/2</label><subject>user</subject>
1832
+ <recommendation id="ABC" obligation="permission,recommendation" filename="reqt1.rq"><identifier>/ogc/recommendation/wfs/2</identifier><subject>user</subject>
1773
1833
  <classification><tag>control-class</tag><value>Technical</value></classification><classification><tag>priority</tag><value>P0</value></classification><classification><tag>family</tag><value>System &amp; Communications Protection</value></classification><classification><tag>family</tag><value>System and Communications Protocols</value></classification>
1774
1834
  <description><p id="_">I recommend <em>this</em>.</p>
1775
1835
  </description><specification exclude="false" type="tabular" keep-with-next="true" keep-lines-together="true"><p id="_">This is the object of the recommendation:</p><table id="_"> <tbody> <tr> <td valign="top" align="left">Object</td> <td valign="top" align="left">Value</td> </tr> <tr> <td valign="top" align="left">Mission</td> <td valign="top" align="left">Accomplished</td> </tr> </tbody></table></specification><description>
@@ -803,7 +803,7 @@ RSpec.describe Metanorma::Standoc do
803
803
  [%metadata]
804
804
  model:: ogc
805
805
  type:: class
806
- label:: http://www.opengis.net/spec/waterml/2.0/req/xsd-xml-rules[*req/core*]
806
+ identifier:: http://www.opengis.net/spec/waterml/2.0/req/xsd-xml-rules[*req/core*]
807
807
  subject:: Encoding of logical models
808
808
  inherit:: urn:iso:dis:iso:19156:clause:7.2.2
809
809
  inherit:: urn:iso:dis:iso:19156:clause:8
@@ -812,6 +812,7 @@ RSpec.describe Metanorma::Standoc do
812
812
  inherit:: http://www.opengis.net/spec/SWE/2.0/req/core/core-concepts-used
813
813
  inherit:: <<ref2>>
814
814
  inherit:: <<ref3>>
815
+ target:: http://www.example.com
815
816
  classification:: priority:P0
816
817
  classification:: domain:Hydrology,Groundwater
817
818
  classification:: control-class:Technical
@@ -826,22 +827,14 @@ RSpec.describe Metanorma::Standoc do
826
827
  <clause id='_' inline-header='false' obligation='normative'>
827
828
  <title>Clause</title>
828
829
  <requirement id='_' subsequence='A' obligation='recommendation,requirement' model='ogc' type='class'>
829
- <label>
830
- <link target='http://www.opengis.net/spec/waterml/2.0/req/xsd-xml-rules'>
831
- <strong>req/core</strong>
832
- </link>
833
- </label>
830
+ <identifier>http://www.opengis.net/spec/waterml/2.0/req/xsd-xml-rules</identifier>
834
831
  <subject>Encoding of logical models</subject>
835
832
  <inherit>/ss/584/2015/level/1 &amp; /ss/584/2015/level/2</inherit>
836
833
  <inherit>urn:iso:dis:iso:19156:clause:7.2.2</inherit>
837
834
  <inherit>urn:iso:dis:iso:19156:clause:8</inherit>
838
- <inherit>
839
- <link target='http://www.opengis.net/doc/IS/GML/3.2/clause/2.4'/>
840
- </inherit>
835
+ <inherit>http://www.opengis.net/doc/IS/GML/3.2/clause/2.4</inherit>
841
836
  <inherit>O&amp;M Abstract model, OGC 10-004r3, clause D.3.4</inherit>
842
- <inherit>
843
- <link target='http://www.opengis.net/spec/SWE/2.0/req/core/core-concepts-used'/>
844
- </inherit>
837
+ <inherit>http://www.opengis.net/spec/SWE/2.0/req/core/core-concepts-used</inherit>
845
838
  <inherit>
846
839
  <xref target='ref2'/>
847
840
  </inherit>
@@ -849,21 +842,25 @@ RSpec.describe Metanorma::Standoc do
849
842
  <xref target='ref3'/>
850
843
  </inherit>
851
844
  <classification>
852
- <tag>control-class</tag>
853
- <value>Technical</value>
854
- </classification>
855
- <classification>
856
- <tag>domain</tag>
857
- <value>Groundwater</value>
858
- </classification>
859
- <classification>
860
- <tag>domain</tag>
861
- <value>Hydrology</value>
862
- </classification>
863
- <classification>
864
- <tag>priority</tag>
865
- <value>P0</value>
866
- </classification>
845
+ <tag>priority</tag>
846
+ <value>P0</value>
847
+ </classification>
848
+ <classification>
849
+ <tag>domain</tag>
850
+ <value>Hydrology</value>
851
+ </classification>
852
+ <classification>
853
+ <tag>domain</tag>
854
+ <value>Groundwater</value>
855
+ </classification>
856
+ <classification>
857
+ <tag>control-class</tag>
858
+ <value>Technical</value>
859
+ </classification>
860
+ <classification>
861
+ <tag>target</tag>
862
+ <value><link target='http://www.example.com'/></value>
863
+ </classification>
867
864
  <description>
868
865
  <p id='_'>I recommend this</p>
869
866
  </description>
@@ -1184,4 +1181,87 @@ RSpec.describe Metanorma::Standoc do
1184
1181
  .gsub(%r{<style.*?</style>}m, "<style/>")))
1185
1182
  .to be_equivalent_to xmlpp(output)
1186
1183
  end
1184
+
1185
+ it "removes paras with indexterms" do
1186
+ input = <<~INPUT
1187
+ #{ASCIIDOC_BLANK_HDR}
1188
+
1189
+ == Clause 1
1190
+
1191
+ Paragraph
1192
+
1193
+ (((index)))
1194
+
1195
+ [NOTE]
1196
+ --
1197
+
1198
+ (((index)))
1199
+
1200
+ Note
1201
+ --
1202
+
1203
+ [NOTE]
1204
+ --
1205
+
1206
+ (((index)))
1207
+
1208
+ --
1209
+
1210
+ == Clause 2
1211
+
1212
+ Paragraph
1213
+
1214
+ ((index))
1215
+
1216
+ INPUT
1217
+
1218
+ output = <<~OUTPUT
1219
+ #{BLANK_HDR}
1220
+ <sections>
1221
+ <clause id='_' inline-header='false' obligation='normative'>
1222
+ <title>Clause 1</title>
1223
+ <p id='_'>
1224
+ Paragraph
1225
+ <index>
1226
+ <primary>index</primary>
1227
+ </index>
1228
+ </p>
1229
+ <note id='_'>
1230
+ <p id='_'>
1231
+ <index>
1232
+ <primary>index</primary>
1233
+ </index>
1234
+ Note
1235
+ </p>
1236
+ </note>
1237
+ <note id='_'>
1238
+ <p id='_'>
1239
+ <index>
1240
+ <primary>index</primary>
1241
+ </index>
1242
+ </p>
1243
+ </note>
1244
+ </clause>
1245
+ <clause id='_' inline-header='false' obligation='normative'>
1246
+ <title>Clause 2</title>
1247
+ <p id='_'>Paragraph</p>
1248
+ <p id='_'>
1249
+ index
1250
+ <index>
1251
+ <primary>index</primary>
1252
+ </index>
1253
+ </p>
1254
+ </clause>
1255
+ </sections>
1256
+ </standard-document>
1257
+ OUTPUT
1258
+ xml = Nokogiri::XML(Asciidoctor.convert(input, *OPTIONS))
1259
+ xml.xpath("//*[local-name() = 'image']").each do |x|
1260
+ x.replace("<image/>")
1261
+ end
1262
+ expect(xmlpp(strip_guid(xml.to_xml)
1263
+ .gsub(%r{<style.*?</style>}m, "<style/>")))
1264
+ .to be_equivalent_to xmlpp(output)
1265
+ end
1266
+
1187
1267
  end
@@ -59,6 +59,8 @@ RSpec.describe Metanorma::Standoc do
59
59
  [underline]#underline#
60
60
  [smallcap]#smallcap#
61
61
  [keyword]#keyword#
62
+ [css font-family:"Noto Sans JP"]#text#
63
+ [css font-family:'Noto Sans JP']#text#
62
64
  INPUT
63
65
  output = <<~OUTPUT
64
66
  #{BLANK_HDR}
@@ -80,6 +82,8 @@ RSpec.describe Metanorma::Standoc do
80
82
  <underline>underline</underline>
81
83
  <smallcap>smallcap</smallcap>
82
84
  <keyword>keyword</keyword>
85
+ <span style="font-family:&quot;Noto Sans JP&quot;">text</span>
86
+ <span style="font-family:'Noto Sans JP'">text</span>
83
87
  </sections>
84
88
  </standard-document>
85
89
  OUTPUT
@@ -50,7 +50,7 @@ ISO_124_DATED = <<~XML.freeze
50
50
  <uri type="obp">https://www.iso.org/obp/ui/#!iso:std:61884:en</uri>
51
51
  <uri type="rss">https://www.iso.org/contents/data/standard/06/18/61884.detail.rss</uri>
52
52
  <docidentifier type="ISO" primary="true">ISO 124:2014</docidentifier>
53
- <docidentifier type='URN'>urn:iso:std:iso:124:stage-90.93:ed-7:en</docidentifier>
53
+ <docidentifier type='URN'>urn:iso:std:iso:124:stage-90.93:ed-7</docidentifier>
54
54
  <docnumber>124</docnumber>
55
55
  <date type="published">
56
56
  <on>2014-03</on>
@@ -82,6 +82,7 @@ ISO_124_DATED = <<~XML.freeze
82
82
  <relation type="obsoletes">
83
83
  <bibitem type="standard">
84
84
  <formattedref format="text/plain">ISO 124:2011</formattedref>
85
+ <docidentifier type='ISO' primary='true'>ISO 124:2011</docidentifier>
85
86
  </bibitem>
86
87
  </relation>
87
88
  <place>Geneva</place>
@@ -95,7 +96,7 @@ ISO_124_DATED = <<~XML.freeze
95
96
  <text>Latex and raw rubber</text>
96
97
  </ics>
97
98
  <structuredidentifier type="ISO">
98
- <project-number part="">ISO 124</project-number>
99
+ <project-number>ISO 124</project-number>
99
100
  </structuredidentifier>
100
101
  </ext>
101
102
  </bibdata>
@@ -209,7 +210,7 @@ ISO_123_DATED = <<~XML.freeze
209
210
  <uri type="obp">https://www.iso.org/obp/ui/#!iso:std:23281:en</uri>
210
211
  <uri type="rss">https://www.iso.org/contents/data/standard/02/32/23281.detail.rss</uri>
211
212
  <docidentifier type="ISO" primary="true">ISO 123:2001</docidentifier>
212
- <docidentifier type='URN'>urn:iso:std:iso:123:stage-90.93:ed-3:en</docidentifier>
213
+ <docidentifier type='URN'>urn:iso:std:iso:123:stage-90.93:ed-3</docidentifier>
213
214
  <docnumber>123</docnumber>
214
215
  <date type="published">
215
216
  <on>2001-05</on>
@@ -247,6 +248,7 @@ ISO_123_DATED = <<~XML.freeze
247
248
  <relation type="obsoletes">
248
249
  <bibitem type="standard">
249
250
  <formattedref format="text/plain">ISO 123:1985</formattedref>
251
+ <docidentifier type='ISO' primary='true'>ISO 123:1985</docidentifier>
250
252
  </bibitem>
251
253
  </relation>
252
254
  <place>Geneva</place>
@@ -260,7 +262,7 @@ ISO_123_DATED = <<~XML.freeze
260
262
  <text>Latex and raw rubber</text>
261
263
  </ics>
262
264
  <structuredidentifier type="ISO">
263
- <project-number part="">ISO 123</project-number>
265
+ <project-number>ISO 123</project-number>
264
266
  </structuredidentifier>
265
267
  </ext>
266
268
  </bibdata>
@@ -13,6 +13,7 @@ RSpec.describe Metanorma::Standoc do
13
13
  autonumber:table[3]
14
14
  add:[a <<clause>>] del:[B]
15
15
  identifier:[a http://example.com]
16
+ span:category[text]
16
17
 
17
18
  [bibliography]
18
19
  == Bibliography
@@ -38,6 +39,7 @@ RSpec.describe Metanorma::Standoc do
38
39
  </add>
39
40
  <del>B</del>
40
41
  <identifier>a http://example.com</identifier>
42
+ <span class='category'>text</span>
41
43
  </foreword>
42
44
  </preface>
43
45
  <sections> </sections>
@@ -1706,7 +1708,7 @@ RSpec.describe Metanorma::Standoc do
1706
1708
  <uri type='src'>https://www.iso.org/standard/3944.html</uri>
1707
1709
  <uri type='rss'>https://www.iso.org/contents/data/standard/00/39/3944.detail.rss</uri>
1708
1710
  <docidentifier type='ISO' primary='true'>ISO 131</docidentifier>
1709
- <docidentifier type='URN'>urn:iso:std:iso:131:stage-95.99:ed-1:en</docidentifier>
1711
+ <docidentifier type='URN'>urn:iso:std:iso:131:stage-95.99:ed-1</docidentifier>
1710
1712
  <docnumber>131</docnumber>
1711
1713
  <contributor>
1712
1714
  <role type='publisher'/>
@@ -1734,6 +1736,7 @@ RSpec.describe Metanorma::Standoc do
1734
1736
  <relation type='obsoletes'>
1735
1737
  <bibitem type='standard'>
1736
1738
  <formattedref format='text/plain'>ISO/R 357:1963</formattedref>
1739
+ <docidentifier type='ISO' primary='true'>ISO/R 357:1963</docidentifier>
1737
1740
  </bibitem>
1738
1741
  </relation>
1739
1742
  <relation type='instance'>
@@ -1748,7 +1751,7 @@ RSpec.describe Metanorma::Standoc do
1748
1751
  <uri type='src'>https://www.iso.org/standard/3944.html</uri>
1749
1752
  <uri type='rss'>https://www.iso.org/contents/data/standard/00/39/3944.detail.rss</uri>
1750
1753
  <docidentifier type='ISO' primary='true'>ISO 131:1979</docidentifier>
1751
- <docidentifier type='URN'>urn:iso:std:iso:131:stage-95.99:ed-1:en</docidentifier>
1754
+ <docidentifier type='URN'>urn:iso:std:iso:131:stage-95.99:ed-1</docidentifier>
1752
1755
  <docnumber>131</docnumber>
1753
1756
  <date type='published'>
1754
1757
  <on>1979-11</on>
@@ -1779,6 +1782,7 @@ RSpec.describe Metanorma::Standoc do
1779
1782
  <relation type='obsoletes'>
1780
1783
  <bibitem type='standard'>
1781
1784
  <formattedref format='text/plain'>ISO/R 357:1963</formattedref>
1785
+ <docidentifier type='ISO' primary='true'>ISO/R 357:1963</docidentifier>
1782
1786
  </bibitem>
1783
1787
  </relation>
1784
1788
  <place>Geneva</place>