diff options
Diffstat (limited to 'Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/WOFF')
-rwxr-xr-x | Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/WOFF | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/WOFF b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/WOFF new file mode 100755 index 00000000000..7a3a7902299 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/WOFF @@ -0,0 +1,174 @@ +# vim: set filetype=python : +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. + +Gnu FreeFont is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2011, 2012, Stevan White" +__date__ = "$Date: 2011-11-03 01:50:14 +0100 (Thu, 03 Nov 2011) $" +__version__ = "$Revision: 1863 $" +__doc__ = """ +Convert fonts from FontForge's native SFD format to Web Open Font Format (WOFF) +First auto-hints whole font + +Mainly, this copies information out of the font's existing TT names strings, +and uses them to generate XML information for the WOFF metadata. +Then it just saves the file as *.woff. + +The settings should otherwise be like those for generic OpenType fonts. + +""" + +import fontforge +import sys +import xml.dom.minidom +from buildutils import * + +scriptname = sys.argv[0]; +argc = len( sys.argv ) + +class SFNT_name: + def __init__( self, lang, string ): + self.lang = lang + self.string = string + +def fontStrings2dict( font, lang_filter=None ): + sfnt_strings = {} + for n in font.sfnt_names: + if lang_filter: + if n[0].startswith( lang_filter ): + sfnt_strings[n[1]] = SFNT_name(n[0],n[2]) + else: + sfnt_strings[n[1]] = SFNT_name(n[0],n[2]) + return sfnt_strings + +def stripmeta( meta ): + lst = meta.split( '\n' ) + nlst = [] + for line in lst[1:-2]: + if line.startswith( '\t' ): + line = line[1:] + nlst.append( line ) + return '\n'.join( nlst ) + +def add_text_decorated_with_divs( doc, parent, text ): + for line in text.split( '\n' ): + if line: + div = doc.createElement( 'div' ) + div.appendChild( doc.createTextNode( line ) ) + parent.appendChild( div ) + +def fontInfo2WOFFxml( font ): + sfnt_strings = fontStrings2dict( f, 'English' ) + copyright = sfnt_strings['Copyright'].string + license = sfnt_strings['License'].string + licenseURL = sfnt_strings['License URL'].string + vendorURL = sfnt_strings['Vendor URL'].string + version = sfnt_strings['Version'].string + fontFamily = sfnt_strings['Family'].string + fontStyle = sfnt_strings['SubFamily'].string + + doc = xml.dom.minidom.Document() + meta = doc.createElement( 'metadata' ) + doc.appendChild( meta ) + # <uniqueid id="org.gnu.freefont.freeserif.1877" /> + elt = doc.createElement( 'uniqueid' ) + + version_prefix = 'Revision: ' + if version.startswith( version_prefix ): + revision = version[len(version_prefix):] + else: + revision = version + + elt.setAttribute( 'id', 'org.gnu.freefont.' + fontFamily + '.' + + fontStyle + '.' + revision ) + meta.appendChild( elt ) + + # <vendor name="Font Vendor" url="https://savannah.gnu.org/projects/freefont/" /> + elt = doc.createElement( 'vendor' ) + elt.setAttribute( 'name', 'Font Vendor' ) + elt.setAttribute( 'url', vendorURL ) + meta.appendChild( elt ) + # <credits> + # <credit name="Font Designer" + # url="https://savannah.gnu.org/projects/freefont/" /> + # </credits> + elt_credits = doc.createElement( 'credits' ) + elt = doc.createElement( 'credit' ) + elt.setAttribute( 'name', 'Font Designer' ) + elt.setAttribute( 'url', vendorURL ) + elt_credits.appendChild( elt ) + meta.appendChild( elt_credits ) + #<description> + # <text xml:lang="en"> + # FreeSerif-Medium is a member of the GNU FreeFont font family. + # </text> + #</description> + elt_description = doc.createElement( 'description' ) + elt = doc.createElement( 'text' ) + elt.setAttribute( 'xml:lang', 'en' ) + text = doc.createTextNode( fontFamily + '-' + fontStyle + + " is a member of the GNU FreeFont font family.") + elt.appendChild( text ) + elt_description.appendChild( elt ) + meta.appendChild( elt_description ) + #<license url="http://www.gnu.org/copyleft/gpl.html" + # id="fontvendor-Web-corporate-v2"> + # <text xml:lang="en"> + # ... + elt_license = doc.createElement( 'license' ) + elt_license.setAttribute( 'url', licenseURL ) + elt = doc.createElement( 'text' ) + elt.setAttribute( 'xml:lang', 'en' ) + add_text_decorated_with_divs( doc, elt, license ) + elt_license.appendChild( elt ) + meta.appendChild( elt_license ) + #<copyright> + #<text xml:lang="en">Copyright ‰2002, 2003, 2005, 2008, 2009, 2010, 2011 GNU Freefont contributors.</text> + #</copyright> + elt_copyright = doc.createElement( 'copyright' ) + elt = doc.createElement( 'text' ) + elt.setAttribute( 'xml:lang', 'en' ) + elt.appendChild( doc.createTextNode( copyright ) ) + elt_copyright.appendChild( elt ) + meta.appendChild( elt_copyright ) + strrep = meta.toprettyxml() + + return stripmeta( strrep ) + +if argc > 1: + for i in range( 1, argc ): + f = fontforge.open( sys.argv[i] ) + woff_file = f.fontname + ".woff" + vstr = trim_version_str( f ) + print "Generating WOFF file ", woff_file, ' ', vstr + # Wanted to set to 'UniocdeBmp' if there were no high unicodes + # but all attemtps to determine that from Python failed. + f.encoding = 'UnicodeFull' + f.layers['Fore'].is_quadratic = True + f.selection.all() + f.autoHint() + f.autoInstr() + # Copy copyright info etc from the tt tables into the + # WOFF XML section. + xml = fontInfo2WOFFxml( f ) + f.woffMajor = 1 + f.woffMajor = 0 + f.woffMetadata = xml + #f.generate( woff_file, flags=('opentype','round') ) + f.generate( woff_file, flags=('opentype','no-hints') ) + f.close() +else: + print "Usage: " + scriptname + " font.sfd [font.sfd ...]" |