package.src.util.verticalize_punctuation.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mapbox-gl Show documentation
Show all versions of mapbox-gl Show documentation
A WebGL interactive maps library
The newest version!
// @flow
import {
charHasRotatedVerticalOrientation,
} from './script_detection';
export const verticalizedCharacterMap = {
'!': '︕',
'#': '#',
'$': '$',
'%': '%',
'&': '&',
'(': '︵',
')': '︶',
'*': '*',
'+': '+',
',': '︐',
'-': '︲',
'.': '・',
'/': '/',
':': '︓',
';': '︔',
'<': '︿',
'=': '=',
'>': '﹀',
'?': '︖',
'@': '@',
'[': '﹇',
'\\': '\',
']': '﹈',
'^': '^',
'_': '︳',
'`': '`',
'{': '︷',
'|': '―',
'}': '︸',
'~': '~',
'¢': '¢',
'£': '£',
'¥': '¥',
'¦': '¦',
'¬': '¬',
'¯': ' ̄',
'–': '︲',
'—': '︱',
'‘': '﹃',
'’': '﹄',
'“': '﹁',
'”': '﹂',
'…': '︙',
'‧': '・',
'₩': '₩',
'、': '︑',
'。': '︒',
'〈': '︿',
'〉': '﹀',
'《': '︽',
'》': '︾',
'「': '﹁',
'」': '﹂',
'『': '﹃',
'』': '﹄',
'【': '︻',
'】': '︼',
'〔': '︹',
'〕': '︺',
'〖': '︗',
'〗': '︘',
'!': '︕',
'(': '︵',
')': '︶',
',': '︐',
'-': '︲',
'.': '・',
':': '︓',
';': '︔',
'<': '︿',
'>': '﹀',
'?': '︖',
'[': '﹇',
']': '﹈',
'_': '︳',
'{': '︷',
'|': '―',
'}': '︸',
'⦅': '︵',
'⦆': '︶',
'。': '︒',
'「': '﹁',
'」': '﹂'
};
export default function verticalizePunctuation(input: string) {
let output = '';
for (let i = 0; i < input.length; i++) {
const nextCharCode = input.charCodeAt(i + 1) || null;
const prevCharCode = input.charCodeAt(i - 1) || null;
const canReplacePunctuation = (
(!nextCharCode || !charHasRotatedVerticalOrientation(nextCharCode) || verticalizedCharacterMap[input[i + 1]]) &&
(!prevCharCode || !charHasRotatedVerticalOrientation(prevCharCode) || verticalizedCharacterMap[input[i - 1]])
);
if (canReplacePunctuation && verticalizedCharacterMap[input[i]]) {
output += verticalizedCharacterMap[input[i]];
} else {
output += input[i];
}
}
return output;
}