metadata {

authority_id: odni
id: 2015
language: iso-639-2:kor
source_script: Hang
destination_script: Latn
name: ICS-630-01 Romanization of Korean Personal Names (2015)
source: ICS-630-01 Annex W
creation_date: 2015
adoption_date:
description:

notes: |
  1.  Name order shall be Family Name Given name, with the family name separated
      from the given name by one space, and the first and second syllable of a two-
      syllable given name connected by a hyphen. The initial letter of the family name
      and the initial letter of the first syllable of the given name are capitalized; the
      second syllable of the given name is in lower case: Kim Yo’ng-su.

  2.  In the case of a full name with only two syllables, the initial letters of both
      syllables are capitalized and the two names are separated by a space: Ho’ Tam.

      In the case of family names consisting of a combination of two syllables, the
      syllables are written together (i.e., without a space): So’nu Hak-wo’n.

  3.  The family surname 이 will be rendered "Yi" in the IC Standard spelling, but in
      accordance with personal preference or official usage in the Factbook and Chiefs
      of State directory.

  4.  In order to facilitate the use of the IC Standard, a reference guide containing a list
      of syllables used in Korean personal names along with their IC Standard
      equivalents follows.

}

tests {

test "김영수", "Kim Yo’ng-su"
test "허담", "Ho’ Tam"
test "선우학원", "So’nu Hak-wo’n"
test "이담", "Yi Tam"
# examples testing space handling
test "동방국", "Tongpang Kuk"
test "동 방국", "Tong Pang-kuk"
test "동방 국", "Tongpang Kuk"
test "화방국", "Hwa Pang-kuk"
test "황목국", "Hwangmok Kuk"

}

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

aliases{

def_alias alpha_plus, any("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’")

}

stage {

# RULES
sub any([line_start + " ", " " + line_end]), ""

#sub some(" "), " "

# 2 character inputs will have a space between them
sub line_start + capture(unicode_hangul) + capture(unicode_hangul) + line_end, ref( 1 ) + " " + ref( 2 )

# 4 character inputs will have a space as in XXXX -> XX XX
sub line_start + capture(unicode_hangul + unicode_hangul) + capture(unicode_hangul + unicode_hangul) + line_end, ref( 1 ) + " " + ref( 2 )

# 3 character inputs are more complicated. We enumerate all possible 2
# letter surnames according to: https://en.wikipedia.org/wiki/List_of_Korean_surnames
sub line_start + capture(any(["독고", "동방", "등정", "망절", "무본", "부여", "사공", "서문", "선우", "어금", "제갈", "황목", "황보"])) + capture(unicode_hangul) + line_end, ref( 1 ) + " " + ref( 2 )

# Otherwise the first character is probably a surname
sub line_start + capture(unicode_hangul) + capture(unicode_hangul + unicode_hangul) + line_end, ref( 1 ) + " " + ref( 2 )

# In case of uncertainity, user needs to add a space himself.

#sub some(" "), " "

sub any([line_start + " ", " " + line_end]), ""

run map.hanghang.stage.main

# CHARACTERS
parallel {
  # This is based on Jamo

}

# DICTIONARY
parallel {
  #
}

# POSTRULES

# HANGUL JONGSEONG SSANGKIYEOK
sub "ᆩ", "kk"

# HANGUL JONGSEONG SSANGKIYEOK
sub "ᆪ", "ks"

# HANGUL JONGSEONG NIEUN-CIEUC
sub "ᆬ", "nch"

# HANGUL JONGSEONG NIEUN-CIEUC
sub "ᆭ", "nh"

# HANGUL JONGSEONG TIEUT
sub "ᆮ", "t"

# HANGUL JONGSEONG RIEUL-SIOS
sub "ᆳ", "l"

# HANGUL JONGSEONG RIEUL-THIEUTH
sub "ᆴ", "lt’"

# HANGUL JONGSEONG RIEUL-PHIEUPH
sub "ᆵ", "lp’"

# HANGUL JONGSEONG RIEUL-HIEUH
sub "ᆶ", "lh"

# HANGUL JONGSEONG PIEUP-SIOS
sub "ᆹ", "ps"

# HANGUL JONGSEONG SSANG-SIOS
sub "ᆻ", "ss"

# HANGUL JONGSEONG CIEUC
sub "ᆽ", "ch"

# HANGUL JONGSEONG CHIEUCH
sub "ᆾ", "ch’"

# HANGUL JONGSEONG KHIEUKH
sub "ᆿ", "k’"

# HANGUL JONGSEONG THIEUTH
sub "ᇀ", "t’"

# HANGUL JONGSEONG PHIEUPH
sub "ᇁ", "p’"

# HANGUL JONGSEONG HIEUH
sub "ᇂ", "h"

# HANGUL JONGSEONG KIYEOK
sub "ᆨ", "k"

# HANGUL JONGSEONG NIEUN
sub "ᆫ", "n"

# HANGUL JONGSEONG RIEUL
sub "ᆯ", "l"

# HANGUL JONGSEONG MIEUM
sub "ᆷ", "m"

# HANGUL JONGSEONG PIEUP
sub "ᆸ", "p"

# HANGUL JONGSEONG SIOS
sub "ᆺ", "s"

# HANGUL JONGSEONG IEUNG
sub "ᆼ", "ng"

# HANGUL JONGSEONG RIEUL-KIYEOK
sub "ᆰ", "lk"

# HANGUL JONGSEONG RIEUL-PIEUP
sub "ᆲ", "lp"

# HANGUL CHOSEONG KIYEOK
sub "ᄀ", "-k"

# HANGUL CHOSEONG NIEUN
sub "ᄂ", "-n"

# HANGUL CHOSEONG TIEUT
sub "ᄃ", "-t"

# HANGUL CHOSEONG RIEUL
sub "ᄅ", "-r"

# HANGUL CHOSEONG MIEUM
sub "ᄆ", "-m"

# HANGUL CHOSEONG PIEUP
sub "ᄇ", "-p"

# HANGUL CHOSEONG SIOS
sub "ᄉ", "-s"

# HANGUL CHOSEONG IEUNG
sub "ᄋ", "-"

# HANGUL CHOSEONG CIEUC
sub "ᄌ", "-ch"

# HANGUL CHOSEONG CHIEUCH
sub "ᄎ", "-ch’"

# HANGUL CHOSEONG KHIEUKH
sub "ᄏ", "-k’"

# HANGUL CHOSEONG THIEUTH
sub "ᄐ", "-t’"

# HANGUL CHOSEONG PHIEUPH
sub "ᄑ", "-p’"

# HANGUL CHOSEONG HIEUH
sub "ᄒ", "-h"

# HANGUL CHOSEONG SSANGKIYEOK
sub "ᄁ", "-kk"

# HANGUL CHOSEONG SIOS-KIYEOK
sub "ᄭ", "-sk"

# HANGUL CHOSEONG SSANGTIEUT
sub "ᄄ", "-tt"

# HANGUL CHOSEONG SIOS-TIEUT
sub "ᄯ", "-st"

# HANGUL CHOSEONG SSANGPIEUP
sub "ᄈ", "-pp"

# HANGUL CHOSEONG SIOS-PIEUP
sub "ᄲ", "-sp"

# HANGUL CHOSEONG SSANGSIOS
sub "ᄊ", "-ss"

# HANGUL CHOSEONG SSANGCIEUC
sub "ᄍ", "-chch"

# HANGUL CHOSEONG SIOS-CIEUC
sub "ᄶ", "-sch"

## End of Choseong Jamos

# HANGUL JUNGSEONG A
sub "ᅡ", "a"
# HANGUL JUNGSEONG YA
sub "ᅣ", "ya"
# HANGUL JUNGSEONG EO
sub "ᅥ", "o’"
# HANGUL JUNGSEONG YEO
sub "ᅧ", "yo’"
# HANGUL JUNGSEONG O
sub "ᅩ", "o"
# HANGUL JUNGSEONG YO
sub "ᅭ", "yo"
# HANGUL JUNGSEONG U
sub "ᅮ", "u"
# HANGUL JUNGSEONG YU
sub "ᅲ", "yu"
# HANGUL JUNGSEONG EU
sub "ᅳ", "u’"
# HANGUL JUNGSEONG I
sub "ᅵ", "i"
# HANGUL JUNGSEONG AE
sub "ᅢ", "ae"
# HANGUL JUNGSEONG YAE
sub "ᅤ", "yae"
# HANGUL JUNGSEONG E
sub "ᅦ", "e"
# HANGUL JUNGSEONG YE  # Not found in specification
sub "ᅨ", "ye" # actually found in Reference Guide
# HANGUL JUNGSEONG WA
sub "ᅪ", "wa"
# HANGUL JUNGSEONG WAE
sub "ᅫ", "wae"
# HANGUL JUNGSEONG OE
sub "ᅬ", "oe"
# HANGUL JUNGSEONG WE
sub "ᅰ", "we"
# HANGUL JUNGSEONG WEO
sub "ᅯ", "wo’"
# HANGUL JUNGSEONG WI
sub "ᅱ", "wi"
# HANGUL JUNGSEONG YI
sub "ᅴ", "ui"

# Remove before the first syllable dash
sub "-", "", before: any([line_start, " "])

# Remove dash in surname
sub line_start + capture(some(alpha_plus)) + "-" + capture(some(alpha_plus)), ref( 1 ) + ref( 2 )

# Change the surname I to Yi
sub line_start + "i", "yi"

title_case

}