Permalink
Browse files

initial commit

  • Loading branch information...
0 parents commit 8003ffe3aef9fc2c1cd994502d14facffbeea14c @bagilevi committed May 28, 2010
@@ -0,0 +1,12 @@
+.DS_Store
+log/*
+tmp/**/*
+*.swp
+*.swo
+nbproject
+.project
+.idea
+.idea/**
+*~
+**/*~
+
@@ -0,0 +1,45 @@
+h1. DocX Builder
+
+_DocX Builder_ is a small utility to help you compose a docx (Microsoft Word 2007) based on a template's XML.
+
+The @slice_template.rb@ can be used separately for non-docx applications.
+
+The steps:
+# Create a docx file with _Microsoft Word_ or _OpenOffice.org_
+# Unzip it (the docx file is actually a ZIP package)
+# Create your template from @word/document.xml@
+# Open the template and reformat it (I used RubyMine)
+# Find the parts you need to generate programmatically, and mark them up with <!-- BEGIN SOMETHING --> ... <!-- END SOMETHING -->, see @example/plan_report_template.xml@
+# Remove the formatting (compact the XML)
+# Create your builder, see @example.rb@
+
+h2. The example explained
+
+pre.
+ _____head______ _________area_______________________________________ _foot_
+ | | | |
+ | | ________goal________________________| |
+ | | | | |
+ | | | _______objective____| |
+ | | | | | |
+ | (Plan Name) | (Area Name) | (Goal Name) | (Objective Name) | |
+ _____________________________________________________________________________
+ XML DOCUMENT
+
+You can assign a text to a placeholder:
+
+pre.
+ template['head']['Plan Name'] = @plan.name
+
+Or you can replace a slice with a string, that can be composed by multiplying that slice:
+
+pre.
+ template['area'] =
+ @plan.areas.map do |area|
+
+ area_slice = template['area'].clone
+ area_slice['Area Name'] = area.description
+ area_slice['goal'] = '...'
+ end
+
+See @example.rb@
@@ -0,0 +1,38 @@
+require 'slice_template'
+
+class DocxBuilder
+ def initialize(template_filename, template_dirname)
+ @template_filename = template_filename
+ @template_dirname = template_dirname
+ end
+
+ def build
+ template = SliceTemplate.new(@template_filename);
+ yield template
+ build_docx(template.render)
+ end
+
+ private
+
+ def build_docx(content)
+ docx_content = nil
+ in_temp_dir do |temp_dir|
+ system("cp -r #{@template_dirname} #{temp_dir}/plan_report")
+ open("#{temp_dir}/plan_report/word/document.xml", "w") do |file|
+ file.write(content)
+ end
+ system("cd #{temp_dir}/plan_report; zip -r ../plan_report.docx *")
+ docx_content = File.read("#{temp_dir}/plan_report.docx")
+ end
+ docx_content
+ end
+
+ def in_temp_dir
+ temp_dir = "/tmp/docx_#{Time.now.to_f.to_s}"
+ Dir.mkdir(temp_dir)
+ yield(temp_dir)
+ system("rm -Rf #{temp_dir}")
+ end
+end
+
+
Binary file not shown.
@@ -0,0 +1,56 @@
+require 'docx_builder'
+
+
+plan_struct = Struct.new(:name, :areas, :goals_by_area, :objectives_by_goal)
+area_struct = Struct.new(:description, :id)
+goal_struct = Struct.new(:description, :id)
+objective_struct = Struct.new(:description)
+@plan = plan_struct.new
+@plan.name = 'Business Plan for 2011'
+@plan.areas = [area_struct.new('Software Development', 1), area_struct.new('Cooking', 2)]
+@plan.goals_by_area = {
+ 1 => [ goal_struct.new('Create a new app', 1), goal_struct.new('Create another app', 2)],
+ 2 => [ goal_struct.new('Make a new recipe', 3), goal_struct.new('Open a restaurant', 4)],
+}
+@plan.objectives_by_goal = {
+ 1 => [ objective_struct.new('It should be interesting'), objective_struct.new('It should be simple') ],
+ 2 => [ objective_struct.new('It should be revolutionary'), objective_struct.new('It should be unique') ],
+ 3 => [ objective_struct.new('Make a unique recipe'), objective_struct.new('Make a tasty recipe') ],
+ 4 => [ objective_struct.new('Serve high quality food'), objective_struct.new('Make it cheap') ],
+}
+
+
+file_path = "#{File.dirname(__FILE__)}/example/plan_report_template.xml"
+dir_path = "#{File.dirname(__FILE__)}/example/plan_report_template"
+
+report = DocxBuilder.new(file_path, dir_path).build do |template|
+
+ template['head']['Plan Name'] = @plan.name
+ template['area'] =
+ @plan.areas.map do |area|
+
+ area_slice = template['area'].clone
+ area_slice['Area Name'] = area.description
+ area_slice['goal'] =
+ @plan.goals_by_area[area.id].map do |goal|
+
+ goal_slice = template['goal'].clone
+ goal_slice['Goal Name'] = goal.description
+ goal_slice['objective'] =
+ @plan.objectives_by_goal[goal.id].map do |objective|
+ objective_slice = template['objective'].clone
+ objective_slice['Objective Name'] = objective.description
+ objective_slice
+ end
+ goal_slice
+ end
+ area_slice
+ end
+end
+
+
+open("example.docx", "w") { |file| file.write(report) }
+
+# ... or in a Rails controller:
+# response.headers['Content-disposition'] = 'attachment; filename=plan_report.docx'
+# render :text => report, :content_type => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
@@ -0,0 +1,2 @@
+<!-- BEGIN HEAD --><?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<w:document xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"><w:body><w:p><w:pPr><w:pStyle w:val="style1"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="1"/></w:numPr><w:spacing w:after="120" w:before="240"/></w:pPr><w:r><w:rPr></w:rPr><w:t>Strategic Plan: (Plan Name)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style0"/></w:pPr><w:r><w:rPr></w:rPr></w:r></w:p><!-- END HEAD --><!-- BEGIN AREA --><w:p><w:pPr><w:pStyle w:val="style2"/><w:numPr><w:ilvl w:val="1"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Area: (Area Name)</w:t></w:r></w:p><!-- BEGIN GOAL --><w:p><w:pPr><w:pStyle w:val="style3"/><w:numPr><w:ilvl w:val="2"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Goal: (Goal Name)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/></w:pPr><w:r><w:rPr></w:rPr><w:t>Objectives:</w:t></w:r></w:p><!-- BEGIN OBJECTIVE --><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:bookmarkStart w:id="0" w:name="__DdeLink__0_226207805"/><w:bookmarkEnd w:id="0"/><w:r><w:rPr></w:rPr><w:t>(Objective Name)</w:t></w:r></w:p><!-- END OBJECTIVE --><!-- END GOAL --><!-- END AREA --><!-- BEGIN FOOT --><w:p><w:pPr><w:pStyle w:val="style17"/><w:spacing w:after="120" w:before="0"/></w:pPr><w:r><w:rPr></w:rPr></w:r></w:p><w:sectPr><w:formProt w:val="off"/><w:pgSz w:h="16838" w:w="11906"/><w:textDirection w:val="lrTb"/><w:pgNumType w:fmt="decimal"/><w:type w:val="nextPage"/><w:pgMar w:bottom="1134" w:left="1134" w:right="1134" w:top="1134"/></w:sectPr></w:body></w:document><!-- END FOOT -->
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Override PartName="/word/_rels/document.xml.rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Override PartName="/word/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/><Override PartName="/word/numbering.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml"/><Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/><Override PartName="/word/fontTable.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"/><Override PartName="/_rels/.rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/><Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/>
+</Types>
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/>
+</Relationships>
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><TotalTime>0</TotalTime></Properties>
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dcterms:created xsi:type="dcterms:W3CDTF">2010-05-28T19:47:48.00Z</dcterms:created><dc:creator>Levente Bagi</dc:creator><cp:revision>0</cp:revision></cp:coreProperties>
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering" Target="numbering.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable" Target="fontTable.xml"/>
+</Relationships>
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<w:document xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"><w:body><w:p><w:pPr><w:pStyle w:val="style1"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="1"/></w:numPr><w:spacing w:after="120" w:before="240"/></w:pPr><w:r><w:rPr></w:rPr><w:t>Strategic Plan: (Strategic Plan Name)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style0"/></w:pPr><w:r><w:rPr></w:rPr></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style2"/><w:numPr><w:ilvl w:val="1"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Area: (Area 1)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style3"/><w:numPr><w:ilvl w:val="2"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Goal: (Goal 1)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/></w:pPr><w:r><w:rPr></w:rPr><w:t>Objectives:</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:bookmarkStart w:id="0" w:name="__DdeLink__0_226207805"/><w:bookmarkEnd w:id="0"/><w:r><w:rPr></w:rPr><w:t>(Objective 1)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 2)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 3)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style3"/><w:numPr><w:ilvl w:val="2"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Goal: (Goal 2)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/></w:pPr><w:r><w:rPr></w:rPr><w:t>Objectives:</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:bookmarkStart w:id="1" w:name="__DdeLink__0_2262078051"/><w:bookmarkEnd w:id="1"/><w:r><w:rPr></w:rPr><w:t>(Objective 1)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 2)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 3)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style3"/><w:numPr><w:ilvl w:val="2"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Goal: (Goal 3)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/></w:pPr><w:r><w:rPr></w:rPr><w:t>Objectives:</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:bookmarkStart w:id="2" w:name="__DdeLink__0_22620780511"/><w:bookmarkEnd w:id="2"/><w:r><w:rPr></w:rPr><w:t>(Objective 1)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 2)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 3)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style2"/><w:numPr><w:ilvl w:val="1"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Area: (Area 2)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style3"/><w:numPr><w:ilvl w:val="2"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Goal: (Goal 1)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/></w:pPr><w:r><w:rPr></w:rPr><w:t>Objectives:</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:bookmarkStart w:id="3" w:name="__DdeLink__0_2262078052"/><w:bookmarkEnd w:id="3"/><w:r><w:rPr></w:rPr><w:t>(Objective 1)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 2)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 3)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style3"/><w:numPr><w:ilvl w:val="2"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Goal: (Goal 2)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/></w:pPr><w:r><w:rPr></w:rPr><w:t>Objectives:</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:bookmarkStart w:id="4" w:name="__DdeLink__0_22620780512"/><w:bookmarkEnd w:id="4"/><w:r><w:rPr></w:rPr><w:t>(Objective 1)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 2)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 3)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style3"/><w:numPr><w:ilvl w:val="2"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Goal: (Goal 3)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/></w:pPr><w:r><w:rPr></w:rPr><w:t>Objectives:</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:bookmarkStart w:id="5" w:name="__DdeLink__0_226207805111"/><w:bookmarkEnd w:id="5"/><w:r><w:rPr></w:rPr><w:t>(Objective 1)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 2)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 3)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style2"/><w:numPr><w:ilvl w:val="1"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Area: (Area 3)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style3"/><w:numPr><w:ilvl w:val="2"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Goal: (Goal 1)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/></w:pPr><w:r><w:rPr></w:rPr><w:t>Objectives:</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:bookmarkStart w:id="6" w:name="__DdeLink__0_2262078053"/><w:bookmarkEnd w:id="6"/><w:r><w:rPr></w:rPr><w:t>(Objective 1)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 2)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 3)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style3"/><w:numPr><w:ilvl w:val="2"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Goal: (Goal 2)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/></w:pPr><w:r><w:rPr></w:rPr><w:t>Objectives:</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:bookmarkStart w:id="7" w:name="__DdeLink__0_22620780513"/><w:bookmarkEnd w:id="7"/><w:r><w:rPr></w:rPr><w:t>(Objective 1)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 2)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 3)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style3"/><w:numPr><w:ilvl w:val="2"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>Goal: (Goal 3)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/></w:pPr><w:r><w:rPr></w:rPr><w:t>Objectives:</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:bookmarkStart w:id="8" w:name="__DdeLink__0_226207805112"/><w:bookmarkEnd w:id="8"/><w:r><w:rPr></w:rPr><w:t>(Objective 1)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 2)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:rPr></w:rPr><w:t>(Objective 3)</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="style17"/><w:spacing w:after="120" w:before="0"/></w:pPr><w:r><w:rPr></w:rPr></w:r></w:p><w:sectPr><w:formProt w:val="off"/><w:pgSz w:h="16838" w:w="11906"/><w:textDirection w:val="lrTb"/><w:pgNumType w:fmt="decimal"/><w:type w:val="nextPage"/><w:pgMar w:bottom="1134" w:left="1134" w:right="1134" w:top="1134"/></w:sectPr></w:body></w:document>
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<w:fonts xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:font w:name="Times New Roman"><w:charset w:val="00"/><w:family w:val="roman"/><w:pitch w:val="variable"/></w:font><w:font w:name="Symbol"><w:charset w:val="02"/><w:family w:val="roman"/><w:pitch w:val="variable"/></w:font><w:font w:name="Arial"><w:charset w:val="00"/><w:family w:val="swiss"/><w:pitch w:val="variable"/></w:font><w:font w:name="Liberation Serif"><w:altName w:val="Times New Roman"/><w:charset w:val="80"/><w:family w:val="roman"/><w:pitch w:val="variable"/></w:font></w:fonts>
Oops, something went wrong.

0 comments on commit 8003ffe

Please sign in to comment.