wikimedia/mediawiki-extensions-UniversalLanguageSelector

View on GitHub
lib/jquery.ime/rules/bo/bo-sambhota.js

Summary

Maintainability
A
0 mins
Test Coverage
( function ( $ ) {
    'use strict';

    var stackingState, boSAMBHOTA;

    function changeStackingState( newState ) {
        stackingState = newState;
    }

    function reinit() {
        changeStackingState( 0 );
    }

    reinit();

    // isOneChar is true for composed sanskrit characters (ex གྷ)
    function normalOrSub( normal, sub, alwaysStacked, isOneChar ) {
        switch ( stackingState ) {
            case 0:
                return normal;
            case 1:
                if ( !isOneChar ) {
                    changeStackingState( 2 );
                }

                return normal;
            case 2:
                if ( !isOneChar ) {
                    changeStackingState( 3 );
                }

                return sub;
            default:
                if ( alwaysStacked ) {
                    return sub;
                }

                changeStackingState( 0 );

                return normal;
        }
    }

    function switchStacking() {
        if ( !stackingState ) {
            changeStackingState( 1 );
        } else {
            changeStackingState( 0 );
        }
    }

    boSAMBHOTA = {
        id: 'bo-sambhota',
        name: 'Tibetan Sambhota',
        description: 'Tibetan Sambhota Input Method.',
        date: '2015-08-04',
        URL: 'https://github.com/tibetan-nlp/ttt/blob/master/source/Sambhota_keymap_one.rtf',
        author: 'Elie Roux <elie.roux@telecom-bretagne.eu>',
        license: 'GPLv3',
        version: '1.0',
        maxKeyLength: 5,
        patterns: [
            /* eslint-disable max-statements-per-line */
            /* eslint-disable brace-style */
            [ ' ', function () { reinit(); return '་'; } ],
            [ '\\.', function () { reinit(); return ' '; } ],
            [ ',', function () { reinit(); return '།'; } ],
            [ ';', function () { reinit(); return '༔'; } ],
            [ 'f', function () { switchStacking(); return ''; } ],
            [ 'a', function () { reinit(); return ''; } ],
            [ 'k', function () { return normalOrSub( 'ཀ', 'ྐ' ); } ],
            [ 'K', function () { return normalOrSub( 'ཁ', 'ྑ' ); } ],
            [ 'g', function () { return normalOrSub( 'ག', 'ྒ' ); } ],
            [ 'G', function () { return normalOrSub( 'ང', 'ྔ' ); } ],
            [ 'c', function () { return normalOrSub( 'ཅ', 'ྕ' ); } ],
            [ 'C', function () { return normalOrSub( 'ཆ', 'ྖ' ); } ],
            [ 'j', function () { return normalOrSub( 'ཇ', 'ྗ' ); } ],
            [ 'N', function () { return normalOrSub( 'ཉ', 'ྙ' ); } ],
            [ 'q', function () { return normalOrSub( 'ཊ', 'ྚ' ); } ],
            [ 'Q', function () { return normalOrSub( 'ཋ', 'ྛ' ); } ],
            [ 'v', function () { return normalOrSub( 'ཌ', 'ྜ' ); } ],
            [ 'V', function () { return normalOrSub( 'ཎ', 'ྞ' ); } ],
            [ 't', function () { return normalOrSub( 'ཏ', 'ྟ' ); } ],
            [ 'T', function () { return normalOrSub( 'ཐ', 'ྠ' ); } ],
            [ 'd', function () { return normalOrSub( 'ད', 'ྡ' ); } ],
            [ 'གྷn', function () { return normalOrSub( 'གྷན', 'གྷྣ' ); } ],
            [ 'n', function () { return normalOrSub( 'ན', 'ྣ' ); } ],
            [ 'p', function () { return normalOrSub( 'པ', 'ྤ' ); } ],
            [ 'P', function () { return normalOrSub( 'ཕ', 'ྥ' ); } ],
            [ 'b', function () { return normalOrSub( 'བ', 'ྦ' ); } ],
            [ 'རྨm', function () { return normalOrSub( 'རྨམ', 'རྨྨ', true ); } ],
            [ 'm', function () { return normalOrSub( 'མ', 'ྨ' ); } ],
            [ 'x', function () { return normalOrSub( 'ཙ', 'ྩ' ); } ],
            [ 'X', function () { return normalOrSub( 'ཚ', 'ྪ' ); } ],
            [ 'D', function () { return normalOrSub( 'ཛ', 'ྫ' ); } ],
            [ 'ྭw', function () { return normalOrSub( 'ྭཝ', 'ྭྭ' ); } ],
            [ 'w', function () { return normalOrSub( 'ཝ', 'ྭ', true ); } ],
            [ 'W', function () { return normalOrSub( 'ཝ', 'ྺ' ); } ],
            [ 'Z', function () { return normalOrSub( 'ཞ', 'ྮ' ); } ],
            [ 'z', function () { return normalOrSub( 'ཟ', 'ྯ' ); } ],
            [ 'ཱ\'', function () { return normalOrSub( 'ཱ\'འ', 'ཱཱ' ); } ],
            [ '\'', function () { return normalOrSub( 'འ', 'ཱ', true ); } ],
            [ 'ྱy', function () { return normalOrSub( 'ྱཡ', 'ྱྱ' ); } ],
            [ 'y', function () { return normalOrSub( 'ཡ', 'ྱ', true ); } ],
            [ 'l', function () { return normalOrSub( 'ལ', 'ླ' ); } ],
            [ 'i', function () { reinit(); return 'ི'; } ],
            [ 'u', function () { reinit(); return 'ུ'; } ],
            [ 'e', function () { reinit(); return 'ེ'; } ],
            [ 'o', function () { reinit(); return 'ོ'; } ],
            [ 'ལ([ྐ-ྷ]+)r', function ( _, capture ) { reinit(); return 'ལ' + capture + 'ར'; } ],
            [ 'ྐr', function () { return normalOrSub( 'ྐར', 'ྐྲ', true ); } ],
            [ 'ྒr', function () { return normalOrSub( 'ྒར', 'ྒྲ', true ); } ],
            [ 'ྣr', function () { return normalOrSub( 'ྣར', 'ྣྲ', true ); } ],
            [ 'ྤr', function () { return normalOrSub( 'ྤར', 'ྤྲ', true ); } ],
            [ 'ྦr', function () { return normalOrSub( 'ྦར', 'ྦྲ', true ); } ],
            [ 'ྨr', function () { return normalOrSub( 'ྨར', 'ྨྲ', true ); } ],
            [ 'སྡr', function () { reinit(); return 'སྡར'; } ],
            [ 'ྡr', function () { return normalOrSub( 'ྡར', 'ྡྲ', true ); } ],
            [ 'ྦྷr', function () { return normalOrSub( 'ྦྷར', 'ྦྷྲ', true ); } ],
            [ 'ྡྷr', function () { return normalOrSub( 'ྡྷར', 'ྡྷྲ', true ); } ],
            [ 'ྒྷr', function () { return normalOrSub( 'ྒྷར', 'ྒྷྲ', true ); } ],
            [ 'ྜྷr', function () { return normalOrSub( 'ྜྷར', 'ྜྷྲ', true ); } ],
            [ 'ྟr', function () { return normalOrSub( 'ྟར', 'ྟྲ', true ); } ],
            [ 'r', function () { return normalOrSub( 'ར', 'ྲ' ); } ],
            [ 'S', function () { return normalOrSub( 'ཤ', 'ྴ' ); } ],
            [ 'ཀB', function () { return normalOrSub( 'ཀཥ', 'ཀྵ', true, true ); } ],
            [ 'ྐB', function () { return normalOrSub( 'ྐཥ', 'ྐྵ', true, true ); } ],
            [ 'B', function () { return normalOrSub( 'ཥ', 'ྵ' ); } ],
            [ 's', function () { return normalOrSub( 'ས', 'ྶ' ); } ],
            [ 'གh', function () { return normalOrSub( 'གཧ', 'གྷ', true, true ); } ],
            [ 'ཌh', function () { return normalOrSub( 'ཌཧ', 'ཌྷ', true, true ); } ],
            [ 'དh', function () { return normalOrSub( 'དཧ', 'དྷ', true, true ); } ],
            [ 'བh', function () { return normalOrSub( 'བཧ', 'བྷ', true, true ); } ],
            [ 'ཛh', function () { return normalOrSub( 'ཛཧ', 'ཛྷ', true, true ); } ],
            [ 'ྒh', function () { return normalOrSub( 'ྒཧ', 'ྒྷ', true, true ); } ],
            [ 'ྜh', function () { return normalOrSub( 'ྜཧ', 'ྜྷ', true, true ); } ],
            [ 'ྡh', function () { return normalOrSub( 'ྡཧ', 'ྡྷ', true, true ); } ],
            [ 'ྦh', function () { return normalOrSub( 'ྦཧ', 'ྦྷ', true, true ); } ],
            [ 'ྫh', function () { return normalOrSub( 'ྫཧ', 'ྫྷ', true, true ); } ],
            [ 'ྷh', function () { return normalOrSub( 'ྷཧ', 'ྷྷ' ); } ],
            [ 'h', function () { return normalOrSub( 'ཧ', 'ྷ', true ); } ],
            [ 'A', function () { return normalOrSub( 'ཨ', 'ྸ' ); } ],
            [ 'R', function () { return normalOrSub( 'ཪ', 'ྼ' ); } ],
            [ 'Y', 'ྻ' ],
            [ 'ྲI', function () { reinit(); return 'ྲྀ'; } ],
            [ 'ླI', function () { reinit(); return 'ླྀ'; } ],
            [ 'I', function () { reinit(); return 'ྀ'; } ],
            [ 'E', function () { reinit(); return 'ཻ'; } ],
            [ 'O', function () { reinit(); return 'ཽ'; } ],
            [ 'J', function () { reinit(); return 'ིཾ'; } ],
            [ 'U', function () { reinit(); return 'ྀཾ'; } ],
            [ 'F', function () { reinit(); return 'ེཾ'; } ],
            [ 'L', function () { reinit(); return 'ོཾ'; } ],
            [ '`', function () { reinit(); return 'ཽཾ'; } ],
            [ '~', function () { reinit(); return 'ཻཾ'; } ],
            [ '\\^', function () { reinit(); return '྄'; } ],
            [ '\\!', function () { reinit(); return '༄༅༅'; } ],
            [ '\\#', function () { reinit(); return '༁ྃ'; } ],
            [ '\\%', function () { reinit(); return 'ྃ'; } ],
            [ '\\+', function () { reinit(); return 'ྂ'; } ],
            [ '\\&', function () { reinit(); return 'ཾ'; } ],
            [ '\\<', function () { reinit(); return 'ༀ'; } ],
            [ '\\=', function () { reinit(); return 'ཨཱཿ'; } ],
            [ '\\>', function () { reinit(); return 'ཧཱུྃ'; } ],
            [ '\\:', function () { reinit(); return 'ཿ'; } ],
            [ '"', function () { reinit(); return '༄༅'; } ],
            [ '@', function () { reinit(); return '༄'; } ],
            [ '\\$', function () { reinit(); return '༅'; } ],
            [ '\\/', function () { reinit(); return '༴'; } ],
            [ '\\?', function () { reinit(); return '༈'; } ],
            [ '\\|', function () { reinit(); return '྅'; } ],
            [ '-', function () { reinit(); return '༑'; } ],
            [ '\\(', function () { reinit(); return '༼'; } ],
            [ '\\)', function () { reinit(); return '༽'; } ],
            // numbers
            [ '0', function () { reinit(); return '༠'; } ],
            [ '1', function () { reinit(); return '༡'; } ],
            [ '2', function () { reinit(); return '༢'; } ],
            [ '3', function () { reinit(); return '༣'; } ],
            [ '4', function () { reinit(); return '༤'; } ],
            [ '5', function () { reinit(); return '༥'; } ],
            [ '6', function () { reinit(); return '༦'; } ],
            [ '7', function () { reinit(); return '༧'; } ],
            [ '8', function () { reinit(); return '༨'; } ],
            [ '9', function () { reinit(); return '༩'; } ]
            /* eslint-enable max-statements-per-line */
            /* eslint-enable brace-style */
        ]
    };

    $.ime.register( boSAMBHOTA );
}( jQuery ) );