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.
- checksums.yaml +4 -4
- data/.yardopts +9 -9
- data/.yardopts_guide +18 -18
- data/CHANGELOG.md +385 -354
- data/LICENSE +21 -21
- data/README.md +165 -168
- data/Rakefile +29 -29
- data/examples/generate.rb +15 -15
- data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
- data/lib/axlsx/content_type/content_type.rb +26 -26
- data/lib/axlsx/content_type/default.rb +25 -25
- data/lib/axlsx/content_type/override.rb +25 -25
- data/lib/axlsx/doc_props/app.rb +235 -235
- data/lib/axlsx/doc_props/core.rb +39 -39
- data/lib/axlsx/drawing/area_chart.rb +99 -99
- data/lib/axlsx/drawing/area_series.rb +110 -110
- data/lib/axlsx/drawing/ax_data_source.rb +26 -26
- data/lib/axlsx/drawing/axes.rb +61 -61
- data/lib/axlsx/drawing/axis.rb +190 -190
- data/lib/axlsx/drawing/bar_3D_chart.rb +148 -148
- data/lib/axlsx/drawing/bar_chart.rb +138 -138
- data/lib/axlsx/drawing/bar_series.rb +97 -97
- data/lib/axlsx/drawing/bubble_chart.rb +59 -59
- data/lib/axlsx/drawing/bubble_series.rb +63 -63
- data/lib/axlsx/drawing/cat_axis.rb +85 -85
- data/lib/axlsx/drawing/chart.rb +299 -276
- data/lib/axlsx/drawing/d_lbls.rb +91 -90
- data/lib/axlsx/drawing/drawing.rb +167 -167
- data/lib/axlsx/drawing/graphic_frame.rb +54 -54
- data/lib/axlsx/drawing/hyperlink.rb +100 -100
- data/lib/axlsx/drawing/line_3D_chart.rb +68 -68
- data/lib/axlsx/drawing/line_chart.rb +99 -99
- data/lib/axlsx/drawing/line_series.rb +110 -110
- data/lib/axlsx/drawing/marker.rb +84 -84
- data/lib/axlsx/drawing/num_data.rb +52 -52
- data/lib/axlsx/drawing/num_data_source.rb +62 -62
- data/lib/axlsx/drawing/num_val.rb +34 -34
- data/lib/axlsx/drawing/one_cell_anchor.rb +99 -99
- data/lib/axlsx/drawing/pic.rb +211 -211
- data/lib/axlsx/drawing/picture_locking.rb +42 -42
- data/lib/axlsx/drawing/pie_3D_chart.rb +47 -47
- data/lib/axlsx/drawing/pie_series.rb +74 -74
- data/lib/axlsx/drawing/scaling.rb +60 -60
- data/lib/axlsx/drawing/scatter_chart.rb +74 -74
- data/lib/axlsx/drawing/scatter_series.rb +129 -129
- data/lib/axlsx/drawing/ser_axis.rb +45 -45
- data/lib/axlsx/drawing/series.rb +69 -69
- data/lib/axlsx/drawing/series_title.rb +25 -25
- data/lib/axlsx/drawing/str_data.rb +42 -42
- data/lib/axlsx/drawing/str_val.rb +34 -34
- data/lib/axlsx/drawing/title.rb +107 -97
- data/lib/axlsx/drawing/two_cell_anchor.rb +97 -97
- data/lib/axlsx/drawing/val_axis.rb +37 -37
- data/lib/axlsx/drawing/view_3D.rb +115 -115
- data/lib/axlsx/drawing/vml_drawing.rb +42 -42
- data/lib/axlsx/drawing/vml_shape.rb +66 -66
- data/lib/axlsx/package.rb +398 -388
- data/lib/axlsx/rels/relationship.rb +130 -130
- data/lib/axlsx/rels/relationships.rb +32 -32
- data/lib/axlsx/stylesheet/border.rb +73 -73
- data/lib/axlsx/stylesheet/border_pr.rb +71 -71
- data/lib/axlsx/stylesheet/cell_alignment.rb +132 -132
- data/lib/axlsx/stylesheet/cell_protection.rb +41 -41
- data/lib/axlsx/stylesheet/cell_style.rb +72 -72
- data/lib/axlsx/stylesheet/color.rb +76 -76
- data/lib/axlsx/stylesheet/dxf.rb +79 -79
- data/lib/axlsx/stylesheet/fill.rb +35 -35
- data/lib/axlsx/stylesheet/font.rb +156 -156
- data/lib/axlsx/stylesheet/gradient_fill.rb +103 -103
- data/lib/axlsx/stylesheet/gradient_stop.rb +37 -37
- data/lib/axlsx/stylesheet/num_fmt.rb +86 -86
- data/lib/axlsx/stylesheet/pattern_fill.rb +73 -73
- data/lib/axlsx/stylesheet/styles.rb +535 -494
- data/lib/axlsx/stylesheet/table_style.rb +54 -54
- data/lib/axlsx/stylesheet/table_style_element.rb +77 -77
- data/lib/axlsx/stylesheet/table_styles.rb +46 -46
- data/lib/axlsx/stylesheet/xf.rb +147 -147
- data/lib/axlsx/util/accessors.rb +64 -64
- data/lib/axlsx/util/constants.rb +416 -410
- data/lib/axlsx/util/mime_type_utils.rb +11 -11
- data/lib/axlsx/util/options_parser.rb +16 -16
- data/lib/axlsx/util/serialized_attributes.rb +89 -89
- data/lib/axlsx/util/simple_typed_list.rb +179 -179
- data/lib/axlsx/util/storage.rb +146 -146
- data/lib/axlsx/util/validators.rb +312 -312
- data/lib/axlsx/util/zip_command.rb +73 -73
- data/lib/axlsx/version.rb +5 -5
- data/lib/axlsx/workbook/defined_name.rb +128 -128
- data/lib/axlsx/workbook/defined_names.rb +21 -21
- data/lib/axlsx/workbook/shared_strings_table.rb +77 -77
- data/lib/axlsx/workbook/workbook.rb +425 -395
- data/lib/axlsx/workbook/workbook_view.rb +80 -80
- data/lib/axlsx/workbook/workbook_views.rb +22 -22
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -77
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -244
- data/lib/axlsx/workbook/worksheet/border_creator.rb +76 -0
- data/lib/axlsx/workbook/worksheet/break.rb +35 -35
- data/lib/axlsx/workbook/worksheet/cell.rb +532 -506
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
- data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
- data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
- data/lib/axlsx/workbook/worksheet/col.rb +145 -145
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
- data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
- data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
- data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
- data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
- data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
- data/lib/axlsx/workbook/worksheet/data_validation.rb +267 -246
- data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
- data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
- data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
- data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
- data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
- data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
- data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
- data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +335 -296
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
- data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
- data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
- data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
- data/lib/axlsx/workbook/worksheet/row.rb +164 -164
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
- data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
- data/lib/axlsx/workbook/worksheet/table.rb +102 -102
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
- data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
- data/lib/axlsx/workbook/worksheet/worksheet.rb +829 -786
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
- data/lib/axlsx.rb +204 -185
- data/lib/caxlsx.rb +2 -2
- data/lib/schema/dc.xsd +118 -118
- data/lib/schema/dcmitype.xsd +51 -51
- data/lib/schema/dcterms.xsd +331 -331
- data/lib/schema/dml-chartDrawing.xsd +146 -146
- data/lib/schema/dml-compatibility.xsd +14 -14
- data/lib/schema/dml-lockedCanvas.xsd +11 -11
- data/lib/schema/dml-main.xsd +3048 -3048
- data/lib/schema/dml-picture.xsd +23 -23
- data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
- data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
- data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
- data/lib/schema/shared-bibliography.xsd +144 -144
- data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
- data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
- data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
- data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
- data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
- data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
- data/lib/schema/shared-relationshipReference.xsd +25 -25
- data/lib/schema/vml-main.xsd +569 -569
- data/lib/schema/vml-officeDrawing.xsd +509 -509
- data/lib/schema/vml-presentationDrawing.xsd +12 -12
- data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
- data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
- data/lib/schema/xml.xsd +116 -116
- metadata +5 -252
- data/test/benchmark.rb +0 -72
- data/test/content_type/tc_content_type.rb +0 -76
- data/test/content_type/tc_default.rb +0 -16
- data/test/content_type/tc_override.rb +0 -14
- data/test/doc_props/tc_app.rb +0 -43
- data/test/doc_props/tc_core.rb +0 -42
- data/test/drawing/tc_area_chart.rb +0 -39
- data/test/drawing/tc_area_series.rb +0 -71
- data/test/drawing/tc_axes.rb +0 -8
- data/test/drawing/tc_axis.rb +0 -112
- data/test/drawing/tc_bar_3D_chart.rb +0 -86
- data/test/drawing/tc_bar_chart.rb +0 -86
- data/test/drawing/tc_bar_series.rb +0 -46
- data/test/drawing/tc_bubble_chart.rb +0 -44
- data/test/drawing/tc_bubble_series.rb +0 -21
- data/test/drawing/tc_cat_axis.rb +0 -31
- data/test/drawing/tc_cat_axis_data.rb +0 -27
- data/test/drawing/tc_chart.rb +0 -123
- data/test/drawing/tc_d_lbls.rb +0 -57
- data/test/drawing/tc_data_source.rb +0 -23
- data/test/drawing/tc_drawing.rb +0 -80
- data/test/drawing/tc_graphic_frame.rb +0 -27
- data/test/drawing/tc_hyperlink.rb +0 -64
- data/test/drawing/tc_line_3d_chart.rb +0 -47
- data/test/drawing/tc_line_chart.rb +0 -39
- data/test/drawing/tc_line_series.rb +0 -71
- data/test/drawing/tc_marker.rb +0 -44
- data/test/drawing/tc_named_axis_data.rb +0 -27
- data/test/drawing/tc_num_data.rb +0 -31
- data/test/drawing/tc_num_val.rb +0 -29
- data/test/drawing/tc_one_cell_anchor.rb +0 -66
- data/test/drawing/tc_pic.rb +0 -103
- data/test/drawing/tc_picture_locking.rb +0 -72
- data/test/drawing/tc_pie_3D_chart.rb +0 -28
- data/test/drawing/tc_pie_series.rb +0 -33
- data/test/drawing/tc_scaling.rb +0 -36
- data/test/drawing/tc_scatter_chart.rb +0 -48
- data/test/drawing/tc_scatter_series.rb +0 -74
- data/test/drawing/tc_ser_axis.rb +0 -31
- data/test/drawing/tc_series.rb +0 -23
- data/test/drawing/tc_series_title.rb +0 -54
- data/test/drawing/tc_str_data.rb +0 -18
- data/test/drawing/tc_str_val.rb +0 -30
- data/test/drawing/tc_title.rb +0 -70
- data/test/drawing/tc_two_cell_anchor.rb +0 -36
- data/test/drawing/tc_val_axis.rb +0 -24
- data/test/drawing/tc_view_3D.rb +0 -54
- data/test/drawing/tc_vml_drawing.rb +0 -25
- data/test/drawing/tc_vml_shape.rb +0 -106
- data/test/fixtures/image1.gif +0 -0
- data/test/fixtures/image1.jpeg +0 -0
- data/test/fixtures/image1.jpg +0 -0
- data/test/fixtures/image1.png +0 -0
- data/test/fixtures/image1_fake.jpg +0 -0
- data/test/profile.rb +0 -24
- data/test/rels/tc_relationship.rb +0 -52
- data/test/rels/tc_relationships.rb +0 -37
- data/test/stylesheet/tc_border.rb +0 -37
- data/test/stylesheet/tc_border_pr.rb +0 -32
- data/test/stylesheet/tc_cell_alignment.rb +0 -81
- data/test/stylesheet/tc_cell_protection.rb +0 -29
- data/test/stylesheet/tc_cell_style.rb +0 -57
- data/test/stylesheet/tc_color.rb +0 -43
- data/test/stylesheet/tc_dxf.rb +0 -81
- data/test/stylesheet/tc_fill.rb +0 -18
- data/test/stylesheet/tc_font.rb +0 -133
- data/test/stylesheet/tc_gradient_fill.rb +0 -72
- data/test/stylesheet/tc_gradient_stop.rb +0 -31
- data/test/stylesheet/tc_num_fmt.rb +0 -30
- data/test/stylesheet/tc_pattern_fill.rb +0 -43
- data/test/stylesheet/tc_styles.rb +0 -309
- data/test/stylesheet/tc_table_style.rb +0 -44
- data/test/stylesheet/tc_table_style_element.rb +0 -45
- data/test/stylesheet/tc_table_styles.rb +0 -29
- data/test/stylesheet/tc_xf.rb +0 -120
- data/test/tc_axlsx.rb +0 -109
- data/test/tc_helper.rb +0 -10
- data/test/tc_package.rb +0 -317
- data/test/util/tc_mime_type_utils.rb +0 -13
- data/test/util/tc_serialized_attributes.rb +0 -19
- data/test/util/tc_simple_typed_list.rb +0 -77
- data/test/util/tc_validators.rb +0 -210
- data/test/workbook/tc_defined_name.rb +0 -49
- data/test/workbook/tc_shared_strings_table.rb +0 -59
- data/test/workbook/tc_workbook.rb +0 -165
- data/test/workbook/tc_workbook_view.rb +0 -50
- data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +0 -38
- data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +0 -76
- data/test/workbook/worksheet/auto_filter/tc_filters.rb +0 -50
- data/test/workbook/worksheet/tc_break.rb +0 -49
- data/test/workbook/worksheet/tc_cell.rb +0 -465
- data/test/workbook/worksheet/tc_cfvo.rb +0 -31
- data/test/workbook/worksheet/tc_col.rb +0 -93
- data/test/workbook/worksheet/tc_color_scale.rb +0 -58
- data/test/workbook/worksheet/tc_comment.rb +0 -72
- data/test/workbook/worksheet/tc_comments.rb +0 -57
- data/test/workbook/worksheet/tc_conditional_formatting.rb +0 -224
- data/test/workbook/worksheet/tc_data_bar.rb +0 -46
- data/test/workbook/worksheet/tc_data_validation.rb +0 -265
- data/test/workbook/worksheet/tc_date_time_converter.rb +0 -124
- data/test/workbook/worksheet/tc_header_footer.rb +0 -151
- data/test/workbook/worksheet/tc_icon_set.rb +0 -45
- data/test/workbook/worksheet/tc_outline_pr.rb +0 -19
- data/test/workbook/worksheet/tc_page_margins.rb +0 -97
- data/test/workbook/worksheet/tc_page_set_up_pr.rb +0 -15
- data/test/workbook/worksheet/tc_page_setup.rb +0 -143
- data/test/workbook/worksheet/tc_pane.rb +0 -54
- data/test/workbook/worksheet/tc_pivot_table.rb +0 -180
- data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +0 -62
- data/test/workbook/worksheet/tc_print_options.rb +0 -72
- data/test/workbook/worksheet/tc_protected_range.rb +0 -17
- data/test/workbook/worksheet/tc_rich_text.rb +0 -44
- data/test/workbook/worksheet/tc_rich_text_run.rb +0 -173
- data/test/workbook/worksheet/tc_row.rb +0 -160
- data/test/workbook/worksheet/tc_selection.rb +0 -55
- data/test/workbook/worksheet/tc_sheet_calc_pr.rb +0 -18
- data/test/workbook/worksheet/tc_sheet_format_pr.rb +0 -88
- data/test/workbook/worksheet/tc_sheet_pr.rb +0 -49
- data/test/workbook/worksheet/tc_sheet_protection.rb +0 -117
- data/test/workbook/worksheet/tc_sheet_view.rb +0 -214
- data/test/workbook/worksheet/tc_table.rb +0 -77
- data/test/workbook/worksheet/tc_table_style_info.rb +0 -53
- data/test/workbook/worksheet/tc_worksheet.rb +0 -632
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +0 -55
data/lib/axlsx/util/storage.rb
CHANGED
|
@@ -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
|
|
126
|
-
# @option options [Integer] type
|
|
127
|
-
# @option options [String] data
|
|
128
|
-
# @option options [Integer] left
|
|
129
|
-
# @option options [Integer] right
|
|
130
|
-
# @option options [Integer] child
|
|
131
|
-
# @option options [Integer] created
|
|
132
|
-
# @option options [Integer] modified
|
|
133
|
-
# @option options [Integer] sector
|
|
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
|