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,77 +1,77 @@
1
- require 'fileutils'
2
-
3
- module Squib
4
- # Squib's command-line options
5
- module Commands
6
-
7
- # Generate a new Squib project into a fresh directory.
8
- #
9
- # Provides conventions for using Git (you are using version control, right??).
10
- # Also provides some basic layout and config files to start from, along with templates for instructions and other notes you don't want to forget.
11
- #
12
- #
13
- # @example
14
- # squib new foo-blasters
15
- # cd foo-blasters
16
- # ruby deck.rb
17
- # git init
18
- # git add .
19
- # git commit -m "Starting my cool new game using Squib!"
20
- #
21
- # @api public
22
- class New
23
-
24
- # :nodoc:
25
- # @api private
26
- def process(args, advanced)
27
- raise empty_path_error if args.empty?
28
-
29
- new_project_path = File.expand_path(args.join(' '), Dir.pwd)
30
-
31
- FileUtils.mkdir_p new_project_path
32
- if !Dir["#{new_project_path}/**/*"].empty?
33
- $stderr.puts "#{new_project_path} exists and is not empty. Doing nothing and quitting."
34
- else
35
- Dir.chdir(new_project_path) do
36
- FileUtils.cp_r template_path(advanced) + '/.', new_project_path
37
- end
38
- end
39
- puts "Created basic Squib project in #{new_project_path}."
40
- puts advanced_message if advanced
41
- end
42
-
43
- def empty_path_error
44
- ArgumentError.new('Please specify a path.')
45
- end
46
-
47
- def template_path(advanced)
48
- path = case advanced
49
- when true
50
- '../builtin/projects/advanced'
51
- else
52
- '../builtin/projects/basic'
53
- end
54
- File.expand_path(path, File.dirname(__FILE__))
55
- end
56
-
57
- def advanced_message
58
- <<-EOS
59
-
60
- This is the advanced layout designed for larger games. Everything is
61
- organized into separate directories and the workflow is all based on
62
- the Rakefile.
63
-
64
- From within this directory, run `bundle install` to install extra
65
- gems.
66
-
67
- After that, run `rake` to build. Check out the Rakefile for more.
68
-
69
- Happy Squibbing! And best of luck with your game.
70
- -Andy (@andymeneely)
71
-
72
- EOS
73
- end
74
-
75
- end
76
- end
77
- end
1
+ require 'fileutils'
2
+
3
+ module Squib
4
+ # Squib's command-line options
5
+ module Commands
6
+
7
+ # Generate a new Squib project into a fresh directory.
8
+ #
9
+ # Provides conventions for using Git (you are using version control, right??).
10
+ # Also provides some basic layout and config files to start from, along with templates for instructions and other notes you don't want to forget.
11
+ #
12
+ #
13
+ # @example
14
+ # squib new foo-blasters
15
+ # cd foo-blasters
16
+ # ruby deck.rb
17
+ # git init
18
+ # git add .
19
+ # git commit -m "Starting my cool new game using Squib!"
20
+ #
21
+ # @api public
22
+ class New
23
+
24
+ # :nodoc:
25
+ # @api private
26
+ def process(args, advanced)
27
+ raise empty_path_error if args.empty?
28
+
29
+ new_project_path = File.expand_path(args.join(' '), Dir.pwd)
30
+
31
+ FileUtils.mkdir_p new_project_path
32
+ if !Dir["#{new_project_path}/**/*"].empty?
33
+ $stderr.puts "#{new_project_path} exists and is not empty. Doing nothing and quitting."
34
+ else
35
+ Dir.chdir(new_project_path) do
36
+ FileUtils.cp_r template_path(advanced) + '/.', new_project_path
37
+ end
38
+ end
39
+ puts "Created basic Squib project in #{new_project_path}."
40
+ puts advanced_message if advanced
41
+ end
42
+
43
+ def empty_path_error
44
+ ArgumentError.new('Please specify a path.')
45
+ end
46
+
47
+ def template_path(advanced)
48
+ path = case advanced
49
+ when true
50
+ '../builtin/projects/advanced'
51
+ else
52
+ '../builtin/projects/basic'
53
+ end
54
+ File.expand_path(path, File.dirname(__FILE__))
55
+ end
56
+
57
+ def advanced_message
58
+ <<-EOS
59
+
60
+ This is the advanced layout designed for larger games. Everything is
61
+ organized into separate directories and the workflow is all based on
62
+ the Rakefile.
63
+
64
+ From within this directory, run `bundle install` to install extra
65
+ gems.
66
+
67
+ After that, run `rake` to build. Check out the Rakefile for more.
68
+
69
+ Happy Squibbing! And best of luck with your game.
70
+ -Andy (@andymeneely)
71
+
72
+ EOS
73
+ end
74
+
75
+ end
76
+ end
77
+ end
@@ -1,139 +1,144 @@
1
- require 'forwardable'
2
- require 'yaml'
3
- require_relative 'args/typographer'
4
-
5
- module Squib
6
- USER_CONFIG = {}
7
-
8
- def configure(opts)
9
- str_hash = opts.inject({}) { |h, (k, v)| h[k.to_s] = v; h }
10
- USER_CONFIG.merge! str_hash
11
- end
12
- module_function :configure
13
-
14
- # @api private
15
- class Conf
16
-
17
- DEFAULTS = {
18
- 'antialias' => 'best',
19
- 'backend' => 'memory',
20
- 'count_format' => '%02d',
21
- 'custom_colors' => {},
22
- 'dir' => '_output',
23
- 'hint' => :none,
24
- 'img_dir' => '.',
25
- 'progress_bars' => false,
26
- 'prefix' => 'card_',
27
- 'ldquote' => "\u201C", # UTF8 chars
28
- 'rdquote' => "\u201D",
29
- 'lsquote' => "\u2018",
30
- 'rsquote' => "\u2019",
31
- 'em_dash' => "\u2014",
32
- 'en_dash' => "\u2013",
33
- 'ellipsis' => "\u2026",
34
- 'smart_quotes' => true,
35
- 'text_hint' => 'off',
36
- 'warn_ellipsize' => true,
37
- 'warn_png_scale' => true,
38
- }
39
-
40
- # Translate the hints to the methods.
41
- ANTIALIAS_OPTS = {
42
- nil => 'subpixel',
43
- 'best' => 'subpixel',
44
- 'good' => 'gray',
45
- 'fast' => 'gray',
46
- 'gray' => 'gray',
47
- 'subpixel' => 'subpixel'
48
- }
49
-
50
- def initialize(config_hash = DEFAULTS)
51
- @config_hash = config_hash.merge USER_CONFIG # programmatic overrides yml
52
- @typographer = Args::Typographer.new(config_hash)
53
- normalize_antialias
54
- end
55
-
56
- # Load the configuration file, if exists, overriding hardcoded defaults
57
- # @api private
58
- def self.load(file)
59
- yaml = {}
60
- if File.exists? file
61
- Squib::logger.info { " using config: #{file}" }
62
- yaml = YAML.load_file(file) || {}
63
- end
64
- warn_unrecognized(yaml)
65
- Conf.new(DEFAULTS.merge(yaml))
66
- end
67
-
68
- def to_s
69
- "Conf: #{@config_hash.to_s}"
70
- end
71
-
72
- def img_dir
73
- @config_hash['img_dir']
74
- end
75
-
76
- def text_hint
77
- @config_hash['text_hint']
78
- end
79
-
80
- def text_hint=(hint)
81
- @config_hash['text_hint'] = hint
82
- end
83
-
84
- def progress_bars
85
- @config_hash['progress_bars']
86
- end
87
-
88
- def typographer
89
- @typographer
90
- end
91
-
92
- def dir
93
- @config_hash['dir']
94
- end
95
-
96
- def prefix
97
- @config_hash['prefix']
98
- end
99
-
100
- def count_format
101
- @config_hash['count_format']
102
- end
103
-
104
- def antialias
105
- @config_hash['antialias']
106
- end
107
-
108
- def backend
109
- @config_hash['backend']
110
- end
111
-
112
- def custom_colors
113
- @config_hash['custom_colors']
114
- end
115
-
116
- def warn_ellipsize?
117
- @config_hash['warn_ellipsize']
118
- end
119
-
120
- def warn_png_scale?
121
- @config_hash['warn_png_scale']
122
- end
123
-
124
- private
125
-
126
- def normalize_antialias
127
- @config_hash['antialias'] = ANTIALIAS_OPTS[@config_hash['antialias'].downcase.strip]
128
- end
129
-
130
- # Were there any unrecognized options in the config file?
131
- def self.warn_unrecognized(yaml)
132
- unrec = yaml.keys - DEFAULTS.keys
133
- if unrec.any?
134
- Squib::logger.warn "Unrecognized configuration option(s): #{unrec.join(',')}"
135
- end
136
- end
137
-
138
- end
139
- end
1
+ require 'forwardable'
2
+ require 'yaml'
3
+ require_relative 'args/typographer'
4
+
5
+ module Squib
6
+ USER_CONFIG = {}
7
+
8
+ def configure(opts)
9
+ str_hash = opts.inject({}) { |h, (k, v)| h[k.to_s] = v; h }
10
+ USER_CONFIG.merge! str_hash
11
+ end
12
+ module_function :configure
13
+
14
+ # @api private
15
+ class Conf
16
+
17
+ DEFAULTS = {
18
+ 'antialias' => 'best',
19
+ 'backend' => 'memory',
20
+ 'count_format' => '%02d',
21
+ 'custom_colors' => {},
22
+ 'dir' => '_output',
23
+ 'hint' => :none,
24
+ 'img_dir' => '.',
25
+ 'progress_bars' => false,
26
+ 'prefix' => 'card_',
27
+ 'ldquote' => "\u201C", # UTF8 chars
28
+ 'rdquote' => "\u201D",
29
+ 'lsquote' => "\u2018",
30
+ 'rsquote' => "\u2019",
31
+ 'em_dash' => "\u2014",
32
+ 'en_dash' => "\u2013",
33
+ 'ellipsis' => "\u2026",
34
+ 'smart_quotes' => true,
35
+ 'text_hint' => 'off',
36
+ 'warn_ellipsize' => true,
37
+ 'warn_png_scale' => true,
38
+ 'warn_zero_size_image' => true,
39
+ }
40
+
41
+ # Translate the hints to the methods.
42
+ ANTIALIAS_OPTS = {
43
+ nil => 'subpixel',
44
+ 'best' => 'subpixel',
45
+ 'good' => 'gray',
46
+ 'fast' => 'gray',
47
+ 'gray' => 'gray',
48
+ 'subpixel' => 'subpixel'
49
+ }
50
+
51
+ def initialize(config_hash = DEFAULTS)
52
+ @config_hash = config_hash.merge USER_CONFIG # programmatic overrides yml
53
+ @typographer = Args::Typographer.new(config_hash)
54
+ normalize_antialias
55
+ end
56
+
57
+ # Load the configuration file, if exists, overriding hardcoded defaults
58
+ # @api private
59
+ def self.load(file)
60
+ yaml = {}
61
+ if File.exists? file
62
+ Squib::logger.info { " using config: #{file}" }
63
+ yaml = YAML.load_file(file) || {}
64
+ end
65
+ warn_unrecognized(yaml)
66
+ Conf.new(DEFAULTS.merge(yaml))
67
+ end
68
+
69
+ def to_s
70
+ "Conf: #{@config_hash.to_s}"
71
+ end
72
+
73
+ def img_dir
74
+ @config_hash['img_dir']
75
+ end
76
+
77
+ def text_hint
78
+ @config_hash['text_hint']
79
+ end
80
+
81
+ def text_hint=(hint)
82
+ @config_hash['text_hint'] = hint
83
+ end
84
+
85
+ def progress_bars
86
+ @config_hash['progress_bars']
87
+ end
88
+
89
+ def typographer
90
+ @typographer
91
+ end
92
+
93
+ def dir
94
+ @config_hash['dir']
95
+ end
96
+
97
+ def prefix
98
+ @config_hash['prefix']
99
+ end
100
+
101
+ def count_format
102
+ @config_hash['count_format']
103
+ end
104
+
105
+ def antialias
106
+ @config_hash['antialias']
107
+ end
108
+
109
+ def backend
110
+ @config_hash['backend']
111
+ end
112
+
113
+ def custom_colors
114
+ @config_hash['custom_colors']
115
+ end
116
+
117
+ def warn_ellipsize?
118
+ @config_hash['warn_ellipsize']
119
+ end
120
+
121
+ def warn_png_scale?
122
+ @config_hash['warn_png_scale']
123
+ end
124
+
125
+ def warn_zero_size_image?
126
+ @config_hash['warn_zero_size_image']
127
+ end
128
+
129
+ private
130
+
131
+ def normalize_antialias
132
+ @config_hash['antialias'] = ANTIALIAS_OPTS[@config_hash['antialias'].downcase.strip]
133
+ end
134
+
135
+ # Were there any unrecognized options in the config file?
136
+ def self.warn_unrecognized(yaml)
137
+ unrec = yaml.keys - DEFAULTS.keys
138
+ if unrec.any?
139
+ Squib::logger.warn "Unrecognized configuration option(s): #{unrec.join(',')}"
140
+ end
141
+ end
142
+
143
+ end
144
+ end
@@ -1,17 +1,17 @@
1
- module Squib
2
-
3
- # System-wide default font
4
- # :nodoc:
5
- # @api public
6
- DEFAULT_FONT = 'Arial 12'
7
-
8
- # Used for inch-cm conversion
9
- # :nodoc:
10
- # @api private
11
- INCHES_IN_CM = 0.393700787
12
-
13
- # Used for points-inch conversion
14
- # :nodoc:
15
- # @api private
16
- POINTS_PER_IN = 72.0
17
- end
1
+ module Squib
2
+
3
+ # System-wide default font
4
+ # :nodoc:
5
+ # @api public
6
+ DEFAULT_FONT = 'Arial 12'
7
+
8
+ # Used for inch-cm conversion
9
+ # :nodoc:
10
+ # @api private
11
+ INCHES_IN_CM = 0.393700787
12
+
13
+ # Used for points-inch conversion
14
+ # :nodoc:
15
+ # @api private
16
+ POINTS_PER_IN = 72.0
17
+ end