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.
441 lines
13 KiB
441 lines
13 KiB
/* This file is part of the KDE project
|
|
Copyright (C) 2002, Dirk Schönberger <dirk.schoenberger@sz-online.de>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
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.
|
|
*/
|
|
|
|
#ifndef AIPARSERBASE_H
|
|
#define AIPARSERBASE_H
|
|
|
|
#include "ailexer.h"
|
|
|
|
#include <tqstring.h>
|
|
#include <tqvaluestack.h>
|
|
#include <tqvaluevector.h>
|
|
#include <tqvaluelist.h>
|
|
|
|
#include "aielement.h"
|
|
#include "aicolor.h"
|
|
|
|
|
|
const void arraytoa (const TQValueVector<AIElement> &data);
|
|
const void elementtoa (const AIElement &data);
|
|
const void stacktoa (const TQValueStack<AIElement> &data);
|
|
const void stacktoa2 (const TQValueStack<TQValueVector<AIElement> >&data);
|
|
|
|
class GStateHandlerBase;
|
|
class StructureHandlerBase;
|
|
class PathHandlerBase;
|
|
class MiscGStateHandlerBase;
|
|
class DocumentHandlerBase;
|
|
class ModuleHandlerBase;
|
|
class EmbeddedHandlerBase;
|
|
class TextHandlerBase;
|
|
class AI88Handler;
|
|
class AI3Handler;
|
|
|
|
/**
|
|
*@author Dirk Schönberger
|
|
*/
|
|
|
|
typedef enum { PET_MoveTo, PET_LineTo, PET_CurveTo, PET_CurveToOmitC1, PET_CurveToOmitC2 } PathElementType;
|
|
typedef enum { PT_Smooth, PT_Corner } PointType;
|
|
typedef enum { TO_FillStroke, TO_Fill, TO_Append, TO_Ignore, TO_Stroke } TextOperation;
|
|
typedef enum { FM_NonZero=0, FM_EvenOdd=1 } FillMode;
|
|
typedef enum { FS_Roman, FS_Kanji } FontScript;
|
|
|
|
typedef enum { DS_Array, DS_Block, DS_Other } DataSink;
|
|
typedef enum { ST_Setup, ST_Prolog, ST_ProcSet, ST_Encoding, ST_Pattern, ST_Document, ST_BrushPattern, ST_Gradient, ST_Palette, ST_Resource } SectionType;
|
|
|
|
typedef enum { TA_HLeft, TA_HCenter, TA_HRight, TA_VTop, TA_VCenter, TA_VBottom } TextAlign;
|
|
|
|
#define PC_Cyan 0x0001
|
|
#define PC_Magenta 0x0002
|
|
#define PC_Yellow 0x0004
|
|
#define PC_Black 0x0008
|
|
|
|
typedef enum {
|
|
/* AI 88 */
|
|
AIO_SetFillColorCMYK, AIO_SetStrokeColorCMYK,
|
|
AIO_SetFillColorGray, AIO_SetStrokeColorGray,
|
|
AIO_SetFillColorCustom, AIO_SetStrokeColorCustom,
|
|
AIO_SetFillPattern, AIO_SetStrokePattern,
|
|
AIO_SetFillOverprinting, AIO_SetStrokeOverprinting,
|
|
AIO_SetFlatness, AIO_SetLineCap, AIO_SetLineJoin,
|
|
AIO_SetLineWidth, AIO_SetMiterLimit, AIO_SetDash,
|
|
AIO_BeginGroupClip, AIO_EndGroupClip,
|
|
AIO_MoveTo,
|
|
AIO_LineToCorner,
|
|
AIO_LineToSmooth,
|
|
AIO_CurveToSmooth,
|
|
AIO_CurveToCorner,
|
|
AIO_CurveToOmitC1Smooth,
|
|
AIO_CurveToOmitC1Corner,
|
|
AIO_CurveToOmitC2Smooth,
|
|
AIO_CurveToOmitC2Corner,
|
|
|
|
AIO_PathIgnoreNoReset, AIO_PathIgnoreNoResetClose,
|
|
AIO_PathClipPath,
|
|
AIO_PathIgnoreReset, AIO_PathIgnoreResetClose,
|
|
AIO_PathFillNonZero, AIO_PathFillNonZeroClose,
|
|
AIO_PathStroke, AIO_PathStrokeClose,
|
|
AIO_PathFillNoReset, AIO_PathFillNoResetClose,
|
|
|
|
AIO_FontEncoding,
|
|
AIO_PatternDefinition,
|
|
|
|
AIO_SetCurrentText,
|
|
AIO_TextBlockFillStroke,
|
|
AIO_TextBlockFill,
|
|
AIO_TextBlockAppend,
|
|
AIO_TextBlockIgnore,
|
|
AIO_TextBlockStroke,
|
|
AIO_TextOutput,
|
|
AIO_TextBlockEnd,
|
|
|
|
AIO_GsaveIncludeDocument,
|
|
AIO_Grestore,
|
|
|
|
AIO_LockElement,
|
|
|
|
/* AI 3 */
|
|
AIO_SetWindingOrder,
|
|
AIO_SetFillMode,
|
|
|
|
AIO_BeginGroupNoClip, AIO_EndGroupNoClip,
|
|
AIO_BeginCombination, AIO_EndCombination,
|
|
|
|
AIO_Other
|
|
} AIOperation;
|
|
|
|
typedef enum {
|
|
PSO_Get,
|
|
PSO_Exec,
|
|
PSO_Def,
|
|
PSO_String,
|
|
PSO_Bind,
|
|
PSO_Userdict,
|
|
PSO_Dict,
|
|
PSO_Dup,
|
|
PSO_Begin,
|
|
PSO_Put,
|
|
PSO_Other
|
|
} PSOperation;
|
|
|
|
typedef enum {
|
|
CU_BlackWhite,
|
|
CU_Color,
|
|
CU_Unknown
|
|
} ColorUsage;
|
|
|
|
typedef enum {
|
|
CO_BeginSetup, CO_EndSetup,
|
|
CO_BeginProlog, CO_EndProlog,
|
|
CO_BeginProcSet, CO_EndProcSet,
|
|
CO_BeginEncoding, CO_EndEncoding,
|
|
CO_BeginPattern, CO_EndPattern,
|
|
CO_IncludeFile,
|
|
CO_BeginDocument, CO_EndDocument,
|
|
|
|
CO_Trailer,
|
|
CO_BoundingBox,
|
|
CO_TemplateBox,
|
|
CO_Margin,
|
|
CO_Title,
|
|
CO_Creator,
|
|
CO_Other,
|
|
/**/ CO_For,
|
|
CO_CreationDate,
|
|
/**/ CO_DocumentFonts,
|
|
/**/ CO_DocumentFiles,
|
|
/**/ CO_ColorUsage,
|
|
/**/ CO_DocumentProcSets,
|
|
/**/ CO_DocumentSuppliedProcSets,
|
|
CO_DocumentProcessColors,
|
|
/**/ CO_DocumentCustomColors,
|
|
/**/ CO_CMYKCustomColor,
|
|
/**/ CO_TileBox,
|
|
CO_Continuation,
|
|
/**/ CO_Note,
|
|
|
|
// AI88 Win
|
|
/**/ CO_Template,
|
|
/**/ CO_PageOrigin,
|
|
/**/ CO_PrinterName,
|
|
/**/ CO_PrinterRect,
|
|
|
|
// AI8
|
|
CO_BeginBrushPattern, CO_EndBrushPattern,
|
|
CO_BeginGradient, CO_EndGradient,
|
|
CO_BeginPalette, CO_EndPalette,
|
|
|
|
// other
|
|
CO_BeginResource, CO_EndResource,
|
|
CO_IncludeFont,
|
|
CO_IncludeResource,
|
|
CO_DocumentNeededResources,
|
|
|
|
CO_Ignore
|
|
} CommentOperation;
|
|
|
|
typedef enum {
|
|
CM_DocumentFonts = 1,
|
|
CM_DocumentFiles = 2,
|
|
CM_DocumentCustomColors = 3,
|
|
CM_CMYKCustomColor = 4,
|
|
CM_DocumentNeededResources = 5,
|
|
CM_None = -1
|
|
} ContinuationMode;
|
|
|
|
typedef enum {
|
|
/**/ PDO_ColorDefinition,
|
|
/**/ PDO_TileDefinition
|
|
} PatternDefinitionOperation;
|
|
|
|
/**/
|
|
#define PatternTileFilledDefiniton "_"
|
|
#define TextSizeUnknown -1
|
|
|
|
/* typedef TQValueVector<AElement> ElementArray;
|
|
typedef TQValueStack<AIElement> ElementStack;
|
|
typedef TQValueStack<ElementArray> ElementArrayStack; */
|
|
|
|
typedef struct {
|
|
PathElementType petype;
|
|
union {
|
|
struct {
|
|
float x, y;
|
|
} pointdata;
|
|
struct {
|
|
float x1, y1, x2, y2, x3, y3;
|
|
} bezierdata;
|
|
} pevalue;
|
|
PointType pttype;
|
|
} PathElement;
|
|
|
|
class AIParserBase : protected AILexer {
|
|
friend class AI88Handler;
|
|
friend class AI3Handler;
|
|
|
|
protected:
|
|
bool m_debug;
|
|
private:
|
|
bool m_ignoring;
|
|
TQValueStack<AIElement> m_stack;
|
|
TQValueStack<TQValueVector<AIElement> > m_arrayStack;
|
|
TQValueStack<TQValueVector<AIElement> > m_blockStack;
|
|
DataSink m_sink;
|
|
TQValueList<TQString> m_modules;
|
|
ContinuationMode m_continuationMode;
|
|
|
|
const double getDoubleValue(void);
|
|
const int getIntValue(void);
|
|
const bool getBoolValue(void);
|
|
const TQString getStringValue(void);
|
|
const TQString& getReferenceValue(void);
|
|
const TQString getOperatorValue(void);
|
|
|
|
/*Ai88*/ // void _handleSetDash();
|
|
/*Ai88*/ // void _handleGsaveIncludeDocument();
|
|
/*Ai88*/ // void _handleSetStrokeColorCMYK();
|
|
/*Ai88*/ // void _handleSetFillColorCMYK();
|
|
/*Ai88*/ // void _handleSetStrokeColorGray();
|
|
/*Ai88*/ // void _handleSetFillColorGray();
|
|
/*Ai88*/ // void _handleSetStrokeColorCustom();
|
|
/*Ai88*/ // void _handleSetFillColorCustom();
|
|
/*Ai88*/ // void _handleSetFillPattern();
|
|
/*Ai88*/ // void _handleSetStrokePattern();
|
|
|
|
/*Ai88*/ // void _handlePatternDefinition();
|
|
/*Ai88*/ // void _handleFontEncoding();
|
|
|
|
void _handlePSGet();
|
|
void _handlePSExec();
|
|
void _handlePSDef();
|
|
void _handlePSString();
|
|
void _handlePSBind();
|
|
void _handlePSUserdict();
|
|
void _handlePSDict();
|
|
void _handlePSDup();
|
|
void _handlePSBegin();
|
|
void _handlePSPut();
|
|
|
|
void _handleDocumentFonts(const char *data);
|
|
void _handleDocumentFiles(const char *data);
|
|
void _handleDocumentCustomColors(const char *data);
|
|
void _handleCMYKCustomColor(const char *data);
|
|
void _handleDocumentProcessColors(const char *data);
|
|
void _handleDocumentNeededResources(const char *data);
|
|
void _handleIncludeResource(const char *data);
|
|
|
|
/*Ai88*/ // void _handleSetCurrentText();
|
|
/*Ai88*/ // void _handleTextBlock (TextOperation to);
|
|
/*Ai88*/ // void _handleTextOutput ();
|
|
|
|
void _handleCreationDate (const char *data);
|
|
|
|
AIOperation getAIOperation (const char *operand);
|
|
PSOperation getPSOperation (const char *operand);
|
|
CommentOperation getCommentOperation (const char *command);
|
|
|
|
bool handlePS (const char *operand);
|
|
|
|
const char *getValue (const char *input);
|
|
bool getRectangle (const char* input, int &llx, int &lly, int &urx, int &ury);
|
|
bool getPoint (const char* input, int &x, int &y);
|
|
protected:
|
|
void gotComment (const char *value);
|
|
void gotIntValue (int value);
|
|
void gotDoubleValue (double value);
|
|
void gotStringValue (const char *value);
|
|
void gotToken (const char *value);
|
|
void gotReference (const char *value);
|
|
void gotBlockStart ();
|
|
void gotBlockEnd ();
|
|
void gotArrayStart ();
|
|
void gotArrayEnd ();
|
|
void gotByte (uchar value);
|
|
void gotByteArray (const TQByteArray &data);
|
|
|
|
GStateHandlerBase *m_gstateHandler;
|
|
StructureHandlerBase *m_structureHandler;
|
|
PathHandlerBase *m_pathHandler;
|
|
MiscGStateHandlerBase *m_miscGStateHandler;
|
|
DocumentHandlerBase *m_documentHandler;
|
|
ModuleHandlerBase *m_moduleHandler;
|
|
EmbeddedHandlerBase *m_embeddedHandler;
|
|
TextHandlerBase *m_textHandler;
|
|
AI88Handler *m_ai88Handler;
|
|
AI3Handler *m_ai3Handler;
|
|
|
|
private:
|
|
void handleElement (AIElement &element);
|
|
void cleanupArrays();
|
|
public:
|
|
AIParserBase();
|
|
~AIParserBase();
|
|
|
|
bool parse (TQIODevice& fin);
|
|
};
|
|
|
|
const void aiotoa (AIOperation &data);
|
|
const void sttoa (SectionType &data, bool begin);
|
|
|
|
class GStateHandlerBase
|
|
{
|
|
public:
|
|
GStateHandlerBase() {}
|
|
virtual ~GStateHandlerBase() {}
|
|
|
|
virtual void gotFillColor (AIColor &) {}
|
|
virtual void gotStrokeColor (AIColor &) {}
|
|
virtual void gotFillPattern (const char *pname, double px, double py, double sx, double sy, double angle, double rf, double r, double k, double ka, const TQValueVector<AIElement>& transformData);
|
|
virtual void gotStrokePattern (const char *pname, double px, double py, double sx, double sy, double angle, double rf, double r, double k, double ka, const TQValueVector<AIElement>& transformData);
|
|
virtual void gotFlatness (double) {}
|
|
virtual void gotLineWidth (double) {}
|
|
virtual void gotLineCaps (int) {}
|
|
virtual void gotLineJoin (int) {}
|
|
virtual void gotMiterLimit (double) {}
|
|
virtual void gotWindingOrder (int) {}
|
|
virtual void gotDash (const TQValueVector<AIElement>& /*dashData*/, double /*phase*/) {}
|
|
};
|
|
|
|
class StructureHandlerBase {
|
|
public:
|
|
StructureHandlerBase() {}
|
|
virtual ~StructureHandlerBase() {}
|
|
|
|
virtual void gotBeginGroup (bool /*clipping*/) {}
|
|
virtual void gotEndGroup (bool /*clipping*/) {}
|
|
virtual void gotBeginCombination () {}
|
|
virtual void gotEndCombination () {}
|
|
};
|
|
|
|
class PathHandlerBase {
|
|
public:
|
|
PathHandlerBase() {}
|
|
virtual ~PathHandlerBase() {}
|
|
|
|
virtual void gotPathElement (PathElement &) {}
|
|
virtual void gotFillPath (bool /*closed*/, bool /*reset*/) {}
|
|
virtual void gotStrokePath (bool /*closed*/) {}
|
|
virtual void gotIgnorePath (bool /*closed*/, bool /*reset*/) {}
|
|
virtual void gotClipPath (bool /*closed*/) {}
|
|
virtual void gotFillMode (FillMode) {}
|
|
};
|
|
|
|
class MiscGStateHandlerBase {
|
|
public:
|
|
MiscGStateHandlerBase() {}
|
|
virtual ~MiscGStateHandlerBase() {}
|
|
|
|
virtual void gotLockNextObject (bool /*value*/) {}
|
|
virtual void gotFillOverprinting (bool /*value*/) {}
|
|
virtual void gotStrokeOverprinting (bool /*value*/) {}
|
|
};
|
|
|
|
class DocumentHandlerBase {
|
|
public:
|
|
DocumentHandlerBase() {}
|
|
virtual ~DocumentHandlerBase() {}
|
|
|
|
virtual void gotBoundingBox (int /*llx*/, int /*lly*/, int /*urx*/, int /*ury*/) {}
|
|
virtual void gotTemplateBox (int /*llx*/, int /*lly*/, int /*urx*/, int /*ury*/) {}
|
|
virtual void gotMargin (int /*llx*/, int /*lly*/, int /*urx*/, int /*ury*/) {}
|
|
virtual void gotPrinterRect (int /*llx*/, int /*lly*/, int /*urx*/, int /*ury*/) {}
|
|
virtual void gotPrinterName (const char *) {}
|
|
virtual void gotPageOrigin (int /*x*/, int /*y*/) {}
|
|
virtual void gotTemplate (const char *) {}
|
|
virtual void gotTitle (const char *) {}
|
|
virtual void gotCreator (const char *) {}
|
|
virtual void gotPatternDefinition (const char */*name*/, const TQValueVector<AIElement>& /*layerData*/, double /*llx*/, double /*lly*/, double /*urx*/, double /*ury*/) {}
|
|
virtual void gotCreationDate (const char */*val1*/,const char */*val2*/) {}
|
|
virtual void gotProcessColors (int /*colors*/) {}
|
|
};
|
|
|
|
class ModuleHandlerBase {
|
|
public:
|
|
ModuleHandlerBase() {}
|
|
virtual ~ModuleHandlerBase() {}
|
|
|
|
virtual void gotBeginSection (SectionType, const char *) {}
|
|
virtual void gotEndSection (SectionType, const char *) {}
|
|
};
|
|
|
|
class EmbeddedHandlerBase {
|
|
public:
|
|
EmbeddedHandlerBase() {}
|
|
virtual ~EmbeddedHandlerBase() {}
|
|
|
|
virtual void gotGsaveIncludeDocument (const TQValueVector<AIElement>& /*transData*/, int /*llx*/, int /*lly*/, int /*urx*/, int /*ury*/, const char*/*fileName*/) {}
|
|
virtual void gotGrestore () {}
|
|
};
|
|
|
|
class TextHandlerBase {
|
|
public:
|
|
TextHandlerBase() {}
|
|
virtual ~TextHandlerBase() {}
|
|
|
|
virtual void gotFontEncoding (const TQValueVector<AIElement>& encodingData, const char*oldFontName, const char*newFontName);
|
|
virtual void gotFontDefinition (const char*fontName, double size, double leading, double kerning, TextAlign align);
|
|
virtual void gotTextBlockBegin (const TQValueVector<AIElement>& transData, TextOperation mode);
|
|
virtual void gotTextOutput (const char*text, int length=-1);
|
|
virtual void gotTextBlockEnd ();
|
|
};
|
|
|
|
#endif
|
|
|