UNPKG

sugar-language

Version:

Language module for the Sugar Javascript utility library.

80 lines (67 loc) 2.58 kB
'use strict'; var ZENKAKU_KATAKANA = require('./ZENKAKU_KATAKANA'), HANKAKU_KATAKANA = require('./HANKAKU_KATAKANA'), FULL_WIDTH_OFFSET = require('./FULL_WIDTH_OFFSET'), ZENKAKU_PUNCTUATION = require('./ZENKAKU_PUNCTUATION'), VOICED_KATAKANA_REG = require('./VOICED_KATAKANA_REG'), HANKAKU_PUNCTUATION = require('./HANKAKU_PUNCTUATION'), WIDTH_CONVERSION_RANGES = require('./WIDTH_CONVERSION_RANGES'), SEMI_VOICED_KATAKANA_REG = require('./SEMI_VOICED_KATAKANA_REG'), chr = require('../../common/var/chr'), forEach = require('../../common/internal/forEach'), shiftChar = require('../internal/shiftChar'), simpleRepeat = require('../../common/internal/simpleRepeat'); var widthConversionTable; function buildWidthConversion() { var hankaku; widthConversionTable = { 'zenkaku': {}, 'hankaku': {} }; function setWidthConversion(type, half, full) { setConversionTableEntry('zenkaku', type, half, full); setConversionTableEntry('hankaku', type, full, half); } function setConversionTableEntry(width, type, from, to, all) { var obj = widthConversionTable[width][from] || {}; if (all !== false) { obj.all = to; } obj[type] = to; widthConversionTable[width][from] = obj; } function setKatakanaConversion() { for (var i = 0; i < ZENKAKU_KATAKANA.length; i++) { var c = ZENKAKU_KATAKANA.charAt(i); hankaku = HANKAKU_KATAKANA.charAt(i); setWidthConversion('k', hankaku, c); if (c.match(VOICED_KATAKANA_REG)) { setWidthConversion('k', hankaku + '゙', shiftChar(c, 1)); } if (c.match(SEMI_VOICED_KATAKANA_REG)) { setWidthConversion('k', hankaku + '゚', shiftChar(c, 2)); } } } function setPunctuationConversion() { for (var i = 0; i < ZENKAKU_PUNCTUATION.length; i++) { setWidthConversion('p', HANKAKU_PUNCTUATION.charAt(i), ZENKAKU_PUNCTUATION.charAt(i)); } } forEach(WIDTH_CONVERSION_RANGES, function(r) { simpleRepeat(r.end - r.start + 1, function(n) { n += r.start; setWidthConversion(r.type, chr(n), chr(n + FULL_WIDTH_OFFSET)); }); }); setKatakanaConversion(); setPunctuationConversion(); setWidthConversion('s', ' ', ' '); setWidthConversion('k', 'ヴ', 'ヴ'); setWidthConversion('k', 'ヺ', 'ヺ'); setConversionTableEntry('hankaku', 'n', '−', '-'); setConversionTableEntry('hankaku', 'n', 'ー', '-', false); setConversionTableEntry('zenkaku', 'n', '-', '-', false); } buildWidthConversion(); module.exports = widthConversionTable;