rodf 0.3.6 → 0.3.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +1 -1
- data/Gemfile +1 -1
- data/Manifest +2 -1
- data/README.md +100 -0
- data/Rakefile +2 -2
- data/lib/odf/container.rb +1 -1
- data/lib/odf/document.rb +1 -1
- data/lib/odf/property.rb +58 -5
- data/lib/odf/table.rb +2 -2
- data/rodf.gemspec +12 -11
- data/spec/file_storage_spec.rb +47 -0
- data/spec/property_spec.rb +151 -24
- data/spec/table_spec.rb +13 -0
- metadata +10 -9
- data/README.rdoc +0 -98
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6df39b5334145e202ec1e0994066867281ff199
|
4
|
+
data.tar.gz: b3aa43af22b6ff114d617ac829ca8b6f666e2d1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2e0fea2bb28a9b6255f2944b250a1e2e013edffdcdba0fd9626146ec9f4ad53b8b7e000657cb2eea967f4ee0bf77875535236215cf12c00671e5bba03191504
|
7
|
+
data.tar.gz: d089d0a704c5339380b17827140a152ceff5c63dcdc9d00a4043e808f8b3c017cafd9fdba65f89325b43aaee2c13c95ae6d4d73c3249678b048622ca1ec3782c
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
v0.3.7 Update dependencies for Rails 5
|
1
2
|
v0.3.6. Resulting ODF files as bitstrings
|
2
3
|
v0.3.5. Allows current libraries
|
3
4
|
v0.3.4. Procedural cell styling
|
@@ -14,4 +15,3 @@ v0.1.3. Dependency fix (by Merul Patel)
|
|
14
15
|
v0.1.2. Cell span
|
15
16
|
v0.1.1. Basic spreadsheet styling support
|
16
17
|
v0.1. First version with very basic support for spreadsheet generation
|
17
|
-
|
data/Gemfile
CHANGED
data/Manifest
CHANGED
@@ -2,7 +2,7 @@ CHANGELOG
|
|
2
2
|
Gemfile
|
3
3
|
LICENSE.LGPL
|
4
4
|
Manifest
|
5
|
-
README.
|
5
|
+
README.md
|
6
6
|
Rakefile
|
7
7
|
lib/odf/cell.rb
|
8
8
|
lib/odf/column.rb
|
@@ -30,6 +30,7 @@ lib/odf/text.rb
|
|
30
30
|
rodf.gemspec
|
31
31
|
spec/cell_spec.rb
|
32
32
|
spec/data_style_spec.rb
|
33
|
+
spec/file_storage_spec.rb
|
33
34
|
spec/hyperlink_spec.rb
|
34
35
|
spec/master_page_spec.rb
|
35
36
|
spec/page_layout_spec.rb
|
data/README.md
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
# rODF
|
2
|
+
|
3
|
+
This is a library for writing to ODF output from Ruby. It currently only
|
4
|
+
supports creating spreadsheets (ODS) and text documents (ODT). Slide shows (ODP)
|
5
|
+
may be added some time in the future.
|
6
|
+
|
7
|
+
Some knowledge of the [ODF spec](http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html) is required.
|
8
|
+
|
9
|
+
This is NOT an ODF reading library.
|
10
|
+
|
11
|
+
### Installation
|
12
|
+
|
13
|
+
You should be able to install the latest stable version by saying something like
|
14
|
+
|
15
|
+
gem install rodf
|
16
|
+
|
17
|
+
### How do I use it?
|
18
|
+
|
19
|
+
rODF works pretty much like Builder, but with ODF-aware constructs. Try this:
|
20
|
+
|
21
|
+
require 'odf/spreadsheet'
|
22
|
+
|
23
|
+
ODF::Spreadsheet.file("my-spreadsheet.ods") do
|
24
|
+
table 'My first table from Ruby' do
|
25
|
+
row {cell 'Hello, rODF world!' }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
Some basic formatting is also possible:
|
30
|
+
|
31
|
+
require 'odf/spreadsheet'
|
32
|
+
|
33
|
+
ODF::Spreadsheet.file("my-spreadsheet.ods") do
|
34
|
+
style 'red-cell', :family => :cell do
|
35
|
+
property :text, 'font-weight' => 'bold', 'color' => '#ff0000'
|
36
|
+
end
|
37
|
+
table 'Red text table' do
|
38
|
+
row {cell 'Red', :style => 'red-cell' }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
Some basic conditional formatting is also possible:
|
43
|
+
|
44
|
+
require 'odf/spreadsheet'
|
45
|
+
|
46
|
+
ODF::Spreadsheet.file("my-spreadsheet.ods") do
|
47
|
+
|
48
|
+
office_style 'red-cell', :family => :cell do
|
49
|
+
property :text, 'font-weight' => 'bold', 'color' => '#ff0000'
|
50
|
+
end
|
51
|
+
|
52
|
+
office_style 'green-cell', :family => :cell do
|
53
|
+
property :text, 'font-weight' => 'bold', 'color' => '#00ff00'
|
54
|
+
end
|
55
|
+
|
56
|
+
# conditional formating must be defined as style and the value of
|
57
|
+
# apply-style-name must be an office_style
|
58
|
+
style 'cond1', :family => :cell do
|
59
|
+
|
60
|
+
property :conditional,
|
61
|
+
'condition' => 'cell-content()<0',
|
62
|
+
'apply-style-name' => 'red-cell'
|
63
|
+
|
64
|
+
property :conditional,
|
65
|
+
'condition' => 'cell-content()>0',
|
66
|
+
'apply-style-name' => 'green-cell'
|
67
|
+
end
|
68
|
+
|
69
|
+
table 'Red text table' do
|
70
|
+
row {cell 'Red force', :style => 'red-cell' }
|
71
|
+
row {cell '-4', :type => :float, :style => 'cond1' }
|
72
|
+
row {cell '0', :type => :float, :style => 'cond1' }
|
73
|
+
row {cell '5', :type => :float, :style => 'cond1' }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
### Procedural style
|
78
|
+
|
79
|
+
The declarative style shown above is just syntatic sugar. A more procedural
|
80
|
+
style can also be used. Like so:
|
81
|
+
|
82
|
+
require 'odf/spreadsheet'
|
83
|
+
|
84
|
+
ss = ODF::Spreadsheet.new
|
85
|
+
t = ss.table 'My first table from Ruby'
|
86
|
+
r = t.row
|
87
|
+
c = r.cell 'Hello, rODF world!'
|
88
|
+
|
89
|
+
ss.write_to 'my-spreadsheet.ods'
|
90
|
+
|
91
|
+
Both styles can be mixed and matched at will:
|
92
|
+
|
93
|
+
require 'odf/spreadsheet'
|
94
|
+
|
95
|
+
ss = ODF::Spreadsheet.new
|
96
|
+
ss.table 'My first table from Ruby' do
|
97
|
+
row { cell 'Hello, rODF world!' }
|
98
|
+
end
|
99
|
+
|
100
|
+
ss.write_to 'my-spreadsheet.ods'
|
data/Rakefile
CHANGED
@@ -7,7 +7,7 @@ task :test => :spec
|
|
7
7
|
|
8
8
|
require 'echoe'
|
9
9
|
Echoe.new('rodf') do |gem|
|
10
|
-
gem.author = ["Thiago Arrais", "Foivos Zakkak"]
|
10
|
+
gem.author = ["Weston Ganger", "Thiago Arrais", "Foivos Zakkak"]
|
11
11
|
gem.email = "thiago.arrais@gmail.com"
|
12
12
|
gem.url = "http://github.com/thiagoarrais/rodf/tree"
|
13
13
|
gem.summary = "ODF generation library for Ruby"
|
@@ -15,7 +15,7 @@ Echoe.new('rodf') do |gem|
|
|
15
15
|
gem.runtime_dependencies = [
|
16
16
|
["builder", "~> 3.0"],
|
17
17
|
["rubyzip", "~> 1.0"],
|
18
|
-
["activesupport", ">= 3.0", "<
|
18
|
+
["activesupport", ">= 3.0", "< 6.0"]]
|
19
19
|
gem.development_dependencies = [
|
20
20
|
["rspec", "~> 2.9"],
|
21
21
|
["rspec_hpricot_matchers" , "~> 1.0"],
|
data/lib/odf/container.rb
CHANGED
data/lib/odf/document.rb
CHANGED
data/lib/odf/property.rb
CHANGED
@@ -24,11 +24,58 @@ module ODF
|
|
24
24
|
:text => 'text-properties',
|
25
25
|
:column => 'table-column-properties',
|
26
26
|
:row => 'table-row-properties',
|
27
|
+
:page_layout => 'page-layout-properties',
|
28
|
+
:header_footer => 'header-footer-properties',
|
29
|
+
:list_level => 'list-level-properties',
|
27
30
|
:conditional => 'map'}
|
28
31
|
TRANSLATED_SPECS = [:border_color, :border_style, :border_width]
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
+
|
33
|
+
ATTRIBUTES_TO_NAMESPACES = [[
|
34
|
+
['column-width', 'rotation-angle', 'text-underline-type', 'tab-stop-distance',
|
35
|
+
'condition', 'apply-style-name', 'base-cell-address', 'row-height',
|
36
|
+
'country-asian', 'country-complex', 'font-charset', 'font-charset-asian',
|
37
|
+
'font-charset-complex', 'font-family-asian', 'font-family-complex', 'font-family-generic',
|
38
|
+
'font-family-generic-asian', 'font-family-generic-complex', 'font-name', 'font-name-asian',
|
39
|
+
'font-name-complex', 'font-pitch', 'font-pitch-asian', 'font-pitch-complex', 'font-relief',
|
40
|
+
'font-size-asian', 'font-size-complex', 'font-size-rel', 'font-size-rel-asian',
|
41
|
+
'font-size-rel-complex', 'font-style-asian', 'font-style-complex', 'font-style-name',
|
42
|
+
'font-style-name-asian', 'font-style-name-complex', 'font-weight-asian', 'font-weight-complex',
|
43
|
+
'language-asian', 'language-complex', 'letter-kerning', 'rfc-language-tag',
|
44
|
+
'rfc-language-tag-asian', 'rfc-language-tag-complex', 'script-asian', 'script-complex',
|
45
|
+
'script-type', 'text-blinking', 'text-combine', 'text-combine-end-char',
|
46
|
+
'text-combine-start-char', 'text-emphasize', 'text-line-through-color',
|
47
|
+
'text-line-through-mode', 'text-line-through-style', 'text-line-through-text',
|
48
|
+
'text-line-through-text-style', 'text-line-through-type', 'text-line-through-width',
|
49
|
+
'text-outline', 'text-overline-color', 'text-overline-mode', 'text-overline-style',
|
50
|
+
'text-overline-type', 'text-overline-width', 'text-position', 'text-rotation-angle',
|
51
|
+
'text-rotation-scale', 'text-scale', 'text-underline-color', 'text-underline-mode',
|
52
|
+
'text-underline-style', 'text-underline-width', 'use-window-font-color',
|
53
|
+
'border-line-width', 'border-line-width-bottom', 'border-line-width-left',
|
54
|
+
'border-line-width-right', 'border-line-width-top', 'cell-protect', 'decimal-places',
|
55
|
+
'diagonal-bl-tr', 'diagonal-bl-tr-widths', 'diagonal-tl-br', 'diagonal-tl-br-widths',
|
56
|
+
'direction', 'glyph-orientation-vertical', 'print-content', 'repeat-content',
|
57
|
+
'rotation-align', 'shadow', 'shrink-to-fit', 'text-align-source',
|
58
|
+
'vertical-align', 'writing-mode', 'min-row-height', 'use-optimal-row-height',
|
59
|
+
'rel-column-width', 'use-optimal-column-width', 'auto-text-indent', 'background-transparency',
|
60
|
+
'font-independent-line-spacing', 'join-border', 'justify-single-word', 'line-break',
|
61
|
+
'line-height-at-least', 'line-spacing', 'page-number', 'punctuation-wrap', 'register-true',
|
62
|
+
'snap-to-layout-grid', 'text-autospace',
|
63
|
+
'writing-mode-automatic',
|
64
|
+
'first-page-number', 'footnote-max-height', 'layout-grid-base-height', 'layout-grid-base-width',
|
65
|
+
'layout-grid-color', 'layout-grid-display', 'layout-grid-lines', 'layout-grid-mode',
|
66
|
+
'layout-grid-print', 'layout-grid-ruby-below', 'layout-grid-ruby-height', 'layout-grid-snap-to',
|
67
|
+
'layout-grid-standard-mode', 'num-format', 'num-letter-sync', 'num-prefix', 'num-suffix',
|
68
|
+
'paper-tray-name', 'print', 'print-orientation', 'print-page-order',
|
69
|
+
'register-truth-ref-style-name', 'scale-to', 'scale-to-pages', 'table-centering',
|
70
|
+
'dynamic-spacing',
|
71
|
+
'ruby-align', 'ruby-position',
|
72
|
+
'editable', 'protect',
|
73
|
+
'may-break-between-rows', 'rel-width', 'width',
|
74
|
+
'vertical-pos', 'vertical-rel'], 'style'],
|
75
|
+
[['height', 'y'], 'svg'],
|
76
|
+
[['dont-balance-text-columns', 'list-level-position-and-space-mode', 'min-label-distance',
|
77
|
+
'min-label-width', 'space-before'], 'text'],
|
78
|
+
[['align', 'border-model', 'display'], 'table']]
|
32
79
|
|
33
80
|
def initialize(type, specs={})
|
34
81
|
@name = 'style:' + (PROPERTY_NAMES[type] || "#{type}-properties")
|
@@ -37,11 +84,17 @@ module ODF
|
|
37
84
|
|
38
85
|
def xml
|
39
86
|
specs = @specs.inject({}) do |acc, kv|
|
40
|
-
|
41
|
-
acc.merge prefix + ':' + kv.first => kv.last
|
87
|
+
acc.merge Property.lookup_namespace_for(kv.first) + ':' + kv.first => kv.last
|
42
88
|
end
|
43
89
|
Builder::XmlMarkup.new.tag! @name, specs
|
44
90
|
end
|
91
|
+
|
92
|
+
class << self
|
93
|
+
def lookup_namespace_for(property_name)
|
94
|
+
as = ATTRIBUTES_TO_NAMESPACES.select {|a| a[0].include? property_name}
|
95
|
+
as.empty? ? 'fo' : as[0][1]
|
96
|
+
end
|
97
|
+
end
|
45
98
|
private
|
46
99
|
def translate(specs)
|
47
100
|
result = specs.clone
|
data/lib/odf/table.rb
CHANGED
@@ -32,8 +32,8 @@ module ODF
|
|
32
32
|
end
|
33
33
|
|
34
34
|
alias create_row row
|
35
|
-
def row(&contents)
|
36
|
-
create_row(next_row) {instance_eval(&contents) if block_given?}
|
35
|
+
def row(options={}, &contents)
|
36
|
+
create_row(next_row, options) {instance_eval(&contents) if block_given?}
|
37
37
|
end
|
38
38
|
|
39
39
|
def xml
|
data/rodf.gemspec
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
# stub: rodf 0.3.7 ruby lib
|
2
3
|
|
3
4
|
Gem::Specification.new do |s|
|
4
5
|
s.name = "rodf"
|
5
|
-
s.version = "0.3.
|
6
|
+
s.version = "0.3.7"
|
6
7
|
|
7
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.
|
9
|
-
s.
|
9
|
+
s.require_paths = ["lib"]
|
10
|
+
s.authors = ["Weston Ganger, Thiago Arrais, Foivos Zakkak"]
|
11
|
+
s.date = "2016-08-30"
|
10
12
|
s.description = "ODF generation library for Ruby"
|
11
13
|
s.email = "thiago.arrais@gmail.com"
|
12
|
-
s.extra_rdoc_files = ["CHANGELOG", "LICENSE.LGPL", "README.
|
13
|
-
s.files = ["CHANGELOG", "Gemfile", "LICENSE.LGPL", "Manifest", "README.
|
14
|
+
s.extra_rdoc_files = ["CHANGELOG", "LICENSE.LGPL", "README.md", "lib/odf/cell.rb", "lib/odf/column.rb", "lib/odf/compatibility.rb", "lib/odf/container.rb", "lib/odf/data_style.rb", "lib/odf/document.rb", "lib/odf/hyperlink.rb", "lib/odf/master_page.rb", "lib/odf/page_layout.rb", "lib/odf/paragraph.rb", "lib/odf/paragraph_container.rb", "lib/odf/property.rb", "lib/odf/row.rb", "lib/odf/skeleton.rb", "lib/odf/skeleton/manifest.xml.erb", "lib/odf/skeleton/styles.pxml", "lib/odf/span.rb", "lib/odf/spreadsheet.rb", "lib/odf/style.rb", "lib/odf/style_section.rb", "lib/odf/tab.rb", "lib/odf/table.rb", "lib/odf/text.rb"]
|
15
|
+
s.files = ["CHANGELOG", "Gemfile", "LICENSE.LGPL", "Manifest", "README.md", "Rakefile", "lib/odf/cell.rb", "lib/odf/column.rb", "lib/odf/compatibility.rb", "lib/odf/container.rb", "lib/odf/data_style.rb", "lib/odf/document.rb", "lib/odf/hyperlink.rb", "lib/odf/master_page.rb", "lib/odf/page_layout.rb", "lib/odf/paragraph.rb", "lib/odf/paragraph_container.rb", "lib/odf/property.rb", "lib/odf/row.rb", "lib/odf/skeleton.rb", "lib/odf/skeleton/manifest.xml.erb", "lib/odf/skeleton/styles.pxml", "lib/odf/span.rb", "lib/odf/spreadsheet.rb", "lib/odf/style.rb", "lib/odf/style_section.rb", "lib/odf/tab.rb", "lib/odf/table.rb", "lib/odf/text.rb", "rodf.gemspec", "spec/cell_spec.rb", "spec/data_style_spec.rb", "spec/file_storage_spec.rb", "spec/hyperlink_spec.rb", "spec/master_page_spec.rb", "spec/page_layout_spec.rb", "spec/paragraph_spec.rb", "spec/property_spec.rb", "spec/row_spec.rb", "spec/skeleton_spec.rb", "spec/span_spec.rb", "spec/spec_helper.rb", "spec/spreadsheet_spec.rb", "spec/style_section_spec.rb", "spec/style_spec.rb", "spec/tab_spec.rb", "spec/table_spec.rb", "spec/text_spec.rb"]
|
14
16
|
s.homepage = "http://github.com/thiagoarrais/rodf/tree"
|
15
|
-
s.rdoc_options = ["--line-numbers", "--title", "Rodf", "--main", "README.
|
16
|
-
s.require_paths = ["lib"]
|
17
|
+
s.rdoc_options = ["--line-numbers", "--title", "Rodf", "--main", "README.md"]
|
17
18
|
s.rubyforge_project = "rodf"
|
18
|
-
s.rubygems_version = "2.
|
19
|
+
s.rubygems_version = "2.5.1"
|
19
20
|
s.summary = "ODF generation library for Ruby"
|
20
21
|
|
21
22
|
if s.respond_to? :specification_version then
|
@@ -24,14 +25,14 @@ Gem::Specification.new do |s|
|
|
24
25
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
25
26
|
s.add_runtime_dependency(%q<builder>, ["~> 3.0"])
|
26
27
|
s.add_runtime_dependency(%q<rubyzip>, ["~> 1.0"])
|
27
|
-
s.add_runtime_dependency(%q<activesupport>, ["<
|
28
|
+
s.add_runtime_dependency(%q<activesupport>, ["< 6.0", ">= 3.0"])
|
28
29
|
s.add_development_dependency(%q<rspec>, ["~> 2.9"])
|
29
30
|
s.add_development_dependency(%q<rspec_hpricot_matchers>, ["~> 1.0"])
|
30
31
|
s.add_development_dependency(%q<echoe>, ["~> 4.6"])
|
31
32
|
else
|
32
33
|
s.add_dependency(%q<builder>, ["~> 3.0"])
|
33
34
|
s.add_dependency(%q<rubyzip>, ["~> 1.0"])
|
34
|
-
s.add_dependency(%q<activesupport>, ["<
|
35
|
+
s.add_dependency(%q<activesupport>, ["< 6.0", ">= 3.0"])
|
35
36
|
s.add_dependency(%q<rspec>, ["~> 2.9"])
|
36
37
|
s.add_dependency(%q<rspec_hpricot_matchers>, ["~> 1.0"])
|
37
38
|
s.add_dependency(%q<echoe>, ["~> 4.6"])
|
@@ -39,7 +40,7 @@ Gem::Specification.new do |s|
|
|
39
40
|
else
|
40
41
|
s.add_dependency(%q<builder>, ["~> 3.0"])
|
41
42
|
s.add_dependency(%q<rubyzip>, ["~> 1.0"])
|
42
|
-
s.add_dependency(%q<activesupport>, ["<
|
43
|
+
s.add_dependency(%q<activesupport>, ["< 6.0", ">= 3.0"])
|
43
44
|
s.add_dependency(%q<rspec>, ["~> 2.9"])
|
44
45
|
s.add_dependency(%q<rspec_hpricot_matchers>, ["~> 1.0"])
|
45
46
|
s.add_dependency(%q<echoe>, ["~> 4.6"])
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# Copyright (c) 2010 Thiago Arrais
|
2
|
+
#
|
3
|
+
# This file is part of rODF.
|
4
|
+
#
|
5
|
+
# rODF is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU Lesser General Public License as
|
7
|
+
# published by the Free Software Foundation, either version 3 of
|
8
|
+
# the License, or (at your option) any later version.
|
9
|
+
|
10
|
+
# rODF is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU Lesser General Public License for more details.
|
14
|
+
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
16
|
+
# along with rODF. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
19
|
+
|
20
|
+
require 'odf/text'
|
21
|
+
require "tempfile"
|
22
|
+
|
23
|
+
describe "file storage" do
|
24
|
+
|
25
|
+
before do
|
26
|
+
@default_internal = Encoding.default_internal
|
27
|
+
@tempfilename = Tempfile.new("text").path
|
28
|
+
end
|
29
|
+
|
30
|
+
after do
|
31
|
+
Encoding.default_internal = @default_internal
|
32
|
+
File.unlink @tempfilename if File.exist? @tempfilename
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should store files on disk" do
|
36
|
+
ODF::Text.file(@tempfilename) {}
|
37
|
+
|
38
|
+
File.exist?(@tempfilename).should be true
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should work with Encoding.default_internal" do
|
42
|
+
Encoding.default_internal = "UTF-8"
|
43
|
+
|
44
|
+
ODF::Text.file(@tempfilename) {}
|
45
|
+
File.exist?(@tempfilename).should be true
|
46
|
+
end
|
47
|
+
end
|
data/spec/property_spec.rb
CHANGED
@@ -27,22 +27,32 @@ describe ODF::Property do
|
|
27
27
|
elem['fo:font-weight'].should == 'bold'
|
28
28
|
end
|
29
29
|
|
30
|
-
it "should prefix
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
30
|
+
it "should prefix style properties with looked up namespace" do
|
31
|
+
Hpricot(ODF::Property.new(:cell, 'rotation-angle' => '-90').xml).
|
32
|
+
at('//style:table-cell-properties')['style:rotation-angle'].should == '-90'
|
33
|
+
Hpricot(ODF::Property.new(:row, 'row-height' => '2cm').xml).
|
34
|
+
at('//style:table-row-properties')['style:row-height'].should == '2cm'
|
35
|
+
Hpricot(ODF::Property.new(:column, 'column-width' => '2cm').xml).
|
36
|
+
at('//style:table-column-properties')['style:column-width'].should == '2cm'
|
37
|
+
Hpricot(ODF::Property.new(:text, 'text-underline-type' => 'single').xml).
|
38
|
+
at('style:text-properties')['style:text-underline-type'].should == 'single'
|
39
|
+
Hpricot(ODF::Property.new(:paragraph, 'tab-stop-distance' => '0.4925in').xml).
|
40
|
+
at('style:paragraph-properties')['style:tab-stop-distance'].should == '0.4925in'
|
41
|
+
Hpricot(ODF::Property.new(:page_layout, 'border-line-width' => '2px').xml).
|
42
|
+
at('style:page-layout-properties')['style:border-line-width'].should == '2px'
|
43
|
+
Hpricot(ODF::Property.new(:header_footer, 'border-line-width' => '2px').xml).
|
44
|
+
at('style:header-footer-properties')['style:border-line-width'].should == '2px'
|
45
|
+
Hpricot(ODF::Property.new(:ruby, 'ruby-position' => 'above').xml).
|
46
|
+
at('style:ruby-properties')['style:ruby-position'].should == 'above'
|
47
|
+
Hpricot(ODF::Property.new(:section, 'editable' => true).xml).
|
48
|
+
at('style:section-properties')['style:editable'].should == 'true'
|
49
|
+
Hpricot(ODF::Property.new(:table, 'align' => 'left').xml).
|
50
|
+
at('style:table-properties')['table:align'].should == 'left'
|
51
|
+
Hpricot(ODF::Property.new(:list_level, 'space-before' => '2em').xml).
|
52
|
+
at('style:list-level-properties')['text:space-before'].should == '2em'
|
53
|
+
# style:graphic-properties
|
54
|
+
# style:chart-properties
|
55
|
+
# style:drawing-page-properties
|
46
56
|
end
|
47
57
|
|
48
58
|
it "should generate row properties tag" do
|
@@ -125,19 +135,136 @@ describe ODF::Property do
|
|
125
135
|
elem['fo:border-left'].should == "0.1in solid #ffff00"
|
126
136
|
end
|
127
137
|
|
128
|
-
it "should prefix underline property with style namespace" do
|
129
|
-
Hpricot(ODF::Property.new(:text, 'text-underline-type' => 'single').xml).
|
130
|
-
at('style:text-properties')['style:text-underline-type'].should == 'single'
|
131
|
-
end
|
132
|
-
|
133
138
|
it "should support paragraph properties" do
|
134
139
|
ODF::Property.new(:paragraph).xml.
|
135
140
|
should have_tag('style:paragraph-properties')
|
136
141
|
end
|
137
142
|
|
138
|
-
it "should
|
139
|
-
|
140
|
-
|
143
|
+
it "should know the namespace for style:text-properties style properties" do
|
144
|
+
#see http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#__RefHeading__1416402_253892949
|
145
|
+
['country-asian', 'country-complex', 'font-charset', 'font-charset-asian',
|
146
|
+
'font-charset-complex', 'font-family-asian', 'font-family-complex', 'font-family-generic',
|
147
|
+
'font-family-generic-asian', 'font-family-generic-complex', 'font-name', 'font-name-asian',
|
148
|
+
'font-name-complex', 'font-pitch', 'font-pitch-asian', 'font-pitch-complex', 'font-relief',
|
149
|
+
'font-size-asian', 'font-size-complex', 'font-size-rel', 'font-size-rel-asian',
|
150
|
+
'font-size-rel-complex', 'font-style-asian', 'font-style-complex', 'font-style-name',
|
151
|
+
'font-style-name-asian', 'font-style-name-complex', 'font-weight-asian', 'font-weight-complex',
|
152
|
+
'language-asian', 'language-complex', 'letter-kerning', 'rfc-language-tag',
|
153
|
+
'rfc-language-tag-asian', 'rfc-language-tag-complex', 'script-asian', 'script-complex',
|
154
|
+
'script-type', 'text-blinking', 'text-combine', 'text-combine-end-char',
|
155
|
+
'text-combine-start-char', 'text-emphasize', 'text-line-through-color',
|
156
|
+
'text-line-through-mode', 'text-line-through-style', 'text-line-through-text',
|
157
|
+
'text-line-through-text-style', 'text-line-through-type', 'text-line-through-width',
|
158
|
+
'text-outline', 'text-overline-color', 'text-overline-mode', 'text-overline-style',
|
159
|
+
'text-overline-type', 'text-overline-width', 'text-position', 'text-rotation-angle',
|
160
|
+
'text-rotation-scale', 'text-scale', 'text-underline-color', 'text-underline-mode',
|
161
|
+
'text-underline-style', 'text-underline-type', 'text-underline-width', 'use-window-font-color'].
|
162
|
+
each do |prop|
|
163
|
+
ODF::Property.lookup_namespace_for(prop).should == 'style'
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should know the namespace for style:table-cell-properties style properties" do
|
168
|
+
#see http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#__RefHeading__1416518_253892949
|
169
|
+
['border-line-width', 'border-line-width-bottom', 'border-line-width-left',
|
170
|
+
'border-line-width-right', 'border-line-width-top', 'cell-protect', 'decimal-places',
|
171
|
+
'diagonal-bl-tr', 'diagonal-bl-tr-widths', 'diagonal-tl-br', 'diagonal-tl-br-widths',
|
172
|
+
'direction', 'glyph-orientation-vertical', 'print-content', 'repeat-content',
|
173
|
+
'rotation-align', 'rotation-angle', 'shadow', 'shrink-to-fit', 'text-align-source',
|
174
|
+
'vertical-align', 'writing-mode'].
|
175
|
+
each do |prop|
|
176
|
+
ODF::Property.lookup_namespace_for(prop).should == 'style'
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
it "should know the namespace for style:table-cell-properties style properties" do
|
181
|
+
#see http://docs.oasis-open.org/office/v1.2/os/opendocument-v1.2-os-part1.html#__refheading__1416516_253892949
|
182
|
+
['min-row-height', 'row-height', 'use-optimal-row-height'].each do |prop|
|
183
|
+
ODF::Property.lookup_namespace_for(prop).should == 'style'
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should know the namespace for style:table-row-properties style properties" do
|
188
|
+
# see http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#__RefHeading__1416514_253892949
|
189
|
+
['column-width', 'rel-column-width', 'use-optimal-column-width'].each do |prop|
|
190
|
+
ODF::Property.lookup_namespace_for(prop).should == 'style'
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
it "should know the namespace for style:paragraph-properties style properties" do
|
195
|
+
# see http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#__RefHeading__1416494_253892949
|
196
|
+
['auto-text-indent', 'background-transparency', 'border-line-width', 'border-line-width-bottom',
|
197
|
+
'border-line-width-left', 'border-line-width-right', 'border-line-width-top',
|
198
|
+
'font-independent-line-spacing', 'join-border', 'justify-single-word', 'line-break',
|
199
|
+
'line-height-at-least', 'line-spacing', 'page-number', 'punctuation-wrap', 'register-true',
|
200
|
+
'shadow', 'snap-to-layout-grid', 'tab-stop-distance', 'text-autospace', 'vertical-align',
|
201
|
+
'writing-mode', 'writing-mode-automatic'].
|
202
|
+
each do |prop|
|
203
|
+
ODF::Property.lookup_namespace_for(prop).should == 'style'
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
it "should know the namespace for style:page-layout-properties style properties" do
|
208
|
+
# see http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#__RefHeading__1416486_253892949
|
209
|
+
['border-line-width', 'border-line-width-bottom', 'border-line-width-left', 'border-line-width-right',
|
210
|
+
'border-line-width-top', 'first-page-number', 'footnote-max-height', 'layout-grid-base-height',
|
211
|
+
'layout-grid-base-width', 'layout-grid-color', 'layout-grid-display', 'layout-grid-lines',
|
212
|
+
'layout-grid-mode', 'layout-grid-print', 'layout-grid-ruby-below', 'layout-grid-ruby-height',
|
213
|
+
'layout-grid-snap-to', 'layout-grid-standard-mode', 'num-format', 'num-letter-sync',
|
214
|
+
'num-prefix', 'num-suffix', 'paper-tray-name', 'print', 'print-orientation', 'print-page-order',
|
215
|
+
'register-truth-ref-style-name', 'scale-to', 'scale-to-pages', 'shadow', 'table-centering',
|
216
|
+
'writing-mode'].
|
217
|
+
each do |prop|
|
218
|
+
ODF::Property.lookup_namespace_for(prop).should == 'style'
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
it "should know the namespace for style:header-footer-properties style and svg properties" do
|
223
|
+
# see http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#__RefHeading__1416492_253892949
|
224
|
+
['border-line-width', 'border-line-width-bottom', 'border-line-width-left', 'border-line-width-right',
|
225
|
+
'border-line-width-top', 'dynamic-spacing', 'shadow'].
|
226
|
+
each do |prop|
|
227
|
+
ODF::Property.lookup_namespace_for(prop).should == 'style'
|
228
|
+
end
|
229
|
+
ODF::Property.lookup_namespace_for('height').should == 'svg'
|
230
|
+
end
|
231
|
+
|
232
|
+
it "should know the namespace for style:ruby-properties style properties" do
|
233
|
+
# see http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#__RefHeading__1416502_253892949
|
234
|
+
['ruby-align', 'ruby-position'].each do |prop|
|
235
|
+
ODF::Property.lookup_namespace_for(prop).should == 'style'
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
it "should know the namespace for style:section-properties style and text properties" do
|
240
|
+
# see http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#element-style_section-properties
|
241
|
+
['editable', 'protect', 'writing-mode'].each do |prop|
|
242
|
+
ODF::Property.lookup_namespace_for(prop).should == 'style'
|
243
|
+
end
|
244
|
+
ODF::Property.lookup_namespace_for('dont-balance-text-columns').should == 'text'
|
245
|
+
end
|
246
|
+
|
247
|
+
it "should know the namespace for style:table-properties style and table properties" do
|
248
|
+
# see http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#element-style_table-properties
|
249
|
+
['may-break-between-rows', 'page-number', 'rel-width', 'shadow', 'width', 'writing-mode'].
|
250
|
+
each do |prop|
|
251
|
+
ODF::Property.lookup_namespace_for(prop).should == 'style'
|
252
|
+
end
|
253
|
+
['align', 'border-model', 'display'].each do |prop|
|
254
|
+
ODF::Property.lookup_namespace_for(prop).should == 'table'
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
it "should know the namespace for style:list-level-properties style, svg and text properties" do
|
259
|
+
['font-name', 'vertical-pos', 'vertical-rel'].each do |prop|
|
260
|
+
ODF::Property.lookup_namespace_for(prop).should == 'style'
|
261
|
+
end
|
262
|
+
ODF::Property.lookup_namespace_for('y').should == 'svg'
|
263
|
+
['list-level-position-and-space-mode', 'min-label-distance', 'min-label-width',
|
264
|
+
'space-before'].
|
265
|
+
each do |prop|
|
266
|
+
ODF::Property.lookup_namespace_for(prop).should == 'text'
|
267
|
+
end
|
141
268
|
end
|
142
269
|
end
|
143
270
|
|
data/spec/table_spec.rb
CHANGED
@@ -74,4 +74,17 @@ describe ODF::Table do
|
|
74
74
|
output.should have_tag('//table:table-row')
|
75
75
|
output.should have_tag('//table:table-cell')
|
76
76
|
end
|
77
|
+
|
78
|
+
it "should have allow row styles" do
|
79
|
+
output = ODF::Table.create('MyTable') do
|
80
|
+
row style: :bold do
|
81
|
+
cell
|
82
|
+
end
|
83
|
+
row style: :underline do
|
84
|
+
cell
|
85
|
+
end
|
86
|
+
end
|
87
|
+
output.should include('table:table-row table:style-name="bold"')
|
88
|
+
output.should include('table:table-row table:style-name="underline"')
|
89
|
+
end
|
77
90
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rodf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Thiago Arrais, Foivos Zakkak
|
7
|
+
- Weston Ganger, Thiago Arrais, Foivos Zakkak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: builder
|
@@ -47,7 +47,7 @@ dependencies:
|
|
47
47
|
version: '3.0'
|
48
48
|
- - "<"
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version: '
|
50
|
+
version: '6.0'
|
51
51
|
type: :runtime
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -57,7 +57,7 @@ dependencies:
|
|
57
57
|
version: '3.0'
|
58
58
|
- - "<"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
60
|
+
version: '6.0'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: rspec
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,7 +107,7 @@ extensions: []
|
|
107
107
|
extra_rdoc_files:
|
108
108
|
- CHANGELOG
|
109
109
|
- LICENSE.LGPL
|
110
|
-
- README.
|
110
|
+
- README.md
|
111
111
|
- lib/odf/cell.rb
|
112
112
|
- lib/odf/column.rb
|
113
113
|
- lib/odf/compatibility.rb
|
@@ -136,7 +136,7 @@ files:
|
|
136
136
|
- Gemfile
|
137
137
|
- LICENSE.LGPL
|
138
138
|
- Manifest
|
139
|
-
- README.
|
139
|
+
- README.md
|
140
140
|
- Rakefile
|
141
141
|
- lib/odf/cell.rb
|
142
142
|
- lib/odf/column.rb
|
@@ -164,6 +164,7 @@ files:
|
|
164
164
|
- rodf.gemspec
|
165
165
|
- spec/cell_spec.rb
|
166
166
|
- spec/data_style_spec.rb
|
167
|
+
- spec/file_storage_spec.rb
|
167
168
|
- spec/hyperlink_spec.rb
|
168
169
|
- spec/master_page_spec.rb
|
169
170
|
- spec/page_layout_spec.rb
|
@@ -188,7 +189,7 @@ rdoc_options:
|
|
188
189
|
- "--title"
|
189
190
|
- Rodf
|
190
191
|
- "--main"
|
191
|
-
- README.
|
192
|
+
- README.md
|
192
193
|
require_paths:
|
193
194
|
- lib
|
194
195
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -203,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
203
204
|
version: '1.2'
|
204
205
|
requirements: []
|
205
206
|
rubyforge_project: rodf
|
206
|
-
rubygems_version: 2.
|
207
|
+
rubygems_version: 2.5.1
|
207
208
|
signing_key:
|
208
209
|
specification_version: 4
|
209
210
|
summary: ODF generation library for Ruby
|
data/README.rdoc
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
= rODF
|
2
|
-
|
3
|
-
This is a library for writing to ODF output with Ruby. It currently only
|
4
|
-
supports creating spreadsheets (ODS) and text documents (ODT). Slide shows (ODP)
|
5
|
-
may be added some time in the future.
|
6
|
-
|
7
|
-
This is NOT an ODF reading library.
|
8
|
-
|
9
|
-
=== Installation
|
10
|
-
|
11
|
-
You should be able to install the latest stable version by saying something like
|
12
|
-
|
13
|
-
sudo gem install rodf
|
14
|
-
|
15
|
-
=== How do I use it?
|
16
|
-
|
17
|
-
rODF works pretty much like Builder, but with ODF-aware constructs. Try this:
|
18
|
-
|
19
|
-
require 'odf/spreadsheet'
|
20
|
-
|
21
|
-
ODF::Spreadsheet.file("my-spreadsheet.ods") do
|
22
|
-
table 'My first table from Ruby' do
|
23
|
-
row {cell 'Hello, rODF world!' }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
Some basic formatting is also possible:
|
28
|
-
|
29
|
-
require 'odf/spreadsheet'
|
30
|
-
|
31
|
-
ODF::Spreadsheet.file("my-spreadsheet.ods") do
|
32
|
-
style 'red-cell', :family => :cell do
|
33
|
-
property :text, 'font-weight' => 'bold', 'color' => '#ff0000'
|
34
|
-
end
|
35
|
-
table 'Red text table' do
|
36
|
-
row {cell 'Red', :style => 'red-cell' }
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
Some basic conditional formatting is also possible:
|
41
|
-
|
42
|
-
require 'odf/spreadsheet'
|
43
|
-
|
44
|
-
ODF::Spreadsheet.file("my-spreadsheet.ods") do
|
45
|
-
|
46
|
-
office_style 'red-cell', :family => :cell do
|
47
|
-
property :text, 'font-weight' => 'bold', 'color' => '#ff0000'
|
48
|
-
end
|
49
|
-
|
50
|
-
office_style 'green-cell', :family => :cell do
|
51
|
-
property :text, 'font-weight' => 'bold', 'color' => '#00ff00'
|
52
|
-
end
|
53
|
-
|
54
|
-
# conditional formating must be defined as style and the value of
|
55
|
-
# apply-style-name must be an office_style
|
56
|
-
style 'cond1', :family => :cell do
|
57
|
-
|
58
|
-
property :conditional,
|
59
|
-
'condition' => 'cell-content()<0',
|
60
|
-
'apply-style-name' => 'red-cell'
|
61
|
-
|
62
|
-
property :conditional,
|
63
|
-
'condition' => 'cell-content()>0',
|
64
|
-
'apply-style-name' => 'green-cell'
|
65
|
-
end
|
66
|
-
|
67
|
-
table 'Red text table' do
|
68
|
-
row {cell 'Red force', :style => 'red-cell' }
|
69
|
-
row {cell '-4', :type => :float, :style => 'cond1' }
|
70
|
-
row {cell '0', :type => :float, :style => 'cond1' }
|
71
|
-
row {cell '5', :type => :float, :style => 'cond1' }
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
==== Procedural style
|
76
|
-
|
77
|
-
The declarative style shown above is just syntatic sugar. A more procedural
|
78
|
-
style can also be used. Like so:
|
79
|
-
|
80
|
-
require 'odf/spreadsheet'
|
81
|
-
|
82
|
-
ss = ODF::Spreadsheet.new
|
83
|
-
t = ss.table 'My first table from Ruby'
|
84
|
-
r = t.row
|
85
|
-
c = r.cell 'Hello, rODF world!'
|
86
|
-
|
87
|
-
ss.write_to 'my-spreadsheet.ods'
|
88
|
-
|
89
|
-
Both styles can be mixed and matched at will:
|
90
|
-
|
91
|
-
require 'odf/spreadsheet'
|
92
|
-
|
93
|
-
ss = ODF::Spreadsheet.new
|
94
|
-
ss.table 'My first table from Ruby' do
|
95
|
-
row { cell 'Hello, rODF world!' }
|
96
|
-
end
|
97
|
-
|
98
|
-
ss.write_to 'my-spreadsheet.ods'
|