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