isodoc 0.7.0 → 0.7.1
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/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
|