You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.6 KiB
142 lines
4.6 KiB
%{
|
|
/*
|
|
* This file is part of the KDE libraries
|
|
* Copyright (c) 2001-2003 Michael Goffioul <kdeprint@swing.be>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License version 2 as published by the Free Software Foundation.
|
|
*
|
|
* This library 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
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public License
|
|
* along with this library; see the file COPYING.LIB. If not, write to
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
**/
|
|
|
|
#include <qstringlist.h>
|
|
#include <qiodevice.h>
|
|
#define YYSTYPE QStringList
|
|
#include "ppdparser.cpp.h"
|
|
|
|
#define yylval kdeprint_ppdlval
|
|
|
|
QIODevice *kdeprint_ppdscanner_device = NULL;
|
|
#define YY_INPUT(buf,result,max_size) \
|
|
{ \
|
|
if (kdeprint_ppdscanner_device) \
|
|
{ \
|
|
result = kdeprint_ppdscanner_device->readBlock(buf,max_size); \
|
|
if (result < 0) \
|
|
result = 0; \
|
|
} \
|
|
else \
|
|
result = 0; \
|
|
}
|
|
int kdeprint_ppdscanner_lno = 0;
|
|
|
|
#if 0
|
|
#define QDEBUG0(s) qDebug(s)
|
|
#define QDEBUG1(s,a) qDebug(s,a)
|
|
#else
|
|
#define QDEBUG0(s)
|
|
#define QDEBUG1(s,a)
|
|
#endif
|
|
%}
|
|
|
|
%x option value translation_1 translation_2 constr
|
|
%option noyywrap
|
|
|
|
WORD [^:/\x00-\x20\x7F-\xFF]+
|
|
WORD2 [^:/\x00-\x20\x7F-\xFF\*]+
|
|
WORD3 [^:/\x00-\x20\x7F-\xFF][^:/\x00-\x1F\x7F-\xFF]*
|
|
L [[:alnum:]]
|
|
|
|
%%
|
|
|
|
/**
|
|
* Initial state
|
|
*/
|
|
\*"JCLOpenUI" |
|
|
\*"OpenUI"{L}* { QDEBUG0("Open UI"); BEGIN(option); return OPENUI; }
|
|
\*"JCLCloseUI" |
|
|
\*"CloseUI"{L}* { QDEBUG0("Close UI"); BEGIN(value); return CLOSEUI; }
|
|
\*"OpenGroup" { QDEBUG0("Open group"); BEGIN(option); return OPENGROUP; }
|
|
\*"CloseGroup" { QDEBUG0("Close group"); BEGIN(option); return CLOSEGROUP; }
|
|
\*"Default"\*{WORD} { yylval = yytext+9; BEGIN(option); return DEFAULT; }
|
|
\*"Default"{WORD} { yylval = yytext+8; BEGIN(option); return DEFAULT; }
|
|
\*"UIConstraints" |
|
|
\*"NonUIConstraints" { BEGIN(constr); return CONSTRAINT; }
|
|
\*"PaperDimension" { BEGIN(option); return PAPERDIM; }
|
|
\*"ImageableArea" { BEGIN(option); return IMGAREA; }
|
|
\*"End" { /* eat up */ }
|
|
|
|
"*% COMDATA #".*$ { yylval = yytext+12; return FOODATA; }
|
|
\*%.* { QDEBUG0("Comment"); return COMMENT; }
|
|
\*{WORD} { yylval = yytext+1; QDEBUG1("Main keyword: %s",yytext+1); BEGIN(option); return KEYWORD; }
|
|
|
|
/**
|
|
* Option state
|
|
*/
|
|
<option>{WORD3} { yylval = yytext; QDEBUG1("Option: %s",yytext); return OPTION; }
|
|
<option>":" { BEGIN(value); return ':'; }
|
|
<option>"\n" { kdeprint_ppdscanner_lno++; BEGIN(INITIAL); }
|
|
<option>"/" { BEGIN(translation_1); return '/'; }
|
|
|
|
/**
|
|
* Translation state (1: without colon)
|
|
*/
|
|
<translation_1>[^\n:]* { yylval = yytext; QDEBUG1("Translation: %s",yytext); return TRANSLATION; }
|
|
<translation_1>":" { BEGIN(value); return ':'; }
|
|
<translation_1>"\n" { kdeprint_ppdscanner_lno++; BEGIN(INITIAL); }
|
|
|
|
/**
|
|
* Value state
|
|
*/
|
|
<value>\"[^\"]*\" { yylval = yytext; kdeprint_ppdscanner_lno += yylval[0].tqcontains('\n'); QDEBUG1("Quoted value: %s",yytext); return QUOTED; }
|
|
<value>{WORD} { yylval = yytext; QDEBUG1("String part: %s",yytext); return STRINGPART; }
|
|
<value>"/" { BEGIN(translation_2); return '/'; }
|
|
<value>"\n" { kdeprint_ppdscanner_lno++; BEGIN(INITIAL); }
|
|
<value>":" { /* stay in the same state */ return ':'; }
|
|
|
|
/**
|
|
* Translation state (2: with colon)
|
|
*/
|
|
<translation_2>[^\n]* { yylval = yytext; QDEBUG1("Translation: %s",yytext); return TRANSLATION; }
|
|
<translation_2>"\n" { kdeprint_ppdscanner_lno++; BEGIN(INITIAL); }
|
|
|
|
/**
|
|
* Constraint state
|
|
*/
|
|
<constr>":" { return ':'; }
|
|
<constr>\*{WORD2} { yylval = yytext+1; QDEBUG1("Constraint keyword: %s",yytext); return KEYWORD; }
|
|
<constr>{WORD2} { yylval = yytext; QDEBUG1("Constraint option: %s",yytext); return OPTION; }
|
|
<constr>"\n" { kdeprint_ppdscanner_lno++; BEGIN(INITIAL); }
|
|
|
|
"\n" { kdeprint_ppdscanner_lno++; /* eat up */ }
|
|
<*>. { /* eat up */ }
|
|
|
|
%%
|
|
|
|
void kdeprint_ppdscanner_init(QIODevice *d)
|
|
{
|
|
kdeprint_ppdscanner_device = d;
|
|
kdeprint_ppdscanner_lno = 1;
|
|
}
|
|
|
|
void kdeprint_ppdscanner_terminate( bool deleteIt )
|
|
{
|
|
if (deleteIt)
|
|
delete kdeprint_ppdscanner_device;
|
|
kdeprint_ppdscanner_device = NULL;
|
|
}
|
|
|
|
int kdeprint_ppdscanner_numberoflines()
|
|
{
|
|
return kdeprint_ppdscanner_lno;
|
|
}
|