# Auto-feature suggestion for Greek

**URL:** <https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054>\
**Category:** Glyphs\
**Created:** [March 12, 2016, 1:38am UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054 "2016-03-12T01:38:51Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tosche](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/tosche/32/412_2.png) [@Tosche](https://forum.glyphsapp.com/u/Tosche)\
**Post date:** [March 12, 2016, 1:38am UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/1 "2016-03-12T01:38:51Z")

</div>

Greek OpenType features suggestion:  
Greek-specific features are absent in most fonts but there should be three substitutions, first two of which should be ideally done by a text layout engine but only InDesign is smart enough to support. The last one is a solution to the misuse of periodcentered caused by antique keyboard layouts.

1. Capital letters with tonos have to be substituted with normal letters:  
The letters Ά Έ Ή Ί Ό Ύ Ώ only occur at the beginning of a word in a lowercase-dominant text. In all-cap setting, all tonos caps need to be tonos-less. Unless you want to resolve PDF text extraction issue, addition of tonos-less alternates is not necessary.  
The code logic should be the following, and be written in calt, case, and/or ccmp (given that InDesign’s all-cap option does exactly what it’s supposed to do, support in case feature may not be necessary):  
If a tonos capital is followed by another capital letter, suppress  
If a tonos capital is preceded by another capital letter, suppress  
There are single-letter words with tonos (e.g. ώ). You need to check them across word spaces and punctuations.
2. As an additional rule, if there is a diphthong whose first letter has a tonos, the second letter (either ι or υ) should have a dieresis when converted to all cap. (άυλες \> ΑΫΛΕΣ)  
άι έι όι ύι becomes ΑΪ ΕΪ ΟΪ ΥΪ in all-cap  
άυ έυ ήυ όυ ώυ becomes ΑΫ ΕΫ ΗΫ ΟΫ ΩΫ in all-cap  
Some of the vowel combinations that are not listed here do exist (e.g. ήι ώι), but they are not diphthongs and dieresis insertion should not happen.
3. In Greek keyboard, anoteleia is not accessible, instead periodcentered is used. When periodcentered is preceded by a greek letter, it should be substituted with anoteleia. In dictionary use, letter-periodcentered-letter sequence is probably a legitimate case of periodcentered and therefore should not be substituted. For the graphical difference between periodcentered and anoteleia, see this link:  
[http://leonidas.org/greek-type-design/examples-of-ano-teleia-use/](http://leonidas.org/greek-type-design/examples-of-ano-teleia-use/)

---

<div class="post-metadata">

**Author:** ![GeorgSeifert](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/georgseifert/32/259_2.png) [@GeorgSeifert](https://forum.glyphsapp.com/u/GeorgSeifert)\
**Post date:** [March 12, 2016, 10:30am UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/2 "2016-03-12T10:30:34Z")

</div>

That sounds like a good idea.

---

<div class="post-metadata">

**Author:** ![Tosche](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/tosche/32/412_2.png) [@Tosche](https://forum.glyphsapp.com/u/Tosche)\
**Post date:** [March 14, 2016, 8:32pm UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/3 "2016-03-14T20:32:17Z")

</div>

My suggestion (in ccmp?)

```
lookup grek_dieresisCapInsertion {
	script grek;
	sub [Alphatonos Epsilontonos Omicrontonos Upsilontonos] Iota' by Iotadieresis;
	sub [Alphatonos Epsilontonos Etatonos Omicrontonos Omegatonos] Upsilon' by Upsilondieresis;
	sub [alphatonos.sc epsilontonos.sc omicrontonos.sc upsilontonos.sc] iota.sc' by iotadieresis.sc;
	sub [alphatonos.sc epsilontonos.sc etatonos.sc omicrontonos.sc omegatonos.sc] upsilon.sc' by upsilondieresis.sc;
} grek_dieresisCapInsertion;

lookup grek_tonosCap {
	script grek;
	# tonos supression of single-letter word
    sub @grekCapsTonos' @nonLetter @nonLetter @nonLetter @nonLetter @nonLetter @grekCaps by @grekCapsTonosless;
    sub @grekCapsTonos' @nonLetter @nonLetter @nonLetter @nonLetter @grekCaps by @grekCapsTonosless;
    sub @grekCapsTonos' @nonLetter @nonLetter @nonLetter @grekCaps by @grekCapsTonosless;
    sub @grekCapsTonos' @nonLetter @nonLetter @grekCaps by @grekCapsTonosless;
    sub @grekCapsTonos' @nonLetter @grekCaps by @grekCapsTonosless;
	sub @grekCaps @nonLetter @nonLetter @nonLetter @nonLetter @nonLetter @grekCapsTonos' by @grekCapsTonosless;
	sub @grekCaps @nonLetter @nonLetter @nonLetter @nonLetter @grekCapsTonos' by @grekCapsTonosless;
	sub @grekCaps @nonLetter @nonLetter @nonLetter @grekCapsTonos' by @grekCapsTonosless;
	sub @grekCaps @nonLetter @nonLetter @grekCapsTonos' by @grekCapsTonosless;
	sub @grekCaps @nonLetter @grekCapsTonos' by @grekCapsTonosless;
	# tonos supression within a word
	sub @grekCapsTonos' @grekSmcp by @grekCapsTonosless;
	sub @grekCaps @grekCapsTonos' by @grekCapsTonosless;
	sub @grekCapsTonos' @grekCaps by @grekCapsTonosless;
} grek_tonosCap;

lookup grek_anoteleia {
	script grek;
	ignore sub @grekAll periodcentered' @grekAll;
	sub @grekAll periodcentered' by anoteleia;
} grek_anoteleia;

```

and in smcp

```
sub [alphatonos.sc epsilontonos.sc omicrontonos.sc upsilontonos.sc] iota.sc' by iotadieresis.sc;
sub [alphatonos.sc epsilontonos.sc etatonos.sc omicrontonos.sc omegatonos.sc] upsilon.sc' by upsilondieresis.sc;
```

---

<div class="post-metadata">

**Author:** ![GeorgSeifert](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/georgseifert/32/259_2.png) [@GeorgSeifert](https://forum.glyphsapp.com/u/GeorgSeifert)\
**Post date:** [March 14, 2016, 10:03pm UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/4 "2016-03-14T22:03:17Z")

</div>

Thanks for the code. This helps a lot.

> [@Tosche](#):
>
> # tonos supression of single-letter word

isn’t the long lookahead and look behind a bit dangerous? that might apply to normal mixed case settings, too.

---

<div class="post-metadata">

**Author:** ![Tosche](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/tosche/32/412_2.png) [@Tosche](https://forum.glyphsapp.com/u/Tosche)\
**Post date:** [March 14, 2016, 11:45pm UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/5 "2016-03-14T23:45:42Z")

</div>

It could be, but it of course doesn’t include lowercase in the search range (only trying to find the first uppercase letter and skipping non-letter junk). I guess it should search for two uppercase letters in sequence over non-letter junk, not just one, assuming the previous or following word consists of multiple letters?

---

<div class="post-metadata">

**Author:** ![Mark](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/mark/32/20784_2.png) [@Mark](https://forum.glyphsapp.com/u/Mark)\
**Post date:** [November 8, 2016, 2:37pm UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/6 "2016-11-08T14:37:41Z")

</div>

What do you Glyphs guys propose for dealing with a Greek UC-only Font? Particularly I am referencing the [case conversion.](http://leonidas.org/greek-type-design/case-conversion-for-monotonic-greek/) Is it the best to just add the UC glyphs as a component to the LC glyphs and then hope for the user’s grammar responsibility during typesetting? And/or is there some backstage magic happening in Glyphs during the export or auto feature writing that can be messed up by not having real LC? Any experiences with Uppercase-only Greek?

---

<div class="post-metadata">

**Author:** ![Tosche](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/tosche/32/412_2.png) [@Tosche](https://forum.glyphsapp.com/u/Tosche)\
**Post date:** [November 8, 2016, 6:20pm UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/7 "2016-11-08T18:20:07Z")

</div>

I do have experience with UC only Greek. I simply copied tonos-less letters to tonos glyph slot, and duplicated that to lowercase. I still made dieresis conversion happen.

---

<div class="post-metadata">

**Author:** ![Mark](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/mark/32/20784_2.png) [@Mark](https://forum.glyphsapp.com/u/Mark)\
**Post date:** [November 9, 2016, 10:23am UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/8 "2016-11-09T10:23:50Z")

</div>

Thanks Tosche, I will take this into account.

---

<div class="post-metadata">

**Author:** ![reesederksen](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/reesederksen/32/32042_2.png) [@reesederksen](https://forum.glyphsapp.com/u/reesederksen)\
**Post date:** [September 24, 2025, 9:37pm UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/9 "2025-09-24T21:37:39Z")

</div>

It’s been almost nine years since this thread was last active; is it still recommended to build Greek UC fonts the way Toshi describes? (by placing tonos-less letters in the tonos glyph slots) Or has a new standard been established?

---

<div class="post-metadata">

**Author:** ![Tosche](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/tosche/32/412_2.png) [@Tosche](https://forum.glyphsapp.com/u/Tosche)\
**Post date:** [September 24, 2025, 9:48pm UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/10 "2025-09-24T21:48:23Z")

</div>

Thanks for the reminder. A certain Leonidas in our community told me the above code needs revising, and it’s time that I correct it. Give me a bit of time please.

---

<div class="post-metadata">

**Author:** ![reesederksen](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/reesederksen/32/32042_2.png) [@reesederksen](https://forum.glyphsapp.com/u/reesederksen)\
**Post date:** [September 25, 2025, 1:56pm UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/11 "2025-09-25T13:56:53Z")

</div>

No problem! Take the time you need.

---

<div class="post-metadata">

**Author:** ![reesederksen](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/reesederksen/32/32042_2.png) [@reesederksen](https://forum.glyphsapp.com/u/reesederksen)\
**Post date:** [November 4, 2025, 6:45pm UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/12 "2025-11-04T18:45:14Z")

</div>

Just checking in to see if there’s any developments on this!

---

<div class="post-metadata">

**Author:** ![Tosche](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/tosche/32/412_2.png) [@Tosche](https://forum.glyphsapp.com/u/Tosche)\
**Post date:** [April 27, 2026, 5:07pm UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/13 "2026-04-27T17:07:21Z")

</div>

Thanks for the wait (or apologies if it was too late). Below was passed on to me by my former colleague Emilios Theofanous who was in turn given by Irene Vlachou, if I’m not mistaken. I wouldn’t be surprised if there’s any edge cases, but I’m personally not aware of it and it’s much better than the above anyway:

```fea
#—————————————————————————

# Greek Features

# —————————————————————————

# Recover Dieresis: for cases like μπόι / σέικερ to be ΜΠΟΪ / ΣEΪΚΕΡ

lookup Dieresis {
sub [Alphatonos Epsilontonos Omicrontonos Omegatonos] [Iota Upsilon]' by [Iotadieresis Upsilondieresis];
}Dieresis ;

# Special suppression and recovery cases for Capital

@GrCaps = [Alpha Beta Gamma Delta Epsilon Zeta Eta Theta Iota Kappa Lambda Mu Nu Xi Omicron Pi Rho Sigma Tau Upsilon Phi Chi Psi Omega Alphatonos Epsilontonos Etatonos Iotatonos Omicrontonos Upsilontonos Omegatonos Iotadieresis Upsilondieresis];
@UCtonos = [Alphatonos Epsilontonos Etatonos Iotatonos Omicrontonos Upsilontonos Omegatonos];
@UCtonosless = [Alpha Epsilon Eta Iota Omicron Upsilon Omega];

lookup GrCapitals {
sub @UCtonos' @GrCaps by @UCtonosless; # For cases like Έλενα / καλημέρα to be ΕΛΕΝΑ / ΚΑΛΗΜΕΡΑ
sub [@GrCaps Iotadieresis] @UCtonos' by @UCtonosless; # for cases like υϊός to be ΥΪΟΣ
sub @GrCaps iotadieresistonos' @GrCaps by Iotadieresis; # for cases like καΐκι to be ΚΑΪΚΙ
sub @GrCaps upsilondieresistonos' @GrCaps by Upsilondieresis; # for cases like εξαΰλωση to be ΕΞΑΫΛΩΣΗ
} GrCapitals;

```

---

<div class="post-metadata">

**Author:** ![SCarewe](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/scarewe/32/18952_2.png) [@SCarewe](https://forum.glyphsapp.com/u/SCarewe)\
**Post date:** [April 27, 2026, 5:36pm UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/14 "2026-04-27T17:36:25Z")

</div>

Excellent resource, thank you Toshi!

---

<div class="post-metadata">

**Author:** ![reesederksen](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/reesederksen/32/32042_2.png) [@reesederksen](https://forum.glyphsapp.com/u/reesederksen)\
**Post date:** [April 28, 2026, 3:04pm UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/15 "2026-04-28T15:04:40Z")

</div>

Amazing, thanks Toshi!

---

<div class="post-metadata">

**Author:** ![michaelrafailyk](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/michaelrafailyk/32/32212_2.png) [@michaelrafailyk](https://forum.glyphsapp.com/u/michaelrafailyk)\
**Post date:** [April 29, 2026, 7:52am UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/16 "2026-04-29T07:52:25Z")

</div>

> [@Tosche](#):
>
> ```auto
> sub @UCtonos' @GrCaps by @UCtonosless;
> 
> ```

So, for example `Alphatonos` will be substituted with just `Alpha`. Question — in the text (for copy/paste or when changing fonts), there is still be `Alphatonos` unicode, right?

I remember solution using tonos-less `Alphatonos.001` that contains component of `Alpha`, but couldn’t understand why that was required if the substitution is font-level and it doesn’t transform unicodes in the text.

---

<div class="post-metadata">

**Author:** ![GeorgSeifert](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/georgseifert/32/259_2.png) [@GeorgSeifert](https://forum.glyphsapp.com/u/GeorgSeifert)\
**Post date:** [April 29, 2026, 8:07am UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/17 "2026-04-29T08:07:38Z")

</div>

there are some (rare) cases where only the glyph names are stored in a PDF (.ps file \> Distiller; that is the reason we care about production glyph names at all, as they are needed to restore the characters in those cases). In those cases, the you would get “Alpha” if it was substituted out. But in most PDFs produced in the last 20 years, the original characters are preserved so the names don’t matter.

---

<div class="post-metadata">

**Author:** ![SCarewe](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/scarewe/32/18952_2.png) [@SCarewe](https://forum.glyphsapp.com/u/SCarewe)\
**Post date:** [July 3, 2026, 2:56pm UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/18 "2026-07-03T14:56:52Z")

</div>

I’m trying to implement this using a feature code snippet. As per [the handbook](https://handbook.glyphsapp.com/layout/#layout/automatic-code), I added a `FeatureSnippetsGreekTonos.plist` into the feature snippets folder. However, the snippet doesn’t show up in the snippets menu. Is it supposed to?

This isn’t really on-topic, feel free to move this to a new topic.

---

<div class="post-metadata">

**Author:** ![kosbarts](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/kosbarts/32/514_2.png) [@kosbarts](https://forum.glyphsapp.com/u/kosbarts)\
**Post date:** [October 6, 2026, 8:05am UTC](https://forum.glyphsapp.com/t/auto-feature-suggestion-for-greek/4054/20 "2026-10-06T08:05:47Z")

</div>

I am late at this party but here are my 2¢.

The code is almost solid. It’s missing one case which rare as it may be should be there.

```fea
#—————————————————————————

# Greek Features

# —————————————————————————

# Recover Dieresis: for cases like μπόι / σέικερ to be ΜΠΟΪ / ΣEΪΚΕΡ

lookup Dieresis {
sub [Alphatonos Epsilontonos Omicrontonos Omegatonos] [Iota Upsilon]’ by [Iotadieresis Upsilondieresis];
}Dieresis ;

# Special suppression and recovery cases for Capital

@GrCaps = [Alpha Beta Gamma Delta Epsilon Zeta Eta Theta Iota Kappa Lambda Mu Nu Xi Omicron Pi Rho Sigma Tau Upsilon Phi Chi Psi Omega Alphatonos Epsilontonos Etatonos Iotatonos Omicrontonos Upsilontonos Omegatonos Iotadieresis Upsilondieresis];
@UCtonos = [Alphatonos Epsilontonos Etatonos Iotatonos Omicrontonos Upsilontonos Omegatonos];
@UCtonosless = [Alpha Epsilon Eta Iota Omicron Upsilon Omega];

lookup GrCapitals {
sub Omicrontonos' comma @GrCaps by Omicron; # For the case of ό,τι and Ό,τι.
sub @UCtonos' @GrCaps by @UCtonosless; # For cases like Έλενα / καλημέρα to be ΕΛΕΝΑ / ΚΑΛΗΜΕΡΑ
sub @GrCaps @UCtonos' by @UCtonosless; # for cases like υϊός to be ΥΪΟΣ
sub @GrCaps iotadieresistonos' @GrCaps by Iotadieresis; # for cases like καΐκι to be ΚΑΪΚΙ
sub @GrCaps upsilondieresistonos' @GrCaps by Upsilondieresis; # for cases like εξαΰλωση to be ΕΞΑΫΛΩΣΗ
} GrCapitals;

```

Additionally Adobe and Microsoft do some of their own weird decompositions for ΰ and ΐ changing them to [Iotadieresis Upsilodieresis] + acutecomb (or .case if it’s in the font) or/and [Iota Upsilon] dieresiscomb (or .case) acutecomb (or .case)

So it is wise to add another lookup

```fea
lookup GR_dieresistonos {
sub [Iotadieresis Upsilondieresis] [acutecomb acutecomb.case] by [Iotadieresis Upsilondieresis];
sub [Iota Upsilon] [dieresiscomb dieresiscomb.case] [acutecomb acutecomb.case] by [Iotadieresis Upsilondieresis];
} GR_dieresistonos;

```
