squib 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.rspec +1 -0
- data/CHANGELOG.md +62 -14
- data/Gemfile +1 -1
- data/README.md +16 -10
- data/RELEASE TODO.md +2 -1
- data/Rakefile +11 -0
- data/lib/squib/api/data.rb +3 -3
- data/lib/squib/api/image.rb +7 -5
- data/lib/squib/api/save.rb +31 -2
- data/lib/squib/api/settings.rb +1 -1
- data/lib/squib/api/shapes.rb +86 -0
- data/lib/squib/api/text.rb +6 -2
- data/lib/squib/api/text_embed.rb +7 -5
- data/lib/squib/args/typographer.rb +22 -16
- data/lib/squib/card.rb +5 -5
- data/lib/squib/conf.rb +111 -0
- data/lib/squib/constants.rb +11 -31
- data/lib/squib/deck.rb +15 -48
- data/lib/squib/graphics/cairo_context_wrapper.rb +3 -1
- data/lib/squib/graphics/gradient_regex.rb +1 -0
- data/lib/squib/graphics/hand.rb +43 -0
- data/lib/squib/graphics/image.rb +5 -3
- data/lib/squib/graphics/save_doc.rb +1 -1
- data/lib/squib/graphics/shapes.rb +74 -0
- data/lib/squib/graphics/showcase.rb +5 -2
- data/lib/squib/graphics/text.rb +18 -7
- data/lib/squib/input_helpers.rb +2 -2
- data/lib/squib/version.rb +1 -1
- data/samples/csv_import.rb +3 -5
- data/samples/custom-config.yml +0 -1
- data/samples/custom_config.rb +1 -1
- data/samples/draw_shapes.rb +11 -0
- data/samples/embed_text.rb +1 -1
- data/samples/hand.rb +24 -0
- data/samples/load_images.rb +14 -0
- data/samples/sample.csv +3 -3
- data/samples/text_options.rb +4 -0
- data/spec/api/api_data_spec.rb +19 -0
- data/spec/api/api_image_spec.rb +1 -1
- data/spec/api/api_settings_spec.rb +18 -0
- data/spec/api/api_text_spec.rb +3 -3
- data/spec/conf_spec.rb +29 -0
- data/spec/data/conf/basic.yml +0 -0
- data/spec/data/conf/empty.yml +1 -0
- data/spec/data/samples/csv_import.rb.txt +4 -38
- data/spec/data/samples/custom_config.rb.txt +4 -0
- data/spec/data/samples/draw_shapes.rb.txt +57 -0
- data/spec/data/samples/hand.rb.txt +514 -0
- data/spec/data/samples/load_images.rb.txt +6 -0
- data/spec/data/samples/text_options.rb.txt +81 -0
- data/spec/data/xlsx/basic.xlsx +0 -0
- data/spec/data/xlsx/formulas.xlsx +0 -0
- data/spec/graphics/graphics_images_spec.rb +49 -48
- data/spec/graphics/graphics_shapes_spec.rb +43 -41
- data/spec/graphics/graphics_text_spec.rb +25 -11
- data/spec/samples/_diffs/gitkeep.txt +0 -0
- data/spec/samples/expected/autoscale_00.png +0 -0
- data/spec/samples/expected/autoscale_01.png +0 -0
- data/spec/samples/expected/autoscale_02.png +0 -0
- data/spec/samples/expected/backend_00.png +0 -0
- data/spec/samples/expected/backend_00.svg +78 -0
- data/spec/samples/expected/backend_01.png +0 -0
- data/spec/samples/expected/backend_01.svg +78 -0
- data/spec/samples/expected/basic_00.png +0 -0
- data/spec/samples/expected/basic_01.png +0 -0
- data/spec/samples/expected/basic_02.png +0 -0
- data/spec/samples/expected/cairo_access_00.png +0 -0
- data/spec/samples/expected/cairo_access_01.png +0 -0
- data/spec/samples/expected/card_00.png +0 -0
- data/spec/samples/expected/card_01.png +0 -0
- data/spec/samples/expected/colors_00.png +0 -0
- data/spec/samples/expected/config_disable_text_00.png +0 -0
- data/spec/samples/expected/config_text_00.png +0 -0
- data/spec/samples/expected/custom-config_00.png +0 -0
- data/spec/samples/expected/embed_00.png +0 -0
- data/spec/samples/expected/embed_multi_00.png +0 -0
- data/spec/samples/expected/embed_multi_01.png +0 -0
- data/spec/samples/expected/embed_multi_02.png +0 -0
- data/spec/samples/expected/embed_multisheet_00.png +0 -0
- data/spec/samples/expected/gitkeep.txt +0 -0
- data/spec/samples/expected/gradient_00.png +0 -0
- data/spec/samples/expected/hand.png +0 -0
- data/spec/samples/expected/hand_pretty.png +0 -0
- data/spec/samples/expected/landscape_00.png +0 -0
- data/spec/samples/expected/layout2_00.png +0 -0
- data/spec/samples/expected/layout_00.png +0 -0
- data/spec/samples/expected/layout_builtin_hand_00.png +0 -0
- data/spec/samples/expected/layout_builtin_playing_card_00.png +0 -0
- data/spec/samples/expected/load_images_00.png +0 -0
- data/spec/samples/expected/portrait_00.png +0 -0
- data/spec/samples/expected/ranges_00.png +0 -0
- data/spec/samples/expected/ranges_01.png +0 -0
- data/spec/samples/expected/ranges_02.png +0 -0
- data/spec/samples/expected/sample_csv_00.png +0 -0
- data/spec/samples/expected/sample_csv_01.png +0 -0
- data/spec/samples/expected/sample_excel_00.png +0 -0
- data/spec/samples/expected/sample_excel_01.png +0 -0
- data/spec/samples/expected/sample_excel_02.png +0 -0
- data/spec/samples/expected/save_sheet_00.png +0 -0
- data/spec/samples/expected/save_sheet_01.png +0 -0
- data/spec/samples/expected/save_sheet_range_00.png +0 -0
- data/spec/samples/expected/save_sheet_range_01.png +0 -0
- data/spec/samples/expected/save_single_sheet_00.png +0 -0
- data/spec/samples/expected/saves_notrim_01.png +0 -0
- data/spec/samples/expected/shape_00.png +0 -0
- data/spec/samples/expected/showcase.png +0 -0
- data/spec/samples/expected/showcase2.png +0 -0
- data/spec/samples/expected/showcase_individual_00.png +0 -0
- data/spec/samples/expected/showcase_individual_01.png +0 -0
- data/spec/samples/expected/showcase_individual_02.png +0 -0
- data/spec/samples/expected/showcase_individual_03.png +0 -0
- data/spec/samples/expected/text_00.png +0 -0
- data/spec/samples/expected/text_01.png +0 -0
- data/spec/samples/expected/text_02.png +0 -0
- data/spec/samples/expected/tgc_sample_00.png +0 -0
- data/spec/samples/expected/units_00.png +0 -0
- data/spec/samples/samples_regression_spec.rb +7 -5
- data/spec/samples/sanity.html.erb +28 -0
- data/spec/samples/sanity.rb +70 -0
- data/spec/spec_helper.rb +15 -1
- data/squib.gemspec +3 -1
- data/squib.sublime-project +27 -40
- metadata +177 -4
File without changes
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,78 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="825pt" height="1125pt" viewBox="0 0 825 1125" version="1.1">
|
3
|
+
<defs>
|
4
|
+
<g>
|
5
|
+
<symbol overflow="visible" id="glyph0-0">
|
6
|
+
<path style="stroke:none;" d="M 12 0 L 12 -72 L 84 -72 L 84 0 Z M 18 -6 L 78 -6 L 78 -66 L 18 -66 Z M 18 -6 "/>
|
7
|
+
</symbol>
|
8
|
+
<symbol overflow="visible" id="glyph0-1">
|
9
|
+
<path style="stroke:none;" d="M 66 0 L 48 0 L 48 -31 L 25 -31 L 25 0 L 7 0 L 7 -70 L 25 -70 L 25 -44 L 48 -44 L 48 -70 L 66 -70 Z M 66 0 "/>
|
10
|
+
</symbol>
|
11
|
+
<symbol overflow="visible" id="glyph0-2">
|
12
|
+
<path style="stroke:none;" d="M 33.109375 1 C 23.066406 0.996094 15.371094 -1.390625 10.023438 -6.164063 C 4.671875 -10.9375 1.996094 -17.742188 2 -26.578125 C 1.996094 -35.210938 4.496094 -42.105469 9.492188 -47.265625 C 14.484375 -52.417969 21.464844 -54.996094 30.4375 -55 C 38.589844 -54.996094 44.722656 -52.828125 48.835938 -48.5 C 52.941406 -44.164063 54.996094 -37.960938 55 -29.890625 L 55 -24 L 18 -24 C 18.15625 -21.507813 18.683594 -19.425781 19.585938 -17.757813 C 20.484375 -16.082031 21.675781 -14.75 23.15625 -13.765625 C 24.601563 -12.78125 26.289063 -12.078125 28.21875 -11.648438 C 30.144531 -11.214844 32.246094 -10.996094 34.53125 -11 C 36.484375 -10.996094 38.414063 -11.207031 40.3125 -11.625 C 42.207031 -12.039063 43.941406 -12.589844 45.515625 -13.28125 C 46.898438 -13.863281 48.175781 -14.496094 49.351563 -15.179688 C 50.519531 -15.859375 51.476563 -16.464844 52.21875 -17 L 54 -17 L 54 -3.375 C 52.644531 -2.84375 51.402344 -2.351563 50.28125 -1.898438 C 49.152344 -1.445313 47.617188 -0.984375 45.671875 -0.515625 C 43.867188 -0.0390625 42.011719 0.332031 40.101563 0.601563 C 38.1875 0.863281 35.855469 0.996094 33.109375 1 Z M 39 -34 C 38.894531 -37.582031 38.039063 -40.3125 36.4375 -42.1875 C 34.832031 -44.0625 32.367188 -45 29.046875 -45 C 25.65625 -45 23.011719 -44.015625 21.109375 -42.046875 C 19.199219 -40.078125 18.148438 -37.394531 17.953125 -34 Z M 39 -34 "/>
|
13
|
+
</symbol>
|
14
|
+
<symbol overflow="visible" id="glyph0-3">
|
15
|
+
<path style="stroke:none;" d="M 22 0 L 6 0 L 6 -73 L 22 -73 Z M 22 0 "/>
|
16
|
+
</symbol>
|
17
|
+
<symbol overflow="visible" id="glyph0-4">
|
18
|
+
<path style="stroke:none;" d="M 57 -26.46875 C 57 -17.640625 54.605469 -10.691406 49.820313 -5.617188 C 45.03125 -0.539063 38.257813 1.996094 29.5 2 C 20.808594 1.996094 14.054688 -0.539063 9.234375 -5.617188 C 4.410156 -10.691406 1.996094 -17.640625 2 -26.46875 C 1.996094 -35.390625 4.410156 -42.378906 9.234375 -47.429688 C 14.054688 -52.472656 20.808594 -54.996094 29.5 -55 C 38.226563 -54.996094 44.992188 -52.457031 49.796875 -47.382813 C 54.597656 -42.300781 57 -35.328125 57 -26.46875 Z M 40 -26.375 C 39.996094 -29.558594 39.734375 -32.214844 39.21875 -34.335938 C 38.695313 -36.453125 37.972656 -38.148438 37.046875 -39.421875 C 36.066406 -40.753906 34.960938 -41.683594 33.726563 -42.210938 C 32.492188 -42.734375 31.082031 -42.996094 29.5 -43 C 28.007813 -42.996094 26.660156 -42.765625 25.460938 -42.304688 C 24.253906 -41.839844 23.148438 -40.957031 22.140625 -39.65625 C 21.179688 -38.414063 20.417969 -36.710938 19.851563 -34.546875 C 19.28125 -32.378906 18.996094 -29.652344 19 -26.375 C 18.996094 -23.101563 19.265625 -20.453125 19.804688 -18.429688 C 20.339844 -16.398438 21.035156 -14.78125 21.890625 -13.578125 C 22.785156 -12.335938 23.894531 -11.429688 25.226563 -10.859375 C 26.550781 -10.28125 28.023438 -9.996094 29.640625 -10 C 30.972656 -9.996094 32.328125 -10.28125 33.703125 -10.859375 C 35.078125 -11.429688 36.175781 -12.289063 37 -13.4375 C 37.988281 -14.796875 38.734375 -16.445313 39.242188 -18.375 C 39.742188 -20.300781 39.996094 -22.964844 40 -26.375 Z M 40 -26.375 "/>
|
19
|
+
</symbol>
|
20
|
+
<symbol overflow="visible" id="glyph0-5">
|
21
|
+
<path style="stroke:none;" d="M 26 -18 L 9.84375 18 L 0 18 L 9.09375 -18 Z M 26 -18 "/>
|
22
|
+
</symbol>
|
23
|
+
<symbol overflow="visible" id="glyph0-6">
|
24
|
+
<path style="stroke:none;" d=""/>
|
25
|
+
</symbol>
|
26
|
+
<symbol overflow="visible" id="glyph0-7">
|
27
|
+
<path style="stroke:none;" d="M 84 -53 L 68.8125 0 L 51.578125 0 L 42.453125 -34.265625 L 33.28125 0 L 16.046875 0 L 1 -53 L 17.625 -53 L 26.015625 -17.9375 L 35.875 -53 L 50.1875 -53 L 59.5 -17.9375 L 67.359375 -53 Z M 84 -53 "/>
|
28
|
+
</symbol>
|
29
|
+
<symbol overflow="visible" id="glyph0-8">
|
30
|
+
<path style="stroke:none;" d="M 42 -38 L 40.5625 -38 C 39.902344 -38.328125 38.945313 -38.578125 37.695313 -38.75 C 36.4375 -38.914063 35.050781 -39 33.53125 -39 C 31.714844 -39 29.8125 -38.742188 27.820313 -38.226563 C 25.824219 -37.710938 23.882813 -37.097656 22 -36.390625 L 22 0 L 6 0 L 6 -53 L 22 -53 L 22 -45.234375 C 22.789063 -45.921875 23.886719 -46.789063 25.289063 -47.84375 C 26.6875 -48.890625 27.964844 -49.730469 29.125 -50.359375 C 30.382813 -51.085938 31.847656 -51.707031 33.515625 -52.226563 C 35.179688 -52.738281 36.75 -52.996094 38.234375 -53 C 38.792969 -52.996094 39.421875 -52.980469 40.117188 -52.953125 C 40.808594 -52.917969 41.4375 -52.878906 42 -52.828125 Z M 42 -38 "/>
|
31
|
+
</symbol>
|
32
|
+
<symbol overflow="visible" id="glyph0-9">
|
33
|
+
<path style="stroke:none;" d="M 54 0 L 38 0 L 38 -5.484375 C 36.914063 -4.609375 35.679688 -3.671875 34.289063 -2.671875 C 32.898438 -1.671875 31.675781 -0.921875 30.625 -0.421875 C 29.277344 0.328125 27.949219 0.917969 26.640625 1.351563 C 25.324219 1.78125 23.757813 1.996094 21.9375 2 C 15.800781 1.996094 10.941406 -0.550781 7.367188 -5.648438 C 3.785156 -10.746094 1.996094 -17.558594 2 -26.09375 C 1.996094 -30.796875 2.605469 -34.882813 3.820313 -38.351563 C 5.03125 -41.8125 6.710938 -44.832031 8.859375 -47.40625 C 10.804688 -49.738281 13.167969 -51.585938 15.953125 -52.953125 C 18.730469 -54.3125 21.667969 -54.996094 24.765625 -55 C 27.574219 -54.996094 29.882813 -54.707031 31.695313 -54.132813 C 33.5 -53.550781 35.601563 -52.652344 38 -51.4375 L 38 -73 L 54 -73 Z M 38 -14.3125 L 38 -41.515625 C 37.164063 -41.9375 36.070313 -42.292969 34.71875 -42.578125 C 33.359375 -42.855469 32.199219 -42.996094 31.234375 -43 C 27.167969 -42.996094 24.113281 -41.546875 22.070313 -38.65625 C 20.019531 -35.757813 18.996094 -31.707031 19 -26.5 C 18.996094 -21.039063 19.8125 -17.089844 21.445313 -14.65625 C 23.074219 -12.214844 25.707031 -10.996094 29.34375 -11 C 30.820313 -10.996094 32.316406 -11.292969 33.835938 -11.890625 C 35.347656 -12.480469 36.734375 -13.289063 38 -14.3125 Z M 38 -14.3125 "/>
|
34
|
+
</symbol>
|
35
|
+
<symbol overflow="visible" id="glyph0-10">
|
36
|
+
<path style="stroke:none;" d="M 25 -70 L 23.140625 -20 L 8.859375 -20 L 7 -70 Z M 25 0 L 7 0 L 7 -12 L 25 -12 Z M 25 0 "/>
|
37
|
+
</symbol>
|
38
|
+
</g>
|
39
|
+
<image id="image200" width="128" height="128" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAQAAABpN6lAAAAAAmJLR0QAxtiKRLcAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfeCAwPOiprCHMUAAAM90lEQVR42uVda3RVxRX+EiLhFRACYrQEjBheN0VABQlgKiDlbVCqxQd0UaiiRRHBroWg1UVVFGm6LGhXrNJSwSoiWhQDKBKCouIDEiERoiGoaJSXEkFDvv7gcnPOvWfmzMyZG2O7Z2Wtm3P27Nl7n3ns2bNnJoHwhzIUYlto56N7s6tQjRNoyJCCdkgv6nZDn+KByFTAT6CP6MuwisX4aUIIuQnX+qmBwlSE8bMlr38yafzsIslrweNKTMz9XxD+VJqYW6mjgHykGBTSrEGrIIX5qgq4MWRWxNwGrgLwxpCCAkY8YUp+OHc1+KYw4gkfBeRsNifemmSeQb4N9aqCnM0SBZh//ZPpOMlfauaZTPKuH7EWWGj7dWkjSbKtRo4kUjuP3b7A0fMHJ3w/SbJCI8fysAIKlbDTrakgP1oBlUYDX3S6PCzOckX83qyDMb7YV3GKxUGx0q0AO2bPmRFxrlfC3+dQwFEf3FSSo62aRg4FFMEW2TrI8MWdRTf8RYpdRvISqz1BUZ0C7Nn8b0TEOeCD2ZKxcI4QexFJ8nzLc4SwAkphj+gihzjrpZhrPRSwQ4A7wFdBZqkURCKwzOIE9E3H78G4XYg3GMM8p6+TPJ4m49XwryOWp8vLTk6HQxZ12jHqm/YS4B2kN9SykaRZJVmuASESVhuAuxskyWNM9sC5j2JYFoU72/HOvklUCisGkDO9GyXQuzEYaZSDs6vr5npjXwH5SNwWstuu3oj6vxcejHqy2ofCC47fWxy/j8fBabYtFGj+55Wu9/img52DD/1hZhh3tevpF3GZGyLDMslMT5Fau2aM/pDlocqyOCgggwkp/MZytfLyM5fjAlyJ4RiJxopUTiABie7qigvi4ERPqtbK0BcpWO+DU4IeMc8ycECTtUYxTw4r5x2IJLymhFmNxBOabK0DUYpHMAZNFIwhm3DIl7dhWIjtIDahrXI9Q5Bxfh//zl8zNQrjt1SHH3iA5dzDr/i9L+4n7O/JUQuO4xLuceGerixPAqj3HbYjy+PbFGAdCrA3bNDu8DGXC1GCYhTHDGyJCCGEHuiLwcLSc1Ee/t0el2EoLkP7GKyDaKPVZ2mlhyXf6Dhf5C2CcYD8lPM5QLmc3pzDnZ508jiFK/mNhI+ndSTSVcBIhYpdG/V/DRfTbMaRzgekonrD1HgqIFmTmSO8KfBoPYGfaZWZEU8FgJXKjHzDSdZMlrHKSjihR1mflScVGXnQut12h1K5BfFWwLUKTGznWXHx6Lfkq75lz463As70ZWFBXJc1bvEpvY8WNW07AACOopnwXQ0GY1OcIz+64k20Ege9aNFKNGFgnfDNQbSPu/jALrSNmEPR8I4mLSMFbBA8r0CaYNLTBCkG5TSX1LNz8ZYWb9YswVhH1Sko9sRtwyX8LozxEnvEOLxX8mtW8/WoVZ+mkbFmLxeys4CPAg8uhuhKY8P1SdZyHxMkq791sNTRo29xvdkUedOFP0Tl2smJSh5IenIRnXo4fc9mCng9xt4ThcfkxbC4h60JDvf4ep+zDcGfe9avEgH9T1xYu6VcX8w5XM9aDvWqASkcz54xU1tRmhfF3pniYSZmZkDW8inBEFbDyQq+YmdqzGoH1l89p8tjmccdYYxKthE1gWzWkCS/Zzk38Sku4HSO40WeJk0/F3NXSJV1K4PDK4qL7FWO5505lStY5aKzxq8PWCVk4VNu5UrmcTYncKBLqH/41pevAivgbCn9OQ7M+9iPdwrsxTtUOsFxmqztV2gwYwKKv9S3hHcUqGSrjgIt+LYGc/2U+oztgRTQ3Je+32pTpbh38348Q5G15xQ7zawA4j+gVMIDEgovmdgBHblXgbmmygPnakPxa5VLOCKg8AdzQyjP4ow/1VABtymXMNUz/8BglmBffithLtk4ekQVDmuVUB0zcqXaMIWfFzC3RNt+rNVWwDVa9G9z5X3Z3lzgCk/m9KM7p2uKXxFgjvKY3clQCrdFMfe20RxCzyS6VJv+ikjetfZngzNdzP3GSAGjNcQ3UfEg/XgSHfK/sBCu8oGyAnoY0a9bRlGLW9fyCJ0f+bXR2J11jSLeGpQY0X8m8muEbY9QIktMXc9Ko4ob2htSv9Lhd7DaBCa6BrEgsYUqJtHjxtSbOajMsKWADjEtN6hvfx6/loi/UNPEcqcKB6WP/XsSf4ILYhh838oCx/mcxZe5O1KzvmARH+agwHSfi+I2P4gCLuUhjy/0rwa9M+xej7iFK0xGgeZYgw2eKzAlaMgQu9O5MZ7FFrTTWxi5Gd8KBxLTzdRNUYYSDFDC7YUFhqV4f56L8SXmqQ6DXfiRtI/ub1Q1z47M1g7yj8yS4E3j+1JXuLl3aD8v9F8cXYIbfLel6zeCs1CBpKhnm1GCj1GOY0gEkIZMdEa2K8CpDF20S2qGo9L3T+M6/CCqAWMiy1gy6KD9VU7z7ExVYKOFdatYL9Mk71HgPkWmWmmz9A7N4W7rCnDtS4jaSKQUzNxOk6EZDAZdrStgqswO+Jtv9s5a7LQKvCxSqhfz4UPtGbedaTIK9A5kmZnABI3yTpfQ+ZwXqVqC0yRkcqxGFNlafxJt3KqDOTqW4GI0xSrBuwyNQel+K9Zde4xSxu3k+fR1pGK+XojMMYxDNqo87QB1mGjJwL1FGTPLI6hrFHIEwTs+HqEtOAN3BVDAJGsW/hDh/gQ/7v6MFlgTzCPUloWutvSZcntcR3swUbHMQtdm3E62PEJjXOsuSRZNElVYrV3mdNte4f0axx2cjMmxCcdVt8Nq+a00vMKtURv5PVxx85JNaIxUBawRCuGcRoGSl+AA0iL/jVbKMwB2ob8CzsjIr5dtusXviqmQmQq5dtIu3OpbYhMX/ihbTWAj7o55dpNCvnMt14BOvhi/c/33IvKC14B0gQP7WD2PASS5wrfEMg8PdnKQGpCLCsEWtGQN47S+IBPnxTzriUPoadoJPoLnJG8f0t78Gm94UBCp/j6m6zeB5LBj0hkPvJVLXYEul9RzE1goLe0s157WaHhRkCtJ5JR+F8BB7MLO8N9ux0h76pTORejtszW5mdUvvEf6tq5GfoefAUhG13Dqgq4YhUPIQqVaDUhirsSGHqk80LxnuQZcKCmri+9wmcnLbe0XqHTsDJThLbSsAOlxKI6Icx1ZjLbM1I22LaRd4VqrDUA2pZ3qODx3Zvy3zICvOb5LdwnecYvfX+yIa+PaZF8vW2aGukaHBI2ldVOQnSCy24HXs34UMN/F3KvGLmobHaDTjb9eXxYzBWyNYu9OIeYUK+IvFtK/yoW3r74UEAviIxTXBxb/Q6W4QJP4ZUMF9PJk8zIh/q5A4u+VbH+LhVGashgNg94nfLwinB51x3bjwe8tpAtDKIqVebM8DK5VWXSMSo8bff17hPSGCXLsqI8mUCNheb7ERbpfS/itkkXYKYb2ohUFdPRhfAtPk4RbfqwkfIFojxdB8FmT3WH2FDDZl/3vpIcY9ORDURtenVDIm6UBGOm+9WhevA9QWI6rFbCexGSHG93rmIOL0RWdkIqmAA7hS5TiQ5T6UF2AWb4lF2JQfDvBKsU2XMNrrQZADuNhC7PGwE2gpeYY/isrwg+NbH5Wge46doCu526IFnYHPI0qTA00Db4a5SjQWpJXtwUaQftQ9cXSWJ43hO+e5zDt796fyzxp3c+HpDVitXIJKdQ+UrPMo8D3uCB8dMWffCrnBs5kN98yzuE0/kdgbWx2xKgN4r180wPnqLI0GUzI2bwxW6/PrIMirEOB6xzZf2O8EpVKFGMH9uEIjuAwatEKLdESachCSBKAU47f4yWP530wFENxqeNJGvYr8ZFTpHmvxBCStXyFtwscD9sYPxjhy11XTucLPK4RTHFjSPNg5e4+MYIH46iALspcdlAO5Mu3fbS2F3xEcBhXGWycdcMYq1ZF2Jds93D1MzzY/soxM+jOGYp1ZAvvZJ9wkzsFs6yLHyIBYq61OtDPI6yldRROjoL41znwcy3sJBOlubB8wcKEGFG8Btk1PuJ/EIU/KTJNst8ALF+xMTdKlL6eWC18FNBRcBDPl5bFj1yxYe+SlSdcguQahc8v8sxxt5Xdiu5U5JwL2blmZ5NyPE+FQPxvpcd5pFkU33XNjq2LlupW5f0uXespUMBI6dkAQ6yJH3PRkp2rtk7BKgXcfxrsD8q0poB8L3dA0MvWmkecmSrYjXgiRgGpcTB1vA1ggT8k2HV7Jw9LKlfGn6S8vGY3Ca/bI4JduDiW5AE21sjhnNN/UU/iSy9cDFYLbmONZiU+x6GAfj/C1xe4BE37gsd4nnaeU2dVraz3ti/1iZpdu3u6EVNHSZJN4i68xrW7J+2C+rp4eTTJaXEvRfPiZYYN5Pq5evvRONOXX739f3/5eoLKylgZCrEttPPRvdlVqMaJBi10CtohvajbDX2KB/rdOw8A+C/P9iz7dYa7BgAAAABJRU5ErkJggg=="/>
|
40
|
+
<filter id="alpha" filterUnits="objectBoundingBox" x="0%" y="0%" width="100%" height="100%">
|
41
|
+
<feColorMatrix type="matrix" in="SourceGraphic" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
|
42
|
+
</filter>
|
43
|
+
<mask id="mask0">
|
44
|
+
<g filter="url(#alpha)">
|
45
|
+
<use xlink:href="#image200" transform="matrix(1,0,0,1,250,250)"/>
|
46
|
+
</g>
|
47
|
+
</mask>
|
48
|
+
</defs>
|
49
|
+
<g id="surface193">
|
50
|
+
<rect x="0" y="0" width="825" height="1125" style="fill:rgb(50.196078%,50.196078%,50.196078%);fill-opacity:1;stroke:none;"/>
|
51
|
+
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
52
|
+
<use xlink:href="#glyph0-1" x="106" y="596"/>
|
53
|
+
<use xlink:href="#glyph0-2" x="179" y="596"/>
|
54
|
+
<use xlink:href="#glyph0-3" x="236" y="596"/>
|
55
|
+
<use xlink:href="#glyph0-3" x="265" y="596"/>
|
56
|
+
<use xlink:href="#glyph0-4" x="294" y="596"/>
|
57
|
+
<use xlink:href="#glyph0-5" x="353" y="596"/>
|
58
|
+
<use xlink:href="#glyph0-6" x="383" y="596"/>
|
59
|
+
<use xlink:href="#glyph0-7" x="411" y="596"/>
|
60
|
+
<use xlink:href="#glyph0-4" x="496" y="596"/>
|
61
|
+
<use xlink:href="#glyph0-8" x="555" y="596"/>
|
62
|
+
<use xlink:href="#glyph0-3" x="597" y="596"/>
|
63
|
+
<use xlink:href="#glyph0-9" x="626" y="596"/>
|
64
|
+
<use xlink:href="#glyph0-10" x="686" y="596"/>
|
65
|
+
</g>
|
66
|
+
<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 76 38 L 750 38 C 769 38 788 57 788 76 L 788 1050 C 788 1069 769 1088 750 1088 L 76 1088 C 57 1088 38 1069 38 1050 L 38 76 C 38 57 57 38 76 38 Z M 76 38 "/>
|
67
|
+
<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 125 400 C 125 413.808594 113.808594 425 100 425 C 86.191406 425 75 413.808594 75 400 C 75 386.191406 86.191406 375 100 375 C 113.808594 375 125 386.191406 125 400 "/>
|
68
|
+
<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 100 425 L 125 475 L 75 475 Z M 100 425 "/>
|
69
|
+
<path style="fill:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 100 620 L 720 620 "/>
|
70
|
+
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:10.625396;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:4;" d="M 72.416536 -378.68698 L 439.575917 -378.68698 C 476.648655 -378.68698 506.694943 -348.640692 506.694943 -311.583603 L 506.694943 55.575778 C 506.694943 92.648516 476.648655 122.694804 439.575917 122.694804 L 72.416536 122.694804 C 35.359447 122.694804 5.313159 92.648516 5.313159 55.575778 L 5.313159 -311.583603 C 5.313159 -348.640692 35.359447 -378.68698 72.416536 -378.68698 Z M 72.416536 -378.68698 " transform="matrix(0.249615,0,0,0.249615,100.197194,171.049335)"/>
|
71
|
+
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 109.25 169.125 C 104.289063 172.332031 101 177.90625 101 184.25 C 101 194.191406 109.058594 202.25 119 202.25 C 124.957031 202.25 130.222656 199.335938 133.5 194.875 C 130.6875 196.691406 127.34375 197.75 123.75 197.75 C 113.808594 197.75 105.75 189.691406 105.75 179.75 C 105.75 175.765625 107.058594 172.105469 109.25 169.125 Z M 109.25 169.125 "/>
|
72
|
+
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 151.84375 123.230469 L 105.195313 169.878906 L 105.195313 195.828125 L 130.269531 195.828125 L 177.355469 148.742188 Z M 151.84375 123.230469 "/>
|
73
|
+
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:4;" d="M 181.779507 141.859042 L 197.398822 126.241402 M 200.74827 129.590013 L 184.943061 145.39271 " transform="matrix(4.664947,0,0,4.664947,-744.909784,-480.042297)"/>
|
74
|
+
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 193.6875 78.402344 C 180.496094 74.996094 165.875 78.382813 155.546875 88.707031 C 140.015625 104.238281 140.015625 129.460938 155.546875 144.992188 C 171.078125 160.523438 196.300781 160.523438 211.832031 144.992188 C 222.167969 134.652344 225.5625 120.054688 222.140625 106.851563 L 195.851563 133.136719 L 173.378906 127.160156 L 167.402344 104.6875 Z M 193.6875 78.402344 "/>
|
75
|
+
<use xlink:href="#image200" transform="matrix(1,0,0,1,250,75)"/>
|
76
|
+
<rect x="0" y="0" width="825" height="1125" style="fill:rgb(100%,0%,0%);fill-opacity:1;stroke:none;" mask="url(#mask0)"/>
|
77
|
+
</g>
|
78
|
+
</svg>
|
Binary file
|
@@ -0,0 +1,78 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="825pt" height="1125pt" viewBox="0 0 825 1125" version="1.1">
|
3
|
+
<defs>
|
4
|
+
<g>
|
5
|
+
<symbol overflow="visible" id="glyph0-0">
|
6
|
+
<path style="stroke:none;" d="M 12 0 L 12 -72 L 84 -72 L 84 0 Z M 18 -6 L 78 -6 L 78 -66 L 18 -66 Z M 18 -6 "/>
|
7
|
+
</symbol>
|
8
|
+
<symbol overflow="visible" id="glyph0-1">
|
9
|
+
<path style="stroke:none;" d="M 66 0 L 48 0 L 48 -31 L 25 -31 L 25 0 L 7 0 L 7 -70 L 25 -70 L 25 -44 L 48 -44 L 48 -70 L 66 -70 Z M 66 0 "/>
|
10
|
+
</symbol>
|
11
|
+
<symbol overflow="visible" id="glyph0-2">
|
12
|
+
<path style="stroke:none;" d="M 33.109375 1 C 23.066406 0.996094 15.371094 -1.390625 10.023438 -6.164063 C 4.671875 -10.9375 1.996094 -17.742188 2 -26.578125 C 1.996094 -35.210938 4.496094 -42.105469 9.492188 -47.265625 C 14.484375 -52.417969 21.464844 -54.996094 30.4375 -55 C 38.589844 -54.996094 44.722656 -52.828125 48.835938 -48.5 C 52.941406 -44.164063 54.996094 -37.960938 55 -29.890625 L 55 -24 L 18 -24 C 18.15625 -21.507813 18.683594 -19.425781 19.585938 -17.757813 C 20.484375 -16.082031 21.675781 -14.75 23.15625 -13.765625 C 24.601563 -12.78125 26.289063 -12.078125 28.21875 -11.648438 C 30.144531 -11.214844 32.246094 -10.996094 34.53125 -11 C 36.484375 -10.996094 38.414063 -11.207031 40.3125 -11.625 C 42.207031 -12.039063 43.941406 -12.589844 45.515625 -13.28125 C 46.898438 -13.863281 48.175781 -14.496094 49.351563 -15.179688 C 50.519531 -15.859375 51.476563 -16.464844 52.21875 -17 L 54 -17 L 54 -3.375 C 52.644531 -2.84375 51.402344 -2.351563 50.28125 -1.898438 C 49.152344 -1.445313 47.617188 -0.984375 45.671875 -0.515625 C 43.867188 -0.0390625 42.011719 0.332031 40.101563 0.601563 C 38.1875 0.863281 35.855469 0.996094 33.109375 1 Z M 39 -34 C 38.894531 -37.582031 38.039063 -40.3125 36.4375 -42.1875 C 34.832031 -44.0625 32.367188 -45 29.046875 -45 C 25.65625 -45 23.011719 -44.015625 21.109375 -42.046875 C 19.199219 -40.078125 18.148438 -37.394531 17.953125 -34 Z M 39 -34 "/>
|
13
|
+
</symbol>
|
14
|
+
<symbol overflow="visible" id="glyph0-3">
|
15
|
+
<path style="stroke:none;" d="M 22 0 L 6 0 L 6 -73 L 22 -73 Z M 22 0 "/>
|
16
|
+
</symbol>
|
17
|
+
<symbol overflow="visible" id="glyph0-4">
|
18
|
+
<path style="stroke:none;" d="M 57 -26.46875 C 57 -17.640625 54.605469 -10.691406 49.820313 -5.617188 C 45.03125 -0.539063 38.257813 1.996094 29.5 2 C 20.808594 1.996094 14.054688 -0.539063 9.234375 -5.617188 C 4.410156 -10.691406 1.996094 -17.640625 2 -26.46875 C 1.996094 -35.390625 4.410156 -42.378906 9.234375 -47.429688 C 14.054688 -52.472656 20.808594 -54.996094 29.5 -55 C 38.226563 -54.996094 44.992188 -52.457031 49.796875 -47.382813 C 54.597656 -42.300781 57 -35.328125 57 -26.46875 Z M 40 -26.375 C 39.996094 -29.558594 39.734375 -32.214844 39.21875 -34.335938 C 38.695313 -36.453125 37.972656 -38.148438 37.046875 -39.421875 C 36.066406 -40.753906 34.960938 -41.683594 33.726563 -42.210938 C 32.492188 -42.734375 31.082031 -42.996094 29.5 -43 C 28.007813 -42.996094 26.660156 -42.765625 25.460938 -42.304688 C 24.253906 -41.839844 23.148438 -40.957031 22.140625 -39.65625 C 21.179688 -38.414063 20.417969 -36.710938 19.851563 -34.546875 C 19.28125 -32.378906 18.996094 -29.652344 19 -26.375 C 18.996094 -23.101563 19.265625 -20.453125 19.804688 -18.429688 C 20.339844 -16.398438 21.035156 -14.78125 21.890625 -13.578125 C 22.785156 -12.335938 23.894531 -11.429688 25.226563 -10.859375 C 26.550781 -10.28125 28.023438 -9.996094 29.640625 -10 C 30.972656 -9.996094 32.328125 -10.28125 33.703125 -10.859375 C 35.078125 -11.429688 36.175781 -12.289063 37 -13.4375 C 37.988281 -14.796875 38.734375 -16.445313 39.242188 -18.375 C 39.742188 -20.300781 39.996094 -22.964844 40 -26.375 Z M 40 -26.375 "/>
|
19
|
+
</symbol>
|
20
|
+
<symbol overflow="visible" id="glyph0-5">
|
21
|
+
<path style="stroke:none;" d="M 26 -18 L 9.84375 18 L 0 18 L 9.09375 -18 Z M 26 -18 "/>
|
22
|
+
</symbol>
|
23
|
+
<symbol overflow="visible" id="glyph0-6">
|
24
|
+
<path style="stroke:none;" d=""/>
|
25
|
+
</symbol>
|
26
|
+
<symbol overflow="visible" id="glyph0-7">
|
27
|
+
<path style="stroke:none;" d="M 84 -53 L 68.8125 0 L 51.578125 0 L 42.453125 -34.265625 L 33.28125 0 L 16.046875 0 L 1 -53 L 17.625 -53 L 26.015625 -17.9375 L 35.875 -53 L 50.1875 -53 L 59.5 -17.9375 L 67.359375 -53 Z M 84 -53 "/>
|
28
|
+
</symbol>
|
29
|
+
<symbol overflow="visible" id="glyph0-8">
|
30
|
+
<path style="stroke:none;" d="M 42 -38 L 40.5625 -38 C 39.902344 -38.328125 38.945313 -38.578125 37.695313 -38.75 C 36.4375 -38.914063 35.050781 -39 33.53125 -39 C 31.714844 -39 29.8125 -38.742188 27.820313 -38.226563 C 25.824219 -37.710938 23.882813 -37.097656 22 -36.390625 L 22 0 L 6 0 L 6 -53 L 22 -53 L 22 -45.234375 C 22.789063 -45.921875 23.886719 -46.789063 25.289063 -47.84375 C 26.6875 -48.890625 27.964844 -49.730469 29.125 -50.359375 C 30.382813 -51.085938 31.847656 -51.707031 33.515625 -52.226563 C 35.179688 -52.738281 36.75 -52.996094 38.234375 -53 C 38.792969 -52.996094 39.421875 -52.980469 40.117188 -52.953125 C 40.808594 -52.917969 41.4375 -52.878906 42 -52.828125 Z M 42 -38 "/>
|
31
|
+
</symbol>
|
32
|
+
<symbol overflow="visible" id="glyph0-9">
|
33
|
+
<path style="stroke:none;" d="M 54 0 L 38 0 L 38 -5.484375 C 36.914063 -4.609375 35.679688 -3.671875 34.289063 -2.671875 C 32.898438 -1.671875 31.675781 -0.921875 30.625 -0.421875 C 29.277344 0.328125 27.949219 0.917969 26.640625 1.351563 C 25.324219 1.78125 23.757813 1.996094 21.9375 2 C 15.800781 1.996094 10.941406 -0.550781 7.367188 -5.648438 C 3.785156 -10.746094 1.996094 -17.558594 2 -26.09375 C 1.996094 -30.796875 2.605469 -34.882813 3.820313 -38.351563 C 5.03125 -41.8125 6.710938 -44.832031 8.859375 -47.40625 C 10.804688 -49.738281 13.167969 -51.585938 15.953125 -52.953125 C 18.730469 -54.3125 21.667969 -54.996094 24.765625 -55 C 27.574219 -54.996094 29.882813 -54.707031 31.695313 -54.132813 C 33.5 -53.550781 35.601563 -52.652344 38 -51.4375 L 38 -73 L 54 -73 Z M 38 -14.3125 L 38 -41.515625 C 37.164063 -41.9375 36.070313 -42.292969 34.71875 -42.578125 C 33.359375 -42.855469 32.199219 -42.996094 31.234375 -43 C 27.167969 -42.996094 24.113281 -41.546875 22.070313 -38.65625 C 20.019531 -35.757813 18.996094 -31.707031 19 -26.5 C 18.996094 -21.039063 19.8125 -17.089844 21.445313 -14.65625 C 23.074219 -12.214844 25.707031 -10.996094 29.34375 -11 C 30.820313 -10.996094 32.316406 -11.292969 33.835938 -11.890625 C 35.347656 -12.480469 36.734375 -13.289063 38 -14.3125 Z M 38 -14.3125 "/>
|
34
|
+
</symbol>
|
35
|
+
<symbol overflow="visible" id="glyph0-10">
|
36
|
+
<path style="stroke:none;" d="M 25 -70 L 23.140625 -20 L 8.859375 -20 L 7 -70 Z M 25 0 L 7 0 L 7 -12 L 25 -12 Z M 25 0 "/>
|
37
|
+
</symbol>
|
38
|
+
</g>
|
39
|
+
<image id="image200" width="128" height="128" xlink:href="data:image/png;base64,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"/>
|
40
|
+
<filter id="alpha" filterUnits="objectBoundingBox" x="0%" y="0%" width="100%" height="100%">
|
41
|
+
<feColorMatrix type="matrix" in="SourceGraphic" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
|
42
|
+
</filter>
|
43
|
+
<mask id="mask0">
|
44
|
+
<g filter="url(#alpha)">
|
45
|
+
<use xlink:href="#image200" transform="matrix(1,0,0,1,250,250)"/>
|
46
|
+
</g>
|
47
|
+
</mask>
|
48
|
+
</defs>
|
49
|
+
<g id="surface196">
|
50
|
+
<rect x="0" y="0" width="825" height="1125" style="fill:rgb(50.196078%,50.196078%,50.196078%);fill-opacity:1;stroke:none;"/>
|
51
|
+
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
52
|
+
<use xlink:href="#glyph0-1" x="106" y="596"/>
|
53
|
+
<use xlink:href="#glyph0-2" x="179" y="596"/>
|
54
|
+
<use xlink:href="#glyph0-3" x="236" y="596"/>
|
55
|
+
<use xlink:href="#glyph0-3" x="265" y="596"/>
|
56
|
+
<use xlink:href="#glyph0-4" x="294" y="596"/>
|
57
|
+
<use xlink:href="#glyph0-5" x="353" y="596"/>
|
58
|
+
<use xlink:href="#glyph0-6" x="383" y="596"/>
|
59
|
+
<use xlink:href="#glyph0-7" x="411" y="596"/>
|
60
|
+
<use xlink:href="#glyph0-4" x="496" y="596"/>
|
61
|
+
<use xlink:href="#glyph0-8" x="555" y="596"/>
|
62
|
+
<use xlink:href="#glyph0-3" x="597" y="596"/>
|
63
|
+
<use xlink:href="#glyph0-9" x="626" y="596"/>
|
64
|
+
<use xlink:href="#glyph0-10" x="686" y="596"/>
|
65
|
+
</g>
|
66
|
+
<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 76 38 L 750 38 C 769 38 788 57 788 76 L 788 1050 C 788 1069 769 1088 750 1088 L 76 1088 C 57 1088 38 1069 38 1050 L 38 76 C 38 57 57 38 76 38 Z M 76 38 "/>
|
67
|
+
<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 125 400 C 125 413.808594 113.808594 425 100 425 C 86.191406 425 75 413.808594 75 400 C 75 386.191406 86.191406 375 100 375 C 113.808594 375 125 386.191406 125 400 "/>
|
68
|
+
<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 100 425 L 125 475 L 75 475 Z M 100 425 "/>
|
69
|
+
<path style="fill:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 100 620 L 720 620 "/>
|
70
|
+
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:10.625396;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:4;" d="M 72.416536 -378.68698 L 439.575917 -378.68698 C 476.648655 -378.68698 506.694943 -348.640692 506.694943 -311.583603 L 506.694943 55.575778 C 506.694943 92.648516 476.648655 122.694804 439.575917 122.694804 L 72.416536 122.694804 C 35.359447 122.694804 5.313159 92.648516 5.313159 55.575778 L 5.313159 -311.583603 C 5.313159 -348.640692 35.359447 -378.68698 72.416536 -378.68698 Z M 72.416536 -378.68698 " transform="matrix(0.249615,0,0,0.249615,100.197194,171.049335)"/>
|
71
|
+
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 109.25 169.125 C 104.289063 172.332031 101 177.90625 101 184.25 C 101 194.191406 109.058594 202.25 119 202.25 C 124.957031 202.25 130.222656 199.335938 133.5 194.875 C 130.6875 196.691406 127.34375 197.75 123.75 197.75 C 113.808594 197.75 105.75 189.691406 105.75 179.75 C 105.75 175.765625 107.058594 172.105469 109.25 169.125 Z M 109.25 169.125 "/>
|
72
|
+
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 151.84375 123.230469 L 105.195313 169.878906 L 105.195313 195.828125 L 130.269531 195.828125 L 177.355469 148.742188 Z M 151.84375 123.230469 "/>
|
73
|
+
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:4;" d="M 181.779507 141.859042 L 197.398822 126.241402 M 200.74827 129.590013 L 184.943061 145.39271 " transform="matrix(4.664947,0,0,4.664947,-744.909784,-480.042297)"/>
|
74
|
+
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 193.6875 78.402344 C 180.496094 74.996094 165.875 78.382813 155.546875 88.707031 C 140.015625 104.238281 140.015625 129.460938 155.546875 144.992188 C 171.078125 160.523438 196.300781 160.523438 211.832031 144.992188 C 222.167969 134.652344 225.5625 120.054688 222.140625 106.851563 L 195.851563 133.136719 L 173.378906 127.160156 L 167.402344 104.6875 Z M 193.6875 78.402344 "/>
|
75
|
+
<use xlink:href="#image200" transform="matrix(1,0,0,1,250,75)"/>
|
76
|
+
<rect x="0" y="0" width="825" height="1125" style="fill:rgb(100%,0%,0%);fill-opacity:1;stroke:none;" mask="url(#mask0)"/>
|
77
|
+
</g>
|
78
|
+
</svg>
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
File without changes
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -3,6 +3,7 @@ require 'squib'
|
|
3
3
|
require 'pp'
|
4
4
|
|
5
5
|
describe "Squib samples" do
|
6
|
+
@SAMPLES_DIR = "#{File.expand_path(File.dirname(__FILE__))}/../../samples/"
|
6
7
|
let(:samples_dir) { "#{File.expand_path(File.dirname(__FILE__))}/../../samples/" }
|
7
8
|
|
8
9
|
around(:each) do |example|
|
@@ -11,10 +12,10 @@ describe "Squib samples" do
|
|
11
12
|
end
|
12
13
|
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
Dir["#{@SAMPLES_DIR}/**/*.rb"].each do |sample|
|
16
|
+
it "should execute #{sample} with no errors", slow: true do
|
17
|
+
allow(Squib.logger).to receive(:warn) {}
|
18
|
+
allow(ProgressBar).to receive(:create).and_return(Squib::DoNothing.new)
|
18
19
|
load sample
|
19
20
|
end
|
20
21
|
end
|
@@ -57,6 +58,7 @@ describe "Squib samples" do
|
|
57
58
|
embed_text.rb
|
58
59
|
excel.rb
|
59
60
|
gradients.rb
|
61
|
+
hand.rb
|
60
62
|
hello_world.rb
|
61
63
|
load_images.rb
|
62
64
|
portrait-landscape.rb
|
@@ -67,7 +69,7 @@ describe "Squib samples" do
|
|
67
69
|
tgc_proofs.rb
|
68
70
|
units.rb
|
69
71
|
).each do |sample|
|
70
|
-
it "has not changed for #{sample}" do
|
72
|
+
it "has not changed for #{sample}", slow: true do
|
71
73
|
log = StringIO.new
|
72
74
|
mock_cairo(log)
|
73
75
|
load sample
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<meta name="viewport" content="width=device-width">
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
6
|
+
<title>Squib Sanity Test for v<%=Squib::VERSION%></title>
|
7
|
+
<style>
|
8
|
+
body{
|
9
|
+
background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAHElEQVQYlWO4ePFiAzGY4eLFiw0MxIBRhVRRCADsljgKUbBKPgAAAABJRU5ErkJggg==) repeat;
|
10
|
+
}
|
11
|
+
img{
|
12
|
+
width: 30%;
|
13
|
+
}
|
14
|
+
</style>
|
15
|
+
</head>
|
16
|
+
<body>
|
17
|
+
<% count = 0 %>
|
18
|
+
<% images.each do |exp, actual, diff| %>
|
19
|
+
<img src="<%=exp %>">
|
20
|
+
<img src="<%=actual %>">
|
21
|
+
<img src="<%=diff %>">
|
22
|
+
<br>
|
23
|
+
<%=exp %>
|
24
|
+
<hr>
|
25
|
+
<% count += 1 %>
|
26
|
+
<% end %>
|
27
|
+
<body>
|
28
|
+
</html>
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'launchy'
|
2
|
+
require 'erb'
|
3
|
+
require 'cairo'
|
4
|
+
require 'ruby-progressbar'
|
5
|
+
|
6
|
+
# An pixel-by-pixel comparison of sample images for visual regression testing
|
7
|
+
class Sanity
|
8
|
+
|
9
|
+
@@EXPECTED_DIR = "#{File.expand_path(File.dirname(__FILE__))}/expected/"
|
10
|
+
@@OUTPUT_DIR = "#{File.expand_path(File.dirname(__FILE__))}/../../samples/_output/"
|
11
|
+
@@DIFF_DIR = "#{File.expand_path(File.dirname(__FILE__))}/_diffs/"
|
12
|
+
@@SANITY_ERB = "#{File.expand_path(File.dirname(__FILE__))}/sanity.html.erb"
|
13
|
+
@@SANITY_HTML = "#{File.expand_path(File.dirname(__FILE__))}/sanity.html"
|
14
|
+
|
15
|
+
def images
|
16
|
+
images = []
|
17
|
+
exp_pngs = Dir[@@EXPECTED_DIR + "/**/*.png"]
|
18
|
+
bar = ProgressBar.create(title: 'Diffing images', total: exp_pngs.size)
|
19
|
+
exp_pngs.each do |exp_png|
|
20
|
+
row = []
|
21
|
+
actual_png = @@OUTPUT_DIR + File.basename(exp_png)
|
22
|
+
row << "file:///" + exp_png
|
23
|
+
row << "file:///" + actual_png #actual
|
24
|
+
row << "file:///" + diff_image(exp_png, actual_png)
|
25
|
+
images << row
|
26
|
+
bar.increment
|
27
|
+
end
|
28
|
+
bar.finish
|
29
|
+
return images
|
30
|
+
end
|
31
|
+
|
32
|
+
def run
|
33
|
+
puts "Building sanity test..."
|
34
|
+
sanity_template = File.read(@@SANITY_ERB)
|
35
|
+
process_erb(sanity_template)
|
36
|
+
Launchy.open("file:///" + @@SANITY_HTML)
|
37
|
+
puts "Done."
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def diff_image(exp_file, actual_file)
|
43
|
+
exp = Cairo::ImageSurface.from_png(exp_file)
|
44
|
+
exp_data = exp.data.bytes
|
45
|
+
actual_data = Cairo::ImageSurface.from_png(actual_file).data.bytes
|
46
|
+
new_data = Array.new(exp_data.size, 255)
|
47
|
+
unless exp_data == actual_data # this seems to be the fastest initial comparison
|
48
|
+
(0..exp_data.size).each do |i|
|
49
|
+
empty = (i % 4 == 3) ? 0 : 255 # alpha channel is empty, others are just black
|
50
|
+
new_data[i] = (exp_data[i] == actual_data[i]) ? empty : 128
|
51
|
+
end
|
52
|
+
end
|
53
|
+
out = Cairo::ImageSurface.new(new_data.pack('c*'), exp.format, exp.width, exp.height, exp.stride)
|
54
|
+
out_file = @@DIFF_DIR + exp_file[exp_file.rindex("/")..-1]
|
55
|
+
out.write_to_png(out_file)
|
56
|
+
out_file
|
57
|
+
end
|
58
|
+
|
59
|
+
def diff_pixel(exp, actual)
|
60
|
+
(exp == actual) ? [0, 0, 0, 0] : [255, 0, 0, 255]
|
61
|
+
end
|
62
|
+
|
63
|
+
def process_erb(sanity_template)
|
64
|
+
renderer = ERB.new(sanity_template)
|
65
|
+
File.open(@@SANITY_HTML, 'w+') do |html|
|
66
|
+
html.write(renderer.result(binding))
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -32,6 +32,18 @@ def csv_file(file)
|
|
32
32
|
"#{File.expand_path(File.dirname(__FILE__))}/data/csv/#{file}"
|
33
33
|
end
|
34
34
|
|
35
|
+
def xlsx_file(file)
|
36
|
+
"#{File.expand_path(File.dirname(__FILE__))}/data/xlsx/#{file}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def project_template(file)
|
40
|
+
"#{File.expand_path(File.dirname(__FILE__))}/../lib/squib/project_template/#{file}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def conf(file)
|
44
|
+
"#{File.expand_path(File.dirname(__FILE__))}/data/conf/#{file}"
|
45
|
+
end
|
46
|
+
|
35
47
|
def overwrite_sample(sample_name, log)
|
36
48
|
# Use this to overwrite the regression with current state
|
37
49
|
File.open(sample_regression_file(sample_name), 'w+:UTF-8') do |f|
|
@@ -67,6 +79,7 @@ def mock_cairo(strio)
|
|
67
79
|
allow(Cairo::ImageSurface).to receive(:new).and_return(surface)
|
68
80
|
allow(surface).to receive(:width).and_return(100)
|
69
81
|
allow(surface).to receive(:height).and_return(101)
|
82
|
+
allow(surface).to receive(:ink_extents).and_return([0,0,100,100])
|
70
83
|
allow(Cairo::Context).to receive(:new).and_return(cxt)
|
71
84
|
allow(cxt).to receive(:create_pango_layout).and_return(pango)
|
72
85
|
allow(cxt).to receive(:target).and_return(surface)
|
@@ -90,7 +103,8 @@ def mock_cairo(strio)
|
|
90
103
|
update_pango_layout width height show_pango_layout rounded_rectangle
|
91
104
|
set_line_width stroke fill set_source scale render_rsvg_handle circle
|
92
105
|
triangle line_to operator= show_page clip transform mask rectangle
|
93
|
-
reset_clip antialias= curve_to matrix=
|
106
|
+
reset_clip antialias= curve_to matrix= pango_layout_path stroke_preserve
|
107
|
+
fill_preserve close_path).each do |m|
|
94
108
|
allow(cxt).to receive(m) { |*args| strio << scrub_hex("cairo: #{m}(#{args})\n") }
|
95
109
|
end
|
96
110
|
|