2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these libraries and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $XConsortium: Dtd.h /main/1 1996/07/29 16:49:16 cde-hp $ */
24 // Copyright (c) 1994 James Clark
25 // See the file COPYING for copying permission.
28 #define Dtd_INCLUDED 1
33 #include "NamedTable.h"
34 #include "NamedResourceTable.h"
35 #include "ElementType.h"
38 #include "ShortReferenceMap.h"
41 #include "StringResource.h"
44 #include "HashTable.h"
47 namespace SP_NAMESPACE {
53 class SP_API Dtd : public Resource {
55 typedef NamedTableIter<ElementType> ElementTypeIter;
56 typedef ConstNamedTableIter<ElementType> ConstElementTypeIter;
57 typedef NamedTableIter<ShortReferenceMap> ShortReferenceMapIter;
58 typedef ConstNamedResourceTableIter<Notation> ConstNotationIter;
59 typedef NamedResourceTableIter<Notation> NotationIter;
60 typedef ConstNamedResourceTableIter<Entity> ConstEntityIter;
61 typedef NamedResourceTableIter<Entity> EntityIter;
62 Dtd(const StringC &name, Boolean isBase);
63 ConstPtr<Entity> lookupEntity(Boolean isParameter, const StringC &) const;
64 const Entity *lookupEntityTemp(Boolean isParameter, const StringC &) const;
65 Ptr<Entity> lookupEntity(Boolean isParameter, const StringC &);
66 Ptr<Entity> insertEntity(const Ptr<Entity> &, Boolean replace = 0);
67 Ptr<Entity> removeEntity(Boolean isParameter, const StringC &);
68 ConstEntityIter generalEntityIter() const;
69 EntityIter generalEntityIter();
70 ConstEntityIter parameterEntityIter() const;
71 EntityIter parameterEntityIter();
73 ConstPtr<Entity> defaultEntity() const;
74 const Entity *defaultEntityTemp() const;
75 void setDefaultEntity(const Ptr<Entity> &, ParserState &);
76 const ConstPtr<StringResource<Char> > &namePointer() const;
77 const StringC &name() const;
79 const ElementType *lookupElementType(const StringC &) const;
80 ElementType *lookupElementType(const StringC &);
81 ElementType *removeElementType(const StringC &);
82 ElementType *insertElementType(ElementType *);
83 size_t nElementTypeIndex() const;
84 ConstElementTypeIter elementTypeIter() const;
85 ElementTypeIter elementTypeIter();
87 const RankStem *lookupRankStem(const StringC &) const;
88 RankStem *lookupRankStem(const StringC &);
89 RankStem *insertRankStem(RankStem *);
90 size_t nRankStem() const;
92 const ShortReferenceMap *lookupShortReferenceMap(const StringC &) const;
93 ShortReferenceMap *lookupShortReferenceMap(const StringC &);
94 ShortReferenceMap *insertShortReferenceMap(ShortReferenceMap *);
95 ShortReferenceMapIter shortReferenceMapIter();
97 Boolean shortrefIndex(const StringC &, const Syntax &, size_t &index);
98 size_t nShortref() const;
99 const StringC &shortref(size_t i) const;
100 void addNeededShortref(const StringC &);
102 ConstPtr<Notation> lookupNotation(const StringC &) const;
103 const Notation *lookupNotationTemp(const StringC &) const;
104 Ptr<Notation> lookupNotation(const StringC &);
105 Ptr<Notation> insertNotation(const Ptr<Notation> &);
106 Ptr<Notation> removeNotation(const StringC &);
107 ConstNotationIter notationIter() const;
108 NotationIter notationIter();
110 size_t allocCurrentAttributeIndex();
111 size_t nCurrentAttribute() const;
112 size_t allocElementDefinitionIndex();
113 size_t nElementDefinition() const;
114 size_t allocAttributeDefinitionListIndex();
115 size_t nAttributeDefinitionList() const;
116 const ElementType *documentElementType() const;
117 Boolean isBase() const;
119 Dtd(const Dtd &); // undefined
120 void operator=(const Dtd &); // undefined
121 NamedResourceTable<Entity> generalEntityTable_;
122 NamedResourceTable<Entity> parameterEntityTable_;
123 ConstPtr<Entity> defaultEntity_;
124 ConstPtr<StringResource<Char> > name_;
125 NamedTable<ElementType> elementTypeTable_;
126 NamedTable<RankStem> rankStemTable_;
127 NamedTable<ShortReferenceMap> shortReferenceMapTable_;
128 NamedResourceTable<Notation> notationTable_;
129 size_t nCurrentAttribute_;
130 size_t nElementDefinition_;
131 size_t nAttributeDefinitionList_;
132 ElementType *documentElementType_;
133 Vector<StringC> shortrefs_;
134 HashTable<StringC,int> shortrefTable_;
139 ConstPtr<Entity> Dtd::lookupEntity(Boolean isParameter, const StringC &name)
143 ? ¶meterEntityTable_
144 : &generalEntityTable_)->lookupConst(name);
148 const Entity *Dtd::lookupEntityTemp(Boolean isParameter, const StringC &name)
152 ? ¶meterEntityTable_
153 : &generalEntityTable_)->lookupTemp(name);
157 Ptr<Entity> Dtd::lookupEntity(Boolean isParameter, const StringC &name)
160 ? ¶meterEntityTable_
161 : &generalEntityTable_)->lookup(name);
166 Dtd::insertEntity(const Ptr<Entity> &entity, Boolean replace)
168 return (entity->declType() == Entity::parameterEntity
169 ? ¶meterEntityTable_
170 : &generalEntityTable_)->insert(entity, replace);
174 Ptr<Entity> Dtd::removeEntity(Boolean isParameter, const StringC &name)
177 ? ¶meterEntityTable_
178 : &generalEntityTable_)->remove(name);
182 Dtd::ConstEntityIter Dtd::generalEntityIter() const
184 // Avoid use of typedef to work around MSVC 2.0 bug.
185 return ConstNamedResourceTableIter<Entity>(generalEntityTable_);
189 Dtd::EntityIter Dtd::generalEntityIter()
191 // Avoid use of typedef to work around MSVC 2.0 bug.
192 return NamedResourceTableIter<Entity>(generalEntityTable_);
196 Dtd::ConstEntityIter Dtd::parameterEntityIter() const
198 // Avoid use of typedef to work around MSVC 2.0 bug.
199 return ConstNamedResourceTableIter<Entity>(parameterEntityTable_);
203 Dtd::EntityIter Dtd::parameterEntityIter()
205 // Avoid use of typedef to work around MSVC 2.0 bug.
206 return NamedResourceTableIter<Entity>(parameterEntityTable_);
210 ConstPtr<Entity> Dtd::defaultEntity() const
212 return defaultEntity_;
216 const Entity *Dtd::defaultEntityTemp() const
218 return defaultEntity_.pointer();
222 const ConstPtr<StringResource<Char> > &Dtd::namePointer() const
228 const StringC &Dtd::name() const
234 size_t Dtd::allocCurrentAttributeIndex()
236 return nCurrentAttribute_++;
240 size_t Dtd::nCurrentAttribute() const
242 return nCurrentAttribute_;
246 size_t Dtd::allocElementDefinitionIndex()
248 return nElementDefinition_++;
252 size_t Dtd::nElementDefinition() const
254 return nElementDefinition_;
258 size_t Dtd::allocAttributeDefinitionListIndex()
260 return nAttributeDefinitionList_++;
264 size_t Dtd::nAttributeDefinitionList() const
266 return nAttributeDefinitionList_;
270 const ElementType *Dtd::lookupElementType(const StringC &name) const
272 return elementTypeTable_.lookup(name);
276 ElementType *Dtd::lookupElementType(const StringC &name)
278 return elementTypeTable_.lookup(name);
282 ElementType *Dtd::insertElementType(ElementType *e)
284 return elementTypeTable_.insert(e);
288 Dtd::ElementTypeIter Dtd::elementTypeIter()
290 // Avoid use of typedef to work around MSVC 2.0 bug.
291 return NamedTableIter<ElementType>(elementTypeTable_);
295 Dtd::ConstElementTypeIter Dtd::elementTypeIter() const
297 // Avoid use of typedef to work around MSVC 2.0 bug.
298 return ConstNamedTableIter<ElementType>(elementTypeTable_);
302 ElementType *Dtd::removeElementType(const StringC &name)
304 return elementTypeTable_.remove(name);
308 size_t Dtd::nElementTypeIndex() const
310 // index 0 is reserved for #pcdata
311 return 1 + elementTypeTable_.count();
315 const RankStem *Dtd::lookupRankStem(const StringC &name) const
317 return rankStemTable_.lookup(name);
321 RankStem *Dtd::lookupRankStem(const StringC &name)
323 return rankStemTable_.lookup(name);
327 RankStem *Dtd::insertRankStem(RankStem *e)
329 return rankStemTable_.insert(e);
333 size_t Dtd::nRankStem() const
335 return rankStemTable_.count();
339 ConstPtr<Notation> Dtd::lookupNotation(const StringC &name) const
341 return notationTable_.lookupConst(name);
345 const Notation *Dtd::lookupNotationTemp(const StringC &name) const
347 return notationTable_.lookupTemp(name);
351 Ptr<Notation> Dtd::lookupNotation(const StringC &name)
353 return notationTable_.lookup(name);
357 Ptr<Notation> Dtd::insertNotation(const Ptr<Notation> &nt)
359 return notationTable_.insert(nt);
363 Dtd::ConstNotationIter Dtd::notationIter() const
365 // Avoid use of typedef to work around MSVC 2.0 bug.
366 return ConstNamedResourceTableIter<Notation>(notationTable_);
370 Dtd::NotationIter Dtd::notationIter()
372 // Avoid use of typedef to work around MSVC 2.0 bug.
373 return NamedResourceTableIter<Notation>(notationTable_);
377 Ptr<Notation> Dtd::removeNotation(const StringC &name)
379 return notationTable_.remove(name);
383 const ElementType *Dtd::documentElementType() const
385 return documentElementType_;
389 const ShortReferenceMap *Dtd::lookupShortReferenceMap(const StringC &name) const
391 return shortReferenceMapTable_.lookup(name);
395 ShortReferenceMap *Dtd::lookupShortReferenceMap(const StringC &name)
397 return shortReferenceMapTable_.lookup(name);
401 ShortReferenceMap *Dtd::insertShortReferenceMap(ShortReferenceMap *map)
403 return shortReferenceMapTable_.insert(map);
407 Dtd::ShortReferenceMapIter Dtd::shortReferenceMapIter()
409 // Avoid use of typedef to work around MSVC 2.0 bug.
410 return NamedTableIter<ShortReferenceMap>(shortReferenceMapTable_);
414 Boolean Dtd::isBase() const
420 size_t Dtd::nShortref() const
422 return shortrefs_.size();
426 const StringC &Dtd::shortref(size_t i) const
428 return shortrefs_[i];
435 #endif /* not Dtd_INCLUDED */