AKRUTI HINDI BDF FONT SIMULATION AND PROTOTYPING ENGINE BDF Font Compostion and Rendering – Manual
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] Web: http://www.cyberscapeindia.com
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.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 ISCII Code Chart Unicode Chart Hindi Bilingual Code Chart Akruti BDF Hindi Font Glyphs Category Chart Akruti Hindi Composition and Rendering Samples
22 23 24 25 26 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 bilingual 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. 2. 3.
4. 5. 6.
The Default Font Settings frame has controls for setting the default font for the text boxes in the engine. 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. 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. By pressing the Done button, the changes effected above can be applied to the text boxes in the other tabs. The Cancel button when pressed returns you to the BDF String tab. 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
[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.
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 STARTFONT
COMMENT <string> FONT SIZE <size> <xRes> FONTBOUNDINGBOX <Xoff> METRICSSET <0,1 or2> (horizontal, vertical, mixed) DWIDTH <x> SWIDTH <x> DWIDTH1 <x> SWIDTH1 <x> VVECTOR STARTPROPERTIES <no of key value pairs> ENDPROPERTIES CHARS <no of glyphs> STARTCHAR Followed by nth glyph data ENDCHAR ENDFONT Glyph Wide Data Format STARTCHAR <string> ENCODING SWIDTH <x> DWIDTH <x> SWIDTH1 <x> DWIDTH1 <x> VVECTOR xoff yoff BBX BBw BBh BBxoff0x BByoff0y BITMAP ENDCHAR
Description Start of font Comment strings (ignore) Font name Size and resolution Font Bounding Box Optional metrics set for various writing systems Font wide device width (optional) Font wide scale width (optional)
Optional vertical vector Start of properties (optional) End of properties (optional) No of glyphs Start nth Glyph data End nth Glyph data End of font
Description Glyph name Encoding value Scale Width in units Device width in pixels Scale Width in units (for vertical fonts) Device width in pixels (for vertical fonts) Vertical vector (only for vertical fonts) Glyph bounding box Actual glyph bitmap data in hex format 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 ¨î ®ð ±ð ³ð ´ Palatal Retroflex Dental Labial Sonorant Sibilant
cart
khan
gum
gha
ding
µð
¶
¸ð
»ð
½ð
each
chastity
jug
jha
ranch
¾
¿
À
Á
Âð
tug
tha
dumb
dha
harsh n
Ãð
Æð
Ç
Ïð
Ðð
carte
think
diva
thine
no
Ñð
Òî
×ð
Øð
Ùð
put
phelp
but
bha
man
Úð
Ü
âð
ú
ãð
yes
road
love
harsh l
vest
äð
æð
çð
è
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
÷ game
ô
õ
put
ö
school
ø
ð÷
ðø
ü
:
like
oh
dove
um
uh
¥
butter
grrr
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 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 Complex block Consonant block Vowel block
Form {C + [D] + H} + C + [M] + [N] + [E] {C + [D] + H} + C + H 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 Complex block
Consonant block Vowel block
Composed Glyph String [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) {Cpre + [D] + H + [Ra + H]} + Cbase + [Ra + H] + H 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
Bitmap
232 (Normal)
240 (Normal)
Rendered String: 232+240
........... ........... ........... ........... ........... ........... @@@@@@@@@@@ ........@.. ........@.. ........@.. ..@@@@@@@.. ..@........ ...@.@@@@.. ...@@...@@. ..@......@. ..@......@. ..@.....@.. ...@....... ....@@..... ......@@@.. ........... ........... ........... ........... ........... ...........
..... ..... ..... ..... ..... ..... @@@@@ ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..... ..... ..... ..... ..... ..... .....
................ ................ ................ ................ ................ ................ @@@@@@@@@@@@@@@@ ........@....@.. ........@....@.. ........@....@.. ..@@@@@@@....@.. ..@..........@.. ...@.@@@@....@.. ...@@...@@...@.. ..@......@...@.. ..@......@...@.. ..@.....@....@.. ...@.........@.. ....@@.......@.. ......@@@....... ................ ................ ................ ................ ................ ................
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
Bitmap
232 (Normal)
247 (Accent)
Rendered String: 232+247
........... ........... ........... ........... ........... ........... @@@@@@@@@@@ ........@.. ........@.. ........@.. ..@@@@@@@.. ..@........ ...@.@@@@.. ...@@...@@. ..@......@. ..@......@. ..@.....@.. ...@....... ....@@..... ......@@@.. ........... ........... ........... ........... ........... ...........
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
Bitmap
242 (Kern)
199 (Normal)
Rendered String: 242+199
.....~~~~~~~~~ ....@***~~~~~~ ..@@.~~~**~~~~ ..@..~~~~**~~~ ..@..~~~~~**~~ ..@..~~~~~~**~ @@@@@~~~~~~~** ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~ .....~~~~~~~~~
............ ............ ............ ............ ............ ............ @@@@@@@@@@@@ .........@.. .........@.. .........@.. ...@@@@@@@.. ..@@........ ..@......... ..@......... ..@.....@@.. ...@@...@@.. ....@@@@@@.. ........@@.. .........@.. ............ ............ ............ ............ ............ ............ ............
................. ....@@@@......... ..@@....@@....... ..@......@@...... ..@.......@@..... ..@........@@.... @@@@@@@@@@@@@@@@@ ..@...........@.. ..@...........@.. ..@...........@.. ..@.....@@@@@@@.. ..@....@@........ ..@....@......... ..@....@......... ..@....@.....@@.. ..@.....@@...@@.. ..@......@@@@@@.. ..@..........@@.. ..@...........@.. ................. ................. ................. ................. ................. ................. .................
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 [email protected] or [email protected] .
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 0 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
10 16
20 32
30 48
40 64
50 80
60 96
70 112
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 128 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
90 144
A0 160
B0 176
C0 192
D0 208
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
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
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
161
166
202
161
Type
Normal and Kern
Normal
Normal
Normal and Kern
Glyph Bitmap
Glyph Metrics
Description
...@@@....@@@@* .@@...@.....@.~ .@....@.....@.~ ......@.....@.~ ......@.....@.~ ....@@......@.~ ......@@....@.~ @@......@@@@@.~ .@......@...@.~ .@@.....@...@.~ ..@@...@@...@.~ ....@@@@....@.~ ............@.~
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.
@@@@@@@@@@@ ..@.....@.. ..@.....@.. ..@.....@.. ..@.....@.. ..@.....@.. ..@.....@.. ..@...@@... ...@....... ....@...... .....@..... ......@@... .......@@.. ........@.. .......@@.. .......@...
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.
@@@@@@@@@@@@@@@ ............@.. ............@.. ............@.. ......@@@@@@@.. .....@......... .....@......... ..@@.@.....@@.. .@..@@@....@@.. .@....@@...@@.. .@@...@.@@@@... ..@@@@.....@... .....@@...@@@.. ......@@@@..@.. ............@..
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.
@@@@@@@@@~~~ ......@..~~~ ......@..~~~ ......@..~~~ ..@@@@@..~~~ ..@......~~~ ...@@@@@.~~~ .......@.~~~ .......@.~~~ .....@@@@*** ......@@.~~~ .......@.~~~
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.
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
209
213
219
221
Type
Normal and Kern
Accent
Accent, Normal and Kern
Normal and Kern
223 Accent, Normal and Kern
Glyph Bitmap
Glyph Metrics
Description
@@@@@@~~ ..@...~~ ..@...~~ ..@...~~ ..@...~~ ..@...~~ ..@...~~ ..@...~* ...@..~* ....@@*~
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.
''''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.
''.@@@@@@*~~ ''.......~~~ ''.......~~~ ''@@@@@@.~~~ 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.
@@@@@@@@@@@@@* ......@......~ ......@......~ ..@...@......~ ..@...@@@@@..~ ..@@..@@...@.~ ...@@@@....@.~ ....@......@.~ ....@.....@..~ .....@...@@..~ .....@@......~ ......@@.....~ .......@@....~
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.
''''.@@@@* ''''...@.~ ''''...@.~ ''''...@.~ ''''...@.~ ''''...@.~ ''''...@.~ ''''...@.~ ''''...@.~ ''''.@@@.~ '''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.
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 224
225
234
240
Type Accent
Accent
Normal and Kern
Normal
242 Normal and Kern
Glyph Bitmap
Glyph Metrics
Description
'''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):= BBox Offset(Y):= 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):= BBox Offset(Y):=
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. 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.
'OOO O''' O''' O''' 'O'' ''O'
..@@@.@.~~ .@...@..~~ .@...@..~~ .@...@..~~ ..@.@...~~ ..@@....~* .@..@@@@*~ @.......~~ @....@..~~ @...@@@.~~ @@..@@@.~~ ..@@@@..~~ .....@@.~~
-9 -3
-4 13
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.
@@@@@ ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@.. ..@..
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.
....@***~~~~~~ ..@@.~~~**~~~~ ..@..~~~~**~~~ ..@..~~~~~**~~ ..@..~~~~~~**~ @@@@@~~~~~~~** ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~ ..@..~~~~~~~~~
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.
Cyberscape Multimedia Ltd, 941, 21st Main, 22nd “A” Cross, BSK II, Bangalore - 560070.