89 lines
2.6 KiB
Python
89 lines
2.6 KiB
Python
#FLM: RoboFab Intro, Font Groups
|
|
|
|
#
|
|
#
|
|
# demo of RoboFab font groups
|
|
#
|
|
#
|
|
|
|
# RoboFab font objects have several objects associated with them
|
|
# kerning, info, groups, etc. Let's talk about groups. Groups are,
|
|
# well groups of glyph names. These can be useful for lots of things
|
|
# like kerning and OpenType features. The number of uses for
|
|
# groups is only limited by your imagination. Enough of this
|
|
# silly pep talk. Let's check it out.
|
|
|
|
|
|
from robofab.world import CurrentFont
|
|
# gString has lots of glyph lists, these two will be useful for this demo
|
|
from robofab.gString import uppercase_plain, lowercase_plain
|
|
|
|
# (you will need t have a font open in FontLab for this demo)
|
|
font = CurrentFont()
|
|
|
|
# First off, let's gather up some glyph names.
|
|
# gString's uppercase_plain and lowercase_plain
|
|
# lists will do for now. Let's go through these lists
|
|
# and see if they contain any glyphs that are in this font.
|
|
uppercase = []
|
|
lowercase = []
|
|
for glyphName in uppercase_plain:
|
|
if font.has_key(glyphName):
|
|
uppercase.append(glyphName)
|
|
for glyphName in lowercase_plain:
|
|
if font.has_key(glyphName):
|
|
lowercase.append(glyphName)
|
|
uppercase.sort()
|
|
lowercase.sort()
|
|
|
|
# And, we'll combine the uppercase glyph names and
|
|
# lowercase glyph names that we found into one list
|
|
both = uppercase + lowercase
|
|
both.sort()
|
|
|
|
# Just for kicks, let's get the list of glyphs
|
|
# that you have selected in the font window as well
|
|
selected = font.selection
|
|
|
|
# Ok, now that we have these lists, what do we do with them?
|
|
# Well, we'll store them in font.groups. That object is
|
|
# essentially a dictionary that has a few special tricks.
|
|
# The dictionary is keyed by the name of the group, and
|
|
# the value is the list of the glyphs. Pretty simple.
|
|
# Now, let's store these lists away.
|
|
groups = font.groups
|
|
groups['uppercase'] = uppercase
|
|
groups['lowercase'] = lowercase
|
|
groups['uppercaseAndLowercase'] = both
|
|
groups['selected'] = both
|
|
font.update()
|
|
|
|
# In FontLab the group info is visible in the classes panel.
|
|
# if you look there now, you'll (hopefully) see these new
|
|
# groups. Wow! Exciting! Amazing! But, what if you want to
|
|
# get these lists back? Easy:
|
|
groups = font.groups
|
|
print 'uppercase:'
|
|
print groups['uppercase']
|
|
print
|
|
print 'lowercase:'
|
|
print groups['lowercase']
|
|
print
|
|
print 'upper and lowercase:'
|
|
print groups['uppercaseAndLowercase']
|
|
print
|
|
print 'selected:'
|
|
print groups['selected']
|
|
print
|
|
|
|
# You can even search the groups for the names of groups
|
|
# that contain a certain glyph name. It works like this:
|
|
groups = font.groups
|
|
found = groups.findGlyph('a')
|
|
print '"a" is in these groups: %s'%str(found)
|
|
|
|
# Oh yeah, don't forget to update the font.
|
|
font.update()
|
|
|
|
# Super easy, huh? Now get to it!
|