28
CYBERSCAPE MULTIMEDIA LIMITED 941, 21 st Main, 22 nd “A” Cross, Banashankari 2 nd 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 BDF Rendering Engine

Embed Size (px)

Citation preview

Page 1: Akruti BDF Rendering Engine

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

Page 2: Akruti BDF Rendering Engine

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

Page 3: Akruti BDF Rendering Engine

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.

Page 4: Akruti BDF Rendering Engine

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.

Page 5: Akruti BDF Rendering Engine

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.

Page 6: Akruti BDF Rendering Engine

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.

Page 7: Akruti BDF Rendering Engine

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.

Page 8: Akruti BDF Rendering Engine

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

Page 9: Akruti BDF Rendering Engine

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.

Page 10: Akruti BDF Rendering Engine

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.

Page 11: Akruti BDF Rendering Engine

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

[email protected].

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.

Page 12: Akruti BDF Rendering Engine

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.

Page 13: Akruti BDF Rendering Engine

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

Page 14: Akruti BDF Rendering Engine

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

Page 15: Akruti BDF Rendering Engine

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.

Page 16: Akruti BDF Rendering Engine

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:

Page 17: Akruti BDF Rendering Engine

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]

Page 18: Akruti BDF Rendering Engine

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.

Page 19: Akruti BDF Rendering Engine

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

.....~~~~~~~~~

....@***~~~~~~

..@@.~~~**~~~~

..@..~~~~**~~~

..@..~~~~~**~~

..@..~~~~~~**~ @@@@@~~~~~~~** ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~

............

............

............

............

............

............ @@@@@@@@@@@@ .........@.. .........@.. .........@.. ...@@@@@@@.. ..@@........ ..@......... ..@......... ..@.....@@.. ...@@...@@.. ....@@@@@@.. ........@@.. .........@.. ............ ............ ............ ............ ............ ............ ............

.................

....@@@@.........

..@@....@@.......

..@......@@......

..@.......@@.....

..@........@@.... @@@@@@@@@@@@@@@@@ ..@...........@.. ..@...........@.. ..@...........@.. ..@.....@@@@@@@.. ..@....@@........ ..@....@......... ..@....@......... ..@....@.....@@.. ..@.....@@...@@.. ..@......@@@@@@.. ..@..........@@.. ..@...........@.. ................. ................. ................. ................. ................. ................. .................

Page 20: Akruti BDF Rendering Engine

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.

Page 21: Akruti BDF Rendering Engine

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

[email protected] .

Page 22: Akruti BDF Rendering Engine

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

Page 23: Akruti BDF Rendering Engine

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

Page 24: Akruti BDF Rendering Engine

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

Page 25: Akruti BDF Rendering Engine

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.

Page 26: Akruti BDF Rendering Engine

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.

Page 27: Akruti BDF Rendering Engine

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.

Page 28: Akruti BDF Rendering Engine

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.