You are on page 1of 28

AKRUTI HINDI BDF

FONT SIMULATION
AND PROTOTYPING
ENGINE
BDF Font Compostion and Rendering – Manual

CYBERSCAPE MULTIMEDIA LIMITED


941, 21st Main, 22nd “A” Cross, Unit. No. 108, Building 3, Sector 3.
Banashankari 2nd Stage, Millennium Business Park, MIDC,
Opp. BDA Complex, Mahape,
Bangalore – 560070 New Mumbai. 400 709.
Karnataka. Maharashtra.
Ph: (080) 26714446 / 0925 Ph : (022) 27782779 / 80 / 81 / 82
Email: support@cyberscapeindia.com Email: support@akruti.com
Web: http://www.cyberscapeindia.com Web: http://www.akruti.com
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 2 of 28|

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

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 3 of 28|

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.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 4 of 28|

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.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 5 of 28|

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.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 6 of 28|

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.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 7 of 28|

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.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 8 of 28|

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

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 9 of 28|

• 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.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 10 of 28|

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.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 11 of 28|

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
support@cyberscapeindia.com.

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.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 12 of 28|

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.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 13 of 28|

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

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 14 of 28|

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

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 15 of 28|

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.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 16 of 28|

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 H - Halant
M - Matra R - Reph
N – Nasal (modifier) E – End Char
C - Consonant { } – Represents none or multiple occurrence
D – Nukta dot [ ] – 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:

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 17 of 28|

• 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]

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 18 of 28|

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.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 19 of 28|

Code 232 (Normal) 247 (Accent) Rendered String: 232+247


........... OO'''''' ...@@......
........... 'O'''''' ....@......
........... ''O''''' .....@.....
........... '''O'''' ......@....
........... ''''O''' .......@...
........... '''''O'' ........@..
@@@@@@@@@@@ '''''''' @@@@@@@@@@@
........@.. '''''''' ........@..
........@.. '''''''' ........@..
Bitmap ........@.. '''''''' ........@..
..@@@@@@@.. '''''''' ..@@@@@@@..
..@........ '''''''' ..@........
...@.@@@@.. '''''''' ...@.@@@@..
...@@...@@. '''''''' ...@@...@@.
..@......@. '''''''' ..@......@.
..@......@. '''''''' ..@......@.
..@.....@.. '''''''' ..@.....@..
...@....... '''''''' ...@.......
....@@..... '''''''' ....@@.....
......@@@.. '''''''' ......@@@..
........... '''''''' ...........
........... '''''''' ...........
........... '''''''' ...........
........... '''''''' ...........
........... '''''''' ...........
........... '''''''' ...........

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 ..@..~~~~~~~~~ .........@.. ..@...........@..
..@..~~~~~~~~~ ...@@@@@@@.. ..@.....@@@@@@@..
..@..~~~~~~~~~ ..@@........ ..@....@@........
..@..~~~~~~~~~ ..@......... ..@....@.........
..@..~~~~~~~~~ ..@......... ..@....@.........
..@..~~~~~~~~~ ..@.....@@.. ..@....@.....@@..
..@..~~~~~~~~~ ...@@...@@.. ..@.....@@...@@..
..@..~~~~~~~~~ ....@@@@@@.. ..@......@@@@@@..
..@..~~~~~~~~~ ........@@.. ..@..........@@..
..@..~~~~~~~~~ .........@.. ..@...........@..
.....~~~~~~~~~ ............ .................
.....~~~~~~~~~ ............ .................
.....~~~~~~~~~ ............ .................
.....~~~~~~~~~ ............ .................
.....~~~~~~~~~ ............ .................
.....~~~~~~~~~ ............ .................
.....~~~~~~~~~ ............ .................

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 20 of 28|

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.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 21 of 28|

 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 support@cyberscapeindia.com or
support@akruti.com .

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 22 of 28|

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 0

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

0A 10

0B 11

0C 12

0D 13

0E 14

0F 15

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 23 of 28|

Iscii Chart 128 to 255 (80-FF hex)


80 90 A0 B0 C0 D0
128 144 160 176 192 208
0 0

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

0A 10

0B 11

0C 12

0D 13

0E 14

0F 15

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 24 of 28|

Unicode Hindi Chart 0900-097F

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 25 of 28|

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.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 26 of 28|

Akruti Hindi BDF Font Typical Glyphs Category Chart-I

Code Type Glyph Bitmap Glyph Metrics Description

...@@@....@@@@* Name:= C0161 This glyph is a


.@@...@.....@.~ Encoding:= 161 standalone vowel A,
161 Normal .@....@.....@.~ sWidth(X):= 656 and it is the base
and ......@.....@.~ sWidth(Y):= 0 character for vowel
Kern ......@.....@.~ dWidth(X):= 14 Aa, O, Owe, Am and
....@@......@.~ dWidth(Y):= 0 Aha. There is a
......@@....@.~ BBox Width:= 15 single pixel kern
@@......@@@@@.~ BBox Height:= 13 for attaching to the
.@......@...@.~ BBox Offset(X):= 0 appropriate matras.
.@@.....@...@.~ BBox Offset(Y):= 0 It stands on the
..@@...@@...@.~ baseline.
....@@@@....@.~
............@.~

@@@@@@@@@@@ Name:= C0166 This glyph is a


..@.....@.. Encoding:= 166 standalone vowel Ay,
166 Normal ..@.....@.. sWidth(X):= 515 and it is the base
..@.....@.. sWidth(Y):= 0 character for vowel
..@.....@.. dWidth(X):= 11 Aye. This is a
..@.....@.. dWidth(Y):= 0 normal character
..@.....@.. BBox Width:= 11 with no kern. It
..@...@@... BBox Height:= 16 goes three pixels
...@....... BBox Offset(X):= 0 below the baseline.
....@...... BBox Offset(Y):= -3
.....@.....
......@@...
.......@@..
........@..
.......@@..
.......@...

@@@@@@@@@@@@@@@ Name:= C0202 This is a full


............@.. Encoding:= 202 conjunct character
202 Normal ............@.. sWidth(X):= 703 formed by da, halant
............@.. sWidth(Y):= 0 and dha. It is a
......@@@@@@@.. dWidth(X):= 15 normal character. It
.....@......... dWidth(Y):= 0 goes two pixels
.....@......... BBox Width:= 15 below the baseline.
..@@.@.....@@.. BBox Height:= 15
.@..@@@....@@.. BBox Offset(X):= 0
.@....@@...@@.. BBox Offset(Y):= -2
.@@...@.@@@@...
..@@@@.....@...
.....@@...@@@..
......@@@@..@..
............@..

@@@@@@@@@~~~ Name:= C0203 This is a half


......@..~~~ Encoding:= 203 conjunct character
161 Normal ......@..~~~ sWidth(X):= 421 formed by da,
and ......@..~~~ sWidth(Y):= 0 halant, ma and
Kern ..@@@@@..~~~ dWidth(X):= 9 halant. It combines
..@......~~~ dWidth(Y):= 0 with Aa matra and
...@@@@@.~~~ BBox Width:= 12 other matra glyphs
.......@.~~~ BBox Height:= 12 to give full form.
.......@.~~~ BBox Offset(X):= 0 It has a normal and
.....@@@@*** BBox Offset(Y):= 1 a kern portion. It
......@@.~~~ stands on pixel
.......@.~~~ above the baseline.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 27 of 28|

Akruti Hindi BDF Font Typical Glyphs Category Chart-II

Code Type Glyph Bitmap Glyph Metrics Description

@@@@@@~~ Name:= C0209 This is a half


..@...~~ Encoding:= 209 consonant Pa. It
209 Normal ..@...~~ sWidth(X):= 281 combines with Aa
and ..@...~~ sWidth(Y):= 0 matra and other
Kern ..@...~~ dWidth(X):= 6 matra glyphs to
..@...~~ dWidth(Y):= 0 give full form. It
..@...~~ BBox Width:= 8 has a normal and a
..@...~* BBox Height:= 10 kern portion. It
...@..~* BBox Offset(X):= 0 stands three pixels
....@@*~ BBox Offset(Y):= 3 above the baseline.

''''OOOOO Name:= C0213 This glyph is a


OO''''''O Encoding:= 213 matra u character.
213 Accent ''OOOOOO' sWidth(X):= 0 This is a below
sWidth(Y):= 0 baseline character
dWidth(X):= 0 by 6 pixels and it
dWidth(Y):= 0 attaches under the
BBox Width:= 9 previous character
BBox Height:= 3 with a left
BBox Offset(X):= -11 movement of 11
BBox Offset(Y):= -6 pixels.

''.@@@@@@*~~ Name:= C0219 This is a half Ya


''.......~~~ Encoding:= 219 consonant character
219 Accent, ''.......~~~ sWidth(X):= 328 formed by Ya and
Normal ''@@@@@@.~~~ sWidth(Y):= 0 halant. It is one
and OO.....@@~~~ dWidth(X):= 7 of the few glyphs
Kern ''......@~~~ dWidth(Y):= 0 with accent, normal
''......@~~~ BBox Width:= 12 and kern portions.
''..@@@@.~~~ BBox Height:= 11 It stands two
''...@...~~~ BBox Offset(X):= -2 pixels above
''...@@..~** BBox Offset(Y):= 2 baseline.
''....@@@**~

@@@@@@@@@@@@@* Name:= C0221 This is a ligature


......@......~ Encoding:= 221 between the
221 Normal ......@......~ sWidth(X):= 609 consonant Ra and
and ..@...@......~ sWidth(Y):= 0 the Vowel U.
Kern ..@...@@@@@..~ dWidth(X):= 13 It has a normal and
..@@..@@...@.~ dWidth(Y):= 0 a kern portion. It
...@@@@....@.~ BBox Width:= 14 stands on the
....@......@.~ BBox Height:= 13 baseline.
....@.....@..~ BBox Offset(X):= 0
.....@...@@..~ BBox Offset(Y):= 0
.....@@......~
......@@.....~
.......@@....~

''''.@@@@* Name:= C0223 This is a Rakar


223 ''''...@.~ Encoding:= 223 glyph. It is formed
Accent, ''''...@.~ sWidth(X):= 234 by halant, Ra and
Normal ''''...@.~ sWidth(Y):= 0 the matra Aa. It
and ''''...@.~ dWidth(X):= 5 has all the three
Kern ''''...@.~ dWidth(Y):= 0 characteristics. It
''''...@.~ BBox Width:= 10 completes a half
''''...@.~ BBox Height:= 13 consonant or a half
''''...@.~ BBox Offset(X):= -4 conjunct glyph. It
''''.@@@.~ BBox Offset(Y):= 0 may kern with
'''O@..@.~ additional matras.
'OO'...@.~ It stands on the
OO''...@.~ baseline.

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.
Akruti Hindi BDF Font Simulation and Prototyping Engine - |Page 28 of 28|

Akruti Hindi BDF Font Typical Glyphs Category Chart-III

Code Type Glyph Bitmap Glyph Metrics Description


'''OOO''' Name:= C0224 This is a bottom
''OO'OO'' Encoding:= 224 Rakar character,
224 Accent 'OO'''OO' sWidth(X):= 0 formed by halant
OO'''''OO sWidth(Y):= 0 followed by Ra. It
dWidth(X):= 0 attaches below full
dWidth(Y):= 0 consonants or
BBox Width:= 9 conjuncts at three
BBox Height:= 4 pixels under the
BBox Offset(X):= -9 baseline and nine
BBox Offset(Y):= -3 pixels to the left.
'OOO Name:= C0225 This glyph is a
O''' Encoding:= 225 Reph character and
225 Accent O''' sWidth(X):= 0 an ascender by 13
O''' sWidth(Y):= 0 pixels above
'O'' dWidth(X):= 0 baseline and four
''O' dWidth(Y):= 0 pixels to the left.
BBox Width:= 4 It is formed by Ra
BBox Height:= 6 and halant and
BBox Offset(X):= -4 attaches after all
BBox Offset(Y):= 13 matras.
..@@@.@.~~
.@...@..~~ Name:= C0234 This is a half
234 Normal .@...@..~~ Encoding:= 234 conjunct glyph
and .@...@..~~ sWidth(X):= 375 formed by Ka,
Kern ..@.@...~~ sWidth(Y):= 0 halant, Sha and
..@@....~* dWidth(X):= 8 halant. It combines
.@..@@@@*~ dWidth(Y):= 0 with Aa matra
@.......~~ BBox Width:= 10 followed by other
@....@..~~ BBox Height:= 13 modifiers or with
@...@@@.~~ BBox Offset(X):= 0 consonants or
@@..@@@.~~ BBox Offset(Y):= 0 conjuncts. It
..@@@@..~~ stands on the
.....@@.~~ baseline.

@@@@@ Name:= C0240 This is a Aa matra


..@.. Encoding:= 240 character and
240 Normal ..@.. sWidth(X):= 234 frequently used to
..@.. sWidth(Y):= 0 complete half
..@.. dWidth(X):= 5 consonants or half
..@.. dWidth(Y):= 0 conjuncts. Matras
..@.. BBox Width:= 5 and modifiers may
..@.. BBox Height:= 13 follow. It stands
..@.. BBox Offset(X):= 0 on the baseline.
..@.. BBox Offset(Y):= 0
..@..
..@..
..@..

....@***~~~~~~ Name:= C0242 This is a short Ee


242 ..@@.~~~**~~~~ Encoding:= 242 matra glyph. It is
Normal ..@..~~~~**~~~ sWidth(X):= 234 positioned before
and ..@..~~~~~**~~ sWidth(Y):= 0 the consonant or
Kern ..@..~~~~~~**~ dWidth(X):= 5 conjunct and has a
@@@@@~~~~~~~** dWidth(Y):= 0 kerning zone which
..@..~~~~~~~~~ BBox Width:= 14 overlaps on the
..@..~~~~~~~~~ BBox Height:= 18 succeeding glyph by
..@..~~~~~~~~~ BBox Offset(X):= 0 9 pixels. It stands
..@..~~~~~~~~~ BBox Offset(Y):= 0 on the baseline.
..@..~~~~~~~~~
..@..~~~~~~~~~
..@..~~~~~~~~~
..@..~~~~~~~~~
..@..~~~~~~~~~
..@..~~~~~~~~~
..@..~~~~~~~~~
..@..~~~~~~~~~

Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.

You might also like