akruti bdf rendering engine
TRANSCRIPT
CYBERSCAPE MULTIMEDIA LIMITED 941, 21st Main, 22nd “A” Cross, Banashankari 2nd Stage, Opp. BDA Complex, Bangalore – 560070 Karnataka. Ph: (080) 26714446 / 0925 Email: [email protected]
Unit. No. 108, Building 3, Sector 3. Millennium Business Park, MIDC, Mahape, New Mumbai. 400 709. Maharashtra. Ph : (022) 27782779 / 80 / 81 / 82 Email: [email protected]
Web: http://www.cyberscapeindia.com Web: http://www.akruti.com
AKRUTI HINDI BDF
FONT SIMULATION
AND PROTOTYPING
ENGINE
BDF Font Compostion and Rendering – Manual
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 2 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
CONTENTS
� Introduction 3
� Installing the Akruti BDF Hindi Font Rendering Engine 4
� Using the Akruti BDF Hindi Font Rendering Engine 6
� Prerequisites for using the BDF Font Rendering Engine 11
� Basics of Indian Script Composition and Rendering 12
� Font Types 12
� Vector Fonts
� Bitmapped Fonts
� BDF Font Basics 13
� Akruti BDF Fonts 14
� Structure of Hindi Script 14
� Encoding of Hindi Script 15
� Unicode or ISCII to Hindi Glyph Composition 16
� Composition Rules 16
� BDF Font Glyph String Rendering 18
� Normal Glyph
� Accent Glyph
� Kern Glyph 19
� Appendix
� ANSI Code Chart 22
� ISCII Code Chart 23
� Unicode Chart 24
� Hindi Bilingual Code Chart 25
� Akruti BDF Hindi Font Glyphs Category Chart 26
� Akruti Hindi Composition and Rendering Samples 29
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 3 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Introduction Akruti BDF Hindi Font Rendering Engine is a Hindi Composing and Rendering Software in the
MS Windows environment. This software is a customized extension to the Akruti
Software Development Kit (SDK) and is available for embedded software developers to
simulate and test the composition of Akruti Hindi BDF fonts in the Windows environment.
Using the composition and rendering logic followed in this software the developer can port
the logic into specific embedded devices and can compose the Unicode or ISCII text
strings and render them correctly on the device. It is a friendly simulation and testing tool
designed to make a novice in Indian Scripts understand and appreciate the nuances and
simplify the seemingly complex rendering of Hindi script into easily understandable stuff. It
also provides two perfectly formed Akruti BDF fonts in 16 and 24 dot sizes to be used for
the simulation and testing and eventually in the embedded device. These fonts are licensed
to be used royalty free in the target embedded devices.
The Akruti SDK has already covered the characteristics of the Hindi monolingual and bi-
lingual fonts and has explained the various coding methods for Hindi like Unicode and Iscii.
We have also seen how the Truetype Hindi font is coded as an ANSI font and the methods
of keying in Hindi in the selected font type (monolingual or bilingual) and the selected
keyboard layout (Inscript, Phonetic or Typewriter). The emphasis in the Akruti SDK is to
teach how to develop applications with an Indian language interface, but it does not go into
the details of how the script is composed or rendered. The ANSI Text box displays the
selected Hindi Truetype font at the point size and style selected. The Truetype rendering
is done by the Windows OS, so the developer is totally unaware of the exact method of
placement and rendering used to deliver the perfect looking Hindi strings.
This manual explains the basics of Hindi script, the font glyph types, composition logic,
basics of BDF bitmap fonts and its rendering.
The Akruti BDF Hindi Font Rendering Engine has two main objectives:
The Composition Logic Testing and Verification
The Akruti SDK does enable the developer to convert the ANSI Glyph string into ISCII or
Unicode or vice-versa, but it does not explain the composition logic. The Akruti BDF Font
Rendering engine on the other hand looks into the details of the script and the rules and
logic behind conversion from Unicode or Iscii to the Ansi glyph code. The composition logic
testing and verification lays emphasis on the details of how Unicode or ISCII strings are
converted into the ANSI glyph strings (the composition logic) and can be used for testing
and verifying the conversion.
The BDF Font Analysis and Rendering
In the Akruti SDK the details of font rendering is hidden from the developer since the
Windows OS does this job, but for rendering Hindi in an embedded system, this complex job
of rendering the bitmaps correctly has to be done by the rendering software written
specifically for the device. Thus the developer has to understand the low level intricacies of
rendering the glyph bit maps so that the final composed and rendered bit map is a perfectly
legible and valid Hindi bitmap string.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 4 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
The job of the BDF Font Analyzer and Renderer is to give a feel of the details of each
Hindi Glyph and its attributes and parameters as well as show at the lowest level how a
glyph string is rendered into a legitimate Hindi bitmap string. By using the analyzer and
renderer, the developer can test out and simulate the display on a Windows machine at a low
level, viewing how each low level glyph bitmap interacts with the other to produce the final
output. The objective of showing this detail is to teach the developer to build a similar
renderer for the target embedded system so that displaying Hindi on the device can be
achieved with minimal effort.
Additional references
Additional references are given in the Appendix to help the developer in the course of
developing BDF Hindi font composition and rendering by giving information about the
Unicode Hindi Chart, ISCII code chart, ANSI Glyph Code chart, BDF Font Standard and
examples of proper composition and rendering.
In the sections that follow, BDF Hindi font composition and rendering with the help of the
Akruti BDF Hindi Font rendering engine will be explained in detail.
Installing the Akruti BDF Hindi Font Rendering Engine
The Akruti BDF Hindi Font Rendering Engine Software is provided on a CD media or FTP
Site and consists of the following Windows executable Akruti BDF Hindi Font Rendering
Engine Setup.Exe:
The following steps are required for setting up the software:
1. Click on Akruti BDF Hindi Font Rendering Engine Setup.Exe provided on the
installer CD. The following screen will come up. Press Next.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 5 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
2. It will then ask you to choose a directory. You may choose to install in the
default directory, or can choose using the browse button.
3. Then it will ask you to select the program folders to install the shortcuts. Again
you can either choose the default folder or choose a custom folder.
4. Then it will start the process of copying the files to the selected folders and
show a progress bar as displayed in the following diagram.
5. It will copy all the files and update the fonts and the registries.
6. After finishing with the process, it will display the finished setup message and
create two icons on the desktop, one for launching the Akruti BDF Hindi Font
Rendering Engine and the other a shortcut to the PDF version of this manual.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 6 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti BDF Hindi Font Rendering Engine Usage
Launching the BDF Hindi Font Rendering Engine:
If the BDF Hindi Font Rendering Engine is launched but the Akruti SDK Server or Client
Engine is not installed on the machine then the following screen is shown and it will exit:
If the Akruti SDK Server or Client is installed then the Rendering Engine Form with 5 tabs
will be displayed. The Akruti BDF Font Rendering Engine has five tabs used for various
simulation, testing and development activities as shown below:
BDF Font tab:
This tab is used for the following purposes:
1. Reading the selected BDF font by pressing the Read Button. The characteristics of
the font are displayed in the Font Properties Text Box.
2. By pressing on the Show Button, you can see the Ascii text version of the BDF font
file in the BDF Raw Text box and browse thru the structure of the file.
3. Manual modifications can be done to the BDF Raw Text box and can be saved into a
file by using the Write button.
4. By pressing the Clear button you the text box can be cleared.
5. By pressing on the View button the BDF Viewer is launched in which the character
map of the BDF font can be viewed in detail, as shown below.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 7 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
The BDF Viewer is useful in relating the shape and the encoding value of the glyphs, which
can in turn be used to see the detailed properties and shape in the BDF Glyph and Bitmap
Tabs. This is a free third party tool and is useful for any BDF font. The enlarged image of
the glyph can be seen by double clicking the character or by pressing space bar.
BDF Glyph Tab:
This tab is used for the following purposes:
1. You can pick a glyph by clicking on the dropdown and selecting the required one. The
Glyph properties text box will show the current glyph properties like:
• Glyph Name, Glyph Encoding
• Glyph sWidth(X), Glyph sWidth(Y)
• Glyph dWidth(X), Glyph dWidth(Y)
• Bounding Box Width, Bounding Box Height
• Bounding Box Offset(X), Bounding Box Offset(Y)
The type of glyph can be judged by checking its XOffset and dWidthX values as to whether
it is a normal, accent or kern glyph.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 8 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
BDF Bitmap Tab:
This tab is used for the following purposes:
1. By clicking on the Glyph Code dropdown box, a particular glyph character can be
examined for the following:
a. Glyph Properties in the Glyph properties box
b. Font Properties in the Glyph properties box.
c. Hex Bitmap in the Hex Bitmap box
d. Bitmap Dot pattern in the Glyph bitmap dot pattern box.
i. The height of the displayed pattern is the exact number of raster
lines in the font-bounding box.
ii. The left and right padding as well as the top and bottom padding is
done to ensure correct relative position of the Glyph Bounding Box.
iii. The following convention is used to indicate the type of glyph bitmap:
• Normal Bit: [@] is an ON bit and [.] is the OFF bit
• Kern Bit: [*] is an ON bit and [~] is the OFF bit
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 9 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
• Accent Bit: [O] is an ON bit and [‘] is the OFF bit
2. By clicking the FontBox Button you can view an empty Font Bounding Box with the
co-ordinate X and Y axes shown relative to the bounding box.
3. By clicking the CharBox you can view the Glyph Bounding Box and the Bit map.
4. By clicking the Show button you can refresh and redisplay the full glyph in relation
to its bounding box and with the kern and accent markings.
BDF String Tab:
This tab is used for the following purposes:
1. This tab can be used to view the rendering of a string of text in the String Bitmap
Dot pattern text box.
2. As soon as some text is copied from the clipboard or keyed into the BDF String
Operations text box, the appropriate glyph bitmap dot patterns are picked up and
placed side by side for rendering the string.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 10 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
3. Depending on the settings in the Settings tab the following rendering effects are
applied:
a. Accent: If this setting is checked, then the Accented glyphs are moved to
the left (negative offset) and placed over the previous glyphs.
b. Kern: If this setting is checked then the Kerning Glyphs cause the following
glyph to be pulled closer by the Kerning value and it is overlapped with the
succeeding character.
c. Reverse: This setting if checked reverses the bitmap pattern and ON bits
become OFF; OFF bits become ON to creates a white on black effect.
d. Mirror: This setting if checked creates a mirror image of the bitmap
pattern.
BDF Settings Tab:
The following settings can be done:
1. The Default Font Settings frame has controls for setting the default font for the
text boxes in the engine.
2. By pressing the Select button in line with the Ansi label, the default Ansi text font
can be selected in the BDF String Operation text box.
3. By pressing the Select button in line with the BDF label, the default BDF Bitmap
Dot Pattern font can be selected.
• Note: It is suggested that only mono spaced fonts like Courier be selected so
as to display proper rendering. Proportionate fonts (like Arial or Times) if
selected can totally distort the bitmap pattern.
4. By pressing the Done button, the changes effected above can be applied to the text
boxes in the other tabs.
5. The Cancel button when pressed returns you to the BDF String tab.
6. The Exit button when pressed closes the application.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 11 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Prerequisites
The reference manual for the Akruti BDF Hindi Font rendering Engine is intended to teach
the basics of Hindi BDF Font composition and rendering and as such expects the knowledge
of usage of the Akruti SDK.
It assumes that the user is already familiar with the basic concepts of fonts in Akruti SDK
and is aware of issues like Hindi character coding (Unicode or Iscii) and glyph encoding
(ANSI) covered in the SDK. It also assumes that the user has basic knowledge of Hindi
text input and is able to key in sample text using the SDK.
The manual will only touch upon those issues, which impinge on the usage of these
development tools and techniques for BDF Hindi Bitmap Font composition and rendering.
It is not possible to exhaustively cover specific embedded devices and the treatment is
generic enough to be applicable to any embedded device. Any specific queries regarding
usage in specific environments may be addressed to Akruti SDK Support Team at
What software and its proficiency do you need?
1. Familiarity with porting and coding in C language
• Since most target embedded devices invariably have a C language based
development environment, it is assumed that the developer is capable of coding
the techniques simulated and illustrated here into the device using the
necessary compilers and development tools. However, there is no attempt here
to explain the intricacies of coding or compiling on specific target devices.
2. Familiarity with some Indian language
• Since the intended use of the Akruti SDK is to develop Indian language
applications it is natural to expect some familiarity with the actual language for
which it is being used. There is no attempt here to teach any specific language
fundamentals. Only broad concepts applicable to all languages are discussed.
• Most sample references are likely to be in Hindi the most widely used language
and hence a working familiarity with Hindi is desirable.
• Knowledge of the structure of Indian languages and the phonetics and the script
complexities would be desirable but not a must.
3. Familiarity with some standards
• Reference will be made to standards like the keyboard standard QWERTY as
well as coding standards like ASCII, ANSI, HTML, RTF, Unicode etc.
4. Familiarity with validation and testing on simulators
• Each of the composition rules and rendering techniques need to be ported and
tried out on the target device and compared with the results in the Rendering
Engine to validate whether the rendering is valid. So the Akruti BDF Hindi Font
Rendering Engine is to be used as a benchmark for the actual output on the
target device.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 12 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Basics of Indian Scripts Composition and Rendering
Some of the key concepts to be understood in order to render an Indian Script Font on any
target system are:
• Font Types
o Vector Fonts
o Bitmapped Fonts
• BDF Font Basics
• Akruti BDF Fonts
• Structure of Hindi Script
• Encoding of Hindi Script
• Unicode or ISCII to Hindi Glyph Composition
• Composition Rules
• BDF Glyph String Rendering
Each of these issues will be examined in detail in the sections that follow. It is highly
recommended not to skip these sections even for experienced developers since it covers
the fundamentals of multilingual composition and rendering.
The coding system used by the file storage system and the display, are totally independent
of each other and there may not be any on-to-one relationship between them. This is
especially so in case of Indian scripts, whereas in simple languages like English there usually
is one-to-one relationship between the two like in the most frequently used coding system
the ANSI standard (extended ASCII). One has to bear in mind this important difference to
appreciate the nuances of computing in Indian scripts.
Font Types The most important entity when it comes to display of text in a GUI environment is the font
in which it is displayed. A font is a collection of glyphs or basic shapes of a character in a
particular language like English or Hindi. Besides the shapes (glyphs) these fonts need to
have information on identifying and positioning the glyphs (metrics).
There are many types of fonts, namely bitmap fonts, stroke fonts and outline fonts,
depending on whether the glyph shapes are defined by a set of dots (bit map fonts), set of
lines (stroke fonts) or closed outline curves (outline fonts). Fonts are also classified as
fixed size fonts or scalable fonts. Fixed size fonts as the names suggest are available only
in fixed sizes like 12, 14, 16, 24 dots etc whereas scalable fonts can be scaled from as low
as 2 points right up to 144 points.
Bitmapped Fonts: Bitmapped fonts are those where the shape of the character or glyph is defined by a set of
dots (bit maps) and are available in fixed sizes.
Vector Fonts: Vector fonts are those in which the shapes are defined by set of points, lines and curves.
The enclosed regions are filled to display the shape. Most vector fonts are scalable.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 13 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
BDF Font Basics:
One of the most widely used bitmapped font format is the BDF format developed initially by
Adobe. BDF stands for Bitmap Definition Format and is the most widely accepted standard
in Unix, Linux and Embedded Systems. It is quite a simple format and it is stored in
readable ASCII text so it is easy to manipulate. It has a font header with font wide
properties followed by a set of glyphs each with the glyph metrics and bitmap shape. The
basic structure of the BDF Font is as follows:
Font Wide Data:
Format Description
STARTFONT <version no> Start of font
COMMENT <string> Comment strings (ignore)
FONT <name> Font name
SIZE <size> <xRes> <yRes> Size and resolution
FONTBOUNDINGBOX <FBBx> <FBBy> <Xoff> <Yoff> Font Bounding Box
METRICSSET <0,1 or2> (horizontal, vertical, mixed) Optional metrics set for various
writing systems
DWIDTH <x> <y> Font wide device width (optional)
SWIDTH <x> <y> Font wide scale width (optional)
DWIDTH1 <x> <y>
SWIDTH1 <x> <y>
VVECTOR Optional vertical vector
STARTPROPERTIES <no of key value pairs> Start of properties (optional)
ENDPROPERTIES End of properties (optional)
CHARS <no of glyphs> No of glyphs
STARTCHAR Start nth Glyph data
Followed by nth glyph data
ENDCHAR End nth Glyph data
ENDFONT End of font
Glyph Wide Data
Format Description
STARTCHAR <string> Glyph name
ENCODING <n> Encoding value
SWIDTH <x> <y> Scale Width in units
DWIDTH <x> <y> Device width in pixels
SWIDTH1 <x> <y> Scale Width in units (for vertical fonts)
DWIDTH1 <x> <y> Device width in pixels (for vertical fonts)
VVECTOR xoff yoff Vertical vector (only for vertical fonts)
BBX BBw BBh BBxoff0x BByoff0y Glyph bounding box
BITMAP <hex data> Actual glyph bitmap data in hex format
ENDCHAR End of Glyph
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 14 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti BDF Fonts: When it comes to Indian script fonts, Akruti SDK has two types of fonts namely,
Monolingual fonts which contain all the glyphs for aesthetic rendition of the Traditional
Indian script which is used for publishing or applications requiring high quality Indian script
display and printout. The Bilingual fonts, compromise a bit on the glyphs and give a Modern
Indian script output for corporate and office use but have the advantage of having the
matching English font embedded in it at the same ASCII positions so that normal English
text can be viewed as it is.
Structure of Hindi Script Let us look at the structure of Hindi Script. Hindi is written from left to right. The vowels
(svara) and consonants (vyañjana) are ordered and grouped logically for studying or reciting.
Hindi has 12 vowels (svara) and 34 consonants (vyañjana) shown below:
Vowels (Svara) represented as “ V ”
Thus the pure sounds, 'a', 'i', 'u' and their lengthened versions ('ā', 'ī', 'ū') are followed by
the combined ('e', 'ai', 'o', 'au'), nasal ('um ') and aspirated ('uha') forms.
¡ above
¡ð father
ý bit
ýá machine
£ put
¤ school
¥ butter
¥ grrr
¦ game
¦÷ like
¡ð÷ oh
¡ðø dove
¡ü um
¡: uha
Consonants (Vyañjana) represented as “ C ”
For each row or group, the columns logically progress to softer sounds, paired with
aspirated forms, ending in the nasal form for that group. The consonants themselves are
grouped into 6 groups (rows) of 5 (columns). The first five rows progress as velar, palatal,
retroflex, dental and labial, corresponding to utilizing or touching the tongue to
progressively outer parts of the mouth when making the sound. Additional consonants are
technically sonorant or sibilant.
Group Normal Aspirated Normal Aspirated Nasal
Velar ¨î cart
®ð khan
±ð gum
³ð gha
´ ding
Palatal µð each
¶ chastity
¸ð jug
»ð jha
½ð ranch
Retroflex ¾ tug
¿ tha
À dumb
Á dha
Âð harsh n
Dental Ãð carte
Æð think
Ç diva
Ïð thine
Ðð no
Labial Ñð put
Òî phelp
×ð but
Øð bha
Ùð man
Sonorant Úð yes
Ü road
âð love
ú harsh l
ãð vest
Sibilant äð should
æð shh !!
çð say
è hello
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 15 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Vowel signs (Matra) represented as “ M ”
In the Hindi writing system each consonant has an inherent vowel (a), which can be changed
with the different vowel signs. The syllable (akshara) is written by applying standard
diacritical modifiers (matras) to the consonants (vyañjana) corresponding to the vowels
(svara). An akshara is usually more basic and predictable than the syllable in English.
ð above
ðð father
ò bit
îó machine
ô put
õ school
ö butter
¥ grrr
÷ game
ø like
ð÷ oh
ðø dove
ü um
: uh
Nukta character represented by “ D “
This is a modern character borrowed from Perso-Arabic scripts and modifies the basic
consonant to produce a dotted (nukta) consonant, which has a voiceless fricative or softer
sound effect (rolling of spit in the throat) on the basic consonant.
Basic Syllables (Akshara) is represented as “ C+M ”
¨î ¨îð ò¨î ¨îó ¨ôî ¨õî ¨öî ¨öî ¨÷î ¨øî ¨îð÷ ¨îðø ¨üî ¨î: ka kaa ki kii ku koo kr krr ke kai ko kau km kah A basic syllable (akshara) is formed by the combination of zero or one consonant (vyañjana)
and one or more vowel (svara), and represents a phonetic unit of the utterance (śabda).
The Linking Character (Halant) is represented as “ H “
The ” þ “ halant character is used to indicate a conjunction between consonants or nukta consonants to form a conjunct.
Ligatures (Conjuncts) represented as “ C+H+C ”
Most consonants can be joined to one or two other consonants so that the inherent vowel is
suppressed. The resulting conjunct form is called a ligature. Many ligatures appear simply as
two individual consonants joined together, and so are a form of ligature.
¨î þ ¨î = ©¨î Ñð þ Ñð = ÑÑð Some ligatures are more elaborately formed and not as easily recognized as containing the
individual consonants.
¨î þ æð = êð is represented as C + C Complex Phonetic Blocks (Polysyllables)
One, two or three consonants may combine with a vowel to form very complex polysyllables.
Ü ð æð þ ¾ þ Ü ò Úð = Üðòæ¾àÚð is represented as C + M + C + H + C + M + C
Hindi Script Encoding The computer is really a binary creature and as such oblivious of any language while handing
data. Since it crunches only numbers it does not matter whether the text it is handling is
English or an Indian language.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 16 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
The way computers handle text usually is by manipulating what are called strings, which are
essentially an array of characters, which are in turn numbers represented by bytes in the 8
or 16 bit encoding system like ANSI or Unicode. In simple linear languages like English, each
character of a string corresponds to a character or alphabet according to the ANSI
encoding system and a simple one-to-one relationship exists between the display character
and the file storage.
Unicode or ISCII Encoding to Hindi Glyph Composition: However this cozy one-to-one relationship disappears, when we handle Indian scripts. One
code in ISCII or Unicode may map to a single glyph code, many storage codes together may
map to a single glyph code, one storage code may map to many glyph codes or many storage
codes may map to many glyph codes depending on context.
Thus one-to-one, one-to-many, many-to-one and many-to-many relationships are
possible. This is the core complexity of composing Indian scripts and which is why it is
important to try and understand the logic behind (yes there is indeed logic or method in the
madness!!) it. The key to understanding the logic is to realize that Indian scripts (especially
the Brahmi derived scripts like Devnagari or Hindi) are phonetic and not alphabetic.
Each character in Hindi has a unique sound (or phonetic) value. So each glyph in the script
has direct relation with phonetics. Once this is known, the task of composition becomes
relatively easy. Both ISCII and Unicode (which is derived or based on ISCII) recognized
this fact and hence are phonetic in nature. Also if it is realized that all sounds can be
broken down into two basic types namely Vowels and Consonants and combinations of these,
then the madness becomes decipherable.
Composition Rules To analyze a Unicode or ISCII string we will follow the notation given below and apply the
specified rules for Hindi:
V - Vowel
M - Matra
N – Nasal (modifier)
C - Consonant
D – Nukta dot
H - Halant
R - Reph
E – End Char
{ } – Represents none or multiple occurrence
[ ] – Represents none or single occurrence
Valid Phonetic (syllable) Blocks:
Due to the nature of the script and Unicode / ISCII code design the only valid phonetic
blocks that the parser has to parse are:
Type Form
Complex block {C + [D] + H} + C + [M] + [N] + [E]
Consonant block {C + [D] + H} + C + H
Vowel block V + [N] + [E]
The composing engine should find the base consonant of the syllable, using the algorithm:
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 17 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
• Starting from the end of the syllable, move backwards until a consonant is found
that does not have a below-base or post-base form (post-base forms have to follow
below-base forms), or arrive at the first consonant. The consonant stopped at will
be the base.
• If the syllable starts with Ra + H, Ra should be excluded from candidates for base
consonants.
• If the base consonant is not the last one, the composing engine should move the
halant from the base consonant to the last one.
• If the syllable starts with Ra + H, Composing engine should move this combination so
that it follows the post-base 'matra' (if any) or the base consonant
• Composing engine should split two or three-part matras into their parts. This
splitting is a character-to-character operation). Then;
o Composing engine should move the left 'matra' part to the beginning of the
syllable.
o Composing engine should classify consonants and 'matra' parts as pre-base,
above-base (Reph), below-base or post-base.
• Composing engine then should group elements of the syllable (consonants and
'matras') according to this classification. Pre-base elements will precede the base
consonant. The above-base, below-base and post-base components will follow the
base glyph.
• Reph (Ra + H) and nasal modifiers should be positioned in the syllable after the
post-base 'matra' (if any); since these become marks on the 'matra', not on the
base glyph.
• 'Halants' and 'nukta' marks should move with the consonants they affect.
After performing the character reordering steps, the sequence of glyph characters should
have one of the following forms:
Type Composed Glyph String
Complex block [Mpre] + {Cpre + [D] + H + [Ra + H]} + Cbase + [Ra + H] + [Mbelow] +
[Nbelow] + [Ebelow] + [Mabove] + [Mpost] + [Ra + H]reph +
[Nabove] + [Eabove] + [Npost]
(Only one of Mpre, Mbelow, Mabove or Mpost can be present)
Consonant block {Cpre + [D] + H + [Ra + H]} + Cbase + [Ra + H] + H
Vowel block V + [N1] + [N2]
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 18 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
BDF Font Glyph String Rendering: Once the Unicode or Iscii string has been properly composed into a Hindi font glyph string
using the composing rules discussed previously the next task is to render the glyphs in a
proper manner to ensure perfect and legible formation of the Hindi display. We have
already seen how the BDF font has three main glyph types, normal, accent and kern. It
should be noted that the normal, accent and kern characteristics, can exist together in any
combination within the same glyph. The treatment for such complex glyphs will be the sum
of the treatment for the parts.
Normal Glyph Normal glyphs are those which do not have a negative value in the glyph bounding box for
their X offset so that they are always drawn to the right of the cursor. Also their dWidth
value is always greater than or equal to their bounding box width so that the succeeding
glyph does not overlap with it. Typical examples of these are almost all the English
characters as well as some of the Hindi standalone vowels and consonants. Their rendering
is quite simple; the whole glyph box is just placed next to the previous glyph.
Code 232 (Normal) 240 (Normal) Rendered String: 232+240
Bitmap
...........
...........
...........
...........
...........
........... @@@@@@@@@@@ ........@.. ........@.. ........@.. ..@@@@@@@.. ..@........ ...@.@@@@.. ...@@...@@. ..@......@. ..@......@. ..@.....@.. ...@....... ....@@..... ......@@@.. ........... ........... ........... ........... ........... ...........
.....
.....
.....
.....
.....
..... @@@@@ ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..... ..... ..... ..... ..... ..... .....
................
................
................
................
................
................ @@@@@@@@@@@@@@@@ ........@....@.. ........@....@.. ........@....@.. ..@@@@@@@....@.. ..@..........@.. ...@.@@@@....@.. ...@@...@@...@.. ..@......@...@.. ..@......@...@.. ..@.....@....@.. ...@.........@.. ....@@.......@.. ......@@@....... ................ ................ ................ ................ ................ ................
As can be seen above the normal glyphs are just placed next to each other to render the
string, without any overhang or overlaps.
Accent Glyph Accent glyphs are those which have a negative value for their X Offset in their glyph
bounding box. Usually all the matra characters in Hindi script are accent characters and
when they are placed after the normal consonant glyph they will move to the left and sit on
top (above base forms) or below the previous glyph (below base forms). The amount of left
movement is equal to the value of the X Offset. An example of the accent character and its
rendering is shown below.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 19 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Code 232 (Normal) 247 (Accent) Rendered String: 232+247
Bitmap
...........
...........
...........
...........
...........
........... @@@@@@@@@@@ ........@.. ........@.. ........@.. ..@@@@@@@.. ..@........ ...@.@@@@.. ...@@...@@. ..@......@. ..@......@. ..@.....@.. ...@....... ....@@..... ......@@@.. ........... ........... ........... ........... ........... ...........
OO'''''' 'O'''''' ''O''''' '''O'''' ''''O''' '''''O'' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' ''''''''
...@@......
....@......
.....@.....
......@....
.......@...
........@.. @@@@@@@@@@@ ........@.. ........@.. ........@.. ..@@@@@@@.. ..@........ ...@.@@@@.. ...@@...@@. ..@......@. ..@......@. ..@.....@.. ...@....... ....@@..... ......@@@.. ........... ........... ........... ........... ........... ...........
Kerning Glyph A kerning glyph has its dWidthX less than the Width of its glyph bounding box so that the
cursor movement after the glyph is drawn stands before the edge of the glyph. Because of
this the next glyph, which is drawn, overlaps on the previous one by the amount of the kern
(difference between the dWidthX and Width). This characteristic is used very often in the
Hindi font to enable a seamless overlap and continuous appearance of the rendered string.
Most of the conjunct characters and consonants are formed by combination of a half (or
cut) consonant and the matra. The example below will illustrate the concept.
Code 242 (Kern) 199 (Normal) Rendered String: 242+199
Bitmap
.....~~~~~~~~~
....@***~~~~~~
..@@.~~~**~~~~
..@..~~~~**~~~
..@..~~~~~**~~
..@..~~~~~~**~ @@@@@~~~~~~~** ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~
............
............
............
............
............
............ @@@@@@@@@@@@ .........@.. .........@.. .........@.. ...@@@@@@@.. ..@@........ ..@......... ..@......... ..@.....@@.. ...@@...@@.. ....@@@@@@.. ........@@.. .........@.. ............ ............ ............ ............ ............ ............ ............
.................
....@@@@.........
..@@....@@.......
..@......@@......
..@.......@@.....
..@........@@.... @@@@@@@@@@@@@@@@@ ..@...........@.. ..@...........@.. ..@...........@.. ..@.....@@@@@@@.. ..@....@@........ ..@....@......... ..@....@......... ..@....@.....@@.. ..@.....@@...@@.. ..@......@@@@@@.. ..@..........@@.. ..@...........@.. ................. ................. ................. ................. ................. ................. .................
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 20 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
BDF Rendering rules to be followed for Hindi text display A set of rules can be thus enunciated for rendering of Hindi text based on the properties
of the BDF font as follows:
� Font metrics:
o Get the font metrics from the selected Hindi BDF font and store all global
font parameters. Set up a string bitmap buffer array to receive the
rendered bitmap.
� Get Glyph:
o Parse thru the glyph text string and get the glyph from the selected Hindi
BDF font for the current character.
� Glyph Metrics:
o Examine the glyph metrics to find out whether it is normal, accent or
kerning glyph.
o To build the entire glyph, calculate the top, bottom, left and right padding
required which can be calculated from the Font Bounding Box (FBB)
parameters and the Glyph Metrics and Glyph Bounding Box (GBB)
parameters.
� Padding:
o Get the actual bit map of the glyph and by padding it appropriately form a
two dimensional array of the glyph bitmap.
� Normal glyph:
o On a raster line by line basis (totally raster line count will be equal to the
Font Bounding Box Height) just append the raster line bitwise to the current
corresponding raster line in the buffer and add the dWidthX value to the
current cursor position to obtain the new cursor position.
o Repeat the above step for each of the raster lines till the whole glyph is
drawn.
� Accent glyph:
o Subtract the X Offset value from the current cursor position and on a
raster line basis, OR the glyphs raster line on a bitwise basis, with the
existing raster line in the buffer from the cursor point onwards till the
width of the glyph's bounding box.
o Repeat this process for all the raster lines in the glyph (FBB Height).
o Add the dwidthX of the glyph to the current cursor position to get the new
cursor position.
� Kern glyph:
o Add the dWidthX value to the cursor position to compute and draw the
glyph as if it were a normal glyph.
o Set a flag that a kerning character is present and store the Kern value so
that the next glyph, which is drawn, can factor the amount of overlapping or
kerning to do (from the current cursor position to the kern value, the
succeeding raster lines will have to be Ored bitwise to achieve the overlap).
o Repeat this process for all the raster lines in the glyph (FBB Height)
� This rendering process should be continued till the end of the text string is
encountered.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 21 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
� The string’s bitmap buffer array will contain the properly rendered Hindi Text in a
bitmap form.
� Then depending on the target system, this bitmap buffer array can be reproduced
on the appropriate hardware display (LCD / CRT etc.)
This logic can be tried out using the simple Ascii string of “@” and “.” as used in the BDF
Rendering engine to see if the logic is properly implemented since it is easier to manipulate
simple Ascii text strings even in a simple text editor. Once the logic passes test, it can be
coded to create the binary bitmaps for the actual device.
Simulation and Prototyping using the Rendering Engine The Akruti SDK can be used to generate the test Unicode or ISCII strings and the Glyph
Code Strings thus the composition logic can be verified in the Akruti SDK Engine. These
glyph code strings can be pasted in the BDF String Operations Text Box in the Akruti BDF
Hindi Font Rendering Engine. The Rendering Engine simulates the Hindi BDF Bitmaps in the
String Bitmap Dot Pattern Box to test out the various permutation and combinations and
this can be compared with the bitmaps generated on the target device, to check whether
the porting of the Composition and Rendering logic on the target device is perfect or not.
Sample Code for Composition and Rendering As such the composition and rendering of the Akruti Hindi fonts is an Intellectual Property
of Cyberscape Multimedia Ltd. and the source code is not available, however on special
request, with proper NDA’s, the source code for Windows used for Akruti Hindi Font
Composition and BDF Font Rendering can be revealed to the interested customer. A formal
request can be made thru the distributor of the product and after necessary procedures it
will be made available for helping the licensed user to port the code onto their target
system. All queries in this regard may be addressed to [email protected] or
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 22 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Appendix
Ansi Chart 0 to 127 (00-7F hex)
0 10 20 30 40 50 60 70
0 16 32 48 64 80 96 112
0
1
2
3
4
5
6
7
8
9
0A
0B
0C
0D
0E
0F
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 23 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Iscii Chart 128 to 255 (80-FF hex)
80 90 A0 B0 C0 D0
128 144 160 176 192 208
0
1
2
3
4
5
6
7
8
9
0A
0B
0C
0D
0E
0F
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 24 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Unicode Hindi Chart 0900-097F
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 25 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Iscii Hindi Chart A0-FF (160 to 255)
0 1 2 3 4 5 6 7 8 9 a b c d e f
Akruti Hindi Bilingual Chart A0-FF (160 to 255)
0 1 2 3 4 5 6 7 8 9 a b c d e f
Comparative charts of Iscii and Akruti Bi-lingual Font
Note: As can be seen all the glyphs in the Iscii code chart can be formed by juxtaposing
the appropriate Akruti Bilingual Fonts glyphs, but not vice versa. The characters from 32
decimal (20 hex) to 159 decimal (9F hex) in both the charts are the same as the normal
ANSI or ASCII chart and are not show here.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 26 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Typical Glyphs Category Chart-I
Code Type Glyph Bitmap Glyph Metrics Description
161
Normal and Kern
...@@@....@@@@*
.@@...@.....@.~
.@....@.....@.~
......@.....@.~
......@.....@.~
....@@......@.~
......@@....@.~ @@......@@@@@.~ .@......@...@.~ .@@.....@...@.~ ..@@...@@...@.~ ....@@@@....@.~ ............@.~
Name:= C0161 Encoding:= 161 sWidth(X):= 656 sWidth(Y):= 0 dWidth(X):= 14 dWidth(Y):= 0 BBox Width:= 15 BBox Height:= 13 BBox Offset(X):= 0 BBox Offset(Y):= 0
This glyph is a standalone vowel A, and it is the base character for vowel Aa, O, Owe, Am and Aha. There is a single pixel kern for attaching to the appropriate matras. It stands on the baseline.
166
Normal
@@@@@@@@@@@ ..@.....@.. ..@.....@.. ..@.....@.. ..@.....@.. ..@.....@.. ..@.....@.. ..@...@@... ...@....... ....@...... .....@..... ......@@... .......@@.. ........@.. .......@@.. .......@...
Name:= C0166 Encoding:= 166 sWidth(X):= 515 sWidth(Y):= 0 dWidth(X):= 11 dWidth(Y):= 0 BBox Width:= 11 BBox Height:= 16 BBox Offset(X):= 0 BBox Offset(Y):= -3
This glyph is a standalone vowel Ay, and it is the base character for vowel Aye. This is a normal character with no kern. It goes three pixels below the baseline.
202
Normal
@@@@@@@@@@@@@@@ ............@.. ............@.. ............@.. ......@@@@@@@.. .....@......... .....@......... ..@@.@.....@@.. .@..@@@....@@.. .@....@@...@@.. .@@...@.@@@@... ..@@@@.....@... .....@@...@@@.. ......@@@@..@.. ............@..
Name:= C0202 Encoding:= 202 sWidth(X):= 703 sWidth(Y):= 0 dWidth(X):= 15 dWidth(Y):= 0 BBox Width:= 15 BBox Height:= 15 BBox Offset(X):= 0 BBox Offset(Y):= -2
This is a full conjunct character formed by da, halant and dha. It is a normal character. It goes two pixels below the baseline.
161
Normal and Kern
@@@@@@@@@~~~ ......@..~~~ ......@..~~~ ......@..~~~ ..@@@@@..~~~ ..@......~~~ ...@@@@@.~~~ .......@.~~~ .......@.~~~ .....@@@@*** ......@@.~~~ .......@.~~~
Name:= C0203 Encoding:= 203 sWidth(X):= 421 sWidth(Y):= 0 dWidth(X):= 9 dWidth(Y):= 0 BBox Width:= 12 BBox Height:= 12 BBox Offset(X):= 0 BBox Offset(Y):= 1
This is a half conjunct character formed by da, halant, ma and halant. It combines with Aa matra and other matra glyphs to give full form. It has a normal and a kern portion. It stands on pixel above the baseline.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 27 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Typical Glyphs Category Chart-II
Code Type Glyph Bitmap Glyph Metrics Description
209
Normal and Kern
@@@@@@~~ ..@...~~ ..@...~~ ..@...~~ ..@...~~ ..@...~~ ..@...~~ ..@...~* ...@..~* ....@@*~
Name:= C0209 Encoding:= 209 sWidth(X):= 281 sWidth(Y):= 0 dWidth(X):= 6 dWidth(Y):= 0 BBox Width:= 8 BBox Height:= 10 BBox Offset(X):= 0 BBox Offset(Y):= 3
This is a half consonant Pa. It combines with Aa matra and other matra glyphs to give full form. It has a normal and a kern portion. It stands three pixels above the baseline.
213
Accent
''''OOOOO OO''''''O ''OOOOOO'
Name:= C0213 Encoding:= 213 sWidth(X):= 0 sWidth(Y):= 0 dWidth(X):= 0 dWidth(Y):= 0 BBox Width:= 9 BBox Height:= 3 BBox Offset(X):= -11 BBox Offset(Y):= -6
This glyph is a matra u character. This is a below baseline character by 6 pixels and it attaches under the previous character with a left movement of 11 pixels.
219
Accent, Normal and Kern
''.@@@@@@*~~ ''.......~~~ ''.......~~~ ''@@@@@@.~~~ OO.....@@~~~ ''......@~~~ ''......@~~~ ''..@@@@.~~~ ''...@...~~~ ''...@@..~** ''....@@@**~
Name:= C0219 Encoding:= 219 sWidth(X):= 328 sWidth(Y):= 0 dWidth(X):= 7 dWidth(Y):= 0 BBox Width:= 12 BBox Height:= 11 BBox Offset(X):= -2 BBox Offset(Y):= 2
This is a half Ya consonant character formed by Ya and halant. It is one of the few glyphs with accent, normal and kern portions. It stands two pixels above baseline.
221
Normal and Kern
@@@@@@@@@@@@@* ......@......~ ......@......~ ..@...@......~ ..@...@@@@@..~ ..@@..@@...@.~ ...@@@@....@.~ ....@......@.~ ....@.....@..~ .....@...@@..~ .....@@......~ ......@@.....~ .......@@....~
Name:= C0221 Encoding:= 221 sWidth(X):= 609 sWidth(Y):= 0 dWidth(X):= 13 dWidth(Y):= 0 BBox Width:= 14 BBox Height:= 13 BBox Offset(X):= 0 BBox Offset(Y):= 0
This is a ligature between the consonant Ra and the Vowel U. It has a normal and a kern portion. It stands on the baseline.
223
Accent, Normal and Kern
''''.@@@@* ''''...@.~ ''''...@.~ ''''...@.~ ''''...@.~ ''''...@.~ ''''...@.~ ''''...@.~ ''''...@.~ ''''.@@@.~ '''O@..@.~ 'OO'...@.~ OO''...@.~
Name:= C0223 Encoding:= 223 sWidth(X):= 234 sWidth(Y):= 0 dWidth(X):= 5 dWidth(Y):= 0 BBox Width:= 10 BBox Height:= 13 BBox Offset(X):= -4 BBox Offset(Y):= 0
This is a Rakar glyph. It is formed by halant, Ra and the matra Aa. It has all the three characteristics. It completes a half consonant or a half conjunct glyph. It may kern with additional matras. It stands on the baseline.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 28 of 28|
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Typical Glyphs Category Chart-III
Code Type Glyph Bitmap Glyph Metrics Description 224
Accent
'''OOO''' ''OO'OO'' 'OO'''OO' OO'''''OO
Name:= C0224 Encoding:= 224 sWidth(X):= 0 sWidth(Y):= 0 dWidth(X):= 0 dWidth(Y):= 0 BBox Width:= 9 BBox Height:= 4 BBox Offset(X):= -9 BBox Offset(Y):= -3
This is a bottom Rakar character, formed by halant followed by Ra. It attaches below full consonants or conjuncts at three pixels under the baseline and nine pixels to the left.
225
Accent
'OOO O''' O''' O''' 'O'' ''O'
Name:= C0225 Encoding:= 225 sWidth(X):= 0 sWidth(Y):= 0 dWidth(X):= 0 dWidth(Y):= 0 BBox Width:= 4 BBox Height:= 6 BBox Offset(X):= -4 BBox Offset(Y):= 13
This glyph is a Reph character and an ascender by 13 pixels above baseline and four pixels to the left. It is formed by Ra and halant and attaches after all matras.
234
Normal and Kern
..@@@.@.~~
.@...@..~~
.@...@..~~
.@...@..~~
..@.@...~~
..@@....~*
.@..@@@@*~ @.......~~ @....@..~~ @...@@@.~~ @@..@@@.~~ ..@@@@..~~ .....@@.~~
Name:= C0234 Encoding:= 234 sWidth(X):= 375 sWidth(Y):= 0 dWidth(X):= 8 dWidth(Y):= 0 BBox Width:= 10 BBox Height:= 13 BBox Offset(X):= 0 BBox Offset(Y):= 0
This is a half conjunct glyph formed by Ka, halant, Sha and halant. It combines with Aa matra followed by other modifiers or with consonants or conjuncts. It stands on the baseline.
240
Normal
@@@@@ ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@..
Name:= C0240 Encoding:= 240 sWidth(X):= 234 sWidth(Y):= 0 dWidth(X):= 5 dWidth(Y):= 0 BBox Width:= 5 BBox Height:= 13 BBox Offset(X):= 0 BBox Offset(Y):= 0
This is a Aa matra character and frequently used to complete half consonants or half conjuncts. Matras and modifiers may follow. It stands on the baseline.
242
Normal and Kern
....@***~~~~~~
..@@.~~~**~~~~
..@..~~~~**~~~
..@..~~~~~**~~
..@..~~~~~~**~ @@@@@~~~~~~~** ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~
Name:= C0242 Encoding:= 242 sWidth(X):= 234 sWidth(Y):= 0 dWidth(X):= 5 dWidth(Y):= 0 BBox Width:= 14 BBox Height:= 18 BBox Offset(X):= 0 BBox Offset(Y):= 0
This is a short Ee matra glyph. It is positioned before the consonant or conjunct and has a kerning zone which overlaps on the succeeding glyph by 9 pixels. It stands on the baseline.