All-lowercase font

I have a lowercase only font and I want to update each glyph with the double unicode as all-caps font tutorial, but somehow viceversa. Is there any way to do it? Tried to do the same selecting just lowercases and didnt work.

https://glyphsapp.com/tutorials/creating-an-all-caps-font

Thanks

There is no difference. Do the same thing as in the tutorial. Use the uppercase names as described in the tutorial. Just draw lowercase shapes in the glyphs.

Yeah, but I have all lowercases now… Do I need to change glyph name manually?

You can do that by writing a small script or by search and replace using a case changing regex :wink:

Ok, let’s try… I have no knowledge of python language. Sorry for my beginner code

for aGlyph in Glyphs.font.glyphs:
    aGlyph.name = aGlyph.name.upper()

This seems to do the job, but just for one glyph at a time. Also logged this error:

Traceback (most recent call last):
  File "<macro>", line 1, in <module>
  File "GlyphsApp/GlyphsApp/__init__.py", line 310, in __iter__
  File "_convenience.py", line 589, in enumeratorGenerator
    yield container_unwrap(anEnumerator.nextObject(), StopIteration)
objc.error: NSGenericException - *** Collection <__NSArrayM: 0x7fafdc4e4550> was mutated while being enumerated.

Looks like I have to iterate a copy or something? Maybe I have to iterate just selected glyphs so for example, Math stuff doesn’t affects?

Thanks!

There is a mekkablue script for that already. https://github.com/mekkablue/Glyphs-Scripts/

You would need .title(), not .upper() because you want Aacute, not AACUTE. It is a bit more complicated, because sometimes it is not as straight forward (think OE, AE, IJ), and you only want to change letters, not punctuation, figures, etc. (two, not Two, etc.). So what you would have to do is get the character associated to the glyph name (a little more complex with suffixed glyph names), then .upper() the character, then turn that uppercased character into a glyph name again. But as mentioned above, there is a mekkablue script that does that already.

Edit: I need to correct myself. The script is called Convert to Capitalised and should work like described above, but it doesn’t. It brute-force capitalizes the beginning of the glyph name and also includes the E if it starts with AE or OE. Will update the script. (Perhaps if you filter and select only the letters, the script will do what you need. So you don’t need to wait for me.)

Update: just uploaded a fix for both scripts, they are now called Convert to Lowercase and Convert to Uppercase.

1 Like

I thought it is more complicated than iterate, change case… Awesome @mekkablue Thanks a lot! I will pull your scripts again

It works great, but with some glyphs I got an error. I think with glyphs like idotless, jdotless or kgreenlandic which I suppose it is because there isnt an uppercase for those?

Traceback (most recent call last):
  File "Convert to Uppercase.py", line 49, in <module>
   convertedCount += uppercaseGlyphName( thisGlyph )
  File "Convert to Uppercase.py", line 18, in uppercaseGlyphName
uppercaseCharacter = lowercaseCharacter.upper()
AttributeError: 'NoneType' object has no attribute 'upper'
End

OK, thanks for the report. Should be fixed now.

1 Like