squib 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +14 -0
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.md +201 -175
  5. data/Gemfile +2 -4
  6. data/README.md +650 -645
  7. data/RELEASE TODO.md +18 -18
  8. data/Rakefile +106 -99
  9. data/appveyor.yml +29 -0
  10. data/lib/squib.rb +32 -32
  11. data/lib/squib/api/background.rb +20 -20
  12. data/lib/squib/api/data.rb +131 -131
  13. data/lib/squib/api/image.rb +108 -90
  14. data/lib/squib/api/save.rb +151 -149
  15. data/lib/squib/api/settings.rb +35 -35
  16. data/lib/squib/api/shapes.rb +255 -230
  17. data/lib/squib/api/text.rb +65 -65
  18. data/lib/squib/api/text_embed.rb +96 -96
  19. data/lib/squib/args/arg_loader.rb +138 -138
  20. data/lib/squib/args/box.rb +54 -54
  21. data/lib/squib/args/card_range.rb +32 -32
  22. data/lib/squib/args/color_validator.rb +11 -11
  23. data/lib/squib/args/coords.rb +32 -32
  24. data/lib/squib/args/dir_validator.rb +16 -16
  25. data/lib/squib/args/draw.rb +92 -92
  26. data/lib/squib/args/embed_adjust.rb +25 -25
  27. data/lib/squib/args/embed_key.rb +17 -17
  28. data/lib/squib/args/hand_special.rb +37 -37
  29. data/lib/squib/args/import.rb +39 -39
  30. data/lib/squib/args/input_file.rb +37 -37
  31. data/lib/squib/args/paint.rb +43 -43
  32. data/lib/squib/args/paragraph.rb +116 -115
  33. data/lib/squib/args/save_batch.rb +63 -60
  34. data/lib/squib/args/scale_box.rb +53 -53
  35. data/lib/squib/args/sheet.rb +72 -72
  36. data/lib/squib/args/showcase_special.rb +38 -38
  37. data/lib/squib/args/svg_special.rb +37 -37
  38. data/lib/squib/args/transform.rb +60 -24
  39. data/lib/squib/args/typographer.rb +117 -117
  40. data/lib/squib/card.rb +66 -67
  41. data/lib/squib/conf.rb +131 -117
  42. data/lib/squib/constants.rb +12 -178
  43. data/lib/squib/deck.rb +113 -113
  44. data/lib/squib/graphics/cairo_context_wrapper.rb +113 -99
  45. data/lib/squib/graphics/gradient_regex.rb +46 -46
  46. data/lib/squib/graphics/hand.rb +42 -42
  47. data/lib/squib/graphics/image.rb +103 -76
  48. data/lib/squib/graphics/save_doc.rb +103 -103
  49. data/lib/squib/graphics/save_images.rb +39 -33
  50. data/lib/squib/graphics/shapes.rb +135 -119
  51. data/lib/squib/graphics/showcase.rb +85 -85
  52. data/lib/squib/graphics/text.rb +176 -176
  53. data/lib/squib/layout_parser.rb +91 -91
  54. data/lib/squib/layouts/economy.yml +85 -85
  55. data/lib/squib/layouts/fantasy.yml +101 -101
  56. data/lib/squib/layouts/hand.yml +62 -62
  57. data/lib/squib/layouts/playing-card.yml +35 -35
  58. data/lib/squib/layouts/tuck_box.yml +45 -45
  59. data/lib/squib/project_template/IDEAS.md +22 -0
  60. data/lib/squib/project_template/PLAYTESTING.md +26 -0
  61. data/lib/squib/project_template/RULES.md +21 -0
  62. data/lib/squib/project_template/config.yml +49 -45
  63. data/lib/squib/sample_helpers.rb +34 -0
  64. data/lib/squib/version.rb +10 -10
  65. data/samples/autoscale_font/_autoscale_font.rb +29 -0
  66. data/samples/color_shortcuts.rb +6 -6
  67. data/samples/csv_import.rb +26 -26
  68. data/samples/custom-config.yml +5 -5
  69. data/samples/custom_config.rb +18 -18
  70. data/samples/draw_shapes.rb +48 -45
  71. data/samples/embed_text.rb +88 -88
  72. data/samples/excel.rb +55 -55
  73. data/samples/hand.rb +24 -24
  74. data/samples/images/_images.rb +104 -0
  75. data/samples/intro/01_hello.rb +9 -0
  76. data/samples/intro/02_options.rb +15 -0
  77. data/samples/intro/03_layout.rb +12 -0
  78. data/samples/intro/04_arrays.rb +16 -0
  79. data/samples/intro/05_excel.rb +15 -0
  80. data/samples/layouts.rb +62 -62
  81. data/samples/layouts_builtin.rb +51 -51
  82. data/samples/load_images.rb +99 -78
  83. data/samples/load_images_config.yml +1 -0
  84. data/samples/quantity_explosion.csv +2 -2
  85. data/samples/ranges.rb +64 -64
  86. data/samples/sample.csv +2 -2
  87. data/samples/saves.rb +9 -1
  88. data/samples/sprites.png +0 -0
  89. data/samples/text/_text.rb +46 -0
  90. data/samples/text_options.rb +102 -102
  91. data/spec/api/api_data_spec.rb +117 -117
  92. data/spec/api/api_settings_spec.rb +37 -37
  93. data/spec/args/box_spec.rb +127 -127
  94. data/spec/args/draw_spec.rb +101 -95
  95. data/spec/args/embed_key_spec.rb +13 -13
  96. data/spec/args/input_file_spec.rb +21 -21
  97. data/spec/args/paint_spec.rb +21 -21
  98. data/spec/args/paragraph_spec.rb +152 -152
  99. data/spec/args/range_spec.rb +40 -40
  100. data/spec/args/save_batch_spec.rb +51 -51
  101. data/spec/args/scale_box_spec.rb +71 -71
  102. data/spec/args/sheet_spec.rb +58 -58
  103. data/spec/args/showcase_special_spec.rb +15 -15
  104. data/spec/args/transform_spec.rb +25 -0
  105. data/spec/card_spec.rb +11 -0
  106. data/spec/conf_spec.rb +13 -3
  107. data/spec/data/conf/unrecognized.yml +4 -0
  108. data/spec/data/csv/qty.csv +2 -2
  109. data/spec/data/csv/qty_named.csv +2 -2
  110. data/spec/data/csv/with_spaces.csv +2 -2
  111. data/spec/data/samples/autoscale_font.rb.txt +84 -84
  112. data/spec/data/samples/basic.rb.txt +227 -209
  113. data/spec/data/samples/config_text_markup.rb.txt +72 -72
  114. data/spec/data/samples/csv_import.rb.txt +213 -213
  115. data/spec/data/samples/custom_config.rb.txt +57 -48
  116. data/spec/data/samples/draw_shapes.rb.txt +555 -3
  117. data/spec/data/samples/embed_text.rb.txt +283 -283
  118. data/spec/data/samples/excel.rb.txt +661 -661
  119. data/spec/data/samples/gradients.rb.txt +77 -79
  120. data/spec/data/samples/hand.rb.txt +538 -538
  121. data/spec/data/samples/hello_world.rb.txt +36 -36
  122. data/spec/data/samples/load_images.rb.txt +170 -0
  123. data/spec/data/samples/portrait-landscape.rb.txt +51 -49
  124. data/spec/data/samples/ranges.rb.txt +472 -460
  125. data/spec/data/samples/saves.rb.txt +810 -801
  126. data/spec/data/samples/showcase.rb.txt +5926 -5910
  127. data/spec/data/samples/text_options.rb.txt +1125 -1125
  128. data/spec/data/samples/tgc_proofs.rb.txt +95 -81
  129. data/spec/graphics/cairo_context_wrapper_spec.rb +104 -84
  130. data/spec/graphics/graphics_save_doc_spec.rb +67 -67
  131. data/spec/samples/diff-with-css.example.html +39 -0
  132. data/spec/samples/expected/load_images_00.png +0 -0
  133. data/spec/samples/expected/shape_00.png +0 -0
  134. data/spec/samples/run_samples_spec.rb +17 -0
  135. data/spec/samples/samples_regression_spec.rb +72 -82
  136. data/spec/spec_helper.rb +9 -1
  137. data/squib.gemspec +49 -48
  138. data/squib.sublime-project +42 -42
  139. metadata +94 -48
  140. data/spec/graphics/graphics_images_spec.rb +0 -94
@@ -0,0 +1,34 @@
1
+ module Squib
2
+
3
+ # Some helper methods specifically for samples
4
+ #@api private
5
+ #:nodoc:
6
+ class Deck
7
+
8
+ # Draw graph paper for samples
9
+ def draw_graph_paper(width, height)
10
+ background color: 'white'
11
+ grid width: 50, height: 50, stroke_color: '#659ae9', stroke_width: 1.5
12
+ grid width: 200, height: 200, stroke_color: '#659ae9', stroke_width: 3, x: 50, y: 50
13
+ (50..height).step(200) do |y|
14
+ text str: "y=#{y}", x: 3, y: y - 18, font: 'Open Sans, Sans 10'
15
+ end
16
+ end
17
+
18
+ # Define a set of samples on some graph paper
19
+ def sample(str)
20
+ @sample_x ||= 100
21
+ @sample_y ||= 100
22
+ rect x: 460, y: @sample_y - 40, width: 600,
23
+ height: 180, fill_color: '#FFD655', stroke_color: 'black', radius: 15
24
+ text str: str, x: 460, y: @sample_y - 40,
25
+ width: 540, height: 180,
26
+ valign: 'middle', align: 'center',
27
+ font: 'Times New Roman,Serif 24'
28
+ yield @sample_x, @sample_y
29
+ @sample_y += 200
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -1,10 +1,10 @@
1
- module Squib
2
-
3
- # The next version to be released.
4
- # Uses semantic versioning: http://semver.org/
5
- #
6
- # Most of the time this is in the alpha of the next release.
7
- # e.g. v0.0.5a is on its way to becoming v0.0.5
8
- #
9
- VERSION = '0.8.0'
10
- end
1
+ module Squib
2
+
3
+ # The next version to be released.
4
+ # Uses semantic versioning: http://semver.org/
5
+ #
6
+ # Most of the time this is in the alpha of the next release.
7
+ # e.g. v0.0.5a is on its way to becoming v0.0.5
8
+ #
9
+ VERSION = '0.9.0'
10
+ end
@@ -0,0 +1,29 @@
1
+ require 'squib'
2
+
3
+ # Here's an example of being able to scale a font
4
+ # based on the length of individual string.
5
+ # Handy for making minor font scales to fill text boxes.
6
+ def autoscale(str_array)
7
+ str_array.map do | str |
8
+ case str.length
9
+ when 0..15
10
+ 32
11
+ when 16..20
12
+ 18
13
+ else
14
+ 12
15
+ end
16
+ end
17
+ end
18
+
19
+ Squib::Deck.new(width: 300, height: 100, cards: 3) do
20
+ background color: :white
21
+ rect
22
+ title = ['Short & Big',
23
+ 'Medium Length & Size',
24
+ 'Super duper long string here, therefore a smaller font.']
25
+ text str: title, font: 'Arial', font_size: autoscale(title),
26
+ x: 10, y:10, align: :center, width: 280, ellipsize: false, hint: :red
27
+
28
+ save_sheet dir: '.', columns: 3
29
+ end
@@ -1,6 +1,6 @@
1
- require 'squib'
2
-
3
- Squib::Deck.new do
4
- circle color: 'black', fill_color: 'black'
5
- save_png prefix: 'color_shortcuts_'
6
- end
1
+ require 'squib'
2
+
3
+ Squib::Deck.new do
4
+ circle color: 'black', fill_color: 'black'
5
+ save_png prefix: 'color_shortcuts_'
6
+ end
@@ -1,26 +1,26 @@
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 = 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'
10
-
11
- save format: :png, prefix: 'sample_csv_'
12
-
13
- # You can also specify the sheet, starting at 0
14
- data = xlsx file: 'sample.xlsx', sheet: 2
15
- end
16
-
17
- # CSV is also a Squib-module-level function, so this also works:
18
- data = Squib.csv file: 'quantity_explosion.csv' # 2 rows...
19
- num_cards = data['Name'].size # ...but 4 cards!
20
-
21
- Squib::Deck.new(cards: num_cards) do
22
- background color: :white
23
- rect # card border
24
- text str: data['Name'], font: 'Arial 54'
25
- save_sheet prefix: 'sample_csv_qty_', columns: 4
26
- end
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 = 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'
10
+
11
+ save format: :png, prefix: 'sample_csv_'
12
+
13
+ # You can also specify the sheet, starting at 0
14
+ data = xlsx file: 'sample.xlsx', sheet: 2
15
+ end
16
+
17
+ # CSV is also a Squib-module-level function, so this also works:
18
+ data = Squib.csv file: 'quantity_explosion.csv' # 2 rows...
19
+ num_cards = data['Name'].size # ...but 4 cards!
20
+
21
+ Squib::Deck.new(cards: num_cards) do
22
+ background color: :white
23
+ rect # card border
24
+ text str: data['Name'], font: 'Arial 54'
25
+ save_sheet prefix: 'sample_csv_qty_', columns: 4
26
+ end
@@ -1,5 +1,5 @@
1
- progress_bars: true
2
- text_hint: '#FF0000'
3
- custom_colors:
4
- foo: '#ccc'
5
- img_dir: customconfig-imgdir
1
+ progress_bars: true
2
+ text_hint: '#FF0000'
3
+ custom_colors:
4
+ foo: '#ccc'
5
+ img_dir: customconfig-imgdir
@@ -1,18 +1,18 @@
1
- require 'squib'
2
-
3
- Squib::Deck.new(config: 'custom-config.yml') do
4
- # Custom color defined in our config
5
- background color: :foo
6
-
7
- # Hints can be turned on in the config file
8
- text str: 'The Title', x: 0, y: 78, width: 825,
9
- font: 'Arial 72', align: :center
10
-
11
- # Progress bars are shown for these commands
12
- # And images are taken from img_dir, not the cwd.
13
- png file: 'shiny-purse2.png', x: 620, y: 75
14
- svg file: 'spanner2.svg', x: 620, y: 218
15
- save_png prefix: 'custom-config_'
16
- save_pdf file: 'custom-config-out.pdf'
17
-
18
- end
1
+ require 'squib'
2
+
3
+ Squib::Deck.new(config: 'custom-config.yml') do
4
+ # Custom color defined in our config
5
+ background color: :foo
6
+
7
+ # Hints can be turned on in the config file
8
+ text str: 'The Title', x: 0, y: 78, width: 825,
9
+ font: 'Arial 72', align: :center
10
+
11
+ # Progress bars are shown for these commands
12
+ # And images are taken from img_dir, not the cwd.
13
+ png file: 'shiny-purse2.png', x: 620, y: 75
14
+ svg file: 'spanner2.svg', x: 620, y: 218
15
+ save_png prefix: 'custom-config_'
16
+ save_pdf file: 'custom-config-out.pdf'
17
+
18
+ end
@@ -1,45 +1,48 @@
1
- require 'squib'
2
-
3
- Squib::Deck.new do
4
- background color: :white
5
-
6
- rect x: 300, y: 100, width: 200, height: 50, dash: '4 2'
7
-
8
- rect x: 300, y: 300, width: 400, height: 400,
9
- fill_color: :blue, stroke_color: :red, stroke_width: 50.0,
10
- join: 'bevel'
11
-
12
- circle x: 600, y: 600, radius: 75,
13
- fill_color: :gray, stroke_color: :green, stroke_width: 8.0
14
-
15
- triangle x1: 50, y1: 50,
16
- x2: 150, y2: 150,
17
- x3: 75, y3: 250,
18
- fill_color: :gray, stroke_color: :green, stroke_width: 3.0
19
-
20
- line x1: 50, y1: 550,
21
- x2: 150, y2: 650,
22
- stroke_width: 25.0
23
-
24
- curve x1: 50, y1: 850, cx1: 150, cy1: 700,
25
- x2: 625, y2: 900, cx2: 150, cy2: 700,
26
- stroke_width: 12.0, stroke_color: :cyan,
27
- fill_color: :burgundy, cap: 'round'
28
-
29
- ellipse x: 50, y: 925, width: 200, height: 100,
30
- stroke_width: 5.0, stroke_color: :cyan,
31
- fill_color: :burgundy
32
-
33
- star x: 300, y: 1000, n: 5, inner_radius: 15, outer_radius: 40,
34
- fill_color: :cyan, stroke_color: :burgundy, stroke_width: 5
35
-
36
- #default draw is fill-then-stroke. Can be changed to stroke-then-fill
37
- star x: 375, y: 1000, n: 5, inner_radius: 15, outer_radius: 40,
38
- fill_color: :cyan, stroke_color: :burgundy,
39
- stroke_width: 5, stroke_strategy: :stroke_first
40
-
41
- polygon x: 500, y: 1000, n: 5, radius: 25, angle: Math::PI / 2,
42
- fill_color: :cyan, stroke_color: :burgundy, stroke_width: 2
43
-
44
- save_png prefix: 'shape_'
45
- end
1
+ require 'squib'
2
+
3
+ Squib::Deck.new do
4
+ background color: :white
5
+
6
+ grid x: 10, y: 10, width: 50, height: 50, stroke_color: '#0066FF', stroke_width: 1.5
7
+ grid x: 10, y: 10, width: 200, height: 200, stroke_color: '#0066FF', stroke_width: 3
8
+
9
+ rect x: 305, y: 105, width: 200, height: 50, dash: '4 2'
10
+
11
+ rect x: 300, y: 300, width: 400, height: 400,
12
+ fill_color: :blue, stroke_color: :red, stroke_width: 50.0,
13
+ join: 'bevel'
14
+
15
+ circle x: 600, y: 600, radius: 75,
16
+ fill_color: :gray, stroke_color: :green, stroke_width: 8.0
17
+
18
+ triangle x1: 50, y1: 50,
19
+ x2: 150, y2: 150,
20
+ x3: 75, y3: 250,
21
+ fill_color: :gray, stroke_color: :green, stroke_width: 3.0
22
+
23
+ line x1: 50, y1: 550,
24
+ x2: 150, y2: 650,
25
+ stroke_width: 25.0
26
+
27
+ curve x1: 50, y1: 850, cx1: 150, cy1: 700,
28
+ x2: 625, y2: 900, cx2: 150, cy2: 700,
29
+ stroke_width: 12.0, stroke_color: :cyan,
30
+ fill_color: :burgundy, cap: 'round'
31
+
32
+ ellipse x: 50, y: 925, width: 200, height: 100,
33
+ stroke_width: 5.0, stroke_color: :cyan,
34
+ fill_color: :burgundy
35
+
36
+ star x: 300, y: 1000, n: 5, inner_radius: 15, outer_radius: 40,
37
+ fill_color: :cyan, stroke_color: :burgundy, stroke_width: 5
38
+
39
+ #default draw is fill-then-stroke. Can be changed to stroke-then-fill
40
+ star x: 375, y: 1000, n: 5, inner_radius: 15, outer_radius: 40,
41
+ fill_color: :cyan, stroke_color: :burgundy,
42
+ stroke_width: 5, stroke_strategy: :stroke_first
43
+
44
+ polygon x: 500, y: 1000, n: 5, radius: 25, angle: Math::PI / 2,
45
+ fill_color: :cyan, stroke_color: :burgundy, stroke_width: 2
46
+
47
+ save_png prefix: 'shape_'
48
+ end
@@ -1,88 +1,88 @@
1
- require 'squib'
2
-
3
- Squib::Deck.new do
4
- background color: :white
5
- rect x: 0, y: 0, width: 825, height: 1125, stroke_width: 2.0
6
-
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',
9
- x: 0, y: 0, width: 180, hint: :red,
10
- align: :left, ellipsize: false, justify: false) do |embed|
11
- # Notice how we use dx and dy to adjust the icon to not rest directly on the baseline
12
- embed.svg key: ':tool:', width: 28, height: 28, dx: 0, dy: 4, file: 'spanner.svg'
13
- embed.svg key: ':health:', width: 28, height: 28, dx: -2, dy: 4, file: 'glass-heart.svg'
14
- embed.png key: ':purse:', width: 28, height: 28, dx: 0, dy: 4, file: 'shiny-purse.png'
15
- end
16
-
17
- embed_text = 'Middle align: Take 1 :tool: and gain 2 :health:. Take 2 :tool: and gain 3 :purse:'
18
- text(str: embed_text, font: 'Sans 21',
19
- x: 200, y: 0, width: 180, height: 300, valign: :middle,
20
- align: :left, ellipsize: false, justify: false, hint: :cyan) do |embed|
21
- embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
22
- embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
23
- embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
24
- end
25
-
26
- embed_text = 'This :tool: aligns on the bottom properly. :purse:'
27
- text(str: embed_text, font: 'Sans 21',
28
- x: 400, y: 0, width: 180, height: 300, valign: :bottom,
29
- align: :left, ellipsize: false, justify: false, hint: :green) do |embed|
30
- embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
31
- embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
32
- embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
33
- end
34
-
35
- embed_text = 'Wrapping multiples: These are 1 :tool::tool::tool: and these are multiple :tool::tool: :tool::tool:'
36
- text(str: embed_text, font: 'Sans 21',
37
- x: 600, y: 0, width: 180, height: 300, valign: :middle,
38
- align: :left, ellipsize: false, justify: false, hint: :cyan) do |embed|
39
- embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
40
- end
41
-
42
- embed_text = ':tool:Justify will :tool: work too, and :purse: with more words just for fun'
43
- text(str: embed_text, font: 'Sans 21',
44
- x: 0, y: 320, width: 180, height: 300, valign: :bottom,
45
- align: :left, ellipsize: false, justify: true, hint: :magenta) do |embed|
46
- embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
47
- embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
48
- embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
49
- end
50
-
51
- embed_text = 'Right-aligned works :tool: with :health: and :purse:'
52
- text(str: embed_text, font: 'Sans 21',
53
- x: 200, y: 320, width: 180, height: 300, valign: :bottom,
54
- align: :right, ellipsize: false, justify: false, hint: :magenta) do |embed|
55
- embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
56
- embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
57
- embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
58
- end
59
-
60
- embed_text = ':tool:Center-aligned works :tool: with :health: and :purse:'
61
- text(str: embed_text, font: 'Sans 21',
62
- x: 400, y: 320, width: 180, height: 300,
63
- align: :center, ellipsize: false, justify: false, hint: :magenta) do |embed|
64
- embed.svg key: ':tool:', width: 28, height: 28, data: File.read('spanner.svg')
65
- embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
66
- embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
67
- end
68
-
69
- embed_text = 'Markup --- and typography replacements --- with ":tool:" icons <i>won\'t</i> fail'
70
- text(str: embed_text, font: 'Serif 18', markup: true,
71
- x: 600, y: 320, width: 180, height: 300,
72
- align: :center, hint: :magenta) do |embed|
73
- embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
74
- end
75
-
76
- save_png prefix: 'embed_'
77
- end
78
-
79
- Squib::Deck.new(cards: 3) do
80
- str = 'Take 1 :tool: and gain 2 :health:.'
81
- text(str: str, font: 'Sans', font_size: [18, 26, 35],
82
- x: 0, y: 0, width: 180, height: 300, valign: :bottom,
83
- align: :left, ellipsize: false, justify: false, hint: :cyan) do |embed|
84
- embed.svg key: ':tool:', width: [28, 42, 56], height: [28, 42, 56], file: 'spanner.svg'
85
- embed.svg key: ':health:', width: [28, 42, 56], height: [28, 42, 56], file: 'glass-heart.svg'
86
- end
87
- save_sheet prefix: 'embed_multisheet_', columns: 3
88
- end
1
+ require 'squib'
2
+
3
+ Squib::Deck.new do
4
+ background color: :white
5
+ rect x: 0, y: 0, width: 825, height: 1125, stroke_width: 2.0
6
+
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',
9
+ x: 0, y: 0, width: 180, hint: :red,
10
+ align: :left, ellipsize: false, justify: false) do |embed|
11
+ # Notice how we use dx and dy to adjust the icon to not rest directly on the baseline
12
+ embed.svg key: ':tool:', width: 28, height: 28, dx: 0, dy: 4, file: 'spanner.svg'
13
+ embed.svg key: ':health:', width: 28, height: 28, dx: -2, dy: 4, file: 'glass-heart.svg'
14
+ embed.png key: ':purse:', width: 28, height: 28, dx: 0, dy: 4, file: 'shiny-purse.png'
15
+ end
16
+
17
+ embed_text = 'Middle align: Take 1 :tool: and gain 2 :health:. Take 2 :tool: and gain 3 :purse:'
18
+ text(str: embed_text, font: 'Sans 21',
19
+ x: 200, y: 0, width: 180, height: 300, valign: :middle,
20
+ align: :left, ellipsize: false, justify: false, hint: :cyan) do |embed|
21
+ embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
22
+ embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
23
+ embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
24
+ end
25
+
26
+ embed_text = 'This :tool: aligns on the bottom properly. :purse:'
27
+ text(str: embed_text, font: 'Sans 21',
28
+ x: 400, y: 0, width: 180, height: 300, valign: :bottom,
29
+ align: :left, ellipsize: false, justify: false, hint: :green) do |embed|
30
+ embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
31
+ embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
32
+ embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
33
+ end
34
+
35
+ embed_text = 'Wrapping multiples: These are 1 :tool::tool::tool: and these are multiple :tool::tool: :tool::tool:'
36
+ text(str: embed_text, font: 'Sans 21',
37
+ x: 600, y: 0, width: 180, height: 300, valign: :middle,
38
+ align: :left, ellipsize: false, justify: false, hint: :cyan) do |embed|
39
+ embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
40
+ end
41
+
42
+ embed_text = ':tool:Justify will :tool: work too, and :purse: with more words just for fun'
43
+ text(str: embed_text, font: 'Sans 21',
44
+ x: 0, y: 320, width: 180, height: 300, valign: :bottom,
45
+ align: :left, ellipsize: false, justify: true, hint: :magenta) do |embed|
46
+ embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
47
+ embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
48
+ embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
49
+ end
50
+
51
+ embed_text = 'Right-aligned works :tool: with :health: and :purse:'
52
+ text(str: embed_text, font: 'Sans 21',
53
+ x: 200, y: 320, width: 180, height: 300, valign: :bottom,
54
+ align: :right, ellipsize: false, justify: false, hint: :magenta) do |embed|
55
+ embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
56
+ embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
57
+ embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
58
+ end
59
+
60
+ embed_text = ':tool:Center-aligned works :tool: with :health: and :purse:'
61
+ text(str: embed_text, font: 'Sans 21',
62
+ x: 400, y: 320, width: 180, height: 300,
63
+ align: :center, ellipsize: false, justify: false, hint: :magenta) do |embed|
64
+ embed.svg key: ':tool:', width: 28, height: 28, data: File.read('spanner.svg')
65
+ embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
66
+ embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
67
+ end
68
+
69
+ embed_text = 'Markup --- and typography replacements --- with ":tool:" icons <i>won\'t</i> fail'
70
+ text(str: embed_text, font: 'Serif 18', markup: true,
71
+ x: 600, y: 320, width: 180, height: 300,
72
+ align: :center, hint: :magenta) do |embed|
73
+ embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
74
+ end
75
+
76
+ save_png prefix: 'embed_'
77
+ end
78
+
79
+ Squib::Deck.new(cards: 3) do
80
+ str = 'Take 1 :tool: and gain 2 :health:.'
81
+ text(str: str, font: 'Sans', font_size: [18, 26, 35],
82
+ x: 0, y: 0, width: 180, height: 300, valign: :bottom,
83
+ align: :left, ellipsize: false, justify: false, hint: :cyan) do |embed|
84
+ embed.svg key: ':tool:', width: [28, 42, 56], height: [28, 42, 56], file: 'spanner.svg'
85
+ embed.svg key: ':health:', width: [28, 42, 56], height: [28, 42, 56], file: 'glass-heart.svg'
86
+ end
87
+ save_sheet prefix: 'embed_multisheet_', columns: 3
88
+ end