OS 한글 입력기 없이 Claude Code 프롬프트에서 두벌식·세벌식 390·세벌식 최종으로 한글을 친다

<img src="docs/assets/banner.png" alt="claude-hangul — 한/영 전환 없이 Claude Code 프롬프트에서 한글을 친다" width="100%">
<img alt="Built as a Claude Code mod" src="https://img.shields.io/badge/built%20as%20a-Claude%20Code%20mod-d97757?style=for-the-badge">
<a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-blue.svg"></a> <img alt="Claude Code 2.1.287+" src="https://img.shields.io/badge/Claude%20Code-2.1.287%2B-d97757"> <img alt="version" src="https://img.shields.io/github/package-json/v/proagent-ai/claude-hangul?filename=.claude-plugin%2Fplugin.json&label=plugin"> <img alt="layouts" src="https://img.shields.io/badge/%EB%91%90%EB%B2%8C%EC%8B%9D%20%C2%B7%20390%20%C2%B7%20%EC%B5%9C%EC%A2%85-supported-2ea44f">
Claude Code mod 하나로 만든 한글 입력기. OS IME 없이, 한/영 전환 없이.
Claude Code의 mod(함수 훅 플러그인) 기능으로 프롬프트 입력창에 한글 조합기를 직접 꽂았다. 두벌식, 세벌식 390, 세벌식 최종을 친다. 한/영 전환 키를 누르지 않아도 한글 단어는 한글로, 영어·숫자·기호는 친 그대로 남는다.
<img src="docs/assets/demo.gif" alt="OS 입력기로 fetchUser 를 치다 한/영이 꼬이는 장면과, claude-hangul 세벌식 390으로 'fetchUser 함수에 한글 주석 달아줘' 를 전환 없이 치는 장면" width="100%">
Claude Code에 일을 시키면 한 줄에 한글 요청과 영어 코드가 섞인다. fetchUser 함수에 한글 주석 달아줘 한 줄에 한/영 전환이 두 번이다.
fetchUser 가 ㄹㄷㅅ초ㅕㄴㄷㄱ 이 되고, 고쳐 치면 함수에 가 gkatndp 가 된다.claude-hangul은 OS 입력기를 영어에 둔 채로 Claude Code 안에서 직접 한글을 조합한다. 코드는 친 그대로, 한글은 한글로. 전환 키를 누를 일이 없고, 입력기를 따로 깔 필요도 없다.
제품 요구는 docs/PRD.md, 구현 근거는 docs/SPEC.md.
Claude Code 안에서:
/plugin marketplace add proagent-ai/claude-hangul
/plugin install hangul@proagent
새 버전은 claude plugin update hangul@proagent 후 /reload-plugins. Claude Code 2.1.287 이상.
외장 키보드 + 원격 터미널(SSH/mosh 터미널 앱, Orca 모바일 원격 등)로 호스트의 Claude Code에 접속할 때 동작한다.
| 경로 | 동작 |
|---|---|
| iPad · Android 터미널 앱 → SSH/mosh → Claude Code | 된다 (설계 기준, 앱별 실기 확인 중) |
| Orca ADE 모바일 원격 → Mac 터미널의 Claude Code | 된다 (작성자 사용 환경) |
| Claude 앱 · Remote Control | 안 된다. 글이 입력창을 거치지 않고 통째로 도착한다 |
| 모바일 브라우저의 claude.ai/code (클라우드 세션) | 안 된다. 플러그인이 로드되지 않는다 |
| 화면 키보드 | 대상 아님. 외장 키보드 전용 |
mosh --predict=never (-n).export HANGUL_LAYOUT=390 (또는 final)을 두면 /hangul 만 쳐도 그 레이아웃으로 켜진다.앱별 설정, 증상별 원인, 문제를 알릴 때 남길 로그는 docs/mobile.md. Claude Code 프롬프트에서만 동작하고, 셸이나 다른 프로그램 입력은 건드리지 않는다.
git clone https://github.com/proagent-ai/claude-hangul.git
cd claude-hangul
git checkout develop
claude --plugin-dir .
작업 사본은 --plugin-dir 로 띄우고, 마켓플레이스 설치본과 같은 세션에 같이 올리지 않는다.
| 명령 | 동작 |
|---|---|
/hangul | 켜기 / 끄기 |
/hangul on off | 명시적으로 켜거나 끈다 |
/hangul 2 390 final | 레이아웃을 바꾸고 켠다 |
/hangul learn | 이 맥의 Claude Code 대화 기록에서 내가 섞어 쓰는 영어·한글 단어를 배운다 |
/hangul forget | 배운 단어를 지운다 |
/hangul 줄의 인자는 영어 그대로다. off 가 한글로 바뀌지 않는다. 상태줄은 한 두벌식, 한 세벌식 390, 한 세벌식 최종 이다.
시작 레이아웃은 HANGUL_LAYOUT=2|390|final. 세벌식 역순 확정은 HANGUL_SEBEOL_ORDER=strict.
OS 입력기를 건드리지 않는다. Claude Code가 키 입력을 mod에 넘겨주고, mod가 조합한 결과를 돌려준다. 훅 4개와 상태줄 하나가 전부다 (hooks/register.tsx).
키 입력 ─▶ prompt.edit ─▶ HangulEditor ─▶ 조합된 프롬프트
│
/hangul ─▶ command.run ──────┤ 레이아웃 전환
엔터 ─▶ prompt.submit ────┘ 조합 중인 글자 확정
시작 ─▶ session.start /hangul 등록, 상태줄 `한 두벌식`
on('prompt.edit', async ($, e, next) => {
const answer = editor.edit(editOf(e))
return answer.kind === 'pass' ? next(e) : answer.box // 조합했으면 키를 소비
})
prompt.edit — 키 하나마다 들어온다. 한글이면 조합해서 돌려주고, 아니면 next(e) 로 넘긴다.prompt.submit — 보내기 직전 조합 중인 음절을 확정한다.command.run + $.command.register — /hangul 슬래시 명령.$.ui.status — 상태줄의 한 세벌식 390.조합 코어 core/ 는 Claude Code API를 모르는 순수 TypeScript라서 다른 곳에도 그대로 쓸 수 있다. mod는 Claude Code early access API라 릴리스마다 바뀔 수 있다.
공백이나 기호 전까지를 한 단어로 본다.
gksrmf, 세벌식 mfskgw 는 한글.hello 는 hello 다.390, 123)는 숫자다. ? , ! 처럼 표에 없는 기호는 친 문자다.ㅋㅋ ㅎㅎ ㅠㅠ ㅜㅜ ㄷㄷ ㅇㅇ 처럼 같은 자모를 반복하거나 ㅇㅋ ㅊㅋ ㅅㄱ 같은 줄임말. 두벌식 zz → ㅋㅋ, 세벌식 390 00 → ㅋㅋ, 55 → ㅠㅠ. 세벌식 숫자는 Shift 자리에 있으니 숫자 줄을 그냥 누르면 자모다. 내가 그 키를 영어로 훨씬 많이 썼다면(/hangul learn) 영어로 둔다.to 는 새, rm 은 그.세벌식 시프트 숫자·기호는 레이아웃 표대로 바뀐다. 390 J K L 은 4 5 6, B 는 !. 최종 J 는 1, B 는 ?. 세벌식은 숫자가 시프트 자리에만 있어 치환하지 않으면 칠 방법이 없다. 기호 키는 단어의 일부라서, 그 단어가 영어로 판정되면 친 키로 돌아간다. 390 Hello 는 Hello. 치환을 끄려면 코드에서 passthroughLiterals: true. 명령에는 없다.
세벌식에서는 영어도 자주 완성 음절이 된다. gh → 느, md → 히, https → 너펀. 단어가 끝날 때 두 쪽을 견주어, 영어 쪽이 더 그럴듯하면 친 키로 되돌린다.
gh pr md npm …)나 영어 사전 단어인가그 해 개 는 한글로 둔다)햣 둪)이 있는가| 두벌식 | 세벌식 390·최종 | |
|---|---|---|
gh | 호 → gh | 느 → gh |
pr | pr | 패 → pr |
md · https | 그대로 | 히 · 너펀 → md · https |
rm | 그 (한글로 둠) | 해 (한글로 둠) |
rm 처럼 흔한 한글과 겹치는 단어는 기본으로 한글이다. /hangul learn 을 한 번 돌리면 이 맥의 Claude Code 대화 기록에서 내가 직접 친 한글 프롬프트만 골라 영어·한글 단어 빈도를 세고, 그 빈도로 판정한다. 내가 rm 을 해 보다 훨씬 많이 썼으면 rm 이 된다.
$.store)에 둔다. 밖으로 나가지 않는다. 자주 쓴 이름이나 프로젝트 용어도 그 목록에 들어갈 수 있다. 24자 넘는 영어 토큰(키·해시 같은 것)은 저장하지 않는다./hangul forget 으로 지운다.판정 데이터는 손으로 쓴 일반 개발 용어·흔한 한국어 단어 목록, SCOWL 영어 단어 등급(tools/gen-judge-data.py), KS X 1001 음절 집합으로 만들었다. 작성자의 대화 기록은 점수를 재는 데만 썼고 데이터에는 들어가지 않았다. 학습에 쓰지 않은 기록으로 잰 결과, 영어가 영어로 남는 비율이 두벌식 92.7% → 99.0%(learn 후 99.8%), 세벌식 79.9–80.4% → 96.1–96.3%(learn 후 97.8–98.0%)였고 한글이 한글로 남는 비율은 99.97–100%였다.
세벌식 시프트 숫자·기호만으로 된 단어는 숫자·기호로 둔다. 숫자를 칠 다른 방법이 없어서다. 그래서 390 UI 는 78, OK 는 95 로 남는다.
bun run test
claude plugin test .
claude plugin validate .claude-plugin/plugin.json
npx -p typescript@5.9.3 tsc -p .
core/ — 조합 상태머신과 단어 판정(judge.ts, judge-data.ts). Claude Code API에 의존하지 않는다.hooks/ — prompt.edit 어댑터, /hangul 등록, /hangul learn 기록 집계(learn.ts).tools/gen-layout.mjs — libhangul 키보드 XML로 core/layout-data.ts 를 만든다.이슈와 PR 환영한다. 다음 할 일은 docs/ROADMAP.md. 작업은 develop 브랜치에서 하고, PR 전에 위 테스트를 돌린다. 키 배열을 고칠 때는 core/layout-data.ts 를 직접 고치지 말고 tools/gen-layout.mjs 로 다시 만든다.
hangul.el, uim byeoru.scm — 키 배열 교차 검증.prompt.edit 훅 구조를 참고했다.hooks/register.tsx 148 lines1// 한글 입력 mod 진입점.
2// 이벤트 이름·$.command.register·$.ui.status·$.env.get 는 이 환경의 Claude Code 2.1.289 가
3// 생성한 .claude-plugin/types 와 맞춘다. 키 이벤트 본문의 실측은 SPEC 을 본다.
4import type { EngineInterface, PromptEditInput, Register } from 'claude-code'
5
6import { HangulComposer } from '../core/composer'
7import { decide, init } from '../core/judge'
8import { LAYOUTS, parseLayout } from '../core/layouts'
9import { HangulEditor } from './editor'
10import type { Edit } from './editor'
11import { countPrompts, isPersonal, promptOf } from './learn'
12
13const DESCRIPTION =
14 'Turn Hangul (dubeolsik / sebeolsik 390 / sebeolsik final) input on or off. Args: on | off | 2 | 390 | final | learn | forget'
15const LEARNED = 'learn.v1'
16const MAX_READ = 4 * 1024 * 1024
17
18let editor: HangulEditor | undefined
19let trace = false
20
21function applyHangul(ed: HangulEditor, argRaw: string): { text: string; touchStatus: boolean } {
22 const arg = argRaw.trim()
23 const layout = parseLayout(arg)
24 if (arg === '') ed.setOn(!ed.isOn)
25 else if (arg === 'on') ed.setOn(true)
26 else if (arg === 'off') ed.setOn(false)
27 else if (layout !== undefined) {
28 ed.setLayout(layout)
29 ed.setOn(true)
30 } else return { text: `unknown argument "${arg}" (on | off | 2 | 390 | final)`, touchStatus: false }
31 // 화면에는 엔진이 `hangul: ` 을 앞에 붙인다. 여기서 또 붙이면 `hangul: hangul: on` 이 된다.
32 return { text: ed.isOn ? `on (${ed.layout.name})` : 'off', touchStatus: true }
33}
34
35/**
36 * 이 맥의 대화 기록(<설정 폴더>/projects 아래 .jsonl)에서 직접 친 한글 프롬프트를 세어 $.store 에 둔다.
37 * grep 으로 프롬프트 줄만 골라 읽는다(파일 크기 제한 없음). grep 을 못 쓰면 4 MiB 이하 파일만 직접 읽는다.
38 */
39async function learn($: EngineInterface): Promise<string> {
40 const home = await $.env.get('HOME')
41 const config = (await $.env.get('CLAUDE_CONFIG_DIR')) || (home ? `${home}/.claude` : '')
42 if (config === '') return 'cannot find the Claude Code config directory (HOME and CLAUDE_CONFIG_DIR are unset)'
43 const root = `${config}/projects`
44 if (!(await $.fs.exists(root))) return `no transcripts under ${root}`
45 const prompts: string[] = []
46 const take = (line: string) => {
47 const t = promptOf(line)
48 if (t !== undefined) prompts.push(t)
49 }
50 let skipped = 0
51 try {
52 // 폴더째(-r) 넘겨 인자 길이 한계를 피한다. 서브에이전트 기록은 promptOf 가 뺀다.
53 const argv = ['grep', '-rhF', '--include=*.jsonl', '-e', '"role":"user","content":"', '-e', '"role":"user","content":[{"type":"text"', root]
54 let rest = ''
55 for await (const { stream, text } of $.process.spawn({ argv })) {
56 if (stream !== 'stdout') continue
57 const lines = (rest + text).split('\n')
58 rest = lines.pop() ?? ''
59 lines.forEach(take)
60 }
61 take(rest)
62 } catch {
63 prompts.length = 0
64 for (const dir of await $.fs.list(root)) {
65 if (dir.kind !== 'dir') continue
66 for (const f of await $.fs.list(`${root}/${dir.name}`)) {
67 if (f.kind !== 'file' || !f.name.endsWith('.jsonl')) continue
68 const text = f.size > MAX_READ ? undefined : await $.fs.read(`${root}/${dir.name}/${f.name}`).catch(() => undefined)
69 if (text === undefined) skipped++
70 else text.split('\n').forEach(take)
71 }
72 }
73 }
74 const counted = countPrompts(prompts)
75 // 아무것도 못 읽었으면 이전에 배운 것을 지우지 않는다.
76 if (counted.prompts === 0) return 'found no Korean prompts to learn from; kept what was learned before'
77 await $.store.set(LEARNED, { eng: counted.eng, kor: counted.kor, prompts: counted.prompts, at: new Date().toISOString() })
78 init(counted)
79 const note = skipped > 0 ? `, ${skipped} transcripts skipped` : ''
80 return `learned from ${counted.prompts} prompts: ${counted.eng.length} English words, ${counted.kor.length} Korean words${note}`
81}
82
83function editOf(e: PromptEditInput): Edit {
84 return { text: e.text, cursor: e.cursor, start: e.start, end: e.end, inputText: e.inputText, key: e.key }
85}
86
87export const register: Register = on => {
88 on('session.start', async ($, e, next) => {
89 const wanted = await $.env.get('HANGUL_LAYOUT')
90 const order = await $.env.get('HANGUL_SEBEOL_ORDER')
91 trace = (await $.env.get('HANGUL_TRACE')) === '1'
92 const layout = parseLayout(wanted === undefined || wanted === '' ? undefined : wanted) ?? LAYOUTS.dubeolsik
93 // strict 만 libhangul 기본(역순 확정). 그 외·미설정은 SPEC 4.2 의 순서 무관.
94 const learned = await $.store.get(LEARNED)
95 init(isPersonal(learned) ? learned : { eng: [], kor: [] })
96 // 단어가 끝날 때 친 키가 영어로 더 그럴듯하면 키로 되돌린다(core/judge).
97 const keepKeys = (id: typeof layout.id, keys: string, hangul: string) => decide(id, keys, hangul) === 'en'
98 editor = new HangulEditor(new HangulComposer(layout, { autoReorder: order !== 'strict', keepKeys }))
99 $.ui.status(editor.status())
100 await $.command.register({
101 name: 'hangul',
102 description: DESCRIPTION,
103 argumentHint: '[on|off|2|390|final|learn|forget]',
104 immediate: true,
105 })
106 return next(e)
107 })
108
109 on('command.run', { command: 'hangul' }, async ($, e) => {
110 if (editor === undefined) return { text: 'not ready yet' }
111 const arg = e.args.trim()
112 if (arg === 'learn') return { text: await learn($) }
113 if (arg === 'forget') {
114 await $.store.delete(LEARNED)
115 init({ eng: [], kor: [] })
116 return { text: 'forgot learned words' }
117 }
118 const answer = applyHangul(editor, e.args)
119 if (answer.touchStatus) $.ui.status(editor.status())
120 return { text: answer.text }
121 })
122
123 on('prompt.edit', async ($, e, next) => {
124 if (trace) {
125 $.ui.log(
126 // keyField: 엔진이 key 를 빼는지(absent) null 로 주는지 가린다. 원격 키 묶음 처리가 이 값에 달렸다.
127 `prompt.edit ${JSON.stringify({ keyField: !('key' in e) ? 'absent' : e.key === undefined ? 'undefined' : e.key === null ? 'null' : 'set', key: e.key ?? null, inputText: e.inputText, len: e.inputText.length, start: e.start, end: e.end, cursor: e.cursor, text: e.text })}`,
128 { to: 'debug' },
129 )
130 }
131 if (editor === undefined) return next(e)
132 const answer = editor.edit(editOf(e))
133 if (answer.kind === 'pass') {
134 const edit = answer.edit
135 return next(edit === undefined ? e : { ...e, text: edit.text, start: edit.start, end: edit.end, cursor: edit.cursor })
136 }
137 return answer.box
138 })
139
140 on('prompt.submit', async ($, e, next) => {
141 if (trace) $.ui.log(`prompt.submit ${JSON.stringify({ origin: e.origin.kind, text: e.text })}`, { to: 'debug' })
142 // 입력창에서 친 글만 확정한다. Remote Control(bridge)·SDK 등에서 온 글은 이 입력창의 조합과 무관하다.
143 if (editor === undefined || e.origin.kind !== 'composer') return next(e)
144 const text = editor.commitForSubmit(e.text)
145 return next(text === e.text ? e : { ...e, text })
146 })
147}
148core/composer.ts 321 lines1// 한글 조합 상태머신. UI/Claude Code API에 의존하지 않는 순수 모듈.
2//
3// 설계 요약 (모든 규칙은 이 주석과 테스트가 근거):
4// * 조합 중인 음절 하나를 Syl{cho, jung, jong[]} 로 들고 있다. 확정된 글자는 commit 문자열로 내보낸다.
5// * 두벌식(kind 'dubeol'): 자음 키는 문맥으로 초성/종성이 결정된다.
6// - 받침이 있는 상태에서 모음이 오면 도깨비불: 마지막 받침 자모가 다음 음절 초성으로 넘어간다.
7// (겹받침이면 뒤 자모만 넘어간다. 시프트로 직접 친 ㄲ/ㅆ 받침은 한 덩어리로 넘어간다.)
8// - 받침이 될 수 없는 자음(ㄸ ㅃ ㅉ) 또는 결합 불가 자음은 현재 음절을 확정하고 새 음절을 연다.
9// * 세벌식(kind 'sebeol'): 키가 역할(초/중/종)을 고정한다. 도깨비불 없음.
10// - 기본(autoReorder true): 한 음절 안에서 초·중·종 입력 순서가 무관하다. 비어 있는 칸에 들어간다.
11// libhangul 의 option_auto_reorder 를 켠 것과 같다. libhangul 기본값(hangul_ic_new)은 false 라서,
12// 기본 libhangul 은 중·종이 이미 있으면 빈 초성을 채우지 않고 확정한다. 순서 무관은 SPEC 4.2 의 설계 선택.
13// - autoReorder false: 그 기본 libhangul 처럼, 빈 초성인데 중/종이 있거나 빈 중성인데 종이 있으면 확정 후 새 음절.
14// - 이미 찬 칸에 같은 역할이 오면, 결합 규칙이 있으면 결합하고 없으면 확정 후 새 음절.
15// - 초성 겹치기는 중성·종성이 비어 있을 때만. 겹모음은 종성이 없고 앞 모음이 스택의 마지막일 때만(ㅗ→ㅏ).
16// 모음끼리의 순서 무관은 없다. libhangul 도 peek 가 중성일 때만 겹모음을 합친다.
17// * 한 단어(공백·기호 전까지)가 완성 음절만이면 한글이다. 음절이 아닌 조각이 확정되면
18// 그 단어 전체를 친 키로 되돌린다. 세벌식 hello 는 녀llo 가 아니라 hello.
19// 공백·문장부호로 단어가 끝나면, 한글+낱자가 섞인 채로 두지 않고 키로 되돌린다.
20// * 숫자만인 단어는 숫자다. 기호(lit)는 기본으로 레이아웃 치환(390 J → 4)이고 단어의 일부다.
21// 세벌식은 숫자·기호가 시프트 자리에만 있어서 치환하지 않으면 칠 방법이 없다.
22// 단어가 음절이 아니게 되면 기호 키도 함께 친 키로 돌아간다. 390 Hello 는 'ello 가 아니라 Hello.
23// passthroughLiterals:true 면 기호 키는 친 문자 그대로 통과한다.
24// * 백스페이스는 열린 단어의 마지막 키를 지우고 다시 조합한다.
25// * 레이아웃에 없는 키(공백, 두벌식 숫자 등)는 consumed=false 로 돌려주고, 조합 중이던 글자는 확정시킨다.
26import { CHO_COMBINE, composeSyllable, isCho, isJong, JONG_COMBINE, JUNG_COMBINE } from './jamo'
27import type { KeyDef } from './keydef'
28import type { Layout, LayoutId } from './layouts'
29
30/** 조합 중 음절. jong 은 받침을 이루는 키 입력 자모들(최대 2개; 직접 겹받침 키는 1개짜리 합성 자모). */
31interface Syl {
32 readonly cho: string
33 readonly jung: string
34 readonly jong: readonly string[]
35 /** 이 덩어리를 만든 원문 키. 음절이 아니면 화면에 이 문자열을 낸다. */
36 readonly keys: string
37}
38
39const EMPTY: Syl = { cho: '', jung: '', jong: [], keys: '' }
40const isEmpty = (s: Syl): boolean => s.cho === '' && s.jung === '' && s.jong.length === 0
41
42/** 받침 자모 목록을 하나의 받침 문자로. 겹치지 않으면 undefined. */
43function jongChar(parts: readonly string[]): string | undefined {
44 if (parts.length === 0) return ''
45 if (parts.length === 1) return parts[0]
46 if (parts.length === 2) return JONG_COMBINE[parts[0]! + parts[1]!]
47 return undefined
48}
49
50/**
51 * 완성 음절이면 한글, 아니면 친 키 그대로.
52 * 숫자만인 경우는 단어 단위로 replay 가 거른다. 음절 단위로 거르면 세벌식 큐(05)·쿠(09)가 숫자가 된다.
53 */
54function render(s: Syl): string {
55 if (isEmpty(s)) return ''
56 const t = jongChar(s.jong) ?? ''
57 if (s.cho !== '' && s.jung !== '') {
58 const syl = composeSyllable(s.cho, s.jung, t)
59 if (syl !== undefined) return syl
60 }
61 return s.keys
62}
63
64interface Step {
65 /** 이번 입력으로 확정된 글자(없으면 ''). */
66 readonly commit: string
67 readonly next: Syl
68 /** 새 음절이 열렸을 때 백스페이스 기록의 시작값(기본 [EMPTY]). */
69 readonly seed?: readonly Syl[]
70}
71
72/** 두벌식 자음. */
73function dubeolConsonant(s: Syl, c: string, key: string): Step {
74 if (isEmpty(s)) return { commit: '', next: { ...EMPTY, cho: c, keys: key } }
75 // 초성만 있거나(ㄱㄱ은 합치지 않음) 모음만 있으면 확정하고 새 음절.
76 if (s.jung === '' || s.cho === '') return { commit: render(s), next: { ...EMPTY, cho: c, keys: key } }
77 if (s.jong.length === 0) {
78 if (isJong(c)) return { commit: '', next: { ...s, jong: [c], keys: s.keys + key } }
79 return { commit: render(s), next: { ...EMPTY, cho: c, keys: key } }
80 }
81 if (s.jong.length === 1 && JONG_COMBINE[s.jong[0]! + c] !== undefined) {
82 return { commit: '', next: { ...s, jong: [s.jong[0]!, c], keys: s.keys + key } }
83 }
84 return { commit: render(s), next: { ...EMPTY, cho: c, keys: key } }
85}
86
87/** 모음(두벌식·세벌식 공통의 중성 처리 중 "받침 없음/겹모음" 부분). 처리 불가면 undefined. */
88function tryJung(s: Syl, v: string): Syl | undefined {
89 if (s.jung === '') return { ...s, jung: v }
90 if (s.jong.length === 0) {
91 const combined = JUNG_COMBINE[s.jung + v]
92 if (combined !== undefined) return { ...s, jung: combined }
93 }
94 return undefined
95}
96
97function dubeolVowel(s: Syl, v: string, key: string): Step {
98 if (s.jong.length > 0) {
99 // 도깨비불: 마지막 받침 자모가 다음 음절의 초성이 된다.
100 // libhangul hangul_ic_process_jamo: 종성 뒤 중성이면 pop. peek 가 종성이면
101 // hangul_jongseong_get_diff 로 뒤 자모만 초성으로 넘기고, 아니면 종성 전체를 초성으로 넘긴다.
102 // ㄱ+ㄱ→ㄲ 는 diff 가 ㄱ을 넘긴다(낚+ㅣ→낙기). 시프트로 한 번에 넣은 ㅆ/ㄲ 는 스택에 한 덩어리라 통째로 넘어간다.
103 const moved = s.jong[s.jong.length - 1]!
104 const movedKey = s.keys.slice(-1)
105 const stay: Syl = { ...s, jong: s.jong.slice(0, -1), keys: s.keys.slice(0, -1) }
106 const first: Syl = { ...EMPTY, cho: moved, keys: movedKey }
107 return { commit: render(stay), next: { ...first, jung: v, keys: movedKey + key }, seed: [EMPTY, first] }
108 }
109 const joined = tryJung(s, v)
110 if (joined !== undefined) return { commit: '', next: { ...joined, keys: s.keys + key } }
111 return { commit: render(s), next: { ...EMPTY, jung: v, keys: key } }
112}
113
114function sebeolCho(s: Syl, c: string, key: string, autoReorder: boolean): Step {
115 if (s.cho === '') {
116 // libhangul process_jaso, auto_reorder 꺼짐: 중성이나 종성이 이미 있으면 빈 초성을 채우지 않고 확정한다.
117 if (!autoReorder && (s.jung !== '' || s.jong.length > 0)) return { commit: render(s), next: { ...EMPTY, cho: c, keys: key } }
118 return { commit: '', next: { ...s, cho: c, keys: s.keys + key } }
119 }
120 if (s.jung === '' && s.jong.length === 0) {
121 const combined = CHO_COMBINE[s.cho + c]
122 if (combined !== undefined) return { commit: '', next: { ...s, cho: combined, keys: s.keys + key } }
123 }
124 return { commit: render(s), next: { ...EMPTY, cho: c, keys: key } }
125}
126
127function sebeolJung(s: Syl, v: string, key: string, autoReorder: boolean): Step {
128 // libhangul process_jaso, auto_reorder 꺼짐: 종성이 있으면 빈 중성을 채우지 않고 확정한다.
129 if (!autoReorder && s.jung === '' && s.jong.length > 0) return { commit: render(s), next: { ...EMPTY, jung: v, keys: key } }
130 const joined = tryJung(s, v)
131 if (joined !== undefined) return { commit: '', next: { ...joined, keys: s.keys + key } }
132 return { commit: render(s), next: { ...EMPTY, jung: v, keys: key } }
133}
134
135function sebeolJong(s: Syl, t: string, key: string): Step {
136 if (s.jong.length === 0) return { commit: '', next: { ...s, jong: [t], keys: s.keys + key } }
137 if (s.jong.length === 1 && JONG_COMBINE[s.jong[0]! + t] !== undefined) {
138 return { commit: '', next: { ...s, jong: [s.jong[0]!, t], keys: s.keys + key } }
139 }
140 return { commit: render(s), next: { ...EMPTY, jong: [t], keys: key } }
141}
142
143export interface FeedResult {
144 /** 키를 조합기가 처리했는가. false 면 호출자가 원래 키를 그대로 통과시켜야 한다(commit 은 먼저 삽입). */
145 readonly consumed: boolean
146 /** 이번 입력으로 확정되어 preedit 앞에 들어갈 글자. */
147 readonly commit: string
148 /** 현재 조합 중인 글자('' 이면 없음). */
149 readonly preedit: string
150}
151
152export interface ComposerOptions {
153 /**
154 * 레이아웃 기호 키(lit)를 친 문자 그대로 통과시킬지. 기본 false: 세벌식 표의 치환(`<`→`2`, 최종 `?`→`!`)을 적용한다.
155 * true 면 `<` `?` 같은 키는 친 문자 그대로.
156 */
157 readonly passthroughLiterals?: boolean
158 /**
159 * 세벌식에서 빈 초·중·종 칸을 입력 순서와 무관하게 채울지. 기본 true (SPEC 4.2).
160 * false 는 libhangul 기본(option_auto_reorder = false)과 같이 역순이면 확정한다.
161 */
162 readonly autoReorder?: boolean
163 /**
164 * 단어가 끝났을 때(완성 음절만이라 한글로 남을 단어) 친 키로 되돌릴지 묻는다. true 면 친 키.
165 * 없으면 지금처럼 완성 음절이면 한글. register 는 core/judge 의 decide 를 넣는다.
166 */
167 readonly keepKeys?: (layout: LayoutId, keys: string, hangul: string) => boolean
168}
169
170/** 반복해서 자모만으로 쓰는 말(ㅋㅋ ㅎㅎ ㅠㅠ ㄷㄷ …)에 쓰이는 자모와, 흔한 자모 줄임말. */
171const REPEATABLE_JAMO = new Set('ㅋㅎㅠㅜㄷㅇㄴㄱㅂㅅㅈㅊ')
172const JAMO_ABBREVIATIONS = new Set(['ㅇㅋ', 'ㅊㅋ', 'ㅅㄱ', 'ㄱㅅ', 'ㅈㅅ', 'ㅎㅇ', 'ㅂㅇ', 'ㄹㅇ', 'ㅇㅈ'])
173
174function isHangulRun(text: string): boolean {
175 if (text === '') return true
176 for (const ch of text) {
177 const code = ch.codePointAt(0) ?? 0
178 if (code < 0xac00 || code > 0xd7a3) return false
179 }
180 return true
181}
182
183export class HangulComposer {
184 /** 공백·문장부호 전까지의 원문 키. 화면은 이 키를 다시 조합해 만든다. */
185 private wordKeys = ''
186
187 constructor(
188 private layout: Layout,
189 private readonly options: ComposerOptions = {},
190 ) {}
191
192 getLayout(): Layout {
193 return this.layout
194 }
195
196 /** 레이아웃을 바꾼다. 조합 중이던 글자는 확정 문자열로 돌려준다. */
197 setLayout(layout: Layout): string {
198 const committed = this.flush()
199 this.layout = layout
200 return committed
201 }
202
203 preedit(): string {
204 return this.wordKeys === '' ? '' : this.replay(this.wordKeys, false)
205 }
206
207 isComposing(): boolean {
208 return this.wordKeys !== ''
209 }
210
211 /** 조합 중인 단어를 확정하고 상태를 비운다. 한글이 아닌 단어는 친 키로 되돌린다. */
212 flush(): string {
213 const out = this.wordKeys === '' ? '' : this.replay(this.wordKeys, true)
214 this.wordKeys = ''
215 return out
216 }
217
218 /** 조합을 버린다(확정하지 않음). */
219 reset(): void {
220 this.wordKeys = ''
221 }
222
223 /**
224 * 단어를 다시 조합한다.
225 * closing 이면 단어가 끝난 것. 완성 음절만 아니면 친 키를 돌려준다.
226 */
227 private replay(keys: string, closing: boolean): string {
228 // ㅋㅋ·ㅠㅠ 처럼 자모만으로 쓰는 말은 단어가 끝날 때 자모로 낸다. 세벌식 ㅋㅋ 는 숫자 키(00)라 숫자 규칙보다 먼저 본다.
229 if (closing) {
230 const jamo = this.jamoWord(keys)
231 if (jamo !== undefined && this.options.keepKeys?.(this.layout.id, keys, jamo) !== true) return jamo
232 }
233 if (/^\d+$/.test(keys)) return keys
234 let syl: Syl = EMPTY
235 let text = ''
236 let latin = false
237 const reorder = this.options.autoReorder !== false
238 for (const ch of keys) {
239 const def = this.layout.map[ch]
240 if (def === undefined) continue
241 if (def.role === 'lit') {
242 // 기호는 조합 중이던 음절을 닫고 그 자리에 치환 문자를 낸다. 닫힌 조각이 음절이 아니면 단어 전체가 키.
243 const pending = render(syl)
244 if (!isHangulRun(pending)) latin = true
245 text += pending + def.text
246 syl = EMPTY
247 continue
248 }
249 const step = this.step(syl, def, ch, reorder)
250 if (step.commit !== '' && !isHangulRun(step.commit)) latin = true
251 if (!latin) text += step.commit
252 syl = step.next
253 }
254 if (latin) return keys
255 const tail = render(syl)
256 if (closing && !isHangulRun(tail)) return keys
257 const word = text + tail
258 if (closing && word !== keys && this.options.keepKeys?.(this.layout.id, keys, word) === true) return keys
259 return word
260 }
261
262 /** keys 가 자모만인 말(같은 자모 반복, 흔한 줄임말)이면 그 자모 문자열. 받침 키·기호 키가 섞이면 아니다. */
263 private jamoWord(keys: string): string | undefined {
264 if (keys.length < 2) return undefined
265 let out = ''
266 for (const ch of keys) {
267 const def = this.layout.map[ch]
268 if (def === undefined || def.role === 'lit' || def.role === 'jong') return undefined
269 out += def.jamo
270 }
271 const repeated = REPEATABLE_JAMO.has(out[0]!) && [...out].every(j => j === out[0])
272 return repeated || JAMO_ABBREVIATIONS.has(out) ? out : undefined
273 }
274
275 private step(syl: Syl, def: Exclude<KeyDef, { role: 'lit' }>, ch: string, reorder: boolean): Step {
276 const jamo = def.jamo
277 if (this.layout.kind === 'dubeol') {
278 if (def.role === 'jung') return dubeolVowel(syl, jamo, ch)
279 if (!isCho(jamo)) return { commit: render(syl), next: EMPTY }
280 return dubeolConsonant(syl, jamo, ch)
281 }
282 if (def.role === 'cho') return sebeolCho(syl, jamo, ch, reorder)
283 if (def.role === 'jung') return sebeolJung(syl, jamo, ch, reorder)
284 return sebeolJong(syl, jamo, ch)
285 }
286
287 /** 문자 하나(키보드가 만든 ASCII 문자, 시프트 반영)를 넣는다. */
288 feed(ch: string): FeedResult {
289 const def: KeyDef | undefined = this.layout.map[ch]
290 const passLit = def?.role === 'lit' && this.options.passthroughLiterals === true
291 if (def === undefined || passLit) {
292 const commit = this.flush()
293 return { consumed: false, commit, preedit: '' }
294 }
295 this.wordKeys += ch
296 // commit 은 비운다. 단어 전체가 preedit 이라, 녀llo 처럼 섞이면 앞의 녀 까지 원문으로 바꿀 수 있다.
297 return { consumed: true, commit: '', preedit: this.replay(this.wordKeys, false) }
298 }
299
300 /**
301 * 백스페이스. 열린 단어가 있으면 마지막 키를 지우고 consumed=true.
302 * 단어가 없으면 consumed=false (호출자가 편집기에 그대로 넘긴다).
303 */
304 backspace(): { consumed: boolean; preedit: string } {
305 if (this.wordKeys === '') return { consumed: false, preedit: '' }
306 this.wordKeys = this.wordKeys.slice(0, -1)
307 return { consumed: true, preedit: this.preedit() }
308 }
309
310 /** 편의 함수: 문자열을 한 키씩 넣고 (확정 + 조합중) 전체를 돌려준다. 테스트·디버깅용. */
311 typeAll(keys: string): string {
312 let out = ''
313 for (const k of keys) {
314 const r = this.feed(k)
315 out += r.commit
316 if (!r.consumed) out += k
317 }
318 return out + this.preedit()
319 }
320}
321core/judge.ts 137 lines1// 단어 판정: 단어가 끝났을 때, 조합된 한글을 둘지 친 키(영어)로 되돌릴지 정한다.
2// 친 키가 그럴듯한 영어·개발 용어인지, 조합된 한글이 흔한 한국어 단어인지를 차례로 본다.
3// 데이터: judge-data.ts (SCOWL 단어 등급 + KS X 1001 음절)와 아래 손으로 쓴 목록(일반 지식).
4// 사용자의 대화 기록에서 나온 개인 빈도는 init() 으로만 들어온다. 저장소에는 들어가지 않는다.
5import { KS, WORDS } from './judge-data'
6import type { LayoutId } from './layouts'
7
8type Layout = LayoutId
9
10// ---- English side -------------------------------------------------------------------------
11const TIER = new Map<string, number>()
12for (const [t, s] of Object.entries(WORDS)) for (const w of s.split(' ')) TIER.set(w, +t)
13
14const SUF = ['s', 'es', 'ed', 'd', 'ing', 'ly', 'er', 'ers']
15/** most common SCOWL tier of the word or of its base form (inflections were folded out of the data) */
16function tierOf(w: string): number | undefined {
17 let best = TIER.get(w)
18 const see = (b: string) => { const t = TIER.get(b); if (t !== undefined && (best === undefined || t < best)) best = t }
19 for (const x of SUF) {
20 if (!w.endsWith(x) || w.length - x.length < 3) continue
21 const b = w.slice(0, -x.length); see(b)
22 if (x === 'ing' || x === 'ed' || x === 'er' || x === 'ers') { see(b + 'e'); if (b.length > 3 && b[b.length - 1] === b[b.length - 2]) see(b.slice(0, -1)) }
23 }
24 if (w.endsWith('ies') || w.endsWith('ied')) see(w.slice(0, -3) + 'y')
25 return best
26}
27
28// Developer vocabulary, acronyms, file extensions, protocols, CLI tools, short English words.
29const DEV = new Set((`
30github gitlab bitbucket google ai ml llm gpt rag mcp nlp ocr tts stt api apis sdk cli ide gui tui ui ux db dbs pr prs ci cd qa id ids ip os io vm vms
31js ts jsx tsx py rb rs go md mdx gh gl git svn npm npx pnpm yarn bun deno node nvm pip uv brew apt yum
32ls cp mv rm mkdir rmdir chmod chown cat grep sed awk curl wget ssh scp rsync tar zip unzip gzip gz tgz make cmake gcc clang llvm
33vim vi nvim nano emacs tmux zsh bash sh fish sudo su ps kill top htop df du env cron jq yq fd rg fzf bat
34www url urls uri dns ssh ssl tls tcp udp http https ftp sftp smtp imap ws wss rest grpc rpc graphql jwt oauth sso otp mfa saml ldap
35html css scss sass less xml json jsonl yaml yml toml ini csv tsv pdf png jpg jpeg gif svg webp ico mp3 mp4 wav mov txt log logs
36sql nosql orm crud cdn vpc iam aws gcp gke eks ecs ec2 rds sqs sns ses kms k8s helm docker podman nginx redis kafka mysql postgres
37dev prod stg staging env envs cfg conf config tmp temp app apps bin lib libs src dist build builds test tests spec specs doc docs
38readme todo todos fixme wip tbd fyi asap eta afk lgtm ptal imo imho btw tldr ack nit nits poc mvp kpi okr roi sla slo
39cpu gpu tpu ram ssd hdd usb hd sd hdmi wifi lan wan vpn mac pc ios ipad iphone android linux unix macos win
40pm po ceo cto cfo hr ok okay hi hey yes no
41com net org kr us uk eu jp cn co
42oss ssr csr spa pwa seo cms crm saas paas iaas
43src dst fs ui vs etc via per re
44a an the and or not but nor if then else for of to in on at by as is it be am are was were been do does did done has have had
45can could will would shall should may might must
46we you he she they me my our your his her its their them us this that these those there here what when where who why how which
47all any each few more most other some such only own same so than too very just also new old use used uses fix fixed fixes
48add adds added get gets got set sets run runs ran see saw put let lets say says said make made take took give gave
49one two three four five six ten first last next prev up down out off over into from with without about after before
50code bug bugs file files line lines page pages user users data type types key keys value values list item items name names
51show shows today now then
52`).trim().split(/\s+/))
53
54// ---- Korean side --------------------------------------------------------------------------
55const KSSET = new Set(KS)
56// Very frequent standalone one-syllable Korean words: these beat even a developer token.
57const KO_STRONG = new Set((`
58수 것 더 또 내 새 개 그 이 저 좀 잘 안 못 왜 뭐 뭘 꼭 다 각 위 후 전 중 등 및 한 두 세 네 너 나 난 날 게 거 걸 건 데 때 줄 듯 만
59고 도 에 은 는 을 를 의 가 와 과 로 해 했 할 된 될 돼 됨 함 시 자 야 어 아 예 응 음 일 월 년 분 번 명 원 곳 점 말 글 집 돈 길 물 밥
60앞 뒤 옆 밖 속 막 곧 늘 꽤 딱 참 영 채 체 척 뻔 법 리 지 터 바 셈 탓 덕 대 간 차 회 권 쪽 편 면 행 칸 끝 맘 몸 손 눈 발 키 팀 표 값 앱 웹
61`).trim().split(/\s+/))
62// Common standalone Korean eojeols (1–2 syllables), general knowledge. Hangul here always stays Hangul
63// unless the user's own history says otherwise.
64const KO = new Set((`
65가 각 간 갈 감 갑 값 강 개 거 건 걍 걸 검 것 게 겸 계 고 곧 곳 공 과 관 구 군 권 그 근 글 금 기 길 김 깐 깊 꼭 꽤 꾹 꽉 끝 끈
66나 난 날 남 낮 내 너 넌 널 네 넷 년 놈 놓 누 눈 늘 니 님
67다 단 달 답 당 대 댁 더 덕 던 데 도 독 돈 동 두 둘 둥 뒤 듯 등 딱 딴 땅 때 떼 또 뜻 띠
68라 란 랑 래 량 런 려 로 론 료 루 류 륙 를 리 린 림 립
69마 막 만 말 맘 맛 망 매 맨 맹 먼 멀 메 면 명 몇 모 목 몫 몸 못 무 묵 문 물 뭐 뭔 뭘 미 민 밑
70바 박 반 받 발 밤 밥 방 배 백 뱀 번 벌 범 법 벽 별 병 보 복 본 볼 봄 봐 부 북 분 불 비 빈 빛 빨 빵 뻔 뼈 뿐
71사 산 살 삶 상 새 색 생 서 석 선 설 성 세 셈 셋 소 속 손 솔 쇼 수 순 술 숨 쉬 스 시 식 신 실 싹 쌍 쑥 쓴 씨 씩
72아 안 알 암 앞 애 액 야 약 양 얘 어 억 언 얼 엄 업 에 여 역 연 열 염 엿 영 예 옛 오 옥 온 올 옷 와 완 왜 외 요 욕 용 우 운 울 움 원 월 위 유 육 윤 은 을 음 응 의 이 익 인 일 임 입 잇 있
73자 작 잔 잘 잠 장 재 쟤 저 적 전 절 점 정 제 조 족 존 종 좀 좋 죄 주 죽 준 줄 중 쥐 즉 증 지 직 진 질 짐 집 짓 짝 짧 째 쪽 쭉 쯤 찜
74차 착 참 창 채 책 처 척 천 철 첫 청 체 초 촌 총 최 추 축 춤 충 취 층 치 칙 친 칠 침 칸 칼 캡 컵 켜 코 콩 큰 키
75타 탁 탄 탈 탑 탓 태 택 터 턱 털 텅 토 톤 통 퇴 투 툭 틀 틈 티 팀 팁
76파 판 팔 팩 퍽 편 평 폐 포 폭 표 푹 풀 품 풍 피 필
77하 학 한 할 함 합 항 해 핵 했 행 향 허 헌 헐 현 형 혜 호 혹 혼 홀 홈 확 환 활 황 회 획 효 후 훅 훨 휴 흑 흠 흥 흰 힘
78가끔 가장 각각 거의 결국 계속 고려 그냥 그래 그런 그럼 그리 그만 금방 꼭꼭 나중 너무 늘상 다만 다시 단지 대개 대신 더욱 도대 드디 따로 때문
79마치 마침 만약 매우 먼저 모두 모드 무슨 물론 바로 반드 별로 보통 아까 아마 아직 아주 아니 약간 어떤 언제 얼마 여기 역시 예를 오늘 오직 왜냐
80우선 원래 이미 이제 일단 자꾸 잠깐 저기 전부 점점 정말 제발 조금 좀더 주로 즉시 지금 진짜 참고 처음 특히 함께 해소 혹시 훨씬
81`).trim().split(/\s+/))
82
83// ---- Personal ----------------------------------------------------------------------------
84let pEng = new Map<string, number>(), pKor = new Map<string, number>()
85export type Personal = { eng: readonly (readonly [string, number])[]; kor: readonly (readonly [string, number])[] }
86
87/** 개인 빈도를 넣는다. /hangul learn 결과. 빈 값이면 일반 규칙만. */
88export function init(personal: Personal): void {
89 pEng = new Map(); pKor = new Map()
90 for (const [w, n] of personal.eng) { const l = w.toLowerCase(); pEng.set(l, (pEng.get(l) ?? 0) + n) }
91 for (const [w, n] of personal.kor) pKor.set(w, (pKor.get(w) ?? 0) + n)
92}
93
94const isSyl = (c: string) => c >= '가' && c <= '힣'
95
96/** hangul 은 keys 를 조합한 결과(keys 와 다를 때만 부른다). 'en' 이면 친 키로 되돌린다. */
97export function decide(layout: Layout, keys: string, hangul: string): 'ko' | 'en' {
98 if (/[A-Za-z]/.test(hangul)) return 'en' // letters left unconverted: not a Korean word
99 const lower = keys.toLowerCase()
100 // 세벌식은 숫자 키가 자모다. 숫자가 섞인 키는 한글로 보되, k8s 같은 개발 용어만 영어.
101 if (!/^[A-Za-z]+$/.test(keys)) return /^[a-z0-9]+$/.test(lower) && DEV.has(lower) ? 'en' : 'ko'
102 // 자모만인 말(ㅋㅋ ㅎㅎ): 내 기록에서 그 키를 영어로 훨씬 많이 썼거나 개발 용어면 영어.
103 if (/^[ㄱ-ㅣ]+$/.test(hangul)) {
104 const e = pEng.get(lower) ?? 0, k = pKor.get(hangul) ?? 0
105 return e > 3 * k || DEV.has(lower) ? 'en' : 'ko'
106 }
107 // 1. 숫자·기호뿐(세벌식 시프트 치환 J → 4)이면 그대로 둔다. 세벌식에서 숫자를 칠 유일한 방법이다.
108 // 390 UI → 78 처럼 약어와 겹치는 숫자도 숫자 쪽을 지킨다.
109 if (![...hangul].some(isSyl)) return 'ko'
110 // 앞뒤에 붙은 숫자·기호(한글! · 한4)는 떼고 한글 부분만 본다. 음절 사이에 끼면(GitHub → /머'두) 영어.
111 const body = hangul.replace(/^[^가-힣]+|[^가-힣]+$/g, '')
112 if (/[^가-힣]/.test(body)) return 'en'
113 const edged = body !== hangul
114 // 2. Personal history
115 const e = pEng.get(lower) ?? 0, k = pKor.get(body) ?? 0
116 if (e > 0 && k === 0) return 'en'
117 if (k > 0 && e === 0) return 'ko'
118 if (e > 0 && k > 0) return e > 3 * k ? 'en' : 'ko'
119 // 3. Off-repertoire syllable → never real Korean
120 for (const c of body) if (!KSSET.has(c)) return 'en'
121 // 4. 두벌식: shift on a key that has no shifted jamo
122 if (layout === 'dubeolsik' && /[ABCDFGHIJKLMNSUVXYZ]/.test(keys)) return 'en'
123 // 기호가 붙은 단어는 키 쪽 사전 비교가 맞지 않으니(키에 시프트 글자가 섞임) 한글로 둔다.
124 if (edged) return 'ko'
125 // 5. Very common Korean word beats everything general
126 if (KO_STRONG.has(body)) return 'ko'
127 // 6. Curated developer / short English vocabulary
128 if (DEV.has(lower)) return 'en'
129 // 7. Other common Korean words veto dictionary / n-gram guesses
130 if (KO.has(body)) return 'ko'
131 if (lower.length >= 4) {
132 const t = tierOf(lower)
133 if (t !== undefined) return 'en'
134 }
135 return 'ko'
136}
137core/layouts.ts 34 lines1// 레이아웃 레지스트리. 표 본문은 tools/gen-layout.mjs 가 만든 layout-data.ts (출처·미확인 표시는 그 파일 머리말).
2import type { KeyDef } from './keydef'
3import { DUBEOLSIK, SEBEOLSIK_390, SEBEOLSIK_FINAL } from './layout-data'
4
5export type LayoutId = 'dubeolsik' | 'sebeolsik-390' | 'sebeolsik-final'
6
7export interface Layout {
8 readonly id: LayoutId
9 readonly name: string
10 /** dubeol: 자음이 초/종성 겸용, sebeol: 키가 역할 고정 */
11 readonly kind: 'dubeol' | 'sebeol'
12 readonly map: Readonly<Record<string, KeyDef>>
13}
14
15export const LAYOUTS: Readonly<Record<LayoutId, Layout>> = {
16 dubeolsik: { id: 'dubeolsik', name: '두벌식', kind: 'dubeol', map: DUBEOLSIK },
17 'sebeolsik-390': { id: 'sebeolsik-390', name: '세벌식 390', kind: 'sebeol', map: SEBEOLSIK_390 },
18 'sebeolsik-final': { id: 'sebeolsik-final', name: '세벌식 최종', kind: 'sebeol', map: SEBEOLSIK_FINAL },
19}
20
21const ALIASES: Readonly<Record<string, LayoutId>> = {
22 '2': 'dubeolsik', dubeol: 'dubeolsik', dubeolsik: 'dubeolsik', 두벌식: 'dubeolsik',
23 '390': 'sebeolsik-390', '3-90': 'sebeolsik-390', '39': 'sebeolsik-390', 'sebeolsik-390': 'sebeolsik-390', 세벌식390: 'sebeolsik-390',
24 final: 'sebeolsik-final', '3f': 'sebeolsik-final', '3final': 'sebeolsik-final', 'sebeolsik-final': 'sebeolsik-final', 세벌식최종: 'sebeolsik-final',
25}
26
27/** 사용자가 입력한 이름(공백·대소문자 무시)을 레이아웃으로. 모르면 undefined. */
28export function parseLayout(name: string | undefined): Layout | undefined {
29 if (name === undefined) return undefined
30 const key = name.trim().toLowerCase().replace(/\s+/g, '')
31 const id = ALIASES[key]
32 return id === undefined ? undefined : LAYOUTS[id]
33}
34hooks/editor.ts 223 lines1// prompt.edit 한 번의 입력을 한글 조합기(core)에 연결하는 어댑터.
2// Claude Code API에 대한 "런타임 의존"은 없다(타입 모양만 claude-vime 의 hooks/editor.ts 를 따라 로컬 정의).
3//
4// Edit 필드는 Claude Code 2.1.289 생성 타입 PromptEditInput 의 부분집합이다.
5// 2026-10-04 세션에서 한 글자 키는 {key, inputText, start, end, cursor, text} 로 왔다.
6// TODO [미검증]: 한영·Caps Lock·Globe 키. 그 세션의 tmux 로는 한영 키 이벤트를 넣지 못했다.
7import { HangulComposer } from '../core/composer'
8import type { Layout } from '../core/layouts'
9
10export type KeyEvent = { key: string; ctrl?: true; shift?: true; meta?: true }
11
12/** prompt.edit 이 주는 한 번의 편집: 편집 전 입력창 + 치환 구간. (claude-vime 의 Edit 와 같은 모양) */
13export type Edit = { text: string; cursor: number; start: number; end: number; inputText: string; key?: KeyEvent }
14
15export type Decoration = { start: number; end: number; underline: true; bold?: true; backgroundColor?: string }
16export type BoxAnswer = { text: string; cursor: number; decorations: Decoration[] }
17/** box: 우리가 입력창을 직접 정해 돌려줌(키 소비). pass: 편집기가 평소처럼 처리(edit 가 있으면 그 내용으로). */
18export type Answer = { kind: 'box'; box: BoxAnswer } | { kind: 'pass'; edit?: Edit }
19
20// 맨 앞에서 슬래시 명령 이름을 치는 중이면 그대로 통과시킨다. 세벌식에서 '/' 는 ㅗ 이므로 필수.
21// 다른 명령은 이름 뒤 공백부터 다시 한글. /hangul 만은 인자(on off 2 390 final)까지 영어 그대로.
22const isSlashCommandName = (head: string) => /^\/\S*$/.test(head)
23const isHangulCommand = (head: string) => /^\/hangul(?:\s+\S*)?$/.test(head)
24
25/** 조합기에 넘길 단일 인쇄 가능 ASCII 문자. 공백은 레이아웃에 없으므로 통과 키가 된다. */
26const SINGLE_KEY = /^[\x20-\x7e]$/
27
28/**
29 * key 없이 여러 글자가 한 편집으로 온 것 중 키 묶음으로 보는 것. 원격(SSH 등)에서는 지연 때문에
30 * 연달아 친 키가 한 편집으로 접혀 오고, API 로는 붙여넣기와 구별되지 않는다.
31 * 줄바꿈 없는 인쇄 가능 ASCII 이고 BURST_MAX 글자 이하면 한 글자씩 친 것으로 본다. 더 길면 붙여넣기.
32 */
33const BURST_MAX = 8
34const BURST = new RegExp(`^[\\x20-\\x7e]{2,${BURST_MAX}}$`)
35
36export class HangulEditor {
37 private on = false
38 /** 입력창 안에서 조합 중인 글자의 시작 위치. */
39 private anchor = 0
40 /** 입력창에 현재 표시된 조합 중 글자('' 이면 조합 없음). */
41 private shown = ''
42
43 constructor(private readonly composer: HangulComposer) {}
44
45 get isOn(): boolean {
46 return this.on
47 }
48
49 get layout(): Layout {
50 return this.composer.getLayout()
51 }
52
53 /** 켜고 끈다. 끄면 조합 중인 글자는 입력창에 그대로 남는다(확정). */
54 setOn(on: boolean): void {
55 if (this.on && !on) this.commit()
56 this.on = on
57 }
58
59 setLayout(layout: Layout): void {
60 this.composer.setLayout(layout)
61 this.shown = ''
62 }
63
64 /** 상태줄 문자열. 꺼져 있으면 undefined. */
65 status(): string | undefined {
66 if (!this.on) return undefined
67 return `한 ${this.composer.getLayout().name}`
68 }
69
70 /** 조합 중인 글자를 확정(입력창 텍스트는 이미 그 글자를 담고 있으므로 상태만 비운다). */
71 commit(): void {
72 this.composer.flush()
73 this.shown = ''
74 }
75
76 /** 전송 직전. 열린 단어가 한글이 아니면 친 키로 되돌린다. */
77 commitForSubmit(sent: string): string {
78 return this.seal(sent)
79 }
80
81 edit(e: Edit): Answer {
82 if (!this.on) return { kind: 'pass' }
83
84 // 입력창이 밖에서 바뀌어(비우기·전송·vim 노멀 모드 편집 등) 조합 글자가 사라졌으면 처음부터.
85 if (this.shown !== '' && e.text.slice(this.anchor, this.anchor + this.shown.length) !== this.shown) {
86 this.composer.reset()
87 this.shown = ''
88 }
89 let composing = this.shown !== ''
90 const runEnd = this.anchor + this.shown.length
91
92 // ctrl/meta 조합(ctrl+a, option+←, ctrl+k …)은 건드리지 않는다: 확정하고 통과.
93 if (e.key?.ctrl === true || e.key?.meta === true) return this.commitAndPass(e)
94
95 if (e.key?.key === 'backspace') {
96 // 조합 구간의 마지막 글자를 지우는 백스페이스만 자모 단위로 처리.
97 if (composing && e.start === e.end - 1 && e.end === runEnd) {
98 const r = this.composer.backspace()
99 if (r.consumed) return this.render(e.text, '', r.preedit)
100 }
101 return this.commitAndPass(e)
102 }
103
104 // 타입은 key 를 '없음'으로 정의하지만 실측 로그는 null 과 구별하지 못했다(SPEC). 둘 다 키 묶음으로 본다.
105 if (e.key == null && e.start === e.end && BURST.test(e.inputText)) return this.burst(e)
106
107 // 한 글자 입력만 조합 대상. 붙여넣기·여러 글자·선택영역 치환은 확정 후 원문 그대로 통과.
108 const isSingle = e.start === e.end && SINGLE_KEY.test(e.inputText)
109 if (!isSingle) return this.commitAndPass(e)
110
111 let sealed = false
112 if (composing && e.start !== runEnd) {
113 // 조합 구간 끝이 아닌 곳에서 입력: 열린 단어를 확정(한글이 아니면 친 키로)하고, 이 키는 새 조합의 시작.
114 e = this.sealEdit(e)
115 composing = false
116 sealed = true
117 }
118 // 조합 중인 단어를 이어 치는 중이면 명령이 아니다. 세벌식 G 는 화면에 / 로 보여 줄 맨 앞에서 명령처럼 보인다.
119 const head = e.text.slice(0, e.start) + e.inputText
120 if (!composing && (isSlashCommandName(head) || isHangulCommand(head))) {
121 if (composing) this.commit()
122 return sealed ? { kind: 'pass', edit: e } : { kind: 'pass' }
123 }
124
125 const r = this.composer.feed(e.inputText)
126 if (!r.consumed) return this.passBoundary(e, r.commit)
127 if (!composing) this.anchor = e.start
128 return this.render(e.text, r.commit, r.preedit)
129 }
130
131 /** 키 묶음을 한 글자씩 친 것처럼 처리하고, 그 결과 입력창을 한 번에 돌려준다. */
132 private burst(e: Edit): Answer {
133 let text = e.text
134 let cursor = e.start
135 let decorations: Decoration[] = []
136 for (const ch of e.inputText) {
137 const one: Edit = { text, cursor, start: cursor, end: cursor, inputText: ch }
138 const answer = this.edit(one)
139 if (answer.kind === 'box') {
140 ;({ text, cursor, decorations } = answer.box)
141 } else {
142 const applied = answer.edit ?? one
143 text = applied.text.slice(0, applied.start) + applied.inputText + applied.text.slice(applied.end)
144 cursor = applied.start + applied.inputText.length
145 decorations = []
146 }
147 }
148 return { kind: 'box', box: { text, cursor, decorations } }
149 }
150
151 /** 조합 구간을 (commit + preedit) 으로 바꾼 입력창을 돌려준다. */
152 private render(text: string, commit: string, preedit: string): Answer {
153 const before = text.slice(0, this.anchor)
154 const after = text.slice(this.anchor + this.shown.length)
155 this.anchor += commit.length
156 this.shown = preedit
157 const next = before + commit + preedit + after
158 const cursor = this.anchor + preedit.length
159 const decorations: Decoration[] = preedit === '' ? [] : [{ start: this.anchor, end: cursor, underline: true }]
160 return { kind: 'box', box: { text: next, cursor, decorations } }
161 }
162
163 /** 공백·숫자·특수문자. 열린 단어를 확정(한글이 아니면 원문)한 뒤 그 글자를 넣는다. */
164 private passBoundary(e: Edit, closed: string): Answer {
165 const shift = closed.length - this.shown.length
166 const before = e.text.slice(0, this.anchor)
167 const after = e.text.slice(this.anchor + this.shown.length)
168 this.shown = ''
169 const text = before + closed + after
170 return {
171 kind: 'pass',
172 edit: { ...e, text, start: e.start + shift, end: e.end + shift, cursor: e.cursor + shift },
173 }
174 }
175
176 /**
177 * 열린 단어를 sent 안에서 확정한다. 화면의 조합과 확정문이 같으면 글자를 그대로 둔다.
178 * sent 의 앵커 자리에 화면의 조합이 없으면(밖에서 바뀐 텍스트) 손대지 않는다.
179 */
180 private seal(sent: string): string {
181 const closed = this.composer.flush()
182 const shown = this.shown
183 this.shown = ''
184 if (shown === '' || closed === shown) return sent
185 if (sent.slice(this.anchor, this.anchor + shown.length) !== shown) return sent
186 return sent.slice(0, this.anchor) + closed + sent.slice(this.anchor + shown.length)
187 }
188
189 /**
190 * 열린 단어를 e.text 안에서 확정하고, 위치를 확정문 기준으로 옮긴 편집을 돌려준다.
191 * 단어 앞은 그대로, 단어 뒤는 길이 차만큼. 단어 안은 화면(녀l)과 확정문(hel)이 같은 앞·뒤 부분이면
192 * 그 글자에 맞추고, 겹치지 않는 가운데(녀 ↔ he)는 시작은 앞으로, 끝은 뒤로 넓혀 그 덩어리 전체를 덮는다.
193 */
194 private sealEdit(e: Edit): Edit {
195 const anchor = this.anchor
196 const shown = this.shown
197 const runEnd = anchor + shown.length
198 const text = this.seal(e.text)
199 const shift = text.length - e.text.length
200 if (shift === 0) return { ...e, text }
201 const closed = text.slice(anchor, runEnd + shift)
202 let pre = 0
203 while (pre < shown.length && pre < closed.length && shown[pre] === closed[pre]) pre++
204 let suf = 0
205 while (suf < shown.length - pre && suf < closed.length - pre && shown[shown.length - 1 - suf] === closed[closed.length - 1 - suf]) suf++
206 // 겹치는 앞·뒤가 없으면(판정이 래가 → fork 로 되돌린 단어) 글자 수 비율로 옮긴다: 래|가 → fo|rk.
207 const mid = shown.length - pre - suf
208 const midClosed = closed.length - pre - suf
209 const move = (p: number, wide: 'lo' | 'hi') => {
210 if (p <= anchor + pre) return p
211 if (p >= runEnd - suf) return p + shift
212 if (pre === 0 && suf === 0) return anchor + Math.round(((p - anchor) * midClosed) / mid)
213 return wide === 'lo' ? anchor + pre : runEnd - suf + shift
214 }
215 const start = move(e.start, 'lo')
216 return { ...e, text, start, end: e.end === e.start ? start : move(e.end, 'hi'), cursor: move(e.cursor, 'hi') }
217 }
218
219 private commitAndPass(e: Edit): Answer {
220 return { kind: 'pass', edit: this.sealEdit(e) }
221 }
222}
223hooks/learn.ts 66 lines1// /hangul learn: 이 맥의 Claude Code 대화 기록에서, 사람이 직접 친 한글 프롬프트만 골라
2// 그 안의 영어 단어와 한글 어절 빈도를 센다. 원문은 저장하지 않는다. 결과는 core/judge 의 init() 으로 간다.
3// 고르는 규칙은 판정 점수를 잰 방식과 같다(docs/ROADMAP.md).
4import type { Personal } from '../core/judge'
5
6const HANGUL = /[가-힣]/g
7const LATIN = /[A-Za-z]/g
8/** 저장할 개수 상한. 빈도순으로 자른다. $.store 는 4 MiB 까지. */
9const KEEP = { eng: 3000, kor: 20000 }
10/** 한 번만 나온 단어와 24자 넘는 영어 토큰(키·해시 같은 것)은 저장하지 않는다. */
11const MIN_COUNT = 2
12const MAX_ENG_LENGTH = 24
13
14/** JSONL 한 줄이 사람이 입력창에 친 프롬프트면 그 글, 아니면 undefined. */
15export function promptOf(line: string): string | undefined {
16 if (!line.includes('"type":"user"')) return undefined
17 let r: any
18 try {
19 r = JSON.parse(line)
20 } catch {
21 return undefined
22 }
23 if (r?.type !== 'user' || r.isSidechain === true || r.isMeta === true) return undefined
24 let c = r.message?.content
25 if (Array.isArray(c)) {
26 if (c.some(x => x?.type === 'tool_result')) return undefined
27 c = c.filter(x => x?.type === 'text').map(x => x.text ?? '').join(' ')
28 }
29 if (typeof c !== 'string') return undefined
30 const t = c.trim()
31 if (t === '' || t.startsWith('<') || t.slice(0, 40).includes('Caveat:') || t.includes('```') || t.length > 1500) return undefined
32 // 한글 문장이어야 한다. 영어 위주(자동 생성 템플릿 등)는 뺀다.
33 const h = t.match(HANGUL)?.length ?? 0
34 const a = t.match(LATIN)?.length ?? 0
35 if (h === 0 || h < 0.3 * (h + a)) return undefined
36 return t
37}
38
39/** $.store 에 남은 값이 learn 결과 모양인지. 깨진 값이면 일반 규칙만 쓴다. */
40export function isPersonal(v: unknown): v is Personal {
41 const ok = (a: unknown) => Array.isArray(a) && a.every(x => Array.isArray(x) && typeof x[0] === 'string' && typeof x[1] === 'number')
42 return typeof v === 'object' && v !== null && ok((v as Personal).eng) && ok((v as Personal).kor)
43}
44
45/** 프롬프트들에서 영어 단어·한글 어절 빈도를 센다. 같은 글과 앞 40자가 4번 이상 반복되는 템플릿은 뺀다. */
46export function countPrompts(prompts: Iterable<string>): Personal & { prompts: number } {
47 const unique = [...new Set(prompts)]
48 const heads = new Map<string, number>()
49 for (const t of unique) heads.set(t.slice(0, 40), (heads.get(t.slice(0, 40)) ?? 0) + 1)
50 const eng = new Map<string, number>()
51 const kor = new Map<string, number>()
52 let n = 0
53 for (const t of unique) {
54 if ((heads.get(t.slice(0, 40)) ?? 0) > 3) continue
55 n++
56 for (const tok of t.split(/[^A-Za-z0-9가-힣ㄱ-ㅣ]+/)) {
57 if (/^[A-Za-z][A-Za-z0-9]*$/.test(tok)) eng.set(tok, (eng.get(tok) ?? 0) + 1)
58 // 한글 어절과 ㅋㅋ·ㅠㅠ 같은 자모 말
59 else if (/^[가-힣ㄱ-ㅣ]+$/.test(tok)) kor.set(tok, (kor.get(tok) ?? 0) + 1)
60 }
61 }
62 for (const w of eng.keys()) if (w.length > MAX_ENG_LENGTH) eng.delete(w)
63 const top = (m: Map<string, number>, k: number) => [...m].filter(([, c]) => c >= MIN_COUNT).sort((x, y) => y[1] - x[1]).slice(0, k)
64 return { eng: top(eng, KEEP.eng), kor: top(kor, KEEP.kor), prompts: n }
65}
66core/jamo.ts 54 lines1// 한글 음절 조합에 쓰는 자모 표와 결합 규칙. 순수 데이터/함수 (UI·API 의존 없음).
2//
3// 근거: 유니코드 한글 음절 영역(U+AC00..U+D7A3) 구성식
4// code = 0xAC00 + (초성idx * 21 + 중성idx) * 28 + 종성idx
5// 초성 19 · 중성 21 · 종성 28(0=없음)의 순서는 유니코드 표준의 자모 순서(KS X 1001 순)와 같다.
6
7/** 초성 19자 (유니코드 순서). */
8export const CHO = ['ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'] as const
9/** 중성 21자 (유니코드 순서). */
10export const JUNG = ['ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ', 'ㅔ', 'ㅕ', 'ㅖ', 'ㅗ', 'ㅘ', 'ㅙ', 'ㅚ', 'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ', 'ㅠ', 'ㅡ', 'ㅢ', 'ㅣ'] as const
11/** 종성 28칸 (0번 = 받침 없음). */
12export const JONG = [
13 '', 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', 'ㄷ', 'ㄹ', 'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', 'ㄿ', 'ㅀ', 'ㅁ', 'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ',
14] as const
15
16/** 겹모음: 앞 모음 + 뒤 모음 → 합성 모음. 순서 고정(ㅗ 다음에 ㅏ). */
17export const JUNG_COMBINE: Readonly<Record<string, string>> = {
18 ㅗㅏ: 'ㅘ', ㅗㅐ: 'ㅙ', ㅗㅣ: 'ㅚ',
19 ㅜㅓ: 'ㅝ', ㅜㅔ: 'ㅞ', ㅜㅣ: 'ㅟ',
20 ㅡㅣ: 'ㅢ',
21}
22
23/** 겹받침(+ 같은 자음 두 번 → 쌍받침). 앞 받침 + 뒤 받침 → 합성 받침. */
24export const JONG_COMBINE: Readonly<Record<string, string>> = {
25 ㄱㄱ: 'ㄲ', ㄱㅅ: 'ㄳ',
26 ㄴㅈ: 'ㄵ', ㄴㅎ: 'ㄶ',
27 ㄹㄱ: 'ㄺ', ㄹㅁ: 'ㄻ', ㄹㅂ: 'ㄼ', ㄹㅅ: 'ㄽ', ㄹㅌ: 'ㄾ', ㄹㅍ: 'ㄿ', ㄹㅎ: 'ㅀ',
28 ㅂㅅ: 'ㅄ',
29 ㅅㅅ: 'ㅆ',
30}
31
32/** 세벌식 초성 겹치기: 같은 자음 두 번 → 쌍자음. (유니코드 초성 쌍자음 ㄲ ㄸ ㅃ ㅆ ㅉ) */
33export const CHO_COMBINE: Readonly<Record<string, string>> = {
34 ㄱㄱ: 'ㄲ', ㄷㄷ: 'ㄸ', ㅂㅂ: 'ㅃ', ㅅㅅ: 'ㅆ', ㅈㅈ: 'ㅉ',
35}
36
37const choIndex = new Map<string, number>(CHO.map((c, i) => [c, i]))
38const jungIndex = new Map<string, number>(JUNG.map((c, i) => [c, i]))
39const jongIndex = new Map<string, number>(JONG.map((c, i) => [c, i]))
40
41export const isCho = (j: string): boolean => choIndex.has(j)
42export const isJung = (j: string): boolean => jungIndex.has(j)
43/** 종성으로 쓸 수 있는 자모인가 (ㄸ ㅃ ㅉ 는 불가). */
44export const isJong = (j: string): boolean => j !== '' && jongIndex.has(j)
45
46/** 초·중·(종) 자모로 완성 음절 한 글자를 만든다. 표에 없는 조합이면 undefined. */
47export function composeSyllable(cho: string, jung: string, jong = ''): string | undefined {
48 const c = choIndex.get(cho)
49 const v = jungIndex.get(jung)
50 const t = jongIndex.get(jong)
51 if (c === undefined || v === undefined || t === undefined) return undefined
52 return String.fromCharCode(0xac00 + (c * 21 + v) * 28 + t)
53}
54core/keydef.ts 20 lines1// 키 정의 타입과 생성자. 자모는 모두 호환 자모(U+3131~U+3163) 문자열로 다룬다.
2
3/**
4 * cons: 두벌식 자음 (초성/종성 문맥으로 결정)
5 * cho/jung/jong: 세벌식처럼 키가 역할을 고정한 자모
6 * lit: 레이아웃이 정의한 일반 문자 출력 (예: 세벌식 390의 '<' → '2')
7 */
8export type KeyDef =
9 | { readonly role: 'cons'; readonly jamo: string }
10 | { readonly role: 'cho'; readonly jamo: string }
11 | { readonly role: 'jung'; readonly jamo: string }
12 | { readonly role: 'jong'; readonly jamo: string }
13 | { readonly role: 'lit'; readonly text: string }
14
15export const cons = (jamo: string): KeyDef => ({ role: 'cons', jamo })
16export const cho = (jamo: string): KeyDef => ({ role: 'cho', jamo })
17export const jung = (jamo: string): KeyDef => ({ role: 'jung', jamo })
18export const jong = (jamo: string): KeyDef => ({ role: 'jong', jamo })
19export const lit = (text: string): KeyDef => ({ role: 'lit', text })
20core/judge-data.ts 9 lines1// 생성 파일: tools/gen-judge-data.py (직접 고치지 말 것). 출처: SCOWL 2020.12.07 (c) Kevin Atkinson et al., permissive notice
2// (http://wordlist.aspell.net, third_party/SCOWL-Copyright.txt); KS X 1001 Hangul syllable set.
3export const WORDS: Record<number, string> = {
4 10: "ability able about above absence absolute abuse academic accept acceptable access accessible accident accidental accord account accuracy accurate achieve acquire across acted acting action active activity acts actual added adding addition additional address adds adequate adjust administration admit adopt advance advantage advertise advice advise affair affect afford afraid after afternoon afterward again against agency ages agree agreement ahead aimed aiming aims alarm album algorithm alias alive allow almost alone along already also alter alternate alternative although altogether always ambiguous among amount amuse analog analogue analysis ancient angle angry animal announce announcement annoy annual anonymous another answer anybody anyone anyplace anything anyway anywhere apart apologize apology apparent appeal appear appearance apple application apply appreciate approach appropriate approval approve arbitrary area argue argument arise arithmetic army around arrange arrangement arrive article artificial artist aside asked asking asks asleep aspect assembler assembly assistant associate association assume assumption assure atmosphere attach attack attempt attend attention attitude attract attractive audience author authority automatic automatically automobile autumn available average avoid awake award aware away awful awkward back background backwards badly balance ball band bank bars base basic basically basis battery bear beautiful became because become been before beforehand began begin begun behalf behave behavior behind being believe belong below benefit besides best bets better betting between beyond bidding bids bigger biggest bill binary bind biology bite bits bitten bizarre black blame blank block blow blue board boat body book boot bore borne borrow both bottle bottom bought bound boxes bracket branch brand breach break bridge brief bright bring broadcast broke broken brother brought brown bucket budget buffer bugs build built bulk bulletin bury business busy button buying buys byte calculate calculation call came campaign candidate cannot capable capacity capital captain card cardboard care careful carry case cassette catalog catch category caught cause cease cell cent central century certain chain chair chairman chance change channel chaos chapter char character charge cheap cheapest check chemical child children chip choice choose chose chosen church circle circuit circulation circumstance citizen city claim clarify class clean clear clearest clever clock close closest club clue code coffee cold collapse collect collection college color column combination combine come command comment commercial commission commitment committee common communicate communication community company comparable comparatively compare comparison compatibility compatible competition compiler complain complaint complete complex complexity complicate component compose composition comprehensive compromise compulsory compute concept concern conclusion concrete condition conference confident confirm confuse confusion connect connection consequence consequently consider considerable considerably consideration consist consistency consistent constant constraint construct consumption contact contain content context continually continuation continue continuous contract contrary contrast contribute contribution control convenient convention conventional conversation convert convince cope copy core corner correct correction corrupt cost could council count country county couple course court cover crash crazy create creation creature credit crisis crisp critical criticism cross culture cumming cums cure curious current cursor customer cuts cutting cycle daily damage danger dangerous dare dark data database date datum days dead deal dealt dear death debate decade decent decide decision declare decrease dedicate deduce deem deep default defense define definite definition definitive degree delay delete deliberate deliver delivery demand democratic demonstrate demonstration department depend depth derive describe description design desirable desire desk desperate despite destroy detail detect determine develop development device devote dictionary died dies differ difference different difficult difficulty digit digital dinner direct direction director directory dirty disadvantage disagree disappear disaster disc discipline discount discourage discover discuss discussion disk dislike display distance distant distinct distinction distinguish distribute distribution district disturb ditto divide division document documentation does doing dollar domain done door double doubt doubtful down dozen drastic draw drawn dream drew drink drive driven drop drove dubious dumb dump during duty dying each earlier earliest early earth ease easier easiest easily east easy eaten eating eats economic economy edge edit edition editor education educational effect effective efficient effort eight either elect election electric electronic element elevator else elsewhere embarrass emergency emphasis employee empty enable encounter encourage ended ending ends enemy engineer enjoy enormous enough ensure enter entire entitle entity entrance entry environment equal equipment equivalent eraser error escape especially essential establish establishment estimate even event eventually ever every everybody everyone everything everywhere evidence exact examine example excellent except exception excess excessive exchange exclude exclusive excuse execute exercise exist existence expand expansion expect expense expensive experience experiment experimental expert explain explanation explicit express expression extend extension extensive extent external extra extract extreme eyes face facility fact factor fail failure fair faith fall fallen false familiar family famous fancy farm farther farthest fashion fast fastest fatal fate father fault favor favorite fear feasible feature federal feed feedback feel feet fell felt fewer fewest field fight figure file fill film final financial find fine finger finish finite fire firm first fiscal fish fits fitted fitting five fixed fixes fixing flag flash flat flavor flew flexible flied flies flight float floor flow flown flying folk follow food foot force foreign forever forget forgot forgotten form formal format forth forthcoming fortunately fortune forward found four fourth fraction frame free freedom french frequent fresh friend fries from front full fully function fund fundamental funny further furthest future gain game garbage garden gasoline gather gave general generate generation genuine gets getting girl give given glad glass global goes going gone good gotten government governor gradually graduate grand grant graph graphic grateful grave gray great greatest green grew grind gross ground group grow grown growth guarantee guard guess guide habit hack hair half hall hand handle handy hang happen happily happy hard hardest hardware harm harmful harmless hate have head health healthy hear heart heat heavily heavy held hell hello help helpful hence here hereby herself hidden hide high highest hill himself hint historical history hits hitting hold hole holiday home honest hope hopefully horrible horse hospital host hotel hour house however huge human hundred hung hunt hurry husband idea ideal identical identify identity ignore illegal image imagination imagine immediate impact implement implication imply importance important impose impossible impression improve improvement inability inadequate inch incident incidentally incline include income incompatible incomplete inconsistent inconvenience incorrect increase indeed independent index indicate indication individual industrial industry inevitably inferior infinite influence info inform information initial inner innocent input insert inside insist install instance instant instead institution instruction insurance integer integral intelligence intelligent intend intention interact interest interface internal international interpret interpretation interval intervention into introduce introduction invalid invariably invent investigate invisible invitation invite involve irrelevant irritate isolate issue item itself jobs join joint joke judge judgment jump junk just justification justify keen keep kept keyboard keys kill kind king knew knock know knowledge known label labor laboratory lack lady lain land language large largest last late latest latter laws layout lazy leach lead leaf learn least leave lecture left legal legs lend length less lesson lets letter letting level liable library lied lies life lifetime lift light like likewise limit line linear link list listen literally literature little live load loan local location lock logged logging logic logical logs long longest look loop loose lorry lose loss lost lots loudly love lower lowest luck lucky lunch lying machine made magic magnetic magnitude mail main maintain major majority make manage manipulation manner manual many march mark market marriage marry mass massive master match material mathematical mathematics matter maximum maybe mean meaningful meaningless meant measure mechanic mechanism media medical medium meet member membership memory mention mere merit mess message messy metal method middle midnight might mile military million mind mine minimal minimum minor minority minute mislead misled miss mistake mistaken mistook misunderstand misunderstood misuse mixed mixes mixing mode model modern modify moment money monitor month moral more morning most mother motion mouth move movement movie much multiple music must myself mysterious naive name nasty nation national natural nature naughty near nearby nearest necessarily necessary necessity neck need negative neither nervous network never nevertheless news next nice nicest night nine nobody noise noisy none nonsense normal north note nothing notice notify novel nowadays nowhere numb numbest numerical numerous obey object objection obscure observation observe obtain obvious occasion occasional occupy occur odds offer office official often older oldest omit once ones only onto open operate operation operator opinion opportunity oppose opposite opposition option optional order ordinary organization organize origin original other otherwise ought ours ourselves outer output outside over overall owed owes owing owner pack package packet page paid pain painful pair paper paragraph parallel parent park part partial particular party pass past patch path patient pattern pause payed paying pays peace peak peculiar people perfect perform performance perhaps period permanent permission permit person personal persuade petrol phase phenomenon philosophy phone phrase physical pick picture piece pile pint pipe place plain plan plane planet plant plastic play plea pleasant please plenty plot plug plus pocket poem poet point pointless police policy political poll pool poor popular population port position positive possibility possible possibly post postmaster potential pound power powerful practical practice precise prefer preferable preferably preference preparation prepare presence present preserve president press pressure presumably presume pretty prevent previous price primary prime primitive principle print printout prior private probably problem procedure process processor produce product production professional program progress project promise prompt prone proof proper property proportion proposal propose prospect protect protection protest prove provide public publication publicity publish pull punctuation puncture purchase pure purpose push puts putt qualify quality quantity quarter question queue quick quickest quiet quit quite quote race radio rain raise random range rapid rare rate rather reach react reaction read readable readily ready real reality realize reason reasonable reasonably recall receive recent reception recognition recognize recommend recommendation record recover reduce reduction redundant refer reference reflect reflection refuse regard regardless region register regret regular regulation reject relate relation relationship relative release relevance relevant reliable religion religious reluctant rely remain remark remember remind remote removal remove repair repeat replace replacement reply report represent representation representative reproduce request require requirement research reserve resident resolution resort resource respect respectively respond response responsibility responsible rest restart restore restrict result retain return reveal reverse review rewrite ridding ride ridiculous rids right ring rise risk river road role roll room root rough round route routine rubber rubbish rule rumor running runs rush sadly safe safest safety said saint sake sale same sample satisfy save saying says scale scan scene scheme school science scientific score scrap scratch screen script search season second secondary secret secretary section secure security seeing seek seem seen sees select selection self sell seminar send senior sense sensible sensibly sensitive sent sentence separate sequence serial series serious serve service session sets setting settle seven several severe shall shame shape share sharp sheet shelf shell shift ship shoot shop short shortage shortest should show shown shut side sight sign signal significance significant silly similar simple simplest simply simultaneous since sincerely single site sits sitting situation size skill sleep slight slip slow slowest small smallest smile smooth social society soft software sold solely solid solution solve some somebody somehow someone someplace something sometime somewhat somewhere soon soonest sophisticate sorry sort sought sound source south southern space spare speak special specific specifically specify speech speed spell spend spent spirit spite split spoke spoken spot spread spring square stable staff stage stand standard start state statement station statistic statistical status stay steal step stick still stock stone stood stop storage store story straight straightforward strange strategy stream street strength strict strike string strong struck structure stuck student study stuff stupid style subject submit subsequent subset substantial substitute subtle succeed success successful such sudden suffer suffice sufficient sugar suggest suggestion suit suitable suitably summary summer superior supervisor supply support suppose sure surface surprise survey survive suspect suspend suspicion switch symbol syntax system table take taken talk tank tape target task taste taught teach team technical technique technology tedious teeth telephone television tell temperature temporarily temporary tend tendency term terminal terminology terribly test text than thank that their them themselves then theoretical theory there thereby therefore these they thin thing think third this thoroughly those though thought thousand threat three threw through throughout throw thrown thus ticket tied ties tight till time title today together token told tomorrow tonight took tooth topic total touch toward town trace track traditional traffic train transfer translate translation transport trap trash travel treat treatment tree trial trick tried tries trip trivial trouble truck true truly trunk trust truth trying tune turn twelve twenty twice tying type typical ugly ultimate unable unacceptable unaware uncertain unclear under undergraduate underneath understand understood unfortunate unhappy uniform unique unit unite universal university unknown unless unlike unlimited unnecessarily unnecessary unpleasant unreasonable unsuitable until unusual unwanted update upon upper upset upwards usage used useful useless user uses using usual utility utterly vacation vague valid validity valuable value vans variable variation variety various vary vast vector version very vice video view virtually virtue visible vision visit vital voice volume vote wait walk wall want warm warn wash waste watch water ways weapon wear weather week weekend weight weird welcome well went were west western what whatever whatsoever wheel when whenever where whereas whereby wherever whether which while whilst white whoever whole whom whose wide widespread widest wife wild will wind window wine winning wins winter wire wise wish with withdraw within without woman women wonder wonderful wooden word wore work world worn worry worse worst worth worthwhile worthy would write written wrong wrote year yellow yesterday young your yourself zero",
5 20: "aardvark abandon abbreviate abbreviation abide abnormal abolish abolition abort abortion abroad absent absorb abstract abstraction absurd abusive abysmal accelerate accent acceptance accommodate accommodation accompany accomplish accordance accountant accumulate accusation accuse accustom achievement acid acknowledge acorn acoustic acquaintance acquisition acronym activate actor acute adapt adaptation addict addictive adhere adjacent adjective adjustment administer administrative admirable admiration admire admission adoption adult advantageous advent adventure adventurous adverse advert advertisement advisable advisor advisory advocate aerial aesthetic aesthetically affection aforementioned aged agenda agent aggressive aging agony agricultural aided aiding aids aircraft airport akin alas albeit alcohol alcoholic alert algebra algebraic alien align alignment alike allegation allege allergic alleviate alliance allocate allocation allowable allowance ally alongside aloud alpha alphabet alphabetic alphabetical alteration amateur amaze ambassador amber ambient ambiguity ambitious amend amendment ample amplifier amusement anagram analogous analogy analyses analyst analyze anarchy anatomy ancestor anecdote angel anger anguish anniversary annoyance anomaly anorak anthology anticipate anticipation antidote antique antisocial anxious anyhow apathetic apathy apostrophe appall apparatus append appendix applause applicable applicant appoint appointment appraisal appreciation approximate approximation arbitrarily arcade arcane arch archaic architecture archive arena arguable arguably arisen armed arming arms arose array arrest arrival arrogance arrogant arrow artistic arts ascend ashamed ashcan ashes assault assemble assert assertion assess assessment asset assign assignment assist assistance assort asterisk astronomer astronomy asynchronous atheism atheist atlas atmospheric atom atomic atrocity attachment attain attendance attendant attorney attraction attribute audible audio aunt authentic authorization authorize autobiography automate availability await awareness axes axiom axis baby backbone backlog backspace backward bacteria bacterium badge baffle baggage bags bake ballet ballot banal banana bandwagon bandwidth bang bankrupt banned banner banning bans bare bargain bark baroque barred barrel barrier barring barrister basement bash basket bass bastard batch bath bathroom battle baud beach beam bean beast beat beaten beauty bedroom beds beef beer belief believable bell beloved belt bench bend beneath beneficial bent beside beta beware bias bible biblical bicycle bigot bigotry billfold billion biochemistry biography biological biologist bird birth birthday biscuit bishop bitmap bitter blackboard blackmail blade blanket blast blatant bless blew blind blink bliss blob blood bloody blown blurb bobs bogged bogging boggle bogs bogus boil bold bolt bomb bond bone bonus booklet bookshop bookstore boom boost border borderline boredom born boss bounce boundary bout bowl boys brain brake brass brave bread breakdown breakfast breath breathe bred breed breeze brethren brick brigade brightest brightness brilliant broad browse brush brutal bubble buck bugger bulb bull bullet bump bunch bundle burden bureaucracy burn burnt burst buses bush bust butter buyer bypass cabbage cabinet cable caffeine cage cake calculator calculus calendar calm camera camp campus cancel cancer canonical cans cant capability capitalism capitalist caps capture carbon careless carpet carriage carrier carrot cars cartoon cartridge cash cast castle casual catastrophic categorically cater cathedral catholic cats cattle causal causality caution cave caveat ceiling celebrate celebration cellular censor censorship ceremony certainty certificate chalk challenge chamber champagne champion chancellor changeover chaotic chap chapel characteristic charitable charity charm chart chase chat cheat cheek cheer cheerful cheese chemist chemistry chess chest chestnut chew chicken chief childhood childish chocolate choir chop choral chord chorus chuck chunk cider cigarette cinema circa circuitry circular circulate cite civil civilian civilization civilize clarification clarity clash classic classical classification classify clause cleanest clearance cleverest click client cliff climate climb clinic clinical clip clique clog clone closet closure cloth clothe cloud clumsy cluster coach coal coarse coast coat cobbler coherent coin coincide coincidence coke collaboration collar collate colleague collective colon colony combat comedy comfort comfortable comfortably comic comma commandment commence commentary commentator commit commodity communal communism communist compact companion comparative compassion compel compensate compensation compete competence competent competitive competitor compilation compile complacent complement complementary completeness completion complication compliment comply composite compound comprehend comprehensible comprehension compress compression comprise compulsion computation computational computerize concatenate conceal concede conceivable conceivably conceive concentrate concentration conception conceptual concert concerto concise conclude concur concurrently condemn condemnation condense conditional condom condone conduct conductor confess confidence confidential confidentiality configuration configure confine confirmation conflict conform confront congest congestion congratulate congratulations conjecture conjunction connector connotation conscience conscious consciousness consecutive consensus consent consequent conservation conservative considerate consolation console conspicuous conspiracy constituency constituent constitute constitution constitutional constrain construction constructive consult consultancy consultant consultation consume contemplate contemporary contempt contend contention contentious contest continent continental continual continuity continuum contour contraception contradict contradiction contradictory contravention contributor contrive controversial controversy convenience converse conversion convey convict conviction cook cookie cool cooperate cooperation coordinate coordination copper copyright corn corporate corporation corpse correlate correlation correspond correspondence correspondent corridor corruption cosmic cosmology cotton cough counsel counterexample counterpart countless countryside courage courier courtesy cousin coverage cows cozy crack craft cramp crap crass crawl cream creative creator credibility credible creed creep crew cricket cried cries crime criminal criteria criterion critic criticize crop crossroad crossword crowd crown crucial crude cruel cruelty cruise crunch crush crying cryptic crystal cube cubic cuckoo cuddly culprit cult cultural cumbersome cumulative cunning cupboard cups curiosity curly currency curriculum curry curse curtain curve custard custom customary cute cyclist cylinder cynic cynical daft damn damnation damp dance darkness darling dash daughter dawn daylight daytime deadline deaf debatable debt debug decay decimal deck declaration decline decode deduction deed deepest defeat defect defective defend defensive deficiency defy degenerate degradation degrade deity deletion delicate delicious delight delightful delimiters delta delusion demented demise democracy democratically demolish denominator denote dense density dentist deny departmental departure dependence dependent deposit depress depression deprive deputy derange derivative derogatory descend descriptive desert deserve designate desktop despair despise destination destine destruction destructive detach detectable detection detective detector deter determination deterrent detract devastate deviation devil devious devise devoid diagnosis diagnostic diagonal diagram dial dialect dialog dialogue diameter diary dice dictate dictator dictatorship diesel diet differential differentiate digest digging dignity digs dilemma dimension dimensional dine diplomatic dire directive dirt disable disagreement disappoint disappointment disastrous discard discharge disciplinary disclaimer disco disconnect discontinue discovery discrepancy discrete discretion discriminate discrimination disease disguise disgust dish dishonest dismal dismiss disorder disposable disposal dispose disposition dispute disregard disrupt disruption dissertation dissimilar distasteful distinctive distort distortion distract distress disturbance ditch dive diverse diversity divert divine divorce doctor doctrine documentary dodge dogma dogs dole domestic dominant dominate donate donation dons doom dose dots dotted dotting doubtless downhill downright downstairs downwards draft drag dragon drain drama dramatic dramatically drank drastically drawback dread dreadful dreary dress dried dries drift drill drip drivel drown drug drum drunk drunken drying dual duck duff dull duly dummy dumpster duplicate duplication duration dust dustbin dusty dynamic dynamically eager eagle earn ears eastern eater eccentric echo ecological ecology economical editorial educate effectiveness efficiency eggs egos eighteen eighth elaborate elderly electoral electorate electrical electricity electron electronically elegant elementary elephant eleven eligible eliminate elite elitist embarrassment embed emerge eminent emit emotion emotional emphasize empire empirical employ employment emulate emulation emulator enclose encode encouragement endeavor endless energy enforce engage engine enhance enhancement enjoyable enjoyment enlarge enlighten enlightenment entail enterprise entertain entertainment enthusiasm enthusiastic entirety envelope environmental envisage envy epic episode equality equate equation equilibrium equip erase ergo erroneous esoteric essay essence estate estimation eternal eternity ethic ethical ethnic etymology evaluate evaluation eventual everyday evident evil evolution evolutionary evolve exaggerate exam examination exceed exceptional excite excitement exclamation exclusion executable execution executive exempt exhaust exhaustive exhibit exhibition exit exotic expectation expedition expenditure experimentation expertise expire expiry explanatory explode exploit exploitation exploration explore explosion explosive exponential export expose exposure expressway extant extinction extraction extraneous extraordinarily extraordinary extremist eyesight fabric facilitate factory factual faculty faint faintest fairest fairness fairy faithful fake fallacious fallacy fame familiarity famine fans fantastic fantasy farce fare farewell fascinate fascist fashionable fatuous faucet faulty favorable feasibility feat feeble fees fellow female feminist fence fender festival fetch fever fiber fiction fictional fiddle fierce fifteen fifth fifty filter filthy finalize finance finest firework fizzy flame flaw fleet flesh flexibility flip flood floppy flour fluctuation fluent fluffy fluid flush flute foam focus fold fond font fool foolish football footnote forbade forbid forbidden forcibly forecast foreseeable forest forgave forgive forgiven fork formation formula formulae formulation fortnight fortunate forty forum fossil fought foul foundation fountain fourteen fragile fragment framework frank frantic fraud freak freeway freeze frequency friction fried friendship frighten fringe frivolous frog frown froze frozen fruit frustrate frustration frying fudge fuel fulfill fullest fume functional functionality fundamentalist funeral funnier funniest furniture furry furthermore fuse fusion fuss fussy futile fuzzy galactic galaxy gang gaps garage garble gasp gate gateway gear gender gene generalization generalize generator generic generous genetic genetically genius genocide genre gentle gentleman gentlemen gently geographical geography geology geometry gesture ghastly ghost giant gibberish gift girlfriend glance glean glorious glory glossy glove glow glue gnome goal goat gods gold golden goldfish golf goodbye goodness goody gorgeous gospel gossip govern gown grab grace grade gradual graduation graffiti graffito grain grammar grammatical grandfather grandmother graphical grasp grass gratuitous gravitational gravity greasy greed greedy grid grief grim grip groan guest guidance guideline guilt guilty guinea guitar gulf gullible guns guts gutter guys hail haircut hairy halt halve hammer handbook handful handicap hangover happier happiest happiness hardback harden hardship hardy harmony harsh hash hassle hasten hasty hatred hats havoc hazard hazy headache headline heap heartily heaven heavier heaviest heel height helicopter helmet helpless henceforth herd heresy heritage hero heroic heroin herring hesitate heterosexual hexadecimal hideous hierarchical hierarchy highlight highway hilarious hindsight hire historian historic hitherto hobby hollow holy homosexual homosexuality honesty honey honor honorary hook hopeful hopeless horde horizon horizontal horn horrendous horribly horrid horrific horrify horror hostile household humane humanity humble humbly humor humorous hungry hurt hydrogen hyphen hypocrisy hypocrite hypocritical hypothesis hypothetical hysterical icon idealistic identification identifier ideological ideology idiom idiosyncratic idiot idiotic idle ignorance ignorant illiterate illness illogical illusion illustrate illustration imaginary imaginative imbalance immature immense imminent immoral immortal immune impair impend imperative imperfect imperial impersonal implausible implementation implicit import impractical impress impressive imprison improbable impulse inaccessible inaccuracy inaccurate inadvertently inane inappropriate incapable incarnation incentive incidence incidental inclination inclusion inclusive incoherent incompetence incompetent incomprehensible inconsistency inconvenient incorporate incredible incredibly increment incur indefensible indefinite indent independence indeterminate indicative indicator indictment indirect indirection indistinguishable induce induction indulge ineffective inefficiency inefficient inequality inertia inevitable inexperienced infallible infamous infant infantile infect infection infelicity infer inference inferiority infinity inflation inflexible inflict influential informal informative infrastructure infrequent infringement ingenious ingredient inhabit inhabitant inherent inherit inheritance inhibit inhibition initialization initialize initiate initiative inject injure injury injustice innocence innovation innovative inquire inquiry insane insect insecure insensitive insertion insidious insight insignificant insistence insofar inspect inspection inspiration inspire installation instinct institute instruct instrument instrumental insufficient insult intact intake integrate integration integrity intellect intellectual intense intensity intensive intent intentional inter interaction interactive intercourse interfere interference interim interior intermediate intermittent interrogate interrupt interruption intersection intervene interview intimate intolerance intrinsic intrinsically introductory intuitive invade invalidate invaluable invasion invention inventor inverse invert invest investigation investment invoke involvement irate iron ironic irony irrational irrespective irresponsible irritation island isolation jack jacket jail jammed jamming jams jargon jazz jealous jeans jelly jerk jest jolly journal journalist journey juice junction jungle junior jury justice justifiable justifiably juvenile kernel kettle keyed keying keystroke keyword kick kidded kidding kidnap kidney kids kindness kingdom kiss kitchen kits knee knife knight labs ladder lager laid lake lamp landlord landscape lane lark laser laugh laughter launch lavatory lawn lawyer layer laying lays laziness leadership leaflet league leak lean leap leather legend legendary legible legislation legitimate leisure lemon lengthy lenient lens lent lesbian lest lethal liability liaison libel liberal liberty librarian license lifestyle lightest lightning likelihood limb limitation linguistic linkage lion lips liquid liquor lisp liter literal literary literate litter livest lobby locate lodge logo lonely loophole lord loud loudest lousy loyal luckily ludicrous luggage lump lunatic lunchtime lung lurk lust luxury lyric machinery madness magazine magical magnificent mailbox mainframe mainstream maintenance maize male malfunction malicious management mandate mandatory mangle mania manifestation manifestly manifesto manipulate mankind manned manning manpower mans manufacture mapped mapping maps margin marginal marital marvelous mask mate mathematician matrices matrix mature maximize mayor maze meal meantime meanwhile measurement meat mechanical medicine medieval megabyte melody melt memorable mend mental mentality menu mercury mercy merge merry metaphor meter metric metro mice microcomputer microprocessor microwave midday mighty migrate migration mild mileage milk mill mimic mindless minimalist minimize minister mint minus miracle miraculous mirror miscellaneous misdirect miserable miserably misery misfortune misguide misinterpret misplace misprint misread misrepresent missile mission mist mixture mnemonic moan mobile mock moderate moderation modest modification module mold mole molecular molecule momentarily momentum monarch monkey monochrome monopoly monster mood moon morality moreover moron mortal mortality motivate motivation motive motor motorway motto mount mountain mouse muck muddle mugs multiplication multiply mumble mummy mundane murder muscle museum musical musician mutter mutual mystery mystic myth mythical mythology nail naked nameless narrative narrow narrowest nastier nastiest native neat needle negate neglect negligible negotiable negotiate negotiation neighbor neighborhood nerve nest nets neural neutral newcomer newer newest newly newsletter newspaper nick nickname nightmare noble node nominal nominate nonetheless noon norm normality northern nose nostalgia notable notably notation noticeable noticeably notification notion notorious notwithstanding noun novelty novice nuclear nuisance null numeral numeric nuns nurse nuts objectionable objective obligation obligatory oblige obnoxious obscene obscurity obsess obsession obsolete obstruct obtainable occupation occurrence ocean oddly offend offense offensive offhand offset offspring omission oneself ongoing onion onus opera operational opponent oppress oppression opted optic optical optimal optimistic optimization optimize optimum opting opts opus oral orange orbit orbital orchestra orchestral organ organic orient oriental orientate orientation originate originator orthodox outcome outcry outdated outgoing outline outlook outrage outrageous outright outset outstanding outweigh overcame overcome overdraft overdue overflow overhead overlap overload overlong overlook overnight overprice overridden override overrode overseas overtime overtone overview overwhelm overwriting overwritten owned ownership owning owns oxygen ozone pace pacifier padded padding pads painless paint palace pale panel panic pant paperback parade paradise paradox parameter paranoia paranoid paraphrase pardon parentheses parenthesis parity parliament parochial parody parrot parse participant participate particle partition partner passage passenger passion passionate passive passport password paste patent pathetic patience patronize pavement payment peaceful peanut peasant pedal pedant pedantic pedantry pedestrian peer penalty pence pencil pended pending pends penguin penny pens perceive percent percentage perception perfection periodic periodically peripheral permissible perpetual persecute persist persistent personality personnel perspective persuasion perverse petty pharmacy phenomena philosopher philosophical phoenix photo photocopy photograph photographic physic physicist physiology piano pigeon pigs pill pilot pinch pink pins pipeline pitch pitfall pity pizza plague planetary plaster plate platform plausible playground pleasure ploy plural poetic poetry poison poke polar pole policeman polish polite politeness politician politics pollution polynomial pompous poorest pope popped popping pops populace popularity populate pork pornography portability portable portion portray pose possess possession postage postal postcard postpone postscript postulate potato pour poverty powder practicable pragmatic praise pray preach precaution precede precedence precedent precious precision predecessor predict predictable prediction predominantly preface prefix pregnancy pregnant prejudice preliminary premature premise premium prerequisite prescribe prescription presentation pretend pretentious prevail prevalent prevention preview pride priest primarily prince principal priority prison privacy privatization privilege prize probability probable proceed proclaim productive productivity profession professor profile profit profitable profound programmable prohibit projection proliferation prolong prominent promote promotion pronoun pronounce pronunciation propaganda prophet proportional proposition proprietary prose prosecute prosecution prospective prostitute protein protocol prototype proud proven provision provisional provocative provoke proximity pseudo psychological psychologist psychology publicize pudding pulp pulse pump punch punish punishment puns punt pupil purge purity purple pursue pursuit puzzle python qualification qualifier quantum queen query quest questionable questionnaire quibble quietest quiz quota quotation rabbit rabid racial racism racist rack racket radar radiation radical radius rage raid rail railroad railway rainbow rampant rang rank rant rape rarest rash ratio rational rationale rats rattle rave razor reactionary reactor readership realistic realization realm rear rearrange reassure rebuild rebuilt receipt recipe recipient reckless reckon reclaim recognizable recollection reconcile reconsider recovery recreational recruit recruitment rectangle rectangular rectify recursion recursive recycle redefine redirect redundancy referendum refine reflex reform reformat refrain refresh refund refusal refute regain regime regional registration regrettably reign reinstate reiterate rejection relativity relax relay reliability reliably relief relieve relocation reluctance remainder remarkable remarkably remedy reminiscent rename rend rendition renew rent repeatable repent repertoire repetition repetitive rephrase reproduction repulsive reputation requisite reread rescue resemblance resemble resent reservation reset reside residence resign resignation resist resistance resolve respectable respective restaurant restrain restriction restrictive resume resurrection retail retire retirement retract retrieval retrieve reuse revelation revenge revenue revert revise revision revolt revolution revolutionary reward rewritten rewrote rhetorical rhyme rhythm ribbon rice rich richest ridden rigid rigorous riot ripped ripping rips risen risky ritual rival robot robust rock rocket rode roman romance romantic roof rope rose rotate rotation rotten roundabout rout rows royal royalties rude ruin rung rural rusty sabotage sack sacred sacrifice sadden safeguard saga sail salary salesman salt salvation sand sandwich sane sang sanity sank sarcasm sarcastic satellite satire satisfaction satisfactorily satisfactory sauce scandal scarce scare scarf scarlet scatter scenario scenery schedule scholar scientifically scientist scope scotch scream screw scroll scum seal seat sect sector secular seed segment seldom selective selfish semantic sensation sensitivity sentient sentiment sentimental separation separator sequel sequential seriousness sermon servant seventh severity sexes sexist sexual sexuality sexy shade shadow shake shaken shaky shallow shareholder shed sheep sheer shelter shelve shine shiny shirt shock shoe shone shook shorten shorthand shot shout shove shutdown sick sicken sideways sigh sigma signature silence silent silicon sillier silliest silver similarity simplicity simplify simplistic simulate simulation sincere sine sinful sing singular sinister sink sins sister situate sixteen sixth sixty skeleton skeptical sketch skin skip skirt skull slag slang slash slave slept slice slid slide slightest slim slippery slogan slope sloppy slot smallish smart smash smell smelly smith smoke smug snack snag snail sneak sneaky sniff snobbery snow soap sober socialism socialist sock socket soil solar soldier sole solicitor solo song sons sordid sore soul soundtrack soup span spatial specialist specialize specialty species specification specimen spectacular spectrum speculate speculation sped sphere spies spigot spike spill spin spiral spiritual spit splendid spoil spokesman sponsor spontaneous spoof spool sport spout sprang spray sprung spur spurious squad squash squeeze stability stack stagger stair staircase stake stale stall stamp stance standardize standpoint star stare stark startle starve static stationary steadily steady steam steel steep steer stem stereo stereotype sterile sterling sticky stiff stimulate stimulation stir stole stolen stomach storm strain strangest strategic straw stray strengthen stress stretch stringent strip strive stroke strongest structural struggle studio stumble stun stunt stupidity subjective submission subroutine subscribe subscription subsidiary subsidize substance substitution subtlety subtly subway succession successive successor sued sues suffix suicidal suicide suing suitability suite summarize summed summing sums sundry sung sunk sunlight sunny sunrise sunshine super superb superficial superfluous superiority supermarket supernatural supervise supervision supplement supplementary supplier suppress suppression supreme surgery surname surplus surround survival susceptible suspension suspicious sustain swallow swam swamp swap swear sweat sweep sweet swept swim swing sword swore sworn swum symbolic symmetric symmetry sympathetic sympathize sympathy symphony symptom syndicate syndrome synonym synonymous syntactic syntactically synthesis synthesizer systematic tabs tack tackle tactic tactical tactless tail tailor tale talent tall tame tangent tasteless taxation taxes taxi taxpayer teapot tear technological teenage telescope temper temple tempt temptation tennis tens tense tension tentative tenth terminate termination terminator terrible terrify territory terror terrorism terrorist terse textbook textual thankful theater thee theft theme theological theology theorem therapy thereabouts thereafter therein thereof thesis thick thickness thief thieve thirst thirty thorough thoroughfare thou thread threaten threshold throat throughput thrust thumb tick tidy tiger tile timescale timetable tins tiny tips tire tiresome toad toast tobacco toes toggle toilet tolerance tolerant tolerate toll tomato tome tone tongue tons tool topical tops tore torn torture toss tough tour tourist tower toys trade tradition tragedy tragic trail transaction transcript transform transformation transient transit transition translator transmission transmit transparent trashcan tray tread treasure treaty trek tremendous trend trendy triangle tribe tricky trifle trigger trilogy trinity triple tripos triumph trivia trolley troop trouser trumpet truncate trusty tube tunnel turntable tutor tutorial twentieth twin twist typeset typewriter umbrella unaffected unambiguous unattended unauthorized unavailable unavoidable unbalanced unbearable unbelievable unbelievably unbiased uncertainty unchanged uncle uncomfortable uncommon unconnected unconscious unconvincing undefined underestimate undergo undergone underground underlain underlay underlie underline underlying understandable undertake undertaken undertook underwent undesirable undid undo undocumented undone undoubtedly unduly uneasy unemployed unemployment unexpected unexplained unfair unfamiliar unfinished unfounded unfriendly unhealthy unhelpful unify unimportant uninteresting union unity universe unjustified unload unlock unlucky unnatural unobtainable unofficial unpopular unpredictable unread unreadable unrealistic unrelated unreliable unsafe unsatisfactory unseen unset unsolicited unsound unspecified unstable unsuccessful unsupported unsure unsuspecting untidy unto untrue unusable unused unwelcome unwilling unwise unworkable upbringing upgrade upright upside upstairs upward urban urge urgency urgent usable usefulness utter vacancy vacuum vain valley valve vandalism vanish variance variant vegetable vegetarian vehicle vein velocity vend vendor venture venue verb verbal verbatim verbose verdict verification verify versatile verse versus vertical vessel viable vicar vicinity vicious victim victory viewpoint vigorously vile village vintage vinyl violate violation violence violent violin virgin virtual virus visitor visual vocabulary vocal void voltage voluntarily voluntary volunteer vomit vouch vowel vulnerable wade waffle wage wake wallet wander ward warehouse warp warrant warranty wars wartime wary wasteful wave weak weakness wealth wealthy weary weasel wedded wedding weds weekday weigh welfare wets wetting whale whence whereupon whichever whim whiskey whistle wholeheartedly wholly whoop wicked width wing winner wipe wisdom wisest witch withdrawal withdrawn withdrew witness witty wive wizard woke woken wolf wombat wondrous wont wood workable workload workshop workstation worldwide worm worship worthless wound wrap wrath wreck wren wretched wrist yard yawn yeti yield youngest yourselves youth zone zoom",
6 35: "aback abacus abandonment abate abbey abbot abdicate abdication abdomen abdominal abduct aberration abet abhor abhorrence abhorrent abject ablaze ablest ably abnormality aboard abode abominable abomination aboriginal aborigine abortive abound aboveboard abrasive abreast abridge abrupt abruptest abscess abscond absentee absolutest absolve absorbent absorption abstain abstention abstinence abstruse absurdest absurdity abundance abundant abyss academically academy accede acceleration accelerator accentuate acceptability acceptably accessibility accessory acclaim acclimate acclimatize accolade accompaniment accompanist accomplice accomplishment accordion accost accountability accountable accountancy accredit accrue accumulation aced aces ache achievable acidity acing acknowledgment acne acquaint acquiesce acquiescence acquit acquittal acre acreage acrid acridest acrimonious acrimony acrobat acrobatic acrylic activist actress actuality actuary acumen acupuncture acutest adage adamant adaptable adaptive addendum addiction additive addressee adept adherence adherent adhesion adhesive adjoin adjourn adjournment adjunct adjustable administrator admirably admiral admissible admittance admonish admonition adobe adolescence adolescent adorable adoration adore adorn adornment adrift adroit adulation adulterate adulteration adultery adulthood advancement adverb adverbial adversary adversest adversity aerodynamic aerosol aerospace afar affable affably affectation affectionate affidavit affiliate affiliation affinity affirm affirmation affirmative affix afflict affliction affluence affluent affordable affront afield aflame afloat afoot aforesaid afresh aftereffect afterlife afterlives aftermath afterthought aggravate aggravation aggregate aggression aggressiveness aggressor aghast agile agility agitate agitation agitator aglow agnostic agnosticism agonize agreeable agreeably agriculture aground ahoy aide ailed ailing ailment ails aimless airborne aired airfield airier airiest airing airline airmail airplane airs airstrip airtight airy aisle ajar alarmist albino alcoholism alcove ales alga algae alibi alienate alienation alight alimony alkali alkaline allay allegiance allegorical allegory allergy alley alligator allot allotment alloy allude allure allusion almanac almighty almond alms aloft aloof alphanumeric altar alterable alternation alternator altitude alto altruism altruistic aluminum amalgamate amalgamation amass amateurish amazement ambiance ambidextrous ambition ambivalence ambivalent amble ambulance ambush amen amenable amenity amethyst amiable amiably amicable amicably amid amiss ammonia ammunition amnesia amnesty amoeba amoebae amok amoral amorous amorphous ampere ampersand amphetamine amphibian amphibious amphitheater amplest amplification amplify amplitude amply amps amputate amputation amulet anachronism anal analgesic analytic analytical anarchic anarchism anarchist anathema anatomical ancestral ancestry anchor anchorage anchovy ancientest android anemia anemic anesthesia anesthetic anew angelic angrier angriest angrily angst angular animate animation animosity ankle annals annex annexation annihilate annihilation annotate annotation annuity annul annulment anoint anomalous anon anonymity answerable antagonism antagonist antagonistic antagonize anteater antelope antenna antennae anthem anthill anthrax anthropological anthropologist anthropology antibiotic antibody antic anticlimax antifreeze antipathy antiquate antiquity antiseptic antitheses antithesis antler antonym ants anus anvil anxiety aorta apartheid apartment aped aperture apes apex aphorism apiece aping aplomb apocryphal apologetic apologetically apostle apparel apparition appease appeasement appendage appendices appendicitis appetite appetizer appetizing applaud appliance applicability applicator appointee apposite appraise appreciable appreciative apprehend apprehension apprehensive apprentice apprenticeship approachable appropriation apricot apron apter aptest aptitude aptly aquamarine aquarium aquatic aqueduct arable arbiter arbitrate arbitration arbitrator arbor arced archaeological archaeologist archaeology archbishop archery archest archetypal archipelago architect architectural archway arcing arcs ardent ardor arduous ares argumentative aria arid aristocracy aristocrat aristocratic arks armadillo armament armchair armistice armor armory armpit aroma aromatic arouse arraign arrears arsenal arsenic arson arterial artery artful arthritic arthritis artichoke articulate articulation artifact artifice artillery artisan artistically artistry artwork asbestos ascension ascent ascertain ascetic ascribe asexual ashed ashen ashing ashore ashtray askance askew asparagus aspen aspersion asphalt asphyxiate asphyxiation aspirant aspiration aspire aspirin assail assailant assassin assassinate assassination assent assertive asses assessor assimilate assimilation associative assortment assurance asteroid asthma astonish astonishment astound astray astride astringent astrological astrology astronaut astronomical astute astutest asylum asymmetry atheistic athlete athletic atone atonement atrocious attainment attentive attest attic attire attractiveness attributable attribution auburn auction auctioneer audacious audacity audibly audit audition auditor auditorium auditory augment august augustest aura aural auspicious austere austerest austerity authentically authenticate authenticity authoritarian authoritative authorship auto autobiographical autocracy autocrat autocratic autograph automation automotive autonomous autonomy autopsy autumnal auxiliary avail avalanche avarice avaricious avenge avenue averse aversion avert aviation aviator avid avocado avoidable avoidance avow avowal awaken awed awes awesome awfullest awhile awing awkwardest awkwardness awning awoke awoken awry axed axing axiomatic axle ayes azalea azure babble babe babier babiest baboon babyish bachelor backfire backgammon backhand backlash backpack backside backslash backstage backtrack backwoods bacon bacterial badder baddest bade badminton badness bagel bagged baggier baggiest bagging baggy bail bait bakery balcony bald baldest baldness bale balk ballad ballast ballerina ballistics balloon ballroom balm balmier balmiest balmy baloney bamboo bamboozle bandage bandanna bandier bandiest bandit bandstand bandy bani banish banister banjo banknote bankruptcy banquet banter baptism baptize barb barbarian barbaric barbarous barbecue barbiturate bard bareback barefoot barest barge baritone barley barman barn barnacle barnyard barometer baron barrage barren barrenest barrette barricade bartender barter baseball baseline basest bashful basil basin bask basketball bassoon baste bathe bathtub baton bats batsman battalion batted batter batting battlefield battleship bawdier bawdiest bawdy bawl bayed baying bayonet bayou bays bazaar beacon bead beadier beadiest beady beagle beak bearable beautician beautify beaver beckon bedbug bedclothes bedded bedder bedding bedlam bedridden bedrock bedside bedspread bedtime beech beefier beefiest beefy beehive beeper bees beeswax beet beetle beeves befall befallen befell befit befriend beggar begged begging begrudge begs beguile behalves behavioral behead beheld behold beige belabor belated belch belfry belie belittle bellboy bellhop belligerent bellow belly belying bemoan bemuse benediction benefactor beneficiary benevolence benevolent benighted benign bequeath bequest bereave bereavement bereft beret berry berserk berth beseech beset besiege besought bestial bestiality bestow betcha betray betrayal betrothal betterment bettor beverage bewilder bewilderment bewitch bibliographic bibliography bibs bicentennial bicker bidden bide biennial bifocals bigamist bigamous bigamy bike bikini bilateral bile bilingual billboard billiards billow bingo binned binning binomial bins biochemical biodegradable biographer biographical bipartisan biped biplane birch birdcage birthmark birthplace bisect bisexual bison bitch bitterest bitterness bittersweet blab blackberry blackbird blacken blackest blackhead blackjack blacklist blackout blacksmith blacktop bladder blameless blanch blancmange bland blandest blankest blare blaspheme blasphemous blasphemy blaze bleach bleak bleakest blearier bleariest bleary bleat bled bleed blemish blend blight blimp blindest blindfold blindness blip blissful blister blithe blithest blitz blizzard bloc blockade blockage blockbuster blockhead blog blond blonde blondest bloodhound bloodier bloodiest bloodshed bloodshot bloodstream bloodthirstier bloodthirstiest bloodthirsty bloom blossom blot blotch blouse blowout blowtorch blubber bludgeon bluebell blueberry bluebird bluegrass blueprint bluest bluff bluffest blunder blunt bluntest bluntness blur blurt blush bluster boar boardwalk boas boast boastful bobbed bobbin bobbing bobcat bobsled bode bodice bodily bodyguard bodywork boisterous boldest boldness bologna bolster bombard bombardment bondage bonfire bonier boniest bonnet bony booby booed booing bookcase bookend bookkeeper bookkeeping bookmark bookshelf bookworm boomerang boon boor boorish boos bootee booth bootleg bootstrap booty booze borough bosom bossier bossiest bossy botanical botanist botany botch bothersome bottleneck bottomless bough boulder boulevard boundless bountiful bounty bouquet bourbon bourgeois bourgeoisie boutique bovine bowed bowel bowing bowlegged bows boxcar boxed boxer boxing boycott boyfriend boyhood boyish brace bracelet brackish brag braggart braid brainier brainiest brainless brainstorm brainwash brainy braise bran brandish brandy bras brash brashest brassier brassiere brassiest brassy brat bravado bravery bravest bravo brawl brawn brawnier brawniest brawny bray brazen brazier breadth breadwinner breakable breakneck breakpoints breakthrough breakwater breast breathless breathtaking breezier breeziest breezy brevity brew brewery bribe bribery bricklayer bridal bride bridegroom bridesmaid bridle briefcase briefest brighten brilliance brim brimstone brine brinier briniest brink briny brisk briskest bristle britches brittle brittlest broach broaden broadest broadside brocade broccoli brochure broil bronchitis bronco bronze brooch brood brook broom broth brotherhood brow browbeat browbeaten brownest brownie bruise brunch brunette brunt brusque brusquest brutality brute brutish bubblier bubbliest bubbly buckle budded budding buddy budge buds buff buffalo buffet buffoon bugged buggier buggiest bugging buggy bugle bulbous bulge bulkier bulkiest bulky bulldog bulldoze bullfight bullfrog bullion bully bumblebee bummed bummer bummest bumming bumpier bumpiest bumpy bums bung bungalow bungle bunion bunk bunny buns buoy buoyancy buoyant burble burdensome bureau bureaucrat bureaucratic burger burglar burglary burgle burial burlap burlier burliest burly burnish burp burr burro burrow bursar bused bushel bushier bushiest bushy busier busiest busily businessman businessmen businesswoman businesswomen busing bustle busybody butcher butchery butler buts butt butte buttercup butterfly buttermilk butterscotch buttery buttock buttonhole buttress buxom buzz buzzard byes bygone bystander byway cabaret cabbed cabbing cabin caboose cabs cacao cache cackle cacti cactus caddie caddying cadence cadet cafeteria cagey cagier cagiest cajole calamity calcium calculi calf caliber calibrate calibration calico calk callable calligraphy callous callow callus calmest calmness calorie calve camaraderie camel cameo camouflage canal canary cancellation candid candidacy candle candlestick candor candy cane canine canister canker canned cannery cannibal cannibalism cannier canniest canning cannon canny canoe canon canopy cantaloupe cantankerous canteen canvas canyon capably capacitance capacitor cape capillary capitalization capitalize capitulate capped capping caprice capricious capsize capsule caption captivate captive captivity captor caramel carat caravan carbohydrate carburetor carcass carcinogenic cardiac cardigan cardinal carefree carefullest carefulness carelessness caretaker cargo caribou caricature carnage carnal carnation carnival carnivore carnivorous carol carouse carp carpenter carpentry carriageway carrion cart cartel cartilage cartographer cartography carton cartoonist cartwheel carve cascade cashew cashier cashmere casino cask casket casserole castaway caste castigate castoff castrate casualty cataclysm cataclysmic catapult cataract catastrophe catcall catchier catchiest catchment catchy catechism categorical categorize caterpillar catfish catnap catnip catwalk caucus cauliflower caulk causeway caustic cautious cavalier cavalry cavern caviar cavity cavort cawed cawing caws ceasefire ceaseless cedar cede celebrity celery celestial celibacy celibate cellar cellist cello cellophane cellulose cement cemetery censure census centennial centerpiece centimeter centipede centralize centrifuge ceramic cereal cerebral ceremonial ceremonious certify cervical cessation chafe chaff chagrin chainsaw chairmen chairperson chalet chalice chalkier chalkiest chalky chameleon champ championship chandelier changeable chant chaperon chaplain characteristically characterization characterize charcoal chargeable chariot charisma charismatic charitably charlatan chasm chassis chaste chasten chastest chastise chastisement chastity chatterbox chattier chattiest chatty chauffeur chauvinist cheapen cheapness checkout checkpoint checkup cheep cheerfullest cheerfulness cheerier cheeriest cheery cheesecloth cheetah chef cherish cherry cherub cherubim chewier chewiest chewy chic chicest chick chide chiefest chieftain childbirth childlike chili chill chillest chillier chilliest chilly chime chimney chimp chimpanzee chin china chink chintz chipmunk chiropractor chirp chisel chivalrous chivalry chlorine chloroform chlorophyll choicest choke cholera cholesterol choosier choosiest choosy choppier choppiest choppy chore choreographer choreography chortle chow chowder christen chrome chromium chromosome chronic chronically chronicle chronological chronology chrysanthemum chubbier chubbiest chubby chuckle chug chum chummier chummiest chummy chunkier chunkiest chunky churn chute cigar cinch cinder cinnamon cipher circuitous circulatory circumcise circumcision circumference circumflex circumstantial circumvent circumvention circus cistern citation citizenship citric citrus civic civility clack clad clairvoyance clairvoyant clam clamber clammier clammiest clammy clamor clamp clan clandestine clang clank clap claptrap claret clarinet clasp classmate classroom classy clatter claustrophobia claw clay cleanlier cleanliest cleanliness cleanse clearness cleat cleavage cleave clef cleft clemency clench clergy clergyman clergymen cleric clerical clerk cleverness climactic climax clime clinch cling clink clipboard clitoris cloak clockwise clockwork clod cloister closeness clot clothespin cloudburst cloudier cloudiest cloudy clout clove cloven clown clubhouse cluck clueless clump clumsier clumsiest clumsily clumsiness clung clutch clutter coagulate coagulation coalesce coalition coarsen coarseness coarsest coastal coastline coax cobalt cobble cobra cobs cobweb cocaine cock cockeyed cockier cockiest cockpit cockroach cocktail cocky cocoa coconut cocoon codded codding cods coefficient coerce coercion coexist coexistence coffer coffin cogency cogent cognac cognitive cogs coherence coil coinage coincidental colander coldest coldness colic collaborate collaborative collaborator collage collapsible collarbone collateral collation collector collegiate collide collie collision colloquial colloquialism collusion colonel colonial colonization colonize colorful colorless colossal colt coma comb combatant combustible combustion comeback comedian comelier comeliest comestible comet comical commandant commandeer commando commemorate commemoration commencement commend commendable commendation commerce commercialism commercialize commiserate commiseration commodore commonest commonplace commonwealth commotion commune communicable communicative communicator communion communique commutative commute compactest compaction companionship compartment compass compassionate compatriot complacency completest complexion compliance compliant complimentary compost composure compulsive compunction comrade comradeship concatenation concave concealment conceit concentric concession conciliate conciliation conciseness concisest conclusive concoct concoction concord concordance concourse concurrence concurrency concurrent concussion condensation condescend condiment condolence condominium condor conducive cone confection confederacy confederate confederation confer confession confetti confidant confide configurable confinement confiscate confiscation conformity confound confrontation congeal congenial conglomerate congregate congregation congress congressman congressmen congresswoman congresswomen congruent conical conifer coniferous conjugal conjugate conjugation conjure connective connectivity conned conning connoisseur connote conquer conqueror conquest cons conscientious consecrate consequential conservatism conservatory conserve consign consignment consolidate consolidation consonant consort consortium conspirator conspire constancy constellation consternation constipation constrict constriction construe consul consular consulate consumable consumerism consummate contagion contagious contaminate contamination contemplation contemplative contemptible contemptuous contentment contestant contextual contiguous contingency contingent contort contortion contraband contraceptive contraction contractor contractual contraption contravene contributory contrite controllable convalesce convalescence convalescent convection convene convent converge convergence conversant conversational convertible convex conveyance convoluted convoy convulse convulsion convulsive cooed cooing cookbook coolest coop cooperative coordinator coos copier copious copped copperhead copping cops copulate copulation coral cord cordial cordless cordon corduroy cork corkscrew cornea cornet cornflakes cornier corniest cornmeal cornstarch corny corollary coronary coronation coroner corporal corps corpulent corpus corpuscle corral correctest corrective correctness corrector corroborate corroboration corrode corrosion corrosive corruptest corruptible corsage corset cortex cosmetic cosmonaut cosmopolitan cosmos costlier costliest costume cots cottage cottontail cottonwood couch cougar councilor counselor countable countdown countenance counteract counterattack counterbalance counterclockwise counterfeit countersign countess countryman countrymen coup coupon courageous courteous courthouse courtroom courtship courtyard cove covenant covert covet covetous coward cowardice cowboy cowed cower cowgirl cowhide cowing coyer coyest coyote cozier coziest cozily coziness crab crabbier crabbiest crabby crackle crackpot cradle craftier craftiest craftily craftsman craftsmen crafty crag craggier craggiest craggy cram cranberry crane cranium crank crankier crankiest cranky crassest crate crave crayfish crayon craze crazier craziest crazily craziness creak creakier creakiest creaky creamier creamiest creamy crease creativity credence credential creditable creditor credulous creek creepier creepiest creepy cremate cremation crepe crept crescendo crescent crest crestfallen cretin cretinous crevasse crevice crib crimson cringe crinkle cripple crises crispest crispy crisscross critique croak crochet crock crockery crocodile crocus crofts crony crook crookedest croon croquet crossbow crossest crosswalk crotch crouch crow crowbar crucifix crucifixion crucify crudest crudity cruelest crumb crumble crumblier crumbliest crummier crummiest crummy crumple crunchy crusade crust crustacean crustier crustiest crusty crutch crux crybaby crypt crystallization crystallize cubicle cubs cucumber cuddle cued cues cuff cuing cuisine culinary cull culminate culmination culpable cultivate cultivation cunningest cupful cupped cupping curable curator curb curd curdle curfew curio curl currant curricula cursory curt curtail curtest curtsy curvature cushion custodian custody customization customize cutback cutest cuticle cutlery cutlet cutter cutthroat cyanide cybernetics cyclic cyclone cylindrical cymbal cynicism cypress cyst czar dabbed dabbing dabble dabs dachshund daddy dads daemon daffodil dagger daintier daintiest daintily dainty dairy dais daisy dally dame dammed damming damnedest dampen dampest dampness dams damsel dandelion dandier dandiest dandruff dandy dangle dank dankest dapper dapperest daredevil darken darkest darn dart dashboard dastardly daub daunt dauntless dawdle daybreak daydream daze dazzle deacon deaden deadest deadlier deadliest deadlock deafest deafness dean dearest dearth deathbed deaves debase debasement debauchery debilitate debility debit debonair debrief debris debtor debunk debut decadence decadent decanter decapitate decease deceit deceitful deceive decency decentralization decentralize deception deceptive decibel deciduous decimate decipher decisive declension decompose decomposition decorate decoration decorative decorator decorous decorum decoy decree decrepit decry dedication deduct deductive deepen deer deface defamation defamatory defame defeatist defecate defendant defenseless defensible defer deference deferential defiance defiant deficient deficit defile definable deflate deflation deflect deflection deform deformity defraud defrost deft deftest defunct dehydrate deify deign deject dejection delectable delegate delegation deleterious deli deliberation delicacy delicatessen delimit delinquency delinquent delirious delirium deliverance delude deluge deluxe delve demagogue demean demeanor dementia demerit democrat demolition demon demonstrably demonstrative demonstrator demoralize demote demotion demount demure demurest denial denigrate denim denomination denounce dens densest dent dental dentistry denunciation deodorant deodorize depart dependable dependency depict depiction deplete deplorable deplore deport deportation deportment depose depot deprave depravity deprecate depreciate depreciation deprivation derail derailment derelict deride derision derivation derrick descendant descent describable descriptor desecrate desecration desegregation designation desirability desirous desist desolate desolation desperation despicable despondent despot despotic dessert destabilize destiny destitute destitution detachable detachment detain detention detergent deteriorate deterioration determinable determinism deterministic detest dethrone detonate detonation detonator detour detriment detrimental devalue devastation deviant deviate devolution devolve devotee devotion devour devout devoutest dexterity dexterous diabetes diabetic diabolical diagnose diametrically diamond diaper diaphragm diarrhea diatribe dictation dictatorial diction dietary differentiation diffuse diffusion digestible digestion digestive digitize dignify dignitary digress digression dike dilapidated dilate dilation diligence diligent dill dilute dilution dime diminish diminutive dimly dimmed dimmer dimmest dimming dimple dims dinghy dingier dingiest dingy dinned dinning dinosaur dins diocese dioxide diphtheria diphthong diploma diplomacy diplomat diplomata diplomatically dipped dipping dips directest directness direst dirge dirtier dirtiest disability disadvantageous disagreeable disagreeably disallow disambiguate disappearance disapproval disapprove disarm disarmament disarray disavow disband disbelief disbelieve disburse disbursement discern discernible disciple disciplinarian disclaim disclose disclosure discolor discoloration discomfort disconcert disconsolate discontent discontinuity discord discordant discouragement discourse discourteous discourtesy discredit discreet discreetest discretionary discriminatory discus disdain disdainful disembark disembarkation disenchantment disengage disentangle disfavor disfigure disgrace disgraceful disgruntle dishearten dishonesty dishonor dishonorable dishwasher disillusion disillusionment disincentive disinfect disinfectant disingenuous disinherit disintegrate disintegration disinterested disjoint dislocate dislocation dislodge disloyal disloyalty dismantle dismay dismember dismissal dismissive dismount disobedience disobedient disobey disown disparage disparate disparity dispassionate dispatch dispel dispensary dispensation dispense dispersal disperse dispersion displace displacement displease displeasure dispossess disproportionate disprove disqualify disquiet disrepair disreputable disrepute disrespect disrespectful disruptive dissatisfaction dissatisfy dissect dissection disseminate dissemination dissension dissent disservice dissident dissimilarity dissipate dissipation dissociate dissociation dissolute dissolution dissolve dissonance dissuade distaste distend distill distillation distillery distinctest distinguishable distraction distraught distributor distrust distrustful disuse dither ditty diverge divergence divergent diversify diversion divest dividend divinest divinity divisible divisive divisor divulge dizzier dizziest dizziness dizzy docile dock doctorate dodo doer dogged doggerel dogging doghouse dogmatic dogwood doily doldrums doleful doll dolly dolphin dome domesticate domesticity domicile dominance domination dominion domino donkey donor doodle doorman doormen doorstep doorway dope dopey dopier dopiest dormant dormitory dorsal dote doubly dough doughnut dour dourest douse dove dowdier dowdiest dowdy downcast downfall downgrade downhearted downier downiest downpour downstream downtown downward downy dowry doze drab drabbest draconian draftier draftiest draftsman draftsmen drafty dragonfly drainage dramatist dramatization dramatize drape drapery drawbridge drawl dreamier dreamiest dreamy drearier dreariest dredge dregs drench dressier dressiest dressmaker dressy dribble drier driest driftwood drinkable driveway drizzle droll drollest drone drool droop dropout dross drought drowse drowsier drowsiest drowsiness drowsy drudge drudgery druggist drugstore drumstick drunkard drunkenness drunkest dryer dryly dryness drys dualism dubbed dubbing dubs duchess duckling duct dude duds duel dues duet dugout duke dullest dullness dully dumbbell dumbest dumbfound dumpier dumpiest dumpling dumpy dunce dune dung dungeon dunk dunno dupe duplex duplicity durability durable duress dusk duskier duskiest dusky dustier dustiest dustmen dustpan dutiful duvet dwarf dwell dwelt dwindle dyed dyeing dyes dynamical dynamite dynamo dynasty dysentery dyslexia eagerest eagerness earache eardrum earl earmark earnest earnestness earring earshot earthier earthiest earthlier earthliest earthquake earthworm earthy easel easterly eastward easygoing eave eavesdrop ebbed ebbing ebbs ebony eccentricity ecclesiastical eclectic eclipse ecologist economist economize ecosystem ecstasy ecstatic ecumenical eczema eddy edgewise edgier edgiest edgy edible edict edifice editorship educator eels eerie eeriest effectual effeminate effervescent effigy effortless effusive egalitarian egged egging eggplant egocentric egoism egotism egotist eigenvalue eighteenth eightieth eighty ejaculate ejaculation eject ejection eked ekes eking elaboration elapse elastic elasticity elation elbow elder eldest elective elector electrician electrify electrocute electrocution electrode electrolysis electromagnetic electrostatic elegance elegy elemental elevate elevation eleventh elicit eligibility elimination elitism elks ellipse ellipsis elliptic elliptical elms elongate elope elopement eloquence eloquent elucidate elude elusive elves email emanate emancipate emancipation embalm embankment embargo embark embassy embellish embellishment ember embezzle embezzlement embitter emblem embodiment embody emboss embrace embroider embroidery embryo embryonic emerald emergence emergent emigrant emigrate emigration eminence emir emissary emission emotive empathy emperor emphases emphatic emphatically emphysema emporium empower empress emptier emptiest emptiness emulsion enact enactment enamel encapsulate encase enchant enchantment encircle enclosure encompass encore encroach encrypted encryption encumber encumbrance encyclopedia endanger endear endearment endemic endive endorse endorsement endow endowment endurance endure endways enema energetic energetically enforcement engagement engender engrave engross engulf enigma enigmatic enlargement enlist enlistment enliven enmity enormity enrage enrich enrichment enroll enrollment ensemble enshrine ensign enslave ensue entangle entanglement enthrall enthusiast enthusiastically entice enticement entomologist entomology entrails entrant entrap entreat entreaty entrench entropy entrust entwine enumerate enumeration enunciate enunciation envelop enviable envious environs envoy enzyme eons epaulet ephemeral epidemic epidermis epilepsy epileptic epilogue epitaph epithet epitome epoch epsilon equalize equanimity equator equatorial equestrian equilateral equine equinox equitable equity equivalence equivocal eradicate eras erasure erect erection ergonomic erode erosion erotic errand errant erratic erratically erred erring errs erstwhile erudite erupt eruption escalate escalation escalator escapade escapism escort esophagi esophagus especial espionage esteem estrangement etch ether ethereal ethos etiquette etymological eulogize eulogy euphemism eureka euthanasia evacuate evacuation evade evangelical evangelism evangelist evangelistic evaporate evaporation evasion evasive evenest evenness eventful eventuality evergreen everlasting evermore eves evict eviction evilest evocative evoke ewes exacerbate exactest exaggeration exalt exaltation exasperate exasperation excavate excavation excel excellence excerpt excise excitable exclaim excommunicate excommunication excrement excrete excruciating excursion excusable executor exemplary exemplify exemption exert exertion exhale exhaustion exhilarate exhilaration exhort exhortation exhume exile existent existential exodus exonerate exoneration exorbitant expandable expanse expansive expatriate expectancy expectant expediency expedient expedite expel expend expendable expiration expletive explicable exponent exposition expound expressive expulsion exquisite extemporaneous exterior exterminate extermination extinct extinguish extol extort extortion extortionate extracurricular extradite extradition extrapolate extrapolation extraterrestrial extravagance extravagant extremest extremity extricate extrovert exuberance exuberant exude exult exultant exultation eyeball eyebrow eyed eyeing eyelash eyelid eyesore eyewitness fable fabricate fabrication fabulous facade faceless facet facetious facial facile facsimile faction factorial factorization fade fads faggot fagot faithfulness faithless falcon fallible fallout falsehood falsest falsetto falsification falsify falsity falter familiarize fanatic fanatical fancier fanciest fanciful fanfare fang fanned fanning fantastically faraway farmland fascination fascism fashionably fasten fastidious fatalistic fatality fateful fatherhood fatherland fathom fatigue fats fatten fatter fattest fattier fattiest fatty faultier faultiest faultless fauna favorably favoritism fawn faze fearful fearless fearsome feast feather featherier featheriest feathery feces federalism federalist federation feds feeblest feign feint feline fellest fellowship felon felony feminine femininity feminism fend ferment fermentation fern ferocious ferocity ferret ferry fertile fertility fertilization fertilize fervent fervor fester festive festivity festoon feted fetid feting fetish fetter fetus feud feudal feudalism feverish fezzes fiasco fibbed fibber fibbing fiberglass fibs fiche fickle ficklest fictitious fiddly fidelity fidget fidgety fiend fiendish fierceness fiercest fierier fieriest fiery fiesta fifteenth fiftieth figment figs figurative figurehead filament filch filet fillet filly filmier filmiest filmy filth filthier filthiest finale finalist finality financier finch finesse fingernail fingerprint fingertip finickier finickiest finicky fins firearm firecracker firefighter firefly fireman firemen fireplace fireproof fireside firewood firmest firmness firmware firs firsthand fisherman fishermen fishery fishier fishiest fishy fission fissure fist fitful fitness fitter fittest fixable fixation fixture fizz fizzle flabbier flabbiest flabby flagpole flagrant flagship flagstone flail flair flak flake flakier flakiest flaky flamboyance flamboyant flamingo flammable flank flannel flap flapjack flare flashback flashest flashier flashiest flashlight flashy flask flatness flatten flattery flattest flaunt flawless flea fleck fled fledged fledgling flee fleece fleecier fleeciest fleecy fleetest fleshier fleshiest fleshy flex flexibly flick flier fliest flightier flightiest flightless flighty flimsier flimsiest flimsiness flimsy flinch fling flint flippant flippest flirt flirtation flirtatious flit flock flog floodlight flop floppier floppiest flora floral florid florist floss flotilla flounce flounder flourish flout flowerier floweriest flowery fluctuate flue fluency fluff fluffier fluffiest fluke flung flunk flunky fluorescent flurry flushest fluster flutist flutter flux flyover foal foamier foamiest foamy focal fodder foes fogged foggier foggiest fogging foggy foghorn fogs fogy foible foil foist foliage folklore folksier folksiest folksy folly foment fondest fondle fondness foodstuff foolhardier foolhardiest foolhardy foolishness foolproof footage foothill foothold footlights footpath footprint footstep footstool footwear footwork forage foray forbear forbearance forbore forborne forceful forceps forcible ford fore forearm forebode forefather forefinger forefront forego foregone foreground forehead foreleg foreman foremen foremost forensic foreplay forerunner foresaw foresee foreseen foreshadow foresight foreskin forestall forestry foretaste foretell forethought foretold forewarn forewent foreword forfeit forge forgery forgetful forgetfulness forgiveness forgo forgone forlorn formality formalize formative formidable formless formulate fornication forsake forsaken forsook forswear forswore forsworn fort forte forthright forthwith fortieth fortification fortify fortitude fortress fortuitous forwardest forwent fossilize foster foulest foundling foundry fount fourteenth fowl foxed foxes foxier foxiest foxing foxy foyer fracas fractal fractional fracture fragility fragmentary fragmentation fragrance fragrant frail frailest frailty franc franchise frankest frankfurter frantically fraternal fraternity fraternize fraudulent fraught fray freckle freehand freelance freest freight frenzy frequentest freshen freshest freshman freshmen freshness freshwater fret fretful friar friendlier friendliest friendliness frieze frigate fright frightful frigid frigidity frill frillier frilliest frilly frisk friskier friskiest frisky fritter frivolity frizzier frizziest frizzy frock frolic frolicked frolicking frond frontage frontal frontier frost frostbit frostbite frostbitten frostier frostiest frosty froth frothier frothiest frothy frugal frugality fruitful fruitier fruitiest fruition fruitless fruity fugitive fulcrum fulfillment fullness fumble fumigate fumigation fundamentalism fungi fungicide fungus funnel funner funnest funnily furious furl furlong furlough furnace furnish furor furred furrier furriest furring furrow furs furtive furtiveness fury fuselage fussier fussiest futility futuristic fuzz fuzzier fuzziest gabbed gabbing gable gabs gadget gagged gagging gags gaiety gaily gainful gait gala gale gall gallant gallantry gallery galley gallivant gallon gallop gallows galore gals galvanize gambit gamble gamest gamma gamut gander gangling gangplank gangrene gangster gangway gape garb gardenia gargle gargoyle garish garland garlic garment garnet garnish garret garrison garrulous garter gaseous gases gash gasket gassed gassing gastric gaudier gaudiest gaudy gauge gaunt gauntest gauntlet gauze gavel gawk gawkier gawkiest gawky gayer gayest gays gaze gazelle gazette geed geeing gees geese gelatin geld gems genealogical genealogy genera generality generosity genesis geneticist genial genie genii genital gent gentile gentility gentleness gentlest gentry genuineness genus geographic geological geologist geometric geranium gerbil germ germicide germinate germination gestation gesticulate getaway geyser ghastlier ghastliest ghetto ghostlier ghostliest ghoul gibber gibe giddier giddiest giddiness giddy gigantic gigged gigging giggle gigs gild gill gilt gimme gimmick ginger gingerbread gingham ginned ginning gins giraffe girder girdle girlhood girlish girth gist gizzard glacial glacier gladden gladdest glade gladiator glamorize glamorous glamour gland glandular glare glassier glassiest glassware glassy glaze gleam glee glen glib glibbest glide glimmer glimpse glint glisten glitter gloat globe globular globule gloom gloomier gloomiest gloomy glorification glorify gloss glossary glossier glossiest glucose glum glummest glut glutton gluttony glycerin gnarl gnash gnat gnaw gnus goad goalie goalkeeper goatee gobbed gobbing gobble goblet goblin gobs godchild godchildren goddess godfather godless godlier godliest godlike godly godmother godparent godsend goggle goldenest goldsmith gondola gong gonna goodnight goodwill gooey goof goofier goofiest goofy gooier gooiest goon goose gopher gore gorge gorier goriest gorilla gory gosh gosling gossamer gouge goulash gourd gourmet gout governess governmental graceful graceless gracious graciousness gradation gradient graft gram gramophone grandchild grandchildren granddaughter grandest grandeur grandiose grandparent grandson grandstand granite granny granola granular granule grape grapefruit grapevine graphite grapple grasshopper grassier grassiest grassy grate gratification gratify gratitude gratuity gravel graven gravest gravestone graveyard gravitate gravitation gravy grayest graze grease greasier greasiest greatness greedier greediest greedily greediness greenback greenery greenest greenhorn greenhouse greet gregarious gremlin grenade greyhound griddle gridiron grievance grieve grievous grill grille grimace grime grimier grimiest grimmest grimy grin grindstone gripe grislier grisliest grisly gristle grit grittier grittiest gritty grizzled grizzlier grizzliest grizzly grocer grocery groggier groggiest groggy groin groom groove groovier grooviest groovy grope grossest grotesque grotto grouch grouchier grouchiest grouchy groundless groundwork grouse grove grovel growl grub grubbier grubbiest grubby grudge gruel gruesome gruesomest gruff gruffest grumble grumpier grumpiest grumpy grunt guarantor guardian gubernatorial guerrilla guessable guesswork guffaw guidebook guild guile guillotine guiltier guiltiest guiltily guiltless guise guitarist gulch gull gullet gully gulp gumdrop gummed gummier gummiest gumming gummy gumption gums gunfire gunman gunmen gunned gunner gunning gunpowder gunshot guppy gurgle guru gush gust gustier gustiest gusty gutted gutting guyed guying guzzle gymnasium gymnast gymnastics gyms gynecologist gynecology gyrate gyration gyroscope habitable habitat habitation habitual hackney hacksaw haddock haggard haggle hags hailstone hairdo hairdresser hairier hairiest hairline hale halest halfway halibut hallelujah hallmark hallucination hallway halo halon hamburger hamlet hammed hamming hammock hamper hams hamster hamstring hamstrung handbag handcuff handedness handicraft handier handiest handiwork handkerchief handlebar handmade handout handrail handshake handsome handsomest handwriting hangar hangout hanker haphazard hapless harangue harass harassment harbor hardier hardiest hardliner hardwood hare harebrained harem hark harlot harmonic harmonica harmonious harmonize harness harp harpist harpoon harpsichord harrow harry harshest harshness hart harvest haste hastier hastiest hastily hatch hatchet hateful hatted hatting haughtier haughtiest haughtily haughtiness haughty haul haunt haven hawk hayed haying hays haystack haywire hazardous haze hazel hazier haziest headfirst headier headiest headland headlight headlong headmaster headphone headquarter headrest headroom headstone headstrong headway heady heal healthcare healthful healthier healthiest hearsay hearse heartache heartbeat heartbreak heartbroken heartburn hearten heartfelt hearth heartier heartiest heartless hearty heath heathen heave heavenlier heavenliest heaviness heavyweight heckle hectic hedge hedgehog heed heedless heftier heftiest hefty heifer heighten heinous heir heirloom heliport helium hellish helm hemisphere hemlock hemmed hemming hemoglobin hemophilia hemorrhage hemp hems henchman henchmen hens hepatitis herald herb herbivorous hereabouts hereafter hereditary heredity herein heretic heretical herewith hermaphrodite hermit hernia heroine heroism heron herpes hers hesitancy hesitant hesitation heterogeneous heterosexuality heuristic hewed hewing hews hexagon hexagonal heyday hiatus hibernate hibernation hiccup hick hickory hideaway hieroglyphic highbrow highland hijack hike hilarity hillbilly hillier hilliest hillside hilly hilt hims hind hindrance hinge hinterland hipped hipper hippest hippie hipping hippopotamus hippy hips hiss histogram hitch hitchhike hither hive hoard hoarse hoarseness hoarsest hoax hobbit hobble hobbyhorse hobgoblin hobnob hobo hock hockey hodgepodge hoed hoeing hoes hogged hogging hogs hoist holdup holier holiest holiness holler hollowest holly holocaust holster homage homeland homeless homelier homeliest homemade homesick homesickness homespun homestead homeward homework homey homicidal homicide homier homiest homogeneous homogenize homonym homophobic hone honestest honeycomb honeymoon honeysuckle honk honorable hood hoodlum hoodwink hoof hoop hooray hoot hooves hopped hopper hopping hops hopscotch hormone hornet hornier horniest horny horoscope horseback horseman horseplay horsepower horseradish horseshoe horticultural horticulture hose hosiery hospitable hospitality hospitalization hospitalize hostage hostel hostess hostility hotbed hothead hotly hotter hottest hound hourglass houseboat housekeeper housewarming housewife housewives housework hove hovel howl hows hubbub hubs huddle hued hues huff huffier huffiest huffy hugest hugged hugging hugs hulk hull hullabaloo humanest humanism humanist humanitarian humanize humblest humbug humdrum humid humidify humidity humiliate humiliation humility hummed humming hummingbird humorist hump hums hunch hunchback hundredth hungrier hungriest hungrily hunk hurdle hurl hurrah hurricane hurtful hurtle hush husk huskier huskiest huskily huskiness husky hustle hutch huts hyacinth hybrid hydrant hydraulic hydroelectric hydroplane hyena hygiene hygienic hymn hymnal hyperbole hypertension hyphenate hyphenation hypnosis hypnotic hypnotism hypnotist hypnotize hypochondria hypochondriac hypotenuse hypotheses hypothesize hysteria hysteric iceberg icebreaker iced ices icicle icier iciest icing idealist idealize identifiable idiocy idiomatic idiosyncrasy idlest idly idol idolize idyllic igloo ignite ignition iguana illegible illegibly illegitimate illicit illiteracy ills illuminate illumination illusory illustrative illustrator illustrious imagery imaginable imbecile imitate imitation imitative imitator immaculate immaterial immaturity immeasurable immeasurably immensity immerse immersion immigrant immigrate immigration immobile immobilize immorality immortality immovable immunity immunization immunize impairment impale impart impartial impartiality impassable impasse impassioned impassive impatience impatient impeach impeccable impedance impede impediment impel impenetrable imperceptible imperceptibly imperfection imperialism imperialist imperil impersonate impersonation impertinence impertinent impervious impetuous impetus impinge impish implacable implant implementable implicate implore impolite importation imposition impossibility impossibly impostor impotence impotent impound impoverish imprecise impregnable impregnate impressionable imprint imprisonment improbability improbably impromptu improper impropriety improvisation improvise imps impudence impudent impulsive impunity impure impurest impurity inaction inactive inactivity inadequacy inadmissible inadvertent inadvisable inalienable inanest inanimate inapplicable inarticulate inasmuch inaudible inaugural inaugurate inauguration inauspicious inborn inbred inbreed inbuilt incalculable incandescence incandescent incantation incapacitate incapacity incarcerate incarceration incarnate incendiary incense inception incessant incest incestuous incinerate incinerator incision incisive incisor incite incitement incognito incoherence incomparable incompatibility incompatibly inconceivable inconclusive incongruity incongruous inconsequential inconsiderable inconsiderate inconsolable inconspicuous incorporation incorrigible incredulity incredulous incremental incriminate incubate incubation incubator incumbent incurable indebted indecency indecent indecision indecisive indefinable indelible indelibly indelicate indentation indescribable indestructible indices indict indifference indifferent indigenous indigestible indigestion indignant indignation indignity indigo indiscreet indiscretion indiscriminate indispensable indisposed indisputable indistinct individualism individualist individuality indivisible indoctrinate indoctrination indolence indolent indomitable indoor inducement induct indulgence indulgent industrialist industrialization industrialize industrious inedible ineffectual inelegant ineligible inept ineptitude inert inertial inescapable inexact inexcusable inexhaustible inexorable inexorably inexpensive inexperience inexplicable inexplicably inextricably infamy infancy infantry infatuation infeasible infectious inferno infertile infest infestation infidel infidelity infield infiltrate infiltration infinitesimal infinitive infirm infirmary infirmity infix inflame inflammable inflammation inflammatory inflatable inflate inflationary inflection influenza influx informality informant informational infraction infrared infringe infuriate infuse infusion ingenuity ingest ingrain ingratiate ingratitude inhale inhospitable inhuman inhumane inhumanity initiation initiator injection injunction injurious inked inkier inkiest inking inkling inks inky inlaid inland inlay inlet inmate innards innate innermost inning innkeeper innocuous inns innuendo innumerable inoculate inoculation inoffensive inoperative inopportune inordinate inquest inquisition inquisitive insanest insanity insatiable inscribe inscription inscrutable insecticide insecurity insensitivity inseparable insignia insignificance insincere insincerity insinuate insinuation insipid insistent insolence insolent insoluble insolvency insolvent insomnia inspector instability installment instantaneous instep instigate instigation instill instinctive institutional institutionalize instructive instructor insubordinate insubordination insubstantial insufferable insular insulate insulation insulator insulin insure insurgent insurmountable insurrection intangible intelligible intelligibly intensest intensify intercede intercept interception interchange interchangeable intercom interconnect intercontinental interdependence interdependent interject interjection interlock interloper interlude intermarriage intermarry intermediary interment interminable interminably intermingle intermission intern internet interplanetary interplay interpolation interpose interracial interrogation interrogator intersect intersperse interstate interstellar intertwine interweave interwove interwoven intestinal intestine intimacy intimation intimidate intimidation intolerable intolerably intolerant intonation intoxicate intoxication intractable intramural intransitive intravenous intrepid intricacy intricate intrigue introspective introvert intrude intrusion intrusive intuition inundate inundation invariable invariant invective inventive inventory inversion invertebrate investigator investor inveterate invigorate invincible invisibility invisibly invocation invoice involuntarily involuntary invulnerable inward iodine ions iota irascible iridescence iridescent iris irked irking irks ironically irradiate irreconcilable irrefutable irregular irregularity irrelevance irreparable irreplaceable irrepressible irreproachable irresistible irresponsibility irretrievable irretrievably irreverence irreverent irreversible irrevocable irrevocably irrigate irrigation irritability irritable irritably irritant isle isthmus italic italicize itch itchier itchiest itchy itemize iterate iteration iterative itinerant itinerary ivies ivory jabbed jabber jabbing jabs jackal jackass jackdaw jackknife jackknives jackpot jade jagged jaggedest jaguar jalopy jamb jamboree jangle janitor jarred jarring jars jaundice jaunt jauntier jauntiest jauntily jaunty javelin jawbone jawed jawing jaws jays jaywalk jealousy jeer jell jellyfish jeopardize jeopardy jerkier jerkiest jerky jersey jets jetted jetting jettison jetty jewel jewelry jibe jiffy jigged jigging jiggle jigs jigsaw jilt jingle jinx jitterier jitteriest jitters jittery jobbed jobbing jockey jocular jogged jogger jogging jogs jollier jolliest jolt jostle jots jotted jotting journalism jovial joyed joyful joyfullest joying joyous joys joystick jubilant jubilation jubilee judicial judiciary judicious judo jugged juggernaut jugging juggle jugs jugular juicier juiciest juicy jumble jumbo jumpier jumpiest jumpy juncture juniper junket junkie junta jurisdiction juror justest jute juts jutted jutting juxtapose juxtaposition kaleidoscope kangaroo karat karate kayak keel keenest keepsake kegs kelp kennel kerchief kerosene ketchup keyhole keynote keystone khaki kickback kickoff kiln kilo kilobyte kilogram kilometer kilowatt kilt kimono kinda kindergarten kindest kindle kindlier kindliest kindred kinfolk kingfisher kink kinkier kinkiest kinky kinship kiosk kipper kitchenette kite kitten kitty kiwi knack knapsack knead kneecap kneel knelt knickers knighthood knit knives knob knockout knoll knot knottier knottiest knotty knowledgeable knuckle koala kosher kowtow kudos laborious labyrinth lace lacerate laceration lacier laciest lackluster lacquer lacrosse lacy lade laden ladle lads ladybug ladylike laggard lagged lagging lagoon lags lair lamb lambda lame lament lamentable lamentation lamest lampoon lance landlady landlocked landmark landowner landslid landslide languid languish languor languorous lankier lankiest lanky lantern lapel lapped lapping laps lapse larceny lard larva larvae larynges laryngitis larynx lascivious lash lass latch latent lateral latex lath lathe latitude latrine lattice laud laudable laughable laughingstock launder laundry laureate laurel lava lavender lavish lavishest lawful lawless lawmaker lawsuit laxative laxer laxest laxity layman laymen lazier laziest leaden leafier leafiest leafy leakage leaky leanest leapfrog leapt lease leash leathery lectern ledge leech leek leer leerier leeriest leery leeway leftest leftmost legacy legalistic legality legalize legged legging legibility legibly legion legislate legislative legislator legislature legitimacy legume lemme lemonade lengthen lengthier lengthiest lengthwise leniency lentil leopard leotard leper leprosy lesion lessen letdown lethargic lethargy letterhead lettuce letup leukemia levee lever leverage levity levy lewd lewdest lexical lexicon liar libelous liberalism liberalization liberalize liberate liberation libertarian libretto lice lichen lick licorice lids lieu lieutenant lifeboat lifeforms lifeguard lifeless lifelike lifeline lifelong lifespan ligament ligature lighten lighthouse lightness lightweight likable likelier likeliest liken likeness likest lilac lilt lily limbo lime limelight limerick limestone limitless limousine limp limpest linchpin lineage linefeed linen linger lingerie lingo linguist liniment linoleum lint lioness lipstick liquefy liqueur liquidate liquidation listless litany literacy lithe lithest lithium litigation litterbug littlest liturgical liturgy livable livelier liveliest livelihood liveliness liven livestock livid lizard llama loadable loaf loam loath loathe loathsome loaves lobbed lobbing lobbyist lobe lobotomy lobs lobster locale locality localize locket locksmith locomotion locomotive locust loft loftier loftiest loftiness lofty logarithm logarithmic logger logician loin loincloth loiter loll lollipop lone lonelier loneliest loneliness lonesome longevity longhand longish longitude longitudinal longshoreman longshoremen lookout loom loon loonie looniest loony loosen loosest loot lope lopped lopping lops lopsided lore lotion lottery lotus loudness loudspeaker lounge louse lousier lousiest lovable lovelier loveliest loveliness lowdown lowed lowing lowlier lowliest lowly lows loyalest loyalty lozenge lubricant lubricate lubrication lucid luckier luckiest lucrative lugged lugging lugs lukewarm lull lullaby lumber lumberjack luminary luminous lumpier lumpiest lumpy lunacy lunar luncheon lunge lupine lurch lure lurid luscious lush lushest lustier lustiest lustrous lusty lute luxuriant luxuriate luxurious lymph lymphatic lynch lyre lyrical macabre macaroni mace machete machinist macho mackerel macroscopic madam madame madcap madden madder maddest madhouse madly madman madmen mads maelstrom magenta maggot magician magistrate magnanimity magnanimous magnate magnesium magnet magnetism magnetize magnificence magnify magnolia magnum magpie mahogany maid maiden mailman mailmen maim mainland mainline mainstay maintainability maintainable majestic majestically majesty makeshift makeup maladjusted malady malaria malevolence malevolent malformed malice malign malignancy malignant mall mallard malleable mallet malnutrition malpractice malt maltreat mama mamma mammal mammalian mammoth manacle manageable managerial mandible mandolin mane maneuver mange mangier mangiest mango mangrove mangy manhandle manhole manhood maniac maniacal manic manicure manicurist manifest manifold manlier manliest manliness manly mannequin mannerism mannish manor mansion manslaughter mantel mantelpiece mantle manure manuscript maple mapper marathon marble mare margarine maria marigold marijuana marina marinate marine marionette maritime marketable marketplace marksman marksmen marmalade maroon marquee marred marring marrow mars marsh marshal marshier marshiest marshmallow marshy marsupial mart martial martin martyr martyrdom marvel mascara mascot masculine mash masochist mason masonry masquerade massacre massage mast masterful mastermind masterpiece mastery masticate masturbation matador matchbook matchless matchmaker materialism materialist materialistic materialize maternal maternity math matriarch matriarchal matriculate matriculation matrimonial matrimony matron mats matte mattress maturest maturity maudlin maul mausoleum mauve maverick maxim maxima maximal mayhem mayonnaise meadow meager mealier mealiest mealy meander meanest measles measlier measliest measly measurable mechanize medal medallion meddle meddlesome median mediate mediation mediator medicate medication medicinal mediocre mediocrity meditate meditation medley meek meekest meekness megalomaniac megaphone megaton melancholy mellow mellowest melodic melodious melodrama melodramatic melon membrane memento memo memoir memorably memorandum memorial memorize menace menagerie menial menopause menstrual menstruate menstruation menthol mentor meow mercantile mercenary merchandise merchant merciful merciless merest meridian meringue mermaid merrier merriest merrily merriment mesdames mesh messenger messier messiest metabolic metabolism metallic metallurgy metamorphose metamorphosis metaphorical metaphysical metaphysics mete meteor meteoric meteorite meteorologist meteorology methodical methodology meticulous metropolis metropolitan mettle mewed mewing mews mezzanine microbe microbiology microcode microfiche microfilm micrometer microorganism microphone microscope microscopic microsecond middleman middlemen midget midriff midst midstream midsummer midway midwife midwives mien mightier mightiest migraine migrant migratory mike mildest mildew milestone militancy militant militarily militate militia milkier milkiest milkman milkmen milky milligram millimeter milliner millinery millionaire millionth millisecond mime mimicked mimicking mimicry mince mincemeat mindbogglingly mindedness mindful minefield mineral mingle miniature minibus minicomputer minimalism minion ministerial ministry mink minnow minstrel minuet minuscule minutest mirage mire mirth misadventure misapprehension misappropriate misappropriation misbehave misbehavior miscarriage miscarry miscellany mischief mischievous misconception misconduct misconstrue misdeed misdemeanor misdirection miser misfit misgiving mishap misinform misinformation misinterpretation misjudge mislaid mislay mismanagement mismatch misnomer misquote misrepresentation misshapen missionary missive misspell mistier mistiest mistletoe mistress mistrust misty mistype mite mitigate mitt mitten mixer moat mobbed mobbing mobility mobilization mobilize mobs moccasin mockery mockingbird modal moderator modernity modernization modernize modesty modicum modifier modular modulate modulation mohair moist moisten moistest moisture molar molasses moldier moldiest moldy molest mollify mollusk molt molten momentary momentous moms monarchy monastery monastic monetarism monetary mongoose mongrel monies monk monogamous monogamy monogram monolithic monologue monopolize monorail monosyllable monotonically monotonous monotony monsoon monstrosity monstrous monument monumental moodier moodiest moodily moody mooed mooing moonbeam moonlight moor moos moose moot mope mopped mopping mops morale moralist morass moratorium morbid morgue morn moronic morose morphine morphology morsel mortar mortgage mortification mortify mortuary mosaic mosque mosquito moss mossier mossiest mossy motel moth mothball motherhood motif motionless motley motlier motliest motorbike motorcade motorcycle motorist motorize mound mountaineer mountainous mourn mournful mousier mousiest mousse mousy mouthful mouthpiece movable mowed mower mowing mows mucous mucus muddier muddiest muddy muff muffin muffle mugged mugger muggier muggiest mugginess mugging muggy mulch mule mull multi multinational multiplicative multiplicity multiprocessing multitasking multitude mummify mumps munch municipal municipality mural murderous murkier murkiest murky murmur muscular muse mush mushier mushiest mushroom mushy musk musket muss mussel mustache mustang mustard mustier mustiest musty mutant mutate mutation mute mutest mutilate mutilation mutinous mutiny mutt mutton muzzle myopic myriad mystical mysticism mystify mythological nabbed nabbing nabs nagged nagging nags naivest naivety nakedness namesake napalm nape napkin napped napping nappy naps narcotic narrate narration narrator narrowness nasal nastily nastiness nationalism nationalist nationalistic nationality nationalize nationwide nativity nattier nattiest natty naturalist naturalization naturalize naturalness naught naughtier naughtiest naughtily naughtiness nausea nauseate nauseous nautical naval navel navigable navigate navigation navigator navy nays nearsighted nearsightedness neatest neatness nebula nebulae nebulous necessitate neckerchief necklace neckline necktie necrophilia nectar nectarine needier neediest needlework needy negation neglectful negligee negligence negligent negotiator neigh neighborliness neon neophyte nephew nepotism nervousness nestle nether netted netting nettle neurologist neurology neuron neuroses neurosis neurotic neuter neutrality neutralize neutron newbie newborn newfangled newsagents newscast newsier newsiest newsprint newsstand newsy newt newton nibble nicety niche nickel nicotine niece niftier niftiest nifty nigh nightclub nightfall nightgown nightingale nightmarish nighttime nimble nimblest nimbly nincompoop nineteen nineteenth ninetieth ninety ninny ninth nipped nippier nippiest nipping nipple nippy nips nitrate nitrogen nits nitwit nobility nobleman noblemen noblest noblewoman noblewomen nobly nocturnal nodded nodding nods noes noiseless noisier noisiest noisily noisiness nomad nomadic nomenclature nomination nominative nominee nonchalance nonchalant noncommittal nonconformist nondescript nonentity nonfiction nonflammable nonpartisan nonprofit nonresident nonsensical nonstandard nonstop nontrivial nonviolence noodle nook noose northeast northeasterly northeastern northerly northward northwest northwestern nosebleed nosier nosiest nostalgic nostril nosy notch notebook noteworthy nothingness noticeboard notional notoriety nougat nourish nourishment nova novelist noxious nozzle nuance nuclei nucleus nude nudest nudge nudity nugget nullify numbness numerate numerator nuptial nursemaid nursery nurture nutcracker nutmeg nutrient nutriment nutrition nutritional nutritious nutshell nutted nuttier nuttiest nutting nutty nuzzle nylon nymph oafs oaks oared oaring oars oases oasis oath oatmeal obedience obedient obelisk obese obesity obfuscation obituary objectivity objector obligate oblique obliterate obliteration oblivion oblivious oblong oboe obscenest obscenity obscurest observable observance observant observatory obsessive obsolescence obsolescent obstacle obstetrician obstetrics obstinacy obstinate obstruction obstructive obtrusive obtuse obtusest occupancy occupant occupational oceanic oceanography octagon octagonal octal octave octopus ocular odder oddest oddity odes odious odometer odor offbeat offed offensiveness officiate officious offing offload offs offshoot offshore offstage oftenest ogle ogre ohms oiled oilier oiliest oiling oils oily ointment okay okra olden olfactory olive omega omelet omen ominous omnibus omnipotence omnipotent omnipresent omniscient oncoming onerous onlooker onomatopoeia onrush onset onslaught onward oodles ooze opal opaque opaquest openest openness operand operatic operative ophthalmologist ophthalmology opinionated opium opossum opportune opportunist oppressive oppressor optician optima optimism optimist optometrist opulent oracle orangutan oration orator oratory orchard orchestrate orchestration orchid ordain ordeal ordinance ordinarily ordination ores organism organist organizational orgasm orgy orifice originality ornament ornamental ornate ornithologist ornithology orphan orphanage orthodontist orthogonal orthogonality orthography orthopedics oscillate oscillation oscilloscope osmosis ostensible ostensibly ostentation ostentatious ostracize ostrich otter ouch ounce oust outbound outbreak outburst outcast outclass outdid outdistance outdo outdone outdoor outed outermost outfield outfit outgrew outgrow outgrown outgrowth outhouse outing outlaid outlandish outlast outlaw outlay outlet outlive outlying outmoded outnumber outpatient outpost outran outrun outs outshine outshone outskirt outsmart outspoken outstation outstrip outward outwit oval ovary ovation oven overate overbear overblown overboard overbore overborne overburden overcast overcharge overcoat overcrowd overdid overdo overdone overdose overdraw overdrawn overdrew overeat overeaten overestimate overgrew overgrow overgrown overhand overhang overhaul overhear overheat overhung overkill overlaid overlain overland overlay overlie overpass overpopulation overpower overprint overran overrate overreact overrule overrun oversampling oversaw oversee overseen overshadow overshoot overshot oversight oversimplification oversleep overslept overstate overstep overt overtake overtaken overthrew overthrow overthrown overtook overture overturn overuse overweight overwork overwrite overwrought ovum owls oxen oxidation oxide oxidize oyster pacemaker pacific pacifism pacifist pacify pact paddle paddock paddy padlock pagan pageant pageantry pagination pagoda pail painfullest painstaking pajamas palatable palate palatial paleontologist paleontology palest palette pall pallbearer pallid pallor palm palomino palpable palpably pals paltrier paltriest paltry pamper pamphlet panacea pancake pancreas pancreatic panda pandemonium pander pane pang panhandle panicked panicking panicky panned panning panorama panoramic pans pansy panther pantie pantomime pantry papa papacy papal papaya paperweight paperwork paprika papyri papyrus parable parachute paradigm paradoxical paraffin paragon parakeet paralyses paralysis paralytic paralyze paramount paraphernalia paraplegic parasite parasitic parasol paratrooper parcel parch parchment pardonable pare parentage parental parenthetical parenthood parish parishioner parka parkway parliamentary parlor parole parred parring pars parsec parsley parsnip parson parsonage partake partaken partiality participation participle partisan partnership partook partridge passable passageway passbook pasta pastel pasteurization pasteurize pastiche pastier pastiest pastime pastor pastoral pastry pasture pasty patchwork patchy pate paternal paternalism paternity pathetically pathological pathologist pathology pathos pathway patientest patio patriarch patriarchal patrimony patriot patriotic patriotism patrol patron patronage pats patted patter patting patty paucity paunch paunchier paunchiest paunchy pauper pave pavilion pawed pawing pawn pawnbroker paws payable payer payload payoff payroll peaceable peacemaker peach peacock peal pear pearl peas peat pebble pecan peck peculiarity pedagogy peddle pedestal pediatrician pediatrics pedigree peek peel peep peerless peeve peevish pegged pegging pegs pelican pellet pelt pelvic pelvis penal penalize penance penchant pendant pendulum penetrate penetration penicillin peninsula penis penitence penitent penitentiary penknife penknives penmanship pennant penned penniless penning pension pensive pentagon pentagonal penthouse penultimate peon peony pepped pepper peppermint pepping peps perceptible perceptive perch perchance percolate percolation percolator percussion peremptory perennial perfectest perfectionist perforate perforation perfume perfunctorily perfunctory peril perilous perimeter periodical periphery periscope perish perishable perjure perjury perk perkier perkiest perky permanence permeate permissive permutation pernicious peroxide perpendicular perpetrate perpetrator perpetuate perplex perplexity persecution persecutor perseverance persevere persistence persona personable personalize personification personify perspiration perspire persuasive pert pertain pertest pertinent perturb perusal peruse pervade pervasive perversion pervert peskier peskiest pesky pessimism pessimist pessimistic pest pesticide pestilence petal peter petite petition petrify petroleum pets petted petticoat pettier pettiest pettiness petting petulant petunia pews pewter phantom pharmaceutical pharmacist pheasant phenomenal philanthropic philanthropist philanthropy philosophize phlegm phlegmatic phobia phonetic phonics phonier phoniest phonograph phony phosphor phosphorescence phosphorescent phosphorus photocopier photogenic photography photon photosynthesis phototypesetter phraseology physician physiological physique pianist piccolo pickax picket pickier pickiest pickle pickpocket pickup picky picnic picnicked picnicking pictorial picturesque piddle piecemeal piecework pier pierce pies piety pigeonhole pigged pigging piggish piggyback pigheaded pigment pigpen pigtail pike pilfer pilgrim pilgrimage pillage pillar pillow pillowcase pimple pimplier pimpliest pimply pincushion pine pineapple pinion pinkest pinnacle pinned pinning pinpoint pioneer pious pique piracy piranha pirate pirouette pistachio pistol piston pitchfork piteous pithier pithiest pithy pitiful pitiless pits pittance pitted pitting pivot pivotal pixie placard placate placement placenta placid plagiarism plagiarist plagiarize plaice plaid plainest plaintiff plaintive planar planetarium plank plankton plantain plantation plaque plasma plateau platinum platitude platoon platter plausibility plausibly playable playback playful playfulness playhouse playmate playpen plaything playwright plaza pleasantest pleasantry pleasurable pleat pledge plentiful plethora pliable pliant plied pliers plies plight plod plop plow pluck plucky plum plumage plumb plume plummet plump plumpest plunder plunge plurality plush plushest plutonium plying plywood pneumatic pneumonia poach pocketbook pockmark podded podding podium pods poetical poignancy poignant poinsettia poise poisonous pokey pokier pokiest poky polarity polarization polarize polemic policemen policewoman policewomen polio politest polka pollen pollinate pollination pollster pollutant pollute polo polygamous polygamy polygon polyp polytechnic pomegranate pomp poncho pond ponderous pontoon pony poodle poop popcorn poplar poppy popularize populous porcelain porch porcupine pore pornographic porous porpoise porridge portal portend portent portfolio porthole portico portlier portliest portrait portrayal positional positivism possessive possessor possum postbox postcode posterior posterity postgraduate posthumous postman postmark postmen postponement posture posy potassium potency potent pothole potion pots potted potter pottery potting pouch poultry pounce pout powdery powerhouse powerless powwow practicality practitioner pragmatism prairie praiseworthy pram prance prank prattle prawn preamble precarious precautionary precinct precipice precipitate precipitation precipitous precisest preclude precocious preconceive preconception precursor predator predatory predefined predestination predicament predicate predictably predictor predisposition predominance predominant predominate preeminence preeminent preempt preen prefab prefect preferential prehistoric prejudicial prelude premeditation premier premiere premonition prenatal preoccupation preoccupy prepaid preparatory prepay preponderance preposition prepositional preposterous prerogative presentable preservation preservative preside presidency presidential prestige prestigious presto presumption presumptuous presuppose pretense pretension pretentiousness pretext prettier prettiest pretzel prevalence preventable preventive prey priceless prick prickle pricklier prickliest pried pries priestess priesthood prim primal primate primeval primmest primp primrose principality printable prism privatest privation privatize privier priviest privy probabilistic probation probe problematic procedural procession processional proclamation procrastinate procrastination procure procurement prod prodigal prodigious prodigy profane profanity profess proffer proficiency proficient profiteer profoundest profundity profuse profusion progeny prognoses prognosis progression progressive prohibition prohibitive projectile projector proletarian proletariat proliferate prolific prologue prom promenade prominence promiscuity promiscuous promontory promptest promptness promulgate prong pronouncement proofread prop propagate propagation propel propensity properest prophecy prophesy prophetic proponent proportionality proportionate propositional proprietor propriety propulsion pros prosecutor prospector prospectus prosper prosperity prosperous prostitution prostrate protagonist protective protector protestant proton protract protractor protrude protrusion proudest provable provably provenance proverb proverbial providence province provincial proviso provocation prow prowess prowl proxy prude prudence prudent prudish prune prying psalm pseudonym psych psyche psychedelic psychiatric psychiatrist psychiatry psychic psychoanalysis psychoanalyst psychopath psychoses psychosis psychotherapy psychotic puberty puck puddle pudgier pudgiest pudgy pueblo puff puffier puffiest puffy pugnacious puke pulley pullover pulmonary pulpit pulsate pulsation pulverize puma pumice pummel pumpernickel pumpkin punchline punctual punctuality punctuate pundit pungent punier puniest punishable punitive punk punkest punned punning puny pupped puppet pupping puppy pups puree purest purgatory purification purify puritanical purplest purport purposeful purr purse purveyor pushier pushiest pushover pushy puss pussier pussiest pussy putative putrid putty pyramid pyre quack quadrangle quadrant quadratic quadrilateral quadruped quadruple quadruplet quagmire quail quaint quaintest quake qualitative qualm quandary quantifier quantify quantitative quarantine quark quarrel quarrelsome quarry quart quarterback quartet quartz quash quaver quay queasier queasiest queasy queenlier queenliest queer queerest quell quench quiche quicken quicksand quill quilt quinine quintessence quintet quintuplet quip quirk quirky quiver quizzes quizzical quorum quotient rabbi rabble rabies raccoon racetrack racier raciest racketeer racy radial radiance radiant radiate radiator radii radioactive radioactivity radish radium raffle raft ragamuffin ragged raggedest ragging rags ragtime raincoat raindrop rainfall rainier rainiest rainstorm rainwater rainy raisin rake rally ramble ramification rammed ramming ramp rampage ramrod rams ramshackle ranch rancid rancor rancorous randomness rankest rankle ransack ransom rapidest rapidity rapist rapped rapping rapport raps rapt rapture rapturous rarity rascal rashest rasp raspberry raster ratification ratify ration rationality rationalization rationalize ratted ratting rattlesnake ratty raucous ravage ravel raven ravenous ravine ravish rawer rawest rayon rays raze reactive readability readier readiest readiness readjust realest realism realist realistically reallocate realty ream reap reappear rearrangement reassurance rebate rebel rebellion rebellious rebind rebirth reborn rebound rebuff rebuke rebut rebuttal recalcitrant recant recap recapture recede recentest receptacle receptionist receptive recess recession recharge rechargeable reciprocal reciprocate recital recitation recite recklessness reclamation recline recluse recoil recollect recompense recompile reconciliation recondition reconfigure reconnaissance reconnect reconstruct reconstruction recount recoup recourse recoverable recreate recreation rectal rector rectum recuperate recuperation recur recurrence recurrent redden redder reddest redeem redeemable redefinition redemption redesign redhead redid redirection rediscover redistribute redistribution redo redone redraft redraw redress reds reed reef reek reel reelect referee refill refinement refinery reflective reflector reflexive reformation refraction refreshment refrigerate refrigeration refrigerator refuel refuge refugee refurbish refurbishment refutation regal regale regalia regatta regenerate regeneration regent regimen regiment regimental registrar registry regress regression regretful regrettable regularity regulate regurgitate rehabilitate rehabilitation rehash rehearsal rehearse reimburse reimbursement rein reincarnate reincarnation reindeer reinforce reinforcement reinstatement reiteration rejoice rejoin rejoinder rejuvenate rejuvenation relaid relapse relational relativistic relaxation releasable relegate relent relentless reliance reliant relic relinquish relish relive reload relocatable relocate remade remake remedial remembrance reminisce reminiscence remiss remission remit remittance remnant remodel remorse remorseful remorseless remotest removable remunerate remuneration renaissance rendezvous renegade renege renewable renewal renounce renovate renovation renown rental renunciation reopen reorganization reorganize repaid reparation repatriate repay repayment repeal repel repellent repentance repentant repercussion repetitious replay replenish replete replica replicate replication repose repository reprehensible repress repression repressive reprieve reprimand reprint reprisal reproach reproductive reprogram reprove reptile republic republican repudiate repudiation repugnance repugnant repulse repulsion reputable repute requiem requisition reroute resale reschedule rescind resentful resentment reservoir reshuffle residential residual residue resilience resilient resin resistant resistor resolute resonance resonant resound resourceful resourcefulness respectability respectably respectful respiration respirator respiratory respite resplendent responsibly responsive restful restfullest restitution restive restless restlessness restoration restraint restructure resubmit resultant resumption resurface resurgence resurrect resuscitate resuscitation retaliate retaliation retard retch retention rethink reticence reticent retina retort retrace retraction retreat retribution retroactive retrograde retrospect retrospective retry returnable retype reunion reunite revamp revel revelry revengeful reverberate reverberation revere reverence reverent reverie reversal reversible reversion revile revisit revival revive revoke revolutionize revolve revs revue revulsion revved revving rewind rework rhapsody rhetoric rheumatism rhino rhinoceros rhododendron rhubarb rhythmic ribbed ribbing ribs richness ricketier ricketiest rickety rickshaw ricochet riddance riddle ridge ridicule rife rifest rifle rift rigged rigging righteous righteousness rightest rightful rightmost rightness rigidity rigor rigs rile rimmed rimming rims rind ringleader ringlet ringworm rink rinse riotous ripe ripen ripeness ripest riposte ripple riskier riskiest rite rivalry rivet roach roadblock roadside roam roar roast robbed robber robbery robbing robe robin robs robustest robustness rockier rockiest rocky rodent rodeo rods roes rogue roguish romantically romp rook rookie roomier roomiest roommate roomy roost rosary rosemary rosier rosiest roster rostrum rosy rotary rote rotisserie rotor rots rotted rottenest rotting rotund rotunda rouge roughage roughen roughest roughhouse roughness roulette roundest roundness rouse rowboat rowdier rowdiest rowdiness rowdy rowed rowing royalty rubbed rubbing rubble rubier rubiest rubric rubs ruby rucksack ruckus rudder ruddier ruddiest ruddy rudeness rudest rudimentary rued rueful rues ruff ruffian ruffle rugby rugged ruggedest rugs ruing ruinous rumble ruminate rummage rummer rummest rummy rump rumple rums runaway rundown rune runner runnier runniest runny runt runway rupture ruse rust rustic rustier rustiest rustle ruthless ruthlessness ruts rutted rutting sabbatical saber saboteur sacrament sacrificial sacrilege sacrilegious sacs sadder saddest saddle sades sadism sadist sadistic sadness safari safekeeping saffron sage sagebrush sagest sagged sagging sags sailboat sailor saintlier saintliest salable salad salami salesmen salespeople salesperson saleswoman saleswomen salient saliva salivate sallow sallowest sally salmon salon saloon saltest saltier saltiest salty salutation salute salvage salve sameness sanatorium sanctify sanctimonious sanction sanctity sanctuary sandal sandbag sandier sandiest sandman sandmen sandpaper sandstone sandstorm sandy sanest sanitarium sanitary sanitation sanserif sapling sapped sapphire sapping saps sarcastically sardine sari sash sassier sassiest sassy satanic satchel satin satirical satirist satirize saturate saturation saucepan saucier sauciest saucy sauerkraut sauna saunter sausage savage savagery savagest savior savor savorier savoriest savory savvier savviest savvy sawdust sawed sawing saws saxophone scab scaffold scalar scald scalier scaliest scallop scalp scalpel scaly scamper scandalize scandalous scant scantest scantier scantiest scanty scapegoat scar scarcest scarcity scarecrow scarier scariest scarves scary scathing scatterbrain scavenger scenic scent scepter schizophrenia schizophrenic scholarship scholastic schoolboy schoolchild schoolchildren schoolteacher schooner scissor scoff scold scoop scoot scorch scorn scornful scorpion scoundrel scour scourge scout scowl scrabble scram scramble scrapbook scrape scratchier scratchiest scratchy scrawl scrawnier scrawniest scrawny screech screwdriver screwier screwiest screwy scribble scribe scripture scriptwriter scrounge scrub scruff scruffier scruffiest scruffy scruple scrupulous scrutinize scrutiny scuff scuffle sculptor sculpture scurrilous scurry scuttle scythe seafaring seafood seam seaman seamen seamstress seaport sear searchlight seas seashell seashore seasick seasickness seaside seasonable seasonal seaweed secede secession seclude seclusion secondarily secrecy secretarial secrete secretion secretive securest sedan sedate sedatest sedative sedentary sediment sedimentary seduce seduction seductive seedier seediest seedling seedy seep seepage seer seesaw seethe segmentation segregate segregation seize seizure selector selfishness selves semantically semblance semen semester semicircle semicolon semiconductor semifinal seminary senate senator senile senility seniority sensational sensationalism senseless sensibility sensor sensory sensual sensuality sensuous sentience sentimentality sentry sepulcher sequin serenade serene serenest serenity sergeant serpent serum serviceable serviceman servicemen serviette servile servitude setback settable setter settlement seventeen seventeenth seventy sever severance severest sewage sewed sewer sewing sewn sews sexed sexing sexism shabbier shabbiest shabbily shabby shack shackle shadier shadiest shadowier shadowiest shadowy shady shaft shaggier shaggiest shaggy shakier shakiest shallowest sham shamble shameful shameless shampoo shamrock shanty shapelier shapeliest shark sharpen sharpest sharpness shatter shave shaven shawl sheaf shear sheath sheathe sheave sheen sheepish sheerest sheikh shellfish shepherd sherbet sheriff sherry shes shied shield shies shiftier shiftiest shiftless shifty shimmer shin shingle shinier shiniest shipment shipshape shipwreck shire shirk shiver shoal shod shoddier shoddiest shoddy shoelace shoestring shoo shopkeeper shoplifter shore shortcoming shortfall shortlist shortness shotgun shovel showcase showdown showier showiest showman showmen showy shrank shrapnel shred shrew shrewdest shrewdness shriek shrill shrillest shrimp shrine shrink shrinkage shrivel shroud shrub shrubbery shrug shrunk shrunken shuck shudder shuffle shun shunt shuttle shyer shyest shying shyness sibling sickest sickle sicklier sickliest sickness sics sideline sidelong sideshow sidestep sidetrack sidewalk sidle siege sierra siesta sieve sift sightless signify signpost silentest silhouette silk silken sill silliness silo silt silversmith silverware silvery simile simmer simplex simplification simulator sincerest sincerity sinew sinewy singe singularity sinned sinner sinning sinus siphon sipped sipping sips sire siren sirloin sirs sissier sissiest sissy sisterhood sitter sixes sixpence sixteenth sixtieth sizable sizzle skate skateboard skein skeptic skepticism sketchier sketchiest sketchy skew skid skied skies skiing skillet skillful skim skimp skimpier skimpiest skimpy skinflint skinnier skinniest skinny skirmish skis skit skittish skulk skunk skying skylight skyline skyrocket skyscraper slab slack slacken slackest slain slake slam slander slant slap slapstick slat slate slaughter slavery slavish slay sleazier sleaziest sleazy sled sledgehammer sleek sleekest sleepier sleepiest sleepless sleepy sleet sleeve sleeveless sleigh slender slenderest slew slick slickest slier sliest slime slimier slimiest slimmest slimy sling slingshot slink slipperier slipperiest slipshod slit slither sliver slob slog slop sloppier sloppiest slosh sloth slothful slouch slovenlier slovenliest slovenly slowness sludge slug sluggish sluice slum slumber slump slung slunk slur slush slut slyly slyness smack smallpox smartest smattering smear smellier smelliest smelt smidgen smirk smite smithereens smitten smock smog smokestack smokier smokiest smoky smolder smoothest smoothness smote smother smudge smuggest smuggle smut snake snap snappier snappiest snappy snapshot snare snarl snatch sneakier sneakiest sneer sneeze snicker snide snidest sniffle snip snipe snippet snitch snob snobbish snooker snoop snootier snootiest snooty snooze snore snorkel snort snot snout snowball snowdrift snowfall snowflake snowier snowiest snowplow snowstorm snowy snub snuff snug snuggest snuggle soak soapier soapiest soapy soar sobbed sobbing soberest sobriety sobs soccer sociable socialize sociological sociologist sociology soda sodded sodden sodding sodium sodomy sods sofa softball soften softest softness soggier soggiest soggy sojourn solace solemn solemnest solemnity solicit solicitous solidarity solidest solidify solidity solitaire solitary solitude soloist soluble solvent somber someday somersault sonata sonic sonnet sonorous soot soothe sootier sootiest sooty sophistication sophistry sophomore sopped sopping soprano sops sorcerer sorceress sorcery sorest sorority sorrier sorriest sorrow sorrowful sorta soundest soundproof sour sourest southeast southeastern southerly southpaw southward southwest southwestern souvenir sovereign sovereignty sowed sowing sown sows spacecraft spaceship spacial spacious spade spaghetti spangle spaniel spank spar sparest spark sparkle sparrow sparse sparsest spas spasm spasmodic spat spate spatula spawn spay spear spearhead spearmint specialization specifier specious speck spectacle spectator specter spectra speculative speculator speechless speedboat speedier speediest speedometer speedy spellbind spellbound spendthrift sperm spew spherical sphinx spice spicier spiciest spicy spider spied spinach spinal spindlier spindliest spindly spine spineless spinster spire spiteful spitefullest spittle splash splat spleen splendidest splendor splice splint splurge spokesmen spokespeople spokesperson spokeswoman spokeswomen sponge spongier spongiest spongy sponsorship spontaneity spook spookier spookiest spooky spoon spoonful sporadic spore sporran sportsmanship spotless spotlight spottier spottiest spotty spouse sprain sprawl spreadsheet spree sprier spriest sprig springboard springier springiest springtime springy sprinkle sprint sprout spruce sprucest spry spud spun spunk spurn spurt sputter spying squabble squadron squalid squalidest squall squalor squander squarest squat squattest squawk squeak squeakier squeakiest squeaky squeal squeamish squelch squid squint squintest squire squirm squirrel squirt stab stabilize stablest stadium stag stagecoach stagnant stagnate stagnation staid staidest stain stairway stalemate stalest stalk stallion stalwart stamina stammer stampede stanch stanchest standardization standby standoff standstill stank stanza staple starboard starch starchier starchiest starchy stardom starfish starkest starlight starrier starriest starry starvation statelier stateliest statesman statesmanship statesmen stationery statistician statue stature statute statutory staunch staunchest stave steadfast steadier steadiest steak stealth stealthier stealthiest stealthily stealthy steamier steamiest steamroller steamy steepest steeple stellar stench stencil stenographer stenography stepladder sterilization sterilize stern sternest sternness stethoscope stew steward stewardess stickier stickiest stickler stiffen stiffest stiffness stifle stigma stigmata stillborn stillest stillness stilted stimulant stimuli stimulus sting stingier stingiest stinginess stingy stink stint stipulate stipulation stirrup stitch stockade stockbroker stockholder stockier stockiest stockpile stocky stockyard stodgier stodgiest stodgy stoical stoke stolid stolidest stomp stonier stoniest stony stool stoop stopgap stopover stoppage stopwatch storehouse storekeeper storeroom stork stormier stormiest stormy stout stoutest stove stow stowaway straddle straggle straighten straightest strait straitjacket strand strangeness strangle strangulation strap strata stratagem stratify stratosphere stratum strawberry streak streamline streetcar strenuous stressful strew strewn stricken strictest strictness stridden stride strife stringier stringiest stringy stripe striven strode stroll stronghold strove structuralist strum strung strut stub stubbier stubbiest stubble stubborn stubbornest stubby stud studentship studious stuffier stuffiest stuffy stump stung stunk stupefy stupendous stupidest stupor sturdier sturdiest sturdy stutter stylish stylistic stylus suave suavest subbed subbing subcommittee subconscious subdivide subdivision subdue subgroup subjugate subjunctive sublet sublime sublimest submarine submerge submersion submissive subnormal subordinate subprogram subs subscript subsection subservient subside subsidy subsist subsistence substandard substantiate subsystem subterfuge subterranean subtlest subtract subtraction suburb suburban subversive subvert succinct succinctest succor succulent succumb suck suckle suction suds suede suffocate suffocation suffrage sugarier sugariest sugary suggestive suitcase suitor sulfur sulk sulkier sulkiest sulky sullen sullenest sultan sultrier sultriest sultry summarily summit summon sumptuous sunbathe sunburn sundae sundial sundown sunflower sunglasses sunken sunlit sunned sunnier sunniest sunning suns sunscreen sunset suntan sunup superbest supercomputer superhuman superimpose superintendent superlative superscript supersede supersonic superstar superstition superstitious superstructure supervisory supper supplant supple supplest supportive supposition supremacy surcharge surest surf surfboard surge surgeon surgical surlier surliest surly surmise surmount surpass surreal surrender surreptitious surveillance surveyor survivor suspense sustainable sustenance swab swagger swampier swampiest swampy swan swarm swarthier swarthiest swarthy swat swathe sway sweaty sweepstakes sweeten sweetest sweetheart sweetness swell swellest swerve swift swiftest swig swill swindle swine swipe swirl swish swishest switchable switchboard swivel swollen swoon swoop swordfish swung syllable syllabus symbolism symbolize symmetrical sympathetically symphonic symptomatic synagogue synapse synchronization synchronize synchronous synopses synopsis syntheses synthesize synthetic syphilis syringe syrup systematically tabbed tabbing tabby tabernacle tablecloth tablespoon tablespoonful tablet tabloid taboo tabulate tabulation tacit taciturn tackier tackiest tacky taco tact tactful tadpole tagged tagging tags tailgate taillight tailspin taint takeoff takeover talc talisman talkative tallest tallow tally talon tambourine tameness tamest tamper tandem tang tangential tangerine tangible tangle tango tankard tanned tanner tannest tanning tans tantalize tantamount tantrum tapestry tapped tapping taps tarantula tardier tardiest tardiness tardy tariff tarnish tarpaulin tarred tarrier tarriest tarring tarry tars tart tartan tartar tartest tassel tasteful tastier tastiest tasty tattle tattoo tatty taunt taut tautest tautology tavern tawdrier tawdriest tawdry tawnier tawniest tawny taxable taxed taxicab taxing teacup teak teammate teamster teamwork teardrop tearful teas tease teaspoon teat technicality technician tedium teed teeing teem teen tees teeter teethe teetotal telecommunications telegram telegraph telepathic telepathy teletype televise telltale temperament temperamental temperance temperate tempest tempestuous template tempo temporal tenable tenacious tenacity tenancy tenant tenderest tenderize tenderness tendon tendril tenement tenet tenor tensest tensors tent tentacle tenuous tenure tepee tepid termini terminus termite terrace terrain terrestrial terrier terrific territorial terrorize terseness tersest testable testament testicle testify testimonial testimony testis tetanus tether textile texture thankless thatch thaw theatrical theist thence theologian theoretic theorist theorize therapeutic therapist thereon thereupon thermal thermodynamics thermometer thermostat thesauri thesaurus theta thicken thickest thicket thigh thimble thinnest thirstier thirstiest thirsty thirteen thirteenth thirtieth thistle thong thorn thornier thorniest thorny thoroughbred thoroughest thoughtful thoughtfulness thoughtless thousandth thrash threadbare thresh thrice thrift thriftier thriftiest thrifty thrill thrive throb throne throng throttle throwaway throwback thud thug thumbtack thump thunder thunderbolt thunderous thunderstorm thunderstruck thwart thyme thyroid tiara tickle ticklish tidal tidbit tide tidier tidiest tier tiff tighten tightest tightness tightrope tightwad tilde tilt timber timekeeper timeless timelier timeliest timezone timid timidest timidity tinder ting tinge tingle tinier tiniest tinker tinkle tinned tinnier tinniest tinning tinny tinsel tint tipped tipping tipsier tipsiest tipsy tiptoe tirade tiredest tireless tissue titillate tits titter toadstool toboggan toddle toed toeing toenail toffee toga toil tolerable tolerably tomahawk tomb tomboy tombstone tomcat tonal tong tonic tonnage tonne tonsil tonsillitis toolkit toot toothache toothbrush toothpaste toothpick topaz topography topology topped topping topple torch torment tormentor tornado torpedo torque torrent torrential torrid torso tortilla tortoise tortuous totalitarian totalitarianism totality tote totem tots totted totter totting toucan touchdown touchier touchiest touchy toughen toughest toughness toupee tournament tourniquet tousle tout towed towel towing townspeople tows toxic toxin toyed toying tract traction tractor trademark traditionalist trafficked trafficking tragically trainee trait traitor traitorous tramp trample trampoline trance tranquil tranquilest tranquility tranquilize transact transatlantic transcend transcontinental transcribe transcription transferable transfusion transgress transgression transistor transitional transitive transitory transliteration translucent transparency transpire transplant transportable transportation transpose transverse trapdoor trapeze trapezoid trashier trashiest trashy trauma traumatic traumatize traverse travesty trawl treacherous treachery treacle treadmill treason treasury treatise treble trellis tremble tremor trench trendier trendiest trepidation trespass trestle triangular tribal tribulation tribunal tributary tribute trickery trickier trickiest trickle trickster tricycle trigonometry trill trillion trim trimester trimmest trinket trio tripe triplet triplicate tripod trite tritest triumphant triviality trod trodden troll trombone trophy tropical trot troublemaker troublesome trough trounce troupe trout trowel truancy truant truce trudge truest truffle truism trump truncation trustee trustful trustier trustiest trustworthier trustworthiest trustworthy truthful truthfulness tryout tuba tuberculosis tubs tubular tuck tuft tugged tugging tugs tuition tulip tumble tummy tumor tumult tumultuous tuna tundra tuneful tunic turban turbine turbulence turbulent tureen turf turgid turkey turmoil turnaround turnip turnout turnover turnpike turnstile turpentine turquoise turret turtle turtleneck tusk tussle tuxedo twang tweak twee tweet tweezers twelfth twiddle twig twilight twine twinge twinkle twirl twitch twitter twos tycoon typeface typescript typhoid typhoon typhus typify typist typographic typographical tyrannical tyrannize tyranny tyrant ubiquitous udder uglier ugliest ugliness ulcer ulterior ultimatum ultra ultrasonic ultraviolet umpire umpteen unacceptably unaccepted unaccountable unaccountably unadulterated unaltered unanimity unanimous unanswerable unanswered unarmed unassigned unassuming unattached unattainable unattractive unbearably unbeatable unbecoming unbeliever unblock unborn unbreakable unbroken unburden uncannier uncanniest uncanny unceasing unchallenged uncharitable unchristian unclean uncleanest uncomfortably uncommonest uncompromising unconcerned unconditional unconfirmed unconstitutional uncontrollable uncontrolled uncontroversial unconventional unconvinced uncountable uncouth uncover uncultured uncut undamaged undaunted undecidable undecided undemocratic undeniable undeniably underbrush undercover undercurrent undercut underdog underflow underfoot undergarment undergrowth underhanded undermine undernourished underpants underpass underprivileged underrate underscore undershirt underside understandably understate understatement understudy undertone undertow underwater underwear underweight underworld underwrite underwritten underwrote undeserved undetected undeveloped undisturbed undoubted undress undue undying unearth uneasier uneasiest uneasily uneasiness uneconomic uneconomical uneducated unemployable unenlightened unequal unequivocal unerring unethical uneven uneventful unfailing unfairest unfaithful unfasten unfavorable unfeasible unfeeling unfilled unfit unfold unforeseen unforgettable unforgivable unfriendlier unfriendliest unfunny unfurl ungainlier ungainliest ungainly ungodlier ungodliest ungodly ungrammatical ungrateful unhappier unhappiest unhappily unhappiness unhealthier unhealthiest unheard unhook unicorn unicycle unidentified unification uniformity unilateral unimaginative unimpressed uninformative uninformed uninhibited uninitiated uninspired uninspiring unintelligent unintelligible unintended unintentional uninterested unionize uniqueness uniquest unison unjust unjustifiable unkempt unkind unkindest unkindlier unkindliest unlabeled unlawful unleash unlikelier unlikeliest unluckier unluckiest unman unmarked unmarried unmask unmistakable unmistakably unmitigated unmodified unmoved unnamed unnerve unnoticed unoccupied unoriginal unorthodox unpack unpaid unparalleled unpick unpleasantness unpopularity unprecedented unprepared unprincipled unprintable unprivileged unprotected unproven unprovoked unpublished unqualified unquestionable unquestionably unravel unreal unreasonably unrecognized unrelenting unreliability unremarkable unrepeatable unrepresentative unreservedly unresolved unrest unrestricted unrivaled unruffled unrulier unruliest unruly unsafest unsaid unsanitary unsatisfied unsavory unsay unscathed unscheduled unscientific unscrew unscrupulous unseasonable unseat unseemlier unseemliest unseemly unsettle unsightlier unsightliest unsightly unsigned unskilled unsolved unsophisticated unsoundest unspeakable unstructured unstuck unsubstantiated unsuited unsung unsupportable untangle untenable unthinkable untidier untidiest untie untiring untold untouched untrained untruest untrustworthy untying unveil unwarranted unwary unwashed unwell unwieldier unwieldiest unwieldy unwillingness unwind unwisest unwittingly unworthy unwound unwrap unwritten upbeat upend upheaval upheld uphill uphold upholster upholstery upkeep uplift upload upped uppermost upping uprising uproar uproot upshot upstanding upstart upstream uptake uptight uptown upturn uranium urbane urbanest urchin urinate urine urns uselessness usher usurp utensil uteri uterus utilitarian utilitarianism utilization utilize utmost utterance vacant vacate vaccinate vaccination vaccine vacillate vacuous vagabond vagary vagina vaginae vaginal vagrant vagueness vaguest vainest valentine valet valiant validate validation valise valor valueless vampire vandal vandalize vane vanguard vanilla vanity vanned vanning vanquish vapor vaporize varnish varsity vase vastest vastness vats vatted vatting vault veal veer vegetarianism vegetation vehement veil velour velvet velvety veneer venerable venerate veneration vengeance vengeful venison venom venomous vent ventilate ventilation ventilator ventricle ventriloquist veracity veranda verbiage verbosity verge verier veriest veritable vermin vernacular versatility vertebra vertebrae vertebrate vertices vertigo verve vest vestibule vestige vestment veteran veterinarian veterinary veto vets vetted vetting vexation vexed vexes vexing viability viaduct vial vibrant vibrate vibration vicarious victimize victor victorious videotape vied vies vigil vigilance vigilant vigilante vigor vigorous vilest vilify villa villain villainous villainy vindicate vindictive vine vinegar vineyard viola violet viper viral virginity virile virility virtuoso virtuous virulent visa vise visibility visibly visionary visitation visor vista visualize vitality vitamin vitriolic vivacious vivacity vivid vividest vivisection vocalist vocation vocational vociferous vodka vogue volatile volcanic volcano volition volley volleyball volt voluminous voluptuous voodoo voracious vortex vowed vowing vows voyage vulgar vulgarest vulgarity vulnerability vulture vying wadded wadding waddle wads wafer waft wagged wagging wagon wags waif wail waist waistline waitress waive waken walkout wallop wallow wallpaper walnut walrus waltz wand wane wanna wanner wannest wanton warble warden wardrobe warfare warhead warier wariest warlike warmest warmth warpath warred warren warring warrior wart washable washcloth washout washroom wasp wastage wastebasket wasteland watchdog watchful watchman watchmen watchword watercolor waterfall waterfront waterier wateriest waterlogged watermark watermelon waterproof watershed watertight waterway waterworks watery watt waveform wavelength wavier waviest wavy waxed waxes waxier waxiest waxing waxy waylaid waylay wayside wayward weaken weakest weakling wealthier wealthiest wean weaponry wearier weariest wearily weariness wearisome weave webbed webbing webs wedder wedge wedlock weed weedier weediest weedy weeing weep weer wees weest weightier weightiest weighty weirdest weirdness weirdo weld wellington welt wept werewolf werewolves westerly westward wetter wettest whack wharf wharves wheat wheedle wheelbarrow wheelchair wheeze whereabouts wherein wherewithal whet whew whiff whimper whimsical whine whinny whip whir whirl whirlpool whirlwind whisk whiskys whisper whiten whiteness whitest whitewash whittle whiz whizzes whoa wholehearted wholesale wholesome whopper whore whys wick wickedest wickedness wicket widen widow wield wigged wigging wiggle wigs wigwam wildcat wilderness wildest wildfire wildlife wildness wilier wiliest willful willingness willow willpower wilt wily wince winch windfall windier windiest windmill windowpane windpipe windscreen windshield windy wink winsome winsomest wintertime wintrier wintriest wintry wirier wiriest wiry wisecrack wishbone wishful wisp wispier wispiest wispy wist wistful witchcraft withheld withhold withstand withstood witless wits witticism wittier wittiest witting wizened wobble wobblier wobbliest wobbly woes woks wolves womanhood womankind womb wonderland woodchuck woodenest woodier woodiest woodland woodpecker woodsman woodsmen woodwind woodwork woody wooed woof wooing wool woolen woollier woolliest woos wordier wordiest wordy workbench workbook workforce workman workmanship workmen workout workplace worldlier worldliest wormhole worrisome worsen worthier worthiest wove woven wowed wowing wows wrangle wreak wreath wreathe wreckage wrench wrest wrestle wretch wretchedest wriggle wright wring wrinkle wristwatch writ writable writhe wrongdoer wrongdoing wrongest wrought wrung wryer wryest xenophobia xylophone yacht yakked yakking yaks yams yank yapped yapping yaps yardstick yarn yearling yearn yeast yell yellowest yelp yens yeses yessed yessing yews yodel yoga yogurt yoke yokel yolk yonder youngster yous youthful yowl yuck zanier zaniest zany zeal zealous zebra zenith zest zeta zigzag zillion zinc zincked zincking zipped zipper zipping zips zodiac zombie zoological zoologist zoology zoos zucchini",
7}
8export const KS = "가각간갇갈갉갊감갑값갓갔강갖갗같갚갛개객갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫났낭낮낯낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫달닭닮닯닳담답닷닸당닺닻닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많맏말맑맒맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바박밖밗반받발밝밞밟밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤샥샨샬샴샵샷샹섀섄섈섐섕서석섞섟선섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄업없엇었엉엊엌엎에엑엔엘엠엡엣엥여역엮연열엶엷염엽엾엿였영옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응읒읓읔읕읖읗의읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝"
9core/layout-data.ts 236 lines1// 자동 생성 파일: tools/gen-layout.mjs (직접 고치지 말고 생성기를 고칠 것)
2// 출처: libhangul (https://github.com/libhangul/libhangul) data/keyboards/hangul-keyboard-{2,39,3f}.xml.template
3// commit 5094421d9586294b2aad09924b9a54e2e6060f06 (2026-09-14)
4// 검증 상태 (2026-10-04, 키별 대조. KS X 5002 PDF·한글문화원 인쇄 도표는 구하지 못함 → 표준 원문 대조는 미확인):
5// - 두벌식 자모 52키: libhangul = GNU Emacs lisp/leim/quail/hangul.el (2-bulsik) = uim scm/byeoru.scm (hangul2). 불일치 0.
6// - 세벌식 390 자모+기호: libhangul = Emacs (390) = uim (strict390). 불일치 0.
7// - 세벌식 최종 자모: libhangul = Emacs (final) = uim (strict3final). 불일치 0.
8// - 세벌식 최종 기호: Emacs와 전부 일치. uim만 '|' 가 ₩ (libhangul·Emacs는 백슬래시). 그 행에만 적었다.
9// - 항등 매핑(키가 자기 문자로 나오는 것)은 생략했다. 표에 없는 키 = 그대로 통과.
10import { cho, cons, jong, jung, lit } from './keydef'
11import type { KeyDef } from './keydef'
12
13/** 두벌식 (KS X 5002). cons = 초성·종성 겸용 자음. */
14export const DUBEOLSIK: Readonly<Record<string, KeyDef>> = {
15 "A": cons('ㅁ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
16 "B": jung('ㅠ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
17 "C": cons('ㅊ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
18 "D": cons('ㅇ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
19 "E": cons('ㄸ'),
20 "F": cons('ㄹ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
21 "G": cons('ㅎ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
22 "H": jung('ㅗ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
23 "I": jung('ㅑ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
24 "J": jung('ㅓ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
25 "K": jung('ㅏ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
26 "L": jung('ㅣ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
27 "M": jung('ㅡ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
28 "N": jung('ㅜ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
29 "O": jung('ㅒ'),
30 "P": jung('ㅖ'),
31 "Q": cons('ㅃ'),
32 "R": cons('ㄲ'),
33 "S": cons('ㄴ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
34 "T": cons('ㅆ'),
35 "U": jung('ㅕ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
36 "V": cons('ㅍ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
37 "W": cons('ㅉ'),
38 "X": cons('ㅌ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
39 "Y": jung('ㅛ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
40 "Z": cons('ㅋ'), // 대문자=소문자와 동일 (libhangul·Emacs·uim 일치, KS X 5002 원문 미확인)
41 "a": cons('ㅁ'),
42 "b": jung('ㅠ'),
43 "c": cons('ㅊ'),
44 "d": cons('ㅇ'),
45 "e": cons('ㄷ'),
46 "f": cons('ㄹ'),
47 "g": cons('ㅎ'),
48 "h": jung('ㅗ'),
49 "i": jung('ㅑ'),
50 "j": jung('ㅓ'),
51 "k": jung('ㅏ'),
52 "l": jung('ㅣ'),
53 "m": jung('ㅡ'),
54 "n": jung('ㅜ'),
55 "o": jung('ㅐ'),
56 "p": jung('ㅔ'),
57 "q": cons('ㅂ'),
58 "r": cons('ㄱ'),
59 "s": cons('ㄴ'),
60 "t": cons('ㅅ'),
61 "u": jung('ㅕ'),
62 "v": cons('ㅍ'),
63 "w": cons('ㅈ'),
64 "x": cons('ㅌ'),
65 "y": jung('ㅛ'),
66 "z": cons('ㅋ'),
67}
68
69/** 세벌식 390 (libhangul id "39"). cho/jung/jong 은 키마다 고정된 역할. */
70export const SEBEOLSIK_390: Readonly<Record<string, KeyDef>> = {
71 "!": jong('ㅈ'),
72 "'": cho('ㅌ'),
73 "/": jung('ㅗ'),
74 "0": cho('ㅋ'),
75 "1": jong('ㅎ'),
76 "2": jong('ㅆ'),
77 "3": jong('ㅂ'),
78 "4": jung('ㅛ'),
79 "5": jung('ㅠ'),
80 "6": jung('ㅑ'),
81 "7": jung('ㅖ'),
82 "8": jung('ㅢ'),
83 "9": jung('ㅜ'),
84 ";": cho('ㅂ'),
85 "<": lit("2"),
86 ">": lit("3"),
87 "A": jong('ㄷ'),
88 "B": lit("!"),
89 "C": jong('ㄻ'),
90 "D": jong('ㄺ'),
91 "E": jong('ㅋ'),
92 "F": jong('ㄲ'),
93 "G": lit("/"),
94 "H": lit("'"),
95 "I": lit("8"),
96 "J": lit("4"),
97 "K": lit("5"),
98 "L": lit("6"),
99 "M": lit("1"),
100 "N": lit("0"),
101 "O": lit("9"),
102 "P": lit(">"),
103 "Q": jong('ㅍ'),
104 "R": jung('ㅒ'),
105 "S": jong('ㄶ'),
106 "T": lit(";"),
107 "U": lit("7"),
108 "V": jong('ㅀ'),
109 "W": jong('ㅌ'),
110 "X": jong('ㅄ'),
111 "Y": lit("<"),
112 "Z": jong('ㅊ'),
113 "a": jong('ㅇ'),
114 "b": jung('ㅜ'),
115 "c": jung('ㅔ'),
116 "d": jung('ㅣ'),
117 "e": jung('ㅕ'),
118 "f": jung('ㅏ'),
119 "g": jung('ㅡ'),
120 "h": cho('ㄴ'),
121 "i": cho('ㅁ'),
122 "j": cho('ㅇ'),
123 "k": cho('ㄱ'),
124 "l": cho('ㅈ'),
125 "m": cho('ㅎ'),
126 "n": cho('ㅅ'),
127 "o": cho('ㅊ'),
128 "p": cho('ㅍ'),
129 "q": jong('ㅅ'),
130 "r": jung('ㅐ'),
131 "s": jong('ㄴ'),
132 "t": jung('ㅓ'),
133 "u": cho('ㄷ'),
134 "v": jung('ㅗ'),
135 "w": jong('ㄹ'),
136 "x": jong('ㄱ'),
137 "y": cho('ㄹ'),
138 "z": jong('ㅁ'),
139}
140
141/** 세벌식 최종 (libhangul id "3f"). */
142export const SEBEOLSIK_FINAL: Readonly<Record<string, KeyDef>> = {
143 "!": jong('ㄲ'),
144 "\"": lit("·"),
145 "#": jong('ㅈ'),
146 "$": jong('ㄿ'),
147 "%": jong('ㄾ'),
148 "&": lit("“"),
149 "'": cho('ㅌ'),
150 "(": lit("'"),
151 ")": lit("~"),
152 "*": lit("”"),
153 "-": lit(")"),
154 "/": jung('ㅗ'),
155 "0": cho('ㅋ'),
156 "1": jong('ㅎ'),
157 "2": jong('ㅆ'),
158 "3": jong('ㅂ'),
159 "4": jung('ㅛ'),
160 "5": jung('ㅠ'),
161 "6": jung('ㅑ'),
162 "7": jung('ㅖ'),
163 "8": jung('ㅢ'),
164 "9": jung('ㅜ'),
165 ":": lit("4"),
166 ";": cho('ㅂ'),
167 "<": lit(","),
168 "=": lit(">"),
169 ">": lit("."),
170 "?": lit("!"),
171 "@": jong('ㄺ'),
172 "A": jong('ㄷ'),
173 "B": lit("?"),
174 "C": jong('ㅋ'),
175 "D": jong('ㄼ'),
176 "E": jong('ㄵ'),
177 "F": jong('ㄻ'),
178 "G": jung('ㅒ'),
179 "H": lit("0"),
180 "I": lit("7"),
181 "J": lit("1"),
182 "K": lit("2"),
183 "L": lit("3"),
184 "M": lit("\""),
185 "N": lit("-"),
186 "O": lit("8"),
187 "P": lit("9"),
188 "Q": jong('ㅍ'),
189 "R": jong('ㅀ'),
190 "S": jong('ㄶ'),
191 "T": jong('ㄽ'),
192 "U": lit("6"),
193 "V": jong('ㄳ'),
194 "W": jong('ㅌ'),
195 "X": jong('ㅄ'),
196 "Y": lit("5"),
197 "Z": jong('ㅊ'),
198 "[": lit("("),
199 "\\": lit(":"),
200 "]": lit("<"),
201 "^": lit("="),
202 "_": lit(";"),
203 "`": lit("*"),
204 "a": jong('ㅇ'),
205 "b": jung('ㅜ'),
206 "c": jung('ㅔ'),
207 "d": jung('ㅣ'),
208 "e": jung('ㅕ'),
209 "f": jung('ㅏ'),
210 "g": jung('ㅡ'),
211 "h": cho('ㄴ'),
212 "i": cho('ㅁ'),
213 "j": cho('ㅇ'),
214 "k": cho('ㄱ'),
215 "l": cho('ㅈ'),
216 "m": cho('ㅎ'),
217 "n": cho('ㅅ'),
218 "o": cho('ㅊ'),
219 "p": cho('ㅍ'),
220 "q": jong('ㅅ'),
221 "r": jung('ㅐ'),
222 "s": jong('ㄴ'),
223 "t": jung('ㅓ'),
224 "u": cho('ㄷ'),
225 "v": jung('ㅗ'),
226 "w": jong('ㄹ'),
227 "x": jong('ㄱ'),
228 "y": cho('ㄹ'),
229 "z": jong('ㅁ'),
230 "{": lit("%"),
231 "|": lit("\\"), // uim byeoru만 "₩". libhangul·Emacs hangul.el은 이 값. KS/문화원 원문 미확인
232 "}": lit("/"),
233 "~": lit("※"),
234}
235
236