자모.py

By | 2020-03-08

import inspect

import hgbasic
import hgchartype
import hgunicode
##----------
##----------
출력문 = print
예 = True
아니오 = False


def 길이값(문자열):
    return len(문자열)

def 글자상태(char1):
    return hgchartype.get_script(char1)

##----------
##----------
#__방점1__ = __SingleDotBangjeom # 0x302E 	HANGUL SINGLE DOT TONE MARK
__방점1__ = '〮' #  12334 0x302e [CJK Symbols and Punctuation]
#__방점2__ = __DoubleDotBangjeom # '〯' # 0x302F 	HANGUL DOUBLE DOT TONE MARK
__방점2__ = '〯' # 12335 0x302f [CJK Symbols and Punctuation]

방점1 = __방점1__
방점2 = __방점2__

### define
## __chosung_jamo_string__ = 'ᄀᄁᄂᄃᄄᄅᄆᄇᄈᄉᄊᄋᄌᄍᄎᄏᄐᄑᄒ'  # Hangul Jamo (0x1110-0x1112)
## 키보드에서 입력가능한 문자를 사용해야 하므로 아래 목록 자모는 Hangul Compatibility Jamo 
__초_ㄱ_s = hgunicode.__chosung_jamo_string__[0]
__초_ㄲ_s = hgunicode.__chosung_jamo_string__[1]
__초_ㄴ_s = hgunicode.__chosung_jamo_string__[2]
__초_ㄷ_s = hgunicode.__chosung_jamo_string__[3]
__초_ㄸ_s = hgunicode.__chosung_jamo_string__[4]
__초_ㄹ_s = hgunicode.__chosung_jamo_string__[5]
__초_ㅁ_s = hgunicode.__chosung_jamo_string__[6]
__초_ㅂ_s = hgunicode.__chosung_jamo_string__[7]
__초_ㅃ_s = hgunicode.__chosung_jamo_string__[8]
__초_ㅅ_s = hgunicode.__chosung_jamo_string__[9]
__초_ㅆ_s = hgunicode.__chosung_jamo_string__[10]
__초_ㅇ_s = hgunicode.__chosung_jamo_string__[11]
__초_ㅈ_s = hgunicode.__chosung_jamo_string__[12]
__초_ㅉ_s = hgunicode.__chosung_jamo_string__[13]
__초_초_s = hgunicode.__chosung_jamo_string__[14]
__초_ㅋ_s = hgunicode.__chosung_jamo_string__[15]
__초_ㅌ_s = hgunicode.__chosung_jamo_string__[16]
__초_ㅍ_s = hgunicode.__chosung_jamo_string__[17]
__초_ㅎ_s = hgunicode.__chosung_jamo_string__[18]

__초_채움 = chr(4447) # 초성 채움(0x115F) # __HANGUL_CHOSEONG_FILLER__


## __jungsung_jamo_char_list = 'ᅡᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ'  # Hangul Jamo (0x1161-0x1175)
## 키보드에서 입력가능한 문자를 사용해야 하므로 아래 목록 자모는 Hangul Compatibility Jamo 
__중_채움 = chr(4448) # 중성 채움(0x1160) # __HANGUL_JUNGSEONG_FILLER__
__중_ㅏ_s = hgunicode.__jungsung_jamo_string__[0]
__중_ㅐ_s = hgunicode.__jungsung_jamo_string__[1]
__중_ㅑ_s = hgunicode.__jungsung_jamo_string__[2]
__중_ㅒ_s = hgunicode.__jungsung_jamo_string__[3]
__중_ㅓ_s = hgunicode.__jungsung_jamo_string__[4]
__중_ㅔ_s = hgunicode.__jungsung_jamo_string__[5]
__중_ㅕ_s = hgunicode.__jungsung_jamo_string__[6]
__중_ㅖ_s = hgunicode.__jungsung_jamo_string__[7]
__중_ㅗ_s = hgunicode.__jungsung_jamo_string__[8]
__중_ㅘ_s = hgunicode.__jungsung_jamo_string__[9]
__중_ㅙ_s = hgunicode.__jungsung_jamo_string__[10]
__중_ㅚ_s = hgunicode.__jungsung_jamo_string__[11]
__중_ㅛ_s = hgunicode.__jungsung_jamo_string__[12]
__중_ㅜ_s = hgunicode.__jungsung_jamo_string__[13]
__중_ㅝ_s = hgunicode.__jungsung_jamo_string__[14]
__중_ㅞ_s = hgunicode.__jungsung_jamo_string__[15]
__중_ㅟ_s = hgunicode.__jungsung_jamo_string__[16]
__중_ㅠ_s = hgunicode.__jungsung_jamo_string__[17]
__중_ㅡ_s = hgunicode.__jungsung_jamo_string__[18]
__중_ㅢ_s = hgunicode.__jungsung_jamo_string__[19]
__중_ㅣ_s = hgunicode.__jungsung_jamo_string__[20]

## __jongsung_jamo_char_list = 'ᆨᆩᆪᆫᆬᆭᆮᆯᆰᆱᆲᆳᆴᆵᆶᆷᆸᆹᆺᆻᆼᆽᆾᆿᇀᇁᇂ' # Hangul Jamo (0x11A8-0x11C2)
## 키보드에서 입력가능한 문자를 사용해야 하므로 아래 목록 자모는 Hangul Compatibility Jamo 
__종_ㄱ_s = hgunicode.__jongsung_jamo_string__[0]
__종_ㄲ_s = hgunicode.__jongsung_jamo_string__[1]
__종_ㄳ_s = hgunicode.__jongsung_jamo_string__[2]
__종_ㄴ_s = hgunicode.__jongsung_jamo_string__[3]
__종_ㄵ_s = hgunicode.__jongsung_jamo_string__[4]
__종_ㄶ_s = hgunicode.__jongsung_jamo_string__[5]
__종_ㄷ_s = hgunicode.__jongsung_jamo_string__[6]
__종_ㄹ_s = hgunicode.__jongsung_jamo_string__[7]
__종_ㄺ_s = hgunicode.__jongsung_jamo_string__[8]
__종_ㄻ_s = hgunicode.__jongsung_jamo_string__[9]
__종_ㄼ_s = hgunicode.__jongsung_jamo_string__[10]
__종_ㄽ_s = hgunicode.__jongsung_jamo_string__[11]
__종_ㄾ_s = hgunicode.__jongsung_jamo_string__[12]
__종_ㄿ_s = hgunicode.__jongsung_jamo_string__[13]
__종_ㅀ_s = hgunicode.__jongsung_jamo_string__[14]
__종_ㅁ_s = hgunicode.__jongsung_jamo_string__[15]
__종_ㅂ_s = hgunicode.__jongsung_jamo_string__[16]
__종_ㅄ_s = hgunicode.__jongsung_jamo_string__[17]
__종_ㅅ_s = hgunicode.__jongsung_jamo_string__[18]
__종_ㅆ_s = hgunicode.__jongsung_jamo_string__[19]
__종_ㅇ_s = hgunicode.__jongsung_jamo_string__[20]
__종_ㅈ_s = hgunicode.__jongsung_jamo_string__[21]
__종_ㅊ_s = hgunicode.__jongsung_jamo_string__[22]
__종_ㅋ_s = hgunicode.__jongsung_jamo_string__[23]
__종_ㅌ_s = hgunicode.__jongsung_jamo_string__[24]
__종_ㅍ_s = hgunicode.__jongsung_jamo_string__[25]
__종_ㅎ_s = hgunicode.__jongsung_jamo_string__[26]

###
__초성자모_s_목록 = [__초_ㄱ_s,__초_ㄲ_s,__초_ㄴ_s,__초_ㄷ_s,__초_ㄸ_s,__초_ㄹ_s,
                __초_ㅁ_s,__초_ㅂ_s,__초_ㅃ_s,__초_ㅅ_s,__초_ㅆ_s,__초_ㅇ_s,
                __초_ㅈ_s,__초_ㅉ_s,__초_초_s,__초_ㅋ_s,__초_ㅌ_s,__초_ㅍ_s,
                __초_ㅎ_s]

__중성자모_s_목록 = [__중_ㅏ_s,__중_ㅐ_s,__중_ㅑ_s,__중_ㅒ_s,__중_ㅓ_s,__중_ㅔ_s,
                __중_ㅕ_s,__중_ㅖ_s,__중_ㅗ_s,__중_ㅘ_s,__중_ㅙ_s,__중_ㅚ_s,
                __중_ㅛ_s,__중_ㅜ_s,__중_ㅝ_s,__중_ㅞ_s,__중_ㅟ_s,__중_ㅠ_s,
                __중_ㅡ_s,__중_ㅢ_s,__중_ㅣ_s]

__종성자모_s_목록 = [
                __종_ㄱ_s,__종_ㄲ_s,__종_ㄳ_s,__종_ㄴ_s,__종_ㄵ_s,__종_ㄶ_s,__종_ㄷ_s,
                __종_ㄹ_s,__종_ㄺ_s,__종_ㄻ_s,__종_ㄼ_s,__종_ㄽ_s,__종_ㄾ_s,__종_ㄿ_s,
                __종_ㅀ_s,__종_ㅁ_s,__종_ㅂ_s,__종_ㅄ_s,__종_ㅅ_s,__종_ㅆ_s,__종_ㅇ_s,
                __종_ㅈ_s,__종_ㅊ_s,__종_ㅋ_s,__종_ㅌ_s,__종_ㅍ_s,__종_ㅎ_s
                ]

## 느린 호환 코드
## __초성자모_s__ = ''
## __초성자모_s__ = ''.join(__초성자모_s_목록)
## __중성자모_s__ = ''
## __중성자모_s__ = ''.join(__중성자모_s_목록)
## __종성자모_s__ = ''
## __종성자모_s__ = ''.join(__종성자모_s_목록)

__초성자모__ = hgunicode.__chosung_jamo_string__ ## 'ᄀᄁᄂᄃᄄᄅᄆᄇᄈᄉᄊᄋᄌᄍᄎᄏᄐᄑᄒ'  # Hangul Jamo (0x1110-0x1112)
__중성자모__ = hgunicode.__jungsung_jamo_string__ ## 'ᅡᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ'  # Hangul Jamo (0x1161-0x1175)
__종성자모__ = hgunicode.__jongsung_jamo_string__ ## 'ᆨᆩᆪᆫᆬᆭᆮᆯᆰᆱᆲᆳᆴᆵᆶᆷᆸᆹᆺᆻᆼᆽᆾᆿᇀᇁᇂ' # Hangul Jamo (0x11A8-0x11C2)

##### ----- #####
__옛초성자모_기본__ = 'ᄓᄔᄕᄖᄗᄘᄙᄚᄛᄜᄝᄞᄟᄠᄡᄢᄣᄤᄥᄦᄧᄨᄩᄪᄫᄬᄭᄮᄯᄰᄱᄲᄳᄴᄵᄶᄷᄸᄹᄺᄻᄼᄽᄾᄿᅀᅁᅂᅃᅄᅅᅆᅇᅈᅉᅊᅋᅌᅍᅎᅏᅐᅑᅒᅓᅔᅕᅖᅗᅘᅙᅚᅛᅜᅝᅞᅟ' ##  Old initial consonants (0x1113-0x115F)  ['ᄓ'~'ᅟ'] HANGUL CHOSEONG FILLER (화면에 안 보임)
__옛중성자모_기본__ = 'ᅶᅷᅸᅹᅺᅻᅼᅽᅾᅿᆀᆁᆂᆃᆄᆅᆆᆇᆈᆉᆊᆋᆌᆍᆎᆏᆐᆑᆒᆓᆔᆕᆖᆗᆘᆙᆚᆛᆜᆝᆞᆟᆠᆡᆢᆣᆤᆥᆦᆧ'# Old medial vowels (0x1176-0x11A7) ['ᅶ'~'ᆧ'] == ㅗㅒ(화면에 안 보임)
__옛종성자모_기본__ = 'ᇃᇄᇅᇆᇇᇈᇉᇊᇋᇌᇍᇎᇏᇐᇑᇒᇓᇔᇕᇖᇗᇘᇙᇚᇛᇜᇝᇞᇟᇠᇡᇢᇣᇤᇥᇦᇧᇨᇩᇪᇫᇬᇭᇮᇯᇰᇱᇲᇳᇴᇵᇶᇷᇸᇹᇺᇻᇼᇽᇾᇿ'  # Old final consonants (0x11C3-0x11FF) ['ᇃ'~'ᇿ']

__옛초성자모_확장__ = 'ꥠꥡꥢꥣꥤꥥꥦꥧꥨꥩꥪꥫꥬꥭꥮꥯꥰꥱꥲꥳꥴꥵꥶꥷꥸꥹꥺꥻꥼ' # hangul Jamo extended-A 0xA960('ꥠ') 0xA97C('ꥼ'))
__옛중성자모_확장__ = 'ힰힱힲힳힴힵힶힷힸힹힺힻힼힽힾힿퟀퟁퟂퟃퟄퟅퟆ'  # hangul Jamo extended-B1 0xD7B0('ힰ') 0xD7C6('ퟆ'))
__옛종성자모_확장__ = 'ퟋퟌퟍퟎퟏퟐퟑퟒퟓퟔퟕퟖퟗퟘퟙퟚퟛퟜퟝퟞퟟퟠퟡퟢퟣퟤퟥퟦퟧퟨퟩퟪퟫퟬퟭퟮퟯퟰퟱퟲퟳퟴퟵퟶퟷퟸퟹퟺퟻ'  ## hangul Jamo extended-B1 0xD7B0('ퟋ') 0xD7C6('ퟻ'))


__HANGUL_CHOSEONG_FILLER_v__ = int('115F', 16)   # 'ᅟ'  (화면에 안 보임)
__HANGUL_CHOSEONG_FILLER__ =  'ᅟ' # 0x115F # (화면에 안 보임)
__HANGUL_JUNGSEONG_FILLER_v__ = int('1160', 16) # 'ᅠ' (화면에 안 보임)
__HANGUL_JUNGSEONG_FILLER__ = 'ᅠ' # 0x1160 # (화면에 안 보임)

__초성_채움__ = __HANGUL_CHOSEONG_FILLER__
__중성_채움__ = __HANGUL_JUNGSEONG_FILLER__
초성_채움 = __초성_채움__
중성_채움 = __중성_채움__


__옛초성자모__ = __옛초성자모_기본__ + __옛초성자모_확장__
__옛중성자모__ = __옛중성자모_기본__ + __옛중성자모_확장__
__옛종성자모__ = __옛종성자모_기본__ + __옛종성자모_확장__

__초성자모집__ = __초성자모__ + __옛초성자모_기본__ + __옛초성자모_확장__
__중성자모집__ = __중성_채움__ + __중성자모__ + __옛중성자모_기본__ + __옛중성자모_확장__
__종성자모집__ = __종성자모__ + __옛종성자모_기본__ + __옛종성자모_확장__


## 초성_자모 __chosung_jamo_string__ = 'ᄀᄁᄂᄃᄄᄅᄆᄇᄈᄉᄊᄋᄌᄍᄎᄏᄐᄑᄒ'  # Hangul Jamo (0x1110-0x1112)
## 변수명은 키보드에서 입력가능한 문자를 사용해야 하므로 Hangul Compatibility Jamo 이고, 실제값은 Hangul Jamo (0x1110-0x1112)이다
초성_ㄱ = 'ᄀ' # 4352 0x1100
초성_ㄲ = 'ᄁ' # 4353 0x1101
초성_ㄴ = 'ᄂ' # 4354 0x1102
초성_ㄷ = 'ᄃ' # 4355 0x1103
초성_ㄸ = 'ᄄ' # 4356 0x1104
초성_ㄹ = 'ᄅ' # 4357 0x1105
초성_ㅁ = 'ᄆ' # 4358 0x1106
초성_ㅂ = 'ᄇ' # 4359 0x1107
초성_ㅃ = 'ᄈ' # 4360 0x1108
초성_ㅅ = 'ᄉ' # 4361 0x1109
초성_ㅆ = 'ᄊ' # 4362 0x110a
초성_ㅇ = 'ᄋ' # 4363 0x110b
초성_ㅈ = 'ᄌ' # 4364 0x110c
초성_ㅉ = 'ᄍ' # 4365 0x110d
초성_초 = 'ᄎ' # 4366 0x110e
초성_ㅋ = 'ᄏ' # 4367 0x110f
초성_ㅌ = 'ᄐ' # 4368 0x1110
초성_ㅍ = 'ᄑ' # 4369 0x1111
초성_ㅎ = 'ᄒ' # 4370 0x1112


## 중성자모 __jungsung_jamo_char_list = 'ᅡᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ'  # Hangul Jamo (0x1161-0x1175)
## 변수명은 키보드에서 입력가능한 문자를 사용해야 하므로 Hangul Compatibility Jamo 이고, 실제값은 Hangul Jamo (0x1161-0x1175)이다
중성채움자 = chr(4448) # 중성 채움(0x1160)
중성_ㅏ = 'ᅡ' # 4449 0x1161'
중성_ㅐ = 'ᅢ' # 4450 0x1162'
중성_ㅑ = 'ᅣ' # 4451 0x1163'
중성_ㅒ = 'ᅤ' # 4452 0x1164'
중성_ㅓ = 'ᅥ' # 4453 0x1165'
중성_ㅔ = 'ᅦ' # 4454 0x1166'
중성_ㅕ = 'ᅧ' # 4455 0x1167
중성_ㅖ = 'ᅨ' # 4456 0x1168'
중성_ㅗ = 'ᅩ' # 4457 0x1169'
중성_ㅘ = 'ᅪ' # 4458 0x116a'
중성_ㅙ = 'ᅫ' # 4459 0x116b'
중성_ㅚ = 'ᅬ' # 4460 0x116c'
중성_ㅛ = 'ᅭ' # 4461 0x116d'
중성_ㅜ = 'ᅮ' # 4462 0x116e
중성_ㅝ = 'ᅯ' # 4463 0x116f
중성_ㅞ = 'ᅰ' # 4464 0x1170
중성_ㅟ = 'ᅱ' # 4465 0x1171
중성_ㅠ = 'ᅲ' # 4466 0x1172
중성_ㅡ = 'ᅳ' # 4467 0x1173
중성_ㅢ = 'ᅴ' # 4468 0x1174
중성_ㅣ = 'ᅵ' # 4469 0x1175


## 종성자모 __jongsung_jamo_char_list = 'ᆨᆩᆪᆫᆬᆭᆮᆯᆰᆱᆲᆳᆴᆵᆶᆷᆸᆹᆺᆻᆼᆽᆾᆿᇀᇁᇂ' # Hangul Jamo 
## 변수명은 키보드에서 입력가능한 문자를 사용해야 하므로 Hangul Compatibility Jamo 이고, 실제값은 Hangul Jamo (0x11A8-0x11C2)이다
종성_ㄱ = 'ᆨ' # 4520 0x11a8
종성_ㄲ = 'ᆩ' # 4521 0x11a9
종성_ㄳ = 'ᆪ' # 4522 0x11aa
종성_ㄴ = 'ᆫ' # 4523 0x11ab
종성_ㄵ = 'ᆬ' # 4524 0x11ac
종성_ㄶ = 'ᆭ' # 4525 0x11ad
종성_ㄷ = 'ᆮ' # 4526 0x11ae
종성_ㄹ = 'ᆯ' # 4527 0x11af
종성_ㄺ = 'ᆰ' # 4528 0x11b0
종성_ㄻ = 'ᆱ' # 4529 0x11b1
종성_ㄼ = 'ᆲ' # 4530 0x11b2
종성_ㄽ = 'ᆳ' # 4531 0x11b3
종성_ㄾ = 'ᆴ' # 4532 0x11b4
종성_ㄿ = 'ᆵ' # 4533 0x11b5
종성_ㅀ = 'ᆶ' # 4534 0x11b6
종성_ㅁ = 'ᆷ' # 4535 0x11b7
종성_ㅂ = 'ᆸ' # 4536 0x11b8
종성_ㅄ = 'ᆹ' # 4537 0x11b9
종성_ㅅ = 'ᆺ' # 4538 0x11ba
종성_ㅆ = 'ᆻ' # 4539 0x11bb
종성_ㅇ = 'ᆼ' # 4540 0x11bc
종성_ㅈ = 'ᆽ' # 4541 0x11bd
종성_ㅊ = 'ᆾ' # 4542 0x11be
종성_ㅋ = 'ᆿ' # 4543 0x11bf
종성_ㅌ = 'ᇀ' # 4544 0x11c0
종성_ㅍ = 'ᇁ' # 4545 0x11c1
종성_ㅎ = 'ᇂ' # 4546 0x11c2


## 옛초성_자모 <= __옛초성자모_기본__ = 'ᄓᄔᄕᄖᄗᄘᄙᄚᄛᄜᄝᄞᄟᄠᄡᄢᄣᄤᄥᄦᄧᄨᄩᄪᄫᄬᄭᄮᄯᄰᄱᄲᄳᄴᄵᄶᄷᄸᄹᄺᄻᄼᄽᄾᄿᅀᅁᅂᅃᅄᅅᅆᅇᅈᅉᅊᅋᅌᅍᅎᅏᅐᅑᅒᅓᅔᅕᅖᅗᅘᅙᅚᅛᅜᅝᅞᅟ' ##  Old initial consonants (0x0x1113-0x0x115F)  ['ᄓ'~'ᅟ'] HANGUL CHOSEONG FILLER (화면에 안 보임)
## 변수명은 키보드에서 입력가능한 문자를 사용해야 하므로 Hangul Compatibility Jamo 이고, 실제값은 Hangul Jamo (0x0x1113-0x0x115F)이다
초성채움자 = chr(4447) # 초성 채움(0x115F)
옛초성_ㄴㄱ = 'ᄓ' # 4371 0x1113
옛초성_ㄴㄴ = 'ᄔ' # 4372 0x1114
옛초성_ㄴㄷ = 'ᄕ' # 4373 0x1115
옛초성_ㄴㅂ = 'ᄖ' # 4374 0x1116
옛초성_ㄷㄱ = 'ᄗ' # 4375 0x1117
옛초성_ㄹㄴ = 'ᄘ' # 4376 0x1118
옛초성_ㄹㄹ = 'ᄙ' # 4377 0x1119
옛초성_ㄹㅎ = 'ᄚ' # 4378 0x111a
옛초성_ㄹㅇ = 'ᄛ' # 4379 0x111b
옛초성_ㅁㅂ = 'ᄜ' # 4380 0x111c
옛초성_ㅁㅇ = 'ᄝ' # 4381 0x111d
옛초성_ㅂㄱ = 'ᄞ' # 4382 0x111e
옛초성_ㅂㄴ = 'ᄟ' # 4383 0x111f
옛초성_ㅂㄷ = 'ᄠ' # 4384 0x1120
옛초성_ㅂㅅ = 'ᄡ' # 4385 0x1121
옛초성_ㅂㅅㄱ = 'ᄢ' # 4386 0x1122
옛초성_ㅂㅅㄷ = 'ᄣ' # 4387 0x1123
옛초성_ㅂㅅㅂ = 'ᄤ' # 4388 0x1124
옛초성_ㅂㅅㅅ = 'ᄥ' # 4389 0x1125
옛초성_ㅂㅅㅈ = 'ᄦ' # 4390 0x1126
옛초성_ㅂㅈ = 'ᄧ' # 4391 0x1127
옛초성_ㅂㅊ = 'ᄨ' # 4392 0x1128
옛초성_ㅂㅌ = 'ᄩ' # 4393 0x1129
옛초성_ㅂㅍ = 'ᄪ' # 4394 0x112a
옛초성_ㅂㅇ = 'ᄫ' # 4395 0x112b
옛초성_ㅂㅂㅇ = 'ᄬ' # 4396 0x112c
옛초성_ㅅㄱ = 'ᄭ' # 4397 0x112d
옛초성_ㅅㄴ = 'ᄮ' # 4398 0x112e
옛초성_ㅅㄷ = 'ᄯ' # 4399 0x112f
옛초성_ㅅㄹ = 'ᄰ' # 4400 0x1130
옛초성_ㅅㅁ = 'ᄱ' # 4401 0x1131
옛초성_ㅅㅂ = 'ᄲ' # 4402 0x1132
옛초성_ㅅㅂㄱ = 'ᄳ' # 4403 0x1133
옛초성_ㅅㅅㅅ = 'ᄴ' # 4404 0x1134
옛초성_ㅅㅇ = 'ᄵ' # 4405 0x1135
옛초성_ㅅㅈ = 'ᄶ' # 4406 0x1136
옛초성_ㅅㅊ = 'ᄷ' # 4407 0x1137
옛초성_ㅅㅋ = 'ᄸ' # 4408 0x1138
옛초성_ㅅㅌ = 'ᄹ' # 4409 0x1139
옛초성_ㅅㅍ = 'ᄺ' # 4410 0x113a
옛초성_ㅅㅎ = 'ᄻ' # 4411 0x113b
옛초성_1ㅅ = 'ᄼ' # 4412 0x113c  # '1'은 길다는 뜻이고,왼쪽
옛초성_1ㅅ1ㅅ = 'ᄽ' # 4413 0x113d  # '1'은 길다는 뜻이고,왼쪽
옛초성_ㅅ1 = 'ᄾ' # 4414 0x113e  # '1'은 길다는 뜻이고,오른쪽
옛초성_ㅅ1ㅅ1 = 'ᄿ' # 4415 0x113f  # '1'은 길다는 뜻이고,오른쪽
옛초성_ㅅ3 = 'ᅀ' # 4416 0x1140  # ㅅ3 : 반치음
옛초성_ㅇㄱ = 'ᅁ' # 4417 0x1141
옛초성_ㅇㄷ = 'ᅂ' # 4418 0x1142
옛초성_ㅇㅁ = 'ᅃ' # 4419 0x1143
옛초성_ㅇㅂ = 'ᅄ' # 4420 0x1144
옛초성_ㅇㅅ = 'ᅅ' # 4421 0x1145
옛초성_ㅇㅅ3 = 'ᅆ' # 4422 0x1146  # ㅅ3 : 반치음
옛초성_ㅇㅇ = 'ᅇ' # 4423 0x1147
옛초성_ㅇㅈ = 'ᅈ' # 4424 0x1148
옛초성_ㅇㅊ = 'ᅉ' # 4425 0x1149
옛초성_ㅇㅌ = 'ᅊ' # 4426 0x114a
옛초성_ㅇㅍ = 'ᅋ' # 4427 0x114b
옛초성_ㅇ1 = 'ᅌ' # 4428 0x114c   # ㅇ1 : 꼭지이응
옛초성_ㅈㅇ = 'ᅍ' # 4429 0x114d
옛초성_1ㅈ = 'ᅎ' # 4430 0x114e  # '1'은 길다는 뜻이고,왼쪽
옛초성_1ㅈ1ㅈ = 'ᅏ' # 4431 0x114f  # '1'은 길다는 뜻이고,왼쪽
옛초성_ㅈ1 = 'ᅐ' # 4432 0x1150  # '1'은 길다는 뜻이고,오른쪽
옛초성_ㅈ1ㅈ1 = 'ᅑ' # 4433 0x1151  # '1'은 길다는 뜻이고,오른쪽
옛초성_ㅊㅋ = 'ᅒ' # 4434 0x1152
옛초성_ㅊㅎ = 'ᅓ' # 4435 0x1153
옛초성_1ㅊ = 'ᅔ' # 4436 0x1154  # '1'은 길다는 뜻이고,왼쪽
옛초성_ㅊ1 = 'ᅕ' # 4437 0x1155  # '1'은 길다는 뜻이고,오른쪽
옛초성_ㅍㅂ = 'ᅖ' # 4438 0x1156
옛초성_ㅍㅇ = 'ᅗ' # 4439 0x1157
옛초성_ㅎㅎ = 'ᅘ' # 4440 0x1158
옛초성_ㅡㅇ = 'ᅙ' # 4441 0x1159
옛초성_ㄱㄷ = 'ᅚ' # 4442 0x115a (화면에 안 보임)
옛초성_ㄴㅅ = 'ᅛ' # 4443 0x115b (화면에 안 보임)
옛초성_ㄴㅈ = 'ᅜ' # 4444 0x115c (화면에 안 보임)
옛초성_ㄴㅎ = 'ᅝ' # 4445 0x115d (화면에 안 보임)
옛초성_ㄷㄹ = 'ᅞ' # 4446 0x115e (화면에 안 보임)

옛초성_ㅄ = 옛초성_ㅂㅅ # 'ᄡ' # 4385 0x1121
옛초성_ㅄㄱ = 옛초성_ㅂㅅㄱ # 'ᄢ' # 4386 0x1122
옛초성_ㅄㄷ = 옛초성_ㅂㅅㄷ # 'ᄣ' # 4387 0x1123
옛초성_ㅄㅂ = 옛초성_ㅂㅅㅂ # 'ᄤ' # 4388 0x1124
옛초성_ㅄㅅ = 옛초성_ㅂㅅㅅ # 'ᄥ' # 4389 0x1125
옛초성_ㅂㅆ = 옛초성_ㅂㅅㅅ # 'ᄥ' # 4389 0x1125
옛초성_ㅄㅈ = ㅂㅅㅈ = 'ᄦ' # 4390 0x1126

옛초성_ㅃㅇ = 옛초성_ㅂㅂㅇ # 'ᄬ' # 4396 0x112c
옛초성_ㅆㅅ = 옛초성_ㅅㅅㅅ # 'ᄴ' # 4404 0x1134
옛초성_ㅅㅆ = 옛초성_ㅅㅅㅅ # 'ᄴ' # 4404 0x1134
옛초성_ㄵ = 옛초성_ㄴㅈ # 'ᅜ' # 4444 0x115c (화면에 안 보임)
옛초성_ㄶ = 옛초성_ㄴㅎ # 'ᅝ' # 4445 0x115d (화면에 안 보임)


## 옛초성_자모 <= __옛초성자모_확장__ = 'ꥠꥡꥢꥣꥤꥥꥦꥧꥨꥩꥪꥫꥬꥭꥮꥯꥰꥱꥲꥳꥴꥵꥶꥷꥸꥹꥺꥻꥼ' ##  Old initial consonants (0xA960-0xA97C)  ['ꥠ'~'ꥼ']
## 변수명은 키보드에서 입력가능한 문자를 사용해야 하므로 Hangul Compatibility Jamo 이고, 실제값은 Hangul Jamo (0xA960-0xA97C)이다
옛초성_ㄷㅁ = 'ꥠ' # 43360 0xa960
옛초성_ㄷㅂ = 'ꥡ' # 43361 0xa961
옛초성_ㄷㅅ = 'ꥢ' # 43362 0xa962
옛초성_ㄷㅈ = 'ꥣ' # 43363 0xa963
옛초성_ㄹㄱ = 'ꥤ' # 43364 0xa964
옛초성_ㄹㄱㄱ = 'ꥥ' # 43365 0xa965
옛초성_ㄹㄷ = 'ꥦ' # 43366 0xa966
옛초성_ㄹㄷㄷ = 'ꥧ' # 43367 0xa967
옛초성_ㄹㅁ = 'ꥨ' # 43368 0xa968
옛초성_ㄹㅂ = 'ꥩ' # 43369 0xa969
옛초성_ㄹㅂㅂ = 'ꥪ' # 43370 0xa96a
옛초성_ㄹㅂㅇ = 'ꥫ' # 43371 0xa96b
옛초성_ㄹㅅ = 'ꥬ' # 43372 0xa96c
옛초성_ㄹㅈ = 'ꥭ' # 43373 0xa96d
옛초성_ㄹㅋ = 'ꥮ' # 43374 0xa96e
옛초성_ㅁㄱ = 'ꥯ' # 43375 0xa96f
옛초성_ㅁㄷ = 'ꥰ' # 43376 0xa970
옛초성_ㅁㅅ = 'ꥱ' # 43377 0xa971
옛초성_ㅂㅅㅌ = 'ꥲ' # 43378 0xa972
옛초성_ㅂㅋ = 'ꥳ' # 43379 0xa973
옛초성_ㅂㅎ = 'ꥴ' # 43380 0xa974
옛초성_ㅆㅂ = 'ꥵ' # 43381 0xa975
옛초성_ㅇㄹ = 'ꥶ' # 43382 0xa976
옛초성_ㅇㅎ = 'ꥷ' # 43383 0xa977
옛초성_ㅈㅈㅎ = 'ꥸ' # 43384 0xa978
옛초성_ㅌㅌ = 'ꥹ' # 43385 0xa979
옛초성_ㅍㅎ = 'ꥺ' # 43386 0xa97a
옛초성_ㅎㅅ = 'ꥻ' # 43387 0xa97b
옛초성_ㅡㅇㅡㅇ = 'ꥼ' # 43388 0xa97c

옛초성_ㄺ = 옛초성_ㄹㄱ # 'ꥤ' # 43364 0xa964
옛초성_ㄹㄲ = 옛초성_ㄹㄱㄱ # 'ꥥ' # 43365 0xa965
옛초성_ㄺㄱ = 옛초성_ㄹㄱㄱ # 'ꥥ' # 43365 0xa965
옛초성_ㄹㄸ = 옛초성_ㄹㄷㄷ = 'ꥧ' # 43367 0xa967
옛초성_ㄻ = 옛초성_ㄹㅁ # 'ꥨ' # 43368 0xa968
옛초성_ㄼ = 옛초성_ㄹㅂ # 'ꥩ' # 43369 0xa969
옛초성_ㄹㅃ = 옛초성_ㄹㅂㅂ # 'ꥪ' # 43370 0xa96a
옛초성_ㄼㅇ = 옛초성_ㄹㅂㅇ # 'ꥫ' # 43371 0xa96b
옛초성_ㄽ = 옛초성_ㄹㅅ # 'ꥬ' # 43372 0xa96c
옛초성_ㅄㅌ = 옛초성_ㅂㅅㅌ # 'ꥲ' # 43378 0xa972
옛초성_ㅉㅎ = 옛초성_ㅈㅈㅎ # 'ꥸ' # 43384 0xa978


## 옛중성_자모 <= __옛중성자모_기본__ = 'ᅶᅷᅸᅹᅺᅻᅼᅽᅾᅿᆀᆁᆂᆃᆄᆅᆆᆇᆈᆉᆊᆋᆌᆍᆎᆏᆐᆑᆒᆓᆔᆕᆖᆗᆘᆙᆚᆛᆜᆝᆞᆟᆠᆡᆢᆣᆤᆥᆦᆧ'# Old medial vowels (0x1176-0x11A7) ['ᅶ'~'ᆧ'] == ㅗㅒ(화면에 안 보임)
## 변수명은 키보드에서 입력가능한 문자를 사용해야 하므로 Hangul Compatibility Jamo 이고, 실제값은 Hangul Jamo (0x1176-0x11A7)이다
옛중성_ㅗㅏ = 'ᅶ' # 4470 0x1176
옛중성_ㅜㅏ = 'ᅷ' # 4471 0x1177
옛중성_ㅗㅑ = 'ᅸ' # 4472 0x1178
옛중성_ㅛㅑ = 'ᅹ' # 4473 0x1179
옛중성_ㅗㅓ = 'ᅺ' # 4474 0x117a
옛중성_ㅜㅓ = 'ᅻ' # 4475 0x117b
옛중성_ㅡㅓ = 'ᅼ' # 4476 0x117c
옛중성_ㅗㅕ = 'ᅽ' # 4477 0x117d
옛중성_ㅜㅕ = 'ᅾ' # 4478 0x117e
옛중성_ㅗㅓ1 = 'ᅿ' # 4479 0x117f  # '1'은 길다는 뜻
옛중성_ㅗㅔ = 'ᆀ' # 4480 0x1180
옛중성_ㅗㅖ = 'ᆁ' # 4481 0x1181
옛중성_ㅗㅗ = 'ᆂ' # 4482 0x1182
옛중성_ㅜㅗ = 'ᆃ' # 4483 0x1183
옛중성_ㅛㅑ1 = 'ᆄ' # 4484 0x1184  # '1'은 길다는 뜻
옛중성_ㅛㅒ = 'ᆅ' # 4485 0x1185
옛중성_ㅛㅕ = 'ᆆ' # 4486 0x1186
옛중성_ㅗㅛ = 'ᆇ' # 4487 0x1187
옛중성_ㅛㅣ = 'ᆈ' # 4488 0x1188
옛중성_ㅜㅏ1 = 'ᆉ' # 4489 0x1189  # '1'은 길다는 뜻
옛중성_ㅜㅐ = 'ᆊ' # 4490 0x118a
옛중성_ㅜㅡㅓ = 'ᆋ' # 4491 0x118b
옛중성_ㅜㅖ = 'ᆌ' # 4492 0x118c
옛중성_ㅜㅜ = 'ᆍ' # 4493 0x118d
옛중성_ㅠㅏ = 'ᆎ' # 4494 0x118e
옛중성_ㅠㅓ = 'ᆏ' # 4495 0x118f
옛중성_ㅠㅔ = 'ᆐ' # 4496 0x1190
옛중성_ㅠㅕ = 'ᆑ' # 4497 0x1191
옛중성_ㅠㅖ = 'ᆒ' # 4498 0x1192
옛중성_ㅠㅜ = 'ᆓ' # 4499 0x1193
옛중성_ㅠㅣ = 'ᆔ' # 4500 0x1194
옛중성_ㅡㅜ = 'ᆕ' # 4501 0x1195
옛중성_ㅡㅡ = 'ᆖ' # 4502 0x1196
옛중성_ㅡㅜㅣ = 'ᆗ' # 4503 0x1197
옛중성_ㅣㅏ = 'ᆘ' # 4504 0x1198
옛중성_ㅣㅑ = 'ᆙ' # 4505 0x1199
옛중성_ㅗㅣ = 'ᆚ' # 4506 0x119a
옛중성_ㅜㅣ = 'ᆛ' # 4507 0x119b
옛중성_ㅡㅣ = 'ᆜ' # 4508 0x119c
옛중성_ㅣ아 = 'ᆝ' # 4509 0x119d
옛중성_아 = 'ᆞ' # 4510 0x119e
옛중성_아ㅓ = 'ᆟ' # 4511 0x119f
옛중성_아ㅜ = 'ᆠ' # 4512 0x11a0
옛중성_아ㅣ = 'ᆡ' # 4513 0x11a1
옛중성_아아 = 'ᆢ' # 4514 0x11a2 # (화면에 안 보임)
옛중성_ㅡㅏ = 'ᆣ' # 4515 0x11a3 # (화면에 안 보임)
옛중성_ㅜㅑ = 'ᆤ' # 4516 0x11a4 # (화면에 안 보임)
옛중성_ㅑㅕ = 'ᆥ' # 4517 0x11a5 # (화면에 안 보임)
옛중성_ㅗㅑ1 = 'ᆦ' # 4518 0x11a6 # (화면에 안 보임)
옛중성_ㅗㅒ = 'ᆧ' # 4519 0x11a7 # (화면에 안 보임)

옛중성_ㅘ = 옛중성_ㅗㅏ # 'ᅶ' # 4470 0x1176
옛중성_ㅝ = 옛중성_ㅜㅓ # 'ᅻ' # 4475 0x117b
옛중성_ㅚ = 옛중성_ㅗㅣ # 'ᆚ' # 4506 0x119a
옛중성_ㅟ = 옛중성_ㅜㅣ # 'ᆛ' # 4507 0x119b
옛중성_ㅢ = 옛중성_ㅡㅣ # 'ᆜ' # 4508 0x119c


## 옛종성_자모 <= __옛종성자모_기본__ = 'ᇃᇄᇅᇆᇇᇈᇉᇊᇋᇌᇍᇎᇏᇐᇑᇒᇓᇔᇕᇖᇗᇘᇙᇚᇛᇜᇝᇞᇟᇠᇡᇢᇣᇤᇥᇦᇧᇨᇩᇪᇫᇬᇭᇮᇯᇰᇱᇲᇳᇴᇵᇶᇷᇸᇹᇺᇻᇼᇽᇾᇿ'  # Old final consonants (0x11C3-0x11FF) ['ᇃ'~'ᇿ']
## 변수명은 키보드에서 입력가능한 문자를 사용해야 하므로 Hangul Compatibility Jamo 이고, 실제값은 Hangul Jamo (0x11C3-0x11FF)이다
옛종성_ㄱㄹ = 'ᇃ' # 4547 0x11c3
옛종성_ㄱㅅㄱ = 'ᇄ' # 4548 0x11c4
옛종성_ㄴㄱ = 'ᇅ' # 4549 0x11c5
옛종성_ㄴㄷ = 'ᇆ' # 4550 0x11c6
옛종성_ㄴㅅ = 'ᇇ' # 4551 0x11c7
옛종성_ㄴㅅ3 = 'ᇈ' # 4552 0x11c8  # ㅅ3 : 반치음
옛종성_ㄴㅌ = 'ᇉ' # 4553 0x11c9
옛종성_ㄷㄱ = 'ᇊ' # 4554 0x11ca
옛종성_ㄷㄹ = 'ᇋ' # 4555 0x11cb
옛종성_ㄹㄱㅅ = 'ᇌ' # 4556 0x11cc
옛종성_ㄹㄴ = 'ᇍ' # 4557 0x11cd
옛종성_ㄹㄷ = 'ᇎ' # 4558 0x11ce
옛종성_ㄹㄷㅎ = 'ᇏ' # 4559 0x11cf
옛종성_ㄹㄹ = 'ᇐ' # 4560 0x11d0
옛종성_ㄹㅁㄱ = 'ᇑ' # 4561 0x11d1
옛종성_ㄹㅁㅅ = 'ᇒ' # 4562 0x11d2
옛종성_ㄹㅂㅅ = 'ᇓ' # 4563 0x11d3
옛종성_ㄹㅂㅎ = 'ᇔ' # 4564 0x11d4
옛종성_ㄹㅂㅇ = 'ᇕ' # 4565 0x11d5
옛종성_ㄹㅅㅅ = 'ᇖ' # 4566 0x11d6
옛종성_ㄹㅅ3 = 'ᇗ' # 4567 0x11d7  # ㅅ3 : 반치음
옛종성_ㄹㅋ = 'ᇘ' # 4568 0x11d8
옛종성_ㄹㅡㅇ = 'ᇙ' # 4569 0x11d9
옛종성_ㅁㅂ = 'ᇚ' # 4570 0x11da
옛종성_ㅁㄹ = 'ᇛ' # 4571 0x11db
옛종성_ㅁㅂ = 'ᇜ' # 4572 0x11dc
옛종성_ㅁㅅ = 'ᇝ' # 4573 0x11dd
옛종성_ㅁㅅㅅ = 'ᇞ' # 4574 0x11de
옛종성_ㅁㅅ3 = 'ᇟ' # 4575 0x11df  # ㅅ3 : 반치음
옛종성_ㅁㅊ = 'ᇠ' # 4576 0x11e0
옛종성_ㅁㅎ = 'ᇡ' # 4577 0x11e1
옛종성_ㅁㅇ = 'ᇢ' # 4578 0x11e2
옛종성_ㅂㄹ = 'ᇣ' # 4579 0x11e3
옛종성_ㅂㅍ = 'ᇤ' # 4580 0x11e4
옛종성_ㅂㅎ = 'ᇥ' # 4581 0x11e5
옛종성_ㅂㅇ = 'ᇦ' # 4582 0x11e6
옛종성_ㅅㄱ = 'ᇧ' # 4583 0x11e7
옛종성_ㅅㄷ = 'ᇨ' # 4584 0x11e8
옛종성_ㅅㄹ = 'ᇩ' # 4585 0x11e9
옛종성_ㅅㅂ = 'ᇪ' # 4586 0x11ea
옛종성_ㅅ3 = 'ᇫ' # 4587 0x11eb  # ㅅ3 : 반치음
옛종성_ㅇㄱ = 'ᇬ' # 4588 0x11ec
옛종성_ㅇㄱㄱ = 'ᇭ' # 4589 0x11ed
옛종성_ㅇㅇ = 'ᇮ' # 4590 0x11ee
옛종성_ㅇㅋ = 'ᇯ' # 4591 0x11ef
옛종성_ㅇ1 = 'ᇰ' # 4592 0x11f0   # ㅇ1 : 꼭지이응
옛종성_ㅇ1ㅅ = 'ᇱ' # 4593 0x11f1
옛종성_ㅇ1ㅅ3 = 'ᇲ' # 4594 0x11f2  # ㅅ3 : 반치음
옛종성_ㅍㅂ = 'ᇳ' # 4595 0x11f3
옛종성_ㅍㅇ = 'ᇴ' # 4596 0x11f4
옛종성_ㅎㄴ = 'ᇵ' # 4597 0x11f5
옛종성_ㅎㄹ = 'ᇶ' # 4598 0x11f6
옛종성_ㅎㅁ = 'ᇷ' # 4599 0x11f7
옛종성_ㅎㅂ = 'ᇸ' # 4600 0x11f8
옛종성_ㅡㅇ = 'ᇹ' # 4601 0x11f9
옛종성_ㄱㄴ = 'ᇺ' # 4602 0x11fa
옛종성_ㄱㅂ = 'ᇻ' # 4603 0x11fb
옛종성_ㄱㅈ = 'ᇼ' # 4604 0x11fc
옛종성_ㄱㅋ = 'ᇽ' # 4605 0x11fd
옛종성_ㄱㅎ = 'ᇾ' # 4606 0x11fe
옛종성_ㄴㄴ = 'ᇿ' # 4607 0x11ff

옛종성_ㄳㄱ = 옛종성_ㄱㅅㄱ # 'ᇄ' # 4548 0x11c4
옛종성_ㄺㅅ = 옛종성_ㄹㄱㅅ # 'ᇌ' # 4556 0x11cc
옛종성_ㄻㄱ = 옛종성_ㄹㅁㄱ #'ᇑ' # 4561 0x11d1
옛종성_ㄻㅅ = 옛종성_ㄹㅁㅅ # 'ᇒ' # 4562 0x11d2
옛종성_ㄼㅅ = 옛종성_ㄹㅂㅅ # 'ᇓ' # 4563 0x11d3
옛종성_ㄹㅄ = 옛종성_ㄹㅂㅅ # 'ᇓ' # 4563 0x11d3
옛종성_ㄼㅎ = 옛종성_ㄹㅂㅎ # 'ᇔ' # 4564 0x11d4
옛종성_ㄼㅇ = 옛종성_ㄹㅂㅇ #'ᇕ' # 4565 0x11d5
옛종성_ㄽㅅ = 옛종성_ㄹㅅㅅ #'ᇖ' # 4566 0x11d6
옛종성_ㄹㅆ = 옛종성_ㄹㅅㅅ #'ᇖ' # 4566 0x11d6
옛종성_ㄽ3 = 옛종성_ㄹㅅ3   #'ᇗ' # 4567 0x11d7
옛종성_ㅁㅆ = 옛종성_ㅁㅅㅅ #'ᇞ' # 4574 0x11de


#=====================
#Hangul Jamo Extended-B
#=====================
#========= Hangul Jamo - Old medial vowels, Extended-B
옛중성_ㅗㅕB = 'ힰ' # 55216 0xd7b0
옛중성_ㅗㅗㅑ = 'ힱ' # 55217 0xd7b1
옛중성_ㅛㅏ = 'ힲ' # 55218 0xd7b2
옛중성_ㅛㅐ = 'ힳ' # 55219 0xd7b3
옛중성_ㅛㅓ = 'ힴ' # 55220 0xd7b4
옛중성_ㅜㅕB = 'ힵ' # 55221 0xd7b5
옛중성_ㅟㅣ = 'ힶ' # 55222 0xd7b6
옛중성_ㅠㅐ = 'ힷ' # 55223 0xd7b7
옛중성_ㅠㅗ = 'ힸ' # 55224 0xd7b8
옛중성_ㅡㅏB = 'ힹ' # 55225 0xd7b9
옛중성_ㅡㅓB = 'ힺ' # 55226 0xd7ba
옛중성_ㅡㅔ = 'ힻ' # 55227 0xd7bb
옛중성_ㅡㅗ = 'ힼ' # 55228 0xd7bc
옛중성_ㅣㅑㅗ = 'ힽ' # 55229 0xd7bd
옛중성_ㅣㅒ = 'ힾ' # 55230 0xd7be
옛중성_ㅣㅕ = 'ힿ' # 55231 0xd7bf
옛중성_ㅣㅖ = 'ퟀ' # 55232 0xd7c0
옛중성_ㅣㅚ = 'ퟁ' # 55233 0xd7c1
옛중성_ㅣㅛ = 'ퟂ' # 55234 0xd7c2
옛중성_ㅣㅠ = 'ퟃ' # 55235 0xd7c3
옛중성_ㅣㅣ = 'ퟄ' # 55236 0xd7c4
옛중성_아ㅏ = 'ퟅ' # 55237 0xd7c5
옛중성_아에 = 'ퟆ' # 55238 0xd7c6

옛중성_ㅜㅣㅣ = 옛중성_ㅟㅣ # 'ힶ' # 55222 0xd7b6
옛중성_ㅣㅗㅣ = 옛중성_ㅣㅚ = 'ퟁ' # 55233 0xd7c1


# ힰힱힲힳힴힵힶힷힸힹힺힻힼힽힾힿퟀퟁퟂퟃퟄퟅퟆ
#========= Hangul Jamo - Old final consonants, Extended-B
옛종성_ㄴㄹ = 'ퟋ' # 55243 0xd7cb
옛종성_ㄴㅊ = 'ퟌ' # 55244 0xd7cc
옛종성_ㄸ = 'ퟍ' # 55245 0xd7cd
옛종성_ㄸㅂ = 'ퟎ' # 55246 0xd7ce
옛종성_ㄷㅂ = 'ퟏ' # 55247 0xd7cf
옛종성_ㄷㅅ = 'ퟐ' # 55248 0xd7d0
옛종성_ㄷㅅㄱ = 'ퟑ' # 55249 0xd7d1
옛종성_ㄷㅈ = 'ퟒ' # 55250 0xd7d2
옛종성_ㄷㅊ = 'ퟓ' # 55251 0xd7d3
옛종성_ㄷㅌ = 'ퟔ' # 55252 0xd7d4
옛종성_ㄺㄱ = 'ퟕ' # 55253 0xd7d5
옛종성_ㄺㅎ = 'ퟖ' # 55254 0xd7d6
옛종성_ㄹㄹㅋ = 'ퟗ' # 55255 0xd7d7
옛종성_ㄻㅎ = 'ퟘ' # 55256 0xd7d8
옛종성_ㄼㄷ = 'ퟙ' # 55257 0xd7d9
옛종성_ㄼㅍ = 'ퟚ' # 55258 0xd7da
옛종성_ㄹㅇ1 = 'ퟛ' # 55259 0xd7db
옛종성_ㄹㅡㅇㅎ = 'ퟜ' # 55260 0xd7dc
옛종성_ㄹㅇ = 'ퟝ' # 55261 0xd7dd
옛종성_ㅁㄴ = 'ퟞ' # 55262 0xd7de
옛종성_ㅁㄴㄴ = 'ퟟ' # 55263 0xd7df
옛종성_ㅁㅁ = 'ퟠ' # 55264 0xd7e0
옛종성_ㅁㅄ = 'ퟡ' # 55265 0xd7e1
옛종성_ㅁㅈ = 'ퟢ' # 55266 0xd7e2
옛종성_ㅂㄷ = 'ퟣ' # 55267 0xd7e3
옛종성_ㅂㄹㅍ = 'ퟤ' # 55268 0xd7e4
옛종성_ㅂㅁ = 'ퟥ' # 55269 0xd7e5
옛종성_ㅃ = 'ퟦ' # 55270 0xd7e6
옛종성_ㅄㄷ = 'ퟧ' # 55271 0xd7e7
옛종성_ㅂㅈ = 'ퟨ' # 55272 0xd7e8
옛종성_ㅂㅊ = 'ퟩ' # 55273 0xd7e9
옛종성_ㅅㅁ = 'ퟪ' # 55274 0xd7ea
옛종성_ㅅㅂㅇ = 'ퟫ' # 55275 0xd7eb
옛종성_ㅆㄱ = 'ퟬ' # 55276 0xd7ec
옛종성_ㅆㄷ = 'ퟭ' # 55277 0xd7ed
옛종성_ㅅㅅ3 = 'ퟮ' # 55278 0xd7ee
옛종성_ㅅㅈ = 'ퟯ' # 55279 0xd7ef
옛종성_ㅅㅊ = 'ퟰ' # 55280 0xd7f0
옛종성_ㅅㅌ = 'ퟱ' # 55281 0xd7f1
옛종성_ㅅㅎ = 'ퟲ' # 55282 0xd7f2
옛종성_ㅅ3ㅂ = 'ퟳ' # 55283 0xd7f3
옛종성_ㅅ3ㅂㅇ = 'ퟴ' # 55284 0xd7f4
옛종성_ㅇ1ㅁ = 'ퟵ' # 55285 0xd7f5
옛종성_ㅇ1ㅎ = 'ퟶ' # 55286 0xd7f6
옛종성_ㅈㅂ = 'ퟷ' # 55287 0xd7f7
옛종성_ㅈㅃ = 'ퟸ' # 55288 0xd7f8
옛종성_ㅉ = 'ퟹ' # 55289 0xd7f9
옛종성_ㅍㅅ = 'ퟺ' # 55290 0xd7fa
옛종성_ㅍㅌ = 'ퟻ' # 55291 0xd7fb

옛종성_ㄷㄷ = 옛종성_ㄸ  # 'ퟍ' # 55245 0xd7cd
옛종성_ㄷㄷㅂ = 옛종성_ㄸㅂ # 'ퟎ' # 55246 0xd7ce
옛종성_ㄹㄱㄱ = 옛종성_ㄺㄱ # 'ퟕ' # 55253 0xd7d5
옛종성_ㄹㄲ = 옛종성_ㄺㄱ # 'ퟕ' # 55253 0xd7d5
옛종성_ㄹㄱㅎ = 옛종성_ㄺㅎ # 'ퟖ' # 55254 0xd7d6
옛종성_ㄹㅁㅎ = 옛종성_ㄻㅎ # 'ퟘ' # 55256 0xd7d8
옛종성_ㄹㅂㄷ = 옛종성_ㄼㄷ # 'ퟙ' # 55257 0xd7d9
옛종성_ㄹㅂㅍ = 옛종성_ㄼㅍ # 'ퟚ' # 55258 0xd7da
옛종성_ㅁㅂㅅ = 옛종성_ㅁㅄ # 'ퟡ' # 55265 0xd7e1
옛종성_ㅂㅂ = 옛종성_ㅃ # 'ퟦ' # 55270 0xd7e6
옛종성_ㅂㅅㄷ = 옛종성_ㅄㄷ # 'ퟧ' # 55271 0xd7e7
옛종성_ㅅㅅㄱ = 옛종성_ㅆㄱ # 'ퟬ' # 55276 0xd7ec
옛종성_ㅅㅅㄷ = 옛종성_ㅆㄷ # 'ퟭ' # 55277 0xd7ed
옛종성_ㅈㅂㅂ = 옛종성_ㅈㅃ # 'ퟸ' # 55288 0xd7f8
옛종성_ㅈㅈ = 옛종성_ㅉ # 'ퟹ' # 55289 0xd7f9

#=========================
#=========================
#=========================
호환자모 = 'ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ'
반각자모 = 'ᅠᄀᄁᆪᄂᆬᆭᄃᄄᄅᆰᆱᆲᆳᆴᆵᄚᄆᄇᄈᄡᄉᄊᄋᄌᄍᄎᄏᄐᄑ하ᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ' # 맨 앞에 반각 채움 문자 포함, 총 52자

#=========================
#=========================
#=========================
def 한글출력(문자열):
    print(문자열)

def 디버깅출력(문자열):
    hgbasic.print_debug_msg(문자열)


def 자모인가1(자모1):
    if(isinstance(자모1, str) != True):  return False
    if(len(자모1) != 1): return False
    #
    if(__초성자모집__.find(자모1) >= 0): return True
    elif(__중성자모집__.find(자모1) >= 0): return True
    elif(__종성자모집__.find(자모1) >= 0): return True
    else: return False

def 자모인가2(자모구분, 자모1):
    if(isinstance(자모1, str) != True):  return False
    if(len(자모1) != 1): return False

    #
    if(자모구분 == '초성'):
        if(__초성자모집__.find(자모1) == (-1)): return False
    elif(자모구분 == '중성'):
        if(__중성자모집__.find(자모1) == (-1)): return False
    elif(자모구분 == '종성'):
        if(__종성자모집__.find(자모1) == (-1)): return False
    else: 
        return False
    return True

def 초성자모냐(자모1):
    if(isinstance(자모1, str) != True):  return False
    if(len(자모1) != 1): return False

    #
    if(__초성자모집__.find(자모1) == (-1)): 
        return False
    return True

def 중성자모냐(자모1):
    if(isinstance(자모1, str) != True):  return False
    if(len(자모1) != 1): return False

    #
    if(__중성자모집__.find(자모1) == (-1)): 
        return False
    return True

def 종성자모냐(자모1):
    if(isinstance(자모1, str) != True):  return False
    if(len(자모1) != 1): return False

    #
    if(__종성자모집__.find(자모1) == (-1)): 
        return False
    return True

def 방점인가(자모1):
    if(isinstance(자모1, str) != True):  return False
    if(len(자모1) != 1): return False

    #
    if(자모1 == __방점1__): # '〮' #  12334 0x302e
        return True
    if(자모1 == __방점2__): # '〯' # 12335 0x302f
        return True
    return False

def 음절_자모변환(음절):
    ChoJungJongString = hgunicode.hgGetChoJungJongString_Char(음절)
    return ChoJungJongString

def 옛자모인가(자모구분, 자모1, 간단처리=True):
    if(간단처리 != True):  # 자모검사를 생략하는 간단 처리가 아니므로 자모가 맞는지 검사한다.
        if(자모인가2(자모구분, 자모1) != True): return False

    #
    if(자모구분 == '초성'):
        if(__초성자모__.find(자모1) == (-1)): return True # (현대)초성자모 아니므로 옛자모
    elif(자모구분 == '중성'):
        if(__중성자모__.find(자모1) == (-1)): return True
    elif(자모구분 == '종성'):
        if(__종성자모__.find(자모1) == (-1)): return True # (현대)초성자모 아니므로 옛자모
    else: 
        return False

def 음절조합(초성자, 중성자, 종성자=''):
    # old: 한글조합
    음절조합 = ''
    if(isinstance(초성자, str) != True):  return 음절조합
    if(isinstance(중성자, str) != True):  return 음절조합
    if(isinstance(종성자, str) != True):  
        # 한글출력('(isinstance(종성자, str) != True)')
        return 음절조합
    if(len(초성자) != 1): return 음절조합
    if(len(중성자) != 1): return 음절조합
    if(len(종성자) > 0):
        if(len(종성자) != 1): return 음절조합
        else :
            if(자모인가2('종성', 종성자) == False):
                return 음절조합
    #
    if((자모인가2('초성', 초성자) == False) or (자모인가2('중성', 중성자) == False)):
        return 음절조합

    #
    old_jamo = False
    if((옛자모인가('초성', 초성자) == True) or (옛자모인가('중성', 중성자) == True)):
        old_jamo = True
    if(len(종성자) > 0):
        if(옛자모인가('종성', 종성자) == True):
            old_jamo = True

    #
    if(old_jamo == True): 
        음절조합 += 초성자
        음절조합 += 중성자
        if(len(종성자) > 0):
            음절조합 += 종성자
    else: # 현대어는 음절 규칙에 맞게 음절을 만들어 준다.
        초성자_순위 = __초성자모__.find(초성자)
        중성자_순위 = __중성자모__.find(중성자)
        종성자_순위 = 0
        if(len(종성자) > 0):
            종성자_순위 = (__종성자모__.find(종성자) + 1)
        음절조합 = hgbasic.get_hangul_syllable_index(초성자_순위, 중성자_순위, 종성자_순위)

    return 음절조합

def 자모3_1음절변환(초성자, 중성자, 종성자=''):
    # old: 자모_1음절변환
    return 음절조합(초성자, 중성자, 종성자)

def 문자열_자모변환(문자열):
    변환문자열 = ''
    순서 = 0
    for 글자 in 문자열:
        현재글자상태 = 글자상태(글자)
        if(현재글자상태 == hgchartype.글자상태_한글): # (자모가 아니라)음절
            변환문자열 += 음절_자모변환(글자)
        elif(현재글자상태 == hgchartype.글자상태_자모): # Jamo(자모) => 낱글자 처리
            변환문자열 += 글자
        else: # 한글(음절, 자모)가 아닌 상태
            변환문자열 += 글자
        #
        순서 += 1
    return 변환문자열

def 자모_음절변환(문자열):
    변환문자열 = ''
    길이 = 길이값(문자열)
    순서 = 0
    글자수 = 0; 과거글자수 = 0
    위치 = 0
    while(위치 < 길이):
        음절 = ''
        글자 = 문자열[위치]
        현재글자상태 = 글자상태(글자)
        #디버깅출력(글자)
        if(현재글자상태 == hgchartype.글자상태_자모): # Jamo(자모)
            if(초성자모냐(글자) == True):
                if((위치 + 1) < 길이):
                    다음글자 = 문자열[위치+1]
                    다음글자상태 = 글자상태(다음글자)
                    if(다음글자상태 == hgchartype.글자상태_자모): # Jamo(자모)
                        if(중성자모냐(다음글자) == True):
                            if((위치 + 2) < 길이):
                                다다음글자 = 문자열[위치+2]
                                다다음글자상태 = 글자상태(다다음글자)
                                if(다다음글자상태 == hgchartype.글자상태_자모): # Jamo(자모)
                                    if(종성자모냐(다다음글자) == True): # 초성+중성+종성
                                        음절 = 자모3_1음절변환(글자, 다음글자, 다다음글자)
                                        위치 += 3
                                    else: # 초성+중성_^_자모
                                        음절 = 자모3_1음절변환(글자, 다음글자)
                                        위치 += 2
                                else: # 초성+중성_^_자모아님
                                    음절 = 자모3_1음절변환(글자, 다음글자)
                                    위치 += 2
                            else: # 초성+중성__문자열끝
                                음절 = 자모3_1음절변환(글자, 다음글자)
                                위치 += 2
                        else: # 초성__^_자모 => 음절 구성이 안 되므로 통과
                            pass
                else:   # 초성__문자열끝 => 음절 구성이 안 되므로 통과
                    pass
            else: # 초성이 아닌 자모 => 음절 구성이 안 되므로 통과
                pass
        # 앞에서 음절이 생성되었으면 음절과 합치고, 아니면 현재 글자를 합친다.
        if(len(음절) > 0):
            변환문자열 += 음절
        else:
            변환문자열 += 글자
            위치 += 1
    return 변환문자열


__replace_lf__display_char0__ = ' ' # space
__replace_lf__display_char1__ = '¶' # 00B6
__replace_lf__display_char2__ = '⌫' #232B  ERASE TO THE LEFT
__replace_lf__display_char3__ = '⎆' # 2386  ENTER SYMBOL
__replace_lf__display_char__ = __replace_lf__display_char2__

def 자모3_음절경계_찾기(문자열, 자모위치):
    음절위치 = -1
    음절길이 = 0
    음절경계 = [음절위치, 음절길이]
    
    길이 = len(문자열)
    if(자모위치 >= 길이):
        return 음절경계

    위치 = 자모위치
    글자 = 문자열[위치]
    if(초성자모냐(글자) == True):
        #print(hgbasic._func_line_(), "if(초성자모냐(글자) == True):")
        음절위치 = 위치
        음절길이 += 1
        if((위치 + 1) < 길이):
            #print(hgbasic._func_line_(), "if((위치 + 1) < 길이):")
            다음글자 = 문자열[위치+1]
            if(중성자모냐(다음글자) == True): # 초성+중성
                #print(hgbasic._func_line_(), "if(중성자모냐(다음글자) == True)")
                음절길이 += 1
                if((위치 + 2) < 길이):
                    다다음글자 = 문자열[위치+2]
                    if(종성자모냐(다다음글자) == True): # 초성+중성+종성
                        음절길이 += 1
                        if((위치 + 3) < 길이):
                            다다다음글자 = 문자열[위치+3]
                            if(방점인가(다다다음글자) == True): # 초성+중성+종성+방점
                                음절길이 += 1
                            else:
                                pass
                        else:
                            pass
                    elif(방점인가(다다음글자) == True): # 초성+중성+방점
                        음절길이 += 1
                    else:
                        pass
                else:
                    pass
                #print(hgbasic._func_line_(), "음절길이:", 음절길이)
        else:
            pass
    elif(중성자모냐(글자) == True):
        음절길이 += 1

        #--------------
        # 앞쪽 초성 확인
        #--------------
        if(위치 > 0):
            이전글자 = 문자열[위치-1]
            if(초성자모냐(이전글자) == True):
                음절길이 += 1
                음절위치 = 위치 - 1
            else: # 중성 앞에 초성이 아닌 경우
                음절위치 = 위치
        else:   # 중성이 문자열 맨 앞에 온 경우
            음절위치 = 위치

        #--------------
        # 뒤쪽 종성 확인
        #--------------
        if((위치 + 1) < 길이):
            다음글자 = 문자열[위치+1]
            if(종성자모냐(다음글자) == True): # ?+중성+종성
                음절길이 += 1
                if((위치 + 2) < 길이):
                    다다음글자 = 문자열[위치+2]
                    if(방점인가(다다음글자) == True): # ?+중성+종성+방점
                        음절길이 += 1
                    else:
                        pass
                else:
                    pass
            elif(방점인가(다음글자) == True): # ?+중성+방점
                음절길이 += 1
            else:
                pass
        else:
            pass

    elif(종성자모냐(글자) == True):
        음절길이 += 1

        #--------------
        # 앞쪽 초성 확인
        #--------------
        if(위치 > 0):
            이전글자 = 문자열[위치-1]
            if(중성자모냐(이전글자) == True):
                음절길이 += 1
                음절위치 = 위치 - 1
                if(위치 > 1):
                    이이전글자 = 문자열[위치-2]
                    if(초성자모냐(이이전글자) == True):
                        음절길이 += 1
                        음절위치 = 위치 - 2
                    else: # {중성+종성} 앞에 초성이 아닌 경우
                        pass
                else: # {중성+종성} 맨 앞에 온 경우
                    pass
            else: # 종성 앞에 중성이 아닌 경우
                음절위치 = 위치
        else:   # 종성이 문자열 맨 앞에 온 경우
            음절위치 = 위치

        #--------------
        # 뒤쪽 방점 확인
        #--------------
        if((위치 + 1) < 길이):
            다음글자 = 문자열[위치+1]
            if(방점인가(다음글자) == True): # ?+?+종성+방점
                음절길이 += 1
            else:
                pass
        else:
            pass

    elif(방점인가(글자) == True):
        음절길이 += 1

        #--------------
        # 앞쪽 초성 확인
        #--------------
        if(위치 > 0):
            이전글자 = 문자열[위치-1]
            if(종성자모냐(이전글자) == True): # 종성+방점
                음절길이 += 1
                음절위치 = 위치 - 1
                if(위치 > 1):
                    이이전글자 = 문자열[위치-2]
                    if(중성자모냐(이이전글자) == True): # 중성+종성+방점
                        음절길이 += 1
                        음절위치 = 위치 - 2
                        if(위치 > 2):
                            이이이전글자 = 문자열[위치-3]
                            if(초성자모냐(이이이전글자) == True): # 초성+중성+종성+방점
                                음절길이 += 1
                                음절위치 = 위치 - 3
                            else: # {중성+종성+방점} 앞에 초성이 아닌 경우
                                pass
                        else: # {중성+종성+방점} 맨 앞에 온 경우
                            pass
                    else: # {종성+방점} 앞에 중성이 아닌 경우
                        pass
                else: # {종성+방점} 맨 앞에 온 경우
                    pass
            elif(중성자모냐(이전글자) == True): # 중성+방점
                음절길이 += 1
                음절위치 = 위치 - 1
                if(위치 > 1):
                    이이전글자 = 문자열[위치-2]
                    if(초성자모냐(이이전글자) == True): # 초성+중성+방점
                        음절길이 += 1
                        음절위치 = 위치 - 2
                    else: # {중성+방점} 앞에 초성이 아닌 경우
                        pass
                else: # {중성+방점} 맨 앞에 온 경우
                    pass
            else: # {방점} 앞에 [종성/종성]이 아닌 경우
                음절위치 = 위치
        else:   # {방점}이 문자열 맨 앞에 온 경우
            음절위치 = 위치

    else:
        pass
    
    음절경계 = [음절위치, 음절길이]
    #print(hgbasic._func_line_(), "음절경계:", 음절경계)
    return 음절경계


def 자모찾기_목록__자모문자열(찾는대상_자모문자열, 찾는자모열):
    # 자모가 아닌 영문자는 대소문자를 구분한다.
    찾는_자모열_목록 = []
    찾은회수 = 0
    시작위치 = 0

    # first find
    자모위치 = 찾는대상_자모문자열.find(찾는자모열, 시작위치)
    while(자모위치 >= 0):
        찾은회수 += 1
        음절경계 = 자모3_음절경계_찾기(찾는대상_자모문자열, 자모위치)
        if(음절경계[0] >= 0): # 자모
            #print('[', 찾은회수, ']', 음절경계) # debug
            음절위치 = 음절경계[0]
            음절길이 = 음절경계[1]
        else: # 자모가 아니라 일반 문자
            #print('[', 찾은회수, ']', 자모위치) # debug
            음절위치 = 자모위치
            음절길이 = len(찾는자모열)

        찾는음절 = 찾는대상_자모문자열[음절위치: (음절위치 + 음절길이)]
        음절변환1 = 자모_음절변환(찾는음절)
        if(len(음절변환1) <= 0):
            음절변환1 = 찾는자모열
        #print(찾는음절, ':', 음절변환1) # debug

        #---
        찾은항목 = {'위치': 음절위치, '음절길이': 음절길이, '음절':음절변환1}
        찾는_자모열_목록.append(찾은항목)
        
        # next find
        시작위치 = 음절위치 + 음절길이
        자모위치 = 찾는대상_자모문자열.find(찾는자모열, 시작위치)

    return 찾는_자모열_목록


def 자모_선행어추출(찾는대상_자모문자열, 자모위치, 중앙정렬_선행길이 = 5):
    자모열길이 = len(찾는대상_자모문자열)
    진행카운터 = 0
    정렬위치 = 자모위치
    정렬위치 -= 1
    while(정렬위치 >= 0):
        음절경계 = 자모3_음절경계_찾기(찾는대상_자모문자열, 정렬위치)
        if(음절경계[0] >= 0): 
            #print('[', 진행카운터, ']', 음절경계) # debug
            음절위치 = 음절경계[0]
            음절길이 = 음절경계[1]
        else: # 자모가 아니라 일반 문자
            #print('[', 진행카운터, ']', 정렬위치) # debug
            음절위치 = 정렬위치
            음절길이 = 1
        # print(찾는대상_자모문자열[정렬위치: 정렬위치+10]) # debug

        진행카운터 += 1
        정렬위치 = 음절위치
        if(진행카운터 >= 중앙정렬_선행길이):
            break
        if(음절길이 == 1):
            if(찾는대상_자모문자열[음절위치] == '\n'): # 줄바꿈이면 그만한다
                break
        # count
        정렬위치 -= 1

    #print('정렬위치:', 정렬위치) # debug
    if(정렬위치 < 0):
        정렬위치 = 0

    #-----------
    # 맨 앞에서 선행길이가 모자라면 채운다.
    채움문자 = ' '
    중앙정렬_선행어 = ''
    while(진행카운터 < 중앙정렬_선행길이): 
        중앙정렬_선행어 += 채움문자
        진행카운터 += 1

    #print('[정렬위치 : 자모위치]', 정렬위치, ':',  자모위치) # debug
    선행어 = 찾는대상_자모문자열[정렬위치: 자모위치]
    중앙정렬_선행어 += 선행어

    #-----------
    # '\n' 문자는 줄바뀜을 막기 위해 출력 가능한 문자로 바꾼다.
    중앙정렬_선행어 = 중앙정렬_선행어.replace('\n', __replace_lf__display_char__)

    #-----------
    #print(len(선행어), ':', 선행어) # debug
    #print(len(중앙정렬_선행어), ':', 중앙정렬_선행어) # debug

    #테스트출력(선행어)
    #테스트출력(중앙정렬_선행어)

    return 중앙정렬_선행어


def 자모_후행어추출(찾는대상_자모문자열, 자모위치, 중앙정렬_후행길이 = 5):
    자모열길이 = len(찾는대상_자모문자열)
    진행카운터 = 0
    정렬위치 = 자모위치

    #-------------------------
    # 지정 위치 다음 음절로 이동
    #-------------------------
    음절경계 = 자모3_음절경계_찾기(찾는대상_자모문자열, 정렬위치)
    if(음절경계[0] >= 0): 
        #print('[', 진행카운터, ']', 음절경계) # debug
        음절위치 = 음절경계[0]
        음절길이 = 음절경계[1]
    else: # 자모가 아니라 일반 문자
        #print('[', 진행카운터, ']', 정렬위치) # debug
        음절위치 = 정렬위치
        음절길이 = 1
    후행_정렬위치_시작 = (음절위치 + 음절길이)
    정렬위치 = 후행_정렬위치_시작

    #------------------
    # 후행음절 찾기 시작
    #------------------
    while(정렬위치 < 자모열길이):
        음절경계 = 자모3_음절경계_찾기(찾는대상_자모문자열, 정렬위치)
        if(음절경계[0] >= 0): 
            #print('[', 진행카운터, ']', 음절경계) # debug
            음절위치 = 음절경계[0]
            음절길이 = 음절경계[1]
        else: # 자모가 아니라 일반 문자
            #print('[', 진행카운터, ']', 정렬위치) # debug
            음절위치 = 정렬위치
            음절길이 = 1
        정렬위치 = (음절위치 + 음절길이)
        진행카운터 += 1
        if(진행카운터 >= 중앙정렬_후행길이):
            break
        if(음절길이 == 1):
            if(찾는대상_자모문자열[음절위치] == '\n'): # 줄바꿈이면 그만한다
                break

    #print('진행카운터 :', 진행카운터)
    #print('정렬위치:', 정렬위치) # debug
    if(정렬위치 > 자모열길이):
        정렬위치 = 자모열길이

    #-----------
    # 맨 끝에서 후행길이가 모자라면 채운다.
    채움문자 = ' '
    중앙정렬_후행어 = ''
    while(진행카운터 < 중앙정렬_후행길이): 
        중앙정렬_후행어 += 채움문자
        진행카운터 += 1

    #print('[후행_정렬위치_시작:정렬위치]', 후행_정렬위치_시작, ':', 정렬위치) # debug
    후행어 = 찾는대상_자모문자열[후행_정렬위치_시작: 정렬위치]
    중앙정렬_후행어 = 후행어 + 중앙정렬_후행어

    #-----------
    # '\n' 문자는 줄바뀜을 막기 위해 출력 가능한 문자로 바꾼다.
    중앙정렬_후행어 = 중앙정렬_후행어.replace('\n', __replace_lf__display_char__)

    #-----------
    #print(len(후행어), ':', 후행어) # debug
    #print(len(중앙정렬_후행어), ':', 중앙정렬_후행어) # debug

    #테스트출력(후행어) # debug
    #테스트출력(중앙정렬_후행어) # debug

    return 중앙정렬_후행어


def 자모_중앙정렬(찾는대상_자모문자열, 자모위치, 중앙정렬_선행길이=15, 중앙정렬_후행길이=15, SepChar=''):
    선행어 = '';    찾는음절 = '';    후행어 = ''
    
    #----- 선행어
    선행어 = 자모_선행어추출(찾는대상_자모문자열, 자모위치, 중앙정렬_선행길이 = 중앙정렬_선행길이)
    #print(선행어)
    
    #----- 후행어
    후행어 = 자모_후행어추출(찾는대상_자모문자열, 자모위치, 중앙정렬_후행길이 = 중앙정렬_후행길이)
    #print(후행어)

    #----- 찾는 음절
    음절경계 = 자모3_음절경계_찾기(찾는대상_자모문자열, 자모위치)
    if(음절경계[0] >= 0): # 자모
        #print('[', 찾은회수, ']', 음절경계) # debug
        음절위치 = 음절경계[0]
        음절길이 = 음절경계[1]
    else: # 자모가 아니라 일반 문자
        #print('[', 찾은회수, ']', 자모위치) # debug
        음절위치 = 자모위치
        음절길이 = 1
    찾는음절 = 찾는대상_자모문자열[음절위치: (음절위치 + 음절길이)]
    
    #-----
    중앙정렬_자모열 = 선행어
    if(len(SepChar) > 0):
        중앙정렬_자모열 += SepChar
    중앙정렬_자모열 += 찾는음절
    if(len(SepChar) > 0):
        중앙정렬_자모열 += SepChar
    중앙정렬_자모열 += 후행어

    #print(중앙정렬_자모열)

    #print ('----- 자모 문자열 -> 음절 문자열')
    중앙정렬_음절변환 = 자모_음절변환(중앙정렬_자모열)
    return 중앙정렬_음절변환

def 자모3_목록__자모3텍스트(자모3텍스트):
    #---------------------------------------------------------------------
    # 방점 처리
    # 방점은 {'자모3음절'과 '음절'}에서 분리한다.
    # 방점이 분리되더라도 {'음절길이'}는 방점을 포함한 포함된 상태로 둔다.
    # {'자모3음절'과 '음절'}을 비교할 때는 방점과 관계없이 처리할 수 있게 둔다.
    # [자모3_목록]은 (자모3)텍스트의 음절경계를 추출하는 것이므로 
    # {음절위치, 음절길이}는 방점을 포함하고 있어야 한다.
    #---------------------------------------------------------------------
    자모3_목록 = []

    찾은회수 = 0
    자모길이 = len(자모3텍스트)
    자모위치 = 0
    자모글자수  = 0
    try:
        while(자모위치 < 자모길이):
            자모글자수 += 1
            음절경계 = 자모3_음절경계_찾기(자모3텍스트, 자모위치)
            if(음절경계[0] >= 0): # 자모
                #print('[', 찾은회수, ']', 음절경계) # debug
                음절위치 = 음절경계[0]
                음절길이 = 음절경계[1]
            else: # 자모가 아니라 일반 문자
                #print('[', 찾은회수, ']', 자모위치) # debug
                음절위치 = 자모위치
                음절길이 = 1

            자모3음절 = 자모3텍스트[음절위치: (음절위치 + 음절길이)]
            음절변환1 = 자모_음절변환(자모3음절)
            if(len(음절변환1) <= 0): # 논리적 오류
                raise Exception(' no 음절')
            #print(자모3음절, ':', 음절변환1) # debug

            #-----
            #-----
            방점 = ''
            if(음절길이 >= 2): # 방점 분리(음절에서 방점만 지우고 음절길이는 방점이 포함된 상태로 둔다)
                if(방점인가(자모3음절[음절길이 - 1]) == True):
                    방점 = 자모3음절[음절길이 - 1]
                    자모3음절 = 자모3음절[:음절길이 - 1] # 맨 끝에 방점 지운다.
                    음절변환1 = 음절변환1[:len(음절변환1) - 1] # 맨 끝에 방점 지운다.
                    if(len(자모3음절) == 음절길이): # 논리적 오류
                        print('# 논리적 오류', hgbasic._func_line_())

            #-----
            #-----
            자모3음절항목 = {'위치': 음절위치, '음절길이': 음절길이, '자모3음절': 자모3음절, '방점': 방점, '음절':음절변환1}
            자모3_목록.append(자모3음절항목)
            
            # next find
            자모위치 = 음절위치 + 음절길이
        return 자모3_목록
    except Exception as e:
        print('오류 발생: ', e)
        자모3_목록 = []
        return 자모3_목록


def 자모3_목록__텍스트(텍스트):
    자모변환_텍스트 = 문자열_자모변환(텍스트)
    자모3_목록 = 자모3_목록__자모3텍스트(자모변환_텍스트)
    # {'위치': 음절위치, '음절길이': 음절길이, '자모3음절': 자모3음절, '방점': 방점, '음절':음절변환1}
    return 자모3_목록


def 자모3_사전목록__텍스트(텍스트):
    자모변환_텍스트 = 문자열_자모변환(텍스트)
    자모3_목록 = 자모3_목록__자모3텍스트(자모변환_텍스트)
    # {'위치': 음절위치, '음절길이': 음절길이, '자모3음절': 자모3음절, '방점': 방점, '음절':음절변환1}
    자모3_사전목록 = 자모3_사전목록__자모3목록(자모3_목록)
    return 자모3_사전목록


def 자모3_사전목록__자모3목록(자모3_목록):
    자모3_사전목록 = []

    자모3_목록_정렬 = 자모3_목록.copy()
    자모3_목록_정렬.sort(key = lambda wd: (wd['자모3음절'])) # by abc

    i = 0
    pre_x = None
    for x in 자모3_목록_정렬:
        # x {'위치': 1, '음절길이': 2, '자모3음절': '나', '방점': 방점, '음절': '나'}

        #print(i)
        append_flag = False
        if(i == 0):
            append_flag = True
        else:
            if(pre_x['자모3음절'] == x['자모3음절']):
                freq = pre_x['freq']
                freq += 1
                pre_x['freq'] = freq
                x = pre_x
            else:
                append_flag = True

        if(append_flag == True):
            # x = {'위치': 1, '음절길이': 2, '자모3음절': '나', '방점': 방점, '음절': '나'}
            new_item = {'음절길이': 0, '자모3음절': x['자모3음절'], '음절': x['음절'], 'freq': 1}
            new_item['음절길이'] = len(new_item['자모3음절'])
            자모3_사전목록.append(new_item)
            pre_x = new_item
        else:
            pre_x = x
        # next
        i += 1
        #print(pre_x)

    return 자모3_사전목록

def 자모3_사전목록_출력(자모3_사전목록, 출력않고_미완성음절_찾기=False):
    글자상태목록 = []
    NotComplete_ChoJungJong_Count = 0
    i = 1; total_char = 0
    for x in 자모3_사전목록:
        #-----
        #-----
        # if(자모냐(x['자모3음절'][0]) == False): continue
        글자상태1 = 글자상태(x['자모3음절'][0])

        # 한글 관련 글자 상태 조정
        if(글자상태1 == hgchartype.글자상태_자모): 
            # ['자모3음절']값의 첫 번째 글자가 자모이면 음절 가능한지 확인
            if(len(x['자모3음절']) >= 2): # ['자모3음절'] 첫 번째 글자가 자모이거, 길이가 2이상이면 한글 음절 가능
                글자상태1 = hgchartype.글자상태_한글

        if ((글자상태1 in 글자상태목록) == False):
            글자상태목록.append(글자상태1)
        if(hgchartype.is_script_keyword(글자상태1) == False): continue

        #-----
        #-----
        if(출력않고_미완성음절_찾기==False):
            print(i, ':', x['음절'], '{', x['자모3음절'], '}', '(', x['freq'], ')')

        #-----
        # 미완성 음절 찾기
        #-----
        if(x['음절길이'] == 1): # 자모 1개라서 음절이 못 됨
            if(자모인가1(x['자모3음절'][0]) == True):
                NotComplete_ChoJungJong_Count += 1
                if(출력않고_미완성음절_찾기==True):
                    print ('logic-error: 불완전 자모 분리')
                    print(i, ':', x['음절'], '{', x['자모3음절'], '}', '(', x['freq'], ')')
        elif(x['음절길이'] > 1): # 초성으로 시작하지 않는 경우
            if(초성자모냐(x['자모3음절'][0]) == False):
                NotComplete_ChoJungJong_Count += 1
                if(출력않고_미완성음절_찾기==True):
                    print ('logic-error: 불완전 자모 분리')
                    print(i, ':', x['음절'], '{', x['자모3음절'], '}', '(', x['freq'], ')')
                
        #-----
        #-----
        i += 1
        total_char += x['freq']


    if(출력않고_미완성음절_찾기==False):
        print ('문자수: ', total_char)
        print ('글자 합: ', sum(x['freq'] for x in 자모3_사전목록)) # 비한글(spc, lf) 포함되어 있어서 한글음절 통계 아님
    else:
        if(NotComplete_ChoJungJong_Count >= 1):
            print ("미완성 음절 발견 :", NotComplete_ChoJungJong_Count)
    
    #----            
    자모3_사전목록_출력_상태 = { '미완성음절수': NotComplete_ChoJungJong_Count, '글자상태목록':글자상태목록}
    return 자모3_사전목록_출력_상태

def 자모3_사전목록_통계출력(자모3_사전목록, 글자조건='', 출력않고_통계만=False):
    # 
    i = 1; total_script = 0; cond_cnt = 0; cond_freq = 0
    for x in 자모3_사전목록:
        #-----
        #-----
        # if(자모냐(x['자모3음절'][0]) == False): continue
        글자상태1 = 글자상태(x['자모3음절'][0])
        if(hgchartype.is_script_keyword(글자상태1) == True): 
            total_script += x['freq']

        # 한글 관련 글자 상태 조정
        if(글자상태1 == hgchartype.글자상태_자모): 
            # ['자모3음절']값의 첫 번째 글자가 자모이면 음절 가능한지 확인
            if(len(x['자모3음절']) >= 2): # ['자모3음절'] 첫 번째 글자가 자모이거, 길이가 2이상이면 한글 음절 가능
                글자상태1 = hgchartype.글자상태_한글

        #-----
        #-----
        조건만족=아니오
        if(len(글자조건) > 0):
            #----------
            if((글자조건 == hgchartype.글자상태_한자) or (글자조건 == '한자') or (글자조건 == '한문')):
                if(글자상태1 == hgchartype.글자상태_한자):
                    조건만족 = 예
            #----------
            elif((글자조건 == hgchartype.글자상태_한글) or (글자조건 == '한글')):
                if((글자상태1 == hgchartype.글자상태_한글) or (글자상태1 == hgchartype.글자상태_자모)):
                    조건만족 = 예
            elif((글자조건 == '한글음절') or (글자조건 == '음절')):
                if(글자상태1 == hgchartype.글자상태_한글):
                    조건만족 = 예
            elif((글자조건 == '한글자모') or (글자조건 == '자모')):
                if(글자상태1 == hgchartype.글자상태_자모):
                    조건만족 = 예
            #----------
            elif(글자조건 == '숫자'):
                if(글자상태1 == hgchartype.글자상태_숫자):
                    조건만족 = 예
            #----------
            elif((글자조건 == '영어') or (글자조건 == '영문자') or (글자조건 == '라틴어') or (글자조건 == '로마자')):
                if(글자상태1 == hgchartype.글자상태_영문자):
                    조건만족 = 예
                elif(글자상태1 == hgchartype.글자상태_라틴어):
                    조건만족 = 예
            #----------
            elif((글자조건 == '일어') or (글자조건 == '일문자') or (글자조건 == '일본어')):
                if(글자상태1 == hgchartype.글자상태_일문자):
                    조건만족 = 예
            #----------
            elif((글자조건 == '기호') or (글자조건 == '심볼') or (글자조건 == '기호문자')):
                if(글자상태1 == hgchartype.글자상태_기호):
                    조건만족 = 예
            #----------
            else:
                if(글자조건 == 글자상태1):
                    조건만족 = 예


        if(조건만족 == 예):
            cond_freq +=  x['freq']
            cond_cnt += 1
            if(출력않고_통계만==False):
                print(cond_cnt, ':', x['음절'], '{', x['자모3음절'], '}', '(', x['freq'], ')')

        #-----
        #-----
        #if(x['음절길이'] == 1): # 자모 1개라서 음절이 못 됨
        #    if(자모인가1(x['자모3음절'][0]) == True):
        #        NotComplete_ChoJungJong_Count += 1
        #        if(출력않고_통계만==True):
        #            print ('logic-error: 불완전 자모 분리')
        #            print(i, ':', x['음절'], '{', x['자모3음절'], '}', '(', x['freq'], ')')
        #elif(x['음절길이'] > 1): # 초성으로 시작하지 않는 경우
        #    if(초성자모냐(x['자모3음절'][0]) == False):
        #        NotComplete_ChoJungJong_Count += 1
        #        if(출력않고_통계만==True):
        #            print ('logic-error: 불완전 자모 분리')
        #            print(i, ':', x['음절'], '{', x['자모3음절'], '}', '(', x['freq'], ')')
                
        #-----
        #-----
        i += 1

    if(len(글자조건) > 0):
        글자조건_변환 = hgchartype.get_script_name(글자조건, HangulName=True)
        if((글자조건_변환 != hgchartype.글자상태_몰라) and (len(글자조건_변환) > 0)): # 글자 조건을 보기 좋게 바꿀 수 있으면 바꾼다.
            print (글자조건_변환, end='')
        else:
            print (글자조건, end='')
        print (' 개수: ', cond_cnt, '(글자조건 합: ', cond_freq, ')')
    print ('문자수: ', total_script)
    print ('글자 합: ', sum(x['freq'] for x in 자모3_사전목록)) # 비한글(spc, lf) 포함되어 있어서 한글음절 통계 아님

def 자모찾고_중앙정렬__자모문자열(찾는대상_자모문자열, 찾는자모열, 중앙정렬_여백=10, SepChar=''):
    찾는_자모열_목록 = 자모찾기_목록__자모문자열(찾는대상_자모문자열, 찾는자모열)

    print('[',찾는자모열,']', '찾은 결과: ', len(찾는_자모열_목록))
    if(len(찾는_자모열_목록) > 0):
        #print(찾는_자모열_목록) # debug
        pass

    #heading = ('\t\t' + '-' * 중앙정렬_여백) + 찾는자모열 + ('-' * 중앙정렬_여백)
    #print(heading)

    for i in range(0, len(찾는_자모열_목록)):
        # 찾은항목 = {'위치': 음절위치, '음절길이': 음절길이, '음절':음절변환1}
        찾은항목 = 찾는_자모열_목록[i]
        자모위치 = 찾은항목['위치'] 

        #if(i != 1): continue
        if(중앙정렬_여백 <= 0):
            print(찾은항목['음절'])
        else:
            중앙정렬_음절변환 = 자모_중앙정렬(찾는대상_자모문자열, 자모위치, 중앙정렬_선행길이=중앙정렬_여백, 중앙정렬_후행길이=중앙정렬_여백, SepChar=SepChar)
            #테스트출력(중앙정렬_음절변환)
            중앙정렬_음절변환 = 중앙정렬_음절변환.replace(' ', '_')
            print((i+1), ':\t', 중앙정렬_음절변환)
        #break


def 훈민정음분석__텍스트(텍스트):
    #'----- 자모 음절 사전 from text(string)'
    print ('----- 자모 음절 사전 ')
    자모3_목록 = 자모3_목록__텍스트(텍스트)
    자모3_사전목록 = 자모3_사전목록__자모3목록(자모3_목록) # 음절 목록
    hgbasic.PrintDictList_ByLine(자모3_사전목록)
    #-----------
    print ('----- 자모 음절 빈도 순서 출력')
    자모3_사전목록_빈도순 = 자모3_사전목록.copy()
    자모3_사전목록_빈도순.sort(key = lambda wd: (-wd['freq'], wd['자모3음절'])) # by high freq, abc
    자모3_사전목록_출력_상태 = 자모3_사전목록_출력(자모3_사전목록_빈도순)
    #-----------
    print ('----- 자모 음절 길이 순서 출력')
    자모3_사전목록_길이순 = 자모3_사전목록.copy()
    자모3_사전목록_길이순.sort(key = lambda wd: (wd['음절길이'], wd['자모3음절'])) # by low len, abc
    자모3_사전목록_출력_상태 = 자모3_사전목록_출력(자모3_사전목록_길이순)
    #-----------
    print ('----- 자모 음절 문자 상태별 출력')
    글자상태목록_개수 = len(자모3_사전목록_출력_상태['글자상태목록'])
    for 글자상태 in 자모3_사전목록_출력_상태['글자상태목록']:
        자모3_사전목록_통계출력(자모3_사전목록, 글자조건=글자상태)

    # (자모를 제외한 [현대어/옛] '한글음절'만 뽑으려면 따로 출력해야 한다.
    자모3_사전목록_통계출력(자모3_사전목록, 글자조건='음절')

    # ([현대어/옛] 음절 구성한 것을 제외한) '한글자모'만 뽑으려면 따로 출력해야 한다.
    자모3_사전목록_통계출력(자모3_사전목록, 글자조건='자모')

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

Time limit is exhausted. Please reload CAPTCHA.