Isso é maior do que eu pensava inicialmente. Para fazer a coisa toda, precisamos de algumas ferramentas extras e algumas não são bem empacotadas para o Ubuntu. Estou fazendo as instalações personalizadas em ~/src/
- que você provavelmente precisará criar - em vez de instalar no sistema, apenas porque isso é Good Enough ™ para realizar o trabalho.
sudo apt-get install fontforge python-scour woff-tools build-essential
git clone http://github.com/behdad/fonttools ~/src/fonttools
ln -s ~/src/fonttools/Tools/pyftsubset ~/bin/subset # vanity symlink
git clone https://github.com/metaflop/ttf2eot.git ~/src/ttf2eot
cd ~/src/ttf2eot
make
cd -
git clone --recursive https://github.com/google/woff2.git ~/src/woff2
cd ~/src/woff2
make clean all
cd -
O próximo passo é descobrir quais são os caracteres unicode que precisamos. Nós vamos construir uma lista de caracteres no formato hexadecimal 0x####
. Identificar estes é apenas um caso de escolher através do meu arquivo .less
para a função que eu uso para o Font Awesome, mas você poderia fazer algo similar procurando por% raw content: "..."
groups:
perl -n -e '/\.font-awesome..(\w+)/ && print "0xf\n"' less/*.less | tail -n+2 | sort -u
Agora temos a lista, podemos dizer ao FontForge para subconjunto FontAwesome.otf
:
~/src/fonttools/Tools/pyftsubset fonts/FontAwesome.otf \
--unicodes-file=<(perl -n -e '/\.font-awesome..(\w+)/ && print "0xf\n"' less/sbnew-*.less\
| tail -n+2 | sort -u) --output-file=fonts/fa-subset.otf --no-recommended-glyphs --no-hinting
Isso cria uma nova fonte .otf
. Podemos então recondicionar isso em um conjunto de webfonts:
# generate TTF and SVG
fontforge -lang=pe -script <(echo -e 'Open()\nGenerate(:r + ".ttf")\nGenerate(:r + "big.svg")') fonts/fa-subset.otf
# Clean up SVG
scour -i fonts/fa-subset.big.svg -o fonts/fa-subset.svg --enable-id-stripping --enable-comment-stripping --shorten-ids
# Create WOFF
sfnt2woff fonts/fa-subset.otf
# Create WOFF2 for most modern browsers
~/src/woff2/woff2_compress fonts/fa-subset.ttf
# Create EOT (eotfast might be better)
~/src/ttf2eot/ttf2eot fonts/fa-subset.ttf > fonts/fa-subset.eot
O resultado é um conjunto muito menor de fontes. Aqui está a comparação lado-a-lado:
-rw-r--r-- 1 oli oli 62K Dec 11 2013 FontAwesome.otf
-rw-rw-r-- 1 oli oli 2.0K Aug 27 15:16 fa-subset.otf
-rwxr-xr-x 1 oli oli 38K Dec 11 2013 fontawesome-webfont.eot
-rw-rw-r-- 1 oli oli 3.1K Aug 27 15:31 fa-subset.eot
-rwxr-xr-x 1 oli oli 198K Dec 11 2013 fontawesome-webfont.svg
-rw-rw-r-- 1 oli oli 4.4K Aug 27 15:37 fa-subset.svg
-rwxr-xr-x 1 oli oli 79K Dec 11 2013 fontawesome-webfont.ttf
-rw-rw-r-- 1 oli oli 2.9K Aug 27 15:22 fa-subset.ttf
-rwxr-xr-x 1 oli oli 44K Dec 11 2013 fontawesome-webfont.woff
-rw-rw-r-- 1 oli oli 1.9K Aug 27 15:25 fa-subset.woff
-rw-rw-r-- 1 oli oli 1.4K Aug 27 16:01 fa-subset.woff2