wikimedia/mediawiki-extensions-UniversalLanguageSelector

View on GitHub
lib/jquery.ime/rules/fonipa/ipa-sil.js

Summary

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

    var ipaSil = {
        id: 'ipa-sil',
        name: 'International Phonetic Alphabet - SIL',
        description: 'International Phonetic Alphabet - SIL',
        date: '2012-11-23',
        URL: 'http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=UniIPAKeyboard',
        author: 'mapping by Martin Hosken and Lorna A. Priest; implementation by Amir E. Aharoni',
        license: 'GPLv3',
        version: '1.0',
        contextLength: 0,
        maxKeyLength: 2,
        patterns: [
            [ 'B=', 'ʙ' ],
            [ 'f=', 'ɸ' ],
            [ 'b=', 'β' ],

            [ 'm>', 'ɱ' ],
            [ 'v<', 'ⱱ' ],
            [ 'v=', 'ʋ' ],

            [ 't=', 'θ' ],
            [ 'd=', 'ð' ],

            [ 'r>', 'ɾ' ],
            [ 'l=', 'ɬ' ],
            [ 'l>', 'ɮ' ],
            [ 'r=', 'ɹ' ],

            [ 's=', 'ʃ' ],
            [ 'z=', 'ʒ' ],

            [ 't<', 'ʈ' ],
            [ 'd<', 'ɖ' ],
            [ 'n<', 'ɳ' ],
            [ 'r<', 'ɽ' ],
            [ 's<', 'ʂ' ],
            [ 'z<', 'ʐ' ],
            [ 'R<', 'ɻ' ],
            [ 'l<', 'ɭ' ],

            [ 'j=', 'ɟ' ],
            [ 'n=', 'ɲ' ],
            [ 'c=', 'ç' ],
            [ 'j<', 'ʝ' ],
            [ 'L<', 'ʎ' ],

            [ 'g<', 'ɡ' ],
            [ 'n>', 'ŋ' ],
            [ 'g=', 'ɣ' ],
            [ 'w>', 'ɰ' ],
            [ 'L=', 'ʟ' ],

            [ 'G=', 'ɢ' ],
            [ 'N=', 'ɴ' ],
            [ 'R=', 'ʀ' ],
            [ 'x=', 'χ' ],
            [ 'R>', 'ʁ' ],

            [ 'h>', 'ħ' ],
            [ '\\?<', 'ʕ' ],

            [ '\\?=', 'ʔ' ],
            [ 'h<', 'ɦ' ],

            [ 'p=', 'ʘ' ],
            [ 'ǃ<', 'ǀ' ], // This is not an exclamation mark
            [ '!', 'ǃ' ],
            [ 'ǃ=', 'ǂ' ], // This is not an exclamation mark
            [ 'ǃ>', 'ǁ' ], // This is not an exclamation mark

            [ 'b>', 'ɓ' ],
            [ 'd>', 'ɗ' ],
            [ 'j>', 'ʄ' ],
            [ 'g>', 'ɠ' ],
            [ 'G>', 'ʛ' ],

            [ 'w=', 'ʍ' ],
            [ 'y<', 'ɥ' ],
            [ 'h=', 'ɥ' ],
            [ 'H=', 'ʜ' ],
            [ 'Q<', 'ʢ' ],
            [ 'Q=', 'ʡ' ],
            // TODO non-IPA retroflex hooks

            [ 'c<', 'ɕ' ],
            [ 'z>', 'ʑ' ],
            [ 'L>', 'ɺ' ],
            [ 'H<', 'ɧ' ],

            [ 'i=', 'ɪ' ],
            [ 'e<', 'ɛ' ],
            [ 'a<', 'æ' ],

            [ 'y=', 'ʏ' ],
            [ 'o>', 'ø' ],
            [ 'E<', 'œ' ],
            [ 'E>', 'ɶ' ],

            [ 'I=', 'ɨ' ],
            [ 'E=', 'ɘ' ],
            [ 'e=', 'ə' ],
            [ 'e>', 'ɜ' ],
            [ 'a>', 'ɐ' ],
            [ 'U=', 'ʉ' ],
            [ 'O=', 'ɵ' ],
            [ 'O<', 'ɞ' ],

            [ 'u=', 'ɯ' ],
            [ 'O>', 'ɤ' ],
            [ 'u>', 'ʌ' ],
            [ 'a=', 'ɑ' ],
            [ 'u', 'u' ],
            [ 'u<', 'ʊ' ],
            [ 'o<', 'ɔ' ],
            [ 'o=', 'ɒ' ],

            [ 'ˈ}', 'ˌ' ], // }}
            [ '}', 'ˈ' ],
            [ 'ː:', 'ˑ' ], // ::
            [ 'ˑ:', 'ːː' ], // ::: // Not IPA sanctioned
            [ ':', 'ː' ],
            [ '\\*\\*\\*', '\u0306' ], // Combining breve
            [ '\\.<', '|' ],
            [ '\\.=', '‖' ],
            [ '#=', '‿' ],

            // Tones
            [ '([˥-˩])4', '$1˥' ],
            [ '([˥-˩])3', '$1˦' ],
            [ '([˥-˩])2', '$1˧' ],
            [ '([˥-˩])1', '$1˨' ],
            [ '([˥-˩])0', '$1˩' ],
            [ '#4', '˥' ],
            [ '#3', '˦' ],
            [ '#2', '˧' ],
            [ '#1', '˨' ],
            [ '#0', '˩' ],
            [ '(?:\u0300)3', '\u030C' ], // @13 - Combining caron
            [ '(?:\u0301)1', '\u0302' ], // @31 - Combining circumflex accent
            [ '(?:\u0304)3', '\u1dc4' ], // @23 - Combining macron-acute
            [ '(?:\u0300)2', '\u1dc5' ], // @12 - Combining grave-macron
            [ '(?:\u030C)1', '\u1dc8' ], // @131 - Combining grave-acute-grave
            [ '(?:\u0304)1', '\u1dc6' ], // @21 - Combining macron-grave // Not IPA sanctioned
            [ '(?:\u0301)2', '\u1dc7' ], // @32 - Combining acute-macron // Not IPA sanctioned
            [ '(?:\u0302)3', '\u1dc9' ], // @313 - Combining acute-grave-acute // Not IPA sanctioned
            [ '(?:\u030a)4', '\u030b' ], // Combining double acute accent
            [ '(?:\u030a)3', '\u0301' ], // Combining acute accent
            [ '(?:\u030a)2', '\u0304' ], // Combining macron
            [ '(?:\u030a)1', '\u0300' ], // Combining grave accent
            [ '(?:\u030a)0', '\u030f' ], // Combining double grave accent

            // Tone numbers (non-IPA)
            [ '\\^0', '⁰' ], // Not IPA sanctioned
            [ '\\^1', '¹' ], // Not IPA sanctioned
            [ '\\^2', '²' ], // Not IPA sanctioned
            [ '\\^3', '³' ], // Not IPA sanctioned
            [ '\\^4', '⁴' ], // Not IPA sanctioned
            [ '\\^5', '⁵' ], // Not IPA sanctioned
            [ '\\^6', '⁶' ], // Not IPA sanctioned
            [ '\\^7', '⁷' ], // Not IPA sanctioned
            [ '\\^8', '⁸' ], // Not IPA sanctioned
            [ '\\^9', '⁹' ], // Not IPA sanctioned
            // This character is called "Superscript hyphen" in the layout document,
            // and "Superscript minus" in Unicode
            [ '\\^-', '⁻' ], // Not IPA sanctioned

            [ 'ꜛ>', '↗' ], // #>>
            [ 'ꜜ<', '↘' ], // #<<
            [ '#<', 'ꜜ' ],
            [ '#>', 'ꜛ' ],

            // Diacritics and suprasegmentals
            [ 'h\\^', 'ʰ' ],
            [ 'w\\^', 'ʷ' ],
            [ 'j\\^', 'ʲ' ],
            [ 'ɣ\\^', 'ˠ' ], // g=
            [ 'ʕ\\^', 'ˤ' ], // ?<
            [ 'n\\^', 'ⁿ' ],
            [ 'l\\^', 'ˡ' ],
            // TODO non-IPA superscripts

            [ 'ʽ\\[', '˞' ], // [[[
            [ '\\[\\[', 'ʽ' ], // [[ // Not IPA sanctioned
            [ '(?:\u031a)\\]', '‘' ], // ]]]] // Not IPA sanctioned
            [ 'ʼ\\]', '\u031a' ], // ]]] // Combining left angle above
            [ '\\]\\]', 'ʼ' ], // ]]

            [ '(?:\u032f)\\$', '\u0330' ], // $$$ // Combining tilde below
            [ '(?:\u0329)\\$', '\u032f' ], // $$ // Combining inverted breve below
            [ '\\$', '\u0329' ], // $ // Combining vertical line below

            // TODO non-IPA retroflex hooks

            [ '(?:\u032c)%', '\u0324' ], // %%% // Combining diaeresis below
            [ '(?:\u0325)%', '\u032c' ], // %% // Combining caron below
            [ '%', '\u0325' ], // % // Combining ring below

            // TODO non-IPA palatal hooks

            [ '@', '\u030a' ], // Combining ring above

            [ '(?:\u033c)\\{', '\u0323' ], // {{{{{ // Combining dot below
            [ '(?:\u033b)\\{', '\u033c' ], // {{{{ // Combining seagull below
            [ '(?:\u033a)\\{', '\u033b' ], // {{{ // Combining square below
            [ '(?:\u032a)\\{', '\u033a' ], // {{ // Combining inverted bridge below
            [ '\\{', '\u032a' ], // { // Combining bridge below

            [ '(?:\u0303)~', '\u0334' ], // ~~ // Combining tilde overlay
            [ '~', '\u0303' ], // ~ // Combining tilde

            [ '(?:\u0306)\\*', '\u0307' ], // **** // Combining dot above
            [ '(?:\u033d)\\*', '\u0306' ], // *** // Combining breve
            [ '(?:\u0308)\\*', '\u033d' ], // ** // Combining x above
            [ '\\*', '\u0308' ], // * // Combining diaeresis

            // TODO Find out what the m with the five asterisks is.

            [ '#&', '\u0361' ], // Combining double inverted breve
            [ '(?:\u030a)&', '\u035c' ], // @& // Combining double breve below

            [ '(?:\u0318)\\+', '\u0339' ], // ++++ // Combining right half ring below
            [ '(?:\u0319)_', '\u031c' ], // ____ // Combining left half ring below
            [ '(?:\u031d)\\+', '\u0318' ], // +++ // Combining left tack below
            [ '(?:\u031e)_', '\u0319' ], // ___ // Combining right tack below
            [ '(?:\u031f)\\+', '\u031d' ], // ++ // Combining up tack below
            [ '(?:\u0320)_', '\u031e' ], // __ // Combining down tack below
            [ '\\+', '\u031f' ], // + // Combining plus sign below
            [ '_', '\u0320' ], // _ // Combining minus sign below

            [ '=>', '→' ], // Not IPA sanctioned
            [ 's>', 'σ' ], // Not IPA sanctioned
            [ '=<', '\u200d' ] // Combining Grapheme Joiner
        ]
    };

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