September 10, 2017

കൂട്ടക്ഷരങ്ങളുടെ ചിത്രീകരണത്തിലെ പുതുക്കലുകൾ

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

സന്തോഷ് തോട്ടിങ്ങല്‍, കാവ്യ മനോഹർ

മലയാള അക്ഷരങ്ങളുടെ ചിത്രീകരണത്തിൽ Conditional clustering എന്ന ഒരു പുതിയ സംവിധാനം സ്വതന്ത്രമലയാളം കംപ്യൂട്ടിങ്ങ് പരിപാലിക്കുന്ന ഫോണ്ടുകളിൽ അവതരിപ്പിക്കുന്നു.

അക്ഷരങ്ങൾ ഒന്നിനു താഴെ മറ്റൊന്നായി അടുക്കിയെഴുതുന്നതിനെയാണ് സ്റ്റാക്കിങ്ങ് എന്നു ടൈപ്പോഗ്രഫിയിൽ വിളിക്കുന്നതു്. സ്തഎന്നെഴുതുമ്പോൾ -യുടെ അടിയിൽ എഴുതുന്നത് ഒരുദാഹരണം. മീര, രചന, അഞ്ജലി, മഞ്ജരി തുടങ്ങി പഴയ ലിപി സമ്പ്രദായം പിന്തുടരുന്ന ഫോണ്ടുകളിലെല്ലാം നൂറുകണക്കിന് ഇത്തരം രൂപങ്ങളുണ്ട്. ഏതെങ്കിലും കൂട്ടക്ഷരം എഴുതുമ്പോൾ ഇങ്ങനെ അടുക്കി മാത്രമേ എഴുതാവൂ എന്ന് പ്രത്യേകിച്ച് നിയമമൊന്നുമില്ല. ഫോണ്ട് രൂപകല്പനചെയ്യുന്നവരുടെ കലാപരമായ ഒരു തീരുമാനമാണതു്. അതുകൊണ്ടുതന്നെ രചനയിൽ അടുക്കിയെഴുതിയ ഒരു രൂപം, മഞ്ജരിയിൽ വേർപെടുത്തി നിരത്തിയെഴുതിയെന്നും വരാം.

ഉദാഹരണത്തിനു്, രചന ഫോണ്ടിൽ കയുടെ അടിയിൽ ട, മ എന്നിവ വരുന്ന ക്ട, ക്മ എന്നീ ഗ്ലിഫുകൾ ഉണ്ട്. പക്ഷേ മഞ്ജരി ഫോണ്ടിൽ ഇവ ഇല്ല. പകരം നിരത്തിയെഴുതുന്നു. മീര ഫോണ്ടിൽ പക്ഷേ അടുക്കിയെഴുതിയ ക്ട, ക്മ ഗ്ലിഫുകൾ ഉണ്ടുതാനും.

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

ഇത് പക്ഷേ അത്രയെളുപ്പമാവണമെന്നില്ല. ഉ, ഊ ചിഹ്നങ്ങൾ താഴേക്കു തൂങ്ങി നിൽക്കുന്ന തുള്ളിപോലെ വരയ്ക്കുമ്പോൾ - അടുക്കിന്റെ താഴത്തെ നിലയിൽ ചേർക്കുമ്പോൾ അക്ഷരരൂപത്തിന്റെ മൊത്തം ഉയരം വർദ്ധിക്കുന്നു. ഏറ്റവും താഴെയുള്ള ഉ ചിഹ്നം വെട്ടിപ്പോവാതെയോ, തൊട്ടുതാഴെയുള്ള വരിയിലെ അക്ഷരങ്ങളുമായി മുട്ടാതെ ഇരിക്കുകയോ ചെയ്യാൻ വേണ്ടി, മൊത്തം വലിപ്പം അനുയോജ്യമായ രീതിയിൽ കുറയ്ക്കേണ്ടിവരും. ഇത് പലപ്പോഴും വായനാ സുഖത്തിനെ ബാധിക്കും.

സ്ക്കൂ എന്ന കൂട്ടക്ഷരം നോക്കുക, ക്കൂ -വിന്റെ താഴെയുള്ള മടക്കിവെച്ച വള്ളി സ്ക്കൂവിന്റെ ഉയരം സ്ക്ക യുടെതിനക്കാൾ കൂട്ടുന്നു.

എന്നുവെച്ച് സ്+ക്ക - സ്‌ക്ക എന്നും സ്+ക്കൂ - സ്‌ക്കൂ എന്നും എപ്പോഴും പിരിച്ചെഴുതി ഈ പ്രശ്നം പരിഹരിക്കേണ്ടതു് മോശമാണുതാനും. സ്ക്ക അടുക്കിയും സ്ക്കൂ എന്നതു് സ്‌ക്കൂ എന്ന് നിരത്തിയും എഴുതാവുന്ന രീതിയിൽ ഓപ്പൺടൈപ്പ് ഫീച്ചർ തയ്യാറാക്കിയാൽ ഇങ്ങനെ ചിലത് അടുക്കിയും ചിലതു് അടുക്കാതെയും വരയ്ക്കാനുള്ള സ്വാതന്ത്ര്യം ഡിസൈനർമാർക്കു കിട്ടും. , ചിഹ്നമൊക്കെ വേർപെട്ടുപോകുമോ എന്നു പേടിക്കേണ്ടതുമില്ല.

വേറൊരു സന്ദർഭത്തിലും ഇങ്ങനെ Conditional ആയി അടുക്കുകയോ അടുക്കാതെയിരിക്കുകയോ ചെയ്യേണ്ടതുണ്ട്. ഷ്ട എന്ന കൂട്ടക്ഷരം അടുക്കിയെഴുതുന്നത് വളരെ സ്വാഭാവികമാണ്. ഇഷ്ടം , കഷ്ടം എന്നിവയിലൊക്കെ. ആരെങ്കിലും കഷ്ട്ടപ്പെട്ട് എന്നെഴുതാൻ മുതിർന്നാൽ സംഭവിക്കുന്നത് എന്താണ്? ഷ് + ട + ് + ട എന്നതിലെ ആദ്യഭാഗം ഷ്ട എന്ന കൂട്ടക്ഷരത്തിനൊപ്പം പോവുകയും ബാക്കി വേറിട്ട് നിൽക്കുകയും ചെയ്യും. ഇവിടെ കഷ്‌ട്ടപ്പെട്ട എന്ന ചിത്രീകരണമാണ് അഭിലഷണീയം.

സ്ബ എന്ന കൂട്ടക്ഷരം മീരയിൽ യുടെ അടിയിൽ എന്ന രീതിയിൽ വരച്ചിട്ടുണ്ട്. പക്ഷെ സ്ബു ഉണ്ടായിരുന്നില്ല. ഫേസ്‌ബുക്ക് വളരെ പ്രചാരത്തിലായപ്പോൾ സ്ബു എന്ന കൂട്ടക്ഷരം പെട്ടെന്ന് വളരെ പ്രചാരത്തിലായി. മീരയിൽ അതു് യുടെ അടിയിൽ , തുടർന്ന് ചിഹ്നം എന്ന രീതിയിൽ വേറിട്ട് കാണും. ഒന്നുകിൽ സ്ബ യുടെ താഴെ ഉകാരം വരച്ചു ചേർത്ത് മൂന്നടുക്കുള്ള ഒരു ഗ്ലിഫ് കൂടി ഫോണ്ടിൽ ചേർക്കണം. അല്ലെങ്കിൽ സ്ബ എന്നതിന്റെ സ്റ്റാക്കിങ്ങ് കളയണം എന്ന നിലയാണ് ഉണ്ടായിരുന്നതു്. സ്ബ യ്ക്കപ്പുറം വന്നാൽ സ്ബയുടെ സ്റ്റാക്കിങ്ങ് റദ്ദ് ചെയ്യാൻ പറയാൻ സാധിച്ചിരുന്നില്ല.

വായ്പ എന്നതു വായ്പ്പ എന്നെഴുതിയാൽ ഒരു പ യയുടെ അടിയിലും മറ്റൊന്ന് മുകളിൽ വേറിട്ടും കിടക്കുന്നതു് വേറൊരുദാഹരണമാണ്:

ഈ ഒരു സാധ്യതയാണ് ഇപ്പോൾ നമ്മുടെ ഫോണ്ടുകളിൽ ഉൾക്കൊള്ളിച്ചിരിക്കുന്നതു്. സ്ക്ക അടുക്കിയും സ്ക്കൂ അടുക്കാതെയും കാണിക്കാനുള്ള ഓപ്പൺടൈപ്പ് ഫീച്ചർ ഡിസൈനർമാർക്ക് പ്രയോജനപ്പെടുത്താം. ഇതിനെയാണ് കണ്ടീഷണൽ ക്ലസ്റ്ററിങ്ങ് എന്നതുകൊണ്ടുദ്ദേശിക്കുന്നതു്.

പഴയലിപി ഫോണ്ടുകളിൽ മാത്രമൊതുങ്ങുന്നതല്ല ഈ പ്രശ്നം. അക്ഷരങ്ങളുടെ അടുക്കൽ(സ്റ്റാക്കിങ്ങ്) പുതിയലിപി ഫോണ്ടുകളിലും ഉണ്ടല്ലോ. ഉദാഹരണത്തിനു് പുതിയ ലിപി ഫോണ്ടായ നോട്ടോ സാൻസ് അല്പ്പം എന്ന വാക്ക് ചിത്രീകരിക്കുന്നതെങ്ങനെയെന്നു നോക്കൂ. നോട്ടോ ഈ പ്രശ്നം ഇതുവരെ പരിഹരിച്ചിട്ടില്ല.

സാങ്കേതിക വിശദാംശങ്ങൾ

ഫോണ്ടിൽ വരച്ചുവെച്ചിട്ടുള്ള അക്ഷരരൂപങ്ങൾ എപ്പോഴൊക്കെയാണ് ചിത്രീകരിച്ച് കാണിക്കേണ്ടത് എന്നുള്ള നിയമങ്ങളൊക്കെ ഫോണ്ടിന്റെ ഓപ്പൺടൈപ്പ് ഫീച്ചർ ഫയലിലാണ് എഴുതിവെച്ചിട്ടുള്ളത്. ഉദാഹരണത്തിന് ഒരു തനതുലിപി ഫോണ്ടിൽ തുടർന്ന് വന്നാൽ കു എന്നാണ് കാണിക്കേണ്ടത് എന്ന നിയമം ഫീച്ചർ ഫയലിലുണ്ടാകും.

ഫോണ്ടിലെ ഓരോ അക്ഷരരൂപത്തിനും പേരിട്ട് ആ പേരിലായിരിക്കും അതിനെ ഫീച്ചർഫയലിൽ ഉപയോഗിക്കുക. സ്വതന്ത്രമലയാളം കമ്പ്യൂട്ടിങ്ങ് പരിപാലിക്കുന്ന ഫോണ്ടുകളിലെല്ലാം സൗകര്യത്തിനായി അക്ഷരരൂപങ്ങളുടെ പേര് ഒരു നിയതമായ ഫോർമാറ്റിലാണ്. , , കു എന്നീ ഗ്ലിഫുകളുടെ പേരുകൾ യഥാക്രമം 'k1', 'u1', 'k1u1' എന്നാണ്.

അതായത് മേൽപ്പറഞ്ഞ നിയമം ഫീച്ചർ ഫയലിൽ കാണുക ഇങ്ങനെയായിരിക്കും.

substitute k1 u1 by k1u1;

സ്ബ എന്ന അടുക്കിയ കൂട്ടക്ഷരത്തിന്റെ ഗ്ലിഫ് 's1p3' എന്ന പേരിൽ ഫോണ്ടിലുണ്ടെന്ന് കരുതുക. ഇത് രൂപപ്പെടേണ്ടുന്ന ഭാഷാപരമായ നിയമം , , (s1, xx, p3 എന്നണിവയുടെ അക്ഷരരൂപങ്ങളുടെ പേരുകൾ) എന്നീ മൂന്ന് അടിസ്ഥാന അക്ഷരങ്ങൾ തുടർച്ചയായി വരുമ്പോഴാണെന്ന് നമുക്കറിയാം. ഇതാണ് ഫീച്ചർ ഫയലിലും എഴുതേണ്ടത്.

substitute s1 xx p3 by s1p3;

ഓപ്പൺടൈപ്പ് ഫീച്ചറിങ്ങിൽ ഇതിനെ ലിഗേച്ചർ സബ്സ്റ്റിറ്റ്യൂഷൻ എന്നാണ് വിളിയ്ക്കുക. അതായത് ഒന്നിലധികം ഗ്ലിഫുകളുടെ ഒരു കൂട്ടത്തെ കാണുമ്പോൾ അതിനു പകരം മറ്റൊരു ഗ്ലിഫ് എടുത്ത് വെയ്ക്കുന്ന രീതി.

ഇനി ഫോണ്ടിൽ സ്ബു എന്ന് മൂന്നു തട്ടിലായി അടുക്കിയെഴുതുന്ന ഗ്ലിഫ് s1p3u1 എന്ന പേരിലുണ്ടെങ്കിൽ അതിന്റെ ചിത്രീകരണ നിയമം ഫീച്ചർ ഫയലിൽ എഴുതേണ്ടത് താഴെക്കാണുമ്പോലാണ്:

substitute s1p3 u1 by s1p3u1;

അതായത് തുടർച്ചയായി , , , എന്നീ ഗ്ലിഫുകൾ വരുമ്പോൾ ആദ്യം പറഞ്ഞ നിയമപ്രകാരം സ്ബ രൂപപ്പെടുന്നു. ഇപ്പോൾ സ്ബ അതിന്റെ തുടർച്ചയായി എന്നീ ഗ്ലിഫുകളാണുള്ളത്. അടുത്ത നിയമപ്രകാരം ഇവയ്ക്കു പകരം സ്ബു എന്ന് ഒറ്റ ഗ്ലിഫ് ചിത്രീകരിക്കുന്നു.

എന്നാൽ ഫോണ്ടിൽ സ്ബു എന്ന ഒറ്റ ഗ്ലിഫില്ലെങ്കിലോ? സ്ബ, എന്നീ ഗ്ലിഫുകൾ തുടർച്ചയായി കാണിക്കാൻ മാത്രമേ ഫോണ്ടിനു കഴിയൂ. അതായത് ഒരു പഴയലിപി ഫോണ്ടിൽ ഉകാരം വേറിട്ടുകാണുകയെന്ന ഫലമാണുണ്ടാവുക.

ഇത്തരം സന്ദർഭങ്ങളിൽ സ്ബ എന്നിങ്ങനെ ചിത്രീകരിക്കാതെ സ്ബയുടെ അടുക്കൊഴിവാക്കി സ്ന്റെ തുടർച്ചയായി ബു എന്ന് കാണിയ്ക്കുകയാകും അഭികാമ്യം. അതിനാണ് സാന്ദർഭികമായി മാത്രം പകരംഗ്ലിഫ് ഉപയോഗിക്കാവുന്ന ഓപ്പൺ ടൈപ്പ് ഫീച്ചർ നാമുപയോഗിക്കുക.

Contextual substitution എന്ന ഈ രീതിയിൽ , , എന്നീ മൂന്നു ഗ്ലിഫുകൾക്കു പകരം സ്ബ എന്ന ഗ്ലിഫ് ഉപയോഗിക്കുവാനുള്ള നിയമമല്ല ഉണ്ടാവുക. പിന്നെയോ? ,, എന്നിവയുടെ തുടർച്ചയായി , (ഇവയെ നാം u1 എന്നും u2 എന്നും വിളിയ്ക്കും) എന്നിവയൊന്നും ഇല്ല എന്നു പരിശോധിച്ചുറപ്പിക്കാനുള്ള ഒരു നിയമവും അതിന്റെ തുടർച്ചയായി സ്ബരൂപപ്പെടുത്തുവാനുള്ള നിയമവും. ,, എന്നിവയുടെ തുടർച്ചയായി അല്ലെങ്കിൽ ഉണ്ടെങ്കിലോ? അപ്പോൾ സ്ബ രൂപപ്പെടില്ല. പിന്നെ അവിടെയുള്ള അടുത്ത സാദ്ധ്യത , ഇവ ചേർന്ന് ബു രൂപപ്പെടുകയാണ്.ഇതിനുള്ള സാദാ സബ്സ്റ്റിറ്റ്യൂഷൻ നിയമം ഫോണ്ടിലുണ്ടാകും.

ഇവിടെ നാം പരിശോധിയ്ക്കുന്ന സന്ദർഭം (Context) തുടർച്ചയായി s1, xx, p3 എന്നിവയും പിന്നാലെ u1 അല്ലെങ്കിൽ u2 എന്നിവയും വരുന്നുണ്ടോയെന്നാണ്. ഉണ്ടെങ്കിൽ സ്ബ രൂപപ്പെടാനുള്ള നിയമം അവഗണിയ്ക്കണം. ഇല്ലെങ്കിൽ സ്ബ രൂപപ്പെടണം.

ignore sub s1' xx' p3' [u1 u2]; sub s1' xx' p3' by s1p3;

ഇവിടെ [u1 u2] എന്നത് ഒരു ക്ലാസ്സ് ആണ്. ഇതിലെ അംഗങ്ങളാണ് u1, u2 എന്നീ ഗ്ലിഫുകൾ. ഇവയിലേതു വന്നാലും നിയമം അവയെ ഒരുപോലെ കണക്കിലെടുക്കും.ഗ്ലിഫിന്റെ പേരിനൊപ്പം നിയമത്തിൽ ' എന്ന ചിഹ്നം ശ്രദ്ധിച്ചിട്ടുണ്ടാകും. s1, xx, p3, [u1 u2] ഇവ ഒരുമിച്ചു വരുന്നുണ്ടോ എന്നു പരിശോധിക്കുന്ന സന്ദർഭത്തിനു തുടർച്ചയായി നാം സബ്സ്റ്റിറ്റ്യൂഷൻ നിയമം പ്രയോഗിക്കാനുദ്ദേശിക്കുന്നത് s1, xx, p3 ഇവയ്ക്ക് മാത്രമാണ്. അത് സൂചിപ്പിയ്ക്കുവാനാണ് അവയുടെ പേരിനൊപ്പം ' എന്നു ചേർത്ത് s1' xx' p3' എന്ന് ഫീച്ചർ ഫയലിലെ നിയമത്തിൽ ചേർത്തിരിക്കുന്നത്.

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

പുതുക്കിയ ഫോണ്ടുകൾ

മീര, മഞ്ജരി, രചന എന്നീ ഫോണ്ടുകളിൽ ആണ് ഇപ്രകാരമുള്ള പുതുക്കലുകൾ വരുത്തിയിട്ടുള്ളതു്. അവ സ്വതന്ത്ര മലയാളം കമ്പ്യൂട്ടിങ്ങിന്റെ ഫോണ്ട് ഡൌൺലോഡ് പേജിൽ നിന്നുമെടുക്കാം. ബാക്കി ഫോണ്ടുകളിലും മേൽപ്പറഞ്ഞ പുതുക്കലുകൾ അധികം വൈകാതെ ചെയ്യുന്നതാണ്.

അടിക്കുറിപ്പ്(1): കഷ്ട്ടം, കയ്പ്പ് എന്നിവ അക്ഷരത്തെറ്റുകളല്ലേ, അവയെ ഫോണ്ടെന്തിനാണ് പിന്തുണയ്ക്കുന്നതെന്നു ചിലർക്കു സംശയം തോന്നാം. അക്ഷരത്തെറ്റുകളുണ്ടോ ഇല്ലയോ എന്നതു ഫോണ്ടിന്റെ ഡിസൈനിൽ ഒരു ഘടകമല്ല. അക്ഷരത്തെറ്റുള്ള ഒരു വാക്കാണെങ്കിലും ഭാഷയുടെ ചിത്രീകരണനിയമമനുസരിച്ചു് ചിത്രീകരിക്കുക മാത്രമാണ് ഫോണ്ടിന്റെ ജോലി.

അടിക്കുറിപ്പ്(2): ZWNJ പോലുള്ള ക്യാരക്ടറുകളുപയോഗിച്ച് സ്റ്റാക്കിങ്ങ് ഒഴിവാക്കി കഷ്ട്ടപ്പാട് എന്നൊക്കെ ശരിയാക്കി എഴുതിക്കൂടെ, എന്തിനാണ് ഫോണ്ടിൽ ഇവയുടെ സ്റ്റാക്കിങ്ങ് നിയന്ത്രിക്കുന്നതു് എന്നു ചിലർക്കു സംശയം തോന്നാം. അക്ഷരത്തെറ്റുണ്ടോ ഇല്ലയോ എന്നതിന്റെ കാര്യം പറഞ്ഞപോലെത്തന്നെ, ഫോണ്ടിന്റെ ജോലി ചിത്രീകരണത്തിൽ മാത്രം ഒതുങ്ങുന്നു. ZWNJ ഇട്ടോ, ഇടാതെയോ എങ്ങനെയെഴുതുയാലും ഭാഷയുടെ ചിത്രീകരണനിയമമനുസരിച്ചു് ചിത്രീകരിക്കുക മാത്രമാണ് ഫോണ്ടിന്റെ ധർമ്മം.

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