SIL Non-Roman Script Initiative


A free and open rendering engine for complex scripts

Graphite Tutorial

Unit 4: Corresponding class items



So far the right-hand (output) side of our GDL rules have contained single glyphs. It is also possible to use a multi-glyph class for substititution.

When one glyph is substituted for another, the Graphite engine determines the position of the input glyph within the input class, and uses the corresponding item from the output class in the substitution. For instance, the following two classes define classes of uppercase and lowercase letters:

  clsUppercase = unicode(65..90);   // A .. Z
  clsLowercase = unicode(97..122);  // a .. z

  clsUppercase > clsLowercase;

When, say, the uppercase “H” is encountered in the input, the corresponding lowercase “h” is placed into the output. Keep in mind that the order of the items in the classes becomes very significant when this mechanism is being used.

Note that you need to use parenthesis around the members of a class when there are more than one. For instance:

clsConsVoiced = (gB, gD, gG);
clsConsVoiceless = (gP, gT, gK);

Exercise 4a

Write a program to capitalize all text.


Exercise 4b

Write a program to make all vowels uppercase and all consonants lowercase.


Exploring Graide: the Rules tab with multiple rules

The program you wrote for Exercise 4b should have at least two rules in it. Enter some test data: Hello World! The output should look like: hEllO wOrld! Double-click on Pass 1 in the Passes pane. Notice that both Rule 0 and Rule 1 appear in the Rules pane. Clicking on the box in the left-hand column should highlight the appropriate rule in the code pane.

Also notice that hovering over the left-hand cell containing the rule number will cause the rule to be displayed near the cursor.

Highlighting one of several rules

Exercise 4c

Write a program to create a Greek transliteration of Roman text, using the mappings in the table below. (You may ignore uppercase for this exercise.) Note that the Unicode codepoints are not in strict numerical order, and that there are no mappings for the letters j and v.

Roman letterGreek letterGlyphUnicode (hex)
a alpha 03B1
b beta 03B2
c chi 03C7
d delta 03B4
e epsilon 03B5
f phi 03C6
g gamma 03B3
h eta 03B7
i iota 03B9
k kappa 03BA
l lambda 03BB
m mu 03BC
n nu 03BD
o omicron 03BF
p pi 03C0
q theta 03B8
r rho 03C1
s sigma 03C3
t tau 03C4
u upsilon 03C5
w omega 03C9
x xi 03BE
y psi 03C8
z zeta 03B6

Compile your program against the Galatia Graphite Tutorial font (GalatiaGrTut.ttf) that is provided with the tutorial materials. It is best to copy the font into your workspace.


If you use lowercase in the hexadecimal numbers representing your Unicode codepoints, you may see a compilation error: "Undefined glyph class: oundingbox". This a bug in the pre-processor, where it interprets the hex digits 'bb' as 'boundingbox'. The work-around is to use 'BB' in instead of 'bb'.


Copyright © 2012 SIL International® and released under the  Creative Commons Attribution-ShareAlike 3.0 license (CC-BY-SA) unless noted otherwise.