| Index: third_party/hyphen/google.patch
|
| ===================================================================
|
| --- third_party/hyphen/google.patch (revision 0)
|
| +++ third_party/hyphen/google.patch (revision 0)
|
| @@ -0,0 +1,148 @@
|
| +? google.patch
|
| +Index: hyphen.c
|
| +===================================================================
|
| +RCS file: /cvsroot/hunspell/hyphen/hyphen.c,v
|
| +retrieving revision 1.4
|
| +diff -u -r1.4 hyphen.c
|
| +--- hyphen.c 1 Dec 2010 01:30:20 -0000 1.4
|
| ++++ hyphen.c 1 Mar 2012 05:18:32 -0000
|
| +@@ -242,12 +242,71 @@
|
| + }
|
| + #endif
|
| +
|
| ++#ifdef HYPHEN_CHROME_CLIENT
|
| ++typedef struct {
|
| ++ const unsigned char *data;
|
| ++ size_t offset;
|
| ++ size_t size;
|
| ++} hnj_file;
|
| ++
|
| ++static hnj_file *
|
| ++hnj_fopen (const unsigned char *data, size_t size)
|
| ++{
|
| ++ hnj_file *f;
|
| ++
|
| ++ f = hnj_malloc (sizeof(hnj_file));
|
| ++ if (f == NULL)
|
| ++ return NULL;
|
| ++ f->offset = 0;
|
| ++ f->data = data;
|
| ++ f->size = size;
|
| ++ return f;
|
| ++}
|
| ++
|
| ++static void
|
| ++hnj_fclose (hnj_file *f)
|
| ++{
|
| ++ hnj_free (f);
|
| ++}
|
| ++
|
| ++static char *
|
| ++hnj_fgets (char *s, int size, hnj_file *f)
|
| ++{
|
| ++ int i;
|
| ++
|
| ++ if (f->offset >= f->size)
|
| ++ return NULL;
|
| ++ for (i = 0; i < size - 1; i++) {
|
| ++ char c;
|
| ++
|
| ++ if (f->offset >= f->size)
|
| ++ break;
|
| ++ c = f->data[f->offset++];
|
| ++ if (c == '\r' || c == '\n')
|
| ++ break;
|
| ++ s[i] = c;
|
| ++ }
|
| ++ s[i] = '\0';
|
| ++ return s;
|
| ++}
|
| ++#else
|
| ++typedef FILE hnj_file;
|
| ++#define hnj_fopen(fn, mode) fopen((fn), (mode))
|
| ++#define hnj_fclose(f) fclose(f)
|
| ++#define hnj_fgets(s, size, f) fgets((s), (size), (f))
|
| ++#endif
|
| ++
|
| ++#ifdef HYPHEN_CHROME_CLIENT
|
| ++HyphenDict *
|
| ++hnj_hyphen_load (const unsigned char *data, size_t size)
|
| ++#else
|
| + HyphenDict *
|
| + hnj_hyphen_load (const char *fn)
|
| ++#endif
|
| + {
|
| + HyphenDict *dict[2];
|
| + HashTab *hashtab;
|
| +- FILE *f;
|
| ++ hnj_file *f;
|
| + char buf[MAX_CHARS];
|
| + char word[MAX_CHARS];
|
| + char pattern[MAX_CHARS];
|
| +@@ -261,7 +320,11 @@
|
| + HashEntry *e;
|
| + int nextlevel = 0;
|
| +
|
| ++#ifdef HYPHEN_CHROME_CLIENT
|
| ++ f = hnj_fopen (data, size);
|
| ++#else
|
| + f = fopen (fn, "r");
|
| ++#endif
|
| + if (f == NULL)
|
| + return NULL;
|
| +
|
| +@@ -291,7 +354,7 @@
|
| + /* read in character set info */
|
| + if (k == 0) {
|
| + for (i=0;i<MAX_NAME;i++) dict[k]->cset[i]= 0;
|
| +- if (fgets(dict[k]->cset, sizeof(dict[k]->cset),f) != NULL) {
|
| ++ if (hnj_fgets(dict[k]->cset, sizeof(dict[k]->cset),f) != NULL) {
|
| + for (i=0;i<MAX_NAME;i++)
|
| + if ((dict[k]->cset[i] == '\r') || (dict[k]->cset[i] == '\n'))
|
| + dict[k]->cset[i] = 0;
|
| +@@ -304,7 +367,7 @@
|
| + dict[k]->utf8 = dict[0]->utf8;
|
| + }
|
| +
|
| +- while (fgets (buf, sizeof(buf), f) != NULL)
|
| ++ while (hnj_fgets (buf, sizeof(buf), f) != NULL)
|
| + {
|
| + if (buf[0] != '%')
|
| + {
|
| +@@ -385,7 +448,7 @@
|
| + if (dict[k]->utf8) {
|
| + int pu = -1; /* unicode character position */
|
| + int ps = -1; /* unicode start position (original replindex) */
|
| +- int pc = (*word == '.') ? 1: 0; /* 8-bit character position */
|
| ++ size_t pc = (*word == '.') ? 1: 0; /* 8-bit character position */
|
| + for (; pc < (strlen(word) + 1); pc++) {
|
| + /* beginning of an UTF-8 character (not '10' start bits) */
|
| + if ((((unsigned char) word[pc]) >> 6) != 2) pu++;
|
| +@@ -478,7 +541,7 @@
|
| + #endif
|
| + state_num = 0;
|
| + }
|
| +- fclose(f);
|
| ++ hnj_fclose(f);
|
| + if (k == 2) dict[0]->nextlevel = dict[1];
|
| + return dict[0];
|
| + }
|
| +Index: hyphen.h
|
| +===================================================================
|
| +RCS file: /cvsroot/hunspell/hyphen/hyphen.h,v
|
| +retrieving revision 1.2
|
| +diff -u -r1.2 hyphen.h
|
| +--- hyphen.h 27 Nov 2010 02:20:33 -0000 1.2
|
| ++++ hyphen.h 1 Mar 2012 05:18:33 -0000
|
| +@@ -93,7 +93,11 @@
|
| + int new_state;
|
| + };
|
| +
|
| ++#ifdef HYPHEN_CHROME_CLIENT
|
| ++HyphenDict *hnj_hyphen_load (const unsigned char *data, size_t size);
|
| ++#else
|
| + HyphenDict *hnj_hyphen_load (const char *fn);
|
| ++#endif
|
| + void hnj_hyphen_free (HyphenDict *dict);
|
| +
|
| + /* obsolete, use hnj_hyphen_hyphenate2() or *hyphenate3() functions) */
|
|
|