diff --git a/src/hangul/unicode/hangulPattern.js b/src/hangul/unicode/hangulPattern.js index 712fb57..6f957de 100644 --- a/src/hangul/unicode/hangulPattern.js +++ b/src/hangul/unicode/hangulPattern.js @@ -1 +1,5 @@ -module.exports = /[\uac00-\ud7af\u1100-\u11ff\u3130-\u318f\ua960-\ua97f\ud7b0-\ud7ff]+/g +const hangulPattern = /[\uac00-\ud7af\u1100-\u11ff\u3130-\u318f\ua960-\ua97f\ud7b0-\ud7ff]+/g + +const splitPattern = /([\uac00-\ud7af\u1100-\u11ff\u3130-\u318f\ua960-\ua97f\ud7b0-\ud7ff]+|[^\uac00-\ud7af\u1100-\u11ff\u3130-\u318f\ua960-\ua97f\ud7b0-\ud7ff]+)/ + +module.exports = { hangulPattern, splitPattern } diff --git a/src/hangul/unicode/hangulPattern.test.js b/src/hangul/unicode/hangulPattern.test.js index 26a6d46..c46dc29 100644 --- a/src/hangul/unicode/hangulPattern.test.js +++ b/src/hangul/unicode/hangulPattern.test.js @@ -1,4 +1,4 @@ -const hangulPattern = require('./hangulPattern') +const { hangulPattern } = require('./hangulPattern') const HANGUL_BLOCKS = Object.entries(require('./blocks')).filter( ([blockName]) => blockName.startsWith('HANGUL') ) diff --git a/src/index.js b/src/index.js index 99f2a6d..8253949 100644 --- a/src/index.js +++ b/src/index.js @@ -1,12 +1,3 @@ -const hangulPattern = require('./hangul/unicode/hangulPattern') -const { romanizeWord } = require('./romanize') +const { romanize, romanizeWord } = require('./romanize') -/** - * Transforms a given string by replacing each Hangul character-containing substring with romaja - * @param {string} text - * @param {Object} [options] - */ -const romanize = (text, options) => - text.replace(hangulPattern, word => romanizeWord(word, options)) - -module.exports = { romanize } +module.exports = { romanize, romanizeWord } diff --git a/src/romanize.js b/src/romanize.js index 304d91f..3782b2b 100644 --- a/src/romanize.js +++ b/src/romanize.js @@ -1,5 +1,28 @@ +const { + hangulPattern, + splitPattern +} = require('./hangul/unicode/hangulPattern') const { decomposeHangul } = require('./hangul/unicode/decompose') const { syllableParser } = require('./syllableParser') +const isHangul = require('./hangul/isHangul') + +/** + * Transforms a given string by replacing each Hangul character-containing substring with romaja + * @param {string} text + * @param {Object} [options] + * @param {boolean} [ruby] + */ +const romanize = (text, options = {}) => { + if (options.ruby) { + return text.split(splitPattern).map(str => { + if (isHangul(str[0])) { + return { text: romanizeWord(str), ruby: str } + } + return str + }) + } + return text.replace(hangulPattern, word => romanizeWord(word, options)) +} /** * Transform a Hangul encoded string to Roman equivalent @@ -28,4 +51,4 @@ function romanizeWord (word, options = {}) { : mappedToRoman.replace(/-$/, '') } -module.exports = { romanizeWord } +module.exports = { romanize, romanizeWord }