Creating a new Language ecosystem- Sourashtra as example

Sourashtra is a language spoken by Sourashtra  people living in South Tamilnadu and Gujarat of India. Originated from Brahmi and then Grandha, this language is mother tongue for half a million people. But most of them are not familiar with the script of this language. Very few people knows reading and writing on Sourashtra script. Sourashtra has a ISO 639-3 language code saz and  Unicode range  U+A880 – U+A8DF

Recently Sourashtra wikipedia project was started in the wikimedia incubator : and Mediawiki localization started in translatewiki Since the language did not had any proper fonts or input tools, this was not going well.

When we add a  new language support in Mediawiki or start a new language wikipedia,  we need to develop the language technology ecosystem to support its growth. This ecosystem comprises of Unicode code points for the script, proper fonts, rendering support,  input tools, availability of these fonts and input tools in operating systems or alternate ways to get it working in operating system etc.

Sourashtra language had a unicode font developed by Prabu M Rengachari, named ‘Sourashtra’ itself. The font had problems with browsers/operating systems. We fixed to make it work properly. The font was not licensed properly. Prabu agreed to release it in GNU GPLV3 license with font exception. He also agreed to rename the font to another name other than the script name itself.

The font was renamed to Pagul, meaning ‘Footstep’ in Sourashtra and hosted in sourceforge

Once we have a font with proper license, we wanted it to be available in operating systems. I filed a packaging request in Debian. Vasudev Kamath of Debian India Team packaged it and now it is available in debian unstable(sid).  Parag Nemade of Fedora India packaged the font for Fedora and will be avialable in upcoming Fedora 15.

To add a new language support in operating system, we need a locale definition. In GNU Linux this is GLibc locale definition. With the help of Prabu, I prepared the saz_IN locale file for glibc, and filed as bug report to add to glibc. I hope, soon it will be part of Glibc.

Well, all of these was possible since it was GNU/Linux or Free software. Things are a bit difficult on the other side, proprietary operating system world. There is nothing we can do with those operating systems. Since there is no ‘market’ for these minority language, it won’t come to the priority of those companies to add support for these languages. Users will see squares or question marks when they visit sourashtra wikipedia.

We are working on a solution for this, not only for sourashtra, but a common solution for all languages. We are developing a webfonts extension for Mediawiki to provide font embedding in wiki pages to avoid the necessity of having fonts installed in user’s computers. The extension is in development and one can preview it in my test wiki. For Sourashtra, we added webfonts support(preview) .

Input tools needs to be developed and packaged. For mediaiwki, with the help of Narayam extension, we can easily add this support.

With the silpa project, I added a server side, PDF/PNG/SVG rendering support for Sourashtra as well.


Tamil Collation in GLIBC

A  few months back, we started fixing the collation rules of Indian languages in GNU C library. Pravin Satpute prepared patches for many languages and I prepared patches for Malayalam and Tamil. Later Pravin enhanced the Tamil patch.

You can read the rules used for Malayalam collation here[PDF document]. Tamil patch was applied to upstream, but the bug is still open since there is some confusion on the results.

Before reading the below discussion, please read the discussion happened in the bug report : [ta_IN] Tamil collation rules are not working in other locales

Since many Tamil friends can give valuable comments on this, I am giving an explanation for my patch here. K Sethu gave some interestin his comments on the patch and I would like to hear from others also. Since collation is a very important component on Tamil support, I feel that an open discussion and consensus  should happen among language speakers outside bug trackers.

This is the logic used currently in Tamil and Malayalam Collation rules also follow the same logic.

  1. Consider each consonant as pure consonant + implicit a vowel. ie க= க் + அ   and த= த்+ அ
  2. Similarly கா = க்+ ஆ, தி = த்+ இ
  3. From #1 and #2, க் < க, த்< த , We get this output for example:அ
    But K Sethu questions this order in his comment here.According to him
    ( consonant1+ virma+ consonant2 ) < ( consonant1+ vowel + [consonant2] )
    or The correct sequence should be அ, அக், அக்கம், அக்கு, அகம், அகால
    But as per my patch
    ( consonant1+ virma+ consonant2 ) > ( consonant1+ vowel + [consontant2] )
    ie, all conjuncts for consonant1 happens after all consonant1+vowel + * sequences.
    So let me try to explain this behaviour.
  4. let us take க்த and கத:க்த = க்+ த்+ அ
    கத = க்+ அ+ த்+ அ
    considering the weight comparison logic(decreasing weight from left to right)
    this comparison becomes between
    க்+ த்+ அ and க்+ அ+ த்+ அ
    since க் is common in first weight, removing it. so it becomes
    த்+ அ and அ+ த்+ அ
    Since த் > அ
    த்+ அ > அ+ த்+ அ
    and there by
    க்த > கத
    So conjuncts comes after the cosonant+vowel pairs. hence the result given in #3

Apart from these, equal weights are assigned for ோ (0BCB), ௌ (0BCC), and their canonical equivalent forms.

If anybody interested in testing the patch, get ta_IN and iso14651_t1_common files from here, back up those file in /usr/share/i18n/locales, and place these two files there. reconfigure your locale using “sudo dpkg-reconfigure locales”. Sort some random file using “LANG=ta_IN sort yourfile”. If your distro is not debian based, follow the instructions from here

There is an easy way to test this. Silpa project provides an online application for Indic language collation. You can try it from here. It is a Unicode Collation algorithm implementation. The Unicode collation definition has many mistakes but we have a patched version. You can compare the results between original and patched version.

Feel free to inform this discussion to anybody interested on Tamil Computing. I would be happy to help in the implementation if we  reach  a consensus.

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

സ്വതന്ത്ര പ്രവര്‍ത്തകസംവിധാനങ്ങള്‍ക്കായി തയ്യാറാക്കിയ glibc (Gnu C Library ) അകാരാദിക്രമത്തിന്റെ(Collation) വിശദവിവരങ്ങള്‍ താഴെക്കൊടുക്കുന്നു. അഭിപ്രായങ്ങള്‍ അറിയിക്കുക.

താഴെപ്പറയുന്ന നിയമങ്ങളുടെ അടിസ്ഥാനത്തിലാണു് മലയാളം അകാരാദിക്രമം തയ്യാറാക്കിയിരിക്കുന്നതു്.

  1. അക്ഷരമാലാക്രമം പിന്തുടരുക.
  2. അനുസ്വാരം മയുടെ സ്വരസാന്നിദ്ധ്യമില്ലാത്ത രൂപമായി പരിഗണിച്ചു് മയുടെ തൊട്ടുമുന്നില്‍ ക്രമീകരിയ്ക്കുക. പംപ < പമ്പ എന്ന പോലെ .
  3. ഓരോ വ്യഞ്ജനവും അതിന്റെ സ്വരസാന്നിദ്ധ്യമില്ലാത്ത രൂപത്തിന്റെ കൂടെ അകാരം ഉള്ള രൂപമായി കണക്കാക്കുക. അതായതു് ത എന്നതു് ത് എന്ന സ്വരസാന്നിദ്ധ്യമില്ലാത്ത വ്യഞ്ജനത്തിന്റെ കൂടെ അകാരം ഉള്ള രൂപമാണു്. ത = ത് + അ . താ = ത് + ആ എന്നിങ്ങനെ. ഇതില്‍ നിന്നും ത് < ത എന്നു വ്യക്തമാകുന്നു. അതുകൊണ്ടു് ത എന്നതു് ത് കഴിഞ്ഞേ വരൂ. അത് < അതല്ല < അതാണു്. അതേസമയം അത്ഭുതം > അതഭ. കൂട്ടക്ഷരങ്ങള്‍ അതിലെ ആദ്യത്തെ അക്ഷരത്തില്‍ സ്വരചിഹങ്ങള്‍ ചേര്‍ന്ന രൂപങ്ങളെല്ലാം കഴിഞ്ഞേ വരൂ.
    ത്ഭ = ത + ് + ഭ + ് + അ
    തഭ = ത + ് + അ + ഭ + ് + അ
    ആദ്യത്തെ രണ്ടക്ഷരങ്ങള്‍ തുല്യമായതുകൊണ്ടു്, ഇതിനെ നമുക്കു്
    ഭ + ് + അ
    അ + ഭ + ് + അ
    എന്നെഴുതാം. ഭ > അ ആണല്ലോ. അതുകൊണ്ടു് അത്ഭുതം എന്നതു് അതഭ എന്നതിനു ശേഷമേ വരൂ.
  4. ചില്ലക്ഷരങ്ങള്‍ അതാതിന്റെ വ്യഞ്ജങ്ങളുടെ സ്വരമില്ലാത്ത രൂപങ്ങളായതിനാല്‍ മേല്‍പറഞ്ഞപോലെ ക്രമീകരിക്കപ്പെടും. അതായതു് ര്‍ < ര . ഉദാഹരണം:



  5. സംവൃതോകാരം ഉകാരത്തിനു തൊട്ടു പിന്നില്‍ വരും. അതു് < അതു
  6. മലയാളം അക്കങ്ങള്‍ അവയുടെ അറബി ലിപികളുടെ കൂടെ തന്നെ വരും.




    എന്ന രീതിയില്‍

  7. കൌ, കൗ എന്നിവ തുല്യങ്ങളായി കണക്കാക്കപ്പെടും.

    എന്ന രീതിയില്‍

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

ഈ വിഷയത്തെപ്പറ്റി നടന്ന ചര്‍ച്ചയും കൂടുതല്‍ വിവരങ്ങളും ഇവിടെ . പ്രത്യേകിച്ചു പ്രശ്നങ്ങളൊന്നുമില്ലെങ്കില്‍ യൂണിക്കോഡ് കൊളേഷന്‍ തിരുത്തി ശരിയാക്കാന്‍ ഇതു് അടിസ്ഥാനമാക്കാം.