caracal 1.0.13 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7423edb9358ab382c88076980d43f0c9055b52c5
4
- data.tar.gz: d564e16cb4c7ee233a8d90e7a173901fddcf59ab
3
+ metadata.gz: 718806bf68883db5fcc8368a9494bb3235d6b39f
4
+ data.tar.gz: 617abc80e867466e960ca952c4b12a799741470a
5
5
  SHA512:
6
- metadata.gz: 6944eb1e2157768ffcdeb4f467fa353cf47d083b8f1fcf66f6323d51adffb5e2c6d11da0fd5b106ec170cfec01186ad6421e8e94a28c46dd8661326b24f89e28
7
- data.tar.gz: 36b335578ce968bfc1efd71c1faf821b92d67901157568b8cfd6c500e0fcfe099472593bca3dc276279f3485441b53ff4322d5da355d7833e440ec18a723b2c7
6
+ metadata.gz: 1a3f5d8804e51338f20f7167c1c14cc01bd9ed57a7d3765df79d29053fb796a2e7b76ed0896a35e90118cb1d22df59db97ac6299a2e7d042f3d1b1a6231d61b4
7
+ data.tar.gz: a3b4ceeb74433b5a34248a3208f6d5a8d803c0d7dd4eda033068b66708e22cf01e9d1839754e89b243edd28032eebff70c4b49f1e43e3e203759f0b8202d4203
@@ -1,3 +1,15 @@
1
+ #### v1.1.0
2
+
3
+ * Enhancements
4
+ * Corrected how renderers output namespaced nodes to ensure jruby compliance. (HUGE thank you to @henrychung for researching and implementing this).
5
+
6
+
7
+ #### v1.0.13
8
+
9
+ * Bug Fixes
10
+ * Corrected bug where lists were no longer multi-line. (@jdugan h/t @StochasticSpring).
11
+
12
+
1
13
  #### v1.0.12
2
14
 
3
15
  * Bug Fixes
data/README.md CHANGED
@@ -263,8 +263,8 @@ dimensions and the orientation explicitly.
263
263
 
264
264
  ```ruby
265
265
  docx.page_size do
266
- width 12240 # sets the page width. units in twips.
267
- height 15840 # sets the page height. units in twips.
266
+ width 15840 # sets the page width. units in twips.
267
+ height 12240 # sets the page height. units in twips.
268
268
  orientation :landscape # sets the printer orientation. accepts :portrait and :landscape.
269
269
  end
270
270
  ```
@@ -86,7 +86,7 @@ module Caracal
86
86
  docx = new(f_name, &block)
87
87
  buffer = docx.render
88
88
 
89
- File.open("./#{ docx.name }", 'w') { |f| f.write(buffer.string) }
89
+ File.open("./#{ docx.name }", 'wb') { |f| f.write(buffer.string) }
90
90
  end
91
91
 
92
92
 
@@ -16,7 +16,7 @@ module Caracal
16
16
  #
17
17
  def to_xml
18
18
  builder = ::Nokogiri::XML::Builder.with(declaration_xml) do |xml|
19
- xml.send 'cp:coreProperties', root_options do
19
+ xml['cp'].coreProperties root_options do
20
20
  xml['dc'].title document.name
21
21
  end
22
22
  end
@@ -17,9 +17,9 @@ module Caracal
17
17
  #
18
18
  def to_xml
19
19
  builder = ::Nokogiri::XML::Builder.with(declaration_xml) do |xml|
20
- xml.send 'w:document', root_options do
21
- xml.send 'w:background', { 'w:color' => 'FFFFFF' }
22
- xml.send 'w:body' do
20
+ xml['w'].document root_options do
21
+ xml['w'].background({ 'w:color' => 'FFFFFF' })
22
+ xml['w'].body do
23
23
 
24
24
  #============= CONTENTS ===================================
25
25
 
@@ -30,14 +30,14 @@ module Caracal
30
30
 
31
31
  #============= PAGE SETTINGS ==============================
32
32
 
33
- xml.send 'w:sectPr' do
33
+ xml['w'].sectPr do
34
34
  if document.page_number_show
35
35
  if rel = document.find_relationship('footer1.xml')
36
- xml.send 'w:footerReference', { 'r:id' => rel.formatted_id, 'w:type' => 'default' }
36
+ xml['w'].footerReference({ 'r:id' => rel.formatted_id, 'w:type' => 'default' })
37
37
  end
38
38
  end
39
- xml.send 'w:pgSz', page_size_options
40
- xml.send 'w:pgMar', page_margin_options
39
+ xml['w'].pgSz page_size_options
40
+ xml['w'].pgMar page_margin_options
41
41
  end
42
42
 
43
43
  end
@@ -73,22 +73,22 @@ module Caracal
73
73
  if paragraph_level && attrs.empty?
74
74
  # skip
75
75
  else
76
- xml.send 'w:rPr' do
76
+ xml['w'].rPr do
77
77
  unless attrs.empty?
78
- xml.send 'w:rStyle', { 'w:val' => attrs[:style] } unless attrs[:style].nil?
79
- xml.send 'w:color', { 'w:val' => attrs[:color] } unless attrs[:color].nil?
80
- xml.send 'w:sz', { 'w:val' => attrs[:size] } unless attrs[:size].nil?
81
- xml.send 'w:b', { 'w:val' => (attrs[:bold] ? '1' : '0') } unless attrs[:bold].nil?
82
- xml.send 'w:i', { 'w:val' => (attrs[:italic] ? '1' : '0') } unless attrs[:italic].nil?
83
- xml.send 'w:u', { 'w:val' => (attrs[:underline] ? 'single' : 'none') } unless attrs[:underline].nil?
84
- xml.send 'w:shd', { 'w:fill' => attrs[:bgcolor], 'w:val' => 'clear' } unless attrs[:bgcolor].nil?
85
- xml.send 'w:vertAlign', { 'w:val' => attrs[:vertical_align] } unless attrs[:vertical_align].nil?
78
+ xml['w'].rStyle( { 'w:val' => attrs[:style] }) unless attrs[:style].nil?
79
+ xml['w'].color( { 'w:val' => attrs[:color] }) unless attrs[:color].nil?
80
+ xml['w'].sz( { 'w:val' => attrs[:size] }) unless attrs[:size].nil?
81
+ xml['w'].b( { 'w:val' => (attrs[:bold] ? '1' : '0') }) unless attrs[:bold].nil?
82
+ xml['w'].i( { 'w:val' => (attrs[:italic] ? '1' : '0') }) unless attrs[:italic].nil?
83
+ xml['w'].u( { 'w:val' => (attrs[:underline] ? 'single' : 'none') }) unless attrs[:underline].nil?
84
+ xml['w'].shd( { 'w:fill' => attrs[:bgcolor], 'w:val' => 'clear' }) unless attrs[:bgcolor].nil?
85
+ xml['w'].vertAlign( { 'w:val' => attrs[:vertical_align] }) unless attrs[:vertical_align].nil?
86
86
  unless attrs[:font].nil?
87
87
  f = attrs[:font]
88
- xml.send 'w:rFonts', { 'w:ascii' => f, 'w:hAnsi' => f, 'w:eastAsia' => f, 'w:cs' => f }
88
+ xml['w'].rFonts( { 'w:ascii' => f, 'w:hAnsi' => f, 'w:eastAsia' => f, 'w:cs' => f })
89
89
  end
90
90
  end
91
- xml.send 'w:rtl', { 'w:val' => '0' }
91
+ xml['w'].rtl({ 'w:val' => '0' })
92
92
  end
93
93
  end
94
94
  end
@@ -140,39 +140,39 @@ module Caracal
140
140
  rel_id = rel.relationship_id
141
141
  rel_name = rel.formatted_target
142
142
 
143
- xml.send 'w:p', paragraph_options do
144
- xml.send 'w:pPr' do
145
- xml.send 'w:spacing', { 'w:lineRule' => 'auto', 'w:line' => ds.style_line }
146
- xml.send 'w:contextualSpacing', { 'w:val' => '0' }
147
- xml.send 'w:jc', { 'w:val' => model.image_align.to_s }
148
- xml.send 'w:rPr'
143
+ xml['w'].p paragraph_options do
144
+ xml['w'].pPr do
145
+ xml['w'].spacing({ 'w:lineRule' => 'auto', 'w:line' => ds.style_line })
146
+ xml['w'].contextualSpacing({ 'w:val' => '0' })
147
+ xml['w'].jc({ 'w:val' => model.image_align.to_s })
148
+ xml['w'].rPr
149
149
  end
150
- xml.send 'w:r', run_options do
151
- xml.send 'w:drawing' do
152
- xml.send 'wp:inline', { distR: model.formatted_right, distT: model.formatted_top, distB: model.formatted_bottom, distL: model.formatted_left } do
153
- xml.send 'wp:extent', { cx: model.formatted_width, cy: model.formatted_height }
154
- xml.send 'wp:effectExtent', { t: 0, b: 0, r: 0, l: 0 }
155
- xml.send 'wp:docPr', { id: rel_id, name: rel_name }
156
- xml.send 'a:graphic' do
157
- xml.send 'a:graphicData', { uri: 'http://schemas.openxmlformats.org/drawingml/2006/picture' } do
158
- xml.send 'pic:pic' do
159
- xml.send 'pic:nvPicPr' do
160
- xml.send 'pic:cNvPr', { id: rel_id, name: rel_name }
161
- xml.send 'pic:cNvPicPr'
150
+ xml['w'].r run_options do
151
+ xml['w'].drawing do
152
+ xml['wp'].inline({ distR: model.formatted_right, distT: model.formatted_top, distB: model.formatted_bottom, distL: model.formatted_left }) do
153
+ xml['wp'].extent({ cx: model.formatted_width, cy: model.formatted_height })
154
+ xml['wp'].effectExtent({ t: 0, b: 0, r: 0, l: 0 })
155
+ xml['wp'].docPr({ id: rel_id, name: rel_name })
156
+ xml['a'].graphic do
157
+ xml['a'].graphicData({ uri: 'http://schemas.openxmlformats.org/drawingml/2006/picture' }) do
158
+ xml['pic'].pic do
159
+ xml['pic'].nvPicPr do
160
+ xml['pic'].cNvPr({ id: rel_id, name: rel_name })
161
+ xml['pic'].cNvPicPr
162
162
  end
163
- xml.send 'pic:blipFill' do
164
- xml.send 'a:blip', { 'r:embed' => rel.formatted_id }
165
- xml.send 'a:srcRect'
166
- xml.send 'a:stretch' do
167
- xml.send 'a:fillRect'
163
+ xml['pic'].blipFill do
164
+ xml['a'].blip({ 'r:embed' => rel.formatted_id })
165
+ xml['a'].srcRect
166
+ xml['a'].stretch do
167
+ xml['a'].fillRect
168
168
  end
169
169
  end
170
- xml.send 'pic:spPr' do
171
- xml.send 'a:xfrm' do
172
- xml.send 'a:ext', { cx: model.formatted_width, cy: model.formatted_height }
170
+ xml['pic'].spPr do
171
+ xml['a'].xfrm do
172
+ xml['a'].ext({ cx: model.formatted_width, cy: model.formatted_height })
173
173
  end
174
- xml.send 'a:prstGeom', { prst: 'rect' }
175
- xml.send 'a:ln'
174
+ xml['a'].prstGeom({ prst: 'rect' })
175
+ xml['a'].ln
176
176
  end
177
177
  end
178
178
  end
@@ -180,27 +180,27 @@ module Caracal
180
180
  end
181
181
  end
182
182
  end
183
- xml.send 'w:r', run_options do
184
- xml.send 'w:rPr' do
185
- xml.send 'w:rtl', { 'w:val' => '0' }
183
+ xml['w'].r run_options do
184
+ xml['w'].rPr do
185
+ xml['w'].rtl({ 'w:val' => '0' })
186
186
  end
187
187
  end
188
188
  end
189
189
  end
190
190
 
191
191
  def render_linebreak(xml, model)
192
- xml.send 'w:r' do
193
- xml.send 'w:br'
192
+ xml['w'].r do
193
+ xml['w'].br
194
194
  end
195
195
  end
196
196
 
197
197
  def render_link(xml, model)
198
198
  rel = document.relationship({ target: model.link_href, type: :link })
199
199
 
200
- xml.send 'w:hyperlink', { 'r:id' => rel.formatted_id } do
201
- xml.send 'w:r', run_options do
200
+ xml['w'].hyperlink({ 'r:id' => rel.formatted_id }) do
201
+ xml['w'].r run_options do
202
202
  render_run_attributes(xml, model, false)
203
- xml.send 'w:t', { 'xml:space' => 'preserve' }, model.link_content
203
+ xml['w'].t({ 'xml:space' => 'preserve' }, model.link_content)
204
204
  end
205
205
  end
206
206
  end
@@ -220,16 +220,16 @@ module Caracal
220
220
  ls = document.find_list_style(model.list_item_type, model.list_item_level)
221
221
  hanging = ls.style_left.to_i - ls.style_indent.to_i - 1
222
222
 
223
- xml.send 'w:p', paragraph_options do
224
- xml.send 'w:pPr' do
225
- xml.send 'w:numPr' do
226
- xml.send 'w:ilvl', { 'w:val' => model.list_item_level }
227
- xml.send 'w:numId', { 'w:val' => list_num }
223
+ xml['w'].p paragraph_options do
224
+ xml['w'].pPr do
225
+ xml['w'].numPr do
226
+ xml['w'].ilvl({ 'w:val' => model.list_item_level })
227
+ xml['w'].numId({ 'w:val' => list_num })
228
228
  end
229
- xml.send 'w:ind', { 'w:left' => ls.style_left, 'w:hanging' => hanging }
230
- xml.send 'w:contextualSpacing', { 'w:val' => '1' }
231
- xml.send 'w:rPr' do
232
- xml.send 'w:u', { 'w:val' => 'none' }
229
+ xml['w'].ind({ 'w:left' => ls.style_left, 'w:hanging' => hanging })
230
+ xml['w'].contextualSpacing({ 'w:val' => '1' })
231
+ xml['w'].rPr do
232
+ xml['w'].u({ 'w:val' => 'none' })
233
233
  end
234
234
  end
235
235
  model.runs.each do |run|
@@ -241,14 +241,14 @@ module Caracal
241
241
 
242
242
  def render_pagebreak(xml, model)
243
243
  if model.page_break_wrap
244
- xml.send 'w:p', paragraph_options do
245
- xml.send 'w:r', run_options do
246
- xml.send 'w:br', { 'w:type' => 'page' }
244
+ xml['w'].p paragraph_options do
245
+ xml['w'].r run_options do
246
+ xml['w'].br({ 'w:type' => 'page' })
247
247
  end
248
248
  end
249
249
  else
250
- xml.send 'w:r', run_options do
251
- xml.send 'w:br', { 'w:type' => 'page' }
250
+ xml['w'].r run_options do
251
+ xml['w'].br({ 'w:type' => 'page' })
252
252
  end
253
253
  end
254
254
  end
@@ -256,11 +256,11 @@ module Caracal
256
256
  def render_paragraph(xml, model)
257
257
  run_props = [:color, :size, :bold, :italic, :underline].map { |m| model.send("paragraph_#{ m }") }.compact
258
258
 
259
- xml.send 'w:p', paragraph_options do
260
- xml.send 'w:pPr' do
261
- xml.send 'w:pStyle', { 'w:val' => model.paragraph_style } unless model.paragraph_style.nil?
262
- xml.send 'w:contextualSpacing', { 'w:val' => '0' }
263
- xml.send 'w:jc', { 'w:val' => model.paragraph_align } unless model.paragraph_align.nil?
259
+ xml['w'].p paragraph_options do
260
+ xml['w'].pPr do
261
+ xml['w'].pStyle({ 'w:val' => model.paragraph_style }) unless model.paragraph_style.nil?
262
+ xml['w'].contextualSpacing({ 'w:val' => '0' })
263
+ xml['w'].jc({ 'w:val' => model.paragraph_align }) unless model.paragraph_align.nil?
264
264
  render_run_attributes(xml, model, true)
265
265
  end
266
266
  model.runs.each do |run|
@@ -273,19 +273,19 @@ module Caracal
273
273
  def render_rule(xml, model)
274
274
  options = { 'w:color' => model.rule_color, 'w:sz' => model.rule_size, 'w:val' => model.rule_line, 'w:space' => model.rule_spacing }
275
275
 
276
- xml.send 'w:p', paragraph_options do
277
- xml.send 'w:pPr' do
278
- xml.send 'w:pBdr' do
279
- xml.send 'w:top', options
276
+ xml['w'].p paragraph_options do
277
+ xml['w'].pPr do
278
+ xml['w'].pBdr do
279
+ xml['w'].top options
280
280
  end
281
281
  end
282
282
  end
283
283
  end
284
284
 
285
285
  def render_text(xml, model)
286
- xml.send 'w:r', run_options do
286
+ xml['w'].r run_options do
287
287
  render_run_attributes(xml, model, false)
288
- xml.send 'w:t', { 'xml:space' => 'preserve' }, model.text_content
288
+ xml['w'].t({ 'xml:space' => 'preserve' }, model.text_content)
289
289
  end
290
290
  end
291
291
 
@@ -294,15 +294,15 @@ module Caracal
294
294
  model.send("table_border_#{ m }_size") > 0
295
295
  end
296
296
 
297
- xml.send 'w:tbl' do
298
- xml.send 'w:tblPr' do
299
- xml.send 'w:tblStyle', { 'w:val' => 'DefaultTable' }
300
- xml.send 'w:bidiVisual', { 'w:val' => '0' }
301
- xml.send 'w:tblW', { 'w:w' => model.table_width.to_f, 'w:type' => 'dxa' }
302
- xml.send 'w:tblInd', { 'w:w' => '0.0', 'w:type' => 'dxa' }
303
- xml.send 'w:jc', { 'w:val' => model.table_align }
297
+ xml['w'].tbl do
298
+ xml['w'].tblPr do
299
+ xml['w'].tblStyle({ 'w:val' => 'DefaultTable' })
300
+ xml['w'].bidiVisual({ 'w:val' => '0' })
301
+ xml['w'].tblW({ 'w:w' => model.table_width.to_f, 'w:type' => 'dxa' })
302
+ xml['w'].tblInd({ 'w:w' => '0.0', 'w:type' => 'dxa' })
303
+ xml['w'].jc({ 'w:val' => model.table_align })
304
304
  unless borders.empty?
305
- xml.send 'w:tblBorders' do
305
+ xml['w'].tblBorders do
306
306
  borders.each do |m|
307
307
  options = {
308
308
  'w:color' => model.send("table_border_#{ m }_color"),
@@ -310,35 +310,35 @@ module Caracal
310
310
  'w:sz' => model.send("table_border_#{ m }_size"),
311
311
  'w:space' => model.send("table_border_#{ m }_spacing")
312
312
  }
313
- xml.send "w:#{ Caracal::Core::Models::BorderModel.formatted_type(m) }", options
313
+ xml['w'].method_missing "#{ Caracal::Core::Models::BorderModel.formatted_type(m) }", options
314
314
  end
315
315
  end
316
316
  end
317
- xml.send 'w:tblLayout', { 'w:type' => 'fixed' }
318
- xml.send 'w:tblLook', { 'w:val' => '0600' }
317
+ xml['w'].tblLayout({ 'w:type' => 'fixed' })
318
+ xml['w'].tblLook({ 'w:val' => '0600' })
319
319
  end
320
- xml.send 'w:tblGrid' do
320
+ xml['w'].tblGrid do
321
321
  model.rows.first.each do |tc|
322
- xml.send 'w:gridCol', { 'w:w' => tc.cell_width }
322
+ xml['w'].gridCol({ 'w:w' => tc.cell_width })
323
323
  end
324
- xml.send 'w:tblGridChange', { 'w:id' => '0' } do
325
- xml.send 'w:tblGrid' do
324
+ xml['w'].tblGridChange({ 'w:id' => '0' }) do
325
+ xml['w'].tblGrid do
326
326
  model.rows.first.each do |tc|
327
- xml.send 'w:gridCol', { 'w:w' => tc.cell_width }
327
+ xml['w'].gridCol({ 'w:w' => tc.cell_width })
328
328
  end
329
329
  end
330
330
  end
331
331
  end
332
332
  model.rows.each do |row|
333
- xml.send 'w:tr' do
333
+ xml['w'].tr do
334
334
  row.each do |tc|
335
- xml.send 'w:tc' do
336
- xml.send 'tcPr' do
337
- xml.send 'w:shd', { 'w:fill' => tc.cell_background }
338
- xml.send 'w:vAlign', { 'w:val' => tc.cell_vertical_align }
339
- xml.send 'w:tcMar' do
335
+ xml['w'].tc do
336
+ xml['w'].tcPr do
337
+ xml['w'].shd({ 'w:fill' => tc.cell_background })
338
+ xml['w'].vAlign({ 'w:val' => tc.cell_vertical_align })
339
+ xml['w'].tcMar do
340
340
  %w(top left bottom right).each do |d|
341
- xml.send "w:#{ d }", { 'w:w' => tc.send("cell_margin_#{ d }").to_f, 'w:type' => 'dxa' }
341
+ xml['w'].method_missing "#{ d }", { 'w:w' => tc.send("cell_margin_#{ d }").to_f, 'w:type' => 'dxa' }
342
342
  end
343
343
  end
344
344
  end
@@ -16,9 +16,9 @@ module Caracal
16
16
  #
17
17
  def to_xml
18
18
  builder = ::Nokogiri::XML::Builder.with(declaration_xml) do |xml|
19
- xml.send 'w:fonts', root_options do
19
+ xml['w'].fonts root_options do
20
20
  document.fonts.each do |font|
21
- xml.send 'w:font', { 'w:name' => font.font_name }
21
+ xml['w'].font({ 'w:name' => font.font_name })
22
22
  end
23
23
  end
24
24
  end
@@ -16,30 +16,30 @@ module Caracal
16
16
  #
17
17
  def to_xml
18
18
  builder = ::Nokogiri::XML::Builder.with(declaration_xml) do |xml|
19
- xml.send 'w:ftr', root_options do
20
- xml.send 'w:p', paragraph_options do
21
- xml.send 'w:pPr' do
22
- xml.send 'w:contextualSpacing', { 'w:val' => '0' }
23
- xml.send 'w:jc', { 'w:val' => "#{ document.page_number_align }" }
19
+ xml['w'].ftr root_options do
20
+ xml['w'].p paragraph_options do
21
+ xml['w'].pPr do
22
+ xml['w'].contextualSpacing({ 'w:val' => '0' })
23
+ xml['w'].jc({ 'w:val' => "#{ document.page_number_align }" })
24
24
  end
25
25
  unless document.page_number_label.nil?
26
- xml.send 'w:r', run_options do
27
- xml.send 'w:rPr' do
28
- xml.send 'w:rStyle', { 'w:val' => 'PageNumber' }
26
+ xml['w'].r run_options do
27
+ xml['w'].rPr do
28
+ xml['w'].rStyle({ 'w:val' => 'PageNumber' })
29
29
  end
30
- xml.send 'w:t', { 'xml:space' => 'preserve' } do
30
+ xml['w'].t({ 'xml:space' => 'preserve' }) do
31
31
  xml.text "#{ document.page_number_label } "
32
32
  end
33
33
  end
34
34
  end
35
- xml.send 'w:fldSimple', { 'w:dirty' => '0', 'w:instr' => 'PAGE', 'w:fldLock' => '0' } do
36
- xml.send 'w:r', run_options do
37
- xml.send 'w:rPr'
35
+ xml['w'].fldSimple({ 'w:dirty' => '0', 'w:instr' => 'PAGE', 'w:fldLock' => '0' }) do
36
+ xml['w'].r run_options do
37
+ xml['w'].rPr
38
38
  end
39
39
  end
40
- xml.send 'w:r', run_options do
41
- xml.send 'w:rPr' do
42
- xml.send 'w:rtl', { 'w:val' => '0' }
40
+ xml['w'].r run_options do
41
+ xml['w'].rPr do
42
+ xml['w'].rtl({ 'w:val' => '0' })
43
43
  end
44
44
  end
45
45
  end
@@ -18,25 +18,25 @@ module Caracal
18
18
  #
19
19
  def to_xml
20
20
  builder = ::Nokogiri::XML::Builder.with(declaration_xml) do |xml|
21
- xml.send 'w:numbering', root_options do
22
-
21
+ xml['w'].numbering root_options do
22
+
23
23
  # add abstract definitions
24
24
  document.toplevel_lists.each_with_index do |model, i|
25
- xml.send 'w:abstractNum', { 'w:abstractNumId' => i + 1 } do
26
- xml.send 'w:multiLevelType', { 'w:val' => 'hybridMultilevel' }
25
+ xml['w'].abstractNum({ 'w:abstractNumId' => i + 1 }) do
26
+ xml['w'].multiLevelType({ 'w:val' => 'hybridMultilevel' })
27
27
  model.level_map.each do |(level, type)|
28
28
  if s = document.find_list_style(type, level)
29
- xml.send 'w:lvl', { 'w:ilvl' => s.style_level } do
30
- xml.send 'w:start', { 'w:val' => s.style_start }
31
- xml.send 'w:numFmt', { 'w:val' => s.style_format }
32
- xml.send 'w:lvlRestart', { 'w:val' => s.style_restart }
33
- xml.send 'w:lvlText', { 'w:val' => s.style_value }
34
- xml.send 'w:lvlJc', { 'w:val' => s.style_align }
35
- xml.send 'w:pPr' do
36
- xml.send 'w:ind', { 'w:left' => s.style_left, 'w:firstLine' => s.style_indent }
29
+ xml['w'].lvl({ 'w:ilvl' => s.style_level }) do
30
+ xml['w'].start({ 'w:val' => s.style_start })
31
+ xml['w'].numFmt({ 'w:val' => s.style_format })
32
+ xml['w'].lvlRestart({ 'w:val' => s.style_restart })
33
+ xml['w'].lvlText({ 'w:val' => s.style_value })
34
+ xml['w'].lvlJc({ 'w:val' => s.style_align })
35
+ xml['w'].pPr do
36
+ xml['w'].ind({ 'w:left' => s.style_left, 'w:firstLine' => s.style_indent })
37
37
  end
38
- xml.send 'w:rPr' do
39
- xml.send 'w:u', { 'w:val' => 'none' }
38
+ xml['w'].rPr do
39
+ xml['w'].u({ 'w:val' => 'none' })
40
40
  end
41
41
  end
42
42
  end
@@ -46,8 +46,8 @@ module Caracal
46
46
 
47
47
  # bind individual tables to abstract definitions
48
48
  document.toplevel_lists.each_with_index do |model, i|
49
- xml.send 'w:num', { 'w:numId' => i + 1 } do
50
- xml.send 'w:abstractNumId', { 'w:val' => i + 1 }
49
+ xml['w'].num({ 'w:numId' => i + 1 }) do
50
+ xml['w'].abstractNumId({ 'w:val' => i + 1 })
51
51
  end
52
52
  end
53
53
  end
@@ -16,11 +16,11 @@ module Caracal
16
16
  #
17
17
  def to_xml
18
18
  builder = ::Nokogiri::XML::Builder.with(declaration_xml) do |xml|
19
- xml.send 'w:settings', root_options do
20
- xml.send 'w:displayBackgroundShape', { 'w:val' => '1' }
21
- xml.send 'w:defaultTabStop', { 'w:val' => '720' }
22
- xml.send 'w:compat' do
23
- xml.send 'w:compatSetting', { 'w:val' => '14', 'w:name' => 'compatibilityMode', 'w:uri' => 'http://schemas.microsoft.com/office/word' }
19
+ xml['w'].settings root_options do
20
+ xml['w'].displayBackgroundShape({ 'w:val' => '1' })
21
+ xml['w'].defaultTabStop({ 'w:val' => '720' })
22
+ xml['w'].compat do
23
+ xml['w'].compatSetting({ 'w:val' => '14', 'w:name' => 'compatibilityMode', 'w:uri' => 'http://schemas.microsoft.com/office/word' })
24
24
  end
25
25
  end
26
26
  end
@@ -17,46 +17,46 @@ module Caracal
17
17
  #
18
18
  def to_xml
19
19
  builder = ::Nokogiri::XML::Builder.with(declaration_xml) do |xml|
20
- xml.send 'w:styles', root_options do
20
+ xml['w'].styles root_options do
21
21
 
22
22
  #============ DEFAULT STYLES ================================
23
23
 
24
24
  unless s = document.default_style
25
25
  raise Caracal::Errors::NoDefaultStyleError 'Document must declare a default paragraph style.'
26
26
  end
27
- xml.send 'w:docDefaults' do
28
- xml.send 'w:rPrDefault' do
29
- xml.send 'w:rPr' do
30
- xml.send 'w:rFonts', font_options(s)
31
- xml.send 'w:b', { 'w:val' => (s.style_bold ? '1' : '0') }
32
- xml.send 'w:i', { 'w:val' => (s.style_italic ? '1' : '0') }
33
- xml.send 'w:caps', { 'w:val' => (s.style_caps ? '1' : '0') }
34
- xml.send 'w:smallCaps', { 'w:val' => '0' }
35
- xml.send 'w:strike', { 'w:val' => '0' }
36
- xml.send 'w:color', { 'w:val' => s.style_color }
37
- xml.send 'w:sz', { 'w:val' => s.style_size }
38
- xml.send 'w:u', { 'w:val' => (s.style_underline ? 'single' : 'none') }
39
- xml.send 'w:vertAlign', { 'w:val' => 'baseline' }
27
+ xml['w'].docDefaults do
28
+ xml['w'].rPrDefault do
29
+ xml['w'].rPr do
30
+ xml['w'].rFonts font_options(s)
31
+ xml['w'].b({ 'w:val' => (s.style_bold ? '1' : '0') })
32
+ xml['w'].i({ 'w:val' => (s.style_italic ? '1' : '0') })
33
+ xml['w'].caps({ 'w:val' => (s.style_caps ? '1' : '0') })
34
+ xml['w'].smallCaps({ 'w:val' => '0' })
35
+ xml['w'].strike({ 'w:val' => '0' })
36
+ xml['w'].color({ 'w:val' => s.style_color })
37
+ xml['w'].sz({ 'w:val' => s.style_size })
38
+ xml['w'].u({ 'w:val' => (s.style_underline ? 'single' : 'none') })
39
+ xml['w'].vertAlign({ 'w:val' => 'baseline' })
40
40
  end
41
41
  end
42
- xml.send 'w:pPrDefault' do
43
- xml.send 'w:pPr' do
44
- xml.send 'w:keepNext', { 'w:val' => '0' }
45
- xml.send 'w:keepLines', { 'w:val' => '0' }
46
- xml.send 'w:widowControl', { 'w:val' => '1' }
47
- xml.send 'w:spacing', spacing_options(s, true)
48
- xml.send 'w:ind', indentation_options(s, true)
49
- xml.send 'w:jc', { 'w:val' => s.style_align.to_s }
42
+ xml['w'].pPrDefault do
43
+ xml['w'].pPr do
44
+ xml['w'].keepNext({ 'w:val' => '0' })
45
+ xml['w'].keepLines({ 'w:val' => '0' })
46
+ xml['w'].widowControl({ 'w:val' => '1' })
47
+ xml['w'].spacing(spacing_options(s, true))
48
+ xml['w'].ind(indentation_options(s, true))
49
+ xml['w'].jc({ 'w:val' => s.style_align.to_s })
50
50
  end
51
51
  end
52
52
  end
53
- xml.send 'w:style', { 'w:styleId' => s.style_id, 'w:type' => 'paragraph', 'w:default' => '1' } do
54
- xml.send 'w:name', { 'w:val' => s.style_name }
53
+ xml['w'].style({ 'w:styleId' => s.style_id, 'w:type' => 'paragraph', 'w:default' => '1' }) do
54
+ xml['w'].name({ 'w:val' => s.style_name })
55
55
  end
56
- xml.send 'w:style', { 'w:styleId' => 'TableNormal', 'w:type' => 'table', 'w:default' => '1' } do
57
- xml.send 'w:name', { 'w:val' => 'Table Normal'}
58
- xml.send 'w:pPr' do
59
- xml.send 'w:spacing', { 'w:lineRule' => 'auto', 'w:line' => (s.style_size * 20 * 1.15), 'w:before' => '0', 'w:after' => '0' }
56
+ xml['w'].style({ 'w:styleId' => 'TableNormal', 'w:type' => 'table', 'w:default' => '1' }) do
57
+ xml['w'].name({ 'w:val' => 'Table Normal'})
58
+ xml['w'].pPr do
59
+ xml['w'].spacing({ 'w:lineRule' => 'auto', 'w:line' => (s.style_size * 20 * 1.15), 'w:before' => '0', 'w:after' => '0' })
60
60
  end
61
61
  end
62
62
  default_id = s.style_id
@@ -65,47 +65,47 @@ module Caracal
65
65
  #============ PARAGRAPH STYLES ================================
66
66
 
67
67
  document.styles.reject { |s| s.style_id == default_id }.each do |s|
68
- xml.send 'w:style', { 'w:styleId' => s.style_id, 'w:type' => 'paragraph' } do
69
- xml.send 'w:name', { 'w:val' => s.style_name }
70
- xml.send 'w:basedOn', { 'w:val' => s.style_base }
71
- xml.send 'w:next', { 'w:val' => s.style_next }
72
- xml.send 'w:pPr' do
73
- xml.send 'w:keepNext', { 'w:val' => '0' }
74
- xml.send 'w:keepLines', { 'w:val' => '0' }
75
- xml.send 'w:widowControl', { 'w:val' => '1' }
76
- xml.send 'w:spacing', spacing_options(s) unless spacing_options(s).nil?
77
- xml.send 'w:contextualSpacing', { 'w:val' => '1' }
78
- xml.send 'w:jc', { 'w:val' => s.style_align.to_s } unless s.style_align.nil?
79
- xml.send 'w:ind', indentation_options(s) unless indentation_options(s).nil?
68
+ xml['w'].style({ 'w:styleId' => s.style_id, 'w:type' => 'paragraph' }) do
69
+ xml['w'].name({ 'w:val' => s.style_name })
70
+ xml['w'].basedOn({ 'w:val' => s.style_base })
71
+ xml['w'].next({ 'w:val' => s.style_next })
72
+ xml['w'].pPr do
73
+ xml['w'].keepNext({ 'w:val' => '0' })
74
+ xml['w'].keepLines({ 'w:val' => '0' })
75
+ xml['w'].widowControl({ 'w:val' => '1' })
76
+ xml['w'].spacing(spacing_options(s)) unless spacing_options(s).nil?
77
+ xml['w'].contextualSpacing({ 'w:val' => '1' })
78
+ xml['w'].jc({ 'w:val' => s.style_align.to_s }) unless s.style_align.nil?
79
+ xml['w'].ind(indentation_options(s)) unless indentation_options(s).nil?
80
80
  end
81
- xml.send 'w:rPr' do
82
- xml.send 'w:rFonts', font_options(s) unless s.style_font.nil?
83
- xml.send 'w:b', { 'w:val' => (s.style_bold ? '1' : '0') } unless s.style_bold.nil?
84
- xml.send 'w:i', { 'w:val' => (s.style_italic ? '1' : '0') } unless s.style_italic.nil?
85
- xml.send 'w:caps', { 'w:val' => (s.style_caps ? '1' : '0') } unless s.style_caps.nil?
86
- xml.send 'w:color', { 'w:val' => s.style_color } unless s.style_color.nil?
87
- xml.send 'w:sz', { 'w:val' => s.style_size } unless s.style_size.nil?
88
- xml.send 'w:u', { 'w:val' => (s.style_underline ? 'single' : 'none') } unless s.style_underline.nil?
81
+ xml['w'].rPr do
82
+ xml['w'].rFonts(font_options(s)) unless s.style_font.nil?
83
+ xml['w'].b({ 'w:val' => (s.style_bold ? '1' : '0') } ) unless s.style_bold.nil?
84
+ xml['w'].i({ 'w:val' => (s.style_italic ? '1' : '0') }) unless s.style_italic.nil?
85
+ xml['w'].caps({ 'w:val' => (s.style_caps ? '1' : '0') }) unless s.style_caps.nil?
86
+ xml['w'].color({ 'w:val' => s.style_color }) unless s.style_color.nil?
87
+ xml['w'].sz({ 'w:val' => s.style_size }) unless s.style_size.nil?
88
+ xml['w'].u({ 'w:val' => (s.style_underline ? 'single' : 'none') }) unless s.style_underline.nil?
89
89
  end
90
90
  end
91
91
  end
92
92
 
93
93
  #============ TABLE STYLES ================================
94
94
 
95
- xml.send 'w:style', { 'w:styleId' => 'DefaultTable', 'w:type' => 'table' } do
96
- xml.send 'w:basedOn', { 'w:val' => 'TableNormal' }
97
- xml.send 'w:tblPr' do
98
- xml.send 'w:tblStyleRowBandSize', { 'w:val' => '1' }
99
- xml.send 'w:tblStyleColBandSize', { 'w:val' => '1' }
95
+ xml['w'].style({ 'w:styleId' => 'DefaultTable', 'w:type' => 'table' }) do
96
+ xml['w'].basedOn({ 'w:val' => 'TableNormal' })
97
+ xml['w'].tblPr do
98
+ xml['w'].tblStyleRowBandSize({ 'w:val' => '1' })
99
+ xml['w'].tblStyleColBandSize({ 'w:val' => '1' })
100
100
  end
101
101
  %w(band1Horz band1Vert band2Horz band2Vert).each do |type|
102
- xml.send 'w:tblStylePr', { 'w:type' => type }
102
+ xml['w'].tblStylePr({ 'w:type' => type })
103
103
  end
104
104
  %w(firstCol firstRow lastCol lastRow).each do |type|
105
- xml.send 'w:tblStylePr', { 'w:type' => type }
105
+ xml['w'].tblStylePr({ 'w:type' => type })
106
106
  end
107
107
  %w(neCell nwCell seCell swCell).each do |type|
108
- xml.send 'w:tblStylePr', { 'w:type' => type }
108
+ xml['w'].tblStylePr({ 'w:type' => type })
109
109
  end
110
110
  end
111
111
 
@@ -1,3 +1,3 @@
1
1
  module Caracal
2
- VERSION = '1.0.13'
2
+ VERSION = '1.1.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caracal
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.13
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trade Infomatics