From 391fc0c929fa4a5a8835461a89e07a3f96f6ef5e Mon Sep 17 00:00:00 2001 From: dewy Date: Mon, 27 Jan 2025 15:48:34 +0900 Subject: [PATCH 1/4] feat: edit convertHangulToQwerty --- src/convertHangulToQwerty/constants.ts | 38 +++++++++++++++++++ .../convertHangulToQwerty.spec.ts | 29 ++++++++++++++ .../convertHangulToQwerty.ts | 22 +++++++++++ src/convertHangulToQwerty/index.ts | 1 + src/index.ts | 1 + 5 files changed, 91 insertions(+) create mode 100644 src/convertHangulToQwerty/constants.ts create mode 100644 src/convertHangulToQwerty/convertHangulToQwerty.spec.ts create mode 100644 src/convertHangulToQwerty/convertHangulToQwerty.ts create mode 100644 src/convertHangulToQwerty/index.ts diff --git a/src/convertHangulToQwerty/constants.ts b/src/convertHangulToQwerty/constants.ts new file mode 100644 index 00000000..06efb904 --- /dev/null +++ b/src/convertHangulToQwerty/constants.ts @@ -0,0 +1,38 @@ +/** + * qwerty 키보드 자판의 한글 음소를 영어 알파벳으로 맵핑한 객체 + */ +export const HANGUL_TO_QWERTY_KEYBOARD_MAP = { + ㄱ: 'r', + ㄲ: 'R', + ㄴ: 's', + ㄷ: 'e', + ㄸ: 'E', + ㄹ: 'f', + ㅁ: 'a', + ㅂ: 'q', + ㅃ: 'Q', + ㅅ: 't', + ㅆ: 'T', + ㅇ: 'd', + ㅈ: 'w', + ㅉ: 'W', + ㅊ: 'c', + ㅋ: 'z', + ㅌ: 'x', + ㅍ: 'v', + ㅎ: 'g', + ㅏ: 'k', + ㅐ: 'o', + ㅑ: 'i', + ㅒ: 'O', + ㅓ: 'j', + ㅔ: 'p', + ㅕ: 'u', + ㅖ: 'P', + ㅗ: 'h', + ㅛ: 'y', + ㅜ: 'n', + ㅠ: 'b', + ㅡ: 'm', + ㅣ: 'l', +} as const; diff --git a/src/convertHangulToQwerty/convertHangulToQwerty.spec.ts b/src/convertHangulToQwerty/convertHangulToQwerty.spec.ts new file mode 100644 index 00000000..4b9cddfd --- /dev/null +++ b/src/convertHangulToQwerty/convertHangulToQwerty.spec.ts @@ -0,0 +1,29 @@ +import { convertHangulToQwerty } from './convertHangulToQwerty'; + +describe('convertQwertyToHangul', () => { + it('한글을 알파벳으로 변환한다.', () => { + expect(convertHangulToQwerty('뮻')).toBe('abc'); + expect(convertHangulToQwerty('겨노')).toBe('rush'); + }); + + it('쌍자음 및 이중모음도 그에 대응되는 영문 알파벳으로 변환한다.', () => { + expect(convertHangulToQwerty('쨰ㅉ')).toBe('WOW'); + expect(convertHangulToQwerty('빠른 논의')).toBe('Qkfms shsdml'); + expect(convertHangulToQwerty('빠짜따까싸')).toBe('QkWkEkRkTk'); + expect(convertHangulToQwerty('과궈괴귀긔')).toBe('rhkrnjrhlrnlrml'); + }); + + it('영문, 숫자 등 한글이 아닌 글자는 그대로 유지한다.', () => { + expect(convertHangulToQwerty('FE개발!')).toBe('FEroqkf!'); + }); + + it('한글 음소 또한 알파벳으로 변환한다.', () => { + expect(convertHangulToQwerty('ㅍㅡㄹㅗㄴㅌㅡ')).toBe('vmfhsxm'); + expect(convertHangulToQwerty('RㅏㄱEㅜrl')).toBe('RkrEnrl'); + expect(convertHangulToQwerty('ㅇPdml')).toBe('dPdml'); + }); + + it('빈 문자열은 빈 문자열을 반환한다.', () => { + expect(convertHangulToQwerty('')).toBe(''); + }); +}); diff --git a/src/convertHangulToQwerty/convertHangulToQwerty.ts b/src/convertHangulToQwerty/convertHangulToQwerty.ts new file mode 100644 index 00000000..4df7a12b --- /dev/null +++ b/src/convertHangulToQwerty/convertHangulToQwerty.ts @@ -0,0 +1,22 @@ +import { hasProperty } from '@/_internal'; +import { disassemble } from '@/disassemble'; +import { HANGUL_TO_QWERTY_KEYBOARD_MAP } from './constants'; + +/** + * @name convertHangulToQwerty + * @description + * 한글을 qwerty 자판과 매칭되는 영어 알파벳으로 변환합니다. + * @param word 영문으로 변환하고자 하는 한글 + * @returns 한글을 규칙에 맞게 qwerty 자판의 영어 알파벳으로 변환한 문자열 + */ +export function convertHangulToQwerty(word: string): string { + if (!word) { + return ''; + } + return disassemble(word) + .split('') + .map(inputText => + hasProperty(HANGUL_TO_QWERTY_KEYBOARD_MAP, inputText) ? HANGUL_TO_QWERTY_KEYBOARD_MAP[inputText] : inputText + ) + .join(''); +} diff --git a/src/convertHangulToQwerty/index.ts b/src/convertHangulToQwerty/index.ts new file mode 100644 index 00000000..684e5823 --- /dev/null +++ b/src/convertHangulToQwerty/index.ts @@ -0,0 +1 @@ +export * from './convertHangulToQwerty'; diff --git a/src/index.ts b/src/index.ts index b77ba3a6..576fed9a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ export { canBeJongseong } from './canBeJongseong'; export { canBeJungseong } from './canBeJungseong'; export { combineCharacter } from './combineCharacter'; export { combineVowels } from './combineVowels'; +export { convertHangulToQwerty } from './convertHangulToQwerty'; export { convertQwertyToAlphabet } from './convertQwertyToAlphabet'; export { convertQwertyToHangul } from './convertQwertyToHangul'; export { days } from './days'; From 6dd6b2bbcad940c4cdaad457d14895a8044a722b Mon Sep 17 00:00:00 2001 From: dewy Date: Mon, 27 Jan 2025 15:48:43 +0900 Subject: [PATCH 2/4] feat: edit docs --- .../docs/api/convertHangulToQwerty.en.mdx | 39 +++++++++++++++++++ .../docs/api/convertHangulToQwerty.ko.mdx | 39 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 docs/src/pages/docs/api/convertHangulToQwerty.en.mdx create mode 100644 docs/src/pages/docs/api/convertHangulToQwerty.ko.mdx diff --git a/docs/src/pages/docs/api/convertHangulToQwerty.en.mdx b/docs/src/pages/docs/api/convertHangulToQwerty.en.mdx new file mode 100644 index 00000000..42ae965d --- /dev/null +++ b/docs/src/pages/docs/api/convertHangulToQwerty.en.mdx @@ -0,0 +1,39 @@ +--- +title: convertHangulToQwerty +--- + +import { Sandpack } from '@/components/Sandpack'; + +# convertHangulToQwerty + +Converts Korean characters into English alphabets corresponding to the QWERTY keyboard layout. + +```typescript +function convertHangulToQwerty(word: string): string; +``` + +## Examples + +```typescript +convertHangulToQwerty('뮻'); // 'abc' +convertHangulToQwerty('겨노'); // 'rush' +convertHangulToQwerty('빠른 논의'); // 'Qkfms shsdml' +convertHangulToQwerty('RㅏㄱEㅜrl'); // 'RkrEnrl' +``` + +## Demo + +
+ + + +```ts index.ts +import { convertHangulToQwerty } from 'es-hangul'; + +console.log(convertHangulToQwerty('뮻')); +console.log(convertHangulToQwerty('겨노')); +console.log(convertHangulToQwerty('빠른 논의')); +console.log(convertHangulToQwerty('RㅏㄱEㅜrl')); +``` + + diff --git a/docs/src/pages/docs/api/convertHangulToQwerty.ko.mdx b/docs/src/pages/docs/api/convertHangulToQwerty.ko.mdx new file mode 100644 index 00000000..173262b9 --- /dev/null +++ b/docs/src/pages/docs/api/convertHangulToQwerty.ko.mdx @@ -0,0 +1,39 @@ +--- +title: convertHangulToQwerty +--- + +import { Sandpack } from '@/components/Sandpack'; + +# convertHangulToQwerty + +한글을 qwerty 자판과 매칭되는 영어 알파벳으로 변환합니다. + +```typescript +function convertHangulToQwerty(word: string): string; +``` + +## Examples + +```typescript +convertHangulToQwerty('뮻'); // 'abc' +convertHangulToQwerty('겨노'); // 'rush' +convertHangulToQwerty('빠른 논의'); // 'Qkfms shsdml' +convertHangulToQwerty('RㅏㄱEㅜrl'); // 'RkrEnrl' +``` + +## 사용해보기 + +
+ + + +```ts index.ts +import { convertHangulToQwerty } from 'es-hangul'; + +console.log(convertHangulToQwerty('뮻')); +console.log(convertHangulToQwerty('겨노')); +console.log(convertHangulToQwerty('빠른 논의')); +console.log(convertHangulToQwerty('RㅏㄱEㅜrl')); +``` + + From 28b0667d16a88ff6300724e7e1aecb2474924fc5 Mon Sep 17 00:00:00 2001 From: dewy Date: Mon, 17 Feb 2025 19:55:20 +0900 Subject: [PATCH 3/4] chore: edit test cases --- docs/src/pages/docs/api/convertHangulToQwerty.en.mdx | 8 ++++++-- docs/src/pages/docs/api/convertHangulToQwerty.ko.mdx | 8 ++++++-- src/convertHangulToQwerty/convertHangulToQwerty.spec.ts | 4 +++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/docs/src/pages/docs/api/convertHangulToQwerty.en.mdx b/docs/src/pages/docs/api/convertHangulToQwerty.en.mdx index 42ae965d..c31c7674 100644 --- a/docs/src/pages/docs/api/convertHangulToQwerty.en.mdx +++ b/docs/src/pages/docs/api/convertHangulToQwerty.en.mdx @@ -17,8 +17,10 @@ function convertHangulToQwerty(word: string): string; ```typescript convertHangulToQwerty('뮻'); // 'abc' convertHangulToQwerty('겨노'); // 'rush' -convertHangulToQwerty('빠른 논의'); // 'Qkfms shsdml' +convertHangulToQwerty('님노'); // 'slash' convertHangulToQwerty('RㅏㄱEㅜrl'); // 'RkrEnrl' +convertHangulToQwerty('ㅙㅜㅎ 햐ㅣ애ㅜㅎ'); // 'hong gildong' +convertHangulToQwerty('ㄴ대ㅕㅣ, ㅏㅐㄱㄷㅁ'); // 'seoul, korea' ``` ## Demo @@ -32,8 +34,10 @@ import { convertHangulToQwerty } from 'es-hangul'; console.log(convertHangulToQwerty('뮻')); console.log(convertHangulToQwerty('겨노')); -console.log(convertHangulToQwerty('빠른 논의')); +console.log(convertHangulToQwerty('님노')); console.log(convertHangulToQwerty('RㅏㄱEㅜrl')); +console.log(convertHangulToQwerty('ㅙㅜㅎ 햐ㅣ애ㅜㅎ')); +console.log(convertHangulToQwerty('ㄴ대ㅕㅣ, ㅏㅐㄱㄷㅁ')); ``` diff --git a/docs/src/pages/docs/api/convertHangulToQwerty.ko.mdx b/docs/src/pages/docs/api/convertHangulToQwerty.ko.mdx index 173262b9..3c33c372 100644 --- a/docs/src/pages/docs/api/convertHangulToQwerty.ko.mdx +++ b/docs/src/pages/docs/api/convertHangulToQwerty.ko.mdx @@ -17,8 +17,10 @@ function convertHangulToQwerty(word: string): string; ```typescript convertHangulToQwerty('뮻'); // 'abc' convertHangulToQwerty('겨노'); // 'rush' -convertHangulToQwerty('빠른 논의'); // 'Qkfms shsdml' +convertHangulToQwerty('님노'); // 'slash' convertHangulToQwerty('RㅏㄱEㅜrl'); // 'RkrEnrl' +convertHangulToQwerty('ㅙㅜㅎ 햐ㅣ애ㅜㅎ'); // 'hong gildong' +convertHangulToQwerty('ㄴ대ㅕㅣ, ㅏㅐㄱㄷㅁ'); // 'seoul, korea' ``` ## 사용해보기 @@ -32,8 +34,10 @@ import { convertHangulToQwerty } from 'es-hangul'; console.log(convertHangulToQwerty('뮻')); console.log(convertHangulToQwerty('겨노')); -console.log(convertHangulToQwerty('빠른 논의')); +console.log(convertHangulToQwerty('님노')); console.log(convertHangulToQwerty('RㅏㄱEㅜrl')); +console.log(convertHangulToQwerty('ㅙㅜㅎ 햐ㅣ애ㅜㅎ')); +console.log(convertHangulToQwerty('ㄴ대ㅕㅣ, ㅏㅐㄱㄷㅁ')); ``` diff --git a/src/convertHangulToQwerty/convertHangulToQwerty.spec.ts b/src/convertHangulToQwerty/convertHangulToQwerty.spec.ts index 4b9cddfd..22bf2c4f 100644 --- a/src/convertHangulToQwerty/convertHangulToQwerty.spec.ts +++ b/src/convertHangulToQwerty/convertHangulToQwerty.spec.ts @@ -4,17 +4,19 @@ describe('convertQwertyToHangul', () => { it('한글을 알파벳으로 변환한다.', () => { expect(convertHangulToQwerty('뮻')).toBe('abc'); expect(convertHangulToQwerty('겨노')).toBe('rush'); + expect(convertHangulToQwerty('님노')).toBe('slash'); + expect(convertHangulToQwerty('ㅙㅜㅎ 햐ㅣ애ㅜㅎ')).toBe('hong gildong'); }); it('쌍자음 및 이중모음도 그에 대응되는 영문 알파벳으로 변환한다.', () => { expect(convertHangulToQwerty('쨰ㅉ')).toBe('WOW'); - expect(convertHangulToQwerty('빠른 논의')).toBe('Qkfms shsdml'); expect(convertHangulToQwerty('빠짜따까싸')).toBe('QkWkEkRkTk'); expect(convertHangulToQwerty('과궈괴귀긔')).toBe('rhkrnjrhlrnlrml'); }); it('영문, 숫자 등 한글이 아닌 글자는 그대로 유지한다.', () => { expect(convertHangulToQwerty('FE개발!')).toBe('FEroqkf!'); + expect(convertHangulToQwerty('ㄴ대ㅕㅣ, ㅏㅐㄱㄷㅁ')).toBe('seoul, korea'); }); it('한글 음소 또한 알파벳으로 변환한다.', () => { From b135691c39e41b7f01c065b45833679d2c087c40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=B0=AC=ED=98=81?= Date: Wed, 19 Feb 2025 12:00:04 +0900 Subject: [PATCH 4/4] Create dry-panthers-doubt.md --- .changeset/dry-panthers-doubt.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/dry-panthers-doubt.md diff --git a/.changeset/dry-panthers-doubt.md b/.changeset/dry-panthers-doubt.md new file mode 100644 index 00000000..538d80ee --- /dev/null +++ b/.changeset/dry-panthers-doubt.md @@ -0,0 +1,5 @@ +--- +"es-hangul": patch +--- + +feat: 한글 문자를 쿼티 자판에 맞는 영문 알파벳으로 변환 하는 함수를 새로 추가합니다 합니