squib 0.13.4 → 0.14.beta1

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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -4
  3. data/CHANGELOG.md +19 -3
  4. data/README.md +1 -1
  5. data/bin/squib +1 -16
  6. data/lib/squib.rb +1 -1
  7. data/lib/squib/api/data.rb +29 -0
  8. data/lib/squib/api/save.rb +23 -2
  9. data/lib/squib/api/shapes.rb +37 -0
  10. data/lib/squib/api/text.rb +1 -1
  11. data/lib/squib/api/units.rb +5 -0
  12. data/lib/squib/args/arg_loader.rb +1 -1
  13. data/lib/squib/args/coords.rb +3 -1
  14. data/lib/squib/args/dir_validator.rb +1 -1
  15. data/lib/squib/args/sheet.rb +9 -2
  16. data/lib/squib/args/sprue_file.rb +44 -0
  17. data/lib/squib/args/unit_conversion.rb +2 -0
  18. data/lib/squib/{layouts → builtin/layouts}/economy.yml +5 -5
  19. data/lib/squib/{layouts → builtin/layouts}/fantasy.yml +4 -4
  20. data/lib/squib/{layouts → builtin/layouts}/hand.yml +0 -0
  21. data/lib/squib/builtin/layouts/party.yml +94 -0
  22. data/lib/squib/{layouts → builtin/layouts}/playing-card.yml +0 -0
  23. data/lib/squib/{layouts → builtin/layouts}/tuck_box.yml +1 -1
  24. data/lib/squib/{project_template → builtin/projects/advanced}/.gitignore +0 -0
  25. data/lib/squib/{project_template → builtin/projects/advanced}/ABOUT.md +0 -0
  26. data/lib/squib/builtin/projects/advanced/Gemfile +11 -0
  27. data/lib/squib/builtin/projects/advanced/Guardfile +21 -0
  28. data/lib/squib/{project_template → builtin/projects/advanced}/IDEAS.md +0 -0
  29. data/lib/squib/{project_template → builtin/projects/advanced}/PLAYTESTING.md +0 -0
  30. data/lib/squib/builtin/projects/advanced/Rakefile +27 -0
  31. data/lib/squib/{project_template → builtin/projects/advanced}/_output/gitkeep.txt +0 -0
  32. data/lib/squib/builtin/projects/advanced/config.yml +49 -0
  33. data/lib/squib/builtin/projects/advanced/data/game.xlsx +0 -0
  34. data/lib/squib/project_template/PNP NOTES.md b/data/lib/squib/builtin/projects/advanced/docs/PNP → NOTES.md +0 -0
  35. data/lib/squib/{project_template → builtin/projects/advanced/docs}/RULES.md +0 -0
  36. data/lib/squib/builtin/projects/advanced/img/example.svg +60 -0
  37. data/lib/squib/builtin/projects/advanced/layouts/deck.yml +27 -0
  38. data/lib/squib/builtin/projects/advanced/src/deck.rb +34 -0
  39. data/lib/squib/builtin/projects/advanced/src/version.rb +3 -0
  40. data/lib/squib/builtin/projects/basic/.gitignore +4 -0
  41. data/lib/squib/builtin/projects/basic/ABOUT.md +19 -0
  42. data/lib/squib/{project_template → builtin/projects/basic}/Gemfile +0 -0
  43. data/lib/squib/builtin/projects/basic/IDEAS.md +22 -0
  44. data/lib/squib/builtin/projects/basic/PLAYTESTING.md +26 -0
  45. data/lib/squib/builtin/projects/basic/PNP NOTES.md +4 -0
  46. data/lib/squib/builtin/projects/basic/RULES.md +21 -0
  47. data/lib/squib/{project_template → builtin/projects/basic}/Rakefile +0 -0
  48. data/lib/squib/builtin/projects/basic/_output/gitkeep.txt +1 -0
  49. data/lib/squib/{project_template → builtin/projects/basic}/config.yml +0 -0
  50. data/lib/squib/{project_template → builtin/projects/basic}/deck.rb +0 -0
  51. data/lib/squib/{project_template → builtin/projects/basic}/layout.yml +0 -0
  52. data/lib/squib/builtin/sprues/a4_euro_card.yml +42 -0
  53. data/lib/squib/builtin/sprues/a4_poker_card_8up.yml +40 -0
  54. data/lib/squib/builtin/sprues/a4_poker_card_9up.yml +42 -0
  55. data/lib/squib/builtin/sprues/a4_usa_card.yml +42 -0
  56. data/lib/squib/builtin/sprues/letter_poker_card_9up.yml +25 -0
  57. data/lib/squib/builtin/sprues/letter_poker_foldable_8up.yml +52 -0
  58. data/lib/squib/card.rb +1 -1
  59. data/lib/squib/commands/cli.rb +39 -0
  60. data/lib/squib/commands/data/template_option.rb +109 -0
  61. data/lib/squib/commands/make_sprue.rb +275 -0
  62. data/lib/squib/commands/new.rb +37 -4
  63. data/lib/squib/constants.rb +6 -1
  64. data/lib/squib/graphics/cairo_context_wrapper.rb +1 -1
  65. data/lib/squib/graphics/image.rb +6 -1
  66. data/lib/squib/graphics/save_doc.rb +6 -4
  67. data/lib/squib/graphics/save_pdf.rb +13 -8
  68. data/lib/squib/graphics/save_sprue.rb +228 -0
  69. data/lib/squib/graphics/shapes.rb +8 -2
  70. data/lib/squib/graphics/text.rb +4 -3
  71. data/lib/squib/layout_parser.rb +17 -1
  72. data/lib/squib/sample_helpers.rb +1 -1
  73. data/lib/squib/sprues/crop_line.rb +28 -0
  74. data/lib/squib/sprues/crop_line_dash.rb +35 -0
  75. data/lib/squib/sprues/invalid_sprue_definition.rb +9 -0
  76. data/lib/squib/sprues/sprue.rb +203 -0
  77. data/lib/squib/sprues/sprue_schema.rb +48 -0
  78. data/lib/squib/version.rb +1 -1
  79. data/samples/autoscale_font/_autoscale_font.rb +3 -3
  80. data/samples/backend/_backend.rb +1 -1
  81. data/samples/basic.rb +2 -2
  82. data/samples/colors/_colors.rb +1 -1
  83. data/samples/colors/_gradients.rb +1 -1
  84. data/samples/config/config_text_markup.rb +3 -3
  85. data/samples/config/custom_config.rb +1 -1
  86. data/samples/data/_csv.rb +3 -3
  87. data/samples/data/_excel.rb +4 -4
  88. data/samples/data/_yaml.rb +12 -0
  89. data/samples/images/_images.rb +2 -2
  90. data/samples/images/_more_load_images.rb +3 -0
  91. data/samples/images/_unicode.rb +2 -2
  92. data/samples/intro/02_options.rb +2 -2
  93. data/samples/layouts/builtin_layouts.rb +27 -4
  94. data/samples/layouts/layouts.rb +2 -2
  95. data/samples/proofs/_tgc_proofs.rb +2 -2
  96. data/samples/ranges/_ranges.rb +3 -3
  97. data/samples/saves/_hand.rb +1 -1
  98. data/samples/saves/_save_pdf.rb +4 -0
  99. data/samples/saves/_saves.rb +7 -1
  100. data/samples/saves/_showcase.rb +1 -1
  101. data/samples/shapes/_draw_shapes.rb +5 -1
  102. data/samples/shapes/_proofs.rb +22 -0
  103. data/samples/sprues/_builtin_sprues.rb +19 -0
  104. data/samples/sprues/_fold_sheet.rb +27 -0
  105. data/samples/sprues/_hex_tiles.rb +15 -0
  106. data/samples/sprues/_mints.rb +11 -0
  107. data/samples/sprues/_sprue_example.rb +11 -0
  108. data/samples/text/_embed_text.rb +14 -14
  109. data/samples/text/_text.rb +8 -8
  110. data/samples/text/_text_options.rb +17 -17
  111. data/squib.gemspec +18 -17
  112. metadata +126 -44
@@ -0,0 +1,27 @@
1
+ require 'squib'
2
+
3
+ # Note that this sample has no bleed - you might want to have bleed
4
+ # but tighter than usual: 0.1 instead of 0.125in since this sprue is
5
+ # crowded horizontally on US letter
6
+ Squib::Deck.new(width: '2.5in', height: '3.5in', cards: 8) do
7
+ background color: :white
8
+ rect stroke_width: 5, stroke_color: :red
9
+ # Note that we are interleaving strings
10
+ # This could be used as a secondary Squib script that loads
11
+ # Squib-generated individual images
12
+ strings = [
13
+ "Front 1",
14
+ "Back 1",
15
+ "Front 2",
16
+ "Back 2",
17
+ "Front 3",
18
+ "Back 3",
19
+ "Front 4",
20
+ "Back 4",
21
+ ]
22
+
23
+ text str: strings,font: 'Sans 32', align: :center, valign: :middle,
24
+ height: :deck, width: :deck
25
+ save_sheet prefix: 'foldable_',
26
+ sprue: 'letter_poker_foldable_8up.yml'
27
+ end
@@ -0,0 +1,15 @@
1
+ require 'squib'
2
+
3
+ Squib::Deck.new(width: '65.8mm', height: '76mm', cards: 9) do
4
+ polygon(
5
+ x: '32.9mm', y: '38mm', n: 6, radius: '38mm', angle: 1.571,
6
+ stroke_color: :black, stroke_width: '0.014in', fill_color: :pink
7
+ )
8
+ text(
9
+ str: %w[One Two Three Four Five Six Seven Eight Nine],
10
+ x: '27mm', y: '35mm', width: '11.8mm', height: '6mm',
11
+ align: :center, valign: :middle
12
+ )
13
+ save_pdf file: 'hex_tiles.pdf',
14
+ sprue: 'my_sprues/hex_tiles.yml'
15
+ end
@@ -0,0 +1,11 @@
1
+ require 'squib'
2
+
3
+ # An example deck that uses "mint" sized cards (e.g. Altoids).
4
+ # These cards are pretty small but comfortably fit in a mint tin
5
+
6
+ Squib::Deck.new(cards: 21, width: '54.0mm', height: '68.0mm') do
7
+ background color: :gray
8
+ rect
9
+ text str: (1..21).to_a
10
+ save_pdf sprue: 'my_sprues/us_letter_mints.yml'
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'squib'
2
+
3
+ Squib::Deck.new(cards: 9) do
4
+ background color: :white
5
+ rect stroke_width: 5, stroke_color: :red
6
+ text str: (0..9).map{ |i| "Card #{i}\n2.5x3.5in" },
7
+ font: 'Sans 32', align: :center, valign: :middle,
8
+ height: :deck, width: :deck
9
+ save_sheet sprue: 'letter_poker_card_9up.yml',
10
+ prefix: "sprue_example_"
11
+ end
@@ -5,7 +5,7 @@ Squib::Deck.new do
5
5
  rect x: 0, y: 0, width: 825, height: 1125, stroke_width: 2.0
6
6
 
7
7
  embed_text = 'Take 11 :tool: and gain 2 :health:. Take <b>2</b> :tool: <i>and gain 3 :purse: if level 2.</i>'
8
- text(str: embed_text, font: 'Sans 21',
8
+ text(str: embed_text, font: 'Sans 7',
9
9
  x: 0, y: 0, width: 180, hint: :red,
10
10
  align: :left, ellipsize: false, justify: false) do |embed|
11
11
  embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
@@ -14,7 +14,7 @@ Squib::Deck.new do
14
14
  end
15
15
 
16
16
  embed_text = 'Middle align: Take 1 :tool: and gain 2 :health:. Take 2 :tool: and gain 3 :purse:'
17
- text(str: embed_text, font: 'Sans 21',
17
+ text(str: embed_text, font: 'Sans 7',
18
18
  x: 200, y: 0, width: 180, height: 300, valign: :middle,
19
19
  align: :left, ellipsize: false, justify: false, hint: :cyan) do |embed|
20
20
  embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
@@ -23,7 +23,7 @@ Squib::Deck.new do
23
23
  end
24
24
 
25
25
  embed_text = 'This :tool: aligns on the bottom properly. :purse:'
26
- text(str: embed_text, font: 'Sans 21',
26
+ text(str: embed_text, font: 'Sans 7',
27
27
  x: 400, y: 0, width: 180, height: 300, valign: :bottom,
28
28
  align: :left, ellipsize: false, justify: false, hint: :green) do |embed|
29
29
  embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
@@ -32,14 +32,14 @@ Squib::Deck.new do
32
32
  end
33
33
 
34
34
  embed_text = 'Yes, this wraps strangely. We are trying to determine the cause. These are 1 :tool::tool::tool: and these are multiple :tool::tool: :tool::tool:'
35
- text(str: embed_text, font: 'Sans 18',
35
+ text(str: embed_text, font: 'Sans 6',
36
36
  x: 600, y: 0, width: 180, height: 300, wrap: :word_char,
37
37
  align: :left, ellipsize: false, justify: false, hint: :cyan) do |embed|
38
38
  embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
39
39
  end
40
40
 
41
41
  embed_text = ':tool:Justify will :tool: work too, and :purse: with more words just for fun'
42
- text(str: embed_text, font: 'Sans 21',
42
+ text(str: embed_text, font: 'Sans 7',
43
43
  x: 0, y: 320, width: 180, height: 300, valign: :bottom,
44
44
  align: :left, ellipsize: false, justify: true, hint: :magenta) do |embed|
45
45
  embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
@@ -48,7 +48,7 @@ Squib::Deck.new do
48
48
  end
49
49
 
50
50
  embed_text = 'Right-aligned works :tool: with :health: and :purse:'
51
- text(str: embed_text, font: 'Sans 21',
51
+ text(str: embed_text, font: 'Sans 7',
52
52
  x: 200, y: 320, width: 180, height: 300, valign: :bottom,
53
53
  align: :right, ellipsize: false, justify: false, hint: :magenta) do |embed|
54
54
  embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
@@ -57,7 +57,7 @@ Squib::Deck.new do
57
57
  end
58
58
 
59
59
  embed_text = ':tool:Center-aligned works :tool: with :health: and :purse:'
60
- text(str: embed_text, font: 'Sans 21',
60
+ text(str: embed_text, font: 'Sans 7',
61
61
  x: 400, y: 320, width: 180, height: 300,
62
62
  align: :center, ellipsize: false, justify: false, hint: :magenta) do |embed|
63
63
  embed.svg key: ':tool:', width: 28, height: 28, data: File.read('spanner.svg')
@@ -66,7 +66,7 @@ Squib::Deck.new do
66
66
  end
67
67
 
68
68
  embed_text = 'Markup --- and typography replacements --- with ":tool:" icons <i>won\'t</i> fail'
69
- text(str: embed_text, font: 'Serif 18', markup: true,
69
+ text(str: embed_text, font: 'Serif 6', markup: true,
70
70
  x: 600, y: 320, width: 180, height: 300,
71
71
  align: :center, hint: :magenta) do |embed|
72
72
  embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
@@ -74,18 +74,18 @@ Squib::Deck.new do
74
74
 
75
75
  embed_text = ':tool:' # JUST the icon
76
76
  text(str: embed_text, x: 0, y: 640, width: 180, height: 50, markup: true,
77
- font: 'Arial 21', align: :center, valign: :middle, hint: :red) do |embed|
77
+ font: 'Arial 7', align: :center, valign: :middle, hint: :red) do |embed|
78
78
  embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
79
79
  end
80
80
 
81
81
  embed_text = ':purse:' # JUST the icon
82
82
  text(str: embed_text, x: 200, y: 640, width: 180, height: 50, markup: true,
83
- font: 'Arial 21', align: :center, valign: :middle, hint: :red) do |embed|
83
+ font: 'Arial 7', align: :center, valign: :middle, hint: :red) do |embed|
84
84
  embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
85
85
  end
86
86
 
87
87
  embed_text = ":tool: Death to Nemesis bug 103!! :purse:"
88
- text(str: embed_text, font: 'Sans Bold 24', stroke_width: 2,
88
+ text(str: embed_text, font: 'Sans Bold 8', stroke_width: 2,
89
89
  color: :red, stroke_color: :blue, dash: '3 3', align: :left,
90
90
  valign: :middle, x: 0, y: 700, width: 380, height: 150,
91
91
  hint: :magenta) do |embed|
@@ -94,7 +94,7 @@ Squib::Deck.new do
94
94
  end
95
95
 
96
96
  embed_text = 'You can adjust the icon with dx and dy. Normal: :tool: Adjusted: :heart:'
97
- text(str: embed_text, font: 'Sans 18', x: 400, y: 640, width: 180,
97
+ text(str: embed_text, font: 'Sans 6', x: 400, y: 640, width: 180,
98
98
  height: 300, hint: :magenta) do |embed|
99
99
  embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
100
100
  embed.svg key: ':heart:', width: 28, height: 28, dx: 10, dy: 10,
@@ -102,7 +102,7 @@ Squib::Deck.new do
102
102
  end
103
103
 
104
104
  embed_text = "Native sizes work too\n:tool:\n\n\n\n\n\n:shiny-purse:\n\n\n\n\n\n:tool2:"
105
- text(str: embed_text, font: 'Sans 18', x: 600, y: 640, width: 180,
105
+ text(str: embed_text, font: 'Sans 6', x: 600, y: 640, width: 180,
106
106
  height: 475, hint: :magenta) do |embed|
107
107
  embed.svg key: ':tool:', width: :native, height: :native,
108
108
  file: 'spanner.svg'
@@ -118,7 +118,7 @@ end
118
118
  Squib::Deck.new(cards: 3) do
119
119
  background color: :white
120
120
  str = 'Take 1 :tool: and gain 2 :health:.'
121
- text(str: str, font: 'Sans', font_size: [18, 26, 35],
121
+ text(str: str, font: 'Sans', font_size: [6, 8.5, 11.5],
122
122
  x: 0, y: 0, width: 180, height: 300, valign: :bottom,
123
123
  align: :left, ellipsize: false, justify: false, hint: :cyan) do |embed|
124
124
  embed.svg key: ':tool:', width: [28, 42, 56], height: [28, 42, 56], file: 'spanner.svg'
@@ -5,31 +5,31 @@ Squib::Deck.new(width: 1000, height: 1250) do
5
5
  draw_graph_paper width, height
6
6
 
7
7
  sample 'Font strings are quite expressive. Specify family, modifiers, then size. Font names with spaces in them should end with a comma to help with parsing.' do |x, y|
8
- text font: 'Arial bold italic 32', str: 'Bold and italic!', x: x, y: y - 50
9
- text font: 'Arial weight=300 32', str: 'Light bold!', x: x, y: y
10
- text font: 'Times New Roman, 32', str: 'Times New Roman', x: x, y: y + 50
11
- text font: 'NoSuchFont,Arial 32', str: 'Arial Backup', x: x, y: y + 100
8
+ text font: 'Arial bold italic 11', str: 'Bold and italic!', x: x, y: y - 50
9
+ text font: 'Arial weight=300 11', str: 'Light bold!', x: x, y: y
10
+ text font: 'Times New Roman, 11', str: 'Times New Roman', x: x, y: y + 50
11
+ text font: 'NoSuchFont,Arial 11', str: 'Arial Backup', x: x, y: y + 100
12
12
  end
13
13
 
14
14
  sample 'Specify width and height to see a text box. Also: set "hint" to see the extents of your text box' do |x, y|
15
15
  text str: 'This has fixed width and height.', x: x, y: y,
16
- hint: :red, width: 300, height: 100, font: 'Serif bold 24'
16
+ hint: :red, width: 300, height: 100, font: 'Serif bold 8'
17
17
  end
18
18
 
19
19
  sample 'If you specify the width only, the text will ellipsize.' do |x, y|
20
20
  text str: 'The meaning of life is 42', x: x - 50, y: y,
21
- hint: :red, width: 350, font: 'Serif bold 22'
21
+ hint: :red, width: 350, font: 'Serif bold 7'
22
22
  end
23
23
 
24
24
  sample 'If you specify the width only, and turn off ellipsize, the height will auto-stretch.' do |x, y|
25
25
  text str: 'This has fixed width, but not fixed height.', x: x, y: y,
26
- hint: :red, width: 300, ellipsize: false, font: 'Serif bold 24'
26
+ hint: :red, width: 300, ellipsize: false, font: 'Serif bold 8'
27
27
  end
28
28
 
29
29
  sample 'The text method returns the ink extents of each card\'s rendered text. So you can custom-fit a shape around it.' do |x, y|
30
30
  ['Auto fit!', 'Auto fit!!!!' ].each.with_index do |str, i|
31
31
  text_y = y + i * 50
32
- extents = text str: str, x: x, y: text_y, font: 'Sans Bold 24'
32
+ extents = text str: str, x: x, y: text_y, font: 'Sans Bold 8'
33
33
 
34
34
  # Extents come back as an array of hashes, which can get split out like this
35
35
  text_width = extents[0][:width]
@@ -11,28 +11,28 @@ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
11
11
  rect x: 30, y: 30, width: 128, height: 128, x_radius: 25, y_radius: 25
12
12
 
13
13
  # Arrays are rendered over each card
14
- text str: data['name'], x: 250, y: 55, font: 'Arial weight=900 54'
15
- text str: data['level'], x: 65, y: 40, font: 'Arial 72', color: :burnt_orange
14
+ text str: data['name'], x: 250, y: 55, font: 'Arial weight=900 18'
15
+ text str: data['level'], x: 65, y: 40, font: 'Arial 24', color: :burnt_orange
16
16
 
17
17
  text str: 'Font strings are expressive!', x:65, y: 200,
18
- font: 'Impact bold italic 36'
18
+ font: 'Impact bold italic 12'
19
19
 
20
20
  text str: 'Font strings are expressive!', x:65, y: 300,
21
- font: 'Arial,Verdana weight=900 style=oblique 36'
21
+ font: 'Arial,Verdana weight=900 style=oblique 12'
22
22
 
23
23
  text str: 'Font string sizes can be overridden per card.', x: 65, y: 350,
24
- font: 'Impact 36', font_size: [16, 20, 24]
24
+ font: 'Impact 12', font_size: [5, 7, 8]
25
25
 
26
26
  text str: 'This text has fixed width, fixed height, center-aligned, middle-valigned, and has a red hint',
27
27
  hint: :red,
28
28
  x: 65, y: 400,
29
29
  width: 300, height: 125,
30
30
  align: :center, valign: 'MIDDLE', # these can be specified with case-insenstive strings too
31
- font: 'Serif 16'
31
+ font: 'Serif 5'
32
32
 
33
33
  extents = text str: 'Ink extent return value',
34
34
  x: 65, y: 550,
35
- font: 'Sans Bold', font_size: [16, 20, 24]
35
+ font: 'Sans Bold', font_size: [5, 7, 8]
36
36
  margin = 10
37
37
  # Extents come back as an array of hashes, which can get split out like this
38
38
  ws = extents.inject([]) { |arr, ext| arr << ext[:width] + 10; arr }
@@ -43,28 +43,28 @@ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
43
43
 
44
44
  # If width & height are defined and the text will overflow the box, we can ellipsize.
45
45
  text str: "Ellipsization!\nThe ultimate question of life, the universe, and everything to life and everything is 42",
46
- hint: :green, font: 'Arial 22',
46
+ hint: :green, font: 'Arial 7',
47
47
  x: 450, y: 400,
48
48
  width: 280, height: 180,
49
49
  ellipsize: true
50
50
 
51
51
  # Text hints are guides for showing you how your text boxes are laid out exactly
52
52
  hint text: :cyan
53
- set font: 'Serif 20' # Impacts all future text calls (unless they specify differently)
53
+ set font: 'Serif 7' # Impacts all future text calls (unless they specify differently)
54
54
  text str: 'Text hints & fonts are globally togglable!', x: 65, y: 625
55
55
  set font: :default # back to Squib-wide default
56
56
  hint text: :off
57
57
  text str: 'See? No hint here.',
58
58
  x: 565, y: 625,
59
- font: 'Arial 22'
59
+ font: 'Arial 7'
60
60
 
61
61
  # Text can be rotated, in radians, about the upper-left corner of the text box.
62
62
  text str: 'Rotated',
63
63
  x: 565, y: 675, angle: 0.2,
64
- font: 'Arial 18', hint: :red
64
+ font: 'Arial 6', hint: :red
65
65
 
66
66
  # Text can be justified, and have newlines
67
- text str: longtext, font: 'Arial 16',
67
+ text str: longtext, font: 'Arial 5',
68
68
  x: 65, y: 700,
69
69
  width: '1.5in', height: inches(1),
70
70
  justify: true, spacing: -6
@@ -72,7 +72,7 @@ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
72
72
  # Here's how you embed images into text.
73
73
  # Pass a block to the method call and use the given context
74
74
  embed_text = 'Embedded icons! Take 1 :tool: and gain 2:health:. If Level 2, take 2 :tool:'
75
- text(str: embed_text, font: 'Sans 18',
75
+ text(str: embed_text, font: 'Sans 6',
76
76
  x: '1.8in', y: '2.5in', width: '0.85in',
77
77
  align: :left, ellipsize: false) do |embed|
78
78
  embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
@@ -81,22 +81,22 @@ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
81
81
 
82
82
  text str: 'Fill n <span fgcolor="#ff0000">stroke</span>',
83
83
  color: :green, stroke_width: 2.0, stroke_color: :blue,
84
- x: '1.8in', y: '2.9in', width: '0.85in', font: 'Sans Bold 26', markup: true
84
+ x: '1.8in', y: '2.9in', width: '0.85in', font: 'Sans Bold 9', markup: true
85
85
 
86
86
  text str: 'Stroke n <span fgcolor="#ff0000">fill</span>',
87
87
  color: :green, stroke_width: 2.0, stroke_color: :blue, stroke_strategy: :stroke_first,
88
- x: '1.8in', y: '3.0in', width: '0.85in', font: 'Sans Bold 26', markup: true
88
+ x: '1.8in', y: '3.0in', width: '0.85in', font: 'Sans Bold 9', markup: true
89
89
 
90
90
  text str: 'Dotted',
91
91
  color: :white, stroke_width: 2.0, dash: '4 2', stroke_color: :black,
92
- x: '1.8in', y: '3.1in', width: '0.85in', font: 'Sans Bold 26', markup: true
92
+ x: '1.8in', y: '3.1in', width: '0.85in', font: 'Sans Bold 9', markup: true
93
93
  #
94
94
  text str: "<b>Markup</b> is <i>quite</i> <s>'easy'</s> <span fgcolor=\"\#ff0000\">awesome</span>. Can't beat those \"smart\" 'quotes', now with 10--20% more en-dashes --- and em-dashes --- with explicit ellipses too...",
95
95
  markup: true,
96
96
  x: 50, y: 1000,
97
97
  width: 750, height: 100,
98
98
  valign: :bottom,
99
- font: 'Serif 18', hint: :cyan
99
+ font: 'Serif 6', hint: :cyan
100
100
 
101
101
  save prefix: 'text_options_', format: :png
102
102
  end
@@ -29,22 +29,23 @@ Gem::Specification.new do |spec|
29
29
  spec.test_files = spec.files.grep(/^(spec|samples|docs|benchmarks)\//)
30
30
  spec.require_paths = ['lib']
31
31
 
32
- spec.add_runtime_dependency 'cairo', '1.15.9'
33
- spec.add_runtime_dependency 'gio2', '3.1.8'
34
- spec.add_runtime_dependency 'gobject-introspection', '3.1.8'
35
- spec.add_runtime_dependency 'mercenary', '0.3.6'
36
- spec.add_runtime_dependency 'nokogiri', '1.8.0'
37
- spec.add_runtime_dependency 'pango', '3.1.8'
38
- spec.add_runtime_dependency 'rsvg2', '3.1.8'
39
- spec.add_runtime_dependency 'roo', '2.7.1'
40
- spec.add_runtime_dependency 'ruby-progressbar', '1.8.1'
41
-
42
- spec.add_development_dependency 'bundler'
43
- spec.add_development_dependency 'rake'
44
- spec.add_development_dependency 'rspec', '~> 3.3'
45
- spec.add_development_dependency 'coveralls'
46
- # spec.add_development_dependency 'byebug'
47
- spec.add_development_dependency 'launchy'
48
- spec.add_development_dependency 'game_icons'
32
+ spec.add_runtime_dependency 'cairo', '1.15.9'
33
+ spec.add_runtime_dependency 'classy_hash', '0.2.1'
34
+ spec.add_runtime_dependency 'gio2', '3.1.8'
35
+ spec.add_runtime_dependency 'gobject-introspection', '3.1.8'
36
+ spec.add_runtime_dependency 'highline', '1.7.8'
37
+ spec.add_runtime_dependency 'mercenary', '0.3.6'
38
+ spec.add_runtime_dependency 'nokogiri', '1.8.1'
39
+ spec.add_runtime_dependency 'pango', '3.1.8'
40
+ spec.add_runtime_dependency 'roo', '2.7.1'
41
+ spec.add_runtime_dependency 'rsvg2', '3.1.8'
42
+ spec.add_runtime_dependency 'ruby-progressbar', '1.9.0'
43
+
44
+ spec.add_development_dependency 'bundler'
45
+ spec.add_development_dependency 'coveralls'
46
+ spec.add_development_dependency 'game_icons'
47
+ spec.add_development_dependency 'launchy'
48
+ spec.add_development_dependency 'rake'
49
+ spec.add_development_dependency 'rspec', '~> 3.3'
49
50
 
50
51
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: squib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.4
4
+ version: 0.14.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Meneely
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-17 00:00:00.000000000 Z
11
+ date: 2017-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cairo
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.15.9
27
+ - !ruby/object:Gem::Dependency
28
+ name: classy_hash
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.1
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: gio2
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - '='
53
67
  - !ruby/object:Gem::Version
54
68
  version: 3.1.8
69
+ - !ruby/object:Gem::Dependency
70
+ name: highline
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.7.8
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 1.7.8
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: mercenary
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +100,14 @@ dependencies:
72
100
  requirements:
73
101
  - - '='
74
102
  - !ruby/object:Gem::Version
75
- version: 1.8.0
103
+ version: 1.8.1
76
104
  type: :runtime
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - '='
81
109
  - !ruby/object:Gem::Version
82
- version: 1.8.0
110
+ version: 1.8.1
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: pango
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -95,47 +123,47 @@ dependencies:
95
123
  - !ruby/object:Gem::Version
96
124
  version: 3.1.8
97
125
  - !ruby/object:Gem::Dependency
98
- name: rsvg2
126
+ name: roo
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - '='
102
130
  - !ruby/object:Gem::Version
103
- version: 3.1.8
131
+ version: 2.7.1
104
132
  type: :runtime
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - '='
109
137
  - !ruby/object:Gem::Version
110
- version: 3.1.8
138
+ version: 2.7.1
111
139
  - !ruby/object:Gem::Dependency
112
- name: roo
140
+ name: rsvg2
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
143
  - - '='
116
144
  - !ruby/object:Gem::Version
117
- version: 2.7.1
145
+ version: 3.1.8
118
146
  type: :runtime
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
150
  - - '='
123
151
  - !ruby/object:Gem::Version
124
- version: 2.7.1
152
+ version: 3.1.8
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: ruby-progressbar
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - '='
130
158
  - !ruby/object:Gem::Version
131
- version: 1.8.1
159
+ version: 1.9.0
132
160
  type: :runtime
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
164
  - - '='
137
165
  - !ruby/object:Gem::Version
138
- version: 1.8.1
166
+ version: 1.9.0
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: bundler
141
169
  requirement: !ruby/object:Gem::Requirement
@@ -151,7 +179,7 @@ dependencies:
151
179
  - !ruby/object:Gem::Version
152
180
  version: '0'
153
181
  - !ruby/object:Gem::Dependency
154
- name: rake
182
+ name: coveralls
155
183
  requirement: !ruby/object:Gem::Requirement
156
184
  requirements:
157
185
  - - ">="
@@ -165,21 +193,21 @@ dependencies:
165
193
  - !ruby/object:Gem::Version
166
194
  version: '0'
167
195
  - !ruby/object:Gem::Dependency
168
- name: rspec
196
+ name: game_icons
169
197
  requirement: !ruby/object:Gem::Requirement
170
198
  requirements:
171
- - - "~>"
199
+ - - ">="
172
200
  - !ruby/object:Gem::Version
173
- version: '3.3'
201
+ version: '0'
174
202
  type: :development
175
203
  prerelease: false
176
204
  version_requirements: !ruby/object:Gem::Requirement
177
205
  requirements:
178
- - - "~>"
206
+ - - ">="
179
207
  - !ruby/object:Gem::Version
180
- version: '3.3'
208
+ version: '0'
181
209
  - !ruby/object:Gem::Dependency
182
- name: coveralls
210
+ name: launchy
183
211
  requirement: !ruby/object:Gem::Requirement
184
212
  requirements:
185
213
  - - ">="
@@ -193,7 +221,7 @@ dependencies:
193
221
  - !ruby/object:Gem::Version
194
222
  version: '0'
195
223
  - !ruby/object:Gem::Dependency
196
- name: launchy
224
+ name: rake
197
225
  requirement: !ruby/object:Gem::Requirement
198
226
  requirements:
199
227
  - - ">="
@@ -207,19 +235,19 @@ dependencies:
207
235
  - !ruby/object:Gem::Version
208
236
  version: '0'
209
237
  - !ruby/object:Gem::Dependency
210
- name: game_icons
238
+ name: rspec
211
239
  requirement: !ruby/object:Gem::Requirement
212
240
  requirements:
213
- - - ">="
241
+ - - "~>"
214
242
  - !ruby/object:Gem::Version
215
- version: '0'
243
+ version: '3.3'
216
244
  type: :development
217
245
  prerelease: false
218
246
  version_requirements: !ruby/object:Gem::Requirement
219
247
  requirements:
220
- - - ">="
248
+ - - "~>"
221
249
  - !ruby/object:Gem::Version
222
- version: '0'
250
+ version: '3.3'
223
251
  description: Squib is a Ruby DSL for prototyping card games
224
252
  email: andy.meneely@gmail.com
225
253
  executables:
@@ -237,6 +265,7 @@ extra_rdoc_files:
237
265
  - samples/config/custom_config.rb
238
266
  - samples/data/_csv.rb
239
267
  - samples/data/_excel.rb
268
+ - samples/data/_yaml.rb
240
269
  - samples/hello_world.rb
241
270
  - samples/images/_cairo_access.rb
242
271
  - samples/images/_images.rb
@@ -259,6 +288,12 @@ extra_rdoc_files:
259
288
  - samples/saves/_save_pdf.rb
260
289
  - samples/saves/_showcase.rb
261
290
  - samples/shapes/_draw_shapes.rb
291
+ - samples/shapes/_proofs.rb
292
+ - samples/sprues/_builtin_sprues.rb
293
+ - samples/sprues/_fold_sheet.rb
294
+ - samples/sprues/_hex_tiles.rb
295
+ - samples/sprues/_mints.rb
296
+ - samples/sprues/_sprue_example.rb
262
297
  - samples/text/bug134.rb
263
298
  - samples/text/_embed_text.rb
264
299
  - samples/text/_text.rb
@@ -306,11 +341,55 @@ files:
306
341
  - lib/squib/args/scale_box.rb
307
342
  - lib/squib/args/sheet.rb
308
343
  - lib/squib/args/showcase_special.rb
344
+ - lib/squib/args/sprue_file.rb
309
345
  - lib/squib/args/svg_special.rb
310
346
  - lib/squib/args/transform.rb
311
347
  - lib/squib/args/typographer.rb
312
348
  - lib/squib/args/unit_conversion.rb
349
+ - lib/squib/builtin/layouts/economy.yml
350
+ - lib/squib/builtin/layouts/fantasy.yml
351
+ - lib/squib/builtin/layouts/hand.yml
352
+ - lib/squib/builtin/layouts/party.yml
353
+ - lib/squib/builtin/layouts/playing-card.yml
354
+ - lib/squib/builtin/layouts/tuck_box.yml
355
+ - lib/squib/builtin/projects/advanced/.gitignore
356
+ - lib/squib/builtin/projects/advanced/ABOUT.md
357
+ - lib/squib/builtin/projects/advanced/Gemfile
358
+ - lib/squib/builtin/projects/advanced/Guardfile
359
+ - lib/squib/builtin/projects/advanced/IDEAS.md
360
+ - lib/squib/builtin/projects/advanced/PLAYTESTING.md
361
+ - lib/squib/builtin/projects/advanced/Rakefile
362
+ - lib/squib/builtin/projects/advanced/_output/gitkeep.txt
363
+ - lib/squib/builtin/projects/advanced/config.yml
364
+ - lib/squib/builtin/projects/advanced/data/game.xlsx
365
+ - lib/squib/builtin/projects/advanced/docs/PNP NOTES.md
366
+ - lib/squib/builtin/projects/advanced/docs/RULES.md
367
+ - lib/squib/builtin/projects/advanced/img/example.svg
368
+ - lib/squib/builtin/projects/advanced/layouts/deck.yml
369
+ - lib/squib/builtin/projects/advanced/src/deck.rb
370
+ - lib/squib/builtin/projects/advanced/src/version.rb
371
+ - lib/squib/builtin/projects/basic/.gitignore
372
+ - lib/squib/builtin/projects/basic/ABOUT.md
373
+ - lib/squib/builtin/projects/basic/Gemfile
374
+ - lib/squib/builtin/projects/basic/IDEAS.md
375
+ - lib/squib/builtin/projects/basic/PLAYTESTING.md
376
+ - lib/squib/builtin/projects/basic/PNP NOTES.md
377
+ - lib/squib/builtin/projects/basic/RULES.md
378
+ - lib/squib/builtin/projects/basic/Rakefile
379
+ - lib/squib/builtin/projects/basic/_output/gitkeep.txt
380
+ - lib/squib/builtin/projects/basic/config.yml
381
+ - lib/squib/builtin/projects/basic/deck.rb
382
+ - lib/squib/builtin/projects/basic/layout.yml
383
+ - lib/squib/builtin/sprues/a4_euro_card.yml
384
+ - lib/squib/builtin/sprues/a4_poker_card_8up.yml
385
+ - lib/squib/builtin/sprues/a4_poker_card_9up.yml
386
+ - lib/squib/builtin/sprues/a4_usa_card.yml
387
+ - lib/squib/builtin/sprues/letter_poker_card_9up.yml
388
+ - lib/squib/builtin/sprues/letter_poker_foldable_8up.yml
313
389
  - lib/squib/card.rb
390
+ - lib/squib/commands/cli.rb
391
+ - lib/squib/commands/data/template_option.rb
392
+ - lib/squib/commands/make_sprue.rb
314
393
  - lib/squib/commands/new.rb
315
394
  - lib/squib/conf.rb
316
395
  - lib/squib/constants.rb
@@ -324,30 +403,19 @@ files:
324
403
  - lib/squib/graphics/save_doc.rb
325
404
  - lib/squib/graphics/save_images.rb
326
405
  - lib/squib/graphics/save_pdf.rb
406
+ - lib/squib/graphics/save_sprue.rb
327
407
  - lib/squib/graphics/shapes.rb
328
408
  - lib/squib/graphics/showcase.rb
329
409
  - lib/squib/graphics/text.rb
330
410
  - lib/squib/import/data_frame.rb
331
411
  - lib/squib/layout_parser.rb
332
- - lib/squib/layouts/economy.yml
333
- - lib/squib/layouts/fantasy.yml
334
- - lib/squib/layouts/hand.yml
335
- - lib/squib/layouts/playing-card.yml
336
- - lib/squib/layouts/tuck_box.yml
337
412
  - lib/squib/progress.rb
338
- - lib/squib/project_template/.gitignore
339
- - lib/squib/project_template/ABOUT.md
340
- - lib/squib/project_template/Gemfile
341
- - lib/squib/project_template/IDEAS.md
342
- - lib/squib/project_template/PLAYTESTING.md
343
- - lib/squib/project_template/PNP NOTES.md
344
- - lib/squib/project_template/RULES.md
345
- - lib/squib/project_template/Rakefile
346
- - lib/squib/project_template/_output/gitkeep.txt
347
- - lib/squib/project_template/config.yml
348
- - lib/squib/project_template/deck.rb
349
- - lib/squib/project_template/layout.yml
350
413
  - lib/squib/sample_helpers.rb
414
+ - lib/squib/sprues/crop_line.rb
415
+ - lib/squib/sprues/crop_line_dash.rb
416
+ - lib/squib/sprues/invalid_sprue_definition.rb
417
+ - lib/squib/sprues/sprue.rb
418
+ - lib/squib/sprues/sprue_schema.rb
351
419
  - lib/squib/version.rb
352
420
  - samples/autoscale_font/_autoscale_font.rb
353
421
  - samples/backend/_backend.rb
@@ -359,6 +427,7 @@ files:
359
427
  - samples/config/custom_config.rb
360
428
  - samples/data/_csv.rb
361
429
  - samples/data/_excel.rb
430
+ - samples/data/_yaml.rb
362
431
  - samples/hello_world.rb
363
432
  - samples/images/_cairo_access.rb
364
433
  - samples/images/_images.rb
@@ -381,6 +450,12 @@ files:
381
450
  - samples/saves/_saves.rb
382
451
  - samples/saves/_showcase.rb
383
452
  - samples/shapes/_draw_shapes.rb
453
+ - samples/shapes/_proofs.rb
454
+ - samples/sprues/_builtin_sprues.rb
455
+ - samples/sprues/_fold_sheet.rb
456
+ - samples/sprues/_hex_tiles.rb
457
+ - samples/sprues/_mints.rb
458
+ - samples/sprues/_sprue_example.rb
384
459
  - samples/text/_embed_text.rb
385
460
  - samples/text/_text.rb
386
461
  - samples/text/_text_options.rb
@@ -403,9 +478,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
403
478
  version: 2.2.0
404
479
  required_rubygems_version: !ruby/object:Gem::Requirement
405
480
  requirements:
406
- - - ">="
481
+ - - ">"
407
482
  - !ruby/object:Gem::Version
408
- version: '0'
483
+ version: 1.3.1
409
484
  requirements: []
410
485
  rubyforge_project:
411
486
  rubygems_version: 2.6.7
@@ -423,6 +498,7 @@ test_files:
423
498
  - samples/config/custom_config.rb
424
499
  - samples/data/_csv.rb
425
500
  - samples/data/_excel.rb
501
+ - samples/data/_yaml.rb
426
502
  - samples/hello_world.rb
427
503
  - samples/images/_cairo_access.rb
428
504
  - samples/images/_images.rb
@@ -445,6 +521,12 @@ test_files:
445
521
  - samples/saves/_saves.rb
446
522
  - samples/saves/_showcase.rb
447
523
  - samples/shapes/_draw_shapes.rb
524
+ - samples/shapes/_proofs.rb
525
+ - samples/sprues/_builtin_sprues.rb
526
+ - samples/sprues/_fold_sheet.rb
527
+ - samples/sprues/_hex_tiles.rb
528
+ - samples/sprues/_mints.rb
529
+ - samples/sprues/_sprue_example.rb
448
530
  - samples/text/_embed_text.rb
449
531
  - samples/text/_text.rb
450
532
  - samples/text/_text_options.rb