From 891f362385997105fd09e1e1ba1a57c0fcbe2f17 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 9 Nov 2012 17:32:16 +0530 Subject: [PATCH] Hack for subsetting commonly used ligatures, pending proper parsing of the GSUB table --- src/calibre/utils/fonts/sfnt/subset.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/calibre/utils/fonts/sfnt/subset.py b/src/calibre/utils/fonts/sfnt/subset.py index 0e1bc0ea1c..9f0302527d 100644 --- a/src/calibre/utils/fonts/sfnt/subset.py +++ b/src/calibre/utils/fonts/sfnt/subset.py @@ -76,6 +76,17 @@ def subset(raw, individual_chars, ranges=()): for r in ranges: chars += list(xrange(ord(r[0]), ord(r[1])+1)) + # Hack pending parsing of the GSUB table, manually add in a few common + # ligatures + ligatures = {'AE':'Æ', 'ae':'æ', 'OE':'Œ', 'IJ':'IJ', 'ij':'ij', 'ue':'ᵫ', + 'ff':'ff', 'fi':'fi', 'fl':'fl', 'ffi':'ffi', 'ffl':'ffl', 'st':'st'} + all_chars = set(chars) + for ichars, lig in ligatures.iteritems(): + ichars = frozenset(map(ord, ichars)) + if ichars.issubset(all_chars) and ord(lig) not in all_chars: + all_chars.add(ord(lig)) + chars.append(ord(lig)) + sfnt = Sfnt(raw) old_sizes = sfnt.sizes()