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 @@ def header_rows_cleanup(xmldoc)
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 @@ def cleanup(xmldoc)
117
26
end
118
27
119
28
def smartquotes_cleanup ( xmldoc )
120
- return super if @smartquotes
121
-
29
+ @smartquotes and return super
122
30
xmldoc . traverse do |n |
123
- next unless n . text?
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 @@ def smartquotes_cleanup(xmldoc)
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 @@ def biblio_reorder(xmldoc)
221
83
end
222
84
end
223
85
224
- def sections_names_cleanup ( xml )
86
+ def bibdata_cleanup ( xmldoc )
225
87
super
226
- t = xml . at ( "//preface//abstract" ) or return
227
- t [ "id" ] == "_summary" and
228
- replace_title ( xml , "//preface//abstract" , @i18n &.summary )
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 commit comments