2010年9月14日火曜日

109キーボードの QWERTY と DVORAK の対応

Qwerty 配列のまま Dvorak 配列の練習がしたい! そう思ったものの、上手く検索で見つからず……もしかして無いのかしら。 作られてないんだとしたら何が面倒だろうか──そう対応表だ。 そして各言語で使い易いようにパッケージ化(大げさ)された物が欲しいはず!

こうしてこのエントリーは書かれはじめる。

以下の対応表は単純に Linux 上で

$ setxkbmap dvorak
$ setxkbmap ja

と切り替えて入力したものを加工しただけに過ぎませんのでご自由にお使いください。 またこのエントリーに関する記述も一切強要しません。 この対応表は C、JavaScript、PHP 向けに書き、すぐに使えるように公開してあります。

生のテキスト
1234567890-^\
!"#$%&'()~=~|
qwertyuiop@[
QWERTYUIOP`{
asdfghjkl;:]
ASDFGHJKL+*}
zxcvbnm,./\
ZXCVBNM<>?_

1234567890[]
!@#$%^&*(){}
',.pyfgcrl/=
"<>PYFGCRL?+
aoeuidhtns-\
AOEUIDHTNS_|
;qjkxbmwvz
:QJKXBMWVZ
C の配列初期化
char hieroglyph[][2] = {
  {'1','1'},{'2','2'},{'3','3'},{'4','4'},{'5','5'},{'6','6'},{'7','7'},{'8','8'},{'9','9'},{'0','0'},{'-','['},{'^',']'},{'\\',' '},
  {'!','!'},{'"','@'},{'#','#'},{'$','$'},{'%','%'},{'&','^'},{'\'','&'},{'(','*'},{')','('},{'~',')'},{'=','{'},{'~','}'},{'|',' '},
  {'q','\''},{'w',','},{'e','.'},{'r','p'},{'t','y'},{'y','f'},{'u','g'},{'i','c'},{'o','r'},{'p','l'},{'@','/'},{'[','='},
  {'Q','"'},{'W','<'},{'E','>'},{'R','P'},{'T','Y'},{'Y','F'},{'U','G'},{'I','C'},{'O','R'},{'P','L'},{'`','?'},{'{','+'},
  {'a','a'},{'s','o'},{'d','e'},{'f','u'},{'g','i'},{'h','d'},{'j','h'},{'k','t'},{'l','n'},{';','s'},{':','-'},{']','\\'},
  {'A','A'},{'S','O'},{'D','E'},{'F','U'},{'G','I'},{'H','D'},{'J','H'},{'K','T'},{'L','N'},{'+','S'},{'*','_'},{'}','|'},
  {'z',';'},{'x','q'},{'c','j'},{'v','k'},{'b','x'},{'n','b'},{'m','m'},{',','w'},{'.','v'},{'/','z'},{'\\',' '},{'Z',':'},
  {'X','Q'},{'C','J'},{'V','K'},{'B','X'},{'N','B'},{'M','M'},{'<','W'},{'>','V'},{'?','Z'},{'_',' '}
};
JavaScript の配列オブジェクト
var hieroglyph = [
  ['1','1'],['2','2'],['3','3'],['4','4'],['5','5'],['6','6'],['7','7'],['8','8'],['9','9'],['0','0'],['-','['],['^',']'],['\\',' '],
  ['!','!'],['"','@'],['#','#'],['$','$'],['%','%'],['&','^'],["'",'&'],['(','*'],[')','('],['~',')'],['=','{'],['~','}'],['|',' '],
  ['q',"'"],['w',','],['e','.'],['r','p'],['t','y'],['y','f'],['u','g'],['i','c'],['o','r'],['p','l'],['@','/'],['[','='],
  ['Q','"'],['W','<'],['E','>'],['R','P'],['T','Y'],['Y','F'],['U','G'],['I','C'],['O','R'],['P','L'],['`','?'],['{','+'],
  ['a','a'],['s','o'],['d','e'],['f','u'],['g','i'],['h','d'],['j','h'],['k','t'],['l','n'],[';','s'],[':','-'],[']','\\'],
  ['A','A'],['S','O'],['D','E'],['F','U'],['G','I'],['H','D'],['J','H'],['K','T'],['L','N'],['+','S'],['*','_'],['}','|'],
  ['z',';'],['x','q'],['c','j'],['v','k'],['b','x'],['n','b'],['m','m'],[',','w'],['.','v'],['/','z'],['\\',' '],
  ['Z',':'],['X','Q'],['C','J'],['V','K'],['B','X'],['N','B'],['M','M'],['<','W'],['>','V'],['?','Z'],['_',' ']
];
PHP では配列の宣言が冗長になるため文字列から展開しています。 また年のため GIST に同じコードをアップロードしておきます。
http://gist.github.com/577669 PHP の配列
<?php
$hieroglyph_qwerty = explode("\n", <<<EOF
1234567890-^\
!"#$%&'()~=~|
qwertyuiop@[
QWERTYUIOP`{
asdfghjkl;:]
ASDFGHJKL+*}
zxcvbnm,./\
ZXCVBNM<>?_
EOF
);
$hieroglyph_dvorak = explode("\n", <<<EOF
1234567890[]
!@#$%^&*(){}
',.pyfgcrl/=
"<>PYFGCRL?+
aoeuidhtns-\
AOEUIDHTNS_|
;qjkxbmwvz
:QJKXBMWVZ
EOF
);
$hieroglyph = array(); // result
for ($line = 0; $line < count($hieroglyph_qwerty) && $line < count($hieroglyph_dvorak); ++$line) {
  for ($i = 0; $i < strlen($hieroglyph_qwerty[$line]) || $i < strlen($hieroglyph_dvorak[$line]); ++$i) {
    $hieroglyph[] = array(
      isset($hieroglyph_qwerty[$line][$i]) ? $hieroglyph_qwerty[$line][$i] : ' ',
      isset($hieroglyph_dvorak[$line][$i]) ? $hieroglyph_dvorak[$line][$i] : ' '
    );
  }
}
unset($hieroglyph_qwerty);
unset($hieroglyph_dvorak);

0 件のコメント:

コメントを投稿