lib/kxTok.c File Reference

#include "common.h"
#include "kxTok.h"

Include dependency graph for kxTok.c:

Go to the source code of this file.

Functions

static struct kxTokkxTokNew (enum kxTokType type, char *string, int stringSize, boolean spaceBefore)
kxTokkxTokenizeFancy (char *text, boolean wildAst, boolean wildPercent, boolean includeHyphen)
kxTokkxTokenize (char *text, boolean wildAst)
void kxTokIncludeQuotes (boolean val)

Variables

static char const rcsid [] = "$Id: kxTok.c,v 1.10 2004/11/05 23:08:58 kent Exp $"
boolean includeQuotes = FALSE


Function Documentation

struct kxTok* kxTokenize ( char *  text,
boolean  wildAst 
) [read]

Definition at line 226 of file kxTok.c.

References FALSE, and kxTokenizeFancy().

Referenced by doubleExp(), and keyExpParse().

00230 {
00231 return kxTokenizeFancy(text, wildAst, FALSE, FALSE);
00232 }

Here is the call graph for this function:

Here is the caller graph for this function:

struct kxTok* kxTokenizeFancy ( char *  text,
boolean  wildAst,
boolean  wildPercent,
boolean  includeHyphen 
) [read]

Definition at line 28 of file kxTok.c.

References errAbort(), FALSE, includeQuotes, kxtAdd, kxtAnd, kxtCloseParen, kxtDiv, kxtDot, kxtEnd, kxtEquals, kxtGE, kxtGT, kxtLE, kxtLT, kxtMod, kxtMul, kxtNot, kxTokNew(), kxtOpenParen, kxtOr, kxtPunct, kxtString, kxtSub, kxtWildString, kxtXor, slAddHead, slReverse(), kxTok::spaceBefore, tok, TRUE, and kxTok::type.

Referenced by kxTokenize().

00038 {
00039 struct kxTok *tokList = NULL, *tok;
00040 char c, *s, *start = NULL, *end = NULL;
00041 enum kxTokType type = 0;
00042 boolean spaceBefore = FALSE;
00043 
00044 s = text;
00045 for (;;)
00046     {
00047     if ((c = *s) == 0)
00048         break;
00049     start = s++;
00050     if (isspace(c))
00051         {
00052         spaceBefore = TRUE;
00053         continue;
00054         }
00055     else if (isalnum(c) || c == '?' || (wildAst && c == '*') ||
00056              (wildPercent && c == '%'))
00057         {
00058         if (c == '?')
00059             type = kxtWildString;
00060         else if (wildAst && c == '*')
00061             type = kxtWildString;
00062         else if (wildPercent && c == '%')
00063             type = kxtWildString;
00064         else
00065             type = kxtString;
00066         for (;;)
00067             {
00068             c = *s;
00069             if (isalnum(c) || c == ':' || c == '_' || c == '.' ||
00070                 (includeHyphen && c == '-'))
00071                 ++s;
00072             else if (c == '?' || (wildAst && c == '*') ||
00073                      (wildPercent && c == '%'))
00074                 {
00075                 type = kxtWildString;
00076                 ++s;
00077                 }
00078             else
00079                 break;
00080             }
00081         end = s;
00082         }
00083     else if (c == '"')
00084         {
00085         type = kxtString;
00086         if (! includeQuotes)
00087             start = s;
00088         for (;;)
00089             {
00090             c = *s++;
00091             if (c == '"')
00092                 break;
00093             if (c == '*' || c == '?' || (wildPercent && c == '%'))
00094                 type = kxtWildString;
00095             }
00096         if (! includeQuotes)
00097             end = s-1;
00098         else
00099             end = s;
00100         }
00101     else if (c == '\'')
00102         {
00103         type = kxtString;
00104         if (! includeQuotes)
00105             start = s;
00106         for (;;)
00107             {
00108             c = *s++;
00109             if (c == '\'')
00110                 break;
00111             if (c == '*' || c == '?' || (wildPercent && c == '%'))
00112                 type = kxtWildString;
00113             }
00114         if (! includeQuotes)
00115             end = s-1;
00116         else
00117             end = s;
00118         } 
00119     else if (c == '=')
00120         {
00121         type = kxtEquals;
00122         end = s;
00123         }
00124     else if (c == '&')
00125         {
00126         type = kxtAnd;
00127         end = s;
00128         }
00129     else if (c == '|')
00130         {
00131         type = kxtOr;
00132         end = s;
00133         }
00134     else if (c == '^')
00135         {
00136         type = kxtXor;
00137         end = s;
00138         }
00139     else if (c == '+')
00140         {
00141         type = kxtAdd;
00142         end = s;
00143         }
00144     else if (c == '-')
00145         {
00146         type = kxtSub;
00147         end = s;
00148         }
00149     else if (c == '*')
00150         {
00151         type = kxtMul;
00152         end = s;
00153         }
00154     else if (c == '/')
00155         {
00156         type = kxtDiv;
00157         end = s;
00158         }
00159     else if (c == '(')
00160         {
00161         type = kxtOpenParen;
00162         end = s;
00163         }
00164     else if (c == ')')
00165         {
00166         type = kxtCloseParen;
00167         end = s;
00168         }
00169     else if (c == '!')
00170         {
00171         type = kxtNot;
00172         end = s;
00173         }
00174     else if (c == '>')
00175         {
00176         if (*s == '=')
00177             {
00178             ++s;
00179             type = kxtGE;
00180             }
00181         else
00182             type = kxtGT;
00183         end = s;
00184         }
00185     else if (c == '<')
00186         {
00187         if (*s == '=')
00188             {
00189             ++s;
00190             type = kxtLE;
00191             }
00192         else
00193             type = kxtLT;
00194         end = s;
00195         }
00196     else if (c == '.')
00197         {
00198         type = kxtDot;
00199         end = s;
00200         }
00201     else if (c == '%')
00202         {
00203         type = kxtMod;
00204         end = s;
00205         }
00206     else if (ispunct(c))
00207         {
00208         type = kxtPunct;
00209         end = s;
00210         }
00211     else
00212         {
00213         errAbort("Unrecognized character %c", c);
00214         }
00215     tok = kxTokNew(type, start, end-start, spaceBefore);
00216     slAddHead(&tokList, tok);
00217     spaceBefore = FALSE;
00218     }
00219 tok = kxTokNew(kxtEnd, "end", 3, spaceBefore);
00220 slAddHead(&tokList, tok);
00221 slReverse(&tokList);
00222 return tokList;
00223 }

Here is the call graph for this function:

Here is the caller graph for this function:

void kxTokIncludeQuotes ( boolean  val  ) 

Definition at line 234 of file kxTok.c.

References includeQuotes.

00236 {
00237 includeQuotes = val;
00238 }

static struct kxTok* kxTokNew ( enum kxTokType  type,
char *  string,
int  stringSize,
boolean  spaceBefore 
) [static, read]

Definition at line 15 of file kxTok.c.

References needMem(), and tok.

Referenced by kxTokenizeFancy().

00018 {
00019 struct kxTok *tok;
00020 int totalSize = stringSize + sizeof(*tok);
00021 tok = needMem(totalSize);
00022 tok->type = type;
00023 tok->spaceBefore = spaceBefore;
00024 memcpy(tok->string, string, stringSize);
00025 return tok;
00026 }

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

boolean includeQuotes = FALSE

Definition at line 13 of file kxTok.c.

Referenced by kxTokenizeFancy(), and kxTokIncludeQuotes().

char const rcsid[] = "$Id: kxTok.c,v 1.10 2004/11/05 23:08:58 kent Exp $" [static]

Definition at line 11 of file kxTok.c.


Generated on Tue Dec 25 19:57:22 2007 for blat by  doxygen 1.5.2