1.1 --- a/parser.y Sat Dec 29 17:44:57 2001 +0000 1.2 +++ b/parser.y Sat Dec 29 17:45:43 2001 +0000 1.3 @@ -1,12 +1,15 @@ 1.4 %{ 1.5 -#include <stdio.h> 1.6 + #include <stdio.h> 1.7 + #include "type.h" 1.8 + #include "tiff2pdf.h" 1.9 %} 1.10 1.11 %union { 1.12 int integer; 1.13 double fp; 1.14 char *string; 1.15 - struct { double width, double height } size; 1.16 + struct { double width; double height; } size; 1.17 + struct { int first; int last; } range; 1.18 } 1.19 1.20 %token <integer> INTEGER 1.21 @@ -26,12 +29,13 @@ 1.22 %token PORTRAIT 1.23 %token LANDSCAPE 1.24 1.25 -%token FILE 1.26 +%token FILE_KEYWORD 1.27 %token IMAGE 1.28 %token IMAGES 1.29 %token ROTATE 1.30 %token CROP 1.31 %token SIZE 1.32 +%token RESOLUTION 1.33 %token INPUT 1.34 1.35 %token PAGE 1.36 @@ -39,10 +43,13 @@ 1.37 %token BOOKMARK 1.38 %token OUTPUT 1.39 1.40 -%type <integer> image_range 1.41 -%type <integer> image_ranges 1.42 -%type <integer> page_range 1.43 -%type <integer> page_ranges 1.44 +%type <range> range 1.45 +%type <range> image_ranges 1.46 +%type <range> page_ranges 1.47 + 1.48 +%type <fp> unit 1.49 + 1.50 + 1.51 1.52 %type <fp> length 1.53 1.54 @@ -57,17 +64,17 @@ 1.55 | output_statement ; 1.56 1.57 1.58 -image_range: 1.59 - INTEGER ELIPSIS INTEGER 1.60 - | INTEGER ; 1.61 +range: 1.62 + INTEGER ELIPSIS INTEGER { $$.first = $1; $$.last = $3; } 1.63 + | INTEGER { $$.first = $1; $$.last = $1; } ; 1.64 1.65 image_ranges: 1.66 - image_range 1.67 - | image_ranges ',' image_range ; 1.68 + range 1.69 + | image_ranges ',' range ; 1.70 1.71 1.72 file_clause: 1.73 - FILE STRING ';' ; 1.74 + FILE_KEYWORD STRING ';' ; 1.75 1.76 image_clause: 1.77 IMAGE INTEGER ';' 1.78 @@ -82,12 +89,12 @@ 1.79 ROTATE INTEGER ';' ; 1.80 1.81 unit: 1.82 - CM 1.83 - | INCH ; 1.84 + /* empty */ /* default to INCH */ { $$ = 25.4; } 1.85 + | CM { $$ = 1.0; } 1.86 + | INCH { $$ = 25.4; } ; 1.87 1.88 length: 1.89 - FLOAT 1.90 - | FLOAT unit ; 1.91 + FLOAT unit { $$ = $1 * $2; } ; 1.92 1.93 crop_clause: 1.94 CROP PAGE_SIZE ';' 1.95 @@ -104,8 +111,11 @@ 1.96 | SIZE PAGE_SIZE orientation ';' 1.97 | SIZE length ',' length ';' ; 1.98 1.99 +resolution_clause: 1.100 + RESOLUTION FLOAT unit ; 1.101 + 1.102 modifier_clause: 1.103 - rotate_clause | crop_clause | size_clause; 1.104 + rotate_clause | crop_clause | size_clause | resolution_clause; 1.105 1.106 modifier_clauses: 1.107 modifier_clause 1.108 @@ -141,13 +151,9 @@ 1.109 input_statement: 1.110 INPUT input_clauses ; 1.111 1.112 -page_range: 1.113 - INTEGER ELIPSIS INTEGER 1.114 - | INTEGER ; 1.115 - 1.116 page_ranges: 1.117 - page_range 1.118 - | page_ranges ',' page_range ; 1.119 + range 1.120 + | page_ranges ',' range ; 1.121 1.122 page_clause: 1.123 PAGE INTEGER ';'