00001 // $Id: epsfiltr.h 1302 2006-06-12 21:02:01Z alex $ 00002 /* @@tag:xara-cn@@ DO NOT MODIFY THIS LINE 00003 ================================XARAHEADERSTART=========================== 00004 00005 Xara LX, a vector drawing and manipulation program. 00006 Copyright (C) 1993-2006 Xara Group Ltd. 00007 Copyright on certain contributions may be held in joint with their 00008 respective authors. See AUTHORS file for details. 00009 00010 LICENSE TO USE AND MODIFY SOFTWARE 00011 ---------------------------------- 00012 00013 This file is part of Xara LX. 00014 00015 Xara LX is free software; you can redistribute it and/or modify it 00016 under the terms of the GNU General Public License version 2 as published 00017 by the Free Software Foundation. 00018 00019 Xara LX and its component source files are distributed in the hope 00020 that it will be useful, but WITHOUT ANY WARRANTY; without even the 00021 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00022 See the GNU General Public License for more details. 00023 00024 You should have received a copy of the GNU General Public License along 00025 with Xara LX (see the file GPL in the root directory of the 00026 distribution); if not, write to the Free Software Foundation, Inc., 51 00027 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00028 00029 00030 ADDITIONAL RIGHTS 00031 ----------------- 00032 00033 Conditional upon your continuing compliance with the GNU General Public 00034 License described above, Xara Group Ltd grants to you certain additional 00035 rights. 00036 00037 The additional rights are to use, modify, and distribute the software 00038 together with the wxWidgets library, the wxXtra library, and the "CDraw" 00039 library and any other such library that any version of Xara LX relased 00040 by Xara Group Ltd requires in order to compile and execute, including 00041 the static linking of that library to XaraLX. In the case of the 00042 "CDraw" library, you may satisfy obligation under the GNU General Public 00043 License to provide source code by providing a binary copy of the library 00044 concerned and a copy of the license accompanying it. 00045 00046 Nothing in this section restricts any of the rights you have under 00047 the GNU General Public License. 00048 00049 00050 SCOPE OF LICENSE 00051 ---------------- 00052 00053 This license applies to this program (XaraLX) and its constituent source 00054 files only, and does not necessarily apply to other Xara products which may 00055 in part share the same code base, and are subject to their own licensing 00056 terms. 00057 00058 This license does not apply to files in the wxXtra directory, which 00059 are built into a separate library, and are subject to the wxWindows 00060 license contained within that directory in the file "WXXTRA-LICENSE". 00061 00062 This license does not apply to the binary libraries (if any) within 00063 the "libs" directory, which are subject to a separate license contained 00064 within that directory in the file "LIBS-LICENSE". 00065 00066 00067 ARRANGEMENTS FOR CONTRIBUTION OF MODIFICATIONS 00068 ---------------------------------------------- 00069 00070 Subject to the terms of the GNU Public License (see above), you are 00071 free to do whatever you like with your modifications. However, you may 00072 (at your option) wish contribute them to Xara's source tree. You can 00073 find details of how to do this at: 00074 http://www.xaraxtreme.org/developers/ 00075 00076 Prior to contributing your modifications, you will need to complete our 00077 contributor agreement. This can be found at: 00078 http://www.xaraxtreme.org/developers/contribute/ 00079 00080 Please note that Xara will not accept modifications which modify any of 00081 the text between the start and end of this header (marked 00082 XARAHEADERSTART and XARAHEADEREND). 00083 00084 00085 MARKS 00086 ----- 00087 00088 Xara, Xara LX, Xara X, Xara X/Xtreme, Xara Xtreme, the Xtreme and Xara 00089 designs are registered or unregistered trademarks, design-marks, and/or 00090 service marks of Xara Group Ltd. All rights in these marks are reserved. 00091 00092 00093 Xara Group Ltd, Gaddesden Place, Hemel Hempstead, HP2 6EX, UK. 00094 http://www.xara.com/ 00095 00096 =================================XARAHEADEREND============================ 00097 */ 00098 // 00099 // $Log $ 00100 00101 #ifndef INC_EPSFILTR 00102 #define INC_EPSFILTR 00103 00104 #include "ccfile.h" 00105 #include "fixst256.h" 00106 #include "epsstack.h" 00107 #include "filters.h" 00108 #include "docrect.h" 00109 #include "listitem.h" 00110 #include "txtattr.h" 00111 //#include "fontbase.h" 00112 #include "epsclist.h" 00113 00114 class PathName; 00115 class Document; 00116 class Node; 00117 class NodePath; 00118 class Layer; 00119 class AttrLineWidth; 00120 class AttrStrokeColour; 00121 class AttrFillColour; 00122 class OpEPSRead; 00123 class Page; 00124 class EPSRenderRegion; 00125 class EPSExportDC; 00126 class ColourListComponent; 00127 class SelOperation; 00128 class TransformBase; 00129 class NodeRenderableBounded; 00130 class NodeRegularShape; 00131 class NodeEllipse; 00132 class NodeRect; 00133 00134 00135 // Special string constant to get around problem with immediate colours caused when 00136 // we decided to use EPS as native file format. 00137 // 00138 // This is an arbitrary name chosen which assumes the user will never decide to 00139 // name a colour with this sequence of characters (reasonably safe assumption). 00140 #define ImmediateColourFudgeyBodgeName (_T("ciamcawahh42")) 00141 00142 // The factor to scale standard EPS coordinates by to convert them to Camelot 00143 // internal coordinates. 00144 const INT32 EPSScaleFactor = 1000; 00145 const UINT32 EPSC_Invalid = 0; 00146 00147 // EPSCommand enumerated type - all the commands used by Illustrator 3.0 EPS files. 00148 // See the Illustrator EPS spec. 00149 00150 enum 00151 { 00152 EPSC_showpage = 1, 00153 00154 // Graphics state operators 00155 EPSC_A, 00156 EPSC_d, 00157 EPSC_i, 00158 EPSC_D, 00159 EPSC_j, 00160 EPSC_J, 00161 EPSC_M, 00162 EPSC_w, 00163 00164 // Colour operators 00165 EPSC_g, 00166 EPSC_G, 00167 EPSC_k, 00168 EPSC_K, 00169 EPSC_x, 00170 EPSC_X, 00171 EPSC_p, 00172 EPSC_P, 00173 00174 // Overprint operators 00175 EPSC_O, 00176 EPSC_R, 00177 00178 // Group operators 00179 EPSC_u, 00180 EPSC_U, 00181 00182 // Path Construction operators 00183 EPSC_m, 00184 EPSC_l, 00185 EPSC_L, 00186 EPSC_c, 00187 EPSC_C, 00188 EPSC_v, 00189 EPSC_V, 00190 EPSC_y, 00191 EPSC_Y, 00192 00193 // Path Painting operators 00194 EPSC_N, 00195 EPSC_n, 00196 EPSC_F, 00197 EPSC_f, 00198 EPSC_S, 00199 EPSC_s, 00200 EPSC_B, 00201 EPSC_b, 00202 EPSC__u, // Actually *u 00203 EPSC__U, // and *U 00204 00205 // Clipping operators 00206 EPSC_q, 00207 EPSC_Q, 00208 EPSC_H, 00209 EPSC_h, 00210 EPSC_W, 00211 00212 // Text operators 00213 EPSC_To, 00214 EPSC_TO, 00215 EPSC_Tp, 00216 EPSC_TP, 00217 00218 // Matrix operators 00219 EPSC_Tm, 00220 EPSC_Td, 00221 EPSC_T_, 00222 EPSC_TR, 00223 00224 // Text Attribute operators 00225 EPSC_Tr, 00226 EPSC_Tf, 00227 EPSC_Ta, 00228 EPSC_Tl, 00229 EPSC_Tt, 00230 EPSC_TW, 00231 EPSC_Tw, 00232 EPSC_TC, 00233 EPSC_Tc, 00234 EPSC_Ts, 00235 EPSC_Ti, 00236 EPSC_Tz, 00237 EPSC_TA, 00238 EPSC_Tq, 00239 00240 // Text Body operators 00241 EPSC_Tx, 00242 EPSC_Tj, 00243 EPSC_TX, 00244 EPSC_Tk, 00245 EPSC_TK, 00246 EPSC_Tplus, 00247 EPSC_Tminus, 00248 00249 // Special tokens 00250 EPSC_end, 00251 EPSC_ctx, 00252 EPSC_ctex, 00253 00254 EPSC_Name, 00255 EPSC_ArrayStart, 00256 EPSC_ArrayEnd, 00257 EPSC_Slash, 00258 EPSC_Integer, 00259 EPSC_Double, 00260 EPSC_FixedPoint, 00261 EPSC_String, 00262 EPSC_Comment, 00263 EPSC_EOL, 00264 EPSC_EOF 00265 }; 00266 00267 /******************************************************************************************** 00268 00269 > class CommandMap 00270 00271 Author: Tim_Browse (Xara Group Ltd) <camelotdev@xara.com> 00272 Created: 24/02/94 00273 Purpose: Provides a mapping from a token (i.e. an integer) to the string 00274 representation of that token. 00275 An array of these objects is used to map an EPS command string onto the 00276 enumerated type used for the token representation within Camelot. 00277 00278 ********************************************************************************************/ 00279 00280 class CommandMap 00281 { 00282 public: 00283 EPSCommand Cmd; 00284 TCHAR CmdStr[20]; 00285 }; 00286 00287 /******************************************************************************************** 00288 00289 > class RangeList : public List 00290 00291 Author: Tim_Browse (Xara Group Ltd) <camelotdev@xara.com> 00292 Created: 28/09/94 00293 Purpose: Holds a list of ranges. This is used to keep track when importing 00294 a file and preserving the layer information, and the import was initiated 00295 via drag and drop. When the import has finished, the bounding box of 00296 all the nodes on all the ranges is found, and then the all the nodes in 00297 all the ranges are centred on the drop point. 00298 SeeAlso: OpDroppedFiles 00299 00300 ********************************************************************************************/ 00301 00302 class RangeList : public List 00303 { 00304 CC_DECLARE_MEMDUMP(RangeList); 00305 00306 public: 00307 BOOL AddRange(Node *pFirst, Node *pLast); 00308 DocRect GetBoundingRect(); 00309 void Transform(TransformBase&); 00310 }; 00311 00312 00313 /******************************************************************************************** 00314 00315 > class EPSClipContextItem : public ListItem 00316 00317 Author: Tim_Browse (Xara Group Ltd) <camelotdev@xara.com> 00318 Created: 05/22/95 00319 Purpose: USed to implement a stack of clipping regions for importing AI EPS with. 00320 SeeAlso: EPSClipContext 00321 00322 ********************************************************************************************/ 00323 00324 class EPSClipContextItem : public ListItem 00325 { 00326 CC_DECLARE_MEMDUMP(EPSClipContextItem) 00327 00328 public: 00329 EPSClipContextItem(INT32 TheContextLevel, Path *pNewClipPath); 00330 ~EPSClipContextItem(); 00331 00332 public: 00333 INT32 ContextLevel; 00334 Path *pClipPath; 00335 INT32 ComplexRegionLevel; 00336 }; 00337 00338 00339 /******************************************************************************************** 00340 00341 > class EPSClipContext : public List 00342 00343 Author: Tim_Browse (Xara Group Ltd) <camelotdev@xara.com> 00344 Created: 05/22/95 00345 Purpose: Used to maintain clipping regions (masks) while importing Illustrator EPS. 00346 A stack of regions is maintained, similar to attribute rendering, with the 00347 usual save/restore semantics. 00348 Adding a new clipping region results in the new clipping region being 00349 merged with the current clipping region. In this way complex paths can 00350 be used to build up complex masks (this is the brain-damaged way AI EPS 00351 does it anyway). 00352 SeeAlso: EPSFilter 00353 00354 ********************************************************************************************/ 00355 00356 class EPSClipContext : public List 00357 { 00358 CC_DECLARE_MEMDUMP(EPSClipContext) 00359 00360 public: 00361 EPSClipContext(); 00362 void SaveContext(); 00363 BOOL RestoreContext(); 00364 BOOL AddNewClippingPath(Path *pNewClipPath); 00365 BOOL StartComplexClipRegion(); 00366 BOOL EndComplexClipRegion(); 00367 BOOL ClipPathToRegion(Path *pPathToClip); 00368 Path *GetClipRegion(); 00369 void SetClippingFlags(UINT32 NewFlags) {ClippingFlags = NewFlags;}; 00370 00371 protected: 00372 INT32 ContextLevel; 00373 INT32 ComplexRegionLevel; 00374 Path *pCachedClipPath; 00375 BOOL CacheIsValid; 00376 UINT32 ClippingFlags; 00377 }; 00378 00379 00380 /******************************************************************************************** 00381 00382 < EPSFilter::PathType 00383 00384 Comment: Used by the EPS filters - it indicates what to do with the next path that 00385 is found, i.e.whether to use it normally, throw it away, or do something 00386 special with it. The current values and their meanings are: 00387 00388 PATH_NORMAL - Store the path in the tree as a normal path. 00389 00390 PATH_DISCARD - Discard the path because it's not needed, e.g. a 00391 blend object would just be loaded as the start and 00392 end paths, and the 'blended' paths would be discarded. 00393 00394 PATH_DISCARD_STICKY - Like PATH_DISCARD, but stays in effect until a token 00395 is found which explicitly causes it to be changed 00396 back to PATH_NORMAL (or whatever). Usually after 00397 a path has been processed, the path type is set back 00398 to PATH_NORMAL - but this type is the exception. 00399 00400 PATH_RECT - Add the path as a rectangle object. 00401 00402 PATH_ELLIPSE - Add the path as an ellipse object. 00403 00404 PATH_MANGLED - Stores the path in the tree as a normal path but 00405 sets its mangled bit. 00406 00407 SeeAlso: EPSFilter 00408 00409 ********************************************************************************************/ 00410 00411 typedef struct 00412 { 00413 // TRUE if a complex path is being constructed 00414 //BOOL use an INT32 instead for clipping matters! 00415 INT32 ComplexPath; 00416 00417 // TRUE if we should stroke the complex path being constructed. 00418 BOOL StrokeComplexPath; 00419 00420 // TRUE if the path being constructed has not had any attributes added yet 00421 BOOL NoAttributes; 00422 00423 // TRUE if we've found an error in the EPS 00424 BOOL EPSErrorEncountered; 00425 00426 // TRUE if we're adding nodes to a layer created by the filter 00427 // FALSE if adding to a layer that was already in the document 00428 BOOL AddToNewLayer; 00429 00430 // TRUE if the last path was handled by an 'h' or 'H' operator, in which 00431 // case when we find a moveto we just delete the path and start a new one, 00432 // instead of complaining and flagging an EPS syntax error. We have to do this 00433 // because ArtWorks EPS uses 'H' or 'h' when it should use 'N' or 'n'. 00434 BOOL PathIsHidden; 00435 00436 } EPSFlagsDefn; 00437 00438 00439 00440 /******************************************************************************************** 00441 00442 > class EPSFilter : public VectorFilter 00443 00444 Author: Tim_Browse (Xara Group Ltd) <camelotdev@xara.com> 00445 Created: 13/10/93 00446 Purpose: Encapsulates a basic Adobe Illustrator EPS import/export filter. 00447 This filter can be used as a base class, because most EPS formats are 00448 based (more or less) on AI format. Derived filters can override whichever 00449 parts they want to implement other flavours of EPS. 00450 SeeAlso: EPSFilter::Init; EPSFilter::DoImport; EPSFilter::DoExport; Filter; 00451 ArtWorksEPSFilter; Corel3Filter; Corel4Filter 00452 00453 ********************************************************************************************/ 00454 00455 class EPSFilter : public VectorFilter 00456 { 00457 CC_DECLARE_DYNAMIC(EPSFilter); 00458 00459 public: 00460 EPSFilter(); 00461 virtual BOOL Init(); 00462 static BOOL InitPrefs(); 00463 INT32 HowCompatible(PathName& Filename, ADDR HeaderStart, UINT32 HeaderSize, UINT32 FileSize); 00464 BOOL IsDefaultDocRequired(const TCHAR* pcszPathName); 00465 BOOL DoImport(SelOperation *Op, CCLexFile*, Document *DestDoc, 00466 BOOL, ImportPosition *Pos = NULL, 00467 KernelBitmap** ppImportedBitmap = NULL, 00468 DocCoord* pPosTranslate = NULL, String_256* URL=NULL); 00469 BOOL DoExport(Operation*, CCLexFile*, PathName*, Document*, BOOL); 00470 00471 // Functions to deal with the binary header version of the file 00472 BOOL ExportBinaryHeader(CCLexFile*); 00473 BOOL CorrectBinaryHeader(CCLexFile*); 00474 00475 // Functions to allow the filter a chance to write stuff into the sections 00476 virtual BOOL WriteEPSProlog(); 00477 virtual BOOL WriteEPSSetup(); 00478 virtual BOOL WriteEPSComments(); 00479 virtual BOOL WriteScript(); 00480 00481 // Must it export the print componets? 00482 virtual BOOL NeedsPrintComponents ( void ); 00483 00484 TCHAR *GetEPSCommand(EPSCommand Cmd); 00485 00486 EPSExportDC *GetExportDC() { return ExportDCPtr; } 00487 EPSRenderRegion* GetExportRegion() { return ExportRegion; } 00488 00489 virtual INT32 ImportBinary(ADDR pData, INT32 Length); 00490 00491 virtual BOOL AddNewNode(Node *pNewNode); 00492 00493 00494 typedef enum 00495 { 00496 PATH_NORMAL, 00497 PATH_DISCARD, 00498 PATH_DISCARD_STICKY, 00499 PATH_RECT, 00500 PATH_ELLIPSE, 00501 PATH_MANGLED 00502 } PathType; 00503 00504 // Can be called by e.g. Doc components if they find a problem in their EPS comments. 00505 void HandleEPSError(); 00506 00507 INT32 DecodeHexString(ADDR pData, INT32 Length, INT32 nStart = 0); 00508 00509 // Allow people to change the import origin 00510 BOOL ResetImportOrigin(); 00511 BOOL ResetImportOrigin(DocCoord NewOrigin); 00512 00513 // Options for the export of XS EPS 00514 static INT32 XSEPSExportPSType; 00515 static INT32 XSEPSExportDPI; 00516 static BOOL XSEPSExportTextAsCurves; 00517 00518 protected: 00519 // 00520 // Import related functions 00521 // 00522 virtual BOOL PrepareToImport(); 00523 virtual void CleanUpAfterImport(BOOL Successful); 00524 00525 // Input manipulation/parsing routines 00526 void DecodeToken(); 00527 virtual void LookUpToken(); 00528 virtual BOOL ProcessToken(); 00529 00530 BOOL GetToken(); 00531 BOOL GetLineToken(); 00532 BOOL HandleToken(); 00533 BOOL ProcessEndOfPath ( void ); 00534 BOOL ProcessUnfilledPath ( void ); 00535 BOOL ProcessGroup(); 00536 virtual BOOL ProcessComment(BOOL BypassDocComponents = FALSE); 00537 BOOL ProcessRectangle(NodeRect* pRect, NodeRegularShape* pQuickShape); 00538 BOOL ProcessEllipse(NodeEllipse* pEllipse, NodeRegularShape* pQuickShape); 00539 virtual BOOL ProcessFilterComment(); 00540 void HandleNoMemory(); 00541 virtual BOOL AddAttributes(NodeRenderableBounded *pNode, BOOL Stroked, BOOL Filled); 00542 00543 virtual INT32 EPSHeaderIsOk(ADDR pFileHeader, UINT32 HeaderSize); 00544 00545 // Layer insertion functions. 00546 BOOL UseLayer ( String_256 &LayerName, 00547 BOOL GuideLayer = FALSE ); 00548 Layer* AddLayer ( String_256 &LayerName, 00549 BOOL GuideLayer ); 00550 00551 BOOL StartGroup(); 00552 BOOL EndGroup(BOOL Masked = FALSE); 00553 virtual BOOL ValidateGroup(Node *Group); 00554 virtual BOOL MaskedGroupEnding(); 00555 virtual void ProcessTextMatrix(Matrix* pMatrix); 00556 BOOL AttachAllNodes(); 00557 BOOL InsertNewNode(Node *pNewNode); 00558 00559 virtual BOOL Import_gsave(); 00560 virtual BOOL Import_grestore(); 00561 00562 // Export related functions 00563 virtual BOOL PrepareToExport(CCLexFile*, Spread *pSpread); 00564 virtual void CleanUpAfterExport(); 00565 virtual EPSExportDC* CreateExportDC(); 00566 void RemoveMessage(CCLexFile* pFile); 00567 00568 virtual BOOL GetExportOptions( ); 00569 00570 // EPS comment related functions 00571 virtual BOOL ProcessEPSComment(); 00572 virtual BOOL ProcessEPSTrailer(); 00573 virtual BOOL ProcessBoundingBox(); 00574 00575 void ProcessEPSProlog(); 00576 void ProcessEPSSetup(); 00577 00578 // Nice way of extracting and constructing colours for EPS files 00579 void GetEPSColour(DocColour *DestCol, 00580 PColourCMYK *pCMYK, 00581 TintType Tint, FIXEDPOINT TintVal, 00582 String_64 *ColName); 00583 void GetEPSColourRGB (DocColour *DestCol, 00584 INT32 red, INT32 green, INT32 blue, 00585 TintType Tint, FIXEDPOINT TintVal, 00586 String_64 *ColName); 00587 00588 // Used to get unique layer names when a clash occurs 00589 void MakeLayerNameUnique(String_256& LayerName, Spread *pSpread); 00590 00591 // Text pocessing 00592 BOOL ProcessText(); 00593 BOOL GetStoryMatrix(Matrix* pMatrix); 00594 BOOL SetStrokeColourNone(); 00595 BOOL SetFillColourNone(); 00596 BOOL MakeNewTextLine(Node * pParent); 00597 00598 // Somewhere to keep the info about where various file sections 00599 // Start and end 00600 FilePos EPSStart; 00601 FilePos EPSEnd; 00602 FilePos PreviewStart; 00603 FilePos PreviewEnd; 00604 00605 // Resource IDs of the strings that describe this filter. 00606 UINT32 FilterNameID; 00607 UINT32 FilterInfoID; 00608 00609 // The array of keyword names 00610 static CommandMap Commands[]; 00611 00612 // A list of all comments. 00613 EPSCommentList EPSComments; 00614 00615 // The file we are reading 00616 CCLexFile *EPSFile; 00617 00618 // Buffer to hold the current token 00619 const TCHAR *TokenBuf; 00620 00621 // How many characters we had read the last time we updated the progress display. 00622 INT32 LastProgressUpdate; 00623 00624 // Current token 00625 EPSCommand Token; 00626 00627 // Token values 00628 union 00629 { 00630 INT32 Long; 00631 FIXEDPOINT FixedPoint; 00632 double Double; 00633 TCHAR *String; 00634 TCHAR *Comment; 00635 } TokenData; 00636 00637 // The EPS stack - quite handy! 00638 EPSStack Stack; 00639 00640 // The pasteboard rectangle of the spread we're importing onto - used to see if 00641 // image is a rampantly incorrect position (it is adjusted if it is). 00642 DocRect SpreadRect; 00643 00644 // The path node being created (if any) 00645 NodePath *pPath; 00646 00647 // The layer that objects are placed on 00648 Layer *pLayer; 00649 00650 // The page that objects appear on 00651 Page *pPage; 00652 00653 // The Node to which new objects are attached (may be a Layer or a Group node) 00654 Node *pNode; 00655 00656 // the flags 00657 EPSFlagsDefn EPSFlags; 00658 00659 struct 00660 { 00661 // The operation that caused the import 00662 SelOperation *pOp; 00663 00664 // Where the file was dropped for drag'n'drop, or NULL if drag'n'drop was not used. 00665 ImportPosition *Pos; 00666 00667 // Where we should add the imported file 00668 Spread *pSpread; 00669 00670 } ImportInfo; 00671 00672 // What to do with the path when we have finished. 00673 PathType ThePathType; 00674 00675 // Used to export EPS files. 00676 EPSRenderRegion *ExportRegion; 00677 EPSExportDC *ExportDCPtr; // Graeme (23-0-00) - renamed to avoid namespace 00678 // conflicts. (It's original name was ExportDC.) 00679 00680 // Pointer to the document's colour component (only when importing). 00681 ColourListComponent *pColours; 00682 00683 // Bounding box for simple shapes 00684 DocCoord ShapeBBox[4]; 00685 00686 // Holds all nodes imported when importing with layers. 00687 static RangeList ImportRange; 00688 00689 // Used to remember the range as we build it 00690 Node *pFirstNodeInRange, 00691 *pLastNodeInRange; 00692 00693 // Indicates whether or not we should try to reposition the objects if they fall 00694 // off the spread boundaries (does not apply to drag'n'drop positioning checks). 00695 // (Defaults to TRUE in base class). 00696 BOOL AdjustOrigin; 00697 00698 // Indicates whether this EPS format supports layers at all 00699 BOOL SupportsLayers; 00700 00701 // Indicates whether we are using layers when importing 00702 BOOL UseLayers; 00703 00704 // Used to check for balanced groups and masked groups. 00705 INT32 GroupNesting; 00706 INT32 MaskedGroupNesting; 00707 00708 // Used to validate paths 00709 BOOL InvalidPathFound; 00710 00711 // Used to indicate where to store path data 00712 Path *pInkPath; 00713 00714 // Used for clipping regions 00715 EPSClipContext ClipRegion; 00716 00717 INT32 TextComment[3]; 00718 00719 // gsave/grestore stack 00720 List GraphicStateStack; 00721 00722 // Extra font flags block processing 00723 struct _FontFlags { 00724 BOOL Bold; 00725 BOOL Italic; 00726 } FontFlags; 00727 00728 // Describes types of fonts loaded from native files (eg truetype) 00729 FontClass ClassOfFont; 00730 00731 // A new tag token describing the mould threshold 00732 INT32 NewMouldThreshold; 00733 00734 // Are we in a group or not. For clipping region thingy. 00735 BOOL EPS_Group; 00736 00737 // The end of the EPS record in the file. 00738 FilePos EndOfEPS; 00739 }; 00740 00741 #endif