parser.y

changeset 11
30d18cf8bb67
parent 9
de78038d990f
child 12
c3e2c2344560
     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 ';'