UNPKG

korean-gotong

Version:

한글이 인생에 고통을 선사할 때마다 기능이 추가될 예정입니다.

90 lines (72 loc) 3.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getKoreanHanjaNumeral = void 0; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var koreanHanjaDigits = ["영", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구"]; var koreanHanjaPowers = ["", "십", "백", "천"]; var koreanHanjaPowers10K = ["", "만", "억", "조", "경", "해", "자", "양", "구", "간", "정", "재", "극"]; /** * 숫자 읽기 실행 시 부가 설정 */ var defaultKoreanHanjaNumeralSettings = { useSpaceEvery10K: true, omitOneInDigits: true, fractionLeadingZeroInHanja: true, minusInHanja: false }; var _getKoreanHanjaNumeral_int_under10K = function _getKoreanHanjaNumeral_int_under10K(number, settings) { var integerString = Math.abs(number % 10000).toString(); return integerString.split("").map(function (v, i) { var digit = parseInt(v); var digitString = ""; if (digit) { digitString = (digit === 1 && settings.omitOneInDigits ? "" : koreanHanjaDigits[digit]) + koreanHanjaPowers[integerString.length - 1 - i]; } else digitString = ""; return digitString; }).join(""); }; /** * 숫자를 한국어 한자 기수법으로 읽은 결과를 반환하는 함수 * * @param number 변환할 숫자 * @param settings 부가 설정 (선택 항목) * @returns 한글 및 공백으로 이루어진 문자열 * * @remark 숫자 6은 위치에 무관히 `"륙"`이 아닌 `"육"`으로 읽음 * @see {@link https://kornorms.korean.go.kr/m/m_regltn.do | 한글 맞춤법} 제11항 [붙임 4] 및 [붙임 5] */ var getKoreanHanjaNumeral = function getKoreanHanjaNumeral(number) { var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultKoreanHanjaNumeralSettings; var fullSettings = _objectSpread(_objectSpread({}, defaultKoreanHanjaNumeralSettings), settings); var integer = Math.trunc(number); var fraction = Math.abs(number) - Math.abs(integer); var ret = ""; if (integer === 0) ret += "영";else { var power10k = 0; integer = Math.abs(integer); while (integer >= 1) { ret = _getKoreanHanjaNumeral_int_under10K(integer, power10k ? fullSettings : _objectSpread(_objectSpread({}, fullSettings), {}, { omitOneInDigits: false })) + koreanHanjaPowers10K[power10k] + (power10k && fullSettings.useSpaceEvery10K ? " " : "") + ret; power10k++; integer = Math.trunc(integer / 10000); } } if (number < 0) ret = (fullSettings.minusInHanja ? "음수" : "마이너스") + " " + ret; if (fraction) { ret += " 점 " + number.toString().split(".")[1].split("").map(function (v, i) { var digit = parseInt(v); if (digit) { return koreanHanjaDigits[digit]; } else { return fullSettings.fractionLeadingZeroInHanja ? "영" : "공"; } }).join(""); } return ret; }; exports.getKoreanHanjaNumeral = getKoreanHanjaNumeral;