Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(368)

Unified Diff: third_party/hyphen/hyphen.c

Issue 9545017: Adds a hy-phen-ator. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/hyphen/hyphen.h ('k') | third_party/hyphen/hyphen.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/hyphen/hyphen.c
===================================================================
--- third_party/hyphen/hyphen.c (revision 146932)
+++ third_party/hyphen/hyphen.c (working copy)
@@ -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;
- f = fopen (fn, "r");
+#ifdef HYPHEN_CHROME_CLIENT
+ f = hnj_fopen (data, size);
+#else
+ f = hnj_fopen (fn, "r");
+#endif
if (f == NULL)
return NULL;
@@ -289,7 +352,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;
@@ -302,7 +365,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] != '%')
{
@@ -368,7 +431,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++;
@@ -461,7 +524,7 @@
#endif
state_num = 0;
}
- fclose(f);
+ hnj_fclose(f);
if (k == 2) dict[0]->nextlevel = dict[1];
return dict[0];
}
« no previous file with comments | « third_party/hyphen/hyphen.h ('k') | third_party/hyphen/hyphen.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698