1 // Copyright (c) 1994, 1995 James Clark 2 // See the file COPYING for copying permission. 3 4 #ifndef ExtendEntityManager_INCLUDED 5 #define ExtendEntityManager_INCLUDED 1 6 7 #ifdef __GNUG__ 8 #pragma interface 9 #endif 10 11 #include "EntityManager.h" 12 #include "CharsetInfo.h" 13 #include "types.h" 14 #include "Boolean.h" 15 #include "StringC.h" 16 #include "types.h" 17 #include "Vector.h" 18 #include "Location.h" 19 #include "CodingSystemKit.h" 20 21 #ifdef SP_NAMESPACE 22 namespace SP_NAMESPACE { 23 #endif 24 25 class StorageManager; 26 class InputCodingSystem; 27 class Messenger; 28 29 struct SP_API StorageObjectSpec { 30 StorageObjectSpec(); 31 StorageManager *storageManager; 32 const char *codingSystemName; 33 const InputCodingSystem *codingSystem; 34 StringC specId; // specified id 35 StringC baseId; // id that specified id is relative to 36 enum Records { 37 find, 38 cr, 39 lf, 40 crlf, 41 asis 42 }; 43 Records records; 44 PackedBoolean notrack; 45 PackedBoolean zapEof; // zap a final Ctrl-Z 46 PackedBoolean search; 47 enum { 48 encoding, 49 bctf, 50 special 51 }; 52 char codingSystemType; 53 }; 54 55 56 struct SP_API ParsedSystemId : public Vector<StorageObjectSpec> { 57 ParsedSystemId(); 58 void unparse(const CharsetInfo &resultCharset, Boolean isNdata, StringC &result) const; 59 struct SP_API Map { 60 enum Type { 61 catalogDocument, 62 catalogPublic 63 }; 64 Type type; 65 StringC publicId; 66 }; 67 Vector<Map> maps; 68 }; 69 70 struct SP_API StorageObjectLocation { 71 const StorageObjectSpec *storageObjectSpec; 72 StringC actualStorageId; 73 unsigned long lineNumber; 74 unsigned long columnNumber; 75 unsigned long byteIndex; 76 unsigned long storageObjectOffset; 77 }; 78 79 class SP_API ExtendEntityManager : public EntityManager { 80 public: 81 class SP_API CatalogManager { 82 public: 83 virtual ~CatalogManager(); 84 virtual ConstPtr<EntityCatalog> 85 makeCatalog(StringC &systemId, 86 const CharsetInfo &docCharset, 87 ExtendEntityManager *, 88 Messenger &) const = 0; 89 virtual Boolean mapCatalog(ParsedSystemId &systemId, 90 ExtendEntityManager *em, 91 Messenger &mgr) const = 0; 92 }; 93 // Additional flags for open. 94 enum { mayNotExist = 0100, isNdata = 0200 }; 95 virtual void registerStorageManager(StorageManager *) = 0; 96 virtual void setCatalogManager(CatalogManager *) = 0; 97 virtual Boolean expandSystemId(const StringC &, 98 const Location &, 99 Boolean isNdata, 100 const CharsetInfo &, 101 const StringC *mapCatalogPublic, 102 Messenger &, 103 StringC &) = 0; 104 virtual Boolean mergeSystemIds(const Vector<StringC> &sysids, 105 Boolean mapCatalogDocument, 106 const CharsetInfo &, 107 Messenger &mgr, 108 StringC &) const = 0; 109 virtual Boolean parseSystemId(const StringC &str, 110 const CharsetInfo &docCharset, 111 Boolean isNdata, 112 const StorageObjectLocation *defLoc, 113 Messenger &mgr, 114 ParsedSystemId &parsedSysid) const = 0; 115 static const ParsedSystemId *externalInfoParsedSystemId(const ExternalInfo *); 116 static Boolean externalize(const ExternalInfo *, 117 Offset, 118 StorageObjectLocation &); 119 static ExtendEntityManager *make(StorageManager *, 120 const InputCodingSystem *, 121 const ConstPtr<InputCodingSystemKit> &, 122 Boolean internalCharsetIsDocCharset); 123 }; 124 125 #ifdef SP_NAMESPACE 126 } 127 #endif 128 129 #endif /* not ExtendEntityManager_INCLUDED */ 130