1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235
|
# include "indConfig.h"
# include <ind.h>
# include "indlocal.h"
# include <appDebugon.h>
/************************************************************************/
/* Make an empty finite automaton. */
/************************************************************************/
void * indMake( void )
{ return (void *)indINDmake( 0 ); }
/************************************************************************/
/* Read a finite automaton from file. If the read_only flag is set, */
/* the file is memory mapped. This han an advantage on some operating */
/* systems. */
/************************************************************************/
void * indRead( filename, read_only )
const char * filename;
int read_only;
{ return (void *)indINDread( filename, read_only ); }
/************************************************************************/
/* Make automaton voidint accept word key. The number of the accepting */
/* state is returned, or -1 on failure. */
/************************************************************************/
int indPut( void * voidind,
const unsigned char * key )
{
IND * ind= (IND *)voidind;
if ( ind->ind_magic != INDMAGIC )
{ LDEB(ind->ind_magic); return -1; }
return indINDput( ind, key );
}
/************************************************************************/
/* Tell automaton voidind to no longer accept the word key. This is */
/* done by making the state that accepted key a non final state. */
/************************************************************************/
int indForget( voidind, key )
void * voidind;
const unsigned char * key;
{
IND * ind= (IND *)voidind;
if ( ind->ind_magic != INDMAGIC )
{ LDEB(ind->ind_magic); return -1; }
return indINDforget( ind, (unsigned char *)key );
}
/************************************************************************/
/* Find the state in automaton voidind to which key is a path. */
/* returns the number of the state or -1 if no such state exists. */
/* *paccpt is set to 0 if it is a non final state, to other values in */
/* final states. */
/************************************************************************/
int indGet( int * paccept,
void * voidind,
const unsigned char * key )
{
IND * ind= (IND *)voidind;
if ( ind->ind_magic != INDMAGIC )
{ LDEB(ind->ind_magic); return -1; }
return indINDget( paccept, ind, -1, key );
}
/************************************************************************/
/* See whether automaton voidind accepts word key. */
/* Certain case mapping are tried if the word is not accepted as is. */
/* The way case is changed is reported in *phow. */
/* The value of *phow is set to one of the INDhSOMETHING values from */
/* ind.h. */
/************************************************************************/
int indGetWord( int * pWhatWasShifted,
void * voidind,
const unsigned char * word,
int asPrefix,
const unsigned char * charKinds,
const unsigned char * charShifts )
{
IND * ind= (IND *)voidind;
if ( ind->ind_magic != INDMAGIC )
{ LDEB(ind->ind_magic); return -1; }
return indWRDget( ind, pWhatWasShifted, word, asPrefix,
charKinds, charShifts );
}
/************************************************************************/
/* free a finite automaton. */
/************************************************************************/
void indFree( voidind )
void * voidind;
{
IND * ind= (IND *)voidind;
if ( ind->ind_magic != INDMAGIC )
{ return; }
indINDfree( ind );
}
/************************************************************************/
/* Write an automaton to file. */
/************************************************************************/
int indWrite( voidind, filename )
void * voidind;
const char * filename;
{
IND * ind= (IND *)voidind;
if ( ind->ind_magic != INDMAGIC )
{ LDEB(ind->ind_magic); return -1; }
return indINDwrite( ind, filename );
}
/************************************************************************/
/* Minimise an automaton. */
/************************************************************************/
void * indMini( voidind )
void * voidind;
{
IND * ind= (IND *)voidind;
if ( ind->ind_magic != INDMAGIC )
{ return (void *)0; }
return (void *)indINDmini( ind );
}
/************************************************************************/
/* Return an automaton that has the same properties as voidind. */
/* Node numbers and transition numbers are given using a 'depth first' */
/* scan of 'voidind'. */
/************************************************************************/
void * indRenumber( voidind )
void * voidind;
{
IND * ind= (IND *)voidind;
if ( ind->ind_magic != INDMAGIC )
{ return (void *)0; }
return (void *)indINDrenumber( ind );
}
/************************************************************************/
/* Make guesses for a certain word. */
/* For every guess, (*fun)( something, <guess>, how ) is called. */
/************************************************************************/
int indGuess( void * voidind,
const unsigned char * word,
SpellGuessContext * sgc,
int how,
const GuessSubstitution * typos,
int count,
const unsigned char * charKinds,
const unsigned char * charShifts )
{
IND * ind= (IND *)voidind;
if ( ind->ind_magic != INDMAGIC )
{ LDEB(ind->ind_magic); return -1; }
return indINDguess( ind, word, sgc, how,
typos, count, charKinds, charShifts );
}
/************************************************************************/
/* Make guesses for a certain word. */
/* If the word starts with a capital, of consists of capitals only, */
/* the guesses are based on the word or the tail of the word mapped */
/* to lower case. The how argument to fun is used to report what was */
/* mapped. */
/* For every guess, (*fun)( something, <guess>, how ) is called. */
/************************************************************************/
int indGuessWord( void * voidind,
const unsigned char * word,
SpellGuessContext * sgc,
const GuessSubstitution * typos,
int count,
const unsigned char * charKinds,
const unsigned char * charShifts )
{
IND * ind= (IND *)voidind;
if ( ind->ind_magic != INDMAGIC )
{ LDEB(ind->ind_magic); return -1; }
return indWRDguess( ind, word, sgc, typos, count, charKinds, charShifts );
}
/************************************************************************/
/* Remember an integer in a state on an automaton. */
/************************************************************************/
int indSetItem( voidind, tn, item )
void * voidind;
int tn;
int item;
{
IND * ind= (IND *)voidind;
if ( ind->ind_magic != INDMAGIC ||
tn < 0 ||
tn >= ind->indAllocatedNodes )
{ LDEB(ind->ind_magic); return -1; }
return indITset( ind, tn, item );
}
/************************************************************************/
/* Retrieve the integers that are stored in a state of an automaton. */
/************************************************************************/
int indGetItems( voidind, tn, pnitem, pitems )
void * voidind;
int tn;
int * pnitem;
int ** pitems;
{
IND * ind= (IND *)voidind;
if ( ind->ind_magic != INDMAGIC ||
tn < 0 ||
tn >= ind->indAllocatedNodes )
{ LDEB(ind->ind_magic); return -1; }
return indITget( ind, tn, pnitem, pitems );
}
|