caxlsx 3.0.4 → 3.2.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 (294) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +354 -334
  5. data/LICENSE +21 -21
  6. data/README.md +168 -170
  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 -151
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -143
  22. data/lib/axlsx/drawing/bar_series.rb +97 -80
  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 +276 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +90 -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 -98
  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 +97 -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 +388 -363
  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 -71
  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 +494 -420
  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 +410 -401
  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 +395 -370
  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/break.rb +35 -35
  98. data/lib/axlsx/workbook/worksheet/cell.rb +506 -505
  99. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  100. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  101. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  102. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  103. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  104. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  105. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  106. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  107. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  108. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  110. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  111. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  112. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -246
  113. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  114. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  115. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  116. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  117. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  118. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  119. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  120. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  121. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  122. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  123. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  124. data/lib/axlsx/workbook/worksheet/pivot_table.rb +296 -289
  125. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  126. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  127. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  128. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  129. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  130. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  131. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  132. data/lib/axlsx/workbook/worksheet/row.rb +164 -162
  133. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  134. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  135. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  136. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  137. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  138. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  139. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  140. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  141. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  142. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  143. data/lib/axlsx/workbook/worksheet/worksheet.rb +786 -764
  144. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  145. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  148. data/lib/axlsx.rb +185 -170
  149. data/lib/caxlsx.rb +2 -2
  150. data/lib/schema/dc.xsd +118 -118
  151. data/lib/schema/dcmitype.xsd +51 -51
  152. data/lib/schema/dcterms.xsd +331 -331
  153. data/lib/schema/dml-chartDrawing.xsd +146 -146
  154. data/lib/schema/dml-compatibility.xsd +14 -14
  155. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  156. data/lib/schema/dml-main.xsd +3048 -3048
  157. data/lib/schema/dml-picture.xsd +23 -23
  158. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  159. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  160. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  161. data/lib/schema/shared-bibliography.xsd +144 -144
  162. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  163. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  164. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  165. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  166. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  167. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  168. data/lib/schema/shared-relationshipReference.xsd +25 -25
  169. data/lib/schema/vml-main.xsd +569 -569
  170. data/lib/schema/vml-officeDrawing.xsd +509 -509
  171. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  172. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  173. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  174. data/lib/schema/xml.xsd +116 -116
  175. data/test/benchmark.rb +72 -72
  176. data/test/content_type/tc_content_type.rb +76 -76
  177. data/test/content_type/tc_default.rb +16 -16
  178. data/test/content_type/tc_override.rb +14 -14
  179. data/test/doc_props/tc_app.rb +43 -43
  180. data/test/doc_props/tc_core.rb +42 -42
  181. data/test/drawing/tc_area_chart.rb +39 -39
  182. data/test/drawing/tc_area_series.rb +71 -71
  183. data/test/drawing/tc_axes.rb +7 -7
  184. data/test/drawing/tc_axis.rb +112 -112
  185. data/test/drawing/tc_bar_3D_chart.rb +86 -71
  186. data/test/drawing/tc_bar_chart.rb +86 -71
  187. data/test/drawing/tc_bar_series.rb +46 -37
  188. data/test/drawing/tc_bubble_chart.rb +44 -44
  189. data/test/drawing/tc_bubble_series.rb +21 -21
  190. data/test/drawing/tc_cat_axis.rb +31 -31
  191. data/test/drawing/tc_cat_axis_data.rb +27 -27
  192. data/test/drawing/tc_chart.rb +123 -123
  193. data/test/drawing/tc_d_lbls.rb +57 -57
  194. data/test/drawing/tc_data_source.rb +23 -23
  195. data/test/drawing/tc_drawing.rb +80 -80
  196. data/test/drawing/tc_graphic_frame.rb +27 -27
  197. data/test/drawing/tc_hyperlink.rb +64 -64
  198. data/test/drawing/tc_line_3d_chart.rb +47 -47
  199. data/test/drawing/tc_line_chart.rb +39 -39
  200. data/test/drawing/tc_line_series.rb +71 -71
  201. data/test/drawing/tc_marker.rb +44 -44
  202. data/test/drawing/tc_named_axis_data.rb +27 -27
  203. data/test/drawing/tc_num_data.rb +31 -31
  204. data/test/drawing/tc_num_val.rb +29 -29
  205. data/test/drawing/tc_one_cell_anchor.rb +66 -66
  206. data/test/drawing/tc_pic.rb +103 -103
  207. data/test/drawing/tc_picture_locking.rb +72 -72
  208. data/test/drawing/tc_pie_3D_chart.rb +28 -28
  209. data/test/drawing/tc_pie_series.rb +33 -33
  210. data/test/drawing/tc_scaling.rb +36 -36
  211. data/test/drawing/tc_scatter_chart.rb +48 -48
  212. data/test/drawing/tc_scatter_series.rb +74 -56
  213. data/test/drawing/tc_ser_axis.rb +31 -31
  214. data/test/drawing/tc_series.rb +23 -23
  215. data/test/drawing/tc_series_title.rb +54 -54
  216. data/test/drawing/tc_str_data.rb +18 -18
  217. data/test/drawing/tc_str_val.rb +30 -30
  218. data/test/drawing/tc_title.rb +70 -70
  219. data/test/drawing/tc_two_cell_anchor.rb +36 -36
  220. data/test/drawing/tc_val_axis.rb +24 -24
  221. data/test/drawing/tc_view_3D.rb +54 -54
  222. data/test/drawing/tc_vml_drawing.rb +25 -25
  223. data/test/drawing/tc_vml_shape.rb +106 -106
  224. data/test/profile.rb +24 -24
  225. data/test/rels/tc_relationship.rb +52 -52
  226. data/test/rels/tc_relationships.rb +37 -37
  227. data/test/stylesheet/tc_border.rb +37 -37
  228. data/test/stylesheet/tc_border_pr.rb +32 -32
  229. data/test/stylesheet/tc_cell_alignment.rb +81 -81
  230. data/test/stylesheet/tc_cell_protection.rb +29 -29
  231. data/test/stylesheet/tc_cell_style.rb +57 -57
  232. data/test/stylesheet/tc_color.rb +43 -43
  233. data/test/stylesheet/tc_dxf.rb +81 -81
  234. data/test/stylesheet/tc_fill.rb +18 -18
  235. data/test/stylesheet/tc_font.rb +133 -133
  236. data/test/stylesheet/tc_gradient_fill.rb +72 -72
  237. data/test/stylesheet/tc_gradient_stop.rb +31 -31
  238. data/test/stylesheet/tc_num_fmt.rb +30 -30
  239. data/test/stylesheet/tc_pattern_fill.rb +43 -43
  240. data/test/stylesheet/tc_styles.rb +309 -261
  241. data/test/stylesheet/tc_table_style.rb +44 -44
  242. data/test/stylesheet/tc_table_style_element.rb +45 -45
  243. data/test/stylesheet/tc_table_styles.rb +29 -29
  244. data/test/stylesheet/tc_xf.rb +120 -120
  245. data/test/tc_axlsx.rb +109 -109
  246. data/test/tc_helper.rb +10 -12
  247. data/test/tc_package.rb +317 -264
  248. data/test/util/tc_mime_type_utils.rb +13 -13
  249. data/test/util/tc_serialized_attributes.rb +19 -19
  250. data/test/util/tc_simple_typed_list.rb +77 -77
  251. data/test/util/tc_validators.rb +210 -210
  252. data/test/workbook/tc_defined_name.rb +49 -49
  253. data/test/workbook/tc_shared_strings_table.rb +59 -59
  254. data/test/workbook/tc_workbook.rb +165 -160
  255. data/test/workbook/tc_workbook_view.rb +50 -50
  256. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -38
  257. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -76
  258. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -50
  259. data/test/workbook/worksheet/tc_break.rb +49 -49
  260. data/test/workbook/worksheet/tc_cell.rb +465 -453
  261. data/test/workbook/worksheet/tc_cfvo.rb +31 -31
  262. data/test/workbook/worksheet/tc_col.rb +93 -93
  263. data/test/workbook/worksheet/tc_color_scale.rb +58 -58
  264. data/test/workbook/worksheet/tc_comment.rb +72 -72
  265. data/test/workbook/worksheet/tc_comments.rb +57 -57
  266. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -224
  267. data/test/workbook/worksheet/tc_data_bar.rb +46 -46
  268. data/test/workbook/worksheet/tc_data_validation.rb +265 -265
  269. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -124
  270. data/test/workbook/worksheet/tc_header_footer.rb +151 -151
  271. data/test/workbook/worksheet/tc_icon_set.rb +45 -45
  272. data/test/workbook/worksheet/tc_outline_pr.rb +19 -19
  273. data/test/workbook/worksheet/tc_page_margins.rb +97 -97
  274. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -15
  275. data/test/workbook/worksheet/tc_page_setup.rb +143 -143
  276. data/test/workbook/worksheet/tc_pane.rb +54 -54
  277. data/test/workbook/worksheet/tc_pivot_table.rb +180 -135
  278. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +62 -54
  279. data/test/workbook/worksheet/tc_print_options.rb +72 -72
  280. data/test/workbook/worksheet/tc_protected_range.rb +17 -17
  281. data/test/workbook/worksheet/tc_rich_text.rb +44 -44
  282. data/test/workbook/worksheet/tc_rich_text_run.rb +173 -173
  283. data/test/workbook/worksheet/tc_row.rb +160 -139
  284. data/test/workbook/worksheet/tc_selection.rb +55 -55
  285. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -18
  286. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -88
  287. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -49
  288. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -117
  289. data/test/workbook/worksheet/tc_sheet_view.rb +214 -214
  290. data/test/workbook/worksheet/tc_table.rb +77 -67
  291. data/test/workbook/worksheet/tc_table_style_info.rb +53 -53
  292. data/test/workbook/worksheet/tc_worksheet.rb +632 -601
  293. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -55
  294. metadata +11 -11
@@ -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.instance_values.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
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.instance_values.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