clarus 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data/.gitignore +0 -1
  2. data/.rvmrc +1 -0
  3. data/Gemfile +2 -7
  4. data/Rakefile +4 -2
  5. data/clarus.gemspec +8 -3
  6. data/jars/{j2w-ejb-2.0_2011Jun06.jar → j2w-ejb-2.0.jar} +0 -0
  7. data/lib/clarus.rb +10 -3
  8. data/lib/clarus/document.rb +26 -27
  9. data/lib/clarus/heading.rb +18 -0
  10. data/lib/clarus/image.rb +38 -0
  11. data/lib/clarus/link.rb +13 -0
  12. data/lib/clarus/paragraph.rb +22 -0
  13. data/lib/clarus/paragraph_break.rb +7 -0
  14. data/lib/clarus/templates/document_template.erb +454 -0
  15. data/lib/clarus/templates/image_template.erb +23 -0
  16. data/lib/clarus/templates/link_template.erb +10 -0
  17. data/lib/clarus/templates/paragraph_fragment_template.erb +8 -0
  18. data/lib/clarus/templates/text_block_template.erb +6 -0
  19. data/lib/clarus/text_block.rb +20 -0
  20. data/lib/clarus/version.rb +1 -1
  21. data/spec/benchmark_test.rb +3 -5
  22. data/spec/clarus_spec.rb +3 -1
  23. data/spec/document_spec.rb +38 -30
  24. data/spec/image_spec.rb +18 -0
  25. data/spec/link_spec.rb +11 -0
  26. data/spec/output/.gitkeep +0 -0
  27. data/spec/output/add_bold_text.doc +12 -0
  28. data/spec/output/add_heading.doc +14 -0
  29. data/spec/output/add_image.doc +674 -0
  30. data/spec/output/add_link.doc +10 -0
  31. data/spec/output/add_paragraph_break.doc +465 -0
  32. data/spec/{fixtures/add_paragraph_break.doc → output/add_text.doc} +2 -15
  33. data/spec/output/add_text_document.doc +464 -0
  34. data/spec/output/add_underlined_text.doc +12 -0
  35. data/spec/output/encoded_image.txt +199 -0
  36. data/spec/output/indent.doc +12 -0
  37. data/spec/output/link_test.doc +10 -0
  38. data/spec/output/match_header.doc +426 -0
  39. data/spec/output/mixed_paragraph_text.doc +19 -0
  40. data/spec/output/paragraph_add_text.doc +12 -0
  41. data/spec/paragraph_spec.rb +36 -0
  42. data/spec/spec_helper.rb +6 -1
  43. metadata +126 -47
  44. data/spec/fixtures/add_image.doc +0 -1205
  45. data/spec/fixtures/add_text.doc +0 -25
data/.gitignore CHANGED
@@ -3,4 +3,3 @@
3
3
  Gemfile.lock
4
4
  pkg/*
5
5
  *.swp
6
- spec/output/*
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use ruby-1.9.2-p180@clarus
data/Gemfile CHANGED
@@ -1,11 +1,6 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- # Specify your gem's dependencies in junodoc.gemspec
3
+ # Specify your gem's dependencies in clarus.gemspec
4
4
  gemspec
5
5
 
6
- gem 'rake'
7
- gem 'minitest'
8
-
9
- group :development do
10
- gem 'jruby-openssl'
11
- end
6
+ gem 'erubis'
data/Rakefile CHANGED
@@ -1,9 +1,11 @@
1
- require 'bundler/gem_tasks'
2
- require 'rake/testtask'
3
1
  require 'bundler'
2
+ #require 'bundler/gem_tasks'
3
+ require 'rake/testtask'
4
4
 
5
5
  Bundler.setup
6
6
 
7
+ task :default => 'test'
8
+
7
9
  Rake::TestTask.new do |t|
8
10
  t.pattern = "spec/*_spec.rb"
9
11
  end
@@ -1,6 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "clarus/version"
2
+ require File.expand_path("../lib/clarus/version", __FILE__)
4
3
 
5
4
  Gem::Specification.new do |s|
6
5
  s.name = "clarus"
@@ -9,10 +8,16 @@ Gem::Specification.new do |s|
9
8
  s.email = ["dan@revelationglobal.com"]
10
9
  s.homepage = ""
11
10
  s.summary = %q{Clarus is a way to create documents programmatically. Moof!}
12
- s.description = %q{Clarus makes a jruby wrapper around the java2word library to create documents.}
11
+ s.description = %q{Clarus makes a ruby library o create word 2003 compatible documents.}
13
12
 
14
13
  s.rubyforge_project = "clarus"
15
14
 
15
+ s.add_dependency 'json'
16
+ s.add_dependency 'imagesize'
17
+
18
+ s.add_development_dependency 'rake'
19
+ s.add_development_dependency 'minitest'
20
+
16
21
  s.files = `git ls-files`.split("\n")
17
22
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
23
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
@@ -1,6 +1,13 @@
1
- require 'java'
2
- require 'clarus/version'
3
- require 'clarus/document'
1
+ require 'erubis'
2
+
3
+ require File.expand_path('../clarus/version', __FILE__)
4
+ require File.expand_path('../clarus/document', __FILE__)
5
+ require File.expand_path('../clarus/heading', __FILE__)
6
+ require File.expand_path('../clarus/paragraph', __FILE__)
7
+ require File.expand_path('../clarus/text_block', __FILE__)
8
+ require File.expand_path('../clarus/link', __FILE__)
9
+ require File.expand_path('../clarus/image', __FILE__)
10
+ require File.expand_path('../clarus/paragraph_break', __FILE__)
4
11
 
5
12
  module Clarus
6
13
  end
@@ -1,50 +1,49 @@
1
1
  module Clarus
2
- require File.dirname(__FILE__) + '/../../jars/j2w-ejb-2.0_2011Jun06'
3
- require File.dirname(__FILE__) + '/../../jars/xstream-1.3.1'
4
-
5
2
  class Document
6
- import 'java.io.PrintWriter'
7
- import 'java.io.File'
8
- import 'word.api.interfaces.IDocument'
9
- import 'word.w2004.Document2004'
10
- import 'word.w2004.elements.BreakLine'
11
- import 'word.w2004.elements.Heading1'
12
- import 'word.w2004.elements.Image'
13
- import 'word.w2004.elements.ImageLocation'
14
- import 'word.w2004.elements.Paragraph'
15
- import 'word.w2004.elements.Table'
16
-
17
3
  def initialize
18
4
  @doc = create_document
5
+ @items = []
19
6
  end
20
7
 
21
- def add_text(text)
22
- @doc.getBody.addEle(Paragraph.new(text))
8
+ def new_paragraph
9
+ paragraph = Clarus::Paragraph.new
10
+ yield(paragraph)
11
+ @items << paragraph
23
12
  end
24
13
 
25
-
26
- def add_image(image_url)
27
- @doc.getBody.addEle(Image.from_WEB_URL(image_url))
14
+ def new_heading
15
+ heading = Clarus::Heading.new
16
+ yield(heading)
17
+ @items << heading
28
18
  end
29
19
 
30
- def add_paragraph_break
31
- @doc.getBody.addEle(BreakLine.new)
20
+ def link(destination, text)
21
+ @items << Clarus::Link.new(destination, text)
32
22
  end
33
23
 
34
24
  def write_document(path)
35
- writer = PrintWriter.new(File.new(path))
36
- writer.println(@doc.getContent)
37
- writer.close
38
- @doc = nil
25
+ File.open(path, "w") do |f|
26
+ result = stream_document
27
+ f.write(result)
28
+ end
29
+ end
30
+
31
+ def paragraph_break
32
+ @items << Clarus::ParagraphBreak.new
33
+ end
34
+
35
+ def image(uri)
36
+ @items << Clarus::Image.new(uri)
39
37
  end
40
38
 
41
39
  def stream_document
42
- @doc.getContent
40
+ @doc.result(:items => @items)
43
41
  end
44
42
 
45
43
  private
46
44
  def create_document
47
- @doc = Document2004.new
45
+ document_template = File.read(File.expand_path('../templates/document_template.erb', __FILE__))
46
+ Erubis::Eruby.new(document_template)
48
47
  end
49
48
  end
50
49
  end
@@ -0,0 +1,18 @@
1
+ module Clarus
2
+ class Heading
3
+ def initialize
4
+ @style = '<w:pStyle w:val="Heading1" />'
5
+ @finished_text = ""
6
+ end
7
+
8
+ def add_text(text)
9
+ @finished_text.concat "<w:t>#{text}</w:t>\n"
10
+ end
11
+
12
+ def render
13
+ document_template = File.read(File.expand_path('../templates/paragraph_fragment_template.erb', __FILE__))
14
+ Erubis::Eruby.new(document_template).result(:style => @style, :finished_text => @finished_text)
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,38 @@
1
+ require 'open-uri'
2
+ require 'base64'
3
+ require 'image_size'
4
+
5
+ module Clarus
6
+ class Image
7
+ def initialize(uri)
8
+ @image_path = uri
9
+ get_image_data
10
+ get_image_dimensions
11
+ end
12
+
13
+ def get_image_dimensions
14
+ @image_size = ImageSize.new(get_image_data)
15
+ end
16
+
17
+ def get_image_data
18
+ @image_data ||= open(@image_path).read
19
+ end
20
+
21
+ def encoded_image
22
+ @image_blob ||= Base64.encode64(get_image_data)
23
+ end
24
+
25
+ def render
26
+ document_template = File.read(File.expand_path('../templates/image_template.erb', __FILE__))
27
+ filename = File.basename(@image_path)
28
+ wordml_filename = "wordml://#{Time.now.to_i}#{filename}"
29
+ Erubis::Eruby.new(document_template).result(
30
+ :wordml_filename => wordml_filename,
31
+ :width => @image_size.width,
32
+ :height => @image_size.height,
33
+ :filename => filename,
34
+ :bindata => encoded_image
35
+ )
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,13 @@
1
+ module Clarus
2
+ class Link
3
+ def initialize(destination, text = nil)
4
+ @destination = destination
5
+ @text = text || destination
6
+ end
7
+
8
+ def render
9
+ document_template = File.read(File.expand_path('../templates/link_template.erb', __FILE__))
10
+ Erubis::Eruby.new(document_template).result(:text => @text, :destination => @destination)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,22 @@
1
+ module Clarus
2
+ class Paragraph
3
+ INDENT_CONSTANT = 540
4
+
5
+ def initialize(indent = 0)
6
+ @indent = INDENT_CONSTANT * indent
7
+ @style = ""
8
+ @items = []
9
+ end
10
+
11
+ def add_text(text, text_style = nil)
12
+ @items << TextBlock.new(text, text_style)
13
+ end
14
+
15
+ def render
16
+ document_template = File.read(File.expand_path('../templates/paragraph_fragment_template.erb', __FILE__))
17
+ Erubis::Eruby.new(document_template).result(:style => @style,
18
+ :items => @items,
19
+ :indent => @indent)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,7 @@
1
+ module Clarus
2
+ class ParagraphBreak
3
+ def render
4
+ "<w:p/>"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,454 @@
1
+ <?xml version="1.0" encoding="utf-8" standalone="yes"?>
2
+ <?mso-application progid="Word.Document"?>
3
+ <w:wordDocument
4
+ xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
5
+ xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
6
+ xmlns:mo="http://schemas.microsoft.com/office/mac/office/2008/main"
7
+ xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006"
8
+ xmlns:mv="urn:schemas-microsoft-com:mac:vml"
9
+ xmlns:o="urn:schemas-microsoft-com:office:office"
10
+ xmlns:v="urn:schemas-microsoft-com:vml"
11
+ xmlns:w10="urn:schemas-microsoft-com:office:word"
12
+ xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
13
+ xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"
14
+ xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2"
15
+ xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"
16
+ w:macrosPresent="no"
17
+ w:embeddedObjPresent="no"
18
+ w:ocxPresent="no"
19
+ xml:space="preserve">
20
+ <w:ignoreSubtree w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/>
21
+ <o:DocumentProperties>
22
+ <o:Title/>
23
+ <o:Subject/>
24
+ <o:Keywords/>
25
+ <o:Description/>
26
+ <o:Category/>
27
+ <o:Author/>
28
+ <o:LastAuthor/>
29
+ <o:Manager/>
30
+ <o:Company/>
31
+ <o:Revision>1</o:Revision>
32
+ <o:TotalTime>1</o:TotalTime>
33
+ <o:Created/>
34
+ <o:LastSaved/>
35
+ <o:Pages>1</o:Pages>
36
+ <o:Words>0</o:Words>
37
+ <o:Characters>0</o:Characters>
38
+ <o:Bytes>1</o:Bytes>
39
+ <o:Lines>1</o:Lines>
40
+ <o:Paragraphs>1</o:Paragraphs>
41
+ <o:CharactersWithSpaces>0</o:CharactersWithSpaces>
42
+ <o:Version>1</o:Version>
43
+ </o:DocumentProperties>
44
+ <w:fonts>
45
+ <w:defaultFonts w:ascii="Cambria" w:fareast="Cambria" w:h-ansi="Cambria" w:cs="Times New Roman"/>
46
+ <w:font w:name="Times New Roman">
47
+ <w:panose-1 w:val="02020603050405020304"/>
48
+ <w:charset w:val="00"/>
49
+ <w:family w:val="auto"/>
50
+ <w:pitch w:val="variable"/>
51
+ <w:sig w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000001" w:csb-1="00000000"/>
52
+ </w:font>
53
+ <w:font w:name="Calibri">
54
+ <w:panose-1 w:val="020F0502020204030204"/>
55
+ <w:charset w:val="00"/>
56
+ <w:family w:val="auto"/>
57
+ <w:pitch w:val="variable"/>
58
+ <w:sig w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000001" w:csb-1="00000000"/>
59
+ </w:font>
60
+ <w:font w:name="Cambria">
61
+ <w:panose-1 w:val="02040503050406030204"/>
62
+ <w:charset w:val="00"/>
63
+ <w:family w:val="auto"/>
64
+ <w:pitch w:val="variable"/>
65
+ <w:sig w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000001" w:csb-1="00000000"/>
66
+ </w:font>
67
+ </w:fonts>
68
+ <w:styles>
69
+ <w:versionOfBuiltInStylenames w:val="2"/>
70
+ <w:latentStyles w:defLockedState="off" w:latentStyleCount="276">
71
+ <w:lsdException w:name="Normal"/>
72
+ <w:lsdException w:name="heading 1"/>
73
+ <w:lsdException w:name="heading 2"/>
74
+ <w:lsdException w:name="heading 3"/>
75
+ <w:lsdException w:name="heading 4"/>
76
+ <w:lsdException w:name="heading 5"/>
77
+ <w:lsdException w:name="heading 6"/>
78
+ <w:lsdException w:name="heading 7"/>
79
+ <w:lsdException w:name="heading 8"/>
80
+ <w:lsdException w:name="heading 9"/>
81
+ <w:lsdException w:name="toc 1"/>
82
+ <w:lsdException w:name="toc 2"/>
83
+ <w:lsdException w:name="toc 3"/>
84
+ <w:lsdException w:name="toc 4"/>
85
+ <w:lsdException w:name="toc 5"/>
86
+ <w:lsdException w:name="toc 6"/>
87
+ <w:lsdException w:name="toc 7"/>
88
+ <w:lsdException w:name="toc 8"/>
89
+ <w:lsdException w:name="toc 9"/>
90
+ <w:lsdException w:name="caption"/>
91
+ <w:lsdException w:name="Title"/>
92
+ <w:lsdException w:name="Default Paragraph Font"/>
93
+ <w:lsdException w:name="Subtitle"/>
94
+ <w:lsdException w:name="Strong"/>
95
+ <w:lsdException w:name="Emphasis"/>
96
+ <w:lsdException w:name="Table Grid"/>
97
+ <w:lsdException w:name="Placeholder Text"/>
98
+ <w:lsdException w:name="No Spacing"/>
99
+ <w:lsdException w:name="Light Shading"/>
100
+ <w:lsdException w:name="Light List"/>
101
+ <w:lsdException w:name="Light Grid"/>
102
+ <w:lsdException w:name="Medium Shading 1"/>
103
+ <w:lsdException w:name="Medium Shading 2"/>
104
+ <w:lsdException w:name="Medium List 1"/>
105
+ <w:lsdException w:name="Medium List 2"/>
106
+ <w:lsdException w:name="Medium Grid 1"/>
107
+ <w:lsdException w:name="Medium Grid 2"/>
108
+ <w:lsdException w:name="Medium Grid 3"/>
109
+ <w:lsdException w:name="Dark List"/>
110
+ <w:lsdException w:name="Colorful Shading"/>
111
+ <w:lsdException w:name="Colorful List"/>
112
+ <w:lsdException w:name="Colorful Grid"/>
113
+ <w:lsdException w:name="Light Shading Accent 1"/>
114
+ <w:lsdException w:name="Light List Accent 1"/>
115
+ <w:lsdException w:name="Light Grid Accent 1"/>
116
+ <w:lsdException w:name="Medium Shading 1 Accent 1"/>
117
+ <w:lsdException w:name="Medium Shading 2 Accent 1"/>
118
+ <w:lsdException w:name="Medium List 1 Accent 1"/>
119
+ <w:lsdException w:name="Revision"/>
120
+ <w:lsdException w:name="List Paragraph"/>
121
+ <w:lsdException w:name="Quote"/>
122
+ <w:lsdException w:name="Intense Quote"/>
123
+ <w:lsdException w:name="Medium List 2 Accent 1"/>
124
+ <w:lsdException w:name="Medium Grid 1 Accent 1"/>
125
+ <w:lsdException w:name="Medium Grid 2 Accent 1"/>
126
+ <w:lsdException w:name="Medium Grid 3 Accent 1"/>
127
+ <w:lsdException w:name="Dark List Accent 1"/>
128
+ <w:lsdException w:name="Colorful Shading Accent 1"/>
129
+ <w:lsdException w:name="Colorful List Accent 1"/>
130
+ <w:lsdException w:name="Colorful Grid Accent 1"/>
131
+ <w:lsdException w:name="Light Shading Accent 2"/>
132
+ <w:lsdException w:name="Light List Accent 2"/>
133
+ <w:lsdException w:name="Light Grid Accent 2"/>
134
+ <w:lsdException w:name="Medium Shading 1 Accent 2"/>
135
+ <w:lsdException w:name="Medium Shading 2 Accent 2"/>
136
+ <w:lsdException w:name="Medium List 1 Accent 2"/>
137
+ <w:lsdException w:name="Medium List 2 Accent 2"/>
138
+ <w:lsdException w:name="Medium Grid 1 Accent 2"/>
139
+ <w:lsdException w:name="Medium Grid 2 Accent 2"/>
140
+ <w:lsdException w:name="Medium Grid 3 Accent 2"/>
141
+ <w:lsdException w:name="Dark List Accent 2"/>
142
+ <w:lsdException w:name="Colorful Shading Accent 2"/>
143
+ <w:lsdException w:name="Colorful List Accent 2"/>
144
+ <w:lsdException w:name="Colorful Grid Accent 2"/>
145
+ <w:lsdException w:name="Light Shading Accent 3"/>
146
+ <w:lsdException w:name="Light List Accent 3"/>
147
+ <w:lsdException w:name="Light Grid Accent 3"/>
148
+ <w:lsdException w:name="Medium Shading 1 Accent 3"/>
149
+ <w:lsdException w:name="Medium Shading 2 Accent 3"/>
150
+ <w:lsdException w:name="Medium List 1 Accent 3"/>
151
+ <w:lsdException w:name="Medium List 2 Accent 3"/>
152
+ <w:lsdException w:name="Medium Grid 1 Accent 3"/>
153
+ <w:lsdException w:name="Medium Grid 2 Accent 3"/>
154
+ <w:lsdException w:name="Medium Grid 3 Accent 3"/>
155
+ <w:lsdException w:name="Dark List Accent 3"/>
156
+ <w:lsdException w:name="Colorful Shading Accent 3"/>
157
+ <w:lsdException w:name="Colorful List Accent 3"/>
158
+ <w:lsdException w:name="Colorful Grid Accent 3"/>
159
+ <w:lsdException w:name="Light Shading Accent 4"/>
160
+ <w:lsdException w:name="Light List Accent 4"/>
161
+ <w:lsdException w:name="Light Grid Accent 4"/>
162
+ <w:lsdException w:name="Medium Shading 1 Accent 4"/>
163
+ <w:lsdException w:name="Medium Shading 2 Accent 4"/>
164
+ <w:lsdException w:name="Medium List 1 Accent 4"/>
165
+ <w:lsdException w:name="Medium List 2 Accent 4"/>
166
+ <w:lsdException w:name="Medium Grid 1 Accent 4"/>
167
+ <w:lsdException w:name="Medium Grid 2 Accent 4"/>
168
+ <w:lsdException w:name="Medium Grid 3 Accent 4"/>
169
+ <w:lsdException w:name="Dark List Accent 4"/>
170
+ <w:lsdException w:name="Colorful Shading Accent 4"/>
171
+ <w:lsdException w:name="Colorful List Accent 4"/>
172
+ <w:lsdException w:name="Colorful Grid Accent 4"/>
173
+ <w:lsdException w:name="Light Shading Accent 5"/>
174
+ <w:lsdException w:name="Light List Accent 5"/>
175
+ <w:lsdException w:name="Light Grid Accent 5"/>
176
+ <w:lsdException w:name="Medium Shading 1 Accent 5"/>
177
+ <w:lsdException w:name="Medium Shading 2 Accent 5"/>
178
+ <w:lsdException w:name="Medium List 1 Accent 5"/>
179
+ <w:lsdException w:name="Medium List 2 Accent 5"/>
180
+ <w:lsdException w:name="Medium Grid 1 Accent 5"/>
181
+ <w:lsdException w:name="Medium Grid 2 Accent 5"/>
182
+ <w:lsdException w:name="Medium Grid 3 Accent 5"/>
183
+ <w:lsdException w:name="Dark List Accent 5"/>
184
+ <w:lsdException w:name="Colorful Shading Accent 5"/>
185
+ <w:lsdException w:name="Colorful List Accent 5"/>
186
+ <w:lsdException w:name="Colorful Grid Accent 5"/>
187
+ <w:lsdException w:name="Light Shading Accent 6"/>
188
+ <w:lsdException w:name="Light List Accent 6"/>
189
+ <w:lsdException w:name="Light Grid Accent 6"/>
190
+ <w:lsdException w:name="Medium Shading 1 Accent 6"/>
191
+ <w:lsdException w:name="Medium Shading 2 Accent 6"/>
192
+ <w:lsdException w:name="Medium List 1 Accent 6"/>
193
+ <w:lsdException w:name="Medium List 2 Accent 6"/>
194
+ <w:lsdException w:name="Medium Grid 1 Accent 6"/>
195
+ <w:lsdException w:name="Medium Grid 2 Accent 6"/>
196
+ <w:lsdException w:name="Medium Grid 3 Accent 6"/>
197
+ <w:lsdException w:name="Dark List Accent 6"/>
198
+ <w:lsdException w:name="Colorful Shading Accent 6"/>
199
+ <w:lsdException w:name="Colorful List Accent 6"/>
200
+ <w:lsdException w:name="Colorful Grid Accent 6"/>
201
+ <w:lsdException w:name="Subtle Emphasis"/>
202
+ <w:lsdException w:name="Intense Emphasis"/>
203
+ <w:lsdexception w:name="Subtle Reference"/>
204
+ <w:lsdException w:name="Intense Reference"/>
205
+ <w:lsdException w:name="Book Title"/>
206
+ <w:lsdException w:name="Bibliography"/>
207
+ <w:lsdException w:name="TOC Heading"/>
208
+ </w:latentStyles>
209
+ <w:style w:type="paragraph" w:default="on" w:styleId="Normal">
210
+ <w:name w:val="Normal"/>
211
+ <w:rsid w:val="00D711DA"/>
212
+ <w:rPr>
213
+ <wx:font wx:val="Cambria"/>
214
+ <w:sz w:val="24"/>
215
+ <w:sz-cs w:val="24"/>
216
+ <w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/>
217
+ </w:rPr>
218
+ </w:style>
219
+ <w:style w:type="paragraph" w:styleId="Heading1">
220
+ <w:name w:val="heading 1"/>
221
+ <wx:uiName wx:val="Heading 1"/>
222
+ <w:basedOn w:val="Normal"/>
223
+ <w:next w:val="Normal"/>
224
+ <w:link w:val="Heading1Char"/>
225
+ <w:rsid w:val="00401F80"/>
226
+ <w:pPr>
227
+ <w:keepNext/>
228
+ <w:keepLines/>
229
+ <w:spacing w:before="480"/>
230
+ <w:outlineLvl w:val="0"/>
231
+ </w:pPr>
232
+ <w:rPr>
233
+ <w:rFonts w:ascii="Calibri" w:fareast="Times New Roman" w:h-ansi="Calibri"/>
234
+ <wx:font wx:val="Calibri"/>
235
+ <w:b/>
236
+ <w:b-cs/>
237
+ <w:color w:val="345A8A"/>
238
+ <w:sz w:val="32"/>
239
+ <w:sz-cs w:val="32"/>
240
+ </w:rPr>
241
+ </w:style>
242
+ <w:style w:type="paragraph" w:styleId="Heading2">
243
+ <w:name w:val="heading 2"/>
244
+ <wx:uiName wx:val="Heading 2"/>
245
+ <w:basedOn w:val="Normal"/>
246
+ <w:next w:val="Normal"/>
247
+ <w:link w:val="Heading2Char"/>
248
+ <w:rsid w:val="00401F80"/>
249
+ <w:pPr>
250
+ <w:keepNext/>
251
+ <w:keepLines/>
252
+ <w:spacing w:before="200"/>
253
+ <w:outlineLvl w:val="1"/>
254
+ </w:pPr>
255
+ <w:rPr>
256
+ <w:rFonts w:ascii="Calibri" w:fareast="Times New Roman" w:h-ansi="Calibri"/>
257
+ <wx:font wx:val="Calibri"/>
258
+ <w:b/>
259
+ <w:b-cs/>
260
+ <w:color w:val="4F81BD"/>
261
+ <w:sz w:val="26"/>
262
+ <w:sz-cs w:val="26"/>
263
+ </w:rPr>
264
+ </w:style>
265
+ <w:style w:type="character" w:styleId="Hyperlink">
266
+ <w:name w:val="Hyperlink"/>
267
+ <w:basedOn w:val="DefaultParagraphFont"/>
268
+ <w:rsid w:val="00A30FBB"/>
269
+ <w:rPr>
270
+ <w:color w:val="0000FF"/>
271
+ <w:u w:val="single"/>
272
+ </w:rPr>
273
+ </w:style>
274
+ <w:style w:type="paragraph" w:styleId="Heading3">
275
+ <w:name w:val="heading 3"/>
276
+ <wx:uiName wx:val="Heading 3"/>
277
+ <w:basedOn w:val="Normal"/>
278
+ <w:next w:val="Normal"/>
279
+ <w:link w:val="Heading3Char"/>
280
+ <w:rsid w:val="00401F80"/>
281
+ <w:pPr>
282
+ <w:keepNext/>
283
+ <w:keepLines/>
284
+ <w:spacing w:before="200"/>
285
+ <w:outlineLvl w:val="2"/>
286
+ </w:pPr>
287
+ <w:rPr>
288
+ <w:rFonts w:ascii="Calibri" w:fareast="Times New Roman" w:h-ansi="Calibri"/>
289
+ <wx:font wx:val="Calibri"/>
290
+ <w:b/>
291
+ <w:b-cs/>
292
+ <w:color w:val="4F81BD"/>
293
+ </w:rPr>
294
+ </w:style>
295
+ <w:style w:type="character" w:default="on" w:styleId="DefaultParagraphFont">
296
+ <w:name w:val="Default Paragraph Font"/>
297
+ </w:style>
298
+ <w:style w:type="table" w:default="on" w:styleId="TableNormal">
299
+ <w:name w:val="Normal Table"/>
300
+ <wx:uiName wx:val="Table Normal"/>
301
+ <w:rPr>
302
+ <wx:font wx:val="Cambria"/>
303
+ <w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/>
304
+ </w:rPr>
305
+ <w:tblPr>
306
+ <w:tblInd w:w="0" w:type="dxa"/>
307
+ <w:tblCellMar>
308
+ <w:top w:w="0" w:type="dxa"/>
309
+ <w:left w:w="108" w:type="dxa"/>
310
+ <w:bottom w:w="0" w:type="dxa"/>
311
+ <w:right w:w="108" w:type="dxa"/>
312
+ </w:tblCellMar>
313
+ </w:tblPr>
314
+ </w:style>
315
+ <w:style w:type="list" w:default="on" w:styleId="NoList">
316
+ <w:name w:val="No List"/>
317
+ </w:style>
318
+ <w:style w:type="character" w:styleId="Heading1Char">
319
+ <w:name w:val="Heading 1 Char"/>
320
+ <w:basedOn w:val="DefaultParagraphFont"/>
321
+ <w:link w:val="Heading1"/>
322
+ <w:rsid w:val="00401F80"/>
323
+ <w:rPr>
324
+ <w:rFonts w:ascii="Calibri" w:fareast="Times New Roman" w:h-ansi="Calibri" w:cs="Times New Roman"/>
325
+ <w:b/>
326
+ <w:b-cs/>
327
+ <w:color w:val="345A8A"/>
328
+ <w:sz w:val="32"/>
329
+ <w:sz-cs w:val="32"/>
330
+ <w:lang w:val="EN-US"/>
331
+ </w:rPr>
332
+ </w:style>
333
+ <w:style w:type="character" w:styleId="Heading2Char">
334
+ <w:name w:val="Heading 2 Char"/>
335
+ <w:basedOn w:val="DefaultParagraphFont"/>
336
+ <w:link w:val="Heading2"/>
337
+ <w:rsid w:val="00401F80"/>
338
+ <w:rPr>
339
+ <w:rFonts w:ascii="Calibri" w:fareast="Times New Roman" w:h-ansi="Calibri" w:cs="Times New Roman"/>
340
+ <w:b/>
341
+ <w:b-cs/>
342
+ <w:color w:val="4F81BD"/>
343
+ <w:sz w:val="26"/>
344
+ <w:sz-cs w:val="26"/>
345
+ <w:lang w:val="EN-US"/>
346
+ </w:rPr>
347
+ </w:style>
348
+ <w:style w:type="character" w:styleId="Heading3Char">
349
+ <w:name w:val="Heading 3 Char"/>
350
+ <w:basedOn w:val="DefaultParagraphFont"/>
351
+ <w:link w:val="Heading3"/>
352
+ <w:rsid w:val="00401F80"/>
353
+ <w:rPr>
354
+ <w:rFonts w:ascii="Calibri" w:fareast="Times New Roman" w:h-ansi="Calibri" w:cs="Times New Roman"/>
355
+ <w:b/>
356
+ <w:b-cs/>
357
+ <w:color w:val="4F81BD"/>
358
+ <w:lang w:val="EN-AU"/>
359
+ </w:rPr>
360
+ </w:style>
361
+ <w:style w:type="list" w:default="on" w:styleId="NoList">
362
+ <w:name w:val="No List"/>
363
+ </w:style>
364
+ <w:style w:type="paragraph" w:styleId="Header">
365
+ <w:name w:val="header"/>
366
+ <wx:uiName wx:val="Header"/>
367
+ <w:basedOn w:val="Normal"/>
368
+ <w:link w:val="HeaderChar"/>
369
+ <w:rsid w:val="00B5709B"/>
370
+ <w:pPr>
371
+ <w:tabs>
372
+ <w:tab w:val="center" w:pos="4320"/>
373
+ <w:tab w:val="right" w:pos="8640"/>
374
+ </w:tabs>
375
+ </w:pPr>
376
+ <w:rPr>
377
+ <wx:font wx:val="Cambria"/>
378
+ </w:rPr>
379
+ </w:style>
380
+ <w:style w:type="character" w:styleId="HeaderChar">
381
+ <w:name w:val="Header Char"/>
382
+ <w:basedOn w:val="DefaultParagraphFont"/>
383
+ <w:link w:val="Header"/>
384
+ <w:rsid w:val="00B5709B"/>
385
+ <w:rPr>
386
+ <w:sz w:val="24"/>
387
+ <w:sz-cs w:val="24"/>
388
+ </w:rPr>
389
+ </w:style>
390
+ <w:style w:type="paragraph" w:styleId="Footer">
391
+ <w:name w:val="footer"/>
392
+ <wx:uiName wx:val="Footer"/>
393
+ <w:basedOn w:val="Normal"/>
394
+ <w:link w:val="FooterChar"/>
395
+ <w:rsid w:val="00B5709B"/>
396
+ <w:pPr>
397
+ <w:tabs>
398
+ <w:tab w:val="center" w:pos="4320"/>
399
+ <w:tab w:val="right" w:pos="8640"/>
400
+ </w:tabs>
401
+ </w:pPr>
402
+ <w:rPr>
403
+ <wx:font wx:val="Cambria"/>
404
+ </w:rPr>
405
+ </w:style>
406
+ <w:style w:type="character" w:styleId="FooterChar">
407
+ <w:name w:val="Footer Char"/>
408
+ <w:basedOn w:val="DefaultParagraphFont"/>
409
+ <w:link w:val="Footer"/>
410
+ <w:rsid w:val="00B5709B"/>
411
+ <w:rPr>
412
+ <w:sz w:val="24"/>
413
+ <w:sz-cs w:val="24"/>
414
+ </w:rPr>
415
+ </w:style>
416
+ <w:style w:type="character" w:styleId="PageNumber">
417
+ <w:name w:val="page number"/>
418
+ <wx:uiName wx:val="Page Number"/>
419
+ <w:basedOn w:val="DefaultParagraphFont"/>
420
+ <w:rsid w:val="009F65CC"/>
421
+ </w:style>
422
+ </w:styles>
423
+ <w:docPr>
424
+ <w:view w:val="print"/>
425
+ <w:zoom w:percent="100"/>
426
+ <w:proofState w:spelling="clean" w:grammar="clean"/>
427
+ <w:defaultTabStop w:val="720"/>
428
+ <w:drawingGridHorizontalSpacing w:val="360"/>
429
+ <w:drawingGridVerticalSpacing w:val="360"/>
430
+ <w:displayHorizontalDrawingGridEvery w:val="0"/>
431
+ <w:displayVerticalDrawingGridEvery w:val="0"/>
432
+ <w:punctuationKerning/>
433
+ <w:characterSpacingControl w:val="DontCompress"/>
434
+ <w:allowPNG/>
435
+ <w:doNotSaveWebPagesAsSingleFile/>
436
+ <w:savePreviewPicture/>
437
+ <w:validateAgainstSchema/>
438
+ <w:saveInvalidXML w:val="off"/>
439
+ <w:ignoreMixedContent w:val="off"/>
440
+ <w:alwaysShowPlaceholderText w:val="off"/>
441
+ <w:compat>
442
+ <w:breakWrappedTables/>
443
+ <w:snapToGridInCell/>
444
+ <w:wrapTextWithPunct/>
445
+ <w:useAsianBreakRules/>
446
+ <w:dontGrowAutofit/>
447
+ </w:compat>
448
+ </w:docPr>
449
+ <w:body>
450
+ <% items.each do |item| %>
451
+ <%= item.render %>
452
+ <% end %>
453
+ </w:body>
454
+ </w:wordDocument>