/* * \param word */ void ISpellChecker::wrongletter (ichar_t *word) { register int i; register int j; register int n; ichar_t savechar; ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN]; n = icharlen (word); icharcpy (newword, word); #ifndef NO_CAPITALIZATION_SUPPORT upcase (newword); #endif for (i = 0; i < n; i++) { savechar = newword[i]; for (j=0; j < m_Trynum; ++j) { if (m_Try[j] == savechar) continue; else if (isboundarych (m_Try[j]) && (i == 0 || i == n - 1)) continue; newword[i] = m_Try[j]; if (good (newword, 0, 1, 0, 0)) { if (ins_cap (newword, word) < 0) return; } } newword[i] = savechar; } }
/* * \param word */ void ISpellChecker::missingletter (ichar_t *word) { ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN + 1]; register ichar_t * p; register ichar_t * r; register int i; icharcpy (newword + 1, word); for (p = word, r = newword; *p != 0; ) { for (i = 0; i < m_Trynum; i++) { if (isboundarych (m_Try[i]) && r == newword) continue; *r = m_Try[i]; if (good (newword, 0, 1, 0, 0)) { if (ins_cap (newword, word) < 0) return; } } *r++ = *p++; } for (i = 0; i < m_Trynum; i++) { if (isboundarych (m_Try[i])) continue; *r = m_Try[i]; if (good (newword, 0, 1, 0, 0)) { if (ins_cap (newword, word) < 0) return; } } }
/*! * \param wchars Characters in -w option, if any */ void ISpellChecker::initckch(char *wchars) { register ichar_t c; char num[4]; for(c = 0; c < static_cast< ichar_t >(SET_SIZE + m_hashheader.nstrchars); ++c) { if(iswordch(c)) { if(!mylower(c)) { m_Try[m_Trynum] = c; ++m_Trynum; } } else if(isboundarych(c)) { m_Try[m_Trynum] = c; ++m_Trynum; } } if(wchars != NULL) { while(m_Trynum < SET_SIZE && *wchars != '\0') { if(*wchars != 'n' && *wchars != '\\') { c = *wchars; ++wchars; } else { ++wchars; num[0] = '\0'; num[1] = '\0'; num[2] = '\0'; num[3] = '\0'; if(isdigit(wchars[0])) { num[0] = wchars[0]; if(isdigit(wchars[1])) { num[1] = wchars[1]; if(isdigit(wchars[2])) num[2] = wchars[2]; } } if(wchars[-1] == 'n') { wchars += strlen(num); c = atoi(num); } else { wchars += strlen(num); c = 0; if(num[0]) c = num[0] - '0'; if(num[1]) { c <<= 3; c += num[1] - '0'; } if(num[2]) { c <<= 3; c += num[2] - '0'; } } } /* c &= NOPARITY;*/ if(!m_hashheader.wordchars[c]) { m_hashheader.wordchars[c] = 1; m_hashheader.sortorder[c] = m_hashheader.sortval++; m_Try[m_Trynum] = c; ++m_Trynum; } } } }