| 3232 | } |
| 3233 | |
| 3234 | int msUpdateClassFromString(classObj *class, char *string, int url_string) |
| 3235 | { |
| 3236 | int k; |
| 3237 | if(!class || !string) return MS_FAILURE; |
| 3238 | |
| 3239 | msAcquireLock( TLOCK_PARSER ); |
| 3240 | |
| 3241 | if(url_string) |
| 3242 | msyystate = MS_TOKENIZE_URL_STRING; |
| 3243 | else |
| 3244 | msyystate = MS_TOKENIZE_STRING; |
| 3245 | msyystring = string; |
| 3246 | msyylex(); /* sets things up, but doesn't process any tokens */ |
| 3247 | |
| 3248 | msyylineno = 1; /* start at line 1 */ |
| 3249 | |
| 3250 | if(loadClass(class, class->layer) == -1) { |
| 3251 | msReleaseLock( TLOCK_PARSER ); |
| 3252 | return MS_FAILURE; /* parse error */; |
| 3253 | } |
| 3254 | msReleaseLock( TLOCK_PARSER ); |
| 3255 | |
| 3256 | msyylex_destroy(); |
| 3257 | |
| 3258 | /* step through styles and labels to resolve symbol names */ |
| 3259 | /* class styles */ |
| 3260 | for(k=0; k<class->numstyles; k++) { |
| 3261 | if(class->styles[k]->symbolname) { |
| 3262 | if((class->styles[k]->symbol = msGetSymbolIndex(&(class->layer->map->symbolset), class->styles[k]->symbolname, MS_TRUE)) == -1) { |
| 3263 | msSetError(MS_MISCERR, "Undefined symbol \"%s\" in class, style %d of layer %s.", "msUpdateClassFromString()", class->styles[k]->symbolname, k, class->layer->name); |
| 3264 | return MS_FAILURE; |
| 3265 | } |
| 3266 | } |
| 3267 | } |
| 3268 | |
| 3269 | /* label styles */ |
| 3270 | for(k=0; k<class->label.numstyles; k++) { |
| 3271 | if(class->label.styles[k]->symbolname) { |
| 3272 | if((class->label.styles[k]->symbol = msGetSymbolIndex(&(class->layer->map->symbolset), class->label.styles[k]->symbolname, MS_TRUE)) == -1) { |
| 3273 | msSetError(MS_MISCERR, "Undefined symbol \"%s\" in class, label style %d of layer %s.", |
| 3274 | "msUpdateClassFromString()", class->label.styles[k]->symbolname, k, class->layer->name); |
| 3275 | return MS_FAILURE; |
| 3276 | } |
| 3277 | } |
| 3278 | } |
| 3279 | |
| 3280 | return MS_SUCCESS; |
| 3281 | } |
| 3282 | |
| 3283 | static void writeClass(FILE *stream, int indent, classObj *class) |
| 3284 | { |
no test coverage detected