caxlsx 3.2.0 → 3.3.0

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 (300) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +385 -354
  5. data/LICENSE +21 -21
  6. data/README.md +165 -168
  7. data/Rakefile +29 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
  10. data/lib/axlsx/content_type/content_type.rb +26 -26
  11. data/lib/axlsx/content_type/default.rb +25 -25
  12. data/lib/axlsx/content_type/override.rb +25 -25
  13. data/lib/axlsx/doc_props/app.rb +235 -235
  14. data/lib/axlsx/doc_props/core.rb +39 -39
  15. data/lib/axlsx/drawing/area_chart.rb +99 -99
  16. data/lib/axlsx/drawing/area_series.rb +110 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +26 -26
  18. data/lib/axlsx/drawing/axes.rb +61 -61
  19. data/lib/axlsx/drawing/axis.rb +190 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +148 -148
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -138
  22. data/lib/axlsx/drawing/bar_series.rb +97 -97
  23. data/lib/axlsx/drawing/bubble_chart.rb +59 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +63 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +85 -85
  26. data/lib/axlsx/drawing/chart.rb +299 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +91 -90
  28. data/lib/axlsx/drawing/drawing.rb +167 -167
  29. data/lib/axlsx/drawing/graphic_frame.rb +54 -54
  30. data/lib/axlsx/drawing/hyperlink.rb +100 -100
  31. data/lib/axlsx/drawing/line_3D_chart.rb +68 -68
  32. data/lib/axlsx/drawing/line_chart.rb +99 -99
  33. data/lib/axlsx/drawing/line_series.rb +110 -110
  34. data/lib/axlsx/drawing/marker.rb +84 -84
  35. data/lib/axlsx/drawing/num_data.rb +52 -52
  36. data/lib/axlsx/drawing/num_data_source.rb +62 -62
  37. data/lib/axlsx/drawing/num_val.rb +34 -34
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -99
  39. data/lib/axlsx/drawing/pic.rb +211 -211
  40. data/lib/axlsx/drawing/picture_locking.rb +42 -42
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -47
  42. data/lib/axlsx/drawing/pie_series.rb +74 -74
  43. data/lib/axlsx/drawing/scaling.rb +60 -60
  44. data/lib/axlsx/drawing/scatter_chart.rb +74 -74
  45. data/lib/axlsx/drawing/scatter_series.rb +129 -129
  46. data/lib/axlsx/drawing/ser_axis.rb +45 -45
  47. data/lib/axlsx/drawing/series.rb +69 -69
  48. data/lib/axlsx/drawing/series_title.rb +25 -25
  49. data/lib/axlsx/drawing/str_data.rb +42 -42
  50. data/lib/axlsx/drawing/str_val.rb +34 -34
  51. data/lib/axlsx/drawing/title.rb +107 -97
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -97
  53. data/lib/axlsx/drawing/val_axis.rb +37 -37
  54. data/lib/axlsx/drawing/view_3D.rb +115 -115
  55. data/lib/axlsx/drawing/vml_drawing.rb +42 -42
  56. data/lib/axlsx/drawing/vml_shape.rb +66 -66
  57. data/lib/axlsx/package.rb +398 -388
  58. data/lib/axlsx/rels/relationship.rb +130 -130
  59. data/lib/axlsx/rels/relationships.rb +32 -32
  60. data/lib/axlsx/stylesheet/border.rb +73 -73
  61. data/lib/axlsx/stylesheet/border_pr.rb +71 -71
  62. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -132
  63. data/lib/axlsx/stylesheet/cell_protection.rb +41 -41
  64. data/lib/axlsx/stylesheet/cell_style.rb +72 -72
  65. data/lib/axlsx/stylesheet/color.rb +76 -76
  66. data/lib/axlsx/stylesheet/dxf.rb +79 -79
  67. data/lib/axlsx/stylesheet/fill.rb +35 -35
  68. data/lib/axlsx/stylesheet/font.rb +156 -156
  69. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -103
  70. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -37
  71. data/lib/axlsx/stylesheet/num_fmt.rb +86 -86
  72. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -73
  73. data/lib/axlsx/stylesheet/styles.rb +535 -494
  74. data/lib/axlsx/stylesheet/table_style.rb +54 -54
  75. data/lib/axlsx/stylesheet/table_style_element.rb +77 -77
  76. data/lib/axlsx/stylesheet/table_styles.rb +46 -46
  77. data/lib/axlsx/stylesheet/xf.rb +147 -147
  78. data/lib/axlsx/util/accessors.rb +64 -64
  79. data/lib/axlsx/util/constants.rb +416 -410
  80. data/lib/axlsx/util/mime_type_utils.rb +11 -11
  81. data/lib/axlsx/util/options_parser.rb +16 -16
  82. data/lib/axlsx/util/serialized_attributes.rb +89 -89
  83. data/lib/axlsx/util/simple_typed_list.rb +179 -179
  84. data/lib/axlsx/util/storage.rb +146 -146
  85. data/lib/axlsx/util/validators.rb +312 -312
  86. data/lib/axlsx/util/zip_command.rb +73 -73
  87. data/lib/axlsx/version.rb +5 -5
  88. data/lib/axlsx/workbook/defined_name.rb +128 -128
  89. data/lib/axlsx/workbook/defined_names.rb +21 -21
  90. data/lib/axlsx/workbook/shared_strings_table.rb +77 -77
  91. data/lib/axlsx/workbook/workbook.rb +425 -395
  92. data/lib/axlsx/workbook/workbook_view.rb +80 -80
  93. data/lib/axlsx/workbook/workbook_views.rb +22 -22
  94. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -77
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
  96. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -244
  97. data/lib/axlsx/workbook/worksheet/border_creator.rb +76 -0
  98. data/lib/axlsx/workbook/worksheet/break.rb +35 -35
  99. data/lib/axlsx/workbook/worksheet/cell.rb +532 -506
  100. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  101. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  102. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  103. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  104. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  105. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  106. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  107. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  108. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  110. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  111. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  112. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  113. data/lib/axlsx/workbook/worksheet/data_validation.rb +267 -246
  114. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  115. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  116. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  117. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  118. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  119. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  120. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  121. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  122. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  123. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  124. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  125. data/lib/axlsx/workbook/worksheet/pivot_table.rb +335 -296
  126. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  127. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  128. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  129. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  130. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  131. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  132. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  133. data/lib/axlsx/workbook/worksheet/row.rb +164 -164
  134. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  135. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  136. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  137. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  138. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  139. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  140. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  141. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  142. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  143. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  144. data/lib/axlsx/workbook/worksheet/worksheet.rb +829 -786
  145. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  148. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  149. data/lib/axlsx.rb +204 -185
  150. data/lib/caxlsx.rb +2 -2
  151. data/lib/schema/dc.xsd +118 -118
  152. data/lib/schema/dcmitype.xsd +51 -51
  153. data/lib/schema/dcterms.xsd +331 -331
  154. data/lib/schema/dml-chartDrawing.xsd +146 -146
  155. data/lib/schema/dml-compatibility.xsd +14 -14
  156. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  157. data/lib/schema/dml-main.xsd +3048 -3048
  158. data/lib/schema/dml-picture.xsd +23 -23
  159. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  160. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  161. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  162. data/lib/schema/shared-bibliography.xsd +144 -144
  163. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  164. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  165. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  166. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  167. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  168. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  169. data/lib/schema/shared-relationshipReference.xsd +25 -25
  170. data/lib/schema/vml-main.xsd +569 -569
  171. data/lib/schema/vml-officeDrawing.xsd +509 -509
  172. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  173. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  174. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  175. data/lib/schema/xml.xsd +116 -116
  176. metadata +5 -252
  177. data/test/benchmark.rb +0 -72
  178. data/test/content_type/tc_content_type.rb +0 -76
  179. data/test/content_type/tc_default.rb +0 -16
  180. data/test/content_type/tc_override.rb +0 -14
  181. data/test/doc_props/tc_app.rb +0 -43
  182. data/test/doc_props/tc_core.rb +0 -42
  183. data/test/drawing/tc_area_chart.rb +0 -39
  184. data/test/drawing/tc_area_series.rb +0 -71
  185. data/test/drawing/tc_axes.rb +0 -8
  186. data/test/drawing/tc_axis.rb +0 -112
  187. data/test/drawing/tc_bar_3D_chart.rb +0 -86
  188. data/test/drawing/tc_bar_chart.rb +0 -86
  189. data/test/drawing/tc_bar_series.rb +0 -46
  190. data/test/drawing/tc_bubble_chart.rb +0 -44
  191. data/test/drawing/tc_bubble_series.rb +0 -21
  192. data/test/drawing/tc_cat_axis.rb +0 -31
  193. data/test/drawing/tc_cat_axis_data.rb +0 -27
  194. data/test/drawing/tc_chart.rb +0 -123
  195. data/test/drawing/tc_d_lbls.rb +0 -57
  196. data/test/drawing/tc_data_source.rb +0 -23
  197. data/test/drawing/tc_drawing.rb +0 -80
  198. data/test/drawing/tc_graphic_frame.rb +0 -27
  199. data/test/drawing/tc_hyperlink.rb +0 -64
  200. data/test/drawing/tc_line_3d_chart.rb +0 -47
  201. data/test/drawing/tc_line_chart.rb +0 -39
  202. data/test/drawing/tc_line_series.rb +0 -71
  203. data/test/drawing/tc_marker.rb +0 -44
  204. data/test/drawing/tc_named_axis_data.rb +0 -27
  205. data/test/drawing/tc_num_data.rb +0 -31
  206. data/test/drawing/tc_num_val.rb +0 -29
  207. data/test/drawing/tc_one_cell_anchor.rb +0 -66
  208. data/test/drawing/tc_pic.rb +0 -103
  209. data/test/drawing/tc_picture_locking.rb +0 -72
  210. data/test/drawing/tc_pie_3D_chart.rb +0 -28
  211. data/test/drawing/tc_pie_series.rb +0 -33
  212. data/test/drawing/tc_scaling.rb +0 -36
  213. data/test/drawing/tc_scatter_chart.rb +0 -48
  214. data/test/drawing/tc_scatter_series.rb +0 -74
  215. data/test/drawing/tc_ser_axis.rb +0 -31
  216. data/test/drawing/tc_series.rb +0 -23
  217. data/test/drawing/tc_series_title.rb +0 -54
  218. data/test/drawing/tc_str_data.rb +0 -18
  219. data/test/drawing/tc_str_val.rb +0 -30
  220. data/test/drawing/tc_title.rb +0 -70
  221. data/test/drawing/tc_two_cell_anchor.rb +0 -36
  222. data/test/drawing/tc_val_axis.rb +0 -24
  223. data/test/drawing/tc_view_3D.rb +0 -54
  224. data/test/drawing/tc_vml_drawing.rb +0 -25
  225. data/test/drawing/tc_vml_shape.rb +0 -106
  226. data/test/fixtures/image1.gif +0 -0
  227. data/test/fixtures/image1.jpeg +0 -0
  228. data/test/fixtures/image1.jpg +0 -0
  229. data/test/fixtures/image1.png +0 -0
  230. data/test/fixtures/image1_fake.jpg +0 -0
  231. data/test/profile.rb +0 -24
  232. data/test/rels/tc_relationship.rb +0 -52
  233. data/test/rels/tc_relationships.rb +0 -37
  234. data/test/stylesheet/tc_border.rb +0 -37
  235. data/test/stylesheet/tc_border_pr.rb +0 -32
  236. data/test/stylesheet/tc_cell_alignment.rb +0 -81
  237. data/test/stylesheet/tc_cell_protection.rb +0 -29
  238. data/test/stylesheet/tc_cell_style.rb +0 -57
  239. data/test/stylesheet/tc_color.rb +0 -43
  240. data/test/stylesheet/tc_dxf.rb +0 -81
  241. data/test/stylesheet/tc_fill.rb +0 -18
  242. data/test/stylesheet/tc_font.rb +0 -133
  243. data/test/stylesheet/tc_gradient_fill.rb +0 -72
  244. data/test/stylesheet/tc_gradient_stop.rb +0 -31
  245. data/test/stylesheet/tc_num_fmt.rb +0 -30
  246. data/test/stylesheet/tc_pattern_fill.rb +0 -43
  247. data/test/stylesheet/tc_styles.rb +0 -309
  248. data/test/stylesheet/tc_table_style.rb +0 -44
  249. data/test/stylesheet/tc_table_style_element.rb +0 -45
  250. data/test/stylesheet/tc_table_styles.rb +0 -29
  251. data/test/stylesheet/tc_xf.rb +0 -120
  252. data/test/tc_axlsx.rb +0 -109
  253. data/test/tc_helper.rb +0 -10
  254. data/test/tc_package.rb +0 -317
  255. data/test/util/tc_mime_type_utils.rb +0 -13
  256. data/test/util/tc_serialized_attributes.rb +0 -19
  257. data/test/util/tc_simple_typed_list.rb +0 -77
  258. data/test/util/tc_validators.rb +0 -210
  259. data/test/workbook/tc_defined_name.rb +0 -49
  260. data/test/workbook/tc_shared_strings_table.rb +0 -59
  261. data/test/workbook/tc_workbook.rb +0 -165
  262. data/test/workbook/tc_workbook_view.rb +0 -50
  263. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +0 -38
  264. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +0 -76
  265. data/test/workbook/worksheet/auto_filter/tc_filters.rb +0 -50
  266. data/test/workbook/worksheet/tc_break.rb +0 -49
  267. data/test/workbook/worksheet/tc_cell.rb +0 -465
  268. data/test/workbook/worksheet/tc_cfvo.rb +0 -31
  269. data/test/workbook/worksheet/tc_col.rb +0 -93
  270. data/test/workbook/worksheet/tc_color_scale.rb +0 -58
  271. data/test/workbook/worksheet/tc_comment.rb +0 -72
  272. data/test/workbook/worksheet/tc_comments.rb +0 -57
  273. data/test/workbook/worksheet/tc_conditional_formatting.rb +0 -224
  274. data/test/workbook/worksheet/tc_data_bar.rb +0 -46
  275. data/test/workbook/worksheet/tc_data_validation.rb +0 -265
  276. data/test/workbook/worksheet/tc_date_time_converter.rb +0 -124
  277. data/test/workbook/worksheet/tc_header_footer.rb +0 -151
  278. data/test/workbook/worksheet/tc_icon_set.rb +0 -45
  279. data/test/workbook/worksheet/tc_outline_pr.rb +0 -19
  280. data/test/workbook/worksheet/tc_page_margins.rb +0 -97
  281. data/test/workbook/worksheet/tc_page_set_up_pr.rb +0 -15
  282. data/test/workbook/worksheet/tc_page_setup.rb +0 -143
  283. data/test/workbook/worksheet/tc_pane.rb +0 -54
  284. data/test/workbook/worksheet/tc_pivot_table.rb +0 -180
  285. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +0 -62
  286. data/test/workbook/worksheet/tc_print_options.rb +0 -72
  287. data/test/workbook/worksheet/tc_protected_range.rb +0 -17
  288. data/test/workbook/worksheet/tc_rich_text.rb +0 -44
  289. data/test/workbook/worksheet/tc_rich_text_run.rb +0 -173
  290. data/test/workbook/worksheet/tc_row.rb +0 -160
  291. data/test/workbook/worksheet/tc_selection.rb +0 -55
  292. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +0 -18
  293. data/test/workbook/worksheet/tc_sheet_format_pr.rb +0 -88
  294. data/test/workbook/worksheet/tc_sheet_pr.rb +0 -49
  295. data/test/workbook/worksheet/tc_sheet_protection.rb +0 -117
  296. data/test/workbook/worksheet/tc_sheet_view.rb +0 -214
  297. data/test/workbook/worksheet/tc_table.rb +0 -77
  298. data/test/workbook/worksheet/tc_table_style_info.rb +0 -53
  299. data/test/workbook/worksheet/tc_worksheet.rb +0 -632
  300. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +0 -55
@@ -1,146 +1,146 @@
1
- # encoding: UTF-8
2
- module Axlsx
3
-
4
- # The Storage class represents a storage object or stream in a compound file.
5
- class Storage
6
-
7
- # Packing for the Storage when pushing an array of items into a byte stream
8
- # Name, name length, type, color, left sibling, right sibling, child, classid, state, created, modified, sector, size
9
- PACKING = "s32 s1 c2 l3 x16 x4 q2 l q".freeze
10
-
11
- # storage types
12
- TYPES = {
13
- :root=>5,
14
- :stream=>2,
15
- :storage=>1
16
- }.freeze
17
-
18
- # Creates a byte string for this storage
19
- # @return [String]
20
- def to_s
21
- data = [@name.concat(Array.new(32-@name.size, 0)),
22
- @name_size,
23
- @type,
24
- @color,
25
- @left,
26
- @right,
27
- @child,
28
- @created,
29
- @modified,
30
- @sector,
31
- @size].flatten
32
- data.pack(PACKING)
33
- end
34
-
35
- # storage colors
36
- COLORS = {
37
- :red=>0,
38
- :black=>1
39
- }
40
-
41
- # The color of this node in the directory tree. Defaults to black if not specified
42
- # @return [Integer] color
43
- attr_reader :color
44
-
45
- # Sets the color for this storage
46
- # @param [Integer] v Must be one of the COLORS constant hash values
47
- def color=(v)
48
- RestrictionValidator.validate :storage_color, COLORS.values, v
49
- @color = v
50
- end
51
-
52
- # The size of the name for this node.
53
- # interesting to see that office actually uses 'R' for the root directory and lists the size as 2 bytes - thus is it *NOT* null
54
- # terminated. I am making this r/w so that I can override the size
55
- # @return [Integer] color
56
- attr_reader :name_size
57
-
58
- # the name of the stream
59
- attr_reader :name
60
-
61
- # sets the name of the stream.
62
- # This will automatically set the name_size attribute
63
- # @return [String] name
64
- def name=(v)
65
- @name = v.bytes.to_a << 0
66
- @name_size = @name.size * 2
67
- @name
68
- end
69
-
70
- # The size of the stream
71
- attr_reader :size
72
-
73
- # The stream associated with this storage
74
- attr_reader :data
75
-
76
- # Set the data associated with the stream. If the stream type is undefined, we automatically specify the storage as a stream type. # with the exception of storages that are type root, all storages with data should be type stream.
77
- # @param [String] v The data for this storages stream
78
- # @return [Array]
79
- def data=(v)
80
- Axlsx::validate_string(v)
81
- self.type = TYPES[:stream] unless @type
82
- @size = v.size
83
- @data = v.bytes.to_a
84
- end
85
-
86
- # The starting sector for the stream. If this storage is not a stream, or the root node this is nil
87
- # @return [Integer] sector
88
- attr_accessor :sector
89
-
90
- # The 0 based index in the directoies chain for this the left sibling of this storage.
91
-
92
- # @return [Integer] left
93
- attr_accessor :left
94
-
95
- # The 0 based index in the directoies chain for this the right sibling of this storage.
96
- # @return [Integer] right
97
- attr_accessor :right
98
-
99
- # The 0 based index in the directoies chain for the child of this storage.
100
- # @return [Integer] child
101
- attr_accessor :child
102
-
103
- # The created attribute for the storage
104
- # @return [Integer] created
105
- attr_accessor :created
106
-
107
- # The modified attribute for the storage
108
- # @return [Integer] modified
109
- attr_accessor :modified
110
-
111
- # The type of storage
112
- # see TYPES
113
- # @return [Integer] type
114
- attr_reader :type
115
-
116
- # Sets the type for this storage.
117
- # @param [Integer] v the type to specify must be one of the TYPES constant hash values.
118
- def type=(v)
119
- RestrictionValidator.validate :storage_type, TYPES.values, v
120
- @type = v
121
- end
122
-
123
- # Creates a new storage object.
124
- # @param [String] name the name of the storage
125
- # @option options [Integer] color @default black
126
- # @option options [Integer] type @default storage
127
- # @option options [String] data
128
- # @option options [Integer] left @default -1
129
- # @option options [Integer] right @default -1
130
- # @option options [Integer] child @default -1
131
- # @option options [Integer] created @default 0
132
- # @option options [Integer] modified @default 0
133
- # @option options [Integer] sector @default 0
134
- def initialize(name, options= {})
135
- @left = @right = @child = -1
136
- @sector = @size = @created = @modified = 0
137
- options.each do |o|
138
- self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
139
- end
140
- @color ||= COLORS[:black]
141
- @type ||= (data.nil? ? TYPES[:storage] : TYPES[:stream])
142
- self.name = name
143
- end
144
-
145
- end
146
- end
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+
4
+ # The Storage class represents a storage object or stream in a compound file.
5
+ class Storage
6
+
7
+ # Packing for the Storage when pushing an array of items into a byte stream
8
+ # Name, name length, type, color, left sibling, right sibling, child, classid, state, created, modified, sector, size
9
+ PACKING = "s32 s1 c2 l3 x16 x4 q2 l q".freeze
10
+
11
+ # storage types
12
+ TYPES = {
13
+ :root=>5,
14
+ :stream=>2,
15
+ :storage=>1
16
+ }.freeze
17
+
18
+ # Creates a byte string for this storage
19
+ # @return [String]
20
+ def to_s
21
+ data = [@name.concat(Array.new(32-@name.size, 0)),
22
+ @name_size,
23
+ @type,
24
+ @color,
25
+ @left,
26
+ @right,
27
+ @child,
28
+ @created,
29
+ @modified,
30
+ @sector,
31
+ @size].flatten
32
+ data.pack(PACKING)
33
+ end
34
+
35
+ # storage colors
36
+ COLORS = {
37
+ :red=>0,
38
+ :black=>1
39
+ }
40
+
41
+ # The color of this node in the directory tree. Defaults to black if not specified
42
+ # @return [Integer] color
43
+ attr_reader :color
44
+
45
+ # Sets the color for this storage
46
+ # @param [Integer] v Must be one of the COLORS constant hash values
47
+ def color=(v)
48
+ RestrictionValidator.validate :storage_color, COLORS.values, v
49
+ @color = v
50
+ end
51
+
52
+ # The size of the name for this node.
53
+ # interesting to see that office actually uses 'R' for the root directory and lists the size as 2 bytes - thus is it *NOT* null
54
+ # terminated. I am making this r/w so that I can override the size
55
+ # @return [Integer] color
56
+ attr_reader :name_size
57
+
58
+ # the name of the stream
59
+ attr_reader :name
60
+
61
+ # sets the name of the stream.
62
+ # This will automatically set the name_size attribute
63
+ # @return [String] name
64
+ def name=(v)
65
+ @name = v.bytes.to_a << 0
66
+ @name_size = @name.size * 2
67
+ @name
68
+ end
69
+
70
+ # The size of the stream
71
+ attr_reader :size
72
+
73
+ # The stream associated with this storage
74
+ attr_reader :data
75
+
76
+ # Set the data associated with the stream. If the stream type is undefined, we automatically specify the storage as a stream type. # with the exception of storages that are type root, all storages with data should be type stream.
77
+ # @param [String] v The data for this storages stream
78
+ # @return [Array]
79
+ def data=(v)
80
+ Axlsx::validate_string(v)
81
+ self.type = TYPES[:stream] unless @type
82
+ @size = v.size
83
+ @data = v.bytes.to_a
84
+ end
85
+
86
+ # The starting sector for the stream. If this storage is not a stream, or the root node this is nil
87
+ # @return [Integer] sector
88
+ attr_accessor :sector
89
+
90
+ # The 0 based index in the directoies chain for this the left sibling of this storage.
91
+
92
+ # @return [Integer] left
93
+ attr_accessor :left
94
+
95
+ # The 0 based index in the directoies chain for this the right sibling of this storage.
96
+ # @return [Integer] right
97
+ attr_accessor :right
98
+
99
+ # The 0 based index in the directoies chain for the child of this storage.
100
+ # @return [Integer] child
101
+ attr_accessor :child
102
+
103
+ # The created attribute for the storage
104
+ # @return [Integer] created
105
+ attr_accessor :created
106
+
107
+ # The modified attribute for the storage
108
+ # @return [Integer] modified
109
+ attr_accessor :modified
110
+
111
+ # The type of storage
112
+ # see TYPES
113
+ # @return [Integer] type
114
+ attr_reader :type
115
+
116
+ # Sets the type for this storage.
117
+ # @param [Integer] v the type to specify must be one of the TYPES constant hash values.
118
+ def type=(v)
119
+ RestrictionValidator.validate :storage_type, TYPES.values, v
120
+ @type = v
121
+ end
122
+
123
+ # Creates a new storage object.
124
+ # @param [String] name the name of the storage
125
+ # @option options [Integer] color (black)
126
+ # @option options [Integer] type (storage)
127
+ # @option options [String] data
128
+ # @option options [Integer] left (-1)
129
+ # @option options [Integer] right (-1)
130
+ # @option options [Integer] child (-1)
131
+ # @option options [Integer] created (0)
132
+ # @option options [Integer] modified (0)
133
+ # @option options [Integer] sector (0)
134
+ def initialize(name, options= {})
135
+ @left = @right = @child = -1
136
+ @sector = @size = @created = @modified = 0
137
+ options.each do |o|
138
+ self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
139
+ end
140
+ @color ||= COLORS[:black]
141
+ @type ||= (data.nil? ? TYPES[:storage] : TYPES[:stream])
142
+ self.name = name
143
+ end
144
+
145
+ end
146
+ end