| Index: third_party/hunspell_new/src/hunspell/dictmgr.cxx
|
| diff --git a/third_party/hunspell_new/src/hunspell/dictmgr.cxx b/third_party/hunspell_new/src/hunspell/dictmgr.cxx
|
| deleted file mode 100644
|
| index b4a15b1a5b96f2e1422fd59edba6b3a797fec10b..0000000000000000000000000000000000000000
|
| --- a/third_party/hunspell_new/src/hunspell/dictmgr.cxx
|
| +++ /dev/null
|
| @@ -1,180 +0,0 @@
|
| -
|
| -#include <stdlib.h>
|
| -#include <string.h>
|
| -#include <ctype.h>
|
| -#include <stdio.h>
|
| -
|
| -#include "dictmgr.hxx"
|
| -
|
| -DictMgr::DictMgr(const char * dictpath, const char * etype) : numdict(0)
|
| -{
|
| - // load list of etype entries
|
| - pdentry = (dictentry *)malloc(MAXDICTIONARIES*sizeof(struct dictentry));
|
| - if (pdentry) {
|
| - if (parse_file(dictpath, etype)) {
|
| - numdict = 0;
|
| - // no dictionary.lst found is okay
|
| - }
|
| - }
|
| -}
|
| -
|
| -
|
| -DictMgr::~DictMgr()
|
| -{
|
| - dictentry * pdict = NULL;
|
| - if (pdentry) {
|
| - pdict = pdentry;
|
| - for (int i=0;i<numdict;i++) {
|
| - if (pdict->lang) {
|
| - free(pdict->lang);
|
| - pdict->lang = NULL;
|
| - }
|
| - if (pdict->region) {
|
| - free(pdict->region);
|
| - pdict->region=NULL;
|
| - }
|
| - if (pdict->filename) {
|
| - free(pdict->filename);
|
| - pdict->filename = NULL;
|
| - }
|
| - pdict++;
|
| - }
|
| - free(pdentry);
|
| - pdentry = NULL;
|
| - pdict = NULL;
|
| - }
|
| - numdict = 0;
|
| -}
|
| -
|
| -
|
| -// read in list of etype entries and build up structure to describe them
|
| -int DictMgr::parse_file(const char * dictpath, const char * etype)
|
| -{
|
| -
|
| - int i;
|
| - char line[MAXDICTENTRYLEN+1];
|
| - dictentry * pdict = pdentry;
|
| -
|
| - // open the dictionary list file
|
| - FILE * dictlst;
|
| - dictlst = fopen(dictpath,"r");
|
| - if (!dictlst) {
|
| - return 1;
|
| - }
|
| -
|
| - // step one is to parse the dictionary list building up the
|
| - // descriptive structures
|
| -
|
| - // read in each line ignoring any that dont start with etype
|
| - while (fgets(line,MAXDICTENTRYLEN,dictlst)) {
|
| - mychomp(line);
|
| -
|
| - /* parse in a dictionary entry */
|
| - if (strncmp(line,etype,4) == 0) {
|
| - if (numdict < MAXDICTIONARIES) {
|
| - char * tp = line;
|
| - char * piece;
|
| - i = 0;
|
| - while ((piece=mystrsep(&tp,' '))) {
|
| - if (*piece != '\0') {
|
| - switch(i) {
|
| - case 0: break;
|
| - case 1: pdict->lang = mystrdup(piece); break;
|
| - case 2: if (strcmp (piece, "ANY") == 0)
|
| - pdict->region = mystrdup("");
|
| - else
|
| - pdict->region = mystrdup(piece);
|
| - break;
|
| - case 3: pdict->filename = mystrdup(piece); break;
|
| - default: break;
|
| - }
|
| - i++;
|
| - }
|
| - free(piece);
|
| - }
|
| - if (i == 4) {
|
| - numdict++;
|
| - pdict++;
|
| - } else {
|
| - switch (i) {
|
| - case 3:
|
| - free(pdict->region);
|
| - pdict->region=NULL;
|
| - case 2: //deliberate fallthrough
|
| - free(pdict->lang);
|
| - pdict->lang=NULL;
|
| - default:
|
| - break;
|
| - }
|
| - fprintf(stderr,"dictionary list corruption in line \"%s\"\n",line);
|
| - fflush(stderr);
|
| - }
|
| - }
|
| - }
|
| - }
|
| - fclose(dictlst);
|
| - return 0;
|
| -}
|
| -
|
| -// return text encoding of dictionary
|
| -int DictMgr::get_list(dictentry ** ppentry)
|
| -{
|
| - *ppentry = pdentry;
|
| - return numdict;
|
| -}
|
| -
|
| -
|
| -
|
| -// strip strings into token based on single char delimiter
|
| -// acts like strsep() but only uses a delim char and not
|
| -// a delim string
|
| -
|
| -char * DictMgr::mystrsep(char ** stringp, const char delim)
|
| -{
|
| - char * rv = NULL;
|
| - char * mp = *stringp;
|
| - size_t n = strlen(mp);
|
| - if (n > 0) {
|
| - char * dp = (char *)memchr(mp,(int)((unsigned char)delim),n);
|
| - if (dp) {
|
| - *stringp = dp+1;
|
| - size_t nc = dp - mp;
|
| - rv = (char *) malloc(nc+1);
|
| - if (rv) {
|
| - memcpy(rv,mp,nc);
|
| - *(rv+nc) = '\0';
|
| - }
|
| - } else {
|
| - rv = (char *) malloc(n+1);
|
| - if (rv) {
|
| - memcpy(rv, mp, n);
|
| - *(rv+n) = '\0';
|
| - *stringp = mp + n;
|
| - }
|
| - }
|
| - }
|
| - return rv;
|
| -}
|
| -
|
| -
|
| -// replaces strdup with ansi version
|
| -char * DictMgr::mystrdup(const char * s)
|
| -{
|
| - char * d = NULL;
|
| - if (s) {
|
| - int sl = strlen(s)+1;
|
| - d = (char *) malloc(sl);
|
| - if (d) memcpy(d,s,sl);
|
| - }
|
| - return d;
|
| -}
|
| -
|
| -
|
| -// remove cross-platform text line end characters
|
| -void DictMgr:: mychomp(char * s)
|
| -{
|
| - int k = strlen(s);
|
| - if ((k > 0) && ((*(s+k-1)=='\r') || (*(s+k-1)=='\n'))) *(s+k-1) = '\0';
|
| - if ((k > 1) && (*(s+k-2) == '\r')) *(s+k-2) = '\0';
|
| -}
|
| -
|
|
|