Skip to content

Commit

Permalink
Add emojis:generate_borders Rake task (mastodon#13773)
Browse files Browse the repository at this point in the history
* Add emojis:generate_borders Rake task

* Address review

* Border all dark emoji

* Combine stroke with filter to reduce artifacting

* Cleanup Camera with Flash

* Add stroke-linejoin="round"

The previous filter and tweaks were effectively a poor imitation of it.
There are no artifacts for any dark emoji now!

* Set stroke-width using property

This fixes old versions of Firefox.

* Store emoji in string instead of array

* Use separate arguments for each path segment

* Remove "background: black;"
  • Loading branch information
leo60228 authored and Mage committed Jan 14, 2022
1 parent 93c25a5 commit ca5c68f
Show file tree
Hide file tree
Showing 114 changed files with 1,667 additions and 0 deletions.
44 changes: 44 additions & 0 deletions lib/tasks/emojis.rake
Original file line number Diff line number Diff line change
@@ -1,5 +1,35 @@
# frozen_string_literal: true

def gen_border(codepoint)
input = Rails.root.join('public', 'emoji', "#{codepoint}.svg")
dest = Rails.root.join('public', 'emoji', "#{codepoint}_border.svg")
doc = File.open(input) { |f| Nokogiri::XML(f) }
svg = doc.at_css('svg')
if svg.key?('viewBox')
view_box = svg['viewBox'].split(' ').map(&:to_i)
view_box[0] -= 2
view_box[1] -= 2
view_box[2] += 4
view_box[3] += 4
svg['viewBox'] = view_box.join(' ')
end
g = Nokogiri::XML::Node.new 'g', doc
doc.css('svg > *').each do |elem|
border_elem = elem.dup

border_elem.delete('fill')

border_elem['stroke'] = 'white'
border_elem['stroke-linejoin'] = 'round'
border_elem['stroke-width'] = '4px'

g.add_child(border_elem)
end
svg.prepend_child(g)
File.write(dest, doc.to_xml)
puts "Wrote bordered #{codepoint}.svg to #{dest}!"
end

def codepoints_to_filename(codepoints)
codepoints.downcase.gsub(/\A[0]+/, '').tr(' ', '-')
end
Expand All @@ -23,8 +53,10 @@ namespace :emojis do

HTTP.get(source).to_s.split("\n").each do |line|
next if line.start_with? '#'

parts = line.split(';').map(&:strip)
next if parts.size < 2

codes << [parts[0], parts[1].start_with?('fully-qualified')]
end

Expand Down Expand Up @@ -55,4 +87,16 @@ namespace :emojis do
File.write(dest, Oj.dump(map))
puts "Wrote emojo to destination! (#{dest})"
end

desc 'Generate emoji variants with white borders'
task :generate_borders do
src = Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_map.json')
emojis = '🎱🐜⚫🖤⬛◼️◾◼️✒️▪️💣🎳📷📸♣️🕶️✴️🔌💂‍♀️📽️🍳🦍💂🔪🕳️🕹️🕋🖊️🖋️💂‍♂️🎤🎓🎥🎼♠️🎩🦃📼📹🎮🐃🏴👽⚾🐔☁️💨🕊️👀🍥👻🐐❕❔⛸️🌩️🔊🔇📃🌧️🐏🍚🍙🐓🐑💀☠️🌨️🔉🔈💬💭🏐🏳️⚪⬜◽◻️▫️'

map = Oj.load(File.read(src))

emojis.each_grapheme_cluster do |emoji|
gen_border map[emoji]
end
end
end
9 changes: 9 additions & 0 deletions public/emoji/1f327_border.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions public/emoji/1f328_border.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions public/emoji/1f329_border.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 11 additions & 0 deletions public/emoji/1f359_border.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 13 additions & 0 deletions public/emoji/1f35a_border.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit ca5c68f

Please sign in to comment.