xlsxrb 0.1.4 → 0.1.6
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/.devcontainer/Dockerfile +1 -1
- data/.gem_rbs_collection/ast/2.4/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/ast/2.4/ast.rbs +73 -0
- data/.gem_rbs_collection/concurrent-ruby/1.1/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/concurrent-ruby/1.1/array.rbs +4 -0
- data/.gem_rbs_collection/concurrent-ruby/1.1/atomic_reference.rbs +16 -0
- data/.gem_rbs_collection/concurrent-ruby/1.1/executor.rbs +96 -0
- data/.gem_rbs_collection/concurrent-ruby/1.1/hash.rbs +4 -0
- data/.gem_rbs_collection/concurrent-ruby/1.1/map.rbs +68 -0
- data/.gem_rbs_collection/concurrent-ruby/1.1/promises.rbs +249 -0
- data/.gem_rbs_collection/concurrent-ruby/1.1/set.rbs +4 -0
- data/.gem_rbs_collection/concurrent-ruby/1.1/timer_task.rbs +47 -0
- data/.gem_rbs_collection/concurrent-ruby/1.1/utility/processor_counter.rbs +5 -0
- data/.gem_rbs_collection/csv/3.3/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/csv/3.3/csv.rbs +3871 -0
- data/.gem_rbs_collection/csv/3.3/manifest.yaml +3 -0
- data/.gem_rbs_collection/lint_roller/1.1/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/lint_roller/1.1/lint_roller.rbs +48 -0
- data/.gem_rbs_collection/listen/3.9/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/listen/3.9/listen.rbs +25 -0
- data/.gem_rbs_collection/listen/3.9/listener.rbs +24 -0
- data/.gem_rbs_collection/logger/1.7/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/logger/1.7/formatter.rbs +45 -0
- data/.gem_rbs_collection/logger/1.7/log_device.rbs +100 -0
- data/.gem_rbs_collection/logger/1.7/logger.rbs +796 -0
- data/.gem_rbs_collection/logger/1.7/manifest.yaml +2 -0
- data/.gem_rbs_collection/logger/1.7/period.rbs +17 -0
- data/.gem_rbs_collection/logger/1.7/severity.rbs +34 -0
- data/.gem_rbs_collection/nokogiri/1.11/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/nokogiri/1.11/nokogiri.rbs +2332 -0
- data/.gem_rbs_collection/nokogiri/1.11/patch.rbs +4 -0
- data/.gem_rbs_collection/parallel/1.20/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/parallel/1.20/parallel.rbs +86 -0
- data/.gem_rbs_collection/parser/3.2/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/parser/3.2/manifest.yaml +7 -0
- data/.gem_rbs_collection/parser/3.2/parser.rbs +194 -0
- data/.gem_rbs_collection/parser/3.2/polyfill.rbs +4 -0
- data/.gem_rbs_collection/rainbow/3.0/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/rainbow/3.0/global.rbs +7 -0
- data/.gem_rbs_collection/rainbow/3.0/presenter.rbs +209 -0
- data/.gem_rbs_collection/rainbow/3.0/rainbow.rbs +5 -0
- data/.gem_rbs_collection/rake/13.0/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/rake/13.0/manifest.yaml +2 -0
- data/.gem_rbs_collection/rake/13.0/rake.rbs +39 -0
- data/.gem_rbs_collection/regexp_parser/2.8/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/regexp_parser/2.8/regexp_parser.rbs +17 -0
- data/.gem_rbs_collection/rubocop/1.57/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/rubocop/1.57/rubocop.rbs +208 -0
- data/.gem_rbs_collection/rubocop-ast/1.46/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/rubocop-ast/1.46/rubocop-ast.rbs +903 -0
- data/.gem_rbs_collection/rubyzip/3.2/.rbs_meta.yaml +9 -0
- data/.gem_rbs_collection/rubyzip/3.2/manifest.yaml +8 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/central_directory.rbs +42 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/compressor.rbs +5 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/constants.rbs +47 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/crypto/aes_encryption.rbs +30 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/crypto/decrypted_io.rbs +9 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/crypto/encryption.rbs +7 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/crypto/null_encryption.rbs +19 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/crypto/traditional_encryption.rbs +31 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/decompressor.rbs +18 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/deflater.rbs +12 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/dirtyable.rbs +11 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/dos_time.rbs +13 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/entry.rbs +95 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/entry_set.rbs +31 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/errors.rbs +58 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/extra_field/aes.rbs +24 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/extra_field/generic.rbs +17 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/extra_field/ntfs.rbs +23 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/extra_field/old_unix.rbs +22 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/extra_field/universal_time.rbs +30 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/extra_field/unix.rbs +20 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/extra_field/unknown.rbs +15 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/extra_field/zip64.rbs +26 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/extra_field.rbs +21 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/file.rbs +131 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/file_split.rbs +14 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/filesystem/dir.rbs +33 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/filesystem/directory_iterator.rbs +21 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/filesystem/file.rbs +63 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/filesystem/file_stat.rbs +55 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/filesystem/zip_file_name_mapper.rbs +35 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/filesystem.rbs +7 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/inflater.rbs +10 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/input_stream.rbs +22 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/ioextras/abstract_input_stream.rbs +29 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/ioextras/abstract_output_stream.rbs +17 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/ioextras.rbs +13 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/null_compressor.rbs +10 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/null_decompressor.rbs +8 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/null_input_stream.rbs +6 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/output_stream.rbs +30 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/pass_thru_compressor.rbs +10 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/pass_thru_decompressor.rbs +10 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/streamable_directory.rbs +5 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/streamable_stream.rbs +15 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip/version.rbs +3 -0
- data/.gem_rbs_collection/rubyzip/3.2/zip.rbs +40 -0
- data/CHANGELOG.md +42 -3
- data/README.md +130 -49
- data/Rakefile +23 -2
- data/Steepfile +17 -0
- data/benchmark.rb +324 -348
- data/docs/ARCHITECTURE.md +24 -0
- data/docs/DEVELOPMENT.md +58 -0
- data/docs/QUALITY_ASSURANCE.md +26 -0
- data/docs/visual/VisualGallery.md +893 -938
- data/docs/wasm/ruby.wasm +0 -0
- data/lib/xlsxrb/elements/cell.rb +113 -8
- data/lib/xlsxrb/elements/column.rb +2 -0
- data/lib/xlsxrb/elements/row.rb +52 -4
- data/lib/xlsxrb/elements/types.rb +6 -0
- data/lib/xlsxrb/elements/workbook.rb +29 -0
- data/lib/xlsxrb/elements/worksheet.rb +98 -1
- data/lib/xlsxrb/elements.rb +2 -0
- data/lib/xlsxrb/ooxml/reader.rb +8 -6
- data/lib/xlsxrb/ooxml/shared_strings_parser.rb +106 -40
- data/lib/xlsxrb/ooxml/styles_parser.rb +2 -0
- data/lib/xlsxrb/ooxml/utils.rb +2 -0
- data/lib/xlsxrb/ooxml/workbook_parser.rb +6 -1
- data/lib/xlsxrb/ooxml/workbook_writer.rb +15 -4
- data/lib/xlsxrb/ooxml/worksheet_parser.rb +156 -23
- data/lib/xlsxrb/ooxml/worksheet_writer.rb +207 -152
- data/lib/xlsxrb/ooxml/writer.rb +217 -5
- data/lib/xlsxrb/ooxml/xml_builder.rb +18 -10
- data/lib/xlsxrb/ooxml/xml_parser.rb +2 -0
- data/lib/xlsxrb/ooxml/zip_generator.rb +5 -8
- data/lib/xlsxrb/ooxml/zip_reader.rb +179 -57
- data/lib/xlsxrb/ooxml/zip_writer.rb +65 -25
- data/lib/xlsxrb/ooxml.rb +3 -1
- data/lib/xlsxrb/style_builder.rb +284 -36
- data/lib/xlsxrb/version.rb +3 -1
- data/lib/xlsxrb.rb +1761 -275
- data/rbs_collection.lock.yaml +252 -0
- data/rbs_collection.yaml +19 -0
- data/sig/generated/xlsxrb/elements/cell.rbs +30 -0
- data/sig/generated/xlsxrb/elements/column.rbs +30 -0
- data/sig/generated/xlsxrb/elements/row.rbs +32 -0
- data/sig/generated/xlsxrb/elements/types.rbs +74 -0
- data/sig/generated/xlsxrb/elements/workbook.rbs +25 -0
- data/sig/generated/xlsxrb/elements/worksheet.rbs +27 -0
- data/sig/generated/xlsxrb/elements.rbs +8 -0
- data/sig/generated/xlsxrb/ooxml/reader.rbs +1412 -0
- data/sig/generated/xlsxrb/ooxml/shared_strings_parser.rbs +21 -0
- data/sig/generated/xlsxrb/ooxml/styles_parser.rbs +44 -0
- data/sig/generated/xlsxrb/ooxml/utils.rbs +40 -0
- data/sig/generated/xlsxrb/ooxml/workbook_parser.rbs +46 -0
- data/sig/generated/xlsxrb/ooxml/workbook_writer.rbs +66 -0
- data/sig/generated/xlsxrb/ooxml/worksheet_parser.rbs +67 -0
- data/sig/generated/xlsxrb/ooxml/worksheet_writer.rbs +92 -0
- data/sig/generated/xlsxrb/ooxml/writer.rbs +880 -0
- data/sig/generated/xlsxrb/ooxml/xml_builder.rbs +45 -0
- data/sig/generated/xlsxrb/ooxml/xml_parser.rbs +30 -0
- data/sig/generated/xlsxrb/ooxml/zip_generator.rbs +38 -0
- data/sig/generated/xlsxrb/ooxml/zip_reader.rbs +45 -0
- data/sig/generated/xlsxrb/ooxml/zip_writer.rbs +45 -0
- data/sig/generated/xlsxrb/ooxml.rbs +23 -0
- data/sig/generated/xlsxrb/style_builder.rbs +250 -0
- data/sig/generated/xlsxrb/version.rbs +5 -0
- data/sig/generated/xlsxrb.rbs +1276 -0
- data/sig/rexml.rbs +4 -0
- metadata +145 -4
- data/measure_memory.rb +0 -42
- data/sig/xlsxrb.rbs +0 -23
data/lib/xlsxrb/style_builder.rb
CHANGED
|
@@ -1,9 +1,36 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# rbs_inline: enabled
|
|
4
|
+
|
|
3
5
|
module Xlsxrb
|
|
4
6
|
# Helper class for building cell styles with a fluent DSL.
|
|
5
7
|
# Encapsulates font, fill, border, alignment, and number format properties.
|
|
8
|
+
# @api public
|
|
6
9
|
class StyleBuilder
|
|
10
|
+
COLORS = {
|
|
11
|
+
black: "FF000000",
|
|
12
|
+
white: "FFFFFFFF",
|
|
13
|
+
red: "FFFF0000",
|
|
14
|
+
green: "FF00FF00",
|
|
15
|
+
blue: "FF0000FF",
|
|
16
|
+
yellow: "FFFFFF00",
|
|
17
|
+
cyan: "FF00FFFF",
|
|
18
|
+
magenta: "FFFF00FF",
|
|
19
|
+
gray: "FF808080",
|
|
20
|
+
grey: "FF808080"
|
|
21
|
+
}.freeze
|
|
22
|
+
|
|
23
|
+
def resolve_color(color)
|
|
24
|
+
return nil unless color
|
|
25
|
+
|
|
26
|
+
if color.is_a?(Symbol) || (color.is_a?(String) && color.start_with?(":") && color.length > 1)
|
|
27
|
+
key = color.to_s.sub(/^:/, "").to_sym
|
|
28
|
+
return COLORS[key] || color.to_s
|
|
29
|
+
end
|
|
30
|
+
color.to_s
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
#: (?String? name) -> void
|
|
7
34
|
def initialize(name = nil)
|
|
8
35
|
@name = name
|
|
9
36
|
@font_props = {}
|
|
@@ -17,83 +44,190 @@ module Xlsxrb
|
|
|
17
44
|
|
|
18
45
|
# Applies option-style definitions so callers can use add_style(name, **opts)
|
|
19
46
|
# as an alternative to block-based fluent chaining.
|
|
47
|
+
# Applies option-style definitions so callers can use add_style(name, **opts)
|
|
48
|
+
# as an alternative to block-based fluent chaining.
|
|
49
|
+
# @param opts [Hash] The styling options.
|
|
50
|
+
# @return [self]
|
|
51
|
+
# @api public
|
|
52
|
+
#: (**untyped) -> self
|
|
20
53
|
def apply_options!(**opts)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
54
|
+
if opts.key?(:font)
|
|
55
|
+
font_opts = opts[:font] || {}
|
|
56
|
+
bold(font_opts[:bold]) if font_opts.key?(:bold)
|
|
57
|
+
italic(font_opts[:italic]) if font_opts.key?(:italic)
|
|
58
|
+
size(font_opts[:size]) if font_opts.key?(:size)
|
|
59
|
+
font_name(font_opts[:name]) if font_opts.key?(:name)
|
|
60
|
+
font_color(font_opts[:color]) if font_opts.key?(:color)
|
|
61
|
+
underline(font_opts[:underline]) if font_opts.key?(:underline)
|
|
62
|
+
strike(font_opts[:strike]) if font_opts.key?(:strike)
|
|
63
|
+
vert_align(font_opts[:vert_align]) if font_opts.key?(:vert_align)
|
|
64
|
+
else
|
|
65
|
+
bold(opts[:bold]) if opts.key?(:bold)
|
|
66
|
+
italic(opts[:italic]) if opts.key?(:italic)
|
|
67
|
+
size(opts[:size]) if opts.key?(:size)
|
|
68
|
+
font_name(opts[:font_name]) if opts.key?(:font_name)
|
|
69
|
+
font_color(opts[:font_color]) if opts.key?(:font_color)
|
|
70
|
+
underline(opts[:underline]) if opts.key?(:underline)
|
|
71
|
+
strike(opts[:strike]) if opts.key?(:strike)
|
|
72
|
+
vert_align(opts[:vert_align]) if opts.key?(:vert_align)
|
|
73
|
+
end
|
|
29
74
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
75
|
+
if opts.key?(:fill)
|
|
76
|
+
fill_opts = opts[:fill] || {}
|
|
77
|
+
if fill_opts.key?(:color)
|
|
78
|
+
fill_color(fill_opts[:color])
|
|
79
|
+
else
|
|
80
|
+
fill_pattern(
|
|
81
|
+
fill_opts[:pattern] || "solid",
|
|
82
|
+
fg_color: fill_opts[:fg_color],
|
|
83
|
+
bg_color: fill_opts[:bg_color]
|
|
84
|
+
)
|
|
85
|
+
end
|
|
86
|
+
else
|
|
87
|
+
fill_color(opts[:fill_color]) if opts.key?(:fill_color)
|
|
88
|
+
if opts.key?(:fill_pattern)
|
|
89
|
+
pattern = opts[:fill_pattern] || {}
|
|
90
|
+
fill_pattern(
|
|
91
|
+
pattern[:pattern] || "solid",
|
|
92
|
+
fg_color: pattern[:fg_color],
|
|
93
|
+
bg_color: pattern[:bg_color]
|
|
94
|
+
)
|
|
95
|
+
end
|
|
38
96
|
end
|
|
39
97
|
fill_gradient(**opts[:fill_gradient]) if opts.key?(:fill_gradient) && opts[:fill_gradient]
|
|
40
98
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
99
|
+
if opts.key?(:border)
|
|
100
|
+
border_opts = opts[:border] || {}
|
|
101
|
+
border_all(**border_opts[:all]) if border_opts.key?(:all) && border_opts[:all]
|
|
102
|
+
border_left(**border_opts[:left]) if border_opts.key?(:left) && border_opts[:left]
|
|
103
|
+
border_right(**border_opts[:right]) if border_opts.key?(:right) && border_opts[:right]
|
|
104
|
+
border_top(**border_opts[:top]) if border_opts.key?(:top) && border_opts[:top]
|
|
105
|
+
border_bottom(**border_opts[:bottom]) if border_opts.key?(:bottom) && border_opts[:bottom]
|
|
106
|
+
else
|
|
107
|
+
border_all(**opts[:border_all]) if opts.key?(:border_all) && opts[:border_all]
|
|
108
|
+
border_left(**opts[:border_left]) if opts.key?(:border_left) && opts[:border_left]
|
|
109
|
+
border_right(**opts[:border_right]) if opts.key?(:border_right) && opts[:border_right]
|
|
110
|
+
border_top(**opts[:border_top]) if opts.key?(:border_top) && opts[:border_top]
|
|
111
|
+
border_bottom(**opts[:border_bottom]) if opts.key?(:border_bottom) && opts[:border_bottom]
|
|
112
|
+
end
|
|
46
113
|
|
|
47
114
|
number_format(opts[:number_format]) if opts.key?(:number_format)
|
|
48
115
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
116
|
+
if opts.key?(:alignment)
|
|
117
|
+
align_opts = opts[:alignment] || {}
|
|
118
|
+
align_horizontal(align_opts[:horizontal]) if align_opts.key?(:horizontal)
|
|
119
|
+
align_vertical(align_opts[:vertical]) if align_opts.key?(:vertical)
|
|
120
|
+
wrap_text(align_opts[:wrap_text]) if align_opts.key?(:wrap_text)
|
|
121
|
+
text_rotation(align_opts[:text_rotation]) if align_opts.key?(:text_rotation)
|
|
122
|
+
indent(align_opts[:indent]) if align_opts.key?(:indent)
|
|
123
|
+
shrink_to_fit(align_opts[:shrink_to_fit]) if align_opts.key?(:shrink_to_fit)
|
|
124
|
+
else
|
|
125
|
+
align_horizontal(opts[:align_horizontal]) if opts.key?(:align_horizontal)
|
|
126
|
+
align_vertical(opts[:align_vertical]) if opts.key?(:align_vertical)
|
|
127
|
+
wrap_text(opts[:wrap_text]) if opts.key?(:wrap_text)
|
|
128
|
+
text_rotation(opts[:text_rotation]) if opts.key?(:text_rotation)
|
|
129
|
+
indent(opts[:indent]) if opts.key?(:indent)
|
|
130
|
+
shrink_to_fit(opts[:shrink_to_fit]) if opts.key?(:shrink_to_fit)
|
|
131
|
+
end
|
|
55
132
|
|
|
56
133
|
self
|
|
57
134
|
end
|
|
58
135
|
|
|
59
136
|
# --- Font Properties ---
|
|
60
137
|
|
|
138
|
+
# Configures multiple font properties at once.
|
|
139
|
+
# @param opts [Hash] The font properties.
|
|
140
|
+
# @return [self]
|
|
141
|
+
# @api public
|
|
142
|
+
#: (**untyped) -> self
|
|
143
|
+
def font(**opts)
|
|
144
|
+
bold(opts[:bold]) if opts.key?(:bold)
|
|
145
|
+
italic(opts[:italic]) if opts.key?(:italic)
|
|
146
|
+
size(opts[:size]) if opts.key?(:size)
|
|
147
|
+
font_name(opts[:name]) if opts.key?(:name)
|
|
148
|
+
font_color(opts[:color]) if opts.key?(:color)
|
|
149
|
+
underline(opts[:underline]) if opts.key?(:underline)
|
|
150
|
+
strike(opts[:strike]) if opts.key?(:strike)
|
|
151
|
+
vert_align(opts[:vert_align]) if opts.key?(:vert_align)
|
|
152
|
+
self
|
|
153
|
+
end
|
|
154
|
+
|
|
61
155
|
# rubocop:disable Style/OptionalBooleanParameter
|
|
156
|
+
# Sets the font to bold.
|
|
157
|
+
# @param value [Boolean] Whether to apply bold.
|
|
158
|
+
# @return [self]
|
|
159
|
+
# @api public
|
|
160
|
+
#: (?bool) -> self
|
|
62
161
|
def bold(value = true)
|
|
63
162
|
@font_props[:bold] = value
|
|
64
163
|
self
|
|
65
164
|
end
|
|
66
165
|
|
|
166
|
+
# Sets the font to italic.
|
|
167
|
+
# @param value [Boolean] Whether to apply italic.
|
|
168
|
+
# @return [self]
|
|
169
|
+
# @api public
|
|
170
|
+
#: (?bool) -> self
|
|
67
171
|
def italic(value = true)
|
|
68
172
|
@font_props[:italic] = value
|
|
69
173
|
self
|
|
70
174
|
end
|
|
71
175
|
|
|
176
|
+
# Sets the font size.
|
|
177
|
+
# @param size_value [Numeric] The size.
|
|
178
|
+
# @return [self]
|
|
179
|
+
# @api public
|
|
180
|
+
#: (Numeric) -> self
|
|
72
181
|
def size(size_value)
|
|
73
182
|
@font_props[:sz] = size_value.to_i
|
|
74
183
|
self
|
|
75
184
|
end
|
|
76
185
|
|
|
186
|
+
# Sets the font name.
|
|
187
|
+
# @param name [String] The font name.
|
|
188
|
+
# @return [self]
|
|
189
|
+
# @api public
|
|
190
|
+
#: (String) -> self
|
|
77
191
|
def font_name(name)
|
|
78
192
|
@font_props[:name] = name
|
|
79
193
|
self
|
|
80
194
|
end
|
|
81
195
|
|
|
196
|
+
# Sets the font color.
|
|
197
|
+
# @param color [String, Symbol] The color.
|
|
198
|
+
# @return [self]
|
|
199
|
+
# @api public
|
|
200
|
+
#: (String | Symbol) -> self
|
|
82
201
|
def font_color(color)
|
|
83
|
-
@font_props[:color] = color
|
|
202
|
+
@font_props[:color] = resolve_color(color)
|
|
84
203
|
self
|
|
85
204
|
end
|
|
86
205
|
|
|
206
|
+
# Sets the font underline style.
|
|
207
|
+
# @param val [String] The underline style (e.g., 'single').
|
|
208
|
+
# @return [self]
|
|
209
|
+
# @api public
|
|
210
|
+
#: (?String) -> self
|
|
87
211
|
def underline(val = "single")
|
|
88
212
|
@font_props[:underline] = val
|
|
89
213
|
self
|
|
90
214
|
end
|
|
91
215
|
|
|
216
|
+
# Sets the font strikethrough.
|
|
217
|
+
# @param value [Boolean] Whether to apply strike.
|
|
218
|
+
# @return [self]
|
|
219
|
+
# @api public
|
|
220
|
+
#: (?bool) -> self
|
|
92
221
|
def strike(value = true)
|
|
93
222
|
@font_props[:strike] = value
|
|
94
223
|
self
|
|
95
224
|
end
|
|
96
225
|
|
|
226
|
+
# Sets the vertical alignment of the font.
|
|
227
|
+
# @param value [String] The alignment value.
|
|
228
|
+
# @return [self]
|
|
229
|
+
# @api public
|
|
230
|
+
#: (String) -> self
|
|
97
231
|
def vert_align(value)
|
|
98
232
|
@font_props[:vert_align] = value
|
|
99
233
|
self
|
|
@@ -102,6 +236,19 @@ module Xlsxrb
|
|
|
102
236
|
|
|
103
237
|
# --- Fill Properties ---
|
|
104
238
|
|
|
239
|
+
# Sets the fill pattern.
|
|
240
|
+
# @param pattern [String, Symbol] The pattern type.
|
|
241
|
+
# @param fg_color [String, Symbol, nil] The foreground color.
|
|
242
|
+
# @param bg_color [String, Symbol, nil] The background color.
|
|
243
|
+
# @return [self]
|
|
244
|
+
# @api public
|
|
245
|
+
# Configures fill properties.
|
|
246
|
+
# @param pattern [String, Symbol] The pattern type.
|
|
247
|
+
# @param fg_color [String, Symbol, nil] The foreground color.
|
|
248
|
+
# @param bg_color [String, Symbol, nil] The background color.
|
|
249
|
+
# @return [self]
|
|
250
|
+
# @api public
|
|
251
|
+
#: (String | Symbol pattern, ?fg_color: String | Symbol | nil, ?bg_color: String | Symbol | nil) -> self
|
|
105
252
|
def fill_pattern(pattern, fg_color: nil, bg_color: nil)
|
|
106
253
|
@fill_props[:pattern] = pattern
|
|
107
254
|
@fill_props[:fg_color] = fg_color if fg_color
|
|
@@ -109,16 +256,29 @@ module Xlsxrb
|
|
|
109
256
|
self
|
|
110
257
|
end
|
|
111
258
|
|
|
259
|
+
# Sets a solid fill color.
|
|
260
|
+
# @param color [String, Symbol] The color.
|
|
261
|
+
# @return [self]
|
|
262
|
+
# @api public
|
|
263
|
+
#: (String | Symbol) -> self
|
|
112
264
|
def fill_color(color)
|
|
113
265
|
@fill_props[:pattern] = "solid"
|
|
114
|
-
@fill_props[:fg_color] = color
|
|
266
|
+
@fill_props[:fg_color] = resolve_color(color)
|
|
115
267
|
self
|
|
116
268
|
end
|
|
117
269
|
|
|
270
|
+
#: (?pattern: String | Symbol, ?fg_color: String | Symbol | nil, ?bg_color: String | Symbol | nil) -> self
|
|
118
271
|
def fill(pattern: "solid", fg_color: nil, bg_color: nil)
|
|
119
|
-
fill_pattern(pattern, fg_color: fg_color, bg_color: bg_color)
|
|
272
|
+
fill_pattern(pattern, fg_color: resolve_color(fg_color), bg_color: resolve_color(bg_color))
|
|
120
273
|
end
|
|
121
274
|
|
|
275
|
+
# Sets a gradient fill.
|
|
276
|
+
# @param type [String] The gradient type.
|
|
277
|
+
# @param degree [Numeric, nil] The degree.
|
|
278
|
+
# @param stops [Array] The gradient stops.
|
|
279
|
+
# @return [self]
|
|
280
|
+
# @api public
|
|
281
|
+
#: (type: String, ?degree: Numeric | nil, ?stops: Array[untyped]) -> self
|
|
122
282
|
def fill_gradient(type:, degree: nil, stops: [])
|
|
123
283
|
@fill_props[:gradient] = {
|
|
124
284
|
type: type,
|
|
@@ -130,8 +290,28 @@ module Xlsxrb
|
|
|
130
290
|
|
|
131
291
|
# --- Border Properties ---
|
|
132
292
|
|
|
293
|
+
# Configures multiple border properties.
|
|
294
|
+
# @param opts [Hash] Border options.
|
|
295
|
+
# @return [self]
|
|
296
|
+
# @api public
|
|
297
|
+
#: (**untyped) -> self
|
|
298
|
+
def border(**opts)
|
|
299
|
+
border_all(**opts[:all]) if opts.key?(:all) && opts[:all]
|
|
300
|
+
border_left(**opts[:left]) if opts.key?(:left) && opts[:left]
|
|
301
|
+
border_right(**opts[:right]) if opts.key?(:right) && opts[:right]
|
|
302
|
+
border_top(**opts[:top]) if opts.key?(:top) && opts[:top]
|
|
303
|
+
border_bottom(**opts[:bottom]) if opts.key?(:bottom) && opts[:bottom]
|
|
304
|
+
self
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
# Sets all borders.
|
|
308
|
+
# @param style [String, Symbol] The border style.
|
|
309
|
+
# @param color [String, Symbol, nil] The color.
|
|
310
|
+
# @return [self]
|
|
311
|
+
# @api public
|
|
312
|
+
#: (?style: String | Symbol, ?color: String | Symbol | nil) -> self
|
|
133
313
|
def border_all(style: "thin", color: nil)
|
|
134
|
-
color_opt = color ? { color: color } : {}
|
|
314
|
+
color_opt = color ? { color: resolve_color(color) } : {}
|
|
135
315
|
@border_props[:left] = { style: style, **color_opt }
|
|
136
316
|
@border_props[:right] = { style: style, **color_opt }
|
|
137
317
|
@border_props[:top] = { style: style, **color_opt }
|
|
@@ -139,29 +319,61 @@ module Xlsxrb
|
|
|
139
319
|
self
|
|
140
320
|
end
|
|
141
321
|
|
|
322
|
+
# Sets the left border.
|
|
323
|
+
# @param style [String, Symbol] The border style.
|
|
324
|
+
# @param color [String, Symbol, nil] The color.
|
|
325
|
+
# @return [self]
|
|
326
|
+
# @api public
|
|
327
|
+
#: (?style: String | Symbol, ?color: String | Symbol | nil) -> self
|
|
142
328
|
def border_left(style: "thin", color: nil)
|
|
143
|
-
@border_props[:left] = { style: style, color: color }.compact
|
|
329
|
+
@border_props[:left] = { style: style, color: resolve_color(color) }.compact
|
|
144
330
|
self
|
|
145
331
|
end
|
|
146
332
|
|
|
333
|
+
# Sets the right border.
|
|
334
|
+
# @param style [String, Symbol] The border style.
|
|
335
|
+
# @param color [String, Symbol, nil] The color.
|
|
336
|
+
# @return [self]
|
|
337
|
+
# @api public
|
|
338
|
+
#: (?style: String | Symbol, ?color: String | Symbol | nil) -> self
|
|
147
339
|
def border_right(style: "thin", color: nil)
|
|
148
|
-
@border_props[:right] = { style: style, color: color }.compact
|
|
340
|
+
@border_props[:right] = { style: style, color: resolve_color(color) }.compact
|
|
149
341
|
self
|
|
150
342
|
end
|
|
151
343
|
|
|
344
|
+
# Sets the top border.
|
|
345
|
+
# @param style [String, Symbol] The border style.
|
|
346
|
+
# @param color [String, Symbol, nil] The color.
|
|
347
|
+
# @return [self]
|
|
348
|
+
# @api public
|
|
349
|
+
#: (?style: String | Symbol, ?color: String | Symbol | nil) -> self
|
|
152
350
|
def border_top(style: "thin", color: nil)
|
|
153
|
-
@border_props[:top] = { style: style, color: color }.compact
|
|
351
|
+
@border_props[:top] = { style: style, color: resolve_color(color) }.compact
|
|
154
352
|
self
|
|
155
353
|
end
|
|
156
354
|
|
|
355
|
+
# Sets the bottom border.
|
|
356
|
+
# @param style [String, Symbol] The border style.
|
|
357
|
+
# @param color [String, Symbol, nil] The color.
|
|
358
|
+
# @return [self]
|
|
359
|
+
# @api public
|
|
360
|
+
#: (?style: String | Symbol, ?color: String | Symbol | nil) -> self
|
|
157
361
|
def border_bottom(style: "thin", color: nil)
|
|
158
|
-
@border_props[:bottom] = { style: style, color: color }.compact
|
|
362
|
+
@border_props[:bottom] = { style: style, color: resolve_color(color) }.compact
|
|
159
363
|
self
|
|
160
364
|
end
|
|
161
365
|
|
|
162
366
|
# rubocop:disable Naming/MethodParameterName
|
|
367
|
+
# Sets diagonal borders.
|
|
368
|
+
# @param style [String, Symbol] The border style.
|
|
369
|
+
# @param color [String, Symbol, nil] The color.
|
|
370
|
+
# @param up [Boolean] Diagonal up.
|
|
371
|
+
# @param down [Boolean] Diagonal down.
|
|
372
|
+
# @return [self]
|
|
373
|
+
# @api public
|
|
374
|
+
#: (?style: String | Symbol, ?color: String | Symbol | nil, ?up: bool, ?down: bool) -> self
|
|
163
375
|
def border_diagonal(style: "thin", color: nil, up: false, down: false)
|
|
164
|
-
@border_props[:diagonal] = { style: style, color: color }.compact
|
|
376
|
+
@border_props[:diagonal] = { style: style, color: resolve_color(color) }.compact
|
|
165
377
|
@border_props[:diagonal_up] = true if up
|
|
166
378
|
@border_props[:diagonal_down] = true if down
|
|
167
379
|
self
|
|
@@ -170,33 +382,63 @@ module Xlsxrb
|
|
|
170
382
|
|
|
171
383
|
# --- Alignment Properties ---
|
|
172
384
|
|
|
385
|
+
# Sets horizontal alignment.
|
|
386
|
+
# @param value [String, Symbol] The alignment.
|
|
387
|
+
# @return [self]
|
|
388
|
+
# @api public
|
|
389
|
+
#: (String | Symbol) -> self
|
|
173
390
|
def align_horizontal(value)
|
|
174
391
|
@alignment[:horizontal] = value
|
|
175
392
|
self
|
|
176
393
|
end
|
|
177
394
|
|
|
395
|
+
# Sets vertical alignment.
|
|
396
|
+
# @param value [String, Symbol] The alignment.
|
|
397
|
+
# @return [self]
|
|
398
|
+
# @api public
|
|
399
|
+
#: (String | Symbol) -> self
|
|
178
400
|
def align_vertical(value)
|
|
179
401
|
@alignment[:vertical] = value
|
|
180
402
|
self
|
|
181
403
|
end
|
|
182
404
|
|
|
183
405
|
# rubocop:disable Style/OptionalBooleanParameter
|
|
406
|
+
# Sets text wrapping.
|
|
407
|
+
# @param value [Boolean] Whether to wrap text.
|
|
408
|
+
# @return [self]
|
|
409
|
+
# @api public
|
|
410
|
+
#: (?bool) -> self
|
|
184
411
|
def wrap_text(value = true)
|
|
185
412
|
@alignment[:wrap_text] = value
|
|
186
413
|
self
|
|
187
414
|
end
|
|
188
415
|
|
|
416
|
+
# Sets shrink to fit.
|
|
417
|
+
# @param value [Boolean] Whether to shrink text.
|
|
418
|
+
# @return [self]
|
|
419
|
+
# @api public
|
|
420
|
+
#: (?bool) -> self
|
|
189
421
|
def shrink_to_fit(value = true)
|
|
190
422
|
@alignment[:shrink_to_fit] = value
|
|
191
423
|
self
|
|
192
424
|
end
|
|
193
425
|
# rubocop:enable Style/OptionalBooleanParameter
|
|
194
426
|
|
|
427
|
+
# Sets text rotation.
|
|
428
|
+
# @param value [Numeric] The rotation angle.
|
|
429
|
+
# @return [self]
|
|
430
|
+
# @api public
|
|
431
|
+
#: (Numeric) -> self
|
|
195
432
|
def text_rotation(value)
|
|
196
433
|
@alignment[:text_rotation] = value
|
|
197
434
|
self
|
|
198
435
|
end
|
|
199
436
|
|
|
437
|
+
# Sets text indent.
|
|
438
|
+
# @param value [Numeric] The indent level.
|
|
439
|
+
# @return [self]
|
|
440
|
+
# @api public
|
|
441
|
+
#: (Numeric) -> self
|
|
200
442
|
def indent(value)
|
|
201
443
|
@alignment[:indent] = value.to_i
|
|
202
444
|
self
|
|
@@ -204,6 +446,11 @@ module Xlsxrb
|
|
|
204
446
|
|
|
205
447
|
# --- Number Format ---
|
|
206
448
|
|
|
449
|
+
# Sets the number format.
|
|
450
|
+
# @param num_fmt_id [String, Integer] The format id or format string.
|
|
451
|
+
# @return [self]
|
|
452
|
+
# @api public
|
|
453
|
+
#: (String | Integer) -> self
|
|
207
454
|
def number_format(num_fmt_id)
|
|
208
455
|
@num_fmt_id = num_fmt_id
|
|
209
456
|
self
|
|
@@ -212,6 +459,7 @@ module Xlsxrb
|
|
|
212
459
|
|
|
213
460
|
# Register this style with the given Writer, returning the style_id.
|
|
214
461
|
# writer:: Xlsxrb::Ooxml::Writer instance
|
|
462
|
+
#: (untyped writer) -> Integer
|
|
215
463
|
def register_with(writer)
|
|
216
464
|
font_id = 0
|
|
217
465
|
fill_id = 0
|