From c9d179a17e1583c0367b20c00ce74fdeae5f47d9 Mon Sep 17 00:00:00 2001 From: Eric Smith Date: Tue, 1 Jan 2002 03:46:08 +0000 Subject: [PATCH] change 'format' to 'label', add character type, track bookmark level. --- parser.y | 18 ++++++++++++------ scanner.l | 11 ++++++++--- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/parser.y b/parser.y index ec8d5bf..6902481 100644 --- a/parser.y +++ b/parser.y @@ -6,15 +6,18 @@ %union { int integer; + char character; double fp; char *string; page_size_t size; range_t range; + page_label_t page_label; } %token INTEGER %token FLOAT %token STRING +%token CHARACTER %token PAGE_SIZE %token ELIPSIS @@ -38,7 +41,7 @@ %token RESOLUTION %token INPUT -%token FORMAT +%token LABEL %token PAGE %token PAGES %token BOOKMARK @@ -151,8 +154,11 @@ input_statement: output_file_clause: FILE_KEYWORD STRING ';' { output_set_file ($2) } ; -format_clause: - FORMAT STRING ';' { output_set_page_number_format ($2) } ; +label_clause: + LABEL ';' { page_label_t label = { NULL, '\0' }; output_set_page_label (label); } + | LABEL STRING ';' { page_label_t label = { $2, '\0' }; output_set_page_label (label); } + | LABEL CHARACTER ';' { page_label_t label = { NULL, $2 }; output_set_page_label (label); } + | LABEL STRING ',' CHARACTER ';' { page_label_t label = { $2, $4 }; output_set_page_label (label); } ; page_ranges: range { output_pages ($1); } @@ -172,13 +178,13 @@ bookmark_name_list: | bookmark_name_list ',' bookmark_name ; bookmark_clause: - BOOKMARK { output_push_context (); } + BOOKMARK { output_push_context (); bookmark_level++; } bookmark_name_list - output_clause_list ';' { output_pop_context (); } ; + output_clause_list ';' { bookmark_level--; output_pop_context (); } ; output_clause: output_file_clause - | format_clause + | label_clause | page_clause | pages_clause | bookmark_clause | output_clause_list ; diff --git a/scanner.l b/scanner.l index c618ee7..7d75501 100644 --- a/scanner.l +++ b/scanner.l @@ -1,5 +1,5 @@ /* -$Id: scanner.l,v 1.11 2001/12/30 23:25:08 eric Exp $ +$Id: scanner.l,v 1.12 2001/12/31 19:46:08 eric Exp $ */ %option case-insensitive @@ -54,11 +54,11 @@ cm { return (CM); } crop { return (CROP); } even { return (EVEN); } file { return (FILE_KEYWORD); } -format { return (FORMAT); } image { return (IMAGE); } images { return (IMAGES); } inch { return (INCH); } input { return (INPUT); } +label { return (LABEL); } landscape { return (LANDSCAPE); } odd { return (ODD); } output { return (OUTPUT); } @@ -69,7 +69,12 @@ resolution { return (RESOLUTION) ; } rotate { return (ROTATE); } size { return (SIZE); } -\"[^\n"]*\" { +'[^\n']' { + yylval.character = yytext [1]; + return (CHARACTER); + } + +\"[^\n"]*\" { int len = strlen (yytext) - 2; yylval.string = malloc (len + 1); memcpy (yylval.string, yytext + 1, len);