rubypoint 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,89 @@
1
+ require 'zipruby'
2
+
3
+ class RubyPoint
4
+ class Presentation
5
+
6
+ attr_accessor :files, :slides
7
+
8
+ def initialize(file_path)
9
+ @working_directory = RubyPoint.working_directory
10
+ @uuid = Time.now.to_i
11
+ @files = []
12
+ self.open(file_path)
13
+ end
14
+
15
+ def open(path)
16
+ system("mkdir #{file_directory}")
17
+ system("cp #{path} #{@working_directory}#{@uuid}/#{path}")
18
+ system("unzip -q #{@working_directory}#{@uuid}/#{path} -d #{@working_directory}#{@uuid}/")
19
+ system("rm #{@working_directory}#{@uuid}/#{path}")
20
+ @files = Dir.glob("#{@working_directory}#{@uuid}/**/*", ::File::FNM_DOTMATCH)
21
+ end
22
+
23
+ def save(file_path, force=false)
24
+ slides.each do |s|
25
+ s.write
26
+ end
27
+ presentation_rel.write
28
+ presentation_xml.write
29
+ app_xml.write
30
+ content_types_xml.write
31
+ if ::File.exist?(file_path)
32
+ force ? system("rm -f #{file_path}") : raise("#{file_path} already exists")
33
+ end
34
+ RubyPoint.compress_folder(file_directory, file_path)
35
+ end
36
+
37
+ def clean_file_directory
38
+ system("rm -r #{file_directory}")
39
+ end
40
+
41
+ ### PRESENTATION PARTS
42
+
43
+ def slides
44
+ return @slides if @slides
45
+ @slides = []
46
+ slide_files = Dir.glob("#{file_directory}/ppt/slides/*.xml")
47
+ slide_files.each do |f|
48
+ @slides << RubyPoint::Slide.new(self, f)
49
+ end
50
+ @slides
51
+ end
52
+
53
+ def presentation_rel
54
+ @presentation_rel ||= RubyPoint::PresentationRel.new(self)
55
+ end
56
+
57
+ def presentation_xml
58
+ @presentation_xml ||= RubyPoint::Presentation::Presentation.new(self)
59
+ end
60
+
61
+ def app_xml
62
+ @app_xml ||= RubyPoint::App.new(self)
63
+ end
64
+
65
+ def content_types_xml
66
+ @content_types_xml ||= RubyPoint::ContentTypes::XML.new(self)
67
+ end
68
+
69
+ def new_slide
70
+ RubyPoint::Slide.new(self)
71
+ end
72
+
73
+ def next_slide_id
74
+ self.slides.size + 1
75
+ end
76
+
77
+ def add_to_relationships(object)
78
+ self.presentation_rel.add_relationship_for(object)
79
+ end
80
+
81
+ def slide_directory
82
+ file_directory + '/ppt/slides'
83
+ end
84
+
85
+ def file_directory
86
+ "#{@working_directory}#{@uuid}"
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,25 @@
1
+ class RubyPoint::Relationship < RubyPoint::Element
2
+
3
+ attr_accessor :rel_id, :object
4
+ class_attributes :target, :type
5
+
6
+ def initialize(parent, object=false)
7
+ @parent = parent
8
+ @rel_id = parent.next_rel_id
9
+ if object
10
+ @object = object
11
+ @object.rel_id = @rel_id
12
+ end
13
+ end
14
+
15
+ def write
16
+ @parent.doc.search('//Relationships').append(self.raw)
17
+ end
18
+
19
+ def raw
20
+ raw = <<EOF
21
+ <Relationship Id="rId#{self.rel_id}" Type="#{self.type}" Target="#{self.target}"/>
22
+ EOF
23
+ end
24
+
25
+ end
@@ -0,0 +1,16 @@
1
+ class RubyPoint::Slide::Rel < RubyPoint::File
2
+
3
+ def initialize(slide)
4
+ @parent = slide
5
+ @presenation = slide.presentation
6
+ @file_path = @presenation.slide_directory + "/_rels/slide#{@parent.slide_id}.xml.rels"
7
+ @doc = Hpricot::XML(self.raw_xml)
8
+ end
9
+
10
+ def raw_xml
11
+ raw = <<EOF
12
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
13
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout2.xml"/></Relationships>
14
+ EOF
15
+ end
16
+ end
@@ -0,0 +1,34 @@
1
+ class RubyPoint::Slide < RubyPoint::File
2
+
3
+ attr_accessor :slide_id, :rel_id
4
+
5
+ def initialize(presentation, file=nil)
6
+ @presentation = presentation
7
+ file ? init_from_file(file) : init_from_new
8
+ end
9
+
10
+ def raw_xml
11
+ raw = <<EOF
12
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
13
+ <p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="urn:schemas-microsoft-com:mac:vml" mc:Ignorable="mv" mc:PreserveAttributes="mv:*" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:cSld><p:spTree><p:nvGrpSpPr><p:cNvPr id="#{self.slide_id}" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr></p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sld>
14
+ EOF
15
+ end
16
+
17
+ private
18
+
19
+ def init_from_file(file)
20
+ @file_path = file
21
+ @slide_id = presentation.next_slide_id
22
+ @rel_id = presentation.add_to_relationships(self)
23
+ @doc = Hpricot::XML(File.open(@file_path).read)
24
+ end
25
+
26
+ def init_from_new
27
+ @slide_id = presentation.next_slide_id
28
+ @file_path = presentation.slide_directory + "/slide#{@slide_id}.xml"
29
+ @rel_id = presentation.add_to_relationships(self)
30
+ self.objects << RubyPoint::Slide::Rel.new(self)
31
+ presentation.slides << self
32
+ @doc = Hpricot::XML(self.raw_xml)
33
+ end
34
+ end
@@ -0,0 +1,19 @@
1
+ class RubyPoint::TextField < RubyPoint::Element
2
+ attr_accessor :text, :x, :y, :width, :height
3
+
4
+ def initialize(text="",x=3200400, y=4572000, w=3200400, h=572000)
5
+ @dirty = true
6
+ @text = text
7
+ @x, @y, @width, @height = x, y, w, h
8
+ end
9
+
10
+ def write
11
+ @parent.doc.search('//p:spTree').append(self.raw)
12
+ end
13
+
14
+ def raw
15
+ raw = <<EOF
16
+ <p:sp><p:nvSpPr><p:cNvPr id="#{self.object_id}" name="TextBox #{self.object_id}"/><p:cNvSpPr txBox="1"/><p:nvPr/></p:nvSpPr><p:spPr><a:xfrm><a:off x="#{self.x}" y="#{self.y}"/><a:ext cx="#{self.width}" cy="#{self.height}"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:noFill/></p:spPr><p:txBody><a:bodyPr wrap="square" rtlCol="0"><a:spAutoFit/></a:bodyPr><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" dirty="0" smtClean="0"/><a:t>#{self.text}</a:t></a:r></a:p></p:txBody></p:sp>
17
+ EOF
18
+ end
19
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubypoint
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - James Pozdena
8
+ autorequire: rubypoint
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-17 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: zipruby
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.3.2
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: hpricot
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.8.1
34
+ version:
35
+ description: Make pptx files with Ruby.
36
+ email: jpoz@jpoz.net
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - GPL-LICENSE
43
+ files:
44
+ - GPL-LICENSE
45
+ - README.textile
46
+ - Rakefile
47
+ - lib/rubypoint/content_types_xml.rb
48
+ - lib/rubypoint/core.rb
49
+ - lib/rubypoint/docProps/app.rb
50
+ - lib/rubypoint/element.rb
51
+ - lib/rubypoint/file.rb
52
+ - lib/rubypoint/ppt/presentation.rb
53
+ - lib/rubypoint/ppt/rels/presentation_rel.rb
54
+ - lib/rubypoint/presentation.rb
55
+ - lib/rubypoint/relationship.rb
56
+ - lib/rubypoint/slide/rel.rb
57
+ - lib/rubypoint/slide/slide.rb
58
+ - lib/rubypoint/textfield.rb
59
+ - lib/rubypoint.rb
60
+ has_rdoc: true
61
+ homepage: http://github.com/jpoz/rubypoint
62
+ licenses: []
63
+
64
+ post_install_message:
65
+ rdoc_options: []
66
+
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: "0"
74
+ version:
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: "0"
80
+ version:
81
+ requirements: []
82
+
83
+ rubyforge_project:
84
+ rubygems_version: 1.3.5
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: Make pptx files with Ruby.
88
+ test_files: []
89
+