March 8, 2015

ചില്ലക്ഷരങ്ങളുടെ ചിത്രീകരണം

ചില്ലക്ഷരങ്ങളുടെ ചിത്രീകരണം

മലയാളം ഫോണ്ടുകളും ചിത്രീകരണവും - ലേഖന പരമ്പരയിലെ പുതിയ ലേഖനം

സന്തോഷ് തോട്ടിങ്ങല്‍

സ്വരം ചേരാത്ത ശുദ്ധവ്യഞ്ജനങ്ങളെയാണു് ചില്ലക്ഷരങ്ങള്‍ എന്നു വിളിക്കുന്നതു്.ണ്‍, ന്‍, ര്‍, ല്‍, ള്‍ എന്നിവയാണു് മലയാളത്തില്‍ വ്യാപകമായി എഴുതുന്ന ചില്ലക്ഷരങ്ങള്‍. ഇതുകൂടാതെ കയുടെ ചില്ലായ ക്‍ ചില്ലും കണ്ടുവരുന്നു.

മീര ഫോണ്ടിലെ ചില്ലക്ഷരങ്ങള്‍

മലയാളം ചില്ലക്ഷരങ്ങളുടെ എന്‍കോഡിങ്ങിനെപ്പറ്റി വളരെയധികം ചര്‍ച്ചകള്‍ നടന്നിട്ടുണ്ടു്. ചില്ലക്ഷരങ്ങളുടെ ഡാറ്റാ എന്‍കോഡിങ്ങ് എന്താവണം എന്നായിരുന്നു വിഷയം.ചില്ലക്ഷരങ്ങള്‍ താഴെപ്പറയുന്ന രീതിയിലുള്ള എന്‍കോഡിങ്ങ് ആണു് യുണിക്കോഡ് 5.1 വരെ ഉണ്ടായിരുന്നതു്

  • ണ്‍ = ണ + ് + ZWJ
  • ന്‍ = ന + ് + ZWJ
  • ര്‍ = ര + ് + ZWJ
  • ല്‍ = ല + ് + ZWJ
  • ള്‍ = ള + ് + ZWJ
  • ക്‍ = ക + ് + ZWJ

ZWJ സീറോ വിഡ്ത് ജോയിനര്‍(Zero Width Joiner) എന്ന പ്രത്യേക കോഡ്പോയിന്റ് ആണു്. ചിത്രീകരണത്തെ സ്വാധീനിക്കുന്നതിനു് വേണ്ടി നിര്‍വചിക്കപ്പെട്ട ഒരു സ്പെഷല്‍ ക്യാരക്ടര്‍ ആണു് അതു്. പല ഭാഷകള്‍ക്കും അതിനു വിവിധ ധര്‍മ്മങ്ങള്‍ ആണുള്ളതു്. മലയാളത്തില്‍ അതിനു് ചന്ദ്രക്കലയോടുകൂടിയ വ്യഞ്ജനങ്ങളെ ചില്ലുരൂപത്തിലേയ്ക്കു മാറ്റുക എന്ന ധര്‍മ്മമാണു് പറഞ്ഞിട്ടുള്ളതു്. ഡാറ്റാ പ്രൊസസ്സിങ്ങില്‍ പൊതുവില്‍ ഈ ക്യാരക്ടര്‍ അവഗണിക്കാമെന്നും, പക്ഷേ നിര്‍ബന്ധമായും മലയാളം, സിംഹള പോലുള്ള ഭാഷകളില്‍ അങ്ങനെ ചെയ്യരുതെന്നും യുണിക്കോഡ് പറഞ്ഞിരുന്നു. പക്ഷേ 2006 കാലം വരെയൊക്കെയുള്ള പല അപ്ലിക്കേഷനുകളും ഈ കോഡ് പോയിന്റിനെ ചിത്രീകരണത്തില്‍ കണക്കിലെടുത്തിരുന്നില്ല. ഫയര്‍ഫോക്സിന്റെ മൂന്നാംപതിപ്പിനു മുമ്പുള്ളവ ഇതിനൊരുദാഹരണമാണു്. അതുകൊണ്ടുതന്നെ ന്‍ എന്നെഴുതിയാല്‍ ഈ അപ്ലിക്കേഷനുകള്‍ ന് എന്നു മാത്രമേ വായനക്കാരനു കാണുമായിരുന്നുള്ളു. പക്ഷേ അപ്ലിക്കേഷനുകളൊക്കെ പിന്നീടു് ഈ പ്രശ്നം പരിഹരിച്ചു.

മേല്‍പ്പറഞ്ഞ ZWJ ക്യാരക്ടര്‍ ഇല്ലാതെത്തന്നെ ചില്ലുകള്‍ക്കു സ്വന്തമായി എന്‍കോഡിങ്ങ് വേണമെന്ന വാദവും ശക്തമായിരുന്നു. യുണിക്കോഡ് 5.1ല്‍ അങ്ങനെ ചില്ലുകള്‍ക്കു സ്വന്തമായി എന്‍കോഡിങ്ങ് വന്നു.അവ താഴെക്കൊടുത്തിരിക്കുന്ന വിധമാണു്.

  • ണ്‍ = U+0D7A
  • ന്‍ = U+0D7B
  • ര്‍ = U+0D7C
  • ല്‍ = U+0D7D
  • ള്‍ = U+0D7E
  • ക്‍ = U+0D7F

അക്ഷരങ്ങള്‍ ഇങ്ങനെ രണ്ടുരീതിയില്‍ എഴുതുന്നതു് എന്‍കോഡിങ്ങ് എന്ന ആശയത്തിനു തന്നെ നിരക്കാത്തതാണു് എന്നും ഡുവല്‍ എന്‍കോഡിങ്ങ് എന്ന പ്രശ്നം ഉണ്ടാക്കുമെന്നും എന്ന എതിര്‍വാദങ്ങളും ശക്തമായിരുന്നു. ഇവിടെ തത്കാലം നമ്മള്‍ ആ വാദങ്ങള്‍ ഒന്നും ചര്‍ച്ച ചെയ്യുന്നില്ല. രണ്ടു രീതിയിലുള്ള ഡാറ്റാ എന്‍കോഡിങ്ങ് നിലനില്‍ക്കുന്ന ചില്ലുകള്‍ എങ്ങനെ നമ്മുടെ ഫോണ്ടുകളില്‍ ചിത്രീകരിക്കപ്പെടുന്നു എന്നു മാത്രം നമുക്കു ചര്‍ച്ച ചെയ്യാം.

ZWJ യുടെ കോഡ് പോയിന്റ് 200D ആണു്. അതിനു സ്വന്തമായി എന്തെങ്കിലും ഗ്ലിഫ് ഉണ്ടാവേണ്ട കാര്യമൊന്നുമില്ല. കൂടെയുള്ള അക്ഷരങ്ങളുടെ ചിത്രീകരണത്തെ സ്വാധീനിക്കുക എന്നതാണല്ലോ അതിന്റെ ജോലി. എന്നിരുന്നാലും മീര ഫോണ്ടോ രചന ഫോണ്ടോ നോക്കിയാല്‍ താഴെക്കൊടുത്തിരിക്കുന്ന ഗ്ലിഫ് അതിനു കൊടുത്തിരിക്കുന്നതായി കാണാം.

ZWJ യ്ക്കുള്ള ഗ്ലിഫ്

അദൃശ്യ അക്ഷരമാണു് ZWJ എങ്കിലും അതു് അദൃശ്യമാവുന്നതു് കൂടെ അക്ഷരങ്ങളുള്ള അര്‍ത്ഥവത്തായ ഒരു സന്ദര്‍ഭത്തില്‍ മാത്രമാണു്. അങ്ങനെയല്ലാത്ത ഇടങ്ങളില്‍ ഇതിനെ അദൃശ്യമാക്കുന്നതു് പ്രശ്നങ്ങളുണ്ടാക്കുകയേ ഉള്ളൂ. ഉദാഹരണത്തിനു ന്‍ എന്നു ടൈപ്പു ചെയ്യുമ്പോള്‍ ഒന്നിലധികം ZWJ അബദ്ധത്തില്‍ വന്നു പോയെന്നിരിക്കട്ടെ, അപ്പോഴും ന്‍ എന്നു തന്നെ കാണിക്കുന്നതു് തെറ്റാണു്. അത്തരം അനാവശ്യ അക്ഷരങ്ങളെ എഴുത്തുകാരന്റെ ശ്രദ്ധയില്‍ കൊണ്ടുവരാനാണിതു്.

ZWJ യ്ക്കുള്ള ഗ്ലിഫ് റെക്കമെന്റു ചെയ്യുന്ന ഓപ്പണ്‍ടൈപ് സ്പെസിഫിക്കേഷന്റെ ഭാഗം. http://www.microsoft.com/typography/OpenTypeDev/malayalam/intro.htm#comb

ര്‍ എന്ന ചില്ലിന്റെ ചിത്രീകരണം മീര ഫോണ്ടില്‍ ചെയ്തിരിക്കുന്നതെങ്ങനെ എന്നു നോക്കാം. അതിന്റെ ലിഗേച്ചര്‍ ടേബിള്‍ നോക്കുക

മുന്‍ അദ്ധ്യായങ്ങളില്‍ നമ്മള്‍ കണ്ടപോലെ ഇവിടെയും Malayalam, Malayalam2 എന്നീ രണ്ടു ഓപ്പണ്‍ടൈപ്പിന്റെ പഴയതും പുതിയതുമായ പതിപ്പുകള്‍ക്കുള്ള നിയമങ്ങള്‍ ഇവിടെ കാണാം. പുതിയ പതിപ്പില്‍ ലളിതമാണു് - ര + ് + ZWJ എന്ന ശ്രേണി akhand നിയമപ്രകാരം ചിത്രീകരിക്കുന്നു.

പഴയ പതിപ്പുകളിലാവട്ടെ, ഇതേ ശ്രേണിയെ akhand, half forms, halant forms എന്നീ മൂന്നു തരം ഓപ്പണ്‍ടൈപ്പ് ഫീച്ചറുകളാല്‍ ചിത്രീകരിക്കുന്നു. പഴയ, പിശകുള്ള അപ്ലിക്കേഷനുകളെയെല്ലാം പിന്തുണയ്ക്കാനായി ഫോണ്ടില്‍ ചെയ്ത സൂത്രപ്പണികളാണതെല്ലാം. പുതിയ അപ്ലിക്കേഷനുകളില്‍ ഇതൊന്നും ആവശ്യമില്ല, പക്ഷേ മുന്‍ അദ്ധ്യായങ്ങളില്‍ പറഞ്ഞപോലെ പരമാവധി അപ്ലിക്കേഷനുകളെയും അവയുടെ പതിപ്പുകളെയും പിന്തുണയ്ക്കാനുള്ള പരിശ്രമമാണിതു്.

ഗൂഗിളിന്റെ നോട്ടോ സാന്‍സ് മലയാളം ഫോണ്ടില്‍ ര്‍ ചില്ലിന്റെ ടേബിള്‍ നോക്കൂ

akhand രണ്ടുതവണ ഉപയോഗിച്ചിരിക്കുന്നതു ഒരു പിശകാണെന്നു തോന്നുന്നു, പക്ഷേ അതുകൊണ്ടു പ്രശ്നങ്ങളൊന്നും ഉണ്ടാവില്ല. ബാക്കി മീരയുടേതിനു സമാനമായ ടേബിളാണു് ആ ഫോണ്ടിലും.

ഇനി ഈ ഗ്ലിഫുകളെയെല്ലാം അവയുടെ അറ്റോമിക് കോഡ് പോയിന്റിലേയ്ക്കും മാപ്പ് ചെയ്യണം. അതിനായി ചില്ലുകള്‍ ആവര്‍ത്തിച്ചു ചേര്‍ക്കേണ്ട കാര്യമില്ല. ഒരു ഗ്ലിഫില്‍ തന്നെ ലിഗേച്ചര്‍ ടേബിളും കോഡ് പോയിന്റും ചേര്‍ക്കാവുന്നതാണു്.

രചന ഫോണ്ടിലെ ര്‍ ചില്ലിന്റെ ഗ്ലിഫിനു കോഡ് പോയിന്റ് കൊടുത്തിരിക്കുന്നു.

ചില്ലക്ഷരങ്ങള്‍ക്കു അറ്റോമിക് എന്‍കോഡിങ്ങ് വരുന്നതിനുമുമ്പേ മലയാളത്തിന്റെ യുണിക്കോഡ് ബ്ലോക്കിലെ ഉപയോഗിച്ചിട്ടില്ലാത്ത കോഡ് പോയിന്റുകള്‍ക്കെല്ലാം വട്ടത്തിനകത്തുള്ള R ചിഹ്നം രചന, മീര തുടങ്ങിയ ഫോണ്ടുകളുടെ വളരെ പഴയ പതിപ്പുകളില്‍ ഉണ്ടായിരുന്നു. അറ്റോമിക് ചില്ലക്ഷരങ്ങള്‍ ഈ പഴയ പതിപ്പു ഫോണ്ടുകള്‍ ഉപയോഗിച്ചു വായിച്ചാല്‍ താഴെക്കൊടുത്തിരിക്കുന്നതുപോലെ കാണും

ഈ പ്രശ്നം കാണുകയാണെങ്കില്‍ നിങ്ങളുടെ ഫോണ്ടുകള്‍ ദയവായി പുതുക്കുക.

ഈ പരമ്പരയിലെ മുന്‍ലേഖനങ്ങള്‍