A formal grammar for Malayalam conjunct

In Malayalam a conjunct(കൂട്ടക്ഷരം) is formed by combining 2 or more consonants by Virama(ചന്ദ്രക്കല).  “ക്ക” is a conjunct with 2 consonants, formed by ക + ് + ക. സ്ത്ര is a conjuct with 3 consonants സ+ ് + ത +്+ ര. ന്ത്ര്യ  is a conjunct with 4 consonants – ന + ് + ത + ് + ര + ് + യ. Conjuncts with more than 4 consonant is rare. ഗ്ദ്ധ്ര്യ is formed by 5 consonants.

Can we define this formation in a formal grammar?

Let us try. For the simplicity, I am using Parser Expression Grammar formalism since we can quickly write a parser for that to test and evaluate.

Before that let us define the conjuct in plain English in a bit more concise and unambigous way.

Conjunct: A Consonant combined with another Conjunct or Consonant using Virama

We need to define Consonant and Virama also.

  • Virama:   ്.
  • Consonants – Any of the set [കഖഗഘങചഛജഝഞടഠഡഢണതഥദധനപഫബഭമയരലവശഷസഹളഴറ]

Writing this in PEG syntax

You can try this in a PEG evaluator and try various conjucts to see if they all getting parsed. Use https://pegjs.org/online, copy paste the above grammar try inputs like ന്ത്ര്യ.

Let us look at the definition again.

Conjunct = Consonant Virama (Conjunct / Consonant )

This is a tail recursion. Meaning, The Conjuct  get expanded towards the end of the expression. Can we rewrite this using a Left recursion? We can. see:

Conjunct = (Conjunct / Consonant ) Virama Consonant

This will have the same result of our previous expression. We can also rewrite our plain English definition as well accordingly:

Conjunct: A Conjunct or Consonant  combined with another Consonant using Virama

There is a problem with this new definition since it is Left recursion, depending up on the parser implementation, it can cause infinite recursion. The PEGjs parser which we used above for testing and evaluation does not support Left recursion since it is a top down parser(recursive descent parser). You can try modify the above pegjs grammar in the online evaluation tool, you will see the parser warns about ininite recursion.

But if the parser is capable of avoiding this issue, nothing stops you to write the grammar using Left recursion. LALR parsers such as GNU Bison can very well support left recursion. But big issue here is GNU Flex/Bison used for writing such grammars does not support Unicode!. You can make it working by doing some low level byte manipulation. I did not try.

One more thing: I wrote ( Conjunct / Consonant ) instead of (Consonant / Conjunct ). The order was chosen intentionally since the matches are done left to right. Since a Conjunct anyway start with a Consonant, the parsing will proceed with that path. We avoid it by using the Conjunct, Consonant order.

Proposal for Malayalam language subtags for orthography variants rejected

The Internet Engineering Task Force (IETF) – Languages is responsible for the registration of language tags, subtags and script variants. These registered language tags are used in a wide set of internet standards and applications to identify and annotate language uniquely.


Recently Sascha Brawer(currently working at Google) submitted a proposal to register two new language subtags for Malayalam to denote the orthography variations. Malayalam orthography had a diverging moment in history when Kerala government decided to script reformation in 1971. The decision was to accommodate the Malayalam orthography for the then existing typewriters and typesetting devices. These devices had limitations to accomodate the wide character set of Malayalam at that time.

So, the proposal was to introduce two subtags as follows:

  1. ml-puthiya:  Reformed Malayalam orthography-Malayalam that is  w ritten in the orthography of the 1971 reform. In Malayalam (transcribed to English), the term for this variant is “puthiya lipi”.
  2. ml-pazhaya:  Traditional Malayalam orthography- Malayalam that is written using the orthographic conventions that were in place before the 1971 reform. In Malayalam (transcribed to English), the term for this variant is “pazhaya lipi”.

Sascha Brawer correctly explained the missing part in this classification:

According to my contact, this reform was a continuum; the Kerala government order of 1971 did not immediately affect the common practice. Instead, the transition from traditional to reformed has happened over the period of 20-30 years. There is a lot of variation in the specifics for any year one could pick in the last century.

Again according to my contact, there is a common overall understanding among Malayalam speakers that the orthography of the language has moved from ‘traditional’ to ‘reformed.’ However, my contact did not know of an authoritative reference that would describe this transition in more detail.

I replied to the proposal as follows:

Mathrubhumi daily uses a mixed orthography, except the ു sign, it mostly follows traditional writing style with many conjuncts and stacked ligatures
Malayala Manoarma daily follows a style more close to reformed orthography and avoids many ligatures.

[…] This is true, there is no defnition or authoritative reference about this
differences. And that is my concern. Given a set of printed samples from
say, todays news paper in Malayalam, one cannot say this is new'(puthiya) or this is ‘old'(pazhaya). The contemporary Malayalam usage is a mixed one. It borrows some reformation from 1971 order and some from the practices that existed before

The reason for mixed mode is because the main intention behind the 1971
reformation was to get Malayalam ‘usable’ with then type writers and composing machines. As technology progressed and when these limitations vanished, nothing stopped people from using the types similar to what they will write using pen on paper. The modern opentype technology completely removed this limitation and many modern and famous typefaces of Malayalam uses this ‘old’/ml-pazhaya style.

So defining two variants ml-puthiya, ml-pazhaya without a clear way to
distinguish one from another and having a wide range of ununamed variants exist, is concerning.[…]

Later,  Michael Everson, the registrar for IETF language tags said he is rejecting the proposals.

For a Malayalam subtag to be approvable, it really should refer to an orthographic standard. So far it appears that there isn’t anything very precise for either the traditional or the newer spelling to be specified, so it would be best to reject this now (rather than extending it little by little) until revised proposals with solid references can be put forward.

New handwriting style font for Malayalam: Chilanka

A new handwriting style font for Malayalam is in development. The font is named as “Chilanka”(ചിലങ്ക).

This is a alpha version release. Following is a sample rendering.

More samples here.

You may try the font using this edtiable page http://smc.org.in/downloads/fonts/chilanka/tests/ -It has the font embedded

Download the latest version: http://smc.org.in/downloads/fonts/chilanka/Chilanka.ttf

Chilanka/ചിലങ്ക is a musical anklet

A brief note on the workflow I used for font development is as follows

  1. Prepared a template svg in Inkscape that has all guidelines and grid setup.
  2. Draw the glyphs. This is the hardest part. For this font, I used bezier tool of inkscape. SVG with stroke alone is saved. Did not prepare outline in Inkscape, this helped me to rework on the drawing several times easily. To visualize how the stroke will look like in outlined version, I set stroke width as 130, with rounded end points. All SVGs are version tracked. SVGs are saved as inkscape svgs so that I can retain my guidelines and grids.
  3. In fontforge, import this svgs and create the outline using expand stroke, with stroke width 130, stroke height 130,  pen angle 45 degree, line cap and line join as round.
  4. Simplify the glyph automatically and manually to reduce the impact of conversion of Cubic bezier to quadratic bezier.
  5. Metrics tuning. Set both left and right bearings as 100 units(In general, there are glyph specfic tuning)
  6. The opentype tables are the complex part. But for this font, it did not take much time since I used SMC’s already existing well maintained feature tables. I could just focus on design part.
  7. Test using test scripts

Some more details:

  • Design: Santhosh Thottingal
  • Technology: Santhosh Thottingal and Kavya Manohar
  • Total number of glyphs: 676. Includes basic latin glyphs.
  • Project started on September 15, 2014
  • Number of svgs prepared: 271
  • Em size: 2048. Ascend: 1434. Descend: 614
  • 242 commits so far.
  • Latest version: 1.0.0-alpha.20141027
  • All drawings are in inkscape. No paper involved, no tracing.

Thanks for all my friends who are helping me testing and for their encouragement.
Stay tuned for first version announcement 🙂

(Cross posted from http://blog.smc.org.in/new-handwriting-style-font-for-malayalam-chilanka/ )

New version of Malayalam fonts released

Swathanthra Malayalam Computing project announced the release of new version of Malayalam unicode fonts this week. In this version, there are many improvements for popular Malayalam fonts Rachana and Meera. Dyuthi font has some bug fixes. I am listing the changes below.

  1. Meera font was small compared to other fonts. This was not really a problem in Gnome environment since fontconfig allows you to define a scaling factor to match other font size. But it was an issue in Libreoffice, KDE and mainly in Windows where this kind of scaling feature does not work. Thanks to P Suresh for a rework on glyphs and fixing this issue.
  2. Rachana, Meera and Dyuthi had wrong glyphs used as placeholder glyphs. Bugs like these are fixed.
  3. Virama 0D4D had a wrong LSB that cause the cursor positioning and glyph boundary go wrong. Fixed that bug
  4. Atomic Chilu code points introduced in Unicode 5.1 was missing in all the fonts that SMC maintained because of the controversial decision by Unicode and SMC’s stand against that. Issues still exist, but content with code point is present, to avoid any difficulties to users, added those characters to Meera and Rachana fonts.
  5. Rupee Symbols added to Meera and Rachana. Thanks to Hiran for designing Sans and Serif glyphs for Rupee.
  6. Dot Reph(0D4E) – The glyphs for this was already present in Meera but unmapped to any unicode point. GSUB Lookup tables added to the glyphs according to unicode specification.

For a more detailed change description see this mail thread. There are some minor changes as well.

Thanks to Hussain K H (designer of both Meera and Rachana) , P Suresh, Hiran for their valuable contribution. And thanks to SMC community and font users for using the fonts and reporting bugs. We hope that we can bring this new version in your favorite GNU/Linux distros soon. Wikimedia’s WebFonts extension uses Meera font and the font will be updated there soon. Next release of GNU Freefont is expected to update Malayalam glyphs using Meera and Rachana for freefont-sans and freefont-serif font respectively. We plan to update other fonts we maintain also with these changes in next versions. There are still some glyphs missing in these fonts with respect to the latest unicode version.


Identifiers In Indic Languages

Recently, while preparing a critique for  IDN Policy for Malayalam language prepared by CDAC,  I noticed that ICANN does not allow control characters in the domain names.  Sometime back I noticed Python 3 identifiers also does not allow control characters in the Identifiers. This blog post attempts to analyze the issue by looking at the Unicode and ICANN specifications about these special characters.

Apart from the existing characters in Indic languages,  Zero width Joiner and Zero width non joiners are widely used in Indic languages to control how the ligatures are formed. For some samples on how they are used, refer the wikipedia links. Being control characters and invisible characters, they are often removed while doing normalization , particularly before doing a string comparison, or collation (sort).

Identifiers, the strings that uniquely represent some data often has a policy on what kind of characters it can contain. For example, email address is an identifier, which unambiguously defines somebody’s email address, does not allow ‘space’ characters in between. Some examples for this kind of identifiers are: email ids, web domain address, variables in programming languages etc.

Gone are the days where identifiers can be represented only using English characters. Python 3.0+ allows  you to define a variable in program using any words that can be represented in Unicode. For more details on this Python feature read PEP 3131 – Supporting Non Ascii Identifiers . Some samples : Program written in Malayalam. In tamil , and In Hindi

Same is the case of Web addresses. With the advent of Internationalized Domain Names(IDN) that allows you register web addresses in your own languages, the English only web address scene is changing.

But this change brings some issues in the definition of ‘Identifiers’ – just like English, what are the characters allowed in using a domain name or programming language identifier that can be used? Standards and specifications are being drafted on this for each language. For Internationalized domain names in Indian languages, CDAC is drafting the policy. For python, the PEP 3131 has specification.

As a general rule, Unicode standard and the standards based on Unicode does not allow you use Unicode control characters such as zwj and zwnj in identifiers. Based on that The Internet Corporation for Assigned Names and Numbers (ICANN) , in RFC 3454 , it prohibits a list of control characters. RFC 3454 is used as a specification for converting a Unicode encoded domain name to its Punicode version for doing the validation.  For example,Thottingal, in Malayalam- തോട്ടിങ്ങല്‍ (0D24 0D4B 0D1F 0D4D 0D1F 0D3F 0D19 0D4D 0D19 0D32 0D4D 200D), when converted to punicode becomes xn--fwcaqax2g2d7dtadc . This conversion excludes the zwj at the end of the word. If I do a reverse conversion from xn--fwcaqax2g2d7dtadc to unicode what I get is തോട്ടിങ്ങല് (0D24 0D4B 0D1F 0D4D 0D1F 0D3F 0D19 0D4D 0D19 0D32 0D4D). Note that codepoint 200D – ZWJ is removed. That means I cannot register my domain thottingal.in in Malayalam properly. You can verify this using ICU online converter.  Now another example, Tamilnadu – in Malayalam തമിഴ്‌നാട് (0D24 0D2E 0D3F 0D34 0D4D 200C 0D28 0D3E 0D1F 0D4D) becomes xn--lwcjmx4a2de7id. When I do a reverse conversion, I getതമിഴ്നാട് (0D24 0D2E 0D3F 0D34 0D4D 0D28 0D3E 0D1F 0D4D) . Now ZWNJ(200C) is missed. Try yourself using the converter . This means one cannot register a website with Tamilnadu written in Malayalam properly. The IDN policies for Indic languages are based on this exclusion rules for zwj, zwnj.

For python 3.0+ ,  you cannot have an identifier in programming language with zwj, zwnj  or any control character in it. See this bug report for more details: Issue 5358

All of the above issues are because of the assumption that zwj,zwnj is prohibited from Identifiers for all cases. But that is not true. Look at the Unicode Standard Annex 31 – “Unicode Identifier and Pattern Syntax”(TR31). TR31 is based on Public Review 96 – “Allowing Special Characters in Identifiers”

This annex describes specifications for recommended defaults for the use of Unicode in the definitions of identifiers and in pattern-based syntax. It also supplies guidelines for use of normalization with identifiers. […]

default-ignorable characters are normally excluded from Unicode identifiers. However, visible distinctions created by certain format characters (particularly the Join_Control characters) are necessary in certain languages. A blanket exclusion of these characters makes it impossible to create identifiers with the correct visual appearance for common words or phrases in those languages. Identifier systems that attempt to provide more natural representations of terms in modern, customary use should allow these characters in input and display, but limit them to contexts in which they are necessary. […]

But since the characters are invisible, to meet the security considerations,  It should be clearly defined where and all we can use them. What if a domain is registered with 5 zwnj  continuously in it? It will look same to a string with 4 zwnjs. So TR31 defines 3 valid cases where zwnj and zwj can be used in an Identifier.

  • Allow ZWNJ in breaking a cursive connection
  • Allow ZWNJ in a conjunct context (example:  തമിഴ്‌നാട് , ദൃക്‌സാക്ഷി)
  • Allow ZWJ in a conjunct context (examples:  ന + ് + zwj -> ന്‍ ,  क+  ् +  zwj -> क्‍ )

These 3 cases covers all zwj,zwnj usage patterns in our languages.

So now it is clear that Unicode standard allows them in Identifiers. In that case, there should not be a conflict between Unicode Identifier policy and ICANN policy or any other identifier policy such as PEP 3131. Blanket exclusion of these characters are not allowed. So RFC 3454 should be compatible with TR31. The IDN policy of Indic languages should be based on that new specification and not based on the existing RFC 3454. Since CDAC is responsible of Indic Domain policy, they should take responsibility for bringing this change.

For making a change in PEP 3131, myself and Baiju M started a wiki page explaining what change need to be done. Read it from here.

Having said that, is it desirable to have  two domains,  one with a valid zwj/zwnj usage and another without them? Of course, they will be visually different, avoiding any possibilities for spoofing. Now the question is whether those  two words represent two words in the language?

As far as Malayalam is concerned there are three cases here:

  1. Missing ZWJ is considered as a spelling mistake – തമിഴ്‌നാട് (correct), തമിഴ്നാട് (incorrect) pair is an example for that.  Should we allow both domains ? I don’t know any case where a missing ZWNJ form another valid word with different meaning.
  2. Missing ZWJ means , the word is a different word with different meaning. This is very rare – വന്‍യവനിക , വന്യവനിക pair is often cited an example for this. But many people argues this is not a valid case.
  3. Missing ZWJ never means a spelling mistake, but just a writing style. There are many examples for this. നന്‍മ-നന്മ is one obvious one.

So the question is whether a domain differing by a valid zwj/zwnj use  to an existing registered domain to be allowed or not? I would suggest to use existing policy for domain comparison for this. ie, If the collation weights of existing domain and to-be registered domains are same ,  don’t register the new one. ZWJ, ZWNJ are characters with zero collation weight and in collation or string comparison they are ignored.


വരമൊഴിയിലും മൊഴി കീമാനിലും എന്‍കോഡിങ്ങ് ബഗ്ഗുകള്‍

വരമൊഴിയിലും മൊഴി കീമാനിലും ( Tavultesoft keyboard) എന്‍കോഡിങ്ങ് പിശകുകള്‍. മലയാളം വിക്കിപ്പീഡിയയിലുള്ള മൊഴി കീമാപ്പിലും ഈ പിശക് ഉണ്ട്. വാക്കുകളുടെ യൂണിക്കോഡ് കോഡ് മൂല്യങ്ങളുടെ വിന്യാസത്തിലാണ് പിശക്. അനാവശ്യമായ ZWNJ ആണ് പ്രശ്നം

കുറച്ച് ഉദാഹരണങ്ങളിലൂടെ ഇത് വിശദമാക്കാം.

പൊന്‍നിലാവ് (pon_nilaav): ഈ വാക്കിന്റെ ആന്തരിക യൂണിക്കോഡ് റെപ്രസന്റേഷന്‍ എന്താണെന്നറിയാന്‍ പൈത്തണ്‍ പ്രോഗ്രാമ്മിങ്ങ് ഭാഷ ഉപയോഗിക്കാം.

>>>print repr(str)

\u200c(ZWNJ) എന്ന കോഡ് ഇവിടെ അനാവശ്യമാണ്. പൊന്‍നിലാവ് എന്ന വാക്കിന്റെ യഥാര്‍ത്ഥ യൂണിക്കോഡ് ശ്രേണി ഇതാണ്:

ഇത്തരത്തിലുള്ള മറ്റു ചില വാക്കുകളിതാ:(മൊഴി കീമാന്‍ ഉപയോഗിച്ചെഴുതിയത്)- വാക്കുകള്‍ക്കിടയില്‍ ചില്ലക്ഷരം വരുന്നവ:
മുന്‍‌തൂക്കം, എന്‍‌കോഡിംഗ്, ചാരന്‍‌മാരാണ് ,നന്‍‌മ,പാന്‍‌ഗോ,പിന്‍‌താങ്ങുന്നുവെന്നു,പിന്‍‌തിരിയണമെന്നും,പിന്‍‌പക്കത്തില്‍,പിന്‍‌വലിഞ്ഞു ,പൊന്‍‌വീണ,പൗരന്‍‌മാര്‍,മന്‍‌മോഹന്‍,മുന്‍‌കൂട്ടി,മുന്‍‌കൈ,
മുന്‍‌ഗണനകള്‍, മുന്‍‌ധാരണകളില്ലാതെ, മുന്‍‌വിധികളും, റേഷന്‍‌കാര്‍ഡിനും,സല്‍മാന്‍‌ഖാനും,സെന്‍‌ട്രല്‍ , താല്‍‌പര്യം, ഉല്‍‌പന്നം, കല്‍‌പിച്ച്,നല്‍‌കാനും, മേല്‍‌വിവരിച്ച, വില്‍‌ക്കപ്പെടുന്ന, ശില്‍‌പശാല, ലോസ്ഏഞ്ചല്‍‌സ്, കണ്‍‌വഴി, കണ്‍‌വെട്ടം , പൊന്‍നാളം, കല്‍വിളക്ക്‌
താല്‍‌പര്യം = thaal_paryam

>>> str=u”താല്‍‌പര്യം”
>>> print repr(str)

ZWNJ പക്ഷേ ZWJ (U+200D) എന്നതിന് ശേഷം ഇടേണ്ട കാര്യമില്ല . ZWJ ഉള്ളതുകൊണ്ട് തുടര്‍ന്നു വരുന്ന അക്ഷരങ്ങളുമായുള്ള കൂടിച്ചേരല്‍ സംഭവിക്കില്ല. മൊഴിയുടെ അല്‍ഗോരിതം എന്തുകൊണ്ടോ ZWNJ യും ഇടുന്നു.
അതായത് വാക്കുകള്‍ക്കിടയില്‍ മാത്രമല്ല , ചില്ലക്ഷരമെഴുതാന്‍ n, l, L, r,R,N എന്നിവക്ക് പകരം എവിടെയൊക്കെ l_, n_,L_, r_,R_ ,N_ എന്നിവ ഉപയോഗിക്കുന്നുവോ അവിടെയെല്ലാം എന്‍കോഡിങ്ങ് പിശകാണ്. മൊഴി സ്കീമില്‍ l_, n_,L_, r_,R_ ,N_ എന്നിവയാണ് ചില്ലക്ഷരങ്ങള്‍ക്ക് ഉപയോഗിക്കേണ്ടത് എന്ന് പറഞ്ഞിരിക്കുന്നു.

ഈ ഉദാഹരണം ശ്രദ്ധിക്കൂ
അവള്‍= avaL_

>>> str=u”അവള്‍‌”
>>> print repr(str)

അവസാനമുള്ള ZWNJ (u+200C) ശ്രദ്ധിക്കുക. ഈ “അവള്‍ ” ഒരിക്കലും തിരഞ്ഞാല്‍ കിട്ടാത്തവളാണെന്ന് വ്യക്തമാണല്ലോ.

ഈ പ്രശ്നം സിബു http://varamozhi.wikia.com/wiki/Help:Contents/Known_Problems
എന്ന പേജില് ചേര്‍ത്തിട്ടുണ്ട്.

മലയാളം സ്പെല്ലിങ്ങ് ചെക്കറിന്റെ ചില പരീക്ഷണങ്ങള്‍ക്കിടയിലാണ് ഈ ബഗ്ഗ് എന്റെ ശ്രദ്ധയില്‍ പെട്ടത്. ചില വാക്കുകള്‍ എപ്പോളും സ്പെല്ലിങ്ങ് മിസ്റ്റേക്ക് കാണിക്കുന്നതിന്റെ കാരണം അന്വേഷിച്ചപ്പോള്‍ കണ്ടെത്തിയതാണിത്. സ്പെല്ലിങ്ങ് ചെക്കറിനായി ഞാന്‍ ശേഖരിച്ച പദശേഖരത്തില്‍ ഇത്തരത്തിലുള്ള ഏതാനും വാക്കുകള്‍ കയറിക്കൂടിയിട്ടുണ്ട്. വിക്കിയിലോ ബ്ലോഗുകളിലോ, മൊഴിയോ വരമൊഴിയോ ഉപയോഗിച്ചെഴുതിയ വാക്കുകളാകണം.

വരമൊഴിയിലും ബഗ്ഗ്

http://varamozhi.wikia.com/wiki/Help:Contents/Mozhi എന്ന വിക്കി താളില്‍ പറഞ്ഞിരിക്കുന്നു:
‘പിന്‍നിലാവ്‌’ എന്ന വാക്കു ശ്രദ്ധിക്കൂ. മംഗ്ലീഷില്‍ pinnilaav~ എന്നാണെഴുതേണ്ടത്‌ എന്നാവും ആദ്യം തോന്നുക. പക്ഷെ, കമ്പ്യൂട്ടറിനൊരു സംശയമുണ്ടാവും; അതിനെ ‘പിന്നിലാവ്‌’ എന്ന്‌ വായിച്ചാലെന്തെന്ന്‌. സംശയം ന്യായമാണ്‌. ഈയൊരു ആശയക്കുഴപ്പത്തിനിടയാക്കാത്ത വിധം പ്രശ്നം തീര്‍ക്കുന്നതിനാണ്‌ ‘_’ (underscore) എന്ന Zero Width Space (ZWS) – വലിപ്പമില്ലാ ചിഹ്നം.

ഇവിടെ ZWS എന്നത് ഒരു അനാവശ്യ യുണിക്കോഡ് കോഡ് മൂല്യമല്ലേ? ZWS ഇല്ലാതെ തന്നെ പിന്‍നിലാവ് എന്ന് എഴുതാനും പറ്റും. ZWS ഇടേണ്ടിവരുന്നത് സോഫ്റ്റ്‌വെയറിലെ ബഗ്ഗ് മൂലമല്ലേ? ഇനി വേറൊന്ന് :

വരമൊഴി ഉപയോഗിച്ച് ഞാന്‍ എന്റെ പേര് എഴുതി നോക്കി. സന്തോഷ് =santhOsh

>>> str=u”സന്തോഷ്‌”
>>> print repr(str)

വാക്കിന്റെ അവസാനമുള്ള ZWNJ ശ്രദ്ധിക്കുക.
ഇന്‍സ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് സന്തോഷ് എന്നെഴുതിയപ്പോള്‍:

>>> str=u”സന്തോഷ്‌”
>>> print repr(str)

വരമൊഴി ഉപയോഗിച്ച് പൊന്‍നിലാവ് എഴുതുമ്പോള്‍:

>>>print repr(str)

അവന് avan~

>>> str=u”അവന്‌”
>>> print repr(str)

മേല്‍പറഞ്ഞ ഉദാഹരണങ്ങളില്‍ \u0d4d (ചന്ദ്രക്കല) എന്നതിന് ശേഷം \u200c വരുന്നതെങ്ങനെ?
മൊഴിയിലെഴുതിയതും , വരമൊഴിയിലെഴുതിയതും, ഇന്‍സ്ക്രിപ്റ്റിലെഴുതിയതുമായ പൊന്‍നിലാവ്‌ എന്ന വാക്കിന് 3 എന്‍കോഡിങ്ങ്! അതായത് കമ്പ്യൂട്ടറിനെ സംബന്ധിച്ചിടത്തോളം മൂന്നും മൂന്ന് മലയാളം വാക്കുകള്‍!

ഈ ബഗ്ഗുകളെല്ലാം സിബുവിനെയും പെരിങ്ങോടനെയും അറിയിച്ചിട്ടുണ്ട്. ബഗ്ഗാണെന്നാണ് അവരും അംഗീകരിച്ചു.
അവരുമായുള്ള ഈ മെയില്‍ സംവാദത്തില്‍ നിന്ന് :

മൊഴിയാണെങ്കില്‍ ~ ഉപയോഗിക്കുന്നത്

1. ഒരു വാക്കിനു നടുവില്‍ ആണെങ്കില്‍ അടുത്തുവരുന്ന അക്ഷരത്തെ ചന്ദ്രക്കല ഉള്ള തൊട്ടുമുമ്പിലെ അക്ഷരവുമായി കൂട്ടിച്ചേര്‍ക്കുവാന്‍ ആഗ്രഹിക്കുന്നില്ല എന്ന അസമ്പ്ഷന്‍
2. ഒരു വാക്കിനു അവസാനത്തിലാണെങ്കില്‍ ചന്ദ്രക്കലയ്ക്കു പകരം ചില്ലുരൂപങ്ങള്‍ വരുന്ന വാക്കുകളില്‍ ചന്ദ്രക്കല സൂചിപ്പിക്കുവാന്‍ (സന്തോഷ് എന്നെഴുതുവാന്‍ santhOsh എന്നുമതി, അവസാനത്തെ ~ ആവശ്യമില്ല, അവന്‌ എന്നെഴുതുവാന്‍ ~ ആവശ്യമുണ്ട്)

ഇവിടെ രണ്ടാമത്തെ ഉപയോഗത്തില്‍ ഒരു ബഗ്ഗുണ്ട്, വാക്കുകള്‍ക്കു നടുവില്‍ ചന്ദ്രക്കല എഴുതുമ്പോള്‍ ഇടുന്ന ZWNJ വാക്കുകള്‍ക്കു അവസാനവും വന്ന് പോകുന്നുണ്ട്, ഒരാള്‍ എഴുതിക്കൊണ്ടിരിക്കുമ്പോള്‍ അത് വാക്കിന്റെ അവസാനമോ എന്ന് ഊഹിക്കുവാന്‍ കഴിയാത്തതില്‍ ആണത്. എന്നാല്‍ ZWNJ + Space -> Space എന്നൊരു റൂള്‍ ഉണ്ടെങ്കില്‍ ഈ പ്രശ്നം ഒഴിവാക്കുകയും ചെയ്യാം (or any other special character assuming user will type those special character to resume typing, cibu has already pointed out this bug, I was reluctant to fix it considering a normal user perspective)
“ആവശ്യമില്ലാത്ത zwnj മുഴുവന്‍ ഒഴിവാക്കാന്‍ പറ്റും എന്നെനിക്ക്‌ പ്രതീക്ഷയില്ല. ath~ എന്നൊരാളെഴുതിയാല്‍ വരമൊഴി അവസാനം കൊണ്ടുപോയി zwnj ഇടും. അതാണ് യൂസര്‍ ആഗ്രഹിക്കുന്നത്‌ എന്നാണ് എന്റെ അനുമാനം. കാരണം അതുകഴിഞ്ഞുവരുന്ന ക്യാരക്റ്റര്‍ ‘ത’യുമായി കൂട്ടക്ഷരമുണ്ടാക്കരുത്‌ എന്നുദ്ദേശിച്ചിട്ടാവും അങ്ങനെ യൂസറിട്ടതെന്ന്‌ വരമൊഴി കരുതുന്നു.
എന്നാല്‍ zwj, zwnj കോമ്പിനേഷന്റെ ആവശ്യം ഒന്നുമില്ലെന്നാണ് എനിക്ക്‌ തോന്നുന്നത്‌. അവിടെ zwnj പറ്റുമെങ്കില്‍ ഒഴിവാക്കാവുന്നതാണ്.”

സന്തോഷ് :
പക്ഷേ സന്തോഷ് എന്നെഴുതാന് ഞാന് ~ ഉപയോഗിച്ചില്ല. santhOsh എന്നാണ്
എഴുതിയത്. അപ്പോള് അതിന്റെ അറ്റത്ത് zwnj വരുന്നതെങ്ങനെ എന്ന്

നോക്കി. ശരിയാണ് അവസാനം ഒരു ZWNJ വരുന്നുണ്ട്. അത്‌ ഒരു വരമൊഴി ബഗ് തന്നെ. ശരിയാക്കാന്‍ എന്തുമാത്രം എളുപ്പമാണ് എന്നറിഞ്ഞുകൂടാ എന്നു മാത്രം.

ഈ എന്‍കോഡിങ്ങ് പിശകുകളുടെ ഗൗരവം ഞാന്‍ പറയാതെ തന്നെ നിങ്ങള്‍ക്ക് ബോദ്ധ്യപ്പെട്ടുവെന്നു കരുതുന്നു. മലയാളം വിക്കിപ്പീഡിയയില്‍ തെറ്റായ എന്‍കോഡിങ്ങ് ഉള്ള മലയാളം പദങ്ങള്‍ കടന്നു കൂടിയിരിക്കുന്നു. അതു പോലെ ബ്ലോഗുകളിലും, എവിടെയെല്ലാം വരമൊഴിയോ, മൊഴി കീമാനോ ഉപയോഗിച്ചുവോ അവിടെയെല്ലാം പിശകുകള്‍ കാണാനുള്ള സാധ്യത വളരെയധികമാണ്. പ്രത്യേകിച്ചും ബ്ലോഗേഴ്സിന്റെ ഇടയില്‍ വരമൊഴിയുടെ പ്രചാരം നോക്കുമ്പോള്‍.

മലയാളം എന്‍കോഡിങ്ങ് ഇന്‍സ്ക്രിപ്റ്റിനെയാണ് പ്രമാണമാക്കേണ്ടത്. നിവേശകരീതി ഏതായാലും അന്തര്‍ലീനമായ എന്‍കോഡിങ്ങ് ഒന്നായാലേ ഏതൊരു സോഫ്റ്റ്‌വെയറിനും അവയെ കൈകാര്യം ചെയ്യാനാകൂ. മൊഴി കീമാന് എന്‍‌കോഡിങ്ങ് എന്ന വാക്കു തന്നെ തെറ്റായേ എഴുതാനാകൂ.
ഇന്‍സ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് ഒരു രചനയില്‍ ഞാന്‍ എന്റെ പേരെഴുതി എന്നിരിക്കട്ടെ. വരമൊഴി ഉപയോഗിച്ചെഴുതിയ “സന്തോഷ്” എന്ന വാക്ക് ആ രചനയില്‍ തിരഞ്ഞാല്‍ കിട്ടില്ല. Notepad ലോ , Gedit ലോ പരീക്ഷിച്ച് നോക്കൂ.

1. ഭാഷയില്‍ ഈ പ്രശ്നങ്ങള്‍ ഇനിയും കടന്നു കൂടാതിരിക്കാന്‍ മേല്‍ പറഞ്ഞ ബഗ്ഗുകള്‍ അടിയന്തിരമായി തിരുത്തേണ്ടതുണ്ട്. തെറ്റിയ അല്ഗോരിതം ഏതാണെന്ന് വ്യക്തമാക്കിയാല്‍ എല്ലാവര്‍ക്കും സഹായിക്കാന്‍ സാധിച്ചേക്കും.
2. ഇപ്പോള്‍ കടന്ന് കൂടിയ ബഗ്ഗുകള്‍ എങ്ങനെ തിരുത്തണമെന്ന് നാം ആലോചിക്കേണ്ടിയിരിക്കുന്നു.(വിക്കിപ്പീഡിയയില്‍ ഒരു ബോട്ട് ഉപയോഗിക്കേണ്ടി വന്നേക്കും എന്നാണ് സിബു എന്നോട് പറഞ്ഞത്. അതിന്റെ പ്രായോഗികതയെപറ്റി ചിന്തിക്കേണ്ടിയിരിക്കുന്നു.)
3. പുതിതായി വരുന്നതും ഇപ്പോളുള്ളതുമായ നിവേശകരീതികള്‍ സൂക്ഷ്മമായ എന്‍‌കോഡിങ്ങ് ടെസ്റ്റിന്‍ വിധേയമാക്കണം. അതിന് ശേഷമേ പബ്ലിക് റിലീസ് പാടുള്ളൂ.

Aspell Malayalam Spelling checker Version 0.01-1 Released

മലയാളത്തിന് സ്വതന്ത്ര മലയാളം കമ്പ്യൂട്ടിങ്ങിന്റെ തിരുവോണ സമ്മാനം: ആസ്പെല്‍ മലയാളം സ്പെല്ലിങ്ങ് ചെക്കര്‍(version 0.01-1)

1,37,348 മലയാളം വാക്കുകളടങ്ങിയ മലയാളം സ്പെല്ലിങ്ങ് ചെക്കറിന്റെ ആദ്യ ലക്കം മലയാളത്തിന് സമര്‍പ്പിക്കുന്നു. സ്വതന്ത്ര ഡെസ്ക്ടോപ്പുകളായ ഗ്നോം, കെഡിഇ എന്നിവയില്‍ ഉപയോഗിക്കാവുന്ന ഈ സ്പെല്ലിങ്ങ് ചെക്കര്‍ ഗ്നു ആസ്പെല്‍ എന്ന പ്രശസ്ത സോഫ്റ്റ്‌വെയര്‍ അടിസ്ഥാനമാക്കിയാണ് വികസിപ്പിച്ചിരിക്കുന്നത്.
1,37,348 മലയാളം വാക്കുകളും സ്വയം അക്ഷരത്തെറ്റു പരിശോധിച്ചതാണ്. സമയക്കുറവ്, ശ്രദ്ധക്കുറവ്, വിവരക്കുറവ് എന്നീ കാരണങ്ങളാല്‍ ചില പിഴവുകള്‍ ഇതിലുണ്ടാവാം. ഈ സോഫ്റ്റ്‌വെയര്‍ ഉപയോഗിക്കുമ്പോള്‍ അത്തരം തെറ്റുകള്‍ കാണുകയാണെങ്കില്‍ ദയവായി എന്നെ അറിയിക്കുക.

ഇത് ഇന്‍സ്റ്റാള്‍ ചെയ്യാന്‍ https://savannah.nongnu.org/task/download.php?file_id=13811 എന്നിടത്തു നിന്ന് ഡൗണ്‍ലോഡ് ചെയ്ത് extract ചെയ്യുക. അതിനു ശേഷം README ഫയലില്‍ വിവരിച്ചിരിക്കുന്ന പോലെ ചെയ്യുക.

മലയാളത്തിന്റെ പ്രത്യേകതയായ,ഒന്നിലധികം വാക്കുകള്‍ കൂടിച്ചേര്‍ന്ന് പുതിയ വാക്കുകളുണ്ടാകുന്ന സവിശേഷത കൂടി കൈകാര്യം ചെയ്താല്‍ മാത്രമേ സ്പെല്ലിങ്ങ് ചെക്കര്‍ പൂര്‍ണ്ണമാവുകയുള്ളൂ. അല്ലെങ്കില്‍ പദസഞ്ചയത്തിന്റെ വലിപ്പം വളരെയധികമായിരിക്കും(ഇപ്പോള്‍ തന്നെ ഇന്ത്യയിലെ ഏറ്റവും വലിയ സ്പെല്ലിങ്ങ് ചെക്കര്‍ പദസഞ്ചയമാണിത്.). സന്ധി സമാസം നിയമങ്ങള്‍ ഈ ലക്കത്തില്‍ ഉള്‍ക്കൊള്ളിച്ചില്ലാത്തതിനാല്‍ മേല്‍പ്പറഞ്ഞ തരത്തിലുള്ള വാക്കുകള്‍പരിശോധിക്കാന്‍ ഈ സോഫ്റ്റ്‌വെയറിന് കഴിയില്ല. അതായത് മഴക്കാലം, മേഘങ്ങള്‍, എല്ലാം, ഇരുണ്ട്, കൂടി എന്നിവയെല്ലാം പരിശോധിക്കാമെങ്കിലും “മഴക്കാലമേഘങ്ങളെല്ലാമിരുണ്ടുകൂടി” എന്ന വാക്ക് പരിശോധിക്കാന്‍ ഇതിന് കഴിഞ്ഞെന്നു വരില്ല. ഇത് അടുത്ത ലക്കത്തില്‍ ഉള്‍പ്പെടുത്താന്‍ ശ്രമിക്കുന്നുണ്ട്.

ഇത്രയും വലിയ പദസഞ്ചയം ശേഖരിക്കാന്‍ എന്നെ സഹായിച്ച ഹുസ്സൈന്‍ സാറിനോട് കടപ്പാട് അറിയിച്ചുകൊള്ളുന്നു. മലയാളം വിക്കിപീഡിയ, വിവിധ ബ്ലോഗുകള്‍ എന്നിവയില്‍ നിന്നും വാക്കുകള്‍ ശേഖരിച്ചിട്ടുണ്ട്. സാങ്കേതിക സഹായങ്ങള്‍ക്ക് കെവിന്‍ അറ്റ്കിന്‍സണ്‍(ആസ്പെല്‍ രചയിതാവ്), ഗോര മൊഹന്തി(ആസ്പെല്‍ ഹിന്ദി,ഒറിയ സ്പെല്‍ ചെക്കര്‍) എന്നിവരോട് നന്ദി രേഖപ്പെടുത്തുന്നു.

ഈ പദസഞ്ചയത്തിലില്ലാത്ത വാക്കുകള്‍ പരിശോധിക്കുമ്പോള്‍, നിങ്ങള്‍ക്കത് പദസഞ്ചയത്തിലേയ്ക്ക് കൂട്ടിച്ചേര്‍ക്കാം. ഇങ്ങനെ നിങ്ങള്‍ ചേര്‍ക്കുന്ന വാക്കുകള്‍ നിങ്ങളുടെ ഹോം ഡയറക്ടറിയില്‍ .aspell.ml.pws എന്ന hidden ഫയലില്‍ ശേഖരിക്കപ്പെടും. നിങ്ങള്‍ ചേര്‍ത്ത പുതിയ വാക്കുകള്‍ മറ്റുള്ളവര്‍ക്കും ഉപകാരപ്പെടണമെന്നാഗ്രഹമുണ്ടെങ്കില്‍ ആ ഫയല്‍ എനിക്കയച്ചു തരിക. പുതിയ ലക്കങ്ങളില്‍ ആ വാക്കുകള്‍ പ്രധാന പദസഞ്ചയത്തില്‍ ചേര്‍ക്കാം.

സഹായങ്ങള്‍ക്കോ സംശയങ്ങള്‍ക്കോ ഈ മെയിലിങ്ങ് ലിസ്റ്റിലേക്കെഴുതുക.
ഈ സോഫ്റ്റ്‌വെയറിനു വേണ്ടി ഉപയോഗിച്ച പദസഞ്ചയം മറ്റു ഭാഷാഗവേഷണങ്ങള്‍ക്കുമുപയോഗിക്കാവുന്നതാണ്. ആവശ്യമുള്ളവര്‍ ബന്ധപ്പെടുക.

Scim malayalam phonetic input method With Lookup table!!!

Added a new feature to SCIM malayalam phonetic input method. It can give spelling suggestions while typing!!!. Cool right?
See the below screenshot from my system. I am editing some text in GEDIT. For typing വിള, I have to type viLa according to the IM Scheme. But as every body does, I typed vila. Now hint menu comes with two suggestions. ള and ല. I press arrow keys and it becomes വിള.

An extract from the documentation:
മലയാളം ശബ്ദാത്മക നിവേശകരീതിക്ക് ഉപയോക്താവ് എഴുതിക്കൊണ്ടിരിക്കുമ്പോള്‍ സൂചനകള്‍ കൊടുക്കാന്‍ കഴിയും. ഇത് മലയാളം വളരെപ്പെട്ടെന്ന് തെറ്റ് കൂടാതെ എഴുതാന്‍ സഹായിക്കുന്നു. ചില്ല​ക്ഷരങ്ങള്‍, കൂട്ടക്ഷരങ്ങള്‍ എന്നിവ എഴുതുമ്പോള്‍ ഇത് വളരെ ഫലപ്രദമാണ്. മലയാളികളുടെ സവിശേഷമായ മംഗ്ളീഷ് ഉപയോഗത്തിന്റെ അടിസ്ഥാനത്തിലാണ് ഇതു രൂപകല്പനചെയ്തിരിക്കുന്നത്.

ഉദാഹരണത്തിന് അടിപൊളി എന്നെഴുതാന്‍ പലപ്പോഴും നാം ഉപയോഗിക്കുന്നത് adipoli എന്നാണ്. പക്ഷെ മലയാളം ശബ്ദാത്മക നിവേശകരീതിയിലതെഴുതുന്നത് atipoLi എന്നാണല്ലൊ?. ചിലര്‍​ക്കെങ്കിലുമുണ്ടാകുന്ന ഈ തടസ്സം ഒഴിവാക്കുന്നതിന് സൂചനാപ്പട്ടിക ഉപകരിക്കും. adipoli എന്നെഴുതിക്കൊണ്ടിരിക്കുമ്പോള്‍ di എന്നെഴുതുമ്പോള്‍ സൂചനാപ്പട്ടിക ദി എന്നും ടി എന്നും 2 സൂചനകള്‍ നല്‍കുന്നു. അതുപോലെ ളി എന്നതിനുവേണ്ടി Li ക്കുപകരം li എന്നെഴുതുമ്പോള്‍ പട്ടിക ലി എന്നും ളി എന്നും 2 സൂചനകള്‍ നല്കുന്നു.

ഇതിന്റെ വേറൊരു ഉപയോഗം പേരുകളുടെ കൂടെയുള്ള initials എഴുതുമ്പോള്‍ ആണ്. ഉദാഹരണത്തിന് ലീല പി കെ എന്നെഴുതാന്‍ ശരിക്കും ഉപയോഗിക്കേണ്ടത് leela pi ke എന്നാണ്. പക്ഷെ നാം leela p k എന്നു തന്നെ എഴുതാന്‍ ഇഷ്ടപ്പെടുന്നു. നാം P അല്ലെങ്കില്‍ p എന്നെഴുതുമ്പോള്‍ സൂചനാപ്പട്ടിക പി എന്നൊരു സൂചനകൂടി തരും!.

കെ എസ് ആര്‍ ടി സി എന്നെഴുതാന്‍ K S R T C തന്നെ ഉപയോഗിക്കണമെന്നുണ്ടോ? സൂചനാപ്പട്ടികയുടെ സഹായത്തോടെ നിങ്ങള്ക്ക് K S R T C എന്നു തന്നെ എഴുതാം.

“അടിപൊളി അല്ലേ?!!!”
Now look at this

Note: I decided not to use mozhi scheme as such for the better usability.But I tried to give some compatibility to that scheme by giving alternative patterns in some places.