📄 attribute.h
字号:
// 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 + -