Number spellout and generation in Malayalam using Morphology analyser

Writing a number 6493 as six thousand four hundred and ninety three is known as spellout of that number. The most familiar example of this is in cheques. Text to speech systems also need to convert numbers to words.

Source: https://commons.wikimedia.org/wiki/File:Sample_cheque.jpeg by User:Tshrinivasan

The reverse process of this, to convert a phrase like six thousand four hundred and ninety three to number 6493 – the number generation, is also common. In software, it is often required in Speech recognition and in general any kind of semantic analysis of text.

Numbers and its conversion to English words is not really a complex problem to solve with a computer. But how about other languages? In this article, I am discussing the nature of these words in Malayalam and an approach to parse the number and numbers written in words.

Malayalam number spellout

In Malayalam, the spellout of numbers forms a single word. For example, a number 108 is നൂറ്റെട്ട് – a single word. This word is formed by adjective form of നൂറ്(100) and എട്ട്(8). While these two words are glued, Malayalam phonological rules are also applied, resulting this single word നൂറ്റെട്ട്. This word formation characteristics are present for almost all possible numbers you can imagine. Parsing the number നൂറ്റെട്ട് and interpreting it as 108 or converting 108 to നൂറ്റെട്ട് is an interesting problem in Malayalam computing.

I came across this problem while I was trying to develop a dictionary based spellchecker years back. Such a dictionary should have all these single words for all possible numbers, right? Then how big it will be? Later when I was researching on Malayalam morphology analyser, I again encountered this problem. You cannot have all these words in lexicon as entries – it is not practical. At the same time, you should be able to parse these words and and also generate with correct morpho-phonological rules of Malayalam.

Like I mentioned in my introduction article of my Malayalam morphological analyser,  project, Malayalam is a heavily agglutinative language. While I was learning the Finite transducer technology, Malayalam number words were one of the obvious candidates to try out. These numbers perfectly model Malayalam word formations. They get agglutinated and inflected, during which morpho-phonological rules get applied. നൂറ്റെട്ടിലായിരുന്നു, നൂറ്റെട്ടിനെ, നൂറ്റെട്ടോ? നൂറ്റെട്ടാം, നൂറ്റെട്ടാമത്തെ, നൂറ്റെട്ടര  – All are examples of words you get on top number word നൂറ്റെട്ട്. Also, it is not two word agglutination, പതിനാറായിരത്തൊരുനൂറ്റെട്ട് – 16108 is an example where പതിനാറ്(16), ആയിരം(1000), നൂറ്(100), എട്ട്(8) – all joined to form a single word. In fact this is a common word you often see in literature because of this myth about Lord Krishna. The current year, 2017 is often written as രണ്ടായിരത്തിപ്പതിനേഴ്.

Let us examine a nature of these word formation.

Ones

Numbers between 0 and 9 has words as പൂജ്യം, ഒന്ന്, രണ്ട്, മൂന്ന്, നാല്, അഞ്ച്, ആറ്, ഏഴ്, എട്ട്, ഒമ്പത് respectively. The word ഒമ്പത് is sometimes written as ഒൻപത് too, which is phonetically similar to ഒമ്പത്. Each of these words ending with Virama(്) is sometimes written with Samvruthokaram too. ഒന്ന് – ഒന്നു്, രണ്ടു്, മൂന്നു്, നാലു് etc.

Tens

Number 10 is പത്ത്. Multiples of tens till 80 follows the rough pattern:

Adjective form of [രണ്ട്|മൂന്ന്|നാല്|അഞ്ച്|ആറ്|ഏഴ്|എട്ട്] + പത്.

So, they are ഇരുപത്(20), മുപ്പത്(30), നാല്പത്(40), അമ്പത്(50), അറുപത്(6), എഴുപത്(70), എൺപത്/എമ്പത്(80). But at 90, a new form emerges – തൊണ്ണൂറ് – Which has no root on ഒമ്പത് (9). Instead it is more like something before നൂറ്(100).

The numbers 11-19 are unique words. പതിനൊന്ന്, പന്ത്രണ്ട്, പതിമൂന്ന്, പതിനാല്, പതിനഞ്ച്, പതിനാറ്, പതിനേഴ്, പതിനെട്ട്, പത്തൊമ്പത് respectively.

All other two digit numbers between the multiples of tens follow the following pattern

[Word for 10x] + [Word for Ones]

So, 21 is ഇരുപത്(20)+ ഒന്ന്(1). But to form a single word, An adjective form is used, which is similar to female gender inflection of Malayalam nouns- ഇരുപത്തി + ഒന്ന് . Phonological rules should be applied to combine these two words. The vowel sign ി(i) at the end of ഇരുപത്തി  will introduce a new consonant യ(ya). Also the first letter of ഒന്ന് – the vowel ഒ will change to its vowel sign form ൊ. So we get ഇരുപത്തി + യ + ൊന്ന്. It results ഇരുപത്തിയൊന്ന്. This phonological rule is actually Agama Sandhi / ആഗമ സന്ധി as per Malayalam grammer rules. But, ഇരുപത്തിയൊന്ന് has a more propular form, ഇരുപത്തൊന്ന് which is generated by dropping ി + യ from the generation process.

The words for 20s can be generated similarly. ഇരുപത്തിരണ്ട്(22), ഇരുപത്തിമൂന്ന്(23), ഇരുപത്തിനാല്(24),  ഇരുപത്തിയഞ്ച്/ഇരുപത്തഞ്ച്(25), ഇരുപത്തിയാറ്/ഇരുപത്താറ്(26), ഇരുപത്തിയേഴ്/ഇരുപത്തേഴ്(27), ഇരുപത്തിയെട്ട്/ഇരുപത്തെട്ട്(28), ഇരുപത്തിയൊമ്പത്/ഇരുപത്തൊമ്പത്(29). For all other two digit numbers the pattern is same. Note that തൊണ്ണൂറ് (90) has the prefix form തൊണ്ണൂറ്റി. So 98 is തൊണ്ണൂറ്റിയെട്ട്/തൊണ്ണൂറ്റെട്ട്.

Hundreds

100 is നൂറ്. Its prefix form is നൂറ്റി. Multiples of 100s is somewhat similar to multiples of 10s we saw above. They are ഇരുന്നൂറ്(200), മുന്നൂറ്(300), നാനൂറ്(400), അഞ്ഞൂറ്(500), ആറുനൂറ്(600), എഴുന്നൂറ്(700), എണ്ണൂറ്(800), തൊള്ളായിരം(900). Here also the 900 deviates from others. The word is related to 1000(ആയിരം) than 100 – Just like the case of 90-തൊണ്ണൂറ് we discussed above.

Forming 3 digits numbers is, in general the prefix of multiple of hundred followed by Tens we explained above. So 623 is അറുനൂറ് + ഇരുപത്തിമൂന്ന്  = അറുനൂറ്റിയിരുപത്തിമൂന്ന് or the more popular and short form അറുനൂറ്റിരുപത്തിമൂന്ന്. 817 is എണ്ണൂറ്റി+ പതിനേഴ് = എണ്ണൂറ്റിപ്പതിനേഴ് with gemination of consonant പ as per phonological rule. 999 is തൊള്ളായിരത്തിത്തൊണ്ണൂറ്റിയൊമ്പത് or തൊള്ളായിരത്തിത്തൊണ്ണൂറ്റൊമ്പത്  or തൊള്ളായിരത്തിത്തൊണ്ണൂറ്റിയൊൻപത്.

Numbers between 100-199 may optionally prefixed by ഒരു – Adjective form of ഒന്ന്(1).  101 – ഒരുന്നൂറ്റിയൊന്ന് 122-ഒരുന്നൂറ്റിയിരുപത്തിരണ്ട് etc. നൂറ്(100) can be also ഒരുന്നൂറ്

Thousands

1000 is ആയിരം. ആയിരത്തി is prefix for all other 4 digit numbers till 1 lakh(ലക്ഷം 100000). Multiples of 1000 can be generated by suffixing ആയിരം. For example, 4000  is നാല് + ആയിരം = നാലായിരം. 6000 – ആറായിരം. But 5000 is അയ്യായിരം, and അഞ്ചായിരം is less popular version. 8000 is എട്ട് + ആയിരം = എട്ടായിരം, but എണ്ണായിരം is popular form.  10000 is പത്ത് + ആയിരം = പത്തായിരം. But പതിനായിരം is the more familiar version. പതിനായിരം is the suffix for multiples of 10K. They are ഇരുപതിനായിരം, മുപ്പതിനായിരം, നാല്പതിനായിരം, അമ്പതിനായിരം, അറുപതിനായിരം, എഴുപതിനായിരം, എൺപതിനായിരം, തൊണ്ണൂറായിരം. 3000 is മുവ്വായിരം than മൂന്നായിരം. So 73000 is എഴുപത്തിമുവ്വായിരം or എഴുപത്തിമൂന്നായിരം.

Numbers between 1000-1999 may optionally prefixed by ഒരു – Adjective form of ഒന്ന്(1).  1008 – ഒരായിരത്തിയെട്ട് 1122-ഒരായിരത്തിയൊരുന്നൂറ്റിയിരുപത്തിരണ്ട് etc. ആയിരം(1000) can be also ഒരായിരം.

Lakhs & Crores

100, 000 is ലക്ഷം. ലക്ഷത്തി is prefix. 1,00, 00, 000 is കോടി. കോടി itself is prefix. 12,00,90 is  പന്ത്രണ്ടുലക്ഷത്തിത്തൊണ്ണൂറ്. 99,00,00,00,00,00,00 is തൊണ്ണൂറ്റൊമ്പതുലക്ഷംകോടി.

Why morphology analyser?

From the above explanation of word formation for numbers in Malayalam, one can see that there are patterns and there are lot of exceptions. But still, isn’t it possible to write a generator using just a rule based program in a programming language. I  would agree. Yes, it is possible. But other than mapping these numbers to word forms, handling exceptional rules, there are a few other things also we saw. When words are agglutinated, there are phonological rules in action. Also, I said that these words can be inflected again. We also want the bidirectional conversion – not just word generation, but converting those words back into a number. All these will make such a program so complicated and it has to duplicate so many things from morphology analyser. That is why I used morphology analyser here.

What are the morphemes in a string like ആയിരത്തിത്തൊള്ളായിരത്തിത്തൊണ്ണൂറ്റിയാറ്? ആയിരം, തൊള്ളായിരം, തൊണ്ണൂറ്, ആറ്? Sounds good, but we see that  തൊള്ളായിരം is ഒമ്പത്, നൂറ്. and തൊണ്ണൂറ് is ഒമ്പത്, പത്ത്. So expanding it, we get ആയിരം, ഒമ്പത്, നൂറു, ഒമ്പത്, പത്ത്, ആറ്. But this sequence does not make any sense of the single word it created. What is missing? Can we consider തൊള്ളായിരം, തൊണ്ണൂറ് as single morphemes? We can, but…

  • If  തൊള്ളായിരം is a morpheme, it means, it is in a lexicon. That makes all other 3 digit number also eligible to be listed as items in lexicon. So ultimately, we go back to the large lexicon/dictionary issue I mentioned in the beginning of the article.
  • Semantically, any number spellout is originated from Ones and their place value. So തൊണ്ണൂറ് is 9<tens>.

I have not seen any morphology analyser dealing with number spellout. It seems Malayalam numbers are so unique in this aspect. I read a few academic papers on dealing with this complexity using Rule based approaches(See References) and an automata like paradigm language(Richard Gillam – A Rule-Based Approach to Number Spellout).

The approach I derived after trying out some choices is as follows:

  • Introduce morphology tags for positional values. This is similar to POS tags, but here we apply for number spellouts. <ones>, <tens>, <hundreds>, <thousands>, <lakhs>, <crores> are those tags.
  • Parse a spellout to reach the atomic morphemes in a number spellout – they are ഒന്ന്, രണ്ട്, മൂന്ന്, നാല്, അഞ്ച്, ആറ്, ഏഴ്,എട്ട്, ഒമ്പത്, പൂജ്യം.
  • These morphemes will have the tags mentioned above.

To illustrate this, let use use some examples,

As you can observe, only the atomic numbers are used as morphemes and place values are indicated using tags. You can also see that the analysis is easy to interpret for a program to generate the number.

For example, if the analysis is രണ്ട്<ones><thousands> ഒന്ന്<tens> ഏഴ്<ones>,  replace the words with its numbers, tags by position value. You get

2*1*1000 + 1*10 + 7*1  =  2000+10+7 = 2017

I said that, the advantage of morphology analyser is you can generate the word from analysis strings. The bidirectional property. This means, if you have a number, you can generate the spellout. For that we first need to some maths on the number. For example, for same number 2017, we can divide incrementally by lakhs, thousands, hundreds, tens and arrive at the following formation

2017 = 2*1000 + 0*100 + 1*10+ 7*1

Which can be converted to:

രണ്ട്<thousands>ഒന്ന്<tens>ഏഴ്<ones>

The morphology analyser can easily generate the word രണ്ടായിരത്തിപ്പതിനേഴ് by applying all grammatical rules.

 

If you are eager to try out this conversion, I wrote a quick javascript based number to word convertor using the APIs of morphology analyser.

See the Pen Malayalam number parser by Santhosh Thottingal (@santhoshtr) on CodePen.

I did not write a convertor from the spelled out word to number. You are free to write one. The web interface of mlmorph is available for trying out some analysis too – https://morph.smc.org.in/

Inflections

Some illustrations on inflected spellout analysis

Ordinals

Ordinal form of numbers are used to show position. Examples are first, third etc. In Malayalam examples are ഒന്നാം, പതിനെട്ടാം ഏഴാമത്, ഒമ്പതാമത്തെ etc.  Supporting those forms is just like inflections. See the below screenshot

Technical details

Known issues

  • Some commonly used forms like മുപ്പത്തിമുക്കോടി is not supported yet.There are also variations like മുവ്വായിരം, മൂവായിരം.
  • If there are are multiple ways to generate a number word, the system generates all such forms. But some of these forms may be very obscure and not used at all.
  • There is a practice to insert space after some prefixes like ആയിരത്തി, ലക്ഷത്തി, കോടി. In the model I assumed the words are generated as single word.

Summary

We analysed the word formation for the spellout of the numbers in Malayalam. Usage of morphology analyser for analysis and generation of these word forms are introduced. A demo program that converts numbers to its word forms considering all morphophonological rules are presented. Algorithm for spelled out word to number conversion is given with example. Programmable API and Web API is given for the system.

References

Towards a Malayalam morphology analyser

Malayalam is a highly inflectional and agglutinative language. This has posed a challenge for all kind of language processing. Algorithmic interpretation of Malayalam’s words and their formation rules continues to be an untackled problem.  My own attempts to study and try out some of these characteristics was big failure in the past. Back in 2007, when I tried to develop a spellchecker for Malayalam, the infinite number of words this language can have by combining multiple words together and those words inflected was a big challenge. The dictionary based spellechecker was a failed attempt. I had documented these issues.

I was busy with my type design  projects for last few years, but continued to search for the solution of this problem. Last year(2016), during Google summer of code mentor summit at Google campus, California, mentors working on language technology had a meeting and I explained this challenge. It was suggested that I need to look at Finnish, Turkish, German and such similarly inflected and agglutinated languages and their attempts to solve this. So, after the meeting, I started studying some of the projects – Omorfi for Finnish, SMOR for German, TRMorph for Turkish. All of them use Finite state transducer technology.

There are multiple FST implementation for linguistic purposes – foma, XFST – The Xerox Finite State Toolkit, SFST – The Stuttgart Finite State Toolkit and HFST – The Helsinki Finite State Toolkit. I chose SFST because of good documentation(in English) and availability of reference system(TRMorph, SMOR).  And now we have mlmorph  – Malayalam morphology analyser project in development here:  https://github.com/santhoshtr/mlmorph

I will document the system in details later. Currently it is progressing well. I was able to solve arbitrary level agglutination with inflection. Nominal inflection and Verbal inflections are being solved one by one. I will try to provide a rough high level outline of the system as below.

  • Lexicon: This is a large collection of root words, collected and manually curated, classified into various part of speech categories. So the collection is seperated to nouns, verbs, conjunctions, interjections, loan words, adverbs, adjectives, question words, affirmatives, negations and so on. Nouns themselves are divided to pronouns, person names, place names, time names, language names and so on. Each of them get a unique tag and will appear when you analyse such words.
  • Morphotactics: Morphology rules about agglutination and inflection. This includes agglutination rules based on Samasam(സമാസം) – accusative, vocative, nominative, genitive, dative, instrumental, locative and sociative. Also plural inflections, demonstratives(ചുട്ടെഴുത്തുകൾ) and indeclinables(അവ്യയങ്ങൾ). For verbs, all possible tense forms, converbs, adverbal particles, concessives(അനുവാദകങ്ങൾ) and so on.
  • Phonological rules: This is done on top of the results from morphotactics. For example, from morphotactics, ആൽ<noun>, തറ<noun>, ഇൽ<locative> will give ആൽ<noun>തറ<noun>ഇൽ<locative>. But after the phonological treatment it becomes, ആൽത്തറയിൽ with consonant duplication after ൽ, and ഇ becomes യി.
  • Automata definition for the above: This is where you say nouns can be concatenated any number of times, following optional inflection etc in regular expression like language.
  • Programmable interface, web api, command line tools, web interface for demos.

What it can do now? Following screenshot is from its web demo. You can see complex words get analysed to its stems, inflections, tense etc.

Note that this is bidirectional. You can give a complex word, it will give analysis. Similarly when you give root words and POS tags, it will generate the complex word from it. For example:

ആടുക<v><past>കൊണ്ടിരിക്കുക<v><present> =>  ആടിക്കൊണ്ടിരിക്കുന്ന

Covering all possible word formation rules for Malayalam is an ambitious project, but let us see how much we can achieve. Now the effort is more on linguistic aspects of Malayalam than technical. I will update about the progress of the system here.

 

 

Indesign CC automatic hyphenation for Indian languages

More and more publishers are starting to use Indesign CC and Unicode. One of the many adavantages the publishers get with unicode and Indesign cc is automatic hyphenation. A few of my friends told me that they don’t know how to use hyphenation. Eventhough I never used Indesign before, I decided to figure out. In my Windows 10 virtual machine, I installed Indesign CC 2018.

Following is a tutorial on how to get perfect hyphenation for text in Indian languages in Indesign. I use Malayalam as example.

Indesign CC 2018 comes with Hunspell hyphenation dictionaries. These hyphenation dictionaries are written by me long time back. See https://github.com/smc/hyphenation

From menu Edit-> Preferences->Dictionary, set Language and Hyphenation as “Hunspell”

Create a text frame and add content to it. Make sure that the composer is set as Adobe World-Ready paragraph composer. You can access it from Paragraph settings as shown below. Without this settings, the Indic text won’t render correctly.

Tick the “Hyphenation” from the paragraph settings. Select an appropriate font for the content. Choose the language of the content as Malayalam or other Indic language you are working on. See screenshot below. Justify the content.

The content will get automatically hyphenated. If you resize the column width or insert more content, text will get automatically hyphenated.

The exported PDF will look like:

You can see the hyphenation rules in Installation folder: C:\Program Files\Adobe\Adobe InDesign CC 2018\Resources\Dictionaries\LILO\Linguistics\Providers\Plugins2\AdobeHunspellPlugin\Dictionaries

Patterns are available for Assamese, Bengali, Panjabi, Gujarati, Assamese, Marathi, Tamil, Telugu, Odia, Kannada and Malayalam.

I have not tried older Indesign versions, so I don’t know from which version this feature is available. But I don’t see a reason for not using latest version either.

Scribus gets Malayalam Hyphenation support

Scribus now has support for Malayalam hyphenation.

I filed a bug report to add Malayalam hyphenation rules to Scribus and it is now added to scribus. The hyphenation rules are based on the TeX hyphenation patterns I wrote.

How to use

You need scribus 1.5.4 or later. It is not yet available as release while I am writing this. But once released you can get from https://www.scribus.net/downloads/

  • Start a new document. Add text frames and content. You will need narrow columns to have wordbreaking contexts. For example 2 columns as I use for demo here.
  • Select the text and set font as a Malayalam font like Manjari, Set the language as Malayalam.
  • In Hyphenation properties, set hyphenation character as blank, otherwise visible hyphens will appear.
  • Set the text justified.
  • From menu Extras->Hyphenate text. Done.

Here is the output:

Hyphenated two column content

 

മഞ്ജരി ഫോണ്ട് – പതിപ്പ് 1.3

മഞ്ജരി ഫോണ്ടിന്റെ 1.3 പതിപ്പ് ഇപ്പോൾ ലഭ്യമാണു്.

പ്രധാന മാറ്റങ്ങൾ ഇവയാണ്:

  • കണ്ടീഷണൽ സ്റ്റാക്കിങ്ങ് സംവിധാനം കൂടുതൽ അക്ഷരരൂപങ്ങളിലേക്ക് കൊണ്ടുവന്നു. കൂടുതൽ വിവരങ്ങൾ സ്വതന്ത്ര മലയാളം കമ്പ്യൂട്ടിങ്ങ് ബ്ലോഗിൽ: https://blog.smc.org.in/conditional-stacking/
  • ഫോണ്ട് ഇപ്പോൾ TTF നു പകരം OTF ഫോർമാറ്റിൽ ആണ് സ്വതവേ വരുന്നതു്. മഞ്ജരി രൂപകല്പന ചെയ്തത് OTF ഫോർമാറ്റ് മുന്നിൽ കണ്ടായിരുന്നെങ്കിലും(ക്യുബിക് ബെസിയർ കർവുകൾ) എല്ലാ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളിലും കുറ്റമറ്റതായി കാണാത്തതുകൊണ്ട് TTF ൽ ആയിരുന്നു ആദ്യം പുറത്തിറക്കിയതു്. ഇപ്പോൾ ആ പ്രശ്നങ്ങളൊക്കെ പരിഹരിച്ചിട്ടുണ്ടു്. TTF, Webfonts എന്നിവയും വേണമെങ്കിൽ ഡൌൺലോഡ് ചെയ്യാം.
  • ഫോണ്ട് ഫോർജ് ആയിരുന്നു മഞ്ജരിയടക്കമുള്ള എല്ലാ ഫോണ്ടുകളും എഡിറ്റ് ചെയ്യാൻ ഞങ്ങൾ ഉപയോഗിച്ചിരുന്നതു്. വളരെ പഴയ ആ സോഫ്റ്റ്‌‌വെയർ അതിന്റെ ഡെവലപ്മെന്റ് പതിയെ നിർത്തുകയാണ്. Unified Font Object ഫോർമാറ്റിലേക്ക് എല്ലാ ഫോണ്ടുകളുടെയും സോഴ്സ് കോഡ് മാറുകയും Trufont പോലുള്ള പുതിയ എഡിറ്റർ വരുകയും ചെയ്യുന്നുണ്ട്. ഈ മാറ്റത്തിനൊപ്പം പോകാൻ ആദ്യമായി മഞ്ജരിയുടെ സോഴ്സ് കോഡ് UFO ഫോർമാറ്റിലേക്ക് മാറ്റി. ബാക്കി ഫോണ്ടുകളും പതിയെ അങ്ങനെ മാറ്റി ഫോണ്ട് ഫോർജുമായുള്ള ബന്ധം ഉപേക്ഷിക്കും.

പുതിയ ഫോണ്ടുകൾ ഡൌൺലോഡ് ചെയ്യാൻ: https://smc.org.in/fonts/#manjari

സോഴ്സ് കോഡ്, ഇഷ്യൂ ട്രാക്കർ: https://gitlab.com/smc/manjari/

1.2 പതിപ്പിൽ യൂണിക്കോഡ് 10 ൽ മലയാളത്തിൽ വന്ന കുറച്ച് അക്ഷരങ്ങൾ ചേർത്തിരുന്നു.

മലയാളം അകാരാദിക്രമം

ഓരോ ഭാഷയിലും അതിലെ ലിപികളെ ഒരു പ്രത്യേക ക്രമത്തിൽ എഴുതുന്ന ഒരു കീഴ്‌വഴക്കം ഉണ്ടു്. ഇംഗ്ലീഷിൽ A,B,C,D എന്ന ക്രമമാണെങ്കിൽ മലയാളത്തിലത് അ, ആ, ഇ, ഈ എന്നിങ്ങനെ തുടങ്ങുന്ന ക്രമമാണുള്ളതു്. ഇങ്ങനെ ഒരു കീഴ്‌വഴക്കം കൊണ്ടു് പല പ്രയോജനങ്ങളുമുണ്ടു്. നമുക്കെല്ലാം പരിചയമുള്ള നിഘണ്ടുവിൽ നോക്കലും,  കുറേ പേരുടെ പട്ടികയിൽ നിന്നെളുപ്പത്തിൽ ഒന്ന് കണ്ടുപിടിക്കലും ഒക്കെ ഉദാഹരണം. കീഴ്‌വഴക്കം എന്നതിൽ കവിഞ്ഞ് എന്തെങ്കിലും കൃത്യമായ ശാസ്ത്രീയതയൊന്നും ഈ ക്രമീകരണത്തിൽ കാണണമെന്നില്ല.

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

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

നിഘണ്ടുക്കളിലെ അകാരാദിക്രമം

മലയാളത്തിലെ നിഘണ്ടുക്കൾ പരിശോധിച്ചാൽ അവയുടെ ആമുഖത്തിൽ തന്നെ ഉപയോഗിച്ചിരിക്കുന്ന ക്രമത്തിനെപ്പറ്റി ചെറിയ വിവരണം കാണാനാകും. സ്വരാക്ഷരങ്ങൾ, അഞ്ച് വ്യഞ്ജനങ്ങൾ എന്നീ ക്രമം എല്ലാവരും പാലിക്കുന്നുണ്ടു്. എങ്കിലും ഗുണ്ടർട്ടിന്റെ നിഘണ്ടുവിൽ യ, ര, റ എന്ന ക്രമമാണുള്ളതു്. അതേസമയം ശബ്ദതാരാവലി റ ഏറ്റവും അവസാനം കൊടുക്കുന്നു. ചില്ലുകൾ, കൂട്ടക്ഷരങ്ങൾ എന്നിവയുടെ കാര്യത്തിലും വലിയ വ്യത്യാസങ്ങൾ കാണുന്നുണ്ടു്. അതുകൊണ്ടു് ഏതെങ്കിലും ഒരു നിഘണ്ടു ശരിയാണെന്നോ മറ്റൊന്ന് തെറ്റാണെന്നു പറയാനോ കഴിയില്ല. ഓരോ നിഘണ്ടുവും സ്വീകരിച്ച ക്രമങ്ങളും അതിനു പിന്നിലെ യുക്തിയോ വിശദീകരണമോ മനസ്സിലാക്കാൻ ശ്രമിക്കുക എന്നതിനുമാത്രമേ പ്രസക്തിയുള്ളൂ.

ഈ പ്രശ്നം നിഘണ്ടു പ്രസാധകർ തന്നെ നന്നായി തിരിച്ചറിഞ്ഞിട്ടുണ്ട്. ശബ്ദതാരാവലിയുടെ നാലാംപതിപ്പിന് പ്രസാധകൻ ശ്രീ പി ദാമോദരൻനായർ എഴുതിയ ആമുഖത്തിലെ താഴെക്കൊടുത്തിരിക്കുന്ന ഭാഗം നോക്കൂ.

നിഘണ്ടുക്കൾക്കു പുറമേ കേരള സർക്കാറിന്റെ സർവ്വവിജ്ഞാനകോശത്തിലും ഒരു പ്രത്യേക അകാരാദിക്രമം പിന്തുടരുന്നുണ്ടു്.

ഇവയെല്ലാം ഓരോ ലിപിഗണങ്ങളുടെ അകാരാദിക്രമം വിശദീകരിക്കുമ്പോൾ ഓരോന്നായി പരിചയപ്പെടാം.

സ്റ്റാൻഡേഡുകൾ, ലൈബ്രറികൾ

അകാരാദിക്രമത്തിന്റെ അടിസ്ഥാന തത്വം രണ്ടു വാക്കുകൾ അല്ലെങ്കിൽ ഒന്നോ അധിലധികമോ അക്ഷരങ്ങളുടെ ഒരു ശ്രേണി കിട്ടിയാൽ ഏത് ആദ്യം ക്രമീകരിക്കണം എന്ന String comparison അൽഗോരിതമാണ്. ഈ അൽഗോരിതം എല്ലാ വാക്കുകൾക്കും അപ്ലൈ ചെയുമ്പോൾ ആ വാക്കുകളെല്ലാം ക്രമത്തിലാവും. ഈ അൽഗോരിതത്തെ സംബന്ധിക്കുന്ന പ്രധാന മാനകം ISO 14651 ആണ്.

ISO/IEC 14651:2011, Information technology — International string ordering and comparison — Method for comparing character strings and description of the common template tailorable ordering, is an ISO Standard specifying an algorithm that can be used when comparing two strings.

ഈ മാനകമനുസരിച്ചു് ഒന്നിലധികം കൊളേഷൻ സ്പെസിഫിക്കേഷനുകളും ഡാറ്റ സെറ്റുകളും ഉണ്ടു്. അതിലെ ഏറ്റവും പ്രധാനം യുണിക്കോഡ് കൊളേഷൻ അൽഗോരിതം (UCA) ആണ്. യുണിക്കോഡ് എന്ന വലിയ സ്റ്റാൻഡേഡിനകത്ത് ടെക്നിക്കൽ റിപ്പോർട്ട് 10 ആയി വരുന്ന ഈ സ്പെസിഫിക്കേഷൻ , അതിന്റെ കൂടെത്തന്നെ യുണിക്കോഡ് എൻകോഡ് ചെയ്തിട്ടുള്ള എല്ലാ കാരക്ടറുകളുടെയും കൊളേഷൻ ക്രമം പ്രതിപാദിക്കുന്ന Default Unicode Collation Element Table (DUCET)ഇതാണ് ഇന്നത്തെ കാലത്തെ ഏതു ഭാഷയിലെയും അക്ഷരങ്ങളുടെ ക്രമം നിർവചിക്കുന്ന അടിസ്ഥാന പ്രമാണം.

ഈ സ്പെസിഫിക്കേഷൻ പക്ഷേ അതിന്റെ തന്നെ നിർവചനമനുസരിച്ചു് പ്രായോഗികമായി ഉപയോഗിക്കുന്നതിനു് അപൂർണ്ണമാണ്. ഭാഷാ നിയമങ്ങൾ ഇതിന്റെ മുകളിൽ ചേർത്ത് ടെയിലർ ചെയ്യണമെന്ന് അതുതന്നെ അനുശാസിക്കുന്നു.

Tailoring consists of any well-defined change in the Collation Element Table and/or any well-defined change in the behavior of the algorithm. Typically, a tailoring is expressed by means of a formal syntax which allows detailed manipulation of values in a Collation Element Table, with or without an additional collection of parametric settings which modify specific aspects of the behavior of the algorithm. A tailoring can be used to provide linguistically-accurate collation, if desired.

ഇങ്ങനെ ഭാഷയ്ക്കനുരൂപമാക്കിയ ക്രമീകരണ നിയമങ്ങൾ Unicode Common Locale Data Repository [CLDR] എന്ന റിപ്പോസിറ്ററിയിലാണുള്ളതു്. യുണിക്കോഡ് അധിഷ്ഠിതമായ അൽഗോരിതങ്ങൾക്കും മറ്റുമുള്ള ഡാറ്റ സന്നദ്ധപ്രവർത്തകരാണ് ഇവിടെ സംഭരിക്കുന്നതു്. ആർക്കും ഇതിലേക്ക് ഡാറ്റകൾ ചേർക്കുകയും തിരുത്തുകയും ചെയ്യാം. CLDR ൽ യുണിക്കോഡ് കൊളേഷൻ അൽഗോരിതത്തിന്റെ മുകളിലുള്ള, ലിംഗ്വിസ്റ്റിക് കറക്ഷനുകൾ ചെയ്യാനുള്ള തരത്തിൽ CLDR Collation അൽഗോരിതവും ഉണ്ടു്.

പക്ഷേ ഇതൊക്കെയും അൽഗോരിതവും ഡാറ്റയും മാത്രമാണല്ലോ. അതിന്റെ പുറത്തു് ആരെങ്കിലും ശരിക്കും വാക്കുകൾ ക്രമീകരിക്കാനുള്ള പ്രോഗ്രാം എഴുതണമല്ലോ. അങ്ങനെ എഴുതിയ സോഫ്റ്റ്‌വെയർ ലൈബ്രറികളിലൊന്നാണ് ICU Project – International Components for Unicode. ഈ ലൈബ്രറി ഉപയോഗിച്ച് ഒരു അപ്പ്ലിക്കേഷന് ഏതു ഭാഷയ്ക്കുമുള്ള ക്രമീകരണം സാധ്യമാക്കാം.

GNU C library localedata

നേരത്തെ പറഞ്ഞ ISO 14561 അനുസരിച്ചുള്ള വേറെയും അൽഗോരിതവും അതനുസരിച്ച് ഉള്ള അപ്ലിക്കേഷൻ ലൈബ്രറികളുമുണ്ടു്. അതിൽ പ്രധാനം GNU സി ലൈബ്രറിയാണ്. സ്വതന്ത്ര സോഫ്റ്റ്‌വെയർ പ്രസ്ഥാനത്തിന്റെ അതിപ്രധാനവും വളരെ പഴക്കമുള്ളതുമായ സ്വതന്ത്ര സി കമ്പൈലറിന്റെ ഭാഗമാണ് ഈ ലൈബ്രറി. അതിൽ string comparison സംവിധാനമുണ്ടാവുമെന്നു പറയാതെത്തന്നെ അറിയാമല്ലോ. ഈ ലൈബ്രറി പക്ഷേ യുണിക്കോഡ് കൊളേഷൻ ഡാറ്റ ഉപയോഗിക്കുന്നില്ല. പകരം സ്വതന്ത്ര സോഫ്റ്റ്‌വെയർ ഡെവലപ്പർമാർ ചേർത്ത അക്ഷരക്രമീകരണ നിയമങ്ങളാണ് ഉപയോഗിക്കുന്നതു്. സ്വതന്ത്ര സോഫ്റ്റ്‌വെയർ ലോകത്തിലെ ഭൂരിപക്ഷം അപ്ലിക്കേഷനുകളും ഒരുതരത്തിലല്ലെങ്കിൽ മറ്റൊരുതരത്തിൽ ഈ GNU C library യെ ആധാരമാക്കിയായതുകൊണ്ടു് പ്രായോഗികമായി ഇതിൽ എന്തു് അകാരാദിക്രമമാണോ ഉള്ളതു്, അതാണ് കിട്ടുക. ഉദാഹരണത്തിനു ലിനക്സിലെ sort കമാന്റ് ഒക്കെ തരുന്ന മലയാളത്തിന്റെ സോർട്ടിങ്ങ് ഇതുപ്രകാരമാണ്. അതുപോലെ പൈത്തണിലെ Locale packageന്റെ സോർട്ടിങ്ങ്.

GNU C library യുടെ ഉള്ളിലുള്ള മലയാളത്തിന്റെ അകാരാദിക്രമം എഴുതിയിരിക്കുന്നതു് ഞാനാണ്.

അപ്പോൾ നമുക്ക് മൂന്നിടത്തു് നിയമങ്ങളുണ്ടു്:

  1. Unicode Default Collation Element Table  ൽ ഉള്ള മലയാള അക്ഷരങ്ങളുടെ ക്രമം Unicode Collation Algorithm(UCA) അനുസരിച്ചിട്ടുള്ളതു്
  2. CLDR ലെ ഡാറ്റ ഉപയോഗിച്ച് ICU ഇംപ്ലിമെന്റ് ചെയ്ത മലയാളം കൊളേഷൻ
  3. GNU C library യിലെ മലയാളം കൊളേഷൻ.

ഇനി ഈ ലേഖനത്തിൽ മലയാളത്തിലെ അക്ഷരങ്ങളുടെ അകാരാദിക്രമീകരണം ചർച്ച ചെയ്യുമ്പോൾ ഈ മൂന്ന് നിയമങ്ങൾ എങ്ങനെ വ്യത്യാസപ്പെട്ടിരിക്കുന്നു എന്നു വിശദമാക്കുന്നതാണ്.

സ്റ്റാൻഡേഡുകൾ എന്ന ബഹുവചനത്തിന്റെ അനൌചിത്യം ഈ ഭാഗത്തിന്റെ തലക്കെട്ടിനുണ്ടെങ്കിലും അതെങ്ങനെ വന്നു എന്നു മനസ്സിലായിക്കാണുമെന്നു കരുതുന്നു. അല്ലെങ്കിലും സ്റ്റാൻഡേഡ് എപ്പോഴും ബഹുവചനം തന്നെയാണല്ലോ!

പൊതുവായ നിയമങ്ങൾ

അക്ഷരമാലയിലെ പൊതുവായ ക്രമം താഴെക്കൊടുക്കുന്നു:

അ ആ ഇ ഈ ഉ ഊ ഋ എ ഏ ഐ ഒ ഓ ഔ അം അഃ ക ഖ ഗ ഘ ങ ച ഛ ജ ഝ ഞ ട ഠ ഡ ഢ ണ ത ഥ ദ ഥ ന പ ഫ ബ ഭ മ യ ര ല വ ശ ഷ  സ ഹ ള ഴ റ

ഇതിൽ, റ അവസാനം കൊടുത്തിരിക്കുന്നതു് എല്ലാ നിഘണ്ടുക്കളും ഒരു പോലെ പാലിക്കുന്നില്ല. ഉദാഹരണത്തിന്  1871 ലെ ഗുണ്ടർട്ടിന്റെ നിഘണ്ടുവിൽ ര കഴിഞ്ഞ് റ കൊടുത്തിരിക്കുന്നു. കുറച്ചു കൂടി കൃത്യമായിപ്പറഞ്ഞാൽ യ,  ര, ർ, ൎ , റ, റ്റ, ല എന്ന ക്രമമാണ് ഗുണ്ടർട്ട് ഉപയോഗിക്കുന്നതു്.

ഇതേക്രമം സർവവിജ്ഞാനകോശവും പിന്തുടരുന്നു. അർക്കൻ  കഴിഞ്ഞ് ‘ല, ശ, സ’കളിൽ അനേകം പദങ്ങൾ വന്നശേഷം അറ കൊടുക്കുന്നതിന് ഉപപത്തിയില്ല – എന്ന് വിശദീകരണം കൊടുത്തിരിക്കുന്നു.

മലയാളത്തിന്റെ യുണിക്കോഡ് ബ്ലോക്ക് ര, റ എന്ന രീതിയിലാണ് കോഡ് പോയിന്റുകൾ കൊടുത്തിട്ടുള്ളത്. രയുടെ കോഡ് പോയിന്റ് 0D30, റയുടെത് 0D31, അതുകഴിഞ്ഞ ലയുടെത് 0D32 എന്ന രീതിയിൽ. ലിംഗ്വിസ്റ്റിക് നിയമങ്ങളോ യുണിക്കോഡ് കൊളേഷൻ നിയമങ്ങളോ പാലിക്കാത്ത ഒരു സിസ്റ്റത്തിന്റെ ഫോൾബാക്ക് ക്രമം അക്ഷരങ്ങളുടെ കോഡ് പോയിന്റ് ക്രമം ആയിരിക്കും.

മലയാളം യുണീക്കോഡ് ബ്ലോക്കിലെ അക്ഷരങ്ങളുടെ ക്രമം

ശ്രീകണ്ഠേശ്വരത്തിന്റെ ശബ്ദതാരാവലിയുടെ ആദ്യപതിപ്പുകൾ പക്ഷേ ര, ർ, ൎ എന്ന ക്രമവും, ല, വ, ശ, ഷ, സ, ഹ, ള, ഴ എന്നിവയ്ക്ക് ശേഷം ഏറ്റവും അവസാനം റ-യും കൊടുക്കുന്നു. ശബ്ദതാരാവലിയുടെ രണ്ടാംപതിപ്പാണ് ഞാൻ പരിശോധിച്ചത്. ശബ്ദതാരാവലിയുടെ പരിഷ്കരിച്ച പുതിയ പതിപ്പ് – പതിപ്പ് 39 – ഇതേ ക്രമം തന്നെയാണെങ്കിലും ബിന്ദുരേഫം- ൎ എടുത്തുകളഞ്ഞിരിക്കുന്നു.

ശബ്ദതാരാവലി രണ്ടാംപതിപ്പ് – ഴ യ്ക്ക് ശേഷം റ വരുന്നു.

സോഫ്റ്റ്‌വെയറുകളുടെ കാര്യം വരുമ്പോൾ നേരത്തെപ്പറഞ്ഞ എല്ലാ സിസ്റ്റങ്ങളും ഒരേ ക്രമം പിന്തുടരുന്നു.

ചന്ദ്രക്കല, ചില്ലക്ഷരങ്ങൾ, സംവൃതോകാരം

ചന്ദ്രക്കലയെ അകാരാദി ക്രമത്തിൽ എങ്ങനെ പരിഗണിക്കുന്നു എന്നതനുസരിച്ചു് അകാരാദിക്രമത്തിൽ വിവിധങ്ങളായ സമ്പ്രദായങ്ങൾ ഉണ്ടു്.

അകാരാദിക്രമത്തെ ലിപിസ്വരൂപത്തിന്റെ അടിസ്ഥാനത്തിൽ നിർവചിക്കുന്ന സമ്പ്രദായങ്ങളും, വർണ്ണവ്യവസ്ഥയുടെ(Phonetic nature)  അടിസ്ഥാനത്തിൽ നിർവചിക്കുന്ന സമ്പ്രദായങ്ങളും ഉണ്ടു്.  ലിപിസ്വരൂപത്തിൽ നിർവചിക്കുമ്പോൾ അക്ഷരമാലയിലെ സ്വരങ്ങളും, ക, ച, ട, ത, പ തുടങ്ങിയ വ്യഞ്ജനങ്ങളും ആണ് പ്രാഥമിക കണികകൾ. അതേ സമയം വർണ്ണവ്യവസ്ഥയിൽ വർണങ്ങളാണ് അടിസ്ഥാന കണികകൾ.

വർണം എന്നതുകൊണ്ട് ഉദ്ദേശിക്കുന്നതു് ഒരുദാഹരണം കൊണ്ടു് വ്യക്തമാക്കാൻ ക എന്ന അക്ഷരം എടുക്കുക. ഇതിലെ അടിസ്ഥാന ഉച്ചാരണ ഘടകം ക് എന്ന ശുദ്ധവ്യഞ്ജനം അഥവാ സ്വരം ചേരാത്ത വ്യഞ്ജനം ആണ്. ക എന്നതു് ക് + അ എന്നീ രണ്ട് വർണ്ണങ്ങൾ കൂടിച്ചേന്നതാണെന്നു വരുന്നു.

അതേ സമയം ക എന്നതു് പിരിക്കാനാകാത്ത ഒരു അക്ഷരമാണെന്ന അടിസ്ഥാനത്തിലാണ് പരിഗണിക്കുന്നതെങ്കിലോ? ക് എന്നത് ക യുടെ കൂടെ ചന്ദ്രക്കല ചേർന്ന രൂപമാണെന്നും വരുന്നു.

വർണം, അക്ഷരം, ലിപി എന്നിവ മാറിപ്പോകാതെ മനസ്സിലാക്കാൻ അവയെന്തെന്നു താഴെ വ്യക്തമാക്കുന്നു.

  • വർണം – സ്വരം ചേരാത്ത ഉച്ചാരണയോഗ്യമല്ലാത്ത ശബ്ദഘടകം. ഉദാഹരണം  ക്, ച്, ട്, ത്, പ്. സ്വനിമം (phoneme) എന്നും അറിയപ്പെടുന്നു.
  • അക്ഷരം – വർണത്തിൽ സ്വരം ചേർത്ത ഉച്ചാരണയോഗ്യമായത്. ഇതിനായി വ്യഞ്ജനങ്ങളുടെ കൂടെ സ്വരങ്ങൾ ചേർക്കുന്ന. പൊതുസ്വരമായ അ ചേർത്തു് സ്വരചിഹ്നമില്ലാതെ ക എന്നെഴുതി ക് എന്ന വർണത്തെ ഉച്ചാരണസൌകര്യാർത്ഥം എഴുതുന്നു. ഒന്നിലധികം വ്യഞ്ജനങ്ങളും അക്ഷരം ആണ്. സ്വാതന്ത്ര്യം എന്ന വാക്കിൽ മൂന്ന് അക്ഷരങ്ങളുണ്ടെന്നാണ് നമ്മൾ പറയാറെന്നോർക്കുക. Syllable എന്നു ഇംഗ്ലീഷിൽ പറയാം.
  • ലിപി – അക്ഷരങ്ങളെ എഴുതാൻ ഉപയോഗിക്കുന്ന ചിഹ്നങ്ങളുടെ വ്യവസ്ഥ

അകാരാദി എന്നും അക്ഷരമാലാക്രമം എന്നും പറയുമ്പോൾ വർണങ്ങൾ (phonemes) ആയി പിരിച്ച് അവയുടെ ക്രമമാണ് നോക്കേണ്ടത് എന്ന പ്രമാണമനുസരിക്കുന്ന സമ്പ്രദായം മിക്ക നിഘണ്ടുക്കളും പിന്തുടരാൻ ശ്രമിച്ചിട്ടുണ്ടു്.

ഉദാഹരണത്തിന് കടല്(ൽ), കടല എന്ന 2 വാക്കുകൾ, ശബ്ദതാരാവലി, പച്ചമലയാളം നിഘണ്ടു, സർവവിജ്ഞാനകോശം എന്നിവയെല്ലാം കടല്(ൽ), കടല എന്ന ക്രമത്തിൽ തന്നെ കൊടുക്കുന്നു.

പക്ഷേ ഗ്നു സി ലൈബ്രറിയൊഴികെയുള്ള സംവിധാനങ്ങൾ വർണങ്ങളെ അടിസ്ഥാനമാക്കിയല്ല ക്രമീകരിക്കുന്നതു്. ചന്ദ്രക്കലയും ചില്ലും എല്ലാ സ്വരചിഹ്നങ്ങളും കഴിഞ്ഞാണു് അവയിൽ വരുന്നതു്.

ചന്ദ്രക്കലയുടെ അതേ സ്വഭാവമല്ലേ ചില്ലിനും – സ്വരം ചേരാത്ത ശുദ്ധവ്യഞ്ജനം? ആ യുക്തി അനുസരിച്ച് ല്(ൽ) , ല എന്ന ക്രമം വരും.  മുകളിൽ glibc സിസ്റ്റം ഈ രിതി പിന്തുടരുന്നതായി കാണാം.

നിഘണ്ടുക്കളും അങ്ങനെത്തന്നെ.

ശബ്ദതാരാവലി – പരിഷ്കരിച്ച പതിപ്പ്. ചില്ലക്ഷരം ർ, ര യുടെ മുമ്പ് വരുന്നു.

ചന്ദ്രക്കലയുടെ ഉപയോഗം ചില്ലിനു സമാനമായ സ്വരമില്ലാത്ത വ്യഞ്ജനം ഉണ്ടാക്കലാണെന്നു പറഞ്ഞാൽ അതു് പൂർണ്ണമായും ശരിയാവില്ല. “അത്”, “കാല്”, “ചോറ്” എന്നീ വാക്കുകളൊക്കെ ഉച്ചരിച്ചുനോക്കൂ.  കാല് എന്നതിലെ ല് ന്റെ ഉച്ചാരണമാണോ കാൽ എന്നതിലെ ൽ ന്റെ ഉച്ചാരണം? അല്ലല്ലോ? ഈ വ്യത്യാസത്തിന്റെ കാരണം മനസ്സിലാക്കാൻ സംവൃതോകാരം എന്താണെന്നറിയണം.

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

എന്തായാലും കാലു് എന്നു ഞാൻ എഴുതിയെന്നിരിക്കട്ടെ, അതിൽ ഉ ചിഹ്നമുണ്ടുതാനും. കാൽ, കാല്, കാല്, കാലു്, കാല എന്നീ വാക്കുകൾ ഏത് ക്രമത്തിൽ വരും?

കാൽ, കാല് എന്നിവ കാല എന്നതിനു മുമേ വരുമെന്നു നമ്മൾ നേരത്തേ കണ്ടു. UCA, ICU(CLDR) എന്നിവ ആ ക്രമം  പിന്തുടരുന്നില്ലെന്നും. കാലു്, കാലു എന്നിവയോ? അവയിലെ വർണങ്ങൾ പിരിച്ചെഴുതിനോക്കാം:

കാലു് = ക് + ആ + ല് + ഉ + ്

കാലു = ക് + ആ + ല് + ഉ

അതുപ്രകാരം ലു എന്നതിന്റെ പൂർണ്ണ ഉച്ചാരണത്തിലേക്കെത്താത്ത പാതിവഴിയാണ് കാലു്. അതുകൊണ്ട് കാലു്, കാല് എന്ന ക്രമം വരണം. ഈ ക്രമം glibc അനുസരിച്ചിരിക്കുന്നതു് താഴെക്കൊടുത്തിരിക്കുന്ന ചിത്രത്തിൽ ശ്രദ്ധിക്കുക.

 

നിഘണ്ടുകളിൽ അങ്ങനെ ഉകാരചിഹ്നമിട്ട് സംവൃതോകാമെഴുതുന്നതു് ഇക്കാലത്തെ നിഘണ്ടുക്കളിൽ ഇല്ലേയില്ല. ഗുണ്ടർട്ടിന്റെ നിഘണ്ടുവിൽ ചോറു, കാലു, കോഴിക്കോടു, വേണാടു. തുടങ്ങി പൂർണ്ണ ഉകാരമുമ്പയോഗിച്ചെഴുതുന്ന ശൈലിയാണുള്ളതു്. ശബ്ദതാരാവലിയുടെ ആദ്യകാല പതിപ്പിൽ സംവൃതോകാരം ഉകാരവും ചന്ദ്രക്കലയും ചേർത്തെഴുതുന്നുണ്ടു്. അതിൽ കാട, കാടി, കാടു്, കാടു എന്ന ക്രമം പിന്തുടരുന്നു. അതു് മേൽപ്പറഞ്ഞ വർണങ്ങളെ അടിസ്ഥാനമാക്കിയുള്ള യുക്തിയനുസരിച്ചുള്ളതാണു്.

സർവവിജ്ഞാനകോശത്തിൽ സംവൃതോകാരം ഉകാരലിപി ഉപയോഗിച്ച് എഴുതുന്നില്ലെങ്കിലും ഉകാര ചിഹ്നങ്ങളുടെ തൊട്ടുമുമ്പ് ക്രമീകരിച്ചിരിക്കുന്നു. “മലയാളത്തിൽ സംവൃതോകാരത്തിന് വ്യാകരണമൂല്യം പ്രകടമാകയാൽ അതിന് അകാരാദിയിൽ അംഗീകാരം നൽകിയിരിക്കുന്നു. പട്ട, പട്ട്, പട്ടു. വന്ന, വന്ന്, വന്നു. ചാർ – ചാറ -ചാറി -ചാറ്-ചാറുക ഈ ക്രമത്തിലാണ് അകാരാദി കണക്കാക്കേണ്ടത്.” എന്നു് കൊടുത്തിരിക്കുന്നു.

ഗുണ്ടർട്ടിന്റെ നിഘണ്ടുവിൽ ചില്ലക്ഷരങ്ങൾ എല്ലാം എല്ലാ സ്വരചിഹ്നങ്ങളും കഴിഞ്ഞ് അവസാനമാണ് വരുന്നതു്. എളുപ്പം, എൾ എന്ന ക്രമം വരുന്നുണ്ടു്. പക്ഷേ  നേരെതിരിച്ച് കടൽ, കടല എന്ന ക്രമവും കാണുന്നതുകൊണ്ടു് ഇക്കാര്യത്തിൽ വ്യക്തത പോര.

മലയാള ചില്ലക്ഷരങ്ങളുടെ എൻകോഡിങ്ങിനെക്കുറിച്ചുള്ള നീണ്ട ചർച്ചകളിൽ ചന്ദ്രക്കല, സംവൃതോകാരം എന്നിവയുടെ നിർവചനങ്ങളും സ്വഭാവവും വലിയ ചർച്ചയായിരുന്നു. അകാരാദിക്രമത്തെ മുൻനിർത്തി ഇവയുടെ സ്വഭാവം വിശകലനം ചെയ്യുന്ന Chandrakkala, Samvruthokaram, Chillaksharam – from the perspective of Malayalam Collation എന്ന ഒരു പ്രബന്ധം ആർ. ചിത്രജകുമാർ, എൻ. ഗംഗാധരൻ എന്നിവർ ചേർന്നു് രചിച്ചിട്ടൂണ്ടു്. ഈ പ്രബന്ധത്തിൽ ഉകാരചിഹ്നമില്ലാതെ എഴുതുകയും സംവൃതമായി ഉച്ചരിക്കുകയും ചെയ്യുന്ന കാല്, അത്  തുടങ്ങിയ ശൈലി PseudoSamvruthokaram എന്ന പേരിട്ട് റെഫർ ചെയ്യുന്നുണ്ടു്. സംവൃതമായി ഉച്ചരിക്കുന്നവ ഉകാരചിഹ്നത്തോടെ തന്നെ എഴുതുക വഴി ചില്ലക്ഷരത്തിന്റെ അറ്റോമിക് എൻകോഡിങ്ങ് അനാവശ്യമാകും എന്ന വാദം മുന്നോട്ടു വെയ്ക്കുന്നുണ്ടു്.  സ്വനിമം/വർണങ്ങളായി അക്ഷരങ്ങളെ വേർപെടുത്തിയെഴുതി കൊളേഷൻ നിർണയിക്കുന്ന ആശയം GNU C Library യിൽ എഴുതാൻ എന്നെ ഈ പ്രബന്ധം വളരെ സഹായിച്ചിട്ടുണ്ടു്. അതു് വായിക്കണമെന്നഭ്യർത്ഥിക്കുന്നു.

ചില്ലക്ഷരങ്ങളുടെ എൻകോഡിങ്ങിനെപ്പറ്റി സൂചിപ്പിച്ചുവല്ലോ. ZWJ ഉപയോഗിച്ചെഴുതുന്ന ചില്ലുകളും (ന്‍ = ന്+ZWJ) ഉം അറ്റോമിക് ആയി എൻകോഡ് ചെയ്ത ചില്ലുകളും ഉപയോഗത്തിലുണ്ടു്. ഈ രണ്ടു ചില്ലുകളെയും ഒരേ പോലെയാണ് glibc, icu, uca എന്നീ സോഫ്റ്റ്‌വെയർ സംവിധാനങ്ങളും ഇപ്പോൾ സോർട്ട് ചെയ്യുന്നതു്.

അനുസ്വാരം

അനുസ്വാരം – ം , മയുടെ ചില്ലായിട്ടാണ് അകാരാദിക്രമത്തിൽ പരിഗണിക്കുന്നതു്. ം == മ്  അതിനാൽ ‘കനകം’ കഴിഞ്ഞേ ‘കനം’ വരൂ. ശബ്ദതാരാവലിയിൽ അങ്ങനെയാണ്. ഗുണ്ടർട്ടിൽ നേരെ മറിച്ചാണ് കാണുന്നത്. Glibc, ICU എന്നിവയും കനകം, കനം എന്നു ക്രമീകരിക്കുന്നു.

കൂട്ടക്ഷരങ്ങൾ

കൂട്ടക്ഷരങ്ങളുടെ ക്രമം അതിനെ വർണങ്ങളാക്കി പിരിച്ചു് ഇടത്തുനിന്നു വലത്തോട്ട് ഒരേസ്ഥാനത്തുള്ളവയുടെ ക്രമം കണക്കാക്കിയാണ്.

താഴെക്കൊടുത്തിരിക്കുന്ന ചിത്രത്തിൽ നിന്നും ഇക്കാര്യം മനസ്സിലാക്കാമെന്നു കരുതുന്നു.

സമാന സ്വരചിഹ്നങ്ങൾ

മലയാളത്തിലെ ഔ ചിഹ്നത്തിനു് ൌ എന്നും ൗ എന്നും ചിഹ്നങ്ങൾ ഉണ്ടു്. പൌർണ്ണമി, പൗർണ്ണമി എന്നിവ ഉദാഹരണങ്ങൾ. ഈ രണ്ടു ചിഹ്നങ്ങളും ഒരേ സ്വനിമത്തെത്തന്നെ സൂചിപ്പിക്കുന്നതിനാൽ അടുത്തടുത്തുവരണം. നിഘണ്ടുക്കൾ ഇതിലേതെങ്കിലും ഒന്നേ ഉപയോഗിക്കാറുള്ളൂവെന്നതിനാൽ ഈ പ്രശ്നം ഉദിക്കുന്നില്ല. സോഫ്റ്റ്‌വെയർ ലൈബ്രറികളിൽ glibc,  ICU എന്നിവ ഈ ബന്ധം തിരിച്ചറിയുന്നുണ്ട്.

ഒ, ഓ, ഔ എന്നിവയുടെ സ്വരചിഹനങ്ങള്‍ യഥാക്രമം ൊ , ോ , ൌ എന്നോ െ+ ാ , േ+ ാ , െ+ ൗ എന്നോ വേർപെടുത്തി എഴുതിയാലും തുല്യമായി കണക്കാക്കും(Canonical Equivalence.)

വിസർഗം, ഹ

ഹ, വിസർഗം എന്നിവയ്ക്ക് സമാന ഉച്ചാരണമായതിനാൽ അവ അടുത്തടുത്തുവരണമെന്നൊരു പ്രമാണം കേട്ടിട്ടുണ്ടെങ്കിലും നല്ലൊരു ഉദാഹരണം അറിയില്ല. ഏതെങ്കിലും നിഘണ്ടുവിലോ സോഫ്റ്റ്‌വെയർ ലൈബ്രറികളിലോ ഇങ്ങനെ ക്രമീകരിച്ചതായി അറിയില്ല.

റ്റ

ഗുണ്ടർട്ടിന്റെ നിഘണ്ടുവിലെപ്പോലെത്തന്നെ റയ്ക്ക് ശേഷം റ്റ ശബ്ദതാരാവലി രണ്ടാം പതിപ്പും  പിന്തുടരുന്നു. മാത്രമല്ല, ശബ്ദതാരാവലിയുടെ ഇന്നത്തെ മുപ്പത്തൊമ്പതാം പതിപ്പും, സുമംഗലയുടെ പച്ചമലയാളം നിഘണ്ടുവും  ഇതേ ക്രമം പിന്തുടരുന്നു.

 

റ്റ – റയ്ക്ക് ശേഷം വരുന്നു – ശബ്ദതാരാവലി രണ്ടാം പതിപ്പ്.

റ്റ = റ + ് + റ എന്ന യുണിക്കോഡ് രീതിവെച്ച്, റയുടെ തൊട്ടുശേഷം തന്നെ റ്റ വരും. ഇത് എല്ലാ ലൈബ്രറികളും ഒരു പോലെ പിന്തുടരുന്നു. എങ്കിലും നേരത്തെപ്പറഞ്ഞ ചന്ദ്രക്കലയുടെ വ്യത്യാസമുണ്ടെന്നു ഓർക്കണം.

റ്റ  യഥാർത്ഥത്തിൽ ഺ ഖരമായും ഩ അനുനാസികമായും വരുന്ന ഒരു വ്യഞ്ജനവർഗത്തിലെ ഺ യുടെ ഇരട്ടിപ്പാണെന്നു കേരളപാണിനീയം പറയുന്നുണ്ടെങ്കിലും ഺ യും റ്റ യും തമ്മിൽ ഒരു ബന്ധവും ഒരു കൊളേഷൻ സിസ്റ്റവും കൊടുക്കുന്നില്ല.

മലയാള അക്കങ്ങൾ

മലയാളം അക്കങ്ങള്‍ അവയുടെ അറബി ലിപികളുടെ കൂടെ തന്നെ വരും. മറ്റുഭാഷകളിലെ അക്കങ്ങൾ ഉണ്ടെങ്കിലും അടുത്തടുത്തുവരും.

പ്രാധാന്യം

ഒരു നീണ്ട പട്ടികയിൽ നിന്നും പെട്ടെന്നൊരു പേരോ മറ്റോ കണ്ടുപിടിക്കുന്നതിനു അകാരാദിക്രമം സഹായിക്കും. അതുപക്ഷേ ഇന്നത്തെ കാലത്തെ സോഫ്റ്റ്‌വെയറുകൾ സെർച്ച് ഫീച്ചർ തരുമെങ്കിലും. തെരഞ്ഞുകണ്ടുപിടിക്കലിലൊതുങ്ങുന്നില്ല, ഒരു പട്ടികയലെ സ്ഥാനവും അകാരാദിക്രമമാണ് തീരുമാനിക്കുന്നതു്. ഉദാഹരണത്തിനു് ഒരു ക്ലാസിലെ ഒരു കുട്ടിയുടെ റോൾ നമ്പർ ക്ലാസിലെ കുട്ടികളുടെ പേരുകൾ സോർട്ട് ചെയ്ത ക്രമമായിരിക്കും തീരുമാനിക്കുന്നതു്.

 

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

സാങ്കേതികക്കുറിപ്പുകൾ

  1. glibc collation: ഇതിന്റെ ആദ്യപതിപ്പ് 2009ൽ ആണെഴുതുന്നതു്. പക്ഷേ പിന്നീട് ശ, ഷ, സ എന്നിവയുടെ ക്രമത്തിൽ ഒരു പിശക് ശ്രദ്ധയിൽ പെടുകയും തിരുത്തുകയും ചെയ്തിട്ടുണ്ടു്. അറ്റോമിക് ചില്ലുകൾ ചേർത്തിട്ടില്ലായിരുന്നതിനാൽ അതും ഇപ്പോൾ ചേർത്തിട്ടുണ്ട്. ഈ മാറ്റങ്ങളെല്ലാം ചേർന്ന glibc യുടെ പതിപ്പ് 2.26 ൽ ആണ് വരുന്നതു്. അതു് ഉബുണ്ടുവിന്റെ അടുത്ത മാസം വരുന്ന പതിപ്പിൽ വരും. ഈ ലേഖനത്തിലെ അകാരാദിക്രമം glibc യുടെ ഈ മാറ്റങ്ങളെല്ലാം ഉള്ള പതിപ്പിലാണ് ടെസ്റ്റ് ചെയ്തിരിക്കുന്നതു്.
  2. CLDR അടിസ്ഥാനമാക്കിയുള്ള ICU കൊളേഷൻ സംവിധാനം ബ്രൌസറുകളിലൊക്കെ ജാവാസ്ക്രിപ്റ്റിൽ നിലവിലുണ്ടു്. അതെങ്ങനെ ഉപയോഗിക്കാമെന്നതിന്റെ ചെറിയൊരു ഡെമോ: https://codepen.io/santhoshtr/pen/NjMXjE
  3. ഈ ലേഖനത്തിൽ മൂന്നു വ്യത്യസ്ത സോഫ്റ്റ്‌വെയർ സംവിധാനങ്ങളിലെ അകാരാദിക്രമം കാണിക്കാൻ വേണ്ടി ചെറിയൊരു അപ്ലിക്കേഷൻ പൈത്തൺ ഉപയോഗിച്ചെഴുതിയിട്ടുണ്ട്. അതിന്റെ സോഴ്സ് കോഡ്: https://gist.github.com/santhoshtr/681e8bb72c63cb74d67d123f4fb7e7be
  4. ചിലയിടത്തു് രണ്ടക്ഷരങ്ങളും തുല്യമായി പരിഗണിക്കും എന്ന് ലേഖനത്തിൽ പറയുമ്പോൾ, അകാരാദിക്രമത്തിൽ അതിനെ മനസ്സിലാക്കേണ്ടത് ഇങ്ങനെയാണ്: അക്ഷരങ്ങൾക്കെല്ലാം ഒരു കൊളേഷൻ വെയിറ്റ് ഉണ്ടു്. അത് ഒരു സംഖ്യ ആണെന്നു കരുതുക. ഇത് തന്നെ പ്രൈമറി കൊളേഷൻ വെയിറ്റ്, സെക്കന്ററി കൊളേഷൻ വെയിറ്റ് എന്നിങ്ങനെ കൂടുതൽ ലെവലുകളാക്കി തിരിച്ചിരിക്കുന്നു. രണ്ട് അക്ഷരങ്ങൾ തുല്യമെന്നൊക്കെ പറയുമ്പോൾ പ്രൈമറി കൊളേഷൻ വെയിറ്റ് തുല്യമാണെന്നും സെക്കന്ററി കൊളേഷൻ വെയിറ്റ് വ്യത്യാസപ്പെട്ടു്, അക്ഷരങ്ങളിലേതു് ആദ്യം വരണമെന്നും തീരുമാനിക്കുന്നു. പ്രൈമറി കൊളേഷൻ വെയിറ്റ് തുല്യമായ അക്ഷരങ്ങളെ string comparison, string search എന്നിവയിലൊക്കെ തുല്യമായി പരിഗണിക്കണം.
  5. glibc പുതിയ യൂണിക്കോഡ് കോഡ്പോയിന്റുകൾ പരിഗണിക്കുന്നില്ല.

പരിശോധിച്ച നിഘണ്ടുക്കൾ

  1.  A Malayalam And English Dictionary – H Gundert, 1871
  2. ശബ്ദതാരാവലി – രണ്ടാം പതിപ്പ്. ശ്രീകണ്ഠേശ്വരം ജി പത്മനാഭപിള്ള, 1931
  3. ശബ്ദതാരാവലി പരിഷ്കരിച്ച പുതിയ പതിപ്പ്: മുപ്പത്തൊമ്പതാം പതിപ്പ് – സാഹിത്യ പ്രവർത്തക സഹകരണ സംഘം. 2013
  4. പച്ചമലയാളം നിഘണ്ടു – സുമംഗല – ഗ്രീൻബുക്സ്, 2016

നിഘണ്ടുക്കളിൽ ആദ്യാവസാനം ഏകദേശം ഒരേ ക്രമം പിന്തുടരുന്നെങ്കിലും മനുഷ്യപ്രയത്നഫലമായതിനാൽ ചില നോട്ടപ്പിശകുകൾ ഒക്കെ ഉണ്ട്. ഉദാഹരണത്തിനു് ശബ്ദതാരാവലി രണ്ടാം പതിപ്പിൽ {ചക്കു്, ചക്ക}, {ചങ്കിടി, ചക്കു്} തുടങ്ങിയ ക്രമങ്ങളിൽ സംവൃതോകാരം പലയിടത്തായി വന്നിരിക്കുന്നു.

 

പുതിയൊരു മലയാളം ഫോണ്ട് നിർമിക്കുന്നതെങ്ങനെ?

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

ഇന്നത്തെ യുണിക്കോഡ് ഫോണ്ടുകൾ ഓപ്പൺടൈപ്പ് സാങ്കേതികവിദ്യ അടിസ്ഥാനമാക്കിയാണു് പ്രവർത്തിക്കുന്നതു്. ഫോണ്ടിൽ അക്ഷരങ്ങളുടെ വരച്ച രൂപങ്ങളും, അക്ഷരങ്ങൾ കൂടിച്ചേരുന്നതിനെ സംബന്ധിച്ച ചിത്രീകരണ നിയമങ്ങളും ആണുള്ളതു്.

എങ്ങനെ തുടങ്ങാം?

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

  1. നിലവിലുള്ള ഫോണ്ടുകളെ വിശദമായി വിലയിരുത്തുക. ഏതൊക്കെ ശൈലികൾ ഉണ്ടു്, വരകളെങ്ങനെ വ്യത്യാസപ്പെട്ടിരിക്കുന്നു, ഏതുതരം ഉപയോഗത്തിനാണ് മുൻതൂക്കം കൊടുക്കുന്നതു്. അക്ഷരങ്ങളെങ്ങനെ വ്യത്യാസപ്പെട്ടിരിക്കുന്നു. ഇവ മനസ്സിലാക്കണം. എനിക്ക് ഇവ മനസ്സിലാക്കാൻ സാധിച്ചതു് ഫോണ്ട് ഡിസൈൻ ചെയ്യുക എന്ന ഉദ്ദേശ്യമില്ലാതെ ഫോണ്ടിന്റെ സാങ്കേതികവശങ്ങളിലും പ്രോഗ്രാമിങ്ങിലും പ്രവർത്തിച്ചാണു് ഞാൻ ഈ മേഖലയിലെത്തിയതു് എന്നതുകൊണ്ടാണ്. അഞ്ചാറുവർഷം അങ്ങനെ നിരന്തരം പല ഫോണ്ടുകളുടെ രൂപങ്ങൾ നമ്മുടെ മുന്നിൽ വന്നപ്പോൾ മേൽപ്പറഞ്ഞ കാര്യങ്ങളിൽ കൂടുതൽ അറിവുനേടാനായി.
  2. അക്ഷരങ്ങൾ, കൂട്ടക്ഷരങ്ങൾ തുടങ്ങിയവയെ സംബന്ധിച്ച  ഭാഷാപരമായ അറിവ് അത്യന്താപേക്ഷിതമാണ്. ഉദാഹരണത്തിന് മ്പ = മ്+പ ആണ്, ന്+പ അല്ല എന്നൊക്കെ കൃത്യമായി അറിഞ്ഞിരിക്കണം.
  3. ഫോണ്ടുകളെക്കാൾ വൈവിധ്യം മലയാളത്തെ സംബന്ധിച്ചിടത്തോളം ഉള്ളതു് വഴിയോരങ്ങളിലെ ചുമരെഴുത്തുകൾക്കാണ്. ഫ്ലക്സുകളുടെ കയ്യേറ്റമുണ്ടെങ്കിലും.

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

ഏതൊക്കെ ടൂളുകൾ ഉപയോഗിക്കണം?

ഫോണ്ട് ഡിസൈനിങ്ങിനു പല സോഫ്റ്റ്‌വെയർ പാക്കേജുകൾ ലഭ്യമാണു്. ഞാനുപയോഗിക്കാറുള്ളതു് ഫോണ്ട്ഫോർജ് ആണു്. ലിനക്സധിഷ്ഠിത ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളിൽ ഇതു് സൗജന്യമായി ലഭ്യമാണ്. വിൻഡൊസിലും മാക്കിലും പ്രവർത്തിക്കുന്ന സ്വതന്ത്ര സോഫ്റ്റ്‌വെയറാണ്. ഫോണ്ട്ഫോർജിൽ അക്ഷരരൂപങ്ങൾ വരക്കാനുള്ള സൌകര്യമുണ്ടെങ്കിലും അവ പ്രയാസമായിട്ടാണ് എനിക്ക് തോന്നിയിട്ടുള്ളതു്. അതുകൊണ്ടു് വരകൾ ഇങ്ക്‌സ്കേപ് ഉപയോഗിച്ചാണ് ചെയ്യാറു്. അങ്ങനെ വരച്ച SVG ഫയലുകൾ ഫോണ്ട് ഫോർജിൽ ഇമ്പോർട്ട് ചെയ്ത് ഉപയോഗിക്കും. ഇങ്ക്‌സ്കേപ്പും എല്ലാ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളിലും സൌജന്യമായി ലഭ്യമായ സ്വതന്ത്ര സോഫ്റ്റ്‌വെയറാണ്. ഈ ടൂളുകളുടെ ഉപയോഗം പരിശീലിക്കുകതന്നെ വേണം.

ഫോണ്ട്ഫോർജ്

ഫോണ്ട്‌ഫോർജ് പക്ഷേ ടൈപ്പ് ഡിസൈൻ ടൂളുകളിൽ മെച്ചപ്പെട്ടതെന്നു പറയാനാകില്ല. മാക്കിനു മാത്രമുള്ള Glyphs, Robofont തുടങ്ങിയവയൊക്കെയാണു് ഈ മേഖലയിലെ പ്രൊഫഷണലുകൾ ഉപയോഗിക്കുന്നതു്. പക്ഷേ ഇരുപതിനായിരത്തിലധികം രൂപ വിലയുണ്ടു് ഇവയുടെ ലൈസൻസിന്.

എങ്ങനെ വരയ്ക്കാം

പേപ്പറിൽ വരച്ചു് സ്കാൻ ചെയ്ത് അതിന്റെ ഔട്ട്‌ലൈൻ ട്രെയ്സ് ചെയ്യുന്ന രീതി പിന്തുടരുന്ന ടൈപ്പോഗ്രഫേഴ്സ് ഉണ്ടു്. ഞാൻ പേപ്പർ ഉപയോഗിക്കാറില്ല. പൂർണ്ണമായും ഇമേജ് എഡിറ്ററിൽ മൌസ് കൊണ്ടുതന്നെയാണ് മഞ്ജരി, ചിലങ്ക ഫോണ്ടുകൾ വരച്ചതു്. നിങ്ങൾക്കിഷ്ടമുള്ള രീതി പിന്തുടരാം.

വരയ്ക്കുമ്പോൾ ശ്രദ്ധിക്കാൻ ഒരുപാടു കാര്യങ്ങളുണ്ടു്. അക്ഷരങ്ങളുടെ ഉയരം, വരകളുടെ കട്ടി എന്നിവ എല്ലാ അക്ഷരങ്ങൾക്കും ഒരുപോലെ ആവണമല്ലോ. ഗ്രിഡ് മാർക്ക് ചെയ്ത ഒരു ടെമ്പ്ലേറ്റ് ഇമേജിലാണ് ഞാൻ വരയ്ക്കാറ്. അതിൽ ബേസ് ലൈൻ, x-height, Em-size, bearings തുടങ്ങിയ ടൈപ്പൊഗ്രഫി അളവുകൾ എല്ലാം അടയാളപ്പെടുത്തിയിരിക്കും. ഈ വാക്കുകൾ പരിചയമില്ലെങ്കിൽ പേടിക്കേണ്ട, പഠിച്ചെടുക്കാവുന്നതാണ്. പക്ഷേ ഈ ഒരു ലേഖനത്തിൽ ടൈപ്പൊഗ്രഫി അനുപാതങ്ങളെപ്പറ്റി പറയാനുദ്ദേശിക്കുന്നില്ല. ഈ അളവുകൾ ഓരോ ഡിസൈനിനും ഓരോന്നാണ്. അവ എങ്ങനെ തീരുമാനിക്കുന്നു എന്നതു് വളരെ പ്രധാനമാണ്.

Source: https://pica-ae.deviantart.com/journal/Project-Educate-About-Typefaces-293238420

ചിലങ്ക, മഞ്ജരി എന്നിവയുടെ സോഴ്സ് കോഡിനോടൊപ്പം ഉപയോഗിച്ച എല്ലാ svg ഇമേജുകളും കൊടുത്തിട്ടുണ്ടു്. അവ റെഫർ ചെയ്യുന്നതു് മേൽപ്പറഞ്ഞ കാര്യങ്ങൾ മനസ്സിലാക്കാൻ സഹായിച്ചേക്കും.

bezier കർവുകളാണ് ഒരു ഫോണ്ടിലെ അക്ഷരരൂപങ്ങളെ നിശ്ചയിക്കുന്നതു്. പേപ്പറിൽ വരച്ചാലും ട്രേയ്സ് ചെയ്ത് ഫോണ്ടിലേക്ക് ചേർക്കേണ്ടതു് ബെസിയർ കർവുകളാൽ നിർവചിച്ച രൂപമാണ്. വൃത്തിയായി കൃത്യതയോടെ ഈ കർവുകൾ എങ്ങനെ വരക്കാമെന്ന് മിക്ക ഇമേജ് എഡിറ്റിങ്ങ് സോഫ്റ്റ്‌വെയറുകളും പരിശീലിക്കുമ്പോൾ പരിചയിക്കുന്നതാണ്. തുടക്കക്കാർക്ക് വേണമെങ്കിൽ http://bezier.method.ac/ എന്ന ഒരു ഗെയിം ഉപയോഗിച്ചിത് പരിശീലിക്കാം.

മഞ്ജരി ഫോണ്ടിലെ യ എന്ന അക്ഷരത്തിന്റെ വര. ബെസിയർ കർവുകളും ടൈപ്പോഗ്രഫി മെട്രിക്സ് ഗൈഡുകളും ശ്രദ്ധിക്കുക.

അക്ഷരങ്ങളുടെ രൂപകല്പന

Source: https://medium.com/type-talk/the-typography-lettering-and-calligraphy-cousins-d66543b0ff3c

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

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

എന്തൊക്കെ വരയ്ക്കണം?

മലയാളം യുണിക്കോഡ് ബ്ലോക്കിൽ നിലവിൽ നൂറോളം അക്ഷരങ്ങളുണ്ട്. ഇവയെല്ലാം വരച്ചാൽ മാത്രം പോര. ഇവ ചേർന്നുള്ള കൂട്ടക്ഷരങ്ങൾ വരക്കണം. മഞ്ജരി ഫോണ്ടിൽ മലയാളത്തിനു മാത്രമായി അറുനൂറോളം ഗ്ലിഫുകളുണ്ടു്.  മഞ്ജരി താരതമ്യേന കൂട്ടക്ഷരങ്ങൾ കുറഞ്ഞ ഫോണ്ടാണ്. രചനയിൽ ഇതു് ആയിരത്തിനപ്പുറം കടക്കും. ഇത്രയും ഗ്ലിഫുകൾ ഉണ്ടെങ്കിലും ഏകദേശം 200-250 എണ്ണം ആണ് ഡിസൈൻ ചെയ്യേണ്ടതു്, ബാക്കിയുള്ളവ മിക്കവാറും ഇമേജ് എഡിറ്ററിന്റെ സഹായത്തോടെ കൂട്ടിച്ചേർക്കാവുന്നതാണ്.

സാധാരണ മലയാളം ഫോണ്ടുകളിൽ ബേസിക് ലാറ്റിൻ ഗ്ലിഫുകളും ചേർക്കാറുണ്ട്. മലയാളം അക്ഷരങ്ങളുടെ ശൈലിയുമായി മാച്ചാവുന്ന ഇംഗ്ലീഷ് അക്ഷരങ്ങളാണ് വരയ്ക്കാറ്. ഇതു് ഇംഗ്ലീഷ് ചെറിയക്ഷരം വലിയക്ഷരങ്ങളിൽ ഒതുങ്ങില്ല കെട്ടോ, ചിഹ്നങ്ങൾ, അക്കങ്ങൾ, കറൻസികൾ, ഡയാക്രിറ്റിക് മാർക്കുകൾ ഒക്കെ വേണം. മഞ്ജരി ഫോണ്ടിൽ ഇതെല്ലാം ചേർന്ന് 850 ഗ്ലിഫുകളുണ്ടു്.

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

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

മഞ്ജരിയാണെന്നു തോന്നുന്നു ഇത്തരത്തിൽ 3 സ്റ്റൈൽ വേരിയന്റുകൾ ആദ്യം മലയാളത്തിൽ കൊണ്ടുവന്നതു്. ബാക്കിയുള്ള മിക്ക ഫോണ്ടുകളും ഒരു ശൈലിയിൽ ഒരു തിക്ൿനസ്സിൽ ഉള്ള ഫോണ്ടാണ്. രചനയ്ക്ക് ബോൾഡ്, റെഗുലർ വകഭേദങ്ങളുണ്ടു്.

ഒന്നിലധികം വകഭേദങ്ങളുള്ള ഒരു ഫോണ്ട് ഫാമിലി രൂപകല്പന ചെയ്യുന്നതു് വളരെ സങ്കീർണ്ണവും സമയമെടുക്കുന്നതുമായ പ്രൊജക്ടാണെന്നു പറയേണ്ടതില്ലല്ലോ.

പ്രോഗ്രാമിങ്ങ് അറിയേണ്ടതുണ്ടോ?

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

എത്ര സമയമെടുക്കും?

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

പൊതുവായ ഉപയോഗത്തിനുള്ള ഫോണ്ടുകൾ റിലീസ് ചെയ്ത ശേഷം വിവിധ കമ്പ്യൂട്ടിങ്ങ് ഉപകരണങ്ങൾക്കു വേണ്ടിയും പുതുതായിറങ്ങുന്ന ഓപ്പറേറ്റിങ്ങ് സംവിധാനങ്ങൾക്കു വേണ്ടിയും ടെസ്റ്റ് ചെയ്യുകയും പുതുക്കിക്കൊണ്ടിരിക്കുകയും വേണം. ഇതു് ഒരുപാടു സമയവും ഒരുപാടുവർഷത്തെ തുടർച്ചയായ മെയിന്റനൻസും ആവശ്യപ്പെടുന്ന പ്രവൃത്തിയാണ്. ഒരു സോഫ്റ്റ്‌വെയർ പോലെ ഫോണ്ടുകളുടെ പുതിയ പതിപ്പുകൾ റിലീസ് ചെയ്യുന്നു. ഉദാഹരണത്തിനു് സ്വതന്ത്ര മലയാളം കമ്പ്യൂട്ടിങ്ങ് പുറത്തിറക്കിയ എല്ലാ ഫോണ്ടുകളിലും സജീവമായ മെയിന്റനൻസ് നടക്കുന്നതും പുതിയ പതിപ്പുകൾ ഇറക്കുന്നതും കാണാൻ സാധിക്കും. റിലീസ് ചെയ്യുന്നതോടെ തീരുന്നതല്ല ഫോണ്ട് നിർമാണമെന്നർത്ഥം.

പൊതു ഉപയോഗത്തിനുള്ള നല്ലൊരു ഫോണ്ടെന്നാലെന്താണ്?

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

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

ചെറിയൊരു പരിശീലനം

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

  1. ആദ്യപടിയായി നിലവിലെ ഒരു ഫോണ്ടിന്റെ സോഴ്സ് കോഡ് എടുത്തു് കമ്പൈൽ ചെയ്യാൻ പഠിക്കലാണ്. ഇതിനായി https://github.com/smc/chilanka എന്ന ചിലങ്ക ഫോണ്ടിന്റെ റിപ്പോസിറ്ററിയിൽ പോയി Clone or Download എന്ന ബട്ടണിൽ ക്ലിക്കു ചെയ്ത് Zip ആയി സോഴ്സ് കോഡ് ഡൌൺലോഡ് ചെയ്യുക. അതൊരു ഫോൾഡറിലേക്ക് തുറന്നിടുക(extract)
  2. നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ താഴെപ്പറയുന്ന സോഫ്റ്റ്‌വെയർ പാക്കേജുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക:
    1. fontforge
    2. python-fontforge
    3. build-essential
    4. python-pip
  3. അതിനുശേഷം ചിലങ്ക കോഡുള്ള ഫോൾഡറിൽ നിന്ന് താഴെപ്പറയുന്ന കമാന്റ് റൺ ചെയ്യുക. pip install -r tools/requirements.txt
  4. ശേഷം make all എന്ന കമാന്റ് റൺ ചെയ്യുക. അപ്പോൾ test എന്ന ഫോൾഡറിൽ ഒരു പിഡിഎഫ് ഫയൽ കാണാം. അതിൽ ഇപ്പോൾ നിങ്ങൾ കമ്പൈൽ ചെയ്ത ഫോണ്ട് ഉപയോഗിച്ച് കുറേ സാമ്പിൾ മലയാളം റെൻഡർ ചെയ്തിരിക്കുന്ന കാണാം.

ഇപ്പോൾ നിങ്ങൾ ഒരു ഫോണ്ട് വിജയകരമായി കമ്പൈൽ ചെയ്ത് ടെസ്റ്റു ചെയ്തു. ഫോൾഡറിൽ കാണുന്ന Chilanka-Regular.ttf ഫയൽ ഇൻസ്റ്റാൾ ചെയ്യുകയുമാവാം. ജിഞ്ജാസുക്കൾക്ക് ഇപ്പോൾ എന്താ സംഭവിച്ചതു് എന്നറിയാൽ ഫയലുകളൊക്കെ തുറന്നു നോക്കാം. Chilanka-Regular.sfd എന്ന ഫയൽ ഫോണ്ട് ഫോർജ് കൊണ്ടു തുറന്നാൽ ചിലങ്ക ഫോണ്ടിലെ എല്ലാ ഗ്ലിഫുകളും കാണാം. features എന്ന ഫോൾഡറിൽ ചിത്രീകരണനിയമങ്ങൾ കോഡ് ചെയ്തതും കാണാം.

ഇനി നമ്മൾ ഇതിലെ ഏതെങ്കിലും ഒരു അക്ഷരം മാറ്റി വരയ്ക്കാൻ പോവുകയാണ്. glyphs എന്ന ഫോൾഡറിൽ കാണുന്ന നൂറുകണക്കിനു svg ഫയലുകളിലാണ് ചിലങ്ക ഫോണ്ടിന്റെ അക്ഷരങ്ങൾ വരച്ചിട്ടുള്ളതു്. അതിലേതെങ്കിലും ഒന്നു തുറന്ന് എഡിറ്റ് ചെയ്യാം. പുതുതായി ഒന്നു വരയ്ക്കണമെങ്കിൽ template.svg എന്ന ഫയൽ തുറന്ന് അതിലെ ഗ്രിഡ് ഒക്കെ ഉപയോഗിച്ച് വരയ്ക്കാം. ഇങ്ക് സ്കേപ്പ് ഉപയോഗിക്കാം. അല്ലെങ്കിൽ വേറേതെങ്കിലും നിങ്ങൾക്കറിയുന്ന svg എഡിറ്റർ ഉപയോഗിക്കാം. ക എന്ന ഒരൊക്ഷരം ഇങ്ക്‌സ്കേപിൽ വരക്കുന്ന ഒരു വീഡിയോ ഒരുദാഹരണത്തിന് വേണ്ടി ഞാൻ കുറേ കാലം മുമ്പ് യുട്യൂബിൽ ഇട്ടിട്ടുണ്ട്. ശ്രദ്ധിക്കേണ്ട ഒരു കാര്യം സ്ട്രോക്കുകളെ പാത്ത് ആക്കണം വരച്ചു കഴിഞ്ഞാൽ എന്നതാണ്. അങ്ങനെ വരച്ച ഇമേജ് സെലക്ട് ചെയ്ത് കോപി ചെയ്ത് ഫോണ്ട് ഫോർജിൽ തുറന്നിരിക്കുന്ന അതേ അക്ഷരത്തിൽ കൊണ്ടുപോയി പേസ്റ്റ് ചെയ്യുക. ഫോണ്ട്ഫോർജിൽ ആ മാറ്റം സേവ് ചെയ്യണം. എന്നിട്ട് make all എന്ന കമാന്റ് അടിക്കുക. നേരത്തെ പറഞ്ഞ പിഡിഎഫിൽ നിങ്ങൾ ഇപ്പോൾ മാറ്റിവരച്ച അക്ഷരങ്ങൾ കാണും!.

മേൽ വിവരിച്ച പരിശീലനം അത്ര എളുപ്പമല്ല എന്നറിയാം. ടൂളുകൾ ഉപയോഗിക്കാൻ പരിശീലിക്കേണ്ടതുണ്ട്, വരയ്ക്കാൻ പരിശീലിക്കേണ്ടതുണ്ടു്, ടെർമിനൽ ഉപയോഗിക്കാൻ അറിഞ്ഞിരിക്കണം. അങ്ങനെ കുറേ കടമ്പകളുണ്ടു്. പക്ഷേ ഈ ഓരോ സ്റ്റെപ്പും പരിശീലിക്കാതെ നിവൃത്തിയില്ല. അതിനു നിങ്ങൾ കുറേ സമയവുമെടുത്തേക്കും. നിങ്ങൾ ഇതിൽ വിജയിച്ചില്ലെങ്കിലും സങ്കടപ്പെടേണ്ട. വർഷങ്ങളുടെ പരിശീലനവും നിരീക്ഷണവും ശരാശരിയിൽ കവിഞ്ഞ കമ്പ്യൂട്ടർ പ്രയോഗത്തിലുള്ള കഴിവുകളും ഫോണ്ട് നിർമാണത്തിനാവശ്യമുണ്ടെന്നു മനസ്സിലായാലും മതി.

ചുരുക്കത്തിൽ

  1. അക്ഷരങ്ങളെ ടൈപ്പൊഗ്രഫി എന്ന കാഴ്ചപ്പാടിൽ നീരിക്ഷിക്കുക, ആസ്വദിക്കാൻ ശീലിക്കുക. നിലവിലെ ഫോണ്ടുകളും അവയുടെ സോഴ്സ് കോഡും പഠിക്കുക.
  2. വിവിധ തരം വരകൾ പ്രാക്ടീസ് ചെയ്യുക – പേപ്പറിലാവാം ഇമേജ് എഡിറ്ററിലാവാം
  3. നല്ല ഒരു ഡിസൈൻ സങ്കൽപം ഉണ്ടാക്കിയെടുക്കുക. പൂർണ്ണമായ ഒരു ഫോണ്ടു് എന്ന ലക്ഷ്യത്തിലേക്ക് ആ സങ്കല്പം യോജിക്കുന്നതാണോയെന്നാലോചിക്കുക. കുറച്ച് സാമ്പിളുകൾ വരച്ചുനോക്കുക.
  4. നല്ലൊരു ഫോണ്ട് എഡിറ്റർ/ഇമേജ് എഡിറ്റർ തിരഞ്ഞെടുക്കുക. ഫോണ്ട് ടൂൾകിറ്റായി നിലവിലെ സ്വതന്ത്ര ഫോണ്ടുകളുടെ സോഴ്സ് കോഡ് ഉപയോഗിക്കുക – അതോടൊപ്പം ഫോണ്ട് കമ്പൈൽ ചെയ്യാനും ടെസ്റ്റ് ചെയ്യാനുമുള്ള ടൂളുകൾ കിട്ടുന്നു. ലൈസൻസിങ്ങ് ശ്രദ്ധിക്കുക.
  5. അക്ഷരങ്ങൾ വരച്ചു തുടങ്ങുക. ഫോണ്ട് എഡിറ്ററിൽ ചേർക്കുക. പല വട്ടം മാറ്റിവരയ്ക്കേണ്ടിവരും.
  6. പല രീതിയിലുള്ള ടെസ്റ്റുകൾ ചെയ്യുക.
  7. ഫോണ്ട് റിലീസ്
  8. മെയിന്റനൻസ്

സഹായം വേണമെങ്കിൽ

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

It is your language and your pen

Photo by Joe Shillington on Unsplash

Google recently added voice typing support to more languages. Among the languages Malayalam is also included. The speech recognition is good quality and I see lot of positive comments in my social media stream. Many people started using it as primary input mechanism. This is a big step for Malayalam users without any doubt. Technical difficulties related to writing in Malayalam in mobile devices is getting reduced a lot. This will lead to more content generated and that is one of the stated goals of Google’s Next billion users project. The cloud api for speech recognition will help android developers to build new innovative apps around the speech recognition feature.

Google had added handwriting based input method for many of these languages in 2015. It was also well recieved by Malayalam user community and many chose it as primary input method mechanism for mobile devices.

Google’s machine learning based language tools, including the machine translation is well engineered projects and takes the language technology forward. For a language like Malayalam with relatively less language processing technology, this is a big boost. There is not even a competing product in the above mentioned areas.

All of these above technologies are closed source software, completely controlled by Google. Google’s opensource strategy is a complicated one. Google supports and uses opensource to gain maximum out of it – a pragmatic corporate exploitation. Machine learning based technologies are complex to be defined in the traditional open source definition. Here, for a ML based service provider, the training toolkit might be opensource, tensorflow for example. At the same time, the training data, models might be closed and secret. So, basically the system can be only reproduced by the owners of the data and those who has enough processing capacity. These emerging trends in language technology is also hard for individual opensource developers to catch up because of resourcing issues(data, processing capacity).

Is this model good for language?

Think about this. With no competition, the android operating system with Google’s technology platform is becoming default presence in mobile devices of Malayalam speakers with no doubt. The new language technologies are being quickly accepted as the one and only way to convey a persons expressions to digital world. No, it is not an exaggeration. The availability and quality of these tools is clearly winning its mass user crowd. There is no formal education for Malayalam typing. People discover and try anything that is available. For a new person to the digital world, handwriting was the easiest method to input Malayalam. Now it is speech recognition. And that will be the one and only one way these users know to enter Malayalam content. And these tools are fully owned and controlled by Google with no alternatives.

The open soure alternatives for input methods are still at the traditional typing keyboards. With its peers, they indeed won large user base and it even came to the users before Google entered. For example, the Indic keyboard has 1.4 million installations and actively improved by contributor for 23 languages. But I don’t see any opensource project that is in parallel with handwriting and speech recognition based input methods. As a developer working in Indic language technology based on free software, this is indeed a failure of opensource community.

I contacted a few academic researchers working on speech recognition and handwring recognition and asked what they think about these products by Google. For them, it is more difficult to convince the value of their research. ‘Well, we have products from Google that does this and thousands are using it. Why you want to work again on it?’ This question can’t be answered easily.

But to me, all of these products and its above mentioned nature strongly emphasis the need for free software alternatives. The mediation by closed sourced systems on one of the fundamental language computing task- inputting – with no alternatives puts the whole language and hence its users in heavy risk. Input method technologies, speech recognition, handwriting recognition.. all these are core to the language technology. These technolgies and science behind them should be owned by its speakers. People should be able to study, innovate on top of this technology and should be able to build mechanisms that are free from any corporate control to express their language.

I don’t want to imply or spread fear, uncertainity that Google will one day just start charging for these services or shutdown the tools. That is not my concern. All these language tools I mentioned are not to be built for facing that situation. It is to be developed as fundamental communication tools for the people for the digital age – build, own, learn, use, maintain by the people.

Anniversary of Manjari font release

Today, July 23 marks one year anniversary of Manjari font release.

Out of all my projects, this is the project that gave me highest satisfaction. I see people using it in social media every day for memes, banners, notices. I have seen the font used for Government publishings, notices, reports. I have seen wedding invitations, book covers, Movie titles with Manjari font. I am so happy that Malayalam speakers loved it.

Kavya and me are working on new version of Manjari with more glyphs to support latest Unicode, and optimize some of the ligature rules. The latest version of the font is always available at https://smc.org.in/fonts