diff options
Diffstat (limited to 'src/gutenprintui2/printrcl.l')
-rw-r--r-- | src/gutenprintui2/printrcl.l | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/src/gutenprintui2/printrcl.l b/src/gutenprintui2/printrcl.l new file mode 100644 index 0000000..018adf0 --- /dev/null +++ b/src/gutenprintui2/printrcl.l @@ -0,0 +1,115 @@ +/* -*-Mode: C-*- + * "$Id: printrcl.l,v 1.1 2004/09/17 18:38:14 rleigh Exp $" + * + * printrc parser + * + * Copyright 2003 Robert Krawitz <rlk@alum.mit.edu> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +%{ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <gutenprint/gutenprint-intl-internal.h> +#include <gutenprintui2/gutenprintui.h> +#include "gutenprintui-internal.h" +#include "printrc.h" + +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#define YY_NO_UNPUT + +int mylineno = 1; + +#define DBG(x) \ +do \ + { \ + if (getenv("STP_DEBUG_PRINTRC")) \ + fprintf(stderr, "'%s' => %s\n", yytext, #x); \ + } \ + while (0) + +static char * +q_strdup(const char *s) +{ + /* Strip the leading and trailing quote */ + if (strlen(s) <= 2) + return NULL; + else + return g_strndup(s + 1, strlen(s) - 2); +} + +%} + +%option noyywrap + +digit [0-9] +boolean (True)|(False) +integer [-+]?{digit}+ +float [-+]?{digit}+(\.{digit}+)?([eE][-+]?{digit}+)? +string ([\"][^\"\n]*[\"])|([\'][^\']*[\']) +ws [ \t]+ +printrc_hdr #PRINTRCv[234].*\n +word [a-zA-Z][a-zA-Z0-9_]* + +%% + +Current-Printer: DBG(CURRENT_PRINTER); return CURRENT_PRINTER; +Show-All-Paper-Sizes: DBG(SHOW_ALL_PAPER_SIZES); return SHOW_ALL_PAPER_SIZES; +Printer: DBG(PRINTER); return PRINTER; +Destination: DBG(DESTINATION); return DESTINATION; +Scaling: DBG(SCALING); return SCALING; +Orientation: DBG(ORIENTATION); return ORIENTATION; +Autosize-Roll-Paper: DBG(AUTOSIZE_ROLL_PAPER); return AUTOSIZE_ROLL_PAPER; +Unit: DBG(UNIT); return UNIT; +Driver: DBG(DRIVER); return DRIVER; +Left: DBG(LEFT); return LEFT; +Top: DBG(TOP); return TOP; +Custom_Page_Width: DBG(CUSTOM_PAGE_WIDTH); return CUSTOM_PAGE_WIDTH; +Custom_Page_Height: DBG(CUSTOM_PAGE_HEIGHT); return CUSTOM_PAGE_HEIGHT; +Output_Type: DBG(OUTPUT_TYPE); return OUTPUT_TYPE; +Parameter DBG(PARAMETER); return PARAMETER; +Queue-Name: DBG(QUEUE_NAME); return QUEUE_NAME; +Output-Filename: DBG(OUTPUT_FILENAME); return OUTPUT_FILENAME; +Extra-Printer-Options: DBG(EXTRA_PRINTER_OPTIONS); return EXTRA_PRINTER_OPTIONS; +Custom-Command: DBG(CUSTOM_COMMAND); return CUSTOM_COMMAND; +Command-Type: DBG(COMMAND_TYPE); return COMMAND_TYPE; +Global-Settings: DBG(GLOBAL_SETTINGS); return GLOBAL_SETTINGS; +End-Global-Settings: DBG(END_GLOBAL_SETTINGS); return END_GLOBAL_SETTINGS; +Global: DBG(GLOBAL); return GLOBAL; + +Int DBG(pINT); return pINT; +String DBG(pSTRING_LIST); return pSTRING_LIST; +File DBG(pFILE); return pFILE; +Double DBG(pDOUBLE); return pDOUBLE; +Dimension DBG(pDIMENSION); return pDIMENSION; +Boolean DBG(pBOOLEAN); return pBOOLEAN; +Curve DBG(pCURVE); return pCURVE; + +{integer} yylval.ival = atoi(yytext); DBG(tINT); return tINT; +{float} yylval.dval = strtod(yytext, NULL); DBG(tDOUBLE); return tDOUBLE; +{string} yylval.sval = q_strdup(yytext); DBG(tSTRING); return tSTRING; +{boolean} yylval.sval = g_strdup(yytext); DBG(tBOOLEAN); return tBOOLEAN; +{word} yylval.sval = g_strdup(yytext); DBG(tWORD); return tWORD; +{printrc_hdr} DBG(PRINTRC_HDR); return PRINTRC_HDR; +{ws} DBG(whitespace1); /* Skip blanks/tabs */ +#[^\n]* DBG(comment1); /* Skip comments */ +\n DBG(newline); mylineno++; |