squib 0.13.4 → 0.14.beta1

Sign up to get free protection for your applications and to get access to all the features.
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,48 @@
1
+ module Squib
2
+ module Sprues
3
+ UNIT_REGEX = /^(\d*[.])?\d+(in|cm|mm)$/
4
+ ROTATE_REGEX = /^(\d*[.])?\d+(deg|rad)?$/
5
+ SCHEMA = {
6
+ 'sheet_width' => UNIT_REGEX,
7
+ 'sheet_height' => UNIT_REGEX,
8
+ 'card_width' => UNIT_REGEX,
9
+ 'card_height' => UNIT_REGEX,
10
+ 'position_reference' => ClassyHash::G.enum(:topleft, :center),
11
+ 'rotate' => [
12
+ :optional, Numeric,
13
+ ClassyHash::G.enum(:clockwise, :counterclockwise, :turnaround),
14
+ ROTATE_REGEX
15
+ ],
16
+ 'crop_line' => {
17
+ 'style' => [
18
+ ClassyHash::G.enum(:solid, :dotted, :dashed),
19
+ Sprues::CropLineDash::VALIDATION_REGEX
20
+ ],
21
+ 'width' => UNIT_REGEX,
22
+ 'color' => [String, Symbol],
23
+ 'overlay' => ClassyHash::G.enum(
24
+ :on_margin, :overlay_on_cards, :beneath_cards
25
+ ),
26
+ 'lines' => [[{
27
+ 'type' => ClassyHash::G.enum(:horizontal, :vertical),
28
+ 'position' => UNIT_REGEX,
29
+ 'style' => [
30
+ :optional, ClassyHash::G.enum(:solid, :dotted, :dashed)
31
+ ],
32
+ 'width' => [:optional, UNIT_REGEX],
33
+ 'color' => [:optional, String, Symbol],
34
+ 'overlay_on_cards' => [:optional, TrueClass]
35
+ }]]
36
+ },
37
+ 'cards' => [[{
38
+ 'x' => UNIT_REGEX,
39
+ 'y' => UNIT_REGEX,
40
+ 'rotate' => [
41
+ :optional, Numeric,
42
+ ClassyHash::G.enum(:clockwise, :counterclockwise, :turnaround),
43
+ ROTATE_REGEX
44
+ ]
45
+ }]]
46
+ }.freeze
47
+ end
48
+ end
@@ -6,5 +6,5 @@ module Squib
6
6
  # Most of the time this is in the alpha of the next release.
7
7
  # e.g. v0.0.5a is on its way to becoming v0.0.5
8
8
  #
9
- VERSION = '0.13.4'
9
+ VERSION = '0.14.beta1'
10
10
  end
@@ -7,11 +7,11 @@ def autoscale(str_array)
7
7
  str_array.map do | str |
8
8
  case str.length
9
9
  when 0..15
10
- 32
10
+ 10.66
11
11
  when 16..20
12
- 18
12
+ 6
13
13
  else
14
- 12
14
+ 4
15
15
  end
16
16
  end
17
17
  end
@@ -5,7 +5,7 @@ Squib::Deck.new(cards: 2, config: '_backend-config.yml') do
5
5
 
6
6
  # These are all supported by the SVG backend
7
7
  background color: :gray
8
- text str: 'Hello, world!', y: 500, width: 825, font: 'Sans bold 72', align: :center
8
+ text str: 'Hello, world!', y: 500, width: 825, font: 'Sans bold 24', align: :center
9
9
  rect x: 38, y: 38, width: 750, height: 1050, x_radius: 38, y_radius: 38
10
10
  circle x: 100, y: 400, radius: 25
11
11
  triangle x1: 100, y1: 425, x2: 125, y2: 475, x3: 75, y3: 475
@@ -8,9 +8,9 @@ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
8
8
  rect x: 38, y: 38, width: 750, height: 1050, radius: 38
9
9
  rect x: 75, y: 75, width: 128, height: 128, radius: 25
10
10
 
11
- text str: data['name'], x: 220, y: 78, font: 'Arial 54'
11
+ text str: data['name'], x: 220, y: 78, font: 'Arial 18'
12
12
  text str: data['level'], x: 75, y: 85, width: 128,
13
- font: 'Arial 72', align: :center
13
+ font: 'Arial 24', align: :center
14
14
 
15
15
  png range: [0, 2], file: 'shiny-purse.png', x: 620, y: 75
16
16
  svg range: 1..2, file: 'spanner.svg', x: 620, y: 218
@@ -26,7 +26,7 @@ Squib::Deck.new(width: 3000, height: 1500) do
26
26
  x, y, w, h = 0, 0, 300, 50
27
27
  colors.each_with_index do |color, i|
28
28
  rect x: x, y: y, width: w, height: h, fill_color: color
29
- text str: color.to_s, x: x + 5, y: y + 13, font: 'Sans Bold 16',
29
+ text str: color.to_s, x: x + 5, y: y + 13, font: 'Sans Bold 5',
30
30
  color: (Cairo::Color.parse(color).to_hsv.v > 0.9) ? '#000' : '#fff'
31
31
  y += h
32
32
  if y > @height
@@ -27,7 +27,7 @@ Squib::Deck.new do
27
27
  radius: 15, stroke_color: '#0000'
28
28
 
29
29
  # Alpha transparency can be used too
30
- text str: 'Hello, world!', x: 75, y: 700, font: 'Sans Bold 72',
30
+ text str: 'Hello, world!', x: 75, y: 700, font: 'Sans Bold 24',
31
31
  color: '(0,0)(825,0) #000f@0.0 #0000@1.0'
32
32
 
33
33
  save_png prefix: 'gradient_'
@@ -3,18 +3,18 @@ require 'squib'
3
3
  Squib::Deck.new(config: 'config_text_markup.yml') do
4
4
  background color: :white
5
5
  text str: %{"'Yaml ain't markup', he says"},
6
- x: 10, y: 10, width: 300, height: 200, font: 'Serif 20',
6
+ x: 10, y: 10, width: 300, height: 200, font: 'Serif 7',
7
7
  markup: true, hint: :cyan
8
8
 
9
9
  text str: 'Notice also the antialiasing method.',
10
- x: 320, y: 10, width: 300, height: 200, font: 'Arial Bold 20'
10
+ x: 320, y: 10, width: 300, height: 200, font: 'Arial Bold 7'
11
11
 
12
12
  save_png prefix: 'config_text_'
13
13
  end
14
14
 
15
15
  Squib::Deck.new(config: 'config_disable_quotes.yml') do
16
16
  text str: %{This has typographic sugar --- and ``explicit'' quotes --- but the quotes are "dumb"},
17
- x: 10, y: 10, width: 300, height: 200, font: 'Serif 20',
17
+ x: 10, y: 10, width: 300, height: 200, font: 'Serif 7',
18
18
  markup: true, hint: :cyan
19
19
  save_png prefix: 'config_disable_text_'
20
20
  end
@@ -6,7 +6,7 @@ Squib::Deck.new(config: 'custom-config.yml') do
6
6
 
7
7
  # Hints can be turned on in the config file
8
8
  text str: 'The Title', x: 0, y: 78, width: 825,
9
- font: 'Arial 72', align: :center
9
+ font: 'Arial 24', align: :center
10
10
 
11
11
  # Progress bars are shown for these commands
12
12
  # And images are taken from img_dir, not the cwd.
@@ -5,8 +5,8 @@ Squib::Deck.new(cards: 2) do
5
5
 
6
6
  # Outputs a hash of arrays with the header names as keys
7
7
  data = csv file: 'sample.csv'
8
- text str: data['Type'], x: 250, y: 55, font: 'Arial 54'
9
- text str: data['Level'], x: 65, y: 65, font: 'Arial 72'
8
+ text str: data['Type'], x: 250, y: 55, font: 'Arial 18'
9
+ text str: data['Level'], x: 65, y: 65, font: 'Arial 24'
10
10
 
11
11
  save format: :png, prefix: 'sample_csv_'
12
12
 
@@ -21,7 +21,7 @@ num_cards = data['Name'].size # ...but 4 cards!
21
21
  Squib::Deck.new(cards: num_cards) do
22
22
  background color: :white
23
23
  rect # card border
24
- text str: data['Name'], font: 'Arial 54'
24
+ text str: data['Name'], font: 'Arial 18'
25
25
  save_sheet prefix: 'sample_csv_qty_', columns: 4
26
26
  end
27
27
 
@@ -7,9 +7,9 @@ Squib::Deck.new(cards: 3) do
7
7
  # Outputs a hash of arrays with the header names as keys
8
8
  data = xlsx file: 'sample.xlsx'
9
9
 
10
- text str: data['Name'], x: 250, y: 55, font: 'Arial 54'
11
- text str: data['Level'], x: 65, y: 65, font: 'Arial 72'
12
- text str: data['Description'], x: 65, y: 600, font: 'Arial 36'
10
+ text str: data['Name'], x: 250, y: 55, font: 'Arial 18'
11
+ text str: data['Level'], x: 65, y: 65, font: 'Arial 24'
12
+ text str: data['Description'], x: 65, y: 600, font: 'Arial 12'
13
13
 
14
14
  save format: :png, prefix: 'sample_excel_' # save to individual pngs
15
15
  end
@@ -21,7 +21,7 @@ num_cards = data['Name'].size # ...but 4 cards
21
21
  Squib::Deck.new(cards: num_cards) do
22
22
  background color: :white
23
23
  rect # card border
24
- text str: data['Name'], font: 'Arial 54'
24
+ text str: data['Name'], font: 'Arial 18'
25
25
  save_sheet prefix: 'sample_xlsx_qty_', columns: 4
26
26
  end
27
27
 
@@ -0,0 +1,12 @@
1
+ require 'squib'
2
+
3
+ Squib::Deck.new(cards: 2) do
4
+ background color: :white
5
+
6
+ # Outputs a hash of arrays with the header names as keys
7
+ data = yaml file: 'sample.yaml'
8
+ text str: data['Type'], x: 250, y: 55, font: 'Arial 18'
9
+ text str: data['Level'], x: 65, y: 65, font: 'Arial 24'
10
+
11
+ save format: :png, prefix: 'sample_yaml_'
12
+ end
@@ -30,7 +30,7 @@ Squib::Deck.new(width: 1000, height: 3000) do
30
30
  png file: 'sprites.png', x: x - 50, y: y - 50 # entire sprite sheet
31
31
  rect x: x - 50, y: y - 50, width: 100, height: 100, # draw the crop line
32
32
  radius: 15, dash: '3 3', stroke_color: 'red', stroke_width: 3
33
- text str: '➜', font: 'Sans Bold 36', x: x + 150, y: y - 35
33
+ text str: '➜', font: 'Sans Bold 12', x: x + 150, y: y - 35
34
34
  png file: 'sprites.png', x: x + 200, y: y - 50, # just the robot golem image
35
35
  crop_x: 0, crop_y: 0, crop_corner_radius: 15,
36
36
  crop_width: 100, crop_height: 100
@@ -38,7 +38,7 @@ Squib::Deck.new(width: 1000, height: 3000) do
38
38
  png file: 'sprites.png', x: x - 50, y: y + 50 # entire sprite sheet again
39
39
  rect x: x + 14, y: y + 50, width: 65, height: 65, # highlight the crop
40
40
  radius: 25, dash: '3 3', stroke_color: 'red', stroke_width: 3
41
- text str: '➜', font: 'Sans Bold 36', x: x + 150, y: y + 50
41
+ text str: '➜', font: 'Sans Bold 12', x: x + 150, y: y + 50
42
42
  png file: 'sprites.png', x: x + 225, y: y + 50, # just the drakkar ship image, rotated
43
43
  crop_x: 64, crop_y: 0, crop_corner_x_radius: 25, crop_corner_y_radius: 25,
44
44
  crop_width: 64, crop_height: 64, angle: Math::PI / 6
@@ -95,5 +95,8 @@ Squib::Deck.new(width: 825, height: 1125, cards: 1, config: 'load_images_config.
95
95
  svg file: 'spanner.svg', width: :deck, height: :deck,
96
96
  force_id: true, id: '' # <-- the important part
97
97
 
98
+ # Squib can handle incorrectly formatted svg files
99
+ svg file: 'bad-svg.svg'
100
+
98
101
  save prefix: 'load_images_', format: :png
99
102
  end
@@ -15,8 +15,8 @@ Squib::Deck.new(height: (game_chars.size / cols + 1) * cell_height,
15
15
  game_chars.each_with_index do |c, i|
16
16
  rect fill_color: %w(#eeee #ffff)[i % 2],
17
17
  width: cell_width, height: cell_height, x: x, y: y
18
- text str: c.inspect, font: 'Sans 42', x: x, y: y
19
- text str: c, font: 'Sans,Segoe UI Symbol 42', x: x + 300, y: y
18
+ text str: c.inspect, font: 'Sans 14', x: x, y: y
19
+ text str: c, font: 'Sans,Segoe UI Symbol 14', x: x + 300, y: y
20
20
  x += cell_width
21
21
  if i % cols == cols - 1
22
22
  x = 1
@@ -4,11 +4,11 @@ Squib::Deck.new cards: 1 do
4
4
  background color: '#252322'
5
5
  rect fill_color: '#0B3736',
6
6
  x: 38, y: 38, width: 750, height: 1050, radius: 38
7
- text str: 'Robot Golem', font: 'True Crimes, Sans 72',
7
+ text str: 'Robot Golem', font: 'True Crimes, Sans 24',
8
8
  align: :center, x: 75, width: :deck, color: '#DFDFE1', y: 90
9
9
  svg file: 'auto-repair.svg', x: 75, y: 75, width: 100, height: :scale
10
10
  svg file: 'robot-golem.svg', x: 75, y: 300, width: 675, height: :scale
11
- text str: 'Draw two cards', font: 'Serif 36',
11
+ text str: 'Draw two cards', font: 'Serif 12',
12
12
  align: :center, width: :deck, color: '#DFDFE1', y: 1000
13
13
  save_png prefix: 'part2_'
14
14
  end
@@ -5,7 +5,7 @@ require 'squib'
5
5
  Squib::Deck.new(layout: 'fantasy.yml') do
6
6
  background color: 'white'
7
7
 
8
- set font: 'Times New Roman,Serif 32'
8
+ set font: 'Times New Roman,Serif 10.5'
9
9
  hint text: '#333' # show extents of text boxes to demo the layout
10
10
 
11
11
  text str: 'fantasy.yml', layout: :title
@@ -26,7 +26,7 @@ end
26
26
  Squib::Deck.new(layout: 'economy.yml') do
27
27
  background color: 'white'
28
28
 
29
- set font: 'Times New Roman,Serif 32'
29
+ set font: 'Times New Roman,Serif 10.5'
30
30
  hint text: '#333' # show extents of text boxes to demo the layout
31
31
 
32
32
  text str: 'economy.yml', layout: :title
@@ -54,8 +54,8 @@ end
54
54
 
55
55
  Squib::Deck.new(layout: 'playing-card.yml') do
56
56
  background color: 'white'
57
- text str: "A\u2660", layout: :bonus_ul, font: 'Sans bold 100', hint: :red
58
- text str: "A\u2660", layout: :bonus_lr, font: 'Sans bold 100', hint: :red
57
+ text str: "A\u2660", layout: :bonus_ul, font: 'Sans bold 33', hint: :red
58
+ text str: "A\u2660", layout: :bonus_lr, font: 'Sans bold 33', hint: :red
59
59
  text str: 'artwork here', layout: :art, hint: :red
60
60
  save_png prefix: 'layouts_builtin_playing_card_'
61
61
  end
@@ -72,3 +72,26 @@ Squib::Deck.new(layout: 'tuck_box.yml', width: 2325, height: 1950) do
72
72
 
73
73
  save_png prefix: 'layouts_builtin_tuck_box_'
74
74
  end
75
+
76
+ Squib::Deck.new(layout: 'party.yml') do
77
+ background color: 'white'
78
+ # hint text: :black # uncomment to see the text box boundaries
79
+
80
+ rect layout: :title_box,
81
+ fill_color: :deep_sky_blue, stroke_width: 0
82
+ text str: "A SILLY NAME", layout: :title
83
+ text str: '✔', layout: :type_icon
84
+ text str: 'TYPE', layout: :type
85
+ text str: 'A Silly Name', layout: :title_middle
86
+ rect fill_color: :black, layout: :middle_rect
87
+
88
+ str = 'Rule or story text. Be funny ha ha ha this is a party.'
89
+ text str: str, layout: :rule_top
90
+ text str: str, layout: :rule_bottom
91
+
92
+ text str: 'Tiny text', layout: :copyright
93
+
94
+ rect layout: :safe
95
+ rect layout: :cut
96
+ save_png prefix: 'layouts_builtin_party_'
97
+ end
@@ -44,8 +44,8 @@ end
44
44
 
45
45
  # Built-in layouts are easy to use and extend
46
46
  Squib::Deck.new(layout: 'playing-card.yml') do
47
- text str: "A\u2660", layout: :bonus_ul, font: 'Sans bold 100', hint: :red
48
- text str: "A\u2660", layout: :bonus_lr, font: 'Sans bold 100', hint: :red
47
+ text str: "A\u2660", layout: :bonus_ul, font: 'Sans bold 33', hint: :red
48
+ text str: "A\u2660", layout: :bonus_lr, font: 'Sans bold 33', hint: :red
49
49
  text str: 'artwork here', layout: :art, hint: :red
50
50
  save_png prefix: 'layout_builtin_playing_card_'
51
51
  end
@@ -6,8 +6,8 @@ Squib::Deck.new(width: 825, height: 1125, cards: 1) do
6
6
  rect x: 38, y: 38, width: 750, height: 1050, x_radius: 38, y_radius: 38
7
7
  rect x: 75, y: 75, width: 128, height: 128, x_radius: 25, y_radius: 25
8
8
 
9
- text str: 'Mastermind', x: 220, y: 78, font: 'Arial 54'
10
- text str: 3, x: 75, y: 85, width: 128, font: 'Arial 72', align: :center
9
+ text str: 'Mastermind', x: 220, y: 78, font: 'Arial 18'
10
+ text str: 3, x: 75, y: 85, width: 128, font: 'Arial 24', align: :center
11
11
 
12
12
  # TGC proof overlay (using alpha-transparency)
13
13
  png file: 'pokercard.png', x:0, y:0, alpha: 0.5
@@ -7,12 +7,12 @@ data = { 'name' => ['Thief', 'Grifter', 'Mastermind'],
7
7
  Squib::Deck.new(width: 825, height: 1125, cards: 3) do
8
8
  # Default range is :all
9
9
  background color: :white
10
- text str: data['name'], x: 250, y: 55, font: 'Arial 54'
11
- text str: data['level'], x: 65, y: 40, font: 'Arial 72'
10
+ text str: data['name'], x: 250, y: 55, font: 'Arial 18'
11
+ text str: data['level'], x: 65, y: 40, font: 'Arial 24'
12
12
 
13
13
  # Could be explicit about using :all, too
14
14
  text range: :all,
15
- str: data['type'], x: 40, y: 128, font: 'Arial 18',
15
+ str: data['type'], x: 40, y: 128, font: 'Arial 6',
16
16
  width: 100, align: :center
17
17
 
18
18
  # Ranges are inclusive, zero-based
@@ -4,7 +4,7 @@ Squib::Deck.new(cards: 8, layout: 'playing-card.yml') do
4
4
  background color: :cyan
5
5
  rect x: 37, y: 37, width: 750, height: 1050, fill_color: :black, radius: 25
6
6
  rect x: 75, y: 75, width: 675, height: 975, fill_color: :white, radius: 20
7
- text str: ('A'..'Z').to_a, layout: :bonus_ul, font: 'Sans bold 100'
7
+ text str: ('A'..'Z').to_a, layout: :bonus_ul, font: 'Sans bold 33'
8
8
 
9
9
  # Defaults are sensible
10
10
  hand # saves to _output/hand.png
@@ -22,4 +22,8 @@ Squib::Deck.new(cards: 8) do
22
22
  crop_stroke_dash: '5 5', crop_stroke_color: :red, crop_stroke_width: 4.0,
23
23
  crop_margin_left: '0.3in', crop_margin_right: '0.45in',
24
24
  crop_margin_top: '0.4in', crop_margin_bottom: '0.85in'
25
+
26
+ # Right to left printing for duplex
27
+ save_pdf file: 'save_pdf-crops-rtl.pdf', crop_marks: true, rtl: true
28
+
25
29
  end
@@ -7,7 +7,7 @@ Squib::Deck.new(width: 825, height: 1125, cards: 16) do
7
7
  rect x: 38, y: 38, width: 750, height: 1050,
8
8
  x_radius: 38, y_radius: 38, stroke: 3.0, dash: '4 4'
9
9
 
10
- text str: (1..16).to_a, x: 220, y: 78, font: 'Arial 54'
10
+ text str: (1..16).to_a, x: 220, y: 78, font: 'Arial 18'
11
11
 
12
12
  # Here's what a regular save_png looks like for just the first card
13
13
  save_png range: 0, prefix: 'save_png_'
@@ -42,4 +42,10 @@ Squib::Deck.new(width: 825, height: 1125, cards: 16) do
42
42
  range: 0..5,
43
43
  columns: 2, rows: 2,
44
44
  margin: 75, gap: 5, trim: 37
45
+
46
+ # Sheets can arrange left-to-right and right-to-left
47
+ save_sheet prefix: 'save_sheet_rtl_',
48
+ range: 0..1, rtl: true,
49
+ columns: 2, rows: 1,
50
+ margin: 75, gap: 5, trim: 37
45
51
  end
@@ -7,7 +7,7 @@ Squib::Deck.new(cards: 4) do
7
7
  rect fill_color: '#DED4B9', x: 78, y: 78,
8
8
  width: '2.25in', height: '3.25in', radius: 32
9
9
  text str: %w(Grifter Thief Thug Kingpin),
10
- font: 'Helvetica,Sans weight=800 120',
10
+ font: 'Helvetica,Sans weight=800 40',
11
11
  x: 78, y: 78, width: '2.25in', align: :center
12
12
  svg file: 'spanner.svg', x: (825 - 500) / 2, y: 500, width: 500, height: 500
13
13
 
@@ -18,7 +18,11 @@ Squib::Deck.new do
18
18
  ellipse x: 675, y: 105, width: 65, height: 100,
19
19
  stroke_width: 5, stroke_color: :orange, angle: -0.2
20
20
 
21
- circle x: 600, y: 600, radius: 75,
21
+ circle x: 450, y: 600, radius: 75,
22
+ fill_color: :gray, stroke_color: :green, stroke_width: 8.0
23
+
24
+ circle x: 600, y: 600, radius: 75, # partial circle
25
+ arc_start: 1, arc_end: 4, arc_direction: :counter_clockwise,
22
26
  fill_color: :gray, stroke_color: :green, stroke_width: 8.0
23
27
 
24
28
  triangle x1: 50, y1: 50,
@@ -0,0 +1,22 @@
1
+ require 'squib'
2
+
3
+ Squib::Deck.new do
4
+ background color: :white
5
+ safe_zone # defaults TheGameCrafter 0.25in around the edge, rounded corners
6
+ cut_zone # defaults TheGameCrafter 0.125in around the edge
7
+
8
+ text str: 'Poker card with proof lines', x: '0.25in', y: '0.25in'
9
+ save_png prefix: 'proof_poker_'
10
+ end
11
+
12
+
13
+ Squib::Deck.new(width:'2in', height: '1in')do
14
+ background color: :white
15
+ safe_zone stroke_color: :purple, margin: '0.1in'
16
+ cut_zone stroke_color: :purple, margin: '0.05in'
17
+
18
+ text str: 'Small card with proof lines', x: '0.1in', y: '0.1in',
19
+ font: 'Arial 10'
20
+
21
+ save_png prefix: 'proof_tiny_'
22
+ end
@@ -0,0 +1,19 @@
1
+ require 'squib'
2
+
3
+ Squib::Deck.new(width: '50mm', height: '70mm', cards: 9) do
4
+ background color: :white
5
+ rect stroke_width: 5, stroke_color: :red
6
+ text str: (0..9).map{ |i| "Card! #{i}\n50x77mm" },
7
+ font: 'Sans 32', align: :center, valign: :middle,
8
+ height: :deck, width: :deck
9
+
10
+ %w(
11
+ a4_poker_card_8up.yml
12
+ a4_euro_card.yml
13
+ a4_poker_card_9up.yml
14
+ a4_usa_card.yml
15
+ letter_poker_card_9up.yml
16
+ ).each do |builtin|
17
+ save_sheet sprue: builtin, prefix: "sprue_#{builtin}_"
18
+ end
19
+ end