korean-gotong
Version:
한글이 인생에 고통을 선사할 때마다 기능이 추가될 예정입니다.
90 lines (72 loc) • 3.96 kB
JavaScript
;
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;