mw-ocg-zimwriter
Version:
Converts mediawiki collection bundles (as generated by mw-ocg-bundler) to ZIM files
175 lines (170 loc) • 5.3 kB
JavaScript
/** Language and option mappings for the XeLaTeX polyglossia package. */
"use strict";
var gloss_info = {
amharic: { script: 'Ethiopic' },
arabic: { dir: 'rtl', script: 'Arabic', env: 'Arabic' },
armenian: { script: 'Armenian' },
assamese: { script: 'Assamese' },
bengali: { script: 'Bengali' },
bulgarian: { script: 'Cyrillic' },
hans: { script: 'CJK' },
hant: { script: 'CJK' },
hanp: { script: 'Latin' },
coptic: { script: 'Coptic' },
divehi: { dir: 'rtl', script: 'Thaana' },
farsi: { dir: 'rtl', script: 'Arabic' },
greek: { script: 'Greek' },
gujarati: { script: 'Gujarati' },
hebrew: { dir: 'rtl', script: 'Hebrew' },
hindi: { script: 'Devanagari' },
japanese: { script: 'Kana' },
kannada: { script: 'Kannada' },
khmer: { script: 'Khmer' },
korean: { script: 'Hangul' },
lao: { script: 'Lao' },
malayalam: { script: 'Malayalam' },
marathi: { script: 'Devanagari' },
nko: { dir: 'rtl', script: "N'ko" },
oriya: { script: 'Oriya' },
punjabi: { script: 'Gurmukhi' },
russian: { script: 'Cyrillic' },
sanskrit: { script: 'Devanagari' },
serbian: { script: 'Cyrillic' },
syriac: { dir: 'rtl', script: 'Syriac' },
tamil: { script: 'Tamil' },
telugu: { script: 'Telugu' },
thai: { script: 'Thai' },
tibetan: { script: 'Tibetan' },
ukrainian: { script: 'Cyrillic' },
urdu: { dir: 'rtl', script: 'Arabic' }
};
var table = {
sq: { lang: 'albanian' },
am: { lang: 'amharic' },
ar: { lang: 'arabic' },
'und-Arab': { lang: 'arabic' },
arc: { lang: 'aramaic' },
as: { lang: 'assamese' },
hy: { lang: 'armenian' },
ast: { lang: 'asturian' },
id: { lang: 'bahasai' },
ms: { lang: 'bahasam' },
eu: { lang: 'basque' },
bn: { lang: 'bengali' },
bs: { lang: 'bosnian' },
'pt-BR': { lang: 'brazil' },
br: { lang: 'breton' },
bg: { lang: 'bulgarian' },
mk: { lang: 'bulgarian' }, // politically controversial
ca: { lang: 'catalan' },
cop: { lang: 'coptic' },
hr: { lang: 'croatian' },
cs: { lang: 'czech' },
da: { lang: 'danish' },
dv: { lang: 'divehi' },
nl: { lang: 'dutch' },
en: { lang: 'english' },
eo: { lang: 'esperanto' },
et: { lang: 'estonian' },
fa: { lang: 'farsi' },
fi: { lang: 'finnish' },
fr: { lang: 'french' },
fur: { lang: 'friulan' },
gl: { lang: 'galician' },
de: { lang: 'german' },
el: { lang: 'greek' },
'el-latn': { lang: 'greek', options: 'numerals=arabic' },
grc: { lang: 'greek', options: 'variant=ancient' },
gu: { lang: 'gujarati' },
he: { lang: 'hebrew' },
hi: { lang: 'hindi' },
is: { lang: 'icelandic' },
ie: { lang: 'interlingua' },
ga: { lang: 'irish' },
it: { lang: 'italian' },
kn: { lang: 'kannada' },
km: { lang: 'khmer' },
lo: { lang: 'lao' },
la: { lang: 'latin' },
Latn: { lang: 'latin' }, // non-standard? used in arwiki sample.
lv: { lang: 'latvian' },
lt: { lang: 'lithuanian' },
dsb: { lang: 'lsorbian' },
hu: { lang: 'magyar' },
ml: { lang: 'malayalam' },
mr: { lang: 'marathi' },
nqo: { lang: 'nko' },
no: { lang: 'norsk' },
nn: { lang: 'nynorsk' },
oc: { lang: 'occitan' },
or: { lang: 'oriya' },
pa: { lang: 'punjabi' },
pmsq: { lang: 'piedmontese' },
pl: { lang: 'polish' },
pt: { lang: 'portuges' },
ro: { lang: 'romanian' },
rm: { lang: 'romansh' },
ru: { lang: 'russian' },
sme: { lang: 'samin' },
sa: { lang: 'sanskrit' },
'sa-Latn': { lang: 'sanskrit' },
gd: { lang: 'scottish' },
sr: { lang: 'serbian' },
sk: { lang: 'slovak' },
sl: { lang: 'slovenian' },
es: { lang: 'spanish' },
sv: { lang: 'swedish' },
syc: { lang: 'syriac' },
ta: { lang: 'tamil' },
te: { lang: 'telugu' },
th: { lang: 'thai' },
bo: { lang: 'tibetan' },
tr: { lang: 'turkish' },
tk: { lang: 'turkmen' },
uk: { lang: 'ukrainian' },
ur: { lang: 'urdu' },
hsb: { lang: 'usorbian' },
vi: { lang: 'vietnamese' },
cy: { lang: 'welsh' },
// extra polyglossia definitions included in tex/ directory
ja: { lang: 'japanese' },
// ja-Hani = japanese written in Kanji
'zh': { lang: 'hans' },
'zh-Hans': { lang: 'hans' },
'zh-Hans-CN': { lang: 'hans' },
'zh-Hant': { lang: 'hant' },
'zh-Latn-pinyin': { lang: 'hanp' }, // made up thing
ko: { lang: 'korean' },
'ko-Hang': { lang: 'korean' },
'ko-Hani': { lang: 'korean' }
};
// add all-lower-case aliases for case-insensitive match
Object.keys(table).forEach(function(lang) {
if (!table.hasOwnProperty(lang.toLowerCase())) {
table[lang.toLowerCase()] = table[lang];
}
});
var WARNED = new Set();
var lookup = function(langcode) {
// langcode is an RFC1766 language code. That is, an ISO639 code,
// possibly followed by a dash and a variant specifier.
if (!table.hasOwnProperty(langcode) && !table.hasOwnProperty(langcode.toLowerCase())) {
if (!WARNED.has(langcode.toLowerCase())) {
console.warn('Language support not found for', langcode);
WARNED.add(langcode.toLowerCase());
}
// try stripping the suffix. otherwise, fall back to 'en'
var stripped = langcode.replace(/-[\s\S]*$/, '').toLowerCase();
langcode = table.hasOwnProperty(stripped) ? stripped : 'en';
}
var r = table[langcode] || table[langcode.toLowerCase()];
var g = gloss_info[r.lang] || {};
if (!r.env) { r.env = g.env || r.lang; }
if (!r.dir) { r.dir = g.dir || 'ltr'; }
if (!r.script) { r.script = g.script || 'Latin'; }
if (!r.options) { r.options = ''; }
return r;
};
module.exports = {
lookup: lookup
};