squib 0.14.1 → 0.14.2

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 (162) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +41 -41
  3. data/.travis.yml +19 -19
  4. data/CHANGELOG.md +357 -340
  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 +49 -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 +49 -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 -0
  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 -0
  86. data/lib/squib/card.rb +75 -74
  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 +139 -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 +108 -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 -205
  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 -126
  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/build_groups/build_groups.rb +36 -36
  121. data/samples/colors/_colors.rb +38 -38
  122. data/samples/colors/_gradients.rb +34 -34
  123. data/samples/config/config_text_markup.rb +20 -20
  124. data/samples/config/custom_config.rb +18 -18
  125. data/samples/data/_csv.rb +33 -33
  126. data/samples/data/_excel.rb +55 -55
  127. data/samples/data/_yaml.rb +12 -12
  128. data/samples/hello_world.rb +6 -6
  129. data/samples/images/_cairo_access.rb +39 -39
  130. data/samples/images/_images.rb +104 -104
  131. data/samples/images/_more_load_images.rb +102 -102
  132. data/samples/intro/01_hello.rb +8 -8
  133. data/samples/intro/02_options.rb +14 -14
  134. data/samples/intro/03_layout.rb +11 -11
  135. data/samples/intro/04_arrays.rb +15 -15
  136. data/samples/intro/05_excel.rb +14 -14
  137. data/samples/layouts/builtin_layouts.rb +97 -97
  138. data/samples/layouts/layouts.rb +71 -71
  139. data/samples/project/src/characters.rb +8 -8
  140. data/samples/project/src/skills.rb +7 -7
  141. data/samples/proofs/_tgc_proofs.rb +16 -16
  142. data/samples/ranges/_ranges.rb +64 -64
  143. data/samples/saves/_hand.rb +23 -23
  144. data/samples/saves/_portrait_landscape.rb +23 -23
  145. data/samples/saves/_save_pdf.rb +29 -29
  146. data/samples/saves/_saves.rb +51 -51
  147. data/samples/saves/_showcase.rb +25 -25
  148. data/samples/shapes/_draw_shapes.rb +60 -58
  149. data/samples/shapes/_proofs.rb +22 -22
  150. data/samples/sprues/_advanced_sprues.rb +24 -24
  151. data/samples/sprues/_builtin_sprues.rb +21 -19
  152. data/samples/sprues/_fold_sheet.rb +27 -27
  153. data/samples/sprues/_hex_tiles.rb +15 -15
  154. data/samples/sprues/_mints.rb +11 -11
  155. data/samples/sprues/_sprue_example.rb +11 -11
  156. data/samples/text/_embed_text.rb +128 -128
  157. data/samples/text/_text.rb +47 -47
  158. data/samples/text/_text_options.rb +102 -102
  159. data/samples/text/bug134.rb +14 -14
  160. data/samples/units/_units.rb +32 -32
  161. data/squib.gemspec +52 -51
  162. metadata +66 -50
@@ -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,139 @@
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
+ }
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,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