upstream: http://github.com/wikimedia/jquery.ime changes: * Support for contenteditable, like the VisualEditor surfaces. This support is very minimal now. Because of VE bugs on IME support, many things are broken. But one-one keyboard mappings should work with less issues. The UI of jquery.ime is not integrated with VE toolbar * More input methods - IPA-X-SAMPA by Amir - Armenian keymaps by Aleksey Chalabyan - Kurdish keymaps by Ghybu - Кыргыз keymap by Amir - Central Kurdish keyboards by Çalak * A lot of input method bug fixes multiple contributors * Minor UX fixes Introduces Rangy library. A module named rangy is defined in VisualEditor extension with more features of rangy. Here we need only the core library. This module is loaded dynamically from client when rangy is undefined. If VE is present rangy will be defined, the module defined in VE will be used. ie, This get loaded only when VE is not present and user trying to type in a contenteditable. Bug: 49569 Bug: 50849 Bug: 50220 Change-Id: Iadad5a4e5972fbd1359847526d28e9dbbe00a7c4
241 lines
6.7 KiB
JavaScript
241 lines
6.7 KiB
JavaScript
( 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 ) );
|