This is ArcProcessor.h in view mode; [Download] [Up]
// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef ArcProcessor_INCLUDED #define ArcProcessor_INCLUDED 1 #include "Event.h" #include "ContentState.h" #include "Id.h" #include "NamedTable.h" #include "Vector.h" #include "ArcEngine.h" #include "SgmlParser.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Allocator; // Processor for a single architecture class ArcProcessor : private ContentState, private AttributeContext { public: struct MetaMap { MetaMap(); void clear(); const Attributed *attributed; unsigned suppressFlags; // #ARCCONT and #CONTENT are handled with a special index // list of indexes into element's attlist of architectural attributes Vector<unsigned> attMapFrom; // corresponding list of indexes in form's attlist Vector<unsigned> attMapTo; }; struct MetaMapCache { MetaMapCache(); void clear(); MetaMap map; enum { nNoSpec = 4 }; // Prerequisites for this cached entry to be valid. // The cache is only valid if for each member of noSpec != -1 // the attribute with that index was not specified (or current) unsigned noSpec[nNoSpec]; unsigned suppressFlags; const AttributeList *linkAtts; }; ArcProcessor(); void setName(const StringC &); void init(const EndPrologEvent &, const ConstPtr<Sd> &, const ConstPtr<Syntax> &, const SgmlParser *parser, Messenger *, const Vector<StringC> &superName, ArcDirector &director, const volatile sig_atomic_t *cancelPtr); // Return 0 if the content is needed, but wasn't supplied Boolean processStartElement(const StartElementEvent &, const AttributeList *linkAttributes, const Text *content, Allocator &); void processEndElement(const EndElementEvent &, Allocator &); // Return true if its architectural. Boolean processData(); const ConstPtr<Dtd> &dtdPointer() const { return metaDtd_; } Boolean valid() const { return valid_; } void checkIdrefs(); const StringC &name() const { return name_; } EventHandler &docHandler() const { return *docHandler_; } private: ArcProcessor(const ArcProcessor &); // undefined void operator=(const ArcProcessor &); // undefined const Syntax &attributeSyntax() const; ConstPtr<Notation> getAttributeNotation(const StringC &, const Location &); ConstPtr<Entity> getAttributeEntity(const StringC &, const Location &); void noteCurrentAttribute(size_t, AttributeValue *); ConstPtr<AttributeValue> getCurrentAttribute(size_t) const; Boolean defineId(const StringC &, const Location &, Location &); void noteIdref(const StringC &, const Location &); Id *lookupCreateId(const StringC &); void dispatchMessage(const Message &); void dispatchMessage(Message &); void initMessage(Message &); const MetaMap &buildMetaMap(const ElementType *, const Notation *, const AttributeList &, const AttributeList *linkAtts, unsigned suppressFlags); void considerSupr(const AttributeList &atts, const AttributeList *linkAtts, unsigned &thisSuppressFlags, unsigned &newSuppressFlags, Boolean &inhibitCache, unsigned &arcSuprIndex); void considerIgnD(const AttributeList &atts, const AttributeList *linkAtts, unsigned thisSuppressFlags, unsigned &newSuppressFlags, Boolean &inhibitCache, unsigned &arcSuprIndex); const Attributed *considerForm(const AttributeList &atts, const AttributeList *linkAtts, const StringC &name, Boolean isNotation, unsigned thisSuppressFlags, unsigned &newSuppressFlags, Boolean &inhibitCache, unsigned &arcFormIndex); const Attributed *autoForm(const AttributeList &atts, const StringC &name, Boolean isNotation, unsigned thisSuppressFlags, unsigned &newSuppressFlags, Boolean &inhibitCache, unsigned &idIndex); const Text *considerNamer(const AttributeList &atts, Boolean &inhibitCache, unsigned &arcNamerIndex); void buildAttributeMapRename(MetaMap &map, const Text &rename, const AttributeList &atts, const AttributeList *linkAtts, Vector<PackedBoolean> &attRenamed); void buildAttributeMapRest(MetaMap &map, const AttributeList &atts, const AttributeList *linkAtts, const Vector<PackedBoolean> &attRenamed); Boolean matchName(const StringC &name, const char *key); void split(const Text &text, Char space, Vector<StringC> &tokens, Vector<size_t> &tokenPos); Boolean mapAttributes(const AttributeList &from, const AttributeList *fromLink, const Text *content, AttributeList &to, ConstPtr<AttributeValue> &arcContent, const MetaMap &map); void initNotationSet(const Location &loc); const Attributed *considerNotation(const AttributeList &atts, unsigned thisSuppressFlags, Boolean &inhibitCache, unsigned ¬AttIndex); void supportAttributes(const AttributeList &); void processArcOpts(const AttributeList &atts); void processArcQuant(const Text &); ConstPtr<Entity> makeDtdEntity(const Notation *); void mungeMetaDtd(Dtd &metaDtd, const Dtd &docDtd); Boolean mungeDataEntity(ExternalDataEntity &entity); void emitArcContent(const Text &text, EventHandler &handler, Allocator &allocator); Boolean valid_; StringC name_; Messenger *mgr_; ConstPtr<Dtd> docDtd_; ConstPtr<Dtd> metaDtd_; ConstPtr<Syntax> docSyntax_; ConstPtr<Syntax> metaSyntax_; ConstPtr<Sd> docSd_; enum ReservedName { rArcFormA, rArcNamrA, rArcSuprA, rArcIgnDA, rArcDocF, rArcSuprF, rArcBridF, rArcDataF, rArcAuto, rArcIndr, rArcDTD, rArcQuant }; enum { nReserve = rArcQuant + 1 }; StringC supportAtts_[nReserve]; Boolean arcDtdIsParam_; Boolean arcAuto_; Vector<StringC> arcOpts_; StringC rniContent_; StringC rniArcCont_; StringC rniDefault_; enum { isArc = 01, suppressForm = 02, suppressSupr = 04, ignoreData = 010, condIgnoreData = 020, // recovering from invalid data recoverData = 040 }; Vector<unsigned> openElementFlags_; AttributeList attributeList_; NCVector<Owner<MetaMapCache> > metaMapCache_; MetaMap noCacheMetaMap_; NamedTable<Id> idTable_; Vector<ConstPtr<AttributeValue> > currentAttributes_; ConstPtr<Notation> defaultNotation_; Boolean errorIdref_; Boolean notationSetArch_; ArcDirector *director_; EventHandler *docHandler_; Owner<EventHandler> ownEventHandler_; size_t docIndex_; }; #ifdef SP_NAMESPACE } #endif #endif /* not ArcProcessor_INCLUDED */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.