metanorma-itu 2.4.3 → 2.4.4
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.
- checksums.yaml +4 -4
- data/lib/isodoc/itu/html/html_itu_titlepage.html +7 -4
- data/lib/isodoc/itu/html/word_itu_titlepage.html +17 -34
- data/lib/isodoc/itu/itu.implementers-guide.xsl +36 -6
- data/lib/isodoc/itu/itu.in-force.xsl +36 -6
- data/lib/isodoc/itu/itu.recommendation-annex.xsl +36 -6
- data/lib/isodoc/itu/itu.recommendation-supplement.xsl +36 -6
- data/lib/isodoc/itu/itu.recommendation.xsl +36 -6
- data/lib/isodoc/itu/itu.resolution.xsl +36 -6
- data/lib/isodoc/itu/itu.service-publication.xsl +36 -6
- data/lib/isodoc/itu/itu.technical-paper.xsl +36 -6
- data/lib/isodoc/itu/itu.technical-report.xsl +36 -6
- data/lib/isodoc/itu/metadata.rb +4 -0
- data/lib/isodoc/itu/presentation_ref.rb +18 -13
- data/lib/isodoc/itu/presentation_xml_convert.rb +0 -11
- data/lib/metanorma/itu/cleanup.rb +17 -146
- data/lib/metanorma/itu/cleanup_section.rb +150 -0
- data/lib/metanorma/itu/converter.rb +4 -0
- data/lib/metanorma/itu/front.rb +36 -22
- data/lib/metanorma/itu/version.rb +1 -1
- metadata +3 -2
|
@@ -9284,16 +9284,44 @@
|
|
|
9284
9284
|
</xsl:choose>
|
|
9285
9285
|
|
|
9286
9286
|
<xsl:attribute name="content-width">scale-down-to-fit</xsl:attribute>
|
|
9287
|
-
<xsl:variable name="
|
|
9288
|
-
<xsl:variable name="
|
|
9287
|
+
<xsl:variable name="svg_width_" select="xalan:nodeset($svg_content)/*/@width"/>
|
|
9288
|
+
<xsl:variable name="svg_width" select="number(translate($svg_width_, 'px', ''))"/>
|
|
9289
|
+
<xsl:variable name="svg_height_" select="xalan:nodeset($svg_content)/*/@height"/>
|
|
9290
|
+
<xsl:variable name="svg_height" select="number(translate($svg_height_, 'px', ''))"/>
|
|
9291
|
+
|
|
9292
|
+
<!-- Example: -->
|
|
9289
9293
|
<!-- effective height 297 - 27.4 - 13 = 256.6 -->
|
|
9290
9294
|
<!-- effective width 210 - 12.5 - 25 = 172.5 -->
|
|
9291
9295
|
<!-- effective height / width = 1.48, 1.4 - with title -->
|
|
9292
|
-
|
|
9296
|
+
|
|
9297
|
+
<xsl:variable name="scale_x">
|
|
9298
|
+
<xsl:choose>
|
|
9299
|
+
<xsl:when test="$svg_width > $width_effective_px">
|
|
9300
|
+
<xsl:value-of select="$width_effective_px div $svg_width"/>
|
|
9301
|
+
</xsl:when>
|
|
9302
|
+
<xsl:otherwise>1</xsl:otherwise>
|
|
9303
|
+
</xsl:choose>
|
|
9304
|
+
</xsl:variable>
|
|
9305
|
+
<xsl:variable name="scale_y">
|
|
9306
|
+
<xsl:choose>
|
|
9307
|
+
<xsl:when test="$svg_height * $scale_x > $height_effective_px">
|
|
9308
|
+
<xsl:value-of select="$height_effective_px div ($svg_height * $scale_x)"/>
|
|
9309
|
+
</xsl:when>
|
|
9310
|
+
<xsl:otherwise>1</xsl:otherwise>
|
|
9311
|
+
</xsl:choose>
|
|
9312
|
+
</xsl:variable>
|
|
9313
|
+
|
|
9314
|
+
<!-- for images with big height -->
|
|
9315
|
+
<!-- <xsl:if test="$svg_height > ($svg_width * 1.4)">
|
|
9293
9316
|
<xsl:variable name="width" select="(($svg_width * 1.4) div $svg_height) * 100"/>
|
|
9294
9317
|
<xsl:attribute name="width"><xsl:value-of select="$width"/>%</xsl:attribute>
|
|
9295
|
-
</xsl:if>
|
|
9318
|
+
</xsl:if> -->
|
|
9296
9319
|
<xsl:attribute name="scaling">uniform</xsl:attribute>
|
|
9320
|
+
|
|
9321
|
+
<xsl:if test="$scale_y != 1">
|
|
9322
|
+
<xsl:attribute name="content-height"><xsl:value-of select="round($scale_x * $scale_y * 100)"/>%</xsl:attribute>
|
|
9323
|
+
</xsl:if>
|
|
9324
|
+
|
|
9297
9325
|
<xsl:copy-of select="$svg_content"/>
|
|
9298
9326
|
</fo:instream-foreign-object>
|
|
9299
9327
|
<!-- </fo:block> -->
|
|
@@ -11452,7 +11480,9 @@
|
|
|
11452
11480
|
</xsl:template> <!-- sections_element_style -->
|
|
11453
11481
|
|
|
11454
11482
|
<xsl:template match="//*[contains(local-name(), '-standard')]/*[local-name() = 'preface']/*" priority="2"> <!-- /*/*[local-name() = 'preface']/* -->
|
|
11455
|
-
|
|
11483
|
+
|
|
11484
|
+
<fo:block break-after="page"/>
|
|
11485
|
+
|
|
11456
11486
|
<fo:block>
|
|
11457
11487
|
<xsl:call-template name="setId"/>
|
|
11458
11488
|
<xsl:apply-templates/>
|
|
@@ -11523,7 +11553,7 @@
|
|
|
11523
11553
|
<xsl:when test="ancestor::*[contains(local-name(), '-standard')] and not(ancestor::*[contains(local-name(), '-standard')]//*[@id = $id_from])">
|
|
11524
11554
|
<fo:block id="{@from}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:block>
|
|
11525
11555
|
</xsl:when>
|
|
11526
|
-
<xsl:when test="not(
|
|
11556
|
+
<xsl:when test="not(/*[@id = $id_from]) and not(/*//*[@id = $id_from]) and not(preceding-sibling::*[@id = $id_from])">
|
|
11527
11557
|
<fo:block id="{@from}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:block>
|
|
11528
11558
|
</xsl:when>
|
|
11529
11559
|
</xsl:choose>
|
|
@@ -9284,16 +9284,44 @@
|
|
|
9284
9284
|
</xsl:choose>
|
|
9285
9285
|
|
|
9286
9286
|
<xsl:attribute name="content-width">scale-down-to-fit</xsl:attribute>
|
|
9287
|
-
<xsl:variable name="
|
|
9288
|
-
<xsl:variable name="
|
|
9287
|
+
<xsl:variable name="svg_width_" select="xalan:nodeset($svg_content)/*/@width"/>
|
|
9288
|
+
<xsl:variable name="svg_width" select="number(translate($svg_width_, 'px', ''))"/>
|
|
9289
|
+
<xsl:variable name="svg_height_" select="xalan:nodeset($svg_content)/*/@height"/>
|
|
9290
|
+
<xsl:variable name="svg_height" select="number(translate($svg_height_, 'px', ''))"/>
|
|
9291
|
+
|
|
9292
|
+
<!-- Example: -->
|
|
9289
9293
|
<!-- effective height 297 - 27.4 - 13 = 256.6 -->
|
|
9290
9294
|
<!-- effective width 210 - 12.5 - 25 = 172.5 -->
|
|
9291
9295
|
<!-- effective height / width = 1.48, 1.4 - with title -->
|
|
9292
|
-
|
|
9296
|
+
|
|
9297
|
+
<xsl:variable name="scale_x">
|
|
9298
|
+
<xsl:choose>
|
|
9299
|
+
<xsl:when test="$svg_width > $width_effective_px">
|
|
9300
|
+
<xsl:value-of select="$width_effective_px div $svg_width"/>
|
|
9301
|
+
</xsl:when>
|
|
9302
|
+
<xsl:otherwise>1</xsl:otherwise>
|
|
9303
|
+
</xsl:choose>
|
|
9304
|
+
</xsl:variable>
|
|
9305
|
+
<xsl:variable name="scale_y">
|
|
9306
|
+
<xsl:choose>
|
|
9307
|
+
<xsl:when test="$svg_height * $scale_x > $height_effective_px">
|
|
9308
|
+
<xsl:value-of select="$height_effective_px div ($svg_height * $scale_x)"/>
|
|
9309
|
+
</xsl:when>
|
|
9310
|
+
<xsl:otherwise>1</xsl:otherwise>
|
|
9311
|
+
</xsl:choose>
|
|
9312
|
+
</xsl:variable>
|
|
9313
|
+
|
|
9314
|
+
<!-- for images with big height -->
|
|
9315
|
+
<!-- <xsl:if test="$svg_height > ($svg_width * 1.4)">
|
|
9293
9316
|
<xsl:variable name="width" select="(($svg_width * 1.4) div $svg_height) * 100"/>
|
|
9294
9317
|
<xsl:attribute name="width"><xsl:value-of select="$width"/>%</xsl:attribute>
|
|
9295
|
-
</xsl:if>
|
|
9318
|
+
</xsl:if> -->
|
|
9296
9319
|
<xsl:attribute name="scaling">uniform</xsl:attribute>
|
|
9320
|
+
|
|
9321
|
+
<xsl:if test="$scale_y != 1">
|
|
9322
|
+
<xsl:attribute name="content-height"><xsl:value-of select="round($scale_x * $scale_y * 100)"/>%</xsl:attribute>
|
|
9323
|
+
</xsl:if>
|
|
9324
|
+
|
|
9297
9325
|
<xsl:copy-of select="$svg_content"/>
|
|
9298
9326
|
</fo:instream-foreign-object>
|
|
9299
9327
|
<!-- </fo:block> -->
|
|
@@ -11452,7 +11480,9 @@
|
|
|
11452
11480
|
</xsl:template> <!-- sections_element_style -->
|
|
11453
11481
|
|
|
11454
11482
|
<xsl:template match="//*[contains(local-name(), '-standard')]/*[local-name() = 'preface']/*" priority="2"> <!-- /*/*[local-name() = 'preface']/* -->
|
|
11455
|
-
|
|
11483
|
+
|
|
11484
|
+
<fo:block break-after="page"/>
|
|
11485
|
+
|
|
11456
11486
|
<fo:block>
|
|
11457
11487
|
<xsl:call-template name="setId"/>
|
|
11458
11488
|
<xsl:apply-templates/>
|
|
@@ -11523,7 +11553,7 @@
|
|
|
11523
11553
|
<xsl:when test="ancestor::*[contains(local-name(), '-standard')] and not(ancestor::*[contains(local-name(), '-standard')]//*[@id = $id_from])">
|
|
11524
11554
|
<fo:block id="{@from}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:block>
|
|
11525
11555
|
</xsl:when>
|
|
11526
|
-
<xsl:when test="not(
|
|
11556
|
+
<xsl:when test="not(/*[@id = $id_from]) and not(/*//*[@id = $id_from]) and not(preceding-sibling::*[@id = $id_from])">
|
|
11527
11557
|
<fo:block id="{@from}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:block>
|
|
11528
11558
|
</xsl:when>
|
|
11529
11559
|
</xsl:choose>
|
data/lib/isodoc/itu/metadata.rb
CHANGED
|
@@ -31,6 +31,8 @@ module IsoDoc
|
|
|
31
31
|
series1: "//bibdata/series[@type='secondary']/title",
|
|
32
32
|
series2: "//bibdata/series[@type='tertiary']/title",
|
|
33
33
|
annextitle: "//bibdata/title[@type='annex']",
|
|
34
|
+
collectiontitle: "//bibdata/title[@type='collection']",
|
|
35
|
+
slogantitle: "//bibdata/title[@type='slogan']",
|
|
34
36
|
positiontitle: "//bibdata/title[@type='position-sp']" }.each do |k, v|
|
|
35
37
|
titleset(isoxml, k, v)
|
|
36
38
|
end
|
|
@@ -51,6 +53,8 @@ module IsoDoc
|
|
|
51
53
|
end
|
|
52
54
|
|
|
53
55
|
def author(xml, _out)
|
|
56
|
+
sector = xml.at(ns("//bibdata/ext/editorialgroup/sector"))
|
|
57
|
+
set(:sector, sector.text) if sector
|
|
54
58
|
bureau = xml.at(ns("//bibdata/ext/editorialgroup/bureau"))
|
|
55
59
|
set(:bureau, bureau.text) if bureau
|
|
56
60
|
tc = xml.at(ns("//bibdata/ext/editorialgroup/committee"))
|
|
@@ -24,29 +24,34 @@ module IsoDoc
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def multi_bibitem_ref_code(bib)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
id = bib.xpath(ns("./docidentifier#{prim}[not(#{skip} or #{skip1})]"))
|
|
31
|
-
id.empty? and id = bib.xpath(ns("./docidentifier#{prim}[not(#{skip1})]"))
|
|
32
|
-
id.empty? and id = bib.xpath(ns("./docidentifier[not(#{skip} or #{skip1})]"))
|
|
33
|
-
id.empty? and id = bib.xpath(ns("./docidentifier[not(#{skip1})]"))
|
|
34
|
-
id.empty? and return id
|
|
35
|
-
id.sort_by { |i| i["type"] == "ITU" ? 0 : 1 }
|
|
27
|
+
id = pref_ref_code_parse(bib)
|
|
28
|
+
id.nil? and return []
|
|
29
|
+
id.sort_by { |i| /^ITU/.match?(i) ? 0 : 1 }
|
|
36
30
|
end
|
|
37
31
|
|
|
38
|
-
def render_multi_identifiers(ids)
|
|
32
|
+
def render_multi_identifiers(ids, bib)
|
|
39
33
|
ids.map do |id|
|
|
40
|
-
if id
|
|
34
|
+
if /^ITU/.match?(id) then doctype_title(id, bib)
|
|
41
35
|
else
|
|
42
|
-
|
|
36
|
+
id.sub(/^\[/, "").sub(/\]$/, "")
|
|
43
37
|
end
|
|
44
38
|
end.join(" | ")
|
|
45
39
|
end
|
|
46
40
|
|
|
41
|
+
def doctype_title(id, bib)
|
|
42
|
+
type = bib.at(ns("./ext/doctype"))&.text || "recommendation"
|
|
43
|
+
if type == "recommendation" &&
|
|
44
|
+
/^(?<prefix>ITU-[A-Z][ ][A-Z])[ .-]Sup[a-z]*\.[ ]?(?<num>\d+)$/ =~ id
|
|
45
|
+
"#{prefix}-series Recommendations – Supplement #{num}"
|
|
46
|
+
else
|
|
47
|
+
d = id.sub(/^\[/, "").sub(/\]$/, "")
|
|
48
|
+
"#{titlecase(type)} #{d}"
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
47
52
|
def reference_format_start(bib)
|
|
48
53
|
id = multi_bibitem_ref_code(bib)
|
|
49
|
-
id1 = render_multi_identifiers(id)
|
|
54
|
+
id1 = render_multi_identifiers(id, bib)
|
|
50
55
|
out = id1
|
|
51
56
|
date = bib.at(ns("./date[@type = 'published']/on | " \
|
|
52
57
|
"./date[@type = 'published']/from")) and
|
|
@@ -87,17 +87,6 @@ module IsoDoc
|
|
|
87
87
|
str.gsub(/ |_|-/, " ").split(/ /).map(&:capitalize).join(" ")
|
|
88
88
|
end
|
|
89
89
|
|
|
90
|
-
def doctype_title(id)
|
|
91
|
-
type = id.parent&.at(ns("./ext/doctype"))&.text || "recommendation"
|
|
92
|
-
if type == "recommendation" &&
|
|
93
|
-
/^(?<prefix>ITU-[A-Z][ ][A-Z])[ .-]Sup[a-z]*\.[ ]?(?<num>\d+)$/ =~ id.text
|
|
94
|
-
"#{prefix}-series Recommendations – Supplement #{num}"
|
|
95
|
-
else
|
|
96
|
-
d = docid_prefix(id["type"], id.text.sub(/^\[/, "").sub(/\]$/, ""))
|
|
97
|
-
"#{titlecase(type)} #{d}"
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
90
|
def twitter_cldr_localiser_symbols
|
|
102
91
|
{ group: "'" }
|
|
103
92
|
end
|
|
@@ -1,21 +1,8 @@
|
|
|
1
|
+
require_relative "cleanup_section"
|
|
2
|
+
|
|
1
3
|
module Metanorma
|
|
2
4
|
module ITU
|
|
3
5
|
class Converter < Standoc::Converter
|
|
4
|
-
def sections_cleanup(xml)
|
|
5
|
-
super
|
|
6
|
-
insert_missing_sections(xml) unless @no_insert_missing_sections
|
|
7
|
-
insert_empty_clauses(xml)
|
|
8
|
-
resolution_inline_header(xml)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def resolution_inline_header(xml)
|
|
12
|
-
@doctype == "resolution" or return
|
|
13
|
-
xml.xpath("//clause//clause").each do |c|
|
|
14
|
-
(title = c.at("./title")) && !title.text&.empty? and next
|
|
15
|
-
c["inline-header"] = true
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
6
|
def table_cleanup(xmldoc)
|
|
20
7
|
super
|
|
21
8
|
xmldoc.xpath("//thead/tr[1]/th | //thead/tr[1]/td").each do |t|
|
|
@@ -31,84 +18,6 @@ module Metanorma
|
|
|
31
18
|
end
|
|
32
19
|
end
|
|
33
20
|
|
|
34
|
-
def insert_missing_sections(xml)
|
|
35
|
-
xml.at("//metanorma-extension/semantic-metadata/" \
|
|
36
|
-
"headless[text() = 'true']") and return nil
|
|
37
|
-
insert_scope(xml)
|
|
38
|
-
insert_norm_ref(xml)
|
|
39
|
-
insert_terms(xml)
|
|
40
|
-
insert_symbols(xml)
|
|
41
|
-
insert_conventions(xml)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def add_id
|
|
45
|
-
%(id="_#{UUIDTools::UUID.random_create}")
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def insert_scope(xml)
|
|
49
|
-
xml.at("./*/sections") or
|
|
50
|
-
xml.at("./*/preface | ./*/boilerplate | ./*/bibdata").next =
|
|
51
|
-
"<sections><sentinel/></sections>"
|
|
52
|
-
xml.at("./*/sections/*") or xml.at("./*/sections") << "<sentinel/>"
|
|
53
|
-
ins = xml.at("//sections").elements.first
|
|
54
|
-
xml.at("//sections/clause[@type = 'scope']") or
|
|
55
|
-
ins.previous =
|
|
56
|
-
"<clause type='scope' #{add_id}><title>#{@i18n.scope}</title><p>" \
|
|
57
|
-
"#{@i18n.clause_empty}</p></clause>"
|
|
58
|
-
xml.at("//sentinel")&.remove
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def insert_norm_ref(xml)
|
|
62
|
-
xml.at("//bibliography") or
|
|
63
|
-
xml.at("./*/annex[last()] | ./*/sections").next =
|
|
64
|
-
"<bibliography><sentinel/></bibliography>"
|
|
65
|
-
ins = xml.at("//bibliography").elements.first
|
|
66
|
-
xml.at("//bibliography/references[@normative = 'true']") or
|
|
67
|
-
ins.previous = "<references #{add_id} normative='true'>" \
|
|
68
|
-
"<title>#{@i18n.normref}</title></references>"
|
|
69
|
-
xml.at("//sentinel")&.remove
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def insert_terms(xml)
|
|
73
|
-
ins = xml.at("//sections/clause[@type = 'scope']")
|
|
74
|
-
xml.at("//sections//terms") or
|
|
75
|
-
ins.next = "<terms #{add_id}><title>#{@i18n.termsdef}</title></terms>"
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def insert_symbols(xml)
|
|
79
|
-
ins = xml.at("//sections/terms") ||
|
|
80
|
-
xml.at("//sections/clause[descendant::terms]")
|
|
81
|
-
unless xml.at("//sections//definitions")
|
|
82
|
-
ins.next = "<definitions #{add_id}>" \
|
|
83
|
-
"<title>#{@i18n.symbolsabbrev}</title></definitions>"
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def insert_conventions(xml)
|
|
88
|
-
ins = xml.at("//sections//definitions") ||
|
|
89
|
-
xml.at("//sections/clause[descendant::definitions]")
|
|
90
|
-
unless xml.at("//sections/clause[@type = 'conventions']")
|
|
91
|
-
ins.next = "<clause #{add_id} type='conventions'>" \
|
|
92
|
-
"<title>#{@i18n.conventions}</title><p>" \
|
|
93
|
-
"#{@i18n.clause_empty}</p></clause>"
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def insert_empty_clauses(xml)
|
|
98
|
-
xml.xpath("//terms[not(./term)][not(.//terms)]").each do |c|
|
|
99
|
-
insert_empty_clauses1(c, @i18n.clause_empty)
|
|
100
|
-
end
|
|
101
|
-
xml.xpath("//definitions[not(./dl)]").each do |c|
|
|
102
|
-
insert_empty_clauses1(c, @i18n.clause_empty)
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def insert_empty_clauses1(clause, text)
|
|
107
|
-
clause.at("./p") and return
|
|
108
|
-
ins = clause.at("./title") or return
|
|
109
|
-
ins.next = "<p>#{text}</p>"
|
|
110
|
-
end
|
|
111
|
-
|
|
112
21
|
def cleanup(xmldoc)
|
|
113
22
|
symbols_cleanup(xmldoc)
|
|
114
23
|
super
|
|
@@ -117,11 +26,9 @@ module Metanorma
|
|
|
117
26
|
end
|
|
118
27
|
|
|
119
28
|
def smartquotes_cleanup(xmldoc)
|
|
120
|
-
return super
|
|
121
|
-
|
|
29
|
+
@smartquotes and return super
|
|
122
30
|
xmldoc.traverse do |n|
|
|
123
|
-
|
|
124
|
-
|
|
31
|
+
n.text? or next
|
|
125
32
|
n.replace(HTMLEntities.new.encode(
|
|
126
33
|
n.text.gsub(/\u2019|\u2018|\u201a|\u201b/, "'")
|
|
127
34
|
.gsub(/\u201c|\u201d|\u201e|\u201f/, '"'), :basic
|
|
@@ -130,51 +37,6 @@ module Metanorma
|
|
|
130
37
|
xmldoc
|
|
131
38
|
end
|
|
132
39
|
|
|
133
|
-
def termdef_boilerplate_cleanup(xmldoc); end
|
|
134
|
-
|
|
135
|
-
def terms_extract(div)
|
|
136
|
-
internal = div.at("./terms[@type = 'internal']/title")
|
|
137
|
-
external = div.at("./terms[@type = 'external']/title")
|
|
138
|
-
[internal, external]
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
def term_defs_boilerplate(div, _source, _term, _preface, _isodoc)
|
|
142
|
-
internal, external = terms_extract(div.parent)
|
|
143
|
-
internal&.next_element&.name == "term" and
|
|
144
|
-
internal.next = "<p>#{@i18n.internal_terms_boilerplate}</p>"
|
|
145
|
-
internal and internal&.next_element == nil and
|
|
146
|
-
internal.next = "<p>#{@i18n.no_terms_boilerplate}</p>"
|
|
147
|
-
external&.next_element&.name == "term" and
|
|
148
|
-
external.next = "<p>#{@i18n.external_terms_boilerplate}</p>"
|
|
149
|
-
external and external&.next_element == nil and
|
|
150
|
-
external.next = "<p>#{@i18n.no_terms_boilerplate}</p>"
|
|
151
|
-
!internal and !external and
|
|
152
|
-
%w(term terms).include? div&.next_element&.name and
|
|
153
|
-
div.next = "<p>#{@i18n.term_def_boilerplate}</p>"
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
def section_names_terms_cleanup(xml)
|
|
157
|
-
super
|
|
158
|
-
replace_title(
|
|
159
|
-
xml, "//terms[@type = 'internal'] | " \
|
|
160
|
-
"//clause[./terms[@type = 'internal']]" \
|
|
161
|
-
"[not(./terms[@type = 'external'])]",
|
|
162
|
-
@i18n&.internal_termsdef
|
|
163
|
-
)
|
|
164
|
-
replace_title(
|
|
165
|
-
xml, "//terms[@type = 'external'] | " \
|
|
166
|
-
"//clause[./terms[@type = 'external']]" \
|
|
167
|
-
"[not(./terms[@type = 'internal'])]",
|
|
168
|
-
@i18n&.external_termsdef
|
|
169
|
-
)
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
def symbols_cleanup(xmldoc)
|
|
173
|
-
sym = xmldoc.at("//definitions/title")
|
|
174
|
-
sym and sym&.next_element&.name == "dl" and
|
|
175
|
-
sym.next = "<p>#{@i18n.symbols_boilerplate}</p>"
|
|
176
|
-
end
|
|
177
|
-
|
|
178
40
|
PUBLISHER = "./contributor[role/@type = 'publisher']/organization".freeze
|
|
179
41
|
|
|
180
42
|
def pub_class(bib)
|
|
@@ -221,11 +83,20 @@ module Metanorma
|
|
|
221
83
|
end
|
|
222
84
|
end
|
|
223
85
|
|
|
224
|
-
def
|
|
86
|
+
def bibdata_cleanup(xmldoc)
|
|
225
87
|
super
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
88
|
+
coverpage_images(xmldoc)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def coverpage_images(xmldoc)
|
|
92
|
+
%w(coverpage-image).each do |n|
|
|
93
|
+
xmldoc.xpath("//bibdata/ext/#{n}").each do |x|
|
|
94
|
+
ins = add_misc_container(xmldoc)
|
|
95
|
+
ins << "<presentation-metadata><name>#{n}</name>" \
|
|
96
|
+
"<value>#{x.remove.children.to_xml}</value>" \
|
|
97
|
+
"</presentation-metadata>"
|
|
98
|
+
end
|
|
99
|
+
end
|
|
229
100
|
end
|
|
230
101
|
end
|
|
231
102
|
end
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
module Metanorma
|
|
2
|
+
module ITU
|
|
3
|
+
class Converter < Standoc::Converter
|
|
4
|
+
def sections_cleanup(xml)
|
|
5
|
+
super
|
|
6
|
+
insert_missing_sections(xml) unless @no_insert_missing_sections
|
|
7
|
+
insert_empty_clauses(xml)
|
|
8
|
+
resolution_inline_header(xml)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def resolution_inline_header(xml)
|
|
12
|
+
@doctype == "resolution" or return
|
|
13
|
+
xml.xpath("//clause//clause").each do |c|
|
|
14
|
+
(title = c.at("./title")) && !title.text&.empty? and next
|
|
15
|
+
c["inline-header"] = true
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def insert_missing_sections(xml)
|
|
20
|
+
xml.at("//metanorma-extension/semantic-metadata/" \
|
|
21
|
+
"headless[text() = 'true']") and return nil
|
|
22
|
+
insert_scope(xml)
|
|
23
|
+
insert_norm_ref(xml)
|
|
24
|
+
insert_terms(xml)
|
|
25
|
+
insert_symbols(xml)
|
|
26
|
+
insert_conventions(xml)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def add_id
|
|
30
|
+
%(id="_#{UUIDTools::UUID.random_create}")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def insert_scope(xml)
|
|
34
|
+
xml.at("./*/sections") or
|
|
35
|
+
xml.at("./*/preface | ./*/boilerplate | ./*/bibdata").next =
|
|
36
|
+
"<sections><sentinel/></sections>"
|
|
37
|
+
xml.at("./*/sections/*") or xml.at("./*/sections") << "<sentinel/>"
|
|
38
|
+
ins = xml.at("//sections").elements.first
|
|
39
|
+
xml.at("//sections/clause[@type = 'scope']") or
|
|
40
|
+
ins.previous =
|
|
41
|
+
"<clause type='scope' #{add_id}><title>#{@i18n.scope}</title><p>" \
|
|
42
|
+
"#{@i18n.clause_empty}</p></clause>"
|
|
43
|
+
xml.at("//sentinel")&.remove
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def insert_norm_ref(xml)
|
|
47
|
+
xml.at("//bibliography") or
|
|
48
|
+
xml.at("./*/annex[last()] | ./*/sections").next =
|
|
49
|
+
"<bibliography><sentinel/></bibliography>"
|
|
50
|
+
ins = xml.at("//bibliography").elements.first
|
|
51
|
+
xml.at("//bibliography/references[@normative = 'true']") or
|
|
52
|
+
ins.previous = "<references #{add_id} normative='true'>" \
|
|
53
|
+
"<title>#{@i18n.normref}</title></references>"
|
|
54
|
+
xml.at("//sentinel")&.remove
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def insert_terms(xml)
|
|
58
|
+
ins = xml.at("//sections/clause[@type = 'scope']")
|
|
59
|
+
xml.at("//sections//terms") or
|
|
60
|
+
ins.next = "<terms #{add_id}><title>#{@i18n.termsdef}</title></terms>"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def insert_symbols(xml)
|
|
64
|
+
ins = xml.at("//sections/terms") ||
|
|
65
|
+
xml.at("//sections/clause[descendant::terms]")
|
|
66
|
+
unless xml.at("//sections//definitions")
|
|
67
|
+
ins.next = "<definitions #{add_id}>" \
|
|
68
|
+
"<title>#{@i18n.symbolsabbrev}</title></definitions>"
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def insert_conventions(xml)
|
|
73
|
+
ins = xml.at("//sections//definitions") ||
|
|
74
|
+
xml.at("//sections/clause[descendant::definitions]")
|
|
75
|
+
unless xml.at("//sections/clause[@type = 'conventions']")
|
|
76
|
+
ins.next = "<clause #{add_id} type='conventions'>" \
|
|
77
|
+
"<title>#{@i18n.conventions}</title><p>" \
|
|
78
|
+
"#{@i18n.clause_empty}</p></clause>"
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def insert_empty_clauses(xml)
|
|
83
|
+
xml.xpath("//terms[not(./term)][not(.//terms)]").each do |c|
|
|
84
|
+
insert_empty_clauses1(c, @i18n.clause_empty)
|
|
85
|
+
end
|
|
86
|
+
xml.xpath("//definitions[not(./dl)]").each do |c|
|
|
87
|
+
insert_empty_clauses1(c, @i18n.clause_empty)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def insert_empty_clauses1(clause, text)
|
|
92
|
+
clause.at("./p") and return
|
|
93
|
+
ins = clause.at("./title") or return
|
|
94
|
+
ins.next = "<p>#{text}</p>"
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def termdef_boilerplate_cleanup(xmldoc); end
|
|
98
|
+
|
|
99
|
+
def terms_extract(div)
|
|
100
|
+
internal = div.at("./terms[@type = 'internal']/title")
|
|
101
|
+
external = div.at("./terms[@type = 'external']/title")
|
|
102
|
+
[internal, external]
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def term_defs_boilerplate(div, _source, _term, _preface, _isodoc)
|
|
106
|
+
internal, external = terms_extract(div.parent)
|
|
107
|
+
internal&.next_element&.name == "term" and
|
|
108
|
+
internal.next = "<p>#{@i18n.internal_terms_boilerplate}</p>"
|
|
109
|
+
internal and internal&.next_element == nil and
|
|
110
|
+
internal.next = "<p>#{@i18n.no_terms_boilerplate}</p>"
|
|
111
|
+
external&.next_element&.name == "term" and
|
|
112
|
+
external.next = "<p>#{@i18n.external_terms_boilerplate}</p>"
|
|
113
|
+
external and external&.next_element == nil and
|
|
114
|
+
external.next = "<p>#{@i18n.no_terms_boilerplate}</p>"
|
|
115
|
+
!internal and !external and
|
|
116
|
+
%w(term terms).include? div&.next_element&.name and
|
|
117
|
+
div.next = "<p>#{@i18n.term_def_boilerplate}</p>"
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def section_names_terms_cleanup(xml)
|
|
121
|
+
super
|
|
122
|
+
replace_title(
|
|
123
|
+
xml, "//terms[@type = 'internal'] | " \
|
|
124
|
+
"//clause[./terms[@type = 'internal']]" \
|
|
125
|
+
"[not(./terms[@type = 'external'])]",
|
|
126
|
+
@i18n&.internal_termsdef
|
|
127
|
+
)
|
|
128
|
+
replace_title(
|
|
129
|
+
xml, "//terms[@type = 'external'] | " \
|
|
130
|
+
"//clause[./terms[@type = 'external']]" \
|
|
131
|
+
"[not(./terms[@type = 'internal'])]",
|
|
132
|
+
@i18n&.external_termsdef
|
|
133
|
+
)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def symbols_cleanup(xmldoc)
|
|
137
|
+
sym = xmldoc.at("//definitions/title")
|
|
138
|
+
sym and sym&.next_element&.name == "dl" and
|
|
139
|
+
sym.next = "<p>#{@i18n.symbols_boilerplate}</p>"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def sections_names_cleanup(xml)
|
|
143
|
+
super
|
|
144
|
+
t = xml.at("//preface//abstract") or return
|
|
145
|
+
t["id"] == "_summary" and
|
|
146
|
+
replace_title(xml, "//preface//abstract", @i18n&.summary)
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|