isodoc 1.8.3.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +3 -31
- data/lib/isodoc/base_style/all.css +9 -0
- data/lib/isodoc/base_style/reset.css +9 -0
- data/lib/isodoc/base_style/reset.scss +11 -0
- data/lib/isodoc/class_utils.rb +18 -6
- data/lib/isodoc/convert.rb +8 -1
- data/lib/isodoc/function/blocks.rb +4 -1
- data/lib/isodoc/function/references.rb +31 -22
- data/lib/isodoc/function/section_titles.rb +6 -1
- data/lib/isodoc/function/to_word_html.rb +3 -3
- data/lib/isodoc/function/utils.rb +13 -14
- data/lib/isodoc/headlesshtml_convert.rb +1 -1
- data/lib/isodoc/html_convert.rb +1 -1
- data/lib/isodoc/html_function/postprocess.rb +9 -2
- data/lib/isodoc/i18n.rb +6 -3
- data/lib/isodoc/pdf_convert.rb +1 -1
- data/lib/isodoc/presentation_function/bibdata.rb +0 -6
- data/lib/isodoc/presentation_function/section.rb +40 -4
- data/lib/isodoc/presentation_function/terms.rb +25 -20
- data/lib/isodoc/presentation_xml_convert.rb +1 -0
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/xref/xref_sect_gen.rb +7 -3
- data/lib/isodoc/xslfo_convert.rb +1 -2
- data/spec/isodoc/blocks_spec.rb +2 -1
- data/spec/isodoc/postproc_spec.rb +46 -16
- data/spec/isodoc/presentation_xml_spec.rb +208 -37
- data/spec/isodoc/ref_spec.rb +332 -300
- data/spec/isodoc/section_spec.rb +713 -601
- data/spec/isodoc/utils_spec.rb +57 -0
- metadata +3 -2
@@ -6,35 +6,40 @@ module IsoDoc
|
|
6
6
|
|
7
7
|
def concept1(node)
|
8
8
|
xref = node&.at(ns("./xref/@target"))&.text or
|
9
|
-
return concept_render(node, ital:
|
10
|
-
|
11
|
-
linkref: node["linkref"] || "true",
|
12
|
-
linkmention: node["linkmention"] || "false")
|
9
|
+
return concept_render(node, ital: "true", ref: "true",
|
10
|
+
linkref: "true", linkmention: "false")
|
13
11
|
if node.at(ns("//definitions//dt[@id = '#{xref}']"))
|
14
|
-
concept_render(node, ital:
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
else concept_render(node, ital: node["ital"] || "true",
|
19
|
-
ref: node["ref"] || "true",
|
20
|
-
linkref: node["linkref"] || "true",
|
21
|
-
linkmention: node["linkmention"] || "false")
|
12
|
+
concept_render(node, ital: "false", ref: "false",
|
13
|
+
linkref: "true", linkmention: "false")
|
14
|
+
else concept_render(node, ital: "true", ref: "true",
|
15
|
+
linkref: "true", linkmention: "false")
|
22
16
|
end
|
23
17
|
end
|
24
18
|
|
25
|
-
def concept_render(node,
|
19
|
+
def concept_render(node, defaults)
|
20
|
+
opts, render, ref = concept_render_init(node, defaults)
|
26
21
|
node&.at(ns("./refterm"))&.remove
|
27
|
-
|
28
|
-
|
29
|
-
ref
|
30
|
-
opts[:ital] == "true" and r&.name = "em"
|
31
|
-
concept1_linkmention(ref, r, opts)
|
22
|
+
ref && opts[:ref] != "false" and render&.next = " "
|
23
|
+
opts[:ital] == "true" and render&.name = "em"
|
24
|
+
concept1_linkmention(ref, render, opts)
|
32
25
|
concept1_ref(node, ref, opts)
|
26
|
+
concept1_nonital(node, opts)
|
27
|
+
node.replace(node.children)
|
28
|
+
end
|
29
|
+
|
30
|
+
def concept1_nonital(node, opts)
|
33
31
|
if opts[:ital] == "false"
|
34
32
|
r = node.at(ns(".//renderterm"))
|
35
33
|
r&.replace(r&.children)
|
36
34
|
end
|
37
|
-
|
35
|
+
end
|
36
|
+
|
37
|
+
def concept_render_init(node, defaults)
|
38
|
+
opts = %i(ital ref linkref linkmention).each_with_object({}) do |x, m|
|
39
|
+
m[x] = node[x.to_s] || defaults[x]
|
40
|
+
end
|
41
|
+
[opts, node.at(ns("./renderterm")),
|
42
|
+
node.at(ns("./xref | ./eref | ./termref"))]
|
38
43
|
end
|
39
44
|
|
40
45
|
def concept1_linkmention(ref, renderterm, opts)
|
@@ -237,7 +242,7 @@ module IsoDoc
|
|
237
242
|
end
|
238
243
|
|
239
244
|
def termsource_modification(mod)
|
240
|
-
mod.previous_element.next = ", #{@i18n.modified}"
|
245
|
+
mod.previous_element.next = l10n(", #{@i18n.modified}")
|
241
246
|
mod.text.strip.empty? or mod.previous = " – "
|
242
247
|
mod.elements.size == 1 and
|
243
248
|
mod.elements[0].replace(mod.elements[0].children)
|
data/lib/isodoc/version.rb
CHANGED
@@ -9,6 +9,10 @@ module IsoDoc
|
|
9
9
|
docxml.xpath(ns(@klass.bibliography_xpath)).each do |b|
|
10
10
|
preface_names(b)
|
11
11
|
end
|
12
|
+
references(docxml)
|
13
|
+
end
|
14
|
+
|
15
|
+
def references(docxml)
|
12
16
|
docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
|
13
17
|
reference_names(ref)
|
14
18
|
end
|
@@ -148,11 +152,11 @@ module IsoDoc
|
|
148
152
|
"xmlns:name = 'International Electrotechnical Commission']".freeze
|
149
153
|
|
150
154
|
def reference_names(ref)
|
151
|
-
# isopub = ref.at(ns(ISO_PUBLISHER_XPATH))
|
152
155
|
ids = @klass.bibitem_ref_code(ref)
|
153
156
|
identifiers = @klass.render_identifier(ids)
|
154
|
-
|
155
|
-
|
157
|
+
reference = @klass
|
158
|
+
.docid_l10n(identifiers[:metanorma] || identifiers[:sdo] ||
|
159
|
+
identifiers[:ordinal] || identifiers[:doi])
|
156
160
|
@anchors[ref["id"]] = { xref: reference }
|
157
161
|
end
|
158
162
|
end
|
data/lib/isodoc/xslfo_convert.rb
CHANGED
@@ -33,7 +33,7 @@ module IsoDoc
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def tmpimagedir_suffix
|
36
|
-
"_pdfimages"
|
36
|
+
"_#{SecureRandom.hex(8)}_pdfimages"
|
37
37
|
end
|
38
38
|
|
39
39
|
def pdf_stylesheet(_docxml)
|
@@ -58,7 +58,6 @@ module IsoDoc
|
|
58
58
|
file = File.read(input_filename, encoding: "utf-8") if file.nil?
|
59
59
|
input_filename, docxml, filename = input_xml_path(input_filename,
|
60
60
|
file, debug)
|
61
|
-
warn pdf_options(docxml).merge(@options)
|
62
61
|
::Metanorma::Output::XslfoPdf.new.convert(
|
63
62
|
input_filename,
|
64
63
|
output_filename || "#{filename}.#{@suffix}",
|
data/spec/isodoc/blocks_spec.rb
CHANGED
@@ -1752,7 +1752,7 @@ RSpec.describe IsoDoc do
|
|
1752
1752
|
</foreword></preface>
|
1753
1753
|
<bibliography><references id="_bibliography" obligation="informative" normative="false" displayorder='2'>
|
1754
1754
|
<title depth='1'>Bibliography</title>
|
1755
|
-
<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>
|
1755
|
+
<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='metanorma-ordinal'>[1]</docidentifier> <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>
|
1756
1756
|
</references></bibliography>
|
1757
1757
|
</iso-standard>
|
1758
1758
|
OUTPUT
|
@@ -2518,6 +2518,7 @@ RSpec.describe IsoDoc do
|
|
2518
2518
|
<bibliography>
|
2519
2519
|
<references hidden='true' normative='false' displayorder="1">
|
2520
2520
|
<bibitem id='express_action_schema' type='internal'>
|
2521
|
+
<docidentifier type='metanorma-ordinal'>[1]</docidentifier>
|
2521
2522
|
<docidentifier type='repository'>express/action_schema</docidentifier>
|
2522
2523
|
</bibitem>
|
2523
2524
|
</references>
|
@@ -474,6 +474,33 @@ RSpec.describe IsoDoc do
|
|
474
474
|
OUTPUT
|
475
475
|
end
|
476
476
|
|
477
|
+
=begin
|
478
|
+
it "populates HTML ToC" do
|
479
|
+
FileUtils.rm_f "test.doc"
|
480
|
+
FileUtils.rm_f "test.html"
|
481
|
+
IsoDoc::HtmlConvert.new({ htmltoclevels: 3 })
|
482
|
+
.convert("test", <<~"INPUT", false)
|
483
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
484
|
+
<preface><foreword><title>Foreword</title>
|
485
|
+
<variant-title type="toc">FORVORT</variant-title>
|
486
|
+
</foreword></preface>
|
487
|
+
<sections>
|
488
|
+
<clause><title>First Clause</title>
|
489
|
+
<clause><title>First Subclause</title>
|
490
|
+
<variant-title type="toc">SUBCLOZ</variant-title>
|
491
|
+
</clause>
|
492
|
+
</clause>
|
493
|
+
</sections>
|
494
|
+
</iso-standard>
|
495
|
+
INPUT
|
496
|
+
html = Nokogiri::XML(File.read("test.html")).
|
497
|
+
at("//div[@id = 'toc']")
|
498
|
+
expect(xmlpp(html)).to be_equivalent_to xmlpp(<<~OUTPUT)
|
499
|
+
HAJSHJAS
|
500
|
+
OUTPUT
|
501
|
+
end
|
502
|
+
=end
|
503
|
+
|
477
504
|
it "populates Word ToC" do
|
478
505
|
FileUtils.rm_f "test.doc"
|
479
506
|
IsoDoc::WordConvert.new(
|
@@ -495,6 +522,7 @@ RSpec.describe IsoDoc do
|
|
495
522
|
</fn></p>
|
496
523
|
<clause id="P" inline-header="false" obligation="normative">
|
497
524
|
<title>Clause 4.2.1</title>
|
525
|
+
<variant-title type="toc">SUBCLOZ</variant-title>
|
498
526
|
</clause>
|
499
527
|
</clause></clause>
|
500
528
|
</sections>
|
@@ -726,9 +754,9 @@ RSpec.describe IsoDoc do
|
|
726
754
|
OUTPUT
|
727
755
|
end
|
728
756
|
|
729
|
-
it "moves images in HTML" do
|
757
|
+
it "moves images in HTML #1" do
|
730
758
|
FileUtils.rm_f "test.html"
|
731
|
-
FileUtils.rm_rf "
|
759
|
+
FileUtils.rm_rf Dir.glob "test_*_htmlimages"
|
732
760
|
IsoDoc::HtmlConvert.new(
|
733
761
|
{ wordstylesheet: "spec/assets/word.css",
|
734
762
|
htmlstylesheet: "spec/assets/html.scss" },
|
@@ -750,8 +778,9 @@ RSpec.describe IsoDoc do
|
|
750
778
|
html = File.read("test.html")
|
751
779
|
.sub(/^.*<main class="main-section">/m, '<main class="main-section">')
|
752
780
|
.sub(%r{</main>.*$}m, "</main>")
|
753
|
-
expect(`ls
|
754
|
-
expect(xmlpp(html.gsub(/\/[0-9a-f-]+\.png/, "/_.png"))
|
781
|
+
expect(`ls test_*_htmlimages`).to match(/\.png$/)
|
782
|
+
expect(xmlpp(html.gsub(/\/[0-9a-f-]+\.png/, "/_.png"))
|
783
|
+
.gsub(/test_[^_]+_htmlimages/, "test_htmlimages"))
|
755
784
|
.to be_equivalent_to xmlpp(<<~"OUTPUT")
|
756
785
|
<main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
|
757
786
|
<br />
|
@@ -771,7 +800,7 @@ RSpec.describe IsoDoc do
|
|
771
800
|
OUTPUT
|
772
801
|
end
|
773
802
|
|
774
|
-
it "moves images in HTML" do
|
803
|
+
it "moves images in HTML #2" do
|
775
804
|
FileUtils.rm_f "test.html"
|
776
805
|
FileUtils.rm_rf "test_htmlimages"
|
777
806
|
IsoDoc::HtmlConvert.new(
|
@@ -791,8 +820,9 @@ RSpec.describe IsoDoc do
|
|
791
820
|
html = File.read("test.html")
|
792
821
|
.sub(/^.*<main class="main-section">/m, '<main class="main-section">')
|
793
822
|
.sub(%r{</main>.*$}m, "</main>")
|
794
|
-
expect(`ls
|
795
|
-
expect(xmlpp(html.gsub(/\/[0-9a-f-]+\.png/, "/_.png"))
|
823
|
+
expect(`ls test_*_htmlimages`).to match(/\.png$/)
|
824
|
+
expect(xmlpp(html.gsub(/\/[0-9a-f-]+\.png/, "/_.png"))
|
825
|
+
.gsub(/test_[^_]+_htmlimages/, "test_htmlimages"))
|
796
826
|
.to be_equivalent_to xmlpp(<<~"OUTPUT")
|
797
827
|
<main class='main-section'>
|
798
828
|
<button onclick='topFunction()' id='myBtn' title='Go to top'>Top</button>
|
@@ -813,7 +843,6 @@ RSpec.describe IsoDoc do
|
|
813
843
|
context "when `mathvariant` attr equal to `script`" do
|
814
844
|
it "converts mathvariant text chars into associated plain chars" do
|
815
845
|
FileUtils.rm_f "test.html"
|
816
|
-
FileUtils.rm_rf "test_htmlimages"
|
817
846
|
input = <<~INPUT
|
818
847
|
<?xml version="1.0" encoding="UTF-8"?>
|
819
848
|
<iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="1.5.14">
|
@@ -865,7 +894,6 @@ RSpec.describe IsoDoc do
|
|
865
894
|
context "when complex `mathvariant` combinations" do
|
866
895
|
it "converts mathvariant text chars into associated plain chars" do
|
867
896
|
FileUtils.rm_f "test.html"
|
868
|
-
FileUtils.rm_rf "test_htmlimages"
|
869
897
|
input = <<~INPUT
|
870
898
|
<?xml version="1.0" encoding="UTF-8"?>
|
871
899
|
<iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="1.5.14">
|
@@ -975,7 +1003,7 @@ RSpec.describe IsoDoc do
|
|
975
1003
|
|
976
1004
|
it "moves images in HTML with no file suffix" do
|
977
1005
|
FileUtils.rm_f "test.html"
|
978
|
-
FileUtils.rm_rf "
|
1006
|
+
FileUtils.rm_rf Dir.glob "test_*_htmlimages"
|
979
1007
|
IsoDoc::HtmlConvert.new(
|
980
1008
|
{ wordstylesheet: "spec/assets/word.css",
|
981
1009
|
htmlstylesheet: "spec/assets/html.scss" },
|
@@ -994,8 +1022,9 @@ RSpec.describe IsoDoc do
|
|
994
1022
|
html = File.read("test.html")
|
995
1023
|
.sub(/^.*<main class="main-section">/m, '<main class="main-section">')
|
996
1024
|
.sub(%r{</main>.*$}m, "</main>")
|
997
|
-
expect(`ls
|
998
|
-
expect(xmlpp(html.gsub(/\/[0-9a-f-]+\.png/, "/_.png"))
|
1025
|
+
expect(`ls test_*_htmlimages`).to match(/\.png$/)
|
1026
|
+
expect(xmlpp(html.gsub(/\/[0-9a-f-]+\.png/, "/_.png"))
|
1027
|
+
.gsub(/test_[^_]+_htmlimages/, "test_htmlimages"))
|
999
1028
|
.to be_equivalent_to xmlpp(<<~"OUTPUT")
|
1000
1029
|
<main class='main-section'>
|
1001
1030
|
<button onclick='topFunction()' id='myBtn' title='Go to top'>Top</button>
|
@@ -1036,8 +1065,9 @@ RSpec.describe IsoDoc do
|
|
1036
1065
|
html = File.read("spec/test.html")
|
1037
1066
|
.sub(/^.*<main class="main-section">/m, '<main class="main-section">')
|
1038
1067
|
.sub(%r{</main>.*$}m, "</main>")
|
1039
|
-
expect(`ls
|
1040
|
-
expect(xmlpp(html.gsub(/\/[0-9a-f-]+\.png/, "/_.png"))
|
1068
|
+
expect(`ls test_*_htmlimages`).to match(/\.png$/)
|
1069
|
+
expect(xmlpp(html.gsub(/\/[0-9a-f-]+\.png/, "/_.png"))
|
1070
|
+
.gsub(/test_[^_]+_htmlimages/, "test_htmlimages"))
|
1041
1071
|
.to be_equivalent_to xmlpp(<<~"OUTPUT")
|
1042
1072
|
<main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
|
1043
1073
|
<br />
|
@@ -1057,7 +1087,7 @@ RSpec.describe IsoDoc do
|
|
1057
1087
|
|
1058
1088
|
it "encodes images in HTML as data URIs" do
|
1059
1089
|
FileUtils.rm_f "test.html"
|
1060
|
-
FileUtils.rm_rf "
|
1090
|
+
FileUtils.rm_rf Dir.glob "test_*_htmlimages"
|
1061
1091
|
IsoDoc::HtmlConvert
|
1062
1092
|
.new(htmlstylesheet: "spec/assets/html.scss", datauriimage: true)
|
1063
1093
|
.convert("test", <<~"INPUT", false)
|
@@ -1093,7 +1123,7 @@ RSpec.describe IsoDoc do
|
|
1093
1123
|
|
1094
1124
|
it "encodes images in HTML as data URIs, using relative file location" do
|
1095
1125
|
FileUtils.rm_f "spec/test.html"
|
1096
|
-
FileUtils.rm_rf "
|
1126
|
+
FileUtils.rm_rf Dir.glob "test_*_htmlimages"
|
1097
1127
|
IsoDoc::HtmlConvert
|
1098
1128
|
.new({ htmlstylesheet: "assets/html.scss", datauriimage: true })
|
1099
1129
|
.convert("spec/test", <<~"INPUT", false)
|
@@ -717,49 +717,220 @@ RSpec.describe IsoDoc do
|
|
717
717
|
</annex>
|
718
718
|
</iso-standard>
|
719
719
|
INPUT
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
</
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
720
|
+
presxml = <<~OUTPUT
|
721
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
|
722
|
+
<bibdata/>
|
723
|
+
<sections>
|
724
|
+
<clause id='_' inline-header='false' obligation='normative' displayorder='1'>
|
725
|
+
<title depth='1'>
|
726
|
+
<strong>Annex A</strong>
|
727
|
+
<br/>
|
728
|
+
(normative).
|
729
|
+
<tab/>
|
730
|
+
Clause
|
731
|
+
</title>
|
732
|
+
<p id='_'>Text</p>
|
733
|
+
<clause id='_' inline-header='false' obligation='normative'>
|
734
|
+
<title depth='1'>
|
735
|
+
<strong>Annex A</strong>
|
736
|
+
<br/>
|
737
|
+
(normative).
|
738
|
+
<tab/>
|
739
|
+
Subclause
|
740
|
+
</title>
|
741
|
+
<variant-title variant_title='true' type='sub' id='_'>“A” ‘B’</variant-title>
|
742
|
+
<variant-title variant_title='true' type='toc' id='_'>
|
743
|
+
Clause
|
744
|
+
<em>A</em>
|
745
|
+
<stem type='MathML'>
|
746
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
747
|
+
<mi>x</mi>
|
748
|
+
</math>
|
749
|
+
<!-- x -->
|
750
|
+
</stem>
|
751
|
+
</variant-title>
|
752
|
+
<p id='_'>Text</p>
|
753
|
+
</clause>
|
754
|
+
</clause>
|
755
|
+
</sections>
|
756
|
+
<annex id='_' inline-header='false' obligation='normative' displayorder='2'>
|
757
|
+
<title>
|
758
|
+
<strong>Annex A</strong>
|
759
|
+
<br/>
|
760
|
+
(normative)
|
761
|
+
<br/>
|
762
|
+
<br/>
|
763
|
+
<strong>Clause</strong>
|
764
|
+
</title>
|
765
|
+
<variant-title variant_title='true' type='toc' id='_'>
|
766
|
+
Clause
|
767
|
+
<em>A</em>
|
768
|
+
<stem type='MathML'>
|
769
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
770
|
+
<mi>x</mi>
|
771
|
+
</math>
|
772
|
+
<!-- x -->
|
773
|
+
</stem>
|
774
|
+
</variant-title>
|
775
|
+
<p id='_'>Text</p>
|
776
|
+
</annex>
|
777
|
+
</iso-standard>
|
778
|
+
OUTPUT
|
779
|
+
html = <<~OUTPUT
|
780
|
+
<html lang='en'>
|
781
|
+
<head/>
|
782
|
+
<body lang='en'>
|
783
|
+
<div class='title-section'>
|
784
|
+
<p> </p>
|
785
|
+
</div>
|
751
786
|
<br/>
|
787
|
+
<div class='prefatory-section'>
|
788
|
+
<p> </p>
|
789
|
+
</div>
|
752
790
|
<br/>
|
753
|
-
<
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
791
|
+
<div class='main-section'>
|
792
|
+
<p class='zzSTDTitle1'/>
|
793
|
+
<div id='_'>
|
794
|
+
<h1>
|
795
|
+
<b>Annex A</b>
|
796
|
+
<br/>
|
797
|
+
(normative).   Clause
|
798
|
+
</h1>
|
799
|
+
<p id='_'>Text</p>
|
800
|
+
<div id='_'>
|
801
|
+
<h1>
|
802
|
+
<b>Annex A</b>
|
803
|
+
<br/>
|
804
|
+
(normative).   Subclause
|
805
|
+
<br/>
|
806
|
+
<br/>
|
807
|
+
“A” ‘B’
|
808
|
+
</h1>
|
809
|
+
<p style='display:none;' class='variant-title-toc'>
|
810
|
+
Clause
|
811
|
+
<i>A</i>
|
812
|
+
<span class='stem'>
|
813
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
814
|
+
<mi>x</mi>
|
815
|
+
</math>
|
816
|
+
</span>
|
817
|
+
</p>
|
818
|
+
<p id='_'>Text</p>
|
819
|
+
</div>
|
820
|
+
</div>
|
821
|
+
<br/>
|
822
|
+
<div id='_' class='Section3'>
|
823
|
+
<h1 class='Annex'>
|
824
|
+
<b>Annex A</b>
|
825
|
+
<br/>
|
826
|
+
(normative)
|
827
|
+
<br/>
|
828
|
+
<br/>
|
829
|
+
<b>Clause</b>
|
830
|
+
</h1>
|
831
|
+
<p style='display:none;' class='variant-title-toc'>
|
832
|
+
Clause
|
833
|
+
<i>A</i>
|
834
|
+
<span class='stem'>
|
835
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
836
|
+
<mi>x</mi>
|
837
|
+
</math>
|
838
|
+
</span>
|
839
|
+
</p>
|
840
|
+
<p id='_'>Text</p>
|
841
|
+
</div>
|
842
|
+
</div>
|
843
|
+
</body>
|
844
|
+
</html>
|
845
|
+
OUTPUT
|
846
|
+
doc = <<~OUTPUT
|
847
|
+
<html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'>
|
848
|
+
<head>
|
849
|
+
<style>
|
850
|
+
</style>
|
851
|
+
</head>
|
852
|
+
<body lang='EN-US' link='blue' vlink='#954F72'>
|
853
|
+
<div class='WordSection1'>
|
854
|
+
<p> </p>
|
855
|
+
</div>
|
856
|
+
<p>
|
857
|
+
<br clear='all' class='section'/>
|
858
|
+
</p>
|
859
|
+
<div class='WordSection2'>
|
860
|
+
<p> </p>
|
861
|
+
</div>
|
862
|
+
<p>
|
863
|
+
<br clear='all' class='section'/>
|
864
|
+
</p>
|
865
|
+
<div class='WordSection3'>
|
866
|
+
<p class='zzSTDTitle1'/>
|
867
|
+
<div id='_'>
|
868
|
+
<h1>
|
869
|
+
<b>Annex A</b>
|
870
|
+
<br/>
|
871
|
+
(normative).
|
872
|
+
<span style='mso-tab-count:1'>  </span>
|
873
|
+
Clause
|
874
|
+
</h1>
|
875
|
+
<p id='_'>Text</p>
|
876
|
+
<div id='_'>
|
877
|
+
<h1>
|
878
|
+
<b>Annex A</b>
|
879
|
+
<br/>
|
880
|
+
(normative).
|
881
|
+
<span style='mso-tab-count:1'>  </span>
|
882
|
+
Subclause
|
883
|
+
<br/>
|
884
|
+
<br/>
|
885
|
+
“A” ‘B’
|
886
|
+
</h1>
|
887
|
+
<p style='display:none;' class='variant-title-toc'>
|
888
|
+
Clause
|
889
|
+
<i>A</i>
|
890
|
+
<span class='stem'>
|
891
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
892
|
+
<mi>x</mi>
|
893
|
+
</math>
|
894
|
+
</span>
|
895
|
+
</p>
|
896
|
+
<p id='_'>Text</p>
|
897
|
+
</div>
|
898
|
+
</div>
|
899
|
+
<p>
|
900
|
+
<br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
|
901
|
+
</p>
|
902
|
+
<div id='_' class='Section3'>
|
903
|
+
<h1 class='Annex'>
|
904
|
+
<b>Annex A</b>
|
905
|
+
<br/>
|
906
|
+
(normative)
|
907
|
+
<br/>
|
908
|
+
<br/>
|
909
|
+
<b>Clause</b>
|
910
|
+
</h1>
|
911
|
+
<p style='display:none;' class='variant-title-toc'>
|
912
|
+
Clause
|
913
|
+
<i>A</i>
|
914
|
+
<span class='stem'>
|
915
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
916
|
+
<mi>x</mi>
|
917
|
+
</math>
|
918
|
+
</span>
|
919
|
+
</p>
|
920
|
+
<p id='_'>Text</p>
|
921
|
+
</div>
|
922
|
+
</div>
|
923
|
+
</body>
|
924
|
+
</html>
|
758
925
|
OUTPUT
|
759
926
|
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
760
927
|
.convert("test", input, true))
|
761
928
|
.sub(%r{<localized-strings>.*</localized-strings>}m, ""))
|
762
|
-
.to be_equivalent_to xmlpp(
|
929
|
+
.to be_equivalent_to xmlpp(presxml)
|
930
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({})
|
931
|
+
.convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
|
932
|
+
expect(xmlpp(IsoDoc::WordConvert.new({})
|
933
|
+
.convert("test", presxml, true))).to be_equivalent_to xmlpp(doc)
|
763
934
|
end
|
764
935
|
|
765
936
|
it "duplicates EMF and SVG files" do
|