⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parserstate.h

📁 SP是一个基于GNU C++编译器
💻 H
📖 第 1 页 / 共 2 页
字号:
// Copyright (c) 1994 James Clark// See the file COPYING for copying permission.#ifndef ParserState_INCLUDED#define ParserState_INCLUDED 1#ifdef __GNUG__#pragma interface#endif#include <stddef.h>#include <signal.h>#include "Allocator.h"#include "Attribute.h"#include "Boolean.h"#include "Vector.h"#include "StringC.h"#include "Dtd.h"#include "Entity.h"#include "EntityCatalog.h"#include "EntityManager.h"#include "Event.h"#include "EventQueue.h"#include "Id.h"#include "InputSource.h"#include "IList.h"#include "IQueue.h"#include "Location.h"#include "Message.h"#include "Mode.h"#include "OpenElement.h"#include "OutputState.h"#include "ParserOptions.h"#include "Ptr.h"#include "Recognizer.h"#include "Sd.h"#include "Syntax.h"#include "NCVector.h"#include "Owner.h"#include "Lpd.h"#include "LpdEntityRef.h"#include "Markup.h"#include "ContentState.h"#ifdef SP_NAMESPACEnamespace SP_NAMESPACE {#endifclass ParserState : public ContentState, public AttributeContext { public:  enum Phase {    noPhase,    initPhase,    prologPhase,    declSubsetPhase,    instanceStartPhase,    contentPhase    };  ParserState(const Ptr<EntityManager> &,	      const ParserOptions &,	      unsigned subdocLevel,	      Phase finalPhase);  void setHandler(EventHandler *, const volatile sig_atomic_t *cancelPtr);  void unsetHandler();  Boolean inInstance() const;  Boolean hadDtd() const;  void allDone();  void startDtd(const StringC &);  void endDtd();  void startInstance();  unsigned subdocLevel() const;  Boolean haveDefLpd() const;  Dtd &defDtd();  const Ptr<Dtd> &defDtdPointer() const;  Boolean haveCurrentDtd() const;  const Dtd &currentDtd() const;  Dtd &currentDtdNonConst() const;  const ConstPtr<Dtd> &currentDtdPointer() const;  void startLpd(Ptr<Lpd> &lpd);  void endLpd();  Lpd &defLpd();  Ptr<Lpd> &defLpdPointer();  Ptr<ComplexLpd> defComplexLpdPointer();  size_t nActiveLink() const;  const Lpd &activeLpd(size_t i) const;  ComplexLpd &defComplexLpd();  Ptr<Dtd> lookupDtd(const StringC &name);  Ptr<Dtd> baseDtd();  void activateLinkType(const StringC &);  void allLinkTypesActivated();  void setResultAttributeSpecMode();  void clearResultAttributeSpecMode();  Boolean haveApplicableDtd() const;  Boolean hadLpd() const;  Boolean pass2() const;  void setPass2Start();  Boolean maybeStartPass2();  void checkEntityStability();  void noteReferencedEntity(const ConstPtr<Entity> &entity,			    Boolean, Boolean);  ConstPtr<Lpd> lookupLpd(const StringC &name) const;  Boolean shouldActivateLink(const StringC &) const;  Char currentChar() const;  const Location &currentLocation() const;  InputSource *currentInput() const;  EntityManager &entityManager() const;  Ptr<EntityManager> entityManagerPtr() const;  const EntityCatalog &entityCatalog() const;  ConstPtr<EntityCatalog> entityCatalogPtr() const;  void setEntityCatalog(const ConstPtr<EntityCatalog> &);  void setSyntax(ConstPtr<Syntax>);  void setSyntaxes(ConstPtr<Syntax>, ConstPtr<Syntax>);  void setSd(ConstPtr<Sd>);  const Syntax &syntax() const;  const Syntax &instanceSyntax() const;  const ConstPtr<Syntax> &syntaxPointer() const;  const ConstPtr<Syntax> &prologSyntaxPointer() const;  const ConstPtr<Syntax> &instanceSyntaxPointer() const;  const Sd &sd() const;  const ConstPtr<Sd> &sdPointer() const;  void setPhase(Phase phase);  Phase phase() const;  Phase finalPhase() const;  Mode currentMode() const;  void setRecognizer(Mode, ConstPtr<Recognizer>);  void setNormalMap(const XcharMap<PackedBoolean> &);  const XcharMap<PackedBoolean> &normalMap() const;  Xchar getChar();  void skipChar();  Token getToken(Mode mode);  StringC currentToken() const;  void getCurrentToken(StringC &) const;  void getCurrentToken(const SubstTable<Char> *, StringC &) const;  unsigned inputLevel() const;  unsigned specialParseInputLevel() const;  unsigned markedSectionLevel() const;  unsigned markedSectionSpecialLevel() const;  unsigned currentInputElementIndex() const;  const Location &currentMarkedSectionStartLocation() const;  Boolean entityIsOpen(const EntityDecl *) const;  void popInputStack();  void pushInput(InputSource *);  Boolean referenceDsEntity(const Location &);  void setDsEntity(const ConstPtr<Entity> &);  Boolean eventQueueEmpty() const;  Event *eventQueueGet();  EventHandler &eventHandler();  void pushElement(OpenElement *);  OpenElement *popSaveElement();  void popElement();  void pcdataRecover();  Boolean pcdataRecovering() const;  ConstPtr<Entity> lookupEntity(Boolean isParameter,				const StringC &name,				const Location &,				Boolean referenced);  ConstPtr<Entity> createUndefinedEntity(const StringC &,					 const Location &);  Boolean appendCurrentRank(StringC &, const RankStem *) const;  void setCurrentRank(const RankStem *, const StringC &);  void startMarkedSection(const Location &);  void startSpecialMarkedSection(Mode, const Location &);  void endMarkedSection();  void queueRe(const Location &);  void noteMarkup();  void noteData();  void noteRs();  void noteStartElement(Boolean included);  void noteEndElement(Boolean included);  // size of objects allocated with this must not exceed  // sizeof(StartElementEvent)  Allocator &eventAllocator();  // size of objects allocated with this must not exceed  // sizeof(OpenElement)  Allocator &internalAllocator();  AttributeList *allocAttributeList(const ConstPtr<AttributeDefinitionList> &,				    unsigned i);  static void freeEvent(void *);  Boolean wantMarkup() const;  const EventsWanted &eventsWanted() const;  StringC &nameBuffer();  typedef NamedTableIter<Id> IdTableIter;  IdTableIter idTableIter();  const ParserOptions &options() const;  void enableImplydef();  Boolean implydefElement();  Boolean implydefAttlist();  void keepMessages();  void releaseKeptMessages();  void discardKeptMessages();  Messenger &messenger();  Markup *currentMarkup();  const Location &markupLocation() const;  Markup *startMarkup(Boolean, const Location &);  void inheritActiveLinkTypes(const ParserState &parent);  Boolean cancelled() const;  // AFDR extensions  void setHadAfdrDecl();  Boolean hadAfdrDecl() const;  // Implementation of AttributeContext.  Boolean defineId(const StringC &, const Location &, Location &);  void noteIdref(const StringC &, const Location &);  void noteCurrentAttribute(size_t, AttributeValue *);  ConstPtr<AttributeValue> getCurrentAttribute(size_t) const;  ConstPtr<Entity> getAttributeEntity(const StringC &,				      const Location &);  ConstPtr<Notation> getAttributeNotation(const StringC &,					  const Location &);  const Syntax &attributeSyntax() const;private:  ParserState(const ParserState &); // undefined  void operator=(const ParserState &); // undefined  void dispatchMessage(Message &);  void dispatchMessage(const Message &);  void initMessage(Message &);  void queueMessage(MessageEvent *);  Id *lookupCreateId(const StringC &);  ParserOptions options_;  EventHandler *handler_;  Pass1EventHandler pass1Handler_;  Boolean allowPass2_;  Offset pass2StartOffset_;  Boolean hadPass2Start_;  EventQueue eventQueue_;  OutputState outputState_;  ConstPtr<Syntax> prologSyntax_;  ConstPtr<Syntax> instanceSyntax_;  ConstPtr<Sd> sd_;  unsigned subdocLevel_;  Ptr<EntityManager> entityManager_;  ConstPtr<EntityCatalog> entityCatalog_;  Phase phase_;  Phase finalPhase_;  Boolean inInstance_;  Ptr<Dtd> defDtd_;  Ptr<Lpd> defLpd_;  Vector<ConstPtr<Lpd> > allLpd_;  Vector<ConstPtr<Lpd> > lpd_; // active LPDs  Vector<StringC> activeLinkTypes_;  Boolean activeLinkTypesSubsted_;  Boolean hadLpd_;  Boolean resultAttributeSpecMode_;  Boolean pass2_;  typedef OwnerTable<LpdEntityRef, LpdEntityRef, LpdEntityRef, LpdEntityRef>    LpdEntityRefSet;  typedef OwnerTableIter<LpdEntityRef, LpdEntityRef, LpdEntityRef, LpdEntityRef>    LpdEntityRefSetIter;  LpdEntityRefSet lpdEntityRefs_;  // external entity to be referenced at the end of the declaration subset  ConstPtr<Entity> dsEntity_;  Allocator eventAllocator_;  Allocator internalAllocator_;  NCVector<Owner<AttributeList> > attributeLists_;  StringC nameBuffer_;  Boolean keepingMessages_;  IQueue<MessageEvent> keptMessages_;  Mode currentMode_;  Boolean pcdataRecovering_;  // if in a special parse (cdata, rcdata, ignore), the input level  // at which the special parse started.  unsigned specialParseInputLevel_;  Mode specialParseMode_;  unsigned markedSectionLevel_;  unsigned markedSectionSpecialLevel_;  Vector<Location> markedSectionStartLocation_;  ConstPtr<Recognizer> recognizers_[nModes];  XcharMap<PackedBoolean> normalMap_;  unsigned inputLevel_;  IList<InputSource> inputStack_;  Vector<unsigned> inputLevelElementIndex_;  Ptr<Dtd> currentDtd_;  ConstPtr<Dtd> currentDtdConst_;  Vector<Ptr<Dtd> > dtd_;  Ptr<Dtd> pass1Dtd_;  ConstPtr<Syntax> syntax_;  Vector<StringC> currentRank_;  NamedTable<Id> idTable_;  NamedResourceTable<Entity> instanceDefaultedEntityTable_;  NamedResourceTable<Entity> undefinedEntityTable_;  Vector<ConstPtr<AttributeValue> > currentAttributes_;  Markup *currentMarkup_;  Markup markup_;  Location markupLocation_;  Boolean hadAfdrDecl_;  Boolean implydefElement_;  Boolean implydefAttlist_;  const volatile sig_atomic_t *cancelPtr_;  static sig_atomic_t dummyCancel_;  static const Location nullLocation_;};inlineMessenger &ParserState::messenger(){  return *this;}inlineBoolean ParserState::wantMarkup() const{  return (inInstance_	  ? options_.eventsWanted.wantInstanceMarkup()	  : options_.eventsWanted.wantPrologMarkup());}inlineconst EventsWanted &ParserState::eventsWanted() const{  return options_.eventsWanted;}inlineInputSource *ParserState::currentInput() const{  return inputStack_.head();}inlineconst Location &ParserState::currentLocation() const{  InputSource *in = currentInput();  return in ? in->currentLocation() : nullLocation_;}inlineBoolean ParserState::pcdataRecovering() const{  return pcdataRecovering_;}inlineunsigned ParserState::inputLevel() const{  return inputLevel_;}inlineunsigned ParserState::specialParseInputLevel() const{  return specialParseInputLevel_;}inlineunsigned ParserState::markedSectionLevel() const{  return markedSectionLevel_;}inlineunsigned ParserState::markedSectionSpecialLevel() const{  return markedSectionSpecialLevel_;}inlineconst Location &ParserState::currentMarkedSectionStartLocation() const{  return markedSectionStartLocation_.back();}inlineunsigned ParserState::currentInputElementIndex() const{  return inputLevelElementIndex_.back();}inlineChar ParserState::currentChar() const{  return currentInput()->currentTokenStart()[0];}inlineStringC ParserState::currentToken() const{  return StringC(currentInput()->currentTokenStart(),		 currentInput()->currentTokenLength());}inlinevoid ParserState::getCurrentToken(StringC &str) const{  InputSource *in = currentInput();  str.assign(in->currentTokenStart(), in->currentTokenLength());}inlinevoid ParserState::setRecognizer(Mode mode, ConstPtr<Recognizer> p){  recognizers_[mode] = p;}inlinevoid ParserState::setNormalMap(const XcharMap<PackedBoolean> &map){  normalMap_ = map;}inlineconst XcharMap<PackedBoolean> &ParserState::normalMap() const{  return normalMap_;}inlineBoolean ParserState::haveDefLpd() const{  return !defLpd_.isNull();}inlineBoolean ParserState::haveCurrentDtd() const{  return !currentDtd_.isNull();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -