rubyXL-git-ref-6002046 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +20 -0
  3. data/Gemfile.lock +63 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +197 -0
  6. data/Rakefile +58 -0
  7. data/VERSION +1 -0
  8. data/lib/rubyXL.rb +21 -0
  9. data/lib/rubyXL/cell.rb +325 -0
  10. data/lib/rubyXL/generic_storage.rb +40 -0
  11. data/lib/rubyXL/objects/border.rb +53 -0
  12. data/lib/rubyXL/objects/cell_style.rb +73 -0
  13. data/lib/rubyXL/objects/color.rb +23 -0
  14. data/lib/rubyXL/objects/column_range.rb +88 -0
  15. data/lib/rubyXL/objects/data_validation.rb +31 -0
  16. data/lib/rubyXL/objects/defined_name.rb +27 -0
  17. data/lib/rubyXL/objects/fill.rb +42 -0
  18. data/lib/rubyXL/objects/font.rb +109 -0
  19. data/lib/rubyXL/objects/formula.rb +8 -0
  20. data/lib/rubyXL/objects/ooxml_object.rb +177 -0
  21. data/lib/rubyXL/objects/reference.rb +98 -0
  22. data/lib/rubyXL/objects/sheet_view.rb +62 -0
  23. data/lib/rubyXL/objects/worksheet.rb +11 -0
  24. data/lib/rubyXL/parser.rb +307 -0
  25. data/lib/rubyXL/private_class.rb +95 -0
  26. data/lib/rubyXL/shared_strings.rb +35 -0
  27. data/lib/rubyXL/workbook.rb +342 -0
  28. data/lib/rubyXL/worksheet.rb +1118 -0
  29. data/lib/rubyXL/writer/app_writer.rb +51 -0
  30. data/lib/rubyXL/writer/calc_chain_writer.rb +18 -0
  31. data/lib/rubyXL/writer/content_types_writer.rb +113 -0
  32. data/lib/rubyXL/writer/core_writer.rb +34 -0
  33. data/lib/rubyXL/writer/generic_writer.rb +33 -0
  34. data/lib/rubyXL/writer/root_rels_writer.rb +17 -0
  35. data/lib/rubyXL/writer/shared_strings_writer.rb +21 -0
  36. data/lib/rubyXL/writer/styles_writer.rb +64 -0
  37. data/lib/rubyXL/writer/theme_writer.rb +337 -0
  38. data/lib/rubyXL/writer/workbook_rels_writer.rb +43 -0
  39. data/lib/rubyXL/writer/workbook_writer.rb +73 -0
  40. data/lib/rubyXL/writer/worksheet_writer.rb +164 -0
  41. data/lib/rubyXL/zip.rb +20 -0
  42. data/rdoc/created.rid +36 -0
  43. data/rdoc/fonts.css +167 -0
  44. data/rdoc/fonts/Lato-Light.ttf +0 -0
  45. data/rdoc/fonts/Lato-LightItalic.ttf +0 -0
  46. data/rdoc/fonts/Lato-Regular.ttf +0 -0
  47. data/rdoc/fonts/Lato-RegularItalic.ttf +0 -0
  48. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  49. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  50. data/rdoc/images/add.png +0 -0
  51. data/rdoc/images/arrow_up.png +0 -0
  52. data/rdoc/images/brick.png +0 -0
  53. data/rdoc/images/brick_link.png +0 -0
  54. data/rdoc/images/bug.png +0 -0
  55. data/rdoc/images/bullet_black.png +0 -0
  56. data/rdoc/images/bullet_toggle_minus.png +0 -0
  57. data/rdoc/images/bullet_toggle_plus.png +0 -0
  58. data/rdoc/images/date.png +0 -0
  59. data/rdoc/images/delete.png +0 -0
  60. data/rdoc/images/find.png +0 -0
  61. data/rdoc/images/loadingAnimation.gif +0 -0
  62. data/rdoc/images/macFFBgHack.png +0 -0
  63. data/rdoc/images/package.png +0 -0
  64. data/rdoc/images/page_green.png +0 -0
  65. data/rdoc/images/page_white_text.png +0 -0
  66. data/rdoc/images/page_white_width.png +0 -0
  67. data/rdoc/images/plugin.png +0 -0
  68. data/rdoc/images/ruby.png +0 -0
  69. data/rdoc/images/tag_blue.png +0 -0
  70. data/rdoc/images/tag_green.png +0 -0
  71. data/rdoc/images/transparent.png +0 -0
  72. data/rdoc/images/wrench.png +0 -0
  73. data/rdoc/images/wrench_orange.png +0 -0
  74. data/rdoc/images/zoom.png +0 -0
  75. data/rdoc/js/darkfish.js +140 -0
  76. data/rdoc/js/jquery.js +18 -0
  77. data/rdoc/js/navigation.js +142 -0
  78. data/rdoc/js/search.js +109 -0
  79. data/rdoc/js/search_index.js +1 -0
  80. data/rdoc/js/searcher.js +228 -0
  81. data/rdoc/rdoc.css +580 -0
  82. data/rubyXL-git-ref-6002046.gemspec +143 -0
  83. data/spec/lib/cell_spec.rb +407 -0
  84. data/spec/lib/color_spec.rb +14 -0
  85. data/spec/lib/parser_spec.rb +80 -0
  86. data/spec/lib/workbook_spec.rb +73 -0
  87. data/spec/lib/worksheet_spec.rb +1789 -0
  88. metadata +231 -0
@@ -0,0 +1,51 @@
1
+ module RubyXL
2
+ module Writer
3
+ class AppWriter < GenericWriter
4
+
5
+ def filepath
6
+ File.join('docProps', 'app.xml')
7
+ end
8
+
9
+ def write()
10
+ render_xml do |xml|
11
+ xml << (xml.create_element('Properties',
12
+ :xmlns => 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties',
13
+ 'xmlns:vt' => 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes') { |root|
14
+
15
+ root << xml.create_element('Application', @workbook.application) unless @workbook.application.to_s.empty?
16
+ root << xml.create_element('DocSecurity', 0)
17
+ root << xml.create_element('ScaleCrop', false)
18
+
19
+ root << (xml.create_element('HeadingPairs') { |headings|
20
+ headings << (xml.create_element('vt:vector', :baseType => 'variant', :size => 2) { |vc|
21
+ vc << (xml.create_element('vt:variant',) { |v|
22
+ v << xml.create_element('vt:lpstr', 'Worksheets')
23
+ })
24
+
25
+ vc << (xml.create_element('vt:variant',) { |v|
26
+ v << xml.create_element('vt:i4', @workbook.worksheets.size)
27
+ })
28
+ })
29
+ })
30
+
31
+ root << (xml.create_element('TitlesOfParts') { |titles|
32
+ titles << (xml.create_element('vt:vector', :baseType => 'lpstr',
33
+ :size => @workbook.worksheets.size) { |v|
34
+ @workbook.worksheets.each { |sheet|
35
+ v << (xml.create_element('vt:lpstr', sheet.sheet_name))
36
+ }
37
+ })
38
+ })
39
+
40
+ root << xml.create_element('Company', @workbook.company) unless @workbook.company.to_s.empty?
41
+ root << xml.create_element('LinksUpToDate', false)
42
+ root << xml.create_element('SharedDoc', false)
43
+ root << xml.create_element('HyperlinksChanged', false)
44
+ root << xml.create_element('AppVersion', @workbook.appversion) unless @workbook.appversion.to_s.empty?
45
+ })
46
+ end
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,18 @@
1
+ module RubyXL
2
+ module Writer
3
+
4
+ #TODO
5
+ class CalcChainWriter < GenericWriter
6
+ def filepath
7
+ File.join('xl', 'calcChain.xml')
8
+ end
9
+
10
+ def write()
11
+ render_xml do |xml|
12
+ nil
13
+ end
14
+ end
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,113 @@
1
+ module RubyXL
2
+ module Writer
3
+ class ContentTypesWriter < GenericWriter
4
+
5
+ def filepath
6
+ '[Content_Types].xml'
7
+ end
8
+
9
+ def write()
10
+
11
+ render_xml do |xml|
12
+ xml << (xml.create_element('Types',
13
+ :xmlns => 'http://schemas.openxmlformats.org/package/2006/content-types') { |root|
14
+
15
+ unless @workbook.printer_settings.empty?
16
+ root << xml.create_element('Default', {
17
+ :Extension => 'bin',
18
+ :ContentType => 'application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings' })
19
+ end
20
+ root << xml.create_element('Default', {
21
+ :Extension => 'rels',
22
+ :ContentType => 'application/vnd.openxmlformats-package.relationships+xml' })
23
+
24
+ root << xml.create_element('Default', {
25
+ :Extension => 'xml',
26
+ :ContentType => 'application/xml' })
27
+
28
+ root << xml.create_element('Default', {
29
+ :Extension => 'jpeg',
30
+ :ContentType => 'image/jpeg' })
31
+
32
+ # if @workbook.macros.nil? && @workbook.drawings.empty?
33
+ root << xml.create_element('Override', {
34
+ :PartName => '/xl/workbook.xml',
35
+ :ContentType => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml' })
36
+ # else
37
+ # xml.Override('PartName'=>'/xl/workbook.xml',
38
+ # 'ContentType'=>"application/vnd.ms-excel.sheet.macroEnabled.main+xml")
39
+ # end
40
+
41
+ @workbook.worksheets.each_with_index { |sheet,i|
42
+ root << xml.create_element('Override', {
43
+ :PartName => "/xl/worksheets/sheet#{i+1}.xml",
44
+ :ContentType => 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml' })
45
+ }
46
+
47
+ root << xml.create_element('Override', {
48
+ :PartName => '/xl/theme/theme1.xml',
49
+ :ContentType => 'application/vnd.openxmlformats-officedocument.theme+xml' })
50
+
51
+ root << xml.create_element('Override', {
52
+ :PartName => '/xl/styles.xml',
53
+ :ContentType => 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml' })
54
+
55
+ unless @workbook.shared_strings.empty?
56
+ root << xml.create_element('Override', {
57
+ :PartName => '/xl/sharedStrings.xml',
58
+ :ContentType => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml' })
59
+ end
60
+
61
+ @workbook.drawings.each_pair { |k, v|
62
+ root << xml.create_element('Override', {
63
+ :PartName => "/#{@workbook.drawings.local_dir_path}/#{k}",
64
+ :ContentType => 'application/vnd.openxmlformats-officedocument.drawing+xml' })
65
+ # xml.Default('Extension'=>'vml',
66
+ # 'ContentType'=>'application/vnd.openxmlformats-officedocument.vmlDrawing')
67
+ }
68
+
69
+ @workbook.charts.each_pair { |k, v|
70
+ case k
71
+ when /^chart\d*.xml$/ then
72
+ root << xml.create_element('Override', {
73
+ :PartName => "/#{@workbook.charts.local_dir_path}/#{k}",
74
+ :ContentType => 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml' })
75
+ when /^style\d*.xml$/ then
76
+ root << xml.create_element('Override', {
77
+ :PartName => "/#{@workbook.charts.local_dir_path}/#{k}",
78
+ :ContentType => 'application/vnd.ms-office.chartstyle+xml' })
79
+ when /^colors\d*.xml$/ then
80
+ root << xml.create_element('Override', {
81
+ :PartName => "/#{@workbook.charts.local_dir_path}/#{k}",
82
+ :ContentType => 'application/vnd.ms-office.chartcolorstyle+xml' })
83
+ end
84
+ }
85
+
86
+ root << xml.create_element('Override', {
87
+ :PartName => '/docProps/core.xml',
88
+ :ContentType => 'application/vnd.openxmlformats-package.core-properties+xml' })
89
+
90
+ root << xml.create_element('Override', {
91
+ :PartName => '/docProps/app.xml',
92
+ :ContentType => 'application/vnd.openxmlformats-officedocument.extended-properties+xml' })
93
+
94
+ unless @workbook.external_links.nil?
95
+ 1.upto(@workbook.external_links.size-1) do |i|
96
+ root << xml.create_element('Override', {
97
+ :PartName => "/xl/externalLinks/externalLink#{i}.xml",
98
+ :ContentType => 'application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml' })
99
+ end
100
+ end
101
+
102
+ unless @workbook.macros.nil?
103
+ root << xml.create_element('Override', {
104
+ :PartName => '/xl/vbaProject.bin',
105
+ :ContentType => 'application/vnd.ms-office.vbaProject' })
106
+ end
107
+ })
108
+ end
109
+ end
110
+
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,34 @@
1
+ module RubyXL
2
+ module Writer
3
+ class CoreWriter < GenericWriter
4
+
5
+ def filepath
6
+ File.join('docProps', 'core.xml')
7
+ end
8
+
9
+ def write()
10
+ render_xml do |xml|
11
+ xml << (xml.create_element('cp:coreProperties',
12
+ 'xmlns:cp' => 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',
13
+ 'xmlns:dc' => 'http://purl.org/dc/elements/1.1/',
14
+ 'xmlns:dcterms' => 'http://purl.org/dc/terms/',
15
+ 'xmlns:dcmitype' => 'http://purl.org/dc/dcmitype/',
16
+ 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance') { |root|
17
+
18
+ root << xml.create_element('dc:creator', @workbook.creator)
19
+ root << xml.create_element('cp:lastModifiedBy', @workbook.modifier)
20
+
21
+ unless @workbook.created_at.to_s.empty?
22
+ root << xml.create_element('dcterms:created', { 'xsi:type' => 'dcterms:W3CDTF' }, @workbook.created_at)
23
+ end
24
+
25
+ unless @workbook.modified_at.to_s.empty?
26
+ root << xml.create_element('dcterms:modified', { 'xsi:type' => 'dcterms:W3CDTF' }, @workbook.modified_at)
27
+ end
28
+ })
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,33 @@
1
+ require 'rubygems'
2
+ require 'nokogiri'
3
+
4
+ module RubyXL
5
+ module Writer
6
+ class GenericWriter
7
+
8
+ def initialize(workbook)
9
+ @workbook = workbook
10
+ # +self.class+ makes sure constant is pulled from descendant class, not from this one.
11
+ # self.class::FILEPATH
12
+ end
13
+
14
+ def filepath
15
+ raise 'Subclass responsebility'
16
+ end
17
+
18
+ def render_xml
19
+ seed_xml = Nokogiri::XML('<?xml version = "1.0" standalone ="yes"?>')
20
+ seed_xml.encoding = 'UTF-8'
21
+
22
+ yield(seed_xml)
23
+
24
+ seed_xml.to_xml({ :indent => 0, :save_with => Nokogiri::XML::Node::SaveOptions::AS_XML })
25
+ end
26
+
27
+ def add_to_zip(zipfile)
28
+ zipfile.get_output_stream(filepath) { |f| f << write }
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,17 @@
1
+ module RubyXL
2
+ module Writer
3
+ class RootRelsWriter < GenericWriter
4
+
5
+ def filepath
6
+ File.join('_rels', '.rels')
7
+ end
8
+
9
+ def write()
10
+ contents = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
11
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/></Relationships>'
12
+ contents
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module RubyXL
2
+ module Writer
3
+ class SharedStringsWriter < GenericWriter
4
+
5
+ def filepath
6
+ File.join('xl', 'sharedStrings.xml')
7
+ end
8
+
9
+ def write()
10
+ # Excel doesn't care much about the contents of sharedStrings.xml -- it will fill it in, but the file has to exist and have a root node.
11
+ if @workbook.shared_strings_XML
12
+ contents = @workbook.shared_strings_XML
13
+ else
14
+ contents = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+"\n"+'<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="0" uniqueCount="0"></sst>'
15
+ end
16
+ contents
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,64 @@
1
+ module RubyXL
2
+ module Writer
3
+ class StylesWriter < GenericWriter
4
+
5
+ def filepath
6
+ File.join('xl', 'styles.xml')
7
+ end
8
+
9
+ def write()
10
+
11
+ render_xml do |xml|
12
+ xml << (xml.create_element('styleSheet', :xmlns => "http://schemas.openxmlformats.org/spreadsheetml/2006/main") { |root|
13
+ unless @workbook.num_fmts.empty?
14
+ root << (xml.create_element('numFmts', :count => @workbook.num_fmts.size) { |numfmts|
15
+ @workbook.num_fmts.each { |numfmt| numfmts << numfmt.write_xml(xml) }
16
+ })
17
+ end
18
+
19
+ root << (xml.create_element('fonts', :count => @workbook.fonts.size) { |fonts|
20
+ @workbook.fonts.each_with_index { |font, i| fonts << font.write_xml(xml) }
21
+ })
22
+
23
+ root << (xml.create_element('fills', :count => @workbook.fills.size) { |fills|
24
+ @workbook.fills.each_with_index { |fill, i| fills << fill.write_xml(xml) }
25
+ })
26
+
27
+ root << (xml.create_element('borders', :count => @workbook.borders.size) { |borders|
28
+ @workbook.borders.each_with_index { |border, i| borders << border.write_xml(xml) }
29
+ })
30
+
31
+ root << (xml.create_element('cellStyleXfs', :count => @workbook.cell_style_xfs.count) { |cxfs|
32
+ @workbook.cell_style_xfs.each { |xf| cxfs << xf.write_xml(xml) }
33
+ })
34
+
35
+
36
+ root << (xml.create_element('cellXfs', :count => @workbook.cell_xfs.size) { |cxfs|
37
+ @workbook.cell_xfs.each { |xf| cxfs << xf.write_xml(xml) }
38
+ })
39
+
40
+ root << (xml.create_element('cellStyles', :count => @workbook.cell_styles.size) { |cell_styles|
41
+ @workbook.cell_styles.each { |style| cell_styles << style.write_xml(xml) }
42
+ })
43
+
44
+ root << xml.create_element('dxfs', :count => 0)
45
+ root << xml.create_element('tableStyles', :count => 0, :defaultTableStyle => 'TableStyleMedium9')
46
+
47
+ unless @workbook.colors.empty?
48
+ root << (xml.create_element('colors') { |colors|
49
+ @workbook.colors.each_pair { |color_type, color_array|
50
+ colors << (xml.create_element(color_type) { |type|
51
+ color_array.each { |color| type << color.write_xml(xml) }
52
+ })
53
+ }
54
+ })
55
+ end
56
+
57
+ })
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,337 @@
1
+ # coding: utf-8
2
+
3
+ module RubyXL
4
+ module Writer
5
+ class ThemeWriter < GenericWriter
6
+
7
+ def filepath
8
+ File.join('xl', 'theme', 'theme1.xml')
9
+ end
10
+
11
+ def write()
12
+ return @workbook.theme['theme1.xml'] unless @workbook.theme.empty?
13
+
14
+ # Fallback theme. Note that this particular theme totall throws colors off. Need to figure it out eventually.
15
+ contents = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
16
+ <a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme">
17
+ <a:themeElements>
18
+ <a:clrScheme name="Office">
19
+ <a:dk1>
20
+ <a:sysClr val="windowText" lastClr="000000"/>
21
+ </a:dk1>
22
+ <a:lt1>
23
+ <a:sysClr val="window" lastClr="FFFFFF"/>
24
+ </a:lt1>
25
+ <a:dk2>
26
+ <a:srgbClr val="1F497D"/>
27
+ </a:dk2>
28
+ <a:lt2>
29
+ <a:srgbClr val="EEECE1"/>
30
+ </a:lt2>
31
+ <a:accent1>
32
+ <a:srgbClr val="4F81BD"/>
33
+ </a:accent1>
34
+ <a:accent2>
35
+ <a:srgbClr val="C0504D"/>
36
+ </a:accent2>
37
+ <a:accent3>
38
+ <a:srgbClr val="9BBB59"/>
39
+ </a:accent3>
40
+ <a:accent4>
41
+ <a:srgbClr val="8064A2"/>
42
+ </a:accent4>
43
+ <a:accent5>
44
+ <a:srgbClr val="4BACC6"/>
45
+ </a:accent5>
46
+ <a:accent6>
47
+ <a:srgbClr val="F79646"/>
48
+ </a:accent6>
49
+ <a:hlink>
50
+ <a:srgbClr val="0000FF"/>
51
+ </a:hlink>
52
+ <a:folHlink>
53
+ <a:srgbClr val="800080"/>
54
+ </a:folHlink>
55
+ </a:clrScheme>
56
+ <a:fontScheme name="Office">
57
+ <a:majorFont>
58
+ <a:latin typeface="Cambria"/>
59
+ <a:ea typeface=""/>
60
+ <a:cs typeface=""/>
61
+ <a:font script="Jpan" typeface="MS Pゴシック"/>
62
+ <a:font script="Hang" typeface="맑은 고딕"/>
63
+ <a:font script="Hans" typeface="宋体"/>
64
+ <a:font script="Hant" typeface="新細明體"/>
65
+ <a:font script="Arab" typeface="Times New Roman"/>
66
+ <a:font script="Hebr" typeface="Times New Roman"/>
67
+ <a:font script="Thai" typeface="Tahoma"/>
68
+ <a:font script="Ethi" typeface="Nyala"/>
69
+ <a:font script="Beng" typeface="Vrinda"/>
70
+ <a:font script="Gujr" typeface="Shruti"/>
71
+ <a:font script="Khmr" typeface="MoolBoran"/>
72
+ <a:font script="Knda" typeface="Tunga"/>
73
+ <a:font script="Guru" typeface="Raavi"/>
74
+ <a:font script="Cans" typeface="Euphemia"/>
75
+ <a:font script="Cher" typeface="Plantagenet Cherokee"/>
76
+ <a:font script="Yiii" typeface="Microsoft Yi Baiti"/>
77
+ <a:font script="Tibt" typeface="Microsoft Himalaya"/>
78
+ <a:font script="Thaa" typeface="MV Boli"/>
79
+ <a:font script="Deva" typeface="Mangal"/>
80
+ <a:font script="Telu" typeface="Gautami"/>
81
+ <a:font script="Taml" typeface="Latha"/>
82
+ <a:font script="Syrc" typeface="Estrangelo Edessa"/>
83
+ <a:font script="Orya" typeface="Kalinga"/>
84
+ <a:font script="Mlym" typeface="Kartika"/>
85
+ <a:font script="Laoo" typeface="DokChampa"/>
86
+ <a:font script="Sinh" typeface="Iskoola Pota"/>
87
+ <a:font script="Mong" typeface="Mongolian Baiti"/>
88
+ <a:font script="Viet" typeface="Times New Roman"/>
89
+ <a:font script="Uigh" typeface="Microsoft Uighur"/>
90
+ </a:majorFont>
91
+ <a:minorFont>
92
+ <a:latin typeface="Calibri"/>
93
+ <a:ea typeface=""/>
94
+ <a:cs typeface=""/>
95
+ <a:font script="Jpan" typeface="MS Pゴシック"/>
96
+ <a:font script="Hang" typeface="맑은 고딕"/>
97
+ <a:font script="Hans" typeface="宋体"/>
98
+ <a:font script="Hant" typeface="新細明體"/>
99
+ <a:font script="Arab" typeface="Arial"/>
100
+ <a:font script="Hebr" typeface="Arial"/>
101
+ <a:font script="Thai" typeface="Tahoma"/>
102
+ <a:font script="Ethi" typeface="Nyala"/>
103
+ <a:font script="Beng" typeface="Vrinda"/>
104
+ <a:font script="Gujr" typeface="Shruti"/>
105
+ <a:font script="Khmr" typeface="DaunPenh"/>
106
+ <a:font script="Knda" typeface="Tunga"/>
107
+ <a:font script="Guru" typeface="Raavi"/>
108
+ <a:font script="Cans" typeface="Euphemia"/>
109
+ <a:font script="Cher" typeface="Plantagenet Cherokee"/>
110
+ <a:font script="Yiii" typeface="Microsoft Yi Baiti"/>
111
+ <a:font script="Tibt" typeface="Microsoft Himalaya"/>
112
+ <a:font script="Thaa" typeface="MV Boli"/>
113
+ <a:font script="Deva" typeface="Mangal"/>
114
+ <a:font script="Telu" typeface="Gautami"/>
115
+ <a:font script="Taml" typeface="Latha"/>
116
+ <a:font script="Syrc" typeface="Estrangelo Edessa"/>
117
+ <a:font script="Orya" typeface="Kalinga"/>
118
+ <a:font script="Mlym" typeface="Kartika"/>
119
+ <a:font script="Laoo" typeface="DokChampa"/>
120
+ <a:font script="Sinh" typeface="Iskoola Pota"/>
121
+ <a:font script="Mong" typeface="Mongolian Baiti"/>
122
+ <a:font script="Viet" typeface="Arial"/>
123
+ <a:font script="Uigh" typeface="Microsoft Uighur"/>
124
+ </a:minorFont>
125
+ </a:fontScheme>
126
+ <a:fmtScheme name="Office">
127
+ <a:fillStyleLst>
128
+ <a:solidFill>
129
+ <a:schemeClr val="phClr"/>
130
+ </a:solidFill>
131
+ <a:gradFill rotWithShape="1">
132
+ <a:gsLst>
133
+ <a:gs pos="0">
134
+ <a:schemeClr val="phClr">
135
+ <a:tint val="50000"/>
136
+ <a:satMod val="300000"/>
137
+ </a:schemeClr>
138
+ </a:gs>
139
+ <a:gs pos="35000">
140
+ <a:schemeClr val="phClr">
141
+ <a:tint val="37000"/>
142
+ <a:satMod val="300000"/>
143
+ </a:schemeClr>
144
+ </a:gs>
145
+ <a:gs pos="100000">
146
+ <a:schemeClr val="phClr">
147
+ <a:tint val="15000"/>
148
+ <a:satMod val="350000"/>
149
+ </a:schemeClr>
150
+ </a:gs>
151
+ </a:gsLst>
152
+ <a:lin ang="16200000" scaled="1"/>
153
+ </a:gradFill>
154
+ <a:gradFill rotWithShape="1">
155
+ <a:gsLst>
156
+ <a:gs pos="0">
157
+ <a:schemeClr val="phClr">
158
+ <a:tint val="100000"/>
159
+ <a:shade val="100000"/>
160
+ <a:satMod val="130000"/>
161
+ </a:schemeClr>
162
+ </a:gs>
163
+ <a:gs pos="100000">
164
+ <a:schemeClr val="phClr">
165
+ <a:tint val="50000"/>
166
+ <a:shade val="100000"/>
167
+ <a:satMod val="350000"/>
168
+ </a:schemeClr>
169
+ </a:gs>
170
+ </a:gsLst>
171
+ <a:lin ang="16200000" scaled="0"/>
172
+ </a:gradFill>
173
+ </a:fillStyleLst>
174
+ <a:lnStyleLst>
175
+ <a:ln w="9525" cap="flat" cmpd="sng" algn="ctr">
176
+ <a:solidFill>
177
+ <a:schemeClr val="phClr">
178
+ <a:shade val="95000"/>
179
+ <a:satMod val="105000"/>
180
+ </a:schemeClr>
181
+ </a:solidFill>
182
+ <a:prstDash val="solid"/>
183
+ </a:ln>
184
+ <a:ln w="25400" cap="flat" cmpd="sng" algn="ctr">
185
+ <a:solidFill>
186
+ <a:schemeClr val="phClr"/>
187
+ </a:solidFill>
188
+ <a:prstDash val="solid"/>
189
+ </a:ln>
190
+ <a:ln w="38100" cap="flat" cmpd="sng" algn="ctr">
191
+ <a:solidFill>
192
+ <a:schemeClr val="phClr"/>
193
+ </a:solidFill>
194
+ <a:prstDash val="solid"/>
195
+ </a:ln>
196
+ </a:lnStyleLst>
197
+ <a:effectStyleLst>
198
+ <a:effectStyle>
199
+ <a:effectLst>
200
+ <a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0">
201
+ <a:srgbClr val="000000">
202
+ <a:alpha val="38000"/>
203
+ </a:srgbClr>
204
+ </a:outerShdw>
205
+ </a:effectLst>
206
+ </a:effectStyle>
207
+ <a:effectStyle>
208
+ <a:effectLst>
209
+ <a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0">
210
+ <a:srgbClr val="000000">
211
+ <a:alpha val="35000"/>
212
+ </a:srgbClr>
213
+ </a:outerShdw>
214
+ </a:effectLst>
215
+ </a:effectStyle>
216
+ <a:effectStyle>
217
+ <a:effectLst>
218
+ <a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0">
219
+ <a:srgbClr val="000000">
220
+ <a:alpha val="35000"/>
221
+ </a:srgbClr>
222
+ </a:outerShdw>
223
+ </a:effectLst>
224
+ <a:scene3d>
225
+ <a:camera prst="orthographicFront">
226
+ <a:rot lat="0" lon="0" rev="0"/>
227
+ </a:camera>
228
+ <a:lightRig rig="threePt" dir="t">
229
+ <a:rot lat="0" lon="0" rev="1200000"/>
230
+ </a:lightRig>
231
+ </a:scene3d>
232
+ <a:sp3d>
233
+ <a:bevelT w="63500" h="25400"/>
234
+ </a:sp3d>
235
+ </a:effectStyle>
236
+ </a:effectStyleLst>
237
+ <a:bgFillStyleLst>
238
+ <a:solidFill>
239
+ <a:schemeClr val="phClr"/>
240
+ </a:solidFill>
241
+ <a:gradFill rotWithShape="1">
242
+ <a:gsLst>
243
+ <a:gs pos="0">
244
+ <a:schemeClr val="phClr">
245
+ <a:tint val="40000"/>
246
+ <a:satMod val="350000"/>
247
+ </a:schemeClr>
248
+ </a:gs>
249
+ <a:gs pos="40000">
250
+ <a:schemeClr val="phClr">
251
+ <a:tint val="45000"/>
252
+ <a:shade val="99000"/>
253
+ <a:satMod val="350000"/>
254
+ </a:schemeClr>
255
+ </a:gs>
256
+ <a:gs pos="100000">
257
+ <a:schemeClr val="phClr">
258
+ <a:shade val="20000"/>
259
+ <a:satMod val="255000"/>
260
+ </a:schemeClr>
261
+ </a:gs>
262
+ </a:gsLst>
263
+ <a:path path="circle">
264
+ <a:fillToRect l="50000" t="-80000" r="50000" b="180000"/>
265
+ </a:path>
266
+ </a:gradFill>
267
+ <a:gradFill rotWithShape="1">
268
+ <a:gsLst>
269
+ <a:gs pos="0">
270
+ <a:schemeClr val="phClr">
271
+ <a:tint val="80000"/>
272
+ <a:satMod val="300000"/>
273
+ </a:schemeClr>
274
+ </a:gs>
275
+ <a:gs pos="100000">
276
+ <a:schemeClr val="phClr">
277
+ <a:shade val="30000"/>
278
+ <a:satMod val="200000"/>
279
+ </a:schemeClr>
280
+ </a:gs>
281
+ </a:gsLst>
282
+ <a:path path="circle">
283
+ <a:fillToRect l="50000" t="50000" r="50000" b="50000"/>
284
+ </a:path>
285
+ </a:gradFill>
286
+ </a:bgFillStyleLst>
287
+ </a:fmtScheme>
288
+ </a:themeElements>
289
+ <a:objectDefaults>
290
+ <a:spDef>
291
+ <a:spPr/>
292
+ <a:bodyPr/>
293
+ <a:lstStyle/>
294
+ <a:style>
295
+ <a:lnRef idx="1">
296
+ <a:schemeClr val="accent1"/>
297
+ </a:lnRef>
298
+ <a:fillRef idx="3">
299
+ <a:schemeClr val="accent1"/>
300
+ </a:fillRef>
301
+ <a:effectRef idx="2">
302
+ <a:schemeClr val="accent1"/>
303
+ </a:effectRef>
304
+ <a:fontRef idx="minor">
305
+ <a:schemeClr val="lt1"/>
306
+ </a:fontRef>
307
+ </a:style>
308
+ </a:spDef>
309
+ <a:lnDef>
310
+ <a:spPr/>
311
+ <a:bodyPr/>
312
+ <a:lstStyle/>
313
+ <a:style>
314
+ <a:lnRef idx="2">
315
+ <a:schemeClr val="accent1"/>
316
+ </a:lnRef>
317
+ <a:fillRef idx="0">
318
+ <a:schemeClr val="accent1"/>
319
+ </a:fillRef>
320
+ <a:effectRef idx="1">
321
+ <a:schemeClr val="accent1"/>
322
+ </a:effectRef>
323
+ <a:fontRef idx="minor">
324
+ <a:schemeClr val="tx1"/>
325
+ </a:fontRef>
326
+ </a:style>
327
+ </a:lnDef>
328
+ </a:objectDefaults>
329
+ <a:extraClrSchemeLst/>
330
+ </a:theme>'
331
+
332
+ contents
333
+ end
334
+
335
+ end
336
+ end
337
+ end