Glyph Naming in Kannada Type Design

By Arun C K
An image showing kannada letter is equal to kn_k
An image showing kannada letter is equal to kn_k

1. What Is Glyph Naming?

In digital type design, every visible shape in a font whether it is a letter, numeral, punctuation mark, or ligature is stored as a glyph.
A glyph name is the unique identifier assigned to each of these shapes inside the font file.

For Latin fonts, names like A, B, a, or aacute are common.
For complex scripts such as Kannada, where letters can combine and reshape based on context, glyph names must go beyond single characters.
They describe both the base character and any attached components (vowel signs, viramas, or conjunct forms).

Glyph names are invisible to users, but they are crucial for type designers, developers, and software that processes text.


2. Why Glyph Naming Is Needed

Glyph naming ensures that:

  1. Every shape is uniquely identifiable — useful for editing, exporting, and OpenType feature building.

  2. Font editors and compilers (FontLab, GlyphsApp, FontForge, RoboFont) can correctly link each glyph to its Unicode codepoint.

  3. Python scripts and OpenType features can target glyphs precisely without ambiguity.

  4. Cross-software compatibility remains stable — a glyph named kn_ka_i will be recognized in any program that reads standard font data.

Without proper naming, automation and feature generation become confusing or error-prone, especially for Indian scripts with hundreds of contextual forms.


3. Is Unicode Not Enough?

Unicode defines codepoints — logical characters used by the operating system and text layout engines.
However, Unicode does not define how each character looks or how shapes interact visually.

For example:

Word Unicode Sequence Glyphs Rendered
U+0C95 single consonant glyph
ಕಾ U+0C95 U+0CBE ka + matra_aa
ಕ್ಕ U+0C95 U+0CCD U+0C95 ka_halant + ka = conjunct

To build those visual results, the font must contain glyphs such as kn_k, kn_k_v, kn_k_aa, and kn_k_k, which correspond to visual forms, not just Unicode points.

Thus, Unicode provides text meaning, but glyph naming defines text shaping.


4. My Approach to Kannada Glyph Naming

Designing a Kannada typeface involves managing hundreds of glyphs.
To keep the project structured, consistent, and scriptable, a systematic naming model was created.

The guiding principles were:


5. The Prefix “kn_”

All Kannada glyphs begin with the prefix kn_
This guarantees no clash with Latin or other script glyphs.

Examples:

Kannada Glyph Name Meaning
kn_a Independent vowel a
kn_aa Long vowel aa
kn_k Base consonant ka
ಕ್ kn_k_v ka with virama
ಕಾ kn_k_aa ka + aa matra
ಕಿ kn_k_i ka + i matra
ಕ್ಕ kn_k_k conjunct (ka + ka)
ಕ್ಕ್ಕ kn_k_k_k triple conjunct
ಕ್ಕ kn_k_ottu ottu form (half ka)
ಕ್ಕ್ಕ
kn_k_ottu2 second ottu

This naming keeps the logic visible and expandable.


6. Structural Rules

Independent vowels

kn_a, kn_aa, kn_i, kn_ii, kn_u, kn_uu, kn_e, kn_ee, kn_ai, kn_o, kn_oo, kn_au
        

Consonants and halant

kn_k, kn_kh, kn_g, kn_gh, kn_h kn_k_v, kn_kh_v, kn_g_v, kn_gh_v, … , kn_h_v

Dependent vowel signs (matras)

kn_m_aa, kn_m_i, kn_m_ii, kn_m_u, kn_m_uu, kn_m_e, kn_m_ee, kn_m_ai, kn_m_o, kn_m_oo, kn_m_au

Consonant + Vowel combinations

Each consonant can combine with any matra:

kn_k_aa, kn_k_i, kn_k_ii, kn_k_u, kn_k_uu, kn_k_e, kn_k_ee, kn_k_ai, kn_k_o, kn_k_oo, kn_k_au
        

Ottu and Second Ottu

kn_k_ottu, kn_kh_ottu, kn_g_ottu, ...kn_k_ottu2, kn_kh_ottu2, kn_g_ottu2, ...

Conjuncts

kn_k_k, kn_k_kh, kn_t_t, kn_t_t_t, kn_n_dh, kn_sh_r

Numbers and Signs

kn_0, kn_1, kn_2, kn_3, kn_4, kn_5, kn_6, kn_7, kn_8, kn_9 kn_virama, kn_anuswara, kn_visarga

7. Why This Helps

  1. Human-readable structure:
    A designer can instantly see the logic — kn_k_ii clearly means “ka with long i”.

  2. Consistency across tools:
    Works perfectly in FontLab, GlyphsApp, or FontForge.

  3. Predictable automation:
    Scripts can iterate or generate glyphs using string operations.

  4. GSUB/GPOS feature building:
    OpenType rules can target glyphs easily:

    lookup blwf {
              sub kn_k_v kn_k by kn_k_k;
            } blwf;
  5. Future proofing:
    The kn_ namespace keeps the font safe in multi-script families (Latin + Kannada).


8. Python Scripting and Naming Significance

Python scripting is the backbone of automation in modern font editors.
Good naming allows scripts to understand and manipulate glyphs systematically.

Example:

font = fl.font
        for g in font.glyphs:
            if g.name.startswith("kn_k_"):
                print("ka-family glyph:", g.name)

Or generating all CV forms:

bases = ["k","kh","g","gh","ch","j"]
        matras = ["aa","i","ii","u","uu","e","ee","ai","o","oo","au"]
        for b in bases:
            for m in matras:
                new = f"kn_{b}_{m}"
                print("Expected glyph:", new)

OpenType feature scripts (GSUBGPOS) can then use the same names.
The font and the script speak the same consistent language.


9. Conclusion

Glyph naming is the hidden backbone of every well-engineered Kannada font.
Unicode defines the characters; glyph naming defines how they come alive visually.
A well-structured system such as the kn_ model makes the design process more consistent, the code more predictable, and the collaboration between design and engineering seamless.

In a language as rich and dynamic as Kannada, thoughtful naming is not just organization —
it is clarity, automation, and professionalism combined.