summaryrefslogtreecommitdiff
path: root/libraries/libchewing/libchewing-rev1048.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/libchewing/libchewing-rev1048.patch')
-rw-r--r--libraries/libchewing/libchewing-rev1048.patch235
1 files changed, 235 insertions, 0 deletions
diff --git a/libraries/libchewing/libchewing-rev1048.patch b/libraries/libchewing/libchewing-rev1048.patch
new file mode 100644
index 0000000000..1a2b10bdf1
--- /dev/null
+++ b/libraries/libchewing/libchewing-rev1048.patch
@@ -0,0 +1,235 @@
+Index: test/randkeystroke.c
+===================================================================
+--- test/randkeystroke.c (revision 1038)
++++ test/randkeystroke.c (revision 1048)
+@@ -46,6 +46,7 @@
+ printf( "usage: randkeystroke [-r] [-n num] [-h]\n" \
+ "\t -r - total random\n" \
+ "\t -n num - generate num keystrokes\n"
++ "\t -s seed - random seed\n"
+ "\t -h - help\n" );
+ }
+
+@@ -63,6 +64,9 @@
+ nk = atoi( argv[i] );
+ } else if ( ! strcmp( argv[i], "-r" ) ) {
+ total_random = 1;
++ } else if ( ! strcmp( argv[i], "-s" ) ) {
++ if ( ++i < argc )
++ srand( atoi( argv[i] ) );
+ } else if ( ! strcmp( argv[i], "-h" ) ) {
+ usage();
+ return 0;
+@@ -71,7 +75,7 @@
+ if (total_random) {
+ for ( i = 0; i < nk; i++ ) {
+ n = rand() % (n_nkeys + n_okeys);
+- if ( n > n_nkeys )
++ if ( n >= n_nkeys )
+ printf( "%s", other_keys[n - n_nkeys] );
+ else
+ printf( "%c", normal_keys[n] );
+@@ -97,4 +101,5 @@
+ return 0;
+ }
+
+-/* vim: noet */
++/* vim: noet
++ */
+Index: python/chewing.py
+===================================================================
+--- python/chewing.py (revision 1038)
++++ python/chewing.py (revision 1048)
+@@ -2,9 +2,11 @@
+ from functools import partial
+
+ _libchewing = CDLL('libchewing.so.3')
+-_libchewing.chewing_handle_Default.argtypes = [c_void_p, c_char]
+ _libchewing.chewing_commit_String.restype = c_char_p
+ _libchewing.chewing_buffer_String.restype = c_char_p
++_libchewing.chewing_cand_String.restype = c_char_p
++_libchewing.chewing_zuin_String.restype = c_char_p
++_libchewing.chewing_aux_String.restype = c_char_p
+
+ def Init(datadir, userdir):
+ return _libchewing.chewing_Init(datadir, userdir)
+Index: src/tree.c
+===================================================================
+--- src/tree.c (revision 1038)
++++ src/tree.c (revision 1048)
+@@ -285,25 +285,16 @@
+ for ( i = begin; i <= end; i++ ) {
+ for (
+ child = tree[ tree_p ].child_begin;
+- child <= tree[ tree_p ].child_end;
++ child != -1 && child <= tree[ tree_p ].child_end;
+ child++ ) {
+-#ifdef USE_BINARY_DATA
+- /**
+- * This is a workaround to prevent access violation.
+- *
+- * Sometimes, child < 0 and tree[ child ] refer to an invalid
+- * address for unknown reason.This could be a bug of libchewing.
+- * This serious bug was discovered by seamxr.
+- */
+- if ( child < 0 || child * sizeof(TreeType) > tree_size )
+- return -1;
+-#endif
+
++ assert(0 <= child && child * sizeof(TreeType) < tree_size);
++
+ if ( tree[ child ].phone_id == phoneSeq[ i ] )
+ break;
+ }
+ /* if not found any word then fail. */
+- if ( child > tree[ tree_p ].child_end )
++ if ( child == -1 || child > tree[ tree_p ].child_end )
+ return -1;
+ else {
+ tree_p = child;
+Index: src/mod_aux.c
+===================================================================
+--- src/mod_aux.c (revision 1038)
++++ src/mod_aux.c (revision 1048)
+@@ -90,7 +90,7 @@
+ if ( ctx->output->zuinBuf[ i ].s[ 0 ] != '\0' ) {
+ strcat( s, (char *) (ctx->output->zuinBuf[ i ].s) );
+ if ( zuin_count )
+- *zuin_count++;
++ (*zuin_count)++;
+ }
+ }
+ return s;
+Index: scripts/gen-tabe-diff.sh
+===================================================================
+--- scripts/gen-tabe-diff.sh (revision 1038)
++++ scripts/gen-tabe-diff.sh (revision 1048)
+@@ -1,19 +0,0 @@
+-#!/bin/sh
+-
+-if [ ! -f scripts/gen-tabe-diff.sh ]; then
+- echo -e "\033[44;37m You *MUST* run this script in top dir. \033[m"
+- exit
+-fi
+-
+-if [ ! -f data/tabe-tsi.src ]; then
+- echo -e "\033[44;37m tabe-tsi.src not found. Try to generate. \033[m"
+- sh ./scripts/cvsup-tsi-src.sh
+-fi
+-
+-# compare
+-sort data/tsi.src | cut --delimiter=' ' -f1 > /tmp/orig-tsi
+-sort data/tabe-tsi.src | cut --delimiter=' ' -f1 > /tmp/tabe-tsi
+-diff -u /tmp/orig-tsi /tmp/tabe-tsi > tabe-tsi.diff
+-rm -f /tmp/orig-tsi /tmp/tabe-tsi
+-
+-echo -e "\033[44;37m Please check out tabe-tsi.diff \033[m"
+Index: scripts/tsi-chewing.diff
+===================================================================
+--- scripts/tsi-chewing.diff (revision 1038)
++++ scripts/tsi-chewing.diff (revision 1048)
+@@ -1,51 +0,0 @@
+---- tsidump.c 2004-05-12 23:30:19.000000000 +0800
+-+++ tsidump-chewing.c 2004-05-12 23:29:12.000000000 +0800
+-@@ -65,32 +65,23 @@
+- }
+- i++;
+- len = strlen((char *)tsi->tsi)/2;
+-- fprintf(fp, "%s", tsi->tsi);
+-- if (ref) {
+-- fprintf(fp, " %ld", tsi->refcount);
+-- }
+- if (tsiyin) {
+- ZuYinSymbolSequence zs = NULL;
+-- int begin = 0;
+-
+-- fprintf(fp, " ");
+- for (j = 0; j < tsi->yinnum; j++) {
+-+ if (len > 7)
+-+ continue;
+-+ fprintf(fp, "%s %ld\t", tsi->tsi, tsi->refcount);
+- for (k = 0; k < len; k++) {
+- zs = tabeYinToZuYinSymbolSequence(tsi->yindata[j*len+k]);
+- if (zs) {
+-- if (begin) {
+-- fprintf(fp, "¡@");
+-- }
+-- else {
+-- begin = 1;
+-- }
+-- fprintf(fp, "%s", zs);
+-+ fprintf(fp, "%s ", zs);
+- free(zs);
+- }
+- }
+-+ fprintf(fp, "\n");
+- }
+- }
+-- fprintf(fp, "\n");
+- }
+-
+- db->Close(db);
+-@@ -109,8 +100,8 @@
+- char *db_name, *op_name;
+-
+- db_name = op_name = (char *)NULL;
+-- ref = 0;
+-- tsiyin = 0;
+-+ ref = 1;
+-+ tsiyin = 1;
+-
+- while ((ch = getopt(argc, argv, "d:f:ry")) != -1) {
+- switch(ch) {
+Index: scripts/cvsup-tsi-src.sh
+===================================================================
+--- scripts/cvsup-tsi-src.sh (revision 1038)
++++ scripts/cvsup-tsi-src.sh (revision 1048)
+@@ -1,48 +0,0 @@
+-#!/bin/sh
+-
+-TOP=`pwd`
+-TABE_TSI=$TOP/data/tabe-tsi.src
+-
+-if [ ! -f scripts/cvsup-tsi-src.sh ]; then
+- echo -e "\033[44;37m You *MUST* run this script in top dir. \033[m"
+- exit
+-fi
+-if [ -f $TABE_TSI ]; then
+- echo -e "\033[44;37m tabe-tsi.src done. \033[m"
+- exit
+-fi
+-
+-if [ ! -d libtabe ]; then
+- echo -e "\033[44;37m No libtabe found. cvs check from libtabe \033[m"
+- cvs -z9 -d :pserver:xcin@xcin.linux.org.tw:/home/service/cvsroot/xcin \
+- checkout libtabe
+-fi
+-
+-if [ ! -d libtabe ]; then
+- echo -e "\033[44;37m There were some problems while checking out. \033[m"
+- exit
+-fi
+-
+-pushd libtabe
+-./configure
+-if [ -f Makefile ]; then
+- make clean all
+-
+- # patch tsidump to adapt Chewing
+- pushd util
+- if [ ! -f PATCHED ]; then
+- patch -p0 < $TOP/scripts/tsi-chewing.diff
+- touch PATCHED
+- fi
+- make
+-
+- # generation
+- if [ -f tsidump ]; then
+- ./tsidump -d ../tsi-src/tsi.db > $TABE_TSI
+- fi
+- popd
+-fi
+-popd
+-
+-rm -rf libtabe
+-