metadata {

authority_id: moct
id: 2000-viajamo
language: iso-639-2:kor
source_script: Hang
destination_script: Latn
name: Ministry of Culture and Tourism Korean Romanization System (2000)
url: https://www.korean.go.kr/front_eng/roman/roman_01.do
creation_date: 2000
adoption_date: 2002
description: |
  Generation of Jamo from Hangul

  This is how the Hangul-to-Jamo maps are generated. Please refer to this page
  for details about Korean text handling in Unicode.
  http://gernot-katzers-spice-pages.com/var/korean_hangul_unicode.html

  This formula copied from the page above is used:
  [stem]
  ====
  tail = mod (Hangul codepoint − 44032, 28)
  vowel = 1 + mod (Hangul codepoint − 44032 − tail, 588) / 28
  lead = 1 + int [ (Hangul codepoint − 44032)/588 ]
  ====

  [source,python]
  ----
  import pandas as pd
  import re
  import math

  leadjamo = [chr(0x1100+i) for i in range(0,19)]
  # ᄀᄁᄂᄃᄄᄅᄆᄇᄈᄉᄊᄋᄌᄍᄎᄏᄐᄑᄒ
  voweljamo = [chr(0x1161+i) for i in range(0,21)]
  # ᅡᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ
  tailjamo = ['']+[chr(0x11A8+i) for i in range(0,27)]
  # ᆨᆩᆪᆫᆬᆭᆮᆯᆰᆱᆲᆳᆴᆵᆶᆷᆸᆹᆺᆻᆼᆽᆾᆿᇀᇁᇂ

  hanguls = [chr(i) for i in range(44032,55204)]
  tails = [tailjamo[(i-44032) % 28] for i in range(44032,55204)]
  vowels = [voweljamo[((i-44032-((i-44032) % 28)) % 588) // 28] for i in range(44032,55204)]
  leads = [leadjamo[math.floor((i-44032)// 588)] for i in range(44032,55204)]

  kr_df = pd.DataFrame({'Hangul':hanguls, 'Lead':leads,'Vowel':vowels, 'Tail':tails})
  ----

  Hangul      Lead    Vowel   Tail
  0   가       ᄀ       ᅡ
  1   각       ᄀ       ᅡ       ᆨ
  2   갂       ᄀ       ᅡ       ᆩ
  3   갃       ᄀ       ᅡ       ᆪ
  4   간       ᄀ       ᅡ       ᆫ
  5   갅       ᄀ       ᅡ       ᆬ
  6   갆       ᄀ       ᅡ       ᆭ
  7   갇       ᄀ       ᅡ       ᆮ
  8   갈       ᄀ       ᅡ       ᆯ
  9   갉       ᄀ       ᅡ       ᆰ

notes: []

}

tests {

test "불국사", "Bulguksa"
test "묵호", "Mukho"
test "울산", "Ulsan"
test "독립문", "Dongnimmun"
test "강남역", "Gangnamyeok"
test "남산리", "Namsan-ri" #Note: no assimilation for -ri even after nasals
test "내월리", "Naewol-ri"
test "울릉군", "Ulleung-gun"
test "설악산", "Seoraksan"
test "삼죽면", "Samjuk-myeon"
test "평리1동", "Pyeongni Il-dong"
test "평리2동", "Pyeongni I-dong"
test "탑안이", "Tabani"

}

dependency “var-kor”, import: true dependency “var-kor-Hang-Hang-jamo”, as: hangjamo

# Those may be parts of this supposed korean library aliases {

def_alias double_cons_jamo, any("ᄁᄄᄈᄍᄊ")
def_alias aspirated_cons_jamo, any("ᄏᄐᄑᄎ")

}

stage {

# convert numbers to space + Hangul
sub none, space, not_before: any([digit, space]), after: digit
sub "1", "일"
sub "2", "이"
sub "3", "삼"
sub "4", "사"
sub "5", "오"
sub "6", "육"
sub "7", "칠"
sub "8", "팔"
sub "9", "구"

# add hyphen in front of generics
sub none, "-", not_before: line_start, after: any("도시군구읍면리동가") + line_end

run map.hangjamo.stage.main

# Add space to the two ends of the string for easier word boundary handling
sub line_start, space
sub line_end, space

# HANGUL JONGSEONG SSANGKIYEOK
sub "ᆩᄋ", "ᆨᄁ"
sub "ᆩ", "ᆨ"

# HANGUL JONGSEONG SSANGKIYEOK
sub "ᆪᄋ", "ᆨᄉ"
sub "ᆪ", "ᆨ"

# HANGUL JONGSEONG NIEUN-CIEUC
sub "ᆬᄋ", "ᆫᄌ"
sub "ᆬ", "ᆫ"

# HANGUL JONGSEONG NIEUN-CIEUC
sub "ᆭᄀ", "ᆫᄏ"
sub "ᆭᄃ", "ᆫᄐ"
sub "ᆭᄇ", "ᆫᄑ"
sub "ᆭᄌ", "ᆫᄎ"
sub "ᆭ", "ᆫ"

# HANGUL JONGSEONG TIEUT
sub "ᆮ", "ᆺ", after: any("ᄀᄁᄂᄃᄄᄅᄆᄇᄈᄉᄊᄌᄍᄎᄏᄐᄑᄒ")

# HANGUL JONGSEONG RIEUL-SIOS
sub "ᆳᄋ", "ᆯᄉ"
sub "ᆳ", "ᆯ"

# HANGUL JONGSEONG RIEUL-THIEUTH
sub "ᆴᄋ", "ᆯᄐ"
sub "ᆴ", "ᆯ"

# HANGUL JONGSEONG RIEUL-PHIEUPH
sub "ᆵᄋ", "ᆯᄑ"
sub "ᆵ", "ᆯ", after: any("ᄃᄄᄐ")
sub "ᆵ", "ᄇ"

parallel {
# HANGUL JONGSEONG RIEUL-HIEUH
sub "ᆶᄀ", "ᆯᄏ"
sub "ᆶᄃ", "ᆯᄐ"
sub "ᆶᄇ", "ᆯᄑ"
sub "ᆶᄌ", "ᆯᄎ"
sub "ᆶ", "ᆯ"

# HANGUL JONGSEONG PIEUP-SIOS
sub "ᆹᄋ", "ᄇᄉ"
sub "ᆹ", "ᄇ"

# HANGUL JONGSEONG SSANG-SIOS
sub "ᆻᄋ", "ᆺᄊ"
sub "ᆻ", "ᆺ"

# HANGUL JONGSEONG CIEUC
sub "ᆽᄋ", "ᆺᄌ"
sub "ᆽ", "ᆺ"

# HANGUL JONGSEONG CHIEUCH
sub "ᆾᄋ", "ᆺᄎ"
sub "ᆾ", "ᆺ"

# HANGUL JONGSEONG KHIEUKH
sub "ᆿᄋ", "ᆨᄏ"
sub "ᆿ", "ᆨ"

# HANGUL JONGSEONG THIEUTH
sub "ᇀᄋ", "ᆺᄐ"
sub "ᇀ", "ᆺ"

# HANGUL JONGSEONG PHIEUPH
sub "ᇁᄋ", "ᆸᄑ"
sub "ᇁ", "ᆸ"

# HANGUL JONGSEONG HIEUH
sub "ᇂᄀ", "ᄏ"
sub "ᇂᄃ", "ᄐ"
sub "ᇂᄇ", "ᄑ"
sub "ᇂᄌ", "ᄎ"
sub "ᇂ", ""
}

parallel {
# From Unicode Chart
# https://github.com/unicode-org/cldr/blob/master/common/transforms/Korean-Latin-BGN.xml

sub "ᆮᄋ", "d" # HANGUL JONGSEONG TIEUT + CHOSEONG IEUNG

sub "ᆨᄀ", "kg"        # HANGUL JONGSEONG KIYEOK + CHOSEONG KIYEOK
sub "ᆨᄂ", "ngn"       # HANGUL JONGSEONG KIYEOK + CHOSEONG NIEUN
sub "ᆨᄃ", "kd"        # HANGUL JONGSEONG KIYEOK + CHOSEONG TIEUT
sub "ᆨᄅ", "ngn"       # HANGUL JONGSEONG KIYEOK + CHOSEONG RIEUL
sub "ᆨᄆ", "ngm"       # HANGUL JONGSEONG KIYEOK + CHOSEONG MIEUM
sub "ᆨᄇ", "kb"        # HANGUL JONGSEONG KIYEOK + CHOSEONG PIEUP
sub "ᆨᄉ", "ks"        # HANGUL JONGSEONG KIYEOK + CHOSEONG SIOS
sub "ᆨᄋ", "g"   # HANGUL JONGSEONG KIYEOK + CHOSEONG IEUNG
sub "ᆨᄌ", "kj"        # HANGUL JONGSEONG KIYEOK + CHOSEONG CIEUC
sub "ᆨᄎ", "kch"       # HANGUL JONGSEONG KIYEOK + CHOSEONG CHIEUCH
sub "ᆨᄏ", "kk"        # HANGUL JONGSEONG KIYEOK + CHOSEONG KHIEUKH # NOTE: the dash is always skipped
sub "ᆨᄐ", "kt"        # HANGUL JONGSEONG KIYEOK + CHOSEONG THIEUTH
sub "ᆨᄑ", "kp"        # HANGUL JONGSEONG KIYEOK + CHOSEONG PHIEUPH
sub "ᆨᄒ", "kh"        # HANGUL JONGSEONG KIYEOK + CHOSEONG HIEUH
sub "ᆨᄁ", "kkk"       # HANGUL JONGSEONG KIYEOK + CHOSEONG SSANGKIYEOK
sub "ᆨᄄ", "ktt"       # HANGUL JONGSEONG KIYEOK + CHOSEONG SSANGTIEUT
sub "ᆨᄈ", "kpp"       # HANGUL JONGSEONG KIYEOK + CHOSEONG SSANGPIEUP
sub "ᆨᄊ", "kss"       # HANGUL JONGSEONG KIYEOK + CHOSEONG SSANGSIOS
sub "ᆨᄍ", "kjj"       # HANGUL JONGSEONG KIYEOK + CHOSEONG SSANGCIEUC
sub "ᆫᄀ", "ng"        # HANGUL JONGSEONG NIEUN + CHOSEONG KIEUK
sub "ᆫᄂ", "nn"        # HANGUL JONGSEONG NIEUN + CHOSEONG NIEUN
sub "ᆫᄃ", "nd"        # HANGUL JONGSEONG NIEUN + CHOSEONG TIEUT
sub "ᆫᄅ", "ll"        # HANGUL JONGSEONG NIEUN + CHOSEONG RIEUL
sub "ᆫᄆ", "nm"        # HANGUL JONGSEONG NIEUN + CHOSEONG MIEUM
sub "ᆫᄇ", "nb"        # HANGUL JONGSEONG NIEUN + CHOSEONG PIEUP
sub "ᆫᄉ", "ns"        # HANGUL JONGSEONG NIEUN + CHOSEONG SIOS
sub "ᆫᄋ", "n"   # HANGUL JONGSEONG NIEUN + CHOSEONG IEUNG
sub "ᆫᄌ", "nj"        # HANGUL JONGSEONG NIEUN + CHOSEONG CIEUC
sub "ᆫᄎ", "nch"       # HANGUL JONGSEONG NIEUN + CHOSEONG CHIEUCH
sub "ᆫᄏ", "nk"        # HANGUL JONGSEONG NIEUN + CHOSEONG KHIEUKH
sub "ᆫᄐ", "nt"        # HANGUL JONGSEONG NIEUN + CHOSEONG THIEUTH
sub "ᆫᄑ", "np"        # HANGUL JONGSEONG NIEUN + CHOSEONG PHIEUPH
sub "ᆫᄒ", "nh"        # HANGUL JONGSEONG NIEUN + CHOSEONG HIEUH
sub "ᆫᄁ", "nkk"       # HANGUL JONGSEONG NIEUN + CHOSEONG SSANGKIYEOK
sub "ᆫᄄ", "ntt"       # HANGUL JONGSEONG NIEUN + CHOSEONG SSANGTIEUT
sub "ᆫᄈ", "npp"       # HANGUL JONGSEONG NIEUN + CHOSEONG SSANGPIEUP
sub "ᆫᄊ", "nss"       # HANGUL JONGSEONG NIEUN + CHOSEONG SSANGSIOS
sub "ᆫᄍ", "njj"       # HANGUL JONGSEONG NIEUN + CHOSEONG SSANGCIEUC
sub "ᆯᄀ", "lg"        # HANGUL JONGSEONG RIEUL + CHOSEONG KIYEOK
sub "ᆯᄂ", "ll"        # HANGUL JONGSEONG RIEUL + CHOSEONG NIEUN
sub "ᆯᄃ", "ld"        # HANGUL JONGSEONG RIEUL + CHOSEONG TIEUT
sub "ᆯᄅ", "ll"        # HANGUL JONGSEONG RIEUL + CHOSEONG RIEUL
sub "ᆯᄆ", "lm"        # HANGUL JONGSEONG RIEUL + CHOSEONG MIEUM
sub "ᆯᄇ", "lb"        # HANGUL JONGSEONG RIEUL + CHOSEONG PIEUP
sub "ᆯᄉ", "ls"        # HANGUL JONGSEONG RIEUL + CHOSEONG SIOS
sub "ᆯᄋ", "r"   # HANGUL JONGSEONG RIEUL + CHOSEONG IEUNG
sub "ᆯᄌ", "lj"        # HANGUL JONGSEONG RIEUL + CHOSEONG CIEUC
sub "ᆯᄎ", "lch"       # HANGUL JONGSEONG RIEUL + CHOSEONG CHIEUCH
sub "ᆯᄏ", "lk"        # HANGUL JONGSEONG RIEUL + CHOSEONG KHIEUKH
sub "ᆯᄐ", "lt"        # HANGUL JONGSEONG RIEUL + CHOSEONG THIEUTH
sub "ᆯᄑ", "lp"        # HANGUL JONGSEONG RIEUL + CHOSEONG PHIEUPH
sub "ᆯᄒ", "rh"        # HANGUL JONGSEONG RIEUL + CHOSEONG HIEUH
sub "ᆯᄁ", "lkk"       # HANGUL JONGSEONG RIEUL + CHOSEONG SSANGKIYEOK
sub "ᆯᄄ", "ltt"       # HANGUL JONGSEONG RIEUL + CHOSEONG SSANGTIEUT
sub "ᆯᄈ", "lpp"       # HANGUL JONGSEONG RIEUL + CHOSEONG SSANGPIEUP
sub "ᆯᄊ", "lss"       # HANGUL JONGSEONG RIEUL + CHOSEONG SSANGSIOS
sub "ᆯᄍ", "ljj"       # HANGUL JONGSEONG RIEUL + CHOSEONG SSANGCIEUC
sub "ᆷᄀ", "mg"        # HANGUL JONGSEONG MIEUM + CHOSEONG KIYEOK
sub "ᆷᄂ", "mn"        # HANGUL JONGSEONG MIEUM + CHOSEONG NIEUN
sub "ᆷᄃ", "md"        # HANGUL JONGSEONG MIEUM + CHOSEONG TIEUT
sub "ᆷᄅ", "mn"        # HANGUL JONGSEONG MIEUM + CHOSEONG RIEUL
sub "ᆷᄆ", "mm"        # HANGUL JONGSEONG MIEUM + CHOSEONG MIEUM
sub "ᆷᄇ", "mb"        # HANGUL JONGSEONG MIEUM + CHOSEONG PIEUP
sub "ᆷᄉ", "ms"        # HANGUL JONGSEONG MIEUM + CHOSEONG SIOS
sub "ᆷᄋ", "m"   # HANGUL JONGSEONG MIEUM + CHOSEONG IEUNG
sub "ᆷᄌ", "mj"        # HANGUL JONGSEONG MIEUM + CHOSEONG CIEUC
sub "ᆷᄎ", "mch"       # HANGUL JONGSEONG MIEUM + CHOSEONG CHIEUCH
sub "ᆷᄏ", "mk"        # HANGUL JONGSEONG MIEUM + CHOSEONG KHIEUKH
sub "ᆷᄐ", "mt"        # HANGUL JONGSEONG MIEUM + CHOSEONG THIEUTH
sub "ᆷᄑ", "mp"        # HANGUL JONGSEONG MIEUM + CHOSEONG PHIEUPH
sub "ᆷᄒ", "mh"        # HANGUL JONGSEONG MIEUM + CHOSEONG HIEUH
sub "ᆷᄁ", "mkk"       # HANGUL JONGSEONG MIEUM + CHOSEONG SSANGKIYEOK
sub "ᆷᄄ", "mtt"       # HANGUL JONGSEONG MIEUM + CHOSEONG SSANGTIEUT
sub "ᆷᄈ", "mpp"       # HANGUL JONGSEONG MIEUM + CHOSEONG SSANGPIEUP
sub "ᆷᄊ", "mss"       # HANGUL JONGSEONG MIEUM + CHOSEONG SSANGSIOS
sub "ᆷᄍ", "mjj"       # HANGUL JONGSEONG MIEUM + CHOSEONG SSANGCIEUC
sub "ᆸᄀ", "pg"        # HANGUL JONGSEONG PIEUP + CHOSEONG KIYEOK
sub "ᆸᄂ", "mn"        # HANGUL JONGSEONG PIEUP + CHOSEONG NIEUN
sub "ᆸᄃ", "pd"        # HANGUL JONGSEONG PIEUP + CHOSEONG TIEUT
sub "ᆸᄅ", "mn"        # HANGUL JONGSEONG PIEUP + CHOSEONG RIEUL
sub "ᆸᄆ", "mm"        # HANGUL JONGSEONG PIEUP + CHOSEONG MIEUM
sub "ᆸᄇ", "pb"        # HANGUL JONGSEONG PIEUP + CHOSEONG PIEUP
sub "ᆸᄉ", "ps"        # HANGUL JONGSEONG PIEUP + CHOSEONG SIOS
sub "ᆸᄋ", "b"   # HANGUL JONGSEONG PIEUP + CHOSEONG IEUNG
sub "ᆸᄌ", "pj"        # HANGUL JONGSEONG PIEUP + CHOSEONG CIEUC
sub "ᆸᄎ", "pch"       # HANGUL JONGSEONG PIEUP + CHOSEONG CHIEUCH
sub "ᆸᄏ", "pk"        # HANGUL JONGSEONG PIEUP + CHOSEONG KHIEUKH
sub "ᆸᄐ", "pt"        # HANGUL JONGSEONG PIEUP + CHOSEONG THIEUTH
sub "ᆸᄑ", "pp"        # HANGUL JONGSEONG PIEUP + CHOSEONG PHIEUPH
sub "ᆸᄒ", "ph"        # HANGUL JONGSEONG PIEUP + CHOSEONG HIEUH
sub "ᆸᄁ", "pkk"       # HANGUL JONGSEONG PIEUP + CHOSEONG SSANGKIYEOK
sub "ᆸᄄ", "ptt"       # HANGUL JONGSEONG PIEUP + CHOSEONG SSANGTIEUT
sub "ᆸᄈ", "ppp"       # HANGUL JONGSEONG PIEUP + CHOSEONG SSANGPIEUP
sub "ᆸᄊ", "pss"       # HANGUL JONGSEONG PIEUP + CHOSEONG SSANGSIOS
sub "ᆸᄍ", "pjj"       # HANGUL JONGSEONG PIEUP + CHOSEONG SSANGCIEUC
sub "ᆺᄀ", "tg"        # HANGUL JONGSEONG SIOS + CHOSEONG KIYEOK
sub "ᆺᄂ", "nn"        # HANGUL JONGSEONG SIOS + CHOSEONG NIEUN
sub "ᆺᄃ", "td"        # HANGUL JONGSEONG SIOS + CHOSEONG TIEUT
sub "ᆺᄅ", "nn"        # HANGUL JONGSEONG SIOS + CHOSEONG RIEUL
sub "ᆺᄆ", "nm"        # HANGUL JONGSEONG SIOS + CHOSEONG MIEUM
sub "ᆺᄇ", "tb"        # HANGUL JONGSEONG SIOS + CHOSEONG PIEUP
sub "ᆺᄉ", "ts"        # HANGUL JONGSEONG SIOS + CHOSEONG SIOS
sub "ᆺᄋ", "s"   # HANGUL JONGSEONG SIOS + CHOSEONG IEUNG
sub "ᆺᄌ", "tj"        # HANGUL JONGSEONG SIOS + CHOSEONG CIEUC
sub "ᆺᄎ", "tch"       # HANGUL JONGSEONG SIOS + CHOSEONG CHIEUCH
sub "ᆺᄏ", "tk"        # HANGUL JONGSEONG SIOS + CHOSEONG KHIEUKH
sub "ᆺᄐ", "tt"        # HANGUL JONGSEONG SIOS + CHOSEONG THIEUTH
sub "ᆺᄑ", "tp"        # HANGUL JONGSEONG SIOS + CHOSEONG PHIEUPH
sub "ᆺᄒ", "th"        # HANGUL JONGSEONG SIOS + CHOSEONG HIEUH
sub "ᆺᄁ", "tkk"       # HANGUL JONGSEONG SIOS + CHOSEONG SSANGKIYEOK
sub "ᆺᄄ", "ttt"       # HANGUL JONGSEONG SIOS + CHOSEONG SSANGTIEUT
sub "ᆺᄈ", "tpp"       # HANGUL JONGSEONG SIOS + CHOSEONG SSANGPIEUP
sub "ᆺᄊ", "tss"       # HANGUL JONGSEONG SIOS + CHOSEONG SSANGSIOS
sub "ᆺᄍ", "tjj"       # HANGUL JONGSEONG SIOS + CHOSEONG SSANGCIEUC
sub "ᆼᄀ", "ngg"       # HANGUL JONGSEONG IEUNG + CHOSEONG KIYEOK
sub "ᆼᄂ", "ngn"       # HANGUL JONGSEONG IEUNG + CHOSEONG NIEUN
sub "ᆼᄃ", "ngd"       # HANGUL JONGSEONG IEUNG + CHOSEONG TIEUT
sub "ᆼᄅ", "ngn"       # HANGUL JONGSEONG IEUNG + CHOSEONG RIEUL
sub "ᆼᄆ", "ngm"       # HANGUL JONGSEONG IEUNG + CHOSEONG MIEUM
sub "ᆼᄇ", "ngb"       # HANGUL JONGSEONG IEUNG + CHOSEONG PIEUP
sub "ᆼᄉ", "ngs"       # HANGUL JONGSEONG IEUNG + CHOSEONG SIOS
sub "ᆼᄋ", "ng"        # HANGUL JONGSEONG IEUNG + CHOSEONG IEUNG
sub "ᆼᄌ", "ngj"       # HANGUL JONGSEONG IEUNG + CHOSEONG CIEUC
sub "ᆼᄎ", "ngch"      # HANGUL JONGSEONG IEUNG + CHOSEONG CHIEUCH
sub "ᆼᄏ", "ngk"       # HANGUL JONGSEONG IEUNG + CHOSEONG KHIEUKH
sub "ᆼᄐ", "ngt"       # HANGUL JONGSEONG IEUNG + CHOSEONG THIEUTH
sub "ᆼᄑ", "ngp"       # HANGUL JONGSEONG IEUNG + CHOSEONG PHIEUPH
sub "ᆼᄒ", "ngh"       # HANGUL JONGSEONG IEUNG + CHOSEONG HIEUH
sub "ᆼᄁ", "ngkk"      # HANGUL JONGSEONG IEUNG + CHOSEONG SSANGKIYEOK
sub "ᆼᄄ", "ngtt"      # HANGUL JONGSEONG IEUNG + CHOSEONG SSANGTIEUT
sub "ᆼᄈ", "ngpp"      # HANGUL JONGSEONG IEUNG + CHOSEONG SSANGPIEUP
sub "ᆼᄊ", "ngss"      # HANGUL JONGSEONG IEUNG + CHOSEONG SSANGSIOS
sub "ᆼᄍ", "ngjj"      # HANGUL JONGSEONG IEUNG + CHOSEONG SSANGCIEUC
}

sub "ᄀ", "g",  before: any([alpha, digit, jamo_vowel, "-"])   # VOWEL + CHOSEONG KIYEOK
sub "ᄂ", "n",  before: any([alpha, digit, jamo_vowel, "-"])   # VOWEL + CHOSEONG NIEUN
sub "ᄃ", "d",  before: any([alpha, digit, jamo_vowel, "-"])     # VOWEL + CHOSEONG TIEUT
sub "ᄅ", "r",  before: any([alpha, digit, jamo_vowel, "-"])     # VOWEL + CHOSEONG RIEUL
sub "ᄆ", "m",  before: any([alpha, digit, jamo_vowel, "-"])   # VOWEL + CHOSEONG MIEUM
sub "ᄇ", "b",  before: any([alpha, digit, jamo_vowel, "-"])     # VOWEL + CHOSEONG PIEUP
sub "ᄉ", "s",  before: any([alpha, digit, jamo_vowel, "-"])     # VOWEL + CHOSEONG SIOS
sub "ᄋ", "",   before: any([alpha, digit, jamo_vowel, "-"])     # VOWEL + CHOSEONG IEUNG
sub "ᄌ", "j",  before: any([alpha, digit, jamo_vowel, "-"])     # VOWEL + CHOSEONG CIEUC
sub "ᄎ", "ch", before: any([alpha, digit, jamo_vowel, "-"])   # VOWEL + CHOSEONG CHIEUCH
sub "ᄏ", "k",  before: any([alpha, digit, jamo_vowel, "-"])     # VOWEL + CHOSEONG KHIEUKH
sub "ᄐ", "t",  before: any([alpha, digit, jamo_vowel, "-"])     # VOWEL + CHOSEONG THIEUTH
sub "ᄑ", "p",  before: any([alpha, digit, jamo_vowel, "-"])   # VOWEL + CHOSEONG PHIEUPH
sub "ᄒ", "h",  before: any([alpha, digit, jamo_vowel, "-"])   # VOWEL + CHOSEONG HIEUH
sub "ᄁ", "kk", before: any([alpha, digit, jamo_vowel])              # VOWEL + CHOSEONG SSANGKIYEOK
sub "ᄄ", "tt", before: any([alpha, digit, jamo_vowel])              # VOWEL + CHOSEONG SSANGTIEUT
sub "ᄈ", "pp", before: any([alpha, digit, jamo_vowel])              # VOWEL + CHOSEONG SSANGPIEUP
sub "ᄊ", "ss", before: any([alpha, digit, jamo_vowel])              # VOWEL + CHOSEONG SSANGSIOS
sub "ᄍ", "jj", before: any([alpha, digit, jamo_vowel])              # VOWEL + CHOSEONG SSANGCIEUC
parallel {
sub "ᆰᄀ", "lg"        # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG KIYEOK
sub "ᆰᄂ", "ngn"       # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG NIEUN
sub "ᆰᄃ", "kd"        # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG TIEUT
sub "ᆰᄅ", "ngn"       # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG RIEUL
sub "ᆰᄆ", "ngm"       # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG MIEUM
sub "ᆰᄇ", "kb"        # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG PIEUP
sub "ᆰᄉ", "ks"        # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG SIOS
sub "ᆰᄋ", "lg"        # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG IEUNG
sub "ᆰᄌ", "kj"        # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG CIEUC
sub "ᆰᄎ", "kch"       # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG CHIEUCH
sub "ᆰᄏ", "lk"        # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG KHIEUKH
sub "ᆰᄐ", "kt"        # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG THIEUTH
sub "ᆰᄑ", "kp"        # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG PHIEUPH
sub "ᆰᄒ", "lk"        # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG HIEUH
sub "ᆰᄁ", "lkk"       # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG SSANGKIYEOK
sub "ᆰᄄ", "ktt"       # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG SSANGTIEUT
sub "ᆰᄈ", "kpp"       # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG SSANGPIEUP
sub "ᆰᄊ", "kss"       # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG SSANGSIOS
sub "ᆰᄍ", "kjj"       # HANGUL JONGSEONG RIEUL-KIYEOK + CHOSEONG SSANGCIEUC
sub "ᆱᄀ", "mg"        # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG KIYEOK
sub "ᆱᄂ", "mn"        # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG NIEUN
sub "ᆱᄃ", "md"        # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG TIEUT
sub "ᆱᄅ", "mn"        # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG RIEUL
sub "ᆱᄆ", "lm"        # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG MIEUM
sub "ᆱᄇ", "mb"        # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG PIEUP
sub "ᆱᄉ", "ms"        # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG SIOS
sub "ᆱᄋ", "lm"        # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG IEUNG
sub "ᆱᄌ", "mj"        # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG CIEUC
sub "ᆱᄎ", "mch"       # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG CHIEUCH
sub "ᆱᄏ", "mk"        # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG KHIEUKH
sub "ᆱᄐ", "mt"        # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG THIEUTH
sub "ᆱᄑ", "mp"        # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG PHIEUPH
sub "ᆱᄒ", "mh"        # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG HIEUH
sub "ᆱᄁ", "mkk"       # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG SSANGKIYEOK
sub "ᆱᄄ", "mtt"       # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG SSANGTIEUT
sub "ᆱᄈ", "mpp"       # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG SSANGPIEUP
sub "ᆱᄊ", "mss"       # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG SSANGSIOS
sub "ᆱᄍ", "mjj"       # HANGUL JONGSEONG RIEUL-MIEUM + CHOSEONG SSANGCIEUC
sub "ᆲᄀ", "pg"        # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG KIYEOK
sub "ᆲᄂ", "mn"        # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG NIEUN
sub "ᆲᄃ", "pd"        # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG TIEUT
sub "ᆲᄅ", "mn"        # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG RIEUL
sub "ᆲᄆ", "mm"        # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG MIEUM
sub "ᆲᄇ", "lb"        # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG PIEUP
sub "ᆲᄉ", "ps"        # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG SIOS
sub "ᆲᄋ", "lb"        # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG IEUNG
sub "ᆲᄌ", "pj"        # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG CIEUC
sub "ᆲᄎ", "pch"       # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG CHIEUCH
sub "ᆲᄏ", "pk"        # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG KHIEUKH
sub "ᆲᄐ", "pt"        # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG THIEUTH
sub "ᆲᄑ", "lp"        # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG PHIEUPH
sub "ᆲᄒ", "lp"        # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG HIEUH
sub "ᆲᄁ", "pkk"       # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG SSANGKIYEOK
sub "ᆲᄄ", "ptt"       # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG SSANGTIEUT
sub "ᆲᄈ", "lpp"       # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG SSANGPIEUP
sub "ᆲᄊ", "pss"       # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG SSANGSIOS
sub "ᆲᄍ", "pjj"       # HANGUL JONGSEONG RIEUL-PIEUP + CHOSEONG SSANGCIEUC
}
sub "ᄀ", "g",   before: space # HANGUL CHOSEONG KIYEOK
sub "ᄂ", "n",   before: space # HANGUL CHOSEONG NIEUN
sub "ᄃ", "d",   before: space # HANGUL CHOSEONG TIEUT
sub "ᄅ", "",    before: space, after: any("ᅣᅤᅧᅨᅭᅲ")   # HANGUL CHOSEONG RIEUL # R-onset rule
sub "ᄅ", "n",   before: space # HANGUL CHOSEONG RIEUL
sub "ᄆ", "m",   before: space # HANGUL CHOSEONG MIEUM
sub "ᄇ", "b",   before: space # HANGUL CHOSEONG PIEUP
sub "ᄉ", "s",   before: space # HANGUL CHOSEONG SIOS
sub "ᄋ", "",    before: space # HANGUL CHOSEONG IEUNG
sub "ᄌ", "j",   before: space # HANGUL CHOSEONG CIEUC
sub "ᄎ", "ch",  before: space # HANGUL CHOSEONG CHIEUCH
sub "ᄏ", "k",   before: space # HANGUL CHOSEONG KHIEUKH
sub "ᄐ", "t",   before: space # HANGUL CHOSEONG THIEUTH
sub "ᄑ", "p",   before: space # HANGUL CHOSEONG PHIEUPH
sub "ᄒ", "h",   before: space # HANGUL CHOSEONG HIEUH
sub "ᄁ", "kk",  before: space # HANGUL CHOSEONG SSANGKIYEOK
sub "ᄭ", "kk",  before: space # HANGUL CHOSEONG SIOS-KIYEOK
sub "ᄄ", "tt",  before: space # HANGUL CHOSEONG SSANGTIEUT
sub "ᄯ", "tt",  before: space # HANGUL CHOSEONG SIOS-TIEUT
sub "ᄈ", "pp",  before: space # HANGUL CHOSEONG SSANGPIEUP
sub "ᄲ", "pp",  before: space # HANGUL CHOSEONG SIOS-PIEUP
sub "ᄊ", "ss",  before: space # HANGUL CHOSEONG SSANGSIOS
sub "ᄍ", "jj",  before: space # HANGUL CHOSEONG SSANGCIEUC
sub "ᄶ", "jj",  before: space # HANGUL CHOSEONG SIOS-CIEUC
parallel {
sub "ᅡ", "a"  # HANGUL JUNGSEONG A
sub "ᅣ", "ya" # HANGUL JUNGSEONG YA
sub "ᅥ", "eo" # HANGUL JUNGSEONG EO
sub "ᅧ", "yeo"        # HANGUL JUNGSEONG YEO
sub "ᅩ", "o"  # HANGUL JUNGSEONG O
sub "ᅭ", "yo" # HANGUL JUNGSEONG YO
sub "ᅮ", "u"  # HANGUL JUNGSEONG U
sub "ᅲ", "yu" # HANGUL JUNGSEONG YU
sub "ᅳ", "eu" # HANGUL JUNGSEONG EU
sub "ᅵ", "i"  # HANGUL JUNGSEONG I
sub "ᅢ", "ae" # HANGUL JUNGSEONG AE
sub "ᅤ", "yae"        # HANGUL JUNGSEONG YAE
sub "ᅦ", "e"  # HANGUL JUNGSEONG E
sub "ᅨ", "ye" # HANGUL JUNGSEONG YE
sub "ᅬ", "oe" # HANGUL JUNGSEONG OE
sub "ᅱ", "wi" # HANGUL JUNGSEONG WI
sub "ᅴ", "ui" # HANGUL JUNGSEONG YI
sub "ᅪ", "wa" # HANGUL JUNGSEONG WA
sub "ᅯ", "wo" # HANGUL JUNGSEONG WEO
sub "ᅫ", "wae"        # HANGUL JUNGSEONG WAE
sub "ᅰ", "we" # HANGUL JUNGSEONG WE
}
sub "ᆨ", "k", after: any([space,"-"]) # HANGUL JONGSEONG KIYEOK
sub "ᆫ", "n", after: any([space,"-"]) # HANGUL JONGSEONG NIEUN
sub "ᆮ", "t", after: any([space,"-"]) # HANGUL JONGSEONG TIEUT
sub "ᆯ", "l", after: any([space,"-"]) # HANGUL JONGSEONG RIEUL
sub "ᆷ", "m", after: any([space,"-"]) # HANGUL JONGSEONG MIEUM
sub "ᆸ", "p", after: any([space,"-"]) # HANGUL JONGSEONG PIEUP
sub "ᆺ", "t", after: any([space,"-"]) # HANGUL JONGSEONG SIOS
sub "ᆼ", "ng", after: any([space,"-"])        # HANGUL JONGSEONG IEUNG
sub "ᆽ", "t", after: any([space,"-"]) # HANGUL JONGSEONG CIEUC
sub "ᆾ", "t", after: any([space,"-"]) # HANGUL JONGSEONG CHIEUCH
sub "ᆿ", "k", after: any([space,"-"]) # HANGUL JONGSEONG KHIEUKH
sub "ᇀ", "t", after: any([space,"-"]) # HANGUL JONGSEONG THIEUTH
sub "ᇁ", "p", after: any([space,"-"]) # HANGUL JONGSEONG PHIEUPH
sub "ᆰ", "k", after: any([space,"-"]) # HANGUL JONGSEONG RIEUL-KIYEOK
sub "ᆲ", "p", after: any([space,"-"]) # HANGUL JONGSEONG RIEUL-PIEUP

# Remove space added
sub line_start + space, none
sub space + line_end, none

title_case

}