clarus 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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>