|
|
diff -up ./src/chewingio.c.hsu ./src/chewingio.c
|
|
|
--- ./src/chewingio.c.hsu 2010-02-10 14:01:42.000000000 +1000
|
|
|
+++ ./src/chewingio.c 2010-02-10 14:01:42.000000000 +1000
|
|
|
@@ -1053,7 +1053,7 @@ static int dvorak_convert( int key )
|
|
|
';',':','q','Q','j','J','k','K','x','X','b','B','m','M',
|
|
|
'w','W','v','V','z','Z'};
|
|
|
char qkey[] = {
|
|
|
- 'Q','q','w','W','e','E','r','R','t','T','y','Y','u','U',
|
|
|
+ 'q','Q','w','W','e','E','r','R','t','T','y','Y','u','U',
|
|
|
'i','I','o','O','p','P','[','{',']','}','\\','|',
|
|
|
'a','A','s','S','d','D','f','F','g','G','h','H','j','J',
|
|
|
'k','K','l','L',';',':','\'','\"',
|
|
|
diff -up ./src/choice.c.hsu ./src/choice.c
|
|
|
--- ./src/choice.c.hsu 2010-02-10 14:01:42.000000000 +1000
|
|
|
+++ ./src/choice.c 2010-02-10 16:12:04.000000000 +1000
|
|
|
@@ -29,6 +29,7 @@
|
|
|
#include "tree-private.h"
|
|
|
#include "userphrase-private.h"
|
|
|
#include "private.h"
|
|
|
+#include "zuin-private.h"
|
|
|
|
|
|
#define CEIL_DIV( a, b ) ( ( a + b - 1 ) / b )
|
|
|
|
|
|
@@ -151,6 +152,23 @@ static int ChoiceTheSame( ChoiceInfo *pc
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static void ChoiceInfoAppendChi(
|
|
|
+ ChoiceInfo *pci, uint16 phone )
|
|
|
+{
|
|
|
+ Word tempWord;
|
|
|
+ GetCharFirst( &tempWord, phone );
|
|
|
+ do {
|
|
|
+ if ( ChoiceTheSame( pci, tempWord.word, ueBytesFromChar( tempWord.word[0] ) * sizeof( char ) ) )
|
|
|
+ continue;
|
|
|
+ memcpy(
|
|
|
+ pci->totalChoiceStr[ pci->nTotalChoice ],
|
|
|
+ tempWord.word, ueBytesFromChar( tempWord.word[0] ) * sizeof( char ) );
|
|
|
+ assert(pci->nTotalChoice <= MAX_CHOICE);
|
|
|
+ pci->totalChoiceStr[ pci->nTotalChoice ][ ueBytesFromChar( tempWord.word[0] ) ] = '\0';
|
|
|
+ pci->nTotalChoice++;
|
|
|
+ } while( GetCharNext( &tempWord ) );
|
|
|
+}
|
|
|
+
|
|
|
/** @brief Loading all possible phrases of certain length.
|
|
|
*
|
|
|
* Loading all possible phrases of certain length into ChoiceInfo structure from static
|
|
|
@@ -158,10 +176,10 @@ static int ChoiceTheSame( ChoiceInfo *pc
|
|
|
* including number of total pages and the number of current page.\n
|
|
|
*/
|
|
|
static void SetChoiceInfo(
|
|
|
+ ChewingData *pgdata,
|
|
|
ChoiceInfo *pci,AvailInfo *pai, uint16 *phoneSeq, int cursor,
|
|
|
int candPerPage )
|
|
|
{
|
|
|
- Word tempWord;
|
|
|
Phrase tempPhrase;
|
|
|
int len;
|
|
|
UserPhraseData *pUserPhraseData;
|
|
|
@@ -176,17 +194,57 @@ static void SetChoiceInfo(
|
|
|
|
|
|
/* secondly, read tree phrase */
|
|
|
if ( len == 1 ) { /* single character */
|
|
|
- GetCharFirst( &tempWord, phoneSeq[ cursor ] );
|
|
|
- do {
|
|
|
- if ( ChoiceTheSame( pci, tempWord.word, ueBytesFromChar( tempWord.word[0] ) * sizeof( char ) ) )
|
|
|
- continue;
|
|
|
- memcpy(
|
|
|
- pci->totalChoiceStr[ pci->nTotalChoice ],
|
|
|
- tempWord.word, ueBytesFromChar( tempWord.word[0] ) * sizeof( char ) );
|
|
|
- assert(pci->nTotalChoice <= MAX_CHOICE);
|
|
|
- pci->totalChoiceStr[ pci->nTotalChoice ][ ueBytesFromChar( tempWord.word[0] ) ] = '\0';
|
|
|
- pci->nTotalChoice++;
|
|
|
- } while( GetCharNext( &tempWord ) );
|
|
|
+ ChoiceInfoAppendChi( pci, phoneSeq[cursor] );
|
|
|
+ if (pgdata->zuinData.kbtype == KB_HSU || pgdata->zuinData.kbtype == KB_DVORAK_HSU ){
|
|
|
+ switch(phoneSeq[ cursor ]){
|
|
|
+ case 0x2800: // 'ㄘ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x30 ); // 'ㄟ'
|
|
|
+ break;
|
|
|
+ case 0x80: // 'ㄧ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x20 ); // 'ㄝ'
|
|
|
+ break;
|
|
|
+ case 0x2A00: // 'ㄙ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x1 ); // '˙'
|
|
|
+ break;
|
|
|
+ case 0xA00: // 'ㄉ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x2 ); // 'ˊ'
|
|
|
+ break;
|
|
|
+ case 0x800: // 'ㄈ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x3 ); // 'ˇ'
|
|
|
+ break;
|
|
|
+ case 0x18: // 'ㄜ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x1200 ); // 'ㄍ'
|
|
|
+ break;
|
|
|
+ case 0x10: // 'ㄛ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x1600 ); // 'ㄏ'
|
|
|
+ break;
|
|
|
+ case 0x1E00: // 'ㄓ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x1800 ); // 'ㄐ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x4 ); // 'ˋ'
|
|
|
+ break;
|
|
|
+ case 0x58: // 'ㄤ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x1400 ); // 'ㄎ'
|
|
|
+ break;
|
|
|
+ case 0x68: // 'ㄦ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x1000 ); // 'ㄌ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x60 ); // 'ㄥ'
|
|
|
+ break;
|
|
|
+ case 0x2200: // 'ㄕ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x1C00 ); // 'ㄒ'
|
|
|
+ break;
|
|
|
+ case 0x2000: // 'ㄔ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x1A00 ); // 'ㄑ'
|
|
|
+ break;
|
|
|
+ case 0x50: // 'ㄣ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0xE00 ); // 'ㄋ'
|
|
|
+ break;
|
|
|
+ case 0x48: // 'ㄢ'
|
|
|
+ ChoiceInfoAppendChi( pci, 0x600 ); // 'ㄇ'
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
/* phrase */
|
|
|
else {
|
|
|
@@ -281,6 +339,7 @@ int ChoiceFirstAvail( ChewingData *pgdat
|
|
|
|
|
|
pgdata->availInfo.currentAvail = pgdata->availInfo.nAvail - 1;
|
|
|
SetChoiceInfo(
|
|
|
+ pgdata,
|
|
|
&( pgdata->choiceInfo ),
|
|
|
&( pgdata->availInfo ),
|
|
|
pgdata->phoneSeq,
|
|
|
@@ -289,12 +348,14 @@ int ChoiceFirstAvail( ChewingData *pgdat
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int ChoicePrevAvail( ChewingData *pgdata )
|
|
|
+int ChoicePrevAvail( ChewingContext *ctx )
|
|
|
{
|
|
|
+ ChewingData *pgdata=ctx->data;
|
|
|
if (pgdata->choiceInfo.isSymbol) return 0;
|
|
|
if ( ++( pgdata->availInfo.currentAvail ) >= pgdata->availInfo.nAvail )
|
|
|
pgdata->availInfo.currentAvail = 0;
|
|
|
SetChoiceInfo(
|
|
|
+ pgdata,
|
|
|
&( pgdata->choiceInfo ),
|
|
|
&( pgdata->availInfo ),
|
|
|
pgdata->phoneSeq,
|
|
|
@@ -310,6 +371,7 @@ int ChoiceNextAvail( ChewingData *pgdata
|
|
|
if ( --( pgdata->availInfo.currentAvail ) < 0 )
|
|
|
pgdata->availInfo.currentAvail = pgdata->availInfo.nAvail - 1;
|
|
|
SetChoiceInfo(
|
|
|
+ pgdata,
|
|
|
&( pgdata->choiceInfo ),
|
|
|
&( pgdata->availInfo ),
|
|
|
pgdata->phoneSeq,
|
|
|
diff -up ./src/common/key2pho.c.hsu ./src/common/key2pho.c
|
|
|
--- ./src/common/key2pho.c.hsu 2008-12-02 00:29:20.000000000 +1000
|
|
|
+++ ./src/common/key2pho.c 2010-02-10 14:01:42.000000000 +1000
|
|
|
@@ -81,7 +81,7 @@ static char *key_str[ MAX_KBTYPE ] = {
|
|
|
"bpmfdtnlvkhg7c,./j;'sexuaorwiqzy890-=1234", /* ET */
|
|
|
"bpmfdtnlvkhgvcgycjqwsexuaorwiqzpmntlhdfjk", /* ET26 */
|
|
|
"1'a;2,oq.ejpuk5yixfdbghm8ctw9rnv0lsz[7634", /* Dvorak */
|
|
|
- "bpmfdtnlgkhjvcjvcrzasexuyhgeiawomnklldhtn", /* Dvorak Hsu */
|
|
|
+ "bpmfdtnlgkhjvcjvcrzasexuyhgeiawomnkllsdfj", /* Dvorak Hsu */
|
|
|
"qqazwwsxedcrfvttgbyhnujmuikbiolmoplnpyerd", /* DACHEN-CP26 */
|
|
|
"1qaz2wsxedcrfv5tgbyhnujm8ik,9ol.0p;/-7634", /* pinyin */
|
|
|
} ;
|
|
|
diff -up ./src/zuin.c.hsu ./src/zuin.c
|
|
|
--- ./src/zuin.c.hsu 2008-12-02 00:29:20.000000000 +1000
|
|
|
+++ ./src/zuin.c 2010-02-10 14:01:42.000000000 +1000
|
|
|
@@ -31,20 +31,6 @@
|
|
|
#include "hanyupinyin-private.h"
|
|
|
#include "private.h"
|
|
|
|
|
|
-static int IsDvorakHsuPhoEndKey( int pho_inx[], int key )
|
|
|
-{
|
|
|
- switch ( key ) {
|
|
|
- case 'd':
|
|
|
- case 'h':
|
|
|
- case 't':
|
|
|
- case 'n':
|
|
|
- case ' ':
|
|
|
- return ( pho_inx[ 0 ] || pho_inx[ 1 ] || pho_inx[ 2 ] );
|
|
|
- default:
|
|
|
- return 0;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* process a key input
|
|
|
* return value:
|
|
|
@@ -67,6 +53,15 @@ static int IsHsuPhoEndKey( int pho_inx[]
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static int IsDvorakHsuPhoEndKey( int pho_inx[], int key )
|
|
|
+{
|
|
|
+ /* DvorakHsu tone mark should be same with Hsu's mark
|
|
|
+ After conversion. */
|
|
|
+ return IsHsuPhoEndKey(pho_inx, key);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/* copy the idea from HSU keyboard */
|
|
|
static int IsET26PhoEndKey( int pho_inx[], int key )
|
|
|
{
|