Skip to content

Instantly share code, notes, and snippets.

@J2TEAM
Forked from ttscoff/font_grabber.rb
Created June 11, 2016 10:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save J2TEAM/f454a04e31e9462219c9ce5e81bd7ea5 to your computer and use it in GitHub Desktop.
Save J2TEAM/f454a04e31e9462219c9ce5e81bd7ea5 to your computer and use it in GitHub Desktop.
Give it a <link> from Google fonts and get back CSS with fonts embedded
#!/usr/bin/ruby
# encoding: utf-8
# Grab google web fonts and embed them as base64 data URIs
# <http://brettterpstra.com/2015/03/14/embedding-google-web-fonts/>
require 'base64'
if ARGV.length > 0
input = ARGV
elsif STDIN.stat.size > 0
input = STDIN.read.strip.split(/\n+/)
else
$stderr.puts "No input"
Process.exit 1
end
output = ""
input.each {|line|
if line =~ /^\s*<link.*?>\s*$/
url = line.match(/href='(.*?)'/)
if url
css_url = url[1]
else
$stderr.puts "Error matching url"
end
css = %x{curl -sS '#{css_url}'}.strip
css.gsub!(/(src: .*?, url\()(.*?)(\) format\(')(.*?)('\);)/).each {|src|
pre = $1
font_url = $2
mid = $3
font_fmt = $4
post = $5
font_ext = font_url.match(/\.(\w+)$/)[1]
font_src = %x{curl -sS '#{font_url}'}
enc = Base64.encode64(font_src).strip.gsub(/\n/,'')
%Q{src:url("data:font/#{font_ext};base64,#{enc}") format('#{font_fmt}');}
}
output += css + "\n"
else
next
end
}
$stdout.puts output
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment