metanorma-un 0.3.6 → 0.3.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/macos.yml +0 -7
- data/.github/workflows/ubuntu.yml +2 -9
- data/.github/workflows/windows.yml +0 -8
- data/lib/asciidoctor/un/biblio.rng +53 -26
- data/lib/asciidoctor/un/converter.rb +3 -2
- data/lib/asciidoctor/un/isodoc.rng +28 -1
- data/lib/asciidoctor/un/un.rng +1 -0
- data/lib/isodoc/un/html/scripts.html +4 -20
- data/lib/isodoc/un/html/word_unece_plenary_titlepage.html +113 -65
- data/lib/isodoc/un/pdf_convert.rb +13 -115
- data/lib/isodoc/un/un.plenary.xsl +3520 -0
- data/lib/isodoc/un/un.recommendation.xsl +12962 -0
- data/lib/isodoc/un/word_convert.rb +1 -0
- data/lib/metanorma/un/processor.rb +4 -0
- data/lib/metanorma/un/version.rb +1 -1
- metadata +4 -2
@@ -7,128 +7,26 @@ module IsoDoc
|
|
7
7
|
# A {Converter} implementation that generates HTML output, and a document
|
8
8
|
# schema encapsulation of the document for validation
|
9
9
|
#
|
10
|
-
class PdfConvert < IsoDoc::
|
10
|
+
class PdfConvert < IsoDoc::XslfoPdfConvert
|
11
11
|
def initialize(options)
|
12
12
|
@libdir = File.dirname(__FILE__)
|
13
13
|
super
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
bodyfont: (
|
25
|
-
options[:script] == "Hans" ?
|
26
|
-
'"SimSun",serif' :
|
27
|
-
'"Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif'
|
28
|
-
),
|
29
|
-
headerfont: (
|
30
|
-
options[:script] == "Hans" ?
|
31
|
-
'"SimHei",sans-serif' :
|
32
|
-
'"Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif'
|
33
|
-
),
|
34
|
-
monospacefont: '"Space Mono",monospace'
|
35
|
-
}
|
36
|
-
end
|
37
|
-
|
38
|
-
def default_file_locations(_options)
|
39
|
-
{
|
40
|
-
htmlstylesheet: html_doc_path("htmlstyle.scss"),
|
41
|
-
htmlcoverpage: html_doc_path("html_unece_titlepage.html"),
|
42
|
-
htmlintropage: html_doc_path("html_unece_intro.html"),
|
43
|
-
scripts: html_doc_path("scripts.pdf.html"),
|
44
|
-
}
|
45
|
-
end
|
46
|
-
|
47
|
-
|
48
|
-
def googlefonts
|
49
|
-
<<~HEAD.freeze
|
50
|
-
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i|Space+Mono:400,700" rel="stylesheet">
|
51
|
-
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,500,700,900" rel="stylesheet">
|
52
|
-
HEAD
|
53
|
-
end
|
54
|
-
|
55
|
-
def make_body(xml, docxml)
|
56
|
-
plenary = is_plenary?(docxml)
|
57
|
-
body_attr = { lang: "EN-US", link: "blue", vlink: "#954F72", "xml:lang": "EN-US", class: "container" }
|
58
|
-
if plenary && @htmlcoverpage == html_doc_path("html_unece_titlepage.html")
|
59
|
-
@htmlcoverpage = html_doc_path("html_unece_plenary_titlepage.html")
|
60
|
-
end
|
61
|
-
#@htmlintropage = nil if plenary
|
62
|
-
xml.body **body_attr do |body|
|
63
|
-
make_body1(body, docxml)
|
64
|
-
make_body2(body, docxml)
|
65
|
-
make_body3(body, docxml)
|
16
|
+
def convert(filename, file = nil, debug = false)
|
17
|
+
file = File.read(filename, encoding: "utf-8") if file.nil?
|
18
|
+
docxml, outname_html, dir = convert_init(file, filename, debug)
|
19
|
+
plenary = docxml.at(ns("//bibdata/ext[doctype = 'plenary']"))
|
20
|
+
/\.xml$/.match(filename) or
|
21
|
+
filename = Tempfile.open([outname_html, ".xml"], encoding: "utf-8") do |f|
|
22
|
+
f.write file
|
23
|
+
f.path
|
66
24
|
end
|
25
|
+
FileUtils.rm_rf dir
|
26
|
+
::Metanorma::Output::XslfoPdf.new.convert(
|
27
|
+
filename, outname_html + ".pdf",
|
28
|
+
File.join(@libdir, plenary ? "unece.plenary.xsl" : "unece.recommendation.xsl"))
|
67
29
|
end
|
68
|
-
|
69
|
-
def make_body3(body, docxml)
|
70
|
-
body.div **{ class: "main-section" } do |div3|
|
71
|
-
boilerplate docxml, div3
|
72
|
-
abstract docxml, div3
|
73
|
-
foreword docxml, div3
|
74
|
-
introduction docxml, div3
|
75
|
-
preface docxml, div3
|
76
|
-
acknowledgements docxml, div3
|
77
|
-
middle docxml, div3
|
78
|
-
footnotes div3
|
79
|
-
comments div3
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def html_preface(docxml)
|
84
|
-
super
|
85
|
-
docxml
|
86
|
-
end
|
87
|
-
|
88
|
-
def middle(isoxml, out)
|
89
|
-
clause isoxml, out
|
90
|
-
annex isoxml, out
|
91
|
-
bibliography isoxml, out
|
92
|
-
end
|
93
|
-
|
94
|
-
def clause_parse_title(node, div, c1, out)
|
95
|
-
if node["inline-header"] == "true"
|
96
|
-
inline_header_title(out, node, c1)
|
97
|
-
else
|
98
|
-
div.send "h#{anchor(node['id'], :level, false) || '1'}" do |h|
|
99
|
-
lbl = anchor(node['id'], :label, false)
|
100
|
-
h << "#{lbl}. " if lbl && !@suppressheadingnumbers
|
101
|
-
insert_tab(h, 1) if lbl && !@suppressheadingnumbers
|
102
|
-
c1&.children&.each { |c2| parse(c2, h) }
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def introduction(isoxml, out)
|
108
|
-
f = isoxml.at(ns("//introduction")) || return
|
109
|
-
page_break(out)
|
110
|
-
out.div **{ class: "Section3", id: f["id"] } do |div|
|
111
|
-
div.h1(**{ class: "IntroTitle" }) do |h1|
|
112
|
-
h1 << @introduction_lbl
|
113
|
-
end
|
114
|
-
f.elements.each do |e|
|
115
|
-
parse(e, div) unless e.name == "title"
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
def foreword(isoxml, out)
|
121
|
-
f = isoxml.at(ns("//foreword")) || return
|
122
|
-
page_break(out)
|
123
|
-
out.div **attr_code(id: f["id"]) do |s|
|
124
|
-
s.h1(**{ class: "ForewordTitle" }) do |h1|
|
125
|
-
h1 << @foreword_lbl
|
126
|
-
end
|
127
|
-
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
include BaseConvert
|
132
30
|
end
|
133
31
|
end
|
134
32
|
end
|