caracal 1.0.13 → 1.1.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.
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