korean-gotong
Version:
한글이 인생에 고통을 선사할 때마다 기능이 추가될 예정입니다.
564 lines (492 loc) • 19.9 kB
HTML
<html>
<head>
<title>README.md</title>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<style>
/* https://github.com/microsoft/vscode/blob/master/extensions/markdown-language-features/media/markdown.css */
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
body {
font-family: var(--vscode-markdown-font-family, -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif);
font-size: var(--vscode-markdown-font-size, 14px);
padding: 0 26px;
line-height: var(--vscode-markdown-line-height, 22px);
word-wrap: break-word;
}
#code-csp-warning {
position: fixed;
top: 0;
right: 0;
color: white;
margin: 16px;
text-align: center;
font-size: 12px;
font-family: sans-serif;
background-color:#444444;
cursor: pointer;
padding: 6px;
box-shadow: 1px 1px 1px rgba(0,0,0,.25);
}
#code-csp-warning:hover {
text-decoration: none;
background-color:#007acc;
box-shadow: 2px 2px 2px rgba(0,0,0,.25);
}
body.scrollBeyondLastLine {
margin-bottom: calc(100vh - 22px);
}
body.showEditorSelection .code-line {
position: relative;
}
body.showEditorSelection .code-active-line:before,
body.showEditorSelection .code-line:hover:before {
content: "";
display: block;
position: absolute;
top: 0;
left: -12px;
height: 100%;
}
body.showEditorSelection li.code-active-line:before,
body.showEditorSelection li.code-line:hover:before {
left: -30px;
}
.vscode-light.showEditorSelection .code-active-line:before {
border-left: 3px solid rgba(0, 0, 0, 0.15);
}
.vscode-light.showEditorSelection .code-line:hover:before {
border-left: 3px solid rgba(0, 0, 0, 0.40);
}
.vscode-light.showEditorSelection .code-line .code-line:hover:before {
border-left: none;
}
.vscode-dark.showEditorSelection .code-active-line:before {
border-left: 3px solid rgba(255, 255, 255, 0.4);
}
.vscode-dark.showEditorSelection .code-line:hover:before {
border-left: 3px solid rgba(255, 255, 255, 0.60);
}
.vscode-dark.showEditorSelection .code-line .code-line:hover:before {
border-left: none;
}
.vscode-high-contrast.showEditorSelection .code-active-line:before {
border-left: 3px solid rgba(255, 160, 0, 0.7);
}
.vscode-high-contrast.showEditorSelection .code-line:hover:before {
border-left: 3px solid rgba(255, 160, 0, 1);
}
.vscode-high-contrast.showEditorSelection .code-line .code-line:hover:before {
border-left: none;
}
img {
max-width: 100%;
max-height: 100%;
}
a {
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
a:focus,
input:focus,
select:focus,
textarea:focus {
outline: 1px solid -webkit-focus-ring-color;
outline-offset: -1px;
}
hr {
border: 0;
height: 2px;
border-bottom: 2px solid;
}
h1 {
padding-bottom: 0.3em;
line-height: 1.2;
border-bottom-width: 1px;
border-bottom-style: solid;
}
h1, h2, h3 {
font-weight: normal;
}
table {
border-collapse: collapse;
}
table > thead > tr > th {
text-align: left;
border-bottom: 1px solid;
}
table > thead > tr > th,
table > thead > tr > td,
table > tbody > tr > th,
table > tbody > tr > td {
padding: 5px 10px;
}
table > tbody > tr + tr > td {
border-top: 1px solid;
}
blockquote {
margin: 0 7px 0 5px;
padding: 0 16px 0 10px;
border-left-width: 5px;
border-left-style: solid;
}
code {
font-family: Menlo, Monaco, Consolas, "Droid Sans Mono", "Courier New", monospace, "Droid Sans Fallback";
font-size: 1em;
line-height: 1.357em;
}
body.wordWrap pre {
white-space: pre-wrap;
}
pre:not(.hljs),
pre.hljs code > div {
padding: 16px;
border-radius: 3px;
overflow: auto;
}
pre code {
color: var(--vscode-editor-foreground);
tab-size: 4;
}
/** Theming */
.vscode-light pre {
background-color: rgba(220, 220, 220, 0.4);
}
.vscode-dark pre {
background-color: rgba(10, 10, 10, 0.4);
}
.vscode-high-contrast pre {
background-color: rgb(0, 0, 0);
}
.vscode-high-contrast h1 {
border-color: rgb(0, 0, 0);
}
.vscode-light table > thead > tr > th {
border-color: rgba(0, 0, 0, 0.69);
}
.vscode-dark table > thead > tr > th {
border-color: rgba(255, 255, 255, 0.69);
}
.vscode-light h1,
.vscode-light hr,
.vscode-light table > tbody > tr + tr > td {
border-color: rgba(0, 0, 0, 0.18);
}
.vscode-dark h1,
.vscode-dark hr,
.vscode-dark table > tbody > tr + tr > td {
border-color: rgba(255, 255, 255, 0.18);
}
</style>
<style>
/*
Atom One Dark With support for ReasonML by Gidi Morris, based off work by Daniel Gamage
Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
color: #abb2bf;
background: #282c34;
}
.hljs-keyword, .hljs-operator {
color: #F92672;
}
.hljs-pattern-match {
color: #F92672;
}
.hljs-pattern-match .hljs-constructor {
color: #61aeee;
}
.hljs-function {
color: #61aeee;
}
.hljs-function .hljs-params {
color: #A6E22E;
}
.hljs-function .hljs-params .hljs-typing {
color: #FD971F;
}
.hljs-module-access .hljs-module {
color: #7e57c2;
}
.hljs-constructor {
color: #e2b93d;
}
.hljs-constructor .hljs-string {
color: #9CCC65;
}
.hljs-comment, .hljs-quote {
color: #b18eb1;
font-style: italic;
}
.hljs-doctag, .hljs-formula {
color: #c678dd;
}
.hljs-section, .hljs-name, .hljs-selector-tag, .hljs-deletion, .hljs-subst {
color: #e06c75;
}
.hljs-literal {
color: #56b6c2;
}
.hljs-string, .hljs-regexp, .hljs-addition, .hljs-attribute, .hljs-meta-string {
color: #98c379;
}
.hljs-built_in, .hljs-class .hljs-title {
color: #e6c07b;
}
.hljs-attr, .hljs-variable, .hljs-template-variable, .hljs-type, .hljs-selector-class, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-number {
color: #d19a66;
}
.hljs-symbol, .hljs-bullet, .hljs-link, .hljs-meta, .hljs-selector-id, .hljs-title {
color: #61aeee;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
.hljs-link {
text-decoration: underline;
}
</style>
<style>
/*
* Markdown PDF CSS
*/
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif, "Meiryo";
padding: 0 12px;
}
pre {
background-color: #f8f8f8;
border: 1px solid #cccccc;
border-radius: 3px;
overflow-x: auto;
white-space: pre-wrap;
overflow-wrap: break-word;
}
pre:not(.hljs) {
padding: 23px;
line-height: 19px;
}
blockquote {
background: rgba(127, 127, 127, 0.1);
border-color: rgba(0, 122, 204, 0.5);
}
.emoji {
height: 1.4em;
}
code {
font-size: 14px;
line-height: 19px;
}
/* for inline code */
:not(pre):not(.hljs) > code {
color: #C9AE75; /* Change the old color so it seems less like an error */
font-size: inherit;
}
/* Page Break : use <div class="page"/> to insert page break
-------------------------------------------------------- */
.page {
page-break-after: always;
}
</style>
<script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
</head>
<body>
<script>
mermaid.initialize({
startOnLoad: true,
theme: document.body.classList.contains('vscode-dark') || document.body.classList.contains('vscode-high-contrast')
? 'dark'
: 'default'
});
</script>
<h1 id="korean-gotong">korean-gotong</h1>
<p>한글에 고통받다가 만든 라이브러리</p>
<pre class="hljs"><code><div><span class="hljs-keyword">import</span> { getKoreanHanjaNumeral } <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong/hanjaNumberTools"</span>;
<span class="hljs-keyword">import</span> {
getTopicParticle,
getLinkingParticle,
을를,
} <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong/particleTools"</span>;
<span class="hljs-built_in">console</span>.log(getTopicParticle(<span class="hljs-string">"사과"</span>)); <span class="hljs-comment">// '는'</span>
<span class="hljs-built_in">console</span>.log(을를(<span class="hljs-string">"참외"</span>)); <span class="hljs-comment">// '참외를'</span>
<span class="hljs-built_in">console</span>.log(getKoreanHanjaNumeral(<span class="hljs-number">12345</span>)); <span class="hljs-comment">// '만 이천삼백사십오'</span>
<span class="hljs-keyword">let</span> a = <span class="hljs-number">24</span>;
<span class="hljs-keyword">let</span> b = <span class="hljs-number">36</span>;
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">`<span class="hljs-subst">${a}</span><span class="hljs-subst">${getLinkingParticle(getKoreanHanjaNumeral(a))}</span> <span class="hljs-subst">${b}</span>`</span>); <span class="hljs-comment">// '24와 36'</span>
</div></code></pre>
<h2 id="%EC%84%A4%EB%AA%85">설명</h2>
<pre class="hljs"><code><div><span class="hljs-comment">// default export</span>
<span class="hljs-keyword">import</span> Gotong <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong"</span>;
<span class="hljs-keyword">const</span> { HanjaNumberTools, ParticleTools, HangulCodes } = Gotong;
</div></code></pre>
<h3 id="hanjanumbertools">HanjaNumberTools</h3>
<pre class="hljs"><code><div><span class="hljs-keyword">import</span> { HanjaNumberTools } <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong"</span>;
<span class="hljs-comment">// or</span>
<span class="hljs-keyword">import</span> * <span class="hljs-keyword">as</span> HanjaNumberTools <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong/hanjaNumberTools"</span>;
</div></code></pre>
<ul>
<li><code>HanjaNumberTools.getKoreanHanjaNumeral</code>
<ul>
<li>숫자를 한국어 한자 기수법으로 변환</li>
<li><strong>주의:</strong> 숫자 '6(六)'에는 항상 두음법칙이 적용되어 '육'으로 씀</li>
</ul>
</li>
</ul>
<pre class="hljs"><code><div><span class="hljs-keyword">import</span> { getKoreanHanjaNumeral } <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong/hanjaNumberTools"</span>;
getKoreanHanjaNumeral(<span class="hljs-number">12345</span>); <span class="hljs-comment">// '만 이천삼백사십오'</span>
getKoreanHanjaNumeral(<span class="hljs-number">-12345.006</span>, {
useSpaceEvery10K: <span class="hljs-literal">false</span>, <span class="hljs-comment">// 만, 억, 조 등 단위 뒤에 공백을 넣지 않음</span>
omitOneInDigits: <span class="hljs-literal">false</span>, <span class="hljs-comment">// 자릿수가 1인 자리에서 '일'을 생략하지 않음</span>
}); <span class="hljs-comment">// '마이너스 일만이천삼백사십오 점 영영육`</span>
</div></code></pre>
<h3 id="particletools">ParticleTools</h3>
<pre class="hljs"><code><div><span class="hljs-keyword">import</span> { ParticleTools } <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong"</span>;
<span class="hljs-comment">// or</span>
<span class="hljs-keyword">import</span> * <span class="hljs-keyword">as</span> ParticleTools <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong/particleTools"</span>;
</div></code></pre>
<ul>
<li><code>ParticleTools.getEndsWithFinal</code>
<ul>
<li>마지막 음절의 종성 음가가 있는 한글 문자열에 대해 <code>true</code> 반환</li>
</ul>
</li>
</ul>
<pre class="hljs"><code><div><span class="hljs-keyword">import</span> { getEndsWithFinal } <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong/particleTools"</span>;
getEndsWithFinal(<span class="hljs-string">"감귤"</span>); <span class="hljs-comment">// true</span>
<span class="hljs-comment">// 음절을 이루지 않는 자음은 '기역, 니은' 식으로 읽는 것으로 간주</span>
getEndsWithFinal(<span class="hljs-string">"ㅋㅋㅋ"</span>); <span class="hljs-comment">// true</span>
getEndsWithFinal(<span class="hljs-string">"사과"</span>); <span class="hljs-comment">// false</span>
<span class="hljs-comment">// 음절을 이루지 않는 모음은 '아, 야, 어, 여' 식으로 읽는 것으로 간주</span>
getEndsWithFinal(<span class="hljs-string">"ㅏㅑㅓㅕ"</span>); <span class="hljs-comment">// false</span>
</div></code></pre>
<ul>
<li><code>ParticleTools.getTopicParticle</code>
<ul>
<li>주어진 한글 문자열에 따라 '은' 혹은 '는' 반환</li>
</ul>
</li>
<li><code>ParticleTools.getSubjectParticle</code>
<ul>
<li>주어진 한글 문자열에 따라 '이' 혹은 '가' 반환</li>
</ul>
</li>
<li><code>ParticleTools.getObjectParticle</code>
<ul>
<li>주어진 한글 문자열에 따라 '을' 혹은 '를' 반환</li>
</ul>
</li>
<li><code>ParticleTools.getLinkingParticle</code>
<ul>
<li>주어진 한글 문자열에 따라 '과' 혹은 '와' 반환</li>
</ul>
</li>
</ul>
<pre class="hljs"><code><div><span class="hljs-keyword">import</span> { ParticleTools } <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong"</span>;
ParticleTools.getTopicParticle(<span class="hljs-string">"오늘"</span>); <span class="hljs-comment">// '은'</span>
ParticleTools.getSubjectParticle(<span class="hljs-string">"점심"</span>); <span class="hljs-comment">// '이'</span>
ParticleTools.getObjectParticle(<span class="hljs-string">"메뉴"</span>); <span class="hljs-comment">// '를'</span>
ParticleTools.getLinkingParticle(<span class="hljs-string">"순두부"</span>); <span class="hljs-comment">// '와'</span>
</div></code></pre>
<ul>
<li><code>ParticleTools.addTopicParticle</code>
<ul>
<li><code>ParticleTools.은는</code>으로도 사용 가능</li>
<li>주어진 한글 문자열에 따라 '은' 혹은 '는'을 덧붙임</li>
</ul>
</li>
<li><code>ParticleTools.addSubjectParticle</code>
<ul>
<li><code>ParticleTools.이가</code>로도 사용 가능</li>
<li>주어진 한글 문자열에 따라 '이' 혹은 '가'를 덧붙임</li>
</ul>
</li>
<li><code>ParticleTools.addObjectParticle</code>
<ul>
<li><code>ParticleTools.을를</code>로도 사용 가능</li>
<li>주어진 한글 문자열에 따라 '을' 혹은 '를'을 덧붙임</li>
</ul>
</li>
<li><code>ParticleTools.addLinkingParticle</code>
<ul>
<li><code>ParticleTools.과와</code>로도 사용 가능</li>
<li>주어진 한글 문자열에 따라 '과' 혹은 '와'를 덧붙임</li>
</ul>
</li>
</ul>
<pre class="hljs"><code><div><span class="hljs-keyword">import</span> { ParticleTools } <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong"</span>;
ParticleTools.addTopicParticle(<span class="hljs-string">"내일"</span>); <span class="hljs-comment">// '내일은'</span>
ParticleTools.addSubjectParticle(<span class="hljs-string">"저녁"</span>); <span class="hljs-comment">// '저녁이'</span>
ParticleTools.addObjectParticle(<span class="hljs-string">"식사"</span>); <span class="hljs-comment">// '식사를'</span>
ParticleTools.addLinkingParticle(<span class="hljs-string">"햄버거"</span>); <span class="hljs-comment">// '햄버거와'</span>
ParticleTools.은는(<span class="hljs-string">"내일"</span>); <span class="hljs-comment">// '내일은'</span>
ParticleTools.이가(<span class="hljs-string">"저녁"</span>); <span class="hljs-comment">// '저녁이'</span>
ParticleTools.을를(<span class="hljs-string">"식사"</span>); <span class="hljs-comment">// '식사를'</span>
ParticleTools.과와(<span class="hljs-string">"햄버거"</span>); <span class="hljs-comment">// '햄버거와'</span>
</div></code></pre>
<h3 id="hanjanumbertools%EC%99%80-particletools-%ED%95%A8%EA%BB%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0">HanjaNumberTools와 ParticleTools 함께 사용하기</h3>
<pre class="hljs"><code><div><span class="hljs-keyword">import</span> {
getEndsWithFinal,
getLinkingParticle,
} <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong/particleTools"</span>;
<span class="hljs-keyword">import</span> { getKoreanHanjaNumeral } <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong/hanjaNumberTools"</span>;
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">describeHeight</span>(<span class="hljs-params">
name1: <span class="hljs-built_in">string</span>,
name2: <span class="hljs-built_in">string</span>,
height1: <span class="hljs-built_in">number</span>,
height2: <span class="hljs-built_in">number</span>
</span>) </span>{
<span class="hljs-keyword">return</span> <span class="hljs-string">`<span class="hljs-subst">${name1}</span><span class="hljs-subst">${getEndsWithFinal(name1) ? <span class="hljs-string">"이와"</span> : <span class="hljs-string">"와"</span>}</span> <span class="hljs-subst">${name2}</span><span class="hljs-subst">${
getEndsWithFinal(name2) ? <span class="hljs-string">"이의"</span> : <span class="hljs-string">"의"</span>
}</span> 키는 각각 <span class="hljs-subst">${height1}</span><span class="hljs-subst">${getLinkingParticle(
getKoreanHanjaNumeral(height1)
)}</span> <span class="hljs-subst">${height2}</span>센티미터이다.`</span>;
}
<span class="hljs-comment">// "승연이와 민하의 키는 각각 170.3과 168.5센티미터이다."</span>
<span class="hljs-built_in">console</span>.log(describeHeight(<span class="hljs-string">"승연"</span>, <span class="hljs-string">"민하"</span>, <span class="hljs-number">170.3</span>, <span class="hljs-number">168.5</span>));
<span class="hljs-comment">// "민하와 승연이의 키는 각각 168.5와 170.3센티미터이다."</span>
<span class="hljs-built_in">console</span>.log(describeHeight(<span class="hljs-string">"민하"</span>, <span class="hljs-string">"승연"</span>, <span class="hljs-number">168.5</span>, <span class="hljs-number">170.3</span>));
</div></code></pre>
<h3 id="hangulcodes">HangulCodes</h3>
<pre class="hljs"><code><div><span class="hljs-keyword">import</span> { HangulCodes } <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong"</span>;
<span class="hljs-comment">// or</span>
<span class="hljs-keyword">import</span> * <span class="hljs-keyword">as</span> HangulCodes <span class="hljs-keyword">from</span> <span class="hljs-string">"korean-gotong/hangulCodes"</span>;
</div></code></pre>
<ul>
<li><code>HangulCodes.UTF8Blocks</code>
<ul>
<li><code>UTF8Block</code>: 문자 코드 범위 정보를 사용하기 위한 클래스
<ul>
<li><code>UTF8Block.has</code>: 특정 코드가 범위 내에 포함되는지 확인</li>
<li><code>UTF8Block.join</code>: 여러 개의 <code>UTF8Block</code> 객체에 대해 같은 범위를 나타내는 하나의 <code>UTF8Block</code> 객체 반환</li>
</ul>
</li>
</ul>
</li>
<li><code>HangulCodes.Blocks</code>
<ul>
<li><code>Jamo</code>: UTF-8의 한글 자모 영역</li>
<li><code>Syllables</code>: UTF-8의 완성형 한글 음절 영역</li>
<li><code>Compatibility</code>: KS X 1001 조합형 자모 호환 영역 (<strong>주의:</strong> 테스트되지 않음)</li>
<li><code>ExtendedA</code>: UTF-8의 한글 자모 확장 A 영역 (조합형 옛한글 모음)</li>
<li><code>ExtendedB</code>: UTF-8의 한글 자모 확장 B 영역 (조합형 옛한글 자모)</li>
</ul>
</li>
<li><code>HangulCodes.All</code>
<ul>
<li><code>AllConsonant</code>: 모든 자음 낱자를 포함하는 <code>UTF8Block</code> 객체</li>
<li><code>AllVowel</code>: 모든 모음 낱자를 포함하는 <code>UTF8Block</code> 객체</li>
</ul>
</li>
</ul>
</body>
</html>