Last active
December 31, 2019 21:44
-
-
Save marcmartino/608961ff5cf0d3d635c75a8c961ef1bf to your computer and use it in GitHub Desktop.
hangul jamo info
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export enum jamoAttr { | |
consonant, | |
vowel, | |
singleJamo, | |
doubleJamo, | |
composedJamo, | |
validInitialPosition, | |
validFinalPosition, | |
verticalVowel, | |
horizontalVowel, | |
dipthong | |
} | |
type LeadingOrTrailingConsonants = | |
| "ㄱ" | |
| "ㄲ" | |
| "ㄴ" | |
| "ㄷ" | |
| "ㄹ" | |
| "ㅁ" | |
| "ㅂ" | |
| "ㅅ" | |
| "ㅆ" | |
| "ㅇ" | |
| "ㅈ" | |
| "ㅊ" | |
| "ㅋ" | |
| "ㅌ" | |
| "ㅍ" | |
| "ㅎ"; | |
type LeadingOnlyConsonants = "ㄸ" | "ㅃ" | "ㅉ"; | |
type TrailingOnlyConsonants = | |
| "ㄳ" | |
| "ㄵ" | |
| "ㄶ" | |
| "ㄺ" | |
| "ㄻ" | |
| "ㄼ" | |
| "ㄽ" | |
| "ㄾ" | |
| "ㄿ" | |
| "ㅀ" | |
| "ㅄ"; | |
export interface jamoObject { | |
attributes: jamoAttr[]; | |
name: { hangul: string; romanized: string }; | |
} | |
export interface jamoPositionDescription { | |
romanization: string; | |
ipa: string; | |
} | |
interface LeadingOnlyConsonant extends jamoObject { | |
initial: jamoPositionDescription; | |
} | |
interface LeadingOrTrailingConsonant extends jamoObject { | |
initial: jamoPositionDescription; | |
final: jamoPositionDescription; | |
} | |
interface TrailingOnlyConsonant extends jamoObject { | |
final: jamoPositionDescription; | |
} | |
export const consonants: { | |
[jamo in LeadingOrTrailingConsonants]: LeadingOrTrailingConsonant; | |
} & | |
{ [jamo in LeadingOnlyConsonants]: LeadingOnlyConsonant } & | |
{ [jamo in TrailingOnlyConsonants]: TrailingOnlyConsonant } = { | |
ㄱ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "기역", romanized: "giyeok" }, | |
initial: { | |
romanization: "g", | |
ipa: "/k/" | |
}, | |
final: { | |
romanization: "k", | |
ipa: "[k̚]" | |
} | |
}, | |
ㄲ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.doubleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "쌍기역", romanized: "ssanggieok" }, | |
initial: { | |
romanization: "kk", | |
ipa: "/k͈/" | |
}, | |
final: { romanization: "k", ipa: "[k̚]" } | |
}, | |
ㄴ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "니은", romanized: "nieun" }, | |
initial: { | |
romanization: "n", | |
ipa: "/n/" | |
}, | |
final: { romanization: "n", ipa: "/n/" } | |
}, | |
ㄷ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "디귿", romanized: "dikeut" }, | |
initial: { | |
romanization: "d", | |
ipa: "/t/" | |
}, | |
final: { romanization: "t", ipa: "[t̚]" } | |
}, | |
ㄸ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.doubleJamo, | |
jamoAttr.validInitialPosition | |
], | |
name: { hangul: "쌍디귿", romanized: "ssangdikeut" }, | |
initial: { | |
romanization: "tt", | |
ipa: "/t͈/" | |
} | |
}, | |
ㄹ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "리을", romanized: "rieul" }, | |
initial: { | |
romanization: "r", | |
ipa: "/ɾ/" | |
}, | |
final: { romanization: "l", ipa: "[l]" } | |
}, | |
ㅁ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "미음", romanized: "mieum" }, | |
initial: { | |
romanization: "m", | |
ipa: "/m/" | |
}, | |
final: { romanization: "m", ipa: "/m/" } | |
}, | |
ㅂ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "비읍", romanized: "bieup" }, | |
initial: { | |
romanization: "b", | |
ipa: "/p/" | |
}, | |
final: { romanization: "p", ipa: "[p̚]" } | |
}, | |
ㅃ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.doubleJamo, | |
jamoAttr.validInitialPosition | |
], | |
name: { hangul: "쌍비읍", romanized: "ssangbieup" }, | |
initial: { | |
romanization: "pp", | |
ipa: "/p͈/" | |
} | |
}, | |
ㅅ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "시옷", romanized: "siot" }, | |
initial: { | |
romanization: "s", | |
ipa: "/s/" | |
}, | |
final: { romanization: "t", ipa: "[t̚]" } | |
}, | |
ㅆ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.doubleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "쌍시옷", romanized: "ssangsiot" }, | |
initial: { | |
romanization: "ss", | |
ipa: "/s͈/" | |
}, | |
final: { romanization: "t", ipa: "[t̚]" } | |
}, | |
ㅇ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "이응", romanized: "ieung" }, | |
initial: { | |
romanization: "", | |
ipa: "" | |
}, | |
final: { romanization: "ng", ipa: "/ŋ/" } | |
}, | |
ㅈ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "지읒", romanized: "jieut" }, | |
initial: { | |
romanization: "j", | |
ipa: "/tɕ/" | |
}, | |
final: { romanization: "t", ipa: "[t̚]" } | |
}, | |
ㅉ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.doubleJamo, | |
jamoAttr.validInitialPosition | |
], | |
name: { hangul: "쌍지읒", romanized: "ssangjieut" }, | |
initial: { | |
romanization: "jj", | |
ipa: "/t͈ɕ/" | |
} | |
}, | |
ㅊ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "치읓", romanized: "chieut" }, | |
initial: { | |
romanization: "ch", | |
ipa: "/tɕʰ/" | |
}, | |
final: { romanization: "t", ipa: "[t̚]" } | |
}, | |
ㅋ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "키읔", romanized: "kieuk" }, | |
initial: { | |
romanization: "ḳ", | |
ipa: "/kʰ/" | |
}, | |
final: { romanization: "k", ipa: "[k̚]" } | |
}, | |
ㅌ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "티읕", romanized: "tieut" }, | |
initial: { | |
romanization: "t", | |
ipa: "/tʰ/" | |
}, | |
final: { romanization: "t", ipa: "[t̚]" } | |
}, | |
ㅍ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "피읖", romanized: "pieup" }, | |
initial: { | |
romanization: "p̣", | |
ipa: "/pʰ/" | |
}, | |
final: { romanization: "p", ipa: "[p̚] " } | |
}, | |
ㅎ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.singleJamo, | |
jamoAttr.validInitialPosition, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "히읗", romanized: "hieuh" }, | |
initial: { | |
romanization: "h", | |
ipa: "/h/" | |
}, | |
final: { romanization: "t", ipa: "[t̚]" } | |
}, | |
ㄳ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.composedJamo, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "기역-시옷", romanized: "giyeok-siot" }, | |
final: { romanization: "gs", ipa: "" } | |
}, | |
ㄵ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.composedJamo, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "니은-", romanized: "nieun" }, | |
final: { romanization: "nj", ipa: "" } | |
}, | |
ㄶ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.composedJamo, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "니은-", romanized: "nieun" }, | |
final: { romanization: "nh", ipa: "" } | |
}, | |
ㄺ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.composedJamo, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "리을-기역", romanized: "rieul-giyeok" }, | |
final: { romanization: "lg", ipa: "[k̚]" } | |
}, | |
ㄻ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.composedJamo, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "리을-미음", romanized: "rieul-mieum" }, | |
final: { romanization: "lm", ipa: "" } | |
}, | |
ㄼ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.composedJamo, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "리을-비읍", romanized: "rieul-bieup" }, | |
final: { romanization: "lb", ipa: "" } | |
}, | |
ㄽ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.composedJamo, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "리을-티읕", romanized: "rieul-tieut" }, | |
final: { romanization: "ls", ipa: "" } | |
}, | |
ㄾ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.composedJamo, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "리을-", romanized: "rieul-" }, | |
final: { romanization: "lt", ipa: "" } | |
}, | |
ㄿ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.composedJamo, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "리을-피읖", romanized: "rieul-pieup" }, | |
final: { romanization: "lp", ipa: "" } | |
}, | |
ㅀ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.composedJamo, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "리을-히읗", romanized: "rieul-hieuh" }, | |
final: { romanization: "lh", ipa: "" } | |
}, | |
ㅄ: { | |
attributes: [ | |
jamoAttr.consonant, | |
jamoAttr.composedJamo, | |
jamoAttr.validFinalPosition | |
], | |
name: { hangul: "비읍-시옷", romanized: "bieup-siot" }, | |
final: { romanization: "bs", ipa: "" } | |
} | |
}; | |
export const vowels = {}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { jamoObject, jamoAttr, jamoPositionDescription } from "./consonantJamo"; | |
type SingleVowels = | |
| "ㅏ" | |
| "ㅑ" | |
| "ㅓ" | |
| "ㅕ" | |
| "ㅗ" | |
| "ㅛ" | |
| "ㅜ" | |
| "ㅠ" | |
| "ㅡ" | |
| "ㅣ"; | |
type CompositeVowels = | |
| "ㅐ" | |
| "ㅒ" | |
| "ㅔ" | |
| "ㅖ" | |
| "ㅘ" | |
| "ㅙ" | |
| "ㅚ" | |
| "ㅝ" | |
| "ㅞ" | |
| "ㅟ" | |
| "ㅢ"; | |
interface vowel extends jamoObject { | |
medial: jamoPositionDescription; | |
} | |
export const vowels: { | |
[jamo in SingleVowels]: vowel; | |
} & | |
{ [jamo in CompositeVowels]: vowel } = { | |
ㅏ: { | |
attributes: [jamoAttr.vowel, jamoAttr.verticalVowel, jamoAttr.singleJamo], | |
name: { hangul: "아", romanized: "ah" }, | |
medial: { romanization: "a", ipa: "/a/" } | |
}, | |
ㅑ: { | |
attributes: [ | |
jamoAttr.vowel, | |
jamoAttr.verticalVowel, | |
jamoAttr.singleJamo, | |
jamoAttr.dipthong | |
], | |
name: { hangul: "야", romanized: "yah" }, | |
medial: { romanization: "ya", ipa: "/ja/" } | |
}, | |
ㅓ: { | |
attributes: [jamoAttr.vowel, jamoAttr.verticalVowel, jamoAttr.singleJamo], | |
name: { hangul: "어", romanized: "eoh" }, | |
medial: { romanization: "eo", ipa: "/ʌ/" } | |
}, | |
ㅕ: { | |
attributes: [ | |
jamoAttr.vowel, | |
jamoAttr.verticalVowel, | |
jamoAttr.singleJamo, | |
jamoAttr.dipthong | |
], | |
name: { hangul: "여", romanized: "" }, | |
medial: { romanization: "yeo", ipa: "/jʌ/" } | |
}, | |
ㅗ: { | |
attributes: [jamoAttr.vowel, jamoAttr.horizontalVowel, jamoAttr.singleJamo], | |
name: { hangul: "오", romanized: "oh" }, | |
medial: { romanization: "o", ipa: "/o/" } | |
}, | |
ㅛ: { | |
attributes: [ | |
jamoAttr.vowel, | |
jamoAttr.horizontalVowel, | |
jamoAttr.singleJamo, | |
jamoAttr.dipthong | |
], | |
name: { hangul: "요", romanized: "yoh" }, | |
medial: { romanization: "yo", ipa: "/jo/" } | |
}, | |
ㅜ: { | |
attributes: [jamoAttr.vowel, jamoAttr.horizontalVowel, jamoAttr.singleJamo], | |
name: { hangul: "우", romanized: "oo" }, | |
medial: { romanization: "u", ipa: "/u/" } | |
}, | |
ㅠ: { | |
attributes: [ | |
jamoAttr.vowel, | |
jamoAttr.horizontalVowel, | |
jamoAttr.singleJamo, | |
jamoAttr.dipthong | |
], | |
name: { hangul: "유", romanized: "you" }, | |
medial: { romanization: "yu", ipa: "/ju/" } | |
}, | |
ㅡ: { | |
attributes: [jamoAttr.vowel, jamoAttr.horizontalVowel, jamoAttr.singleJamo], | |
name: { hangul: "으", romanized: "eu" }, | |
medial: { romanization: "eu", ipa: "/ɯ/" } | |
}, | |
ㅣ: { | |
attributes: [jamoAttr.vowel, jamoAttr.verticalVowel, jamoAttr.singleJamo], | |
name: { hangul: "이", romanized: "ee" }, | |
medial: { romanization: "i", ipa: "/i/" } | |
}, | |
ㅐ: { | |
attributes: [jamoAttr.vowel, jamoAttr.verticalVowel, jamoAttr.composedJamo], | |
name: { hangul: "애", romanized: "ah" }, | |
medial: { romanization: "ae", ipa: "/ɛ/" } | |
}, | |
ㅒ: { | |
attributes: [ | |
jamoAttr.vowel, | |
jamoAttr.verticalVowel, | |
jamoAttr.composedJamo, | |
jamoAttr.dipthong | |
], | |
name: { hangul: "얘", romanized: "yae" }, | |
medial: { romanization: "yae", ipa: "/jɛ/" } | |
}, | |
ㅔ: { | |
attributes: [jamoAttr.vowel, jamoAttr.verticalVowel, jamoAttr.composedJamo], | |
name: { hangul: "에", romanized: "eh" }, | |
medial: { romanization: "e", ipa: "/e/" } | |
}, | |
ㅖ: { | |
attributes: [ | |
jamoAttr.vowel, | |
jamoAttr.verticalVowel, | |
jamoAttr.composedJamo, | |
jamoAttr.dipthong | |
], | |
name: { hangul: "예", romanized: "yeh" }, | |
medial: { romanization: "ye", ipa: "/je/" } | |
}, | |
ㅘ: { | |
attributes: [ | |
jamoAttr.vowel, | |
jamoAttr.horizontalVowel, | |
jamoAttr.composedJamo, | |
jamoAttr.dipthong | |
], | |
name: { hangul: "와", romanized: "wa" }, | |
medial: { romanization: "wa", ipa: "/wa/" } | |
}, | |
ㅙ: { | |
attributes: [ | |
jamoAttr.vowel, | |
jamoAttr.horizontalVowel, | |
jamoAttr.composedJamo, | |
jamoAttr.dipthong | |
], | |
name: { hangul: "왜", romanized: "wae" }, | |
medial: { romanization: "wae", ipa: "/wɛ/" } | |
}, | |
ㅚ: { | |
attributes: [ | |
jamoAttr.vowel, | |
jamoAttr.horizontalVowel, | |
jamoAttr.composedJamo | |
], | |
name: { hangul: "외", romanized: "we" }, | |
medial: { romanization: "oe", ipa: "/ø/" } | |
}, | |
ㅝ: { | |
attributes: [ | |
jamoAttr.vowel, | |
jamoAttr.horizontalVowel, | |
jamoAttr.composedJamo, | |
jamoAttr.dipthong | |
], | |
name: { hangul: "워", romanized: "weo" }, | |
medial: { romanization: "wo", ipa: "/wʌ/" } | |
}, | |
ㅞ: { | |
attributes: [ | |
jamoAttr.vowel, | |
jamoAttr.horizontalVowel, | |
jamoAttr.composedJamo, | |
jamoAttr.dipthong | |
], | |
name: { hangul: "웨", romanized: "we" }, | |
medial: { romanization: "we", ipa: "/we/" } | |
}, | |
ㅟ: { | |
attributes: [ | |
jamoAttr.vowel, | |
jamoAttr.horizontalVowel, | |
jamoAttr.composedJamo | |
], | |
name: { hangul: "위", romanized: "wi" }, | |
medial: { romanization: "wi", ipa: "/wi ~ y/" } | |
}, | |
ㅢ: { | |
attributes: [ | |
jamoAttr.vowel, | |
jamoAttr.horizontalVowel, | |
jamoAttr.composedJamo, | |
jamoAttr.dipthong | |
], | |
name: { hangul: "의", romanized: "eui" }, | |
medial: { romanization: "ui", ipa: "/ɰi/" } | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment