Skip to content

Commit

Permalink
뀨뜨 자판(만든이: 꼬마집오리)을 두벌식 갈마들이(닿홀 갈마들이)로 구현함
Browse files Browse the repository at this point in the history
- 두벌식 갈마들이 (닿소리-홀소리 갈마들이) : 경우에 따라 같은 글쇠로 닿소리를 넣을 수도 있고 홀소리를 넣을 수도 있음 (이 때의 닿소리는 경우에 따라 첫소리가 될 수도 있고 끝소리가 될 수도 있음)
- 뀨뜨 자판의 원안( https://blog.naver.com/tinyduckn/222854157484 )은 세벌식 갈마들이(첫가끝 갈마들이)에서 볼 수 있는 유형처럼 갈마들이로 들어가는 겹닿소리가 첫소리로만 들어가게 되어 있으나, 온라인 한글 입력기에서는 두벌식 자판다운 닿홀 갈마들이 방식으로 구현함 ( https://bbs.pat.im/viewtopic.php?t=1546 )
  • Loading branch information
pat-al committed Apr 15, 2024
1 parent a36544a commit be9ecbd
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 7 deletions.
99 changes: 99 additions & 0 deletions additional_layouts.js
Expand Up @@ -21,6 +21,7 @@ additional_layouts.push({KE: 'Ko', type_name: '2-HGS_1952', full_name: '한당
additional_layouts.push({KE: 'Ko', type_name: '2-Jang_1953', full_name: '장봉선 풀어쓰기 전신 타자기 (1953) (체신부 통신용)', layout: K2_Jang_1953_teletypewriter_layout, link: 'https://pat.im/1025'});
additional_layouts.push({KE: 'Ko', type_name: '2-Bag_Song_1968', full_name: '박영효·송계범 전신 타자기 자판 설계안 (1968)', layout: K2_Bag_Song_1968_layout, link: 'https://pat.im/1025'});
additional_layouts.push({KE: 'Ko', type_name: '2-Gaon26KM', full_name: '가온한글26KM', layout: K2_Gaon_KSX5002_layout, link: 'http://cafe.daum.net/kbd-p/8OTK/10'});
additional_layouts.push({KE: 'Ko', type_name: '2-ggdd', full_name: '뀨뜨', layout: K2_ggdd_layout, link: 'https://blog.naver.com/tinyduckn/222854157484'});

additional_layouts.push({KE: 'Ko', type_name: '4t-1969', full_name: '1969 네벌식 타자기 표준 (과학기술처)', layout: K4_1969_Typewriter_layout, hangeul_combination_table: K4_1969_Typewriter_combination_table, link: 'https://pat.im/965'});
additional_layouts.push({KE: 'Ko', type_name: '3t-Oesol', full_name: '외솔 타자기 (1981, 최동식·김광성)', layout: K3_Oesol_Typewriter_layout, hangeul_combination_table: K3_Oesol_Typewriter_combination_table, link: 'https://pat.im/1026'});
Expand Down Expand Up @@ -576,6 +577,104 @@ function input_additional_keyboard_layout_info() {
0x007D, /* 0x7D braceright: right brace */
0x007E /* 0x7E asciitilde: tilde */
];

// 뀨뜨 (두벌식 갈마들이)
K2_ggdd_layout = [
[0x0021,0], /* 0x21 exclam: exclamation mark */
[0x0022,0], /* 0x22 quotedbl: quotatioin mark */
[0x0023,0], /* 0x23 numbersign: number sign */
[0x0024,0], /* 0x24 dollar: dollar sign */
[0x0025,0], /* 0x25 percent: percent sign */
[0x0026,0], /* 0x26 ampersand: ampersand */
[0x0027,0], /* 0x27 apostrophe: apostrophe */
[0x0028,0], /* 0x28 parenleft: left parenthesis */
[0x0029,0], /* 0x29 parenright: right parenthesis */
[0x002A,0], /* 0x2A asterisk: asterisk */
[0x002B,0], /* 0x2B plus: plus sign */
[0x002C,0], /* 0x2C comma: comma */
[0x002D,0], /* 0x2D minus: minus sign */
[0x002E,0], /* 0x2E period: period */
[0x002F,0], /* 0x2F slash: slash */
[0x0030,0], /* 0x30 0: 0 */
[0x0031,0], /* 0x31 1: 1 */
[0x0032,0], /* 0x32 2: 2 */
[0x0033,0], /* 0x33 3: 3 */
[0x0034,0], /* 0x34 4: 4 */
[0x0035,0], /* 0x35 5: 5 */
[0x0036,0], /* 0x36 6: 6 */
[0x0037,0], /* 0x37 7: 7 */
[0x0038,0], /* 0x38 8: 8 */
[0x0039,0], /* 0x39 9: 9 */
[0x003A,0], /* 0x3A colon: colon */
[0x003B,0], /* 0x3B semicolon: semicolon */
[0x003C,0], /* 0x3C less: less-than sign */
[0x003D,0], /* 0x3D equal: equals sign */
[0x003E,0], /* 0x3E greater: greater-than sign */
[0x003F,0], /* 0x3F question: question mark */
[0x0040,0], /* 0x40 at: commertial at */
[0x1106,0], /* 0x41 A: choseong mieum */
[0x1172,0], /* 0x42 B: jungseong yu */
[0x110E,0], /* 0x43 C: choseong chieuch */
[0x110B,0], /* 0x44 D: choseong ieung */
[0x1104,0], /* 0x45 E: choseong ssang_dieud */
[0x1105,0], /* 0x46 F: choseong lieul */
[0x1112,0], /* 0x47 G: choseong hieuh */
[0x1169,0], /* 0x48 H: jungseong o */
[0x1163,0], /* 0x49 I: jungseong ya */
[0x1165,0], /* 0x4A J: jungseong eo */
[0x1161,0], /* 0x4B K: jungseong a */
[0x1175,0], /* 0x4C L: jungseong i */
[0x1173,0], /* 0x4D M: jungseong eu */
[0x116E,0], /* 0x4E N: jungseong u */
[0x1164,0], /* 0x4F O: jungseong yae */
[0x1168,0], /* 0x50 P: jungseong ye */
[0x1108,0], /* 0x51 Q: choseong ssang_bieub */
[0x1101,0], /* 0x52 R: choseong ssang_gieug */
[0x1102,0], /* 0x53 S: choseong nieun */
[0x110A,0], /* 0x54 T: choseong ssang_sieus */
[0x1167,0], /* 0x55 U: jungseong yeo */
[0x1111,0], /* 0x56 V: choseong pieup */
[0x110D,0], /* 0x57 W: choseong ssang_jieuj */
[0x1110,0], /* 0x58 X: choseong tieut */
[0x116D,0], /* 0x59 Y: jungseong yo */
[0x110F,0], /* 0x5A Z: choseong kieuk */
[0x005B,0], /* 0x5B bracketleft: left bracket */
[0x005C,0], /* 0x5C backslash: backslash */
[0x005D,0], /* 0x5D bracketright: right bracket */
[0x005E,0], /* 0x5E asciicircum: circumflex accent */
[0x005F,0], /* 0x5F underscore: underscore */
[0x0060,0], /* 0x60 quoteleft: grave accent */
[0x1106,0], /* 0x61 a: choseong mieum */
[0x1101,0x1172], /* 0x62 b: choseong ssang_gieug, jungseong yu */
[0x110E,0], /* 0x63 c: choseong chieuch */
[0x110B,0], /* 0x64 d: choseong ieung */
[0x1103,0], /* 0x65 e: choseong dieud */
[0x1105,0], /* 0x66 f: choseong lieul */
[0x1112,0], /* 0x67 g: choseong hieuh */
[0x1169,0], /* 0x68 h: jungseong o */
[0x1108,0x1163], /* 0x69 i: choseong ssang_bieub, jungseong ya */
[0x1165,0], /* 0x6A j: jungseong eo */
[0x1161,0], /* 0x6B k: jungseong a */
[0x1175,0], /* 0x6C l: jungseong i */
[0x1104,0x1173], /* 0x6D m: choseong ssang_dieud, jungseong eu */
[0x116E,0], /* 0x6E n: jungseong u */
[0x1162,0], /* 0x6F o: jungseong ae */
[0x1166,0], /* 0x70 p: jungseong e */
[0x1107,0], /* 0x71 q: choseong bieub */
[0x1100,0], /* 0x72 r: choseong gieug */
[0x1102,0], /* 0x73 s: choseong nieun */
[0x1109,0], /* 0x74 t: choseong sieus */
[0x110D,0x1167], /* 0x75 u: choseong ssang_jieuj, jungseong yeo */
[0x1111,0], /* 0x76 v: choseong pieup */
[0x110C,0], /* 0x77 w: choseong jieuj */
[0x1110,0], /* 0x78 x: choseong tieut */
[0x110A,0x116D], /* 0x79 y: choseong ssang_sieus, jungseong yo */
[0x110F,0], /* 0x7A z: choseong kieuk */
[0x007B,0], /* 0x7B braceleft: left brace */
[0x007C,0], /* 0x7C bar: vertical line(bar) */
[0x007D,0], /* 0x7D braceright: right brace */
[0x007E,0] /* 0x7E asciitilde: tilde */
];

// 1969 옛 표준 네벌식 타자기
K4_1969_Typewriter_layout = [
Expand Down
3 changes: 2 additions & 1 deletion index.html
Expand Up @@ -277,7 +277,8 @@
<ul>
<li>
두벌식 응용 :
<kbd class="menu" onclick="javascript:ohiChange('Ko','2-Gaon26KM')" onmouseover="this.className='over'" onmouseout="this.className='menu'">가온한글26KM</kbd>
<kbd class="menu" onclick="javascript:ohiChange('Ko','2-Gaon26KM')" onmouseover="this.className='over'" onmouseout="this.className='menu'">가온한글26KM</kbd>,
<kbd class="menu" onclick="javascript:ohiChange('Ko','2-ggyuddeu')" onmouseover="this.className='over'" onmouseout="this.className='menu'">뀨뜨</kbd>
</li>
<li>
공세벌식 응용 :
Expand Down
36 changes: 30 additions & 6 deletions ohi.js
@@ -1,7 +1,7 @@
/** Modified Version (http://ohi.pat.im)
* Modifier : Pat-Al <pat@pat.im> (https://pat.im/910)
* Last Update : 2024/03/04
* Last Update : 2024/04/16
* Added support for more keyboard layouts by custom keyboard layout tables.
* Added support for Dvorak and Colemak and Workman keyboard layouts.
Expand Down Expand Up @@ -841,6 +841,20 @@ function ohiSpecialKey(f,e,c) {
return false;
}

function Hangeul2_galmadeuli_selection(a) {
if(typeof a.length == 'undefined') return 0;
if(a.length==1) return a[0];
var i, dah=0, hol=0;
for(i=a.length-1;i>=0;--i) {
c = convert_into_unicode_hangeul_phoneme(a[i]);
if(unicode_cheos.indexOf(c)>=0) dah=c;
else if(unicode_ga.indexOf(c)>=0) hol=c;
}
if(!dah || !hol) return dah+hol;
if(ohiQ[0]&&!ohiQ[3]&&!ohiQ[6] || unicode_cheos.indexOf(NFD_stack.phoneme[0])>=0) return hol;
return dah;
}

function ohiHangeul2(f,e,key) { // 2-Beolsik
if((Ko_type.indexOf('KSX5002')>=0 || Ko_type=='2-KPS9256') && (key<65 || (key-1)%32>25)) {
complete_hangeul_syllable(f);
Expand All @@ -851,7 +865,9 @@ function ohiHangeul2(f,e,key) { // 2-Beolsik
var layout_info = find_current_layout_info();
var layout = find_current_layout();

var c = convert_into_ohi_hangeul_phoneme(layout[key-33]);
var c = layout[key-33];
if(typeof c == 'object') c = Hangeul2_galmadeuli_selection(c);
c = convert_into_ohi_hangeul_phoneme(c);

if(special_chars.indexOf(c)>=0)
if(ohiSpecialKey(f,e,c)) return;
Expand Down Expand Up @@ -896,7 +912,7 @@ function ohiHangeul2(f,e,key) { // 2-Beolsik
}
}

if(option.sunalae || Ko_type=='2-KPS9256' || Ko_type.substr(0,5)=='2-sun' || Ko_type=='2-Gaon26KM') {
if(option.sunalae || Ko_type=='2-KPS9256' || Ko_type.substr(0,5)=='2-sun' || Ko_type=='2-Gaon26KM' || Ko_type=='2-ggyuddeu') {
if((ohiQ[3]==37 || ohiQ[3]==33) && c==51 && !ohiQ[6]) {
// ㅕ+ㅣ→ㅖ, ㅑ+ㅣ→ㅒ
ohiQ[4]=1;
Expand Down Expand Up @@ -932,7 +948,10 @@ function NFD_hangeul2_preprocess(f,e,key) {
var layout = find_current_layout();

var combined_phoneme, backup_phoneme, backup_phoneme_R;
var c = convert_into_unicode_hangeul_phoneme(layout[key-33]);

var c = layout[key-33];
if(typeof c == 'object') c = Hangeul2_galmadeuli_selection(c);
c = convert_into_unicode_hangeul_phoneme(c);

if(unicode_cheos.indexOf(c)>=0) { // 닿소리일 때
if(unicode_ggeut.indexOf(NFD_stack.phoneme[0])>=0) { // 바로 앞에 끝소리가 들어왔다면
Expand Down Expand Up @@ -2291,6 +2310,11 @@ function hangeul_typewriter(f,key) { // 타자기 자판

function is_galmadeuli_input() {
var type_name = current_layout_info.type_name;
if(type_name.substr(0,2)=='2-') {
for(var i=0; i<current_layout_info.layout.length; ++i)
if(typeof current_layout_info.layout[i] == 'object') return true;
return false;
}
if(type_name.substr(0,5)=='Sin3-') return true;
if(type_name.substr(0,5)=='LGG3-') return true;
if(type_name.substr(-3)=='_gm') return true;
Expand Down Expand Up @@ -3061,7 +3085,7 @@ function show_options() {
opt_name = 'sunalae';
ft = 'show_options();inputText_focus()"><label title="두벌식 자판으로 홀소리 글쇠를 거듭 눌러 겹닿소리(된소리) 넣기">순아래 조합 <a href="https://sites.google.com/site/tinyduckn/dubeolsig-sun-alae" target="_blank">ⓘ</a></label>';
opt = add_option(opts, opt_name, ft);
if(!is_old_hangeul_input() && !is_phonemic_writing_input() && type_name.substr(0,2)=='2-' && type_name.substr(0,5)!='2-sun') opt.style.display = 'block';
if(!is_old_hangeul_input() && !is_phonemic_writing_input() && !is_galmadeuli_input() && type_name.substr(0,2)=='2-' && type_name.substr(0,5)!='2-sun') opt.style.display = 'block';
else opt.style.display = 'none';

opt_name = 'enable_sign_ext';
Expand Down Expand Up @@ -4086,7 +4110,7 @@ function ohiKeydown(e) {
esc_ext_state();
}

if(e.keyCode==17) { // ctrl
if(e.keyCode==17) { // ctrl
if(!pressing_keys && pressed_keys.indexOf(17)<0) pressed_key_accumulation(f,e,key);
}

Expand Down

0 comments on commit be9ecbd

Please sign in to comment.