emojidex 0.0.7 → 0.0.9

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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -10
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +11 -0
  5. data/.travis.yml +17 -0
  6. data/Gemfile +16 -10
  7. data/Guardfile +12 -0
  8. data/README.md +27 -5
  9. data/Rakefile +6 -32
  10. data/emoji/categories.json +64 -0
  11. data/emojidex.gemspec +13 -20
  12. data/lib/emojidex.rb +9 -4
  13. data/lib/emojidex/api/categories.rb +16 -0
  14. data/lib/emojidex/api/emoji.rb +26 -0
  15. data/lib/emojidex/api/search/emoji.rb +16 -0
  16. data/lib/emojidex/cache.rb +69 -0
  17. data/lib/emojidex/categories.rb +32 -0
  18. data/lib/emojidex/category.rb +14 -0
  19. data/lib/emojidex/client.rb +60 -0
  20. data/lib/emojidex/collection.rb +119 -0
  21. data/lib/emojidex/defaults.rb +13 -0
  22. data/lib/emojidex/emoji.rb +74 -0
  23. data/lib/emojidex/error.rb +15 -0
  24. data/lib/emojidex/extended.rb +15 -0
  25. data/lib/emojidex/service.rb +32 -0
  26. data/lib/emojidex/utf.rb +15 -0
  27. data/spec/api/categories_spec.rb +49 -0
  28. data/spec/api/emoji_spec.rb +89 -0
  29. data/spec/api/search/emoji_spec.rb +30 -0
  30. data/spec/categories_spec.rb +18 -0
  31. data/spec/client_spec.rb +24 -0
  32. data/spec/emoji_spec.rb +63 -0
  33. data/spec/extended_spec.rb +107 -0
  34. data/spec/spec_helper.rb +64 -0
  35. data/spec/support/Genshin.svg +126 -0
  36. data/spec/support/couple_kiss/0.svg +177 -0
  37. data/spec/support/couple_kiss/1.svg +177 -0
  38. data/spec/support/couple_kiss/10.svg +293 -0
  39. data/spec/support/couple_kiss/11.svg +235 -0
  40. data/spec/support/couple_kiss/12.svg +235 -0
  41. data/spec/support/couple_kiss/13.svg +235 -0
  42. data/spec/support/couple_kiss/14.svg +177 -0
  43. data/spec/support/couple_kiss/15.svg +177 -0
  44. data/spec/support/couple_kiss/2.svg +177 -0
  45. data/spec/support/couple_kiss/3.svg +235 -0
  46. data/spec/support/couple_kiss/4.svg +235 -0
  47. data/spec/support/couple_kiss/5.svg +235 -0
  48. data/spec/support/couple_kiss/6.svg +293 -0
  49. data/spec/support/couple_kiss/7.svg +235 -0
  50. data/spec/support/couple_kiss/8.svg +235 -0
  51. data/spec/support/couple_kiss/9.svg +235 -0
  52. data/spec/support/couple_kiss/animation.json +14 -0
  53. data/spec/support/fixtures/categories.json +14 -0
  54. data/spec/support/fixtures/category.json +5 -0
  55. data/spec/support/fixtures/emoji.json +28 -0
  56. data/spec/support/fixtures/emoji_detailed.json +41 -0
  57. data/spec/support/fixtures/search_emoji.json +21 -0
  58. data/spec/support/fixtures/single_emoji.json +19 -0
  59. data/spec/support/fixtures/single_emoji_detailed.json +30 -0
  60. data/spec/support/test1/animation.json +6 -0
  61. data/spec/support/test2/animation.json +6 -0
  62. data/spec/support/test3/animation.json +5 -0
  63. data/spec/utf_spec.rb +66 -0
  64. metadata +82 -104
  65. data/app/assets/images/emojidex/.keep +0 -0
  66. data/app/assets/images/emojidex/glyphicons-halflings-white.png +0 -0
  67. data/app/assets/images/emojidex/glyphicons-halflings.png +0 -0
  68. data/app/assets/javascripts/emojidex/application.js +0 -14
  69. data/app/assets/javascripts/emojidex/bootstrap.min.js +0 -7
  70. data/app/assets/javascripts/emojidex/cheat_sheet.js +0 -12
  71. data/app/assets/javascripts/emojidex/poe_pallet.js +0 -71
  72. data/app/assets/stylesheets/emojidex/application.css +0 -15
  73. data/app/assets/stylesheets/emojidex/bootstrap-responsive.min.css +0 -9
  74. data/app/assets/stylesheets/emojidex/bootstrap.min.css +0 -9
  75. data/app/assets/stylesheets/emojidex/cheat_sheet.css +0 -41
  76. data/app/controllers/emojidex/application_controller.rb +0 -7
  77. data/app/controllers/emojidex/cheat_sheet_controller.rb +0 -50
  78. data/app/helpers/emojidex/application_helper.rb +0 -4
  79. data/app/helpers/emojidex/cheat_sheet_helper.rb +0 -4
  80. data/app/views/emojidex/cheat_sheet/index.html.erb +0 -58
  81. data/app/views/layouts/emojidex/application.html.erb +0 -14
  82. data/bin/rails +0 -8
  83. data/config/routes.rb +0 -5
  84. data/lib/emojidex/engine.rb +0 -5
  85. data/lib/emojidex/version.rb +0 -3
  86. data/lib/generators/emojidex/install/install_generator.rb +0 -35
  87. data/lib/tasks/emojidex_tasks.rake +0 -4
  88. data/test/controllers/emojidex/cheat_sheet_controller_test.rb +0 -11
  89. data/test/dummy/README.rdoc +0 -28
  90. data/test/dummy/Rakefile +0 -6
  91. data/test/dummy/app/assets/images/.keep +0 -0
  92. data/test/dummy/app/assets/javascripts/application.js +0 -13
  93. data/test/dummy/app/assets/stylesheets/application.css +0 -13
  94. data/test/dummy/app/controllers/application_controller.rb +0 -5
  95. data/test/dummy/app/controllers/concerns/.keep +0 -0
  96. data/test/dummy/app/helpers/application_helper.rb +0 -2
  97. data/test/dummy/app/mailers/.keep +0 -0
  98. data/test/dummy/app/models/.keep +0 -0
  99. data/test/dummy/app/models/concerns/.keep +0 -0
  100. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  101. data/test/dummy/bin/bundle +0 -3
  102. data/test/dummy/bin/rails +0 -4
  103. data/test/dummy/bin/rake +0 -4
  104. data/test/dummy/config.ru +0 -4
  105. data/test/dummy/config/application.rb +0 -23
  106. data/test/dummy/config/boot.rb +0 -5
  107. data/test/dummy/config/database.yml +0 -25
  108. data/test/dummy/config/environment.rb +0 -5
  109. data/test/dummy/config/environments/development.rb +0 -29
  110. data/test/dummy/config/environments/production.rb +0 -80
  111. data/test/dummy/config/environments/test.rb +0 -36
  112. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  113. data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  114. data/test/dummy/config/initializers/inflections.rb +0 -16
  115. data/test/dummy/config/initializers/mime_types.rb +0 -5
  116. data/test/dummy/config/initializers/secret_token.rb +0 -12
  117. data/test/dummy/config/initializers/session_store.rb +0 -3
  118. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  119. data/test/dummy/config/locales/en.yml +0 -23
  120. data/test/dummy/config/routes.rb +0 -4
  121. data/test/dummy/lib/assets/.keep +0 -0
  122. data/test/dummy/log/.keep +0 -0
  123. data/test/dummy/public/404.html +0 -58
  124. data/test/dummy/public/422.html +0 -58
  125. data/test/dummy/public/500.html +0 -57
  126. data/test/dummy/public/favicon.ico +0 -0
  127. data/test/emojidex_test.rb +0 -7
  128. data/test/helpers/emojidex/cheat_sheet_helper_test.rb +0 -6
  129. data/test/integration/navigation_test.rb +0 -10
  130. data/test/test_helper.rb +0 -15
@@ -0,0 +1,89 @@
1
+ require 'spec_helper'
2
+
3
+ describe Emojidex::API::Emoji do
4
+ subject { Emojidex::Client.new(host: 'http://localhost') }
5
+ let!(:api_url) { 'http://localhost/api/v1' }
6
+
7
+ describe '#emoji' do
8
+ before do
9
+ stub_get("#{api_url}/emoji.json")
10
+ .to_return(
11
+ body: fixture('emoji.json'),
12
+ headers: { content_type: 'application/json' }
13
+ )
14
+ end
15
+
16
+ it 'requests the correct resource' do
17
+ subject.emoji
18
+ expect(a_get("#{api_url}/emoji.json")).to have_been_made
19
+ end
20
+
21
+ it 'returns the requested emoji' do
22
+ emoji = subject.emoji
23
+ expect(emoji).to be_an Array
24
+ expect(emoji.first).to be_a Hash
25
+ end
26
+ end
27
+
28
+ describe '#emoji_detailed' do
29
+ before do
30
+ stub_get("#{api_url}/emoji/detailed.json")
31
+ .to_return(
32
+ body: fixture('emoji_detailed.json'),
33
+ headers: { content_type: 'application/json' }
34
+ )
35
+ end
36
+
37
+ it 'requests the correct resource' do
38
+ subject.emoji_detailed
39
+ expect(a_get("#{api_url}/emoji/detailed.json")).to have_been_made
40
+ end
41
+
42
+ it 'returns the requested emoji' do
43
+ emoji = subject.emoji_detailed
44
+ expect(emoji).to be_an Array
45
+ expect(emoji.first).to be_a Hash
46
+ end
47
+ end
48
+
49
+ describe '#single_emoji' do
50
+ before do
51
+ stub_get("#{api_url}/emoji/emoji.json")
52
+ .to_return(
53
+ body: fixture('single_emoji.json'),
54
+ headers: { content_type: 'application/json' }
55
+ )
56
+ end
57
+
58
+ it 'requests the correct resource' do
59
+ subject.single_emoji
60
+ expect(a_get("#{api_url}/emoji/emoji.json")).to have_been_made
61
+ end
62
+
63
+ it 'returns the requested emoji' do
64
+ emoji = subject.single_emoji
65
+ expect(emoji).to be_a Hash
66
+ end
67
+ end
68
+
69
+ describe '#single_emoji_detailed' do
70
+ before do
71
+ stub_get("#{api_url}/emoji/1/detailed.json")
72
+ .to_return(
73
+ body: fixture('single_emoji_detailed.json'),
74
+ headers: { content_type: 'application/json' }
75
+ )
76
+ end
77
+
78
+ it 'requests the correct resource' do
79
+ subject.single_emoji_detailed
80
+ expect(a_get("#{api_url}/emoji/1/detailed.json")).to have_been_made
81
+ end
82
+
83
+ it 'returns the requested emoji' do
84
+ emoji = subject.single_emoji_detailed
85
+ expect(emoji).to be_a Hash
86
+ end
87
+ end
88
+
89
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Emojidex::API::Search::Emoji do
4
+ subject { Emojidex::Client.new(host: 'http://localhost') }
5
+ let!(:api_url) { 'http://localhost/api/v1' }
6
+
7
+ describe '#emoji' do
8
+ before do
9
+ stub_get("#{api_url}/search/emoji.json")
10
+ .with(query: { 'q[code_cont]' => 't' })
11
+ .to_return(
12
+ body: fixture('search_emoji.json'),
13
+ headers: { content_type: 'application/json' }
14
+ )
15
+ end
16
+
17
+ it 'requests the correct resource' do
18
+ subject.emoji_code_cont('t')
19
+ expect(a_get("#{api_url}/search/emoji.json")
20
+ .with(query: { 'q[code_cont]' => 't' })).to have_been_made
21
+ end
22
+
23
+ it 'returns the requested search' do
24
+ results = subject.emoji_code_cont('t')
25
+ expect(results).to be_an Array
26
+ expect(results.first).to be_a Hash
27
+ end
28
+ end
29
+
30
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Emojidex::Categories do
4
+ let(:categories) { Emojidex::Categories.new }
5
+
6
+ describe '.initialize' do
7
+ it 'initializes a new categories object' do
8
+ expect(categories).to be_an_instance_of(Emojidex::Categories)
9
+ end
10
+ end
11
+
12
+ describe '.category' do
13
+ it 'is a proper hash and can be referenced by key' do
14
+ expect(categories.categories[:transportation].en).to eq('Transportation')
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Emojidex::Client do
4
+
5
+ describe 'initialize' do
6
+ it 'sets default host' do
7
+ client = Emojidex::Client.new
8
+ expect(client.host).to eq 'https://www.emojidex.com/'
9
+ end
10
+
11
+ it 'sets custom host' do
12
+ client = Emojidex::Client.new(host: 'example.com')
13
+ expect(client.host).to eq 'example.com'
14
+ end
15
+ end
16
+
17
+ describe 'user_agent' do
18
+ it 'sets user_agent' do
19
+ client = Emojidex::Client.new
20
+ expect(client.user_agent).to eq 'Emojidex Toolkit Client'
21
+ end
22
+ end
23
+
24
+ end
@@ -0,0 +1,63 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Emojidex::Emoji do
6
+ let(:emoji) do
7
+ Emojidex::Emoji.new moji: '🌠', code: 'shooting_star',
8
+ code_ja: '流れ星', category: 'cosmos',
9
+ unicode: '1f320', uri: '/dummy/uri'
10
+ end
11
+
12
+ describe '.to_s' do
13
+ it 'outputs UTF moji when present' do
14
+ expect(emoji.to_s).to eq('🌠')
15
+ end
16
+
17
+ it 'outputs emoji code when UTF is not present' do
18
+ emoji.moji = nil
19
+ expect(emoji.to_s).to eq(':shooting_star:')
20
+ end
21
+ end
22
+
23
+ describe '.to_hash' do
24
+ it 'gets a hash containing emoji info' do
25
+ expect(emoji.to_hash).to be_an_instance_of(Hash)
26
+ end
27
+ end
28
+
29
+ describe '[]' do
30
+ it 'acts like hash for lookup by key' do
31
+ expect(emoji[:moji]).to eq(emoji.moji)
32
+ end
33
+ end
34
+
35
+ describe '[]=' do
36
+ it 'assigns a value in a hash by a key' do
37
+ emoji[:code] = 'star_shot'
38
+ expect(emoji.code).to eq('star_shot')
39
+ end
40
+ end
41
+
42
+ describe '.to_json' do
43
+ it 'outputs JSON info from the emoji' do
44
+ expect(JSON.parse(emoji.to_json)).to be_an_instance_of(Hash)
45
+ end
46
+ end
47
+
48
+ describe '.frames' do
49
+ it 'holds an array of source frames' do
50
+ expect(emoji.frames).to be_an_instance_of(Array)
51
+ end
52
+ end
53
+
54
+ describe '.delays' do
55
+ it 'holds an array of delays between frames' do
56
+ expect(emoji.delays).to be_an_instance_of(Array)
57
+ end
58
+
59
+ it 'defaults to 100ms when nothing is specified' do
60
+ expect(emoji.delays[0]).to eq(100)
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,107 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Emojidex::Extended do
6
+ let(:ext) { Emojidex::Extended.new }
7
+
8
+ describe '.each' do
9
+ it 'provides each emoji' do
10
+ ext.each do |emoji|
11
+ expect(emoji).to be_an_instance_of(Emojidex::Emoji)
12
+ end
13
+ end
14
+ end
15
+
16
+ describe 'find_by_code' do
17
+ it 'finds and returns an emoji by code' do
18
+ expect(ext.find_by_code('combat_knife'))
19
+ .to be_an_instance_of(Emojidex::Emoji)
20
+ end
21
+
22
+ it 'finds and returns an emoji by code, converting spaces to underscores' do
23
+ expect(ext.find_by_code('combat knife'))
24
+ .to be_an_instance_of(Emojidex::Emoji)
25
+ end
26
+
27
+ it 'returns nil when a code does not exist' do
28
+ expect(ext.find_by_code('super_fantastic')).to be_nil
29
+ end
30
+ end
31
+
32
+ describe 'find_by_code_ja' do
33
+ it 'finds and returns an emoji by Japanese code' do
34
+ expect(ext.find_by_code_ja('ユニコーン'))
35
+ .to be_an_instance_of(Emojidex::Emoji)
36
+ end
37
+ end
38
+
39
+ describe 'コード検索' do
40
+ it 'find_by_code_jaをaliasして日本語の絵文字コードで検索する' do
41
+ expect(ext.コード検索('ユニコーン')).to be_an_instance_of(Emojidex::Emoji)
42
+ end
43
+ end
44
+
45
+ describe 'category' do
46
+ it 'returns a collection of the specificed category' do
47
+ expect(categorized = ext.category(:tools)).to be_an_instance_of(Emojidex::Collection)
48
+ expect(categorized.emoji.count).to be > 1
49
+ end
50
+ end
51
+
52
+ describe 'category?' do
53
+ it 'returns true when collection contains emoji in that category' do
54
+ expect(ext.category?(:tools)).to be true
55
+ end
56
+
57
+ it 'returns false when collection does not contain emoji in that category' do
58
+ expect(ext.category?(:this_is_a_fake_category_do_not_use)).to be false
59
+ end
60
+
61
+ it 'returns true when collection contains emoji in multple categories' do
62
+ expect(ext.category?(:tools, :abstract)).to be true
63
+ end
64
+
65
+ it 'returns false when collection does not contain emoji in one or more categories' do
66
+ expect(ext.category?(:tools, :this_is_a_fake_category_do_not_use)).to be false
67
+ end
68
+ end
69
+
70
+ describe 'categories' do
71
+ it 'is an array of categories which contain emoji in this collection' do
72
+ expect(ext.categories).to be_an_instance_of(Array)
73
+ expect(ext.categories.length).to be > 1
74
+ end
75
+ end
76
+
77
+ describe 'emoji.tags' do
78
+ it 'some emoji should have tags' do
79
+ expect(ext.emoji[:assault_rifle].tags.length).to be > 1
80
+ end
81
+
82
+ it 'tags should be an array of symbols' do
83
+ expect(ext.emoji[:assault_rifle].tags.include? :weapon).to be true
84
+ end
85
+ end
86
+
87
+ describe 'search' do
88
+ it 'searches for an emoji with a set of options' do
89
+ expect(ext.search(code: 'apple', category: 'abstract').emoji.count).to be >= 1
90
+ end
91
+
92
+ it 'searches, returning an empty collection when none are found' do
93
+ expect(ext.search(code: 'fake_emoji', category: 'abstract').emoji.count).to be == 0
94
+ expect(ext.search(code: 'apple', category: 'fake_category').emoji.count).to be == 0
95
+ end
96
+
97
+ it 'returns all emoji containing the search term as a substring' do
98
+ expect(ext.search(code: 'round', category: 'symbols').emoji.count).to be > 12
99
+ end
100
+
101
+ it 'evaluates regular expressions' do
102
+ col = ext.search(code: 'Taurus.(?!round).+', category: 'symbols')
103
+ expect(col.find_by_code('Taurus_plain')).to be_an_instance_of Emojidex::Emoji
104
+ expect(col.find_by_code('Taurus_round')).to be_nil
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,64 @@
1
+ # require "codeclimate-test-reporter"
2
+ # CodeClimate::TestReporter.start
3
+
4
+ require 'rspec'
5
+ require 'webmock/rspec'
6
+ require 'emojidex'
7
+ require 'emojidex/vectors'
8
+
9
+ WebMock.disable_net_connect!(allow_localhost: true)
10
+
11
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
12
+
13
+ if ENV['TRAVIS'] || ENV['COVERAGE']
14
+ require 'simplecov'
15
+
16
+ if ENV['TRAVIS']
17
+ require 'coveralls'
18
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
19
+ end
20
+
21
+ SimpleCov.start do
22
+ add_filter '/spec/'
23
+ end
24
+ end
25
+
26
+ def a_delete(path)
27
+ a_request(:delete, path)
28
+ end
29
+
30
+ def a_get(path)
31
+ a_request(:get, path)
32
+ end
33
+
34
+ def a_post(path)
35
+ a_request(:post, path)
36
+ end
37
+
38
+ def a_put(path)
39
+ a_request(:put, path)
40
+ end
41
+
42
+ def stub_delete(path)
43
+ stub_request(:delete, path)
44
+ end
45
+
46
+ def stub_get(path)
47
+ stub_request(:get, path)
48
+ end
49
+
50
+ def stub_post(path)
51
+ stub_request(:post, path)
52
+ end
53
+
54
+ def stub_put(path)
55
+ stub_request(:put, path)
56
+ end
57
+
58
+ def fixture_path
59
+ File.expand_path('../support/fixtures', __FILE__)
60
+ end
61
+
62
+ def fixture(file)
63
+ File.new(fixture_path + '/' + file)
64
+ end
@@ -0,0 +1,126 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:xlink="http://www.w3.org/1999/xlink"
11
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
+ width="64px"
14
+ height="64px"
15
+ id="svg3713"
16
+ version="1.1"
17
+ inkscape:version="0.48.2 r9819"
18
+ sodipodi:docname="genshin-logo-revised-s2.svg"
19
+ inkscape:export-filename="/home/zero/デスクトップ/genshin-logo-revised-s2.png"
20
+ inkscape:export-xdpi="90.349998"
21
+ inkscape:export-ydpi="90.349998">
22
+ <defs
23
+ id="defs3715">
24
+ <linearGradient
25
+ id="linearGradient4528">
26
+ <stop
27
+ style="stop-color:#d70b3a;stop-opacity:1;"
28
+ offset="0"
29
+ id="stop4530" />
30
+ <stop
31
+ style="stop-color:#d70b3a;stop-opacity:0;"
32
+ offset="1"
33
+ id="stop4532" />
34
+ </linearGradient>
35
+ <radialGradient
36
+ inkscape:collect="always"
37
+ xlink:href="#linearGradient4528"
38
+ id="radialGradient4534"
39
+ cx="31.954546"
40
+ cy="32.045456"
41
+ fx="31.954546"
42
+ fy="32.045456"
43
+ r="31.863636"
44
+ gradientUnits="userSpaceOnUse"
45
+ gradientTransform="matrix(0.9985415,-1.6601007e-5,1.6156097e-5,0.97684882,0.04608723,0.74242019)" />
46
+ </defs>
47
+ <sodipodi:namedview
48
+ id="base"
49
+ pagecolor="#ffffff"
50
+ bordercolor="#666666"
51
+ borderopacity="1.0"
52
+ inkscape:pageopacity="0.0"
53
+ inkscape:pageshadow="2"
54
+ inkscape:zoom="5.6568543"
55
+ inkscape:cx="-54.952613"
56
+ inkscape:cy="18.847043"
57
+ inkscape:current-layer="g3"
58
+ showgrid="true"
59
+ inkscape:document-units="px"
60
+ inkscape:grid-bbox="true"
61
+ inkscape:window-width="1920"
62
+ inkscape:window-height="999"
63
+ inkscape:window-x="0"
64
+ inkscape:window-y="26"
65
+ inkscape:window-maximized="1" />
66
+ <metadata
67
+ id="metadata3718">
68
+ <rdf:RDF>
69
+ <cc:Work
70
+ rdf:about="">
71
+ <dc:format>image/svg+xml</dc:format>
72
+ <dc:type
73
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
74
+ <dc:title></dc:title>
75
+ </cc:Work>
76
+ </rdf:RDF>
77
+ </metadata>
78
+ <g
79
+ id="layer1"
80
+ inkscape:label="Layer 1"
81
+ inkscape:groupmode="layer">
82
+ <g
83
+ transform="matrix(0.57354429,0,0,0.57354429,-9.3948988,-4.8771052)"
84
+ id="g3"
85
+ style="fill:#eaf4fc;fill-opacity:1"
86
+ inkscape:export-filename="/home/zero/repo/genshin.org/public/images/logo.png"
87
+ inkscape:export-xdpi="899.45599"
88
+ inkscape:export-ydpi="899.45599">
89
+ <path
90
+ style="fill:#000b00;fill-opacity:1"
91
+ inkscape:connector-curvature="0"
92
+ d="M 25.836,60.884 C 24.166,40.446 48.553,29.302 56.569,21.716 -18.048,34.763 21.127285,141.272 92.968,116.101 55.66,114.913 61,104.364 53.038,102.823 34.947,99.318 23.875,84.208 23.875,77.524 c 0,-5.82 3.127,-11.227 1.961,-16.64 z"
93
+ id="path5"
94
+ sodipodi:nodetypes="ccccsc" />
95
+ <path
96
+ style="fill:#000b00;fill-opacity:1"
97
+ inkscape:connector-curvature="0"
98
+ d="m 113.716,93.582 c -2.866,6.521 -6.899,12.655 -12.102,18.097 14.903,-9.178 23.524,-23.791 25.886,-39.501 -2.569,7.972 -7.767,15.337 -13.784,21.404 z"
99
+ id="path7" />
100
+ <path
101
+ style="fill:#000b00;fill-opacity:1"
102
+ inkscape:connector-curvature="0"
103
+ d="M 103.22,17.748 C 90.066,15.033 74.921,11.61 64.736,17.282 47.742,14.826 29.859,28.196 27.575,30.997 49.169,1.381 87.748,5.928 103.22,17.748 z"
104
+ id="path9" />
105
+ </g>
106
+ <g
107
+ transform="matrix(0.57354429,0,0,0.57354429,-9.3948988,-4.8771052)"
108
+ id="g19"
109
+ style="fill:#d7003a;fill-opacity:1"
110
+ inkscape:export-filename="/home/zero/repo/genshin.org/public/images/logo.png"
111
+ inkscape:export-xdpi="899.45599"
112
+ inkscape:export-ydpi="899.45599">
113
+ <path
114
+ style="fill:#d7003a;fill-opacity:1"
115
+ inkscape:connector-curvature="0"
116
+ d="M 51.111,43.19 C 58.462774,38.269206 66.017957,33.761108 74,28.841 l 0,-4.095 c -8.247318,5.125197 -15.321401,9.30897 -22.829,14.275 -8.797,5.749 -14.357,9.711 -14.357,16.446 0,5.879 4.211,9.647 11.136,14.334 C 46.919651,70.483832 45.873425,71.246791 45,71.879 40,75.676 36.801,79 36.801,84 l -0.004,0 -10e-4,-0.047 c 0,0.011 0.003,4.047 4.094,4.047 4.095,0 20.477,0 20.477,0 0,0 2.566,-0.008 3.633,-1.999 l 0,16.469 c 0,0 9,-4.095 9,-12.287 0,-8.191 0,-15.061 0,-15.061 C 74,75.122 73.654,71 69.558,71 65.462,71 65,71 65,71 l 0,13 -20.016,0 c 0,-6 0.007,-7.794 6.247,-12.221 2.081315,-1.349288 4.033477,-2.724396 5.769,-4.064 5,-3.797 8,-7.267 8,-12.252 L 65,51 57,51 c -0.07924,1.223929 0.04302,3.037425 0.136,4 0,7 0.061,8.075 -6.077,12.445 -6.143,-4.371 -6.109,-5.598 -6.109,-12.099 0,-6.501 0.017,-7.784 6.161,-12.156 z"
117
+ id="path21"
118
+ sodipodi:nodetypes="ccccscccccscccscsccccccsccccc" />
119
+ <path
120
+ style="fill:#d7003a;fill-opacity:1"
121
+ inkscape:connector-curvature="0"
122
+ d="m 116.841,37 c 0,0 -0.08,-4.199 -4.175,-4.199 -4.096,0 -4.142,-0.052 -16.428,8.14 C 92.937,43.141 90,44.684 88,45.861 V 27.106 C 88,27.106 88.014,23 83.917,23 80.264,23 80.012,23 80,23 v 26 4.176 c 4,0 3.761,0 16.048,-8.191 7.257,-4.838 9.952,-6.818 11.952,-7.629 0,3.689 0,24.739 0,32.203 0,8.19 0.358,8.19 -11.928,16.381 C 83.785,94.132 78,98.228 78,98.228 v 4.095 c 0,0 6.189,-4.095 18.477,-12.288 C 108.763,81.844 117,77.749 117,69.558 117,61.366 117,37 117,37 h -0.159 z"
123
+ id="path23" />
124
+ </g>
125
+ </g>
126
+ </svg>