UNPKG

@naandalist/honocoroko

Version:

A TypeScript library for transliterating text between Latin and Javanese script (Aksara Jawa/Hanacaraka)

153 lines (152 loc) 5.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.allMappings = exports.phoneticApproximations = exports.specialMarks = exports.punctuation = exports.numbers = exports.murdaConsonants = exports.vowelMarks = exports.vowels = exports.consonants = void 0; exports.createReverseMappings = createReverseMappings; // Basic consonants (Aksara Nglegena) exports.consonants = [ { latin: 'ha', javanese: 'ꦲ' }, { latin: 'na', javanese: 'ꦤ' }, { latin: 'ca', javanese: 'ꦕ' }, { latin: 'ra', javanese: 'ꦫ' }, { latin: 'ka', javanese: 'ꦏ' }, { latin: 'da', javanese: 'ꦢ' }, { latin: 'ta', javanese: 'ꦠ' }, { latin: 'sa', javanese: 'ꦱ' }, { latin: 'wa', javanese: 'ꦮ' }, { latin: 'la', javanese: 'ꦭ' }, { latin: 'pa', javanese: 'ꦥ' }, { latin: 'dha', javanese: 'ꦝ' }, { latin: 'ja', javanese: 'ꦗ' }, { latin: 'ya', javanese: 'ꦪ' }, { latin: 'nya', javanese: 'ꦚ' }, { latin: 'ma', javanese: 'ꦩ' }, { latin: 'ga', javanese: 'ꦒ' }, { latin: 'ba', javanese: 'ꦧ' }, { latin: 'tha', javanese: 'ꦛ' }, { latin: 'nga', javanese: 'ꦔ' }, // Add single consonant mappings for easier lookup { latin: 'h', javanese: 'ꦲ' }, { latin: 'n', javanese: 'ꦤ' }, { latin: 'c', javanese: 'ꦕ' }, { latin: 'r', javanese: 'ꦫ' }, { latin: 'k', javanese: 'ꦏ' }, { latin: 'd', javanese: 'ꦢ' }, { latin: 't', javanese: 'ꦠ' }, { latin: 's', javanese: 'ꦱ' }, { latin: 'w', javanese: 'ꦮ' }, { latin: 'l', javanese: 'ꦭ' }, { latin: 'p', javanese: 'ꦥ' }, { latin: 'j', javanese: 'ꦗ' }, { latin: 'y', javanese: 'ꦪ' }, { latin: 'm', javanese: 'ꦩ' }, { latin: 'g', javanese: 'ꦒ' }, { latin: 'b', javanese: 'ꦧ' }, ]; // Vowels (Aksara Swara) exports.vowels = [ { latin: 'a', javanese: 'ꦄ' }, { latin: 'i', javanese: 'ꦆ' }, { latin: 'u', javanese: 'ꦈ' }, { latin: 'e', javanese: 'ꦌ' }, { latin: 'o', javanese: 'ꦎ' }, ]; // Vowel marks (Sandhangan) exports.vowelMarks = [ { latin: 'i', javanese: 'ꦶ' }, { latin: 'u', javanese: 'ꦸ' }, { latin: 'é', javanese: 'ꦺ' }, { latin: 'e', javanese: 'ꦼ' }, { latin: 'o', javanese: 'ꦺꦴ' }, ]; // Special consonants (Aksara Murda) exports.murdaConsonants = [ { latin: 'Na', javanese: 'ꦟ' }, { latin: 'Ka', javanese: 'ꦑ' }, { latin: 'Ta', javanese: 'ꦡ' }, { latin: 'Sa', javanese: 'ꦯ' }, { latin: 'Pa', javanese: 'ꦦ' }, { latin: 'Ga', javanese: 'ꦓ' }, { latin: 'Ba', javanese: 'ꦨ' }, ]; // Numbers exports.numbers = [ { latin: '0', javanese: '꧐' }, { latin: '1', javanese: '꧑' }, { latin: '2', javanese: '꧒' }, { latin: '3', javanese: '꧓' }, { latin: '4', javanese: '꧔' }, { latin: '5', javanese: '꧕' }, { latin: '6', javanese: '꧖' }, { latin: '7', javanese: '꧗' }, { latin: '8', javanese: '꧘' }, { latin: '9', javanese: '꧙' }, ]; // Punctuation exports.punctuation = [ { latin: ',', javanese: '꧈' }, { latin: '.', javanese: '꧉' }, { latin: ':', javanese: '꧇' }, { latin: '"', javanese: '꧊꧋' }, { latin: '(', javanese: '꧌' }, { latin: ')', javanese: '꧍' }, ]; // Special marks exports.specialMarks = [ { latin: 'ng', javanese: 'ꦁ' }, // cecak { latin: 'r', javanese: 'ꦂ' }, // layar { latin: 'h', javanese: 'ꦃ' }, // wignyan { latin: '/', javanese: '꧀' }, // pangkon ]; // Phonetic approximations for Latin letters not in Javanese exports.phoneticApproximations = [ { latin: 'f', javanese: 'ꦥ꦳' }, // pa + cecak telu { latin: 'v', javanese: 'ꦮ꦳' }, // wa + cecak telu { latin: 'z', javanese: 'ꦗ꦳' }, // ja + cecak telu { latin: 'q', javanese: 'ꦏ' }, // ka (maps to k sound) { latin: 'x', javanese: 'ꦏ꧀ꦱ' }, // ks ]; // Create reverse mappings for fromHonocoroko function createReverseMappings(_mappings) { const reverseMap = new Map(); // Add vowel marks first exports.vowelMarks.forEach(({ latin, javanese }) => { reverseMap.set(javanese, latin); }); // Add consonants with 'a' (prefer 'ha', 'na', etc. over single letters) exports.consonants.filter(m => m.latin.length > 1 && m.latin.endsWith('a')).forEach(({ latin, javanese }) => { reverseMap.set(javanese, latin); }); // Add standalone vowels exports.vowels.forEach(({ latin, javanese }) => { reverseMap.set(javanese, latin); }); // Add numbers and punctuation exports.numbers.forEach(({ latin, javanese }) => { reverseMap.set(javanese, latin); }); exports.punctuation.forEach(({ latin, javanese }) => { reverseMap.set(javanese, latin); }); // Add special marks exports.specialMarks.forEach(({ latin, javanese }) => { reverseMap.set(javanese, latin); }); // Add phonetic approximations last (but don't override consonants) exports.phoneticApproximations.forEach(({ latin, javanese }) => { if (!reverseMap.has(javanese)) { reverseMap.set(javanese, latin); } }); return reverseMap; } // Combined mappings for easy access exports.allMappings = [ ...exports.consonants, ...exports.vowels, ...exports.vowelMarks, ...exports.murdaConsonants, ...exports.numbers, ...exports.punctuation, ...exports.specialMarks, ...exports.phoneticApproximations, ];