യൂണിക്കോഡ് പത്താം പതിപ്പ്: മലയാളത്തിന് മൂന്നു പുതിയ കോഡ്പോയിന്റുകൾ കൂടി

യൂണിക്കോഡിന്റെ പത്താം പതിപ്പ് പുറത്തിറങ്ങി. മലയാളത്തിന്റെ കോഡ് ബ്ലോക്കിലേയ്ക്ക് പുതിയ മൂന്നു അക്ഷരങ്ങൾ കൂടി ഔദ്യോഗികമായി ചേർന്നിരിക്കുന്നു. അങ്ങനെ മലയാളത്തിന്റെ കോഡ് ബ്ലോക്കിൽ  117 അക്ഷരങ്ങൾ ആയി.

പുതിയ അക്ഷരങ്ങൾ ഇവയാണ്:

  1. D00 – Combining Anuswara Above
  2. 0D3B – Malayalam Sign Vertical Bar Virama
  3. 0D3C- Malayalam Sign Circular Viramaപ്രാചീനരേഖകളിൽ കണ്ടുവരുന്നവയാണ് ഈ ചിഹ്നങ്ങൾ. അത്തരം ഗ്രന്ഥങ്ങളുടെ ഡിജിറ്റൈസേഷനിലും, പ്രാചീനലിപിസംബന്ധമായ പഠനഗവേഷണങ്ങളിലുമൊക്കെ ഇവ ഉപയോഗിക്കപ്പെട്ടേക്കാം.

0D00 – Combining Anusvara Above

ആദ്യത്തേത് ‘മുകളിലുള്ള അനുസ്വാരമാണ്’.

മലയാളത്തിൽ നാമിന്നുപയോഗിക്കുന്ന അനുസ്വാരത്തിനു തുല്യമായ ഉപയോഗമാണ് പ്രാചീനമലയാളലിപിയിൽ ഈ ചിഹ്നത്തിനുള്ളത്. അതായത് നാമിന്നുപയോഗിക്കുന്ന അനുസ്വാരം മറ്റക്ഷരങ്ങളുടെ അതേ നിരപ്പിൽ തന്നെ കിടന്ന് അതിനിടതുവശത്തുള്ള അക്ഷരത്തോട് ‘മകാരം’ ചേർക്കുമ്പോളുള്ള ഉച്ചാരണം നൽകുന്നു. പുതിയതായി നിർവ്വചിച്ചിരിക്കുന്ന ‘മുകളിലുള്ള അനുസ്വാരം’ അതുനുചുവട്ടിലുള്ള അക്ഷരത്തോടു ‘മകാരം’ ചേരുമ്പോഴുള്ള ഉച്ചാരണം നൽകുന്നു.

പ്രാകൃതഭാഷയിലെ നാടകസംഭാഷണങ്ങൾ മലയാളലിപിയിലെഴുതിയിരുന്നു. നാനൂറോളം വർഷം പഴക്കമുള്ള കയ്യെഴുത്തുപ്രതികൾ ഇതിനെ സാധൂകരിക്കുന്ന തെളിവുകൾ നൽകുന്നുണ്ട്. യൂണിക്കോഡിലേയ്ക്ക് ഇതു ചേർക്കാനുള്ള ശ്രീരമണശർമ്മയുടെ നിർദ്ദേശത്തിൽ ഇവ ലഭ്യമാണ്. പക്ഷേ തെളിവിനായുപയോഗിച്ചിരിക്കുന്ന കയ്യെഴുത്തുപ്രതികളിൽ തന്നെ അക്ഷരത്തോടൊപ്പം നിരന്നു കിടക്കുന്ന ‘അനുസ്വാരസമാനമായ ചിഹ്നങ്ങളും’ കാണാം. പക്ഷേ അവയ്ക്കു മറ്റൊരർത്ഥമാണ് പ്രാകൃതഭാഷ മലയാളലിപിയിൽ എഴുതുമ്പോഴുള്ളത്. ഈ സന്ദർഭത്തിൽ അതിന്റെ വലതുവശത്തുള്ള അക്ഷരത്തെ ഇരട്ടിപ്പിക്കുകയാണു ചെയ്യുക. നാം സ്ഥിരമായി ഉപയോഗിക്കുന്ന അനുസ്വാരത്തിന്റെ ഈ പ്രാചീന ഉപയോഗത്തെപ്പറ്റി യൂണിക്കോഡ് ചാർട്ടിൽ സൂചിപ്പിക്കുന്നുമുണ്ട്.

അതായത് പ്രാകൃതഭാഷ എഴുതാനായി മലയാളലിപി ഉപയോഗിക്കുമ്പോൾ ‘അനുസ്വാരം’ അതിന്റെ പിന്നാലെ വരുന്ന വ്യഞ്ജനത്തെ ഇരട്ടിപ്പിക്കുന്ന ഉച്ചാരണം നൽകുന്നു. ‘പത്തി’ എന്ന ഉച്ചാരണത്തിനായി ‘പംതി’ എന്നാവും എഴുതുക. എന്നുവെച്ചാൽ ‘പ + ം + തി’ എന്ന യൂണിക്കോഡ് സീക്വൻസിന് സാന്ദർഭികമായി രണ്ടു വ്യത്യസ്ഥ അർത്ഥവും ഉച്ചാരണവും വരുന്നുവെന്നാണ് സാരം. ഈ ഒരു സമീപനം യൂണിക്കോഡിന്റെ രീതിശാസ്ത്രത്തിനു നിരക്കുന്നതാണോയെന്ന സംശയം ബാക്കിവെയ്ക്കുന്നു. പിന്നാലെ വരുന്ന അക്ഷരത്തെ ഇരട്ടിപ്പിയ്ക്കുന്ന, കാഴ്ചയിൽ അനുസ്വാരം പോലെ തന്നെ തോന്നിപ്പിയ്ക്കുന്ന ഈ ചിഹ്നത്തെ പ്രത്യേകം എൻകോഡ് ചെയ്യേണ്ടതാണെന്നാണ് ഈ പ്രൊപ്പോസലിലെ തന്നെ തെളിവുകൾ വെച്ച് എനിക്കു തോന്നുന്നത്.

0D3B – Malayalam Sign Vertical Bar Virama

പുതിയ യൂണിക്കോഡ് പതിപ്പിൽ അടുത്തതായി എൻകോഡ് ചെയ്യപ്പെട്ടത് ‘കുത്തനെയുള്ള വിരാമചിഹ്നമാണ്’. 0D3B ആണിതിന്റെ കോഡ് പോയിന്റ്.

ഇത് സാധാരണയായി നാമുപയോഗിക്കുന്ന വിരാമചിഹ്നത്തിൽ നിന്നും വ്യത്യസ്ഥമാണ്. വിരാമചിഹ്നം അഥവാ ചന്ദ്രക്കല (0D4D) സംവൃതോകാരത്തെക്കുറിക്കാനും വ്യഞ്ജങ്ങളിലെ സ്വരസാന്നിദ്ധ്യമില്ലാത്തെ ശുദ്ധരൂപത്തെക്കുറിക്കാനുമാണുപയോഗിക്കുന്നത്. സംവൃതോകാരത്തെക്കുറിക്കുവാനായി ഇതുപയോഗിച്ചുതുടങ്ങിയത് 1847ൽ  ഡോക്ടർ ഹെർമൻ ഗുണ്ടർട്ടാണ്. 1900ത്തോടുകൂടിയാണ് സ്വരസാന്നിദ്ധ്യം ഒഴിവാക്കാനായുള്ള ചിഹ്നമായിക്കൂടി ഇതിനെ ഉപയോഗിച്ചു തുടങ്ങിയത്.

ഇതിനൊക്കെ വളരെ മുമ്പുതന്നെ (1700കൾ മുതൽ) സംസ്കൃതത്തിൽ നിന്നും യൂറോപ്യൻ ഭാഷയിൽ നിന്നുമുള്ള ലിപിമാറ്റ എഴുത്തുകളിൽ സ്വരസാന്നിദ്ധ്യമില്ലാത്ത വ്യഞ്ജനത്തെ സൂചിപ്പിക്കുവാൻ ഉപയോഗിച്ചിരുന്ന ചിഹ്നമാണ് ‘കുത്തനെയുള്ള വിരാമചിഹ്നം’. ഇതിനെയാണ് ഇപ്പോൾ 0D3B എന്ന കോഡ് പോയിന്റോടെ എൻകോഡ് ചെയ്തിരിക്കുന്നത്. ചന്ദ്രക്കലയുടെ ഉപയോഗം സാർവത്രികമായപ്പോൾ ‘കുത്തനെയുള്ള വിരമചിഹ്നത്തിന്റെ’ ഉപയോഗം തീർത്തും ഇല്ലാതായി എന്നു തന്നെ പറയാം. കൂടുതൽ വിശദാംശങ്ങൾ ഷിജു അലക്സ്, വി.എസ്. സുനിൽ, സിബു ജോണി എന്നിവർ ചേർന്നു തയ്യാറാക്കിയ എൻകോഡിങ്ങ് പ്രൊപ്പോസലിൽ കാണാം.

0D3C- Malayalam Sign Circular Virama

‘വട്ടത്തിലുള്ള വിരമചിഹ്നമാണ്’ 0D3C എന്ന കോഡ്പോയിന്റോടു കൂടി അടുത്തതായി എൻകോഡ് ചെയ്യപ്പെട്ടത്. ഇത് പ്രൊപ്പോസ് ചെയ്തിരിക്കുന്നതും ഷിജു അലക്സ്, വി.എസ്. സുനിൽ, സിബു ജോണി എന്നിവർ ചേർന്നു തന്നെയാണ്.

സ്വരസാന്നിദ്ധ്യമില്ലാത്ത വ്യഞ്ജനത്തെക്കുറിക്കുവാനായിക്കൂടി ചന്ദ്രക്കല ഉപയോഗിച്ചു തുടങ്ങുന്നത് 1900ങ്ങൾ മുതലാണെന്ന് ‘കുത്തനെയുള്ള വിരാമചിഹ്ന’ത്തിന്റെ പ്രൊപ്പോസലിൽ തന്നെ കണ്ടുവല്ലോ. അങ്ങനെയൊരു ഉപയോഗം ചന്ദ്രക്കലയ്ക്ക് ഉണ്ടാവുന്നതിനു മുമ്പുള്ള ( ഏകദേശം 1850-1900) കാലത്ത്  മലയാളത്തിൽ ‘വട്ടത്തിലുള്ള വിരാമചിഹ്നം’  ശുദ്ധവ്യഞ്ജനത്തെക്കുറിക്കാനായി ഉപയോഗിച്ചിരുന്നു.

കാഴ്ചയിൽ ‘മുകളിലുള്ള അനുസ്വാരം’ എന്ന ആദ്യം പറഞ്ഞ ചിഹ്നവുമായി ഇതിന് സാദൃശ്യം തോന്നാം. പക്ഷേ രണ്ടും തമ്മിൽ പ്രയോഗത്തിൽ വലിയ വ്യത്യാസമുണ്ട്. ‘മുകളിലുള്ള അനുസ്വാരം’ അതുചേരുന്ന വ്യഞ്ജനാക്ഷരത്തിന്റെ നേരെ മുകളിലായി കാണുമ്പോൾ  ‘വട്ടത്തിലുള്ള വിരമചിഹ്നം’ അതുചേരുന്ന വ്യഞ്ജനാക്ഷരത്തിന്റെ വലതുമുകളിലായിട്ടാവും ഉണ്ടാവുക.

പ്രായോഗിക ഉപയോഗം

യൂണിക്കോഡിൽ എൻകോഡ് ചെയ്യപ്പെട്ടതുകൊണ്ടു മാത്രം കാര്യമില്ല. പ്രാചീന ഗ്രന്ഥങ്ങളുടെ ഡിഗിറ്റൈസേഷൻ ആവശ്യങ്ങൾക്കായിട്ടൊക്കെ ഈ ചിഹ്നങ്ങൾ ഉപയോഗിക്കണമെങ്കിൽ ഫോണ്ടുകളിൽ അവ വരച്ചു കോഡ്പോയിന്റ് അതുമായി ചേർക്കണം. അപ്പോഴേ ഇതു ഉപയോക്താവിലേയ്ക്ക് എത്തുകയുള്ളൂ.

തേങ്ങയ്ക്കും കോഡ്പോയിന്റ്

മലയാളഭാഷയുമായി ബന്ധമില്ലെങ്കിലും മലയാളികളുടെ സ്വന്തം തേങ്ങ ഒരു ഭക്ഷ്യവിഭവമെന്ന നിലയിൽ ഒരു ഇമോജിയായി കോഡ്പോയിന്റ് സ്വന്തമാക്കിയിരിക്കുന്നു. U+1F965 ആണ് തേങ്ങ ഇമോജിയുടെ കോഡ്പോയിന്റ്.

Coconut Emoji. Image from http://emojipedia.org

 

 

ഇമോജികളും ചില്ലക്ഷരങ്ങളും തമ്മിലെന്തു്?

ഈയിടെ XKCD യിൽ വന്ന ഒരു തമാശയാണു് മുകളിൽ കൊടുത്തിരിക്കുന്നതു്. ഇമോജികളെ പരിചയമുള്ളവർക്കു കാര്യം പിടികിട്ടിക്കാണും. എന്തെങ്കിലും ആശയം പ്രകടിപ്പിക്കാനുള്ള ചെറുചിത്രങ്ങളെയും സ്മൈലികളെയുമാണു് ഇമോജികൾ എന്നുവിളിക്കുന്നതു്. ചാറ്റു ചെയ്യുമ്പോഴൊക്കെ നമ്മൾ ഉപയോഗിക്കുന്ന ചിരിക്കുന്നതും സങ്കടഭാവത്തിലുള്ളതും നാക്കുനീട്ടുന്നതുമായ ചെറുചിത്രങ്ങളുടെ നിര ഇന്നു് വളർന്നു് ആയിരക്കണക്കിനായിട്ടുണ്ട്. ചിത്രങ്ങൾക്കു പകരം അവയെ അക്ഷരങ്ങളെന്നപോലെ കണക്കാക്കാൻ യുണിക്കോഡ് ഇപ്പോൾ ഇവയെ എൻകോഡ് ചെയ്യുന്നുണ്ടു്. ഉദാഹരണത്തിനു് 😀 എന്ന സ്മൈലിക്ക് U+1F60x എന്ന കോഡ്പോയിന്റാണുള്ളതു്. അടുപോലെ 👨 പുരുഷൻ, 👩 സ്ത്രീ എന്നിവയൊക്കെ പ്രത്യേക കോഡ് പോയിന്റുകളുള്ള ഇമോജികളാണു്.

ഇമോജികൾ അക്ഷരങ്ങളെപ്പോലെയായാൽ അവ ചേർന്നു് കൂട്ടക്ഷരങ്ങളുണ്ടാവുമോ? 😀

ഇമോജികളെ കൂട്ടിയിണക്കി പുതിയ അർത്ഥമുള്ള ഇമോജികൾ ഉണ്ടാക്കാനുള്ള സംവിധാനം യുണിക്കോഡ് ഒരുക്കിയിട്ടുണ്ടു്. 👪 എന്ന ഇമോജി കുടുംബത്തെ സൂചിപ്പിക്കുന്നു. അച്ഛൻ, അമ്മ, മക്കൾ എന്നിവരടങ്ങിയ കുടുംബം. ഇതുപക്ഷേ അച്ഛൻ അമ്മ, മകൻ, മകൾ എന്നിവ കൂട്ടിച്ചേർത്തും ഉണ്ടാക്കാം. 👨‍👩‍👧‍👦  എന്ന ഇമോജി അങ്ങനെ 👨‍ + 👩‍ + 👧‍ + 👦 എന്നീ ഇമോജികൾ കൂട്ടിയുണ്ടാക്കിയതാണു്. വെറുതെ അടുപ്പിച്ചെഴുതിയതല്ല, നമ്മൾ ക്ക  എന്നു് എഴുതാൻ ക കഴിഞ്ഞ ചന്ദ്രക്കലയിട്ട് അടുത്ത കയുമായി യോജിപ്പിക്കില്ലേ, അങ്ങനെ യോജിപ്പിക്കണം. അതായതു് U+1F468 U+200D U+1F469 U+200D U+1F466 എന്ന ശ്രേണി ഉപയോഗിക്കണം. ഇവിടെ കൂട്ടിയോജിപ്പിക്കാൻ ഉപയോഗിച്ചിരിക്കുന്നതു് U+200D എന്ന അക്ഷരമാണു്.

എന്താണു് U+200D? Zero Width Joiner എന്ന ഒരു അദൃശ്യ അക്ഷരമാണതു്. അതിനു രൂപമില്ല, സ്വഭാവമേ ഉള്ളൂ. അതിനിരുവശവമുള്ള അക്ഷരങ്ങളെ കൂട്ടിയോജിപ്പിക്കുക എന്ന സ്വഭാവം. ഒരു ഫോണ്ടിനു് ഇങ്ങനെയുള്ള ഒരു ശ്രേണിവന്നാൽ പകരം ഒരു ഒറ്റ ഇമോജിയുടെ ചിത്രം വെയ്ക്കണം എന്നറിയാം. നമ്മുടെ ക + ് + ക എന്ന അക്ഷരശ്രേണിവന്നാൽ അതു് ക്ക എന്നാക്കണം മലയാളം ഫോണ്ടുകൾക്കറിയാമെന്നപോലെ.

ഇനിയിപ്പോൾ ഒരു ഇമോജി ഫോണ്ടിനകത്തു് അങ്ങനെ കൂട്ടിയോജിപ്പിക്കണമെന്ന നിയമമില്ലെങ്കിലോ, വെറുതെ വിട്ടാലും മതി, ‘കുടുംബം’ ഇമോജി ഒറ്റ ചിത്രമല്ലാതെ നാലുപേർ നിരന്നു നിൽക്കുന്ന ചിത്രമാവും. എങ്ങനെ? നമ്മുടെ പ്ന എന്ന കൂട്ടക്ഷരം പ്‌ന എന്ന രീതിയിൽ പിരിഞ്ഞുവന്നാലും നമുക്ക് പ്ന തന്നെയാണല്ലോ, അതുപോലെ.

അങ്ങനെ ഇമോജികളെ ഇഷ്ടാനുസരണം ചേർത്തു് വിചിത്രമായ ഇമോജികൾ ഉണ്ടാക്കുന്നതിനെപ്പറ്റിയാണു് മുകളിലെ XKCD തമാശ. പക്ഷേ അങ്ങനെ എല്ലാ ഇമോജികളെയും തോന്നിയപടി ചേർക്കാൻ പറ്റില്ല കെട്ടോ, യുണിക്കോഡ് പ്രത്യേകം നിർവചിക്കണം. ഇതുവരെ നിർവചിച്ചിരിക്കുന്നവയുടെ ചാർട്ട് യുണിക്കോഡ് പുറത്തിറക്കിയിട്ടുണ്ടു്. അതിപ്പോൾ, മലയാളത്തിലും ഞ യും പയും ചന്ദ്രക്കലയിട്ടാലും കൂട്ടക്ഷരമുണ്ടാക്കില്ലല്ലോ, ചില അക്ഷരങ്ങൾ ചില ക്രമത്തിൽ ചേർന്നാലല്ലേ കൂട്ടക്ഷരമുണ്ടാക്കൂ.

നേരത്തെപറഞ്ഞ ZWJ യെ എവിടെയോ കണ്ട പരിചയമുണ്ടോ? 😀

മലയാളത്തിലെ ചില്ലക്ഷരങ്ങൾ എങ്ങനെയാണെഴുതുന്നതു്? ൻ എന്ന ചില്ലക്ഷരത്തിനു് U+0D7B എന്ന കോഡ്പോയിന്റ് ഉണ്ടു്. ഒറ്റയ്ക്കൊരു കോഡ് പോയിന്റുള്ളതുകൊണ്ടു് ചില്ലക്ഷരം ൻ അറ്റോമിക് ആയി എൻകോഡ് ചെയ്യപ്പെട്ടിരിക്കുന്നു എന്നും പറയാം. പക്ഷേ ഇങ്ങനെയുള്ള ഒരൊറ്റ കോഡ് പോയിന്റ് ചില്ലക്ഷരങ്ങൾക്കില്ലായിരുന്നു. സ്വരം ചേരാത്തു വ്യഞ്ജനം എന്ന അർത്ഥമാണല്ലോ ചില്ലക്ഷരങ്ങൾക്കുള്ളതു്. ൻ എന്നാൽ ന് എന്ന് സ്വരമൊന്നും ചേരാതെ ഉച്ചരിക്കുന്നു. അവൻ എന്ന വാക്ക് ഉദാഹരണം. ൻ എന്നെഴുതാൻ യൂനിക്കോഡ് 5.1 പതിപ്പിനുമുമ്പു വരെ ന + ്  + ZWJ എന്ന ശ്രേണിയാണു് ഉപയോഗിച്ചിരുന്നതു്. പിന്നീടു് അറ്റോമിക് കോഡ് പോയിന്റ് വന്നപ്പോൾ അതുപയോഗിച്ചും എഴുതിത്തുടങ്ങി. ZWJ യ്ക്കിവിടെ നേരത്തെ പറഞ്ഞ അദൃശ്യരൂപം തന്നെയാണ്. ന് എന്നതിനെ മോഡിഫൈ ചെയ്യുന്ന സ്വഭാവമാണു് ഈ സന്ദർഭത്തിലുള്ളതു്. ന് എന്നതിന്റെ ദൃശ്യരൂപം മാറ്റുക എന്ന സ്വഭാവം. അർത്ഥത്തിൽ മാറ്റം വരുത്തുന്നില്ല, ദൃശ്യത്തിൽ മാത്രം. നൻമ, നന്മ എന്നീ വാക്കുകളിൽ മയുടെ മുമ്പിലത്തെ ൻന്റെ ഉച്ചാരണം ഒന്നു തന്നെയാണല്ലോ. ഈ രണ്ടുവാക്കുകളും ഒന്നുതന്നെയാണെന്നും ZWJ എന്ന അദൃശ്യാക്ഷരംകൊണ്ടു് രൂപത്തിൽ മാത്രം വ്യത്യാസപ്പെട്ടിരിക്കുന്നുവെന്നും ഉദ്ദേശിക്കുന്നു.

ZWJ യുടെ നിർവചനമനുസരിച്ചു് ഡാറ്റാപ്രൊസസ്സിങ്ങിൽ വേണമെങ്കിൽ അവയെ അവഗണിയ്ക്കാം എന്നാണ് – ignorable character. ഇമോജികളുടെ കാര്യം പറയുമ്പോഴും ഇവ വേണമെങ്കിൽ ഒഴിവാക്കി കാണിക്കാം എന്നാണല്ലോ പറഞ്ഞതു്.

“When not available, the ZWJ characters are ignored and a fallback sequence of separate emoji is displayed. Thus an emoji zwj sequence should only be supported where the fallback sequence would also make sense to a viewer.”

ഇതുപോലെത്തന്നെയാണു് മലയാളത്തിലെ ZWJ യുടെ ഉപയോഗവും അർത്ഥവ്യത്യാസം ഉണ്ടാക്കാത്ത വാക്കുകളിൽ ദൃശ്യരൂപത്തിനു മാറ്റം വരുത്താൻ മാത്രം ZWJ ഉപയോഗിക്കാമെന്നായിരുന്നു പൊതുവിലുള്ള മനസ്സിലാക്കാൽ.

മലയാളത്തിലെ ചില്ലുകൾ – യുണിക്കോഡ് എൻകോഡ് ചെയ്തതു്

മലയാളത്തിൽ പക്ഷേ കാര്യങ്ങൾ അത്ര എളുപ്പമായിരുന്നില്ല. ഇങ്ങനെ ZWJ കൊണ്ട് ദൃശ്യരൂപത്തിനു മാറ്റം ഉണ്ടാക്കണമെന്ന നിർദ്ദേശം അനുസരിക്കാത്ത ബഗ്ഗുകളുള്ള അപ്ലിക്കേഷനുകളുണ്ടായിരുന്നു. ഉദാഹരണം ഫയർഫോക്സിന്റെ ആദ്യപതിപ്പുകൾ. “അവൻ കൊടുത്തു” എന്ന വാക്യം “അവന് കൊടുത്തു” എന്ന രീതിയിൽ തെറ്റിക്കാണിച്ചാൽ തെറ്റിപ്പോകില്ലേ? ഈ ചോദ്യം ചോദിച്ചാൽ അത്യാവശ്യം ഭാഷാവബോധമുള്ളവർ സംവൃതോകാരം ഉപയോഗിക്കാത്തതിന്റെ പ്രശ്നങ്ങൾ ചൂണ്ടിക്കാണിക്കും. “അവന് കൊടുത്തു” എന്നതു് “അവനു് കൊടുത്തു” എന്നു് മീത്തൽ മാത്രമല്ലാതെ സംവൃതോകാരം ഉ ചിഹ്നം കൂട്ടി എഴുതിയാൽ ഈ ആശയക്കുഴപ്പം വരില്ലയെന്നു്.

എന്തായാലും ചില്ലക്ഷരങ്ങളെ ഇങ്ങനെ ZWJ ചേർത്തെഴുതാതെ സ്വന്തമായി കോഡ് പോയിന്റ് കൊടുത്തു് അറ്റോമിക് ആയി നിർവചിക്കണമെന്ന വാദം യുണിക്കോഡ് അംഗീകരിക്കുകയാണുണ്ടായതു്. അതാണു് ഇന്നത്തെ ചില്ലുകളുടെ അംഗീകൃത/റെക്കമെന്റഡ് രീതി. എന്നാൽ ZWJ ചേർത്തെഴുതിയ ചില്ലുകൾ വ്യാപകമായി അപ്പോഴേക്കും മലയാളത്തിൽ വന്നിരുന്നതിനാൽ അപ്ലിക്കേഷനുകൾ അവയെ ചില്ലുകൾക്കു തുല്യമായി പരിഗണിക്കണമെന്ന നിർദേശവും ഉണ്ടു്.

കൌതുകകരമായ ഒരു കാര്യം, ഈ ചില്ലക്ഷരവിവാദമൊക്കെ നടക്കുമ്പോൾ ZWJ യ്ക്ക് ഇത്ര പ്രശസ്തിയൊന്നും ഉണ്ടായിരുന്നില്ല. മലയാളം, സിംഹള, അറബിക്ക് എന്നീ ഭാഷകളിലെ കുഴപ്പം പിടിച്ച, ആർക്കും മനസ്സിലാക്കാൻ പെട്ടെന്നു കഴിയാത്ത, അക്ഷരമാലയിലേക്കു് കടന്നുകയറിയ ഒരു അന്യാക്ഷരം ആയിരുന്നു അന്നതു്. അതുകൊണ്ടുതന്നെ അപ്പ്ലിക്കേഷനുകളൊന്നും ഇവ നേരാംവണ്ണം പ്രൊസസ്സ് ചെയ്യില്ല, നമുക്ക് ചില്ലുകൾക്ക് പ്രത്യേകം കോഡ് പോയിന്റ് വേണമെന്നൊക്കെ വാദമുണ്ടായിരുന്നു. പക്ഷേ വർഷങ്ങൾ കഴിഞ്ഞപ്പോൾ zwj യെ നമ്മൾ കൂടുതൽ കൂടുതലിടങ്ങളിൽ കാണുകയാണു്.

കൂടുതൽ വായനക്ക്:

Internationalized Top Level Domain Names in Indian Languages

Medianama recently published a news report- “ICANN approves Kannada, Malayalam, Assamese & Oriya domain names“, which says:

ICANN (Internet Corporation for Assigned Names and Numbers) has approved four additional proposed Indic TLDs (top level domain names), in Malayalam, Kannada, Assamese and Oriya languages. The TLDs are yet to be delegated to NIXI (National Internet exchange of India). While Malayalam, Kannada and Oriya will use their own scripts, Assamese TLDs will use the Bengali script.

The news title says “domain names” and the report talks about TLDs. For many people domain name is simply something like “google.com” or “amazon.in” etc. So people may misinterpret the news report as approval for domain names like “കേരളസർവ്വകലാശാല.ഭാരതം”. Many people asked me if that is the case.  We are going to have such domain names in future, but not yet.

I will try to explain the concept of TLD and IDN and the current status in this post.

The Internet Corporation for Assigned Names and Numbers (ICANN) is a non-profit organization which takes care of the whole internet domain name system and registration process. It achieves this with the help of lot of domain process and policies and domain registrars. In India NIXI owns the .in registration process.

A domain name is a string, used to identify member of a network based on a well defined Domain Name System(DNS). So, “google.com”, “thottingal.in” etc are domain names. There are dots in the domain name. They indicate the hierarchy from right to left. In the domain name “thottingal.in”, “.in” indicates a top level or root in naming and under that there is “thottingal”. If there is “blog.thottingal.in”, “blog” is a subdomain under “thottingal.in” and so on.

The top level domains are familiar to us. “.org”, “.com”, “.in”, “.uk”, “.gov” are all examples. Out of these “.com”, “.org” and “.gov” are generic top level domains. “.in” and “.uk” are country code top level domains, often abbreviated as ccTLD.  “.in” is obviously for India.

In November 2009, ICANN decided to allow these domain name strings in the script used in countries. So “.in” should be able to represent in Indian languages too. They are called Internationalized country code Top Level Domain names, abbreviated as IDN ccTLD.

ICANN also defined a fast track process to do the definition of these domains and delegation to registrars so that website owners can register such domain names. The actual policy document on this is available at ICANN website[pdf], but in short, the steps are (1) preparation, (2) string validation and approval, (3) delegation to registrars.

So far the following languages finished all 3 steps in 2014.

  1. Hindi:  .भारत
  2. Urdu: بھارت
  3. Telugu: .భారత్
  4. Gujarati: .ભારત
  5. Punjabi: .ਭਾਰਤ
  6. Bengali: .ভারত
  7. Tamil: .இந்தியா

What this means is, NIXI owns this TLDs and can assign domains to website owners. But as far as I know, NIXI is yet to start that.

And the following languages, just got approval for second step – string validation. ICANN announced this on April 13, 2016. String validation means,  Requests are evaluated in accordance with the technical and linguistic requirements for the IDN ccTLD string(s) criteria.  IDN ccTLD requesters must fulfill a number of requirements:

  • The script used to represent the IDN ccTLDs must be non-Latin;
  • The languages used to express the IDN ccTLDs must be official in the corresponding country or territory; and
  • A specific set of technical requirements must be met.

The languages passed the second stage now are:

  1. Kannada: .ಭಾರತ
  2. Malayalam: .ഭാരതം
  3. Assamese: .ভাৰত
  4. Oriya: .ଭାରତ

As a next step, these languages need delegation- NIXI as registrar. So in short, nothing ready yet for people want to register domain names with the above TLDs.

We were talking about TLDs- top level domain names. Why there is a delay in allowing people to register domains once we have TLD? It is not easy. The domain names are unique identifiers and there should be well defined rules to validate and allow registering a domain. The domain should be a valid string based on linguistic characteristics of the language. There should be a de-duplication process- nobody should be allowed to take a domain that is already registered. You may think that it is trivial, string comparison, but nope, it is very complex. There are visually similar characters in these scripts, there are rules about how a consonant-vowel combination can appear, there are canonically equivalent letters. There are security issues[pdf] to consider.

Before allowing domain names, the IDN policy for each script need to be defined and approved. You can see a sample here: Draft IDN Policy for Tamil[PDF]. The definition of these rules were initially attempted by CDAC and was controversial and did not proceed much. I had reviewed the Malayalam policy in 2010 and participated in the discussion meetings based on a critique we prepared.

ICANN has created Generation Panels to Develop Root Zone Label Generation Rules with specific reference to Neo-Brahmi scripts. I am a member of this panel as volunteer. Once the rules are defined, registration will start, but I don’t know exactly when it will happen.  The Khmer Generation Panel has completed their proposal for the Root Zone LGR. The proposal has been released for public comments.

UTF8Decoder

zabeehkhan was trying to code a Pashto (ps_AF) module for dhvani. And he told me that “it is not saying anything” :). So I took the code and found the problem. Dhvani has a UTF-8 decoder and UTF-16 converter. It was written by Dr. Ramesh Hariharan and was tested only with the unicode range of the languages in India. It was buggy for most of the other languages and there by the language detection logic and text parsing logic was failing. So I did some googling, went through the code tables of gucharmap and got some helpful information from here and here

So here is my new UTF8Decoder and converter

/*
UTF8Decoder.c
This program converts a utf-8 encoded string to utf-16 hexadecimal code sequence

UTF-8 is a variable-width encoding of Unicode.
UTF-16 is a fixed width encoding of two bytes

A UTF-8 decoder must not accept UTF-8 sequences that are longer than necessary to
encode a character. For example, the character U+000A (line feed) must be accepted from
a UTF-8 stream only in the form 0x0A, but not in any of the following five possible overlong forms:

  0xC0 0x8A
  0xE0 0x80 0x8A
  0xF0 0x80 0x80 0x8A
  0xF8 0x80 0x80 0x80 0x8A
  0xFC 0x80 0x80 0x80 0x80 0x8A

Ref: UTF-8 and Unicode FAQ for Unix/Linux http://www.cl.cam.ac.uk/~mgk25/unicode.html

Author: Santhosh Thottingal <santhosh.thottingal at gmail.com>
License: This program is licensed under GPLv3 or later version(at your choice)
*/
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
unsigned short
utf8_to_utf16 (unsigned char *text, int *ptr)
{

  unsigned short c;		/*utf-16 character */
  int i = 0;
  int trailing = 0;
  if (text[*ptr] < 0x80)	/*ascii character till 128 */
    {
      trailing = 0;
      c = text[(*ptr)++];
    }
  else if (text[*ptr] >> 7)
    {
      if (text[*ptr] < 0xE0)
	{
	  c = text[*ptr] & 0x1F;
	  trailing = 1;
	}
      else if (text[*ptr] < 0xF8)
	{
	  c = text[*ptr] & 0x07;
	  trailing = 3;
	}

      for (; trailing; trailing--)
	{
	  if ((((text[++*ptr]) & 0xC0) != 0x80))
	    break;
	  c <<= 6;
	  c |= text[*ptr] & 0x3F;
	}

    }
  return c;

}


/* for testing */
int
main ()
{
  char *instr = "സന്തോഷ് തോട്ടിങ്ങല്‍";	/* my name :) */
  int length = strlen (instr);
  int i = 0;

  for (; i < length;)
    {
      printf ("0x%.4x ", utf8_to_utf16 (instr, &i));
    }
  printf ("\n");
/* output is:
0x0d38 0x0d28 0x0d4d 0x0d24 0x0d4b 0x0d37 0x0d4d 0x0020 0x0d24 0x0d4b 0x0d1f 0x0d4d 0x0d1f 0x0d3f 0x0d19 0x0d4d 0x0d19 0x0d32 0x0d4d 0x200d 
*/

  return 0;
}

There may be already existing libraries for this, but writing a simple one ourself is fun and good learning experience.

For example, in python, to get the UTF-16 code sequence for a unicode string, we can use this:

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

This gives the following output

u'\u0d38\u0d28\u0d4d\u0d24\u0d4b\u0d37\u0d4d'

Canonical Equivalence in Unicode: Some notes

Some Notes on Canonical Equivalence in Unicode:
Unicode defines canonical equivalence as follows:
From UAX #15

Canonical Equivalence
This section describes the relationship of normalization to respecting (or preserving) canonical equivalence. A process (or function) respects canonical equivalence when canonical-equivalent inputs always produce canonical-equivalent outputs. For a function that transforms one string into another, this may also be called preserving canonical equivalence. There are a number of important aspects to this concept:

  1. The outputs are not required to be identical, only canonically equivalent.
  2. Not all processes are required to respect canonical equivalence. For example:
    • A function that collects a set of the General_Category values present in a string will and should produce a different value for < angstrom sign, semicolon > than for < A, combining ring above, greek question mark >, even though they are canonically equivalent.
    • A function that does a binary comparison of strings will also find these two sequences different.
  3. Higher-level processes that transform or compare strings, or that perform other higher-level functions, must respect canonical equivalence or problems will result.

One good example for this is
Ά = U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS and its canonical decomposition is defined as U+0391 GREEK CAPITAL LETTER ALPHA + U+0301 COMBINING ACUTE ACCENT = Α + ‍́

Following are the defined canonically equivalent unicode sequences for some Indic Languages

Bengali:

  1. U+09CB BENGALI VOWEL SIGN O = U+09C7 BENGALI VOWEL SIGN E + U+09BE BENGALI VOWEL SIGN AA
  2. U+09CC BENGALI VOWEL SIGN AU = U+09C7 BENGALI VOWEL SIGN E + U+09D7 BENGALI AU LENGTH MARK
  3. U+09DC BENGALI LETTER RRA = U+09A1 BENGALI LETTER DDA + U+09BC BENGALI SIGN NUKTA
  4. U+09DD BENGALI LETTER RHA = U+09A2 BENGALI LETTER DDHA + U+09BC BENGALI SIGN NUKTA
  5. U+09DF BENGALI LETTER YYA = U+09AF BENGALI LETTER YA + U+09BC BENGALI SIGN NUKTA

Devanagari

  1. U+0929 DEVANAGARI LETTER NNNA= U+0928 DEVANAGARI LETTER NA + U+093C DEVANAGARI SIGN NUKTA
  2. U+0931 DEVANAGARI LETTER RRA = U+0930 DEVANAGARI LETTER RA + U+093C DEVANAGARI SIGN NUKTA
  3. U+0934 DEVANAGARI LETTER LLLA = U+0933 DEVANAGARI LETTER LLA + U+093C DEVANAGARI SIGN NUKTA
  4. U+0958 DEVANAGARI LETTER QA = U+0915 DEVANAGARI LETTER KA + U+093C DEVANAGARI SIGN NUKTA
  5. U+0959 DEVANAGARI LETTER KHHA = U+0916 DEVANAGARI LETTER KHA + U+093C DEVANAGARI SIGN NUKTA
  6. U+095A DEVANAGARI LETTER GHHA = U+0917 DEVANAGARI LETTER GA + U+093C DEVANAGARI SIGN NUKTA
  7. U+095B DEVANAGARI LETTER ZA = U+091C DEVANAGARI LETTER JA + U+093C DEVANAGARI SIGN NUKTA
  8. U+095C DEVANAGARI LETTER DDDHA = U+0921 DEVANAGARI LETTER DDA + U+093C DEVANAGARI SIGN NUKTA
  9. U+095D DEVANAGARI LETTER RHA = U+0922 DEVANAGARI LETTER DDHA + U+093C DEVANAGARI SIGN NUKTA
  10. U+095E DEVANAGARI LETTER FA = U+092B DEVANAGARI LETTER PHA + U+093C DEVANAGARI SIGN NUKTA
  11. U+095F DEVANAGARI LETTER YYA = U+092F DEVANAGARI LETTER YA + U+093C DEVANAGARI SIGN NUKTA

(Note: I saw the ॻ U+097B DEVANAGARI LETTER GGA, ॼ U+097C DEVANAGARI LETTER JJA , and ॾ U+097E DEVANAGARI LETTER DDDA in Debanagari. I am not sure where these letters will be used and whether these are related to GHA, JHA and DDHA )

Gujarati:

Gujarati doesnot have any characters with canonically equivalent sequence.

Gurmukhi :

  1. U+0A36 GURMUKHI LETTER SHA = U+0A38 GURMUKHI LETTER SA + U+0A3C GURMUKHI SIGN NUKTA
  2. U+0A59 GURMUKHI LETTER KHHA = U+0A16 GURMUKHI LETTER KHA + U+0A3C GURMUKHI SIGN NUKTA
  3. U+0A5A GURMUKHI LETTER GHHA = U+0A17 GURMUKHI LETTER GA + U+0A3C GURMUKHI SIGN NUKTA
  4. U+0A5B GURMUKHI LETTER ZA = U+0A1C GURMUKHI LETTER JA + U+0A3C GURMUKHI SIGN NUKTA
  5. U+0A5E GURMUKHI LETTER FA = U+0A2B GURMUKHI LETTER PHA + U+0A3C GURMUKHI SIGN NUKTA

Kannada:

  1. U+0CC0 KANNADA VOWEL SIGN II = U+0CBF KANNADA VOWEL SIGN I + U+0CD5 KANNADA LENGTH MARK
  2. U+0CC7 KANNADA VOWEL SIGN EE = U+0CC6 KANNADA VOWEL SIGN E + U+0CD5 KANNADA LENGTH MARK
  3. U+0CC8 KANNADA VOWEL SIGN AI = U+0CC6 KANNADA VOWEL SIGN E + U+0CD6 KANNADA AI LENGTH MARK
  4. U+0CCA KANNADA VOWEL SIGN O = U+0CC6 KANNADA VOWEL SIGN E + U+0CC2 KANNADA VOWEL SIGN UU
  5. U+0CCB KANNADA VOWEL SIGN OO = U+0CC6 KANNADA VOWEL SIGN E + U+0CC2 KANNADA VOWEL SIGN UU + U+0CD5 KANNADA LENGTH MARK

Malayalam :

  1. U+0D4A MALAYALAM VOWEL SIGN O= U+0D46 MALAYALAM VOWEL SIGN E + U+0D3E MALAYALAM VOWEL SIGN AA
  2. U+0D4B MALAYALAM VOWEL SIGN OO = U+0D47 MALAYALAM VOWEL SIGN EE + U+0D3E MALAYALAM VOWEL SIGN AA
  3. U+0D4C MALAYALAM VOWEL SIGN AU = U+0D46 MALAYALAM VOWEL SIGN E + U+0D57 MALAYALAM AU LENGTH MARK

Oriya :

  1. U+0B48 ORIYA VOWEL SIGN AI = U+0B47 ORIYA VOWEL SIGN E + U+0B56 ORIYA AI LENGTH MARK
  2. U+0B4B ORIYA VOWEL SIGN O = U+0B47 ORIYA VOWEL SIGN E + U+0B3E ORIYA VOWEL SIGN AA
  3. U+0B4C ORIYA VOWEL SIGN AU = U+0B47 ORIYA VOWEL SIGN E + U+0B57 ORIYA AU LENGTH MARK
  4. U+0B5C ORIYA LETTER RRA = U+0B21 ORIYA LETTER DDA + U+0B3C ORIYA SIGN NUKTA
  5. U+0B5D ORIYA LETTER RHA = U+0B22 ORIYA LETTER DDHA + U+0B3C ORIYA SIGN NUKTA

Tamil:

  1. U+0B94 TAMIL LETTER AU = U+0B92 TAMIL LETTER O + U+0BD7 TAMIL AU LENGTH MARK
  2. U+0BCA TAMIL VOWEL SIGN O = U+0BC6 TAMIL VOWEL SIGN E + U+0BBE TAMIL VOWEL SIGN AA
  3. U+0BCB TAMIL VOWEL SIGN OO = U+0BC7 TAMIL VOWEL SIGN EE + U+0BBE TAMIL VOWEL SIGN AA
  4. U+0BCC TAMIL VOWEL SIGN AU = U+0BC6 TAMIL VOWEL SIGN E + U+0BD7 TAMIL AU LENGTH MARK

Notes:

  1. When you search a decomposed form of codepoints, you are also getting the search results of the atomic codepoint. Eg:
    മ + േ + ാ == മോ and മ + ോ == മോ
    Eventhough the code points are differnt for both of them, since there is a canonical equivalence between them, when you search one, you should get the second.
  2. When you sort the words with canonically equivalent codes, they should come adjacent.
  3. There are some languages where unicode defined the atomic code points obsolete and corresponding sequence as valid one without defining the canonical equivalence. One example is Khmer language. There
    U+17A8 KHMER INDEPENDENT VOWEL QUK was the atomically enocoded letter for the sequence U+17A7 KHMER INDEPENDENT VOWEL QU U+1780 KHMER LETTER KA. But now the description of U+17A8 KHMER INDEPENDENT VOWEL QUK says ” obsolete ligature for the sequence U+17A7 KHMER INDEPENDENT VOWEL QU U+1780 KHMER LETTER KA
    , use of the sequence is now preferred “
  4. Unicode 5.1 defined new codepoints for the 6 chillu letters in Malayalam which are currently represented by consonant + virama + ZWJ. So a single letter can be represented in both ways. But unicode did not define the canonical equivalence for them. This results in dual encoding and users will not able to get the search results with one representation if they search with other representation.
  5. Windows does not implement the canonical equivalence at all(when tested in windows XP Sp2 for the above mentioned scripts).
  6. Google search gives the correct search results for words with canonical equivalent sequence. Example used is മോഷണം <=> മോഷണം
  7. Yahoo search gives the correct search results for words with canonical equivalent sequence. Example word used is മോഷണം <=> മോഷണം. But unlike google, the search key highlighted in search results uses a decomposed sequence. i.e Yahoo replaces the search key in the search results with decomposed unicode sequence while showing the results.

References:

  1. http://en.wikipedia.org/wiki/Canonical_equivalence
  2. http://unicode.org/reports/tr15/

ചില്ലും മലയാളം കമ്പ്യൂട്ടിങ്ങും

മലയാളം കമ്പ്യൂട്ടിങ്ങിന്റെ മുകളില്‍ തലനാരിഴയില്‍ ഒരു വാള്‍ തൂങ്ങിക്കിടപ്പാണ്. ചില്ലു കൊണ്ടുള്ള ഒരു വാള്‍. വാള്‍ വീണാല്‍ മലയാളം രണ്ട് കഷണമാകും. ഒന്നാമത്തേത് നിങ്ങള്‍ വായിച്ചു കൊണ്ടിരിക്കുന്ന ഈ മലയാളം. രണ്ടാമത്തേത് അറ്റോമിക് ചില്ലുകള്‍ ഉപയോഗിച്ചുള്ള വേറൊരു മലയാളം…

“ഞങ്ങള്‍ തീരുമാനിച്ചു കഴിഞ്ഞു. നല്ലതോ ചീത്തയോ അതു നിങ്ങള്‍ അനുഭവിക്കുക” ഇത് അറ്റോമിക് ചില്ലുവാദികളുടെ മുദ്രാവാക്യത്തിന്റെ മലയാളപരിഭാഷ. ഇവിടെ ജയിക്കുന്നതാരുമാകട്ടെ തോല്ക്കുന്നത് ഭാഷ തന്നെയെന്നുറപ്പ്.

ഖരാക്ഷരം + വിരാമം + ZWJ എന്ന ഇപ്പോഴുള്ള ചില്ലക്ഷരത്തിന്റെ എന്‍കോഡിങ്ങിനു പകരം ഒറ്റ ഒരു യുണിക്കോഡ് വേണമെന്ന ആവശ്യം വളരെക്കാലമായി ഒരു വിഭാഗം മലയാളികള്‍ക്കിടയില്‍ ഉയര്‍ന്നു തുടങ്ങിയിട്ട്. അപ്പോള്‍ നിങ്ങള്‍ ചോദിച്ചേക്കാം ഇപ്പോഴുള്ള രീതിക്ക് എന്താണ് പ്രശ്നമെന്ന്. അതിനുള്ള ഉത്തരം എനിക്കിതേവരെ മനസ്സിലായിട്ടില്ല. മലയാളം ബ്ലോഗുകള്‍, വിക്കിപീഡിയ, മലയാളം സോഫ്റ്റ്​വെയറുകള്‍, പ്രാദേശികവത്കരിക്കപ്പെട്ട ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങള്‍, ഈയുള്ളവന്‍ തയ്യാറാക്കിക്കൊണ്ടിരിക്കുന്ന ഗ്നു ആസ്പെല് spelling checker (ഇപ്പോള്‍ ഒരു ലക്ഷത്തി മുപ്പതിനായിരത്തിലധികം മലയാളം വാക്കുകളുണ്ട്) ഇവയെല്ലാം ഇതിന് തെളിവുകള്‍ മാത്രം. ജീമെയിലില്‍ ചില്ലക്ഷരം വരുന്നില്ലെങ്കില്‍ അത് ജീമെയിലിന്റെ പിഴവാണ്. ബ്രൗസറില്‍ ചില്ലക്ഷരം വരുന്നില്ലെങ്കില്‍ അത് ബ്രൗസറിന്റെ അല്ലെങ്കില്‍ ചിത്രീകരണസംവിധാനത്തിന്റെ പിഴവാണ്. ഭാഷയുടേതല്ല. ഭാഷയെ മാറ്റലല്ല അതിനുള്ള പ്രതിവിധി. സോഫ്റ്റ്​വെയറിന്റെ പിഴവുകള്‍ ഭാഷകളുടെ നിലനില്പിനൊരിക്കലും വെല്ലുവിളിയാകരുത്.

സാങ്കേതികതയുടെ പേരില്‍ ഭാഷയോടുള്ള ഈ അതിക്രമം മലയാളത്തിന് പുത്തരിയല്ല. ടൈപ്പ്റൈറ്ററിന്റെ കാലത്ത് ലിപി പരിഷ്കാരത്തിന്റെ പേരില്‍ ലിപിയെ വെട്ടിമുറിക്കാന്‍ നമ്മുടെ പണ്ഡിതര്‍ തുനിഞ്ഞിരുന്നു. ആയുര്‍ബലം ഉള്ളതുകൊണ്ട് അകാലചരമമടയാതെ ഭാഷ രക്ഷപ്പെട്ടു. പ്രബുദ്ധരായ മലയാളികള്‍ ആ പരിഷ്കാരത്തെ അവഗണിച്ചു. ടൈപ്പ്റൈറ്ററിന്റെ സാങ്കേതികത്തികവില്ലായ്മ കമ്പ്യൂട്ടര്‍ പരിഹരിച്ചു. ഡിജിറ്റല്‍ ലോകത്തില്‍ മലയാളം അതിന്റെ ബാല്യദശയിലേക്ക് കടന്നു. ചരിത്രം വീണ്ടും ആവര്‍ത്തിക്കുന്നു. ഇത്തവണയും ഇതിനു മുന്നിട്ടിറങ്ങിയിരിക്കുന്നത് മലയാളികള്‍ തന്നെ. ഇതു വരെയുള്ള ഡിജിറ്റല്‍ മലയാളം കണ്ടെന്റ് മൊത്തം അസാധുവാക്കാനുള്ള ഒരു ശ്രമം. എനിക്കുറപ്പുണ്ട്, ഇതും ഒരു തുഗ്ളക്ക് പരിഷ്കാരമായി അവശേഷിക്കും. മലയാളത്തിന്റെ ഡിജിറ്റല്‍ പുരോഗതി വീണ്ടും അതിന്റെ ശൈശവം മുതല്‍ തുടങ്ങുകയോ?!.

എന്തു മാറ്റം വന്നാലും ഇപ്പോഴുള്ള സോഫ്റ്റ്​വെയറുകള്‍ നിലവിലുള്ള മലയാളം തന്നെ ഉത്പാദിപ്പിച്ചു കൊണ്ടിരിക്കും. ഉപയോക്താക്കള്‍ ഉപയോഗിച്ചു കൊണ്ടിരിക്കുന്ന ഇന്സ്ക്രിപ്റ്റ്, സ്വനലേഖ, വരമൊഴി എന്നീ നിവേശക രീതികളെല്ലാം നിലവിലുള്ള രീതി തന്നെ തുടരും. ചിത്രീകരണ സംവിധാനങ്ങള്‍ നിലവിലുള്ള രീതിയില്‍ തന്നെ റെന്‍ഡര്‍ ചെയ്യും. അങ്ങനെ കൂടുതല്‍ മലയാളം ഡിജിറ്റല്‍ ലോകത്തില്‍ നിറയും. ആ ലോകത്തിലേക്ക് അറ്റോമിക് ചില്ലെന്ന അപരന്‍ വന്നാല്‍ വാക്കുകള്‍ തിരിച്ചറിയാനാകാതെ ഡിജിറ്റല്‍ സംവിധാനങ്ങള്‍ അലങ്കോലമാകും. cons+virama+zwj = atomic Chillu എന്ന സമസ്യ എല്ലാ സോഫ്റ്റ്​വെയറുകളും മനസ്സിലാക്കേണ്ടി വരും. Dual Encoding എന്നത് തീരാശാപമായി മലയാളത്തെ പിന്തുടരും. എത്രകാലത്തേക്ക്? ഡിജിറ്റല്‍ വിവരങ്ങള്‍ക്ക് മരണമില്ലാത്തതു കൊണ്ട് അനന്തതയോളം…

ഇന്‍ഡിക് മെയിലിങ്ങ് ലിസ്റ്റില്‍( indic@unicode.org ) ചര്‍ച്ചകള്‍ ചൂടുപിടിക്കുകയാണ്. അറ്റോമിക് ചില്ല് എന്തിന്?, അതു കൊണ്ട് മാത്രമേ പരിഹരിക്കാന്‍ പറ്റൂ എന്നുള്ള എന്ത് പ്രശ്നമാണ് മലയാളത്തിനുള്ളത് എന്ന ചോദ്യങ്ങള്‍ക്ക് കൃത്യമായ ഉത്തരം നല്കാതെ ഒഴിഞ്ഞു മാറി നടക്കുകയാണ് അറ്റോമിക് ചില്ലുവാദികള്‍. ചിലരുടെ വ്യക്തിപരമായ പ്രശസ്തിക്കു വേണ്ടി മലയാളത്തിനെ കുരുതി കൊടുക്കണോ? ചരിത്രപരമായ മറ്റൊരു മണ്ടത്തരത്തിന് മലയാളം ഇരയാവല്ലേ എന്നു നമുക്കു പ്രാര്‍ത്ഥിക്കാം. നിരവധി ആക്രമണങ്ങളെ അതിജീവിച്ച മലയാളം ഇതും അതിജീവിക്കുമെന്നു പ്രതീക്ഷിക്കാം.