|  |  | 
|  | #include <cstring> | 
|  | #include <cstdlib> | 
|  | #include <cstdio> | 
|  |  | 
|  | #include "hunspell.hxx" | 
|  |  | 
|  | #ifndef WIN32 | 
|  | using namespace std; | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  | int main(int argc, char **argv) | 
|  | { | 
|  |  | 
|  | FILE *wtclst; | 
|  | int i; | 
|  | int dp; | 
|  | char buf[101]; | 
|  | Hunspell *pMS; | 
|  |  | 
|  | /* first parse the command line options */ | 
|  |  | 
|  | for (i = 1; i < 3; i++) | 
|  | if (!argv[i]) { | 
|  | fprintf(stderr, "correct syntax is:\nanalyze affix_file"); | 
|  | fprintf(stderr, " dictionary_file file_of_words_to_check\n"); | 
|  | fprintf(stderr, "use two words per line for morphological generation\n"); | 
|  | exit(1); | 
|  | } | 
|  |  | 
|  | /* open the words to check list */ | 
|  |  | 
|  | wtclst = fopen(argv[3], "r"); | 
|  | if (!wtclst) { | 
|  | fprintf(stderr, "Error - could not open file to check\n"); | 
|  | exit(1); | 
|  | } | 
|  |  | 
|  | pMS = new Hunspell(argv[1], argv[2]); | 
|  | while (fgets(buf, 100, wtclst)) { | 
|  | *(buf + strlen(buf) - 1) = '\0'; | 
|  | if (*buf == '\0') continue; | 
|  | // morphgen demo | 
|  | char * s = strchr(buf, ' '); | 
|  | if (s) { | 
|  | *s = '\0'; | 
|  | char ** result; | 
|  | int n = pMS->generate(&result, buf, s+1); | 
|  | for (int i = 0; i < n; i++) { | 
|  | fprintf(stdout, "generate(%s, %s) = %s\n", buf, s+1, result[i]); | 
|  | } | 
|  | pMS->free_list(&result, n); | 
|  | if (n == 0) fprintf(stdout, "generate(%s, %s) = NO DATA\n", buf, s+1); | 
|  | } else { | 
|  | dp = pMS->spell(buf); | 
|  | fprintf(stdout, "> %s\n", buf); | 
|  | if (dp) { | 
|  | char ** result; | 
|  | int n = pMS->analyze(&result, buf); | 
|  | for (int i = 0; i < n; i++) { | 
|  | fprintf(stdout, "analyze(%s) = %s\n", buf, result[i]); | 
|  | } | 
|  | pMS->free_list(&result, n); | 
|  | n = pMS->stem(&result, buf); | 
|  | for (int i = 0; i < n; i++) { | 
|  | fprintf(stdout, "stem(%s) = %s\n", buf, result[i]); | 
|  | } | 
|  | pMS->free_list(&result, n); | 
|  | } else { | 
|  | fprintf(stdout, "Unknown word.\n"); | 
|  | } | 
|  | } | 
|  | } | 
|  | delete pMS; | 
|  | fclose(wtclst); | 
|  | return 0; | 
|  | } |