rodf 0.1.8 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest CHANGED
@@ -7,21 +7,36 @@ lib/odf/cell.rb
7
7
  lib/odf/column.rb
8
8
  lib/odf/container.rb
9
9
  lib/odf/data_style.rb
10
+ lib/odf/document.rb
11
+ lib/odf/hyperlink.rb
12
+ lib/odf/master_page.rb
13
+ lib/odf/page_layout.rb
14
+ lib/odf/paragraph.rb
15
+ lib/odf/paragraph_container.rb
10
16
  lib/odf/property.rb
11
17
  lib/odf/row.rb
12
- lib/odf/skeleton/manifest.xml
18
+ lib/odf/skeleton.rb
19
+ lib/odf/skeleton/manifest.xml.erb
13
20
  lib/odf/skeleton/styles.xml
21
+ lib/odf/span.rb
14
22
  lib/odf/spreadsheet.rb
15
23
  lib/odf/style.rb
16
24
  lib/odf/style_section.rb
17
25
  lib/odf/table.rb
26
+ lib/odf/text.rb
18
27
  rodf.gemspec
19
28
  spec/cell_spec.rb
20
29
  spec/data_style_spec.rb
30
+ spec/hyperlink_spec.rb
31
+ spec/master_page_spec.rb
32
+ spec/page_layout_spec.rb
33
+ spec/paragraph_spec.rb
21
34
  spec/property_spec.rb
22
35
  spec/row_spec.rb
36
+ spec/span_spec.rb
23
37
  spec/spec_helper.rb
24
38
  spec/spreadsheet_spec.rb
25
39
  spec/style_section_spec.rb
26
40
  spec/style_spec.rb
27
41
  spec/table_spec.rb
42
+ spec/text_spec.rb
data/README.rdoc CHANGED
@@ -1,7 +1,7 @@
1
1
  = rODF
2
2
 
3
3
  This is a library for writing to ODF output with Ruby. It currently only
4
- supports creating spreadsheets (ODS). Text documents (ODT) and slide shows (ODP)
4
+ supports creating spreadsheets (ODS) and text documents (ODT). Slide shows (ODP)
5
5
  may be added some time in the future.
6
6
 
7
7
  This is NOT an ODF reading library.
@@ -18,7 +18,7 @@ rODF works pretty much like Builder, but with ODF-aware constructs. Try this:
18
18
 
19
19
  require 'odf/spreadsheet'
20
20
 
21
- ODF::SpreadSheet.file("my-spreadsheet.ods") do |spreadsheet|
21
+ ODF::Spreadsheet.file("my-spreadsheet.ods") do |spreadsheet|
22
22
  spreadsheet.table 'My first table from Ruby' do |table|
23
23
  table.row {|row| row.cell 'Hello, rODF world!' }
24
24
  end
@@ -28,7 +28,7 @@ Some basic formatting is also possible:
28
28
 
29
29
  require 'odf/spreadsheet'
30
30
 
31
- ODF::SpreadSheet.file("my-spreadsheet.ods") do |spreadsheet|
31
+ ODF::Spreadsheet.file("my-spreadsheet.ods") do |spreadsheet|
32
32
  spreadsheet.style 'red-cell', :family => :cell do |style|
33
33
  style.property :text, 'font-weight' => 'bold', 'color' => '#ff0000'
34
34
  end
data/lib/odf/cell.rb CHANGED
@@ -18,8 +18,15 @@
18
18
  require 'rubygems'
19
19
  require 'builder'
20
20
 
21
+ require 'odf/container'
22
+ require 'odf/paragraph'
23
+
21
24
  module ODF
22
- class Cell
25
+ class Cell < Container
26
+ contains :paragraphs
27
+
28
+ alias :p :paragraph
29
+
23
30
  def initialize(*args)
24
31
  value = args.first || ''
25
32
  opts = args.last.instance_of?(Hash) ? args.last : {}
@@ -36,25 +43,21 @@ module ODF
36
43
 
37
44
  @elem_attrs = make_element_attributes(@type, @value, opts)
38
45
  @mutiply = (opts[:span] || 1).to_i
46
+
47
+ make_value_paragraph
39
48
  end
40
49
 
41
50
  def xml
42
51
  markup = Builder::XmlMarkup.new
43
52
  text = markup.tag! 'table:table-cell', @elem_attrs do |xml|
44
- if contains_string?
45
- xml.text:p do |p|
46
- if contains_url?
47
- p.text:a, @value, 'xlink:href' => @url
48
- else
49
- p.text! @value
50
- end
51
- end
52
- end
53
+ xml << paragraphs_xml
53
54
  end
54
55
  (@mutiply - 1).times {text = markup.tag! 'table:table-cell'}
55
56
  text
56
57
  end
57
58
 
59
+ private
60
+
58
61
  def contains_string?
59
62
  :string == @type && !@value.nil? && !@value.empty?
60
63
  end
@@ -76,7 +79,17 @@ module ODF
76
79
  attrs
77
80
  end
78
81
 
79
- private
82
+ def make_value_paragraph
83
+ if contains_string?
84
+ paragraph do |p|
85
+ if contains_url?
86
+ p.link @value, :href => @url
87
+ else
88
+ p << @value
89
+ end
90
+ end
91
+ end
92
+ end
80
93
 
81
94
  def empty(value)
82
95
  value.nil? || value.empty?
@@ -0,0 +1,48 @@
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/zip'
21
+
22
+ require 'odf/container'
23
+ require 'odf/skeleton'
24
+
25
+ module ODF
26
+ class Document < Container
27
+ def self.file(ods_file_name)
28
+ ods_file = Zip::ZipFile.open(ods_file_name, Zip::ZipFile::CREATE)
29
+ ods_file.get_output_stream('styles.xml') {|f| f << skeleton.styles }
30
+ ods_file.get_output_stream('META-INF/manifest.xml') {|f| f << skeleton.manifest(doc_type) }
31
+
32
+ yield(doc = new)
33
+
34
+ ods_file.get_output_stream('content.xml') {|f| f << doc.xml}
35
+
36
+ ods_file.close
37
+ end
38
+ private
39
+ def self.skeleton
40
+ @skeleton ||= Skeleton.new
41
+ end
42
+
43
+ def self.doc_type
44
+ name.split('::').last.downcase
45
+ end
46
+ end
47
+ end
48
+
@@ -0,0 +1,51 @@
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
+
@@ -0,0 +1,33 @@
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
+
@@ -0,0 +1,39 @@
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
+
@@ -0,0 +1,46 @@
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
@@ -0,0 +1,35 @@
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 CHANGED
@@ -24,15 +24,16 @@ module ODF
24
24
  :text => 'style:text-properties',
25
25
  :column => 'style:table-column-properties'}
26
26
  TRANSLATED_SPECS = [:border_color, :border_style, :border_width]
27
+ STYLE_ATTRIBUTES = ['column-width', 'rotation-angle', 'text-underline-type']
27
28
 
28
29
  def initialize(type, specs={})
29
- @name = PROPERTY_NAMES[type]
30
+ @name = PROPERTY_NAMES[type] || "style:#{type}-properties"
30
31
  @specs = translate(specs).map { |k, v| [k.to_s, v] }
31
32
  end
32
33
 
33
34
  def xml
34
35
  specs = @specs.inject({}) do |acc, kv|
35
- prefix = 'column-width' == kv.first ? 'style' : 'fo'
36
+ prefix = STYLE_ATTRIBUTES.include?(kv.first) ? 'style' : 'fo'
36
37
  acc.merge prefix + ':' + kv.first => kv.last
37
38
  end
38
39
  Builder::XmlMarkup.new.tag! @name, specs
@@ -0,0 +1,34 @@
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.xml')
28
+ end
29
+ private
30
+ def template(fname)
31
+ File.open(File.dirname(__FILE__) + '/skeleton/' + fname).read
32
+ end
33
+ end
34
+ end
@@ -1,7 +1,7 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
3
3
  <manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
4
- <manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.spreadsheet" manifest:full-path="/"/>
4
+ <manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.<%= document_type.to_s %>" manifest:full-path="/"/>
5
5
  <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/>
6
6
  <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="styles.xml"/>
7
- </manifest:manifest>
7
+ </manifest:manifest>
data/lib/odf/span.rb ADDED
@@ -0,0 +1,69 @@
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 TextNode
25
+ def initialize(content)
26
+ @content = content
27
+ end
28
+
29
+ def xml
30
+ @content.to_s.to_xs
31
+ end
32
+ end
33
+
34
+ class Span < ParagraphContainer
35
+ def initialize(first, second = nil)
36
+ if first.instance_of?(Symbol)
37
+ @style = first
38
+ content_parts << TextNode.new(second) unless second.nil?
39
+ else
40
+ content_parts << TextNode.new(first)
41
+ end
42
+ end
43
+
44
+ def xml
45
+ return content_parts_xml if @style.nil?
46
+ Builder::XmlMarkup.new.text:span, 'text:style-name' => @style do |xml|
47
+ xml << content_parts_xml
48
+ end
49
+ end
50
+ end
51
+
52
+ class ParagraphContainer < Container
53
+ def span(*args)
54
+ s = Span.new(*args)
55
+ yield s if block_given?
56
+ content_parts << s
57
+ s
58
+ end
59
+
60
+ def <<(content)
61
+ span(content)
62
+ end
63
+
64
+ def method_missing(style, *args)
65
+ span(style, *args)
66
+ end
67
+ end
68
+ end
69
+
@@ -18,29 +18,18 @@
18
18
  require 'rubygems'
19
19
 
20
20
  require 'builder'
21
- require 'zip/zip'
22
21
 
23
- require 'odf/container'
24
22
  require 'odf/data_style'
23
+ require 'odf/document'
24
+ require 'odf/hyperlink'
25
+ require 'odf/span'
25
26
  require 'odf/style'
26
27
  require 'odf/table'
27
28
 
28
29
  module ODF
29
- class SpreadSheet < Container
30
+ class Spreadsheet < Document
30
31
  contains :tables, :styles, :data_styles
31
32
 
32
- def self.file(ods_file_name)
33
- ods_file = Zip::ZipFile.open(ods_file_name, Zip::ZipFile::CREATE)
34
- ods_file.get_output_stream('styles.xml') {|f| f << skeleton('styles.xml')}
35
- ods_file.get_output_stream('META-INF/manifest.xml') {|f| f << skeleton('manifest.xml')}
36
-
37
- yield(spreadsheet = new)
38
-
39
- ods_file.get_output_stream('content.xml') {|f| f << spreadsheet.xml}
40
-
41
- ods_file.close
42
- end
43
-
44
33
  def xml
45
34
  b = Builder::XmlMarkup.new
46
35
 
@@ -65,11 +54,8 @@ module ODF
65
54
  end
66
55
  end
67
56
  end
68
-
69
- private
70
- def self.skeleton(fname)
71
- File.open(File.dirname(__FILE__) + '/skeleton/' + fname).read
72
- end
73
57
  end
58
+
59
+ SpreadSheet = Spreadsheet
74
60
  end
75
61
 
data/lib/odf/style.rb CHANGED
@@ -39,9 +39,12 @@ module ODF
39
39
  end
40
40
 
41
41
  def make_element_attributes(name, opts)
42
- attrs = {'style:name' => name, 'style:family' => FAMILIES[opts[:family]]}
42
+ attrs = {
43
+ 'style:name' => name,
44
+ 'style:family' => (FAMILIES[opts[:family]] || opts[:family])}
43
45
  attrs['style:data-style-name'] = opts[:data_style] unless opts[:data_style].nil?
44
46
  attrs['style:parent-style-name'] = opts[:parent].to_s unless opts[:parent].nil?
47
+ attrs['style:master-page-name'] = opts[:master_page] unless opts[:master_page].nil?
45
48
  attrs
46
49
  end
47
50
 
data/lib/odf/text.rb ADDED
@@ -0,0 +1,64 @@
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/document'
23
+ require 'odf/master_page'
24
+ require 'odf/page_layout'
25
+ require 'odf/paragraph'
26
+ require 'odf/span'
27
+ require 'odf/hyperlink'
28
+ require 'odf/style'
29
+
30
+ module ODF
31
+ class Text < Document
32
+ contains :paragraphs, :styles, :page_layouts, :master_pages
33
+
34
+ alias :p :paragraph
35
+
36
+ def xml
37
+ b = Builder::XmlMarkup.new
38
+
39
+ b.instruct! :xml, :version => '1.0', :encoding => 'UTF-8'
40
+ b.tag! 'office:document-content', 'xmlns:office' => "urn:oasis:names:tc:opendocument:xmlns:office:1.0",
41
+ 'xmlns:table' => "urn:oasis:names:tc:opendocument:xmlns:table:1.0",
42
+ 'xmlns:text' => "urn:oasis:names:tc:opendocument:xmlns:text:1.0",
43
+ 'xmlns:oooc' => "http://openoffice.org/2004/calc",
44
+ 'xmlns:style' => "urn:oasis:names:tc:opendocument:xmlns:style:1.0",
45
+ 'xmlns:fo' => "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0",
46
+ 'xmlns:xlink' => "http://www.w3.org/1999/xlink" do
47
+ |xml|
48
+ xml.tag! 'office:automatic-styles' do
49
+ xml << styles_xml
50
+ xml << page_layouts_xml
51
+ end unless styles.empty? && page_layouts.empty?
52
+ xml.tag! 'office:master-styles' do
53
+ xml << master_pages_xml
54
+ end unless master_pages.empty?
55
+ xml.office:body do
56
+ xml.office:text do
57
+ xml << paragraphs_xml
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+
data/rodf.gemspec CHANGED
@@ -2,15 +2,15 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{rodf}
5
- s.version = "0.1.8"
5
+ s.version = "0.2.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Thiago Arrais"]
9
- s.date = %q{2010-04-23}
9
+ s.date = %q{2010-05-28}
10
10
  s.description = %q{ODF generation library for Ruby}
11
11
  s.email = %q{thiago.arrais@gmail.com}
12
- s.extra_rdoc_files = ["CHANGELOG", "LICENSE.LGPL", "README.rdoc", "lib/odf/cell.rb", "lib/odf/column.rb", "lib/odf/container.rb", "lib/odf/data_style.rb", "lib/odf/property.rb", "lib/odf/row.rb", "lib/odf/skeleton/manifest.xml", "lib/odf/skeleton/styles.xml", "lib/odf/spreadsheet.rb", "lib/odf/style_section.rb", "lib/odf/style.rb", "lib/odf/table.rb"]
13
- s.files = ["CHANGELOG", "LICENSE.LGPL", "Manifest", "README.rdoc", "Rakefile", "lib/odf/cell.rb", "lib/odf/column.rb", "lib/odf/container.rb", "lib/odf/data_style.rb", "lib/odf/property.rb", "lib/odf/row.rb", "lib/odf/skeleton/manifest.xml", "lib/odf/skeleton/styles.xml", "lib/odf/spreadsheet.rb", "lib/odf/style_section.rb", "lib/odf/style.rb", "lib/odf/table.rb", "rodf.gemspec", "spec/cell_spec.rb", "spec/data_style_spec.rb", "spec/property_spec.rb", "spec/row_spec.rb", "spec/spec_helper.rb", "spec/spreadsheet_spec.rb", "spec/style_section_spec.rb", "spec/style_spec.rb", "spec/table_spec.rb"]
12
+ s.extra_rdoc_files = ["CHANGELOG", "LICENSE.LGPL", "README.rdoc", "lib/odf/cell.rb", "lib/odf/column.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.xml", "lib/odf/span.rb", "lib/odf/spreadsheet.rb", "lib/odf/style_section.rb", "lib/odf/style.rb", "lib/odf/table.rb", "lib/odf/text.rb"]
13
+ s.files = ["CHANGELOG", "LICENSE.LGPL", "Manifest", "README.rdoc", "Rakefile", "lib/odf/cell.rb", "lib/odf/column.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.xml", "lib/odf/span.rb", "lib/odf/spreadsheet.rb", "lib/odf/style_section.rb", "lib/odf/style.rb", "lib/odf/table.rb", "lib/odf/text.rb", "rodf.gemspec", "spec/cell_spec.rb", "spec/data_style_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/span_spec.rb", "spec/spec_helper.rb", "spec/spreadsheet_spec.rb", "spec/style_section_spec.rb", "spec/style_spec.rb", "spec/table_spec.rb", "spec/text_spec.rb"]
14
14
  s.homepage = %q{http://github.com/thiagoarrais/rodf/tree}
15
15
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rodf", "--main", "README.rdoc"]
16
16
  s.require_paths = ["lib"]
data/spec/cell_spec.rb CHANGED
@@ -125,11 +125,29 @@ describe ODF::Cell do
125
125
  at('table:table-cell')['office:date-value'] = '2010-04-16'
126
126
  end
127
127
 
128
- it "should escape entities" do
129
- output = ODF::Cell.new('Fish & Chips').xml
130
- output.should have_tag('//table:table-cell/*')
131
- output.should have_tag('//text:p')
132
- Hpricot(output).at('text:p').innerHTML.should == 'Fish &amp; Chips'
128
+ it "should contain paragraph" do
129
+ c = ODF::Cell.new
130
+ c.paragraph "testing"
131
+ output = c.xml
132
+
133
+ output.should have_tag("//table:table-cell/*", :count => 1)
134
+ output.should have_tag("//text:p")
135
+
136
+ Hpricot(output).at('text:p').innerHTML.should == 'testing'
137
+ end
138
+
139
+ it "should be able to hold multiple paragraphs" do
140
+ output = ODF::Cell.create do |c|
141
+ c.paragraph "first"
142
+ c.paragraph "second"
143
+ end
144
+
145
+ output.should have_tag("//table:table-cell/*", :count => 2)
146
+ output.should have_tag("//text:p")
147
+
148
+ ps = Hpricot(output).search('text:p')
149
+ ps[0].innerHTML.should == 'first'
150
+ ps[1].innerHTML.should == 'second'
133
151
  end
134
152
 
135
153
  it "should not render value type for non-string nil values" do
@@ -145,3 +163,4 @@ describe ODF::Cell do
145
163
  end
146
164
  end
147
165
  end
166
+
@@ -0,0 +1,53 @@
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/hyperlink'
21
+
22
+ describe ODF::Hyperlink do
23
+ it "should receive content text in first argument" do
24
+ output = ODF::Hyperlink.new('link somewhere', :href => 'http://www.example.org/').xml
25
+ output.should have_tag('//text:a')
26
+
27
+ link = Hpricot(output).at('text:a')
28
+ link.innerHTML.should == 'link somewhere'
29
+ link['xlink:href'].should == 'http://www.example.org/'
30
+ end
31
+
32
+ it "should accept ref both in second argument as in argument hash" do
33
+ Hpricot(ODF::Hyperlink.new('link somewhere', :href => 'http://www.example.org/').xml).
34
+ at('text:a')['xlink:href'].should == 'http://www.example.org/'
35
+
36
+ Hpricot(ODF::Hyperlink.new('link somewhere', 'http://www.example.org/').xml).
37
+ at('text:a')['xlink:href'].should == 'http://www.example.org/'
38
+ end
39
+
40
+ it "should allow nested span elements" do
41
+ output = ODF::Hyperlink.create 'http://www.example.com/' do |link|
42
+ link.strong 'important link'
43
+ end
44
+
45
+ output.should have_tag('//text:a/*', :count => 1)
46
+ tree = Hpricot(output)
47
+ tree.at('//text:a')['xlink:href'].should == 'http://www.example.com/'
48
+ span = tree.at('//text:span')
49
+ span['text:style-name'].should == 'strong'
50
+ span.innerHTML.should == 'important link'
51
+ end
52
+ end
53
+
@@ -0,0 +1,35 @@
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/master_page'
21
+
22
+ describe ODF::MasterPage do
23
+ it "should have a name" do
24
+ output = ODF::MasterPage.new('my-master-page').xml
25
+ output.should have_tag('//style:master-page')
26
+
27
+ Hpricot(output).at('style:master-page')['style:name'].should == 'my-master-page'
28
+ end
29
+
30
+ it "should accept a layout reference" do
31
+ Hpricot(ODF::MasterPage.new('my-master-page', :layout => 'A4').xml).
32
+ at('style:master-page')['style:page-layout-name'].should == 'A4'
33
+ end
34
+ end
35
+
@@ -0,0 +1,37 @@
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/page_layout'
21
+
22
+ describe ODF::PageLayout do
23
+ it "should have a name" do
24
+ output = ODF::PageLayout.new('main-layout').xml
25
+ output.should have_tag('style:page-layout')
26
+ Hpricot(output).at('style:page-layout')['style:name'].should == 'main-layout'
27
+ end
28
+
29
+ it "should have properties" do
30
+ output = ODF::PageLayout.create 'main-layout' do |l|
31
+ l.property 'page-layout'
32
+ end
33
+ output.should have_tag('//style:page-layout/*', :count => 1)
34
+ output.should have_tag('style:page-layout-properties')
35
+ end
36
+ end
37
+
@@ -0,0 +1,75 @@
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/paragraph'
21
+
22
+ describe ODF::Paragraph do
23
+ it "should allow text content inside" do
24
+ output = ODF::Paragraph.new('Hello').xml
25
+ output.should have_tag('//text:p')
26
+ Hpricot(output).at('text:p').innerHTML.should == 'Hello'
27
+ end
28
+
29
+ it "should accept an input sequence" do
30
+ output = ODF::Paragraph.create { |p|
31
+ p << "Hello, "
32
+ p << "world!"
33
+ }
34
+ output.should have_tag('//text:p')
35
+ Hpricot(output).at('text:p').innerHTML.should == 'Hello, world!'
36
+ end
37
+
38
+ it "should accept styled spans" do
39
+ output = ODF::Paragraph.create { |p|
40
+ p << "Hello, "
41
+ p.span :bold, "world! "
42
+ p << "This is not bold. "
43
+ p.bold "But this is."
44
+ }
45
+ spans = Hpricot(output).at('text:p').search('text:span')
46
+ spans.first.innerHTML.should == 'world! '
47
+ spans.first['text:style-name'].should == 'bold'
48
+ spans.last.innerHTML.should == 'But this is.'
49
+ spans.last['text:style-name'].should == 'bold'
50
+ end
51
+
52
+ it "should be able to hold hyperlinks" do
53
+ output = ODF::Paragraph.create {|p|
54
+ p << "please visit "
55
+ p.a "example.org", :href => "http://www.example.org/"
56
+ p << " for more details"
57
+ }
58
+ output.should have_tag("//text:p/*", :count => 3)
59
+ output.should have_tag("//text:a")
60
+
61
+ Hpricot(output).at('text:a').innerHTML.should == 'example.org'
62
+ end
63
+
64
+ it "should support style attribute" do
65
+ Hpricot(ODF::Paragraph.create('styled paragraph', :style => 'highlight')).
66
+ at('text:p')['text:style-name'].should == 'highlight'
67
+ end
68
+
69
+ it "should accept attributes in the first parameter too" do
70
+ para = Hpricot(ODF::Paragraph.create(:style => 'testing')).at('text:p')
71
+ para.innerHTML.should be_empty
72
+ para['text:style-name'].should == 'testing'
73
+ end
74
+ end
75
+
@@ -36,6 +36,15 @@ describe ODF::Property do
36
36
  elem['style:column-width'].should == '2cm'
37
37
  end
38
38
 
39
+ it "should prefix rotation-angle property with style namespace" do
40
+ property = ODF::Property.new :cell, 'rotation-angle' => '-90'
41
+
42
+ property.xml.should have_tag('//style:table-cell-properties')
43
+
44
+ elem = Hpricot(property.xml).at('//style:table-cell-properties')
45
+ elem['style:rotation-angle'].should == '-90'
46
+ end
47
+
39
48
  it "should accept full perimeter border specs" do
40
49
  property = ODF::Property.new :cell, :border => "0.025in solid #000000"
41
50
 
@@ -109,5 +118,15 @@ describe ODF::Property do
109
118
  elem = Hpricot(property.xml).at('//style:table-cell-properties')
110
119
  elem['fo:border-left'].should == "0.1in solid #ffff00"
111
120
  end
121
+
122
+ it "should prefix underline property with style namespace" do
123
+ Hpricot(ODF::Property.new(:text, 'text-underline-type' => 'single').xml).
124
+ at('style:text-properties')['style:text-underline-type'].should == 'single'
125
+ end
126
+
127
+ it "should support paragraph properties" do
128
+ ODF::Property.new(:paragraph).xml.
129
+ should have_tag('style:paragraph-properties')
130
+ end
112
131
  end
113
132
 
data/spec/span_spec.rb ADDED
@@ -0,0 +1,65 @@
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/span'
21
+
22
+ describe ODF::Span do
23
+ it "should print non-styled spans in pure text" do
24
+ ODF::Span.new('no style').xml.should == 'no style'
25
+ end
26
+
27
+ it "should wrap styled output in span tags" do
28
+ output = ODF::Span.new(:italics, 'styled text').xml
29
+ output.should have_tag('text:span')
30
+ span = Hpricot(output).at('text:span')
31
+ span['text:style-name'].should == 'italics'
32
+ span.innerHTML.should == 'styled text'
33
+ end
34
+
35
+ it "should allow nesting" do
36
+ output = ODF::Span.create :bold do |s|
37
+ s.italics 'highlighted text'
38
+ end
39
+
40
+ output.should have_tag('//text:span/*', :count => 2)
41
+ Hpricot(output).search('//text:span')[1].
42
+ innerHTML.should == 'highlighted text'
43
+ end
44
+
45
+ it "should allow links" do
46
+ output = ODF::Span.create :bold do |s|
47
+ s.link 'there', 'http://www.example.org/'
48
+ s << ' and '
49
+ s.a 'back again', 'http://www.example.com/'
50
+ end
51
+
52
+ output.should have_tag('//text:a', :count => 2)
53
+ elem = Hpricot(output)
54
+
55
+ links = elem.search('//text:a')
56
+ links.first.innerHTML.should == 'there'
57
+ links.last.innerHTML.should == 'back again'
58
+
59
+ elem.at('//text:span').children[1].to_plain_text.should == " and "
60
+ end
61
+
62
+ it "should escape entities" do
63
+ ODF::Span.create('Fish & Chips').should == 'Fish &amp; Chips'
64
+ end
65
+ end
data/spec/style_spec.rb CHANGED
@@ -26,7 +26,7 @@ describe ODF::Style do
26
26
  output = ODF::Style.create 'odd-row-cell', :family => :cell do |s|
27
27
  s.property :cell, 'background-color' => '#b3b3b3',
28
28
  'border' => '0.002cm solid #000000'
29
- s.property :text, 'color' => '#4c4c4c'
29
+ s.property :text, 'color' => '#4c4c4c', 'font-weight' => 'bold'
30
30
  end
31
31
 
32
32
  output.should have_tag('//style:style/*', :count => 2)
@@ -39,6 +39,7 @@ describe ODF::Style do
39
39
 
40
40
  text_elem = Hpricot(output).at('style:text-properties')
41
41
  text_elem['fo:color'].should == '#4c4c4c'
42
+ text_elem['fo:font-weight'].should == 'bold'
42
43
  end
43
44
 
44
45
  it "should allow data styles" do
@@ -64,6 +65,14 @@ describe ODF::Style do
64
65
  style['style:parent-style-name'].should == 'cell-default'
65
66
  end
66
67
 
68
+ it "should allow master pages" do
69
+ xml = ODF::Style.create 'standard',
70
+ :family => :paragraph,
71
+ :master_page => 'letter'
72
+
73
+ Hpricot(xml).at('//style:style')['style:master-page-name'].should == 'letter'
74
+ end
75
+
67
76
  it "should be able to describe column styles" do
68
77
  xml = ODF::Style.create 'column-style', :family => :column do |style|
69
78
  style.property :column, 'column-width' => '2cm'
@@ -73,5 +82,13 @@ describe ODF::Style do
73
82
  xml.should have_tag('//style:style/*', :count => 1)
74
83
  xml.should have_tag('//style:table-column-properties')
75
84
  end
85
+
86
+ it "should accept other families" do
87
+ Hpricot(ODF::Style.create('text-style', :family => :text)).
88
+ at('//style:style')['style:family'].should == 'text'
89
+
90
+ Hpricot(ODF::Style.create('text-style', :family => :paragraph)).
91
+ at('//style:style')['style:family'].should == 'paragraph'
92
+ end
76
93
  end
77
94
 
data/spec/text_spec.rb ADDED
@@ -0,0 +1,71 @@
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
+
22
+ describe ODF::Text do
23
+ it "should have the expected structure" do
24
+ output = ODF::Text.create
25
+ output.should have_tag('//office:document-content/*')
26
+ output.should have_tag('//office:body/*')
27
+ output.should have_tag('//office:text')
28
+ end
29
+
30
+ it "should have paragraphs" do
31
+ output = ODF::Text.create { |doc|
32
+ doc.paragraph "Hello"
33
+ doc.p "World!"
34
+ }
35
+ output.should have_tag('//office:text/*')
36
+ output.should have_tag('//text:p')
37
+ ps = Hpricot(output).search('text:p')
38
+ ps.size.should == 2
39
+ ps.first.innerHTML.should == 'Hello'
40
+ ps.last.innerHTML.should == 'World!'
41
+ end
42
+
43
+ it "should allow styles" do
44
+ ODF::Text.create.should_not have_tag('//office:automatic-styles')
45
+ output = ODF::Text.create { |doc|
46
+ doc.style('bold', :family => 'text') {|s|
47
+ s.property(:text, 'font-weight' => 'bold') }
48
+ doc.style('italic', :family => 'text') {|s|
49
+ s.property(:text, 'font-weight' => 'italic') }
50
+ }
51
+ output.should have_tag('//office:automatic-styles/*', :count => 2)
52
+ output.should have_tag('//style:style')
53
+ end
54
+
55
+ it "should support page layout as auto-style" do
56
+ output = ODF::Text.create { |doc|
57
+ doc.page_layout 'main-layout'
58
+ }
59
+ output.should have_tag('//office:automatic-styles/*', :count => 1)
60
+ output.should have_tag('//style:page-layout')
61
+ end
62
+
63
+ it "should support master pages" do
64
+ output = ODF::Text.create do |doc|
65
+ doc.master_page 'standard', :layout => 'letter'
66
+ end
67
+ output.should have_tag('//office:master-styles/*', :count => 1)
68
+ output.should have_tag('//style:master-page')
69
+ end
70
+ end
71
+
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 8
9
- version: 0.1.8
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Thiago Arrais
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-23 00:00:00 -03:00
17
+ date: 2010-05-28 00:00:00 -03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -114,14 +114,23 @@ extra_rdoc_files:
114
114
  - lib/odf/column.rb
115
115
  - lib/odf/container.rb
116
116
  - lib/odf/data_style.rb
117
+ - lib/odf/document.rb
118
+ - lib/odf/hyperlink.rb
119
+ - lib/odf/master_page.rb
120
+ - lib/odf/page_layout.rb
121
+ - lib/odf/paragraph.rb
122
+ - lib/odf/paragraph_container.rb
117
123
  - lib/odf/property.rb
118
124
  - lib/odf/row.rb
119
- - lib/odf/skeleton/manifest.xml
125
+ - lib/odf/skeleton.rb
126
+ - lib/odf/skeleton/manifest.xml.erb
120
127
  - lib/odf/skeleton/styles.xml
128
+ - lib/odf/span.rb
121
129
  - lib/odf/spreadsheet.rb
122
130
  - lib/odf/style_section.rb
123
131
  - lib/odf/style.rb
124
132
  - lib/odf/table.rb
133
+ - lib/odf/text.rb
125
134
  files:
126
135
  - CHANGELOG
127
136
  - LICENSE.LGPL
@@ -132,24 +141,39 @@ files:
132
141
  - lib/odf/column.rb
133
142
  - lib/odf/container.rb
134
143
  - lib/odf/data_style.rb
144
+ - lib/odf/document.rb
145
+ - lib/odf/hyperlink.rb
146
+ - lib/odf/master_page.rb
147
+ - lib/odf/page_layout.rb
148
+ - lib/odf/paragraph.rb
149
+ - lib/odf/paragraph_container.rb
135
150
  - lib/odf/property.rb
136
151
  - lib/odf/row.rb
137
- - lib/odf/skeleton/manifest.xml
152
+ - lib/odf/skeleton.rb
153
+ - lib/odf/skeleton/manifest.xml.erb
138
154
  - lib/odf/skeleton/styles.xml
155
+ - lib/odf/span.rb
139
156
  - lib/odf/spreadsheet.rb
140
157
  - lib/odf/style_section.rb
141
158
  - lib/odf/style.rb
142
159
  - lib/odf/table.rb
160
+ - lib/odf/text.rb
143
161
  - rodf.gemspec
144
162
  - spec/cell_spec.rb
145
163
  - spec/data_style_spec.rb
164
+ - spec/hyperlink_spec.rb
165
+ - spec/master_page_spec.rb
166
+ - spec/page_layout_spec.rb
167
+ - spec/paragraph_spec.rb
146
168
  - spec/property_spec.rb
147
169
  - spec/row_spec.rb
170
+ - spec/span_spec.rb
148
171
  - spec/spec_helper.rb
149
172
  - spec/spreadsheet_spec.rb
150
173
  - spec/style_section_spec.rb
151
174
  - spec/style_spec.rb
152
175
  - spec/table_spec.rb
176
+ - spec/text_spec.rb
153
177
  has_rdoc: true
154
178
  homepage: http://github.com/thiagoarrais/rodf/tree
155
179
  licenses: []