Skip to content

Instantly share code, notes, and snippets.

View connordavenport's full-sized avatar

Connor Davenport connordavenport

View GitHub Profile
@connordavenport
connordavenport / PairListSetter.py
Created December 15, 2023 19:20
a little script to switch pair lists super fast!
import ezui
from mm4.tools.pairListParser import *
import metricsMachine
from mm4.mmScripting import MetricsMachineScriptingError
class PairListSetter(ezui.WindowController):
def build(self):
content = """
@connordavenport
connordavenport / CentroidHull.py
Created December 3, 2023 17:08
a RF script to preview a glyphs "convex hull" and "centroid"...
from mojo.roboFont import RGlyph
from fontTools.pens.basePen import BasePen
from mojo.subscriber import Subscriber, registerGlyphEditorSubscriber, unregisterGlyphEditorSubscriber, listRegisteredSubscribers
from fontPens.flattenPen import flattenGlyph
from scipy.spatial import ConvexHull
class MyCopyDecomposingPen(BasePen):
def __init__(self, glyphSet, outPen):
super(MyCopyDecomposingPen, self).__init__(glyphSet)
self._moveTo = outPen.moveTo
@connordavenport
connordavenport / PrintExtensionDateOrder.py
Created December 2, 2023 20:53
a rf script to print extensions in order of building
from mojo.extensions import ExtensionBundle as bb
import datetime
import collections
from pprint import pprint
ext = bb.allExtensions()
i = {}
for e in ext:
time = bb(e).infoDictionary.get("timeStamp")
formatted_date = datetime.datetime.utcfromtimestamp(time).strftime('%Y-%m-%d %H:%M:%S')
i[time] = (e,formatted_date)
@connordavenport
connordavenport / frontAndCenterPopover.py
Last active December 7, 2023 20:27
a simply RF popover to jump between fonts
import ezui
from merz.tools.drawingTools import NSImageDrawingTools
from mojo.UI import AllFontWindows, CurrentFontWindow, AllWindows, CurrentGlyphWindow
class frontAndCenter(ezui.WindowController):
def build(self, parent, viewType):
self.buttonMap = {}
self.parent = parent
@connordavenport
connordavenport / makeAlternatesMenu.py
Last active November 17, 2023 18:06
a contextual menu for the font overview that adds an alternate glyph next to the default glyph
from mojo.events import addObserver
import ezui
from mojo.subscriber import Subscriber, registerFontOverviewSubscriber
from mojo.UI import CurrentFontWindow
class alternatesController(ezui.WindowController):
def build(self, parent):
content = """
@connordavenport
connordavenport / LayerSinker.py
Created October 12, 2023 17:09
sync layer metrics when a font opens
from mojo.subscriber import Subscriber, registerRoboFontSubscriber
class LayerSinker(Subscriber):
def fontDocumentDidOpen(self,info):
font = info["font"]
font.lib['com.typemytype.robofont.syncGlyphLayers'] = 'metrics'
registerRoboFontSubscriber(LayerSinker)
@connordavenport
connordavenport / RGlyph_markColorName.py
Last active October 18, 2024 20:19
a fontparts add on to allow one to mark a glyph by the color name
from mojo.roboFont import RGlyph
from mojo.UI import getDefault
'''
g = CurrentGlyph()
g.markColorName = "Red"
'''
def _setColorName(self, color=None):
if not isinstance(color, str):
@connordavenport
connordavenport / AutoCommit.py
Last active October 11, 2023 20:58
Automatic Git Commiter
from AppKit import NSBeep,NSTimer,NSRunLoop,NSRunLoopCommonModes
import git
import os
from mojo.extensions import setExtensionDefault, getExtensionDefault
import re
from mojo.UI import PostBannerNotification
'''
A startup script for RoboFont to automatically commit to Git every 5 minutes.
To use, run the following script with your GitHub email:
@connordavenport
connordavenport / RGlyph_BoundsPositions.py
Last active October 3, 2023 23:40
A startup script that adds a few functions to a glyph to retrieve specific bound location.
'''
fontParts add-on to get specific locations of a glyph's bounds
10
0 3 6
#######
# #
# #
9 1 ## 4 ## 7
@connordavenport
connordavenport / MargielaTabs.py
Last active September 28, 2023 20:15
A startup script for RoboFont that will automatically group/tabulate your fonts by info.familyName
from mojo.subscriber import Subscriber, registerRoboFontSubscriber
import AppKit
class MargielaTabs(Subscriber):
def fontDocumentDidOpen(self,info):
newFont = info["lowLevelEvents"][0]["font"]
windowsMap = {}
allFonts = {f.info.familyName:AllFonts().getFontsByFamilyName(f.info.familyName) for f in AllFonts()}
for familyName,fonts in allFonts.items():