emojidex 0.0.7 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
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>