UNPKG

@satachito/replace-numeral

Version:

Replace all numerals in the world into Arabic numerals.

138 lines (124 loc) 2.49 kB
<header><a href=https://slip.828.tokyo>For the use case, visit our awesome calculator site! https://slip.828.tokyo/</a></header> <label>Input text</label><br> <textarea id=TEXT rows=80 cols=40></textarea><br> <input type=button id=CONVERT value="Convert"> <input type=button id=SAMPLE value="Load samples"><br> <script type=module> const code0sBMP = [ 0x30 , 0x0660 , 0x06F0 , 0x07C0 , 0x0966 , 0x09E6 , 0x0A66 , 0x0AE6 , 0x0B66 , 0x0BE6 , 0x0C66 , 0x0CE6 , 0x0D66 , 0x0DE6 , 0x0E50 , 0x0ED0 , 0x0F20 , 0x1040 , 0x1090 , 0x17E0 , 0x1810 , 0x1946 , 0x19D0 , 0x1A80 , 0x1A90 , 0x1B50 , 0x1BB0 , 0x1C40 , 0x1C50 , 0xA620 , 0xA8D0 , 0xA900 , 0xA9D0 , 0xA9F0 , 0xAA50 , 0xABF0 , 0xFF10 ] const singleLists = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ].map( $ => code0sBMP.map( _ => _ + $ ) ) const code0sSMP = [ 0x104A0 , 0x10D30 , 0x11066 , 0x110F0 , 0x11136 , 0x111D0 , 0x112F0 , 0x11450 , 0x114D0 , 0x11650 , 0x116C0 , 0x11730 , 0x118E0 , 0x11950 , 0x11C50 , 0x11D50 , 0x11DA0 , 0x16A60 , 0x16AC0 , 0x16B50 , 0x1D7CE , 0x1D7D8 , 0x1D7E2 , 0x1D7EC , 0x1D7F6 , 0x1E140 , 0x1E2F0 , 0x1E950 , 0x1FBF0 ] export const code0s = [ ...code0sBMP, ...code0sSMP ] const surrogatePair = _ => [ ( 0xd800 | _ >> 10 ) - 0x40, 0xdc00 | ( _ & 0x3ff ) ] const surrogatePairLists = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ].map( $ => code0sSMP.map( _ => surrogatePair( _ + $ ) ) ) const surrogateHs = Array.from( new Set( surrogatePairLists[ 0 ].map( _ => _[ 0 ] ) ) ) const ReplaceNumeral = _ => { const charCodes = Array.from( { length: _.length } ).map( ( $, i ) => _.charCodeAt( i ) ) { let _ = charCodes.length while ( _-- ) { const $ = charCodes[ _ ] singleLists.forEach( ( singleList, i ) => singleList.includes( $ ) && charCodes.splice( _, 1, 0x30 + i ) ) } } { let _ = charCodes.length - 1 while ( _-- ) { const $0 = charCodes[ _ ] if ( !surrogateHs.includes( $0 ) ) continue const $1 = charCodes[ _ + 1 ] surrogatePairLists.forEach( ( surrogatePairList, i ) => surrogatePairList.some( _ => _[ 0 ] === $0 && _[ 1 ] === $1 ) && charCodes.splice( _, 2, 0x30 + i ) ) } } return String.fromCharCode( ...charCodes ) } export default ReplaceNumeral CONVERT.onclick = _ => TEXT.value = ReplaceNumeral( TEXT.value ) SAMPLE.onclick = _ => TEXT.value = code0s.reduce( ( $, code0 ) => $ + code0.toString( 16 ).padStart( 6, '0' ) + ': ' + String.fromCodePoint( ...[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ].map( _ => code0 + _ ) ) + '\n' , '' ) SAMPLE.click() </script>