UNPKG

korean-gotong

Version:

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

564 lines (492 loc) 19.9 kB
<!DOCTYPE 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>