Changes between Version 13 and Version 14 of 한영타변환기


Ignore:
Timestamp:
Sep 19, 2012, 1:21:35 AM (12 years ago)
Author:
YT Hwang
Comment:

JavaScript로 변환.

Legend:

Unmodified
Added
Removed
Modified
  • 한영타변환기

    v13 v14  
    44----
    55
    6 제목이 나타내듯 바로 '한/영타 변환기' 입니다..[[BR]]
     6제목이 나타내듯 바로 '한/영타 변환기' 입니다.[[BR]]
    77가끔씩 볼 수 있는 'dodls rngka;' 같은 한글을 영어로 친 것이나, '소둇.ㅜㄷㅅ' 같은 영어를 한글로 친 것을 쉽게 원래의 글로 바꿔 줍니다.[[BR]]
    8 물론 그 반대 방향으로의 변환도 가능합니다.
    9 
    10 사용 : 한글로 친 것을 영어로 바꿀 것인지, 영어로 친 것을 한글로 바꿀 것인지 선택한다. 글을 입력하면 바로 변환된다.
    11 
    12 ||입력 문장 :||[[html(<textarea id="txtSource" rows="3" cols="50"></textarea>)]]||
    13 ||||  [[html(<input type="radio" id="optEtoH" name="Mode" checked><label for="optEtoH">영타 → 한글</label>)]]   [[html(<input type="radio" id="optHtoE" name="Mode"><label for="optHtoE">한타 → 영어</label>)]]  ||
     8또한 그 반대 방향으로의 변환도 가능합니다.
     9
     10이 변환기는 한국어 두벌식 자판 ↔ 영문 Qwerty 자판 사이의 변환을 수행합니다.
     11
     12사용 : 한글로 친 것을 영어로 바꿀 것인지, 영어로 친 것을 한글로 바꿀 것인지 선택합니다. 글을 입력하면 바로 변환됩니다.
     13
     14 * (12/09/19) 여러 브라우저에서 사용할 수 있도록 JavaScript로 변환하였습니다.
     15
     16||입력 문장 :||[[html(<textarea id="txtSource" rows="3" cols="50" onKeyUp="doConvert();"></textarea>)]]||
     17||||  [[html(<input type="radio" id="optEtoH" name="Mode" checked onClick="doConvert();"><label for="optEtoH">영타 → 한글</label>)]]   [[html(<input type="radio" id="optHtoE" name="Mode"><label for="optHtoE" onClick="doConvert();">한타 → 영문</label>)]]  ||
    1418||변환 문장 :||[[html(<textarea id="txtConv" rows="3" cols="50"></textarea>)]]||
    1519{{{#!html
    16 <script language="VBScript">
     20<script language="JavaScript">
    1721<!--
    18 Const EngDat = "rRseEfaqQtTdwWczxvgkoiOjpuPhynbml"
    19 Const HanDat = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅛㅜㅠㅡㅣ"
    20 Const ChoDat = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ"
    21 Const JungDat = "ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ"
    22 Const JongDat = "ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ"
    23 
    24 Private Sub optEtoH_OnClick()
    25 txtSource_OnKeyUp
    26 End Sub
    27 
    28 Private Sub optHtoE_OnClick()
    29 txtSource_OnKeyUp
    30 End Sub
    31 
    32 Private Sub txtSource_OnKeyUp()
    33 If optEtoH.Checked Then
    34         txtConv.Value = EngTypeToHan(txtSource.Value)
    35 Else
    36         txtConv.Value = HanTypeToEng(txtSource.Value)
    37 End If
    38 End Sub
    39 
    40 Function EngTypeToHan(Source)
    41 Dim ConvText, tChr
    42 Dim Cho, Jung, Jong, tVal       '초성, 중성, 종성, (임시용) 초성
    43 Dim i, p
    44 
    45 If Len(Source) = 0 Then Exit Function
    46 For i = 1 To Len(Source)
    47         tChr = Mid(Source, i, 1)
    48         p = InStr(EngDat, tChr)
    49         If p = 0 Then                           '영자판이 아님
    50                 If Cho Then
    51                         If Jung Then        '초성+중성+(종성)
    52                                 ConvText = ConvText + MakeHan(Cho - 1, Jung - 1, Jong)
    53                         Else                '초성만
    54                                 ConvText = ConvText + Mid(ChoDat, Cho, 1)
    55                         End If
    56                 Else
    57                         If Jung Then        '중성만
    58                                 ConvText = ConvText + Mid(JungDat, Jung, 1)
    59                         Else                '복자음
    60                                 If Jong Then ConvText = ConvText + Mid(JongDat, Jong, 1)
    61                         End If
    62                 End If
    63                 Cho = 0: Jung = 0: Jong = 0
    64                 ConvText = ConvText + tChr
    65         ElseIf p < 20 Then          '자음
    66                 If Jung Then
    67                         If Cho = 0 Then            '중성만 입력됨, 초성으로
    68                                 ConvText = ConvText + Mid(JungDat, Jung, 1)
    69                                 Jung = 0
    70                                 Cho = InStr(ChoDat, Mid(HanDat, p, 1))
    71                         Else                       '종성이다
    72                                 If Jong = 0 Then       '종성 입력 중
    73                                         Jong = InStr(JongDat, Mid(HanDat, p, 1))
    74                                         If Jong = 0 Then           '종성이 아니라 초성이다
    75                                                 ConvText = ConvText + MakeHan(Cho - 1, Jung - 1, Jong)
    76                                                 Cho = InStr(ChoDat, Mid(HanDat, p, 1)): Jung = 0
    77                                         End If
    78                                 ElseIf Jong = 1 And p = 10 Then        'ㄳ
    79                                         Jong = 3
    80                                 ElseIf Jong = 4 And p = 13 Then        'ㄵ
    81                                         Jong = 5
    82                                 ElseIf Jong = 4 And p = 19 Then        'ㄶ
    83                                         Jong = 6
    84                                 ElseIf Jong = 8 And p = 1 Then         'ㄺ
    85                                         Jong = 9
    86                                 ElseIf Jong = 8 And p = 7 Then         'ㄻ
    87                                         Jong = 10
    88                                 ElseIf Jong = 8 And p = 8 Then         'ㄼ
    89                                         Jong = 11
    90                                 ElseIf Jong = 8 And p = 10 Then        'ㄽ
    91                                         Jong = 12
    92                                 ElseIf Jong = 8 And p = 17 Then        'ㄾ
    93                                         Jong = 13
    94                                 ElseIf Jong = 8 And p = 18 Then        'ㄿ
    95                                         Jong = 14
    96                                 ElseIf Jong = 8 And p = 19 Then        'ㅀ
    97                                         Jong = 15
    98                                 ElseIf Jong = 17 And p = 10 Then       'ㅄ
    99                                         Jong = 18
    100                                 Else                                    '종성 입력 끝, 초성으로
    101                                         ConvText = ConvText + MakeHan(Cho - 1, Jung - 1, Jong)
    102                                         Cho = InStr(ChoDat, Mid(HanDat, p, 1))
    103                                         Jung = 0: Jong = 0
    104                                 End If
    105                         End If
    106                 Else                '초성 또는 (단/복)자음이다
    107                         If Cho = 0 Then             '초성 입력 시작
    108                                 If Jong Then            '복자음 후 초성
    109                                         ConvText = ConvText + Mid(JongDat, Jong, 1)
    110                                         Jong = 0
    111                                 End If
    112                                 Cho = InStr(ChoDat, Mid(HanDat, p, 1))
    113                         ElseIf Cho = 1 And p = 10 Then         'ㄳ
    114                                 Cho = 0: Jong = 3
    115                         ElseIf Cho = 3 And p = 13 Then         'ㄵ
    116                                 Cho = 0: Jong = 5
    117                         ElseIf Cho = 3 And p = 19 Then         'ㄶ
    118                                 Cho = 0: Jong = 6
    119                         ElseIf Cho = 6 And p = 1 Then          'ㄺ
    120                                 Cho = 0: Jong = 9
    121                         ElseIf Cho = 6 And p = 7 Then          'ㄻ
    122                                 Cho = 0: Jong = 10
    123                         ElseIf Cho = 6 And p = 8 Then          'ㄼ
    124                                 Cho = 0: Jong = 11
    125                         ElseIf Cho = 6 And p = 10 Then         'ㄽ
    126                                 Cho = 0: Jong = 12
    127                         ElseIf Cho = 6 And p = 17 Then         'ㄾ
    128                                 Cho = 0: Jong = 13
    129                         ElseIf Cho = 6 And p = 18 Then         'ㄿ
    130                                 Cho = 0: Jong = 14
    131                         ElseIf Cho = 6 And p = 19 Then         'ㅀ
    132                                 Cho = 0: Jong = 15
    133                         ElseIf Cho = 8 And p = 10 Then         'ㅄ
    134                                 Cho = 0: Jong = 18
    135                         Else                                    '단자음을 연타
    136                                 ConvText = ConvText + Mid(ChoDat, Cho, 1)
    137                                 Cho = InStr(ChoDat, Mid(HanDat, p, 1))
    138                         End If
    139                 End If
    140         Else                    '중성
    141                 If Jong Then            '(앞글자 종성), 초성+중성
    142                         Select Case Jong       '복자음 다시 분해
    143                                 Case 3: Jong = 1: tVal = 10            'ㄱ, ㅅ
    144                                 Case 5: Jong = 4: tVal = 13            'ㄴ, ㅈ
    145                                 Case 6: Jong = 4: tVal = 19            'ㄴ, ㅎ
    146                                 Case 9: Jong = 8: tVal = 1             'ㄹ, ㄱ
    147                                 Case 10: Jong = 8: tVal = 7            'ㄹ, ㅁ
    148                                 Case 11: Jong = 8: tVal = 8            'ㄹ, ㅂ
    149                                 Case 12: Jong = 8: tVal = 10           'ㄹ, ㅅ
    150                                 Case 13: Jong = 8: tVal = 17           'ㄹ, ㅌ
    151                                 Case 14: Jong = 8: tVal = 18           'ㄹ, ㅍ
    152                                 Case 15: Jong = 8: tVal = 19           'ㄹ, ㅎ
    153                                 Case 18: Jong = 17: tVal = 10          'ㅂ, ㅅ
    154                                 Case Else                       '복자음 아님
    155                                         tVal = InStr(ChoDat, Mid(JongDat, Jong, 1))
    156                                         Jong = 0
    157                         End Select
    158                         If Cho Then                             '앞글자가 초성+중성+(종성)
    159                                 ConvText = ConvText + MakeHan(Cho - 1, Jung - 1, Jong)
    160                         Else                    '복자음만 있음
    161                                 ConvText = ConvText + Mid(JongDat, Jong, 1)
    162                         End If
    163                         Cho = tVal: Jung = 0: Jong = 0
    164                 End If
    165                 If Jung = 0 Then                           '중성 입력 중
    166                         Jung = InStr(JungDat, Mid(HanDat, p, 1))
    167                 ElseIf Jung = 9 And p = 20 Then            'ㅘ
    168                         Jung = 10
    169                 ElseIf Jung = 9 And p = 21 Then            'ㅙ
    170                         Jung = 11
    171                 ElseIf Jung = 9 And p = 33 Then            'ㅚ
    172                         Jung = 12
    173                 ElseIf Jung = 14 And p = 24 Then           'ㅝ
    174                         Jung = 15
    175                 ElseIf Jung = 14 And p = 25 Then           'ㅞ
    176                         Jung = 16
    177                 ElseIf Jung = 14 And p = 33 Then           'ㅟ
    178                         Jung = 17
    179                 ElseIf Jung = 19 And p = 33 Then           'ㅢ
    180                         Jung = 20
    181                 Else                '조합 안되는 모음 입력
    182                         If Cho Then                     '초성+중성 후 중성
    183                                 ConvText = ConvText + MakeHan(Cho - 1, Jung - 1, Jong)
    184                                 Cho = 0
    185                         Else                '중성 후 중성
    186                                 ConvText = ConvText + Mid(JungDat, Jung, 1)
    187                         End If
    188                         Jung = 0
    189                         ConvText = ConvText + Mid(HanDat, p, 1)
    190                 End If
    191         End If
    192 Next
    193 If Cho Then             '마지막 한글이 있으면 처리
    194         If Jung Then        '초성+중성+(종성)
    195                 ConvText = ConvText + MakeHan(Cho - 1, Jung - 1, Jong)
    196         Else                '초성만
    197                 ConvText = ConvText + Mid(ChoDat, Cho, 1)
    198         End If
    199 Else
    200         If Jung Then        '중성만
    201                 ConvText = ConvText + Mid(JungDat, Jung, 1)
    202         Else                '복자음
    203                 If Jong Then ConvText = ConvText + Mid(JongDat, Jong, 1)
    204         End If
    205 End If
    206 
    207 EngTypeToHan = ConvText
    208 End Function
    209 
    210 Function MakeHan(nChoSung, nJungSung, nJongSung)
    211 MakeHan = ChrW(&HAC00 + nChoSung * 21 * 28 + nJungSung * 28 + nJongSung)
    212 End Function
    213 
    214 Function HanTypeToEng(Source)
    215 Dim ConvText, tChr, tAsc
    216 Dim Jung, Cho, Jong, tVal(5)
    217 Dim i
    218 
    219 If Len(Source) = 0 Then Exit Function
    220 For i = 1 To Len(Source)
    221         tChr = Mid(Source, i, 1)
    222         tAsc = AscW(tChr)
    223         Cho = InStr(ChoDat, tChr)
    224         Jung = InStr(JungDat, tChr)
    225         Jong = InStr(JongDat, tChr)
    226 
    227         If &HAC00 <= tAsc And tAsc <= &HD7A3 Then
    228                 tAsc = tAsc - &HAC00
    229                 tVal(1) = 1 + tAsc \ (21 * 28)              '초성
    230                 tVal(2) = 1 + (tAsc \ 28) Mod 21            '중성
    231                 tVal(4) = tAsc Mod 28                       '종성
    232         ElseIf Cho Then             '초성 자음
    233                 tVal(1) = Cho: tVal(2) = 0: tVal(4) = 0
    234         ElseIf Jung Then            '중성
    235                 tVal(1) = 0: tVal(2) = Jung: tVal(4) = 0
    236         ElseIf Jong Then            '종성 자음
    237                 tVal(1) = 0: tVal(2) = 0: tVal(4) = Jong
    238         Else                        '한글이 아님
    239                 ConvText = ConvText + tChr
    240                 tVal(1) = 0: tVal(2) = 0: tVal(4) = 0
    241         End If
    242 
    243         If tVal(1) Then ConvText = ConvText + Mid(EngDat, tVal(1), 1)
    244         If tVal(2) Then
    245                 Select Case tVal(2)
    246                         Case 10: tVal(2) = 9: tVal(3) = 1       'ㅘ
    247                         Case 11: tVal(2) = 9: tVal(3) = 2       'ㅙ
    248                         Case 12: tVal(2) = 9: tVal(3) = 14      'ㅚ
    249                         Case 15: tVal(2) = 11: tVal(3) = 5      'ㅝ
    250                         Case 16: tVal(2) = 11: tVal(3) = 6      'ㅞ
    251                         Case 17: tVal(2) = 11: tVal(3) = 14     'ㅟ
    252                         Case 20: tVal(2) = 13: tVal(3) = 14     'ㅢ
    253                         Case Else
    254                                 tVal(2) = InStr(HanDat, Mid(JungDat, tVal(2), 1)) - 19
    255                                 tVal(3) = 0
    256                 End Select
    257                 ConvText = ConvText + Mid(EngDat, tVal(2) + 19, 1)
    258                 If tVal(3) Then ConvText = ConvText + Mid(EngDat, tVal(3) + 19, 1)
    259         End If
    260         If tVal(4) Then
    261                 Select Case tVal(4)
    262                         Case 3: tVal(4) = 1: tVal(5) = 10       'ㄳ
    263                         Case 5: tVal(4) = 3: tVal(5) = 13       'ㄵ
    264                         Case 6: tVal(4) = 3: tVal(5) = 19       'ㄶ
    265                         Case 9: tVal(4) = 6: tVal(5) = 1        'ㄺ
    266                         Case 10: tVal(4) = 6: tVal(5) = 7       'ㄻ
    267                         Case 11: tVal(4) = 6: tVal(5) = 8       'ㄼ
    268                         Case 12: tVal(4) = 6: tVal(5) = 10      'ㄽ
    269                         Case 13: tVal(4) = 6: tVal(5) = 17      'ㄾ
    270                         Case 14: tVal(4) = 6: tVal(5) = 18      'ㄿ
    271                         Case 15: tVal(4) = 6: tVal(5) = 19      'ㅀ
    272                         Case 18: tVal(4) = 8: tVal(5) = 10      'ㅄ
    273                         Case Else
    274                                 tVal(4) = InStr(HanDat, Mid(JongDat, tVal(4), 1))
    275                                 tVal(5) = 0
    276                 End Select
    277                 ConvText = ConvText + Mid(EngDat, tVal(4), 1)
    278                 If tVal(5) Then ConvText = ConvText + Mid(EngDat, tVal(5), 1)
    279         End If
    280 Next
    281 
    282 HanTypeToEng = ConvText
    283 End Function
     22var ENG_KEY = "rRseEfaqQtTdwWczxvgkoiOjpuPhynbml";
     23var KOR_KEY = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅛㅜㅠㅡㅣ";
     24var CHO_DATA = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ";
     25var JUNG_DATA = "ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ";
     26var JONG_DATA = "ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ";
     27
     28function doConvert() {
     29        if (optEtoH.checked)
     30                txtConv.value = engTypeToKor(txtSource.value);
     31        else
     32                txtConv.value = korTypeToEng(txtSource.value);
     33}
     34
     35function engTypeToKor(src) {
     36        var res = "";
     37        if (src.length == 0)
     38                return res;
     39
     40        var nCho = -1, nJung = -1, nJong = -1;          // 초성, 중성, 종성
     41
     42        for (var i = 0; i < src.length; i++) {
     43                var ch = src.charAt(i);
     44                var p = ENG_KEY.indexOf(ch);
     45                if (p == -1) {                          // 영자판이 아님
     46                        // 남아있는 한글이 있으면 처리
     47                        if (nCho != -1) {
     48                                if (nJung != -1)                                // 초성+중성+(종성)
     49                                        res += makeHangul(nCho, nJung, nJong);
     50                                else                                                    // 초성만
     51                                        res += CHO_DATA.charAt(nCho);
     52                        } else {
     53                                if (nJung != -1)                                // 중성만
     54                                        res += JUNG_DATA.charAt(nJung);
     55                                else if (nJong != -1)                   // 복자음
     56                                        res += JONG_DATA.charAt(nJong);
     57                        }
     58                        nCho = -1;
     59                        nJung = -1;
     60                        nJong = -1;
     61                        res += ch;
     62                } else if (p < 19) {                    // 자음
     63                        if (nJung != -1) {
     64                                if (nCho == -1) {                                       // 중성만 입력됨, 초성으로
     65                                        res += JUNG_DATA.charAt(nJung);
     66                                        nJung = -1;
     67                                        nCho = CHO_DATA.indexOf(KOR_KEY.charAt(p));
     68                                } else {                                                        // 종성이다
     69                                        if (nJong == -1) {                              // 종성 입력 중
     70                                                nJong = JONG_DATA.indexOf(KOR_KEY.charAt(p));
     71                                                if (nJong == -1) {                      // 종성이 아니라 초성이다
     72                                                        res += makeHangul(nCho, nJung, nJong);
     73                                                        nCho = CHO_DATA.indexOf(KOR_KEY.charAt(p));
     74                                                        nJung = -1;
     75                                                }
     76                                        } else if (nJong == 0 && p == 9) {                      // ㄳ
     77                                                nJong = 2;
     78                                        } else if (nJong == 3 && p == 12) {                     // ㄵ
     79                                                nJong = 4;
     80                                        } else if (nJong == 3 && p == 18) {                     // ㄶ
     81                                                nJong = 5;
     82                                        } else if (nJong == 7 && p == 0) {                      // ㄺ
     83                                                nJong = 8;
     84                                        } else if (nJong == 7 && p == 6) {                      // ㄻ
     85                                                nJong = 9;
     86                                        } else if (nJong == 7 && p == 7) {                      // ㄼ
     87                                                nJong = 10;
     88                                        } else if (nJong == 7 && p == 9) {                      // ㄽ
     89                                                nJong = 11;
     90                                        } else if (nJong == 7 && p == 16) {                     // ㄾ
     91                                                nJong = 12;
     92                                        } else if (nJong == 7 && p == 17) {                     // ㄿ
     93                                                nJong = 13;
     94                                        } else if (nJong == 7 && p == 18) {                     // ㅀ
     95                                                nJong = 14;
     96                                        } else if (nJong == 16 && p == 9) {                     // ㅄ
     97                                                nJong = 17;
     98                                        } else {                                                // 종성 입력 끝, 초성으로
     99                                                res += makeHangul(nCho, nJung, nJong);
     100                                                nCho = CHO_DATA.indexOf(KOR_KEY.charAt(p));
     101                                                nJung = -1;
     102                                                nJong = -1;
     103                                        }
     104                                }
     105                        } else {                                                                // 초성 또는 (단/복)자음이다
     106                                if (nCho == -1) {                                       // 초성 입력 시작
     107                                        if (nJong != -1) {                              // 복자음 후 초성
     108                                                res += JONG_DATA.charAt(nJong);
     109                                                nJong = -1;
     110                                        }
     111                                        nCho = CHO_DATA.indexOf(KOR_KEY.charAt(p));
     112                                } else if (nCho == 0 && p == 9) {                       // ㄳ
     113                                        nCho = -1;
     114                                        nJong = 2;
     115                                } else if (nCho == 2 && p == 12) {                      // ㄵ
     116                                        nCho = -1;
     117                                        nJong = 4;
     118                                } else if (nCho == 2 && p == 18) {                      // ㄶ
     119                                        nCho = -1;
     120                                        nJong = 5;
     121                                } else if (nCho == 5 && p == 0) {                       // ㄺ
     122                                        nCho = -1;
     123                                        nJong = 8;
     124                                } else if (nCho == 5 && p == 6) {                       // ㄻ
     125                                        nCho = -1;
     126                                        nJong = 9;
     127                                } else if (nCho == 5 && p == 7) {                       // ㄼ
     128                                        nCho = -1;
     129                                        nJong = 10;
     130                                } else if (nCho == 5 && p == 9) {                       // ㄽ
     131                                        nCho = -1;
     132                                        nJong = 11;
     133                                } else if (nCho == 5 && p == 16) {                      // ㄾ
     134                                        nCho = -1;
     135                                        nJong = 12;
     136                                } else if (nCho == 5 && p == 17) {                      // ㄿ
     137                                        nCho = -1;
     138                                        nJong = 13;
     139                                } else if (nCho == 5 && p == 18) {                      // ㅀ
     140                                        nCho = -1;
     141                                        nJong = 14;
     142                                } else if (nCho == 7 && p == 9) {                       // ㅄ
     143                                        nCho = -1;
     144                                        nJong = 17;
     145                                } else {                                                        // 단자음을 연타
     146                                        res += CHO_DATA.charAt(nCho);
     147                                        nCho = CHO_DATA.indexOf(KOR_KEY.charAt(p));
     148                                }
     149                        }
     150                } else {                                                                        // 모음
     151                        if (nJong != -1) {                                              // (앞글자 종성), 초성+중성
     152                                // 복자음 다시 분해
     153                                var newCho;                     // (임시용) 초성
     154                                if (nJong == 2) {                                       // ㄱ, ㅅ
     155                                        nJong = 0;
     156                                        newCho = 9;
     157                                } else if (nJong == 4) {                        // ㄴ, ㅈ
     158                                        nJong = 3;
     159                                        newCho = 12;
     160                                } else if (nJong == 5) {                        // ㄴ, ㅎ
     161                                        nJong = 3;
     162                                        newCho = 18;
     163                                } else if (nJong == 8) {                        // ㄹ, ㄱ
     164                                        nJong = 7;
     165                                        newCho = 0;
     166                                } else if (nJong == 9) {                        // ㄹ, ㅁ
     167                                        nJong = 7;
     168                                        newCho = 6;
     169                                } else if (nJong == 10) {                       // ㄹ, ㅂ
     170                                        nJong = 7;
     171                                        newCho = 7;
     172                                } else if (nJong == 11) {                       // ㄹ, ㅅ
     173                                        nJong = 7;
     174                                        newCho = 9;
     175                                } else if (nJong == 12) {                       // ㄹ, ㅌ
     176                                        nJong = 7;
     177                                        newCho = 16;
     178                                } else if (nJong == 13) {                       // ㄹ, ㅍ
     179                                        nJong = 7;
     180                                        newCho = 17;
     181                                } else if (nJong == 14) {                       // ㄹ, ㅎ
     182                                        nJong = 7;
     183                                        newCho = 18;
     184                                } else if (nJong == 17) {                       // ㅂ, ㅅ
     185                                        nJong = 16;
     186                                        newCho = 9;
     187                                } else {                                                        // 복자음 아님
     188                                        newCho = CHO_DATA.indexOf(JONG_DATA.charAt(nJong));
     189                                        nJong = -1;
     190                                }
     191                                if (nCho != -1)                 // 앞글자가 초성+중성+(종성)
     192                                        res += makeHangul(nCho, nJung, nJong);
     193                                else                    // 복자음만 있음
     194                                        res += JONG_DATA.charAt(nJong);
     195
     196                                nCho = newCho;
     197                                nJung = -1;
     198                                nJong = -1;
     199                        }
     200                        if (nJung == -1) {                                              // 중성 입력 중
     201                                nJung = JUNG_DATA.indexOf(KOR_KEY.charAt(p));
     202                        } else if (nJung == 8 && p == 19) {            // ㅘ
     203                                nJung = 9;
     204                        } else if (nJung == 8 && p == 20) {            // ㅙ
     205                                nJung = 10;
     206                        } else if (nJung == 8 && p == 32) {            // ㅚ
     207                                nJung = 11;
     208                        } else if (nJung == 13 && p == 23) {           // ㅝ
     209                                nJung = 14;
     210                        } else if (nJung == 13 && p == 24) {           // ㅞ
     211                                nJung = 15;
     212                        } else if (nJung == 13 && p == 32) {           // ㅟ
     213                                nJung = 16;
     214                        } else if (nJung == 18 && p == 32) {           // ㅢ
     215                                nJung = 19;
     216                        } else {                        // 조합 안되는 모음 입력
     217                                if (nCho != -1) {                       // 초성+중성 후 중성
     218                                        res += makeHangul(nCho, nJung, nJong);
     219                                        nCho = -1;
     220                                } else                                          // 중성 후 중성
     221                                        res += JUNG_DATA.charAt(nJung);
     222                                nJung = -1;
     223                                res += KOR_KEY.charAt(p);
     224                        }
     225                }
     226        }
     227
     228        // 마지막 한글이 있으면 처리
     229        if (nCho != -1) {
     230                if (nJung != -1)                        // 초성+중성+(종성)
     231                        res += makeHangul(nCho, nJung, nJong);
     232                else                            // 초성만
     233                        res += CHO_DATA.charAt(nCho);
     234        } else {
     235                if (nJung != -1)                        // 중성만
     236                        res += JUNG_DATA.charAt(nJung);
     237                else {                                          // 복자음
     238                        if (nJong != -1)
     239                                res += JONG_DATA.charAt(nJong);
     240                }
     241        }
     242
     243        return res;
     244}
     245
     246function makeHangul(nCho, nJung, nJong) {
     247        return String.fromCharCode(0xac00 + nCho * 21 * 28 + nJung * 28 + nJong + 1);
     248}
     249
     250function korTypeToEng(src) {
     251        var res = "";
     252        if (src.length == 0)
     253                return res;
     254
     255        for (var i = 0; i < src.length; i++) {
     256                var ch = src.charAt(i);
     257                var nCode = ch.charCodeAt(0);
     258                var nCho = CHO_DATA.indexOf(ch), nJung = JUNG_DATA.indexOf(ch), nJong = JONG_DATA.indexOf(ch);
     259                var arrKeyIndex = [-1, -1, -1, -1, -1];
     260
     261                if (0xac00 <= nCode && nCode <= 0xd7a3) {
     262                        nCode -= 0xac00;
     263                        arrKeyIndex[0] = Math.floor(nCode / (21 * 28));                 // 초성
     264                        arrKeyIndex[1] = Math.floor(nCode / 28) % 21;                   // 중성
     265                        arrKeyIndex[3] = nCode % 28 - 1;                                                // 종성
     266                } else if (nCho != -1)                  // 초성 자음
     267                        arrKeyIndex[0] = nCho;
     268                else if (nJung != -1)                   // 중성
     269                        arrKeyIndex[1] = nJung;
     270                else if (nJong != -1)                   // 종성 자음
     271                        arrKeyIndex[3] = nJong;
     272                else                                                    // 한글이 아님
     273                        res += ch;
     274
     275                // 실제 Key Index로 변경. 초성은 순서 동일
     276                if (arrKeyIndex[1] != -1) {
     277                        if (arrKeyIndex[1] == 9) {                                      // ㅘ
     278                                arrKeyIndex[1] = 27;
     279                                arrKeyIndex[2] = 19;
     280                        } else if (arrKeyIndex[1] == 10) {                      // ㅙ
     281                                arrKeyIndex[1] = 27;
     282                                arrKeyIndex[2] = 20;
     283                        } else if (arrKeyIndex[1] == 11) {                      // ㅚ
     284                                arrKeyIndex[1] = 27;
     285                                arrKeyIndex[2] = 32;
     286                        } else if (arrKeyIndex[1] == 14) {                      // ㅝ
     287                                arrKeyIndex[1] = 29;
     288                                arrKeyIndex[2] = 23;
     289                        } else if (arrKeyIndex[1] == 15) {                      // ㅞ
     290                                arrKeyIndex[1] = 29;
     291                                arrKeyIndex[2] = 24;
     292                        } else if (arrKeyIndex[1] == 16) {                      // ㅟ
     293                                arrKeyIndex[1] = 29;
     294                                arrKeyIndex[2] = 32;
     295                        } else if (arrKeyIndex[1] == 19) {                      // ㅢ
     296                                arrKeyIndex[1] = 31;
     297                                arrKeyIndex[2] = 32;
     298                        } else {
     299                                arrKeyIndex[1] = KOR_KEY.indexOf(JUNG_DATA.charAt(arrKeyIndex[1]));
     300                                arrKeyIndex[2] = -1;
     301                        }
     302                }
     303                if (arrKeyIndex[3] != -1) {
     304                        if (arrKeyIndex[3] == 2) {                                      // ㄳ
     305                                arrKeyIndex[3] = 0
     306                                arrKeyIndex[4] = 9;
     307                        } else if (arrKeyIndex[3] == 4) {                       // ㄵ
     308                                arrKeyIndex[3] = 2;
     309                                arrKeyIndex[4] = 12;
     310                        } else if (arrKeyIndex[3] == 5) {                       // ㄶ
     311                                arrKeyIndex[3] = 2;
     312                                arrKeyIndex[4] = 18;
     313                        } else if (arrKeyIndex[3] == 8) {                       // ㄺ
     314                                arrKeyIndex[3] = 5;
     315                                arrKeyIndex[4] = 0;
     316                        } else if (arrKeyIndex[3] == 9) {                       // ㄻ
     317                                arrKeyIndex[3] = 5;
     318                                arrKeyIndex[4] = 6;
     319                        } else if (arrKeyIndex[3] == 10) {                      // ㄼ
     320                                arrKeyIndex[3] = 5;
     321                                arrKeyIndex[4] = 7;
     322                        } else if (arrKeyIndex[3] == 11) {                      // ㄽ
     323                                arrKeyIndex[3] = 5;
     324                                arrKeyIndex[4] = 9;
     325                        } else if (arrKeyIndex[3] == 12) {                      // ㄾ
     326                                arrKeyIndex[3] = 5;
     327                                arrKeyIndex[4] = 16;
     328                        } else if (arrKeyIndex[3] == 13) {                      // ㄿ
     329                                arrKeyIndex[3] = 5;
     330                                arrKeyIndex[4] = 17;
     331                        } else if (arrKeyIndex[3] == 14) {                      // ㅀ
     332                                arrKeyIndex[3] = 5;
     333                                arrKeyIndex[4] = 18;
     334                        } else if (arrKeyIndex[3] == 17) {                      // ㅄ
     335                                arrKeyIndex[3] = 7;
     336                                arrKeyIndex[4] = 9;
     337                        } else {
     338                                arrKeyIndex[3] = KOR_KEY.indexOf(JONG_DATA.charAt(arrKeyIndex[3]));
     339                                arrKeyIndex[4] = -1;
     340                        }
     341                }
     342
     343                for (var j = 0; j < 5; j++) {
     344                        if (arrKeyIndex[j] != -1)
     345                                res += ENG_KEY.charAt(arrKeyIndex[j]);
     346                }
     347        }
     348
     349        return res;
     350}
    284351-->
    285352</script>