Importe una secuencia de archivos .svg en FontForge como glifos y genere un archivo de fuente

Quiero crear una fuente con un gran volumen de glifos. Piense kanji japonés, en los miles. Así que definitivamente habrá algún proceso de scripting / batch requerido. ¡Afortunadamente, FontForge soporta scripts en Python! Desafortunadamente no he podido hacerlo funcionar. [cara triste]

En primer lugar, gracias al usuario Hoff por publicar el código aquí que respondió a una gran parte de mi pregunta. Pero al ejecutar su guión, encuentro problemas que plantean más preguntas:

Failed to find NameList: AGL For New Fonts Warning: Font contained no glyphs 

Actualizaciones:

  • El error “la fuente no contiene glifos” es aparentemente un error en FontForge que se produce cuando la fuente contiene uno o menos glifos. Añadiendo un segundo glifo ‘B’ resolvió esto.
  • Encontré la misma syntax que se puede usar al guardar .ttf .sfd .otf, etc.
  • El error de NameList en realidad no impide que se escriba el archivo de fuente. Me alegró descubrir esto, pero aún no entiendo cómo proporcionar la Lista de nombres que desea.

Aquí está el código de Hoff:

 import fontforge font = fontforge.open('blank.sfd') glyph = font.createMappedChar('A') glyph.importOutlines('sourceimg.svg') font.generate('testfont.ttf') 

Después de cinco horas de dificultades ayer con la construcción de FontForge (un proceso confuso en una Mac). Parece que lo tengo funcionando correctamente. Al principio, había instalado una versión pre-construida de un .dmg solo para encontrar que carecía de soporte de Python. Pero como Hoff no parecía encontrar el mismo error que yo, no descarto un problema de comstackción.

De cualquier manera, no entiendo el error que implica AGL. ¿Qué es AGL? Lo busqué : “Lista de glifos de Adobe: una convención estándar de nombres de glifos”. Suena como que FontForge intentó asignar valores de Unicode a nombres de glifos y no pudo.

Entonces, ¿por qué el problema AGL NameList? Gracias de antemano por cualquier ayuda.

Intenta reconstruir tu Fonforge. Porque el código debería funcionar. Lo probé y funciona bien.

Instalé con éxito Fontforge con la extensión de Python con Homebrew . Esta es la información:

 allcaps$ brew info fontforge fontforge: stable 20120731, HEAD http://fontforge.org/ /usr/local/Cellar/fontforge/20120731 (377 files, 16M) * Built from source with: --with-x From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/fontforge.rb ==> Dependencies Required: gettext ✘, fontconfig ✔ Recommended: jpeg ✔, libtiff ✔ Optional: cairo ✔, pango ✘, libspiro ✘, czmq ✘ ==> Options --with-cairo Build with cairo support --with-czmq Build with czmq support --with-gif Build with GIF support --with-libspiro Build with libspiro support --with-pango Build with pango support --with-x Build with X11 support, including FontForge.app --without-jpeg Build without jpeg support --without-libpng Build without libpng support --without-libtiff Build without libtiff support --without-python Build without python support --HEAD install HEAD version ==> Caveats Set PYTHONPATH if you need Python to find the installed site-packages: export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH .app bundles were installed. Run `brew linkapps` to symlink these to /Applications. 

Establecer PYTHONPATH
Ejecute brew install fontforge por supuesto, con todas las banderas que necesite.
Ejecutar brew linkapps

ACTUALIZAR

Comience con una fuente vacía para que la fuente no sea el problema:

 import fontforge font = fontforge.font() # create a new font 

Para incluir una lista de glifos (no debería ser necesario) Descargue: http://partners.adobe.com/public/developer/en/opentype/glyphlist.txt y luego:

 import fontforge fontforge.loadNamelist('glyphlist.txt') # load a name list ... 

Crea el glifo por punto de código. createChar(uni[,name]) ‘A’ es 65 así que

 char = font.createChar(65) 

Glifos y sus puntos de código:

 >>> for c in u'ABC 賢治': print ord(c). >>> 65, 66, 67, 32, 36066, 27835. 

El consorcio de Unicode define el estándar de Unicode. Los ‘Ideographs unificados CJK’ viven en ‘Plano Multilingüe Básico (BMP)’.

Se puede hacer referencia a los glifos sin un punto de Unicode dentro de una fuente por nombre. Y son útiles para características de tipo abierto o bloques de construcción para componer nuevos glifos. Puedes crearlos así:

 font.createChar(-1, 'some_name') 

ACTUALIZACIÓN 2

Debe nombrar todos los glifos que aparecen en la Lista de glifos de Adobe por su nombre de glifo AGL. El rest de los glifos deben llamarse uniXXXX donde XXXX es el índice Unicode. Durante el desarrollo, puedes usar cualquier nombre legible por humanos. Así que use su propio nombre y reemplácelo cuando genere la fuente para el envío. Ver Typophile .