1 /* $XConsortium: Dtd.h /main/1 1996/07/29 16:49:16 cde-hp $ */
2 // Copyright (c) 1994 James Clark
3 // See the file COPYING for copying permission.
11 #include "NamedTable.h"
12 #include "NamedResourceTable.h"
13 #include "ElementType.h"
16 #include "ShortReferenceMap.h"
19 #include "StringResource.h"
22 #include "HashTable.h"
25 namespace SP_NAMESPACE {
31 class SP_API Dtd : public Resource {
33 typedef NamedTableIter<ElementType> ElementTypeIter;
34 typedef ConstNamedTableIter<ElementType> ConstElementTypeIter;
35 typedef NamedTableIter<ShortReferenceMap> ShortReferenceMapIter;
36 typedef ConstNamedResourceTableIter<Notation> ConstNotationIter;
37 typedef NamedResourceTableIter<Notation> NotationIter;
38 typedef ConstNamedResourceTableIter<Entity> ConstEntityIter;
39 typedef NamedResourceTableIter<Entity> EntityIter;
40 Dtd(const StringC &name, Boolean isBase);
41 ConstPtr<Entity> lookupEntity(Boolean isParameter, const StringC &) const;
42 const Entity *lookupEntityTemp(Boolean isParameter, const StringC &) const;
43 Ptr<Entity> lookupEntity(Boolean isParameter, const StringC &);
44 Ptr<Entity> insertEntity(const Ptr<Entity> &, Boolean replace = 0);
45 Ptr<Entity> removeEntity(Boolean isParameter, const StringC &);
46 ConstEntityIter generalEntityIter() const;
47 EntityIter generalEntityIter();
48 ConstEntityIter parameterEntityIter() const;
49 EntityIter parameterEntityIter();
51 ConstPtr<Entity> defaultEntity() const;
52 const Entity *defaultEntityTemp() const;
53 void setDefaultEntity(const Ptr<Entity> &, ParserState &);
54 const ConstPtr<StringResource<Char> > &namePointer() const;
55 const StringC &name() const;
57 const ElementType *lookupElementType(const StringC &) const;
58 ElementType *lookupElementType(const StringC &);
59 ElementType *removeElementType(const StringC &);
60 ElementType *insertElementType(ElementType *);
61 size_t nElementTypeIndex() const;
62 ConstElementTypeIter elementTypeIter() const;
63 ElementTypeIter elementTypeIter();
65 const RankStem *lookupRankStem(const StringC &) const;
66 RankStem *lookupRankStem(const StringC &);
67 RankStem *insertRankStem(RankStem *);
68 size_t nRankStem() const;
70 const ShortReferenceMap *lookupShortReferenceMap(const StringC &) const;
71 ShortReferenceMap *lookupShortReferenceMap(const StringC &);
72 ShortReferenceMap *insertShortReferenceMap(ShortReferenceMap *);
73 ShortReferenceMapIter shortReferenceMapIter();
75 Boolean shortrefIndex(const StringC &, const Syntax &, size_t &index);
76 size_t nShortref() const;
77 const StringC &shortref(size_t i) const;
78 void addNeededShortref(const StringC &);
80 ConstPtr<Notation> lookupNotation(const StringC &) const;
81 const Notation *lookupNotationTemp(const StringC &) const;
82 Ptr<Notation> lookupNotation(const StringC &);
83 Ptr<Notation> insertNotation(const Ptr<Notation> &);
84 Ptr<Notation> removeNotation(const StringC &);
85 ConstNotationIter notationIter() const;
86 NotationIter notationIter();
88 size_t allocCurrentAttributeIndex();
89 size_t nCurrentAttribute() const;
90 size_t allocElementDefinitionIndex();
91 size_t nElementDefinition() const;
92 size_t allocAttributeDefinitionListIndex();
93 size_t nAttributeDefinitionList() const;
94 const ElementType *documentElementType() const;
95 Boolean isBase() const;
97 Dtd(const Dtd &); // undefined
98 void operator=(const Dtd &); // undefined
99 NamedResourceTable<Entity> generalEntityTable_;
100 NamedResourceTable<Entity> parameterEntityTable_;
101 ConstPtr<Entity> defaultEntity_;
102 ConstPtr<StringResource<Char> > name_;
103 NamedTable<ElementType> elementTypeTable_;
104 NamedTable<RankStem> rankStemTable_;
105 NamedTable<ShortReferenceMap> shortReferenceMapTable_;
106 NamedResourceTable<Notation> notationTable_;
107 size_t nCurrentAttribute_;
108 size_t nElementDefinition_;
109 size_t nAttributeDefinitionList_;
110 ElementType *documentElementType_;
111 Vector<StringC> shortrefs_;
112 HashTable<StringC,int> shortrefTable_;
117 ConstPtr<Entity> Dtd::lookupEntity(Boolean isParameter, const StringC &name)
121 ? ¶meterEntityTable_
122 : &generalEntityTable_)->lookupConst(name);
126 const Entity *Dtd::lookupEntityTemp(Boolean isParameter, const StringC &name)
130 ? ¶meterEntityTable_
131 : &generalEntityTable_)->lookupTemp(name);
135 Ptr<Entity> Dtd::lookupEntity(Boolean isParameter, const StringC &name)
138 ? ¶meterEntityTable_
139 : &generalEntityTable_)->lookup(name);
144 Dtd::insertEntity(const Ptr<Entity> &entity, Boolean replace)
146 return (entity->declType() == Entity::parameterEntity
147 ? ¶meterEntityTable_
148 : &generalEntityTable_)->insert(entity, replace);
152 Ptr<Entity> Dtd::removeEntity(Boolean isParameter, const StringC &name)
155 ? ¶meterEntityTable_
156 : &generalEntityTable_)->remove(name);
160 Dtd::ConstEntityIter Dtd::generalEntityIter() const
162 // Avoid use of typedef to work around MSVC 2.0 bug.
163 return ConstNamedResourceTableIter<Entity>(generalEntityTable_);
167 Dtd::EntityIter Dtd::generalEntityIter()
169 // Avoid use of typedef to work around MSVC 2.0 bug.
170 return NamedResourceTableIter<Entity>(generalEntityTable_);
174 Dtd::ConstEntityIter Dtd::parameterEntityIter() const
176 // Avoid use of typedef to work around MSVC 2.0 bug.
177 return ConstNamedResourceTableIter<Entity>(parameterEntityTable_);
181 Dtd::EntityIter Dtd::parameterEntityIter()
183 // Avoid use of typedef to work around MSVC 2.0 bug.
184 return NamedResourceTableIter<Entity>(parameterEntityTable_);
188 ConstPtr<Entity> Dtd::defaultEntity() const
190 return defaultEntity_;
194 const Entity *Dtd::defaultEntityTemp() const
196 return defaultEntity_.pointer();
200 const ConstPtr<StringResource<Char> > &Dtd::namePointer() const
206 const StringC &Dtd::name() const
212 size_t Dtd::allocCurrentAttributeIndex()
214 return nCurrentAttribute_++;
218 size_t Dtd::nCurrentAttribute() const
220 return nCurrentAttribute_;
224 size_t Dtd::allocElementDefinitionIndex()
226 return nElementDefinition_++;
230 size_t Dtd::nElementDefinition() const
232 return nElementDefinition_;
236 size_t Dtd::allocAttributeDefinitionListIndex()
238 return nAttributeDefinitionList_++;
242 size_t Dtd::nAttributeDefinitionList() const
244 return nAttributeDefinitionList_;
248 const ElementType *Dtd::lookupElementType(const StringC &name) const
250 return elementTypeTable_.lookup(name);
254 ElementType *Dtd::lookupElementType(const StringC &name)
256 return elementTypeTable_.lookup(name);
260 ElementType *Dtd::insertElementType(ElementType *e)
262 return elementTypeTable_.insert(e);
266 Dtd::ElementTypeIter Dtd::elementTypeIter()
268 // Avoid use of typedef to work around MSVC 2.0 bug.
269 return NamedTableIter<ElementType>(elementTypeTable_);
273 Dtd::ConstElementTypeIter Dtd::elementTypeIter() const
275 // Avoid use of typedef to work around MSVC 2.0 bug.
276 return ConstNamedTableIter<ElementType>(elementTypeTable_);
280 ElementType *Dtd::removeElementType(const StringC &name)
282 return elementTypeTable_.remove(name);
286 size_t Dtd::nElementTypeIndex() const
288 // index 0 is reserved for #pcdata
289 return 1 + elementTypeTable_.count();
293 const RankStem *Dtd::lookupRankStem(const StringC &name) const
295 return rankStemTable_.lookup(name);
299 RankStem *Dtd::lookupRankStem(const StringC &name)
301 return rankStemTable_.lookup(name);
305 RankStem *Dtd::insertRankStem(RankStem *e)
307 return rankStemTable_.insert(e);
311 size_t Dtd::nRankStem() const
313 return rankStemTable_.count();
317 ConstPtr<Notation> Dtd::lookupNotation(const StringC &name) const
319 return notationTable_.lookupConst(name);
323 const Notation *Dtd::lookupNotationTemp(const StringC &name) const
325 return notationTable_.lookupTemp(name);
329 Ptr<Notation> Dtd::lookupNotation(const StringC &name)
331 return notationTable_.lookup(name);
335 Ptr<Notation> Dtd::insertNotation(const Ptr<Notation> &nt)
337 return notationTable_.insert(nt);
341 Dtd::ConstNotationIter Dtd::notationIter() const
343 // Avoid use of typedef to work around MSVC 2.0 bug.
344 return ConstNamedResourceTableIter<Notation>(notationTable_);
348 Dtd::NotationIter Dtd::notationIter()
350 // Avoid use of typedef to work around MSVC 2.0 bug.
351 return NamedResourceTableIter<Notation>(notationTable_);
355 Ptr<Notation> Dtd::removeNotation(const StringC &name)
357 return notationTable_.remove(name);
361 const ElementType *Dtd::documentElementType() const
363 return documentElementType_;
367 const ShortReferenceMap *Dtd::lookupShortReferenceMap(const StringC &name) const
369 return shortReferenceMapTable_.lookup(name);
373 ShortReferenceMap *Dtd::lookupShortReferenceMap(const StringC &name)
375 return shortReferenceMapTable_.lookup(name);
379 ShortReferenceMap *Dtd::insertShortReferenceMap(ShortReferenceMap *map)
381 return shortReferenceMapTable_.insert(map);
385 Dtd::ShortReferenceMapIter Dtd::shortReferenceMapIter()
387 // Avoid use of typedef to work around MSVC 2.0 bug.
388 return NamedTableIter<ShortReferenceMap>(shortReferenceMapTable_);
392 Boolean Dtd::isBase() const
398 size_t Dtd::nShortref() const
400 return shortrefs_.size();
404 const StringC &Dtd::shortref(size_t i) const
406 return shortrefs_[i];
413 #endif /* not Dtd_INCLUDED */