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

📄 attribute.h

📁 SP是一个基于GNU C++编译器
💻 H
📖 第 1 页 / 共 2 页
字号:
// Copyright (c) 1994 James Clark// See the file COPYING for copying permission.#ifndef Attribute_INCLUDED#define Attribute_INCLUDED 1#ifdef __GNUG__#pragma interface#endif#include <stddef.h>#include "Resource.h"#include "Owner.h"#include "StringC.h"#include "Vector.h"#include "CopyOwner.h"#include "Boolean.h"#include "Text.h"#include "Ptr.h"#include "Message.h"#ifdef SP_NAMESPACEnamespace SP_NAMESPACE {#endifclass Entity;class Notation;class DeclaredValue;class AttributeValue;class TokenizedAttributeValue;class AttributeSemantics;class AttributeContext;class Syntax;class SP_API AttributeDefinitionDesc {public:  AttributeDefinitionDesc() { }  enum DeclaredValue {    cdata,    name,    number,    nmtoken,    nutoken,    entity,    idref,    names,    numbers,    nmtokens,    nutokens,    entities,    idrefs,    id,    notation,    nameTokenGroup  };  DeclaredValue declaredValue;  enum DefaultValueType {    required,    current,    implied,    conref,    defaulted,    fixed  };  DefaultValueType defaultValueType;  ConstPtr<AttributeValue> defaultValue;  Vector<StringC> allowedValues;  // Attribute definitions whose default value type is current and  // which have the same currentIndex share current values.  size_t currentIndex;private:  AttributeDefinitionDesc(const AttributeDefinitionDesc &); // undefined  void operator=(const AttributeDefinitionDesc &);	    // undefined};class DeclaredValue {public:  DeclaredValue();  virtual ~DeclaredValue();  // This performs syntactic checking on the value.  virtual AttributeValue *makeValue(Text &, AttributeContext &,				    const StringC &name,				    unsigned &specLength) const = 0;  // This is used to avoid unnecessary syntactic checking in the  // case where the attribute name and vi have been omitted.  virtual AttributeValue *makeValueFromToken(Text &,					     AttributeContext &,					     const StringC &name,					     unsigned &specLength) const;  // This performs semantic checking on the value.  virtual AttributeSemantics *makeSemantics(const TokenizedAttributeValue &,					    AttributeContext &,					    const StringC &,					    unsigned &nIdrefs,					    unsigned &nEntityNames) const;  virtual Boolean containsToken(const StringC &) const;  virtual Boolean tokenized() const = 0;  virtual Boolean isNotation() const;  virtual Boolean isEntity() const;  virtual Boolean isId() const;  virtual Boolean isIdref() const;  virtual const Vector<StringC> *getTokens() const;  virtual void buildDesc(AttributeDefinitionDesc &) const = 0;  virtual DeclaredValue *copy() const = 0;};class CdataDeclaredValue : public DeclaredValue {public:  CdataDeclaredValue();  Boolean tokenized() const;  AttributeValue *makeValue(Text &, AttributeContext &, const StringC &,			    unsigned &) const;  void buildDesc(AttributeDefinitionDesc &) const;  DeclaredValue *copy() const;};class TokenizedDeclaredValue : public DeclaredValue {public:  // must be in same order as AttributeDefinitionDesc  enum TokenType {    name,    number,    nameToken,    numberToken,    entityName  };  TokenizedDeclaredValue(TokenType type, Boolean isList);  AttributeValue *makeValue(Text &, AttributeContext &, const StringC &,			    unsigned &) const;  TokenizedAttributeValue *makeTokenizedValue(Text &, AttributeContext &,					      const StringC &, unsigned &) const;  Boolean tokenized() const;  void buildDesc(AttributeDefinitionDesc &) const;  DeclaredValue *copy() const;private:  TokenType type_;  Boolean isList_;  unsigned initialCategories_;  unsigned subsequentCategories_;};class GroupDeclaredValue : public TokenizedDeclaredValue {public:  GroupDeclaredValue(TokenType, Vector<StringC> &);  Boolean containsToken(const StringC &) const;  AttributeValue *makeValue(Text &, AttributeContext &, const StringC &,			    unsigned &) const;  AttributeValue *makeValueFromToken(Text &,				     AttributeContext &,				     const StringC &name,				     unsigned &) const;  const Vector<StringC> *getTokens() const;  void buildDesc(AttributeDefinitionDesc &) const;  DeclaredValue *copy() const;private:  Vector<StringC> allowedValues_;};class NameTokenGroupDeclaredValue : public GroupDeclaredValue {public:  NameTokenGroupDeclaredValue(Vector<StringC> &);  void buildDesc(AttributeDefinitionDesc &) const;  DeclaredValue *copy() const;};class NotationDeclaredValue : public GroupDeclaredValue {public:  NotationDeclaredValue(Vector<StringC> &);  AttributeSemantics *makeSemantics(const TokenizedAttributeValue &,				    AttributeContext &,				    const StringC &,				    unsigned &nIdrefs,				    unsigned &nEntityNames) const;  Boolean isNotation() const;  void buildDesc(AttributeDefinitionDesc &) const;  DeclaredValue *copy() const;};class EntityDeclaredValue : public TokenizedDeclaredValue {public:  EntityDeclaredValue(Boolean isList);  AttributeSemantics *makeSemantics(const TokenizedAttributeValue &,				    AttributeContext &,				    const StringC &,				    unsigned &nIdrefs,				    unsigned &nEntityNames) const;  Boolean isEntity() const;  DeclaredValue *copy() const;};class IdDeclaredValue : public TokenizedDeclaredValue {public:  IdDeclaredValue();  AttributeSemantics *makeSemantics(const TokenizedAttributeValue &,				    AttributeContext &,				    const StringC &,				    unsigned &nIdrefs,				    unsigned &nEntityNames) const;  Boolean isId() const;  void buildDesc(AttributeDefinitionDesc &) const;  DeclaredValue *copy() const;};class IdrefDeclaredValue : public TokenizedDeclaredValue {public:  IdrefDeclaredValue(Boolean isList);  AttributeSemantics *makeSemantics(const TokenizedAttributeValue &,				    AttributeContext &,				    const StringC &,				    unsigned &nIdrefs,				    unsigned &nEntityNames) const;  Boolean isIdref() const;  void buildDesc(AttributeDefinitionDesc &) const;  DeclaredValue *copy() const;};class SP_API AttributeDefinition {public:  AttributeDefinition(const StringC &, DeclaredValue *);  virtual ~AttributeDefinition();  virtual ConstPtr<AttributeValue>    makeMissingValue(AttributeContext &) const = 0;  virtual Boolean missingValueWouldMatch(const Text &,					 const AttributeContext &) const;  virtual const AttributeValue *    defaultValue(const AttributeValue *impliedValue) const;  AttributeValue *makeValue(Text &, AttributeContext &, unsigned &) const;  AttributeValue *makeValueFromToken(Text &, 				     AttributeContext &,				     unsigned &) const;    virtual Boolean isConref() const;  virtual Boolean isCurrent() const;  virtual Boolean isFixed() const;  AttributeSemantics *makeSemantics(const AttributeValue *,				    AttributeContext &,				    unsigned &nIdrefs,				    unsigned &nEntityNames) const;  Boolean tokenized() const;  const StringC &name() const;  Boolean containsToken(const StringC &) const;  Boolean isNotation() const;  Boolean isEntity() const;  Boolean isId() const;  Boolean isIdref() const;  void getDesc(AttributeDefinitionDesc &) const;  const Vector<StringC> *getTokens() const;  virtual AttributeDefinition *copy() const = 0;  void setDeclaredValue(DeclaredValue *);private:  virtual void buildDesc(AttributeDefinitionDesc &) const = 0;  virtual AttributeValue *checkValue(AttributeValue *, AttributeContext &) const;  StringC name_;  CopyOwner<DeclaredValue> declaredValue_;};class RequiredAttributeDefinition : public AttributeDefinition {public:  RequiredAttributeDefinition(const StringC &, DeclaredValue *);  ConstPtr<AttributeValue> makeMissingValue(AttributeContext &) const;  void buildDesc(AttributeDefinitionDesc &) const;  AttributeDefinition *copy() const;};class CurrentAttributeDefinition : public AttributeDefinition {public:  CurrentAttributeDefinition(const StringC &, DeclaredValue *, size_t index);  ConstPtr<AttributeValue> makeMissingValue(AttributeContext &) const;  Boolean missingValueWouldMatch(const Text &, const AttributeContext &) const;  AttributeValue *checkValue(AttributeValue *, AttributeContext &) const;  void buildDesc(AttributeDefinitionDesc &) const;  Boolean isCurrent() const;  AttributeDefinition *copy() const;private:  size_t currentIndex_;};class ImpliedAttributeDefinition : public AttributeDefinition {public:  ImpliedAttributeDefinition(const StringC &, DeclaredValue *);  ConstPtr<AttributeValue> makeMissingValue(AttributeContext &) const;  const AttributeValue *defaultValue(const AttributeValue *) const;  void buildDesc(AttributeDefinitionDesc &) const;  AttributeDefinition *copy() const;};class ConrefAttributeDefinition : public ImpliedAttributeDefinition {public:  ConrefAttributeDefinition(const StringC &, DeclaredValue *);  Boolean isConref() const;  void buildDesc(AttributeDefinitionDesc &) const;  AttributeDefinition *copy() const;};class DefaultAttributeDefinition : public AttributeDefinition {public:  DefaultAttributeDefinition(const StringC &, DeclaredValue *,			     AttributeValue *);  ConstPtr<AttributeValue> makeMissingValue(AttributeContext &) const;  Boolean missingValueWouldMatch(const Text &, const AttributeContext &) const;  void buildDesc(AttributeDefinitionDesc &) const;  AttributeDefinition *copy() const;  const AttributeValue *defaultValue(const AttributeValue *) const;private:  ConstPtr<AttributeValue> value_;};class FixedAttributeDefinition : public DefaultAttributeDefinition {public:  FixedAttributeDefinition(const StringC &, DeclaredValue *,			   AttributeValue *);  // check that it's equal to the default  AttributeValue *checkValue(AttributeValue *, AttributeContext &) const;  void buildDesc(AttributeDefinitionDesc &) const;  Boolean isFixed() const;  AttributeDefinition *copy() const;};class SP_API AttributeDefinitionList : public Resource {public:  AttributeDefinitionList(Vector<CopyOwner<AttributeDefinition> > &,			  size_t listIndex,			  Boolean anyCurrent = 0,			  size_t idIndex = size_t(-1),			  size_t notationIndex = size_t(-1));  AttributeDefinitionList(const ConstPtr<AttributeDefinitionList> &);  size_t size() const;  AttributeDefinition *def(size_t);  const AttributeDefinition *def(size_t) const;  Boolean tokenIndex(const StringC &, unsigned &) const;  Boolean tokenIndexUnique(const StringC &, unsigned) const;  Boolean attributeIndex(const StringC &, unsigned &) const;  size_t index() const;  size_t idIndex() const;  size_t notationIndex() const;  Boolean anyCurrent() const;  void setIndex(size_t);  void append(AttributeDefinition *);private:  Vector<CopyOwner<AttributeDefinition> > defs_;  size_t index_;  size_t idIndex_;		// -1 if no ID attribute  size_t notationIndex_;	// -1 if no notation attribute  Boolean anyCurrent_;  ConstPtr<AttributeDefinitionList> prev_;};class AttributeSemantics {public:  AttributeSemantics();  virtual ~AttributeSemantics();  virtual size_t nEntities() const;  virtual ConstPtr<Entity> entity(size_t) const;  virtual ConstPtr<Notation> notation() const;  virtual AttributeSemantics *copy() const = 0;};class EntityAttributeSemantics  : public AttributeSemantics {public:  EntityAttributeSemantics(Vector<ConstPtr<Entity> > &);  size_t nEntities() const;  ConstPtr<Entity> entity(size_t) const;  AttributeSemantics *copy() const;private:  Vector<ConstPtr<Entity> > entity_;};class NotationAttributeSemantics : public AttributeSemantics {public:  NotationAttributeSemantics(const ConstPtr<Notation> &);  ConstPtr<Notation> notation() const;  AttributeSemantics *copy() const;private:  ConstPtr<Notation> notation_;};class SP_API AttributeValue : public Resource {public:  enum Type {    implied,    cdata,    tokenized    };  AttributeValue();  virtual ~AttributeValue();  virtual AttributeSemantics *makeSemantics(const DeclaredValue *,					    AttributeContext &,					    const StringC &,					    unsigned &,					    unsigned &) const;  virtual Type info(const Text *&, const StringC *&) const = 0;  virtual const Text *text() const;  virtual Boolean recoverUnquoted(const StringC &, const Location &,				  AttributeContext &, const StringC &);  static Boolean handleAsUnterminated(const Text &, AttributeContext &);};class SP_API ImpliedAttributeValue : public AttributeValue {public:  ImpliedAttributeValue();  Type info(const Text *&, const StringC *&) const;};class CdataAttributeValue : public AttributeValue {public:  CdataAttributeValue(Text &);  Type info(const Text *&, const StringC *&) const;  const Text *text() const;  Boolean recoverUnquoted(const StringC &, const Location &,			  AttributeContext &, const StringC &);private:  Text text_;};class TokenizedAttributeValue : public AttributeValue {public:  TokenizedAttributeValue(Text &, const Vector<size_t> &);  size_t nTokens() const;  AttributeSemantics *makeSemantics(const DeclaredValue *,				    AttributeContext &,				    const StringC &,				    unsigned &,				    unsigned &) const;  Type info(const Text *&, const StringC *&) const;  const Text *text() const;  const StringC &string() const;  StringC token(size_t) const;  void token(size_t, const Char *&, size_t &) const;  Location tokenLocation(size_t) const;  Boolean tokenLocation(size_t, const ConstPtr<Origin> *&, Index &) const;  Boolean recoverUnquoted(const StringC &, const Location &,			  AttributeContext &, const StringC &);private:  TokenizedAttributeValue(const TokenizedAttributeValue &); // undefined  void operator=(const TokenizedAttributeValue &);	    // undefined  Text text_;  // index into value of each space  // length is number of tokens - 1  Vector<size_t> spaceIndex_;};class SP_API Attribute {public:  Attribute();  Boolean specified() const;  size_t specIndex() const;  const AttributeValue *value() const;  const ConstPtr<AttributeValue> &valuePointer() const;  const AttributeSemantics *semantics() const;  void setSpec(size_t);  void setValue(const ConstPtr<AttributeValue> &);  void setSemantics(AttributeSemantics *);  void clear();private:  size_t specIndexPlus_;  ConstPtr<AttributeValue> value_;  CopyOwner<AttributeSemantics> semantics_;};class SP_API AttributeList  {public:  AttributeList();  AttributeList(const ConstPtr<AttributeDefinitionList> &);

⌨️ 快捷键说明

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