isodoc 0.7.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -5
- data/README.adoc +34 -22
- data/isodoc.gemspec +1 -1
- data/lib/isodoc.rb +3 -1
- data/lib/isodoc/blocks.rb +1 -1
- data/lib/isodoc/cleanup.rb +1 -1
- data/lib/isodoc/convert.rb +9 -8
- data/lib/isodoc/{comments.rb → htmlconvert/comments.rb} +1 -1
- data/lib/isodoc/htmlconvert/convert.rb +13 -0
- data/lib/isodoc/{footnotes.rb → htmlconvert/footnotes.rb} +1 -1
- data/lib/isodoc/{html.rb → htmlconvert/html.rb} +29 -4
- data/lib/isodoc/i18n-en.yaml +5 -5
- data/lib/isodoc/i18n.rb +6 -2
- data/lib/isodoc/inline.rb +8 -8
- data/lib/isodoc/iso/convert.rb +4 -0
- data/lib/isodoc/iso/html/style-human.scss +3 -3
- data/lib/isodoc/iso/html/style-iso.scss +2 -2
- data/lib/isodoc/iso/html/wordstyle.scss +27 -0
- data/lib/isodoc/iso/wordconvert.rb +5 -2
- data/lib/isodoc/iso2wordhtml.rb +15 -16
- data/lib/isodoc/lists.rb +1 -1
- data/lib/isodoc/metadata.rb +66 -49
- data/lib/isodoc/references.rb +21 -11
- data/lib/isodoc/section.rb +3 -3
- data/lib/isodoc/table.rb +1 -1
- data/lib/isodoc/terms.rb +1 -1
- data/lib/isodoc/utils.rb +20 -21
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/wordconvert/comments.rb +122 -117
- data/lib/isodoc/wordconvert/convert.rb +5 -2
- data/lib/isodoc/wordconvert/footnotes.rb +14 -1
- data/lib/isodoc/wordconvert/postprocess.rb +7 -2
- data/lib/isodoc/wordconvert/wordconvertmodule.rb +12 -1
- data/lib/isodoc/xref_gen.rb +12 -2
- data/lib/isodoc/xref_sect_gen.rb +5 -4
- data/spec/isodoc/blocks_spec.rb +1 -1
- data/spec/isodoc/footnotes_spec.rb +3 -3
- data/spec/isodoc/i18n_spec.rb +10 -10
- data/spec/isodoc/inline_spec.rb +2 -2
- data/spec/isodoc/iso_spec.rb +79 -0
- data/spec/isodoc/metadata_spec.rb +12 -4
- data/spec/isodoc/postproc_spec.rb +7 -7
- data/spec/isodoc/ref_spec.rb +7 -19
- data/spec/isodoc/section_spec.rb +19 -84
- data/spec/isodoc/terms_spec.rb +1 -1
- data/spec/isodoc/xref_spec.rb +14 -14
- data/spec/spec_helper.rb +3 -3
- metadata +9 -8
@@ -128,7 +128,7 @@ main {
|
|
128
128
|
padding-right: 2em;
|
129
129
|
}
|
130
130
|
|
131
|
-
.
|
131
|
+
.title-section, .prefatory-section {
|
132
132
|
padding-left: 4em;
|
133
133
|
padding-top: 2em;
|
134
134
|
}
|
@@ -353,7 +353,7 @@ p.Terms {
|
|
353
353
|
padding: 0;
|
354
354
|
}
|
355
355
|
|
356
|
-
.
|
356
|
+
.title-section, .prefatory-section {
|
357
357
|
padding-left: 0;
|
358
358
|
padding-top: 0;
|
359
359
|
width: 100%;
|
@@ -794,6 +794,33 @@ p.Tablebody, li.Tablebody, div.Tablebody
|
|
794
794
|
mso-paper-source:0;}
|
795
795
|
div.WordSection1
|
796
796
|
{page:WordSection1;}
|
797
|
+
@page WordSection2
|
798
|
+
{size:595.3pt 841.9pt;
|
799
|
+
margin:39.7pt 53.85pt 1.0cm 53.85pt;
|
800
|
+
mso-header-margin:35.45pt;
|
801
|
+
mso-footer-margin:14.2pt;
|
802
|
+
mso-page-numbers:roman-lower;
|
803
|
+
mso-even-header:url("file:///C:/Doc/FILENAME_files/header.html") eh2;
|
804
|
+
mso-header:url("file:///C:/Doc/FILENAME_files/header.html") h2;
|
805
|
+
mso-even-footer:url("file:///C:/Doc/FILENAME_files/header.html") ef2;
|
806
|
+
mso-footer:url("file:///C:/Doc/FILENAME_files/header.html") f2;
|
807
|
+
mso-paper-source:0;}
|
808
|
+
div.WordSection2
|
809
|
+
{page:WordSection2;}
|
810
|
+
@page WordSection3
|
811
|
+
{size:595.3pt 841.9pt;
|
812
|
+
margin:39.7pt 53.85pt 1.0cm 53.85pt;
|
813
|
+
mso-header-margin:35.45pt;
|
814
|
+
mso-footer-margin:14.2pt;
|
815
|
+
mso-page-numbers:1;
|
816
|
+
mso-even-header:url("file:///C:/Doc/FILENAME_files/header.html") eh2;
|
817
|
+
mso-header:url("file:///C:/Doc/FILENAME_files/header.html") h2;
|
818
|
+
mso-even-footer:url("file:///C:/Doc/FILENAME_files/header.html") ef3;
|
819
|
+
mso-footer:url("file:///C:/Doc/FILENAME_files/header.html") f3;
|
820
|
+
mso-paper-source:0;}
|
821
|
+
div.WordSection3
|
822
|
+
{page:WordSection3;}
|
823
|
+
|
797
824
|
/* List Definitions */
|
798
825
|
@list l0
|
799
826
|
{mso-list-id:145051656;
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module IsoDoc
|
2
2
|
module Iso
|
3
|
-
class WordConvert < IsoDoc::
|
4
|
-
include IsoDoc::WordConvertModule
|
3
|
+
class WordConvert < IsoDoc::WordConvert
|
5
4
|
|
6
5
|
def default_fonts(options)
|
7
6
|
b = options[:bodyfont] ||
|
@@ -29,6 +28,10 @@ module IsoDoc
|
|
29
28
|
@olstyle = "l2"
|
30
29
|
end
|
31
30
|
|
31
|
+
def implicit_reference(b)
|
32
|
+
isocode = b.at(ns("./docidentifier")).text
|
33
|
+
isocode == "IEV"
|
34
|
+
end
|
32
35
|
end
|
33
36
|
end
|
34
37
|
end
|
data/lib/isodoc/iso2wordhtml.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require "pp"
|
2
2
|
|
3
3
|
module IsoDoc
|
4
|
-
class
|
4
|
+
class Common
|
5
5
|
def set_termdomain(termdomain)
|
6
6
|
@termdomain = termdomain
|
7
7
|
end
|
@@ -49,14 +49,14 @@ module IsoDoc
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def make_body1(body, _docxml)
|
52
|
-
body.div **{ class: "
|
52
|
+
body.div **{ class: "title-section" } do |div1|
|
53
53
|
div1.p { |p| p << " " } # placeholder
|
54
54
|
end
|
55
55
|
section_break(body)
|
56
56
|
end
|
57
57
|
|
58
58
|
def make_body2(body, docxml)
|
59
|
-
body.div **{ class: "
|
59
|
+
body.div **{ class: "prefatory-section" } do |div2|
|
60
60
|
info docxml, div2
|
61
61
|
div2.p { |p| p << " " } # placeholder
|
62
62
|
end
|
@@ -64,7 +64,7 @@ module IsoDoc
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def make_body3(body, docxml)
|
67
|
-
body.div **{ class: "
|
67
|
+
body.div **{ class: "main-section" } do |div3|
|
68
68
|
foreword docxml, div3
|
69
69
|
introduction docxml, div3
|
70
70
|
middle docxml, div3
|
@@ -74,21 +74,20 @@ module IsoDoc
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def info(isoxml, out)
|
77
|
-
title isoxml, out
|
78
|
-
subtitle isoxml, out
|
79
|
-
docstatus isoxml, out
|
80
|
-
docid isoxml, out
|
81
|
-
doctype isoxml, out
|
82
|
-
author isoxml, out
|
83
|
-
bibdate isoxml, out
|
84
|
-
relations isoxml, out
|
85
|
-
version isoxml, out
|
86
|
-
|
77
|
+
@meta.title isoxml, out
|
78
|
+
@meta.subtitle isoxml, out
|
79
|
+
@meta.docstatus isoxml, out
|
80
|
+
@meta.docid isoxml, out
|
81
|
+
@meta.doctype isoxml, out
|
82
|
+
@meta.author isoxml, out
|
83
|
+
@meta.bibdate isoxml, out
|
84
|
+
@meta.relations isoxml, out
|
85
|
+
@meta.version isoxml, out
|
86
|
+
@meta.get
|
87
87
|
end
|
88
88
|
|
89
89
|
def middle_title(out)
|
90
|
-
|
91
|
-
out.p **{ class: "zzSTDTitle1" } { |p| p << m[:doctitle] }
|
90
|
+
out.p(**{ class: "zzSTDTitle1" }) { |p| p << @meta.get[:doctitle] }
|
92
91
|
end
|
93
92
|
|
94
93
|
def middle(isoxml, out)
|
data/lib/isodoc/lists.rb
CHANGED
data/lib/isodoc/metadata.rb
CHANGED
@@ -1,25 +1,33 @@
|
|
1
1
|
require "htmlentities"
|
2
2
|
|
3
3
|
module IsoDoc
|
4
|
-
class
|
4
|
+
class Metadata
|
5
5
|
DATETYPES = %w{published accessed created implemented obsoleted confirmed
|
6
6
|
updated issued}.freeze
|
7
7
|
|
8
|
-
def
|
9
|
-
|
10
|
-
editorialgroup: [],
|
11
|
-
secretariat: "XXXX",
|
12
|
-
obsoletes: nil,
|
13
|
-
obsoletes_part: nil }
|
14
|
-
DATETYPES.each { |w| @meta["#{w}date".to_sym] = "XXX" }
|
8
|
+
def ns(xpath)
|
9
|
+
Common::ns(xpath)
|
15
10
|
end
|
16
11
|
|
17
|
-
def
|
18
|
-
@
|
12
|
+
def initialize(lang, script, labels)
|
13
|
+
@metadata = { tc: "XXXX", sc: "XXXX", wg: "XXXX",
|
14
|
+
editorialgroup: [],
|
15
|
+
secretariat: "XXXX",
|
16
|
+
obsoletes: nil,
|
17
|
+
obsoletes_part: nil }
|
18
|
+
DATETYPES.each { |w| @metadata["#{w}date".to_sym] = "XXX" }
|
19
|
+
@lang = lang
|
20
|
+
@script = script
|
21
|
+
@c = HTMLEntities.new
|
22
|
+
@labels = labels
|
19
23
|
end
|
20
24
|
|
21
|
-
def
|
22
|
-
@
|
25
|
+
def get
|
26
|
+
@metadata
|
27
|
+
end
|
28
|
+
|
29
|
+
def set(key, value)
|
30
|
+
@metadata[key] = value
|
23
31
|
end
|
24
32
|
|
25
33
|
def author(xml, _out)
|
@@ -36,8 +44,8 @@ module IsoDoc
|
|
36
44
|
text || "TC"
|
37
45
|
if tc_num
|
38
46
|
tcid = "#{tc_type} #{tc_num.text}"
|
39
|
-
|
40
|
-
|
47
|
+
set(:tc, tcid)
|
48
|
+
set(:editorialgroup, get[:editorialgroup] << tcid)
|
41
49
|
end
|
42
50
|
end
|
43
51
|
|
@@ -46,8 +54,8 @@ module IsoDoc
|
|
46
54
|
sc_type = xml.at(ns("//editorialgroup/subcommittee/@type"))&.text || "SC"
|
47
55
|
if sc_num
|
48
56
|
scid = "#{sc_type} #{sc_num.text}"
|
49
|
-
|
50
|
-
|
57
|
+
set(:sc, scid)
|
58
|
+
set(:editorialgroup, get[:editorialgroup] << scid)
|
51
59
|
end
|
52
60
|
end
|
53
61
|
|
@@ -56,29 +64,19 @@ module IsoDoc
|
|
56
64
|
wg_type = xml.at(ns("//editorialgroup/workgroup/@type"))&.text || "WG"
|
57
65
|
if wg_num
|
58
66
|
wgid = "#{wg_type} #{wg_num.text}"
|
59
|
-
|
60
|
-
|
67
|
+
set(:wg, wgid)
|
68
|
+
set(:editorialgroup, get[:editorialgroup] << wgid)
|
61
69
|
end
|
62
70
|
end
|
63
71
|
|
64
72
|
def secretariat(xml)
|
65
73
|
sec = xml.at(ns("//editorialgroup/secretariat"))
|
66
|
-
|
67
|
-
end
|
68
|
-
|
69
|
-
def date_range(date)
|
70
|
-
from = date.at(ns("./from"))
|
71
|
-
to = date.at(ns("./to"))
|
72
|
-
on = date.at(ns("./on"))
|
73
|
-
return on.text if on
|
74
|
-
ret = "#{from.text}–"
|
75
|
-
ret += to.text if to
|
76
|
-
ret
|
74
|
+
set(:secretariat, sec.text) if sec
|
77
75
|
end
|
78
76
|
|
79
77
|
def bibdate(isoxml, _out)
|
80
78
|
isoxml.xpath(ns("//bibdata/date")).each do |d|
|
81
|
-
|
79
|
+
set("#{d['type']}date".to_sym, Common::date_range(d))
|
82
80
|
end
|
83
81
|
end
|
84
82
|
|
@@ -86,7 +84,7 @@ module IsoDoc
|
|
86
84
|
b = isoxml.at(ns("//bibdata")) || return
|
87
85
|
return unless b["type"]
|
88
86
|
t = b["type"].split(/-/).map{ |w| w.capitalize }.join(" ")
|
89
|
-
|
87
|
+
set(:doctype, t)
|
90
88
|
end
|
91
89
|
|
92
90
|
def iso?(org)
|
@@ -105,7 +103,7 @@ module IsoDoc
|
|
105
103
|
agency1 = abbrev || name
|
106
104
|
agency = iso?(org) ? "ISO/#{agency}" : "#{agency}#{agency1}/"
|
107
105
|
end
|
108
|
-
|
106
|
+
set(:agency, agency.sub(%r{/$}, ""))
|
109
107
|
end
|
110
108
|
|
111
109
|
def docnumber(isoxml)
|
@@ -118,43 +116,62 @@ module IsoDoc
|
|
118
116
|
dn
|
119
117
|
end
|
120
118
|
|
119
|
+
STAGE_ABBRS = {
|
120
|
+
"00": "PWI",
|
121
|
+
"10": "NWIP",
|
122
|
+
"20": "WD",
|
123
|
+
"30": "CD",
|
124
|
+
"40": "DIS",
|
125
|
+
"50": "FDIS",
|
126
|
+
"60": "IS",
|
127
|
+
"90": "(Review)",
|
128
|
+
"95": "(Withdrawal)",
|
129
|
+
}.freeze
|
130
|
+
|
131
|
+
def stage_abbrev(stage, iter, draft)
|
132
|
+
stage = STAGE_ABBRS[stage.to_sym] || "??"
|
133
|
+
stage += iter.text if iter
|
134
|
+
stage = "Pre" + stage if draft&.text =~ /^0\./
|
135
|
+
stage
|
136
|
+
end
|
137
|
+
|
121
138
|
def docstatus(isoxml, _out)
|
122
139
|
docstatus = isoxml.at(ns("//status/stage"))
|
123
140
|
if docstatus
|
124
|
-
|
141
|
+
set(:stage, docstatus.text)
|
125
142
|
abbr = stage_abbrev(docstatus.text, isoxml.at(ns("//status/iteration")),
|
126
143
|
isoxml.at(ns("//version/draft")))
|
127
|
-
|
144
|
+
set(:stageabbr, abbr)
|
128
145
|
end
|
129
146
|
end
|
130
147
|
|
131
148
|
def docid(isoxml, _out)
|
132
149
|
dn = docnumber(isoxml)
|
133
|
-
docstatus =
|
150
|
+
docstatus = get[:stage]
|
134
151
|
if docstatus
|
135
|
-
abbr =
|
136
|
-
docstatus =
|
152
|
+
abbr = get[:stageabbr]
|
153
|
+
docstatus = get[:stage]
|
137
154
|
(docstatus.to_i < 60) && dn = abbr + " " + dn
|
138
155
|
end
|
139
|
-
|
156
|
+
set(:docnumber, dn)
|
140
157
|
end
|
141
158
|
|
142
159
|
def draftinfo(draft, revdate)
|
143
160
|
draftinfo = ""
|
144
161
|
if draft
|
145
|
-
draftinfo = " (#{@
|
162
|
+
draftinfo = " (#{@labels["draft"]} #{draft}"
|
146
163
|
draftinfo += ", #{revdate}" if revdate
|
147
164
|
draftinfo += ")"
|
148
165
|
end
|
149
|
-
l10n(draftinfo)
|
166
|
+
Common::l10n(draftinfo, @lang, @script)
|
150
167
|
end
|
151
168
|
|
152
169
|
def version(isoxml, _out)
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
170
|
+
set(:docyear, isoxml&.at(ns("//copyright/from"))&.text)
|
171
|
+
set(:draft, isoxml&.at(ns("//version/draft"))&.text)
|
172
|
+
set(:revdate, isoxml&.at(ns("//version/revision-date"))&.text)
|
173
|
+
set(:draftinfo,
|
174
|
+
draftinfo(get[:draft], get[:revdate]))
|
158
175
|
end
|
159
176
|
|
160
177
|
# we don't leave this to i18n.rb, because we have both English and
|
@@ -186,7 +203,7 @@ module IsoDoc
|
|
186
203
|
partnumber = isoxml.at(ns("//project-number/@part"))
|
187
204
|
subpartnumber = isoxml.at(ns("//project-number/@subpart"))
|
188
205
|
main = compose_title(main, intro, part, partnumber, subpartnumber, "en")
|
189
|
-
|
206
|
+
set(:doctitle, main)
|
190
207
|
end
|
191
208
|
|
192
209
|
def subtitle(isoxml, _out)
|
@@ -196,15 +213,15 @@ module IsoDoc
|
|
196
213
|
partnumber = isoxml.at(ns("//project-number/@part"))
|
197
214
|
subpartnumber = isoxml.at(ns("//project-number/@subpart"))
|
198
215
|
main = compose_title(main, intro, part, partnumber, subpartnumber, "fr")
|
199
|
-
|
216
|
+
set(:docsubtitle, main)
|
200
217
|
end
|
201
218
|
|
202
219
|
def relations(isoxml, _out)
|
203
220
|
std = isoxml.at(ns("//bibdata/relation[@type = 'obsoletes']")) || return
|
204
221
|
locality = std.at(ns(".//locality"))
|
205
222
|
id = std.at(ns(".//docidentifier"))
|
206
|
-
|
207
|
-
|
223
|
+
set(:obsoletes, id.text) if id
|
224
|
+
set(:obsoletes_part, locality.text) if locality
|
208
225
|
end
|
209
226
|
end
|
210
227
|
end
|
data/lib/isodoc/references.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module IsoDoc
|
2
|
-
class
|
2
|
+
class Common
|
3
3
|
def docid_l10n(x)
|
4
4
|
return x if x.nil?
|
5
5
|
x.gsub(/All Parts/, @all_parts_lbl)
|
@@ -8,8 +8,10 @@ module IsoDoc
|
|
8
8
|
def iso_bibitem_ref_code(b)
|
9
9
|
isocode = b.at(ns("./docidentifier")).text
|
10
10
|
isodate = b.at(ns("./date[@type = 'published']"))
|
11
|
+
iso_allparts = b.at(ns("./allParts"))
|
11
12
|
reference = docid_l10n(isocode)
|
12
13
|
reference += ": #{date_range(isodate)}" if isodate
|
14
|
+
reference += " (all parts)" if iso_allparts&.text == "true"
|
13
15
|
reference
|
14
16
|
end
|
15
17
|
|
@@ -31,12 +33,21 @@ module IsoDoc
|
|
31
33
|
title.text
|
32
34
|
end
|
33
35
|
|
36
|
+
# reference not to be rendered because it is deemed implicit
|
37
|
+
# in the standards environment
|
38
|
+
def implicit_reference(b)
|
39
|
+
false
|
40
|
+
end
|
41
|
+
|
42
|
+
def prefix_bracketed_ref(ref, text)
|
43
|
+
ref << "[#{text}]"
|
44
|
+
insert_tab(ref, 1)
|
45
|
+
end
|
46
|
+
|
34
47
|
def iso_bibitem_entry(list, b, ordinal, biblio)
|
48
|
+
return if implicit_reference(b)
|
35
49
|
list.p **attr_code(iso_bibitem_entry_attrs(b, biblio)) do |ref|
|
36
|
-
if biblio
|
37
|
-
ref << "[#{ordinal}]"
|
38
|
-
insert_tab(ref, 1)
|
39
|
-
end
|
50
|
+
prefix_bracketed_ref(ref, ordinal) if biblio
|
40
51
|
ref << iso_bibitem_ref_code(b)
|
41
52
|
date_note_process(b, ref)
|
42
53
|
ref << ", "
|
@@ -46,12 +57,10 @@ module IsoDoc
|
|
46
57
|
|
47
58
|
def ref_entry_code(r, ordinal, t)
|
48
59
|
if /^\d+$/.match?(t)
|
49
|
-
r
|
50
|
-
insert_tab(r, 1)
|
60
|
+
prefix_bracketed_ref(r, t)
|
51
61
|
else
|
52
|
-
r
|
53
|
-
|
54
|
-
r << "#{t},"
|
62
|
+
prefix_bracketed_ref(r, ordinal)
|
63
|
+
r << "#{t}, "
|
55
64
|
end
|
56
65
|
end
|
57
66
|
|
@@ -115,7 +124,8 @@ module IsoDoc
|
|
115
124
|
end
|
116
125
|
|
117
126
|
def norm_ref(isoxml, out, num)
|
118
|
-
q = "//bibliography/references[title = 'Normative References'
|
127
|
+
q = "//bibliography/references[title = 'Normative References' or "\
|
128
|
+
"title = 'Normative references']"
|
119
129
|
f = isoxml.at(ns(q)) or return num
|
120
130
|
out.div do |div|
|
121
131
|
num = num + 1
|
data/lib/isodoc/section.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module IsoDoc
|
2
|
-
class
|
2
|
+
class Common
|
3
3
|
def inline_header_title(out, node, c1)
|
4
4
|
out.span **{ class: "zzMoveToFollowing" } do |s|
|
5
5
|
s.b do |b|
|
@@ -166,7 +166,7 @@ module IsoDoc
|
|
166
166
|
# subclause
|
167
167
|
def symbols_parse(isoxml, out)
|
168
168
|
isoxml.children.first.previous =
|
169
|
-
"<title
|
169
|
+
"<title>#{@symbols_lbl}</title>"
|
170
170
|
clause_parse(isoxml, out)
|
171
171
|
end
|
172
172
|
|
@@ -192,7 +192,7 @@ module IsoDoc
|
|
192
192
|
f = isoxml.at(ns("//foreword")) || return
|
193
193
|
page_break(out)
|
194
194
|
out.div **attr_code(id: f["id"]) do |s|
|
195
|
-
s.h1
|
195
|
+
s.h1(**{ class: "ForewordTitle" }) { |h1| h1 << @foreword_lbl }
|
196
196
|
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
197
197
|
end
|
198
198
|
end
|