diff --git a/font/fontpatcher-symbols.sfd b/font/fontpatcher-symbols.sfd deleted file mode 100644 index c65c6490..00000000 --- a/font/fontpatcher-symbols.sfd +++ /dev/null @@ -1,235 +0,0 @@ -SplineFontDB: 3.0 -FontName: PowerlineSymbols -FullName: PowerlineSymbols -FamilyName: PowerlineSymbols -Weight: Medium -Copyright: Created with FontForge 2.0 (http://fontforge.sf.net) -UComments: "2012-12-17: Created." -Version: 001.000 -ItalicAngle: 0 -UnderlinePosition: -100 -UnderlineWidth: 50 -Ascent: 1638 -Descent: 410 -LayerCount: 2 -Layer: 0 0 "Back" 1 -Layer: 1 0 "Fore" 0 -XUID: [1021 211 26716215 11183012] -OS2Version: 0 -OS2_WeightWidthSlopeOnly: 0 -OS2_UseTypoMetrics: 1 -CreationTime: 1355758773 -ModificationTime: 1355865048 -OS2TypoAscent: 0 -OS2TypoAOffset: 1 -OS2TypoDescent: 0 -OS2TypoDOffset: 1 -OS2TypoLinegap: 0 -OS2WinAscent: 0 -OS2WinAOffset: 1 -OS2WinDescent: 0 -OS2WinDOffset: 1 -HheadAscent: 0 -HheadAOffset: 1 -HheadDescent: 0 -HheadDOffset: 1 -OS2Vendor: 'PfEd' -MarkAttachClasses: 1 -DEI: 91125 -Encoding: UnicodeBmp -Compacted: 1 -UnicodeInterp: none -NameList: Adobe Glyph List -DisplaySize: -24 -AntiAlias: 1 -FitToEm: 1 -WinInfo: 0 31 16 -BeginPrivate: 0 -EndPrivate -BeginChars: 65536 8 - -StartChar: uniE0A0 -Encoding: 57504 57504 0 -Width: 1060 -Flags: HW -LayerCount: 2 -Fore -SplineSet -426 -365 m 1 - 150 -365 l 1 - 150 117 l 2 - 150 236.333333333 176.333333333 333.666666667 229 409 c 1 - 265 461.666666667 321.333333333 513 398 563 c 2 - 550 662 l 2 - 610 701.333333333 652.833333333 747.5 678.5 800.5 c 128 - 704.166666667 853.5 717 923.333333333 717 1010 c 2 - 717 1339 l 1 - 508 1339 l 1 - 800 1681 l 1 - 1092 1339 l 1 - 883 1339 l 1 - 883 954 l 2 - 883 826 865.166666667 727.833333333 829.5 659.5 c 128 - 793.833333333 591.166666667 740.333333333 533.666666667 669 487 c 1 - 594 437 l 2 - 532 396.333333333 489.333333333 355 466 313 c 0 - 439.333333333 265.666666667 426 200.333333333 426 117 c 2 - 426 -365 l 1 -426 820 m 1 - 150 642 l 1 - 150 1950 l 1 - 426 1950 l 1 - 426 820 l 1 -EndSplineSet -EndChar - -StartChar: uniE0A1 -Encoding: 57505 57505 1 -Width: 1060 -Flags: HW -LayerCount: 2 -Fore -SplineSet -700 963 m 1 - 700 831 l 1 - 194 831 l 1 - 194 1731 l 1 - 349 1731 l 1 - 349 963 l 1 - 700 963 l 1 -706 750 m 1 - 865 750 l 1 - 865 -150 l 1 - 698 -150 l 1 - 453 435 l 1 - 472 45 l 1 - 472 -150 l 1 - 315 -150 l 1 - 315 750 l 1 - 480 750 l 1 - 727 163 l 1 - 706 592 l 1 - 706 750 l 1 -EndSplineSet -EndChar - -StartChar: uniE0A2 -Encoding: 57506 57506 2 -Width: 1060 -Flags: HW -LayerCount: 2 -Fore -SplineSet -265 0 m 2 - 171 0 124 47 124 141 c 2 - 124 830 l 2 - 124 930.666666667 164.333333333 981 245 981 c 1 - 245 1287 l 2 - 245 1378.33333333 273 1454.33333333 329 1515 c 0 - 383 1573 450 1602 530 1602 c 256 - 610 1602 677 1573 731 1515 c 0 - 787 1454.33333333 815 1378.33333333 815 1287 c 2 - 815 981 l 1 - 895.666666667 981 936 930.666666667 936 830 c 2 - 936 141 l 2 - 936 47 889 0 795 0 c 2 - 265 0 l 2 -530 1472 m 256 - 485.333333333 1472 449.5 1455.33333333 422.5 1422 c 128 - 395.5 1388.66666667 382 1343.66666667 382 1287 c 2 - 382 981 l 1 - 678 981 l 1 - 678 1287 l 2 - 678 1343.66666667 664.5 1388.66666667 637.5 1422 c 128 - 610.5 1455.33333333 574.666666667 1472 530 1472 c 256 -586 236 m 1 - 586 559 l 1 - 631.333333333 582.333333333 654 619.333333333 654 670 c 0 - 654 704 641.833333333 733.166666667 617.5 757.5 c 128 - 593.166666667 781.833333333 564 794 530 794 c 256 - 496 794 466.833333333 781.833333333 442.5 757.5 c 128 - 418.166666667 733.166666667 406 704 406 670 c 0 - 406 619.333333333 428.666666667 582.333333333 474 559 c 1 - 474 236 l 1 - 586 236 l 1 -EndSplineSet -EndChar - -StartChar: uniE0B0 -Encoding: 57520 57520 3 -Width: 1060 -Flags: HW -LayerCount: 2 -Fore -SplineSet -0 1950 m 1 - 1060 788 l 1 - 0 -375 l 1 - 0 1950 l 1 -EndSplineSet -EndChar - -StartChar: uniE0B1 -Encoding: 57521 57521 4 -Width: 1060 -Flags: HW -LayerCount: 2 -Fore -SplineSet --57 1812 m 1 - 39 1907 l 1 - 1060 788 l 1 - 39 -331 l 1 - -57 -236 l 1 - 875 788 l 1 - -57 1812 l 1 -EndSplineSet -EndChar - -StartChar: uniE0B2 -Encoding: 57522 57522 5 -Width: 1060 -Flags: HW -LayerCount: 2 -Fore -SplineSet -1060 -375 m 1 - 0 788 l 1 - 1060 1950 l 1 - 1060 -375 l 1 -EndSplineSet -EndChar - -StartChar: uniE0B3 -Encoding: 57523 57523 6 -Width: 1060 -Flags: HW -LayerCount: 2 -Fore -SplineSet -185 788 m 1 - 1117 -236 l 1 - 1021 -331 l 1 - 0 788 l 1 - 1021 1907 l 1 - 1117 1812 l 1 - 185 788 l 1 -EndSplineSet -EndChar - -StartChar: block -Encoding: 9608 9608 7 -Width: 1060 -Flags: HW -LayerCount: 2 -Fore -SplineSet -0 1950 m 1 - 1060 1950 l 1 - 1060 -375 l 1 - 0 -375 l 1 - 0 1950 l 1 -EndSplineSet -EndChar -EndChars -EndSplineFont diff --git a/font/fontpatcher.py b/font/fontpatcher.py deleted file mode 100755 index e2bbf2a0..00000000 --- a/font/fontpatcher.py +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env python2 -# vim:fileencoding=utf-8:noet - -import argparse -import sys -import re -import os.path - -try: - import fontforge - import psMat -except ImportError: - sys.stderr.write('The required FontForge modules could not be loaded.\n\n') - if sys.version_info.major > 2: - sys.stderr.write('FontForge only supports Python 2. Please run this script with the Python 2 executable - e.g. "python2 {0}"\n'.format(sys.argv[0])) - else: - sys.stderr.write('You need FontForge with Python bindings for this script to work.\n') - sys.exit(1) - -# Handle command-line arguments -parser = argparse.ArgumentParser(description='Font patcher for Powerline. Requires FontForge with Python bindings. Stores the patched font as a new, renamed font file by default.') -parser.add_argument('target_fonts', help='font files to patch', metavar='font', nargs='+', type=argparse.FileType('rb')) -parser.add_argument('--no-rename', help='don\'t add " for Powerline" to the font name', default=True, action='store_false', dest='rename_font') -parser.add_argument('--source-font', help='source symbol font', metavar='font', dest='source_font', default='{0}/fontpatcher-symbols.sfd'.format(sys.path[0]), type=argparse.FileType('rb')) -args = parser.parse_args() - - -class FontPatcher(object): - def __init__(self, source_font, target_fonts, rename_font=True): - self.source_font = fontforge.open(source_font.name) - self.target_fonts = (fontforge.open(target_font.name) for target_font in target_fonts) - self.rename_font = rename_font - - def patch(self): - for target_font in self.target_fonts: - source_font = self.source_font - target_font_em_original = target_font.em - target_font.em = 2048 - target_font.encoding = 'ISO10646' - - # Rename font - if self.rename_font: - target_font.familyname += ' for Powerline' - target_font.fullname += ' for Powerline' - fontname, style = re.match("^([^-]*)(?:(-.*))?$", target_font.fontname).groups() - target_font.fontname = fontname + 'ForPowerline' - if style is not None: - target_font.fontname += style - target_font.appendSFNTName('English (US)', 'Preferred Family', target_font.familyname) - target_font.appendSFNTName('English (US)', 'Compatible Full', target_font.fullname) - - source_bb = source_font['block'].boundingBox() - target_bb = [0, 0, 0, 0] - target_font_width = 0 - - # Find the biggest char width and height in the Latin-1 extended range and the box drawing range - # This isn't ideal, but it works fairly well - some fonts may need tuning after patching - for cp in range(0x00, 0x17f) + range(0x2500, 0x2600): - try: - bbox = target_font[cp].boundingBox() - except TypeError: - continue - if not target_font_width: - target_font_width = target_font[cp].width - if bbox[0] < target_bb[0]: - target_bb[0] = bbox[0] - if bbox[1] < target_bb[1]: - target_bb[1] = bbox[1] - if bbox[2] > target_bb[2]: - target_bb[2] = bbox[2] - if bbox[3] > target_bb[3]: - target_bb[3] = bbox[3] - - # Find source and target size difference for scaling - x_ratio = (target_bb[2] - target_bb[0]) / (source_bb[2] - source_bb[0]) - y_ratio = (target_bb[3] - target_bb[1]) / (source_bb[3] - source_bb[1]) - scale = psMat.scale(x_ratio, y_ratio) - - # Find source and target midpoints for translating - x_diff = target_bb[0] - source_bb[0] - y_diff = target_bb[1] - source_bb[1] - translate = psMat.translate(x_diff, y_diff) - transform = psMat.compose(scale, translate) - - # Create new glyphs from symbol font - for source_glyph in source_font.glyphs(): - if source_glyph == source_font['block']: - # Skip the symbol font block glyph - continue - - # Select and copy symbol from its encoding point - source_font.selection.select(source_glyph.encoding) - source_font.copy() - - # Select and paste symbol to its unicode code point - target_font.selection.select(source_glyph.unicode) - target_font.paste() - - # Transform the glyph - target_font.transform(transform) - - # Reset the font's glyph width so it's still considered monospaced - target_font[source_glyph.unicode].width = target_font_width - - target_font.em = target_font_em_original - - # Generate patched font - extension = os.path.splitext(target_font.path)[1] - if extension.lower() not in ['.ttf', '.otf']: - # Default to OpenType if input is not TrueType/OpenType - extension = '.otf' - target_font.generate('{0}{1}'.format(target_font.fullname, extension)) - -fp = FontPatcher(args.source_font, args.target_fonts, args.rename_font) -fp.patch()