geo_pattern 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -0
  3. data/README.md +46 -5
  4. data/lib/geo_pattern/color_generators/base_color_generator.rb +2 -9
  5. data/lib/geo_pattern/pattern_helpers.rb +22 -7
  6. data/lib/geo_pattern/roles/comparable_metadata.rb +1 -1
  7. data/lib/geo_pattern/roles/named_generator.rb +1 -1
  8. data/lib/geo_pattern/version.rb +1 -1
  9. metadata +55 -85
  10. data/.github/workflows/ruby.yml +0 -30
  11. data/.gitignore +0 -19
  12. data/.rspec +0 -3
  13. data/.simplecov +0 -26
  14. data/Gemfile +0 -24
  15. data/Rakefile +0 -82
  16. data/fixtures/generated_patterns/chevrons.svg +0 -1
  17. data/fixtures/generated_patterns/concentric_circles.svg +0 -1
  18. data/fixtures/generated_patterns/diamonds.svg +0 -1
  19. data/fixtures/generated_patterns/diamonds_with_base_color.svg +0 -1
  20. data/fixtures/generated_patterns/diamonds_with_color.svg +0 -1
  21. data/fixtures/generated_patterns/hexagons.svg +0 -1
  22. data/fixtures/generated_patterns/mosaic_squares.svg +0 -1
  23. data/fixtures/generated_patterns/nested_squares.svg +0 -1
  24. data/fixtures/generated_patterns/octagons.svg +0 -1
  25. data/fixtures/generated_patterns/overlapping_circles.svg +0 -1
  26. data/fixtures/generated_patterns/overlapping_rings.svg +0 -1
  27. data/fixtures/generated_patterns/plaid.svg +0 -1
  28. data/fixtures/generated_patterns/plus_signs.svg +0 -1
  29. data/fixtures/generated_patterns/sine_waves.svg +0 -1
  30. data/fixtures/generated_patterns/squares.svg +0 -1
  31. data/fixtures/generated_patterns/tessellation.svg +0 -1
  32. data/fixtures/generated_patterns/triangles.svg +0 -1
  33. data/fixtures/generated_patterns/xes.svg +0 -1
  34. data/geo_pattern.gemspec +0 -25
  35. data/script/bootstrap +0 -30
  36. data/script/console +0 -9
  37. data/script/test +0 -21
  38. data/spec/background_generators/solid_generator_spec.rb +0 -52
  39. data/spec/background_spec.rb +0 -27
  40. data/spec/color_generators/base_color_generator_spec.rb +0 -33
  41. data/spec/color_generators/simple_generator_spec.rb +0 -14
  42. data/spec/color_preset_spec.rb +0 -55
  43. data/spec/color_spec.rb +0 -17
  44. data/spec/geo_pattern_spec.rb +0 -116
  45. data/spec/helpers_spec.rb +0 -67
  46. data/spec/pattern_preset_spec.rb +0 -43
  47. data/spec/pattern_sieve_spec.rb +0 -68
  48. data/spec/pattern_spec.rb +0 -74
  49. data/spec/pattern_store_spec.rb +0 -49
  50. data/spec/pattern_validator_spec.rb +0 -30
  51. data/spec/seed_spec.rb +0 -16
  52. data/spec/spec_helper.rb +0 -19
  53. data/spec/structure_generators/chevrons_generator_spec.rb +0 -7
  54. data/spec/structure_generators/concentric_circles_generator_spec.rb +0 -7
  55. data/spec/structure_generators/diamonds_generator_spec.rb +0 -7
  56. data/spec/structure_generators/hexagons_generator_spec.rb +0 -7
  57. data/spec/structure_generators/mosaic_squares_generator_spec.rb +0 -7
  58. data/spec/structure_generators/nested_squares_generator_spec.rb +0 -7
  59. data/spec/structure_generators/octagons_generator_spec.rb +0 -7
  60. data/spec/structure_generators/overlapping_circles_generator_spec.rb +0 -7
  61. data/spec/structure_generators/overlapping_rings_generator_spec.rb +0 -7
  62. data/spec/structure_generators/plaid_generator_spec.rb +0 -7
  63. data/spec/structure_generators/plus_signs_generator_spec.rb +0 -7
  64. data/spec/structure_generators/sine_waves_generator_spec.rb +0 -7
  65. data/spec/structure_generators/squares_generator_spec.rb +0 -7
  66. data/spec/structure_generators/tessellation_generator_spec.rb +0 -7
  67. data/spec/structure_generators/triangles_generator_spec.rb +0 -7
  68. data/spec/structure_generators/xes_generator_spec.rb +0 -7
  69. data/spec/structure_spec.rb +0 -40
  70. data/spec/support/aruba.rb +0 -24
  71. data/spec/support/helpers/fixtures.rb +0 -14
  72. data/spec/support/kernel.rb +0 -46
  73. data/spec/support/matchers/image.rb +0 -19
  74. data/spec/support/matchers/name.rb +0 -17
  75. data/spec/support/rspec.rb +0 -26
  76. data/spec/support/shared_examples/generator.rb +0 -48
  77. data/spec/support/shared_examples/pattern.rb +0 -33
  78. data/spec/support/shared_examples/pattern_name.rb +0 -9
  79. data/spec/support/shared_examples/structure.rb +0 -50
  80. data/spec/support/string.rb +0 -3
  81. data/spec/svg_spec.rb +0 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 673c02d78cab6a2a0d4739661a9a4e93845fd6c3dafff82f36f36e15e759e032
4
- data.tar.gz: da40879b6a7e41a039e00741d5b48e4be51a584f339bc84572bf5d47cb1b44cc
3
+ metadata.gz: 30789aa4eac2677abe68600971518bbb7156096cbe03a96621668510fcf4c98d
4
+ data.tar.gz: c9f14ba660f3b899f5087f393afd8092d4e9396db858f6be7d62f3d90d3bf5f0
5
5
  SHA512:
6
- metadata.gz: 87e2bac49b72b2dbb068ab84abdbdbf6a2240fe13f6898de4be9fc72c40d1239654cee649718d8620598257bdaa1cc24366054ed4f320346ddf68b9b11c8a66b
7
- data.tar.gz: f69912aeb10d51c3110edd472b8a02dee9653e2b3cb0b8127d817a45a9d878e7ade1b85922a3aaf0a8ef8568912e57661f84b050220171632665fe784b3420a5
6
+ metadata.gz: 15da01911979383ba80390581cf9d20e36221c3dca557487727bf4d276cc3c3f789bc3be9664880eb01af283998cdf888eb93270df1af666e24301f833d94519
7
+ data.tar.gz: cbd53e9a6fabaa3e567d8cb5e966030196a1d57fe0393f25be55612f9189e016e173b0e9a7e2ea12d0d3fc030f7077d4006b49ab2412309d897dd93a77fab121
data/CHANGELOG.md ADDED
@@ -0,0 +1,24 @@
1
+ # Changelog
2
+
3
+ ## 1.6.0
4
+
5
+ - Support color 2.x, whose color objects are immutable, while retaining support
6
+ for color 1.x and the existing SVG fixtures.
7
+ - Declare the base64, logger, and rake runtime dependencies so the gem and its Rake
8
+ integration work under Bundler on modern Ruby versions.
9
+ - Test Ruby 3.3, 3.4, 4.0, and Ruby head against color 1.x and 2.x in CI.
10
+ - Verify the built gem in CI with only its runtime dependencies installed.
11
+ - Publish version tags through GitHub Actions using RubyGems trusted publishing,
12
+ after the test and package checks pass.
13
+ - Remove unused ActiveSupport, documentation, and debugger dependencies from
14
+ the development bundle.
15
+ - Update coverage configuration for SimpleCov 1.3. Development tools require
16
+ Ruby 3.3 or newer.
17
+ - Package the library, README, license, and changelog without requiring Git.
18
+
19
+ The minimum Ruby version remains 2.6.
20
+
21
+ ## 1.5.0 — 2023-04-05
22
+
23
+ - Fix Ruby 3 compatibility.
24
+ - Require Ruby 2.6 or newer.
data/README.md CHANGED
@@ -29,7 +29,7 @@ Javascript port.
29
29
 
30
30
  ## Installation
31
31
 
32
- **Note:** as of version `1.4.0`, Ruby version 2 or greater is required.
32
+ Ruby 2.6 or greater is required. GeoPattern supports both color 1.x and 2.x.
33
33
 
34
34
  Add this line to your application's Gemfile:
35
35
 
@@ -220,18 +220,56 @@ GeoPattern::GeoPatternTask.new(
220
220
 
221
221
  ## Developing
222
222
 
223
+ Use Ruby 3.3 or newer for development and install dependencies with `bundle install`.
224
+
223
225
  ### Generate Fixtures
224
226
 
225
- ```ruby
226
- rake fixtures:generate
227
+ ```sh
228
+ bundle exec rake fixtures:generate
227
229
  ```
228
230
 
229
231
  ### Run tests
230
232
 
231
- ```ruby
232
- rake test
233
+ ```sh
234
+ bundle exec rake test
235
+ ```
236
+
237
+ ### Releasing
238
+
239
+ See [CHANGELOG.md](CHANGELOG.md) for release notes. To prepare a release, update
240
+ `lib/geo_pattern/version.rb` and the changelog, then run:
241
+
242
+ ```sh
243
+ bundle install
244
+ bundle exec rake test
245
+ bundle exec rake gem:build
246
+ ```
247
+
248
+ Releases are published by [the release workflow](.github/workflows/release.yml)
249
+ when a version tag is pushed. The workflow runs the test and package checks,
250
+ verifies that the tag matches the gem version, and publishes to RubyGems.org.
251
+
252
+ Before the first automated release, a gem owner must configure
253
+ [RubyGems trusted publishing](https://guides.rubygems.org/trusted-publishing/)
254
+ for `geo_pattern` with these values:
255
+
256
+ - Repository owner: `jasonlong`
257
+ - Repository name: `geo_pattern`
258
+ - Workflow filename: `release.yml`
259
+ - Environment: `release`
260
+
261
+ Create the matching `release` environment in the repository's GitHub settings.
262
+ The workflow uses short-lived credentials; no RubyGems API key secret is needed.
263
+
264
+ Commit and push the release changes, then tag that commit and push the tag:
265
+
266
+ ```sh
267
+ git tag v1.6.0
268
+ git push origin v1.6.0
233
269
  ```
234
270
 
271
+ Use the version from `lib/geo_pattern/version.rb` for subsequent releases.
272
+
235
273
  ## Contributing
236
274
 
237
275
  1. Fork it ( https://github.com/jasonlong/geo_pattern/fork )
@@ -283,3 +321,6 @@ https://github.com/suyash/geopattern
283
321
 
284
322
  Lua port by Ivan Azoyan:
285
323
  https://github.com/azoyan/geopattern
324
+
325
+ Java port by Jason Selzer:
326
+ https://github.com/jselzer/geopattern
@@ -31,15 +31,8 @@ module GeoPattern
31
31
  def transform(color, seed)
32
32
  hue_offset = map(seed.to_i(14, 3), 0, 4095, 0, 359)
33
33
  sat_offset = seed.to_i(17, 1)
34
- new_color = ::Color::RGB.from_html(color).to_hsl
35
- new_color.hue = new_color.hue - hue_offset
36
-
37
- new_color.saturation = if sat_offset % 2 == 0
38
- new_color.saturation + sat_offset
39
- else
40
- new_color.saturation - sat_offset
41
- end
42
- new_color.html
34
+
35
+ PatternHelpers.offset_color(color, hue_offset, sat_offset).html
43
36
  end
44
37
 
45
38
  # Ruby implementation of Processing's map function
@@ -24,16 +24,31 @@ module GeoPattern
24
24
  def html_to_rgb_for_string(seed, base_color)
25
25
  hue_offset = map(seed.to_i(14, 3), 0, 4095, 0, 359)
26
26
  sat_offset = seed.to_i(17, 1)
27
- base_color = ::Color::RGB.from_html(base_color).to_hsl
28
- base_color.hue = base_color.hue - hue_offset
29
27
 
30
- base_color.saturation = if sat_offset % 2 == 0
31
- base_color.saturation + sat_offset
28
+ generate_rgb_string(offset_color(base_color, hue_offset, sat_offset))
29
+ end
30
+
31
+ # Rotates the hue and shifts the saturation of an HTML color, returning a
32
+ # Color::RGB. Color objects are immutable as of color 2.0, so this builds a
33
+ # new color instead of mutating one in place.
34
+ def offset_color(html_color, hue_offset, sat_offset)
35
+ hsl = ::Color::RGB.from_html(html_color).to_hsl
36
+
37
+ hue = (hsl.hue - hue_offset) / 360.0
38
+ hue += 1.0 if hue < 0.0
39
+ hue -= 1.0 if hue > 1.0
40
+
41
+ saturation = if sat_offset % 2 == 0
42
+ hsl.saturation + sat_offset
32
43
  else
33
- base_color.saturation - sat_offset
44
+ hsl.saturation - sat_offset
34
45
  end
35
46
 
36
- generate_rgb_string(base_color.to_rgb)
47
+ ::Color::HSL.from_fraction(
48
+ hue.clamp(0.0, 1.0),
49
+ (saturation / 100.0).clamp(0.0, 1.0),
50
+ hsl.l
51
+ ).to_rgb
37
52
  end
38
53
 
39
54
  def generate_rgb_string(rgb)
@@ -44,6 +59,6 @@ module GeoPattern
44
59
  format("rgb(%<r>d, %<g>d, %<b>d)", r: r, g: g, b: b)
45
60
  end
46
61
 
47
- module_function :hex_val, :map, :html_to_rgb, :html_to_rgb_for_string, :generate_rgb_string
62
+ module_function :hex_val, :map, :html_to_rgb, :html_to_rgb_for_string, :offset_color, :generate_rgb_string
48
63
  end
49
64
  end
@@ -23,7 +23,7 @@ module GeoPattern
23
23
  # Define comparators
24
24
  def def_comparators(*methods)
25
25
  methods.flatten.each do |m|
26
- define_method "#{m}?".to_sym do |value|
26
+ define_method :"#{m}?" do |value|
27
27
  return true if value.nil? && public_send(m)
28
28
  return true if value == public_send(m)
29
29
 
@@ -8,7 +8,7 @@ module GeoPattern
8
8
  end
9
9
 
10
10
  def name
11
- Helpers.underscore(Helpers.demodulize(self.class).gsub(/Generator/, "")).to_sym
11
+ Helpers.underscore(Helpers.demodulize(self.class).gsub("Generator", "")).to_sym
12
12
  end
13
13
  end
14
14
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GeoPattern
4
- VERSION = "1.5.0"
4
+ VERSION = "1.6.0"
5
5
  end
metadata CHANGED
@@ -1,77 +1,94 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geo_pattern
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Long
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-04-05 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: base64
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0.1'
13
26
  - !ruby/object:Gem::Dependency
14
27
  name: color
15
28
  requirement: !ruby/object:Gem::Requirement
16
29
  requirements:
17
- - - "~>"
30
+ - - ">="
18
31
  - !ruby/object:Gem::Version
19
32
  version: '1.5'
20
33
  type: :runtime
21
34
  prerelease: false
22
35
  version_requirements: !ruby/object:Gem::Requirement
23
36
  requirements:
24
- - - "~>"
37
+ - - ">="
25
38
  - !ruby/object:Gem::Version
26
39
  version: '1.5'
40
+ - !ruby/object:Gem::Dependency
41
+ name: logger
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '1.4'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '1.4'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rake
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '12.0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '12.0'
27
68
  - !ruby/object:Gem::Dependency
28
69
  name: bundler
29
70
  requirement: !ruby/object:Gem::Requirement
30
71
  requirements:
31
- - - "~>"
72
+ - - ">="
32
73
  - !ruby/object:Gem::Version
33
74
  version: '2.2'
34
75
  type: :development
35
76
  prerelease: false
36
77
  version_requirements: !ruby/object:Gem::Requirement
37
78
  requirements:
38
- - - "~>"
79
+ - - ">="
39
80
  - !ruby/object:Gem::Version
40
81
  version: '2.2'
41
- description: Generate SVG beautiful patterns
82
+ description: Generate deterministic, tiling SVG patterns from a string.
42
83
  email:
43
84
  - jason@jasonlong.me
44
85
  executables: []
45
86
  extensions: []
46
87
  extra_rdoc_files: []
47
88
  files:
48
- - ".github/workflows/ruby.yml"
49
- - ".gitignore"
50
- - ".rspec"
51
- - ".simplecov"
52
- - Gemfile
89
+ - CHANGELOG.md
53
90
  - LICENSE.txt
54
91
  - README.md
55
- - Rakefile
56
- - fixtures/generated_patterns/chevrons.svg
57
- - fixtures/generated_patterns/concentric_circles.svg
58
- - fixtures/generated_patterns/diamonds.svg
59
- - fixtures/generated_patterns/diamonds_with_base_color.svg
60
- - fixtures/generated_patterns/diamonds_with_color.svg
61
- - fixtures/generated_patterns/hexagons.svg
62
- - fixtures/generated_patterns/mosaic_squares.svg
63
- - fixtures/generated_patterns/nested_squares.svg
64
- - fixtures/generated_patterns/octagons.svg
65
- - fixtures/generated_patterns/overlapping_circles.svg
66
- - fixtures/generated_patterns/overlapping_rings.svg
67
- - fixtures/generated_patterns/plaid.svg
68
- - fixtures/generated_patterns/plus_signs.svg
69
- - fixtures/generated_patterns/sine_waves.svg
70
- - fixtures/generated_patterns/squares.svg
71
- - fixtures/generated_patterns/tessellation.svg
72
- - fixtures/generated_patterns/triangles.svg
73
- - fixtures/generated_patterns/xes.svg
74
- - geo_pattern.gemspec
75
92
  - lib/geo_pattern.rb
76
93
  - lib/geo_pattern/background.rb
77
94
  - lib/geo_pattern/background_generators/solid_generator.rb
@@ -113,58 +130,12 @@ files:
113
130
  - lib/geo_pattern/structure_generators/xes_generator.rb
114
131
  - lib/geo_pattern/svg_image.rb
115
132
  - lib/geo_pattern/version.rb
116
- - script/bootstrap
117
- - script/console
118
- - script/test
119
- - spec/background_generators/solid_generator_spec.rb
120
- - spec/background_spec.rb
121
- - spec/color_generators/base_color_generator_spec.rb
122
- - spec/color_generators/simple_generator_spec.rb
123
- - spec/color_preset_spec.rb
124
- - spec/color_spec.rb
125
- - spec/geo_pattern_spec.rb
126
- - spec/helpers_spec.rb
127
- - spec/pattern_preset_spec.rb
128
- - spec/pattern_sieve_spec.rb
129
- - spec/pattern_spec.rb
130
- - spec/pattern_store_spec.rb
131
- - spec/pattern_validator_spec.rb
132
- - spec/seed_spec.rb
133
- - spec/spec_helper.rb
134
- - spec/structure_generators/chevrons_generator_spec.rb
135
- - spec/structure_generators/concentric_circles_generator_spec.rb
136
- - spec/structure_generators/diamonds_generator_spec.rb
137
- - spec/structure_generators/hexagons_generator_spec.rb
138
- - spec/structure_generators/mosaic_squares_generator_spec.rb
139
- - spec/structure_generators/nested_squares_generator_spec.rb
140
- - spec/structure_generators/octagons_generator_spec.rb
141
- - spec/structure_generators/overlapping_circles_generator_spec.rb
142
- - spec/structure_generators/overlapping_rings_generator_spec.rb
143
- - spec/structure_generators/plaid_generator_spec.rb
144
- - spec/structure_generators/plus_signs_generator_spec.rb
145
- - spec/structure_generators/sine_waves_generator_spec.rb
146
- - spec/structure_generators/squares_generator_spec.rb
147
- - spec/structure_generators/tessellation_generator_spec.rb
148
- - spec/structure_generators/triangles_generator_spec.rb
149
- - spec/structure_generators/xes_generator_spec.rb
150
- - spec/structure_spec.rb
151
- - spec/support/aruba.rb
152
- - spec/support/helpers/fixtures.rb
153
- - spec/support/kernel.rb
154
- - spec/support/matchers/image.rb
155
- - spec/support/matchers/name.rb
156
- - spec/support/rspec.rb
157
- - spec/support/shared_examples/generator.rb
158
- - spec/support/shared_examples/pattern.rb
159
- - spec/support/shared_examples/pattern_name.rb
160
- - spec/support/shared_examples/structure.rb
161
- - spec/support/string.rb
162
- - spec/svg_spec.rb
163
133
  homepage: https://github.com/jasonlong/geo_pattern
164
134
  licenses:
165
135
  - MIT
166
- metadata: {}
167
- post_install_message:
136
+ metadata:
137
+ source_code_uri: https://github.com/jasonlong/geo_pattern
138
+ changelog_uri: https://github.com/jasonlong/geo_pattern/blob/main/CHANGELOG.md
168
139
  rdoc_options: []
169
140
  require_paths:
170
141
  - lib
@@ -179,8 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
179
150
  - !ruby/object:Gem::Version
180
151
  version: '0'
181
152
  requirements: []
182
- rubygems_version: 3.0.3.1
183
- signing_key:
153
+ rubygems_version: 4.0.23
184
154
  specification_version: 4
185
- summary: Generate SVG beautiful patterns
155
+ summary: Generate beautiful SVG patterns
186
156
  test_files: []
@@ -1,30 +0,0 @@
1
- name: Ruby
2
-
3
- on:
4
- push:
5
- branches: [ main ]
6
- pull_request:
7
- branches: [ main ]
8
-
9
- jobs:
10
- test:
11
- strategy:
12
- fail-fast: false
13
- matrix:
14
- # Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
15
- ruby: [2.6, 2.7, '3.0', 3.1, 3.2, head]
16
-
17
- runs-on: ubuntu-latest
18
-
19
- steps:
20
- - uses: actions/checkout@v2
21
-
22
- - name: Set up Ruby
23
- uses: ruby/setup-ruby@v1
24
- with:
25
- ruby-version: ${{ matrix.ruby }}
26
- rubygems: latest
27
- bundler-cache: true
28
-
29
- - name: Run tests
30
- run: bundle exec rake
data/.gitignore DELETED
@@ -1,19 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- test.rb
19
- .ruby-version
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format Fuubar
2
- --order rand
3
- --color
data/.simplecov DELETED
@@ -1,26 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- class ExcludeRegexFilter < SimpleCov::Filter
5
- def matches?(source_file)
6
- source_file.filename !~ filter_argument
7
- end
8
- end
9
-
10
- class IncludeRegexFilter < SimpleCov::Filter
11
- def matches?(source_file)
12
- source_file.filename =~ filter_argument
13
- end
14
- end
15
-
16
- SimpleCov.start do
17
- add_filter "/features/"
18
- add_filter "/fixtures/"
19
- add_filter "/spec/"
20
- add_filter "/tmp"
21
- add_filter "/vendor"
22
-
23
- generator_filter = %r{/background_generators/|/structure_generators/}
24
- add_group "lib", ExcludeRegexFilter.new(generator_filter)
25
- add_group "generators", IncludeRegexFilter.new(generator_filter)
26
- end
data/Gemfile DELETED
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- # Specify your gem's dependencies in geopatterns.gemspec
6
- gemspec
7
-
8
- group :development, :test do
9
- gem "activesupport", "~> 6"
10
- gem "aruba"
11
- gem "fuubar"
12
- gem "inch"
13
- gem "pry"
14
- gem "pry-rescue"
15
- gem "pry-stack_explorer"
16
- gem "rake"
17
- gem "rspec"
18
- gem "standard"
19
- gem "simplecov"
20
-
21
- gem "byebug"
22
- gem "irb"
23
- gem "pry-byebug"
24
- end
data/Rakefile DELETED
@@ -1,82 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- $LOAD_PATH.unshift File.expand_path("lib", __dir__)
4
-
5
- desc "Default task running Tests"
6
- task default: :test
7
-
8
- desc "Run test suite"
9
- task test: ["test:standard", "test:rspec"]
10
- task "test:ci" => ["bootstrap:gem_requirements", :test]
11
- namespace :test do
12
- task :rspec do
13
- sh "rspec"
14
- end
15
-
16
- task "inch" do
17
- sh "inch"
18
- end
19
-
20
- require "standard/rake"
21
- end
22
-
23
- namespace :gem do
24
- require "bundler/gem_tasks"
25
- end
26
-
27
- unless ENV.key?("CI")
28
- require "geo_pattern/geo_pattern_task"
29
-
30
- namespace :fixtures do
31
- string = "Mastering Markdown"
32
-
33
- GeoPattern::GeoPatternTask.new(
34
- name: "generate",
35
- description: "Generate patterns to make them available as fixtures",
36
- data: {
37
- "fixtures/generated_patterns/chevrons.svg" => {input: string, patterns: [:chevrons]},
38
- "fixtures/generated_patterns/concentric_circles.svg" => {input: string, patterns: [:concentric_circles]},
39
- "fixtures/generated_patterns/diamonds.svg" => {input: string, patterns: [:diamonds]},
40
- "fixtures/generated_patterns/hexagons.svg" => {input: string, patterns: [:hexagons]},
41
- "fixtures/generated_patterns/mosaic_squares.svg" => {input: string, patterns: [:mosaic_squares]},
42
- "fixtures/generated_patterns/nested_squares.svg" => {input: string, patterns: [:nested_squares]},
43
- "fixtures/generated_patterns/octagons.svg" => {input: string, patterns: [:octagons]},
44
- "fixtures/generated_patterns/overlapping_circles.svg" => {input: string, patterns: [:overlapping_circles]},
45
- "fixtures/generated_patterns/overlapping_rings.svg" => {input: string, patterns: [:overlapping_rings]},
46
- "fixtures/generated_patterns/plaid.svg" => {input: string, patterns: [:plaid]},
47
- "fixtures/generated_patterns/plus_signs.svg" => {input: string, patterns: [:plus_signs]},
48
- "fixtures/generated_patterns/sine_waves.svg" => {input: string, patterns: [:sine_waves]},
49
- "fixtures/generated_patterns/squares.svg" => {input: string, patterns: [:squares]},
50
- "fixtures/generated_patterns/tessellation.svg" => {input: string, patterns: [:tessellation]},
51
- "fixtures/generated_patterns/triangles.svg" => {input: string, patterns: [:triangles]},
52
- "fixtures/generated_patterns/xes.svg" => {input: string, patterns: [:xes]},
53
- "fixtures/generated_patterns/diamonds_with_color.svg" => {input: string, patterns: [:diamonds], color: "#00ff00"},
54
- "fixtures/generated_patterns/diamonds_with_base_color.svg" => {input: string, patterns: [:diamonds], base_color: "#00ff00"}
55
- }
56
- )
57
- end
58
- end
59
-
60
- desc "Bootstrap project"
61
- task bootstrap: %w[bootstrap:bundler]
62
-
63
- desc "Bootstrap project for ci"
64
- task "bootstrap:ci" do
65
- Rake::Task["bootstrap"].invoke
66
- end
67
-
68
- namespace :bootstrap do
69
- desc "Bootstrap bundler"
70
- task :bundler do |t|
71
- puts t.comment
72
- sh "gem install bundler"
73
- sh "bundle install"
74
- end
75
-
76
- desc "Require gems"
77
- task :gem_requirements do |t|
78
- puts t.comment
79
- require "bundler"
80
- Bundler.require
81
- end
82
- end
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="459" height="303"><rect x="0" y="0" width="100%" height="100%" fill="rgb(63, 144, 77)" /><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.14133333333333334" stroke-width="1" transform="translate(0.0,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.14133333333333334" stroke-width="1" transform="translate(0.0,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.08933333333333333" stroke-width="1" transform="translate(76.66666666666666,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.08933333333333333" stroke-width="1" transform="translate(76.66666666666666,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.13266666666666665" stroke-width="1" transform="translate(153.33333333333331,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.13266666666666665" stroke-width="1" transform="translate(153.33333333333331,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.15" stroke-width="1" transform="translate(229.99999999999997,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.15" stroke-width="1" transform="translate(229.99999999999997,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.098" stroke-width="1" transform="translate(306.66666666666663,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.098" stroke-width="1" transform="translate(306.66666666666663,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(383.33333333333326,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(383.33333333333326,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(0.0,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.08066666666666666" stroke-width="1" transform="translate(76.66666666666666,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(153.33333333333331,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.08066666666666666" stroke-width="1" transform="translate(229.99999999999997,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.15" stroke-width="1" transform="translate(306.66666666666663,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.11533333333333334" stroke-width="1" transform="translate(383.33333333333326,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.13266666666666665" stroke-width="1" transform="translate(0.0,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.046" stroke-width="1" transform="translate(76.66666666666666,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.10666666666666667" stroke-width="1" transform="translate(153.33333333333331,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.046" stroke-width="1" transform="translate(229.99999999999997,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.08933333333333333" stroke-width="1" transform="translate(306.66666666666663,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.046" stroke-width="1" transform="translate(383.33333333333326,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.12400000000000001" stroke-width="1" transform="translate(0.0,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.06333333333333334" stroke-width="1" transform="translate(76.66666666666666,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.046" stroke-width="1" transform="translate(153.33333333333331,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.03733333333333333" stroke-width="1" transform="translate(229.99999999999997,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.028666666666666667" stroke-width="1" transform="translate(306.66666666666663,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(383.33333333333326,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.08066666666666666" stroke-width="1" transform="translate(0.0,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.098" stroke-width="1" transform="translate(76.66666666666666,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.098" stroke-width="1" transform="translate(153.33333333333331,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.11533333333333334" stroke-width="1" transform="translate(229.99999999999997,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.14133333333333334" stroke-width="1" transform="translate(306.66666666666663,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.11533333333333334" stroke-width="1" transform="translate(383.33333333333326,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.05466666666666667" stroke-width="1" transform="translate(0.0,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.11533333333333334" stroke-width="1" transform="translate(76.66666666666666,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.05466666666666667" stroke-width="1" transform="translate(153.33333333333331,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.06333333333333334" stroke-width="1" transform="translate(229.99999999999997,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(306.66666666666663,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.05466666666666667" stroke-width="1" transform="translate(383.33333333333326,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g></svg>