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

📄 syntax.h

📁 SP是一个基于GNU C++编译器
💻 H
字号:
// Copyright (c) 1994 James Clark// See the file COPYING for copying permission.#ifndef Syntax_INCLUDED#define Syntax_INCLUDED 1#ifdef __GNUG__#pragma interface#endif#include "types.h"#include "Boolean.h"#include "ISet.h"#include "StringC.h"#include "SubstTable.h"#include "HashTable.h"#include "Vector.h"#include "Resource.h"#include "XcharMap.h"#include "EntityCatalog.h"#ifdef SP_NAMESPACEnamespace SP_NAMESPACE {#endifclass Sd;class CharsetInfo;class SP_API Syntax : public Resource, public EntityCatalog::Syntax {public:  enum ReservedName {    rALL,    rANY,    rATTLIST,    rCDATA,    rCONREF,    rCURRENT,    rDATA,    rDEFAULT,    rDOCTYPE,    rELEMENT,    rEMPTY,    rENDTAG,    rENTITIES,    rENTITY,    rFIXED,    rID,    rIDLINK,    rIDREF,    rIDREFS,    rIGNORE,    rIMPLICIT,    rIMPLIED,    rINCLUDE,    rINITIAL,    rLINK,    rLINKTYPE,    rMD,    rMS,    rNAME,    rNAMES,    rNDATA,    rNMTOKEN,    rNMTOKENS,    rNOTATION,    rNUMBER,    rNUMBERS,    rNUTOKEN,    rNUTOKENS,    rO,    rPCDATA,    rPI,    rPOSTLINK,    rPUBLIC,    rRCDATA,    rRE,    rREQUIRED,    rRESTORE,    rRS,    rSDATA,    rSHORTREF,    rSIMPLE,    rSPACE,    rSTARTTAG,    rSUBDOC,    rSYSTEM,    rTEMP,    rUSELINK,    rUSEMAP  };  enum { nNames = rUSEMAP + 1 };  enum Quantity {    qATTCNT,    qATTSPLEN,    qBSEQLEN,    qDTAGLEN,    qDTEMPLEN,    qENTLVL,    qGRPCNT,    qGRPGTCNT,    qGRPLVL,    qLITLEN,    qNAMELEN,    qNORMSEP,    qPILEN,    qTAGLEN,    qTAGLVL  };  enum { nQuantity = qTAGLVL + 1 };  enum { unlimited = 100000000 };  enum DelimGeneral {    dAND,    dCOM,    dCRO,    dDSC,    dDSO,    dDTGC,    dDTGO,    dERO,    dETAGO,    dGRPC,    dGRPO,    dHCRO, // WWW TC addition    dLIT,    dLITA,    dMDC,    dMDO,    dMINUS,    dMSC,    dNET,    dNESTC, // WWW TC addition    dOPT,    dOR,    dPERO,    dPIC,    dPIO,    dPLUS,    dREFC,    dREP,    dRNI,    dSEQ,    dSTAGO,    dTAGC,    dVI  };  enum { nDelimGeneral = dVI + 1 };  enum StandardFunction {    fRE,    fRS,    fSPACE  };  enum FunctionClass {    cFUNCHAR,    cSEPCHAR,    cMSOCHAR,    cMSICHAR,    cMSSCHAR  };  enum Set {    nameStart,    digit,    hexDigit,    nmchar,			// LCNMCHAR or UCNMCHAR    s,    blank,    sepchar,    minimumData,    significant,    functionChar,		// function character    sgmlChar  };  enum { nSet = sgmlChar + 1 };  enum Category {    otherCategory = 0,    sCategory = 01,    nameStartCategory = 02,    digitCategory = 04,    otherNameCategory = 010    };  Syntax(const Sd &);  Boolean lookupFunctionChar(const StringC &, Char *) const;  Boolean charFunctionName(Char c, const StringC *&name) const;  Boolean lookupReservedName(const StringC &, ReservedName *) const;  const StringC &reservedName(ReservedName) const;  StringC rniReservedName(ReservedName) const;  Number quantity(Quantity) const;  Char standardFunction(int) const;  Boolean getStandardFunction(int, Char &) const;  const StringC &delim() const;  const ISet<Char> *charSet(int i) const;  const SubstTable<Char> *generalSubstTable() const;  const SubstTable<Char> *entitySubstTable() const;  const SubstTable<Char> &upperSubstTable() const;  Boolean namecaseGeneral() const;  Boolean namecaseEntity() const;  const StringC &peroDelim() const;  const StringC &delimGeneral(int) const;  const StringC &delimShortrefComplex(size_t) const;  const ISet<Char> &delimShortrefSimple() const;  int nDelimShortrefComplex() const;  Boolean isValidShortref(const StringC &) const;  Boolean hasShortrefs() const;  Boolean isNameCharacter(Xchar) const;  Boolean isNameStartCharacter(Xchar) const;  Boolean isDigit(Xchar) const;  Boolean isHexDigit(Xchar) const;  Boolean isS(Xchar) const;  Boolean isB(Xchar c) const;  Category charCategory(Xchar) const;  Boolean isSgmlChar(Xchar) const;  size_t attcnt() const;  size_t attsplen() const;  size_t namelen() const;  size_t penamelen() const;  size_t litlen() const;  size_t normsep() const;  size_t dtemplen() const;  size_t grpcnt() const;  size_t grpgtcnt() const;  size_t grplvl() const;  size_t taglvl() const;  size_t taglen() const;  size_t entlvl() const;  size_t pilen() const;  Char space() const;    void setStandardFunction(StandardFunction, Char);  void enterStandardFunctionNames();  void addFunctionChar(const StringC &, FunctionClass, Char);  void setNamecaseGeneral(Boolean);  void setNamecaseEntity(Boolean);  void setDelimGeneral(int, const StringC &);  void addDelimShortref(const StringC &, const CharsetInfo &);  void addDelimShortrefs(const ISet<Char> &shortrefChars,			 const CharsetInfo &charset);  void addNameCharacters(const ISet<Char> &);  void addNameStartCharacters(const ISet<Char> &);  void addSubst(Char lc, Char uc);  void addShunchar(Char);  void setShuncharControls();  void setQuantity(int, Number);  void setName(int, const StringC &);  void setSgmlChar(const ISet<Char> &);  void implySgmlChar(const Sd &);  // :: is for Watcom 10.0a  void checkSgmlChar(const Sd &,		     const ::SP_NAMESPACE_SCOPE Syntax *otherSyntax,		     Boolean invalidUseDocumentCharset,		     ISet<WideChar> &invalid)       const;  static int referenceQuantity(Quantity);  const XcharMap<unsigned char> &markupScanTable() const;  Boolean multicode() const;  void addEntity(const StringC &, Char);  size_t nEntities() const;  const StringC &entityName(size_t) const;  Char entityChar(size_t) const;private:  void subst(Char, Char);  void checkUnivControlChar(UnivChar univChar,			    const CharsetInfo &docCharset,			    const ::SP_NAMESPACE_SCOPE Syntax *otherSyntax,			    ISet<WideChar> &invalid) const;  ISet<Char> shunchar_;  PackedBoolean shuncharControls_;  ISet<Char> set_[nSet];  Char standardFunction_[3];  PackedBoolean standardFunctionValid_[3];  Boolean namecaseGeneral_;  Boolean namecaseEntity_;  StringC delimGeneral_[nDelimGeneral];  Vector<StringC> delimShortrefComplex_;  ISet<Char> delimShortrefSimple_;  StringC names_[nNames];  Number quantity_[nQuantity];  HashTable<StringC,int> nameTable_;  HashTable<StringC,Char> functionTable_;  SubstTable<Char> upperSubst_;  SubstTable<Char> identitySubst_;  const SubstTable<Char> *generalSubst_;  const SubstTable<Char> *entitySubst_;  XcharMap<unsigned char> categoryTable_;  Boolean multicode_;  XcharMap<unsigned char> markupScanTable_;  Vector<StringC> entityNames_;  StringC entityChars_;  static const int referenceQuantity_[];};inline Number Syntax::quantity(Quantity q) const{  return quantity_[q];}inline void Syntax::setQuantity(int i, Number n){  quantity_[i] = n;}inline const SubstTable<Char> *Syntax::generalSubstTable() const{  return generalSubst_;}inline const SubstTable<Char> *Syntax::entitySubstTable() const{  return entitySubst_;}inline int Syntax::nDelimShortrefComplex() const{  return int(delimShortrefComplex_.size());}inline const StringC &Syntax::delimGeneral(int i) const{  return delimGeneral_[i];}inline const StringC &Syntax::delimShortrefComplex(size_t i) const{  return delimShortrefComplex_[i];}inline const ISet<Char> &Syntax::delimShortrefSimple() const{  return delimShortrefSimple_;}inline Boolean Syntax::hasShortrefs() const{  return delimShortrefComplex_.size() > 0 || !delimShortrefSimple_.isEmpty();}inline Char Syntax::standardFunction(int i) const{  return standardFunction_[i];}inline Boolean Syntax::getStandardFunction(int i, Char &result) const{  if (standardFunctionValid_[i]) {    result = standardFunction_[i];    return 1;  }  else    return 0;}inline const ISet<Char> *Syntax::charSet(int i) const{  return &set_[i];}inline Boolean Syntax::isNameCharacter(Xchar c) const{  return categoryTable_[c] >= nameStartCategory;}inline Boolean Syntax::isNameStartCharacter(Xchar c) const{  return categoryTable_[c] == nameStartCategory;}inline Boolean Syntax::isDigit(Xchar c) const{  return categoryTable_[c] == digitCategory;}inline Boolean Syntax::isS(Xchar c) const{  return categoryTable_[c] == sCategory;}inline Boolean Syntax::isB(Xchar c) const{  return (categoryTable_[c] == sCategory	  && !(standardFunctionValid_[fRE] && c == standardFunction_[fRE])	  && !(standardFunctionValid_[fRS] && c == standardFunction_[fRS]));}inline Syntax::Category Syntax::charCategory(Xchar c) const{  return Category(categoryTable_[c]);}inline Boolean Syntax::isSgmlChar(Xchar c) const{  return c >= 0 && set_[sgmlChar].contains(Char(c));}inline const StringC &Syntax::reservedName(ReservedName i) const{  return names_[i];}inline size_t Syntax::attcnt() const{  return quantity(Syntax::qATTCNT);}inline size_t Syntax::attsplen() const{  return quantity(Syntax::qATTSPLEN);}inline size_t Syntax::namelen() const{  return quantity(Syntax::qNAMELEN);}inline size_t Syntax::penamelen() const{  return quantity(Syntax::qNAMELEN) - delimGeneral(Syntax::dPERO).size();}inline size_t Syntax::litlen() const{  return quantity(Syntax::qLITLEN);}inline size_t Syntax::normsep() const{  return quantity(Syntax::qNORMSEP);}inline size_t Syntax::dtemplen() const{  return quantity(Syntax::qDTEMPLEN);}inline size_t Syntax::grpcnt() const{  return quantity(Syntax::qGRPCNT);}inline size_t Syntax::grpgtcnt() const{  return quantity(Syntax::qGRPGTCNT);}inline size_t Syntax::grplvl() const{  return quantity(Syntax::qGRPLVL);}inline size_t Syntax::taglvl() const{  return quantity(Syntax::qTAGLVL);}inline size_t Syntax::taglen() const{  return quantity(Syntax::qTAGLEN);}inline size_t Syntax::entlvl() const{  return quantity(Syntax::qENTLVL);}inline size_t Syntax::pilen() const{  return quantity(Syntax::qPILEN);}inline Char Syntax::space() const{  return standardFunction(Syntax::fSPACE);}inline void Syntax::setSgmlChar(const ISet<Char> &set){  set_[sgmlChar] = set;}inline int Syntax::referenceQuantity(Quantity i){  return referenceQuantity_[i];}inline void Syntax::setShuncharControls(){  shuncharControls_ = 1;}inline const XcharMap<unsigned char> &Syntax::markupScanTable() const{  return markupScanTable_;}inline Boolean Syntax::multicode() const{  return multicode_;}inline Boolean Syntax::namecaseGeneral() const{  return namecaseGeneral_;}inline Boolean Syntax::namecaseEntity() const{  return namecaseEntity_;}inline size_t Syntax::nEntities() const{  return entityNames_.size();}inline const StringC &Syntax::entityName(size_t i) const{  return entityNames_[i];}inline Char Syntax::entityChar(size_t i) const{  return entityChars_[i];}#ifdef SP_NAMESPACE}#endif#endif /* Syntax_INCLUDED */

⌨️ 快捷键说明

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