blob: bca4d2f552f0539a1ceb7d0474c35a0e2f8334e4 [file] [log] [blame]
? 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) */