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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -0
- data/README.md +46 -5
- data/lib/geo_pattern/color_generators/base_color_generator.rb +2 -9
- data/lib/geo_pattern/pattern_helpers.rb +22 -7
- data/lib/geo_pattern/roles/comparable_metadata.rb +1 -1
- data/lib/geo_pattern/roles/named_generator.rb +1 -1
- data/lib/geo_pattern/version.rb +1 -1
- metadata +55 -85
- data/.github/workflows/ruby.yml +0 -30
- data/.gitignore +0 -19
- data/.rspec +0 -3
- data/.simplecov +0 -26
- data/Gemfile +0 -24
- data/Rakefile +0 -82
- data/fixtures/generated_patterns/chevrons.svg +0 -1
- data/fixtures/generated_patterns/concentric_circles.svg +0 -1
- data/fixtures/generated_patterns/diamonds.svg +0 -1
- data/fixtures/generated_patterns/diamonds_with_base_color.svg +0 -1
- data/fixtures/generated_patterns/diamonds_with_color.svg +0 -1
- data/fixtures/generated_patterns/hexagons.svg +0 -1
- data/fixtures/generated_patterns/mosaic_squares.svg +0 -1
- data/fixtures/generated_patterns/nested_squares.svg +0 -1
- data/fixtures/generated_patterns/octagons.svg +0 -1
- data/fixtures/generated_patterns/overlapping_circles.svg +0 -1
- data/fixtures/generated_patterns/overlapping_rings.svg +0 -1
- data/fixtures/generated_patterns/plaid.svg +0 -1
- data/fixtures/generated_patterns/plus_signs.svg +0 -1
- data/fixtures/generated_patterns/sine_waves.svg +0 -1
- data/fixtures/generated_patterns/squares.svg +0 -1
- data/fixtures/generated_patterns/tessellation.svg +0 -1
- data/fixtures/generated_patterns/triangles.svg +0 -1
- data/fixtures/generated_patterns/xes.svg +0 -1
- data/geo_pattern.gemspec +0 -25
- data/script/bootstrap +0 -30
- data/script/console +0 -9
- data/script/test +0 -21
- data/spec/background_generators/solid_generator_spec.rb +0 -52
- data/spec/background_spec.rb +0 -27
- data/spec/color_generators/base_color_generator_spec.rb +0 -33
- data/spec/color_generators/simple_generator_spec.rb +0 -14
- data/spec/color_preset_spec.rb +0 -55
- data/spec/color_spec.rb +0 -17
- data/spec/geo_pattern_spec.rb +0 -116
- data/spec/helpers_spec.rb +0 -67
- data/spec/pattern_preset_spec.rb +0 -43
- data/spec/pattern_sieve_spec.rb +0 -68
- data/spec/pattern_spec.rb +0 -74
- data/spec/pattern_store_spec.rb +0 -49
- data/spec/pattern_validator_spec.rb +0 -30
- data/spec/seed_spec.rb +0 -16
- data/spec/spec_helper.rb +0 -19
- data/spec/structure_generators/chevrons_generator_spec.rb +0 -7
- data/spec/structure_generators/concentric_circles_generator_spec.rb +0 -7
- data/spec/structure_generators/diamonds_generator_spec.rb +0 -7
- data/spec/structure_generators/hexagons_generator_spec.rb +0 -7
- data/spec/structure_generators/mosaic_squares_generator_spec.rb +0 -7
- data/spec/structure_generators/nested_squares_generator_spec.rb +0 -7
- data/spec/structure_generators/octagons_generator_spec.rb +0 -7
- data/spec/structure_generators/overlapping_circles_generator_spec.rb +0 -7
- data/spec/structure_generators/overlapping_rings_generator_spec.rb +0 -7
- data/spec/structure_generators/plaid_generator_spec.rb +0 -7
- data/spec/structure_generators/plus_signs_generator_spec.rb +0 -7
- data/spec/structure_generators/sine_waves_generator_spec.rb +0 -7
- data/spec/structure_generators/squares_generator_spec.rb +0 -7
- data/spec/structure_generators/tessellation_generator_spec.rb +0 -7
- data/spec/structure_generators/triangles_generator_spec.rb +0 -7
- data/spec/structure_generators/xes_generator_spec.rb +0 -7
- data/spec/structure_spec.rb +0 -40
- data/spec/support/aruba.rb +0 -24
- data/spec/support/helpers/fixtures.rb +0 -14
- data/spec/support/kernel.rb +0 -46
- data/spec/support/matchers/image.rb +0 -19
- data/spec/support/matchers/name.rb +0 -17
- data/spec/support/rspec.rb +0 -26
- data/spec/support/shared_examples/generator.rb +0 -48
- data/spec/support/shared_examples/pattern.rb +0 -33
- data/spec/support/shared_examples/pattern_name.rb +0 -9
- data/spec/support/shared_examples/structure.rb +0 -50
- data/spec/support/string.rb +0 -3
- data/spec/svg_spec.rb +0 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 30789aa4eac2677abe68600971518bbb7156096cbe03a96621668510fcf4c98d
|
|
4
|
+
data.tar.gz: c9f14ba660f3b899f5087f393afd8092d4e9396db858f6be7d62f3d90d3bf5f0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
|
|
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
|
-
```
|
|
226
|
-
rake fixtures:generate
|
|
227
|
+
```sh
|
|
228
|
+
bundle exec rake fixtures:generate
|
|
227
229
|
```
|
|
228
230
|
|
|
229
231
|
### Run tests
|
|
230
232
|
|
|
231
|
-
```
|
|
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
|
-
|
|
35
|
-
|
|
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
|
|
31
|
-
|
|
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
|
-
|
|
44
|
+
hsl.saturation - sat_offset
|
|
34
45
|
end
|
|
35
46
|
|
|
36
|
-
|
|
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}?"
|
|
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
|
|
data/lib/geo_pattern/version.rb
CHANGED
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.
|
|
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:
|
|
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
|
|
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
|
-
-
|
|
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
|
-
|
|
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:
|
|
183
|
-
signing_key:
|
|
153
|
+
rubygems_version: 4.0.23
|
|
184
154
|
specification_version: 4
|
|
185
|
-
summary: Generate SVG
|
|
155
|
+
summary: Generate beautiful SVG patterns
|
|
186
156
|
test_files: []
|
data/.github/workflows/ruby.yml
DELETED
|
@@ -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
data/.rspec
DELETED
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>
|