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
|
@@ -1,250 +1,250 @@
|
|
|
1
|
-
module Axlsx
|
|
2
|
-
|
|
3
|
-
# The RichTextRun class creates and self serializing text run.
|
|
4
|
-
class RichTextRun
|
|
5
|
-
|
|
6
|
-
include Axlsx::OptionsParser
|
|
7
|
-
|
|
8
|
-
attr_reader :value
|
|
9
|
-
|
|
10
|
-
# A list of allowed inline style attributes used for validation
|
|
11
|
-
INLINE_STYLES = [:font_name, :charset,
|
|
12
|
-
:family, :b, :i, :strike, :outline,
|
|
13
|
-
:shadow, :condense, :extend, :u,
|
|
14
|
-
:vertAlign, :sz, :color, :scheme].freeze
|
|
15
|
-
|
|
16
|
-
def initialize(value, options={})
|
|
17
|
-
self.value = value
|
|
18
|
-
parse_options(options)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def value=(value)
|
|
22
|
-
@value = value
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
attr_accessor :cell
|
|
26
|
-
|
|
27
|
-
# The inline font_name property for the cell
|
|
28
|
-
# @return [String]
|
|
29
|
-
attr_reader :font_name
|
|
30
|
-
# @see font_name
|
|
31
|
-
def font_name=(v) set_run_style :validate_string, :font_name, v; end
|
|
32
|
-
|
|
33
|
-
# The inline charset property for the cell
|
|
34
|
-
# As far as I can tell, this is pretty much ignored. However, based on the spec it should be one of the following:
|
|
35
|
-
# 0  ANSI_CHARSET
|
|
36
|
-
# 1 DEFAULT_CHARSET
|
|
37
|
-
# 2 SYMBOL_CHARSET
|
|
38
|
-
# 77 MAC_CHARSET
|
|
39
|
-
# 128 SHIFTJIS_CHARSET
|
|
40
|
-
# 129  HANGUL_CHARSET
|
|
41
|
-
# 130  JOHAB_CHARSET
|
|
42
|
-
# 134  GB2312_CHARSET
|
|
43
|
-
# 136  CHINESEBIG5_CHARSET
|
|
44
|
-
# 161  GREEK_CHARSET
|
|
45
|
-
# 162  TURKISH_CHARSET
|
|
46
|
-
# 163  VIETNAMESE_CHARSET
|
|
47
|
-
# 177  HEBREW_CHARSET
|
|
48
|
-
# 178  ARABIC_CHARSET
|
|
49
|
-
# 186  BALTIC_CHARSET
|
|
50
|
-
# 204  RUSSIAN_CHARSET
|
|
51
|
-
# 222  THAI_CHARSET
|
|
52
|
-
# 238  EASTEUROPE_CHARSET
|
|
53
|
-
# 255  OEM_CHARSET
|
|
54
|
-
# @return [String]
|
|
55
|
-
attr_reader :charset
|
|
56
|
-
# @see charset
|
|
57
|
-
def charset=(v) set_run_style :validate_unsigned_int, :charset, v; end
|
|
58
|
-
|
|
59
|
-
# The inline family property for the cell
|
|
60
|
-
# @return [Integer]
|
|
61
|
-
# 1 Roman
|
|
62
|
-
# 2 Swiss
|
|
63
|
-
# 3 Modern
|
|
64
|
-
# 4 Script
|
|
65
|
-
# 5 Decorative
|
|
66
|
-
attr_reader :family
|
|
67
|
-
# @see family
|
|
68
|
-
def family=(v)
|
|
69
|
-
set_run_style :validate_family, :family, v.to_i
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
# The inline bold property for the cell
|
|
73
|
-
# @return [Boolean]
|
|
74
|
-
attr_reader :b
|
|
75
|
-
# @see b
|
|
76
|
-
def b=(v) set_run_style :validate_boolean, :b, v; end
|
|
77
|
-
|
|
78
|
-
# The inline italic property for the cell
|
|
79
|
-
# @return [Boolean]
|
|
80
|
-
attr_reader :i
|
|
81
|
-
# @see i
|
|
82
|
-
def i=(v) set_run_style :validate_boolean, :i, v; end
|
|
83
|
-
|
|
84
|
-
# The inline strike property for the cell
|
|
85
|
-
# @return [Boolean]
|
|
86
|
-
attr_reader :strike
|
|
87
|
-
# @see strike
|
|
88
|
-
def strike=(v) set_run_style :validate_boolean, :strike, v; end
|
|
89
|
-
|
|
90
|
-
# The inline outline property for the cell
|
|
91
|
-
# @return [Boolean]
|
|
92
|
-
attr_reader :outline
|
|
93
|
-
# @see outline
|
|
94
|
-
def outline=(v) set_run_style :validate_boolean, :outline, v; end
|
|
95
|
-
|
|
96
|
-
# The inline shadow property for the cell
|
|
97
|
-
# @return [Boolean]
|
|
98
|
-
attr_reader :shadow
|
|
99
|
-
# @see shadow
|
|
100
|
-
def shadow=(v) set_run_style :validate_boolean, :shadow, v; end
|
|
101
|
-
|
|
102
|
-
# The inline condense property for the cell
|
|
103
|
-
# @return [Boolean]
|
|
104
|
-
attr_reader :condense
|
|
105
|
-
# @see condense
|
|
106
|
-
def condense=(v) set_run_style :validate_boolean, :condense, v; end
|
|
107
|
-
|
|
108
|
-
# The inline extend property for the cell
|
|
109
|
-
# @return [Boolean]
|
|
110
|
-
attr_reader :extend
|
|
111
|
-
# @see extend
|
|
112
|
-
def extend=(v) set_run_style :validate_boolean, :extend, v; end
|
|
113
|
-
|
|
114
|
-
# The inline underline property for the cell.
|
|
115
|
-
# It must be one of :none, :single, :double, :singleAccounting, :doubleAccounting, true
|
|
116
|
-
# @return [Boolean]
|
|
117
|
-
# @return [String]
|
|
118
|
-
# @note true is for backwards compatability and is reassigned to :single
|
|
119
|
-
attr_reader :u
|
|
120
|
-
# @see u
|
|
121
|
-
def u=(v)
|
|
122
|
-
v = :single if (v == true || v == 1 || v == :true || v == 'true')
|
|
123
|
-
set_run_style :validate_cell_u, :u, v
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
# The inline color property for the cell
|
|
127
|
-
# @return [Color]
|
|
128
|
-
attr_reader :color
|
|
129
|
-
# @param [String] v The 8 character representation for an rgb color #FFFFFFFF"
|
|
130
|
-
def color=(v)
|
|
131
|
-
@color = v.is_a?(Color) ? v : Color.new(:rgb=>v)
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
# The inline sz property for the cell
|
|
135
|
-
# @return [Inteter]
|
|
136
|
-
attr_reader :sz
|
|
137
|
-
# @see sz
|
|
138
|
-
def sz=(v) set_run_style :validate_unsigned_int, :sz, v; end
|
|
139
|
-
|
|
140
|
-
# The inline vertical alignment property for the cell
|
|
141
|
-
# this must be one of [:baseline, :subscript, :superscript]
|
|
142
|
-
# @return [Symbol]
|
|
143
|
-
attr_reader :vertAlign
|
|
144
|
-
# @see vertAlign
|
|
145
|
-
def vertAlign=(v)
|
|
146
|
-
RestrictionValidator.validate :cell_vertAlign, [:baseline, :subscript, :superscript], v
|
|
147
|
-
set_run_style nil, :vertAlign, v
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
# The inline scheme property for the cell
|
|
151
|
-
# this must be one of [:none, major, minor]
|
|
152
|
-
# @return [Symbol]
|
|
153
|
-
attr_reader :scheme
|
|
154
|
-
# @see scheme
|
|
155
|
-
def scheme=(v)
|
|
156
|
-
RestrictionValidator.validate :cell_scheme, [:none, :major, :minor], v
|
|
157
|
-
set_run_style nil, :scheme, v
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
# Tries to work out the width of the longest line in the run
|
|
161
|
-
# @param [Array] widtharray this array is populated with the widths of each line in the run.
|
|
162
|
-
# @return [Array]
|
|
163
|
-
def autowidth(widtharray)
|
|
164
|
-
return if value.nil?
|
|
165
|
-
if styles.cellXfs[style].alignment && styles.cellXfs[style].alignment.wrap_text
|
|
166
|
-
first = true
|
|
167
|
-
value.to_s.split(/\r?\n/, -1).each do |line|
|
|
168
|
-
if first
|
|
169
|
-
first = false
|
|
170
|
-
else
|
|
171
|
-
widtharray << 0
|
|
172
|
-
end
|
|
173
|
-
widtharray[-1] += string_width(line, font_size)
|
|
174
|
-
end
|
|
175
|
-
else
|
|
176
|
-
widtharray[-1] += string_width(value.to_s, font_size)
|
|
177
|
-
end
|
|
178
|
-
widtharray
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
# Utility method for setting inline style attributes
|
|
182
|
-
def set_run_style(validator, attr, value)
|
|
183
|
-
return unless INLINE_STYLES.include?(attr.to_sym)
|
|
184
|
-
Axlsx.send(validator, value) unless validator.nil?
|
|
185
|
-
self.instance_variable_set :"@#{attr.to_s}", value
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
# Serializes the RichTextRun
|
|
189
|
-
# @param [String] str
|
|
190
|
-
# @return [String]
|
|
191
|
-
def to_xml_string(str = '')
|
|
192
|
-
valid = RichTextRun::INLINE_STYLES
|
|
193
|
-
data = Hash[self.
|
|
194
|
-
data = data.select { |key, value| valid.include?(key) && !value.nil? }
|
|
195
|
-
|
|
196
|
-
str << '<r><rPr>'
|
|
197
|
-
data.keys.each do |key|
|
|
198
|
-
case key
|
|
199
|
-
when :font_name
|
|
200
|
-
str << ('<rFont val="' << font_name << '"/>')
|
|
201
|
-
when :color
|
|
202
|
-
str << data[key].to_xml_string
|
|
203
|
-
else
|
|
204
|
-
str << ('<' << key.to_s << ' val="' << xml_value(data[key]) << '"/>')
|
|
205
|
-
end
|
|
206
|
-
end
|
|
207
|
-
clean_value = Axlsx::trust_input ? @value.to_s : ::CGI.escapeHTML(Axlsx::sanitize(@value.to_s))
|
|
208
|
-
str << ('</rPr><t>' << clean_value << '</t></r>')
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
private
|
|
212
|
-
|
|
213
|
-
# Returns the width of a string according to the current style
|
|
214
|
-
# This is still not perfect...
|
|
215
|
-
# - scaling is not linear as font sizes increase
|
|
216
|
-
def string_width(string, font_size)
|
|
217
|
-
font_scale = font_size / 10.0
|
|
218
|
-
string.size * font_scale
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
# we scale the font size if bold style is applied to either the style font or
|
|
222
|
-
# the cell itself. Yes, it is a bit of a hack, but it is much better than using
|
|
223
|
-
# imagemagick and loading metrics for every character.
|
|
224
|
-
def font_size
|
|
225
|
-
return sz if sz
|
|
226
|
-
font = styles.fonts[styles.cellXfs[style].fontId] || styles.fonts[0]
|
|
227
|
-
(font.b || (defined?(@b) && @b)) ? (font.sz * 1.5) : font.sz
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
def style
|
|
231
|
-
cell.style
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
def styles
|
|
235
|
-
cell.row.worksheet.styles
|
|
236
|
-
end
|
|
237
|
-
|
|
238
|
-
# Converts the value to the correct XML representation (fixes issues with
|
|
239
|
-
# Numbers)
|
|
240
|
-
def xml_value value
|
|
241
|
-
if value == true
|
|
242
|
-
1
|
|
243
|
-
elsif value == false
|
|
244
|
-
0
|
|
245
|
-
else
|
|
246
|
-
value
|
|
247
|
-
end.to_s
|
|
248
|
-
end
|
|
249
|
-
end
|
|
250
|
-
end
|
|
1
|
+
module Axlsx
|
|
2
|
+
|
|
3
|
+
# The RichTextRun class creates and self serializing text run.
|
|
4
|
+
class RichTextRun
|
|
5
|
+
|
|
6
|
+
include Axlsx::OptionsParser
|
|
7
|
+
|
|
8
|
+
attr_reader :value
|
|
9
|
+
|
|
10
|
+
# A list of allowed inline style attributes used for validation
|
|
11
|
+
INLINE_STYLES = [:font_name, :charset,
|
|
12
|
+
:family, :b, :i, :strike, :outline,
|
|
13
|
+
:shadow, :condense, :extend, :u,
|
|
14
|
+
:vertAlign, :sz, :color, :scheme].freeze
|
|
15
|
+
|
|
16
|
+
def initialize(value, options={})
|
|
17
|
+
self.value = value
|
|
18
|
+
parse_options(options)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def value=(value)
|
|
22
|
+
@value = value
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
attr_accessor :cell
|
|
26
|
+
|
|
27
|
+
# The inline font_name property for the cell
|
|
28
|
+
# @return [String]
|
|
29
|
+
attr_reader :font_name
|
|
30
|
+
# @see font_name
|
|
31
|
+
def font_name=(v) set_run_style :validate_string, :font_name, v; end
|
|
32
|
+
|
|
33
|
+
# The inline charset property for the cell
|
|
34
|
+
# As far as I can tell, this is pretty much ignored. However, based on the spec it should be one of the following:
|
|
35
|
+
# 0  ANSI_CHARSET
|
|
36
|
+
# 1 DEFAULT_CHARSET
|
|
37
|
+
# 2 SYMBOL_CHARSET
|
|
38
|
+
# 77 MAC_CHARSET
|
|
39
|
+
# 128 SHIFTJIS_CHARSET
|
|
40
|
+
# 129  HANGUL_CHARSET
|
|
41
|
+
# 130  JOHAB_CHARSET
|
|
42
|
+
# 134  GB2312_CHARSET
|
|
43
|
+
# 136  CHINESEBIG5_CHARSET
|
|
44
|
+
# 161  GREEK_CHARSET
|
|
45
|
+
# 162  TURKISH_CHARSET
|
|
46
|
+
# 163  VIETNAMESE_CHARSET
|
|
47
|
+
# 177  HEBREW_CHARSET
|
|
48
|
+
# 178  ARABIC_CHARSET
|
|
49
|
+
# 186  BALTIC_CHARSET
|
|
50
|
+
# 204  RUSSIAN_CHARSET
|
|
51
|
+
# 222  THAI_CHARSET
|
|
52
|
+
# 238  EASTEUROPE_CHARSET
|
|
53
|
+
# 255  OEM_CHARSET
|
|
54
|
+
# @return [String]
|
|
55
|
+
attr_reader :charset
|
|
56
|
+
# @see charset
|
|
57
|
+
def charset=(v) set_run_style :validate_unsigned_int, :charset, v; end
|
|
58
|
+
|
|
59
|
+
# The inline family property for the cell
|
|
60
|
+
# @return [Integer]
|
|
61
|
+
# 1 Roman
|
|
62
|
+
# 2 Swiss
|
|
63
|
+
# 3 Modern
|
|
64
|
+
# 4 Script
|
|
65
|
+
# 5 Decorative
|
|
66
|
+
attr_reader :family
|
|
67
|
+
# @see family
|
|
68
|
+
def family=(v)
|
|
69
|
+
set_run_style :validate_family, :family, v.to_i
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# The inline bold property for the cell
|
|
73
|
+
# @return [Boolean]
|
|
74
|
+
attr_reader :b
|
|
75
|
+
# @see b
|
|
76
|
+
def b=(v) set_run_style :validate_boolean, :b, v; end
|
|
77
|
+
|
|
78
|
+
# The inline italic property for the cell
|
|
79
|
+
# @return [Boolean]
|
|
80
|
+
attr_reader :i
|
|
81
|
+
# @see i
|
|
82
|
+
def i=(v) set_run_style :validate_boolean, :i, v; end
|
|
83
|
+
|
|
84
|
+
# The inline strike property for the cell
|
|
85
|
+
# @return [Boolean]
|
|
86
|
+
attr_reader :strike
|
|
87
|
+
# @see strike
|
|
88
|
+
def strike=(v) set_run_style :validate_boolean, :strike, v; end
|
|
89
|
+
|
|
90
|
+
# The inline outline property for the cell
|
|
91
|
+
# @return [Boolean]
|
|
92
|
+
attr_reader :outline
|
|
93
|
+
# @see outline
|
|
94
|
+
def outline=(v) set_run_style :validate_boolean, :outline, v; end
|
|
95
|
+
|
|
96
|
+
# The inline shadow property for the cell
|
|
97
|
+
# @return [Boolean]
|
|
98
|
+
attr_reader :shadow
|
|
99
|
+
# @see shadow
|
|
100
|
+
def shadow=(v) set_run_style :validate_boolean, :shadow, v; end
|
|
101
|
+
|
|
102
|
+
# The inline condense property for the cell
|
|
103
|
+
# @return [Boolean]
|
|
104
|
+
attr_reader :condense
|
|
105
|
+
# @see condense
|
|
106
|
+
def condense=(v) set_run_style :validate_boolean, :condense, v; end
|
|
107
|
+
|
|
108
|
+
# The inline extend property for the cell
|
|
109
|
+
# @return [Boolean]
|
|
110
|
+
attr_reader :extend
|
|
111
|
+
# @see extend
|
|
112
|
+
def extend=(v) set_run_style :validate_boolean, :extend, v; end
|
|
113
|
+
|
|
114
|
+
# The inline underline property for the cell.
|
|
115
|
+
# It must be one of :none, :single, :double, :singleAccounting, :doubleAccounting, true
|
|
116
|
+
# @return [Boolean]
|
|
117
|
+
# @return [String]
|
|
118
|
+
# @note true is for backwards compatability and is reassigned to :single
|
|
119
|
+
attr_reader :u
|
|
120
|
+
# @see u
|
|
121
|
+
def u=(v)
|
|
122
|
+
v = :single if (v == true || v == 1 || v == :true || v == 'true')
|
|
123
|
+
set_run_style :validate_cell_u, :u, v
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# The inline color property for the cell
|
|
127
|
+
# @return [Color]
|
|
128
|
+
attr_reader :color
|
|
129
|
+
# @param [String] v The 8 character representation for an rgb color #FFFFFFFF"
|
|
130
|
+
def color=(v)
|
|
131
|
+
@color = v.is_a?(Color) ? v : Color.new(:rgb=>v)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# The inline sz property for the cell
|
|
135
|
+
# @return [Inteter]
|
|
136
|
+
attr_reader :sz
|
|
137
|
+
# @see sz
|
|
138
|
+
def sz=(v) set_run_style :validate_unsigned_int, :sz, v; end
|
|
139
|
+
|
|
140
|
+
# The inline vertical alignment property for the cell
|
|
141
|
+
# this must be one of [:baseline, :subscript, :superscript]
|
|
142
|
+
# @return [Symbol]
|
|
143
|
+
attr_reader :vertAlign
|
|
144
|
+
# @see vertAlign
|
|
145
|
+
def vertAlign=(v)
|
|
146
|
+
RestrictionValidator.validate :cell_vertAlign, [:baseline, :subscript, :superscript], v
|
|
147
|
+
set_run_style nil, :vertAlign, v
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# The inline scheme property for the cell
|
|
151
|
+
# this must be one of [:none, major, minor]
|
|
152
|
+
# @return [Symbol]
|
|
153
|
+
attr_reader :scheme
|
|
154
|
+
# @see scheme
|
|
155
|
+
def scheme=(v)
|
|
156
|
+
RestrictionValidator.validate :cell_scheme, [:none, :major, :minor], v
|
|
157
|
+
set_run_style nil, :scheme, v
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Tries to work out the width of the longest line in the run
|
|
161
|
+
# @param [Array] widtharray this array is populated with the widths of each line in the run.
|
|
162
|
+
# @return [Array]
|
|
163
|
+
def autowidth(widtharray)
|
|
164
|
+
return if value.nil?
|
|
165
|
+
if styles.cellXfs[style].alignment && styles.cellXfs[style].alignment.wrap_text
|
|
166
|
+
first = true
|
|
167
|
+
value.to_s.split(/\r?\n/, -1).each do |line|
|
|
168
|
+
if first
|
|
169
|
+
first = false
|
|
170
|
+
else
|
|
171
|
+
widtharray << 0
|
|
172
|
+
end
|
|
173
|
+
widtharray[-1] += string_width(line, font_size)
|
|
174
|
+
end
|
|
175
|
+
else
|
|
176
|
+
widtharray[-1] += string_width(value.to_s, font_size)
|
|
177
|
+
end
|
|
178
|
+
widtharray
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Utility method for setting inline style attributes
|
|
182
|
+
def set_run_style(validator, attr, value)
|
|
183
|
+
return unless INLINE_STYLES.include?(attr.to_sym)
|
|
184
|
+
Axlsx.send(validator, value) unless validator.nil?
|
|
185
|
+
self.instance_variable_set :"@#{attr.to_s}", value
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Serializes the RichTextRun
|
|
189
|
+
# @param [String] str
|
|
190
|
+
# @return [String]
|
|
191
|
+
def to_xml_string(str = '')
|
|
192
|
+
valid = RichTextRun::INLINE_STYLES
|
|
193
|
+
data = Hash[Axlsx.instance_values_for(self).map{ |k, v| [k.to_sym, v] }]
|
|
194
|
+
data = data.select { |key, value| valid.include?(key) && !value.nil? }
|
|
195
|
+
|
|
196
|
+
str << '<r><rPr>'
|
|
197
|
+
data.keys.each do |key|
|
|
198
|
+
case key
|
|
199
|
+
when :font_name
|
|
200
|
+
str << ('<rFont val="' << font_name << '"/>')
|
|
201
|
+
when :color
|
|
202
|
+
str << data[key].to_xml_string
|
|
203
|
+
else
|
|
204
|
+
str << ('<' << key.to_s << ' val="' << xml_value(data[key]) << '"/>')
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
clean_value = Axlsx::trust_input ? @value.to_s : ::CGI.escapeHTML(Axlsx::sanitize(@value.to_s))
|
|
208
|
+
str << ('</rPr><t>' << clean_value << '</t></r>')
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
private
|
|
212
|
+
|
|
213
|
+
# Returns the width of a string according to the current style
|
|
214
|
+
# This is still not perfect...
|
|
215
|
+
# - scaling is not linear as font sizes increase
|
|
216
|
+
def string_width(string, font_size)
|
|
217
|
+
font_scale = font_size / 10.0
|
|
218
|
+
string.size * font_scale
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# we scale the font size if bold style is applied to either the style font or
|
|
222
|
+
# the cell itself. Yes, it is a bit of a hack, but it is much better than using
|
|
223
|
+
# imagemagick and loading metrics for every character.
|
|
224
|
+
def font_size
|
|
225
|
+
return sz if sz
|
|
226
|
+
font = styles.fonts[styles.cellXfs[style].fontId] || styles.fonts[0]
|
|
227
|
+
(font.b || (defined?(@b) && @b)) ? (font.sz * 1.5) : font.sz
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def style
|
|
231
|
+
cell.style
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def styles
|
|
235
|
+
cell.row.worksheet.styles
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# Converts the value to the correct XML representation (fixes issues with
|
|
239
|
+
# Numbers)
|
|
240
|
+
def xml_value value
|
|
241
|
+
if value == true
|
|
242
|
+
1
|
|
243
|
+
elsif value == false
|
|
244
|
+
0
|
|
245
|
+
else
|
|
246
|
+
value
|
|
247
|
+
end.to_s
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
end
|