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 +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +2 -2
- data/lib/caracal/document.rb +1 -1
- data/lib/caracal/renderers/core_renderer.rb +1 -1
- data/lib/caracal/renderers/document_renderer.rb +102 -102
- data/lib/caracal/renderers/fonts_renderer.rb +2 -2
- data/lib/caracal/renderers/footer_renderer.rb +15 -15
- data/lib/caracal/renderers/numbering_renderer.rb +16 -16
- data/lib/caracal/renderers/settings_renderer.rb +5 -5
- data/lib/caracal/renderers/styles_renderer.rb +56 -56
- data/lib/caracal/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 718806bf68883db5fcc8368a9494bb3235d6b39f
|
4
|
+
data.tar.gz: 617abc80e867466e960ca952c4b12a799741470a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a3f5d8804e51338f20f7167c1c14cc01bd9ed57a7d3765df79d29053fb796a2e7b76ed0896a35e90118cb1d22df59db97ac6299a2e7d042f3d1b1a6231d61b4
|
7
|
+
data.tar.gz: a3b4ceeb74433b5a34248a3208f6d5a8d803c0d7dd4eda033068b66708e22cf01e9d1839754e89b243edd28032eebff70c4b49f1e43e3e203759f0b8202d4203
|
data/CHANGELOG.md
CHANGED
@@ -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
|
267
|
-
height
|
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
|
```
|
data/lib/caracal/document.rb
CHANGED
@@ -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
|
21
|
-
xml
|
22
|
-
xml
|
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
|
33
|
+
xml['w'].sectPr do
|
34
34
|
if document.page_number_show
|
35
35
|
if rel = document.find_relationship('footer1.xml')
|
36
|
-
xml
|
36
|
+
xml['w'].footerReference({ 'r:id' => rel.formatted_id, 'w:type' => 'default' })
|
37
37
|
end
|
38
38
|
end
|
39
|
-
xml
|
40
|
-
xml
|
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
|
76
|
+
xml['w'].rPr do
|
77
77
|
unless attrs.empty?
|
78
|
-
xml
|
79
|
-
xml
|
80
|
-
xml
|
81
|
-
xml
|
82
|
-
xml
|
83
|
-
xml
|
84
|
-
xml
|
85
|
-
xml
|
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
|
88
|
+
xml['w'].rFonts( { 'w:ascii' => f, 'w:hAnsi' => f, 'w:eastAsia' => f, 'w:cs' => f })
|
89
89
|
end
|
90
90
|
end
|
91
|
-
xml
|
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
|
144
|
-
xml
|
145
|
-
xml
|
146
|
-
xml
|
147
|
-
xml
|
148
|
-
xml
|
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
|
151
|
-
xml
|
152
|
-
xml
|
153
|
-
xml
|
154
|
-
xml
|
155
|
-
xml
|
156
|
-
xml
|
157
|
-
xml
|
158
|
-
xml
|
159
|
-
xml
|
160
|
-
xml
|
161
|
-
xml
|
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
|
164
|
-
xml
|
165
|
-
xml
|
166
|
-
xml
|
167
|
-
xml
|
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
|
171
|
-
xml
|
172
|
-
xml
|
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
|
175
|
-
xml
|
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
|
184
|
-
xml
|
185
|
-
xml
|
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
|
193
|
-
xml
|
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
|
201
|
-
xml
|
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
|
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
|
224
|
-
xml
|
225
|
-
xml
|
226
|
-
xml
|
227
|
-
xml
|
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
|
230
|
-
xml
|
231
|
-
xml
|
232
|
-
xml
|
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
|
245
|
-
xml
|
246
|
-
xml
|
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
|
251
|
-
xml
|
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
|
260
|
-
xml
|
261
|
-
xml
|
262
|
-
xml
|
263
|
-
xml
|
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
|
277
|
-
xml
|
278
|
-
xml
|
279
|
-
xml
|
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
|
286
|
+
xml['w'].r run_options do
|
287
287
|
render_run_attributes(xml, model, false)
|
288
|
-
xml
|
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
|
298
|
-
xml
|
299
|
-
xml
|
300
|
-
xml
|
301
|
-
xml
|
302
|
-
xml
|
303
|
-
xml
|
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
|
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.
|
313
|
+
xml['w'].method_missing "#{ Caracal::Core::Models::BorderModel.formatted_type(m) }", options
|
314
314
|
end
|
315
315
|
end
|
316
316
|
end
|
317
|
-
xml
|
318
|
-
xml
|
317
|
+
xml['w'].tblLayout({ 'w:type' => 'fixed' })
|
318
|
+
xml['w'].tblLook({ 'w:val' => '0600' })
|
319
319
|
end
|
320
|
-
xml
|
320
|
+
xml['w'].tblGrid do
|
321
321
|
model.rows.first.each do |tc|
|
322
|
-
xml
|
322
|
+
xml['w'].gridCol({ 'w:w' => tc.cell_width })
|
323
323
|
end
|
324
|
-
xml
|
325
|
-
xml
|
324
|
+
xml['w'].tblGridChange({ 'w:id' => '0' }) do
|
325
|
+
xml['w'].tblGrid do
|
326
326
|
model.rows.first.each do |tc|
|
327
|
-
xml
|
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
|
333
|
+
xml['w'].tr do
|
334
334
|
row.each do |tc|
|
335
|
-
xml
|
336
|
-
xml.
|
337
|
-
xml
|
338
|
-
xml
|
339
|
-
xml
|
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.
|
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
|
19
|
+
xml['w'].fonts root_options do
|
20
20
|
document.fonts.each do |font|
|
21
|
-
xml
|
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
|
20
|
-
xml
|
21
|
-
xml
|
22
|
-
xml
|
23
|
-
xml
|
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
|
27
|
-
xml
|
28
|
-
xml
|
26
|
+
xml['w'].r run_options do
|
27
|
+
xml['w'].rPr do
|
28
|
+
xml['w'].rStyle({ 'w:val' => 'PageNumber' })
|
29
29
|
end
|
30
|
-
xml
|
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
|
36
|
-
xml
|
37
|
-
xml
|
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
|
41
|
-
xml
|
42
|
-
xml
|
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
|
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
|
26
|
-
xml
|
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
|
30
|
-
xml
|
31
|
-
xml
|
32
|
-
xml
|
33
|
-
xml
|
34
|
-
xml
|
35
|
-
xml
|
36
|
-
xml
|
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
|
39
|
-
xml
|
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
|
50
|
-
xml
|
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
|
20
|
-
xml
|
21
|
-
xml
|
22
|
-
xml
|
23
|
-
xml
|
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
|
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
|
28
|
-
xml
|
29
|
-
xml
|
30
|
-
xml
|
31
|
-
xml
|
32
|
-
xml
|
33
|
-
xml
|
34
|
-
xml
|
35
|
-
xml
|
36
|
-
xml
|
37
|
-
xml
|
38
|
-
xml
|
39
|
-
xml
|
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
|
43
|
-
xml
|
44
|
-
xml
|
45
|
-
xml
|
46
|
-
xml
|
47
|
-
xml
|
48
|
-
xml
|
49
|
-
xml
|
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
|
54
|
-
xml
|
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
|
57
|
-
xml
|
58
|
-
xml
|
59
|
-
xml
|
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
|
69
|
-
xml
|
70
|
-
xml
|
71
|
-
xml
|
72
|
-
xml
|
73
|
-
xml
|
74
|
-
xml
|
75
|
-
xml
|
76
|
-
xml
|
77
|
-
xml
|
78
|
-
xml
|
79
|
-
xml
|
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
|
82
|
-
xml
|
83
|
-
xml
|
84
|
-
xml
|
85
|
-
xml
|
86
|
-
xml
|
87
|
-
xml
|
88
|
-
xml
|
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
|
96
|
-
xml
|
97
|
-
xml
|
98
|
-
xml
|
99
|
-
xml
|
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
|
102
|
+
xml['w'].tblStylePr({ 'w:type' => type })
|
103
103
|
end
|
104
104
|
%w(firstCol firstRow lastCol lastRow).each do |type|
|
105
|
-
xml
|
105
|
+
xml['w'].tblStylePr({ 'w:type' => type })
|
106
106
|
end
|
107
107
|
%w(neCell nwCell seCell swCell).each do |type|
|
108
|
-
xml
|
108
|
+
xml['w'].tblStylePr({ 'w:type' => type })
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
data/lib/caracal/version.rb
CHANGED