Pinyin to ASCII transliteration
by Kai Carver
JavaScript
// Pinyin to Ascii converter
// More generally, can transliterate certain characters into others
// 2 ways:
// 1. from http://stackoverflow.com/questions/286921/javascript-efficiently-replace-all-accented-characters-in-a-string
//āēīōūǖĀĒĪŌŪǕ
function getTransliterator()
{
return (function() {
var patternLetters = /[öäüÖÄÜáàâéèêúùûóòôÁÀÂÉÈÊÚÙÛÓÒÔßǐ]/g;
var lookupLetters = {
"ä": "a", "ö": "o", "ü": "u",
"Ä": "A", "Ö": "O", "Ü": "U",
"á": "a", "à": "a", "â": "a",
"é": "e", "è": "e", "ê": "e",
"ú": "u", "ù": "u", "û": "u",
"ó": "o", "ò": "o", "ô": "o",
"Á": "A", "À": "A", "Â": "A",
"É": "E", "È": "E", "Ê": "E",
"Ú": "U", "Ù": "U", "Û": "U",
"Ó": "O", "Ò": "O", "Ô": "O",
"ǐ": "i"
};
var letterTranslator = function(match) {
return lookupLetters[match] || match;
}
return function(text) {
return text.replace(patternLetters, letterTranslator);
}
})();
}
// 2. using JavaScript equivalent of Perl's tr///
// http://blog.versed.se/2008/07/transliterate-in-javascript.html
String.prototype.tr = function(from, to) {
var fromChars = from.split("");
var toChars = to.split("");
var mapTable = {};
for(var i = 0; i < fromChars.length; i++) {
var c = i < toChars.length ? toChars[i] : "";
mapTable[fromChars[i]] = c;
}
var str = this;
var re = new RegExp(fromChars.join("|"), "g");
str = str.replace(re, function(c) {
return mapTable[c];
});
return str;
};
transliterate = getTransliterator();
// test
function testit(t) {
//document.write("transliterate(\"" + t + "\") = \"" + transliterate(t) + "\"<br />");
document.write("" + t + " = " +
t.tr("āēīōūǖĀĒĪŌŪǕáéíóúǘÁÉÍÓÚǗǎěǐǒǔǚǍĚǏǑǓǙàèìòùǜÀÈÌÒÙǛüÜ",
"aeiouvAEIOUVaeiouvAEIOUVaeiouvAEIOUVaeiouvAEIOUVvV"
) + "<br />");
}
var all_mandarin_syllables = ["ā", "á", "à", "āi",...