squib 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (230) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.gitmodules +22 -0
  4. data/.travis.yml +4 -5
  5. data/CHANGELOG.md +23 -0
  6. data/CONTRIBUTING.md +40 -0
  7. data/README.md +25 -553
  8. data/RELEASE TODO.md +2 -2
  9. data/Rakefile +6 -64
  10. data/appveyor.yml +0 -4
  11. data/benchmarks/antialias_best.rb +2 -2
  12. data/benchmarks/antialias_fast.rb +2 -2
  13. data/benchmarks/{backend-memory.rb → backend_memory.rb} +2 -2
  14. data/benchmarks/{backend-svg.rb → backend_svg.rb} +2 -2
  15. data/benchmarks/tons_of_png.rb +1 -1
  16. data/benchmarks/tons_of_svg.rb +1 -1
  17. data/benchmarks/tons_of_text.rb +1 -1
  18. data/docs/Makefile +216 -0
  19. data/docs/_static/css/squibdocs.css +18 -0
  20. data/docs/args/draw.rst +36 -0
  21. data/docs/args/expansion.rst +3 -0
  22. data/docs/args/layout.rst +6 -0
  23. data/docs/args/output_dir.rst +6 -0
  24. data/docs/args/range.rst +6 -0
  25. data/docs/args/transform.rst +51 -0
  26. data/docs/args/trim.rst +11 -0
  27. data/docs/args/wh.rst +12 -0
  28. data/docs/args/xy.rst +12 -0
  29. data/docs/arrays.rst +77 -0
  30. data/docs/backends.rst +20 -0
  31. data/docs/bleed.rst +13 -0
  32. data/docs/build_groups.rst +47 -0
  33. data/docs/colors.rst +64 -0
  34. data/docs/conf.py +287 -0
  35. data/docs/config.rst +117 -0
  36. data/docs/data.rst +22 -0
  37. data/docs/dsl/background.rst +20 -0
  38. data/docs/dsl/build.rst +32 -0
  39. data/docs/dsl/build_groups.rst +23 -0
  40. data/docs/dsl/circle.rst +27 -0
  41. data/docs/dsl/cm.rst +19 -0
  42. data/docs/dsl/csv.rst +62 -0
  43. data/docs/dsl/curve.rst +63 -0
  44. data/docs/dsl/deck.rst +45 -0
  45. data/docs/dsl/disable_build.rst +28 -0
  46. data/docs/dsl/ellipse.rst +17 -0
  47. data/docs/dsl/enable_build.rst +25 -0
  48. data/docs/dsl/grid.rst +31 -0
  49. data/docs/dsl/hand.rst +40 -0
  50. data/docs/dsl/hint.rst +15 -0
  51. data/docs/dsl/inches.rst +19 -0
  52. data/docs/dsl/index.rst +9 -0
  53. data/docs/dsl/line.rst +52 -0
  54. data/docs/dsl/png.rst +49 -0
  55. data/docs/dsl/polygon.rst +28 -0
  56. data/docs/dsl/rect.rst +18 -0
  57. data/docs/dsl/save.rst +23 -0
  58. data/docs/dsl/save_pdf.rst +48 -0
  59. data/docs/dsl/save_png.rst +46 -0
  60. data/docs/dsl/save_sheet.rst +55 -0
  61. data/docs/dsl/showcase.rst +65 -0
  62. data/docs/dsl/star.rst +35 -0
  63. data/docs/dsl/svg.rst +119 -0
  64. data/docs/dsl/text.rst +294 -0
  65. data/docs/dsl/triangle.rst +38 -0
  66. data/docs/dsl/use_layout.rst +16 -0
  67. data/docs/dsl/xlsx.rst +50 -0
  68. data/docs/guides/game_icons.rst +2 -0
  69. data/docs/guides/getting-started/index.rst +5 -0
  70. data/docs/guides/getting-started/part_0_learning_ruby.rst +145 -0
  71. data/docs/guides/getting-started/part_1_zero_to_game.rst +216 -0
  72. data/docs/guides/getting-started/part_2_iconography.rst +152 -0
  73. data/docs/guides/getting-started/part_3_workflows.rst +4 -0
  74. data/docs/guides/git.rst +13 -0
  75. data/docs/guides/hello_world.rst +6 -0
  76. data/docs/help.rst +157 -0
  77. data/docs/index.rst +35 -0
  78. data/docs/install.rst +66 -0
  79. data/docs/layouts.rst +235 -0
  80. data/docs/learning.rst +10 -0
  81. data/docs/make.bat +263 -0
  82. data/docs/parameters.rst +26 -0
  83. data/docs/server.bat +1 -0
  84. data/docs/text_feature.rst +86 -0
  85. data/docs/units.rst +6 -0
  86. data/lib/squib.rb +4 -4
  87. data/lib/squib/api/background.rb +5 -10
  88. data/lib/squib/api/data.rb +30 -54
  89. data/lib/squib/api/groups.rb +47 -0
  90. data/lib/squib/api/image.rb +8 -67
  91. data/lib/squib/api/save.rb +15 -105
  92. data/lib/squib/api/settings.rb +8 -22
  93. data/lib/squib/api/shapes.rb +15 -185
  94. data/lib/squib/api/text.rb +9 -49
  95. data/lib/squib/api/text_embed.rb +12 -12
  96. data/lib/squib/api/units.rb +3 -17
  97. data/lib/squib/args/arg_loader.rb +6 -6
  98. data/lib/squib/args/box.rb +2 -2
  99. data/lib/squib/args/card_range.rb +1 -1
  100. data/lib/squib/args/color_validator.rb +2 -2
  101. data/lib/squib/args/coords.rb +2 -2
  102. data/lib/squib/args/csv_opts.rb +25 -0
  103. data/lib/squib/args/dir_validator.rb +1 -1
  104. data/lib/squib/args/draw.rb +2 -2
  105. data/lib/squib/args/embed_adjust.rb +1 -1
  106. data/lib/squib/args/embed_key.rb +1 -1
  107. data/lib/squib/args/hand_special.rb +37 -37
  108. data/lib/squib/args/import.rb +2 -2
  109. data/lib/squib/args/input_file.rb +1 -1
  110. data/lib/squib/args/paint.rb +3 -3
  111. data/lib/squib/args/paragraph.rb +2 -2
  112. data/lib/squib/args/save_batch.rb +2 -2
  113. data/lib/squib/args/scale_box.rb +1 -1
  114. data/lib/squib/args/sheet.rb +3 -3
  115. data/lib/squib/args/showcase_special.rb +2 -2
  116. data/lib/squib/args/svg_special.rb +1 -1
  117. data/lib/squib/args/transform.rb +2 -2
  118. data/lib/squib/args/typographer.rb +5 -4
  119. data/lib/squib/args/unit_conversion.rb +4 -4
  120. data/lib/squib/card.rb +8 -8
  121. data/lib/squib/conf.rb +5 -5
  122. data/lib/squib/deck.rb +20 -18
  123. data/lib/squib/graphics/cairo_context_wrapper.rb +3 -3
  124. data/lib/squib/graphics/gradient_regex.rb +1 -1
  125. data/lib/squib/graphics/hand.rb +2 -2
  126. data/lib/squib/graphics/save_doc.rb +9 -8
  127. data/lib/squib/graphics/save_images.rb +24 -11
  128. data/lib/squib/graphics/shapes.rb +16 -17
  129. data/lib/squib/graphics/showcase.rb +9 -9
  130. data/lib/squib/graphics/text.rb +21 -21
  131. data/lib/squib/layout_parser.rb +9 -9
  132. data/lib/squib/layouts/economy.yml +85 -85
  133. data/lib/squib/layouts/fantasy.yml +101 -101
  134. data/lib/squib/layouts/hand.yml +62 -62
  135. data/lib/squib/layouts/playing-card.yml +35 -35
  136. data/lib/squib/layouts/tuck_box.yml +45 -45
  137. data/lib/squib/sample_helpers.rb +1 -1
  138. data/lib/squib/version.rb +1 -1
  139. data/samples/{backend.rb → backend/_backend.rb} +2 -2
  140. data/samples/basic.rb +3 -3
  141. data/samples/bug134.rb +14 -0
  142. data/samples/build_groups/build_groups.rb +36 -0
  143. data/samples/cairo_access.rb +12 -1
  144. data/samples/{colors.rb → colors/_colors.rb} +12 -12
  145. data/samples/{gradients.rb → colors/_gradients.rb} +1 -1
  146. data/samples/config_text_markup.rb +2 -2
  147. data/samples/custom-config.yml +5 -5
  148. data/samples/custom_config.rb +18 -18
  149. data/samples/{csv_import.rb → data/_csv.rb} +8 -1
  150. data/samples/{excel.rb → data/_excel.rb} +3 -3
  151. data/samples/embed_text.rb +21 -0
  152. data/samples/hello_world.rb +1 -1
  153. data/samples/{load_images.rb → images/_more_load_images.rb} +2 -2
  154. data/samples/layouts.rb +11 -1
  155. data/samples/layouts_builtin.rb +51 -51
  156. data/samples/offset.svg +71 -71
  157. data/samples/ranges.rb +7 -7
  158. data/samples/{hand.rb → saves/_hand.rb} +1 -2
  159. data/samples/{portrait-landscape.rb → saves/_portrait_landscape.rb} +4 -4
  160. data/samples/{saves.rb → saves/_saves.rb} +0 -0
  161. data/samples/{showcase.rb → saves/_showcase.rb} +2 -2
  162. data/samples/{draw_shapes.rb → shapes/_draw_shapes.rb} +1 -1
  163. data/samples/text/_text.rb +4 -3
  164. data/samples/text_options.rb +6 -6
  165. data/samples/unicode.rb +1 -1
  166. data/spec/api/api_data_spec.rb +59 -4
  167. data/spec/api/api_settings_spec.rb +1 -1
  168. data/spec/args/box_spec.rb +7 -7
  169. data/spec/args/draw_spec.rb +19 -19
  170. data/spec/args/embed_key_spec.rb +13 -13
  171. data/spec/args/input_file_spec.rb +2 -2
  172. data/spec/args/paint_spec.rb +5 -5
  173. data/spec/args/paragraph_spec.rb +28 -28
  174. data/spec/args/range_spec.rb +1 -1
  175. data/spec/args/save_batch_spec.rb +10 -10
  176. data/spec/args/scale_box_spec.rb +9 -9
  177. data/spec/args/sheet_spec.rb +8 -8
  178. data/spec/args/showcase_special_spec.rb +15 -15
  179. data/spec/args/transform_spec.rb +4 -4
  180. data/spec/args/typographer_spec.rb +11 -11
  181. data/spec/args/unit_conversion_spec.rb +2 -2
  182. data/spec/card_spec.rb +1 -1
  183. data/spec/commands/new_spec.rb +1 -1
  184. data/spec/data/csv/custom_opts.csv +2 -0
  185. data/spec/data/csv/newline.csv +3 -0
  186. data/spec/data/csv/qty.csv +2 -2
  187. data/spec/data/csv/qty_named.csv +2 -2
  188. data/spec/data/csv/with_spaces.csv +2 -2
  189. data/spec/data/csv/yield.csv +3 -0
  190. data/spec/data/samples/{autoscale_font.rb.txt → autoscale_font/_autoscale_font.rb.txt} +55 -18
  191. data/spec/data/samples/cairo_access.rb.txt +24 -0
  192. data/spec/data/samples/{gradients.rb.txt → colors/_gradients.rb.txt} +0 -0
  193. data/spec/data/samples/config_text_markup.rb.txt +72 -72
  194. data/spec/data/samples/custom_config.rb.txt +1 -0
  195. data/spec/data/samples/{csv_import.rb.txt → data/_csv.rb.txt} +0 -0
  196. data/spec/data/samples/{excel.rb.txt → data/_excel.rb.txt} +0 -0
  197. data/spec/data/samples/embed_text.rb.txt +79 -0
  198. data/spec/data/samples/hello_world.rb.txt +36 -36
  199. data/spec/data/samples/{load_images.rb.txt → images/_more_load_images.rb.txt} +4 -4
  200. data/spec/data/samples/{hand.rb.txt → saves/_hand.rb.txt} +0 -0
  201. data/spec/data/samples/{portrait-landscape.rb.txt → saves/_portrait_landscape.rb.txt} +11 -7
  202. data/spec/data/samples/{save_pdf.rb.txt → saves/_save_pdf.rb.txt} +0 -0
  203. data/spec/data/samples/{saves.rb.txt → saves/_saves.rb.txt} +3 -4
  204. data/spec/data/samples/{showcase.rb.txt → saves/_showcase.rb.txt} +0 -0
  205. data/spec/data/samples/{draw_shapes.rb.txt → shapes/_draw_shapes.rb.txt} +0 -0
  206. data/spec/data/samples/text_options.rb.txt +1125 -1125
  207. data/spec/graphics/cairo_context_wrapper_spec.rb +10 -10
  208. data/spec/graphics/graphics_save_doc_spec.rb +11 -5
  209. data/spec/layout_parser_spec.rb +21 -9
  210. data/spec/logger_spec.rb +2 -2
  211. data/spec/samples/run_samples_spec.rb +1 -1
  212. data/spec/samples/samples_regression_spec.rb +16 -18
  213. data/spec/samples/sanity.rb +9 -9
  214. data/spec/sanity/.gitignore +1 -0
  215. data/spec/sanity/sanity.html.erb +42 -0
  216. data/spec/sanity/sanity_test.rb +42 -0
  217. data/spec/sanity/tests.yml +12 -0
  218. data/spec/spec_helper.rb +22 -20
  219. data/squib.gemspec +3 -4
  220. metadata +143 -81
  221. data/.rspec +0 -1
  222. data/.yardopts +0 -10
  223. data/samples/autoscale_font.rb +0 -27
  224. data/samples/backend-config.yml +0 -5
  225. data/samples/color_shortcuts.rb +0 -6
  226. data/samples/explode_quantities.xlsx +0 -0
  227. data/samples/quantity_explosion.csv +0 -3
  228. data/samples/sample.csv +0 -3
  229. data/samples/sample.xlsx +0 -0
  230. data/squib.sublime-project +0 -42
@@ -31,4 +31,4 @@ Squib::Deck.new do
31
31
  color: '(0,0)(825,0) #000f@0.0 #0000@1.0'
32
32
 
33
33
  save_png prefix: 'gradient_'
34
- end
34
+ end
@@ -6,7 +6,7 @@ Squib::Deck.new(config: 'config_text_markup.yml') do
6
6
  x: 10, y: 10, width: 300, height: 200, font: 'Serif 20',
7
7
  markup: true, hint: :cyan
8
8
 
9
- text str: "Notice also the antialiasing method.",
9
+ text str: 'Notice also the antialiasing method.',
10
10
  x: 320, y: 10, width: 300, height: 200, font: 'Arial Bold 20'
11
11
 
12
12
  save_png prefix: 'config_text_'
@@ -17,4 +17,4 @@ Squib::Deck.new(config: 'config_disable_quotes.yml') do
17
17
  x: 10, y: 10, width: 300, height: 200, font: 'Serif 20',
18
18
  markup: true, hint: :cyan
19
19
  save_png prefix: 'config_disable_text_'
20
- end
20
+ 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
@@ -22,5 +22,12 @@ Squib::Deck.new(cards: num_cards) do
22
22
  background color: :white
23
23
  rect # card border
24
24
  text str: data['Name'], font: 'Arial 54'
25
- save_sheet prefix: 'sample_csv_qty_', columns: 4
25
+ save_sheet prefix: 'sample_csv_qty_', columns: 4
26
26
  end
27
+
28
+ # Additionally, CSV supports inline data specifically
29
+ data = Squib.csv data: <<-EOCSV
30
+ Name,Cost
31
+ Knight,3
32
+ Orc,1
33
+ EOCSV
@@ -11,7 +11,7 @@ Squib::Deck.new(cards: 3) do
11
11
  text str: data['Level'], x: 65, y: 65, font: 'Arial 72'
12
12
  text str: data['Description'], x: 65, y: 600, font: 'Arial 36'
13
13
 
14
- save format: :png, prefix: 'sample_excel_' #save to individual pngs
14
+ save format: :png, prefix: 'sample_excel_' # save to individual pngs
15
15
  end
16
16
 
17
17
  # xlsx is also a Squib-module-level function, so this also works:
@@ -22,7 +22,7 @@ Squib::Deck.new(cards: num_cards) do
22
22
  background color: :white
23
23
  rect # card border
24
24
  text str: data['Name'], font: 'Arial 54'
25
- save_sheet prefix: 'sample_xlsx_qty_', columns: 4
25
+ save_sheet prefix: 'sample_xlsx_qty_', columns: 4
26
26
  end
27
27
 
28
28
 
@@ -51,5 +51,5 @@ Squib::Deck.new(cards: resource_data['Name'].size) do
51
51
  rect width: :deck, height: :deck
52
52
  text str: resource_data['Name'], align: :center, width: :deck, hint: 'red'
53
53
  text str: resource_data['Cost'], align: :right, width: :deck, hint: 'red'
54
- save_sheet prefix: 'sample_excel_resources_' #save to a whole sheet
54
+ save_sheet prefix: 'sample_excel_resources_' # save to a whole sheet
55
55
  end
@@ -73,6 +73,27 @@ Squib::Deck.new do
73
73
  embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
74
74
  end
75
75
 
76
+ embed_text = ':tool:' # JUST the icon
77
+ text(str: embed_text, x: 0, y: 640, width: 180, height: 50, markup: true,
78
+ font: 'Arial 21', align: :center, valign: :middle, hint: :red) do |embed|
79
+ embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
80
+ end
81
+
82
+ embed_text = ':purse:' # JUST the icon
83
+ text(str: embed_text, x: 200, y: 640, width: 180, height: 50, markup: true,
84
+ font: 'Arial 21', align: :center, valign: :middle, hint: :red) do |embed|
85
+ embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
86
+ end
87
+
88
+ embed_text = ":tool: Death to Nemesis bug 103!! :purse:"
89
+ text(str: embed_text, font: 'Sans Bold 24', stroke_width: 2,
90
+ color: :red, stroke_color: :blue, dash: '3 3', align: :center,
91
+ valign: :middle, x: 0, y: 700, width: 380, height: 150,
92
+ hint: :magenta) do |embed|
93
+ embed.svg key: ':tool:', file: 'spanner.svg', width: 32, height: 32
94
+ embed.png key: ':purse:', file: 'shiny-purse.png', width: 32, height: 32
95
+ end
96
+
76
97
  save_png prefix: 'embed_'
77
98
  end
78
99
 
@@ -3,4 +3,4 @@ require 'squib'
3
3
  Squib::Deck.new(cards: 2) do
4
4
  text str: %w(Hello World!)
5
5
  save_png
6
- end
6
+ end
@@ -10,7 +10,7 @@ Squib::Deck.new(width: 825, height: 1125, cards: 1, config: 'load_images_config.
10
10
  # Can be scaled if width and height are set
11
11
  svg file: 'spanner.svg', x: 50, y: 50, width: 250, height: 250
12
12
  png file: 'shiny-purse.png', x: 305, y: 50, width: 250, height: 250
13
- #...but PNGs will warn if it's an upscale, unless you disable them in config.yml
13
+ # ...but PNGs will warn if it's an upscale, unless you disable them in config.yml
14
14
 
15
15
  # Can be scaled using just width or height, if one of them is set to :scale
16
16
  svg file: 'spanner.svg', x: 200, y: 350, width: 35, height: :scale
@@ -60,7 +60,7 @@ Squib::Deck.new(width: 825, height: 1125, cards: 1, config: 'load_images_config.
60
60
 
61
61
  # WARNING! If you choose to use the SVG ID, the x-y coordinates are still
62
62
  # relative to the SVG page. See this example in an SVG editor
63
- svg file: 'offset.svg', id: 'thing', x: 0, y: 0, width: 600, height: 600
63
+ svg file: 'offset.svg', id: 'thing', x: 0, y: 0, width: 600, height: 600
64
64
 
65
65
  # Over 15 different blending operators are supported.
66
66
  # See http://cairographics.org/operators
data/samples/layouts.rb CHANGED
@@ -46,7 +46,7 @@ end
46
46
  Squib::Deck.new(layout: 'playing-card.yml') do
47
47
  text str: "A\u2660", layout: :bonus_ul, font: 'Sans bold 100', hint: :red
48
48
  text str: "A\u2660", layout: :bonus_lr, font: 'Sans bold 100', hint: :red
49
- text str: "artwork here", layout: :art, hint: :red
49
+ text str: 'artwork here', layout: :art, hint: :red
50
50
  save_png prefix: 'layout_builtin_playing_card_'
51
51
  end
52
52
 
@@ -60,3 +60,13 @@ Squib::Deck.new(layout: 'hand.yml') do
60
60
  png file: 'pokercard.png', alpha: 0.5
61
61
  save_png prefix: 'layout_builtin_hand_'
62
62
  end
63
+
64
+ # Layouts can also be specified in their own DSL method call
65
+ # Each layout call will progressively be merged with the priors
66
+ Squib::Deck.new do
67
+ use_layout file: 'custom-layout.yml'
68
+ use_layout file: 'custom-layout2.yml'
69
+ text str: 'The Title', layout: :title # from custom-layout.yml
70
+ text str: 'The Subtitle', layout: :subtitle # redefined in custom-layout2.yml
71
+ save_png prefix: 'layout3_'
72
+ end
@@ -1,51 +1,51 @@
1
- require 'squib'
2
-
3
- # This sample demonstrates the built-in layouts for Squib.
4
- # Each card demonstrates a different built-in layout.
5
- Squib::Deck.new(layout: 'fantasy.yml') do
6
- background color: 'white'
7
-
8
- set font: 'Times New Roman,Serif 32'
9
- hint text: '#333' # show extents of text boxes to demo the layout
10
-
11
- text str: 'fantasy.yml', layout: :title
12
- text str: 'ur', layout: :upper_right
13
- text str: 'art', layout: :art
14
- text str: 'type', layout: :type
15
- text str: 'tr', layout: :type_right
16
- text str: 'description', layout: :description
17
- text str: 'lr', layout: :lower_right
18
- text str: 'll', layout: :lower_left
19
- text str: 'credits', layout: :copy
20
-
21
- rect layout: :safe
22
- rect layout: :cut
23
- save_png prefix: 'layouts_builtin_fantasy_'
24
- end
25
-
26
- Squib::Deck.new(layout: 'economy.yml') do
27
- background color: 'white'
28
-
29
- set font: 'Times New Roman,Serif 32'
30
- hint text: '#333' # show extents of text boxes to demo the layout
31
-
32
- text str: 'economy.yml', layout: :title
33
- text str: 'art', layout: :art
34
- text str: 'description', layout: :description
35
- text str: 'type', layout: :type
36
- text str: 'lr', layout: :lower_right
37
- text str: 'll', layout: :lower_left
38
- text str: 'credits', layout: :copy
39
-
40
- rect layout: :safe
41
- rect layout: :cut
42
- save_png prefix: 'layouts_builtin_economy_'
43
- end
44
-
45
- # Stitch together a deck of all the above examples
46
- Squib::Deck.new(cards: 2) do
47
- Dir.glob('_output/layouts_builtin_*.png').each.with_index do |file, i|
48
- png file: file, range: i
49
- end
50
- save_sheet prefix: 'layouts_builtinsheet_'
51
- end
1
+ require 'squib'
2
+
3
+ # This sample demonstrates the built-in layouts for Squib.
4
+ # Each card demonstrates a different built-in layout.
5
+ Squib::Deck.new(layout: 'fantasy.yml') do
6
+ background color: 'white'
7
+
8
+ set font: 'Times New Roman,Serif 32'
9
+ hint text: '#333' # show extents of text boxes to demo the layout
10
+
11
+ text str: 'fantasy.yml', layout: :title
12
+ text str: 'ur', layout: :upper_right
13
+ text str: 'art', layout: :art
14
+ text str: 'type', layout: :type
15
+ text str: 'tr', layout: :type_right
16
+ text str: 'description', layout: :description
17
+ text str: 'lr', layout: :lower_right
18
+ text str: 'll', layout: :lower_left
19
+ text str: 'credits', layout: :copy
20
+
21
+ rect layout: :safe
22
+ rect layout: :cut
23
+ save_png prefix: 'layouts_builtin_fantasy_'
24
+ end
25
+
26
+ Squib::Deck.new(layout: 'economy.yml') do
27
+ background color: 'white'
28
+
29
+ set font: 'Times New Roman,Serif 32'
30
+ hint text: '#333' # show extents of text boxes to demo the layout
31
+
32
+ text str: 'economy.yml', layout: :title
33
+ text str: 'art', layout: :art
34
+ text str: 'description', layout: :description
35
+ text str: 'type', layout: :type
36
+ text str: 'lr', layout: :lower_right
37
+ text str: 'll', layout: :lower_left
38
+ text str: 'credits', layout: :copy
39
+
40
+ rect layout: :safe
41
+ rect layout: :cut
42
+ save_png prefix: 'layouts_builtin_economy_'
43
+ end
44
+
45
+ # Stitch together a deck of all the above examples
46
+ Squib::Deck.new(cards: 2) do
47
+ Dir.glob('_output/layouts_builtin_*.png').each.with_index do |file, i|
48
+ png file: file, range: i
49
+ end
50
+ save_sheet prefix: 'layouts_builtinsheet_'
51
+ end
data/samples/offset.svg CHANGED
@@ -1,71 +1,71 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
-
4
- <svg
5
- xmlns:dc="http://purl.org/dc/elements/1.1/"
6
- xmlns:cc="http://creativecommons.org/ns#"
7
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
- xmlns:svg="http://www.w3.org/2000/svg"
9
- xmlns="http://www.w3.org/2000/svg"
10
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
- width="747.59235"
13
- height="747.39734"
14
- id="svg2"
15
- version="1.1"
16
- inkscape:version="0.48.5 r10040"
17
- sodipodi:docname="offset.svg">
18
- <defs
19
- id="defs4" />
20
- <sodipodi:namedview
21
- id="base"
22
- pagecolor="#ffffff"
23
- bordercolor="#666666"
24
- borderopacity="1.0"
25
- inkscape:pageopacity="0.0"
26
- inkscape:pageshadow="2"
27
- inkscape:zoom="0.76264655"
28
- inkscape:cx="373.79617"
29
- inkscape:cy="373.69867"
30
- inkscape:document-units="px"
31
- inkscape:current-layer="layer1"
32
- showgrid="false"
33
- inkscape:window-width="1440"
34
- inkscape:window-height="776"
35
- inkscape:window-x="0"
36
- inkscape:window-y="0"
37
- inkscape:window-maximized="1"
38
- fit-margin-top="0"
39
- fit-margin-left="0"
40
- fit-margin-right="0"
41
- fit-margin-bottom="0" />
42
- <metadata
43
- id="metadata7">
44
- <rdf:RDF>
45
- <cc:Work
46
- rdf:about="">
47
- <dc:format>image/svg+xml</dc:format>
48
- <dc:type
49
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
50
- <dc:title />
51
- </cc:Work>
52
- </rdf:RDF>
53
- </metadata>
54
- <g
55
- inkscape:label="Layer 1"
56
- inkscape:groupmode="layer"
57
- id="layer1"
58
- transform="translate(5.1573995,-302.70286)">
59
- <path
60
- sodipodi:type="arc"
61
- style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
62
- id="thing"
63
- sodipodi:cx="159.99248"
64
- sodipodi:cy="152.67546"
65
- sodipodi:rx="59.401001"
66
- sodipodi:ry="59.401001"
67
- d="m 219.39348,152.67546 c 0,32.80627 -26.59474,59.401 -59.401,59.401 -32.80627,0 -59.401,-26.59473 -59.401,-59.401 0,-32.80627 26.59473,-59.401 59.401,-59.401 32.80626,0 59.401,26.59473 59.401,59.401 z"
68
- transform="matrix(0.95784259,0,0,0.95784259,531.73189,844.72627)"
69
- inkscape:label="thing" />
70
- </g>
71
- </svg>
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ width="747.59235"
13
+ height="747.39734"
14
+ id="svg2"
15
+ version="1.1"
16
+ inkscape:version="0.48.5 r10040"
17
+ sodipodi:docname="offset.svg">
18
+ <defs
19
+ id="defs4" />
20
+ <sodipodi:namedview
21
+ id="base"
22
+ pagecolor="#ffffff"
23
+ bordercolor="#666666"
24
+ borderopacity="1.0"
25
+ inkscape:pageopacity="0.0"
26
+ inkscape:pageshadow="2"
27
+ inkscape:zoom="0.76264655"
28
+ inkscape:cx="373.79617"
29
+ inkscape:cy="373.69867"
30
+ inkscape:document-units="px"
31
+ inkscape:current-layer="layer1"
32
+ showgrid="false"
33
+ inkscape:window-width="1440"
34
+ inkscape:window-height="776"
35
+ inkscape:window-x="0"
36
+ inkscape:window-y="0"
37
+ inkscape:window-maximized="1"
38
+ fit-margin-top="0"
39
+ fit-margin-left="0"
40
+ fit-margin-right="0"
41
+ fit-margin-bottom="0" />
42
+ <metadata
43
+ id="metadata7">
44
+ <rdf:RDF>
45
+ <cc:Work
46
+ rdf:about="">
47
+ <dc:format>image/svg+xml</dc:format>
48
+ <dc:type
49
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
50
+ <dc:title />
51
+ </cc:Work>
52
+ </rdf:RDF>
53
+ </metadata>
54
+ <g
55
+ inkscape:label="Layer 1"
56
+ inkscape:groupmode="layer"
57
+ id="layer1"
58
+ transform="translate(5.1573995,-302.70286)">
59
+ <path
60
+ sodipodi:type="arc"
61
+ style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
62
+ id="thing"
63
+ sodipodi:cx="159.99248"
64
+ sodipodi:cy="152.67546"
65
+ sodipodi:rx="59.401001"
66
+ sodipodi:ry="59.401001"
67
+ d="m 219.39348,152.67546 c 0,32.80627 -26.59474,59.401 -59.401,59.401 -32.80627,0 -59.401,-26.59473 -59.401,-59.401 0,-32.80627 26.59473,-59.401 59.401,-59.401 32.80626,0 59.401,26.59473 59.401,59.401 z"
68
+ transform="matrix(0.95784259,0,0,0.95784259,531.73189,844.72627)"
69
+ inkscape:label="thing" />
70
+ </g>
71
+ </svg>
data/samples/ranges.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require 'squib'
2
2
 
3
- data = {'name' => ['Thief', 'Grifter', 'Mastermind'],
3
+ data = { 'name' => ['Thief', 'Grifter', 'Mastermind'],
4
4
  'type' => ['Thug', 'Thinker', 'Thinker'],
5
- 'level' => [1,2,3]}
5
+ 'level' => [1, 2, 3] }
6
6
 
7
7
  Squib::Deck.new(width: 825, height: 1125, cards: 3) do
8
8
  # Default range is :all
@@ -26,7 +26,7 @@ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
26
26
  text range: -2..-1, str: 'Grifter and Mastermind only!', x: 25, y: 650
27
27
 
28
28
  # We can use Arrays too!
29
- text range: [0,2], str: 'Thief and Mastermind only!!', x: 25, y:300
29
+ text range: [0, 2], str: 'Thief and Mastermind only!!', x: 25, y:300
30
30
 
31
31
  # Just about everything in Squib can be given an array that
32
32
  # corresponds to the deck's cards. This allows for each card to be styled differently
@@ -38,24 +38,24 @@ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
38
38
 
39
39
  # Useful idiom: construct a hash from card names back to its index (ID),
40
40
  # then use a range. No need to memorize IDs, and you can add cards easily
41
- id = {} ; data['name'].each_with_index{ |name,i| id[name] = i}
41
+ id = {} ; data['name'].each_with_index{ |name, i| id[name] = i}
42
42
  text range: id['Thief']..id['Grifter'],
43
43
  str: 'Thief through Grifter with id lookup!!',
44
44
  x:25, y: 400
45
45
 
46
46
  # Useful idiom: generate arrays from a column called 'type'
47
- type = {}; data['type'].each_with_index{ |t,i| (type[t] ||= []) << i}
47
+ type = {}; data['type'].each_with_index{ |t, i| (type[t] ||= []) << i}
48
48
  text range: type['Thinker'],
49
49
  str: 'Only for Thinkers!',
50
50
  x:25, y: 500
51
51
 
52
52
  # Useful idiom: draw a different number of images for different cards
53
- hearts = [nil, 1, 2] #i.e. card 0 has no hearts, card 2 has 2 hearts drawn
53
+ hearts = [nil, 1, 2] # i.e. card 0 has no hearts, card 2 has 2 hearts drawn
54
54
  1.upto(2).each do |n|
55
55
  range = hearts.each_index.select { |i| hearts[i] == n}
56
56
  n.times do |i|
57
57
  svg file: 'glass-heart.svg', range: range,
58
- x: 150, y: 55 + i*42, width: 40, height: 40
58
+ x: 150, y: 55 + i * 42, width: 40, height: 40
59
59
  end
60
60
  end
61
61