1.1 diff -r 7288d2753c18 -r de78038d990f parser.y 1.2 --- a/parser.y Fri Dec 28 16:04:15 2001 +0000 1.3 +++ b/parser.y Sat Dec 29 10:19:49 2001 +0000 1.4 @@ -6,20 +6,29 @@ 1.5 int integer; 1.6 double fp; 1.7 char *string; 1.8 + struct { double width, double height } size; 1.9 } 1.10 1.11 %token <integer> INTEGER 1.12 %token <fp> FLOAT 1.13 %token <string> STRING 1.14 +%token <size> PAGE_SIZE 1.15 1.16 %token ELIPSIS 1.17 1.18 +%token CM 1.19 +%token INCH 1.20 + 1.21 %token EVEN 1.22 %token ODD 1.23 %token ALL 1.24 1.25 +%token PORTRAIT 1.26 +%token LANDSCAPE 1.27 + 1.28 %token FILE 1.29 %token IMAGE 1.30 +%token IMAGES 1.31 %token ROTATE 1.32 %token CROP 1.33 %token SIZE 1.34 @@ -30,48 +39,96 @@ 1.35 %token BOOKMARK 1.36 %token OUTPUT 1.37 1.38 -%type <integer> range 1.39 -%type <integer> ranges 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 + 1.45 +%type <fp> length 1.46 1.47 %% 1.48 1.49 -statements: statement | statements statement ; 1.50 +statements: 1.51 + statement 1.52 + | statements statement ; 1.53 1.54 -statement: input_statement | output_statement ; 1.55 +statement: 1.56 + input_statement 1.57 + | output_statement ; 1.58 1.59 1.60 -range: INTEGER ELIPSIS INTEGER 1.61 +image_range: 1.62 + INTEGER ELIPSIS INTEGER 1.63 | INTEGER ; 1.64 1.65 -ranges: range 1.66 - | ranges ',' range ; 1.67 +image_ranges: 1.68 + image_range 1.69 + | image_ranges ',' image_range ; 1.70 1.71 1.72 file_clause: 1.73 FILE STRING ';' ; 1.74 1.75 image_clause: 1.76 - IMAGE ranges ';' ; 1.77 + IMAGE INTEGER ';' 1.78 + | IMAGE INTEGER modifier_clause_list ';' ; 1.79 + 1.80 +images_clause: 1.81 + IMAGES image_ranges ';' 1.82 + | IMAGES image_ranges modifier_clause_list ';' 1.83 + | IMAGES image_ranges part_clauses ';' ; 1.84 1.85 rotate_clause: 1.86 ROTATE INTEGER ';' ; 1.87 1.88 +unit: 1.89 + CM 1.90 + | INCH ; 1.91 + 1.92 +length: 1.93 + FLOAT 1.94 + | FLOAT unit ; 1.95 + 1.96 crop_clause: 1.97 - CROP FLOAT ',' FLOAT ';' ; 1.98 + CROP PAGE_SIZE ';' 1.99 + | CROP PAGE_SIZE orientation ';' 1.100 + | CROP length ',' length ';' 1.101 + | CROP length ',' length ',' length ',' length ';' ; 1.102 + 1.103 +orientation: 1.104 + PORTRAIT 1.105 + | LANDSCAPE ; 1.106 1.107 size_clause: 1.108 - SIZE FLOAT ',' FLOAT ';' ; 1.109 + SIZE PAGE_SIZE ';' 1.110 + | SIZE PAGE_SIZE orientation ';' 1.111 + | SIZE length ',' length ';' ; 1.112 + 1.113 +modifier_clause: 1.114 + rotate_clause | crop_clause | size_clause; 1.115 + 1.116 +modifier_clauses: 1.117 + modifier_clause 1.118 + | modifier_clauses modifier_clause; 1.119 + 1.120 +modifier_clause_list: 1.121 + '{' modifier_clauses '}' ; 1.122 1.123 part: 1.124 EVEN | ODD | ALL ; 1.125 1.126 part_clause: 1.127 - part input_clause ; 1.128 + part modifier_clause_list; 1.129 + 1.130 +part_clauses: 1.131 + part_clause 1.132 + | part_clauses part_clause; 1.133 1.134 input_clause: 1.135 - part_clause 1.136 - | file_clause | image_clause | rotate_clause 1.137 - | crop_clause | size_clause 1.138 + file_clause 1.139 + | image_clause 1.140 + | images_clause 1.141 + | modifier_clause 1.142 | input_clause_list ; 1.143 1.144 input_clauses: 1.145 @@ -84,13 +141,21 @@ 1.146 input_statement: 1.147 INPUT input_clauses ; 1.148 1.149 +page_range: 1.150 + INTEGER ELIPSIS INTEGER 1.151 + | INTEGER ; 1.152 + 1.153 +page_ranges: 1.154 + page_range 1.155 + | page_ranges ',' page_range ; 1.156 + 1.157 page_clause: 1.158 PAGE INTEGER ';' 1.159 - | PAGE INTEGER ',' STRING ';' ; 1.160 + | PAGE STRING ',' INTEGER ';' ; 1.161 1.162 pages_clause: 1.163 - PAGES ranges ';' 1.164 - | PAGES ranges ',' STRING ';' ; 1.165 + PAGES page_ranges ';' 1.166 + | PAGES STRING ',' page_ranges ';' ; 1.167 1.168 bookmark_clause: 1.169 BOOKMARK INTEGER ',' STRING ';'