isodoc 1.7.7 → 1.8.0

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.
@@ -1,229 +1,237 @@
1
1
  require "fileutils"
2
2
  require_relative "./postprocess_cover"
3
3
 
4
- module IsoDoc::WordFunction
5
- module Postprocess
6
- # add namespaces for Word fragments
7
- WORD_NOKOHEAD = <<~HERE.freeze
8
- <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
9
- <html xmlns="http://www.w3.org/1999/xhtml"
10
- xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"
11
- xmlns:w="urn:schemas-microsoft-com:office:word"
12
- xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
13
- <head> <title></title> <meta charset="UTF-8" /> </head>
14
- <body> </body> </html>
15
- HERE
16
-
17
- def to_word_xhtml_fragment(xml)
18
- doc = ::Nokogiri::XML.parse(WORD_NOKOHEAD)
19
- ::Nokogiri::XML::DocumentFragment.new(doc, xml, doc.root)
20
- end
4
+ module IsoDoc
5
+ module WordFunction
6
+ module Postprocess
7
+ # add namespaces for Word fragments
8
+ WORD_NOKOHEAD = <<~HERE.freeze
9
+ <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
10
+ <html xmlns="http://www.w3.org/1999/xhtml"
11
+ xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"
12
+ xmlns:w="urn:schemas-microsoft-com:office:word"
13
+ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
14
+ <head> <title></title> <meta charset="UTF-8" /> </head>
15
+ <body> </body> </html>
16
+ HERE
17
+
18
+ def to_word_xhtml_fragment(xml)
19
+ doc = ::Nokogiri::XML.parse(WORD_NOKOHEAD)
20
+ ::Nokogiri::XML::DocumentFragment.new(doc, xml, doc.root)
21
+ end
21
22
 
22
- def table_note_cleanup(docxml)
23
- super
24
- # preempt html2doc putting MsoNormal there
25
- docxml.xpath("//p[not(self::*[@class])][ancestor::*[@class = 'Note']]")
26
- .each do |p|
27
- p["class"] = "Note"
23
+ def table_note_cleanup(docxml)
24
+ super
25
+ # preempt html2doc putting MsoNormal there
26
+ docxml.xpath("//p[not(self::*[@class])][ancestor::*[@class = 'Note']]")
27
+ .each do |p|
28
+ p["class"] = "Note"
29
+ end
28
30
  end
29
- end
30
31
 
31
- def postprocess(result, filename, dir)
32
- filename = filename.sub(/\.doc$/, "")
33
- header = generate_header(filename, dir)
34
- result = from_xhtml(cleanup(to_xhtml(textcleanup(result))))
35
- toWord(result, filename, dir, header)
36
- @files_to_delete.each { |f| FileUtils.rm_f f }
37
- end
32
+ def postprocess(result, filename, dir)
33
+ filename = filename.sub(/\.doc$/, "")
34
+ header = generate_header(filename, dir)
35
+ result = from_xhtml(cleanup(to_xhtml(textcleanup(result))))
36
+ toWord(result, filename, dir, header)
37
+ @files_to_delete.each { |f| FileUtils.rm_f f }
38
+ end
38
39
 
39
- def toWord(result, filename, dir, header)
40
- result = from_xhtml(word_cleanup(to_xhtml(result)))
41
- @wordstylesheet = wordstylesheet_update
42
- Html2Doc.process(
43
- result,
44
- filename: filename,
45
- stylesheet: @wordstylesheet&.path,
46
- header_file: header&.path, dir: dir,
47
- asciimathdelims: [@openmathdelim, @closemathdelim],
48
- liststyles: { ul: @ulstyle, ol: @olstyle }
49
- )
50
- header&.unlink
51
- @wordstylesheet.unlink if @wordstylesheet.is_a?(Tempfile)
52
- end
40
+ def toWord(result, filename, dir, header)
41
+ result = from_xhtml(word_cleanup(to_xhtml(result)))
42
+ @wordstylesheet = wordstylesheet_update
43
+ Html2Doc.process(
44
+ result,
45
+ filename: filename,
46
+ imagedir: @localdir,
47
+ stylesheet: @wordstylesheet&.path,
48
+ header_file: header&.path, dir: dir,
49
+ asciimathdelims: [@openmathdelim, @closemathdelim],
50
+ liststyles: { ul: @ulstyle, ol: @olstyle }
51
+ )
52
+ header&.unlink
53
+ @wordstylesheet.unlink if @wordstylesheet.is_a?(Tempfile)
54
+ end
53
55
 
54
- def wordstylesheet_update
55
- return if @wordstylesheet.nil?
56
+ def wordstylesheet_update
57
+ return if @wordstylesheet.nil?
56
58
 
57
- f = File.open(@wordstylesheet.path, "a")
58
- @landscapestyle.empty? or f.write(@landscapestyle)
59
- if @wordstylesheet_override && @wordstylesheet
60
- f.write(@wordstylesheet_override.read)
61
- @wordstylesheet_override.close
62
- elsif @wordstylesheet_override && !@wordstylesheet
63
- @wordstylesheet = @wordstylesheet_override
59
+ f = File.open(@wordstylesheet.path, "a")
60
+ @landscapestyle.empty? or f.write(@landscapestyle)
61
+ if @wordstylesheet_override && @wordstylesheet
62
+ f.write(@wordstylesheet_override.read)
63
+ @wordstylesheet_override.close
64
+ elsif @wordstylesheet_override && !@wordstylesheet
65
+ @wordstylesheet = @wordstylesheet_override
66
+ end
67
+ f.close
68
+ @wordstylesheet
64
69
  end
65
- f.close
66
- @wordstylesheet
67
- end
68
70
 
69
- def word_admonition_images(docxml)
70
- docxml.xpath("//div[@class = 'Admonition']//img").each do |i|
71
- i["width"], i["height"] =
72
- Html2Doc.image_resize(i, image_localfile(i), @maxheight, 300)
71
+ def word_admonition_images(docxml)
72
+ docxml.xpath("//div[@class = 'Admonition']//img").each do |i|
73
+ i["width"], i["height"] =
74
+ Html2Doc.image_resize(i, image_localfile(i), @maxheight, 300)
75
+ end
73
76
  end
74
- end
75
77
 
76
- def word_cleanup(docxml)
77
- word_annex_cleanup(docxml)
78
- word_preface(docxml)
79
- word_nested_tables(docxml)
80
- word_colgroup(docxml)
81
- word_table_align(docxml)
82
- word_table_separator(docxml)
83
- word_admonition_images(docxml)
84
- word_list_continuations(docxml)
85
- word_example_cleanup(docxml)
86
- word_pseudocode_cleanup(docxml)
87
- word_image_caption(docxml)
88
- word_section_breaks(docxml)
89
- authority_cleanup(docxml)
90
- word_footnote_format(docxml)
91
- docxml
92
- end
78
+ def word_cleanup(docxml)
79
+ word_annex_cleanup(docxml)
80
+ word_preface(docxml)
81
+ word_nested_tables(docxml)
82
+ word_colgroup(docxml)
83
+ word_table_align(docxml)
84
+ word_table_separator(docxml)
85
+ word_admonition_images(docxml)
86
+ word_list_continuations(docxml)
87
+ word_example_cleanup(docxml)
88
+ word_pseudocode_cleanup(docxml)
89
+ word_image_caption(docxml)
90
+ word_section_breaks(docxml)
91
+ authority_cleanup(docxml)
92
+ word_footnote_format(docxml)
93
+ docxml
94
+ end
93
95
 
94
- def word_colgroup(docxml)
95
- cells2d = {}
96
- docxml.xpath("//table[colgroup]").each do |t|
97
- w = colgroup_widths(t)
98
- t.xpath(".//tr").each_with_index { |_tr, r| cells2d[r] = {} }
99
- t.xpath(".//tr").each_with_index do |tr, r|
100
- tr.xpath("./td | ./th").each_with_index do |td, _i|
101
- x = 0
102
- rs = td&.attr("rowspan")&.to_i || 1
103
- cs = td&.attr("colspan")&.to_i || 1
104
- while cells2d[r][x]
105
- x += 1
106
- end
107
- (r..(r + rs - 1)).each do |y2|
108
- (x..(x + cs - 1)).each do |x2|
109
- cells2d[y2][x2] = 1
96
+ def word_colgroup(docxml)
97
+ cells2d = {}
98
+ docxml.xpath("//table[colgroup]").each do |t|
99
+ w = colgroup_widths(t)
100
+ t.xpath(".//tr").each_with_index { |_tr, r| cells2d[r] = {} }
101
+ t.xpath(".//tr").each_with_index do |tr, r|
102
+ tr.xpath("./td | ./th").each_with_index do |td, _i|
103
+ x = 0
104
+ rs = td&.attr("rowspan")&.to_i || 1
105
+ cs = td&.attr("colspan")&.to_i || 1
106
+ while cells2d[r][x]
107
+ x += 1
110
108
  end
109
+ (r..(r + rs - 1)).each do |y2|
110
+ (x..(x + cs - 1)).each do |x2|
111
+ cells2d[y2][x2] = 1
112
+ end
113
+ end
114
+ width = (x..(x + cs - 1)).each_with_object({ width: 0 }) do |z, m|
115
+ m[:width] += w[z]
116
+ end
117
+ td["width"] = "#{width[:width]}%"
118
+ x += cs
111
119
  end
112
- width = (x..(x + cs - 1)).each_with_object({ width: 0 }) do |z, m|
113
- m[:width] += w[z]
114
- end
115
- td["width"] = "#{width[:width]}%"
116
- x += cs
117
120
  end
118
121
  end
119
122
  end
120
- end
121
123
 
122
- # assume percentages
123
- def colgroup_widths(table)
124
- table.xpath("./colgroup/col").each_with_object([]) do |c, m|
125
- m << c["width"].sub(/%$/, "").to_f
124
+ # assume percentages
125
+ def colgroup_widths(table)
126
+ table.xpath("./colgroup/col").each_with_object([]) do |c, m|
127
+ m << c["width"].sub(/%$/, "").to_f
128
+ end
126
129
  end
127
- end
128
130
 
129
- def word_nested_tables(docxml)
130
- docxml.xpath("//table").each do |t|
131
- t.xpath(".//table").reverse.each do |tt|
132
- t.next = tt.remove
131
+ def word_nested_tables(docxml)
132
+ docxml.xpath("//table").each do |t|
133
+ t.xpath(".//table").reverse.each do |tt|
134
+ t.next = tt.remove
135
+ end
133
136
  end
134
137
  end
135
- end
136
138
 
137
- def style_update(node, css)
138
- return unless node
139
+ def style_update(node, css)
140
+ return unless node
139
141
 
140
- node["style"] = node["style"] ? node["style"].sub(/;?$/, ";#{css}") : css
141
- end
142
+ node["style"] =
143
+ node["style"] ? node["style"].sub(/;?$/, ";#{css}") : css
144
+ end
142
145
 
143
- def word_image_caption(docxml)
144
- docxml.xpath("//p[@class = 'FigureTitle' or @class = 'SourceTitle']")
145
- .each do |t|
146
- if t&.previous_element&.name == "img"
147
- img = t.previous_element
148
- t.previous_element.swap("<p class=\'figure\'>#{img.to_xml}</p>")
146
+ def word_image_caption(docxml)
147
+ docxml.xpath("//p[@class = 'FigureTitle' or @class = 'SourceTitle']")
148
+ .each do |t|
149
+ if t&.previous_element&.name == "img"
150
+ img = t.previous_element
151
+ t.previous_element.swap("<p class=\'figure\'>#{img.to_xml}</p>")
152
+ end
153
+ style_update(t&.previous_element, "page-break-after:avoid;")
149
154
  end
150
- style_update(t&.previous_element, "page-break-after:avoid;")
151
155
  end
152
- end
153
156
 
154
- def word_list_continuations(docxml)
155
- list_add(docxml.xpath("//ul[not(ancestor::ul) and not(ancestor::ol)]"), 1)
156
- list_add(docxml.xpath("//ol[not(ancestor::ul) and not(ancestor::ol)]"), 1)
157
- end
157
+ def word_list_continuations(docxml)
158
+ list_add(docxml.xpath("//ul[not(ancestor::ul) and not(ancestor::ol)]"),
159
+ 1)
160
+ list_add(docxml.xpath("//ol[not(ancestor::ul) and not(ancestor::ol)]"),
161
+ 1)
162
+ end
158
163
 
159
- def list_add(xpath, lvl)
160
- xpath.each do |list|
161
- (list.xpath(".//li") - list.xpath(".//ol//li | .//ul//li")).each do |l|
162
- l.xpath("./p | ./div | ./table").each_with_index do |p, i|
163
- next if i.zero?
164
+ def list_add(xpath, lvl)
165
+ xpath.each do |list|
166
+ (list.xpath(".//li") - list.xpath(".//ol//li | .//ul//li")).each do |l|
167
+ l.xpath("./p | ./div | ./table").each_with_index do |p, i|
168
+ next if i.zero?
164
169
 
165
- p.wrap(%{<div class="ListContLevel#{lvl}"/>})
170
+ p.wrap(%{<div class="ListContLevel#{lvl}"/>})
171
+ end
172
+ list_add(l.xpath(".//ul") - l.xpath(".//ul//ul | .//ol//ul"),
173
+ lvl + 1)
174
+ list_add(l.xpath(".//ol") - l.xpath(".//ul//ol | .//ol//ol"),
175
+ lvl + 1)
166
176
  end
167
- list_add(l.xpath(".//ul") - l.xpath(".//ul//ul | .//ol//ul"), lvl + 1)
168
- list_add(l.xpath(".//ol") - l.xpath(".//ul//ol | .//ol//ol"), lvl + 1)
169
177
  end
170
178
  end
171
- end
172
179
 
173
- def word_table_align(docxml)
174
- docxml.xpath("//td[@align]/p | //th[@align]/p").each do |p|
175
- next if p["align"]
180
+ def word_table_align(docxml)
181
+ docxml.xpath("//td[@align]/p | //th[@align]/p").each do |p|
182
+ next if p["align"]
176
183
 
177
- style_update(p, "text-align: #{p.parent['align']}")
184
+ style_update(p, "text-align: #{p.parent['align']}")
185
+ end
178
186
  end
179
- end
180
187
 
181
- def word_table_separator(docxml)
182
- docxml.xpath("//p[@class = 'TableTitle']").each do |t|
183
- next unless t.children.empty?
188
+ def word_table_separator(docxml)
189
+ docxml.xpath("//p[@class = 'TableTitle']").each do |t|
190
+ next unless t.children.empty?
184
191
 
185
- t["style"] = t["style"].sub(/;?$/, ";font-size:0pt;")
186
- t.children = "&nbsp;"
192
+ t["style"] = t["style"].sub(/;?$/, ";font-size:0pt;")
193
+ t.children = "&nbsp;"
194
+ end
187
195
  end
188
- end
189
196
 
190
- def word_annex_cleanup(docxml); end
197
+ def word_annex_cleanup(docxml); end
191
198
 
192
- def word_example_cleanup(docxml)
193
- docxml.xpath("//div[@class = 'example']//p[not(@class)]").each do |p|
194
- p["class"] = "example"
199
+ def word_example_cleanup(docxml)
200
+ docxml.xpath("//div[@class = 'example']//p[not(@class)]").each do |p|
201
+ p["class"] = "example"
202
+ end
195
203
  end
196
- end
197
204
 
198
- def word_pseudocode_cleanup(docxml)
199
- docxml.xpath("//div[@class = 'pseudocode']//p[not(@class)]").each do |p|
200
- p["class"] = "pseudocode"
205
+ def word_pseudocode_cleanup(docxml)
206
+ docxml.xpath("//div[@class = 'pseudocode']//p[not(@class)]").each do |p|
207
+ p["class"] = "pseudocode"
208
+ end
201
209
  end
202
- end
203
210
 
204
- # applies for <div class="WordSectionN_M"><p><pagebreak/></p>...
205
- def word_remove_pb_before_annex(docxml)
206
- docxml.xpath("//div[p/br]").each do |d|
207
- /^WordSection\d+_\d+$/.match(d["class"]) or next
208
- d.elements[0].name == "p" && !d.elements[0].elements.empty? or next
209
- d.elements[0].elements[0].name == "br" &&
210
- d.elements[0].elements[0]["style"] ==
211
- "mso-special-character:line-break;page-break-before:always" or next
212
- d.elements[0].remove
211
+ # applies for <div class="WordSectionN_M"><p><pagebreak/></p>...
212
+ def word_remove_pb_before_annex(docxml)
213
+ docxml.xpath("//div[p/br]").each do |d|
214
+ /^WordSection\d+_\d+$/.match(d["class"]) or next
215
+ d.elements[0].name == "p" && !d.elements[0].elements.empty? or next
216
+ d.elements[0].elements[0].name == "br" &&
217
+ d.elements[0].elements[0]["style"] ==
218
+ "mso-special-character:line-break;page-break-before:always" or next
219
+ d.elements[0].remove
220
+ end
213
221
  end
214
- end
215
222
 
216
- def word_footnote_format(docxml)
217
- # the content is in a[@epub:type = 'footnote']//sup, but in Word,
218
- # we need to inject content around the autonumbered footnote reference
219
- docxml.xpath("//a[@epub:type = 'footnote']").each do |x|
220
- footnote_reference_format(x)
221
- end
222
- docxml.xpath("//a[@class = 'TableFootnoteRef'] | "\
223
- "//span[@class = 'TableFootnoteRef']").each do |x|
224
- table_footnote_reference_format(x)
223
+ def word_footnote_format(docxml)
224
+ # the content is in a[@epub:type = 'footnote']//sup, but in Word,
225
+ # we need to inject content around the autonumbered footnote reference
226
+ docxml.xpath("//a[@epub:type = 'footnote']").each do |x|
227
+ footnote_reference_format(x)
228
+ end
229
+ docxml.xpath("//a[@class = 'TableFootnoteRef'] | "\
230
+ "//span[@class = 'TableFootnoteRef']").each do |x|
231
+ table_footnote_reference_format(x)
232
+ end
233
+ docxml
225
234
  end
226
- docxml
227
235
  end
228
236
  end
229
237
  end
@@ -3,7 +3,7 @@ require "metanorma"
3
3
  module IsoDoc
4
4
  class XslfoPdfConvert < ::IsoDoc::Convert
5
5
  MN2PDF_OPTIONS = :mn2pdf
6
- MN2PDF_FONT_MANIFEST = :font_manifest_file
6
+ MN2PDF_FONT_MANIFEST = :font_manifest
7
7
 
8
8
  def initialize(options)
9
9
  @format = :pdf
@@ -20,12 +20,15 @@ module IsoDoc
20
20
  end
21
21
 
22
22
  def pdf_options(_docxml)
23
- ret = ""
24
- font_manifest_file = @options.dig(MN2PDF_OPTIONS,
25
- MN2PDF_FONT_MANIFEST) and
26
- ret += " --font-manifest #{font_manifest_file}"
23
+ ret = {}
24
+ font_manifest = @options.dig(MN2PDF_OPTIONS,
25
+ MN2PDF_FONT_MANIFEST) and
26
+ ret[MN2PDF_FONT_MANIFEST] = font_manifest
27
27
  @aligncrosselements && !@aligncrosselements.empty? and
28
- ret += %( --param align-cross-elements = "#{@aligncrosselements.gsub(/,/, ' ')}")
28
+ ret["--param align-cross-elements="] =
29
+ @aligncrosselements.gsub(/,/, " ")
30
+ @baseassetpath and
31
+ ret["--param baseassetpath="] = @baseassetpath
29
32
  ret
30
33
  end
31
34
 
@@ -89,6 +89,28 @@ locality:
89
89
  example: مثال
90
90
  note: ملحوظة, ملاحظة
91
91
  formula: معادلة
92
+ grammar_abbrevs:
93
+ masculine: مذكر
94
+ feminine: مؤ
95
+ neuter: محايد
96
+ common: خنثى
97
+ isPreposition: حرف جر
98
+ isParticiple: النعت
99
+ isAdjective: صفة
100
+ isAdverb: ظرف
101
+ isNoun: اسم
102
+ isVerb: الفعل
103
+ relatedterms:
104
+ deprecates: يهمل
105
+ supersedes: حل محل
106
+ # حل محل
107
+ narrower: أضيق
108
+ broader: أوسع
109
+ equivalent: مُعادل
110
+ compare: قارن
111
+ contrast: مضاد
112
+ # تباين
113
+ see: انظر
92
114
  inflection:
93
115
  فقرة:
94
116
  sg: فقرة
@@ -93,6 +93,26 @@ locality: {
93
93
  note: Hinweis,
94
94
  formula: Formel
95
95
  }
96
+ grammar_abbrevs:
97
+ masculine: mask
98
+ feminine: fem
99
+ neuter: neutr
100
+ common: gemein
101
+ isPreposition: Präp
102
+ isParticiple: Part
103
+ isAdjective: Adj
104
+ isAdverb: Adv
105
+ isNoun: Subs
106
+ isVerb: V
107
+ relatedterms:
108
+ deprecates: veraltet
109
+ supersedes: ersetzt
110
+ narrower: enger
111
+ broader: breiter
112
+ equivalent: entspricht
113
+ compare: vergleiche
114
+ contrast: dagegen
115
+ see: siehe
96
116
  inflection:
97
117
  Klausel:
98
118
  sg: Klausel
@@ -99,6 +99,26 @@ locality: {
99
99
  note: Note,
100
100
  formula: Formula
101
101
  }
102
+ grammar_abbrevs:
103
+ masculine: masc
104
+ feminine: fem
105
+ neuter: neut
106
+ common: common
107
+ isPreposition: prep
108
+ isParticiple: part
109
+ isAdjective: adj
110
+ isAdverb: adv
111
+ isNoun: n
112
+ isVerb: v
113
+ relatedterms:
114
+ deprecates: deprecates
115
+ supersedes: supersedes
116
+ narrower: narrower
117
+ broader: broader
118
+ equivalent: equivalent
119
+ compare: compare
120
+ contrast: contrast
121
+ see: see
102
122
  inflection:
103
123
  Clause:
104
124
  sg: Clause
@@ -95,6 +95,26 @@ locality: {
95
95
  note: Nota,
96
96
  formula: Fórmula
97
97
  }
98
+ grammar_abbrevs:
99
+ masculine: masc
100
+ feminine: fem
101
+ neuter: neut
102
+ common: epicen@
103
+ isPreposition: prep
104
+ isParticiple: part
105
+ isAdjective: adj
106
+ isAdverb: adv
107
+ isNoun: sust
108
+ isVerb: v
109
+ relatedterms:
110
+ deprecates: obsoleto
111
+ supersedes: reemplaza
112
+ narrower: incluye
113
+ broader: extiende
114
+ equivalent: equivalente
115
+ compare: relacionado
116
+ contrast: difiere
117
+ see: véase
98
118
  inflection:
99
119
  Cláusula:
100
120
  sg: Cláusula
@@ -92,6 +92,26 @@ locality: {
92
92
  note: Note,
93
93
  formula: Formule
94
94
  }
95
+ grammar_abbrevs:
96
+ masculine: masc
97
+ feminine: fem
98
+ neuter: neut
99
+ common: épicène
100
+ isPreposition: prép
101
+ isParticiple: part
102
+ isAdjective: adj
103
+ isAdverb: adv
104
+ isNoun: subst
105
+ isVerb: vb
106
+ relatedterms:
107
+ deprecates: déprécie
108
+ supersedes: remplace
109
+ narrower: plus étroit
110
+ broader: plus large
111
+ equivalent: équivalent
112
+ compare: comparez
113
+ contrast: contrastez
114
+ see: voir
95
115
  inflection:
96
116
  Clause:
97
117
  sg: Article
@@ -97,7 +97,27 @@ locality: {
97
97
  example: Пример,
98
98
  note: Примечание,
99
99
  formula: Формула
100
- }
100
+ }
101
+ grammar_abbrevs:
102
+ masculine: муж
103
+ feminine: жен
104
+ neuter: ср
105
+ common: общего рода
106
+ isPreposition: предл
107
+ isParticiple: прич
108
+ isAdjective: прил
109
+ isAdverb: нар
110
+ isNoun: сущ
111
+ isVerb: глаг
112
+ relatedterms:
113
+ deprecates: устаревший
114
+ supersedes: заменяет
115
+ narrower: более узкий
116
+ broader: более широкий
117
+ equivalent: эквивалент
118
+ compare: наравне
119
+ contrast: противоположный
120
+ see: см.
101
121
  inflection:
102
122
  Пункт:
103
123
  sg: Пункт
@@ -93,3 +93,24 @@ locality: {
93
93
  example: 示例,
94
94
  note: 注
95
95
  }
96
+ grammar_abbrevs:
97
+ masculine: 男性性别
98
+ feminine: 阴性
99
+ neuter: 中性的
100
+ common: 通性
101
+ isPreposition: 介词
102
+ isParticiple: 分词
103
+ isAdjective: 形容词
104
+ isAdverb: 副词
105
+ isNoun: 名词
106
+ isVerb: 动词
107
+ relatedterms:
108
+ deprecates: 旧词
109
+ supersedes: 取替
110
+ narrower: 狭义
111
+ broader: 广义
112
+ equivalent: 同义
113
+ compare: 比较
114
+ contrast: 对比
115
+ see: 见
116
+
@@ -1,21 +1,14 @@
1
- require 'mn2pdf'
2
- require_relative "./utils.rb"
1
+ require "mn2pdf"
2
+ require_relative "./utils"
3
3
 
4
4
  module Metanorma
5
5
  module Output
6
6
  class XslfoPdf < Base
7
- def convert(url_path, output_path, xsl_stylesheet, options = "")
7
+ def convert(url_path, output_path, xsl_stylesheet, options = {})
8
8
  return if url_path.nil? || output_path.nil? || xsl_stylesheet.nil?
9
9
 
10
- Mn2pdf.convert(quote(url_path), quote(output_path), quote(xsl_stylesheet), options)
11
- end
12
-
13
- def quote(x)
14
- return x if /^'.*'$/.match(x)
15
- return x if /^".*"$/.match(x)
16
- %("#{x}")
10
+ Mn2pdf.convert(url_path, output_path, xsl_stylesheet, options)
17
11
  end
18
12
  end
19
13
  end
20
14
  end
21
-