X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=src%2Fparser.lex;h=d5d81d6428cb35ecae1a865766b6af9e4be7cae2;hp=7da8d5edd12be03dcc0cf4ad8d4d3287fdfcc932;hb=26af26a251a58f33b295a0ae36ebd27ec167dc88;hpb=a200d6291d25b7f287320292edfc61b34216b7f4 diff --git a/src/parser.lex b/src/parser.lex index 7da8d5e..d5d81d6 100644 --- a/src/parser.lex +++ b/src/parser.lex @@ -1,7 +1,9 @@ %{ #include -#include "q.h" +#include +#include +#include "../lib/q.h" #include "parser.h" //RVALUE {NUMBER}|{PERCENT}|{NAME}|\"{STRING}\"|{DIM} @@ -118,6 +120,8 @@ static void store(enum type_t type, int line, int column, char*text, int length) #define MAX_INCLUDE_DEPTH 16 YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; +int line_stack[MAX_INCLUDE_DEPTH]; +int column_stack[MAX_INCLUDE_DEPTH]; int include_stack_ptr = 0; void handleInclude(char*text, int len) @@ -137,7 +141,10 @@ void handleInclude(char*text, int len) fprintf( stderr, "Includes nested too deeply" ); exit( 1 ); } - include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER; + include_stack[include_stack_ptr] = YY_CURRENT_BUFFER; + line_stack[include_stack_ptr] = line; + column_stack[include_stack_ptr] = column; + include_stack_ptr++; yyin = fopen(text, "rb"); if (!yyin) { fprintf(stderr, "Couldn't open %s\n", text); @@ -156,8 +163,8 @@ void handleInclude(char*text, int len) %x BINARY NAME [a-zA-Z_./](-*[a-zA-Z0-9_./])* -TWIP ([0-9]+(\.([0-9]([05])?)?)?) -NUMBER [0-9]+(\.[0-9]*)? +TWIP (-?[0-9]+(\.([0-9]([05])?)?)?) +NUMBER -?[0-9]+(\.[0-9]*)? PERCENT {NUMBER}% STRING (\\.|[^\\"\n])* S [ \n\r\t] @@ -208,6 +215,8 @@ RVALUE \"{STRING}\"|([^ \n\r\t]+) yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( include_stack[include_stack_ptr] ); + column = column_stack[include_stack_ptr]; + line = line_stack[include_stack_ptr]; } }