rpms/libchewing/F-10 import.log, 1.11, 1.12 libchewing-0.3.2.phraseChoiceRearward.patch, 1.1, 1.2 libchewing.spec, 1.31, 1.32

Ding-Yi Chen dchen at fedoraproject.org
Fri Jun 26 06:14:45 UTC 2009


Author: dchen

Update of /cvs/pkgs/rpms/libchewing/F-10
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv16417/F-10

Modified Files:
	import.log libchewing-0.3.2.phraseChoiceRearward.patch 
	libchewing.spec 
Log Message:
Revised Revise phraseChoiceRearward.patch so the cursor wont move to left when pressing down key.


Index: import.log
===================================================================
RCS file: /cvs/pkgs/rpms/libchewing/F-10/import.log,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -p -r1.11 -r1.12
--- import.log	20 May 2009 07:17:03 -0000	1.11
+++ import.log	26 Jun 2009 06:14:14 -0000	1.12
@@ -9,3 +9,4 @@ libchewing-0_3_2-6_fc10:F-10:libchewing-
 libchewing-0_3_2-8_fc10:F-10:libchewing-0.3.2-8.fc10.src.rpm:1240375899
 libchewing-0_3_2-9_fc11:F-10:libchewing-0.3.2-9.fc11.src.rpm:1242720193
 libchewing-0_3_2-10_fc11:F-10:libchewing-0.3.2-10.fc11.src.rpm:1242803706
+libchewing-0_3_2-11_fc11:F-10:libchewing-0.3.2-11.fc11.src.rpm:1245996821

libchewing-0.3.2.phraseChoiceRearward.patch:

Index: libchewing-0.3.2.phraseChoiceRearward.patch
===================================================================
RCS file: /cvs/pkgs/rpms/libchewing/F-10/libchewing-0.3.2.phraseChoiceRearward.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- libchewing-0.3.2.phraseChoiceRearward.patch	20 May 2009 07:17:04 -0000	1.1
+++ libchewing-0.3.2.phraseChoiceRearward.patch	26 Jun 2009 06:14:14 -0000	1.2
@@ -1,66 +1,516 @@
 diff -up ./src/chewingio.c.phraseChoiceRearward ./src/chewingio.c
 --- ./src/chewingio.c.phraseChoiceRearward	2008-12-02 00:29:20.000000000 +1000
-+++ ./src/chewingio.c	2009-05-18 18:02:15.000000000 +1000
++++ ./src/chewingio.c	2009-06-26 15:58:08.000000000 +1000
+@@ -75,14 +75,14 @@ CHEWING_API int chewing_KBStr2Num( char 
+ 	return KB_DEFAULT;
+ }
+ 
+-#ifdef ENABLE_DEBUG     
++#ifdef ENABLE_DEBUG
+ static void TerminateDebug()
+ {
+ 	DEBUG_OUT( "DEBUG: logging service is about to terminate.\n" );
+ 	if ( fp_g ) {
+ 		fclose( fp_g );
+ 	}
+-}               
++}
+ #endif
+ 
+ int addTerminateService( void (*callback)() )
+@@ -103,7 +103,7 @@ int addTerminateService( void (*callback
+ CHEWING_API ChewingContext *chewing_new()
+ {
+ 	ChewingContext *ctx;
+-	
++
+ 	ChewingData *internal_data = ALC( ChewingData, 1 );
+ 	ChewingOutput *internal_output = ALC( ChewingOutput, 1 );
+ 	ctx = ALC( ChewingContext, 1 );
+@@ -159,7 +159,7 @@ CHEWING_API int chewing_Init(
+ 		dbg_path = FAILSAFE_OUTPUT;
+ 	        fp_g = fopen( dbg_path, "w+" );
+ 		if ( ! fp_g ) {
+-			fprintf( stderr, 
++			fprintf( stderr,
+ 				"Failed to record debug message in file.\n"
+ 				"--> Output to stderr\n" );
+ 		}
+@@ -237,14 +237,14 @@ CHEWING_API void chewing_Terminate()
+ 		if ( TerminateServices[ i ] ) {
+ #ifdef ENABLE_DEBUG
+ 			/* Can't output to debug file because it's about to close */
+-			fprintf( stderr, 
++			fprintf( stderr,
+ 				EMPHASIZE( "Terminating service #%d / %d" ) ".\n",
+ 				i, countTerminateService );
+ #endif
+ 			(*TerminateServices[ i ])();
+ 		}
+ 	}
+-	
++
+ 	/* XXX: should check if the services are really completed. */
+ 	bTerminateCompleted = 1;
+ 	return;
+@@ -403,7 +403,7 @@ CHEWING_API void chewing_set_ChiEngMode(
+ 	ctx->data->bChiSym = ( mode == CHINESE_MODE ? 1 : 0 );
+ }
+ 
+-CHEWING_API int chewing_get_ChiEngMode( ChewingContext *ctx ) 
++CHEWING_API int chewing_get_ChiEngMode( ChewingContext *ctx )
+ {
+ 	return ctx->data->bChiSym;
+ }
+@@ -413,7 +413,7 @@ CHEWING_API void chewing_set_ShapeMode( 
+ 	ctx->data->bFullShape = (mode == FULLSHAPE_MODE ? 1 : 0);
+ }
+ 
+-CHEWING_API int chewing_get_ShapeMode( ChewingContext *ctx ) 
++CHEWING_API int chewing_get_ShapeMode( ChewingContext *ctx )
+ {
+ 	return ctx->data->bFullShape;
+ }
+@@ -435,7 +435,7 @@ static int DoSelect( ChewingData *pgdata
+ 			if ( pgdata->choiceInfo.isSymbol ) {
+ 				SymbolChoice( pgdata, num );
+ 			}
+-			else { 
++			else {
+ 				/* change the select interval & selectStr & nSelect */
+ 				AddSelect( pgdata, num );
+ 				/* second, call choice module */
+@@ -489,7 +489,7 @@ CHEWING_API int chewing_handle_Space( Ch
+ 		pgdata->chiSymbolBufLen = 0;
+ 		pgdata->chiSymbolCursor = 0;
+ 		keystrokeRtn = KEYSTROKE_COMMIT;
+-	} 
++	}
+ 	else if ( pgdata->bChiSym != CHINESE_MODE ) {
+ 		/* see if buffer contains nothing */
+ 		if ( pgdata->chiSymbolBufLen == 0 ) {
+@@ -507,11 +507,11 @@ CHEWING_API int chewing_handle_Space( Ch
+ 		if ( rtn == SYMBOL_KEY_ERROR ) {
+ 			keystrokeRtn = KEYSTROKE_IGNORE;
+ 			/*
+-			 * If the key is not a printable symbol, 
++			 * If the key is not a printable symbol,
+ 			 * then it's wrong to commit it.
+ 			 */
+ 			bQuickCommit = 0;
+-		} 
++		}
+ 		else {
+ 			keystrokeRtn = KEYSTROKE_ABSORB;
+ 		}
+@@ -524,9 +524,9 @@ CHEWING_API int chewing_handle_Space( Ch
+ 		/* Quick commit */
+ 		else {
+ 			DEBUG_OUT(
+-				"\t\tQuick commit buf[0]=%c\n", 
++				"\t\tQuick commit buf[0]=%c\n",
+ 				pgdata->chiSymbolBuf[ 0 ].s[ 0 ] );
+-			pgo->commitStr[ 0 ] = pgdata->chiSymbolBuf[ 0 ]; 
++			pgo->commitStr[ 0 ] = pgdata->chiSymbolBuf[ 0 ];
+ 			pgo->nCommitStr = 1;
+ 			pgdata->chiSymbolBufLen = 0;
+ 			pgdata->chiSymbolCursor = 0;
+@@ -643,7 +643,7 @@ CHEWING_API int chewing_handle_Enter( Ch
+ 		keystrokeRtn = KEYSTROKE_COMMIT;
+ 		WriteChiSymbolToBuf( pgo->commitStr, nCommitStr, pgdata );
+ 		AutoLearnPhrase( pgdata );
+-		CleanAllBuf( pgdata );  
++		CleanAllBuf( pgdata );
+ 		pgo->nCommitStr = nCommitStr;
+ 	}
+ 
+@@ -664,12 +664,12 @@ CHEWING_API int chewing_handle_Del( Chew
+ 	}
+ 
+ 	if ( ! pgdata->bSelect ) {
+-		if ( 
+-			! ZuinIsEntering( &( pgdata->zuinData ) ) && 
++		if (
++			! ZuinIsEntering( &( pgdata->zuinData ) ) &&
+ 			pgdata->chiSymbolCursor < pgdata->chiSymbolBufLen ) {
+ 			ChewingKillChar(
+-				pgdata, 
+-				pgdata->chiSymbolCursor, 
++				pgdata,
++				pgdata->chiSymbolCursor,
+ 				NONDECREASE_CURSOR );
+ 		}
+ 		CallPhrasing( pgdata );
+@@ -696,7 +696,7 @@ CHEWING_API int chewing_handle_Backspace
+ 		}
+ 		else if ( pgdata->chiSymbolCursor > 0 ) {
+ 			ChewingKillChar(
+-				pgdata, 
++				pgdata,
+ 				pgdata->chiSymbolCursor - 1,
+ 				DECREASE_CURSOR );
+ 		}
 @@ -740,6 +740,7 @@ CHEWING_API int chewing_handle_Down( Che
  	int toSelect = 0;
  	int keystrokeRtn = KEYSTROKE_ABSORB;
  	int key_buf_cursor;
-+	static int cursor_last=-1;
++	static int cursor_orig=-1;
  
  	CheckAndResetRange( pgdata );
  
-@@ -757,9 +758,15 @@ CHEWING_API int chewing_handle_Down( Che
+@@ -757,12 +758,21 @@ CHEWING_API int chewing_handle_Down( Che
  
  	if ( toSelect ) {
  		if( ! pgdata->bSelect ) {
-+			cursor_last=pgdata->chiSymbolCursor;
++			cursor_orig=pgdata->chiSymbolCursor;
  			ChoiceFirstAvail( pgdata );
  		}
  		else {
 +			if ( pgdata->config.bPhraseChoiceRearward ){
-+				int avail_willbe=(pgdata->availInfo.currentAvail>0)? 
++				int avail_willbe=(pgdata->availInfo.currentAvail>0)?
 +					pgdata->availInfo.currentAvail-1: pgdata->availInfo.nAvail - 1;
-+				pgdata->chiSymbolCursor=cursor_last -pgdata->availInfo.avail[avail_willbe].len;
++				pgdata->chiSymbolCursor=cursor_orig - pgdata->availInfo.avail[avail_willbe].len;
++				if (chewing_buffer_Len(ctx)>cursor_orig){
++				    pgdata->chiSymbolCursor++;
++				}
 +			}
  			ChoiceNextAvail( pgdata );
  		}
- 	} 
+-	} 
++	}
+ 	else if ( pgdata->symbolKeyBuf[ key_buf_cursor ] ) {
+ 		/* Open Symbol Choice List */
+ 		if ( ! pgdata->choiceInfo.isSymbol )
+@@ -782,11 +792,11 @@ CHEWING_API int chewing_handle_ShiftLeft
+ 
+ 	if ( ! ChewingIsEntering( pgdata ) ) {
+ 		keystrokeRtn = KEYSTROKE_IGNORE;
+-	} 
++	}
+ 	if ( ! pgdata->bSelect ) {
+ 		/*  PointEnd locates (-9, +9) */
+-		if ( 
+-			! ZuinIsEntering( &( pgdata->zuinData ) ) && 
++		if (
++			! ZuinIsEntering( &( pgdata->zuinData ) ) &&
+ 			pgdata->chiSymbolCursor > 0 &&
+ 			pgdata->PointEnd > -9 ) {
+ 			if ( pgdata->PointStart == -1 )
+@@ -797,7 +807,7 @@ CHEWING_API int chewing_handle_ShiftLeft
+ 				pgdata->PointEnd--;
+ 			}
+ 			if ( pgdata->PointEnd == 0 )
+-				pgdata->PointStart = -1; 
++				pgdata->PointStart = -1;
+ 		}
+ 	}
+ 
+@@ -822,8 +832,8 @@ CHEWING_API int chewing_handle_Left( Che
+ 			pgdata->choiceInfo.pageNo = pgdata->choiceInfo.nPage - 1;
+ 	}
+ 	else {
+-		if ( 
+-			! ZuinIsEntering( &( pgdata->zuinData ) ) && 
++		if (
++			! ZuinIsEntering( &( pgdata->zuinData ) ) &&
+ 			pgdata->chiSymbolCursor > 0 ) {
+ 			CheckAndResetRange( pgdata );
+ 			pgdata->chiSymbolCursor--;
+@@ -842,13 +852,13 @@ CHEWING_API int chewing_handle_ShiftRigh
+ 
+ 	if ( ! ChewingIsEntering( pgdata ) ) {
+ 		keystrokeRtn = KEYSTROKE_IGNORE;
+-	} 
++	}
+ 
+ 	if ( ! pgdata->bSelect ) {
+ 		/* PointEnd locates (-9, +9) */
+-		if ( 
+-			! ZuinIsEntering( &( pgdata->zuinData ) ) && 
+-			pgdata->chiSymbolCursor < pgdata->chiSymbolBufLen && 
++		if (
++			! ZuinIsEntering( &( pgdata->zuinData ) ) &&
++			pgdata->chiSymbolCursor < pgdata->chiSymbolBufLen &&
+ 			pgdata->PointEnd < 9 ) {
+ 			if ( pgdata->PointStart == -1 )
+ 				pgdata->PointStart = pgdata->chiSymbolCursor;
+@@ -858,7 +868,7 @@ CHEWING_API int chewing_handle_ShiftRigh
+ 			}
+ 			pgdata->chiSymbolCursor++;
+ 			if ( pgdata->PointEnd == 0 )
+-				pgdata->PointStart = -1; 
++				pgdata->PointStart = -1;
+ 		}
+ 	}
+ 
+@@ -883,9 +893,9 @@ CHEWING_API int chewing_handle_Right( Ch
+ 			pgdata->choiceInfo.pageNo = 0;
+ 	}
+ 	else {
+-		if ( 
+-			! ZuinIsEntering( &( pgdata->zuinData ) ) &&			
+-			pgdata->chiSymbolCursor < pgdata->chiSymbolBufLen ) {			
++		if (
++			! ZuinIsEntering( &( pgdata->zuinData ) ) &&
++			pgdata->chiSymbolCursor < pgdata->chiSymbolBufLen ) {
+ 			CheckAndResetRange( pgdata );
+ 			pgdata->chiSymbolCursor++;
+ 		}
+@@ -974,11 +984,11 @@ CHEWING_API int chewing_handle_Home( Che
+ 
+ 	CheckAndResetRange( pgdata );
+ 
+-	if ( ! ChewingIsEntering( pgdata ) ) { 
++	if ( ! ChewingIsEntering( pgdata ) ) {
+ 		keystrokeRtn = KEYSTROKE_IGNORE;
+-	} 
++	}
+ 	else if ( ! pgdata->bSelect ) {
+-		pgdata->chiSymbolCursor = 0; 
++		pgdata->chiSymbolCursor = 0;
+ 	}
+ 	MakeOutputWithRtn( pgo, pgdata, keystrokeRtn );
+ 	return 0;
+@@ -993,12 +1003,12 @@ CHEWING_API int chewing_handle_End( Chew
+ 	CheckAndResetRange( pgdata );
+ 
+ 	if ( ! ChewingIsEntering( pgdata ) ) {
+-		keystrokeRtn = KEYSTROKE_IGNORE; 
+-	} 
++		keystrokeRtn = KEYSTROKE_IGNORE;
++	}
+ 	else if ( ! pgdata->bSelect ) {
+-		pgdata->chiSymbolCursor = pgdata->chiSymbolBufLen; 
+-	} 
+-	MakeOutputWithRtn( pgo, pgdata, keystrokeRtn );       
++		pgdata->chiSymbolCursor = pgdata->chiSymbolBufLen;
++	}
++	MakeOutputWithRtn( pgo, pgdata, keystrokeRtn );
+ 	return 0;
+ }
+ 
+@@ -1013,9 +1023,9 @@ CHEWING_API int chewing_handle_PageUp( C
+ 	if ( ! ChewingIsEntering( pgdata ) ) {
+ 		keystrokeRtn = KEYSTROKE_IGNORE;
+ 	}
+-	else if ( ! pgdata->bSelect ) { 
++	else if ( ! pgdata->bSelect ) {
+ 		pgdata->chiSymbolCursor = pgdata->chiSymbolBufLen;
+-	} 
++	}
+ 	MakeOutputWithRtn( pgo, pgdata, keystrokeRtn );
+ 	return 0;
+ }
+@@ -1031,9 +1041,9 @@ CHEWING_API int chewing_handle_PageDown(
+ 	if ( ! ChewingIsEntering( pgdata ) ) {
+ 		keystrokeRtn = KEYSTROKE_IGNORE;
+ 	}
+-	else if ( ! pgdata->bSelect ) { 
++	else if ( ! pgdata->bSelect ) {
+ 		pgdata->chiSymbolCursor = pgdata->chiSymbolBufLen;
+-	} 
++	}
+ 	MakeOutputWithRtn( pgo, pgdata, keystrokeRtn );
+ 	return 0;
+ }
+@@ -1107,7 +1117,7 @@ CHEWING_API int chewing_handle_Default( 
+ 			DoSelect( pgdata, num );
+ 			goto End_keyproc;
+ 		}
+-		
++
+ 		/* Otherwise, use 'j' and 'k' for paging in selection mode */
+ 		DEBUG_OUT(
+ 			"\t\tchecking paging key, got '%c'\n",
+@@ -1163,10 +1173,10 @@ CHEWING_API int chewing_handle_Default( 
+ 			rtn = ZuinPhoInput( &( pgdata->zuinData ), key );
+ 			DEBUG_OUT(
+ 				"\t\tChinese mode key, "
+-				"ZuinPhoInput return value = %d\n", 
++				"ZuinPhoInput return value = %d\n",
+ 				rtn );
+ 			DEBUG_FLUSH;
+-			
++
+ 			if ( rtn == ZUIN_KEY_ERROR )
+ 				rtn = SpecialSymbolInput( key, pgdata );
+ 			switch ( rtn ) {
+@@ -1182,14 +1192,14 @@ CHEWING_API int chewing_handle_Default( 
+ 				case ZUIN_KEY_ERROR:
+ 				case ZUIN_IGNORE:
+ 					DEBUG_OUT(
+-						"\t\tbefore isupper(key),key=%d\n", 
++						"\t\tbefore isupper(key),key=%d\n",
+ 						key );
+ 					/* change upper case into lower case */
+-					if ( isupper( key ) ) 
++					if ( isupper( key ) )
+ 						key = tolower( key );
+ 
+ 					DEBUG_OUT(
+-						"\t\tafter isupper(key),key=%d\n", 
++						"\t\tafter isupper(key),key=%d\n",
+ 						key );
+ 
+ 					/* see if buffer contains nothing */
+@@ -1207,7 +1217,7 @@ CHEWING_API int chewing_handle_Default( 
+ 					if ( rtn == SYMBOL_KEY_ERROR ) {
+ 						keystrokeRtn = KEYSTROKE_IGNORE;
+ 						/*
+-						 * If the key is not a printable symbol, 
++						 * If the key is not a printable symbol,
+ 						 * then it's wrong to commit it.
+ 						 */
+ 						bQuickCommit = 0;
+@@ -1248,9 +1258,9 @@ End_keyproc:
+ 	/* Quick commit */
+ 	else {
+ 		DEBUG_OUT(
+-				"\t\tQuick commit buf[0]=%c\n", 
++				"\t\tQuick commit buf[0]=%c\n",
+ 				pgdata->chiSymbolBuf[ 0 ].s[ 0 ] );
+-		pgo->commitStr[ 0 ] = pgdata->chiSymbolBuf[ 0 ]; 
++		pgo->commitStr[ 0 ] = pgdata->chiSymbolBuf[ 0 ];
+ 		pgo->nCommitStr = 1;
+ 		pgdata->chiSymbolBufLen = 0;
+ 		pgdata->chiSymbolCursor = 0;
+@@ -1309,12 +1319,12 @@ CHEWING_API int chewing_handle_CtrlNum( 
+ 
+ 	cursor = PhoneSeqCursor( pgdata );
+ 	if ( ! pgdata->config.bAddPhraseForward ) {
+-		if ( 
+-			newPhraseLen >= 1 && 
++		if (
++			newPhraseLen >= 1 &&
+ 			cursor + newPhraseLen - 1 <= pgdata->nPhoneSeq ) {
+-			if ( NoSymbolBetween( 
+-				pgdata, 
+-				cursor, 
++			if ( NoSymbolBetween(
++				pgdata,
++				cursor,
+ 				cursor + newPhraseLen - 1 ) ) {
+ 				/* Manually add phrase to the user phrase database. */
+ 				memcpy( addPhoneSeq,
+@@ -1328,10 +1338,10 @@ CHEWING_API int chewing_handle_CtrlNum( 
+ 
+ 
+ 				phraseState = UserUpdatePhrase( addPhoneSeq, addWordSeq );
+-				SetUpdatePhraseMsg( 
+-					pgdata, 
+-					addWordSeq, 
+-					newPhraseLen, 
++				SetUpdatePhraseMsg(
++					pgdata,
++					addWordSeq,
++					newPhraseLen,
+ 					phraseState );
+ 
+ 				/* Clear the breakpoint between the New Phrase */
+@@ -1341,11 +1351,11 @@ CHEWING_API int chewing_handle_CtrlNum( 
+ 		}
+ 	}
+ 	else {
+-		if ( 
+-			newPhraseLen >= 1 && 
++		if (
++			newPhraseLen >= 1 &&
+ 			cursor - newPhraseLen >= 0 ) {
+-			if ( NoSymbolBetween( pgdata, 
+-			                      cursor, 
++			if ( NoSymbolBetween( pgdata,
++			                      cursor,
+ 			                      cursor - newPhraseLen ) ) {
+ 				/* Manually add phrase to the user phrase database. */
+ 				memcpy( addPhoneSeq,
+@@ -1358,10 +1368,10 @@ CHEWING_API int chewing_handle_CtrlNum( 
+ 				           newPhraseLen, 1);
+ 
+ 				phraseState = UserUpdatePhrase( addPhoneSeq, addWordSeq );
+-				SetUpdatePhraseMsg( 
+-					pgdata, 
+-					addWordSeq, 
+-					newPhraseLen, 
++				SetUpdatePhraseMsg(
++					pgdata,
++					addWordSeq,
++					newPhraseLen,
+ 					phraseState );
+ 
+ 				/* Clear the breakpoint between the New Phrase */
+@@ -1414,10 +1424,10 @@ CHEWING_API int chewing_handle_Numlock( 
+ 	ChewingOutput *pgo = ctx->output;
+ 	int rtn, QuickCommit = 0;
+ 	int keystrokeRtn = KEYSTROKE_ABSORB;
+-	
++
+ 	if ( ! pgdata->bSelect ) {
+ 		/* If we're not selecting words, we should send out numeric
+-		 * characters at once. 
++		 * characters at once.
+ 		 */
+ 		if ( pgdata->chiSymbolBufLen == 0 ) {
+ 			QuickCommit = 1;
+@@ -1428,7 +1438,7 @@ CHEWING_API int chewing_handle_Numlock( 
+ 			keystrokeRtn = KEYSTROKE_IGNORE ;
+ 		}
+ 		else if ( QuickCommit ) {
+-			pgo->commitStr[ 0 ] = pgdata->chiSymbolBuf[ 0 ]; 
++			pgo->commitStr[ 0 ] = pgdata->chiSymbolBuf[ 0 ];
+ 			pgo->nCommitStr = 1;
+ 			pgdata->chiSymbolBufLen = 0;
+ 			pgdata->chiSymbolCursor = 0;
+@@ -1443,7 +1453,7 @@ CHEWING_API int chewing_handle_Numlock( 
+ 	else {
+ 		/* Otherwise, if we are selecting words, we use numeric keys
+ 		 * as selkey
+-		 * and submit the words. 
++		 * and submit the words.
+ 		 */
+ 		int num = -1;
+ 		if ( key > '0' && key < '9' )
 diff -up ./src/choice.c.phraseChoiceRearward ./src/choice.c
 --- ./src/choice.c.phraseChoiceRearward	2008-12-02 00:29:20.000000000 +1000
-+++ ./src/choice.c	2009-05-18 17:56:32.000000000 +1000
-@@ -73,20 +73,42 @@ static void ChangeSelectIntervalAndBreak
++++ ./src/choice.c	2009-06-26 15:59:23.000000000 +1000
+@@ -71,22 +71,44 @@ static void ChangeSelectIntervalAndBreak
+ }
+ 
  /** @brief Loading all possible phrases after the cursor from long to short into AvailInfo structure.*/
- static void SetAvailInfo( 
- 		AvailInfo *pai, const uint16 phoneSeq[], 
+-static void SetAvailInfo( 
+-		AvailInfo *pai, const uint16 phoneSeq[], 
 -		int nPhoneSeq, int begin, const int bSymbolArrBrkpt[] )
++static void SetAvailInfo(
++		AvailInfo *pai, const uint16 phoneSeq[],
 +		int nPhoneSeq, int begin, const int bSymbolArrBrkpt[],
-+		ChewingData *pgdata)
++		ChewingData *pgdata,int end)
  {
- 	int end, pho_id;
+-	int end, pho_id;
++	int pho_id;
  	int diff;
  	uint16 userPhoneSeq[ MAX_PHONE_SEQ_LEN ];
  
  	pai->nAvail = 0;
-+	
+ 
+-	for ( end = begin; end < nPhoneSeq; end++ ) {
+-		diff = end - begin;
+-		if ( diff > 0 && bSymbolArrBrkpt[ end ] ) 
+-			break;
 +	int i,head,head_tmp;
 +	if ( pgdata->config.bPhraseChoiceRearward ){
-+		for (i=nPhoneSeq-1;i>=begin;i--){
++	        for (i=end;i>=begin;i--){
 +			head=i;
 +			if(bSymbolArrBrkpt[i])
 +				break;
 +		}
-+		head_tmp=nPhoneSeq-1;
++		head_tmp=end;
 +	}else{
 +		head_tmp=head=begin;
 +	}
  
--	for ( end = begin; end < nPhoneSeq; end++ ) {
--		diff = end - begin;
--		if ( diff > 0 && bSymbolArrBrkpt[ end ] ) 
--			break;
+-		pho_id = TreeFindPhrase( begin, end, phoneSeq );
 +	int tail,tail_tmp;
 +	if ( pgdata->config.bPhraseChoiceRearward ){
-+		tail_tmp=tail=nPhoneSeq-1;
++		tail_tmp=tail=end;
 +	}else{
 +		for (i=begin;i<nPhoneSeq;i++){
 +			if(bSymbolArrBrkpt[i])
@@ -69,20 +519,21 @@ diff -up ./src/choice.c.phraseChoiceRear
 +		}
 +		tail_tmp=begin;
 +	}
- 
--		pho_id = TreeFindPhrase( begin, end, phoneSeq );
++
 +	while(head<=head_tmp && tail_tmp>=tail){
 +		diff = tail_tmp - head_tmp;
 +		pho_id = TreeFindPhrase( head_tmp, tail_tmp, phoneSeq );
  		if ( pho_id != -1 ) {
  			/* save it! */
  			pai->avail[ pai->nAvail ].len = diff + 1;
-@@ -96,7 +118,7 @@ static void SetAvailInfo( 
+@@ -95,8 +117,8 @@ static void SetAvailInfo( 
+ 		}
  		else {
  			memcpy(
- 				userPhoneSeq, 
+-				userPhoneSeq, 
 -				&phoneSeq[ begin ], 
-+				&phoneSeq[ head_tmp ], 
++				userPhoneSeq,
++				&phoneSeq[ head_tmp ],
  				sizeof( uint16 ) * ( diff + 1 ) ) ;
  			userPhoneSeq[ diff + 1 ] = 0;
  			if ( UserGetPhraseFirst( userPhoneSeq ) ) {
@@ -90,7 +541,7 @@ diff -up ./src/choice.c.phraseChoiceRear
  				pai->avail[ pai->nAvail ].id = -1;
  			}
  		}
-+		
++
 +		if ( pgdata->config.bPhraseChoiceRearward ){
 +			head_tmp--;
 +		}else{
@@ -99,13 +550,164 @@ diff -up ./src/choice.c.phraseChoiceRear
  	}
  }
  
-@@ -229,7 +257,8 @@ int ChoiceFirstAvail( ChewingData *pgdat
- 		pgdata->phoneSeq, 
+@@ -118,7 +146,7 @@ static int ChoiceTheSame( ChoiceInfo *pc
+ 	int i;
+ 
+ 	for ( i = 0; i < pci->nTotalChoice; i++ )
+-		if ( ! memcmp( pci->totalChoiceStr[ i ], str, len ) ) 
++		if ( ! memcmp( pci->totalChoiceStr[ i ], str, len ) )
+ 			return 1;
+ 	return 0;
+ }
+@@ -138,7 +166,7 @@ static void SetChoiceInfo(
+ 	int len;
+ 	UserPhraseData *pUserPhraseData;
+ 	uint16 userPhoneSeq[ MAX_PHONE_SEQ_LEN ];
+-	
++
+ 	/* Clears previous candidates. */
+ 	memset( pci->totalChoiceStr, '\0', sizeof(char) * MAX_CHOICE * MAX_PHRASE_LEN * MAX_UTF8_SIZE + 1);
+ 
+@@ -150,9 +178,9 @@ static void SetChoiceInfo(
+ 	if ( len == 1 ) { /* single character */
+ 		GetCharFirst( &tempWord, phoneSeq[ cursor ] );
+ 		do {
+-			if ( ChoiceTheSame( pci, tempWord.word, ueBytesFromChar( tempWord.word[0] ) * sizeof( char ) ) ) 
++			if ( ChoiceTheSame( pci, tempWord.word, ueBytesFromChar( tempWord.word[0] ) * sizeof( char ) ) )
+ 				continue;
+-			memcpy( 
++			memcpy(
+ 				pci->totalChoiceStr[ pci->nTotalChoice ],
+ 				tempWord.word, ueBytesFromChar( tempWord.word[0] ) * sizeof( char ) );
+ 			assert(pci->nTotalChoice <= MAX_CHOICE);
+@@ -165,9 +193,9 @@ static void SetChoiceInfo(
+ 		if ( pai->avail[ pai->currentAvail ].id != -1 ) {
+ 			GetPhraseFirst( &tempPhrase, pai->avail[ pai->currentAvail ].id );
+ 			do {
+-				if ( ChoiceTheSame( 
+-					pci, 
+-					tempPhrase.phrase, 
++				if ( ChoiceTheSame(
++					pci,
++					tempPhrase.phrase,
+ 					len * ueBytesFromChar( tempPhrase.phrase[0] ) * sizeof( char ) ) ) {
+ 					continue;
+ 				}
+@@ -183,9 +211,9 @@ static void SetChoiceInfo(
+ 		if ( pUserPhraseData ) {
+ 			do {
+ 				/* check if the phrase is already in the choice list */
+-				if ( ChoiceTheSame( 
+-					pci, 
+-					pUserPhraseData->wordSeq, 
++				if ( ChoiceTheSame(
++					pci,
++					pUserPhraseData->wordSeq,
+ 					len * ueBytesFromChar( pUserPhraseData->wordSeq[0] ) * sizeof( char ) ) )
+ 					continue;
+ 				/* otherwise store it */
+@@ -194,7 +222,7 @@ static void SetChoiceInfo(
+ 						pUserPhraseData->wordSeq,
+ 						len, 1);
+ 				pci->nTotalChoice++;
+-			} while( ( pUserPhraseData = 
++			} while( ( pUserPhraseData =
+ 				UserGetPhraseNext( userPhoneSeq ) ) != NULL );
+ 		}
+ 
+@@ -215,7 +243,9 @@ int ChoiceFirstAvail( ChewingData *pgdat
+ 	pgdata->choiceInfo.oldChiSymbolCursor = pgdata->chiSymbolCursor;
+ 
+ 	/* see if there is some word in the cursor position */
++	int end=pgdata->chiSymbolCursor;
+ 	if ( pgdata->chiSymbolBufLen == pgdata->chiSymbolCursor ) {
++		end--;
+ 		if ( pgdata->config.bPhraseChoiceRearward )
+ 			pgdata->chiSymbolCursor = pgdata->preferInterval[ pgdata->nPrefer - 1 ].from + CountSymbols( pgdata, pgdata->chiSymbolBufLen );
+ 		else
+@@ -224,22 +254,23 @@ int ChoiceFirstAvail( ChewingData *pgdat
+ 
+ 	pgdata->bSelect = 1;
+ 
+-	SetAvailInfo( 
+-		&( pgdata->availInfo ), 
+-		pgdata->phoneSeq, 
++	SetAvailInfo(
++		&( pgdata->availInfo ),
++		pgdata->phoneSeq,
  		pgdata->nPhoneSeq,
  		PhoneSeqCursor( pgdata ),
 -		pgdata->bSymbolArrBrkpt );
 +		pgdata->bSymbolArrBrkpt,
-+		pgdata);
++		pgdata,end);
  
  	if ( ! pgdata->availInfo.nAvail )
  		return ChoiceEndChoice( pgdata );
+ 
+ 	pgdata->availInfo.currentAvail = pgdata->availInfo.nAvail - 1;
+ 	SetChoiceInfo(
+-		&( pgdata->choiceInfo ), 
+-		&( pgdata->availInfo ), 
+-		pgdata->phoneSeq, 
+-		PhoneSeqCursor( pgdata ), 
++		&( pgdata->choiceInfo ),
++		&( pgdata->availInfo ),
++		pgdata->phoneSeq,
++		PhoneSeqCursor( pgdata ),
+ 		pgdata->config.candPerPage );
+ 	return 0;
+ }
+@@ -249,24 +280,24 @@ int ChoicePrevAvail( ChewingData *pgdata
+ 	if (pgdata->choiceInfo.isSymbol) return 0;
+ 	if ( ++( pgdata->availInfo.currentAvail ) >= pgdata->availInfo.nAvail )
+ 		pgdata->availInfo.currentAvail = 0;
+-	SetChoiceInfo( 
+-		&( pgdata->choiceInfo ), 
+-		&( pgdata->availInfo ), 
+-		pgdata->phoneSeq, 
++	SetChoiceInfo(
++		&( pgdata->choiceInfo ),
++		&( pgdata->availInfo ),
++		pgdata->phoneSeq,
+ 		PhoneSeqCursor( pgdata ),
+ 		pgdata->config.candPerPage );
+ 	return 0;
+ }
+ 
+ /** @brief Return the next phrase not longer than the previous phrase. */
+-int ChoiceNextAvail( ChewingData *pgdata ) 
++int ChoiceNextAvail( ChewingData *pgdata )
+ {
+ 	if (pgdata->choiceInfo.isSymbol) return 0;
+ 	if ( --( pgdata->availInfo.currentAvail ) < 0 )
+ 		pgdata->availInfo.currentAvail = pgdata->availInfo.nAvail - 1;
+ 	SetChoiceInfo(
+-		&( pgdata->choiceInfo ), 
+-		&( pgdata->availInfo ), 
++		&( pgdata->choiceInfo ),
++		&( pgdata->availInfo ),
+ 		pgdata->phoneSeq,
+ 		PhoneSeqCursor( pgdata ),
+ 		pgdata->config.candPerPage );
+@@ -292,17 +323,17 @@ static void ChangeUserData( ChewingData 
+ 	uint16 userPhoneSeq[ MAX_PHONE_SEQ_LEN ];
+ 	int len;
+ 
+-	len = ueStrLen( pgdata->choiceInfo.totalChoiceStr[ selectNo ] ); 
++	len = ueStrLen( pgdata->choiceInfo.totalChoiceStr[ selectNo ] );
+ 	memcpy(
+-		userPhoneSeq, 
+-		&( pgdata->phoneSeq[ PhoneSeqCursor( pgdata ) ] ), 
++		userPhoneSeq,
++		&( pgdata->phoneSeq[ PhoneSeqCursor( pgdata ) ] ),
+ 		len * sizeof( uint16 ) );
+ 	userPhoneSeq[ len ] = 0;
+ 	UserUpdatePhrase( userPhoneSeq, pgdata->choiceInfo.totalChoiceStr[ selectNo ] );
+ }
+ 
+ /** @brief commit the selected phrase. */
+-int ChoiceSelect( ChewingData *pgdata, int selectNo ) 
++int ChoiceSelect( ChewingData *pgdata, int selectNo )
+ {
+ 	ChoiceInfo *pci = &( pgdata->choiceInfo );
+ 	AvailInfo *pai = &( pgdata->availInfo );


Index: libchewing.spec
===================================================================
RCS file: /cvs/pkgs/rpms/libchewing/F-10/libchewing.spec,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -p -r1.31 -r1.32
--- libchewing.spec	20 May 2009 07:17:04 -0000	1.31
+++ libchewing.spec	26 Jun 2009 06:14:14 -0000	1.32
@@ -1,7 +1,7 @@
 
 Name:           libchewing
 Version:        0.3.2
-Release:        10%{?dist}
+Release:        11%{?dist}
 Summary:        Intelligent phonetic input method library for Traditional Chinese
 
 Group:          System Environment/Libraries
@@ -98,8 +98,13 @@ rm -rf $RPM_BUILD_ROOT
 %{_libdir}/*.so
 
 %changelog
+* Fri Jun 26 2009 Ding-Yi Chen <dchen at redhat dot com> - 0.3.2-11
+- Revise phraseChoiceRearward.patch so the cursor won't move to left
+  when repeatly press down key.
+
 * Wed May 20 2009 Ding-Yi Chen <dchen at redhat dot com> - 0.3.2-10
-- Need autoreconf to make changes in Makefile.am effective.
+- Need autoreconf and BuildRequires: pkgconfig to make changes in 
+  Makefile.am effective, thus actually fix [Bug 477960] libchewing multilib conflict.
 
 * Mon May 18 2009 Ding-Yi Chen <dchen at redhat dot com> - 0.3.2-9
 - Possible Fix of Bug 501220 - RFE: edit last preedit character from end of line




More information about the fedora-extras-commits mailing list