%{ /* ** READ ME FIRST! ** ** When this file is altered, it is necessary to do "make lexer". Due to ** problems detailed in #2310 the lexer is no longer automatically rebuilt ** when maplexer.l is altered. */ /* C declarations */ #include #include #include #include #include #include "mapserver.h" #include "maperror.h" #include "mapfile.h" #include "maptime.h" #include "mapsymbol.h" #include "mapparser.h" #include "mapprimitive.h" /* msyylineno is required for flex 2.5.4 and older, but is already defined by * flex 2.5.31 (bug 975). * Unfortunately there is no clean way to differenciate the two versions, * so we use the symbol YY_CURRENT_BUFFER_LVALUE to base our test since it * was not present in 2.5.4 and is present in 2.5.31. Hopefully that won't * put us in trouble with other versions. If that happens then we can * switch to using autoconf to detect the version. */ #ifndef YY_CURRENT_BUFFER_LVALUE int msyylineno = 1; #endif int msyysource=MS_STRING_TOKENS; double msyynumber; int msyystate=MS_TOKENIZE_DEFAULT; char *msyystring=NULL; char *msyybasepath=NULL; int msyyreturncomments = 0; #define MAX_INCLUDE_DEPTH 5 YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; int include_lineno[MAX_INCLUDE_DEPTH]; int include_stack_ptr = 0; char path[MS_MAXPATHLEN]; char *msyytext_esc=NULL; %} %s URL_VARIABLE %s URL_STRING %s EXPRESSION_STRING %s INCLUDE %s MSSTR %% int msyytext_esc_size=1024; /* don't need to be globals */ char *msyytext_esc_ptr=NULL; switch(msyystate) { case(MS_TOKENIZE_DEFAULT): break; case(MS_TOKENIZE_FILE): BEGIN(INITIAL); msyysource=MS_FILE_TOKENS; msyystate=MS_TOKENIZE_DEFAULT; msyystring=NULL; msyyreturncomments=0; include_stack_ptr=0; return(0); break; case(MS_TOKENIZE_STRING): BEGIN(INITIAL); msyy_delete_buffer(YY_CURRENT_BUFFER); msyy_scan_string(msyystring); msyysource=MS_STRING_TOKENS; msyystate=MS_TOKENIZE_DEFAULT; msyyin=NULL; msyyreturncomments=0; include_stack_ptr=0; return(0); break; case(MS_TOKENIZE_URL_VARIABLE): BEGIN(URL_VARIABLE); msyy_delete_buffer(YY_CURRENT_BUFFER); msyy_scan_string(msyystring); msyysource=MS_URL_TOKENS; msyystate=MS_TOKENIZE_DEFAULT; msyyreturncomments=0; (void) yyunput; /* just to avoid warning about it being unrefed */ break; case(MS_TOKENIZE_URL_STRING): BEGIN(URL_STRING); msyy_delete_buffer(YY_CURRENT_BUFFER); msyy_scan_string(msyystring); msyysource=MS_URL_TOKENS; msyystate=MS_TOKENIZE_DEFAULT; msyyin=NULL; msyyreturncomments=0; return(0); break; case(MS_TOKENIZE_EXPRESSION): BEGIN(EXPRESSION_STRING); msyy_delete_buffer(YY_CURRENT_BUFFER); msyy_scan_string(msyystring); msyystate=MS_TOKENIZE_DEFAULT; msyyreturncomments=0; break; case(99): BEGIN(INITIAL); /* may not need this one */ msyy_delete_buffer(YY_CURRENT_BUFFER); msyystate=MS_TOKENIZE_DEFAULT; msyystring=NULL; msyyreturncomments=0; return(0); break; default: break; } [ \t\r]+ ; #.* { if (msyyreturncomments) return(MS_COMMENT); } _|\. ; or|\|\| { return(MS_TOKEN_LOGICAL_OR); } and|&& { return(MS_TOKEN_LOGICAL_AND); } not|! { return(MS_TOKEN_LOGICAL_NOT); } eq|=|== { return(MS_TOKEN_COMPARISON_EQ); } ne|!= { return(MS_TOKEN_COMPARISON_NE); } gt|> { return(MS_TOKEN_COMPARISON_GT); } lt|< { return(MS_TOKEN_COMPARISON_LT); } ge|>= { return(MS_TOKEN_COMPARISON_GE); } le|<= { return(MS_TOKEN_COMPARISON_LE); } ~ { return(MS_TOKEN_COMPARISON_RE); } =\* { return(MS_TOKEN_COMPARISON_IEQ); } ~\* { return(MS_TOKEN_COMPARISON_IRE); } in { return(IN); } area { return(MS_TOKEN_FUNCTION_AREA); } length { return(MS_TOKEN_FUNCTION_LENGTH); } tostring { return(MS_TOKEN_FUNCTION_TOSTRING); } commify { return(MS_TOKEN_FUNCTION_COMMIFY); } round { return(MS_TOKEN_FUNCTION_ROUND); } buffer { return(MS_TOKEN_FUNCTION_BUFFER); } intersects { return(MS_TOKEN_COMPARISON_INTERSECTS); } disjoint { return(MS_TOKEN_COMPARISON_DISJOINT); } touches { return(MS_TOKEN_COMPARISON_TOUCHES); } overlaps { return(MS_TOKEN_COMPARISON_OVERLAPS); } crosses { return(MS_TOKEN_COMPARISON_CROSSES); } within { return(MS_TOKEN_COMPARISON_WITHIN); } contains { return(MS_TOKEN_COMPARISON_CONTAINS); } beyond { return(MS_TOKEN_COMPARISON_BEYOND); } dwithin { return(MS_TOKEN_COMPARISON_DWITHIN); } fromtext { return(MS_TOKEN_FUNCTION_FROMTEXT); } colorrange { return(COLORRANGE); } alphacolorrange { return(ALPHACOLORRANGE); } datarange { return(DATARANGE); } rangeitem { return(RANGEITEM); } align { return(ALIGN); } alphacolor { return(ALPHACOLOR); } angle { return(ANGLE); } antialias { return(ANTIALIAS); } backgroundcolor { return(BACKGROUNDCOLOR); } backgroundshadowcolor { return(BACKGROUNDSHADOWCOLOR); } backgroundshadowsize { return(BACKGROUNDSHADOWSIZE); } bandsitem { return(BANDSITEM); } bindvals { return(BINDVALS); } browseformat { return(BROWSEFORMAT); } buffer { return(BUFFER); } character { return(CHARACTER); } class { return(CLASS); } classitem { return(CLASSITEM); } classgroup { return(CLASSGROUP); } color { return(COLOR); } config { return(CONFIG); } connection { return(CONNECTION); } connectiontype { return(CONNECTIONTYPE); } data { return(DATA); } datapattern { return(DATAPATTERN); } debug { return(DEBUG); } driver { return(DRIVER); } dump { return(DUMP); } empty { return(EMPTY); } encoding { return(ENCODING); } end { return(END); } error { return(ERROR); } expression { return(EXPRESSION); } extent { return(EXTENT); } extension { return(EXTENSION); } feature { return(FEATURE); } filled { return(FILLED); } filter { return(FILTER); } filteritem { return(FILTERITEM); } footer { return(FOOTER); } font { return(FONT); } fontset { return(FONTSET); } force { return(FORCE); } formatoption { return(FORMATOPTION); } from { return(FROM); } gap { return(GAP); } geomtransform { return(GEOMTRANSFORM); } grid { return(GRID); } graticule { return(GRATICULE); } group { return(GROUP); } header { return(HEADER); } image { return(IMAGE); } imagecolor { return(IMAGECOLOR); } imagetype { return(IMAGETYPE); } imagequality { return(IMAGEQUALITY); } imagemode { return(IMAGEMODE); } imagepath { return(IMAGEPATH); } imageurl { return(IMAGEURL); } include { BEGIN(INCLUDE); } index { return(INDEX); } interlace { return(INTERLACE); } intervals { return(INTERVALS); } join { return(JOIN); } keyimage { return(KEYIMAGE); } keysize { return(KEYSIZE); } keyspacing { return(KEYSPACING); } label { return(LABEL); } labelcache { return(LABELCACHE); } labelformat { return(LABELFORMAT); } labelitem { return(LABELITEM); } labelmaxscale { return(LABELMAXSCALE); } labelmaxscaledenom { return(LABELMAXSCALEDENOM); } labelminscale { return(LABELMINSCALE); } labelminscaledenom { return(LABELMINSCALEDENOM); } labelrequires { return(LABELREQUIRES); } latlon { return(LATLON); } layer { return(LAYER); } legend { return(LEGEND); } legendformat { return(LEGENDFORMAT); } linecap { return(LINECAP); } linejoin { return(LINEJOIN); } linejoinmaxsize { return(LINEJOINMAXSIZE); } log { return(LOG); } map { return(MAP); } marker { return(MARKER); } markersize { return(MARKERSIZE); } maxarcs { return(MAXARCS); } maxboxsize { return(MAXBOXSIZE); } maxfeatures { return(MAXFEATURES); } maxinterval { return(MAXINTERVAL); } maxscale { return(MAXSCALE); } maxscaledenom { return(MAXSCALEDENOM); } maxgeowidth { return(MAXGEOWIDTH); } maxlength { return(MAXLENGTH); } maxsize { return(MAXSIZE); } maxsubdivide { return(MAXSUBDIVIDE); } maxtemplate { return(MAXTEMPLATE); } maxwidth { return(MAXWIDTH); } metadata { return(METADATA); } mimetype { return(MIMETYPE); } minarcs { return(MINARCS); } minboxsize { return(MINBOXSIZE); } mindistance { return(MINDISTANCE); } repeatdistance { return(REPEATDISTANCE); } minfeaturesize { return(MINFEATURESIZE); } mininterval { return(MININTERVAL); } minscale { return(MINSCALE); } minscaledenom { return(MINSCALEDENOM); } mingeowidth { return(MINGEOWIDTH); } minlength { return(MINLENGTH); } minsize { return(MINSIZE); } minsubdivide { return(MINSUBDIVIDE); } mintemplate { return(MINTEMPLATE); } minwidth { return(MINWIDTH); } name { return(NAME); } offset { return(OFFSET); } offsite { return(OFFSITE); } opacity { return(OPACITY); } outlinecolor { return(OUTLINECOLOR); } outlinewidth { return(OUTLINEWIDTH); } outputformat { return(OUTPUTFORMAT); } overlaybackgroundcolor { return(OVERLAYBACKGROUNDCOLOR); } overlaycolor { return(OVERLAYCOLOR); } overlaymaxsize { return(OVERLAYMAXSIZE); } overlayminsize { return(OVERLAYMINSIZE); } overlayoutlinecolor { return(OVERLAYOUTLINECOLOR); } overlaysize { return(OVERLAYSIZE); } overlaysymbol { return(OVERLAYSYMBOL); } partials { return(PARTIALS); } pattern { return(PATTERN); } points { return(POINTS); } items { return(ITEMS); } position { return(POSITION); } postlabelcache { return(POSTLABELCACHE); } priority { return(PRIORITY); } processing { return(PROCESSING); } projection { return(PROJECTION); } queryformat { return(QUERYFORMAT); } querymap { return(QUERYMAP); } reference { return(REFERENCE); } relativeto { return(RELATIVETO); } requires { return(REQUIRES); } resolution { return(RESOLUTION); } defresolution { return(DEFRESOLUTION); } scale { return(SCALE); } scaledenom { return(SCALEDENOM); } scalebar { return(SCALEBAR); } shadowcolor { return(SHADOWCOLOR); } shadowsize { return(SHADOWSIZE); } shapepath { return(SHAPEPATH); } size { return(SIZE); } sizeunits { return(SIZEUNITS); } status { return(STATUS); } style { return(STYLE); } styleitem { return(STYLEITEM); } symbol { return(SYMBOL); } symbolscale { return(SYMBOLSCALE); } symbolscaledenom { return(SYMBOLSCALEDENOM); } symbolset { return(SYMBOLSET); } table { return(TABLE); } template { return(TEMPLATE); } templatepattern { return(TEMPLATEPATTERN); } text { return(TEXT); } tileindex { return(TILEINDEX); } tileitem { return(TILEITEM); } title { return(TITLE); } to { return(TO); } tolerance { return(TOLERANCE); } toleranceunits { return(TOLERANCEUNITS); } transparency { return(TRANSPARENCY); } transparent { return(TRANSPARENT); } transform { return(TRANSFORM); } type { return(TYPE); } units { return(UNITS); } validation { return(VALIDATION); } web { return(WEB); } width { return(WIDTH); } wkt { return(WKT); } wrap { return(WRAP); } annotation { return(MS_LAYER_ANNOTATION); } auto { return(MS_AUTO); } auto2 { return(MS_AUTO2); } bevel { return(MS_CJC_BEVEL); } bitmap { return(MS_BITMAP); } butt { return(MS_CJC_BUTT); } cartoline { return(MS_SYMBOL_CARTOLINE); } cc { return(MS_CC); } center { return(MS_ALIGN_CENTER); } chart { return(MS_LAYER_CHART); } circle { return(MS_LAYER_CIRCLE); } cl { return(MS_CL); } cr { return(MS_CR); } csv { return(MS_DB_CSV); } mysql { return(MS_DB_MYSQL); } postgresql { return(MS_DB_POSTGRES); } default { return(MS_DEFAULT); } dd { return(MS_DD); } ellipse { return(MS_SYMBOL_ELLIPSE); } embed { return(MS_EMBED); } false { return(MS_FALSE); } feet { return(MS_FEET); } follow { return(MS_FOLLOW); } giant { return(MS_GIANT); } hatch { return(MS_SYMBOL_HATCH); } hilite { return(MS_HILITE); } inches { return(MS_INCHES); } kilometers { return(MS_KILOMETERS); } large { return(MS_LARGE); } lc { return(MS_LC); } left { return(MS_ALIGN_LEFT); } line { return(MS_LAYER_LINE); } ll { return(MS_LL); } lr { return(MS_LR); } medium { return(MS_MEDIUM); } meters { return(MS_METERS); } nauticalmiles { return(MS_NAUTICALMILES); } miles { return(MS_MILES); } miter { return(MS_CJC_MITER); } multiple { return(MS_MULTIPLE); } none { return(MS_CJC_NONE); } normal { return(MS_NORMAL); } off { return(MS_OFF); } ogr { return(MS_OGR); } on { return(MS_ON); } one-to-one { return(MS_JOIN_ONE_TO_ONE); } one-to-many { return(MS_JOIN_ONE_TO_MANY); } oraclespatial { return(MS_ORACLESPATIAL); } percentages { return(MS_PERCENTAGES); } pixmap { return(MS_SYMBOL_PIXMAP); } pixels { return(MS_PIXELS); } point { return(MS_LAYER_POINT); } polygon { return(MS_LAYER_POLYGON); } postgis { return(MS_POSTGIS); } mygis { return(MS_MYGIS); } plugin { return(MS_PLUGIN); } query { return(MS_LAYER_QUERY); } raster { return(MS_LAYER_RASTER); } right { return(MS_ALIGN_RIGHT); } round { return(MS_CJC_ROUND); } sde { return(MS_SDE); } selected { return(MS_SELECTED); } simple { return(MS_SYMBOL_SIMPLE); } single { return(MS_SINGLE); } small { return(MS_SMALL); } square { return(MS_CJC_SQUARE); } svg { return(MS_SYMBOL_SVG); } tiny { return(MS_TINY); } triangle { return(MS_CJC_TRIANGLE); } true { return(MS_TRUE); } truetype { return(MS_TRUETYPE); } uc { return(MS_UC); } ul { return(MS_UL); } ur { return(MS_UR); } vector { return(MS_SYMBOL_VECTOR); } wfs { return(MS_WFS); } wms { return(MS_WMS); } alpha { return(MS_GD_ALPHA); } \[[a-z/\.][a-z0-9/\.\-\=_ ]*\] { msyytext++; msyytext[strlen(msyytext)-1] = '\0'; return(MS_STRING); } \[[0-9]*\] { msyytext++; msyytext[strlen(msyytext)-1] = '\0'; msyynumber = atof(msyytext); return(MS_NUMBER); } \[.*\] { msyytext++; msyytext[strlen(msyytext)-1] = '\0'; return(MS_BINDING); } \[shape\] { /* attribute binding - shape (fixed value) */ return(MS_TOKEN_BINDING_SHAPE); } \[[^\]]*\] { /* attribute binding - numeric (no quotes) */ msyytext++; msyytext[strlen(msyytext)-1] = '\0'; return(MS_TOKEN_BINDING_DOUBLE); } \"\[[^\"]*\]\"|\'\[[^\']*\]\' { /* attribute binding - string (single or double quotes) */ msyytext+=2; msyytext[strlen(msyytext)-2] = '\0'; return(MS_TOKEN_BINDING_STRING); } -?[0-9]+|-?[0-9]+\.[0-9]*|-?\.[0-9]*|-?[0-9]+[eE][+-]?[0-9]+|-?[0-9]+\.[0-9]*[eE][+-]?[0-9]+|-?\.[0-9]*[eE][+-]?[0-9]+ { msyynumber = atof(msyytext); return(MS_NUMBER); } -?[0-9]+|-?[0-9]+\.[0-9]*|-?\.[0-9]*|-?[0-9]+[eE][+-]?[0-9]+|-?[0-9]+\.[0-9]*[eE][+-]?[0-9]+|-?\.[0-9]*[eE][+-]?[0-9]+ { msyynumber = atof(msyytext); return(MS_TOKEN_LITERAL_NUMBER); } \`[^\`]*\` { msyytext++; msyytext[strlen(msyytext)-1] = '\0'; return(MS_TOKEN_LITERAL_TIME); } \/[^\/]*\/i { msyytext++; msyytext[strlen(msyytext)-2] = '\0'; return(MS_IREGEX); } \/[^\/]*\/ { msyytext++; msyytext[strlen(msyytext)-1] = '\0'; return(MS_REGEX); } \(.*\) { msyytext++; msyytext[strlen(msyytext)-1] = '\0'; return(MS_EXPRESSION); } \"[^\"]*\"i|\'[^\']*\'i { msyytext++; msyytext[strlen(msyytext)-2] = '\0'; return(MS_ISTRING); } \"[^\"]*\"|\'[^\']*\' { msyytext++; msyytext[strlen(msyytext)-1] = '\0'; return(MS_STRING); } \"[^\"]*\"|\'[^\']*\' { msyytext++; msyytext[strlen(msyytext)-1] = '\0'; if(include_stack_ptr >= MAX_INCLUDE_DEPTH) { msSetError(MS_IOERR, "Includes nested to deeply.", "msyylex()"); return(-1); } include_stack[include_stack_ptr] = YY_CURRENT_BUFFER; /* save state */ include_lineno[include_stack_ptr] = msyylineno; include_stack_ptr++; msyyin = fopen(msBuildPath(path, msyybasepath, msyytext), "r"); if(!msyyin) { msSetError(MS_IOERR, "Error opening included file \"%s\".", "msyylex()", msyytext); return(-1); } msyy_switch_to_buffer( msyy_create_buffer(msyyin, YY_BUF_SIZE) ); msyylineno = 1; BEGIN(INITIAL); } \"|\' { /* Beginning of a new String, skip the quote and enter the MSSTR context */ int idx=0; msyytext_esc = (char*) malloc(sizeof(char) * msyytext_esc_size); msyytext++; for(idx=0; idx\\(.|\n) { /* Escape code: skip the slash and use the escaped char */ if(strlen(msyytext_esc) < (msyytext_esc_size-2)) *msyytext_esc_ptr++ = msyytext[1]; } \"|\' { /* this is the closing quote - we're done Umberto: it should be possible to use yy_pop_stack to allow for this string parsing routine to be used in more places, but I can't make it work */ BEGIN(EXPRESSION_STRING); *msyytext_esc_ptr = '\0'; /* msyylval.strval = strdup(msyytext_esc); */ /* free(msyytext_esc); */ msyytext++; return(MS_TOKEN_LITERAL_STRING); } [^\\\"\\\']+ { char *yptr = msyytext; int i=0; while ( *yptr ) { if(i == msyytext_esc_size) { msyytext_esc_size *= 2; msyytext_esc = (char *) realloc(msyytext_esc,sizeof(char *) * msyytext_esc_size); /* update the pointer */ msyytext_esc_ptr = msyytext_esc; msyytext_esc_ptr += (msyytext_esc_size/2); } *msyytext_esc_ptr = *yptr; msyytext_esc_ptr++; yptr++; ++i; } } [a-z/\.][a-z0-9/\._\-\=]* { return(MS_STRING); } \n { msyylineno++; } <> { if( --include_stack_ptr < 0 ) return(EOF); /* end of main file */ else { fclose(YY_CURRENT_BUFFER->yy_input_file); msyy_delete_buffer( YY_CURRENT_BUFFER ); msyy_switch_to_buffer(include_stack[include_stack_ptr]); msyylineno = include_lineno[include_stack_ptr]; } } [\r|\n|\0] { return(0); } . { return(0); } . { return(msyytext[0]); } %% /* ** Any extra C functions */ int msyywrap() /* override */ { return(1); } int msyyerror(char *s) { msSetError(MS_PARSEERR, s, "msyyparse()"); return(0); }