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