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,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[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