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

Unified Diff: third_party/hunspell/src/hunspell/affixmgr.cxx

Issue 2239005: Merges our hunspell change to hunspell 1.2.10.... (Closed) Base URL: svn://chrome-svn.corp.google.com/chrome/trunk/deps/
Patch Set: '' Created 10 years, 6 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/hunspell/src/hunspell/affixmgr.hxx ('k') | third_party/hunspell/src/hunspell/filemgr.hxx » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/hunspell/src/hunspell/affixmgr.cxx
===================================================================
--- third_party/hunspell/src/hunspell/affixmgr.cxx (revision 50428)
+++ third_party/hunspell/src/hunspell/affixmgr.cxx (working copy)
@@ -14,8 +14,14 @@
#include "csutil.hxx"
+#ifdef HUNSPELL_CHROME_CLIENT
+AffixMgr::AffixMgr(hunspell::BDictReader* reader, HashMgr** ptr, int * md)
+{
+ bdict_reader = reader;
+#else
AffixMgr::AffixMgr(const char * affpath, HashMgr** ptr, int * md, const char * key)
{
+#endif
// register hash manager and load affix data from aff file
pHMgr = ptr[0];
alldic = ptr;
@@ -99,9 +105,17 @@
sFlag[i] = NULL;
}
+#ifdef HUNSPELL_CHROME_CLIENT
+ // Define dummy parameters for parse_file() to avoid changing the parameters
+ // of parse_file(). This may make it easier to merge the changes of the
+ // original hunspell.
+ const char* affpath = NULL;
+ const char* key = NULL;
+#else
for (int j=0; j < CONTSIZE; j++) {
contclasses[j] = 0;
}
+#endif
if (parse_file(affpath, key)) {
HUNSPELL_WARNING(stderr, "Failure loading aff file %s\n",affpath);
@@ -252,6 +266,43 @@
char * line; // io buffers
char ft; // affix type
+#ifdef HUNSPELL_CHROME_CLIENT
+ // open the affix file
+ // We're always UTF-8
+ utf8 = 1;
+
+ // A BDICT file stores PFX and SFX lines in a special section and it provides
+ // a special line iterator for reading PFX and SFX lines.
+ // We create a FileMgr object from this iterator and parse PFX and SFX lines
+ // before parsing other lines.
+ hunspell::LineIterator affix_iterator = bdict_reader->GetAffixLineIterator();
+ FileMgr* iterator = new FileMgr(&affix_iterator);
+ if (!iterator) {
+ HUNSPELL_WARNING(stderr,
+ "error: could not create a FileMgr from an affix line iterator.\n");
+ return 1;
+ }
+
+ while (line = iterator->getline()) {
+ ft = ' ';
+ if (strncmp(line,"PFX",3) == 0) ft = complexprefixes ? 'S' : 'P';
+ if (strncmp(line,"SFX",3) == 0) ft = complexprefixes ? 'P' : 'S';
+ if (ft != ' ')
+ parse_affix(line, ft, iterator, NULL);
+ }
+ delete iterator;
+
+ // Create a FileMgr object for reading lines except PFX and SFX lines.
+ // We don't need to change the loop below since our FileMgr emulates the
+ // original one.
+ hunspell::LineIterator other_iterator = bdict_reader->GetOtherLineIterator();
+ FileMgr * afflst = new FileMgr(&other_iterator);
+ if (!afflst) {
+ HUNSPELL_WARNING(stderr,
+ "error: could not create a FileMgr from an other line iterator.\n");
+ return 1;
+ }
+#else
// checking flag duplication
char dupflags[CONTSIZE];
char dupflags_ini = 1;
@@ -265,6 +316,7 @@
HUNSPELL_WARNING(stderr, "error: could not open affix description file %s\n",affpath);
return 1;
}
+#endif
// step one is to parse the affix file building up the internal
// affix data structures
@@ -274,6 +326,7 @@
while ((line = afflst->getline())) {
mychomp(line);
+#ifndef HUNSPELL_CHROME_CLIENT
/* remove byte order mark */
if (firstline) {
firstline = 0;
@@ -282,6 +335,7 @@
memmove(line, line+3, strlen(line+3)+1);
}
}
+#endif
/* parse in the keyboard string */
if (strncmp(line,"KEY",3) == 0) {
@@ -517,6 +571,7 @@
}
}
+#ifndef HUNSPELL_CHROME_CLIENT
/* parse in the typical fault correcting table */
if (strncmp(line,"REP",3) == 0) {
if (parse_reptable(line, afflst)) {
@@ -524,6 +579,7 @@
return 1;
}
}
+#endif
/* parse in the input conversion table */
if (strncmp(line,"ICONV",5) == 0) {
@@ -634,6 +690,7 @@
checksharps=1;
}
+#ifndef HUNSPELL_CHROME_CLIENT // Chrome handled affixes above.
/* parse this affix: P - prefix, S - suffix */
ft = ' ';
if (strncmp(line,"PFX",3) == 0) ft = complexprefixes ? 'S' : 'P';
@@ -650,6 +707,7 @@
return 1;
}
}
+#endif
}
delete afflst;
@@ -1247,6 +1305,26 @@
const char * r;
int lenr, lenp;
+#ifdef HUNSPELL_CHROME_CLIENT
+ const char *pattern, *pattern2;
+ hunspell::ReplacementIterator iterator = bdict_reader->GetReplacementIterator();
+ while (iterator.GetNext(&pattern, &pattern2)) {
+ r = word;
+ lenr = strlen(pattern2);
+ lenp = strlen(pattern);
+
+ // search every occurence of the pattern in the word
+ while ((r=strstr(r, pattern)) != NULL) {
+ strcpy(candidate, word);
+ if (r-word + lenr + strlen(r+lenp) >= MAXLNLEN) break;
+ strcpy(candidate+(r-word), pattern2);
+ strcpy(candidate+(r-word)+lenr, r+lenp);
+ if (candidate_check(candidate,strlen(candidate))) return 1;
+ r++; // search for the next letter
+ }
+ }
+
+#else
if ((wl < 2) || !numrep) return 0;
for (int i=0; i < numrep; i++ ) {
@@ -1263,6 +1341,7 @@
r++; // search for the next letter
}
}
+#endif
return 0;
}
@@ -3332,6 +3411,7 @@
return 0;
}
+#ifndef HUNSPELL_CHROME_CLIENT
/* parse in the typical fault correcting table */
int AffixMgr::parse_reptable(char * line, FileMgr * af)
{
@@ -3407,6 +3487,7 @@
}
return 0;
}
+#endif
/* parse in the typical fault correcting table */
int AffixMgr::parse_convtable(char * line, FileMgr * af, RepList ** rl, const char * keyword)
@@ -4010,6 +4091,7 @@
case 1: {
np++;
aflag = pHMgr->decode_flag(piece);
+#ifndef HUNSPELL_CHROME_CLIENT // We don't check for duplicates.
if (((at == 'S') && (dupflags[aflag] & dupSFX)) ||
((at == 'P') && (dupflags[aflag] & dupPFX))) {
HUNSPELL_WARNING(stderr, "error: line %d: multiple definitions of an affix flag\n",
@@ -4017,6 +4099,7 @@
// return 1; XXX permissive mode for bad dictionaries
}
dupflags[aflag] += (char) ((at == 'S') ? dupSFX : dupPFX);
+#endif
break;
}
// piece 3 - is cross product indicator
« no previous file with comments | « third_party/hunspell/src/hunspell/affixmgr.hxx ('k') | third_party/hunspell/src/hunspell/filemgr.hxx » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698