rodf 0.3.7 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +77 -0
  3. data/LICENSE +7 -0
  4. data/README.md +244 -64
  5. data/Rakefile +9 -17
  6. data/lib/rodf/cell.rb +171 -0
  7. data/lib/rodf/column.rb +21 -0
  8. data/lib/rodf/container.rb +18 -0
  9. data/lib/rodf/data_style.rb +46 -0
  10. data/lib/rodf/document.rb +133 -0
  11. data/lib/rodf/hyperlink.rb +33 -0
  12. data/lib/rodf/master_page.rb +11 -0
  13. data/lib/rodf/page_layout.rb +41 -0
  14. data/lib/rodf/paragraph.rb +28 -0
  15. data/lib/rodf/paragraph_container.rb +30 -0
  16. data/lib/rodf/property.rb +138 -0
  17. data/lib/rodf/row.rb +56 -0
  18. data/lib/{odf → rodf}/skeleton/manifest.xml.erb +0 -0
  19. data/lib/{odf → rodf}/skeleton/styles.pxml +0 -0
  20. data/lib/rodf/skeleton.rb +17 -0
  21. data/lib/rodf/span.rb +45 -0
  22. data/lib/rodf/spreadsheet.rb +113 -0
  23. data/lib/rodf/style.rb +77 -0
  24. data/lib/rodf/style_section.rb +33 -0
  25. data/lib/rodf/tab.rb +17 -0
  26. data/lib/rodf/table.rb +95 -0
  27. data/lib/rodf/text.rb +126 -0
  28. data/lib/rodf/version.rb +3 -0
  29. data/lib/rodf.rb +31 -0
  30. metadata +76 -115
  31. data/CHANGELOG +0 -17
  32. data/Gemfile +0 -9
  33. data/LICENSE.LGPL +0 -166
  34. data/Manifest +0 -48
  35. data/lib/odf/cell.rb +0 -104
  36. data/lib/odf/column.rb +0 -33
  37. data/lib/odf/compatibility.rb +0 -25
  38. data/lib/odf/container.rb +0 -57
  39. data/lib/odf/data_style.rb +0 -45
  40. data/lib/odf/document.rb +0 -67
  41. data/lib/odf/hyperlink.rb +0 -51
  42. data/lib/odf/master_page.rb +0 -33
  43. data/lib/odf/page_layout.rb +0 -39
  44. data/lib/odf/paragraph.rb +0 -46
  45. data/lib/odf/paragraph_container.rb +0 -35
  46. data/lib/odf/property.rb +0 -131
  47. data/lib/odf/row.rb +0 -44
  48. data/lib/odf/skeleton.rb +0 -34
  49. data/lib/odf/span.rb +0 -70
  50. data/lib/odf/spreadsheet.rb +0 -64
  51. data/lib/odf/style.rb +0 -65
  52. data/lib/odf/style_section.rb +0 -42
  53. data/lib/odf/tab.rb +0 -38
  54. data/lib/odf/table.rb +0 -50
  55. data/lib/odf/text.rb +0 -66
  56. data/rodf.gemspec +0 -48
  57. data/spec/cell_spec.rb +0 -189
  58. data/spec/data_style_spec.rb +0 -61
  59. data/spec/file_storage_spec.rb +0 -47
  60. data/spec/hyperlink_spec.rb +0 -62
  61. data/spec/master_page_spec.rb +0 -35
  62. data/spec/page_layout_spec.rb +0 -45
  63. data/spec/paragraph_spec.rb +0 -75
  64. data/spec/property_spec.rb +0 -270
  65. data/spec/row_spec.rb +0 -59
  66. data/spec/skeleton_spec.rb +0 -33
  67. data/spec/span_spec.rb +0 -65
  68. data/spec/spec_helper.rb +0 -23
  69. data/spec/spreadsheet_spec.rb +0 -123
  70. data/spec/style_section_spec.rb +0 -42
  71. data/spec/style_spec.rb +0 -109
  72. data/spec/tab_spec.rb +0 -34
  73. data/spec/table_spec.rb +0 -90
  74. data/spec/text_spec.rb +0 -79
@@ -1,25 +0,0 @@
1
- # Copyright (c) 2010-2012 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
- require 'builder'
18
-
19
- if !String.method_defined? :to_xs
20
- class String
21
- def to_xs
22
- Builder::XChar.encode(self)
23
- end
24
- end
25
- end
data/lib/odf/container.rb DELETED
@@ -1,57 +0,0 @@
1
- # Copyright (c) 2008 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 'rubygems'
19
- gem 'activesupport', '>= 3.0', '< 6.0'
20
-
21
- require 'active_support/inflector'
22
-
23
- module ODF
24
- class Container
25
- def self.contains(*stuffs_array)
26
- stuffs_array.map {|sym| sym.to_s}.each do |stuffs|
27
- stuff = stuffs.to_s.singularize
28
- stuff_class = eval(stuff.camelize)
29
-
30
- self.class_eval "
31
- def #{stuffs}
32
- @#{stuffs} ||= []
33
- end"
34
-
35
- self.class_eval "
36
- def #{stuff}(*args, &contents)
37
- c = #{stuff_class}.new(*args)
38
- c.instance_eval(&contents) if block_given?
39
- #{stuffs} << c
40
- c
41
- end"
42
-
43
- self.class_eval "
44
- def #{stuffs}_xml
45
- #{stuffs}.map {|c| c.xml}.join
46
- end"
47
- end
48
- end
49
-
50
- def self.create(*args, &contents)
51
- container = self.new(*args)
52
- container.instance_eval(&contents) if block_given?
53
- container.xml
54
- end
55
- end
56
- end
57
-
@@ -1,45 +0,0 @@
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 'rubygems'
19
-
20
- require 'builder'
21
-
22
- require 'odf/container'
23
- require 'odf/style_section'
24
-
25
- module ODF
26
- class DataStyle < Container
27
- contains :style_sections
28
-
29
- alias section style_section
30
-
31
- def initialize(name, type)
32
- @type, @name = type, name
33
- end
34
-
35
- def xml
36
- Builder::XmlMarkup.new.tag! "number:#{@type}-style", 'style:name' => @name do |xml|
37
- xml << style_sections_xml
38
- end
39
- end
40
-
41
- def method_missing(name, *args)
42
- section(name, *args)
43
- end
44
- end
45
- end
data/lib/odf/document.rb DELETED
@@ -1,67 +0,0 @@
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 'rubygems'
19
-
20
- require 'zip'
21
-
22
- require 'odf/container'
23
- require 'odf/skeleton'
24
- require 'odf/style'
25
-
26
- module ODF
27
- class Document < Container
28
- contains :styles, :default_styles, :office_styles
29
-
30
- def self.file(ods_file_name, &contents)
31
- (doc = new).instance_eval(&contents)
32
- doc.write_to ods_file_name
33
- end
34
-
35
- def write_to(ods_file_name)
36
- File.open(ods_file_name, 'wb') { |f| f << self.bytes }
37
- end
38
-
39
- def bytes
40
- buffer = Zip::OutputStream::write_buffer do |zio|
41
- zio.put_next_entry('META-INF/manifest.xml')
42
- zio << self.class.skeleton.manifest(self.class.doc_type)
43
-
44
- zio.put_next_entry('styles.xml')
45
- zio << self.class.skeleton.styles
46
- zio << self.office_styles_xml unless self.office_styles.empty?
47
- zio << "</office:styles> </office:document-styles>"
48
-
49
- zio.put_next_entry('content.xml')
50
- zio << self.xml
51
- end
52
-
53
- buffer.set_encoding('ASCII-8BIT')
54
- buffer.rewind
55
- buffer.sysread
56
- end
57
- private
58
- def self.skeleton
59
- @skeleton ||= Skeleton.new
60
- end
61
-
62
- def self.doc_type
63
- name.split('::').last.downcase
64
- end
65
- end
66
- end
67
-
data/lib/odf/hyperlink.rb DELETED
@@ -1,51 +0,0 @@
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 'rubygems'
19
- require 'builder'
20
-
21
- require 'odf/paragraph_container'
22
-
23
- module ODF
24
- class Hyperlink < ParagraphContainer
25
- def initialize(first, second = {})
26
- if second.instance_of?(Hash) && second.empty?
27
- @href = first
28
- else
29
- span(first)
30
- @href = second.instance_of?(Hash) ? second[:href] : second
31
- end
32
- end
33
-
34
- def xml
35
- Builder::XmlMarkup.new.text:a, 'xlink:href' => @href do |a|
36
- a << content_parts_xml
37
- end
38
- end
39
- end
40
-
41
- class ParagraphContainer < Container
42
- def link(*args)
43
- l = Hyperlink.new(*args)
44
- yield l if block_given?
45
- content_parts << l
46
- l
47
- end
48
- alias a link
49
- end
50
- end
51
-
@@ -1,33 +0,0 @@
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 'rubygems'
19
- require 'builder'
20
-
21
- module ODF
22
- class MasterPage
23
- def initialize(name, opts = {})
24
- @name, @layout = name, opts[:layout]
25
- end
26
-
27
- def xml
28
- Builder::XmlMarkup.new.tag! 'style:master-page',
29
- 'style:name' => @name, 'style:page-layout-name' => @layout
30
- end
31
- end
32
- end
33
-
@@ -1,39 +0,0 @@
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 'rubygems'
19
- require 'builder'
20
-
21
- require 'odf/container'
22
- require 'odf/property'
23
-
24
- module ODF
25
- class PageLayout < Container
26
- contains :properties
27
-
28
- def initialize(name)
29
- @name = name
30
- end
31
-
32
- def xml
33
- Builder::XmlMarkup.new.tag! 'style:page-layout', 'style:name' => @name do |b|
34
- b << properties_xml
35
- end
36
- end
37
- end
38
- end
39
-
data/lib/odf/paragraph.rb DELETED
@@ -1,46 +0,0 @@
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 'rubygems'
19
- require 'builder'
20
-
21
- require 'odf/paragraph_container'
22
-
23
- module ODF
24
- class Paragraph < ParagraphContainer
25
- def initialize(fst = nil, snd = {})
26
- first_is_hash = fst.instance_of? Hash
27
- span(fst) unless first_is_hash
28
- @elem_attrs = make_element_attributes(first_is_hash ? fst : snd)
29
- end
30
-
31
- def xml
32
- Builder::XmlMarkup.new.text:p, @elem_attrs do |xml|
33
- xml << content_parts_xml
34
- end
35
- end
36
-
37
- private
38
-
39
- def make_element_attributes(opts)
40
- attrs = {}
41
- attrs['text:style-name'] = opts[:style] unless opts[:style].nil?
42
- attrs
43
- end
44
-
45
- end
46
- end
@@ -1,35 +0,0 @@
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 'rubygems'
19
- require 'builder'
20
-
21
- require 'odf/container'
22
-
23
- module ODF
24
- # Container for all kinds of paragraph content
25
- class ParagraphContainer < Container
26
- def content_parts
27
- @content_parts ||= []
28
- end
29
-
30
- def content_parts_xml
31
- content_parts.map {|p| p.xml}.join
32
- end
33
- end
34
- end
35
-
data/lib/odf/property.rb DELETED
@@ -1,131 +0,0 @@
1
- # Copyright (c) 2008 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 'rubygems'
19
- require 'builder'
20
-
21
- module ODF
22
- class Property
23
- PROPERTY_NAMES = {:cell => 'table-cell-properties',
24
- :text => 'text-properties',
25
- :column => 'table-column-properties',
26
- :row => 'table-row-properties',
27
- :page_layout => 'page-layout-properties',
28
- :header_footer => 'header-footer-properties',
29
- :list_level => 'list-level-properties',
30
- :conditional => 'map'}
31
- TRANSLATED_SPECS = [:border_color, :border_style, :border_width]
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']]
79
-
80
- def initialize(type, specs={})
81
- @name = 'style:' + (PROPERTY_NAMES[type] || "#{type}-properties")
82
- @specs = translate(specs).map { |k, v| [k.to_s, v] }
83
- end
84
-
85
- def xml
86
- specs = @specs.inject({}) do |acc, kv|
87
- acc.merge Property.lookup_namespace_for(kv.first) + ':' + kv.first => kv.last
88
- end
89
- Builder::XmlMarkup.new.tag! @name, specs
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
98
- private
99
- def translate(specs)
100
- result = specs.clone
101
- tspecs = specs.select {|k, v| TRANSLATED_SPECS.include? k}
102
- tspecs.map {|k, v| result.delete k}
103
- tspecs = tspecs.inject({}) {|acc, e| acc.merge e.first => e.last}
104
- if tspecs[:border_width] && tspecs[:border_style] && tspecs[:border_color] then
105
- width = tspecs[:border_width].split
106
- style = tspecs[:border_style].split
107
- color = tspecs[:border_color].split
108
- if width.length == 1 && style.length == 1 && color.length == 1 then
109
- result[:border] = [width[0], style[0], color[0]].join(' ')
110
- else
111
- result['border-top'] = cascading_join(width, style, color, 0)
112
- result['border-right'] = cascading_join(width, style, color, 1, 0)
113
- result['border-bottom'] = cascading_join(width, style, color, 2, 0)
114
- result['border-left'] = cascading_join(width, style, color, 3, 1, 0)
115
- end
116
- end
117
- result
118
- end
119
-
120
- def cascading_join(width_parts, style_parts, color_parts, *prefs)
121
- [ cascade(width_parts, prefs),
122
- cascade(style_parts, prefs),
123
- cascade(color_parts, prefs)].join(' ')
124
- end
125
-
126
- def cascade(list, prefs)
127
- prefs.inject(nil) {|acc, i| acc || list[i]}
128
- end
129
- end
130
- end
131
-
data/lib/odf/row.rb DELETED
@@ -1,44 +0,0 @@
1
- # Copyright (c) 2008 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 'rubygems'
19
- require 'builder'
20
-
21
- require 'odf/container'
22
- require 'odf/cell'
23
-
24
- module ODF
25
- class Row < Container
26
- contains :cells
27
- attr_reader :number
28
- attr_writer :style
29
-
30
- def initialize(number=0, opts={})
31
- @number = number
32
- @style = opts[:style]
33
- end
34
-
35
- def xml
36
- elem_attrs = {}
37
- elem_attrs['table:style-name'] = @style unless @style.nil?
38
- Builder::XmlMarkup.new.tag! 'table:table-row', elem_attrs do |xml|
39
- xml << cells_xml
40
- end
41
- end
42
- end
43
- end
44
-
data/lib/odf/skeleton.rb DELETED
@@ -1,34 +0,0 @@
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 'erb'
19
-
20
- module ODF
21
- class Skeleton
22
- def manifest(document_type)
23
- ERB.new(template('manifest.xml.erb')).result(binding)
24
- end
25
-
26
- def styles
27
- template('styles.pxml')
28
- end
29
- private
30
- def template(fname)
31
- File.open(File.dirname(__FILE__) + '/skeleton/' + fname).read
32
- end
33
- end
34
- end
data/lib/odf/span.rb DELETED
@@ -1,70 +0,0 @@
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 'rubygems'
19
- require 'builder'
20
-
21
- require 'odf/compatibility'
22
- require 'odf/paragraph_container'
23
-
24
- module ODF
25
- class TextNode
26
- def initialize(content)
27
- @content = content
28
- end
29
-
30
- def xml
31
- @content.to_s.to_xs
32
- end
33
- end
34
-
35
- class Span < ParagraphContainer
36
- def initialize(first, second = nil)
37
- if first.instance_of?(Symbol)
38
- @style = first
39
- content_parts << TextNode.new(second) unless second.nil?
40
- else
41
- content_parts << TextNode.new(first)
42
- end
43
- end
44
-
45
- def xml
46
- return content_parts_xml if @style.nil?
47
- Builder::XmlMarkup.new.text:span, 'text:style-name' => @style do |xml|
48
- xml << content_parts_xml
49
- end
50
- end
51
- end
52
-
53
- class ParagraphContainer < Container
54
- def span(*args)
55
- s = Span.new(*args)
56
- yield s if block_given?
57
- content_parts << s
58
- s
59
- end
60
-
61
- def <<(content)
62
- span(content)
63
- end
64
-
65
- def method_missing(style, *args)
66
- span(style, *args)
67
- end
68
- end
69
- end
70
-