| Index: third_party/hyphen/google.patch
|
| diff --git a/third_party/hyphen/google.patch b/third_party/hyphen/google.patch
|
| index bca4d2f552f0539a1ceb7d0474c35a0e2f8334e4..fa5cac3634ccd60da2d8a030c0c4dcebe0066828 100644
|
| --- a/third_party/hyphen/google.patch
|
| +++ b/third_party/hyphen/google.patch
|
| @@ -1,148 +1,69 @@
|
| -? 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));
|
| +retrieving revision 1.8
|
| +diff -u -r1.8 hyphen.c
|
| +--- hyphen.c 13 Sep 2012 07:50:49 -0000 1.8
|
| ++++ hyphen.c 6 Feb 2013 17:31:51 -0000
|
| +@@ -374,19 +374,28 @@
|
| + HyphenDict *
|
| + hnj_hyphen_load (const char *fn)
|
| + {
|
| ++ HyphenDict *result;
|
| ++ FILE *f;
|
| ++ f = fopen (fn, "r");
|
| + 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);
|
| -+}
|
| ++ result = hnj_hyphen_load_file(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;
|
| ++ fclose(f);
|
| ++ return result;
|
| +}
|
| -+#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
|
| - {
|
| ++hnj_hyphen_load_file (FILE *f)
|
| ++{
|
| 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 @@
|
| + int i, j, k;
|
| + HashEntry *e;
|
| + int state_num = 0;
|
| +-
|
| +- f = fopen (fn, "r");
|
| +- if (f == NULL)
|
| +- return NULL;
|
| +-
|
| + // loading one or two dictionaries (separated by NEXTLEVEL keyword)
|
| + for (k = 0; k < 2; k++) {
|
| + hashtab = hnj_hash_new ();
|
| +@@ -497,7 +506,6 @@
|
| #endif
|
| state_num = 0;
|
| }
|
| - fclose(f);
|
| -+ hnj_fclose(f);
|
| - if (k == 2) dict[0]->nextlevel = dict[1];
|
| - return dict[0];
|
| - }
|
| + if (nextlevel) dict[0]->nextlevel = dict[1];
|
| + else {
|
| + dict[1] -> nextlevel = 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 @@
|
| ++++ hyphen.h 6 Feb 2013 17:31:51 -0000
|
| +@@ -90,7 +90,11 @@
|
| int new_state;
|
| };
|
|
|
| -+#ifdef HYPHEN_CHROME_CLIENT
|
| -+HyphenDict *hnj_hyphen_load (const unsigned char *data, size_t size);
|
| -+#else
|
| ++#if 0
|
| ++/* DO NOT USE, there are known problems with Unicode on Windows. */
|
| HyphenDict *hnj_hyphen_load (const char *fn);
|
| +#endif
|
| ++HyphenDict *hnj_hyphen_load_file (FILE *f);
|
| void hnj_hyphen_free (HyphenDict *dict);
|
|
|
| /* obsolete, use hnj_hyphen_hyphenate2() or *hyphenate3() functions) */
|
|
|