From 54a992f8991f91ee317924649db588edc4383f70 Mon Sep 17 00:00:00 2001 From: Thai on Cloud9 Date: Mon, 6 May 2019 05:42:00 +0000 Subject: [PATCH] monospacify, adjusted metrics, update readme, added comic-shanns-dtinth --- .gitignore | 2 ++ README.md | 5 +++++ comic-shanns-dtinth.otf | Bin 0 -> 48552 bytes dtinth.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100644 .gitignore create mode 100644 comic-shanns-dtinth.otf create mode 100644 dtinth.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..35dedad --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +vendor +*.pyc \ No newline at end of file diff --git a/README.md b/README.md index 81d4a93..58bd4fe 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,11 @@ # What it is A classy font. +## Changes in dtinth’s fork +1. All glyphs have been adjusted to have exactly the same width (using code based on [monospacifier](https://github.com/cpitclaudel/monospacifier)) +2. The glyph metrics have been adjusted to make it display better alongside system font. +3. The name is changed to `Comic Shanns dtinth`. + ## Usage You can download it and install it like any other font. diff --git a/comic-shanns-dtinth.otf b/comic-shanns-dtinth.otf new file mode 100644 index 0000000000000000000000000000000000000000..3c0ae3bb6bbcbfe23b64642487cbdc66f3545b3b GIT binary patch literal 48552 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 nH*)_^27fFEz-kp literal 0 HcmV?d00001 diff --git a/dtinth.py b/dtinth.py new file mode 100644 index 0000000..0aee998 --- /dev/null +++ b/dtinth.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- + +"""Update the glyph metrics so that they all really have the same size.""" + +# Based on +# - monospacifier: https://github.com/cpitclaudel/monospacifier/blob/master/monospacifier.py +# - YosemiteAndElCapitanSystemFontPatcher: https://github.com/dtinth/YosemiteAndElCapitanSystemFontPatcher/blob/master/bin/patch + +import os +import re +import sys + +reload(sys) +sys.setdefaultencoding('UTF8') + +import fontforge +import psMat +import unicodedata + +def height(font): + return float(font.capHeight) + +def adjust_height(source, template): + source.selection.all() + source.transform(psMat.scale(height(template) / height(source))) + for attr in ['ascent', 'descent', + 'hhea_ascent', 'hhea_ascent_add', + 'hhea_linegap', + 'hhea_descent', 'hhea_descent_add', + 'os2_winascent', 'os2_winascent_add', + 'os2_windescent', 'os2_windescent_add', + 'os2_typoascent', 'os2_typoascent_add', + 'os2_typodescent', 'os2_typodescent_add', + ]: + setattr(source, attr, getattr(template, attr)) + source.transform(psMat.scale(0.9)) + +font = fontforge.open('comic-shanns.otf') +ref = fontforge.open('vendor/Menlo.ttc') +for g in font.glyphs(): + uni = g.unicode + category = unicodedata.category(unichr(uni)) if 0 <= uni <= sys.maxunicode else None + if g.width > 0 and category not in ['Mn', 'Mc', 'Me']: + target_width = 510 + if g.width != target_width: + delta = target_width - g.width + g.left_side_bearing += delta / 2 + g.right_side_bearing += delta - g.left_side_bearing + g.width = target_width + +adjust_height(font, ref) +font.sfnt_names = [] # Get rid of 'Prefered Name' etc. +font.fontname = 'Comic Shanns dtinth' +font.familyname = 'Comic Shanns dtinth' +font.fullname = 'Comic Shanns dtinth' +font.generate('comic-shanns-dtinth.otf') \ No newline at end of file -- 1.8.3.1