Latin, Greek, Cyrillic resources (classes, kerning, glyphs' comparing, Unicode blocks for LGC etc.)

I would just like to share with colleagues resources that I prepare and systematize for work on my projects. For now, these resources are in the process of development and are not comprehensive, but I hope that with time, and perhaps with the assistance of other colleagues, these resources will gain even greater practical utility. For me, the resources in the Cyrillic section are the most useful, but for colleagues in the forum, the Latin and Greek sections will probably be of greater interest. I am open to ideas and assistance to develop the resource base and make it more relevant.


  • Stefan PeevStefan Peev Posts: 100
    When creating multilingual extended Cyrillic fonts, the question of the scope of the kerning class becomes quite complex. The combination of the Cyrillic glyphs /г/л practically necessarily requires the application of kerning, but in extended Cyrillic the class of the glyph  (class: г ѓ ґ ғ ӷ ӻ) and the class of the  (class: л љ ӆ ԉ ԓ ԕ ԡ ԯ) glyph are large enough and the danger of missing one of the glyphs in these classes is great. That's why I'm trying to systematize the resources that would be helpful in building extended Cyrillic projects.

  • Stefan PeevStefan Peev Posts: 100
    edited April 4
    Building a network of classes to cover in the most relevant way all cases requiring kerning corrections in multilingual Cyrillic is one of the main goals of the Common Serif and Veleka projects. Combining, for example, the uppercase letters:

    uni0410 uni041B.loclBGR uni0466 uni0468 uni04D0 uni04D2 uniA656 uniA658 uniA65C

    in the kerning left class does not at all mean that we can apply the same class to lowercase letters, which are:

    The asymmetry of the kerning classes in the Cyrillic alphabet is a rather confusing phenomenon, especially if we take into account the graphic difference between the forms of the international Cyrillic alphabet and the Bulgarian form of the Cyrillic alphabet. The same glyph Л in Cyrillic would be present in two different kerning classes depending on whether it refers to the international Cyrillic (uni041B) or the Bulgarian form of Cyrillic (uni041B.loclBGR).

    An example for Cyrillic kerning classes in case of ГЛ, Гл, гл, гЛ letter combinations.

    ГЛ Гл гл гЛ. ГЃҐӶҒӺ гѓґӷғӻ. ЛЉӅԈԒԔԠԮ лљӆԉԓԕԡԯ

    Kerning: LEFT
    Uppercase glyphs: @_uni0413 = [uni0413 uni0403 uni0490 uni0492 uni04F6 uni04FA] [Г Ѓ Ґ Ӷ Ғ Ӻ]
    Lowercase glyphs: @_uni0433 = [uni0433 uni0453 uni0491 uni0493 uni04F7 uni04FB] [г ѓ ґ ӷ ғ ӻ]

    Kerning: RIGHT
    Uppercase glyphs: @_uni041B = [uni041B uni0409 uni04C5 uni0508 uni0512 uni0514 uni0520 uni052E] [Л Љ Ӆ Ԉ Ԓ Ԕ Ԡ Ԯ]
    Lowercase glyphs: @_uni043B = [uni043B uni0459 uni04C6 uni0509 uni0513 uni0515 uni0521 uni052F] [л љ ӆ ԉ ԓ ԕ ԡ ԯ]

    These kerning classes only apply to the use cases of the international form of the Cyrillic alphabet. With the Bulgarian form of the Cyrillic alphabet, there should be separate classes for glyphs Л л.
  • Stefan PeevStefan Peev Posts: 100
    An example of kerning classes for extended multilingual Cyrillic font. Kerning pairs КО Ко ко кО

  • Stefan PeevStefan Peev Posts: 100
    edited April 9
    In which cases is kerning mandatory in Cyrillic and what kerning classes can it cover? In a series of examples I will try to give an extended answer to these questions. The first characteristic case is with the capital letters ГД:

    Kerning class: LEFT Kerning class: RIGHT
    Uppercase glyphs [Г Ѓ Ґ Ӷ Ғ Ӻ] ± Uppercase glyphs ± [Д Ԫ Ꙣ Ꚁ Ꚉ]
    @uni0413_ = [uni0413 uni0403 uni0490 uni0492 uni04F6 uni04FA]; @_uni0414 = [uni0414 uni052A uniA662 uniA680 uniA688];

  • Kerning: LEFT [Г Ѓ Ґ Ӷ Ғ Ӻ]      Kerning: RIGHT [Л Љ Ӆ Ԉ Ԓ Ԕ Ԡ Ԯ]
    – this produces 48 kerning pairs.

    Kerning: LEFT [Г Ѓ Ґ Ӷ Ғ Ӻ]       Kerning: RIGHT [Д Ԫ Ꙣ Ꚁ Ꚉ]
    – this produces 30 kerning pairs.

    How much of these pairings do actually occurr in texts?

  • John HudsonJohn Hudson Posts: 2,974
    Isn’t the point that class kernng can be used here, so there are, in fact, only two pairs being defined, not 78?
  • Stefan PeevStefan Peev Posts: 100
    Speaking about kerning issues it's important anyone to have in mind the discussion about avoiding GPOS kerning overflow and especially the John Hudson's and Frank Brokland's remarks.
  • I thought this might be useful for other colleagues […]
    I think so too and your contribution is very much appreciated. I am curious about all the classes and kerning combinations you have in mind. In my opinion, it indeed makes sense to expand the classes as much as possible, that is, to add every possible member. The application used for compiling must then perform the subsetting if necessary (our tools, for example, do that, but I am sure there are more).

    GPOS subsettingin OTM
  • Stefan PeevStefan Peev Posts: 100
    I think so too and your contribution is very much appreciated.
    Thank you!
    I am curious about all the classes and kerning combinations you have in mind.
    There are a lot of kerning combination which I have in mind but the work on them goes slowly. I am working on modern font projects that are optimized for multilingual Cyrillic (includes all Unicode Cyrillic blocks) and which should be able to provide conditions for free writing of historical texts and their subsequent transformation to Church Slavonic fonts. This means that I am even considering such Cyrillic kerning pairs as


    (/uni0410 /uni0474).

    On the other hand I have in mind the local forms for Bulgarian Cyrillic and the forms for small capitals.
    Here starts a problem. Bulgarian local forms are variants of the default glyphs so they have not unique Unicode codepoints, on one hand, and on the other hand they are named differently in the different font projects. For example the default Cyrillic Л (uni041B) is named in the Bulgarian form as: uni041B.loclBGR, uni041B.BGR,, El-cy.BGR etc. How will this variety of names affect the presentation of the local Bulgarian forms in the respective classes? That's a question I don't have an answer to.
  • I don’t think you can cover all the naming conventions used by different type designers and foundries. In our production environment we have quite a bit of legacy naming in the character-layout files and therefore also in the kerning and layout-features files. For Cyrillic this largely means that the ‘afii[…]’ convention is still used. However, the generated fonts are ultimately given ‘uni[…]’ names for the characters, if applicable (for what it is worth). So, in any case we would have to convert the naming you use in your classes, but that can be handled with a script, of course.
Sign In or Register to comment.