squib 0.14.2 → 0.14.3.pre1

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 (163) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +41 -41
  3. data/.travis.yml +19 -19
  4. data/CHANGELOG.md +366 -357
  5. data/CONTRIBUTING.md +40 -40
  6. data/Gemfile +2 -2
  7. data/LICENSE.txt +22 -22
  8. data/README.md +121 -121
  9. data/RELEASE TODO.md +21 -21
  10. data/Rakefile +48 -48
  11. data/appveyor.yml +24 -24
  12. data/bin/squib +4 -4
  13. data/lib/squib.rb +32 -32
  14. data/lib/squib/api/background.rb +15 -15
  15. data/lib/squib/api/data.rb +137 -137
  16. data/lib/squib/api/groups.rb +54 -54
  17. data/lib/squib/api/image.rb +49 -49
  18. data/lib/squib/api/save.rb +83 -83
  19. data/lib/squib/api/settings.rb +21 -21
  20. data/lib/squib/api/shapes.rb +124 -124
  21. data/lib/squib/api/text.rb +25 -25
  22. data/lib/squib/api/text_embed.rb +71 -71
  23. data/lib/squib/api/units.rb +27 -27
  24. data/lib/squib/args/arg_loader.rb +126 -126
  25. data/lib/squib/args/box.rb +55 -55
  26. data/lib/squib/args/card_range.rb +32 -32
  27. data/lib/squib/args/color_validator.rb +12 -12
  28. data/lib/squib/args/coords.rb +35 -35
  29. data/lib/squib/args/csv_opts.rb +25 -25
  30. data/lib/squib/args/dir_validator.rb +16 -16
  31. data/lib/squib/args/draw.rb +92 -92
  32. data/lib/squib/args/embed_adjust.rb +25 -25
  33. data/lib/squib/args/embed_key.rb +17 -17
  34. data/lib/squib/args/hand_special.rb +37 -37
  35. data/lib/squib/args/import.rb +40 -40
  36. data/lib/squib/args/input_file.rb +37 -37
  37. data/lib/squib/args/paint.rb +44 -44
  38. data/lib/squib/args/paragraph.rb +116 -116
  39. data/lib/squib/args/save_batch.rb +63 -63
  40. data/lib/squib/args/scale_box.rb +53 -53
  41. data/lib/squib/args/sheet.rb +172 -172
  42. data/lib/squib/args/showcase_special.rb +38 -38
  43. data/lib/squib/args/sprue_file.rb +44 -44
  44. data/lib/squib/args/svg_special.rb +37 -37
  45. data/lib/squib/args/transform.rb +61 -61
  46. data/lib/squib/args/typographer.rb +119 -119
  47. data/lib/squib/args/unit_conversion.rb +29 -29
  48. data/lib/squib/builtin/layouts/economy.yml +85 -85
  49. data/lib/squib/builtin/layouts/fantasy.yml +101 -101
  50. data/lib/squib/builtin/layouts/hand.yml +62 -62
  51. data/lib/squib/builtin/layouts/party.yml +94 -94
  52. data/lib/squib/builtin/layouts/playing-card.yml +35 -35
  53. data/lib/squib/builtin/layouts/tuck_box.yml +46 -46
  54. data/lib/squib/builtin/projects/advanced/.gitignore +4 -4
  55. data/lib/squib/builtin/projects/advanced/ABOUT.md +19 -19
  56. data/lib/squib/builtin/projects/advanced/Gemfile +11 -11
  57. data/lib/squib/builtin/projects/advanced/Guardfile +21 -21
  58. data/lib/squib/builtin/projects/advanced/IDEAS.md +22 -22
  59. data/lib/squib/builtin/projects/advanced/PLAYTESTING.md +26 -26
  60. data/lib/squib/builtin/projects/advanced/Rakefile +27 -27
  61. data/lib/squib/builtin/projects/advanced/config.yml +53 -49
  62. data/lib/squib/builtin/projects/advanced/docs/PNP NOTES.md +3 -3
  63. data/lib/squib/builtin/projects/advanced/docs/RULES.md +21 -21
  64. data/lib/squib/builtin/projects/advanced/img/example.svg +60 -60
  65. data/lib/squib/builtin/projects/advanced/layouts/deck.yml +27 -27
  66. data/lib/squib/builtin/projects/advanced/src/deck.rb +34 -34
  67. data/lib/squib/builtin/projects/advanced/src/version.rb +3 -3
  68. data/lib/squib/builtin/projects/basic/.gitignore +4 -4
  69. data/lib/squib/builtin/projects/basic/ABOUT.md +19 -19
  70. data/lib/squib/builtin/projects/basic/Gemfile +3 -3
  71. data/lib/squib/builtin/projects/basic/IDEAS.md +22 -22
  72. data/lib/squib/builtin/projects/basic/PLAYTESTING.md +26 -26
  73. data/lib/squib/builtin/projects/basic/PNP NOTES.md +3 -3
  74. data/lib/squib/builtin/projects/basic/RULES.md +21 -21
  75. data/lib/squib/builtin/projects/basic/Rakefile +7 -7
  76. data/lib/squib/builtin/projects/basic/config.yml +53 -49
  77. data/lib/squib/builtin/projects/basic/deck.rb +6 -6
  78. data/lib/squib/builtin/sprues/a4_euro_card.yml +42 -42
  79. data/lib/squib/builtin/sprues/a4_poker_card_8up.yml +40 -40
  80. data/lib/squib/builtin/sprues/a4_poker_card_9up.yml +42 -42
  81. data/lib/squib/builtin/sprues/a4_usa_card.yml +42 -42
  82. data/lib/squib/builtin/sprues/drivethrucards_1up.yml +10 -10
  83. data/lib/squib/builtin/sprues/letter_poker_card_9up.yml +25 -25
  84. data/lib/squib/builtin/sprues/letter_poker_foldable_8up.yml +52 -52
  85. data/lib/squib/builtin/sprues/printplaygames_18up.yml +68 -68
  86. data/lib/squib/card.rb +75 -75
  87. data/lib/squib/commands/cli.rb +39 -39
  88. data/lib/squib/commands/data/template_option.rb +109 -109
  89. data/lib/squib/commands/make_sprue.rb +275 -275
  90. data/lib/squib/commands/new.rb +77 -77
  91. data/lib/squib/conf.rb +144 -139
  92. data/lib/squib/constants.rb +17 -17
  93. data/lib/squib/deck.rb +116 -116
  94. data/lib/squib/graphics/background.rb +14 -14
  95. data/lib/squib/graphics/cairo_context_wrapper.rb +113 -113
  96. data/lib/squib/graphics/embedding_utils.rb +28 -28
  97. data/lib/squib/graphics/gradient_regex.rb +47 -47
  98. data/lib/squib/graphics/hand.rb +42 -42
  99. data/lib/squib/graphics/image.rb +129 -108
  100. data/lib/squib/graphics/save_doc.rb +61 -61
  101. data/lib/squib/graphics/save_images.rb +52 -52
  102. data/lib/squib/graphics/save_pdf.rb +90 -90
  103. data/lib/squib/graphics/save_sprue.rb +204 -204
  104. data/lib/squib/graphics/shapes.rb +143 -143
  105. data/lib/squib/graphics/showcase.rb +85 -85
  106. data/lib/squib/graphics/text.rb +174 -174
  107. data/lib/squib/import/data_frame.rb +108 -108
  108. data/lib/squib/layout_parser.rb +138 -138
  109. data/lib/squib/progress.rb +38 -38
  110. data/lib/squib/sample_helpers.rb +34 -34
  111. data/lib/squib/sprues/crop_line.rb +28 -28
  112. data/lib/squib/sprues/crop_line_dash.rb +35 -35
  113. data/lib/squib/sprues/invalid_sprue_definition.rb +9 -9
  114. data/lib/squib/sprues/sprue.rb +203 -203
  115. data/lib/squib/sprues/sprue_schema.rb +48 -48
  116. data/lib/squib/version.rb +10 -10
  117. data/samples/autoscale_font/_autoscale_font.rb +29 -29
  118. data/samples/backend/_backend.rb +26 -26
  119. data/samples/basic.rb +19 -19
  120. data/samples/bug256/_bug256.rb +13 -0
  121. data/samples/build_groups/build_groups.rb +36 -36
  122. data/samples/colors/_colors.rb +38 -38
  123. data/samples/colors/_gradients.rb +34 -34
  124. data/samples/config/config_text_markup.rb +20 -20
  125. data/samples/config/custom_config.rb +18 -18
  126. data/samples/data/_csv.rb +33 -33
  127. data/samples/data/_excel.rb +55 -55
  128. data/samples/data/_yaml.rb +12 -12
  129. data/samples/hello_world.rb +6 -6
  130. data/samples/images/_cairo_access.rb +39 -39
  131. data/samples/images/_images.rb +104 -104
  132. data/samples/images/_more_load_images.rb +102 -102
  133. data/samples/intro/01_hello.rb +8 -8
  134. data/samples/intro/02_options.rb +14 -14
  135. data/samples/intro/03_layout.rb +11 -11
  136. data/samples/intro/04_arrays.rb +15 -15
  137. data/samples/intro/05_excel.rb +14 -14
  138. data/samples/layouts/builtin_layouts.rb +97 -97
  139. data/samples/layouts/layouts.rb +71 -71
  140. data/samples/project/src/characters.rb +8 -8
  141. data/samples/project/src/skills.rb +7 -7
  142. data/samples/proofs/_tgc_proofs.rb +16 -16
  143. data/samples/ranges/_ranges.rb +64 -64
  144. data/samples/saves/_hand.rb +23 -23
  145. data/samples/saves/_portrait_landscape.rb +23 -23
  146. data/samples/saves/_save_pdf.rb +29 -29
  147. data/samples/saves/_saves.rb +51 -51
  148. data/samples/saves/_showcase.rb +25 -25
  149. data/samples/shapes/_draw_shapes.rb +60 -60
  150. data/samples/shapes/_proofs.rb +22 -22
  151. data/samples/sprues/_advanced_sprues.rb +24 -24
  152. data/samples/sprues/_builtin_sprues.rb +21 -21
  153. data/samples/sprues/_fold_sheet.rb +27 -27
  154. data/samples/sprues/_hex_tiles.rb +15 -15
  155. data/samples/sprues/_mints.rb +11 -11
  156. data/samples/sprues/_sprue_example.rb +11 -11
  157. data/samples/text/_embed_text.rb +128 -128
  158. data/samples/text/_text.rb +47 -47
  159. data/samples/text/_text_options.rb +102 -102
  160. data/samples/text/bug134.rb +14 -14
  161. data/samples/units/_units.rb +32 -32
  162. data/squib.gemspec +52 -52
  163. metadata +51 -48
@@ -1,25 +1,25 @@
1
- require_relative 'arg_loader'
2
-
3
- module Squib
4
- # @api private
5
- module Args
6
-
7
- class EmbedAdjust
8
- include ArgLoader
9
-
10
- def self.parameters
11
- { dx: 0, dy: 0 }
12
- end
13
-
14
- def self.expanding_parameters
15
- parameters.keys # all of them
16
- end
17
-
18
- def self.params_with_units
19
- parameters.keys # all of them
20
- end
21
-
22
- end
23
-
24
- end
25
- end
1
+ require_relative 'arg_loader'
2
+
3
+ module Squib
4
+ # @api private
5
+ module Args
6
+
7
+ class EmbedAdjust
8
+ include ArgLoader
9
+
10
+ def self.parameters
11
+ { dx: 0, dy: 0 }
12
+ end
13
+
14
+ def self.expanding_parameters
15
+ parameters.keys # all of them
16
+ end
17
+
18
+ def self.params_with_units
19
+ parameters.keys # all of them
20
+ end
21
+
22
+ end
23
+
24
+ end
25
+ end
@@ -1,17 +1,17 @@
1
- require_relative 'arg_loader'
2
-
3
- module Squib
4
- # @api private
5
- module Args
6
-
7
- class EmbedKey
8
-
9
- # Validate the embed lookup key
10
- def validate_key(str)
11
- str.to_s
12
- end
13
-
14
- end
15
-
16
- end
17
- end
1
+ require_relative 'arg_loader'
2
+
3
+ module Squib
4
+ # @api private
5
+ module Args
6
+
7
+ class EmbedKey
8
+
9
+ # Validate the embed lookup key
10
+ def validate_key(str)
11
+ str.to_s
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+ end
@@ -1,37 +1,37 @@
1
- require 'cairo'
2
-
3
- module Squib
4
- # @api private
5
- module Args
6
-
7
- class HandSpecial
8
- include ArgLoader
9
-
10
- def initialize(card_height)
11
- @card_height = card_height
12
- end
13
-
14
- def self.parameters
15
- {
16
- angle_range: (Math::PI / -4.0)..(Math::PI / 4),
17
- radius: :auto
18
- }
19
- end
20
-
21
- def self.expanding_parameters
22
- [] # none of them
23
- end
24
-
25
- def self.params_with_units
26
- [ :radius ]
27
- end
28
-
29
- def validate_radius(arg)
30
- return 0.3 * @card_height if arg.to_s.downcase.strip == 'auto'
31
- arg
32
- end
33
-
34
- end
35
-
36
- end
37
- end
1
+ require 'cairo'
2
+
3
+ module Squib
4
+ # @api private
5
+ module Args
6
+
7
+ class HandSpecial
8
+ include ArgLoader
9
+
10
+ def initialize(card_height)
11
+ @card_height = card_height
12
+ end
13
+
14
+ def self.parameters
15
+ {
16
+ angle_range: (Math::PI / -4.0)..(Math::PI / 4),
17
+ radius: :auto
18
+ }
19
+ end
20
+
21
+ def self.expanding_parameters
22
+ [] # none of them
23
+ end
24
+
25
+ def self.params_with_units
26
+ [ :radius ]
27
+ end
28
+
29
+ def validate_radius(arg)
30
+ return 0.3 * @card_height if arg.to_s.downcase.strip == 'auto'
31
+ arg
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+ end
@@ -1,40 +1,40 @@
1
- require_relative 'arg_loader'
2
-
3
- module Squib
4
- # @api private
5
- module Args
6
-
7
- class Import
8
- include ArgLoader
9
-
10
- def self.parameters
11
- { strip: true,
12
- explode: 'Qty'
13
- }
14
- end
15
-
16
- def self.expanding_parameters
17
- [] # none of them
18
- end
19
-
20
- def self.params_with_units
21
- [] # none of them
22
- end
23
-
24
- def validate_strip(arg)
25
- raise 'Strip must be true or false' unless arg == true || arg == false
26
- arg
27
- end
28
-
29
- def validate_explode(arg)
30
- arg
31
- end
32
-
33
- def strip?
34
- strip
35
- end
36
-
37
- end
38
-
39
- end
40
- end
1
+ require_relative 'arg_loader'
2
+
3
+ module Squib
4
+ # @api private
5
+ module Args
6
+
7
+ class Import
8
+ include ArgLoader
9
+
10
+ def self.parameters
11
+ { strip: true,
12
+ explode: 'Qty'
13
+ }
14
+ end
15
+
16
+ def self.expanding_parameters
17
+ [] # none of them
18
+ end
19
+
20
+ def self.params_with_units
21
+ [] # none of them
22
+ end
23
+
24
+ def validate_strip(arg)
25
+ raise 'Strip must be true or false' unless arg == true || arg == false
26
+ arg
27
+ end
28
+
29
+ def validate_explode(arg)
30
+ arg
31
+ end
32
+
33
+ def strip?
34
+ strip
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+ end
@@ -1,37 +1,37 @@
1
- require_relative 'arg_loader'
2
-
3
- module Squib
4
- # @api private
5
- module Args
6
-
7
- class InputFile
8
- include ArgLoader
9
-
10
- def initialize(dsl_method_default = {})
11
- @dsl_method_default = dsl_method_default
12
- end
13
-
14
- def self.parameters
15
- { file: nil,
16
- sheet: 0,
17
- }
18
- end
19
-
20
- def self.expanding_parameters
21
- parameters.keys # all of them
22
- end
23
-
24
- def self.params_with_units
25
- [] # none of them
26
- end
27
-
28
- def validate_file(arg, _i)
29
- return nil if arg.nil?
30
- raise "File #{File.expand_path(arg)} does not exist!" unless File.exists?(arg)
31
- File.expand_path(arg)
32
- end
33
-
34
- end
35
-
36
- end
37
- end
1
+ require_relative 'arg_loader'
2
+
3
+ module Squib
4
+ # @api private
5
+ module Args
6
+
7
+ class InputFile
8
+ include ArgLoader
9
+
10
+ def initialize(dsl_method_default = {})
11
+ @dsl_method_default = dsl_method_default
12
+ end
13
+
14
+ def self.parameters
15
+ { file: nil,
16
+ sheet: 0,
17
+ }
18
+ end
19
+
20
+ def self.expanding_parameters
21
+ parameters.keys # all of them
22
+ end
23
+
24
+ def self.params_with_units
25
+ [] # none of them
26
+ end
27
+
28
+ def validate_file(arg, _i)
29
+ return nil if arg.nil?
30
+ raise "File #{File.expand_path(arg)} does not exist!" unless File.exists?(arg)
31
+ File.expand_path(arg)
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+ end
@@ -1,44 +1,44 @@
1
- require 'cairo'
2
- require_relative 'arg_loader'
3
- require_relative 'color_validator'
4
-
5
- module Squib
6
- # @api private
7
- module Args
8
- class Paint
9
- include ArgLoader
10
- include ColorValidator
11
-
12
- def self.parameters
13
- { alpha: 1.0,
14
- blend: :none,
15
- mask: nil,
16
- }
17
- end
18
-
19
-
20
- def self.expanding_parameters
21
- parameters.keys # all of them are expandable
22
- end
23
-
24
- def self.params_with_units
25
- []
26
- end
27
-
28
- def initialize(custom_colors)
29
- @custom_colors = custom_colors
30
- end
31
-
32
- def validate_alpha(arg, _i)
33
- raise 'alpha must respond to to_f' unless arg.respond_to? :to_f
34
- arg.to_f
35
- end
36
-
37
- def validate_mask(arg, _i)
38
- colorify(arg, @custom_colors)
39
- end
40
-
41
-
42
- end
43
- end
44
- end
1
+ require 'cairo'
2
+ require_relative 'arg_loader'
3
+ require_relative 'color_validator'
4
+
5
+ module Squib
6
+ # @api private
7
+ module Args
8
+ class Paint
9
+ include ArgLoader
10
+ include ColorValidator
11
+
12
+ def self.parameters
13
+ { alpha: 1.0,
14
+ blend: :none,
15
+ mask: nil,
16
+ }
17
+ end
18
+
19
+
20
+ def self.expanding_parameters
21
+ parameters.keys # all of them are expandable
22
+ end
23
+
24
+ def self.params_with_units
25
+ []
26
+ end
27
+
28
+ def initialize(custom_colors)
29
+ @custom_colors = custom_colors
30
+ end
31
+
32
+ def validate_alpha(arg, _i)
33
+ raise 'alpha must respond to to_f' unless arg.respond_to? :to_f
34
+ arg.to_f
35
+ end
36
+
37
+ def validate_mask(arg, _i)
38
+ colorify(arg, @custom_colors)
39
+ end
40
+
41
+
42
+ end
43
+ end
44
+ end
@@ -1,116 +1,116 @@
1
- require_relative '../constants'
2
- require_relative 'arg_loader'
3
-
4
- module Squib
5
- # @api private
6
- module Args
7
-
8
- class Paragraph
9
- include ArgLoader
10
-
11
-
12
- def self.parameters
13
- { align: :left,
14
- str: 'Hello, World!',
15
- font: :use_set,
16
- font_size: nil,
17
- markup: false,
18
- justify: false,
19
- wrap: true,
20
- ellipsize: :end,
21
- spacing: nil,
22
- valign: :top,
23
- hint: :off
24
- }
25
- end
26
-
27
- def self.expanding_parameters
28
- parameters.keys # all of them
29
- end
30
-
31
- def self.params_with_units
32
- [] # none of them
33
- end
34
-
35
- def initialize(deck_font)
36
- @deck_font = deck_font
37
- end
38
-
39
- def validate_str(arg, _i)
40
- arg.to_s
41
- end
42
-
43
- def validate_font(arg, _i)
44
- arg = @deck_font if arg == :use_set
45
- arg = DEFAULT_FONT if arg == :default
46
- arg
47
- end
48
-
49
- def validate_align(arg, _i)
50
- case arg.to_s.downcase.strip
51
- when 'left'
52
- Pango::Alignment::LEFT
53
- when 'right'
54
- Pango::Alignment::RIGHT
55
- when 'center'
56
- Pango::Alignment::CENTER
57
- else
58
- raise ArgumentError, 'align must be one of: center, left, right'
59
- end
60
- end
61
-
62
- def validate_wrap(arg, _i)
63
- case arg.to_s.downcase.strip
64
- when 'word'
65
- Pango::WrapMode::WORD
66
- when 'char', 'false'
67
- Pango::WrapMode::CHAR
68
- when 'word_char', 'true'
69
- Pango::WrapMode::WORD_CHAR
70
- else
71
- raise ArgumentError, 'wrap must be one of: word, char, word_char, true, or false'
72
- end
73
- end
74
-
75
- def validate_ellipsize(arg, _i)
76
- case arg.to_s.downcase.strip
77
- when 'none', 'false'
78
- Pango::EllipsizeMode::NONE
79
- when 'start'
80
- Pango::EllipsizeMode::START
81
- when 'middle'
82
- Pango::EllipsizeMode::MIDDLE
83
- when 'end', 'true'
84
- Pango::EllipsizeMode::END
85
- else
86
- raise ArgumentError, 'ellipsize must be one of: none, start, middle, end, true, or false'
87
- end
88
- end
89
-
90
- def validate_justify(arg, _i)
91
- case arg
92
- when nil, true, false
93
- arg
94
- else
95
- raise ArgumentError, 'justify must be one of: nil, true, or false'
96
- end
97
- end
98
-
99
- def validate_spacing(arg, _i)
100
- return nil if arg.nil?
101
- raise ArgumentError, 'spacing must be a number or nil' unless arg.respond_to? :to_f
102
- arg.to_f * Pango::SCALE
103
- end
104
-
105
- def validate_valign(arg, _i)
106
- if %w(top middle bottom).include? arg.to_s.downcase
107
- arg.to_s.downcase
108
- else
109
- raise ArgumentError, 'valign must be one of: top, middle, bottom'
110
- end
111
- end
112
-
113
- end
114
-
115
- end
116
- end
1
+ require_relative '../constants'
2
+ require_relative 'arg_loader'
3
+
4
+ module Squib
5
+ # @api private
6
+ module Args
7
+
8
+ class Paragraph
9
+ include ArgLoader
10
+
11
+
12
+ def self.parameters
13
+ { align: :left,
14
+ str: 'Hello, World!',
15
+ font: :use_set,
16
+ font_size: nil,
17
+ markup: false,
18
+ justify: false,
19
+ wrap: true,
20
+ ellipsize: :end,
21
+ spacing: nil,
22
+ valign: :top,
23
+ hint: :off
24
+ }
25
+ end
26
+
27
+ def self.expanding_parameters
28
+ parameters.keys # all of them
29
+ end
30
+
31
+ def self.params_with_units
32
+ [] # none of them
33
+ end
34
+
35
+ def initialize(deck_font)
36
+ @deck_font = deck_font
37
+ end
38
+
39
+ def validate_str(arg, _i)
40
+ arg.to_s
41
+ end
42
+
43
+ def validate_font(arg, _i)
44
+ arg = @deck_font if arg == :use_set
45
+ arg = DEFAULT_FONT if arg == :default
46
+ arg
47
+ end
48
+
49
+ def validate_align(arg, _i)
50
+ case arg.to_s.downcase.strip
51
+ when 'left'
52
+ Pango::Alignment::LEFT
53
+ when 'right'
54
+ Pango::Alignment::RIGHT
55
+ when 'center'
56
+ Pango::Alignment::CENTER
57
+ else
58
+ raise ArgumentError, 'align must be one of: center, left, right'
59
+ end
60
+ end
61
+
62
+ def validate_wrap(arg, _i)
63
+ case arg.to_s.downcase.strip
64
+ when 'word'
65
+ Pango::WrapMode::WORD
66
+ when 'char', 'false'
67
+ Pango::WrapMode::CHAR
68
+ when 'word_char', 'true'
69
+ Pango::WrapMode::WORD_CHAR
70
+ else
71
+ raise ArgumentError, 'wrap must be one of: word, char, word_char, true, or false'
72
+ end
73
+ end
74
+
75
+ def validate_ellipsize(arg, _i)
76
+ case arg.to_s.downcase.strip
77
+ when 'none', 'false'
78
+ Pango::EllipsizeMode::NONE
79
+ when 'start'
80
+ Pango::EllipsizeMode::START
81
+ when 'middle'
82
+ Pango::EllipsizeMode::MIDDLE
83
+ when 'end', 'true'
84
+ Pango::EllipsizeMode::END
85
+ else
86
+ raise ArgumentError, 'ellipsize must be one of: none, start, middle, end, true, or false'
87
+ end
88
+ end
89
+
90
+ def validate_justify(arg, _i)
91
+ case arg
92
+ when nil, true, false
93
+ arg
94
+ else
95
+ raise ArgumentError, 'justify must be one of: nil, true, or false'
96
+ end
97
+ end
98
+
99
+ def validate_spacing(arg, _i)
100
+ return nil if arg.nil?
101
+ raise ArgumentError, 'spacing must be a number or nil' unless arg.respond_to? :to_f
102
+ arg.to_f * Pango::SCALE
103
+ end
104
+
105
+ def validate_valign(arg, _i)
106
+ if %w(top middle bottom).include? arg.to_s.downcase
107
+ arg.to_s.downcase
108
+ else
109
+ raise ArgumentError, 'valign must be one of: top, middle, bottom'
110
+ end
111
+ end
112
+
113
+ end
114
+
115
+ end
116
+ end