jade-1.2.1/ 40775 764 764 0 6610553420 10113 5ustar jjcjjcjade-1.2.1/grove/ 40775 764 764 0 6610553420 11235 5ustar jjcjjcjade-1.2.1/grove/LocNode.h100444 764 764 1467 6604671070 13037 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifndef LocNode_INCLUDED #define LocNode_INCLUDED 1 #include "Boolean.h" #include "Node.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Location; #ifdef GROVE_NAMESPACE #define GROVE_NAMESPACE_SCOPE GROVE_NAMESPACE:: #else #define GROVE_NAMESPACE_SCOPE #endif class GROVE_API LocNode { public: virtual GROVE_NAMESPACE_SCOPE AccessResult getLocation(Location &) const = 0; static const GROVE_NAMESPACE_SCOPE Node::IID iid; static const LocNode *convert(const GROVE_NAMESPACE_SCOPE NodePtr &nd) { const void *p; if (nd && nd->queryInterface(iid, p)) return (const LocNode *)p; else return 0; } }; #undef GROVE_NAMESPACE_SCOPE #ifdef SP_NAMESPACE } #endif #endif /* not LocNode_INCLUDED */ jade-1.2.1/grove/LocNode.cxx100444 764 764 473 6604607710 13366 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #include "config.h" #include "LocNode.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef GROVE_NAMESPACE using namespace GROVE_NAMESPACE; #endif const Node::IID LocNode::iid = "LocNode"; #ifdef SP_NAMESPACE } #endif jade-1.2.1/grove/Node.h100444 764 764 44467 6606574462 12441 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef Node_INCLUDED #define Node_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include #ifdef SP_USE_DLL #ifdef BUILD_LIBGROVE #define GROVE_API SP_DLLEXPORT #else #define GROVE_API SP_DLLIMPORT #endif #else /* not SP_USE_DLL */ #define GROVE_API /* as nothing */ #endif /* not SP_USE_DLL */ #ifdef GROVE_NAMESPACE #define GROVE_NAMESPACE_SCOPE GROVE_NAMESPACE:: #else #define GROVE_NAMESPACE_SCOPE #endif // Supports the following modules: // baseabs prlgabs0 instabs basesds0 instsds0 subdcabs #ifdef GROVE_NAMESPACE namespace GROVE_NAMESPACE { #endif #ifdef SP_MULTI_BYTE #ifdef SP_WCHAR_T_USHORT typedef wchar_t GroveChar; #else typedef unsigned short GroveChar; #endif #else /* not SP_MULTI_BYTE */ typedef unsigned char GroveChar; #endif /* not SP_MULTI_BYTE */ class NodePtr; class NodeListPtr; class NamedNodeListPtr; class GroveString; class NodeVisitor; class SdataMapper; enum AccessResult { accessOK, // success accessNull, // value is null accessTimeout, // timed out waiting for property accessNotInClass // property is not defined for class }; struct GROVE_API ComponentName { enum Id { noId = -1, idAllPropertyNames, idApplicationInfo, idAttributeAssignment, idAttributes, idAttributeValueToken, idCdata, idChar, idChildrenPropertyName, idClassName, idContent, idDataChar, idDataPropertyName, idDataSepPropertyName, idDefaulted, idDefaultedEntities, idDocumentElement, idDocumentType, idDoctypesAndLinktypes, idElement, idElements, idEntities, idEntity, idEntityName, idEntityType, idEpilog, idExternalData, idExternalId, idGeneralEntities, idGeneratedSystemId, idGi, idGoverningDoctype, idGoverning, idGroveRoot, idId, idImplied, idIncluded, idMustOmitEndTag, idName, idNdata, idNotation, idNotationName, idNotations, idOrigin, idOriginToSubnodeRelPropertyName, idParent, idPi, idProlog, idPublicId, idReferent, idSdata, idSgmlConstants, idSgmlDocument, idSubdocument, idSubnodePropertyNames, idSystemData, idSystemId, idText, idToken, idTokenSep, idTreeRoot, idValue }; enum { nIds = idValue + 1 }; static const char *rcsName(Id); static const char *sdqlName(Id); }; struct GROVE_API ClassDef { ComponentName::Id className; const ComponentName::Id *allPropertyNames; const ComponentName::Id *subnodePropertyNames; ComponentName::Id childrenPropertyName; ComponentName::Id dataPropertyName; ComponentName::Id dataSepPropertyName; static const ClassDef sgmlDocument; static const ClassDef sgmlConstants; static const ClassDef dataChar; static const ClassDef element; static const ClassDef attributeAssignment; static const ClassDef attributeValueToken; static const ClassDef pi; static const ClassDef sdata; static const ClassDef documentType; static const ClassDef entity; static const ClassDef notation; static const ClassDef externalId; static const ClassDef externalData; static const ClassDef subdocument; static const ClassDef nonSgml; static const ClassDef message; }; class PropertyValue; class GROVE_API Node { public: // property values // data in GroveString valid till Node destroyed // default is accessNotInClass // Intrinsic properties. virtual AccessResult getOrigin(NodePtr &) const; virtual AccessResult getParent(NodePtr &) const; virtual AccessResult getGroveRoot(NodePtr &) const; virtual AccessResult getTreeRoot(NodePtr &) const; virtual AccessResult getOriginToSubnodeRelPropertyName(ComponentName::Id &) const = 0; AccessResult getClassName(ComponentName::Id &) const; AccessResult getChildrenPropertyName(ComponentName::Id &) const; AccessResult getDataPropertyName(ComponentName::Id &) const; AccessResult getDataSepPropertyName(ComponentName::Id &) const; AccessResult getSubnodePropertyNames(const ComponentName::Id *&) const; AccessResult getAllPropertyNames(const ComponentName::Id *&) const; // this allows you to apply some operation to a node // according to its grove class virtual void accept(NodeVisitor &) = 0; virtual const ClassDef &classDef() const = 0; // not formally properties virtual AccessResult children(NodeListPtr &) const = 0; virtual AccessResult follow(NodeListPtr &) const = 0; // return accessNull if there isn't a first or next // result accessNotInClass if datatype of otsnr is not node-list or named-node-list virtual AccessResult nextSibling(NodePtr &) const; // works the same as nextSibling(), except that when charChunk() // returns accessOK, returns node following that chunk. virtual AccessResult nextChunkSibling(NodePtr &) const; // if result == accessOK, length must be > 0 virtual AccessResult nextChunkAfter(NodePtr &) const; virtual AccessResult charChunk(const SdataMapper &, GroveString &) const; // return accessNotInClass if class doesn't have children property // return accessNull if there isn't a first child virtual AccessResult firstChild(NodePtr &) const; // First of this node's siblings. // accessNotInClass if datatype of otsnr is not node-list or named-node-list virtual AccessResult firstSibling(NodePtr &) const; // The index of this node in the list of all its siblings. virtual AccessResult siblingsIndex(unsigned long &) const; // Has a default implementation in terms of getAttributes and NodeList::ref virtual AccessResult attributeRef(unsigned long, NodePtr &) const; // references the list of the following siblings // 0 is the next sibling // Has a default implementation in terms of nextSibling. virtual AccessResult followSiblingRef(unsigned long, NodePtr &) const; // For a tokenized attribute returns tokens separated by spaces; // null for a non-tokenized attribute. virtual AccessResult tokens(GroveString &) const; // For an element, the number of elements started before it, // that is its zero-based index in a pre-order traversal of // the all the elements in the document. virtual AccessResult elementIndex(unsigned long &) const; // Node identity. // if hash() returns different values for two nodes, // the operator==() must return false for those two nodes. virtual unsigned long hash() const; // Implementation will usually need to call sameGrove(). virtual bool operator==(const Node &node) const = 0; bool operator!=(const Node &node) const { return !(*this == node); } // Does this chunk contains nd? virtual bool chunkContains(const Node &nd) const; bool sameGrove(const Node &node) const; typedef const char *IID; virtual bool queryInterface(IID, const void *&) const; // Property on SGML document giving list of parser messages. virtual AccessResult getMessages(NodeListPtr &) const; // Property of message. enum Severity { info, warning, error }; virtual AccessResult getSeverity(Severity &) const; AccessResult property(ComponentName::Id, const SdataMapper &, PropertyValue &) const; virtual unsigned groveIndex() const = 0; public: virtual void addRef() = 0; // You must call release rather than use delete. // This is done automatically by NodePtr. virtual void release() = 0; protected: // This enforces this. #ifdef __GNUG__ virtual #endif ~Node() { } public: // This is special. // Implemented in terms of charChunk(). AccessResult getChar(const SdataMapper &, GroveChar &) const; // From here on derived algorithmically from property set. // Properties common to several node classes. virtual AccessResult getAttributes(NamedNodeListPtr &) const; virtual AccessResult getName(GroveString &) const; virtual AccessResult getSystemData(GroveString &) const; virtual AccessResult getEntity(NodePtr &) const; virtual AccessResult getEntityName(GroveString &) const; virtual AccessResult getExternalId(NodePtr &) const; virtual AccessResult getNotation(NodePtr &) const; // Properties only on entity virtual AccessResult getText(GroveString &) const; virtual AccessResult getNotationName(GroveString &) const; enum EntityType { text, cdata, sdata, ndata, subdocument, pi }; virtual AccessResult getEntityType(EntityType &) const; virtual AccessResult getDefaulted(bool &) const; // Properties only on externalId virtual AccessResult getPublicId(GroveString &) const; virtual AccessResult getSystemId(GroveString &) const; virtual AccessResult getGeneratedSystemId(GroveString &) const; // Properties only on attributeAssignment. virtual AccessResult getValue(NodeListPtr &) const; virtual AccessResult getTokenSep(GroveChar &) const; virtual AccessResult getImplied(bool &) const; // Properties only on element. virtual AccessResult getGi(GroveString &) const; virtual bool hasGi(GroveString) const; virtual AccessResult getId(GroveString &) const; virtual AccessResult getContent(NodeListPtr &) const; virtual AccessResult getIncluded(bool &) const; virtual AccessResult getMustOmitEndTag(bool &) const; // Properties only on attributeValueToken. virtual AccessResult getToken(GroveString &) const; virtual AccessResult getReferent(NodePtr &) const; // Properties only on doctype virtual AccessResult getGoverning(bool &) const; virtual AccessResult getGeneralEntities(NamedNodeListPtr &) const; virtual AccessResult getNotations(NamedNodeListPtr &) const; // Properties only on sgmlDocument. virtual AccessResult getSgmlConstants(NodePtr &) const; virtual AccessResult getApplicationInfo(GroveString &) const; virtual AccessResult getProlog(NodeListPtr &) const; virtual AccessResult getEpilog(NodeListPtr &) const; virtual AccessResult getDocumentElement(NodePtr &) const; virtual AccessResult getElements(NamedNodeListPtr &) const; virtual AccessResult getEntities(NamedNodeListPtr &) const; virtual AccessResult getDefaultedEntities(NamedNodeListPtr &) const; virtual AccessResult getGoverningDoctype(NodePtr &) const; virtual AccessResult getDoctypesAndLinktypes(NamedNodeListPtr &) const; // Properties only on dataChar. // For a non-SGML data character (resulting from a numeric character reference). // Something like this is being added in the HyTime TC. virtual AccessResult getNonSgml(unsigned long &) const; }; class GROVE_API NodeList { public: virtual AccessResult first(NodePtr &) const = 0; virtual AccessResult rest(NodeListPtr &) const = 0; virtual AccessResult chunkRest(NodeListPtr &) const = 0; // i is a zero based index // This has a default implementation in terms of first and rest. virtual AccessResult ref(unsigned long i, NodePtr &) const; virtual void release() = 0; virtual void addRef() = 0; protected: #ifdef __GNUG__ virtual #endif ~NodeList() { } }; class GROVE_API NamedNodeList { public: // This must NOT assume that the string has been normalized. virtual AccessResult namedNode(GroveString, NodePtr &) const = 0; // Do name normalize appropriate for this NamedNodeList. // Returns new size (always <= old size). // This can be used even if list is empty virtual size_t normalize(GroveChar *, size_t) const = 0; // Could have used subtyping here, but accessing NamedNodeList // positionally typically requires different data structure. virtual NodeListPtr nodeList() const = 0; // Use this when you don't care about the order. // May be much more efficient than nodeList(). virtual NodeListPtr nodeListNoOrder() const; enum Type { elements, attributes, entities, notations, doctypesAndLinktypes }; virtual Type type() const = 0; // If the node is of a class that occurs in the list, // return the value of the property that serves as the name // property for nodes of that class in the named node list. // Return accessNotInClass if the node is not of a class // that occurs in the list. AccessResult nodeName(const NodePtr &, GroveString &) const; virtual void release() = 0; virtual void addRef() = 0; protected: #ifdef __GNUG__ virtual #endif ~NamedNodeList() { } }; class GROVE_API NodePtr { public: NodePtr() : node_(0) { } NodePtr(Node *node) : node_(node) { addRef(); } ~NodePtr() { release(); } NodePtr(const NodePtr &ptr) : node_(ptr.node_) { addRef(); } NodePtr &operator=(const NodePtr &ptr) { ptr.addRef(); release(); node_ = ptr.node_; return *this; } Node *operator->() const { return node_; } Node &operator*() const { return *node_; } AccessResult assignOrigin() { return node_->getOrigin(*this); } AccessResult assignFirstChild() { return node_->firstChild(*this); } AccessResult assignNextSibling() { return node_->nextSibling(*this); } AccessResult assignNextChunkSibling() { return node_->nextChunkSibling(*this); } AccessResult assignNextChunkAfter() { return node_->nextChunkAfter(*this); } AccessResult assignFirstSibling() { return node_->firstSibling(*this); } void assign(Node *node) { if (node) node->addRef(); release(); node_ = node; } void clear() { release(); node_ = 0; } operator bool() const { return node_ != 0; } private: void addRef() const { if (node_) node_->addRef(); } void release() const { if (node_) node_->release(); } Node *node_; }; class GROVE_API NodeListPtr { public: NodeListPtr() : list_(0) { } NodeListPtr(NodeList *list) : list_(list) { addRef(); } ~NodeListPtr() { release(); } NodeListPtr(const NodeListPtr &ptr) : list_(ptr.list_) { addRef(); } NodeListPtr &operator=(const NodeListPtr &ptr) { ptr.addRef(); release(); list_ = ptr.list_; return *this; } AccessResult assignRest() { return list_->rest(*this); } AccessResult assignChunkRest() { return list_->chunkRest(*this); } NodeList *operator->() const { return list_; } NodeList &operator*() const { return *list_; } void assign(NodeList *list) { if (list) list->addRef(); release(); list_ = list; } void clear() { release(); list_ = 0; } operator bool() const { return list_ != 0; } private: void addRef() const { if (list_) list_->addRef(); } void release() const { if (list_) list_->release(); } NodeList *list_; }; class GROVE_API NamedNodeListPtr { public: NamedNodeListPtr() : list_(0) { } NamedNodeListPtr(NamedNodeList *list) : list_(list) { addRef(); } ~NamedNodeListPtr() { release(); } NamedNodeListPtr(const NamedNodeListPtr &ptr) : list_(ptr.list_) { addRef(); } NamedNodeListPtr &operator=(const NamedNodeListPtr &ptr) { ptr.addRef(); release(); list_ = ptr.list_; return *this; } NamedNodeList *operator->() const { return list_; } NamedNodeList &operator*() const { return *list_; } void assign(NamedNodeList *list) { if (list) list->addRef(); release(); list_ = list; } void clear() { release(); list_ = 0; } operator bool() const { return list_ != 0; } private: void addRef() const { if (list_) list_->addRef(); } void release() const { if (list_) list_->release(); } NamedNodeList *list_; }; class GROVE_API GroveString { public: typedef const GroveChar *const_iterator; GroveString() : data_(0), size_(0) { } GroveString(const GroveChar *data, size_t size) : data_(data), size_(size) { } size_t size() const { return size_; } const GroveChar *data() const { return data_; } void assign(const GroveChar *data, size_t size) { data_ = data; size_ = size; } bool operator==(const GroveString &str) const; bool operator!=(const GroveString &str) const { return !(*this == str); } GroveChar operator[](size_t i) const { return data_[i]; } const_iterator begin() const { return data_; } const_iterator end() const { return data_ + size_; } private: const GroveChar *data_; size_t size_; }; class GROVE_API SdataMapper { public: virtual ~SdataMapper(); // Returns a pointer to a single character or null virtual bool sdataMap(GroveString name, GroveString text, GroveChar &) const; }; // See Design Patterns. class GROVE_API NodeVisitor { public: virtual void sgmlDocument(Node &); virtual void sgmlConstants(Node &); virtual void dataChar(Node &); virtual void element(Node &); virtual void attributeAssignment(Node &); virtual void attributeValueToken(Node &); virtual void pi(Node &); virtual void sdata(Node &); virtual void documentType(Node &); virtual void entity(Node &); virtual void notation(Node &); virtual void externalId(Node &); virtual void externalData(Node &); virtual void subdocument(Node &); virtual void nonSgml(Node &); virtual void message(Node &); }; class GROVE_API PropertyValue { public: virtual ~PropertyValue() { } virtual void set(const NodePtr &) = 0; virtual void set(const NodeListPtr &) = 0; virtual void set(const NamedNodeListPtr &) = 0; virtual void set(bool) = 0; virtual void set(GroveChar) = 0; virtual void set(GroveString) = 0; virtual void set(ComponentName::Id) = 0; virtual void set(const ComponentName::Id *) = 0; }; inline AccessResult Node::getChar(const SdataMapper &mapper, GroveChar &c) const { GroveString str; AccessResult ret = charChunk(mapper, str); if (ret == accessOK) c = str[0]; return ret; } inline bool Node::sameGrove(const Node &node) const { return groveIndex() == node.groveIndex(); } inline AccessResult Node::getClassName(ComponentName::Id &name) const { name = classDef().className; return accessOK; } inline AccessResult Node::getChildrenPropertyName(ComponentName::Id &name) const { const ClassDef &def = classDef(); if (def.childrenPropertyName == ComponentName::noId) return accessNull; name = def.childrenPropertyName; return accessOK; } inline AccessResult Node::getDataPropertyName(ComponentName::Id &name) const { const ClassDef &def = classDef(); if (def.dataPropertyName == ComponentName::noId) return accessNull; name = def.dataPropertyName; return accessOK; } inline AccessResult Node::getDataSepPropertyName(ComponentName::Id &name) const { const ClassDef &def = classDef(); if (def.dataSepPropertyName == ComponentName::noId) return accessNull; name = def.dataSepPropertyName; return accessOK; } inline AccessResult Node::getSubnodePropertyNames(const ComponentName::Id *&names) const { names = classDef().subnodePropertyNames; return accessOK; } inline AccessResult Node::getAllPropertyNames(const ComponentName::Id *&names) const { names = classDef().allPropertyNames; return accessOK; } #ifdef GROVE_NAMESPACE } #endif #endif /* not Node_INCLUDED */ jade-1.2.1/grove/Node.cxx100444 764 764 50751 6606574462 13005 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "config.h" #include "Boolean.h" #include "Node.h" #include "macros.h" #include #ifdef GROVE_NAMESPACE namespace GROVE_NAMESPACE { #endif bool Node::queryInterface(IID, const void *&) const { return 0; } AccessResult Node::getMessages(NodeListPtr &) const { return accessNotInClass; } AccessResult Node::getSeverity(Severity &) const { return accessNotInClass; } AccessResult Node::getOrigin(NodePtr &) const { return accessNull; } AccessResult Node::getParent(NodePtr &) const { return accessNull; } AccessResult Node::getGroveRoot(NodePtr &) const { return accessNull; } AccessResult Node::getTreeRoot(NodePtr &nd) const { // FIXME avoid cast -- need copy method nd.assign((Node *)this); for (;;) { AccessResult res = nd->getParent(nd); if (res != accessOK) { if (res == accessTimeout) return res; break; } } return accessOK; } AccessResult Node::getAttributes(NamedNodeListPtr &) const { return accessNotInClass; } AccessResult Node::getName(GroveString &) const { return accessNotInClass; } AccessResult Node::getSystemData(GroveString &) const { return accessNotInClass; } AccessResult Node::getEntity(NodePtr &) const { return accessNotInClass; } AccessResult Node::getEntityName(GroveString &) const { return accessNotInClass; } AccessResult Node::getExternalId(NodePtr &) const { return accessNotInClass; } AccessResult Node::getNotation(NodePtr &) const { return accessNotInClass; } AccessResult Node::getText(GroveString &) const { return accessNotInClass; } AccessResult Node::getNotationName(GroveString &) const { return accessNotInClass; } AccessResult Node::getEntityType(EntityType &) const { return accessNotInClass; } AccessResult Node::getDefaulted(bool &) const { return accessNotInClass; } AccessResult Node::getPublicId(GroveString &) const { return accessNotInClass; } AccessResult Node::getSystemId(GroveString &) const { return accessNotInClass; } AccessResult Node::getGeneratedSystemId(GroveString &) const { return accessNotInClass; } AccessResult Node::getValue(NodeListPtr &) const { return accessNotInClass; } AccessResult Node::getTokenSep(GroveChar &) const { return accessNotInClass; } AccessResult Node::getImplied(bool &) const { return accessNotInClass; } AccessResult Node::getGi(GroveString &) const { return accessNotInClass; } bool Node::hasGi(GroveString) const { return 0; } AccessResult Node::getId(GroveString &) const { return accessNotInClass; } AccessResult Node::getContent(NodeListPtr &) const { return accessNotInClass; } AccessResult Node::getIncluded(bool &) const { return accessNotInClass; } AccessResult Node::getMustOmitEndTag(bool &) const { return accessNotInClass; } AccessResult Node::getToken(GroveString &) const { return accessNotInClass; } AccessResult Node::getReferent(NodePtr &) const { return accessNotInClass; } AccessResult Node::getGoverning(bool &) const { return accessNotInClass; } AccessResult Node::getGeneralEntities(NamedNodeListPtr &) const { return accessNotInClass; } AccessResult Node::getNotations(NamedNodeListPtr &) const { return accessNotInClass; } AccessResult Node::getSgmlConstants(NodePtr &) const { return accessNotInClass; } AccessResult Node::getApplicationInfo(GroveString &) const { return accessNotInClass; } AccessResult Node::getProlog(NodeListPtr &) const { return accessNotInClass; } AccessResult Node::getEpilog(NodeListPtr &) const { return accessNotInClass; } AccessResult Node::getDocumentElement(NodePtr &) const { return accessNotInClass; } AccessResult Node::getElements(NamedNodeListPtr &) const { return accessNotInClass; } AccessResult Node::getEntities(NamedNodeListPtr &) const { return accessNotInClass; } AccessResult Node::getDefaultedEntities(NamedNodeListPtr &) const { return accessNotInClass; } AccessResult Node::getGoverningDoctype(NodePtr &) const { return accessNotInClass; } AccessResult Node::getDoctypesAndLinktypes(NamedNodeListPtr &) const { return accessNotInClass; } AccessResult Node::getNonSgml(unsigned long &) const { return accessNotInClass; } AccessResult Node::nextSibling(NodePtr &) const { return accessNotInClass; } AccessResult Node::nextChunkAfter(NodePtr &nd) const { AccessResult ret = firstChild(nd); switch (ret) { case accessOK: case accessTimeout: return ret; default: break; } for (;;) { ret = nextChunkSibling(nd); switch (ret) { case accessOK: case accessTimeout: return ret; default: break; } ret = getParent(nd); if (ret != accessOK) break; } return ret; } AccessResult Node::nextChunkSibling(NodePtr &) const { return accessNotInClass; } AccessResult Node::firstChild(NodePtr &) const { return accessNotInClass; } AccessResult Node::charChunk(const SdataMapper &, GroveString &) const { return accessNotInClass; } AccessResult Node::firstSibling(NodePtr &) const { return accessNotInClass; } AccessResult Node::siblingsIndex(unsigned long &) const { return accessNotInClass; } AccessResult Node::tokens(GroveString &) const { return accessNotInClass; } unsigned long Node::hash() const { // Hopefully implementations will do better. return 0; } AccessResult Node::elementIndex(unsigned long &) const { return accessNotInClass; } bool Node::chunkContains(const Node &nd) const { return *this == nd; } AccessResult Node::attributeRef(unsigned long n, NodePtr &ptr) const { NamedNodeListPtr atts; AccessResult ret = getAttributes(atts); if (ret != accessOK) return ret; return atts->nodeList()->ref(n, ptr); } AccessResult Node::followSiblingRef(unsigned long n, NodePtr &ptr) const { if (n == 0) return nextSibling(ptr); NodePtr tem; AccessResult ret = nextSibling(tem); if (ret != accessOK) return ret; while (--n > 0) { ret = tem.assignNextSibling(); if (ret != accessOK) return ret; } return tem->nextSibling(ptr); } AccessResult Node::property(ComponentName::Id id, const SdataMapper &mapper, PropertyValue &value) const { AccessResult ret; switch (id) { default: ret = accessNotInClass; break; case ComponentName::idEntityType: { EntityType type; ret = getEntityType(type); if (ret == accessOK) { switch (type) { #define ENUM(e, E) case e: value.set(ComponentName::id##E); break; ENUM(text, Text) ENUM(cdata, Cdata) ENUM(sdata, Sdata) ENUM(ndata, Ndata) ENUM(pi, Pi) ENUM(subdocument, Subdocument) default: ret = accessNotInClass; } } } case ComponentName::idChar: { GroveChar tem; ret = getChar(mapper, tem); if (ret == accessOK) value.set(tem); break; } #define PROP(Name, Type) \ case ComponentName::id##Name: \ { \ Type tem; \ ret = get##Name(tem); \ if (ret == accessOK) \ value.set(tem); \ break; \ } #define PROP_BOOLEAN(name) PROP(name, bool) #define PROP_CHAR(name) PROP(name, GroveChar) #define PROP_COMPNAME(name) PROP(name, ComponentName::Id) #define PROP_CNMLIST(name) PROP(name, const ComponentName::Id *) #define PROP_STRING(name) PROP(name, GroveString) #define PROP_NODE(name) PROP(name, NodePtr) #define PROP_NODELIST(name) PROP(name, NodeListPtr) #define PROP_NMNDLIST(name) PROP(name, NamedNodeListPtr) PROP_COMPNAME(ClassName) PROP_COMPNAME(ChildrenPropertyName) PROP_COMPNAME(DataPropertyName) PROP_COMPNAME(DataSepPropertyName) PROP_COMPNAME(OriginToSubnodeRelPropertyName) PROP_CNMLIST(SubnodePropertyNames) PROP_CNMLIST(AllPropertyNames) PROP_BOOLEAN(Defaulted) PROP_BOOLEAN(Governing) PROP_BOOLEAN(Implied) PROP_BOOLEAN(Included) PROP_BOOLEAN(MustOmitEndTag) PROP_CHAR(TokenSep) PROP_NMNDLIST(Attributes) PROP_NMNDLIST(DefaultedEntities) PROP_NMNDLIST(DoctypesAndLinktypes) PROP_NMNDLIST(Elements) PROP_NMNDLIST(Entities) PROP_NMNDLIST(GeneralEntities) PROP_NMNDLIST(Notations) PROP_NODE(DocumentElement) PROP_NODE(Entity) PROP_NODE(ExternalId) PROP_NODE(GoverningDoctype) PROP_NODE(GroveRoot) PROP_NODE(Notation) PROP_NODE(Origin) PROP_NODE(Parent) PROP_NODE(Referent) PROP_NODE(SgmlConstants) PROP_NODE(TreeRoot) PROP_NODELIST(Content) PROP_NODELIST(Epilog) PROP_NODELIST(Prolog) PROP_NODELIST(Value) PROP_STRING(ApplicationInfo) PROP_STRING(EntityName) PROP_STRING(GeneratedSystemId) PROP_STRING(Gi) PROP_STRING(Id) PROP_STRING(Name) PROP_STRING(NotationName) PROP_STRING(PublicId) PROP_STRING(SystemData) PROP_STRING(SystemId) PROP_STRING(Text) PROP_STRING(Token) } #undef PROP #undef PROP_BOOLEAN #undef PROP_CHAR #undef PROP_NMNDLIST #undef PROP_NODE #undef PROP_NODELIST #undef PROP_STRING return ret; } AccessResult NodeList::ref(unsigned long n, NodePtr &ptr) const { if (n == 0) return first(ptr); NodeListPtr tem; AccessResult ret = rest(tem); if (ret != accessOK) return ret; while (--n > 0) { ret = tem.assignRest(); if (ret != accessOK) return ret; } return tem->first(ptr); } NodeListPtr NamedNodeList::nodeListNoOrder() const { return nodeList(); } struct NodeNameNodeVisitor : public NodeVisitor { NodeNameNodeVisitor(NamedNodeList::Type t, GroveString &name) : ret(accessNotInClass), type(t), nameP(&name) { } AccessResult ret; GroveString *nameP; NamedNodeList::Type type; void element(Node &nd) { if (type == NamedNodeList::elements) ret = nd.getId(*nameP); } void attributeAssignment(Node &nd) { if (type == NamedNodeList::attributes) ret = nd.getName(*nameP); } void documentType(Node &nd) { if (type == NamedNodeList::doctypesAndLinktypes) ret = nd.getName(*nameP); } void entity(Node &nd) { if (type == NamedNodeList::entities) ret = nd.getName(*nameP); } void notation(Node &nd) { if (type == NamedNodeList::notations) ret = nd.getName(*nameP); } }; AccessResult NamedNodeList::nodeName(const NodePtr &node, GroveString &name) const { NodeNameNodeVisitor v(type(), name); node->accept(v); return v.ret; } void NodeVisitor::sgmlDocument(Node &) { } void NodeVisitor::sgmlConstants(Node &) { } void NodeVisitor::dataChar(Node &) { } void NodeVisitor::element(Node &) { } void NodeVisitor::attributeAssignment(Node &) { } void NodeVisitor::attributeValueToken(Node &) { } void NodeVisitor::pi(Node &) { } void NodeVisitor::sdata(Node &) { } void NodeVisitor::documentType(Node &) { } void NodeVisitor::entity(Node &) { } void NodeVisitor::notation(Node &) { } void NodeVisitor::externalId(Node &) { } void NodeVisitor::externalData(Node &) { } void NodeVisitor::subdocument(Node &) { } void NodeVisitor::nonSgml(Node &) { } void NodeVisitor::message(Node &) { } bool GroveString::operator==(const GroveString &str) const { if (size() != str.size()) return 0; if (size() == 0) return 1; if (memcmp(data(), str.data(), size() * sizeof(GroveChar)) == 0) return 1; return 0; } SdataMapper::~SdataMapper() { } bool SdataMapper::sdataMap(GroveString name, GroveString text, GroveChar &) const { return 0; } const char *ComponentName::rcsName(Id id) { static const char *const names[] = { "allpns", "appinfo", "attasgn", "atts", "attvaltk", "cdata", "char", "childpn", "classnm", "content", "datachar", "datapn", "dseppn", "dflted", "dfltents", "docelem", "doctype", "dtlts", "element", "elements", "entities", "entity", "entname", "enttype", "epilog", "extdata", "extid", "genents", "gensysid", "gi", "govdt", "govrning", "grovroot", "id", "implied", "included", "momitend", "name", "ndata", "notation", "notname", "nots", "origin", "otsrelpn", "parent", "pi", "prolog", "pubid", "referent", "sdata", "sgmlcsts", "sgmldoc", "subdoc", "subpns", "sysdata", "sysid", "text", "token", "tokensep", "treeroot", "value", }; if (id < 0 || id >= SIZEOF(names)) return 0; return names[id]; } const char *ComponentName::sdqlName(Id id) { static const char *const names[] = { "all-property-names", "application-info", "attribute-assignment", "attributes", "attribute-value-token", "cdata", "char", "children-property-name", "class-name", "content", "data-char", "data-property-name", "data-sep-property-name", "defaulted?", "defaulted-entities", "document-element", "document-type", "doctypes-and-linktypes", "element", "elements", "entities", "entity", "entity-name", "entity-type", "epilog", "external-data", "external-id", "general-entities", "generated-system-id", "gi", "governing-doctype", "governing?", "grove-root", "id", "implied?", "included?", "must-omit-end-tag?", "name", "ndata", "notation", "notation-name", "notations", "origin", "origin-to-subnode-rel-property-name", "parent", "pi", "prolog", "public-id", "referent", "sdata", "sgml-constants", "sgml-document", "subdocument", "subnode-property-names", "system-data", "system-id", "text", "token", "token-sep", "tree-root", "value", }; if (id < 0 || id >= SIZEOF(names)) return 0; return names[id]; } #define INTRINSIC_PROPS \ ComponentName::idClassName, \ ComponentName::idGroveRoot, \ ComponentName::idSubnodePropertyNames, \ ComponentName::idAllPropertyNames, \ ComponentName::idChildrenPropertyName, \ ComponentName::idDataPropertyName, \ ComponentName::idDataSepPropertyName, \ ComponentName::idParent, \ ComponentName::idTreeRoot, \ ComponentName::idOrigin, \ ComponentName::idOriginToSubnodeRelPropertyName static const ComponentName::Id noProps[] = { ComponentName::noId }; static const ComponentName::Id allProps_externalId[] = { INTRINSIC_PROPS, ComponentName::idPublicId, ComponentName::idSystemId, ComponentName::idGeneratedSystemId, ComponentName::noId }; const ClassDef ClassDef::externalId = { ComponentName::idExternalId, allProps_externalId, noProps, ComponentName::noId, ComponentName::noId, ComponentName::noId }; static const ComponentName::Id allProps_documentType[] = { INTRINSIC_PROPS, ComponentName::idName, ComponentName::idGoverning, ComponentName::idGeneralEntities, ComponentName::idNotations, ComponentName::noId }; static const ComponentName::Id subnodeProps_documentType[] = { ComponentName::idGeneralEntities, ComponentName::idNotations, ComponentName::noId }; const ClassDef ClassDef::documentType = { ComponentName::idDocumentType, allProps_documentType, subnodeProps_documentType, ComponentName::noId, ComponentName::noId, ComponentName::noId }; static const ComponentName::Id allProps_attributeValueToken[] = { INTRINSIC_PROPS, ComponentName::idToken, ComponentName::idEntity, ComponentName::idNotation, ComponentName::idReferent, ComponentName::noId }; const ClassDef ClassDef::attributeValueToken = { ComponentName::idAttributeValueToken, allProps_attributeValueToken, noProps, ComponentName::noId, ComponentName::idToken, ComponentName::noId }; static const ComponentName::Id allProps_sgmlDocument[] = { INTRINSIC_PROPS, ComponentName::idSgmlConstants, ComponentName::idApplicationInfo, ComponentName::idProlog, ComponentName::idEpilog, ComponentName::idGoverningDoctype, ComponentName::idDoctypesAndLinktypes, ComponentName::idDocumentElement, ComponentName::idElements, ComponentName::idEntities, ComponentName::idDefaultedEntities, ComponentName::noId }; static const ComponentName::Id subnodeProps_sgmlDocument[] = { ComponentName::idSgmlConstants, ComponentName::idProlog, ComponentName::idEpilog, ComponentName::idDoctypesAndLinktypes, ComponentName::idDocumentElement, ComponentName::idDefaultedEntities, ComponentName::noId }; const ClassDef ClassDef::sgmlDocument = { ComponentName::idSgmlDocument, allProps_sgmlDocument, subnodeProps_sgmlDocument, ComponentName::noId, ComponentName::noId, ComponentName::noId }; static const ComponentName::Id allProps_dataChar[] = { INTRINSIC_PROPS, ComponentName::idChar, ComponentName::noId }; const ClassDef ClassDef::dataChar = { ComponentName::idDataChar, allProps_dataChar, noProps, ComponentName::noId, ComponentName::idChar, ComponentName::noId }; static const ComponentName::Id allProps_subdocument[] = { INTRINSIC_PROPS, ComponentName::idEntityName, ComponentName::idEntity, ComponentName::noId }; const ClassDef ClassDef::subdocument = { ComponentName::idSubdocument, allProps_subdocument, noProps, ComponentName::noId, ComponentName::noId, ComponentName::noId }; static const ComponentName::Id allProps_pi[] = { INTRINSIC_PROPS, ComponentName::idSystemData, ComponentName::idEntityName, ComponentName::idEntity, ComponentName::noId }; const ClassDef ClassDef::pi = { ComponentName::idPi, allProps_pi, noProps, ComponentName::noId, ComponentName::noId, ComponentName::noId }; static const ComponentName::Id allProps_element[] = { INTRINSIC_PROPS, ComponentName::idGi, ComponentName::idId, ComponentName::idAttributes, ComponentName::idContent, ComponentName::idIncluded, ComponentName::idMustOmitEndTag, ComponentName::noId }; static const ComponentName::Id subnodeProps_element[] = { ComponentName::idAttributes, ComponentName::idContent, ComponentName::noId }; const ClassDef ClassDef::element = { ComponentName::idElement, allProps_element, subnodeProps_element, ComponentName::idContent, ComponentName::noId, ComponentName::noId }; static const ComponentName::Id allProps_notation[] = { INTRINSIC_PROPS, ComponentName::idName, ComponentName::idExternalId, ComponentName::noId }; static const ComponentName::Id subnodeProps_notation[] = { ComponentName::idExternalId, ComponentName::noId }; const ClassDef ClassDef::notation = { ComponentName::idNotation, allProps_notation, subnodeProps_notation, ComponentName::noId, ComponentName::noId, ComponentName::noId }; static const ComponentName::Id allProps_externalData[] = { INTRINSIC_PROPS, ComponentName::idEntityName, ComponentName::idEntity, ComponentName::noId }; const ClassDef ClassDef::externalData = { ComponentName::idExternalData, allProps_externalData, noProps, ComponentName::noId, ComponentName::noId, ComponentName::noId }; static const ComponentName::Id allProps_attributeAssignment[] = { INTRINSIC_PROPS, ComponentName::idValue, ComponentName::idName, ComponentName::idImplied, ComponentName::idTokenSep, ComponentName::noId }; static const ComponentName::Id subnodeProps_attributeAssignment[] = { ComponentName::idValue, ComponentName::noId }; const ClassDef ClassDef::attributeAssignment = { ComponentName::idAttributeAssignment, allProps_attributeAssignment, subnodeProps_attributeAssignment, ComponentName::idValue, ComponentName::noId, ComponentName::idTokenSep }; static const ComponentName::Id allProps_sdata[] = { INTRINSIC_PROPS, ComponentName::idSystemData, ComponentName::idChar, ComponentName::idEntityName, ComponentName::idEntity, ComponentName::noId }; const ClassDef ClassDef::sdata = { ComponentName::idSdata, allProps_sdata, noProps, ComponentName::noId, ComponentName::idChar, ComponentName::noId }; static const ComponentName::Id allProps_entity[] = { INTRINSIC_PROPS, ComponentName::idName, ComponentName::idEntityType, ComponentName::idText, ComponentName::idExternalId, ComponentName::idAttributes, ComponentName::idNotationName, ComponentName::idNotation, ComponentName::idDefaulted, ComponentName::noId }; static const ComponentName::Id subnodeProps_entity[] = { ComponentName::idExternalId, ComponentName::idAttributes, ComponentName::noId }; const ClassDef ClassDef::entity = { ComponentName::idEntity, allProps_entity, subnodeProps_entity, ComponentName::noId, ComponentName::noId, ComponentName::noId }; const ClassDef ClassDef::sgmlConstants = { ComponentName::idSgmlConstants, noProps, noProps, ComponentName::noId, ComponentName::noId, ComponentName::noId }; // FIXME const ClassDef ClassDef::nonSgml = { ComponentName::noId, noProps, noProps, ComponentName::noId, ComponentName::noId, ComponentName::noId }; // FIXME const ClassDef ClassDef::message = { ComponentName::noId, noProps, noProps, ComponentName::noId, ComponentName::noId, ComponentName::noId }; #ifdef GROVE_NAMESPACE } #endif jade-1.2.1/grove/Makefile.sub100444 764 764 40 6606574462 13526 0ustar jjcjjcLIB=grove OBJS=Node.o LocNode.o jade-1.2.1/grove/grove.dsp100444 764 764 10676 6605017012 13206 0ustar jjcjjc# Microsoft Developer Studio Project File - Name="grove" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=grove - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "grove.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "grove.mak" CFG="grove - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "grove - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "grove - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "grove - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\include" /D "BUILD_LIBGROVE" /D "NDEBUG" /D "_WINDOWS" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x20200000" /subsystem:windows /dll /machine:I386 /out:"..\bin\grove.dll" # SUBTRACT LINK32 /profile /map !ELSEIF "$(CFG)" == "grove - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\Debug" # PROP BASE Intermediate_Dir ".\Debug" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir ".\Debug" # PROP Intermediate_Dir ".\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\include" /D "BUILD_LIBGROVE" /D "_DEBUG" /D "_WINDOWS" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x20200000" /subsystem:windows /dll /debug /machine:I386 /out:"..\dbgbin\grove.dll" # SUBTRACT LINK32 /incremental:no !ENDIF # Begin Target # Name "grove - Win32 Release" # Name "grove - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # Begin Source File SOURCE=.\LocNode.cxx # End Source File # Begin Source File SOURCE=.\Node.cxx # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # Begin Source File SOURCE=.\LocNode.h # End Source File # Begin Source File SOURCE=.\Node.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # End Group # End Target # End Project jade-1.2.1/groveoa/ 40775 764 764 0 6610553420 11555 5ustar jjcjjcjade-1.2.1/groveoa/CGroveBuilder.cxx100444 764 764 17067 6604607710 15126 0ustar jjcjjc// CGroveBuilder.cpp : Implementation of CGroveBuilder #include "stdafx.h" #include "groveoa.h" #include "CGroveBuilder.h" #include "GroveBuilder.h" #include "ErrorCountEventHandler.h" #include "GroveNode.h" #include "MessageTable.h" #include #include #include #define STRICT #include using SP_NAMESPACE::StringC; #ifdef SP_NO_STD_NAMESPACE #define std /* as nothing */ #endif #define TRY try { #define CATCH } catch (std::bad_alloc) { return E_OUTOFMEMORY; } /* We need to keep a reference to the entity manager, because StoragePos can use storage managers that are owned by the entity manager. */ class SpParserThread : public ParserThread, public SP_NAMESPACE::Messenger, public SP_NAMESPACE::MessageFormatter { public: SpParserThread() : cancel_(0) { } ~SpParserThread(); void run(); void dispatchMessage(const SP_NAMESPACE::Message &); SP_NAMESPACE::Boolean getMessageText(const SP_NAMESPACE::MessageFragment &, SP_NAMESPACE::StringC &); SP_NAMESPACE::Owner eh; SP_NAMESPACE::SgmlParser parser; SP_NAMESPACE::Ptr em; static unsigned __stdcall start(void *p); private: sig_atomic_t cancel_; HANDLE thread_; }; STDMETHODIMP CGroveBuilder::parse(BSTR sysid, SgmlDocumentNode **retval) { TRY SpParserThread *parserThread = new SpParserThread; SP_NAMESPACE::Owner tem(parserThread); GROVE_NAMESPACE::NodePtr root; parserThread->eh = SP_NAMESPACE::GroveBuilder::make(0, parserThread, parserThread, validateOnly_ != 0, root); StringC str(sysid, sysid ? ::SysStringLen(sysid) : 0); app_.initParser(str, parserThread->parser, parserThread->em); parserThread->run(); return makeRootNode(root, tem, retval); CATCH } static HRESULT makeBSTR(const StringC &str, BSTR *retval) { if (str.size() == 0) *retval = 0; else { *retval = ::SysAllocStringLen(str.data(), str.size()); if (!*retval) return E_OUTOFMEMORY; } return NOERROR; } void convertBSTR(BSTR str, StringC &result) { if (str) result.assign(str, ::SysStringLen(str)); else result.resize(0); } STDMETHODIMP CGroveBuilder::get_ExtraCatalogs(BSTR *retval) { return makeBSTR(app_.extraCatalogs(), retval); } STDMETHODIMP CGroveBuilder::put_ExtraCatalogs(BSTR str) { TRY StringC tem; convertBSTR(str, tem); app_.setExtraCatalogs(tem); return NOERROR; CATCH } STDMETHODIMP CGroveBuilder::get_DefaultCatalogs(BSTR *retval) { return makeBSTR(app_.defaultCatalogs(), retval); } STDMETHODIMP CGroveBuilder::put_DefaultCatalogs(BSTR str) { TRY StringC tem; convertBSTR(str, tem); app_.setDefaultCatalogs(tem); return NOERROR; CATCH } STDMETHODIMP CGroveBuilder::get_ExtraDirectories(BSTR *retval) { return makeBSTR(app_.extraDirectories(), retval); } STDMETHODIMP CGroveBuilder::put_ExtraDirectories(BSTR str) { TRY StringC tem; convertBSTR(str, tem); app_.setExtraDirectories(tem); return NOERROR; CATCH } STDMETHODIMP CGroveBuilder::get_DefaultDirectories(BSTR *retval) { return makeBSTR(app_.defaultDirectories(), retval); } STDMETHODIMP CGroveBuilder::put_DefaultDirectories(BSTR str) { TRY StringC tem; convertBSTR(str, tem); app_.setDefaultDirectories(tem); return NOERROR; CATCH } STDMETHODIMP CGroveBuilder::get_Encoding(BSTR *retval) { return makeBSTR(app_.encoding(), retval); } STDMETHODIMP CGroveBuilder::put_Encoding(BSTR str) { TRY StringC tem; convertBSTR(str, tem); app_.setEncoding(tem); // FIXME give an error for a illegal encoding return NOERROR; CATCH } STDMETHODIMP CGroveBuilder::get_DefaultEncoding(BSTR *retval) { return makeBSTR(app_.defaultEncoding(), retval); } STDMETHODIMP CGroveBuilder::put_DefaultEncoding(BSTR str) { TRY StringC tem; convertBSTR(str, tem); app_.setDefaultEncoding(tem); return NOERROR; CATCH } STDMETHODIMP CGroveBuilder::get_Includes(BSTR *retval) { TRY SP_NAMESPACE::StringC tem; for (size_t i = 0; i < app_.options.includes.size(); i++) { if (i) tem += ','; tem += app_.options.includes[i]; } return makeBSTR(tem, retval); CATCH } STDMETHODIMP CGroveBuilder::put_Includes(BSTR str) { TRY SP_NAMESPACE::Vector &v = app_.options.includes; v.resize(0); if (str) { SP_NAMESPACE::Boolean started = 0; for (; *str; str++) { if (*str == ',') started = 0; else { if (!started) { v.resize(v.size() + 1); started = 1; } v.back() += *str; } } } return NOERROR; CATCH } STDMETHODIMP CGroveBuilder::get_Warning(WarningType type, VARIANT_BOOL *retval) { *retval = 0; SP_NAMESPACE::PackedBoolean *p = lookupWarningType(type); if (!p) return E_INVALIDARG; *retval = *p ? -1 : 0; return NOERROR; } STDMETHODIMP CGroveBuilder::put_Warning(WarningType type, VARIANT_BOOL b) { SP_NAMESPACE::PackedBoolean *p = lookupWarningType(type); if (!p) return E_INVALIDARG; *p = b ? 1 : 0; return NOERROR; } SP_NAMESPACE::PackedBoolean *CGroveBuilder::lookupWarningType(WarningType type) { switch (type) { #define ENTRY(w) case warning##w: return &app_.options.warn##w; ENTRY(SgmlDecl) ENTRY(DuplicateEntity) ENTRY(Should) ENTRY(UndefinedElement) ENTRY(DefaultEntityReference) ENTRY(MixedContent) ENTRY(EmptyTag) ENTRY(UnusedMap) ENTRY(UnusedParam) ENTRY(NotationSystemId) #undef ENTRY case warningUnclosedTag: return &app_.options.noUnclosedTag; case warningNet: return &app_.options.noNet; } return 0; } STDMETHODIMP CGroveBuilder::get_Error(ErrorType type, VARIANT_BOOL *retval) { *retval = 0; if (type == errorValid) { *retval = (app_.options.typeValid == 0 ? 0 : -1); return NOERROR; } SP_NAMESPACE::PackedBoolean *p = lookupErrorType(type); if (!p) return E_INVALIDARG; *retval = *p ? -1 : 0; return NOERROR; } STDMETHODIMP CGroveBuilder::put_Error(ErrorType type, VARIANT_BOOL b) { if (type == errorValid) { app_.options.typeValid = (b ? SP_NAMESPACE::ParserOptions::sgmlDeclTypeValid : 0); return NOERROR; } SP_NAMESPACE::PackedBoolean *p = lookupErrorType(type); if (!p) return E_INVALIDARG; *p = b ? 1 : 0; return NOERROR; } SP_NAMESPACE::PackedBoolean *CGroveBuilder::lookupErrorType(ErrorType type) { switch (type) { #define ENTRY(e) case error##e: return &app_.options.error##e; ENTRY(Idref) ENTRY(Significant) ENTRY(Afdr) #undef ENTRY case errorLpdNotation: return &errorLpdNotation_; } return 0; } STDMETHODIMP CGroveBuilder::get_ValidateOnly(VARIANT_BOOL *retval) { *retval = validateOnly_; return NOERROR; } STDMETHODIMP CGroveBuilder::put_ValidateOnly(VARIANT_BOOL b) { validateOnly_ = b; return NOERROR; } SpParserThread::~SpParserThread() { cancel_ = 1; ::WaitForSingleObject(thread_, INFINITE); ::CloseHandle(thread_); } unsigned __stdcall SpParserThread::start(void *p) { SpParserThread *arg = (SpParserThread *)p; try { arg->parser.parseAll(*arg->eh, &arg->cancel_); } catch (std::bad_alloc) { // FIXME how to report this? } arg->eh.clear(); // Release the parser SP_NAMESPACE::SgmlParser tem; tem.swap(arg->parser); return 0; } void SpParserThread::run() { unsigned id; thread_ = HANDLE(_beginthreadex(NULL, 0, start, this, 0, &id)); } void SpParserThread::dispatchMessage(const SP_NAMESPACE::Message &) { } SP_NAMESPACE::Boolean SpParserThread::getMessageText(const SP_NAMESPACE::MessageFragment &frag, StringC &text) { SP_NAMESPACE::String str; if (!SP_NAMESPACE::MessageTable::instance()->getText(frag, str)) return 0; text.assign((const SP_NAMESPACE::Char *)str.data(), str.size()); return 1; } jade-1.2.1/groveoa/CGroveBuilder.h100444 764 764 3713 6604607710 14524 0ustar jjcjjc// CGroveBuilder.h : Declaration of the CGroveBuilder #ifndef __GROVEBUILDER_H_ #define __GROVEBUILDER_H_ #include "resource.h" // main symbols #include "config.h" #include "WinApp.h" #include "Message.h" #include "MessageFormatter.h" ///////////////////////////////////////////////////////////////////////////// // CGroveBuilder class ATL_NO_VTABLE CGroveBuilder : public CComObjectRoot, public CComCoClass, public IDispatchImpl<_GroveBuilder, &IID__GroveBuilder, &LIBID_GROVE> { public: CGroveBuilder() : validateOnly_(0), errorLpdNotation_(0) { } DECLARE_REGISTRY_RESOURCEID(IDR_GROVEBUILDER) BEGIN_COM_MAP(CGroveBuilder) COM_INTERFACE_ENTRY(_GroveBuilder) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() // IGroveBuilder public: STDMETHOD(parse)(BSTR sysid, SgmlDocumentNode **root); STDMETHOD(get_ExtraCatalogs)(BSTR *); STDMETHOD(put_ExtraCatalogs)(BSTR); STDMETHOD(get_DefaultCatalogs)(BSTR *); STDMETHOD(put_DefaultCatalogs)(BSTR); STDMETHOD(get_ExtraDirectories)(BSTR *); STDMETHOD(put_ExtraDirectories)(BSTR); STDMETHOD(get_DefaultDirectories)(BSTR *); STDMETHOD(put_DefaultDirectories)(BSTR); STDMETHOD(get_Encoding)(BSTR *); STDMETHOD(put_Encoding)(BSTR); STDMETHOD(get_DefaultEncoding)(BSTR *); STDMETHOD(put_DefaultEncoding)(BSTR); STDMETHOD(get_Includes)(BSTR *); STDMETHOD(put_Includes)(BSTR); STDMETHOD(get_Warning)(WarningType, VARIANT_BOOL *); STDMETHOD(put_Warning)(WarningType, VARIANT_BOOL); STDMETHOD(get_Error)(ErrorType, VARIANT_BOOL *); STDMETHOD(put_Error)(ErrorType, VARIANT_BOOL); STDMETHOD(get_ValidateOnly)(VARIANT_BOOL *); STDMETHOD(put_ValidateOnly)(VARIANT_BOOL); private: SP_NAMESPACE::PackedBoolean *lookupWarningType(WarningType type); SP_NAMESPACE::PackedBoolean *lookupErrorType(ErrorType type); SP_NAMESPACE::WinApp app_; VARIANT_BOOL validateOnly_; // This is just for binary compatibility. SP_NAMESPACE::PackedBoolean errorLpdNotation_; }; #endif //__GROVEBUILDER_H_ jade-1.2.1/groveoa/GroveBuilder.rgs100444 764 764 1046 6604607710 14762 0ustar jjcjjcHKCR { SP.GroveBuilder.1 = s 'GroveBuilder Class' { CLSID = s '{557CE382-9EBD-11D0-9083-0020AF41CFC2}' } SP.GroveBuilder = s 'GroveBuilder Class' { CLSID = s '{557CE382-9EBD-11D0-9083-0020AF41CFC2}' CurVer = s 'SP.GroveBuilder.1' } NoRemove CLSID { ForceRemove {557CE382-9EBD-11D0-9083-0020AF41CFC2} = s 'GroveBuilder Class' { ProgID = s 'SP.GroveBuilder.1' VersionIndependentProgID = s 'SP.GroveBuilder' ForceRemove 'Programmable' InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } } } } jade-1.2.1/groveoa/GroveNode.cxx100444 764 764 74611 6604607710 14320 0ustar jjcjjc// GroveNode.cxx #include "stdafx.h" #include "groveoa.h" #include "config.h" #include "GroveNode.h" #include "Boolean.h" #include "Node.h" #include "LocNode.h" #include "PointerTable.h" #include "NamedResource.h" #include "Ptr.h" #include "Owner.h" #include "ExtendEntityManager.h" #include "StorageManager.h" #include #include #include #include #ifdef SP_NO_STD_NAMESPACE #define std /* as nothing */ #endif #define TRY try { #define CATCH } catch (std::bad_alloc) { return E_OUTOFMEMORY; } // A NULL BSTR is supposed to be equivalent to an empty BSTR // but not everybody gets this right (perl build 306, for example) inline BSTR makeEmptyBSTR() { return ::SysAllocStringLen(0, 0); } using GROVE_NAMESPACE::NodePtr; using GROVE_NAMESPACE::NodeListPtr; using GROVE_NAMESPACE::NamedNodeListPtr; using GROVE_NAMESPACE::GroveString; using GROVE_NAMESPACE::GroveChar; using GROVE_NAMESPACE::accessOK; using GROVE_NAMESPACE::accessNull; using GROVE_NAMESPACE::accessNotInClass; using GROVE_NAMESPACE::SdataMapper; class NodeTable; typedef SP_NAMESPACE::Ptr NodeTablePtr; class CNodeBase { public: virtual ~CNodeBase(); void init(const NodePtr &nd, const NodeTablePtr &); static HRESULT make(const NodePtr &, const NodeTablePtr &, Node **); static BSTR makeBSTR(const GroveString &); static const GROVE_NAMESPACE::Node &key(const CNodeBase &obj) { return *obj.nd_; } static unsigned long hash(const GROVE_NAMESPACE::Node &nd) { return nd.hash(); } virtual Node *asNode() = 0; HRESULT internalGetStoragePos(StoragePos **); protected: CNodeBase() { } NodePtr nd_; NodeTablePtr table_; }; class NodeTable : public SP_NAMESPACE::Resource, public SP_NAMESPACE::PointerTable { public: NodeTable(SP_NAMESPACE::Owner &thd) { thd.swap(thread_); } private: SP_NAMESPACE::Owner thread_; }; class ATL_NO_VTABLE CNodeList : public CComObjectRoot, public IDispatchImpl { public: CNodeList() { } BEGIN_COM_MAP(CNodeList) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(NodeList) END_COM_MAP() STDMETHOD(get_Count)(long *); STDMETHOD(get_Item)(long, Node **); STDMETHOD(get__NewEnum)(IUnknown **); STDMETHOD(First)(Node **); STDMETHOD(Rest)(NodeList **); static HRESULT make(const NodeListPtr &, const NodeTablePtr &, NodeList **); private: NodeListPtr nl_; NodeTablePtr table_; }; class ATL_NO_VTABLE CChunkNodeList : public CComObjectRoot, public IDispatchImpl { public: CChunkNodeList() { } BEGIN_COM_MAP(CChunkNodeList) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(NodeList) END_COM_MAP() STDMETHOD(get_Count)(long *); STDMETHOD(get_Item)(long, Node **); STDMETHOD(get__NewEnum)(IUnknown **); STDMETHOD(First)(Node **); STDMETHOD(Rest)(NodeList **); static HRESULT make(const NodeListPtr &, const NodeTablePtr &, NodeList **); private: NodeListPtr nl_; NodeTablePtr table_; }; class ATL_NO_VTABLE CNamedNodeList : public CComObjectRoot, public IDispatchImpl { public: CNamedNodeList() { } BEGIN_COM_MAP(CNamedNodeList) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(NamedNodeList) END_COM_MAP() STDMETHOD(get_Count)(long *); STDMETHOD(get_Item)(BSTR, Node **); STDMETHOD(get__NewEnum)(IUnknown **); STDMETHOD(get_NodeList)(NodeList **); STDMETHOD(Normalize)(BSTR, BSTR *); STDMETHOD(NodeName)(Node *, BSTR *); static HRESULT make(const NamedNodeListPtr &, const NodeTablePtr &, NamedNodeList **); private: NamedNodeListPtr nnl_; NodeTablePtr table_; }; class ATL_NO_VTABLE CStoragePos : public CComObjectRoot, public IDispatchImpl { public: CStoragePos() { } BEGIN_COM_MAP(CStoragePos) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(StoragePos) END_COM_MAP() STDMETHOD(get_StorageManagerName)(BSTR *retval) { const char *s = loc_.storageObjectSpec->storageManager->type(); BSTR tem = ::SysAllocStringLen(0, strlen(s)); *retval = tem; if (!tem) return E_OUTOFMEMORY; while (*s) *tem++ = *s++; return NOERROR; } STDMETHOD(get_StorageObjectId)(BSTR *retval) { const SP_NAMESPACE::StringC &id = loc_.actualStorageId; CComBSTR tem(id.size(), id.data()); *retval = tem.Detach(); return *retval ? NOERROR : E_OUTOFMEMORY; } STDMETHOD(get_LineNumber)(long *retval) { *retval = loc_.lineNumber; if (*retval < 0) *retval = 0; return NOERROR; } STDMETHOD(get_ColumnNumber)(long *retval) { *retval = loc_.columnNumber; if (*retval < 0) *retval = 0; return NOERROR; } STDMETHOD(get_ByteIndex)(long *retval) { *retval = loc_.byteIndex + 1; return NOERROR; } STDMETHOD(get_CharacterIndex)(long *retval) { *retval = loc_.storageObjectOffset + 1; return NOERROR; } static HRESULT make(const SP_NAMESPACE::ExternalInfo *, SP_NAMESPACE::Offset, const NodePtr &, StoragePos **); private: SP_NAMESPACE::StorageObjectLocation loc_; NodePtr nd_; }; #define NODE_PROP2(xfunc, ifunc) \ STDMETHOD(xfunc)(Node **retval) { \ TRY \ *retval = 0; \ NodePtr nd; \ if (nd_->ifunc(nd) == accessOK) \ return make(nd, table_, retval); \ return NOERROR; \ CATCH \ } #define NODE_PROP(Name) NODE_PROP2(get_##Name, get##Name) #define DERIVED_NODE_PROP2(xfunc, ifunc, cls) \ STDMETHOD(xfunc)(cls##Node **retval) { \ TRY \ *retval = 0; \ NodePtr nd; \ if (nd_->ifunc(nd) == accessOK) { \ Node *base; \ HRESULT hres = make(nd, table_, &base); \ *retval = (cls##Node *)base; \ return hres; \ } \ return NOERROR; \ CATCH \ } #define DERIVED_NODE_PROP(Name, cls) DERIVED_NODE_PROP2(get_##Name, get##Name, cls) #define NODE_LIST_PROP2(xfunc, ifunc) \ STDMETHOD(xfunc)(NodeList **retval) { \ TRY \ *retval = 0; \ NodeListPtr nl; \ if (nd_->ifunc(nl) == accessOK) \ return CNodeList::make(nl, table_, retval); \ return NOERROR; \ CATCH \ } #define NODE_LIST_PROP(Name) NODE_LIST_PROP2(get_##Name, get##Name) #define CHUNK_NODE_LIST_PROP2(xfunc, ifunc) \ STDMETHOD(xfunc)(NodeList **retval) { \ TRY \ *retval = 0; \ NodeListPtr nl; \ if (nd_->ifunc(nl) == accessOK) \ return CChunkNodeList::make(nl, table_, retval); \ return NOERROR; \ CATCH \ } #define NAMED_NODE_LIST_PROP2(xfunc, ifunc) \ STDMETHOD(xfunc)(NamedNodeList **retval) { \ TRY \ *retval = 0; \ NamedNodeListPtr nnl; \ if (nd_->ifunc(nnl) == accessOK) \ return CNamedNodeList::make(nnl, table_, retval); \ return NOERROR; \ CATCH \ } #define NAMED_NODE_LIST_PROP(Name) \ NAMED_NODE_LIST_PROP2(get_##Name, get##Name) #define BOOL_PROP2(xfunc, ifunc) \ STDMETHOD(xfunc)(VARIANT_BOOL *retval) { \ TRY \ bool b; \ if (nd_->ifunc(b) == accessOK) \ *retval = b ? -1 : 0; \ else \ *retval = 0; \ return NOERROR; \ CATCH \ } #define BOOL_PROP(Name) BOOL_PROP2(get_##Name, get##Name) #define STRING_PROP2(xfunc, ifunc) \ STDMETHOD(xfunc)(BSTR *retval) { \ TRY \ *retval = 0; \ GroveString str; \ if (nd_->ifunc(str) == accessOK) \ *retval = makeBSTR(str); \ else \ *retval = makeEmptyBSTR(); \ return NOERROR; \ CATCH \ } #define STRING_PROP(Name) STRING_PROP2(get_##Name, get##Name) #define NULL_STRING_PROP(Name) \ STRING_PROP(Name) \ STDMETHOD(get_##Name##Null)(VARIANT_BOOL *retval) { \ TRY \ *retval = 0; \ GroveString str; \ if (nd_->get##Name(str) == accessNull) \ *retval = -1; \ return NOERROR; \ CATCH \ } template class INodeImpl : public IDispatchImpl, public CNodeBase { public: NODE_PROP(Parent) NODE_PROP(Origin) NODE_PROP(GroveRoot) NODE_PROP(TreeRoot) NODE_LIST_PROP2(get_Children, children) CHUNK_NODE_LIST_PROP2(get_ChunkChildren, children) NODE_PROP2(FirstChild, firstChild) NODE_PROP2(NextSibling, nextSibling) NODE_PROP2(NextChunkSibling, nextChunkSibling) STDMETHOD(get_Class)(NodeClass *retval) { TRY *retval = nodeClass; return NOERROR; CATCH } STDMETHOD(get_SiblingIndex)(long *retval) { TRY unsigned long n; if (nd_->siblingsIndex(n) == accessOK) *retval = n + 1; else *retval = 0; return NOERROR; CATCH } Node *asNode() { return this; } STDMETHOD(get_StoragePos)(StoragePos **retval) { return internalGetStoragePos(retval); } }; class ATL_NO_VTABLE CElementNode : public CComObjectRoot, public INodeImpl { public: CElementNode() { } BEGIN_COM_MAP(CElementNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ElementNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() STRING_PROP(Gi) NAMED_NODE_LIST_PROP(Attributes) STRING_PROP(Id) NODE_LIST_PROP(Content) CHUNK_NODE_LIST_PROP2(get_ChunkContent, getContent) BOOL_PROP(Included) BOOL_PROP(MustOmitEndTag) }; class ATL_NO_VTABLE CAttributeAssignmentNode : public CComObjectRoot, public INodeImpl { public: CAttributeAssignmentNode() { } BEGIN_COM_MAP(CAttributeAssignmentNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(AttributeAssignmentNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() STRING_PROP(Name) BOOL_PROP(Implied) NODE_LIST_PROP(Value) CHUNK_NODE_LIST_PROP2(get_ChunkValue, getValue) STDMETHOD(get_TokenSep)(long *retval) { TRY GroveChar ch; if (nd_->getTokenSep(ch) == accessOK) *retval = ch; else *retval = -1; return NOERROR; CATCH } STDMETHOD(get_StringValue)(BSTR *retval) { TRY *retval = 0; bool implied; if (nd_->getImplied(implied) == accessOK && implied) { *retval = makeEmptyBSTR(); return NOERROR; } GroveString tokens; if (nd_->tokens(tokens) == accessOK) { *retval = makeBSTR(tokens); return NOERROR; } NodePtr first; if (nd_->firstChild(first) == accessOK) { size_t len = 0; NodePtr tem(first); do { GroveString chunk; if (tem->charChunk(SdataMapper(), chunk) == accessOK) len += chunk.size(); } while (tem.assignNextChunkSibling() == accessOK); GroveChar *p = ::SysAllocStringLen(0, len); if (!p) return E_OUTOFMEMORY; *retval = p; tem = first; do { GroveString chunk; if (tem->charChunk(SdataMapper(), chunk) == accessOK) { memcpy(p, chunk.data(), chunk.size()*sizeof(*p)); p += chunk.size(); } } while (tem.assignNextChunkSibling() == accessOK); } return NOERROR; CATCH } }; class ATL_NO_VTABLE CAttributeValueTokenNode : public CComObjectRoot, public INodeImpl { public: CAttributeValueTokenNode() { } BEGIN_COM_MAP(CAttributeValueTokenNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(AttributeValueTokenNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() STRING_PROP(Token) DERIVED_NODE_PROP(Referent, Element) DERIVED_NODE_PROP(Entity, Entity) DERIVED_NODE_PROP(Notation, Notation) }; class ATL_NO_VTABLE CSgmlDocumentNode : public CComObjectRoot, public INodeImpl { public: CSgmlDocumentNode() { } BEGIN_COM_MAP(CSgmlDocumentNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(SgmlDocumentNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() DERIVED_NODE_PROP(DocumentElement, Element) DERIVED_NODE_PROP(SgmlConstants, SgmlConstants) NULL_STRING_PROP(ApplicationInfo) NODE_LIST_PROP(Prolog) NODE_LIST_PROP(Epilog) NAMED_NODE_LIST_PROP(Elements) NAMED_NODE_LIST_PROP(Entities) NAMED_NODE_LIST_PROP(DefaultedEntities) NAMED_NODE_LIST_PROP(DoctypesAndLinktypes) DERIVED_NODE_PROP(GoverningDoctype, DocumentType) NODE_LIST_PROP(Messages) }; class ATL_NO_VTABLE CDataCharNode : public CComObjectRoot, public INodeImpl { public: CDataCharNode() { } BEGIN_COM_MAP(CDataCharNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(DataCharNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() STDMETHOD(get_Char)(long *); STDMETHOD(get_NonSgml)(long *); STDMETHOD(get_CharChunk)(BSTR *); }; class ATL_NO_VTABLE CSgmlConstantsNode : public CComObjectRoot, public INodeImpl { public: CSgmlConstantsNode() { } BEGIN_COM_MAP(CSgmlConstantsNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(SgmlConstantsNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() }; class ATL_NO_VTABLE CPiNode : public CComObjectRoot, public INodeImpl { public: CPiNode() { } BEGIN_COM_MAP(CPiNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(PiNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() STRING_PROP(SystemData) DERIVED_NODE_PROP(Entity, Entity) STRING_PROP(EntityName) }; class ATL_NO_VTABLE CSdataNode : public CComObjectRoot, public INodeImpl { public: CSdataNode() { } BEGIN_COM_MAP(CSdataNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(SdataNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() STRING_PROP(SystemData) DERIVED_NODE_PROP(Entity, Entity) STRING_PROP(EntityName) }; class ATL_NO_VTABLE CDocumentTypeNode : public CComObjectRoot, public INodeImpl { public: CDocumentTypeNode() { } BEGIN_COM_MAP(CDocumentTypeNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(DocumentTypeNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() STRING_PROP(Name) BOOL_PROP(Governing) NAMED_NODE_LIST_PROP(GeneralEntities) NAMED_NODE_LIST_PROP(Notations) }; class ATL_NO_VTABLE CEntityNode : public CComObjectRoot, public INodeImpl { public: CEntityNode() { } BEGIN_COM_MAP(CEntityNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(EntityNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() STRING_PROP(Name) NULL_STRING_PROP(Text) DERIVED_NODE_PROP(Notation, Notation) STRING_PROP(NotationName) BOOL_PROP(Defaulted) NAMED_NODE_LIST_PROP(Attributes) DERIVED_NODE_PROP(ExternalId, ExternalId) STDMETHOD(get_EntityType)(EntityType *retval) { GROVE_NAMESPACE::Node::EntityType type; if (nd_->getEntityType(type) == accessOK) *retval = EntityType(type); return NOERROR; } }; class ATL_NO_VTABLE CNotationNode : public CComObjectRoot, public INodeImpl { public: CNotationNode() { } BEGIN_COM_MAP(CNotationNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(NotationNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() STRING_PROP(Name) DERIVED_NODE_PROP(ExternalId, ExternalId) }; class ATL_NO_VTABLE CExternalIdNode : public CComObjectRoot, public INodeImpl { public: CExternalIdNode() { } BEGIN_COM_MAP(CExternalIdNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ExternalIdNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() NULL_STRING_PROP(PublicId) NULL_STRING_PROP(SystemId) STRING_PROP(GeneratedSystemId) }; class ATL_NO_VTABLE CExternalDataNode : public CComObjectRoot, public INodeImpl { public: CExternalDataNode() { } BEGIN_COM_MAP(CExternalDataNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ExternalDataNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() DERIVED_NODE_PROP(Entity, Entity) STRING_PROP(EntityName) }; class ATL_NO_VTABLE CSubdocNode : public CComObjectRoot, public INodeImpl { public: CSubdocNode() { } BEGIN_COM_MAP(CSubdocNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(SubdocNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() DERIVED_NODE_PROP(Entity, Entity) STRING_PROP(EntityName) }; class ATL_NO_VTABLE CMessageNode : public CComObjectRoot, public INodeImpl { public: CMessageNode() { } BEGIN_COM_MAP(CMessageNode) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(MessageNode) COM_INTERFACE_ENTRY(Node) END_COM_MAP() STRING_PROP(Text) STDMETHOD(get_Severity)(Severity *retval) { TRY GROVE_NAMESPACE::Node::Severity type; if (nd_->getSeverity(type) == accessOK) *retval = Severity(type); return NOERROR; CATCH } }; class ATL_NO_VTABLE CEnumNodeList : public CComObjectRoot, public IEnumVARIANT { public: CEnumNodeList() { } BEGIN_COM_MAP(CEnumNodeList) COM_INTERFACE_ENTRY(IEnumVARIANT) END_COM_MAP() // IEnumVARIANT STDMETHOD(Next)(ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched); STDMETHOD(Skip)(ULONG celt); STDMETHOD(Reset)(); STDMETHOD(Clone)(IEnumVARIANT **ppEnum); static HRESULT make(const NodeListPtr &, const NodeTablePtr &table, IUnknown **); private: NodeListPtr nl_; NodeListPtr cur_; NodeTablePtr table_; }; class ATL_NO_VTABLE CEnumChunkNodeList : public CComObjectRoot, public IEnumVARIANT { public: CEnumChunkNodeList() { } BEGIN_COM_MAP(CEnumChunkNodeList) COM_INTERFACE_ENTRY(IEnumVARIANT) END_COM_MAP() // IEnumVARIANT STDMETHOD(Next)(ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched); STDMETHOD(Skip)(ULONG celt); STDMETHOD(Reset)(); STDMETHOD(Clone)(IEnumVARIANT **ppEnum); static HRESULT make(const NodeListPtr &, const NodeTablePtr &table, IUnknown **); private: NodeListPtr nl_; NodeListPtr cur_; NodeTablePtr table_; }; struct BuildVisitor : public GROVE_NAMESPACE::NodeVisitor { public: BuildVisitor(const NodePtr &n, const NodeTablePtr &t) : nd(n), table(t), retval(0), hRes(NOERROR) { } #define BUILD(mem, Cls) \ void mem(GROVE_NAMESPACE::Node &) { \ CComObject *p; \ hRes = CComObject::CreateInstance(&p); \ if (!FAILED(hRes)) { \ p->init(nd, table); \ retval = p; \ (retval)->AddRef(); \ } \ } BUILD(element, CElementNode) BUILD(attributeAssignment, CAttributeAssignmentNode) BUILD(attributeValueToken, CAttributeValueTokenNode) BUILD(sgmlDocument, CSgmlDocumentNode) BUILD(dataChar, CDataCharNode) BUILD(sgmlConstants, CSgmlConstantsNode) BUILD(pi, CPiNode) BUILD(sdata, CSdataNode) BUILD(documentType, CDocumentTypeNode) BUILD(entity, CEntityNode) BUILD(notation, CNotationNode) BUILD(externalId, CExternalIdNode) BUILD(externalData, CExternalDataNode) BUILD(subdocument, CSubdocNode) BUILD(message, CMessageNode) #undef BUILD NodePtr nd; HRESULT hRes; Node *retval; NodeTablePtr table; }; HRESULT CNodeBase::make(const NodePtr &nd, const NodeTablePtr &table, Node **retval) { CNodeBase *nb = table->lookup(*nd); if (nb) { *retval = nb->asNode(); (*retval)->AddRef(); return NOERROR; } else { BuildVisitor visitor(nd, table); nd->accept(visitor); *retval = visitor.retval; return visitor.hRes; } } CNodeBase::~CNodeBase() { CNodeBase *tem = table_->remove(*nd_); if (tem != this) abort(); } void CNodeBase::init(const NodePtr &nd, const NodeTablePtr &table) { table_ = table; nd_ = nd; table_->insert(this); } BSTR CNodeBase::makeBSTR(const GroveString &str) { CComBSTR bstr(str.size(), str.data()); return bstr.Detach(); } HRESULT CNodeBase::internalGetStoragePos(StoragePos **retval) { TRY const SP_NAMESPACE::LocNode *lp = SP_NAMESPACE::LocNode::convert(nd_); if (lp) { SP_NAMESPACE::Location loc; if (lp->getLocation(loc) == accessOK) { const SP_NAMESPACE::Origin *origin = loc.origin().pointer(); SP_NAMESPACE::Index index = loc.index(); while (origin) { const SP_NAMESPACE::ExternalInfo *info = origin->externalInfo(); if (info) return CStoragePos::make(info, origin->startOffset(index), nd_, retval); const SP_NAMESPACE::Location &loc = origin->parent(); index = loc.index(); origin = loc.origin().pointer(); } } } *retval = 0; return NOERROR; CATCH } STDMETHODIMP CDataCharNode::get_CharChunk(BSTR *retval) { TRY *retval = 0; GroveString str; if (nd_->charChunk(SdataMapper(), str) == accessOK) *retval = makeBSTR(str); else *retval = makeEmptyBSTR(); return NOERROR; CATCH } STDMETHODIMP CDataCharNode::get_Char(long *retval) { TRY GroveChar ch; if (nd_->getChar(SdataMapper(), ch) == accessOK) *retval = ch; else *retval = -1; return NOERROR; CATCH } STDMETHODIMP CDataCharNode::get_NonSgml(long *retval) { TRY unsigned long n; if (nd_->getNonSgml(n) == accessOK) *retval = n; else *retval = -1; return NOERROR; CATCH } HRESULT CNodeList::make(const NodeListPtr &nl, const NodeTablePtr &table, NodeList **retval) { CComObject *p; HRESULT hRes = CComObject::CreateInstance(&p); if (FAILED(hRes)) return hRes; CNodeList *np = p; np->nl_ = nl; np->table_ = table; *retval = p; (*retval)->AddRef(); return NOERROR; } STDMETHODIMP CNodeList::First(Node **retval) { TRY *retval = 0; NodePtr nd; if (nl_->first(nd) == accessOK) return CNodeBase::make(nd, table_, retval); return NOERROR; CATCH } STDMETHODIMP CNodeList::Rest(NodeList **retval) { TRY *retval = 0; NodeListPtr nl; if (nl_->rest(nl) == accessOK) return CNodeList::make(nl, table_, retval); return NOERROR; CATCH } STDMETHODIMP CNodeList::get_Count(long *retval) { TRY long n = 0; NodeListPtr nl; if (nl_->rest(nl) == accessOK) { n++; while (nl.assignRest() == accessOK) n++; } *retval = n; return NOERROR; CATCH } STDMETHODIMP CNodeList::get_Item(long i, Node **retval) { TRY *retval = 0; NodePtr nd; if (i <= 0) return E_INVALIDARG; if (nl_->ref(i - 1, nd) != accessOK) return E_INVALIDARG; return CNodeBase::make(nd, table_, retval); CATCH } STDMETHODIMP CNodeList::get__NewEnum(IUnknown **retval) { TRY return CEnumNodeList::make(nl_, table_, retval); CATCH } HRESULT CChunkNodeList::make(const NodeListPtr &nl, const NodeTablePtr &table, NodeList **retval) { CComObject *p; HRESULT hRes = CComObject::CreateInstance(&p); if (FAILED(hRes)) return hRes; CChunkNodeList *np = p; np->nl_ = nl; np->table_ = table; *retval = p; (*retval)->AddRef(); return NOERROR; } STDMETHODIMP CChunkNodeList::First(Node **retval) { TRY *retval = 0; NodePtr nd; if (nl_->first(nd) == accessOK) return CNodeBase::make(nd, table_, retval); return NOERROR; CATCH } STDMETHODIMP CChunkNodeList::Rest(NodeList **retval) { TRY *retval = 0; NodeListPtr nl; if (nl_->chunkRest(nl) == accessOK) return CNodeList::make(nl, table_, retval); return NOERROR; CATCH } STDMETHODIMP CChunkNodeList::get__NewEnum(IUnknown **retval) { TRY return CEnumChunkNodeList::make(nl_, table_, retval); CATCH } STDMETHODIMP CChunkNodeList::get_Count(long *retval) { TRY long n = 0; NodeListPtr nl; if (nl_->chunkRest(nl) == accessOK) { n++; while (nl.assignChunkRest() == accessOK) n++; } *retval = n; return NOERROR; CATCH } STDMETHODIMP CChunkNodeList::get_Item(long i, Node **retval) { TRY *retval = 0; if (i <= 0) return E_INVALIDARG; if (i == 1) return First(retval); NodeListPtr nl(nl_); do { if (nl.assignChunkRest() != accessOK) return E_INVALIDARG; } while (--i > 1); NodePtr nd; if (nl->first(nd) != accessOK) return E_INVALIDARG; return CNodeBase::make(nd, table_, retval); CATCH } STDMETHODIMP CNamedNodeList::get_Count(long *retval) { TRY NodeListPtr nl(nnl_->nodeListNoOrder()); long n = 0; while (nl.assignRest() == accessOK) n++; *retval = n; return NOERROR; CATCH } STDMETHODIMP CNamedNodeList::get_Item(BSTR name, Node **retval) { TRY *retval = 0; if (!name) return E_INVALIDARG; GroveString tem(name, ::SysStringLen(name)); NodePtr nd; if (nnl_->namedNode(tem, nd) != accessOK) return E_INVALIDARG; return CNodeBase::make(nd, table_, retval); CATCH } STDMETHODIMP CNamedNodeList::get_NodeList(NodeList **retval) { TRY return CNodeList::make(nnl_->nodeList(), table_, retval); CATCH } STDMETHODIMP CNamedNodeList::get__NewEnum(IUnknown **retval) { TRY return CEnumNodeList::make(nnl_->nodeListNoOrder(), table_, retval); CATCH } STDMETHODIMP CNamedNodeList::Normalize(BSTR name, BSTR *retval) { TRY *retval = 0; if (name) { size_t len = ::SysStringLen(name); BSTR tem = ::SysAllocStringLen(name, len); size_t newLen = nnl_->normalize(tem, len); if (newLen != len && !::SysReAllocStringLen(&tem, tem, newLen)) { ::SysFreeString(tem); return E_OUTOFMEMORY; } *retval = tem; } else *retval = makeEmptyBSTR(); return NOERROR; CATCH } STDMETHODIMP CNamedNodeList::NodeName(Node *nd, BSTR *retval) { TRY *retval = 0; switch (nnl_->type()) { #define CASE(T, I, P) \ case GROVE_NAMESPACE::NamedNodeList::T: \ { \ I *tem; \ if (SUCCEEDED(nd->QueryInterface(IID_##I, (void **)&tem))) { \ HRESULT hRes = tem->get_##P(retval); \ tem->Release(); \ return hRes; \ } \ return NOERROR; \ } CASE(elements,ElementNode,Id) CASE(entities,EntityNode,Name) CASE(notations,NotationNode,Name) CASE(attributes,AttributeAssignmentNode,Name) CASE(doctypesAndLinktypes,DocumentTypeNode,Name) } return NOERROR; CATCH } HRESULT CNamedNodeList::make(const NamedNodeListPtr &nnl, const NodeTablePtr &table, NamedNodeList **retval) { CComObject *p; HRESULT hRes = CComObject::CreateInstance(&p); if (FAILED(hRes)) return hRes; CNamedNodeList *np = p; np->nnl_ = nnl; np->table_ = table; *retval = p; (*retval)->AddRef(); return NOERROR; } HRESULT CEnumNodeList::make(const NodeListPtr &nl, const NodeTablePtr &table, IUnknown **retval) { CComObject *p; HRESULT hRes = CComObject::CreateInstance(&p); if (FAILED(hRes)) return hRes; CEnumNodeList *np = p; np->nl_ = nl; np->cur_ = nl; np->table_ = table; return p->QueryInterface(IID_IUnknown, (void **)retval); } STDMETHODIMP CEnumNodeList::Next(ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched) { TRY ULONG n = 0; for (; celt > 0; celt--, rgVar++, n++) { NodePtr nd; if (cur_->first(nd) != accessOK) break; if (cur_.assignRest() != accessOK) goto error; Node *ip; if (FAILED(CNodeBase::make(nd, table_, &ip))) goto error; rgVar->vt = VT_DISPATCH; rgVar->pdispVal = ip; } if (pCeltFetched) *pCeltFetched = n; return celt ? S_FALSE : NOERROR; error: while (n > 0) { --n ; --rgVar; VariantClear(rgVar); } if (pCeltFetched) *pCeltFetched = 0; return S_FALSE; CATCH } STDMETHODIMP CEnumNodeList::Skip(ULONG celt) { TRY for (; celt > 0; celt--) { if (cur_.assignRest() != accessOK) return S_FALSE; } return NOERROR; CATCH } STDMETHODIMP CEnumNodeList::Reset() { TRY cur_ = nl_; return NOERROR; CATCH } STDMETHODIMP CEnumNodeList::Clone(IEnumVARIANT **ppEnum) { TRY CComObject *p; HRESULT hRes = CComObject::CreateInstance(&p); if (FAILED(hRes)) return hRes; CEnumNodeList *np = p; np->nl_ = nl_; np->cur_ = cur_; np->table_ = table_; *ppEnum = p; (*ppEnum)->AddRef(); return NOERROR; CATCH } HRESULT CEnumChunkNodeList::make(const NodeListPtr &nl, const NodeTablePtr &table, IUnknown **retval) { CComObject *p; HRESULT hRes = CComObject::CreateInstance(&p); if (FAILED(hRes)) return hRes; CEnumChunkNodeList *np = p; np->nl_ = nl; np->cur_ = nl; np->table_ = table; return p->QueryInterface(IID_IUnknown, (void **)retval); } STDMETHODIMP CEnumChunkNodeList::Next(ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched) { TRY ULONG n = 0; for (; celt > 0; celt--, rgVar++, n++) { NodePtr nd; if (cur_->first(nd) != accessOK) break; if (cur_.assignChunkRest() != accessOK) goto error; Node *ip; if (FAILED(CNodeBase::make(nd, table_, &ip))) goto error; rgVar->vt = VT_DISPATCH; rgVar->pdispVal = ip; } if (pCeltFetched) *pCeltFetched = n; return celt ? S_FALSE : NOERROR; error: while (n > 0) { --n ; --rgVar; VariantClear(rgVar); } if (pCeltFetched) *pCeltFetched = 0; return S_FALSE; CATCH } STDMETHODIMP CEnumChunkNodeList::Skip(ULONG celt) { TRY for (; celt > 0; celt--) { if (cur_.assignChunkRest() != accessOK) return S_FALSE; } return NOERROR; CATCH } STDMETHODIMP CEnumChunkNodeList::Reset() { TRY cur_ = nl_; return NOERROR; CATCH } STDMETHODIMP CEnumChunkNodeList::Clone(IEnumVARIANT **ppEnum) { TRY CComObject *p; HRESULT hRes = CComObject::CreateInstance(&p); if (FAILED(hRes)) return hRes; CEnumChunkNodeList *np = p; np->nl_ = nl_; np->cur_ = cur_; np->table_ = table_; *ppEnum = p; (*ppEnum)->AddRef(); return NOERROR; CATCH } HRESULT CStoragePos::make(const SP_NAMESPACE::ExternalInfo *info, SP_NAMESPACE::Offset offset, const NodePtr &nd, StoragePos **retval) { *retval = 0; CComObject *p; HRESULT hRes = CComObject::CreateInstance(&p); if (FAILED(hRes)) return hRes; CStoragePos *tem = p; if (!SP_NAMESPACE::ExtendEntityManager::externalize(info, offset, tem->loc_)) { delete p; return NOERROR; } tem->nd_ = nd; *retval = p; (*retval)->AddRef(); return NOERROR; } HRESULT makeRootNode(const GROVE_NAMESPACE::NodePtr &root, SP_NAMESPACE::Owner &parser, SgmlDocumentNode **retval) { TRY NodeTablePtr table(new NodeTable(parser)); Node *tem; HRESULT hRes = CNodeBase::make(root, table, &tem); *retval = (SgmlDocumentNode *)tem; return hRes; CATCH } jade-1.2.1/groveoa/GroveNode.h100444 764 764 521 6604607710 13672 0ustar jjcjjc#ifndef GroveNode_INCLUDED #define GroveNode_INCLUDED 1 #include "Owner.h" #include "Boolean.h" #include "Node.h" struct ParserThread { virtual ~ParserThread() { } }; HRESULT makeRootNode(const GROVE_NAMESPACE::NodePtr &, SP_NAMESPACE::Owner &, SgmlDocumentNode **); #endif /* not GroveNode_INCLUDED */ jade-1.2.1/groveoa/StdAfx.cxx100444 764 764 457 6604607710 13556 0ustar jjcjjc// stdafx.cpp : source file that includes just the standard includes // stdafx.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information #include "stdafx.h" #ifdef _ATL_STATIC_REGISTRY #include #include #endif #include jade-1.2.1/groveoa/StdAfx.h100444 764 764 673 6604607710 13203 0ustar jjcjjc// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, // but are changed infrequently #define STRICT // #define _WIN32_WINNT 0x0400 #define _ATL_APARTMENT_THREADED #include //You may derive a class from CComModule and use it if you want to override //something, but do not change the name of _Module extern CComModule _Module; #include jade-1.2.1/groveoa/groveoa.cxx100444 764 764 5230 6604607710 14041 0ustar jjcjjc// groveoa.cxx : Implementation of DLL Exports. // You will need VC 4.2 and the full 4.2b patch (http://msvc/vc42b/vc42b.htm) in // order to build this project. This patch includes the final NT 4.0 SDK. // You will also need MIDL 3.00.75, which is included with ATL 2.0. // Note: Proxy/Stub Information // To merge the proxy/stub code into the object DLL, add the file // dlldatax.c to the project. Make sure precompiled headers // are turned off for this file, and add _MERGE_PROXYSTUB to the // defines for the project. // // If you are not running MIDL with /Oicf (the default), you will need // to remove the following defines from the top of dlldatax.c. // #define _WIN32_WINNT 0x0400 // #define USE_STUBLESS_PROXY // // Modify the custom build rule for groveoa.idl by adding the following // files to the Outputs. // groveoa_p.c // dlldata.c // To build a separate proxy/stub DLL, // run nmake -f groveoaps.mk in the project directory. #include "stdafx.h" #include "resource.h" #include "groveoa.h" #include "groveoa_i.c" #include "CGroveBuilder.h" CComModule _Module; BEGIN_OBJECT_MAP(ObjectMap) OBJECT_ENTRY(CLSID_GroveBuilder, CGroveBuilder) END_OBJECT_MAP() ///////////////////////////////////////////////////////////////////////////// // DLL Entry Point extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { lpReserved; if (dwReason == DLL_PROCESS_ATTACH) { _Module.Init(ObjectMap, hInstance); DisableThreadLibraryCalls(hInstance); } else if (dwReason == DLL_PROCESS_DETACH) _Module.Term(); return TRUE; // ok } ///////////////////////////////////////////////////////////////////////////// // Used to determine whether the DLL can be unloaded by OLE STDAPI DllCanUnloadNow(void) { return (_Module.GetLockCount()==0) ? S_OK : S_FALSE; } ///////////////////////////////////////////////////////////////////////////// // Returns a class factory to create an object of the requested type STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) { return _Module.GetClassObject(rclsid, riid, ppv); } ///////////////////////////////////////////////////////////////////////////// // DllRegisterServer - Adds entries to the system registry STDAPI DllRegisterServer(void) { // registers object, typelib and all interfaces in typelib return _Module.RegisterServer(TRUE); } ///////////////////////////////////////////////////////////////////////////// // DllUnregisterServer - Removes entries from the system registry STDAPI DllUnregisterServer(void) { _Module.UnregisterServer(); #if _WIN32_WINNT >= 0x0400 UnRegisterTypeLib(LIBID_GROVE, 1, 0, LOCALE_USER_DEFAULT, SYS_WIN32); #endif return S_OK; } jade-1.2.1/groveoa/groveoa.def100444 764 764 325 6604607710 13755 0ustar jjcjjc; groveoa.def : Declares the module parameters. LIBRARY "groveoa.DLL" EXPORTS DllCanUnloadNow @1 PRIVATE DllGetClassObject @2 PRIVATE DllRegisterServer @3 PRIVATE DllUnregisterServer @4 PRIVATE jade-1.2.1/groveoa/groveoa.dsp100444 764 764 12614 6607713632 14055 0ustar jjcjjc# Microsoft Developer Studio Project File - Name="groveoa" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=groveoa - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "groveoa.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "groveoa.mak" CFG="groveoa - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "groveoa - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "groveoa - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "groveoa - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\include" /I "..\grove" /I "..\spgrove" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D "_WINDLL" /D "NDEBUG" /D "_WINDOWS" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"..\bin\groveoa.dll" # Begin Special Build Tool TargetPath=\home\work\SP\bin\groveoa.dll SOURCE="$(InputPath)" PostBuild_Cmds=regsvr32 /s /c "$(TargetPath)" # End Special Build Tool !ELSEIF "$(CFG)" == "groveoa - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\Debug" # PROP BASE Intermediate_Dir ".\Debug" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir ".\Debug" # PROP Intermediate_Dir ".\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\include" /I "..\grove" /I "..\spgrove" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D "_WINDLL" /D "_DEBUG" /D "_WINDOWS" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"..\dbgbin\groveoa.dll" # SUBTRACT LINK32 /incremental:no !ENDIF # Begin Target # Name "groveoa - Win32 Release" # Name "groveoa - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # Begin Source File SOURCE=.\CGroveBuilder.cxx # ADD CPP /Yu"stdafx.h" # End Source File # Begin Source File SOURCE=.\GroveNode.cxx # ADD CPP /Yu"stdafx.h" # End Source File # Begin Source File SOURCE=.\groveoa.cxx # ADD CPP /Yu"stdafx.h" # End Source File # Begin Source File SOURCE=.\groveoa.def # End Source File # Begin Source File SOURCE=.\groveoa.idl # ADD MTL /tlb "groveoa.tlb" /h "groveoa.h" /iid "groveoa_i.c" /Oicf # SUBTRACT MTL /mktyplib203 # End Source File # Begin Source File SOURCE=.\StdAfx.cxx # ADD CPP /Yc"stdafx.h" # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # Begin Source File SOURCE=.\CGroveBuilder.h # End Source File # Begin Source File SOURCE=.\GroveNode.h # End Source File # Begin Source File SOURCE=.\resource.h # End Source File # Begin Source File SOURCE=.\StdAfx.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # Begin Source File SOURCE=.\groveoa.rc # End Source File # End Group # Begin Source File SOURCE=.\GroveBuilder.rgs # End Source File # End Target # End Project jade-1.2.1/groveoa/groveoa.idl100444 764 764 27473 6604607710 14044 0ustar jjcjjc// groveoa.idl : IDL source for groveoa.dll // This file will be processed by the MIDL tool to // produce the type library (groveoa.tlb) and marshalling code. import "oaidl.idl"; interface Node; interface NodeList; interface NamedNodeList; interface ElementNode; interface AttributeAssignmentNode; interface AttributeValueTokenNode; interface DataCharNode; interface SgmlDocumentNode; interface SgmlConstantsNode; interface PiNode; interface SdataNode; interface DocumentTypeNode; interface EntityNode; interface NotationNode; interface ExternalIdNode; interface ExternalDataNode; interface SubdocNode; interface MessageNode; interface StoragePos; enum NodeClass { nodeClassElement, nodeClassAttributeAssignment, nodeClassAttributeValueToken, nodeClassDataChar, nodeClassSgmlDocument, nodeClassSgmlConstants, nodeClassPi, nodeClassSdata, nodeClassDocumentType, nodeClassEntity, nodeClassNotation, nodeClassExternalId, nodeClassExternalData, nodeClassSubdoc, nodeClassMessage }; enum EntityType { entityTypeText, entityTypeCdata, entityTypeSdata, entityTypeNdata, entityTypeSubdocument, entityTypePi }; enum Severity { severityInfo, severityWarning, severityError }; [ object, uuid(B3BE8C20-BA4A-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface Node : IDispatch { [propget] HRESULT Parent([out, retval] Node **); [propget] HRESULT Origin([out, retval] Node **); /* Using SgmlDocumentNode as the return type doesn't work. */ [propget] HRESULT GroveRoot([out, retval] Node **); [propget] HRESULT TreeRoot([out, retval] Node **); [propget] HRESULT Children([out, retval] NodeList **); [propget] HRESULT ChunkChildren([out, retval] NodeList **); [propget] HRESULT Class([out, retval] enum NodeClass *); [propget] HRESULT StoragePos([out, retval] StoragePos **); [propget] HRESULT SiblingIndex([out, retval] long *); HRESULT FirstChild([out, retval] Node **); HRESULT NextSibling([out, retval] Node **); HRESULT NextChunkSibling([out, retval] Node **); } [ object, uuid(D8334201-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface SgmlDocumentNode : Node { [propget] HRESULT DocumentElement([out, retval] ElementNode **); [propget] HRESULT SgmlConstants([out, retval] SgmlConstantsNode **); [propget] HRESULT ApplicationInfo([out, retval] BSTR *); [propget] HRESULT ApplicationInfoNull([out, retval] VARIANT_BOOL *); [propget] HRESULT Prolog([out, retval] NodeList **); [propget] HRESULT Epilog([out, retval] NodeList **); [propget] HRESULT Elements([out, retval] NamedNodeList **); [propget] HRESULT Entities([out, retval] NamedNodeList **); [propget] HRESULT DefaultedEntities([out, retval] NamedNodeList **); [propget] HRESULT GoverningDoctype([out, retval] DocumentTypeNode **); [propget] HRESULT DoctypesAndLinktypes([out, retval] NamedNodeList **); [propget] HRESULT Messages([out, retval] NodeList **); } [ object, uuid(D8334202-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface ElementNode : Node { [propget] HRESULT Gi([out, retval] BSTR *); [propget] HRESULT Attributes([out, retval] NamedNodeList **); [propget] HRESULT Id([out, retval] BSTR *); [propget] HRESULT Content([out, retval] NodeList **); [propget] HRESULT ChunkContent([out, retval] NodeList **); [propget] HRESULT Included([out, retval] VARIANT_BOOL *); [propget] HRESULT MustOmitEndTag([out, retval] VARIANT_BOOL *); } [ object, uuid(D8334203-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface DataCharNode : Node { [propget] HRESULT Char([out, retval] long *); [propget] HRESULT NonSgml([out, retval] long *); [propget] HRESULT CharChunk([out, retval] BSTR *); } [ object, uuid(D8334204-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface AttributeAssignmentNode : Node { [propget] HRESULT Name([out, retval] BSTR *); [propget] HRESULT Implied([out, retval] VARIANT_BOOL *); [propget] HRESULT Value([out, retval] NodeList **); [propget] HRESULT ChunkValue([out, retval] NodeList **); [propget] HRESULT TokenSep([out, retval] long *); [propget, id(DISPID_VALUE)] HRESULT StringValue([out, retval] BSTR *); } [ object, uuid(D8334205-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface AttributeValueTokenNode : Node { [propget, id(DISPID_VALUE)] HRESULT Token([out, retval] BSTR *); [propget] HRESULT Referent([out, retval] ElementNode **); [propget] HRESULT Entity([out, retval] EntityNode **); [propget] HRESULT Notation([out, retval] NotationNode **); } [ object, uuid(D8334206-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface SgmlConstantsNode : Node { } [ object, uuid(D8334207-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface PiNode : Node { [propget] HRESULT SystemData([out, retval] BSTR *); [propget] HRESULT Entity([out, retval] EntityNode **); [propget] HRESULT EntityName([out, retval] BSTR *); } [ object, uuid(D8334208-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface SdataNode : Node { [propget] HRESULT SystemData([out, retval] BSTR *); [propget] HRESULT Entity([out, retval] EntityNode **); [propget] HRESULT EntityName([out, retval] BSTR *); } [ object, uuid(D8334209-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface DocumentTypeNode : Node { [propget] HRESULT Name([out, retval] BSTR *); [propget] HRESULT Governing([out, retval] VARIANT_BOOL *); [propget] HRESULT GeneralEntities([out, retval] NamedNodeList **); [propget] HRESULT Notations([out, retval] NamedNodeList **); } [ object, uuid(D833420A-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface EntityNode : Node { [propget] HRESULT Name([out, retval] BSTR *); [propget] HRESULT Text([out, retval] BSTR *); [propget] HRESULT TextNull([out, retval] VARIANT_BOOL *); [propget] HRESULT Notation([out, retval] NotationNode **); [propget] HRESULT NotationName([out, retval] BSTR *); [propget] HRESULT EntityType([out, retval] enum EntityType *); [propget] HRESULT Defaulted([out, retval] VARIANT_BOOL *); [propget] HRESULT Attributes([out, retval] NamedNodeList **); [propget] HRESULT ExternalId([out, retval] ExternalIdNode **); } [ object, uuid(D833420B-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface NotationNode : Node { [propget] HRESULT Name([out, retval] BSTR *); [propget] HRESULT ExternalId([out, retval] ExternalIdNode **); } [ object, uuid(D833420C-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface ExternalIdNode : Node { [propget] HRESULT PublicId([out, retval] BSTR *); [propget] HRESULT PublicIdNull([out, retval] VARIANT_BOOL *); [propget] HRESULT SystemId([out, retval] BSTR *); [propget] HRESULT SystemIdNull([out, retval] VARIANT_BOOL *); [propget] HRESULT GeneratedSystemId([out, retval] BSTR *); } [ object, uuid(D833420D-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface ExternalDataNode : Node { [propget] HRESULT Entity([out, retval] EntityNode **); [propget] HRESULT EntityName([out, retval] BSTR *); } [ object, uuid(D833420E-9FD6-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface SubdocNode : Node { [propget] HRESULT Entity([out, retval] EntityNode **); [propget] HRESULT EntityName([out, retval] BSTR *); } [ object, uuid(8E5A3821-A213-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface MessageNode : Node { [propget] HRESULT Text([out, retval] BSTR *); [propget] HRESULT Severity([out, retval] enum Severity *); } [ object, uuid(BA7A21C0-9FA9-11d0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface NamedNodeList : IDispatch { [propget, helpstring("Returns number of nodes.")] HRESULT Count([out, retval] long *retval); [propget, id(DISPID_VALUE), helpstring("Given a name, return the node.")] /* if you use "name" for the parameter name, MIDL outputs a TLB file that uses "name" instead of "Name" for "Name" properties */ HRESULT Item([in] BSTR nodeName, [out, retval] Node **retval); [propget, restricted, id(DISPID_NEWENUM)] HRESULT _NewEnum([out, retval] IUnknown **retval); [propget] HRESULT NodeList([out, retval] NodeList **retval); HRESULT Normalize([in] BSTR nodeName, [out, retval] BSTR *); HRESULT NodeName([in] Node *, [out, retval] BSTR *); } [ object, uuid(BA7A21C1-9FA9-11d0-9083-0020AF41CFC2), dual ] interface NodeList : IDispatch { HRESULT First([out, retval] Node **); HRESULT Rest([out, retval] NodeList **); [propget, helpstring("Returns number of nodes.")] HRESULT Count([out, retval] long *retval); [propget, id(DISPID_VALUE), helpstring("Given an index, return the node. First node has index 1.")] HRESULT Item([in] long index, [out, retval] Node **retval); [propget, restricted, id(DISPID_NEWENUM)] HRESULT _NewEnum([out, retval] IUnknown **retval); } [ object, uuid(18E670A0-AE01-11D0-9083-0020AF41CFC2), dual, pointer_default(unique) ] interface StoragePos : IDispatch { [propget] HRESULT StorageManagerName([out, retval] BSTR *); [propget] HRESULT StorageObjectId([out, retval] BSTR *); [propget] HRESULT LineNumber([out, retval] long *); [propget] HRESULT ColumnNumber([out, retval] long *); [propget] HRESULT ByteIndex([out, retval] long *); [propget] HRESULT CharacterIndex([out, retval] long *); } enum ErrorType { errorIdref, errorSignificant, errorAfdr, errorLpdNotation, errorValid }; enum WarningType { warningSgmlDecl, warningDuplicateEntity, warningShould, warningUndefinedElement, warningDefaultEntityReference, warningMixedContent, warningUnclosedTag, warningNet, warningEmptyTag, warningUnusedMap, warningUnusedParam, warningNotationSystemId }; [ object, uuid(557CE381-9EBD-11D0-9083-0020AF41CFC2), dual, hidden, pointer_default(unique) ] interface _GroveBuilder : IDispatch { [propget] HRESULT ExtraCatalogs([out, retval] BSTR *); [propput] HRESULT ExtraCatalogs([in] BSTR catalogs); [propget] HRESULT DefaultCatalogs([out, retval] BSTR *); [propput] HRESULT DefaultCatalogs([in] BSTR catalogs); [propget] HRESULT ExtraDirectories([out, retval] BSTR *); [propput] HRESULT ExtraDirectories([in] BSTR dirs); [propget] HRESULT DefaultDirectories([out, retval] BSTR *); [propput] HRESULT DefaultDirectories([in] BSTR dirs); [propget] HRESULT Encoding([out, retval] BSTR *); [propput] HRESULT Encoding([in] BSTR name); [propget] HRESULT DefaultEncoding([out, retval] BSTR *); [propput] HRESULT DefaultEncoding([in] BSTR name); [propget] HRESULT Includes([out, retval] BSTR *); [propput] HRESULT Includes([in] BSTR entityNames); [propget] HRESULT Warning([in] enum WarningType type, [out, retval] VARIANT_BOOL *); [propput] HRESULT Warning([in] enum WarningType type, [in] VARIANT_BOOL); [propget] HRESULT Error([in] enum ErrorType type, [out, retval] VARIANT_BOOL *); [propput] HRESULT Error([in] enum ErrorType type, [in] VARIANT_BOOL); [propget] HRESULT ValidateOnly([out, retval] VARIANT_BOOL *); [propput] HRESULT ValidateOnly([in] VARIANT_BOOL); HRESULT parse([in] BSTR systemId, [out, retval] SgmlDocumentNode **); } [ uuid(8E1C3D40-9EBC-11D0-9083-0020AF41CFC2), version(1.0), helpstring("SP Grove 1.0 Type Library") ] library GROVE { importlib("stdole32.tlb"); importlib("stdole2.tlb"); interface Node; interface NodeList; interface NamedNodeList; interface ElementNode; interface AttributeAssignmentNode; interface AttributeValueTokenNode; interface DataCharNode; interface SgmlDocumentNode; interface SgmlConstantsNode; interface PiNode; interface SdataNode; interface DocumentTypeNode; interface EntityNode; interface NotationNode; interface ExternalIdNode; interface ExternalDataNode; interface SubdocNode; interface MessageNode; interface StoragePos; [ uuid(557CE382-9EBD-11D0-9083-0020AF41CFC2) ] coclass GroveBuilder { [default] interface _GroveBuilder; } } jade-1.2.1/groveoa/groveoa.rc100444 764 764 6042 6604607710 13645 0ustar jjcjjc//Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "winres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""winres.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "1 TYPELIB ""groveoa.tlb""\r\n" "\0" END #endif // APSTUDIO_INVOKED #ifndef _MAC ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x4L FILETYPE 0x2L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904B0" BEGIN VALUE "CompanyName", "\0" VALUE "FileDescription", "groveoa Module\0" VALUE "FileVersion", "1, 0, 0, 1\0" VALUE "InternalName", "GROVEOA\0" VALUE "LegalCopyright", "Copyright © 1995\0" VALUE "OriginalFilename", "GROVEOA.DLL\0" VALUE "ProductName", "groveoa Module\0" VALUE "ProductVersion", "1, 0, 0, 1\0" VALUE "OLESelfRegister", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END #endif // !_MAC ///////////////////////////////////////////////////////////////////////////// // // String Table // STRINGTABLE DISCARDABLE BEGIN IDS_PROJNAME "Groveoa" END #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// // English (U.K.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK #pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // // REGISTRY // IDR_GROVEBUILDER REGISTRY DISCARDABLE "GroveBuilder.rgs" #endif // English (U.K.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // 1 TYPELIB "groveoa.tlb" ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED jade-1.2.1/groveoa/resource.h100444 764 764 743 6604607710 13637 0ustar jjcjjc//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by groveoa.rc // #define IDS_PROJNAME 100 #define IDR_GROVEBUILDER 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 201 #define _APS_NEXT_COMMAND_VALUE 32768 #define _APS_NEXT_CONTROL_VALUE 201 #define _APS_NEXT_SYMED_VALUE 102 #endif #endif jade-1.2.1/spgrove/ 40775 764 764 0 6610553420 11600 5ustar jjcjjcjade-1.2.1/spgrove/GroveApp.h100444 764 764 2507 6604607714 13602 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef GroveApp_INCLUDED #define GroveApp_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "ParserApp.h" #include "GroveBuilder.h" #include "HashTable.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SPGROVE_API GroveApp : public ParserApp { public: GroveApp(const char *requiredCodingSystem = 0); ErrorCountEventHandler *makeEventHandler(); int generateEvents(ErrorCountEventHandler *eceh); virtual void processGrove() = 0; class GenerateEventArgs { public: int run() { return app_->inheritedGenerateEvents(eceh_); } private: GenerateEventArgs(ErrorCountEventHandler *eceh, GroveApp *app) : app_(app), eceh_(eceh) { } ErrorCountEventHandler *eceh_; GroveApp *app_; friend class GroveApp; }; friend class GenerateEventArgs; void dispatchMessage(const Message &); protected: GROVE_NAMESPACE_SCOPE NodePtr rootNode_; private: int inheritedGenerateEvents(ErrorCountEventHandler *eceh) { return ParserApp::generateEvents(eceh); } }; inline OutputCharStream &operator<<(OutputCharStream &os, #ifdef GROVE_NAMESPACE GROVE_NAMESPACE:: #endif GroveString &str) { return os.write(str.data(), str.size()); } #ifdef SP_NAMESPACE } #endif #endif /* not GroveApp_INCLUDED */ jade-1.2.1/spgrove/GroveBuilder.h100444 764 764 2257 6604607714 14452 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef GroveBuilder_INCLUDED #define GroveBuilder_INCLUDED 1 #include "Boolean.h" #include "Node.h" #ifdef SP_USE_DLL #ifdef BUILD_LIBSPGROVE #define SPGROVE_API SP_DLLEXPORT #else #define SPGROVE_API SP_DLLIMPORT #endif #else /* not SP_USE_DLL */ #define SPGROVE_API /* as nothing */ #endif /* not SP_USE_DLL */ #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Messenger; class ErrorCountEventHandler; class MessageFormatter; class SPGROVE_API GroveBuilder { public: static bool setBlocking(bool); static ErrorCountEventHandler *make(unsigned index, Messenger *, MessageFormatter *, bool validateOnly, GROVE_NAMESPACE_SCOPE NodePtr &root); static ErrorCountEventHandler *make(unsigned index, Messenger *, MessageFormatter *, bool validateOnly, const ConstPtr &sd, const ConstPtr &prologSyntax, const ConstPtr &instanceSyntax, GROVE_NAMESPACE_SCOPE NodePtr &root); private: GroveBuilder(); }; #ifdef SP_NAMESPACE } #endif #endif /* not GroveBuilder_INCLUDED */ jade-1.2.1/spgrove/SdNode.cxx100444 764 764 470 6604607714 13563 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #include "config.h" #include "SdNode.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef GROVE_NAMESPACE using namespace GROVE_NAMESPACE; #endif const Node::IID SdNode::iid = "SdNode"; #ifdef SP_NAMESPACE } #endif jade-1.2.1/spgrove/SdNode.h100444 764 764 1662 6604607714 13234 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifndef SdNode_INCLUDED #define SdNode_INCLUDED 1 #include "Boolean.h" #include "Node.h" #include "Sd.h" #include "Syntax.h" #include "GroveBuilder.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef GROVE_NAMESPACE #define GROVE_NAMESPACE_SCOPE GROVE_NAMESPACE:: #else #define GROVE_NAMESPACE_SCOPE #endif class SPGROVE_API SdNode { public: virtual GROVE_NAMESPACE_SCOPE AccessResult getSd(ConstPtr &sd, ConstPtr &prologSyntax, ConstPtr &instanceSyntax) const = 0; static const GROVE_NAMESPACE_SCOPE Node::IID iid; static const SdNode *convert(const GROVE_NAMESPACE_SCOPE NodePtr &nd) { const void *p; if (nd && nd->queryInterface(iid, p)) return (const SdNode *)p; else return 0; } }; #undef GROVE_NAMESPACE_SCOPE #ifdef SP_NAMESPACE } #endif #endif /* not SdNode_INCLUDED */ jade-1.2.1/spgrove/threads.h100444 764 764 26676 6604607714 13546 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef threads_INCLUDED #define threads_INCLUDED 1 // Thread primitives. #if defined(_MSC_VER) && defined(_MT) // WIN32 #define SP_THREAD #define STRICT 1 #define WIN32_LEAN_AND_MEAN #include #include // appears to turn these warnings back on #ifdef _MSC_VER #pragma warning ( disable : 4237 ) #endif class Thread { public: Thread(int (*func)(void *), void *arg) { unsigned threadId; arg_ = new Arg; arg_->func = func; arg_->arg = arg; arg_->exited = 0; handle_ = HANDLE(_beginthreadex(NULL, 0, start, arg_, 0, &threadId)); } int wait() { if (WaitForSingleObject(handle_, INFINITE) != WAIT_OBJECT_0) abort(); if (!CloseHandle(handle_)) abort(); if (arg_->exited) { int ret = arg_->ret; delete arg_; return ret; } // Something's gone wrong. We'll get a leak. return 0; } private: struct Arg { int (*func)(void *); void *arg; int ret; int exited; }; static unsigned __stdcall start(void *p) { Arg *arg = (Arg *)p; arg->ret = (*arg->func)(arg->arg); arg->exited = 1; return 0; } HANDLE handle_; Arg *arg_; }; class Mutex { public: class Lock { public: Lock(Mutex *mp) : mp_(mp) { if (mp) EnterCriticalSection(&mp->cs_); } ~Lock() { if (mp_) LeaveCriticalSection(&mp_->cs_); } private: Mutex *mp_; }; Mutex() { InitializeCriticalSection(&cs_); } ~Mutex() { DeleteCriticalSection(&cs_); } friend class Lock; private: CRITICAL_SECTION cs_; }; // Thread-safe reference counts. class RefCount { public: RefCount() : count_(0) { } void operator++() { InterlockedIncrement(&count_); } bool operator--() { return InterlockedDecrement(&count_) != 0; } operator unsigned long() const { return count_; } private: long count_; }; #ifndef SP_NO_BLOCK #define SP_CONDITION class Condition { public: // Manual reset event, initially non-signalled Condition() : handle_(CreateEvent(NULL, 1, 0, NULL)), nWaiters_(0) { } ~Condition() { CloseHandle(handle_); } // Set the event to signalled, releasing all threads waiting on it, // then set it back to non-signalled. // For performance reasons, we want to avoid calling PulseEvent unless we have // some thread waiting on this condition. // The obvious solution of a boolean variable that's set by wait() and // cleared by pulse() fails in the following scenario: // reader: needPulse_ = 1; // writer: needPulse_ = 0; // writer: PulseEvent() // reader: WaitForSingleObject() void pulse() { if (nWaiters_) { PulseEvent(handle_); } } // Wait for the event to become signalled. bool wait() const { InterlockedIncrement((long *)&nWaiters_); bool ret = (WaitForSingleObject(handle_, INFINITE) == WAIT_OBJECT_0); InterlockedDecrement((long *)&nWaiters_); return ret; } // Set the event to signalled, releasing all threads waiting on it. // Don't set it back to non-signalled. Any thread that subsequently // waits will return immediately. void set() { SetEvent(handle_); } private: long nWaiters_; HANDLE handle_; }; #endif /* not SP_NO_BLOCK */ #endif /* _MSC_VER && _MT */ #ifdef __MACH__ // For Mach, using C Threads. May or may not work as-is on your Mach-based OS. // Written by Raf Schietekat on 1996-11-10. // Platform used: NEXTSTEP_(Dev_)3.2 with sp-1.1.1 and jade-0.1. // Maturity: only dsssl/demo.sgm tested (successfully). #define SP_THREAD extern "C" { #ifdef __NeXT__ // catch is a reserved word in C++, it's only used to declare a struct member #define catch catch22 #include #undef catch // don't want ASSERT to clash with ASSERT in SP's macros.h #undef ASSERT #else // Change to whatever works for you, and tell James Clark (or me). // catch is a reserved word in C++, it's only used to declare a struct member #define catch catch22 #include #undef catch // don't want ASSERT to clash with ASSERT in SP's macros.h #undef ASSERT #endif } class Thread { public: Thread(int (*func)(void *), void *arg) { arg_ = new Arg; arg_->func = func; arg_->arg = arg; arg_->exited = 0; handle_ = cthread_fork((cthread_fn_t)start, (any_t)arg_); // will be cthread_join()'ed in wait() } int wait() { cthread_join(handle_); if (arg_ && arg_->exited) { int ret = arg_->ret; delete arg_; arg_ = 0; return ret; } // Something's gone wrong. We'll get a leak. return 0; } private: struct Arg { int (*func)(void *); void *arg; int ret; int exited; }; static void *start(void *p) { Arg *arg = (Arg *)p; arg->ret = (*arg->func)(arg->arg); arg->exited = 1; return 0; } cthread_t handle_; Arg *arg_; }; class Mutex { public: class Lock { // Lock serves to automatically unlock Mutex, however control leaves // a block. Don't let any "warning: unused variable `class Mutex::Lock lock'" // mislead you; hopefully your compiler won't optimise this away... public: Lock(Mutex *mp) : mp_(mp) { if (mp_) mutex_lock (&mp_->cs_); } ~Lock() { if (mp_) mutex_unlock(&mp_->cs_); } private: Mutex *mp_; }; Mutex() { mutex_init (&cs_); } ~Mutex() { mutex_clear(&cs_); } friend class Lock; private: struct mutex cs_; }; // Thread-safe reference counts. class RefCount { public: RefCount() : count_(0) { mutex_init (&cs_); } ~RefCount() { mutex_clear(&cs_); } void operator++() { mutex_lock(&cs_); ++count_; mutex_unlock(&cs_); } bool operator--() { bool ret; mutex_lock(&cs_); ret=(0!=--count_); mutex_unlock(&cs_); return ret; // safe iff reference-count semantics are observed } operator unsigned long() const { return count_; } // safe iff reference-count semantics are observed private: long count_; // hmm, () returns unsigned long... struct mutex cs_; // don't build on top of Mutex class, for efficiency }; #ifndef SP_NO_BLOCK #define SP_CONDITION class Condition { // doesn't trivially map to a condition_t! public: Condition() : set_(0) { /**/mutex_= mutex_alloc(); condition_=condition_alloc(); } ~Condition() { /**/mutex_free( mutex_); condition_free(condition_); } void pulse() { condition_broadcast(condition_); } bool wait() const { mutex_lock ( mutex_); if(!set_) condition_wait(condition_, mutex_); mutex_unlock( mutex_); return 1; // 0 would be interpreted as timeout, which is not supported directly // do we need that? would require some more coding, with another thread } void set() { mutex_lock (mutex_); set_=1; mutex_unlock(mutex_); condition_broadcast(condition_); } private: // nWaiters_ functionality already in Mach C Threads mutex_t mutex_; // every C Threads condition_t needs a mutex_t // but also see set_ below condition_t condition_; // can't have struct and struct mutex because of the const in wait() // (can/should this const-ness be revised?) bool set_; // born as false, does a single transition to true, then dies // therefore, no mutex (with its overhead) seems required, right? // wrong: // consumer reads set_ as false // producer sets set_ to true // producer signals condition for the last time // consumer waits, and waits forever // (consumer didn't get last condition because it was not yet waiting) }; #endif /* SP_NO_BLOCK */ #endif /* __MACH__ */ #ifdef SP_USE_PTHREADS // Support for pthreads on Linux. // Written by Matthias Clasen extern "C" { // for some reason sigset_t is missing here (with glibc 2.0.7); // so we define it manually. typedef __sigset_t sigset_t; #include } #define SP_THREAD class Thread { public: Thread(int (*func)(void *), void *arg) { arg_ = new Arg; arg_->func = func; arg_->arg = arg; arg_->exited = 0; pthread_create (&handle_, NULL, start, (void *)arg_); } int wait() { pthread_join(handle_, NULL); if (arg_ && arg_->exited) { int ret = arg_->ret; delete arg_; arg_ = 0; return ret; } // Something's gone wrong. We'll get a leak. return 0; } private: struct Arg { int (*func)(void *); void *arg; int ret; int exited; }; static void *start(void *p) { Arg *arg = (Arg *)p; arg->ret = (*arg->func)(arg->arg); arg->exited = 1; return 0; } pthread_t handle_; Arg *arg_; }; class Mutex { public: class Lock { // Lock serves to automatically unlock Mutex, however control leaves // a block. Don't let any "warning: unused variable `class Mutex::Lock lock'" // mislead you; hopefully your compiler won't optimise this away... public: Lock(Mutex *mp) : mp_(mp) { if (mp_) pthread_mutex_lock (&mp_->cs_); } ~Lock() { if (mp_) pthread_mutex_unlock(&mp_->cs_); } private: Mutex *mp_; }; Mutex() { pthread_mutex_init (&cs_, NULL); } ~Mutex() { pthread_mutex_destroy (&cs_); } friend class Lock; private: pthread_mutex_t cs_; }; // Thread-safe reference counts. class RefCount { public: RefCount() : count_(0) { pthread_mutex_init (&cs_, NULL); } ~RefCount() { pthread_mutex_destroy (&cs_); } void operator++() { pthread_mutex_lock(&cs_); ++count_; pthread_mutex_unlock(&cs_); } bool operator--() { bool ret; pthread_mutex_lock(&cs_); ret=(0!=--count_); pthread_mutex_unlock(&cs_); return ret; // safe iff reference-count semantics are observed } operator unsigned long() const { return count_; } // safe iff reference-count semantics are observed private: long count_; // hmm, () returns unsigned long... pthread_mutex_t cs_; // don't build on top of Mutex class, for efficiency }; #ifndef SP_NO_BLOCK #define SP_CONDITION class Condition { // doesn't trivially map to a condition_t! public: Condition() : set_(0) { pthread_mutex_init(&mutex_, NULL); pthread_cond_init(&condition_, NULL); } ~Condition() { pthread_mutex_destroy(&mutex_); pthread_cond_destroy(&condition_); } void pulse() { pthread_cond_broadcast(&condition_); } bool wait() { pthread_mutex_lock(&mutex_); if (!set_) pthread_cond_wait(&condition_, &mutex_); pthread_mutex_unlock(&mutex_); return 1; // 0 would be interpreted as timeout, which is not supported directly // do we need that? would require some more coding, with another thread } void set() { pthread_mutex_lock(&mutex_); set_=1; pthread_mutex_unlock(&mutex_); pthread_cond_broadcast(&condition_); } private: pthread_mutex_t mutex_; pthread_cond_t condition_; bool set_; }; #endif /* SP_NO_BLOCK */ #endif /* SP_USE_PTHREADS */ #ifndef SP_THREAD class Thread { public: Thread(int (*func)(void *), void *args) : ret_((*func)(args)) { } int wait() { return ret_; } private: int ret_; }; class RefCount { public: RefCount() : count_(0) { } void operator++() { ++count_; } bool operator--() { return --count_ != 0; } operator unsigned long() const { return count_; } private: unsigned long count_; }; class Mutex { public: class Lock { public: Lock(Mutex *) { } }; Mutex() { } }; #endif /* not SP_THREAD */ #ifndef SP_CONDITION class Condition { public: Condition() { } void pulse() { } void set() { } bool wait() const { return 0; } }; #endif /* not SP_CONDITION */ #endif /* not threads_INCLUDED */ jade-1.2.1/spgrove/GroveApp.cxx100444 764 764 2064 6604607714 14153 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "config.h" #include "GroveApp.h" #include "GroveBuilder.h" #include "threads.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif GroveApp::GroveApp(const char *requiredCodingSystem) : ParserApp(requiredCodingSystem) { } static int generateEventsThread(void *args) { return ((GroveApp::GenerateEventArgs *)args)->run(); } int GroveApp::generateEvents(ErrorCountEventHandler *eceh) { #if 0 int ret = ParserApp::generateEvents(eceh); processGrove(); return ret; #else GenerateEventArgs args(eceh, this); Thread thread(generateEventsThread, &args); processGrove(); rootNode_.clear(); return thread.wait(); #endif } ErrorCountEventHandler *GroveApp::makeEventHandler() { return GroveBuilder::make(0, this, this, 0, rootNode_); } void GroveApp::dispatchMessage(const Message &message) { static Mutex mutex; Mutex::Lock lock(&mutex); MessageReporter::dispatchMessage(message); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/spgrove/GroveBuilder.cxx100444 764 764 365401 6604607714 15070 0ustar jjcjjc// Copyright (c) 1996, 1997 James Clark // See the file COPYING for copying permission. // FIXME location for SgmlDocument node. #include "config.h" #include "Boolean.h" #include "Node.h" #include "Resource.h" #include "Ptr.h" #include "xnew.h" #include "Event.h" #include "GroveBuilder.h" #include "ErrorCountEventHandler.h" #include "OutputCharStream.h" #include "MessageFormatter.h" #include "Dtd.h" #include "Syntax.h" #include "Attribute.h" #include "Vector.h" #include "LocNode.h" #include "SdNode.h" #include "threads.h" #include "macros.h" #ifdef _MSC_VER #pragma warning ( disable : 4250 ) // inherits via dominance #endif #include #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef GROVE_NAMESPACE using namespace GROVE_NAMESPACE; #endif static bool blockingAccess = 1; size_t initialBlockSize = 8192; unsigned maxBlocksPerSize = 20; struct Chunk; struct ParentChunk; class ElementChunk; struct SgmlDocumentChunk; class DataChunk; class GroveImpl; class BaseNode; class ChunkNode; class ElementNode; class DataNode; class CdataAttributeValueNode; class AttributeValueTokenNode; class AttributeAsgnNode; class EntityNode; class NotationNode; class ExternalIdNode; class DocumentTypeNode; class SgmlConstantsNode; class MessageNode; struct Chunk { // second arg never null // Set ptr to a node pointing to first Node in this. virtual AccessResult setNodePtrFirst(NodePtr &ptr, const BaseNode *) const = 0; virtual AccessResult setNodePtrFirst(NodePtr &ptr, const ElementNode *node) const; virtual AccessResult setNodePtrFirst(NodePtr &ptr, const DataNode *node) const; virtual const Chunk *after() const = 0; virtual AccessResult getFollowing(const GroveImpl *, const Chunk *&, unsigned long &nNodes) const; virtual AccessResult getFirstSibling(const GroveImpl *, const Chunk *&) const; virtual const StringC *id() const; virtual Boolean getLocOrigin(const Origin *&) const; ParentChunk *origin; }; struct LocChunk : public Chunk { Index locIndex; }; struct ParentChunk : public LocChunk { ParentChunk() : nextSibling(0) { } Chunk *nextSibling; }; class ElementChunk : public ParentChunk { public: virtual const AttributeValue * attributeValue(size_t attIndex, const GroveImpl &grove) const; virtual Boolean mustOmitEndTag() const; virtual Boolean included() const; const AttributeDefinitionList *attDefList() const; AccessResult setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const; AccessResult setNodePtrFirst(NodePtr &ptr, const DataNode *node) const; AccessResult setNodePtrFirst(NodePtr &ptr, const ElementNode *node) const; static const StringC &key(const ElementChunk &chunk) { return *chunk.id(); } const Chunk *after() const; AccessResult getFollowing(const GroveImpl *, const Chunk *&, unsigned long &nNodes) const; private: friend class ElementNode; const ElementType *type; public: unsigned long elementIndex; }; inline const AttributeDefinitionList *ElementChunk::attDefList() const { return type->attributeDefTemp(); } class LocOriginChunk : public Chunk { public: LocOriginChunk(const Origin *lo) : locOrigin(lo) { } AccessResult setNodePtrFirst(NodePtr &ptr, const BaseNode *) const; AccessResult setNodePtrFirst(NodePtr &ptr, const ElementNode *node) const; AccessResult setNodePtrFirst(NodePtr &ptr, const DataNode *node) const; const Chunk *after() const; AccessResult getFollowing(const GroveImpl *, const Chunk *&, unsigned long &nNodes) const; Boolean getLocOrigin(const Origin *&) const; private: const Origin *locOrigin; }; class MessageItem { public: MessageItem(Node::Severity severity, const StringC &text, const Location &loc) : severity_(severity), text_(text), loc_(loc), next_(0) { } Node::Severity severity() const { return severity_; } const Location &loc() const { return loc_; } const StringC &text() const { return text_; } const MessageItem *next() const { return next_; } MessageItem **nextP() { return &next_; } private: Node::Severity severity_; StringC text_; Location loc_; MessageItem *next_; }; // multiple threads using const interface. class GroveImpl { public: GroveImpl(unsigned groveIndex); // Const interface void addRef() const { ++(((GroveImpl *)this)->refCount_); } void release() const { if (!--(((GroveImpl *)this)->refCount_)) delete (GroveImpl *)this; } unsigned groveIndex() const { return groveIndex_; } const SgmlDocumentChunk *root() const { return root_; } const AttributeValue *impliedAttributeValue() const { return impliedAttributeValue_.pointer(); } // Return 0 if not yet available. Boolean getAppinfo(const StringC *&) const; const SubstTable *generalSubstTable() const { return instanceSyntax_.isNull() ? 0 : instanceSyntax_->generalSubstTable(); } const SubstTable *entitySubstTable() const { return instanceSyntax_.isNull() ? 0 : instanceSyntax_->entitySubstTable(); } // Be careful not to change ref counts while accessing DTD. const Dtd *governingDtd() const { return dtd_.pointer(); } // must not be called till grove is complete Dtd::ConstEntityIter defaultedEntityIter() const; const Entity *lookupDefaultedEntity(const StringC &) const; const ElementChunk *lookupElement(const StringC &) const; typedef PointerTableIter ElementIter; // must not be called till grove is complete ElementIter elementIter() const; Boolean complete() const { return complete_; } const void *completeLimit() const { return completeLimit_; } const void *completeLimitWithLocChunkAfter() const { return completeLimitWithLocChunkAfter_; } const Origin *currentLocOrigin() const { return currentLocOrigin_; } Boolean hasDefaultEntity() const { return hasDefaultEntity_; } Boolean maybeMoreSiblings(const ParentChunk *chunk) const; // return zero for timeout Boolean waitForMoreNodes() const; AccessResult proxifyLocation(const Location &, Location &) const; const MessageItem *messageList() const { return messageList_; } // must not be called till grove is complete void getSd(ConstPtr &, ConstPtr &, ConstPtr &) const; // non-const interface void *allocChunk(size_t); void appendSibling(Chunk *); void appendSibling(DataChunk *); Boolean tryExtend(size_t n) { if (n <= nFree_) { nFree_ -= n; freePtr_ += n; return 1; } else return 0; } DataChunk *pendingData() { return pendingData_; } void push(ElementChunk *, Boolean hasId); void pop(); void setAppinfo(const StringC &); void setDtd(const ConstPtr &dtd); void setSd(const ConstPtr &, const ConstPtr &, const ConstPtr &); void storeAttributeValue(const ConstPtr &value) { values_.push_back(value); } void addDefaultedEntity(const ConstPtr &); void setComplete(); Boolean haveRootOrigin(); void setLocOrigin(const ConstPtr &); void appendMessage(MessageItem *); private: GroveImpl(const GroveImpl &); void operator=(const GroveImpl &); ~GroveImpl(); Boolean maybeMoreSiblings1(const ParentChunk *) const; void *allocFinish(size_t); void pulse(); void maybePulse(); void finishDocumentElement(); void finishProlog(); void addBarrier(); void storeLocOrigin(const ConstPtr &); struct BlockHeader { BlockHeader() : next(0) { } BlockHeader *next; }; unsigned groveIndex_; SgmlDocumentChunk *root_; ParentChunk *origin_; DataChunk *pendingData_; Chunk **tailPtr_; ConstPtr dtd_; ConstPtr sd_; ConstPtr prologSyntax_; ConstPtr instanceSyntax_; ConstPtr impliedAttributeValue_; Vector > values_; Vector > origins_; NamedResourceTable defaultedEntityTable_; PointerTable idTable_; Boolean hasDefaultEntity_; Boolean haveAppinfo_; StringC appinfo_; const Origin *currentLocOrigin_; Boolean complete_; const void *completeLimit_; const void *completeLimitWithLocChunkAfter_; // pointer to first free byte in current block char *freePtr_; // free bytes in current block // there's space for a forwarding chunk after this if freePtr_ != 0 size_t nFree_; // the head of the list of blocks BlockHeader *blocks_; // where to store pointer to next block BlockHeader **blockTailPtr_; // current normal size for a block size_t blockAllocSize_; // number of blocks allocated at this size size_t nBlocksThisSizeAlloced_; RefCount refCount_; Condition moreNodesCondition_; Mutex mutex_; Mutex *mutexPtr_; unsigned pulseStep_; unsigned long nEvents_; unsigned long nElements_; enum { maxChunksWithoutLocOrigin = 100 }; unsigned nChunksSinceLocOrigin_; MessageItem *messageList_; MessageItem **messageListTailP_; }; class GroveImplPtr { public: GroveImplPtr(const GroveImpl *grove) : grove_(grove) { grove_->addRef(); } ~GroveImplPtr() { grove_->release(); } const GroveImpl *operator->() const { return grove_; } operator const GroveImpl *() const { return grove_; } private: GroveImplPtr(const GroveImplPtr &); // undefined void operator=(const GroveImplPtr &); // undefined const GroveImpl *grove_; }; class GroveImplProxyOrigin : public ProxyOrigin { public: GroveImplProxyOrigin(const GroveImpl *grove, const Origin *origin) : grove_(grove), ProxyOrigin(origin) { } private: GroveImplPtr grove_; }; class GroveBuilderMessageEventHandler : public ErrorCountEventHandler { public: GroveBuilderMessageEventHandler(unsigned groveIndex, Messenger *mgr, MessageFormatter *msgFmt_); ~GroveBuilderMessageEventHandler(); void message(MessageEvent *); void sgmlDecl(SgmlDeclEvent *); void makeInitialRoot(NodePtr &); void setSd(const ConstPtr &, const ConstPtr &, const ConstPtr &); protected: GroveImpl *grove_; private: Messenger *mgr_; MessageFormatter *msgFmt_; }; class GroveBuilderEventHandler : public GroveBuilderMessageEventHandler { public: GroveBuilderEventHandler(unsigned groveIndex, Messenger *mgr, MessageFormatter *msgFmt_); void appinfo(AppinfoEvent *); void startElement(StartElementEvent *); void endElement(EndElementEvent *); void data(DataEvent *); void sdataEntity(SdataEntityEvent *); void nonSgmlChar(NonSgmlCharEvent *); void externalDataEntity(ExternalDataEntityEvent *); void subdocEntity(SubdocEntityEvent *); void pi(PiEvent *); void endProlog(EndPrologEvent *); void entityDefaulted(EntityDefaultedEvent *); }; inline void setString(GroveString &to, const StringC &from) { to.assign(from.data(), from.size()); } inline bool operator==(const StringC &str1, const GroveString &str2) { return (str1.size() == str2.size() && memcmp(str1.data(), str2.data(), str1.size()*sizeof(Char)) == 0); } inline bool operator!=(const StringC &str1, const GroveString &str2) { return !(str1 == str2); } inline size_t roundUp(size_t n) { return (n + (sizeof(void *) - 1)) & ~(sizeof(void *) - 1); } // All nodes in this grove must be derived from BaseNode. class BaseNode : public Node, public LocNode { public: BaseNode(const GroveImpl *grove); virtual ~BaseNode(); void addRef(); void release(); bool canReuse(NodePtr &ptr) const; unsigned groveIndex() const; bool operator==(const Node &node) const; // Implemented with double dispatching. virtual bool same(const BaseNode &) const = 0; // The second half of the dispatch. virtual bool same2(const ChunkNode *) const; virtual bool same2(const DataNode *) const; virtual bool same2(const AttributeAsgnNode *) const; virtual bool same2(const AttributeValueTokenNode *) const; virtual bool same2(const CdataAttributeValueNode *) const; virtual bool same2(const EntityNode *) const; virtual bool same2(const NotationNode *) const; virtual bool same2(const ExternalIdNode *) const; virtual bool same2(const DocumentTypeNode *) const; virtual bool same2(const SgmlConstantsNode *) const; virtual bool same2(const MessageNode *) const; const GroveImpl *grove() const { return grove_; } AccessResult nextSibling(NodePtr &ptr) const; AccessResult follow(NodeListPtr &ptr) const; AccessResult children(NodeListPtr &) const; AccessResult getOrigin(NodePtr &ptr) const; AccessResult getGroveRoot(NodePtr &ptr) const; AccessResult getLocation(Location &) const; bool queryInterface(IID, const void *&) const; bool chunkContains(const Node &) const; bool inChunk(const DataNode *node) const; bool inChunk(const CdataAttributeValueNode *) const; protected: static unsigned long secondHash(unsigned long n) { return n * 1001; } private: unsigned refCount_; GroveImplPtr grove_; }; inline BaseNode::BaseNode(const GroveImpl *grove) : grove_(grove), refCount_(0) { } inline bool BaseNode::canReuse(NodePtr &ptr) const { const Node *tem = &*ptr; return tem == this && refCount_ == 1; } struct ForwardingChunk : Chunk { ForwardingChunk(const Chunk *to, ParentChunk *p) : forwardTo(to) { origin = p; } AccessResult setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const; AccessResult getFollowing(const GroveImpl *, const Chunk *&, unsigned long &nNodes) const; const Chunk *after() const { return forwardTo; } const Chunk *forwardTo; }; class ChunkNode : public BaseNode { public: ChunkNode(const GroveImpl *grove, const LocChunk *chunk); const LocChunk *chunk() const { return chunk_; } bool same(const BaseNode &node) const; bool same2(const ChunkNode *node) const; unsigned long hash() const; AccessResult getParent(NodePtr &ptr) const; AccessResult getTreeRoot(NodePtr &ptr) const; AccessResult getOrigin(NodePtr &) const; AccessResult getOriginToSubnodeRelPropertyName(ComponentName::Id &) const; AccessResult nextChunkSibling(NodePtr &) const; AccessResult nextChunkAfter(NodePtr &) const; AccessResult firstSibling(NodePtr &) const; AccessResult siblingsIndex(unsigned long &) const; AccessResult followSiblingRef(unsigned long, NodePtr &) const; AccessResult getLocation(Location &) const; protected: const LocChunk *chunk_; // never null }; inline ChunkNode::ChunkNode(const GroveImpl *grove, const LocChunk *chunk) : BaseNode(grove), chunk_(chunk) { } class SgmlDocumentNode; struct SgmlDocumentChunk : public ParentChunk { SgmlDocumentChunk() : prolog(0), documentElement(0), epilog(0) { } Chunk *prolog; Chunk *documentElement; Chunk *epilog; AccessResult setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const; const Chunk *after() const { return this + 1; } }; class SgmlDocumentNode : public ChunkNode, public SdNode { public: SgmlDocumentNode(const GroveImpl *grove, const SgmlDocumentChunk *chunk); void accept(NodeVisitor &visitor); const ClassDef &classDef() const { return ClassDef::sgmlDocument; } AccessResult getDocumentElement(NodePtr &ptr) const; AccessResult getElements(NamedNodeListPtr &ptr) const; AccessResult getEntities(NamedNodeListPtr &ptr) const; AccessResult getDefaultedEntities(NamedNodeListPtr &ptr) const; AccessResult getGoverningDoctype(NodePtr &ptr) const; AccessResult getDoctypesAndLinktypes(NamedNodeListPtr &ptr) const; AccessResult getProlog(NodeListPtr &ptr) const; AccessResult getEpilog(NodeListPtr &ptr) const; AccessResult getSgmlConstants(NodePtr &) const; AccessResult getApplicationInfo(GroveString &str) const; AccessResult getMessages(NodeListPtr &ptr) const; AccessResult nextChunkSibling(NodePtr &) const { return accessNotInClass; } AccessResult firstSibling(NodePtr &) const { return accessNotInClass; } AccessResult siblingsIndex(unsigned long &) const { return accessNotInClass; } AccessResult getOriginToSubnodeRelPropertyName(ComponentName::Id &) const { return accessNull; } AccessResult getSd(ConstPtr &sd, ConstPtr &prologSyntax, ConstPtr &instanceSyntax) const; private: const SgmlDocumentChunk *chunk() const { return (const SgmlDocumentChunk *)ChunkNode::chunk(); } }; inline SgmlDocumentNode::SgmlDocumentNode(const GroveImpl *grove, const SgmlDocumentChunk *chunk) : ChunkNode(grove, chunk) { } // array of pointers to attribute values stored after chunk class AttElementChunk : private ElementChunk { protected: AttElementChunk(size_t n) : nAtts(n) { } friend class ElementNode; private: const AttributeValue * attributeValue(size_t attIndex, const GroveImpl &) const; Boolean mustOmitEndTag() const; const Chunk *after() const; const StringC *id() const; size_t nAtts; }; class IncludedElementChunk : public ElementChunk { friend class ElementNode; Boolean included() const; }; class IncludedAttElementChunk : public AttElementChunk { IncludedAttElementChunk(size_t n) : AttElementChunk(n) { } friend class ElementNode; Boolean included() const; }; class ElementNode : public ChunkNode { public: friend class ElementChunk; ElementNode(const GroveImpl *grove, const ElementChunk *chunk) : ChunkNode(grove, chunk) { } AccessResult attributeRef(unsigned long i, NodePtr &ptr) const; AccessResult nextChunkSibling(NodePtr &ptr) const; AccessResult nextChunkAfter(NodePtr &) const; AccessResult firstChild(NodePtr &ptr) const; AccessResult getAttributes(NamedNodeListPtr &ptr) const; AccessResult getGi(GroveString &str) const; bool hasGi(GroveString) const; AccessResult getId(GroveString &str) const; AccessResult getContent(NodeListPtr &ptr) const; AccessResult getMustOmitEndTag(bool &) const; AccessResult getIncluded(bool &) const; AccessResult elementIndex(unsigned long &) const; void accept(NodeVisitor &visitor); const ClassDef &classDef() const { return ClassDef::element; } static void add(GroveImpl &grove, const StartElementEvent &event); private: static ElementChunk *makeAttElementChunk(GroveImpl &grove, const StartElementEvent &, Boolean &hasId); const ElementChunk *chunk() const { return (const ElementChunk *)ChunkNode::chunk(); } void reuseFor(const ElementChunk *chunk) { chunk_ = chunk; } }; class CharsChunk : public LocChunk { public: const Chunk *after() const { return (const Chunk *)((char *)this + allocSize(size)); } const Char *data() const { return (const Char *)(this + 1); } size_t size; static size_t allocSize(size_t nChars) { return roundUp(sizeof(CharsChunk) + nChars*sizeof(Char)); } }; // The characters immediately follow the chunk class DataChunk : public CharsChunk { private: friend class DataNode; AccessResult setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const; AccessResult setNodePtrFirst(NodePtr &ptr, const ElementNode *node) const; AccessResult setNodePtrFirst(NodePtr &ptr, const DataNode *node) const; AccessResult getFollowing(const GroveImpl *, const Chunk *&, unsigned long &) const; }; class DataNode : public ChunkNode { public: friend class DataChunk; DataNode(const GroveImpl *, const DataChunk *chunk, size_t index); bool same(const BaseNode &node) const; bool same2(const DataNode *node) const; AccessResult nextSibling(NodePtr &ptr) const; AccessResult nextChunkSibling(NodePtr &ptr) const; AccessResult nextChunkAfter(NodePtr &) const; AccessResult siblingsIndex(unsigned long &) const; AccessResult followSiblingRef(unsigned long, NodePtr &) const; AccessResult charChunk(const SdataMapper &, GroveString &) const; bool chunkContains(const Node &) const; bool inChunk(const DataNode *node) const; AccessResult getNonSgml(unsigned long &) const; AccessResult getLocation(Location &) const; void accept(NodeVisitor &visitor); const ClassDef &classDef() const { return ClassDef::dataChar; } unsigned long hash() const; static void add(GroveImpl &grove, const DataEvent &event); private: const DataChunk *chunk() const { return (const DataChunk *)ChunkNode::chunk(); } void reuseFor(const DataChunk *chunk, size_t index); size_t index_; }; inline DataNode::DataNode(const GroveImpl *grove, const DataChunk *chunk, size_t index) : ChunkNode(grove, chunk), index_(index) { } class PiChunk : private CharsChunk { friend class PiNode; AccessResult setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const; }; class PrologPiChunk : public PiChunk { AccessResult getFirstSibling(const GroveImpl *, const Chunk *&) const; }; class EpilogPiChunk : public PiChunk { AccessResult getFirstSibling(const GroveImpl *, const Chunk *&) const; }; class PiNode : public ChunkNode { public: PiNode(const GroveImpl *grove, const PiChunk *chunk) : ChunkNode(grove, chunk) {} AccessResult getSystemData(GroveString &) const; AccessResult getEntityName(GroveString &) const{ return accessNull; } AccessResult getEntity(NodePtr &) const { return accessNull; } void accept(NodeVisitor &visitor) { visitor.pi(*this); } const ClassDef &classDef() const { return ClassDef::pi; } static void add(GroveImpl &grove, const PiEvent &); private: const PiChunk *chunk() const { return (const PiChunk *)ChunkNode::chunk(); } }; class EntityRefChunk : public LocChunk { public: const Entity *entity; const Chunk *after() const { return this + 1; } }; class EntityRefNode : public ChunkNode { public: EntityRefNode(const GroveImpl *grove, const EntityRefChunk *chunk) : ChunkNode(grove, chunk) { } AccessResult getEntity(NodePtr &) const; AccessResult getEntityName(GroveString &) const; protected: const EntityRefChunk *chunk() const { return (const EntityRefChunk *)ChunkNode::chunk(); } }; class SdataNode; class SdataChunk : private EntityRefChunk { friend class SdataNode; AccessResult setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const; }; class SdataNode : public EntityRefNode { public: SdataNode(const GroveImpl *grove, const SdataChunk *chunk) : EntityRefNode(grove, chunk) { } AccessResult charChunk(const SdataMapper &, GroveString &) const; AccessResult getSystemData(GroveString &str) const; void accept(NodeVisitor &visitor) { visitor.sdata(*this); } const ClassDef &classDef() const { return ClassDef::sdata; } static void add(GroveImpl &grove, const SdataEntityEvent &event); private: Char c_; }; class NonSgmlNode; class NonSgmlChunk : public LocChunk { public: Char c; AccessResult setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const; const Chunk *after() const { return this + 1; } }; class NonSgmlNode : public ChunkNode { public: NonSgmlNode(const GroveImpl *grove, const NonSgmlChunk *chunk) : ChunkNode(grove, chunk) { } AccessResult charChunk(const SdataMapper &, GroveString &) const; AccessResult getNonSgml(unsigned long &) const; void accept(NodeVisitor &visitor) { visitor.nonSgml(*this); } const ClassDef &classDef() const { return ClassDef::nonSgml; } static void add(GroveImpl &grove, const NonSgmlCharEvent &event); protected: const NonSgmlChunk *chunk() const { return (const NonSgmlChunk *)ChunkNode::chunk(); } }; class ExternalDataNode; class ExternalDataChunk : private EntityRefChunk { friend class ExternalDataNode; AccessResult setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const; }; class ExternalDataNode : public EntityRefNode { public: ExternalDataNode(const GroveImpl *grove, const ExternalDataChunk *chunk) : EntityRefNode(grove, chunk) { } void accept(NodeVisitor &visitor) { visitor.externalData(*this); } const ClassDef &classDef() const { return ClassDef::externalData; } static void add(GroveImpl &grove, const ExternalDataEntityEvent &event); }; class SubdocChunk : private EntityRefChunk { friend class SubdocNode; AccessResult setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const; }; class SubdocNode : public EntityRefNode { public: SubdocNode(const GroveImpl *grove, const SubdocChunk *chunk) : EntityRefNode(grove, chunk) { } void accept(NodeVisitor &visitor) { visitor.subdocument(*this); } const ClassDef &classDef() const { return ClassDef::subdocument; } static void add(GroveImpl &grove, const SubdocEntityEvent &event); }; class PiEntityChunk : private EntityRefChunk { friend class PiEntityNode; AccessResult setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const; }; class PiEntityNode : public EntityRefNode { public: PiEntityNode(const GroveImpl *grove, const PiEntityChunk *chunk) : EntityRefNode(grove, chunk) { } AccessResult getSystemData(GroveString &) const; void accept(NodeVisitor &visitor) { visitor.pi(*this); } const ClassDef &classDef() const { return ClassDef::pi; } static void add(GroveImpl &grove, const Entity *, const Location &); }; struct AttributeOrigin { virtual const AttributeDefinitionList *attDefList() const = 0; virtual const AttributeValue * attributeValue(size_t attIndex, const GroveImpl &grove) const = 0; virtual AccessResult setNodePtrAttributeOrigin(NodePtr &, const BaseNode *) const = 0; virtual Node *makeCdataAttributeValueNode(const GroveImpl *grove, const AttributeValue *value, size_t attIndex, const TextIter &iter, size_t charIndex = 0) const = 0; virtual Node *makeAttributeValueTokenNode(const GroveImpl *grove, const TokenizedAttributeValue *value, size_t attIndex, size_t tokenIndex) const = 0; virtual Node *makeAttributeAsgnNode(const GroveImpl *grove, size_t attIndex) const = 0; virtual const void *attributeOriginId() const = 0; }; class ElementAttributeOrigin : public virtual AttributeOrigin { public: ElementAttributeOrigin(const ElementChunk *); const AttributeDefinitionList *attDefList() const; const AttributeValue * attributeValue(size_t attIndex, const GroveImpl &grove) const; AccessResult setNodePtrAttributeOrigin(NodePtr &, const BaseNode *) const; Node *makeCdataAttributeValueNode(const GroveImpl *grove, const AttributeValue *value, size_t attIndex, const TextIter &iter, size_t charIndex) const; Node *makeAttributeValueTokenNode(const GroveImpl *grove, const TokenizedAttributeValue *value, size_t attIndex, size_t tokenIndex) const; Node *makeAttributeAsgnNode(const GroveImpl *grove, size_t attIndex) const; const void *attributeOriginId() const; private: const ElementChunk *chunk_; }; class EntityAttributeOrigin : public virtual AttributeOrigin { public: EntityAttributeOrigin(const ExternalDataEntity *); const AttributeDefinitionList *attDefList() const; const AttributeValue * attributeValue(size_t attIndex, const GroveImpl &grove) const; AccessResult setNodePtrAttributeOrigin(NodePtr &, const BaseNode *) const; Node *makeCdataAttributeValueNode(const GroveImpl *grove, const AttributeValue *value, size_t attIndex, const TextIter &iter, size_t charIndex) const; Node *makeAttributeValueTokenNode(const GroveImpl *grove, const TokenizedAttributeValue *value, size_t attIndex, size_t tokenIndex) const; Node *makeAttributeAsgnNode(const GroveImpl *grove, size_t attIndex) const; const void *attributeOriginId() const; private: const ExternalDataEntity *entity_; }; class AttributeAsgnNode : public BaseNode, public virtual AttributeOrigin { public: AttributeAsgnNode(const GroveImpl *grove, size_t attIndex); AccessResult getOrigin(NodePtr &ptr) const; AccessResult getName(GroveString &str) const; AccessResult getImplied(bool &implied) const; AccessResult getValue(NodeListPtr &ptr) const; AccessResult children(NodeListPtr &ptr) const; AccessResult firstChild(NodePtr &ptr) const; AccessResult nextChunkSibling(NodePtr &ptr) const; AccessResult followSiblingRef(unsigned long, NodePtr &) const; AccessResult firstSibling(NodePtr &) const; AccessResult siblingsIndex(unsigned long &) const; AccessResult getTokenSep(Char &) const; AccessResult tokens(GroveString &) const; void accept(NodeVisitor &visitor); const ClassDef &classDef() const { return ClassDef::attributeAssignment; } AccessResult getOriginToSubnodeRelPropertyName(ComponentName::Id &name) const { name = ComponentName::idAttributes; return accessOK; } bool same(const BaseNode &node) const; bool same2(const AttributeAsgnNode *node) const; unsigned long hash() const; private: size_t attIndex_; }; class ElementAttributeAsgnNode : public AttributeAsgnNode, public ElementAttributeOrigin { public: ElementAttributeAsgnNode(const GroveImpl *grove, size_t attIndex, const ElementChunk *); }; class EntityAttributeAsgnNode : public AttributeAsgnNode, public EntityAttributeOrigin { public: EntityAttributeAsgnNode(const GroveImpl *grove, size_t attIndex, const ExternalDataEntity *); }; class AttributeValueTokenNode : public BaseNode, public virtual AttributeOrigin { public: AttributeValueTokenNode(const GroveImpl *grove, const TokenizedAttributeValue *value, size_t attIndex, size_t tokenIndex); AccessResult getParent(NodePtr &ptr) const; AccessResult nextChunkSibling(NodePtr &ptr) const; AccessResult followSiblingRef(unsigned long, NodePtr &ptr) const; AccessResult firstSibling(NodePtr &) const; AccessResult siblingsIndex(unsigned long &) const; AccessResult getToken(GroveString &str) const; AccessResult getEntity(NodePtr &ptr) const; AccessResult getNotation(NodePtr &ptr) const; AccessResult getReferent(NodePtr &ptr) const; AccessResult getLocation(Location &) const; void accept(NodeVisitor &visitor); const ClassDef &classDef() const { return ClassDef::attributeValueToken; } AccessResult getOriginToSubnodeRelPropertyName(ComponentName::Id &name) const { name = ComponentName::idValue; return accessOK; } bool same(const BaseNode &node) const; bool same2(const AttributeValueTokenNode *node) const; unsigned long hash() const; private: const TokenizedAttributeValue *value_; size_t attIndex_; size_t tokenIndex_; }; class ElementAttributeValueTokenNode : public AttributeValueTokenNode, public ElementAttributeOrigin { public: ElementAttributeValueTokenNode(const GroveImpl *grove, const TokenizedAttributeValue *value, size_t attIndex, size_t tokenIndex, const ElementChunk *); }; class EntityAttributeValueTokenNode : public AttributeValueTokenNode, public EntityAttributeOrigin { public: EntityAttributeValueTokenNode(const GroveImpl *grove, const TokenizedAttributeValue *value, size_t attIndex, size_t tokenIndex, const ExternalDataEntity *); }; class CdataAttributeValueNode : public BaseNode, public virtual AttributeOrigin { public: static bool skipBoring(TextIter &iter); CdataAttributeValueNode(const GroveImpl *grove, const AttributeValue *value, size_t attIndex, const TextIter &iter, size_t charIndex); AccessResult getParent(NodePtr &ptr) const; AccessResult charChunk(const SdataMapper &, GroveString &) const; bool chunkContains(const Node &) const; bool inChunk(const CdataAttributeValueNode *) const; AccessResult getEntity(NodePtr &) const; AccessResult getEntityName(GroveString &) const; AccessResult getSystemData(GroveString &str) const; AccessResult nextSibling(NodePtr &ptr) const; AccessResult nextChunkSibling(NodePtr &ptr) const; AccessResult firstSibling(NodePtr &) const; AccessResult siblingsIndex(unsigned long &) const; AccessResult getLocation(Location &) const; void accept(NodeVisitor &visitor); const ClassDef &classDef() const; AccessResult getOriginToSubnodeRelPropertyName(ComponentName::Id &name) const { name = ComponentName::idValue; return accessOK; } bool same(const BaseNode &node) const; bool same2(const CdataAttributeValueNode *node) const; unsigned long hash() const; private: const AttributeValue *value_; size_t attIndex_; TextIter iter_; // must be valid size_t charIndex_; Char c_; }; class ElementCdataAttributeValueNode : public CdataAttributeValueNode, public ElementAttributeOrigin { public: ElementCdataAttributeValueNode(const GroveImpl *grove, const AttributeValue *value, size_t attIndex, const TextIter &iter, size_t charIndex, const ElementChunk *); }; class EntityCdataAttributeValueNode : public CdataAttributeValueNode, public EntityAttributeOrigin { public: EntityCdataAttributeValueNode(const GroveImpl *grove, const AttributeValue *value, size_t attIndex, const TextIter &iter, size_t charIndex, const ExternalDataEntity *); }; class EntityNode : public BaseNode { public: EntityNode(const GroveImpl *grove, const Entity *entity); AccessResult getOrigin(NodePtr &ptr) const; AccessResult getOriginToSubnodeRelPropertyName(ComponentName::Id &) const; AccessResult getName(GroveString &str) const; AccessResult getExternalId(NodePtr &ptr) const; AccessResult getNotation(NodePtr &) const; AccessResult getNotationName(GroveString &) const; AccessResult getText(GroveString &) const; AccessResult getEntityType(EntityType &) const; AccessResult getDefaulted(bool &) const; AccessResult getAttributes(NamedNodeListPtr &) const; AccessResult attributeRef(unsigned long i, NodePtr &ptr) const; AccessResult getLocation(Location &) const; bool same(const BaseNode &) const; bool same2(const EntityNode *) const; void accept(NodeVisitor &); const ClassDef &classDef() const { return ClassDef::entity; } unsigned long hash() const; private: const Entity *entity_; }; class NotationNode : public BaseNode { public: NotationNode(const GroveImpl *grove, const Notation *notation); AccessResult getOrigin(NodePtr &ptr) const; AccessResult getOriginToSubnodeRelPropertyName(ComponentName::Id &name) const { name = ComponentName::idNotations; return accessOK; } AccessResult getName(GroveString &str) const; AccessResult getExternalId(NodePtr &ptr) const; bool same(const BaseNode &) const; bool same2(const NotationNode *) const; AccessResult getLocation(Location &) const; void accept(NodeVisitor &); const ClassDef &classDef() const { return ClassDef::notation; } unsigned long hash() const; private: const Notation *notation_; }; class ExternalIdNode : public BaseNode { public: ExternalIdNode(const GroveImpl *grove); virtual const ExternalId &externalId() const = 0; AccessResult getPublicId(GroveString &) const; AccessResult getSystemId(GroveString &) const; AccessResult getGeneratedSystemId(GroveString &) const; void accept(NodeVisitor &); const ClassDef &classDef() const { return ClassDef::externalId; } AccessResult getOriginToSubnodeRelPropertyName(ComponentName::Id &name) const { name = ComponentName::idExternalId; return accessOK; } bool same(const BaseNode &) const; bool same2(const ExternalIdNode *) const; }; class EntityExternalIdNode : public ExternalIdNode { public: EntityExternalIdNode(const GroveImpl *grove, const ExternalEntity *entity); const ExternalId &externalId() const; AccessResult getOrigin(NodePtr &ptr) const; unsigned long hash() const; private: const ExternalEntity *entity_; }; class NotationExternalIdNode : public ExternalIdNode { public: NotationExternalIdNode(const GroveImpl *grove, const Notation *notation); const ExternalId &externalId() const; AccessResult getOrigin(NodePtr &ptr) const; unsigned long hash() const; private: const Notation *notation_; }; class DocumentTypeNode : public BaseNode { public: DocumentTypeNode(const GroveImpl *grove, const Dtd *); AccessResult getName(GroveString &) const; AccessResult getGoverning(bool &) const; AccessResult getGeneralEntities(NamedNodeListPtr &) const; AccessResult getNotations(NamedNodeListPtr &) const; AccessResult getOrigin(NodePtr &) const; AccessResult getOriginToSubnodeRelPropertyName(ComponentName::Id &name) const { name = ComponentName::idDoctypesAndLinktypes; return accessOK; } AccessResult nextChunkSibling(NodePtr &) const; void accept(NodeVisitor &); const ClassDef &classDef() const { return ClassDef::documentType; } bool same(const BaseNode &) const; bool same2(const DocumentTypeNode *) const; private: const Dtd *dtd_; }; class SgmlConstantsNode : public BaseNode { public: SgmlConstantsNode(const GroveImpl *); AccessResult getOrigin(NodePtr &) const; void accept(NodeVisitor &); const ClassDef &classDef() const { return ClassDef::sgmlConstants; } AccessResult getOriginToSubnodeRelPropertyName(ComponentName::Id &name) const { name = ComponentName::idSgmlConstants; return accessOK; } bool same(const BaseNode &) const; bool same2(const SgmlConstantsNode *) const; }; class MessageNode : public BaseNode { public: MessageNode(const GroveImpl *, const MessageItem *); AccessResult getOrigin(NodePtr &) const; AccessResult getOriginToSubnodeRelPropertyName(ComponentName::Id &name) const { name = ComponentName::noId; return accessOK; } AccessResult nextChunkSibling(NodePtr &) const; AccessResult firstSibling(NodePtr &) const; AccessResult siblingsIndex(unsigned long &) const; void accept(NodeVisitor &); const ClassDef &classDef() const { return ClassDef::message; } bool same(const BaseNode &) const; bool same2(const MessageNode *) const; AccessResult getLocation(Location &) const; AccessResult getText(GroveString &) const; AccessResult getSeverity(Severity &) const; private: const MessageItem *item_; }; class BaseNodeList : public NodeList { public: BaseNodeList() : refCount_(0) { } virtual ~BaseNodeList() { } void addRef() { ++refCount_; } bool canReuse(NodeListPtr &ptr) const { const NodeList *tem = &*ptr; return tem == this && refCount_ == 1; } void release() { ASSERT(refCount_ != 0); if (--refCount_ == 0) delete this; } AccessResult first(NodePtr &) const { return accessNull; } AccessResult rest(NodeListPtr &ptr) const { return chunkRest(ptr); } AccessResult chunkRest(NodeListPtr &) const { return accessNull; } private: unsigned refCount_; }; class SiblingNodeList : public BaseNodeList { public: SiblingNodeList(const NodePtr &first) : first_(first) { } AccessResult first(NodePtr &ptr) const { ptr = first_; return accessOK; } AccessResult rest(NodeListPtr &ptr) const { AccessResult ret; if (canReuse(ptr)) { ret = ((SiblingNodeList *)this)->first_.assignNextSibling(); if (ret == accessOK) return ret; } else { NodePtr next; ret = first_->nextSibling(next); if (ret == accessOK) { ptr.assign(new SiblingNodeList(next)); return ret; } } if (ret == accessNull) { ptr.assign(new BaseNodeList); return accessOK; } return ret; } AccessResult chunkRest(NodeListPtr &ptr) const { AccessResult ret; if (canReuse(ptr)) { ret = ((SiblingNodeList *)this)->first_.assignNextChunkSibling(); if (ret == accessOK) return ret; } else { NodePtr next; ret = first_->nextChunkSibling(next); if (ret == accessOK) { ptr.assign(new SiblingNodeList(next)); return ret; } } if (ret == accessNull) { ptr.assign(new BaseNodeList); return accessOK; } return ret; } AccessResult ref(unsigned long i, NodePtr &ptr) const { if (i == 0) { ptr = first_; return accessOK; } return first_->followSiblingRef(i - 1, ptr); } private: NodePtr first_; // never null }; class BaseNamedNodeList : public NamedNodeList { public: BaseNamedNodeList(const GroveImpl *grove, const SubstTable *substTable) : grove_(grove), substTable_(substTable), refCount_(0) { } virtual ~BaseNamedNodeList() { } void addRef() { ++refCount_; } bool canReuse(NamedNodeListPtr &ptr) const { const NamedNodeList *tem = &*ptr; return tem == this && refCount_ == 1; } void release() { ASSERT(refCount_ != 0); if (--refCount_ == 0) delete this; } size_t normalize(Char *s, size_t n) const { if (substTable_) { for (size_t i = 0; i < n; i++) substTable_->subst(s[i]); } return n; } const GroveImpl *grove() const { return grove_; } AccessResult namedNode(GroveString str, NodePtr &node) const { StringC tem(str.data(), str.size()); normalize(&tem[0], tem.size()); return namedNodeU(tem, node); } virtual AccessResult namedNodeU(const StringC &, NodePtr &) const = 0; private: GroveImplPtr grove_; const SubstTable *substTable_; unsigned refCount_; }; class AttributesNamedNodeList : public BaseNamedNodeList, public virtual AttributeOrigin { public: AttributesNamedNodeList(const GroveImpl *grove) : BaseNamedNodeList(grove, grove->generalSubstTable()) { } NodeListPtr nodeList() const; AccessResult namedNodeU(const StringC &, NodePtr &) const; Type type() const { return attributes; } }; class ElementAttributesNamedNodeList : public AttributesNamedNodeList, public ElementAttributeOrigin { public: ElementAttributesNamedNodeList(const GroveImpl *grove, const ElementChunk *chunk) : AttributesNamedNodeList(grove), ElementAttributeOrigin(chunk) { } }; class EntityAttributesNamedNodeList : public AttributesNamedNodeList, public EntityAttributeOrigin { public: EntityAttributesNamedNodeList(const GroveImpl *grove, const ExternalDataEntity *entity) : AttributesNamedNodeList(grove), EntityAttributeOrigin(entity) { } }; class ElementsNamedNodeList : public BaseNamedNodeList { public: ElementsNamedNodeList(const GroveImpl *grove) : BaseNamedNodeList(grove, grove->generalSubstTable()) { } NodeListPtr nodeList() const; AccessResult namedNodeU(const StringC &, NodePtr &) const; Type type() const { return elements; } }; class DocEntitiesNamedNodeList : public BaseNamedNodeList { public: DocEntitiesNamedNodeList(const GroveImpl *grove) : BaseNamedNodeList(grove, grove->entitySubstTable()) { } NodeListPtr nodeList() const; AccessResult namedNodeU(const StringC &, NodePtr &) const; Type type() const { return entities; } }; class DefaultedEntitiesNamedNodeList : public BaseNamedNodeList { public: DefaultedEntitiesNamedNodeList(const GroveImpl *grove) : BaseNamedNodeList(grove, grove->entitySubstTable()) { } NodeListPtr nodeList() const; AccessResult namedNodeU(const StringC &, NodePtr &) const; Type type() const { return entities; } }; class GeneralEntitiesNamedNodeList : public BaseNamedNodeList { public: GeneralEntitiesNamedNodeList(const GroveImpl *, const Dtd *); NodeListPtr nodeList() const; AccessResult namedNodeU(const StringC &, NodePtr &) const; Type type() const { return entities; } private: const Dtd *dtd_; }; class NotationsNamedNodeList : public BaseNamedNodeList { public: NotationsNamedNodeList(const GroveImpl *, const Dtd *); NodeListPtr nodeList() const; AccessResult namedNodeU(const StringC &, NodePtr &) const; Type type() const { return notations; } private: const Dtd *dtd_; }; class DoctypesAndLinktypesNamedNodeList : public BaseNamedNodeList { public: DoctypesAndLinktypesNamedNodeList(const GroveImpl *); NodeListPtr nodeList() const; AccessResult namedNodeU(const StringC &, NodePtr &) const; Type type() const { return doctypesAndLinktypes; } }; class ElementsNodeList : public BaseNodeList { public: ElementsNodeList(const GroveImpl *grove, const Chunk *head); AccessResult first(NodePtr &) const; AccessResult chunkRest(NodeListPtr &) const; public: GroveImplPtr grove_; const Chunk *first_; }; class EntitiesNodeList : public BaseNodeList { public: EntitiesNodeList(const GroveImpl *grove, const Dtd::ConstEntityIter &iter); AccessResult first(NodePtr &) const; AccessResult chunkRest(NodeListPtr &) const; protected: const GroveImpl *grove() const { return grove_; } public: GroveImplPtr grove_; Dtd::ConstEntityIter iter_; }; class DocEntitiesNodeList : public EntitiesNodeList { public: DocEntitiesNodeList(const GroveImpl *grove); AccessResult first(NodePtr &) const; AccessResult chunkRest(NodeListPtr &) const; }; class NotationsNodeList : public BaseNodeList { public: NotationsNodeList(const GroveImpl *grove, const Dtd::ConstNotationIter &iter); AccessResult first(NodePtr &) const; AccessResult chunkRest(NodeListPtr &) const; public: GroveImplPtr grove_; Dtd::ConstNotationIter iter_; }; inline Boolean GroveImpl::waitForMoreNodes() const { if (blockingAccess) return moreNodesCondition_.wait(); else return 0; } inline void GroveImpl::pulse() { moreNodesCondition_.pulse(); } inline void GroveImpl::maybePulse() { // Once we've had (2^n)*(2^10) events, only pulse every (2^n)th event. // Up to a limit of n == 8. // This reduces the overhead of pulsing to negligible levels on WinNT. if ((++nEvents_ & ~(~unsigned(0) << pulseStep_)) == 0) { pulse(); if (pulseStep_ < 8 && nEvents_ > (1 << (pulseStep_ + 10))) pulseStep_++; } } inline void GroveImpl::appendSibling(Chunk *chunk) { if (pendingData_) { if (tailPtr_) { // Must set completeLimit_ before setting tailPtr_. completeLimit_ = pendingData_->after(); *tailPtr_ = pendingData_; tailPtr_ = 0; } pendingData_ = 0; } // Must set origin before advancing completeLimit_. chunk->origin = origin_; // Must advance completeLimit_ before setting tailPtr_. completeLimit_ = freePtr_; if (tailPtr_) { *tailPtr_ = chunk; tailPtr_ = 0; } pendingData_ = 0; maybePulse(); } inline void GroveImpl::appendSibling(DataChunk *chunk) { // Since we might extend this DataChunk, it's // not safe to set completeLimit_ to after this chunk yet. // This means we can't yet set tailPtr_. if (pendingData_) { // Must set completeLimit_ before setting tailPtr_. completeLimit_ = pendingData_->after(); if (tailPtr_) { *tailPtr_ = pendingData_; tailPtr_ = 0; } } chunk->origin = origin_; pendingData_ = chunk; maybePulse(); } inline void GroveImpl::push(ElementChunk *chunk, Boolean hasId) { if (pendingData_) { if (tailPtr_) { // Must set completeLimit_ before setting tailPtr_. completeLimit_ = pendingData_->after(); *tailPtr_ = pendingData_; tailPtr_ = 0; } pendingData_ = 0; } chunk->elementIndex = nElements_++; chunk->origin = origin_; // Must set origin_ to chunk before advancing completeLimit_ // otherwise thread would look at element and // maybeMoreSiblings() would return false. // Must advance completeLimit_ before setting tailPtr_, // otherwise tailPtr_ would be beyond completeLimit_. origin_ = chunk; completeLimit_ = freePtr_; // Allow for the possibility of invalid documents with elements // after the document element. if ((const Chunk *)chunk->origin == root_ && root_->documentElement == 0) root_->documentElement = chunk; else if (tailPtr_) { *tailPtr_ = chunk; tailPtr_ = 0; } if (hasId) { Mutex::Lock lock(mutexPtr_); idTable_.insert(chunk); } maybePulse(); } inline void GroveImpl::pop() { if (pendingData_) { // Must set completeLimit_ before setting tailPtr_. completeLimit_ = pendingData_->after(); if (tailPtr_) { *tailPtr_ = pendingData_; tailPtr_ = 0; } pendingData_ = 0; } tailPtr_ = &origin_->nextSibling; origin_ = origin_->origin; if ((const Chunk *)origin_ == root_) finishDocumentElement(); maybePulse(); } inline Boolean GroveImpl::haveRootOrigin() { return (const Chunk *)origin_ == root_; } inline void GroveImpl::setDtd(const ConstPtr &dtd) { dtd_ = dtd; hasDefaultEntity_ = !dtd_->defaultEntity().isNull(); finishProlog(); pulse(); } inline const ElementChunk *GroveImpl::lookupElement(const StringC &id) const { Mutex::Lock lock(mutexPtr_); return idTable_.lookup(id); } inline GroveImpl::ElementIter GroveImpl::elementIter() const { ASSERT(complete()); return ElementIter(idTable_); } inline Boolean GroveImpl::maybeMoreSiblings(const ParentChunk *chunk) const { return (complete_ ? chunk->nextSibling != 0 : (origin_ == chunk || &chunk->nextSibling == tailPtr_ || maybeMoreSiblings1(chunk))); } inline void *GroveImpl::allocChunk(size_t n) { nChunksSinceLocOrigin_++; if (n <= nFree_) { void *p = freePtr_; freePtr_ += n; nFree_ -= n; return p; } else return allocFinish(n); } inline void GroveImpl::setLocOrigin(const ConstPtr &locOrigin) { if (locOrigin.pointer() != currentLocOrigin_ || nChunksSinceLocOrigin_ >= maxChunksWithoutLocOrigin) storeLocOrigin(locOrigin); } inline void GroveImpl::appendMessage(MessageItem *item) { *messageListTailP_ = item; messageListTailP_ = item->nextP(); pulse(); } inline void ElementNode::add(GroveImpl &grove, const StartElementEvent &event) { grove.setLocOrigin(event.location().origin()); ElementChunk *chunk; const AttributeList &atts = event.attributes(); Boolean hasId; if (atts.nSpec() == 0 && !atts.anyCurrent()) { void *mem = grove.allocChunk(sizeof(ElementChunk)); if (event.included()) chunk = new (mem) IncludedElementChunk; else chunk = new (mem) ElementChunk; hasId = 0; } else chunk = makeAttElementChunk(grove, event, hasId); chunk->type = event.elementType(); chunk->locIndex = event.location().index(); grove.push(chunk, hasId); } // We duplicate ChunkNode::nextChunkSibling to take advantage // of Node reuse (via setNodePtrFirst(NodePtr &, const DataNode *). inline AccessResult DataNode::nextChunkSibling(NodePtr &ptr) const { // The forwarding chunk has origin = 0, so it will stop // the iteration before after() can return 0. const Chunk *p = chunk_->after(); while (p == grove()->completeLimit()) if (!grove()->waitForMoreNodes()) return accessTimeout; if (p->origin != chunk_->origin) return accessNull; return p->setNodePtrFirst(ptr, this); } inline void DataNode::reuseFor(const DataChunk *chunk, size_t index) { chunk_ = chunk; index_ = index; } inline void DataNode::add(GroveImpl &grove, const DataEvent &event) { size_t dataLen = event.dataLength(); if (dataLen) { DataChunk *chunk = grove.pendingData(); if (chunk && event.location().origin().pointer() == grove.currentLocOrigin() && event.location().index() == chunk->locIndex + chunk->size && grove.tryExtend(CharsChunk::allocSize(chunk->size + dataLen) - CharsChunk::allocSize(chunk->size))) { memcpy((Char *)(chunk + 1) + chunk->size, event.data(), dataLen * sizeof(Char)); chunk->size += dataLen; } else { grove.setLocOrigin(event.location().origin()); chunk = new (grove.allocChunk(CharsChunk::allocSize(dataLen))) DataChunk; chunk->size = dataLen; chunk->locIndex = event.location().index(); memcpy(chunk + 1, event.data(), dataLen * sizeof(Char)); grove.appendSibling(chunk); } } } GroveBuilderMessageEventHandler::GroveBuilderMessageEventHandler(unsigned groveIndex, Messenger *mgr, MessageFormatter *msgFmt) : mgr_(mgr), grove_(new GroveImpl(groveIndex)), msgFmt_(msgFmt) { grove_->addRef(); } GroveBuilderMessageEventHandler::~GroveBuilderMessageEventHandler() { grove_->setComplete(); grove_->release(); } void GroveBuilderMessageEventHandler::makeInitialRoot(NodePtr &root) { root.assign(new SgmlDocumentNode(grove_, grove_->root())); } void GroveBuilderMessageEventHandler::message(MessageEvent *event) { mgr_->dispatchMessage(event->message()); const Message &msg = event->message(); StrOutputCharStream os; msgFmt_->formatMessage(*msg.type, msg.args, os); StringC tem; os.extractString(tem); Node::Severity severity; switch (msg.type->severity()) { case MessageType::info: severity = Node::info; break; case MessageType::warning: severity = Node::warning; break; default: severity = Node::error; break; } grove_->appendMessage(new MessageItem(severity, tem, msg.loc)); if (!msg.auxLoc.origin().isNull()) { msgFmt_->formatMessage(msg.type->auxFragment(), msg.args, os); os.extractString(tem); grove_->appendMessage(new MessageItem(Node::info, tem, msg.auxLoc)); } ErrorCountEventHandler::message(event); } void GroveBuilderMessageEventHandler::sgmlDecl(SgmlDeclEvent *event) { grove_->setSd(event->sdPointer(), event->prologSyntaxPointer(), event->instanceSyntaxPointer()); delete event; } void GroveBuilderMessageEventHandler::setSd(const ConstPtr &sd, const ConstPtr &prologSyntax, const ConstPtr &instanceSyntax) { grove_->setSd(sd, prologSyntax, instanceSyntax); } GroveBuilderEventHandler::GroveBuilderEventHandler(unsigned groveIndex, Messenger *mgr, MessageFormatter *msgFmt) : GroveBuilderMessageEventHandler(groveIndex, mgr, msgFmt) { } void GroveBuilderEventHandler::appinfo(AppinfoEvent *event) { const StringC *appinfo; if (event->literal(appinfo)) grove_->setAppinfo(*appinfo); delete event; } void GroveBuilderEventHandler::endProlog(EndPrologEvent *event) { grove_->setDtd(event->dtdPointer()); delete event; } void GroveBuilderEventHandler::startElement(StartElementEvent *event) { ElementNode::add(*grove_, *event); delete event; } void GroveBuilderEventHandler::endElement(EndElementEvent *event) { grove_->pop(); delete event; } void GroveBuilderEventHandler::data(DataEvent *event) { DataNode::add(*grove_, *event); delete event; } void GroveBuilderEventHandler::sdataEntity(SdataEntityEvent *event) { SdataNode::add(*grove_, *event); delete event; } void GroveBuilderEventHandler::nonSgmlChar(NonSgmlCharEvent *event) { NonSgmlNode::add(*grove_, *event); delete event; } void GroveBuilderEventHandler::externalDataEntity(ExternalDataEntityEvent *event) { ExternalDataNode::add(*grove_, *event); delete event; } void GroveBuilderEventHandler::subdocEntity(SubdocEntityEvent *event) { SubdocNode::add(*grove_, *event); delete event; } void GroveBuilderEventHandler::pi(PiEvent *event) { PiNode::add(*grove_, *event); delete event; } void GroveBuilderEventHandler::entityDefaulted(EntityDefaultedEvent *event) { grove_->addDefaultedEntity(event->entityPointer()); delete event; } ErrorCountEventHandler *GroveBuilder::make(unsigned index, Messenger *mgr, MessageFormatter *msgFmt, bool validateOnly, NodePtr &root) { GroveBuilderMessageEventHandler *eh; if (validateOnly) eh = new GroveBuilderMessageEventHandler(index, mgr, msgFmt); else eh = new GroveBuilderEventHandler(index, mgr, msgFmt); eh->makeInitialRoot(root); return eh; } ErrorCountEventHandler *GroveBuilder::make(unsigned index, Messenger *mgr, MessageFormatter *msgFmt, bool validateOnly, const ConstPtr &sd, const ConstPtr &prologSyntax, const ConstPtr &instanceSyntax, NodePtr &root) { GroveBuilderMessageEventHandler *eh; if (validateOnly) eh = new GroveBuilderMessageEventHandler(index, mgr, msgFmt); else eh = new GroveBuilderEventHandler(index, mgr, msgFmt); eh->makeInitialRoot(root); eh->setSd(sd, prologSyntax, instanceSyntax); return eh; } bool GroveBuilder::setBlocking(bool b) { bool prev = blockingAccess; blockingAccess = b; return prev; } GroveImpl::GroveImpl(unsigned groveIndex) : groveIndex_(groveIndex), root_(0), impliedAttributeValue_(new ImpliedAttributeValue), tailPtr_(0), freePtr_(0), nFree_(0), blocks_(0), blockTailPtr_(&blocks_), blockAllocSize_(initialBlockSize), nBlocksThisSizeAlloced_(0), complete_(0), mutexPtr_(&mutex_), pulseStep_(0), nEvents_(0), haveAppinfo_(0), pendingData_(0), nElements_(0), currentLocOrigin_(0), completeLimitWithLocChunkAfter_(0), nChunksSinceLocOrigin_(0), messageList_(0), messageListTailP_(&messageList_) { root_ = new (allocChunk(sizeof(SgmlDocumentChunk))) SgmlDocumentChunk; root_->origin = 0; root_->locIndex = 0; completeLimit_ = freePtr_; origin_ = root_; tailPtr_ = &root_->prolog; } GroveImpl::~GroveImpl() { while (blocks_) { BlockHeader *tem = blocks_; blocks_ = blocks_->next; ::operator delete(tem); } while (messageList_) { MessageItem *tem = messageList_; messageList_ = *messageList_->nextP(); delete tem; } } void GroveImpl::setAppinfo(const StringC &appinfo) { appinfo_ = appinfo; haveAppinfo_ = 1; } Boolean GroveImpl::getAppinfo(const StringC *&appinfo) const { if (!haveAppinfo_) { if (!complete_ && sd_.isNull()) return 0; // not available yet appinfo = 0; } else appinfo = &appinfo_; return 1; } void GroveImpl::setSd(const ConstPtr &sd, const ConstPtr &prologSyntax, const ConstPtr &instanceSyntax) { instanceSyntax_ = instanceSyntax; prologSyntax_ = prologSyntax; sd_ = sd; } void GroveImpl::getSd(ConstPtr &sd, ConstPtr &prologSyntax, ConstPtr &instanceSyntax) const { instanceSyntax = instanceSyntax_; prologSyntax = prologSyntax_; sd = sd_; } void GroveImpl::finishProlog() { if (root_->prolog) addBarrier(); tailPtr_ = 0; } void GroveImpl::finishDocumentElement() { // Be robust in the case of erroneous documents. if (root_->epilog == 0) { addBarrier(); tailPtr_ = &root_->epilog; } } void GroveImpl::addBarrier() { if (freePtr_) { (void) new (freePtr_) ForwardingChunk(0, 0); if (nFree_ <= sizeof(ForwardingChunk)) { nFree_ = 0; freePtr_ = 0; } else { nFree_ -= sizeof(ForwardingChunk); freePtr_ += sizeof(ForwardingChunk); } } } void GroveImpl::setComplete() { addBarrier(); mutexPtr_ = 0; completeLimit_ = 0; completeLimitWithLocChunkAfter_ = 0; if (pendingData_ && tailPtr_) *tailPtr_ = pendingData_; tailPtr_ = 0; pendingData_ = 0; complete_ = 1; moreNodesCondition_.set(); } void GroveImpl::addDefaultedEntity(const ConstPtr &entity) { Mutex::Lock lock(mutexPtr_); // We need a table of ConstPtr but we don't have one. defaultedEntityTable_.insert((Entity *)entity.pointer()); } const Entity *GroveImpl::lookupDefaultedEntity(const StringC &name) const { Mutex::Lock lock(mutexPtr_); return defaultedEntityTable_.lookupTemp(name); } Dtd::ConstEntityIter GroveImpl::defaultedEntityIter() const { ASSERT(complete()); return Dtd::ConstEntityIter(defaultedEntityTable_); } Boolean GroveImpl::maybeMoreSiblings1(const ParentChunk *chunk) const { for (const ParentChunk *open = origin_; open; open = open->origin) if (open == chunk) return 1; // for multi-thread case return tailPtr_ == &chunk->nextSibling || chunk->nextSibling != 0; } void *GroveImpl::allocFinish(size_t n) { if (++nBlocksThisSizeAlloced_ >= maxBlocksPerSize) { blockAllocSize_ *= 2; nBlocksThisSizeAlloced_ = 0; } size_t allocSize = n + (sizeof(ForwardingChunk) + sizeof(BlockHeader)); if (allocSize < blockAllocSize_) { nFree_ = blockAllocSize_ - allocSize; allocSize = blockAllocSize_; } else nFree_ = 0; *blockTailPtr_ = new (::operator new(allocSize)) BlockHeader; char *chunkStart = (char *)(*blockTailPtr_ + 1); blockTailPtr_ = &(*blockTailPtr_)->next; if (freePtr_) (void)new (freePtr_) ForwardingChunk((const Chunk *)chunkStart, origin_); freePtr_ = chunkStart + n; return chunkStart; } AccessResult ChunkNode::getLocation(Location &loc) const { const Origin *origin = grove()->currentLocOrigin(); for (const Chunk *p = chunk_->after(); p; p = p->after()) { if (p == grove()->completeLimitWithLocChunkAfter()) { while (!p->getLocOrigin(origin)) { p = p->after(); ASSERT(p != 0); } break; } if (p == grove()->completeLimit() || p->getLocOrigin(origin)) break; } if (!origin) return accessNull; loc = Location(new GroveImplProxyOrigin(grove(), origin), chunk_->locIndex); return accessOK; } void GroveImpl::storeLocOrigin(const ConstPtr &locOrigin) { LocOriginChunk *chunk = new (allocChunk(sizeof(LocOriginChunk))) LocOriginChunk(currentLocOrigin_); chunk->origin = origin_; completeLimitWithLocChunkAfter_ = completeLimit_; nChunksSinceLocOrigin_ = 0; if (locOrigin.pointer() == currentLocOrigin_) return; if (currentLocOrigin_ && locOrigin == currentLocOrigin_->parent().origin()) { // Don't need to store it. currentLocOrigin_ = locOrigin.pointer(); return; } currentLocOrigin_ = locOrigin.pointer(); if (locOrigin.isNull()) return; origins_.push_back(locOrigin); } AccessResult GroveImpl::proxifyLocation(const Location &loc, Location &ret) const { if (loc.origin().isNull()) return accessNull; ret = Location(new GroveImplProxyOrigin(this, loc.origin().pointer()), loc.index()); return accessOK; } NodeListPtr AttributesNamedNodeList::nodeList() const { const AttributeDefinitionList *defList = attDefList(); if (!defList || defList->size() == 0) return new BaseNodeList; else return new SiblingNodeList(makeAttributeAsgnNode(grove(), 0)); } AccessResult AttributesNamedNodeList::namedNodeU(const StringC &str, NodePtr &ptr) const { const AttributeDefinitionList *defList = attDefList(); if (defList) { for (size_t i = 0; i < defList->size(); i++) if (defList->def(i)->name() == str) { ptr.assign(makeAttributeAsgnNode(grove(), i)); return accessOK; } } return accessNull; } void SgmlDocumentNode::accept(NodeVisitor &visitor) { visitor.sgmlDocument(*this); } AccessResult SgmlDocumentNode::getSgmlConstants(NodePtr &ptr) const { ptr.assign(new SgmlConstantsNode(grove())); return accessOK; } AccessResult SgmlDocumentNode::getApplicationInfo(GroveString &str) const { const StringC *appinfo; while (!grove()->getAppinfo(appinfo)) if (!grove()->waitForMoreNodes()) return accessTimeout; if (!appinfo) return accessNull; setString(str, *appinfo); return accessOK; } AccessResult SgmlDocumentNode::getDocumentElement(NodePtr &ptr) const { while (chunk()->documentElement == 0) { if (grove()->complete()) { // Just in case another thread crept if (chunk()->documentElement) break; return accessNull; } if (!grove()->waitForMoreNodes()) return accessTimeout; } return chunk()->documentElement->setNodePtrFirst(ptr, this); } AccessResult SgmlDocumentNode::getProlog(NodeListPtr &ptr) const { while (chunk()->prolog == 0) { if (chunk()->documentElement || grove()->complete()) break; if (!grove()->waitForMoreNodes()) return accessTimeout; } if (chunk()->prolog == 0) ptr.assign(new BaseNodeList); else { NodePtr tem; chunk()->prolog->setNodePtrFirst(tem, this); ptr.assign(new SiblingNodeList(tem)); } return accessOK; } AccessResult SgmlDocumentNode::getEpilog(NodeListPtr &ptr) const { while (chunk()->epilog == 0) { if (grove()->complete()) break; if (!grove()->waitForMoreNodes()) return accessTimeout; } if (chunk()->epilog == 0) ptr.assign(new BaseNodeList); else { NodePtr tem; chunk()->epilog->setNodePtrFirst(tem, this); ptr.assign(new SiblingNodeList(tem)); } return accessOK; } AccessResult SgmlDocumentNode::getElements(NamedNodeListPtr &ptr) const { while (!grove()->root()->documentElement) { if (grove()->complete()) { if (grove()->root()->documentElement) break; return accessNull; } if (!grove()->waitForMoreNodes()) return accessTimeout; } if (!grove()->generalSubstTable()) return accessNull; ptr.assign(new ElementsNamedNodeList(grove())); return accessOK; } AccessResult SgmlDocumentNode::getEntities(NamedNodeListPtr &ptr) const { while (!grove()->governingDtd()) { if (grove()->complete()) { if (grove()->governingDtd()) break; return accessNull; } if (!grove()->waitForMoreNodes()) return accessTimeout; } ptr.assign(new DocEntitiesNamedNodeList(grove())); return accessOK; } AccessResult SgmlDocumentNode::getDefaultedEntities(NamedNodeListPtr &ptr) const { while (!grove()->complete()) if (!grove()->waitForMoreNodes()) return accessTimeout; ptr.assign(new DefaultedEntitiesNamedNodeList(grove())); return accessOK; } AccessResult SgmlDocumentNode::getGoverningDoctype(NodePtr &ptr) const { while (!grove()->governingDtd()) { if (grove()->complete()) { if (grove()->governingDtd()) break; return accessNull; } if (!grove()->waitForMoreNodes()) return accessTimeout; } ptr.assign(new DocumentTypeNode(grove(), grove()->governingDtd())); return accessOK; } AccessResult SgmlDocumentNode::getDoctypesAndLinktypes(NamedNodeListPtr &ptr) const { while (!grove()->governingDtd()) { if (grove()->complete()) { if (grove()->governingDtd()) break; return accessNull; } if (!grove()->waitForMoreNodes()) return accessTimeout; } ptr.assign(new DoctypesAndLinktypesNamedNodeList(grove())); return accessOK; } AccessResult SgmlDocumentNode::getMessages(NodeListPtr &ptr) const { while (grove()->messageList() == 0) { if (grove()->complete()) break; if (!grove()->waitForMoreNodes()) return accessTimeout; } if (grove()->messageList()) { NodePtr tem(new MessageNode(grove(), grove()->messageList())); ptr.assign(new SiblingNodeList(tem)); } else ptr.assign(new BaseNodeList); return accessOK; } AccessResult SgmlDocumentNode::getSd(ConstPtr &sd, ConstPtr &prologSyntax, ConstPtr &instanceSyntax) const { while (!grove()->complete()) { if (!grove()->waitForMoreNodes()) return accessTimeout; } grove()->getSd(sd, prologSyntax, instanceSyntax); if (!sd.isNull() && !prologSyntax.isNull() && !instanceSyntax.isNull()) return accessOK; return accessNull; } AccessResult SgmlDocumentChunk::setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const { ptr.assign(new SgmlDocumentNode(node->grove(), this)); return accessOK; } DocumentTypeNode::DocumentTypeNode(const GroveImpl *grove, const Dtd *dtd) : BaseNode(grove), dtd_(dtd) { } AccessResult DocumentTypeNode::nextChunkSibling(NodePtr &) const { return accessNull; } AccessResult DocumentTypeNode::getName(GroveString &str) const { setString(str, dtd_->name()); return accessOK; } AccessResult DocumentTypeNode::getGoverning(bool &governing) const { governing = dtd_->isBase(); return accessOK; } AccessResult DocumentTypeNode::getGeneralEntities(NamedNodeListPtr &ptr) const { ptr.assign(new GeneralEntitiesNamedNodeList(grove(), dtd_)); return accessOK; } AccessResult DocumentTypeNode::getNotations(NamedNodeListPtr &ptr) const { ptr.assign(new NotationsNamedNodeList(grove(), dtd_)); return accessOK; } AccessResult DocumentTypeNode::getOrigin(NodePtr &ptr) const { ptr.assign(new SgmlDocumentNode(grove(), grove()->root())); return accessOK; } void DocumentTypeNode::accept(NodeVisitor &visitor) { visitor.documentType(*this); } bool DocumentTypeNode::same(const BaseNode &node) const { return node.same2(this); } bool DocumentTypeNode::same2(const DocumentTypeNode *node) const { return dtd_ == node->dtd_; } SgmlConstantsNode::SgmlConstantsNode(const GroveImpl *grove) : BaseNode(grove) { } AccessResult SgmlConstantsNode::getOrigin(NodePtr &ptr) const { ptr.assign(new SgmlDocumentNode(grove(), grove()->root())); return accessOK; } void SgmlConstantsNode::accept(NodeVisitor &visitor) { visitor.sgmlConstants(*this); } bool SgmlConstantsNode::same(const BaseNode &node) const { return node.same2(this); } bool SgmlConstantsNode::same2(const SgmlConstantsNode *) const { return 1; } MessageNode::MessageNode(const GroveImpl *grove, const MessageItem *item) : BaseNode(grove), item_(item) { } AccessResult MessageNode::getOrigin(NodePtr &ptr) const { ptr.assign(new SgmlDocumentNode(grove(), grove()->root())); return accessOK; } AccessResult MessageNode::nextChunkSibling(NodePtr &ptr) const { while (!item_->next()) { if (grove()->complete()) { if (item_->next()) break; return accessNull; } if (!grove()->waitForMoreNodes()) return accessTimeout; } const MessageItem *p = item_->next(); if (!p) return accessNull; ptr.assign(new MessageNode(grove(), p)); return accessOK; } AccessResult MessageNode::firstSibling(NodePtr &ptr) const { ptr.assign(new MessageNode(grove(), grove()->messageList())); return accessOK; } AccessResult MessageNode::siblingsIndex(unsigned long &n) const { n = 0; for (const MessageItem *p = grove()->messageList(); p != item_; p = p->next()) n++; return accessOK; } void MessageNode::accept(NodeVisitor &visitor) { visitor.message(*this); } bool MessageNode::same(const BaseNode &node) const { return node.same2(this); } bool MessageNode::same2(const MessageNode *node) const { return item_ == node->item_; } AccessResult MessageNode::getLocation(Location &loc) const { return grove()->proxifyLocation(item_->loc(), loc); } AccessResult MessageNode::getText(GroveString &str) const { setString(str, item_->text()); return accessOK; } AccessResult MessageNode::getSeverity(Severity &severity) const { severity = item_->severity(); return accessOK; } AccessResult ElementNode::nextChunkSibling(NodePtr &ptr) const { while (!chunk()->nextSibling) { if (!grove()->maybeMoreSiblings(chunk())) { // Allow for the possibility of invalid documents with elements in the epilog. if ((const Chunk *)chunk() == grove()->root()->documentElement) return accessNotInClass; else return accessNull; } if (!grove()->waitForMoreNodes()) return accessTimeout; } return chunk()->nextSibling->setNodePtrFirst(ptr, this); } // This is a duplicate of ChunkNode::nextChunkAfter // to take advantage of overloaded setNodePtrFirst. AccessResult ElementNode::nextChunkAfter(NodePtr &nd) const { const Chunk *p = chunk_->after(); while (p == grove()->completeLimit()) if (!grove()->waitForMoreNodes()) return accessTimeout; return p->setNodePtrFirst(nd, this); } AccessResult ElementChunk::getFollowing(const GroveImpl *grove, const Chunk *&f, unsigned long &n) const { while (!nextSibling) { if (!grove->maybeMoreSiblings(this)) { if ((const Chunk *)origin == grove->root()) return accessNotInClass; else return accessNull; } if (!grove->waitForMoreNodes()) return accessTimeout; } f = nextSibling; n = 1; return accessOK; } AccessResult ElementNode::firstChild(NodePtr &ptr) const { const Chunk *p = chunk()->after(); while (p == grove()->completeLimit()) { if (!grove()->waitForMoreNodes()) return accessTimeout; } if ((const Chunk *)(p->origin) == chunk()) return p->setNodePtrFirst(ptr, this); return accessNull; } AccessResult ElementNode::attributeRef(unsigned long n, NodePtr &ptr) const { const AttributeDefinitionList *defList = chunk()->attDefList(); if (!defList || n >= defList->size()) return accessNull; ptr.assign(new ElementAttributeAsgnNode(grove(), size_t(n), chunk())); return accessOK; } AccessResult ElementNode::getAttributes(NamedNodeListPtr &ptr) const { ptr.assign(new ElementAttributesNamedNodeList(grove(), chunk())); return accessOK; } AccessResult ElementNode::getGi(GroveString &str) const { setString(str, chunk()->type->name()); return accessOK; } bool ElementNode::hasGi(GroveString str) const { const StringC &gi = chunk()->type->name(); size_t len = gi.size(); if (len != str.size()) return 0; const SubstTable *subst = grove()->generalSubstTable(); if (!subst) return 0; for (size_t i = 0; i < len; i++) if ((*subst)[str[i]] != gi[i]) return 0; return 1; } AccessResult ElementNode::getId(GroveString &str) const { const StringC *id = chunk()->id(); if (!id) return accessNull; setString(str, *id); return accessOK; } AccessResult ElementNode::elementIndex(unsigned long &i) const { i = chunk()->elementIndex; return accessOK; } AccessResult ElementNode::getContent(NodeListPtr &ptr) const { return children(ptr); } AccessResult ElementNode::getMustOmitEndTag(bool &b) const { b = chunk()->mustOmitEndTag(); return accessOK; } AccessResult ElementNode::getIncluded(bool &b) const { b = chunk()->included(); return accessOK; } void ElementNode::accept(NodeVisitor &visitor) { visitor.element(*this); } ElementChunk * ElementNode::makeAttElementChunk(GroveImpl &grove, const StartElementEvent &event, Boolean &hasId) { const AttributeList &atts = event.attributes(); size_t nAtts = atts.size(); while (nAtts > 0 && !atts.specified(nAtts - 1) && !atts.current(nAtts - 1)) nAtts--; ElementChunk *chunk; void *mem = grove.allocChunk(sizeof(AttElementChunk) + nAtts * sizeof(AttributeValue *)); if (event.included()) { // Workaround VC++ 4.1 bug. AttElementChunk *tem = new (mem) IncludedAttElementChunk(nAtts); chunk = tem; } else chunk = new (mem) AttElementChunk(nAtts); const AttributeValue **values = (const AttributeValue **)(((AttElementChunk *)chunk) + 1); const AttributeDefinitionList *defList = event.elementType()->attributeDef().pointer(); unsigned idIndex; if (atts.idIndex(idIndex) && atts.specified(idIndex) && atts.value(idIndex)) hasId = 1; else hasId = 0; for (size_t i = 0; i < nAtts; i++) { if (atts.specified(i) || atts.current(i)) { grove.storeAttributeValue(atts.valuePointer(i)); values[i] = atts.value(i); } else { // If we stored a reference to the implied attribute value in the // Dtd then it would be safe just to use atts.value(i) here. // But that would mean we couldn't conveniently tell whether it // was specified or implied. values[i] = defList->def(i)->defaultValue(grove.impliedAttributeValue()); } } return chunk; } const Chunk *AttElementChunk::after() const { return (const Chunk *)((char *)(this + 1) + (sizeof(const AttributeValue *) * nAtts)); } const AttributeValue * AttElementChunk::attributeValue(size_t attIndex, const GroveImpl &grove) const { if (attIndex < nAtts) return ((const AttributeValue **)(this + 1))[attIndex]; else return ElementChunk::attributeValue(attIndex, grove); } const StringC *AttElementChunk::id() const { size_t i = ElementChunk::attDefList()->idIndex(); if (i == size_t(-1) || i >= nAtts) return 0; const AttributeValue *av = ((const AttributeValue **)(this + 1))[i]; if (!av) return 0; const Text *t = av->text(); if (!t) return 0; return &t->string(); } Boolean AttElementChunk::mustOmitEndTag() const { if (ElementChunk::mustOmitEndTag()) return 1; const AttributeDefinitionList *adl = ElementChunk::attDefList(); size_t nAtts = adl->size(); const AttributeValue **atts = (const AttributeValue **)(this + 1); for (size_t i = 0; i < nAtts; i++) if (adl->def(i)->isConref() && atts[i] && atts[i]->text()) return 1; return 0; } const Chunk *ElementChunk::after() const { return this + 1; } const AttributeValue * ElementChunk::attributeValue(size_t attIndex, const GroveImpl &grove) const { return attDefList()->def(attIndex)->defaultValue(grove.impliedAttributeValue()); } Boolean ElementChunk::mustOmitEndTag() const { return type->definition()->declaredContent() == ElementDefinition::empty; } Boolean IncludedElementChunk::included() const { return 1; } Boolean IncludedAttElementChunk::included() const { return 1; } Boolean ElementChunk::included() const { return 0; } AccessResult ElementChunk::setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const { ptr.assign(new ElementNode(node->grove(), this)); return accessOK; } AccessResult ElementChunk::setNodePtrFirst(NodePtr &ptr, const ElementNode *node) const { if (node->canReuse(ptr)) ((ElementNode *)node)->reuseFor(this); else ptr.assign(new ElementNode(node->grove(), this)); return accessOK; } AccessResult ElementChunk::setNodePtrFirst(NodePtr &ptr, const DataNode *node) const { ptr.assign(new ElementNode(node->grove(), this)); return accessOK; } ElementAttributeOrigin::ElementAttributeOrigin(const ElementChunk *chunk) : chunk_(chunk) { } const AttributeDefinitionList *ElementAttributeOrigin::attDefList() const { return chunk_->attDefList(); } const AttributeValue * ElementAttributeOrigin::attributeValue(size_t attIndex, const GroveImpl &grove) const { return chunk_->attributeValue(attIndex, grove); } AccessResult ElementAttributeOrigin::setNodePtrAttributeOrigin(NodePtr &ptr, const BaseNode *node) const { return chunk_->setNodePtrFirst(ptr, node); } Node *ElementAttributeOrigin ::makeCdataAttributeValueNode(const GroveImpl *grove, const AttributeValue *value, size_t attIndex, const TextIter &iter, size_t charIndex) const { return new ElementCdataAttributeValueNode(grove, value, attIndex, iter, charIndex, chunk_); } Node *ElementAttributeOrigin ::makeAttributeValueTokenNode(const GroveImpl *grove, const TokenizedAttributeValue *value, size_t attIndex, size_t tokenIndex) const { return new ElementAttributeValueTokenNode(grove, value, attIndex, tokenIndex, chunk_); } Node *ElementAttributeOrigin ::makeAttributeAsgnNode(const GroveImpl *grove, size_t attIndex) const { return new ElementAttributeAsgnNode(grove, attIndex, chunk_); } const void *ElementAttributeOrigin::attributeOriginId() const { return chunk_; } bool DataNode::same(const BaseNode &node) const { return node.same2(this); } bool DataNode::same2(const DataNode *node) const { return chunk_ == node->chunk_ && index_ == node->index_; } bool DataNode::chunkContains(const Node &node) const { if (!sameGrove(node)) return 0; return ((const BaseNode &)node).inChunk(this); } bool DataNode::inChunk(const DataNode *node) const { return chunk_ == node->chunk_ && index_ >= node->index_; } AccessResult DataNode::charChunk(const SdataMapper &, GroveString &str) const { str.assign(chunk()->data() + index_, chunk()->size - index_); return accessOK; } void DataNode::accept(NodeVisitor &visitor) { visitor.dataChar(*this); } unsigned long DataNode::hash() const { return secondHash(ChunkNode::hash() + index_); } AccessResult DataNode::getNonSgml(unsigned long &) const { return accessNull; } AccessResult DataNode::nextSibling(NodePtr &ptr) const { if (index_ + 1 < chunk()->size) { if (canReuse(ptr)) ((DataNode *)this)->index_ += 1; else ptr.assign(new DataNode(grove(), chunk(), index_ + 1)); return accessOK; } return DataNode::nextChunkSibling(ptr); } AccessResult DataNode::nextChunkAfter(NodePtr &nd) const { const Chunk *p = chunk_->after(); while (p == grove()->completeLimit()) if (!grove()->waitForMoreNodes()) return accessTimeout; return p->setNodePtrFirst(nd, this); } AccessResult DataNode::followSiblingRef(unsigned long i, NodePtr &ptr) const { if (i < chunk()->size - index_ - 1) { if (canReuse(ptr)) ((DataNode *)this)->index_ += 1 + size_t(i); else ptr.assign(new DataNode(grove(), chunk(), index_ + size_t(i) + 1)); return accessOK; } return ChunkNode::followSiblingRef(i - (chunk()->size - index_ - 1), ptr); } AccessResult DataNode::siblingsIndex(unsigned long &i) const { AccessResult ret = ChunkNode::siblingsIndex(i); if (ret == accessOK) i += index_; return ret; } AccessResult DataNode::getLocation(Location &loc) const { AccessResult ret = ChunkNode::getLocation(loc); if (ret == accessOK) loc += index_; return ret; } AccessResult DataChunk::getFollowing(const GroveImpl *grove, const Chunk *&f, unsigned long &i) const { // We could call Chunk::getFollowing to do most of // the work, but that would cost us a couple of extra // virtual function calls. const Chunk *p = CharsChunk::after(); while (p == grove->completeLimit()) if (!grove->waitForMoreNodes()) return accessTimeout; if (p->origin != origin) return accessNull; i = size; f = p; return accessOK; } AccessResult DataChunk::setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const { ptr.assign(new DataNode(node->grove(), this, 0)); return accessOK; } // This just saves us a virtual function call in a common case AccessResult DataChunk::setNodePtrFirst(NodePtr &ptr, const ElementNode *node) const { ptr.assign(new DataNode(node->grove(), this, 0)); return accessOK; } AccessResult DataChunk::setNodePtrFirst(NodePtr &ptr, const DataNode *node) const { if (node->canReuse(ptr)) ((DataNode *)node)->reuseFor(this, 0); else ptr.assign(new DataNode(node->grove(), this, 0)); return accessOK; } AccessResult PiNode::getSystemData(GroveString &str) const { str.assign(chunk()->data(), chunk()->size); return accessOK; } void PiNode::add(GroveImpl &grove, const PiEvent &event) { const Entity *entity = event.entity(); if (entity) PiEntityNode::add(grove, entity, event.location()); else { grove.setLocOrigin(event.location().origin()); size_t dataLen = event.dataLength(); void *mem = grove.allocChunk(CharsChunk::allocSize(dataLen)); PiChunk *chunk; if (grove.haveRootOrigin()) { if (grove.root()->documentElement) chunk = new (mem) EpilogPiChunk; else chunk = new (mem) PrologPiChunk; } else chunk = new (mem) PiChunk; chunk->size = dataLen; chunk->locIndex = event.location().index(); memcpy(chunk + 1, event.data(), dataLen * sizeof(Char)); grove.appendSibling(chunk); } } AccessResult PiChunk::setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const { ptr.assign(new PiNode(node->grove(), this)); return accessOK; } AccessResult PrologPiChunk::getFirstSibling(const GroveImpl *grove, const Chunk *&p) const { p = grove->root()->prolog; return accessOK; } AccessResult EpilogPiChunk::getFirstSibling(const GroveImpl *grove, const Chunk *&p) const { p = grove->root()->epilog; return accessOK; } AccessResult SdataNode::charChunk(const SdataMapper &mapper, GroveString &str) const { const StringC &name = chunk()->entity->name(); const StringC &text = chunk()->entity->asInternalEntity()->string(); Char *cp = (Char *)&c_; if (mapper.sdataMap(GroveString(name.data(), name.size()), GroveString(text.data(), text.size()), *cp)) { str.assign(&c_, 1); return accessOK; } else return accessNull; } AccessResult SdataNode::getSystemData(GroveString &str) const { setString(str, chunk()->entity->asInternalEntity()->string()); return accessOK; } void SdataNode::add(GroveImpl &grove, const SdataEntityEvent &event) { const Location &loc = event.location().origin()->parent(); grove.setLocOrigin(loc.origin()); SdataChunk *chunk = new (grove.allocChunk(sizeof(SdataChunk))) SdataChunk; chunk->entity = event.entity(); chunk->locIndex = loc.index(); grove.appendSibling(chunk); } AccessResult SdataChunk::setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const { ptr.assign(new SdataNode(node->grove(), this)); return accessOK; } AccessResult NonSgmlChunk::setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const { ptr.assign(new NonSgmlNode(node->grove(), this)); return accessOK; } AccessResult NonSgmlNode::getNonSgml(unsigned long &n) const { n = chunk()->c; return accessOK; } AccessResult NonSgmlNode::charChunk(const SdataMapper &, GroveString &) const { return accessNull; } void NonSgmlNode::add(GroveImpl &grove, const NonSgmlCharEvent &event) { grove.setLocOrigin(event.location().origin()); NonSgmlChunk *chunk = new (grove.allocChunk(sizeof(NonSgmlChunk))) NonSgmlChunk; chunk->c = event.character(); chunk->locIndex = event.location().index(); grove.appendSibling(chunk); } void ExternalDataNode::add(GroveImpl &grove, const ExternalDataEntityEvent &event) { grove.setLocOrigin(event.location().origin()); ExternalDataChunk *chunk = new (grove.allocChunk(sizeof(ExternalDataChunk))) ExternalDataChunk; chunk->entity = event.entity(); chunk->locIndex = event.location().index(); grove.appendSibling(chunk); } AccessResult ExternalDataChunk::setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const { ptr.assign(new ExternalDataNode(node->grove(), this)); return accessOK; } void SubdocNode::add(GroveImpl &grove, const SubdocEntityEvent &event) { grove.setLocOrigin(event.location().origin()); SubdocChunk *chunk = new (grove.allocChunk(sizeof(SubdocChunk))) SubdocChunk; chunk->entity = event.entity(); chunk->locIndex = event.location().index(); grove.appendSibling(chunk); } AccessResult SubdocChunk::setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const { ptr.assign(new SubdocNode(node->grove(), this)); return accessOK; } AccessResult PiEntityNode::getSystemData(GroveString &str) const { setString(str, chunk()->entity->asInternalEntity()->string()); return accessOK; } void PiEntityNode::add(GroveImpl &grove, const Entity *entity, const Location &loc) { // FIXME use parent? grove.setLocOrigin(loc.origin()); PiEntityChunk *chunk = new (grove.allocChunk(sizeof(PiEntityChunk))) PiEntityChunk; chunk->entity = entity; chunk->locIndex = loc.index(); grove.appendSibling(chunk); } AccessResult PiEntityChunk::setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const { ptr.assign(new PiEntityNode(node->grove(), this)); return accessOK; } AccessResult EntityRefNode::getEntity(NodePtr &ptr) const { ptr.assign(new EntityNode(grove(), chunk()->entity)); return accessOK; } AccessResult EntityRefNode::getEntityName(GroveString &str) const { setString(str, chunk()->entity->name()); return accessOK; } AttributeAsgnNode::AttributeAsgnNode(const GroveImpl *grove, size_t attIndex) : BaseNode(grove), attIndex_(attIndex) { } AccessResult ChunkNode::nextChunkSibling(NodePtr &ptr) const { // The forwarding chunk has origin = 0, so it will stop // the iteration before after() can return 0. const Chunk *p = chunk_->after(); while (p == grove()->completeLimit()) if (!grove()->waitForMoreNodes()) return accessTimeout; if (p->origin != chunk_->origin) return accessNull; return p->setNodePtrFirst(ptr, this); } AccessResult ChunkNode::nextChunkAfter(NodePtr &nd) const { const Chunk *p = chunk_->after(); while (p == grove()->completeLimit()) if (!grove()->waitForMoreNodes()) return accessTimeout; return p->setNodePtrFirst(nd, this); } AccessResult ChunkNode::firstSibling(NodePtr &ptr) const { const Chunk *first; AccessResult ret = chunk_->getFirstSibling(grove(), first); if (ret != accessOK) return ret; return first->setNodePtrFirst(ptr, this); } AccessResult ChunkNode::siblingsIndex(unsigned long &i) const { const Chunk *p; AccessResult ret = chunk_->getFirstSibling(grove(), p); if (ret != accessOK) return ret; i = 0; while (p != chunk_) { unsigned long tem; if (p->getFollowing(grove(), p, tem) != accessOK) CANNOT_HAPPEN(); i += tem; } return accessOK; } AccessResult ChunkNode::followSiblingRef(unsigned long i, NodePtr &ptr) const { const Chunk *p; unsigned long count; AccessResult ret = chunk()->getFollowing(grove(), p, count); if (ret != accessOK) return ret; while (i > 0) { const Chunk *lastP = p; ret = p->getFollowing(grove(), p, count); if (ret == accessOK && count <= i) i -= count; else if (ret == accessOK || ret == accessNull) { lastP->setNodePtrFirst(ptr, this); return ptr->followSiblingRef(i - 1, ptr); } else return ret; } return p->setNodePtrFirst(ptr, this); } AccessResult AttributeAsgnNode::getOrigin(NodePtr &ptr) const { return setNodePtrAttributeOrigin(ptr, this); } AccessResult AttributeAsgnNode::getName(GroveString &str) const { setString(str, attDefList()->def(attIndex_)->name()); return accessOK; } AccessResult AttributeAsgnNode::getImplied(bool &implied) const { const AttributeValue *value = attributeValue(attIndex_, *grove()); implied = (value != 0 && value->text() == 0); return accessOK; } AccessResult AttributeAsgnNode::getValue(NodeListPtr &ptr) const { return children(ptr); } AccessResult AttributeAsgnNode::nextChunkSibling(NodePtr &ptr) const { return followSiblingRef(0, ptr); } AccessResult AttributeAsgnNode::followSiblingRef(unsigned long i, NodePtr &ptr) const { // Do it like this to avoid overflow. if (i >= attDefList()->size() - attIndex_ - 1) return accessNull; if (canReuse(ptr)) ((AttributeAsgnNode *)this)->attIndex_ += size_t(i) + 1; else ptr.assign(makeAttributeAsgnNode(grove(), attIndex_ + 1 + size_t(i))); return accessOK; } AccessResult AttributeAsgnNode::firstSibling(NodePtr &ptr) const { if (canReuse(ptr)) ((AttributeAsgnNode *)this)->attIndex_ = 0; else ptr.assign(makeAttributeAsgnNode(grove(), 0)); return accessOK; } AccessResult AttributeAsgnNode::siblingsIndex(unsigned long &i) const { i = attIndex_; return accessOK; } void AttributeAsgnNode::accept(NodeVisitor &visitor) { visitor.attributeAssignment(*this); } AccessResult AttributeAsgnNode::firstChild(NodePtr &ptr) const { const AttributeValue *value = attributeValue(attIndex_, *grove()); if (value) { const Text *text; const StringC *str; switch (value->info(text, str)) { case AttributeValue::tokenized: ptr.assign(makeAttributeValueTokenNode(grove(), (const TokenizedAttributeValue *)value, attIndex_, 0)); return accessOK; case AttributeValue::cdata: { TextIter iter(*text); if (!CdataAttributeValueNode::skipBoring(iter)) break; ptr.assign(makeCdataAttributeValueNode(grove(), value, attIndex_, iter)); return accessOK; } default: break; } } return accessNull; } AccessResult AttributeAsgnNode::children(NodeListPtr &ptr) const { const AttributeValue *value = attributeValue(attIndex_, *grove()); if (value) { const Text *text; const StringC *str; switch (value->info(text, str)) { case AttributeValue::tokenized: ptr.assign(new SiblingNodeList(makeAttributeValueTokenNode(grove(), (const TokenizedAttributeValue *)value, attIndex_, 0))); return accessOK; case AttributeValue::cdata: { TextIter iter(*text); if (!CdataAttributeValueNode::skipBoring(iter)) ptr.assign(new BaseNodeList); else ptr.assign(new SiblingNodeList(makeCdataAttributeValueNode(grove(), value, attIndex_, iter))); return accessOK; } default: break; } } return accessNull; } AccessResult AttributeAsgnNode::getTokenSep(Char &ch) const { const AttributeValue *value = attributeValue(attIndex_, *grove()); if (!value) return accessNull; const Text *text; const StringC *str; if (value->info(text, str) != AttributeValue::tokenized) return accessNull; const TokenizedAttributeValue *tValue = (const TokenizedAttributeValue *)value; if (tValue->nTokens() <= 1) return accessNull; const Char *ptr; size_t len; tValue->token(0, ptr, len); // the character following the token is a space ch = ptr[len]; return accessOK; } AccessResult AttributeAsgnNode::tokens(GroveString &s) const { const AttributeValue *value = attributeValue(attIndex_, *grove()); if (!value) return accessNull; const Text *text; const StringC *str; if (value->info(text, str) != AttributeValue::tokenized) return accessNull; setString(s, *str); return accessOK; } bool AttributeAsgnNode::same(const BaseNode &node) const { return node.same2(this); } bool AttributeAsgnNode::same2(const AttributeAsgnNode *node) const { return (attributeOriginId() == node->attributeOriginId() && attIndex_ == node->attIndex_); } unsigned long AttributeAsgnNode::hash() const { unsigned long n = (unsigned long)attributeOriginId(); return secondHash(n + attIndex_); } ElementAttributeAsgnNode ::ElementAttributeAsgnNode(const GroveImpl *grove, size_t attIndex, const ElementChunk *chunk) : AttributeAsgnNode(grove, attIndex), ElementAttributeOrigin(chunk) { } EntityAttributeAsgnNode ::EntityAttributeAsgnNode(const GroveImpl *grove, size_t attIndex, const ExternalDataEntity *entity) : AttributeAsgnNode(grove, attIndex), EntityAttributeOrigin(entity) { } CdataAttributeValueNode ::CdataAttributeValueNode(const GroveImpl *grove, const AttributeValue *value, size_t attIndex, const TextIter &iter, size_t charIndex) : BaseNode(grove), value_(value), attIndex_(attIndex), iter_(iter), charIndex_(charIndex) { } bool CdataAttributeValueNode::skipBoring(TextIter &iter) { while (iter.valid()) { switch (iter.type()) { case TextItem::data: case TextItem::cdata: case TextItem::sdata: { size_t length; iter.chars(length); if (length > 0) return 1; } // fall through default: iter.advance(); break; } } return 0; } AccessResult CdataAttributeValueNode::getParent(NodePtr &ptr) const { ptr.assign(makeAttributeAsgnNode(grove(), attIndex_)); return accessOK; } AccessResult CdataAttributeValueNode::charChunk(const SdataMapper &mapper, GroveString &str) const { if (iter_.type() == TextItem::sdata) { const Entity *entity = iter_.location().origin()->asEntityOrigin()->entity(); const StringC &name = entity->name(); const StringC &text = entity->asInternalEntity()->string(); Char *cp = (Char *)&c_; if (mapper.sdataMap(GroveString(name.data(), name.size()), GroveString(text.data(), text.size()), *cp)) { str.assign(&c_, 1); return accessOK; } else return accessNull; } size_t len; const Char *s = iter_.chars(len); str.assign(s + charIndex_, len - charIndex_); return accessOK; } AccessResult CdataAttributeValueNode::siblingsIndex(unsigned long &n) const { TextIter copy(iter_); size_t tem; const Char *iterChars = iter_.chars(tem); copy.rewind(); skipBoring(copy); n = 0; while (copy.chars(tem) != iterChars) { if (copy.type() == TextItem::sdata) n += 1; else n += tem; copy.advance(); skipBoring(copy); } n += charIndex_; return accessOK; } AccessResult CdataAttributeValueNode::getEntity(NodePtr &ptr) const { if (iter_.type() != TextItem::sdata) return accessNotInClass; const Entity *entity = iter_.location().origin()->asEntityOrigin()->entity(); ptr.assign(new EntityNode(grove(), entity)); return accessOK; } AccessResult CdataAttributeValueNode::getEntityName(GroveString &str) const { if (iter_.type() != TextItem::sdata) return accessNotInClass; const Entity *entity = iter_.location().origin()->asEntityOrigin()->entity(); setString(str, entity->name()); return accessOK; } AccessResult CdataAttributeValueNode::getSystemData(GroveString &str) const { if (iter_.type() != TextItem::sdata) return accessNotInClass; size_t len; const Char *ptr = iter_.chars(len); str.assign(ptr, len); return accessOK; } AccessResult CdataAttributeValueNode::firstSibling(NodePtr &ptr) const { TextIter copy(iter_); copy.rewind(); skipBoring(copy); if (canReuse(ptr)) { CdataAttributeValueNode *node = (CdataAttributeValueNode *)this; node->iter_ = copy; node->charIndex_ = 0; } else ptr.assign(makeCdataAttributeValueNode(grove(), value_, attIndex_, copy)); return accessOK; } AccessResult CdataAttributeValueNode::nextChunkSibling(NodePtr &ptr) const { TextIter copy(iter_); copy.advance(); if (!skipBoring(copy)) return accessNull; if (canReuse(ptr)) { CdataAttributeValueNode *node = (CdataAttributeValueNode *)this; node->iter_ = copy; node->charIndex_ = 0; } else ptr.assign(makeCdataAttributeValueNode(grove(), value_, attIndex_, copy)); return accessOK; } AccessResult CdataAttributeValueNode::nextSibling(NodePtr &ptr) const { if (iter_.type() != TextItem::sdata) { size_t length; iter_.chars(length); if (charIndex_ + 1 < length) { if (canReuse(ptr)) ((CdataAttributeValueNode *)this)->charIndex_ += 1; else ptr.assign(makeCdataAttributeValueNode(grove(), value_, attIndex_, iter_, charIndex_ + 1)); return accessOK; } } return CdataAttributeValueNode::nextChunkSibling(ptr); } AccessResult CdataAttributeValueNode::getLocation(Location &loc) const { if (iter_.type() == TextItem::sdata) return grove()->proxifyLocation(iter_.location().origin()->parent(), loc); else return grove()->proxifyLocation(iter_.location(), loc); } void CdataAttributeValueNode::accept(NodeVisitor &visitor) { if (iter_.type() == TextItem::sdata) visitor.sdata(*this); else visitor.dataChar(*this); } unsigned long CdataAttributeValueNode::hash() const { unsigned long n; CdataAttributeValueNode::siblingsIndex(n); return secondHash(secondHash((unsigned long)attributeOriginId() + attIndex_) + n); } const ClassDef &CdataAttributeValueNode::classDef() const { if (iter_.type() == TextItem::sdata) return ClassDef::sdata; else return ClassDef::dataChar; } bool CdataAttributeValueNode::same(const BaseNode &node) const { return node.same2(this); } bool CdataAttributeValueNode::same2(const CdataAttributeValueNode *node) const { size_t tem; return (attributeOriginId() == node->attributeOriginId() && attIndex_ == node->attIndex_ && charIndex_ == node->charIndex_ && iter_.chars(tem) == node->iter_.chars(tem)); } bool CdataAttributeValueNode::chunkContains(const Node &node) const { if (!sameGrove(node)) return 0; return ((const BaseNode &)node).inChunk(this); } bool CdataAttributeValueNode::inChunk(const CdataAttributeValueNode *node) const { size_t tem; return (attributeOriginId() == node->attributeOriginId() && attIndex_ == node->attIndex_ && iter_.chars(tem) == node->iter_.chars(tem) && charIndex_ >= node->charIndex_); } ElementCdataAttributeValueNode ::ElementCdataAttributeValueNode(const GroveImpl *grove, const AttributeValue *value, size_t attIndex, const TextIter &iter, size_t charIndex, const ElementChunk *chunk) : CdataAttributeValueNode(grove, value, attIndex, iter, charIndex), ElementAttributeOrigin(chunk) { } EntityCdataAttributeValueNode ::EntityCdataAttributeValueNode(const GroveImpl *grove, const AttributeValue *value, size_t attIndex, const TextIter &iter, size_t charIndex, const ExternalDataEntity *entity) : CdataAttributeValueNode(grove, value, attIndex, iter, charIndex), EntityAttributeOrigin(entity) { } AttributeValueTokenNode ::AttributeValueTokenNode(const GroveImpl *grove, const TokenizedAttributeValue *value, size_t attIndex, size_t tokenIndex) : BaseNode(grove), value_(value), attIndex_(attIndex), tokenIndex_(tokenIndex) { } AccessResult AttributeValueTokenNode::getParent(NodePtr &ptr) const { ptr.assign(makeAttributeAsgnNode(grove(), attIndex_)); return accessOK; } AccessResult AttributeValueTokenNode::nextChunkSibling(NodePtr &ptr) const { return followSiblingRef(0, ptr); } AccessResult AttributeValueTokenNode::followSiblingRef(unsigned long i, NodePtr &ptr) const { // Do it like this to avoid possibility of overflow if (i >= value_->nTokens() - tokenIndex_ - 1) return accessNull; if (canReuse(ptr)) { AttributeValueTokenNode *node = (AttributeValueTokenNode *)this; node->tokenIndex_ += size_t(i) + 1; } else ptr.assign(makeAttributeValueTokenNode(grove(), value_, attIndex_, tokenIndex_ + size_t(i) + 1)); return accessOK; } AccessResult AttributeValueTokenNode::firstSibling(NodePtr &ptr) const { if (canReuse(ptr)) ((AttributeValueTokenNode *)this)->tokenIndex_ = 0; else ptr.assign(makeAttributeValueTokenNode(grove(), value_, attIndex_, 0)); return accessOK; } AccessResult AttributeValueTokenNode::siblingsIndex(unsigned long &i) const { i = tokenIndex_; return accessOK; } AccessResult AttributeValueTokenNode::getToken(GroveString &str) const { const Char *ptr; size_t len; value_->token(tokenIndex_, ptr, len); str.assign(ptr, len); return accessOK; } AccessResult AttributeValueTokenNode::getEntity(NodePtr &ptr) const { if (!attDefList()->def(attIndex_)->isEntity()) return accessNull; StringC token(value_->token(tokenIndex_)); const Entity *entity = grove()->governingDtd()->lookupEntityTemp(0, token); if (!entity) { entity = grove()->lookupDefaultedEntity(token); if (!entity) return accessNull; } ptr.assign(new EntityNode(grove(), entity)); return accessOK; } AccessResult AttributeValueTokenNode::getNotation(NodePtr &ptr) const { if (!attDefList()->def(attIndex_)->isNotation()) return accessNull; StringC token(value_->token(tokenIndex_)); const Notation *notation = grove()->governingDtd()->lookupNotationTemp(token); if (!notation) return accessNull; ptr.assign(new NotationNode(grove(), notation)); return accessOK; } AccessResult AttributeValueTokenNode::getReferent(NodePtr &ptr) const { if (!attDefList()->def(attIndex_)->isIdref()) return accessNull; StringC token(value_->token(tokenIndex_)); for (;;) { Boolean complete = grove()->complete(); const ElementChunk *element = grove()->lookupElement(token); if (element) { ptr.assign(new ElementNode(grove(), element)); break; } if (complete) return accessNull; if (!grove()->waitForMoreNodes()) return accessTimeout; } return accessOK; } void AttributeValueTokenNode::accept(NodeVisitor &visitor) { visitor.attributeValueToken(*this); } unsigned long AttributeValueTokenNode::hash() const { return secondHash(secondHash((unsigned long)attributeOriginId() + attIndex_) + tokenIndex_); } bool AttributeValueTokenNode::same(const BaseNode &node) const { return node.same2(this); } bool AttributeValueTokenNode::same2(const AttributeValueTokenNode *node) const { return (attributeOriginId() == node->attributeOriginId() && attIndex_ == node->attIndex_ && tokenIndex_ == node->tokenIndex_); } AccessResult AttributeValueTokenNode::getLocation(Location &loc) const { const ConstPtr *originP; Index index; if (!value_->tokenLocation(tokenIndex_, originP, index) && originP->pointer()) { loc = Location(new GroveImplProxyOrigin(grove(), originP->pointer()), index); return accessOK; } return accessNull; } ElementAttributeValueTokenNode ::ElementAttributeValueTokenNode(const GroveImpl *grove, const TokenizedAttributeValue *value, size_t attIndex, size_t tokenIndex, const ElementChunk *chunk) : AttributeValueTokenNode(grove, value, attIndex, tokenIndex), ElementAttributeOrigin(chunk) { } EntityAttributeValueTokenNode ::EntityAttributeValueTokenNode(const GroveImpl *grove, const TokenizedAttributeValue *value, size_t attIndex, size_t tokenIndex, const ExternalDataEntity *entity) : AttributeValueTokenNode(grove, value, attIndex, tokenIndex), EntityAttributeOrigin(entity) { } EntityNode::EntityNode(const GroveImpl *grove, const Entity *entity) : BaseNode(grove), entity_(entity) { } AccessResult EntityNode::getOrigin(NodePtr &ptr) const { if (entity_->defaulted() && grove()->lookupDefaultedEntity(entity_->name())) ptr.assign(new SgmlDocumentNode(grove(), grove()->root())); else ptr.assign(new DocumentTypeNode(grove(), grove()->governingDtd())); return accessOK; } AccessResult EntityNode::getOriginToSubnodeRelPropertyName(ComponentName::Id &name) const { if (entity_->defaulted() && grove()->lookupDefaultedEntity(entity_->name())) name = ComponentName::idDefaultedEntities; else name = ComponentName::idGeneralEntities; return accessOK; } AccessResult EntityNode::getName(GroveString &str) const { setString(str, entity_->name()); return accessOK; } AccessResult EntityNode::getExternalId(NodePtr &ptr) const { const ExternalEntity *x = entity_->asExternalEntity(); if (!x) return accessNull; ptr.assign(new EntityExternalIdNode(grove(), x)); return accessOK; } AccessResult EntityNode::getNotation(NodePtr &ptr) const { const ExternalDataEntity *x = entity_->asExternalDataEntity(); if (!x || !x->notation()) return accessNull; ptr.assign(new NotationNode(grove(), x->notation())); return accessOK; } AccessResult EntityNode::getNotationName(GroveString &str) const { const ExternalDataEntity *x = entity_->asExternalDataEntity(); if (!x || !x->notation()) return accessNull; setString(str, x->notation()->name()); return accessOK; } AccessResult EntityNode::getText(GroveString &str) const { const InternalEntity *i = entity_->asInternalEntity(); if (!i) return accessNull; setString(str, i->string()); return accessOK; } AccessResult EntityNode::getEntityType(EntityType &entityType) const { switch (entity_->dataType()) { case EntityDecl::sgmlText: entityType = text; break; case EntityDecl::pi: entityType = pi; break; case EntityDecl::cdata: entityType = cdata; break; case EntityDecl::sdata: entityType = sdata; break; case EntityDecl::ndata: entityType = ndata; break; case EntityDecl::subdoc: entityType = subdocument; break; default: CANNOT_HAPPEN(); } return accessOK; } AccessResult EntityNode::getDefaulted(bool &dflted) const { dflted = entity_->defaulted(); return accessOK; } AccessResult EntityNode::getAttributes(NamedNodeListPtr &ptr) const { const ExternalDataEntity *x = entity_->asExternalDataEntity(); if (!x) return accessNull; ptr.assign(new EntityAttributesNamedNodeList(grove(), x)); return accessOK; } AccessResult EntityNode::attributeRef(unsigned long i, NodePtr &ptr) const { const ExternalDataEntity *x = entity_->asExternalDataEntity(); if (!x || i >= x->attributes().size()) return accessNull; ptr.assign(new EntityAttributeAsgnNode(grove(), size_t(i), x)); return accessOK; } AccessResult EntityNode::getLocation(Location &loc) const { return grove()->proxifyLocation(entity_->defLocation(), loc); } bool EntityNode::same(const BaseNode &node) const { return node.same2(this); } bool EntityNode::same2(const EntityNode *node) const { return entity_ == node->entity_; } void EntityNode::accept(NodeVisitor &visitor) { visitor.entity(*this); } unsigned long EntityNode::hash() const { return (unsigned long)entity_; } EntityAttributeOrigin ::EntityAttributeOrigin(const ExternalDataEntity *entity) : entity_(entity) { } const AttributeDefinitionList * EntityAttributeOrigin::attDefList() const { return entity_->notation()->attributeDefTemp(); } const AttributeValue * EntityAttributeOrigin::attributeValue(size_t attIndex, const GroveImpl &) const { return entity_->attributes().value(attIndex); } AccessResult EntityAttributeOrigin::setNodePtrAttributeOrigin(NodePtr &ptr, const BaseNode *node) const { ptr.assign(new EntityNode(node->grove(), entity_)); return accessOK; } Node *EntityAttributeOrigin ::makeCdataAttributeValueNode(const GroveImpl *grove, const AttributeValue *value, size_t attIndex, const TextIter &iter, size_t charIndex) const { return new EntityCdataAttributeValueNode(grove, value, attIndex, iter, charIndex, entity_); } Node *EntityAttributeOrigin ::makeAttributeValueTokenNode(const GroveImpl *grove, const TokenizedAttributeValue *value, size_t attIndex, size_t tokenIndex) const { return new EntityAttributeValueTokenNode(grove, value, attIndex, tokenIndex, entity_); } Node *EntityAttributeOrigin ::makeAttributeAsgnNode(const GroveImpl *grove, size_t attIndex) const { return new EntityAttributeAsgnNode(grove, attIndex, entity_); } const void *EntityAttributeOrigin::attributeOriginId() const { return entity_; } DoctypesAndLinktypesNamedNodeList ::DoctypesAndLinktypesNamedNodeList(const GroveImpl *grove) : BaseNamedNodeList(grove, grove->generalSubstTable()) { } NodeListPtr DoctypesAndLinktypesNamedNodeList::nodeList() const { NodePtr tem(new DocumentTypeNode(grove(), grove()->governingDtd())); return new SiblingNodeList(tem); } AccessResult DoctypesAndLinktypesNamedNodeList ::namedNodeU(const StringC &str, NodePtr &ptr) const { if (grove()->governingDtd()->name() != str) return accessNull; ptr.assign(new DocumentTypeNode(grove(), grove()->governingDtd())); return accessOK; } GeneralEntitiesNamedNodeList ::GeneralEntitiesNamedNodeList(const GroveImpl *grove, const Dtd *dtd) : BaseNamedNodeList(grove, grove->entitySubstTable()), dtd_(dtd) { } NodeListPtr GeneralEntitiesNamedNodeList::nodeList() const { return new EntitiesNodeList(grove(), dtd_->generalEntityIter()); } AccessResult GeneralEntitiesNamedNodeList::namedNodeU(const StringC &str, NodePtr &ptr) const { const Entity *entity = dtd_->lookupEntityTemp(0, str); if (!entity) return accessNull; ptr.assign(new EntityNode(grove(), entity)); return accessOK; } AccessResult DefaultedEntitiesNamedNodeList::namedNodeU(const StringC &str, NodePtr &ptr) const { const Entity *entity = grove()->lookupDefaultedEntity(str); if (!entity) return accessNull; ptr.assign(new EntityNode(grove(), entity)); return accessOK; } NodeListPtr DefaultedEntitiesNamedNodeList::nodeList() const { return new EntitiesNodeList(grove(), grove()->defaultedEntityIter()); } NodeListPtr DocEntitiesNamedNodeList::nodeList() const { return new DocEntitiesNodeList(grove()); } AccessResult DocEntitiesNamedNodeList::namedNodeU(const StringC &str, NodePtr &ptr) const { const Entity *entity = grove()->governingDtd()->lookupEntityTemp(0, str); // How I hate the default entity. while (!entity) { if (!grove()->hasDefaultEntity()) return accessNull; // Make sure that the value of complete // we look at is that before we looked up // the entity. Boolean complete = grove()->complete(); entity = grove()->lookupDefaultedEntity(str); if (entity) break; if (complete) return accessNull; if (!grove()->waitForMoreNodes()) return accessTimeout; } ptr.assign(new EntityNode(grove(), entity)); return accessOK; } AccessResult ElementsNamedNodeList::namedNodeU(const StringC &str, NodePtr &ptr) const { for (;;) { Boolean complete = grove()->complete(); const ElementChunk *element = grove()->lookupElement(str); if (element) { ptr.assign(new ElementNode(grove(), element)); break; } if (complete) return accessNull; if (!grove()->waitForMoreNodes()) return accessTimeout; } return accessOK; } NodeListPtr ElementsNamedNodeList::nodeList() const { return new ElementsNodeList(grove(), grove()->root()->documentElement); } ElementsNodeList::ElementsNodeList(const GroveImpl *grove, const Chunk *first) : grove_(grove), first_(first) { } AccessResult ElementsNodeList::first(NodePtr &ptr) const { const Chunk *p = first_; while (p) { while (p == grove_->completeLimit()) { if (!grove_->waitForMoreNodes()) return accessTimeout; } if (p->id()) { ((ElementsNodeList *)this)->first_ = p; ptr.assign(new ElementNode(grove_, (const ElementChunk *)p)); return accessOK; } p = p->after(); } return accessNull; } AccessResult ElementsNodeList::chunkRest(NodeListPtr &ptr) const { const Chunk *p = first_; while (p) { while (p == grove_->completeLimit()) { if (!grove_->waitForMoreNodes()) return accessTimeout; } if (p->id()) { if (canReuse(ptr)) ((ElementsNodeList *)this)->first_ = p->after(); else ptr.assign(new ElementsNodeList(grove_, p->after())); return accessOK; } p = p->after(); } return accessNull; } // iter.next() gives first member of list that this represents EntitiesNodeList::EntitiesNodeList(const GroveImpl *grove, const Dtd::ConstEntityIter &iter) : grove_(grove), iter_(iter) { } AccessResult EntitiesNodeList::first(NodePtr &ptr) const { Dtd::ConstEntityIter tem(iter_); const Entity *entity = tem.nextTemp(); if (!entity) return accessNull; ptr.assign(new EntityNode(grove_, entity)); return accessOK; } AccessResult EntitiesNodeList::chunkRest(NodeListPtr &ptr) const { if (canReuse(ptr)) { EntitiesNodeList *list = (EntitiesNodeList *)this; if (list->iter_.nextTemp() == 0) return accessNull; return accessOK; } Dtd::ConstEntityIter tem(iter_); if (tem.nextTemp() == 0) return accessNull; ptr.assign(new EntitiesNodeList(grove_, tem)); return accessOK; } DocEntitiesNodeList::DocEntitiesNodeList(const GroveImpl *grove) : EntitiesNodeList(grove, grove->governingDtd()->generalEntityIter()) { } AccessResult DocEntitiesNodeList::first(NodePtr &ptr) const { AccessResult ret = EntitiesNodeList::first(ptr); if (ret != accessNull || !grove()->hasDefaultEntity()) return ret; while (!grove()->complete()) if (!grove()->waitForMoreNodes()) return accessTimeout; Dtd::ConstEntityIter tem(grove()->defaultedEntityIter()); const Entity *entity = tem.nextTemp(); if (!entity) return accessNull; ptr.assign(new EntityNode(grove(), entity)); return accessOK; } AccessResult DocEntitiesNodeList::chunkRest(NodeListPtr &ptr) const { AccessResult ret = EntitiesNodeList::chunkRest(ptr); if (ret != accessNull || !grove()->hasDefaultEntity()) return ret; while (!grove()->complete()) if (!grove()->waitForMoreNodes()) return accessTimeout; Dtd::ConstEntityIter tem(grove()->defaultedEntityIter()); const Entity *entity = tem.nextTemp(); if (!entity) return accessNull; ptr.assign(new EntitiesNodeList(grove(), tem)); return accessOK; } NotationsNamedNodeList ::NotationsNamedNodeList(const GroveImpl *grove, const Dtd *dtd) : BaseNamedNodeList(grove, grove->generalSubstTable()), dtd_(dtd) { } NodeListPtr NotationsNamedNodeList::nodeList() const { return new NotationsNodeList(grove(), dtd_->notationIter()); } AccessResult NotationsNamedNodeList::namedNodeU(const StringC &str, NodePtr &ptr) const { const Notation *notation = dtd_->lookupNotationTemp(str); if (!notation) return accessNull; ptr.assign(new NotationNode(grove(), notation)); return accessOK; } // iter.next() gives first member of list that this represents NotationsNodeList::NotationsNodeList(const GroveImpl *grove, const Dtd::ConstNotationIter &iter) : grove_(grove), iter_(iter) { } AccessResult NotationsNodeList::first(NodePtr &ptr) const { Dtd::ConstNotationIter tem(iter_); const Notation *notation = tem.nextTemp(); if (!notation) return accessNull; ptr.assign(new NotationNode(grove_, notation)); return accessOK; } AccessResult NotationsNodeList::chunkRest(NodeListPtr &ptr) const { if (canReuse(ptr)) { NotationsNodeList *list = (NotationsNodeList *)this; if (list->iter_.next().isNull()) return accessNull; return accessOK; } Dtd::ConstNotationIter tem(iter_); if (tem.nextTemp() == 0) return accessNull; ptr.assign(new NotationsNodeList(grove_, tem)); return accessOK; } NotationNode::NotationNode(const GroveImpl *grove, const Notation *notation) : BaseNode(grove), notation_(notation) { } AccessResult NotationNode::getOrigin(NodePtr &ptr) const { ptr.assign(new DocumentTypeNode(grove(), grove()->governingDtd())); return accessOK; } AccessResult NotationNode::getName(GroveString &str) const { setString(str, notation_->name()); return accessOK; } AccessResult NotationNode::getExternalId(NodePtr &ptr) const { ptr.assign(new NotationExternalIdNode(grove(), notation_)); return accessOK; } AccessResult NotationNode::getLocation(Location &loc) const { return grove()->proxifyLocation(notation_->defLocation(), loc); } bool NotationNode::same(const BaseNode &node) const { return node.same2(this); } bool NotationNode::same2(const NotationNode *node) const { return notation_ == node->notation_; } void NotationNode::accept(NodeVisitor &visitor) { visitor.notation(*this); } unsigned long NotationNode::hash() const { return (unsigned long)notation_; } ExternalIdNode::ExternalIdNode(const GroveImpl *grove) : BaseNode(grove) { } AccessResult ExternalIdNode::getPublicId(GroveString &str) const { const StringC *s = externalId().publicIdString(); if (!s) return accessNull; setString(str, *s); return accessOK; } AccessResult ExternalIdNode::getSystemId(GroveString &str) const { const StringC *s = externalId().systemIdString(); if (!s) return accessNull; setString(str, *s); return accessOK; } AccessResult ExternalIdNode::getGeneratedSystemId(GroveString &str) const { const StringC &s = externalId().effectiveSystemId(); if (!s.size()) return accessNull; setString(str, s); return accessOK; } void ExternalIdNode::accept(NodeVisitor &visitor) { visitor.externalId(*this); } bool ExternalIdNode::same(const BaseNode &node) const { return node.same2(this); } bool ExternalIdNode::same2(const ExternalIdNode *node) const { return &externalId() == &node->externalId(); } EntityExternalIdNode::EntityExternalIdNode(const GroveImpl *grove, const ExternalEntity *entity) : ExternalIdNode(grove), entity_(entity) { } const ExternalId &EntityExternalIdNode::externalId() const { return entity_->externalId(); } AccessResult EntityExternalIdNode::getOrigin(NodePtr &ptr) const { ptr.assign(new EntityNode(grove(), entity_)); return accessOK; } unsigned long EntityExternalIdNode::hash() const { return secondHash((unsigned long)entity_); } NotationExternalIdNode::NotationExternalIdNode(const GroveImpl *grove, const Notation *notation) : ExternalIdNode(grove), notation_(notation) { } const ExternalId &NotationExternalIdNode::externalId() const { return notation_->externalId(); } AccessResult NotationExternalIdNode::getOrigin(NodePtr &ptr) const { ptr.assign(new NotationNode(grove(), notation_)); return accessOK; } unsigned long NotationExternalIdNode::hash() const { return secondHash((unsigned long)notation_); } AccessResult ChunkNode::getParent(NodePtr &ptr) const { if (!chunk_->origin) return accessNull; // This is needed because PiNodes in the prolog and // epilog don't have a parent but do have an origin. // Also for the document element. if ((const Chunk *)chunk()->origin == grove()->root()) return accessNull; chunk_->origin->setNodePtrFirst(ptr, this); return accessOK; } AccessResult ChunkNode::getTreeRoot(NodePtr &ptr) const { if (chunk()->origin && (const Chunk *)chunk()->origin != grove()->root() // With invalid documents we might have elements in the epilog && !grove()->root()->epilog && grove()->root()->documentElement) return grove()->root()->documentElement->setNodePtrFirst(ptr, this); return Node::getTreeRoot(ptr); } AccessResult ChunkNode::getOrigin(NodePtr &ptr) const { if (!chunk_->origin) return accessNull; chunk_->origin->setNodePtrFirst(ptr, this); return accessOK; } AccessResult ChunkNode::getOriginToSubnodeRelPropertyName(ComponentName::Id &name) const { if ((const Chunk *)chunk()->origin != grove()->root()) name = ComponentName::idContent; else if ((const Chunk *)chunk() == grove()->root()->documentElement) name = ComponentName::idDocumentElement; else { const Chunk *tem; if (chunk()->getFirstSibling(grove(), tem) == accessOK && tem == grove()->root()->prolog) name = ComponentName::idProlog; else name = ComponentName::idEpilog; } return accessOK; } unsigned long ChunkNode::hash() const { return (unsigned long)chunk_; } bool ChunkNode::same(const BaseNode &node) const { return node.same2(this); } bool ChunkNode::same2(const ChunkNode *node) const { return chunk_ == node->chunk_; } BaseNode::~BaseNode() { } void BaseNode::addRef() { ++refCount_; } void BaseNode::release() { ASSERT(refCount_ != 0); if (--refCount_ == 0) delete this; } unsigned BaseNode::groveIndex() const { return grove_->groveIndex(); } bool BaseNode::operator==(const Node &node) const { if (!sameGrove(node)) return 0; return same((const BaseNode &)node); } bool BaseNode::chunkContains(const Node &node) const { if (!sameGrove(node)) return 0; return same((const BaseNode &)node); } bool BaseNode::inChunk(const DataNode *) const { return 0; } bool BaseNode::inChunk(const CdataAttributeValueNode *) const { return 0; } bool BaseNode::same2(const ChunkNode *) const { return 0; } bool BaseNode::same2(const DataNode *) const { return 0; } bool BaseNode::same2(const AttributeAsgnNode *) const { return 0; } bool BaseNode::same2(const AttributeValueTokenNode *) const { return 0; } bool BaseNode::same2(const CdataAttributeValueNode *) const { return 0; } bool BaseNode::same2(const EntityNode *) const { return 0; } bool BaseNode::same2(const NotationNode *) const { return 0; } bool BaseNode::same2(const ExternalIdNode *) const { return 0; } bool BaseNode::same2(const DocumentTypeNode *) const { return 0; } bool BaseNode::same2(const SgmlConstantsNode *) const { return 0; } bool BaseNode::same2(const MessageNode *) const { return 0; } AccessResult BaseNode::nextSibling(NodePtr &ptr) const { return nextChunkSibling(ptr); } AccessResult BaseNode::follow(NodeListPtr &ptr) const { NodePtr nd; AccessResult ret = nextSibling(nd); switch (ret) { case accessOK: ptr.assign(new SiblingNodeList(nd)); break; case accessNull: ptr.assign(new BaseNodeList); ret = accessOK; break; default: break; } return ret; } AccessResult BaseNode::children(NodeListPtr &ptr) const { NodePtr head; AccessResult ret = firstChild(head); switch (ret) { case accessOK: ptr.assign(new SiblingNodeList(head)); break; case accessNull: ptr.assign(new BaseNodeList); ret = accessOK; break; default: break; } return ret; } AccessResult BaseNode::getOrigin(NodePtr &ptr) const { return getParent(ptr); } AccessResult BaseNode::getGroveRoot(NodePtr &ptr) const { ptr.assign(new SgmlDocumentNode(grove(), grove()->root())); return accessOK; } AccessResult BaseNode::getLocation(Location &) const { return accessNull; } bool BaseNode::queryInterface(IID iid, const void *&p) const { if (iid == LocNode::iid) { const LocNode *ip = this; p = ip; return 1; } return 0; } AccessResult ForwardingChunk::setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const { if (forwardTo == 0) return accessNull; ASSERT(origin == forwardTo->origin); return forwardTo->setNodePtrFirst(ptr, node); } AccessResult ForwardingChunk::getFollowing(const GroveImpl *grove, const Chunk *&p, unsigned long &nNodes) const { AccessResult ret = Chunk::getFollowing(grove, p, nNodes); if (ret == accessOK) nNodes = 0; return ret; } AccessResult LocOriginChunk::getFollowing(const GroveImpl *grove, const Chunk *&p, unsigned long &nNodes) const { AccessResult ret = Chunk::getFollowing(grove, p, nNodes); if (ret == accessOK) nNodes = 0; return ret; } AccessResult LocOriginChunk::setNodePtrFirst(NodePtr &ptr, const BaseNode *node) const { return ((const Chunk *)(this + 1))->setNodePtrFirst(ptr, node); } AccessResult LocOriginChunk::setNodePtrFirst(NodePtr &ptr, const ElementNode *node) const { return ((const Chunk *)(this + 1))->setNodePtrFirst(ptr, node); } AccessResult LocOriginChunk::setNodePtrFirst(NodePtr &ptr, const DataNode *node) const { return ((const Chunk *)(this + 1))->setNodePtrFirst(ptr, node); } const Chunk *LocOriginChunk::after() const { return this + 1; } Boolean LocOriginChunk::getLocOrigin(const Origin *&ret) const { ret = locOrigin; return 1; } AccessResult Chunk::setNodePtrFirst(NodePtr &ptr, const ElementNode *node) const { return setNodePtrFirst(ptr, (const BaseNode *)node); } AccessResult Chunk::setNodePtrFirst(NodePtr &ptr, const DataNode *node) const { return setNodePtrFirst(ptr, (const BaseNode *)node); } const StringC *Chunk::id() const { return 0; } AccessResult Chunk::getFollowing(const GroveImpl *grove, const Chunk *&f, unsigned long &n) const { const Chunk *p = after(); while (p == grove->completeLimit()) if (!grove->waitForMoreNodes()) return accessTimeout; if (p->origin != origin) return accessNull; n = 1; f = p; return accessOK; } AccessResult Chunk::getFirstSibling(const GroveImpl *grove, const Chunk *&p) const { if ((const Chunk *)origin == grove->root()) return accessNotInClass; p = origin->after(); return accessOK; } Boolean Chunk::getLocOrigin(const Origin *&) const { return 0; } #ifdef SP_NAMESPACE } #endif #include "grove_inst.cxx" jade-1.2.1/spgrove/grove_inst.cxx100444 764 764 2634 6604613140 14600 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1996, 1997 James Clark // See the file copying.txt for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "PointerTable.h" #include "Vector.h" #undef SP_DEFINE_TEMPLATES #include "Hash.h" #include "StringC.h" #include "Node.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class ElementChunk; #ifdef __DECCXX #pragma define_template PointerTable #else #ifdef __xlC__ #pragma define(PointerTable) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable; #else typedef PointerTable Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_2; #endif #endif #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/spgrove/grove_inst.m4100444 764 764 1107 6604607714 14322 0ustar jjcjjc// Copyright (c) 1996, 1997 James Clark // See the file copying.txt for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "PointerTable.h" #include "Vector.h" #undef SP_DEFINE_TEMPLATES #include "Hash.h" #include "StringC.h" #include "Node.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class ElementChunk; __instantiate(`PointerTable') __instantiate(`Vector') __instantiate(Vector >) #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/spgrove/Makefile.sub100444 764 764 211 6604607714 14104 0ustar jjcjjcLIB=spgrove INCLUDE=-I$(srcdir)/../grove OBJS=GroveApp.o GroveBuilder.o SdNode.o GENSRCS=grove_inst.cxx GroveBuilder.o: grove_inst.cxx jade-1.2.1/spgrove/spgrove.dsp100444 764 764 13263 6605016760 14120 0ustar jjcjjc# Microsoft Developer Studio Project File - Name="spgrove" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=spgrove - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "spgrove.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "spgrove.mak" CFG="spgrove - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "spgrove - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "spgrove - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "spgrove - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\include" /I "..\grove" /D "BUILD_LIBSPGROVE" /D "NDEBUG" /D "_WINDOWS" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x20100000" /subsystem:windows /dll /machine:I386 /out:"..\bin\spgrove.dll" # SUBTRACT LINK32 /profile /map !ELSEIF "$(CFG)" == "spgrove - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\Debug" # PROP BASE Intermediate_Dir ".\Debug" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir ".\Debug" # PROP Intermediate_Dir ".\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\include" /I "..\grove" /D "BUILD_LIBSPGROVE" /D "_DEBUG" /D "_WINDOWS" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x20100000" /subsystem:windows /dll /debug /machine:I386 /out:"..\dbgbin\spgrove.dll" # SUBTRACT LINK32 /incremental:no !ENDIF # Begin Target # Name "spgrove - Win32 Release" # Name "spgrove - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # Begin Source File SOURCE=.\grove_inst.m4 !IF "$(CFG)" == "spgrove - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\grove_inst.m4 InputName=grove_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "spgrove - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\grove_inst.m4 InputName=grove_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\GroveApp.cxx # End Source File # Begin Source File SOURCE=.\GroveBuilder.cxx # End Source File # Begin Source File SOURCE=.\SdNode.cxx # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # Begin Source File SOURCE=.\GroveApp.h # End Source File # Begin Source File SOURCE=.\GroveBuilder.h # End Source File # Begin Source File SOURCE=.\SdNode.h # End Source File # Begin Source File SOURCE=.\threads.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # End Group # Begin Source File SOURCE=.\grove_inst.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # End Target # End Project jade-1.2.1/style/ 40775 764 764 0 6610553420 11253 5ustar jjcjjcjade-1.2.1/style/charNames.h100444 764 764 110336 6604607714 13473 0ustar jjcjjc// Unicode code, character name { 0x0020, "space" }, { 0x0021, "exclamation-mark" }, { 0x0022, "quotation-mark" }, { 0x0023, "number-sign" }, { 0x0024, "dollar-sign" }, { 0x0025, "percent-sign" }, { 0x0026, "ampersand" }, { 0x0027, "apostrophe" }, { 0x0028, "left-parenthesis" }, { 0x0029, "right-parenthesis" }, { 0x002a, "asterisk" }, { 0x002b, "plus-sign" }, { 0x002c, "comma" }, { 0x002d, "hyphen-minus" }, { 0x002e, "full-stop" }, { 0x002f, "solidus" }, { 0x0030, "digit-zero" }, { 0x0031, "digit-one" }, { 0x0032, "digit-two" }, { 0x0033, "digit-three" }, { 0x0034, "digit-four" }, { 0x0035, "digit-five" }, { 0x0036, "digit-six" }, { 0x0037, "digit-seven" }, { 0x0038, "digit-eight" }, { 0x0039, "digit-nine" }, { 0x003a, "colon" }, { 0x003b, "semicolon" }, { 0x003c, "less-than-sign" }, { 0x003d, "equals-sign" }, { 0x003e, "greater-than-sign" }, { 0x003f, "question-mark" }, { 0x0040, "commercial-at" }, { 0x0041, "latin-capital-letter-a" }, { 0x0042, "latin-capital-letter-b" }, { 0x0043, "latin-capital-letter-c" }, { 0x0044, "latin-capital-letter-d" }, { 0x0045, "latin-capital-letter-e" }, { 0x0046, "latin-capital-letter-f" }, { 0x0047, "latin-capital-letter-g" }, { 0x0048, "latin-capital-letter-h" }, { 0x0049, "latin-capital-letter-i" }, { 0x004a, "latin-capital-letter-j" }, { 0x004b, "latin-capital-letter-k" }, { 0x004c, "latin-capital-letter-l" }, { 0x004d, "latin-capital-letter-m" }, { 0x004e, "latin-capital-letter-n" }, { 0x004f, "latin-capital-letter-o" }, { 0x0050, "latin-capital-letter-p" }, { 0x0051, "latin-capital-letter-q" }, { 0x0052, "latin-capital-letter-r" }, { 0x0053, "latin-capital-letter-s" }, { 0x0054, "latin-capital-letter-t" }, { 0x0055, "latin-capital-letter-u" }, { 0x0056, "latin-capital-letter-v" }, { 0x0057, "latin-capital-letter-w" }, { 0x0058, "latin-capital-letter-x" }, { 0x0059, "latin-capital-letter-y" }, { 0x005a, "latin-capital-letter-z" }, { 0x005b, "left-square-bracket" }, { 0x005c, "reverse-solidus" }, { 0x005d, "right-square-bracket" }, { 0x005e, "circumflex-accent" }, { 0x005f, "low-line" }, { 0x0060, "grave-accent" }, { 0x0061, "latin-small-letter-a" }, { 0x0062, "latin-small-letter-b" }, { 0x0063, "latin-small-letter-c" }, { 0x0064, "latin-small-letter-d" }, { 0x0065, "latin-small-letter-e" }, { 0x0066, "latin-small-letter-f" }, { 0x0067, "latin-small-letter-g" }, { 0x0068, "latin-small-letter-h" }, { 0x0069, "latin-small-letter-i" }, { 0x006a, "latin-small-letter-j" }, { 0x006b, "latin-small-letter-k" }, { 0x006c, "latin-small-letter-l" }, { 0x006d, "latin-small-letter-m" }, { 0x006e, "latin-small-letter-n" }, { 0x006f, "latin-small-letter-o" }, { 0x0070, "latin-small-letter-p" }, { 0x0071, "latin-small-letter-q" }, { 0x0072, "latin-small-letter-r" }, { 0x0073, "latin-small-letter-s" }, { 0x0074, "latin-small-letter-t" }, { 0x0075, "latin-small-letter-u" }, { 0x0076, "latin-small-letter-v" }, { 0x0077, "latin-small-letter-w" }, { 0x0078, "latin-small-letter-x" }, { 0x0079, "latin-small-letter-y" }, { 0x007a, "latin-small-letter-z" }, { 0x007b, "left-curly-bracket" }, { 0x007c, "vertical-line" }, { 0x007d, "right-curly-bracket" }, { 0x007e, "tilde" }, { 0x00a0, "no-break-space" }, { 0x00a1, "inverted-exclamation-mark" }, { 0x00a2, "cent-sign" }, { 0x00a3, "pound-sign" }, { 0x00a4, "currency-sign" }, { 0x00a5, "yen-sign" }, { 0x00a6, "broken-bar" }, { 0x00a7, "section-sign" }, { 0x00a8, "diaeresis" }, { 0x00a9, "copyright-sign" }, { 0x00aa, "feminine-ordinal-indicator" }, { 0x00ab, "left-pointing-double-angle-quotation-mark" }, { 0x00ac, "not-sign" }, { 0x00ad, "soft-hyphen" }, { 0x00ae, "registered-sign" }, { 0x00af, "macron" }, { 0x00b0, "degree-sign" }, { 0x00b1, "plus-minus-sign" }, { 0x00b2, "superscript-two" }, { 0x00b3, "superscript-three" }, { 0x00b4, "acute-accent" }, { 0x00b5, "micro-sign" }, { 0x00b6, "pilcrow-sign" }, { 0x00b7, "middle-dot" }, { 0x00b8, "cedilla" }, { 0x00b9, "superscript-one" }, { 0x00ba, "masculine-ordinal-indicator" }, { 0x00bb, "right-pointing-double-angle-quotation-mark" }, { 0x00bc, "vulgar-fraction-one-quarter" }, { 0x00bd, "vulgar-fraction-one-half" }, { 0x00be, "vulgar-fraction-three-quarters" }, { 0x00bf, "inverted-question-mark" }, { 0x00c0, "latin-capital-letter-a-with-grave" }, { 0x00c1, "latin-capital-letter-a-with-acute" }, { 0x00c2, "latin-capital-letter-a-with-circumflex" }, { 0x00c3, "latin-capital-letter-a-with-tilde" }, { 0x00c4, "latin-capital-letter-a-with-diaeresis" }, { 0x00c5, "latin-capital-letter-a-with-ring-above" }, { 0x00c6, "latin-capital-letter-ae" }, { 0x00c7, "latin-capital-letter-c-with-cedilla" }, { 0x00c8, "latin-capital-letter-e-with-grave" }, { 0x00c9, "latin-capital-letter-e-with-acute" }, { 0x00ca, "latin-capital-letter-e-with-circumflex" }, { 0x00cb, "latin-capital-letter-e-with-diaeresis" }, { 0x00cc, "latin-capital-letter-i-with-grave" }, { 0x00cd, "latin-capital-letter-i-with-acute" }, { 0x00ce, "latin-capital-letter-i-with-circumflex" }, { 0x00cf, "latin-capital-letter-i-with-diaeresis" }, { 0x00d0, "latin-capital-letter-eth" }, { 0x00d1, "latin-capital-letter-n-with-tilde" }, { 0x00d2, "latin-capital-letter-o-with-grave" }, { 0x00d3, "latin-capital-letter-o-with-acute" }, { 0x00d4, "latin-capital-letter-o-with-circumflex" }, { 0x00d5, "latin-capital-letter-o-with-tilde" }, { 0x00d6, "latin-capital-letter-o-with-diaeresis" }, { 0x00d7, "multiplication-sign" }, { 0x00d8, "latin-capital-letter-o-with-stroke" }, { 0x00d9, "latin-capital-letter-u-with-grave" }, { 0x00da, "latin-capital-letter-u-with-acute" }, { 0x00db, "latin-capital-letter-u-with-circumflex" }, { 0x00dc, "latin-capital-letter-u-with-diaeresis" }, { 0x00dd, "latin-capital-letter-y-with-acute" }, { 0x00de, "latin-capital-letter-thorn" }, { 0x00df, "latin-small-letter-sharp-s" }, { 0x00e0, "latin-small-letter-a-with-grave" }, { 0x00e1, "latin-small-letter-a-with-acute" }, { 0x00e2, "latin-small-letter-a-with-circumflex" }, { 0x00e3, "latin-small-letter-a-with-tilde" }, { 0x00e4, "latin-small-letter-a-with-diaeresis" }, { 0x00e5, "latin-small-letter-a-with-ring-above" }, { 0x00e6, "latin-small-letter-ae" }, { 0x00e7, "latin-small-letter-c-with-cedilla" }, { 0x00e8, "latin-small-letter-e-with-grave" }, { 0x00e9, "latin-small-letter-e-with-acute" }, { 0x00ea, "latin-small-letter-e-with-circumflex" }, { 0x00eb, "latin-small-letter-e-with-diaeresis" }, { 0x00ec, "latin-small-letter-i-with-grave" }, { 0x00ed, "latin-small-letter-i-with-acute" }, { 0x00ee, "latin-small-letter-i-with-circumflex" }, { 0x00ef, "latin-small-letter-i-with-diaeresis" }, { 0x00f0, "latin-small-letter-eth" }, { 0x00f1, "latin-small-letter-n-with-tilde" }, { 0x00f2, "latin-small-letter-o-with-grave" }, { 0x00f3, "latin-small-letter-o-with-acute" }, { 0x00f4, "latin-small-letter-o-with-circumflex" }, { 0x00f5, "latin-small-letter-o-with-tilde" }, { 0x00f6, "latin-small-letter-o-with-diaeresis" }, { 0x00f7, "division-sign" }, { 0x00f8, "latin-small-letter-o-with-stroke" }, { 0x00f9, "latin-small-letter-u-with-grave" }, { 0x00fa, "latin-small-letter-u-with-acute" }, { 0x00fb, "latin-small-letter-u-with-circumflex" }, { 0x00fc, "latin-small-letter-u-with-diaeresis" }, { 0x00fd, "latin-small-letter-y-with-acute" }, { 0x00fe, "latin-small-letter-thorn" }, { 0x00ff, "latin-small-letter-y-with-diaeresis" }, { 0x0100, "latin-capital-letter-a-with-macron" }, { 0x0101, "latin-small-letter-a-with-macron" }, { 0x0102, "latin-capital-letter-a-with-breve" }, { 0x0103, "latin-small-letter-a-with-breve" }, { 0x0104, "latin-capital-letter-a-with-ogonek" }, { 0x0105, "latin-small-letter-a-with-ogonek" }, { 0x0106, "latin-capital-letter-c-with-acute" }, { 0x0107, "latin-small-letter-c-with-acute" }, { 0x0108, "latin-capital-letter-c-with-circumflex" }, { 0x0109, "latin-small-letter-c-with-circumflex" }, { 0x010a, "latin-capital-letter-c-with-dot-above" }, { 0x010b, "latin-small-letter-c-with-dot-above" }, { 0x010c, "latin-capital-letter-c-with-caron" }, { 0x010d, "latin-small-letter-c-with-caron" }, { 0x010e, "latin-capital-letter-d-with-caron" }, { 0x010f, "latin-small-letter-d-with-caron" }, { 0x0110, "latin-capital-letter-d-with-stroke" }, { 0x0111, "latin-small-letter-d-with-stroke" }, { 0x0112, "latin-capital-letter-e-with-macron" }, { 0x0113, "latin-small-letter-e-with-macron" }, { 0x0114, "latin-capital-letter-e-with-breve" }, { 0x0115, "latin-small-letter-e-with-breve" }, { 0x0116, "latin-capital-letter-e-with-dot-above" }, { 0x0117, "latin-small-letter-e-with-dot-above" }, { 0x0118, "latin-capital-letter-e-with-ogonek" }, { 0x0119, "latin-small-letter-e-with-ogonek" }, { 0x011a, "latin-capital-letter-e-with-caron" }, { 0x011b, "latin-small-letter-e-with-caron" }, { 0x011c, "latin-capital-letter-g-with-circumflex" }, { 0x011d, "latin-small-letter-g-with-circumflex" }, { 0x011e, "latin-capital-letter-g-with-breve" }, { 0x011f, "latin-small-letter-g-with-breve" }, { 0x0120, "latin-capital-letter-g-with-dot-above" }, { 0x0121, "latin-small-letter-g-with-dot-above" }, { 0x0122, "latin-capital-letter-g-with-cedilla" }, { 0x0123, "latin-small-letter-g-with-cedilla" }, { 0x0124, "latin-capital-letter-h-with-circumflex" }, { 0x0125, "latin-small-letter-h-with-circumflex" }, { 0x0126, "latin-capital-letter-h-with-stroke" }, { 0x0127, "latin-small-letter-h-with-stroke" }, { 0x0128, "latin-capital-letter-i-with-tilde" }, { 0x0129, "latin-small-letter-i-with-tilde" }, { 0x012a, "latin-capital-letter-i-with-macron" }, { 0x012b, "latin-small-letter-i-with-macron" }, { 0x012c, "latin-capital-letter-i-with-breve" }, { 0x012d, "latin-small-letter-i-with-breve" }, { 0x012e, "latin-capital-letter-i-with-ogonek" }, { 0x012f, "latin-small-letter-i-with-ogonek" }, { 0x0130, "latin-capital-letter-i-with-dot-above" }, { 0x0131, "latin-small-letter-dotless-i" }, { 0x0132, "latin-capital-ligature-ij" }, { 0x0133, "latin-small-ligature-ij" }, { 0x0134, "latin-capital-letter-j-with-circumflex" }, { 0x0135, "latin-small-letter-j-with-circumflex" }, { 0x0136, "latin-capital-letter-k-with-cedilla" }, { 0x0137, "latin-small-letter-k-with-cedilla" }, { 0x0138, "latin-small-letter-kra" }, { 0x0139, "latin-capital-letter-l-with-acute" }, { 0x013a, "latin-small-letter-l-with-acute" }, { 0x013b, "latin-capital-letter-l-with-cedilla" }, { 0x013c, "latin-small-letter-l-with-cedilla" }, { 0x013d, "latin-capital-letter-l-with-caron" }, { 0x013e, "latin-small-letter-l-with-caron" }, { 0x013f, "latin-capital-letter-l-with-middle-dot" }, { 0x0140, "latin-small-letter-l-with-middle-dot" }, { 0x0141, "latin-capital-letter-l-with-stroke" }, { 0x0142, "latin-small-letter-l-with-stroke" }, { 0x0143, "latin-capital-letter-n-with-acute" }, { 0x0144, "latin-small-letter-n-with-acute" }, { 0x0145, "latin-capital-letter-n-with-cedilla" }, { 0x0146, "latin-small-letter-n-with-cedilla" }, { 0x0147, "latin-capital-letter-n-with-caron" }, { 0x0148, "latin-small-letter-n-with-caron" }, { 0x0149, "latin-small-letter-n-preceded-by-apostrophe" }, { 0x014a, "latin-capital-letter-eng" }, { 0x014b, "latin-small-letter-eng" }, { 0x014c, "latin-capital-letter-o-with-macron" }, { 0x014d, "latin-small-letter-o-with-macron" }, { 0x014e, "latin-capital-letter-o-with-breve" }, { 0x014f, "latin-small-letter-o-with-breve" }, { 0x0150, "latin-capital-letter-o-with-double-acute" }, { 0x0151, "latin-small-letter-o-with-double-acute" }, { 0x0152, "latin-capital-ligature-oe" }, { 0x0153, "latin-small-ligature-oe" }, { 0x0154, "latin-capital-letter-r-with-acute" }, { 0x0155, "latin-small-letter-r-with-acute" }, { 0x0156, "latin-capital-letter-r-with-cedilla" }, { 0x0157, "latin-small-letter-r-with-cedilla" }, { 0x0158, "latin-capital-letter-r-with-caron" }, { 0x0159, "latin-small-letter-r-with-caron" }, { 0x015a, "latin-capital-letter-s-with-acute" }, { 0x015b, "latin-small-letter-s-with-acute" }, { 0x015c, "latin-capital-letter-s-with-circumflex" }, { 0x015d, "latin-small-letter-s-with-circumflex" }, { 0x015e, "latin-capital-letter-s-with-cedilla" }, { 0x015f, "latin-small-letter-s-with-cedilla" }, { 0x0160, "latin-capital-letter-s-with-caron" }, { 0x0161, "latin-small-letter-s-with-caron" }, { 0x0162, "latin-capital-letter-t-with-cedilla" }, { 0x0163, "latin-small-letter-t-with-cedilla" }, { 0x0164, "latin-capital-letter-t-with-caron" }, { 0x0165, "latin-small-letter-t-with-caron" }, { 0x0166, "latin-capital-letter-t-with-stroke" }, { 0x0167, "latin-small-letter-t-with-stroke" }, { 0x0168, "latin-capital-letter-u-with-tilde" }, { 0x0169, "latin-small-letter-u-with-tilde" }, { 0x016a, "latin-capital-letter-u-with-macron" }, { 0x016b, "latin-small-letter-u-with-macron" }, { 0x016c, "latin-capital-letter-u-with-breve" }, { 0x016d, "latin-small-letter-u-with-breve" }, { 0x016e, "latin-capital-letter-u-with-ring-above" }, { 0x016f, "latin-small-letter-u-with-ring-above" }, { 0x0170, "latin-capital-letter-u-with-double-acute" }, { 0x0171, "latin-small-letter-u-with-double-acute" }, { 0x0172, "latin-capital-letter-u-with-ogonek" }, { 0x0173, "latin-small-letter-u-with-ogonek" }, { 0x0174, "latin-capital-letter-w-with-circumflex" }, { 0x0175, "latin-small-letter-w-with-circumflex" }, { 0x0176, "latin-capital-letter-y-with-circumflex" }, { 0x0177, "latin-small-letter-y-with-circumflex" }, { 0x0178, "latin-capital-letter-y-with-diaeresis" }, { 0x0179, "latin-capital-letter-z-with-acute" }, { 0x017a, "latin-small-letter-z-with-acute" }, { 0x017b, "latin-capital-letter-z-with-dot-above" }, { 0x017c, "latin-small-letter-z-with-dot-above" }, { 0x017d, "latin-capital-letter-z-with-caron" }, { 0x017e, "latin-small-letter-z-with-caron" }, { 0x017f, "latin-small-letter-long-s" }, { 0x0192, "latin-small-letter-f-with-hook" }, { 0x01fa, "latin-capital-letter-a-with-ring-above-and-acute" }, { 0x01fb, "latin-small-letter-a-with-ring-above-and-acute" }, { 0x01fc, "latin-capital-letter-ae-with-acute" }, { 0x01fd, "latin-small-letter-ae-with-acute" }, { 0x01fe, "latin-capital-letter-o-with-stroke-and-acute" }, { 0x01ff, "latin-small-letter-o-with-stroke-and-acute" }, { 0x02c6, "modifier-letter-circumflex-accent" }, { 0x02c7, "caron" }, { 0x02c9, "modifier-letter-macron" }, { 0x02d8, "breve" }, { 0x02d9, "dot-above" }, { 0x02da, "ring-above" }, { 0x02db, "ogonek" }, { 0x02dc, "small-tilde" }, { 0x02dd, "double-acute-accent" }, { 0x0384, "greek-tonos" }, { 0x0385, "greek-dialytika-tonos" }, { 0x0386, "greek-capital-letter-alpha-with-tonos" }, { 0x0387, "greek-ano-teleia" }, { 0x0388, "greek-capital-letter-epsilon-with-tonos" }, { 0x0389, "greek-capital-letter-eta-with-tonos" }, { 0x038a, "greek-capital-letter-iota-with-tonos" }, { 0x038c, "greek-capital-letter-omicron-with-tonos" }, { 0x038e, "greek-capital-letter-upsilon-with-tonos" }, { 0x038f, "greek-capital-letter-omega-with-tonos" }, { 0x0390, "greek-small-letter-iota-with-dialytika-and-tonos" }, { 0x0391, "greek-capital-letter-alpha" }, { 0x0392, "greek-capital-letter-beta" }, { 0x0393, "greek-capital-letter-gamma" }, { 0x0394, "greek-capital-letter-delta" }, { 0x0395, "greek-capital-letter-epsilon" }, { 0x0396, "greek-capital-letter-zeta" }, { 0x0397, "greek-capital-letter-eta" }, { 0x0398, "greek-capital-letter-theta" }, { 0x0399, "greek-capital-letter-iota" }, { 0x039a, "greek-capital-letter-kappa" }, { 0x039b, "greek-capital-letter-lamda" }, { 0x039c, "greek-capital-letter-mu" }, { 0x039d, "greek-capital-letter-nu" }, { 0x039e, "greek-capital-letter-xi" }, { 0x039f, "greek-capital-letter-omicron" }, { 0x03a0, "greek-capital-letter-pi" }, { 0x03a1, "greek-capital-letter-rho" }, { 0x03a3, "greek-capital-letter-sigma" }, { 0x03a4, "greek-capital-letter-tau" }, { 0x03a5, "greek-capital-letter-upsilon" }, { 0x03a6, "greek-capital-letter-phi" }, { 0x03a7, "greek-capital-letter-chi" }, { 0x03a8, "greek-capital-letter-psi" }, { 0x03a9, "greek-capital-letter-omega" }, { 0x03aa, "greek-capital-letter-iota-with-dialytika" }, { 0x03ab, "greek-capital-letter-upsilon-with-dialytika" }, { 0x03ac, "greek-small-letter-alpha-with-tonos" }, { 0x03ad, "greek-small-letter-epsilon-with-tonos" }, { 0x03ae, "greek-small-letter-eta-with-tonos" }, { 0x03af, "greek-small-letter-iota-with-tonos" }, { 0x03b0, "greek-small-letter-upsilon-with-dialytika-and-tonos" }, { 0x03b1, "greek-small-letter-alpha" }, { 0x03b2, "greek-small-letter-beta" }, { 0x03b3, "greek-small-letter-gamma" }, { 0x03b4, "greek-small-letter-delta" }, { 0x03b5, "greek-small-letter-epsilon" }, { 0x03b6, "greek-small-letter-zeta" }, { 0x03b7, "greek-small-letter-eta" }, { 0x03b8, "greek-small-letter-theta" }, { 0x03b9, "greek-small-letter-iota" }, { 0x03ba, "greek-small-letter-kappa" }, { 0x03bb, "greek-small-letter-lamda" }, { 0x03bc, "greek-small-letter-mu" }, { 0x03bd, "greek-small-letter-nu" }, { 0x03be, "greek-small-letter-xi" }, { 0x03bf, "greek-small-letter-omicron" }, { 0x03c0, "greek-small-letter-pi" }, { 0x03c1, "greek-small-letter-rho" }, { 0x03c2, "greek-small-letter-final-sigma" }, { 0x03c3, "greek-small-letter-sigma" }, { 0x03c4, "greek-small-letter-tau" }, { 0x03c5, "greek-small-letter-upsilon" }, { 0x03c6, "greek-small-letter-phi" }, { 0x03c7, "greek-small-letter-chi" }, { 0x03c8, "greek-small-letter-psi" }, { 0x03c9, "greek-small-letter-omega" }, { 0x03ca, "greek-small-letter-iota-with-dialytika" }, { 0x03cb, "greek-small-letter-upsilon-with-dialytika" }, { 0x03cc, "greek-small-letter-omicron-with-tonos" }, { 0x03cd, "greek-small-letter-upsilon-with-tonos" }, { 0x03ce, "greek-small-letter-omega-with-tonos" }, { 0x03d1, "greek-theta-symbol" }, { 0x03d2, "greek-upsilon-with-hook-symbol" }, { 0x03d5, "greek-phi-symbol" }, { 0x03d6, "greek-pi-symbol" }, { 0x0401, "cyrillic-capital-letter-io" }, { 0x0402, "cyrillic-capital-letter-dje" }, { 0x0403, "cyrillic-capital-letter-gje" }, { 0x0404, "cyrillic-capital-letter-ukrainian-ie" }, { 0x0405, "cyrillic-capital-letter-dze" }, { 0x0406, "cyrillic-capital-letter-byelorussian-ukrainian-i" }, { 0x0407, "cyrillic-capital-letter-yi" }, { 0x0408, "cyrillic-capital-letter-je" }, { 0x0409, "cyrillic-capital-letter-lje" }, { 0x040a, "cyrillic-capital-letter-nje" }, { 0x040b, "cyrillic-capital-letter-tshe" }, { 0x040c, "cyrillic-capital-letter-kje" }, { 0x040e, "cyrillic-capital-letter-short-u" }, { 0x040f, "cyrillic-capital-letter-dzhe" }, { 0x0410, "cyrillic-capital-letter-a" }, { 0x0411, "cyrillic-capital-letter-be" }, { 0x0412, "cyrillic-capital-letter-ve" }, { 0x0413, "cyrillic-capital-letter-ghe" }, { 0x0414, "cyrillic-capital-letter-de" }, { 0x0415, "cyrillic-capital-letter-ie" }, { 0x0416, "cyrillic-capital-letter-zhe" }, { 0x0417, "cyrillic-capital-letter-ze" }, { 0x0418, "cyrillic-capital-letter-i" }, { 0x0419, "cyrillic-capital-letter-short-i" }, { 0x041a, "cyrillic-capital-letter-ka" }, { 0x041b, "cyrillic-capital-letter-el" }, { 0x041c, "cyrillic-capital-letter-em" }, { 0x041d, "cyrillic-capital-letter-en" }, { 0x041e, "cyrillic-capital-letter-o" }, { 0x041f, "cyrillic-capital-letter-pe" }, { 0x0420, "cyrillic-capital-letter-er" }, { 0x0421, "cyrillic-capital-letter-es" }, { 0x0422, "cyrillic-capital-letter-te" }, { 0x0423, "cyrillic-capital-letter-u" }, { 0x0424, "cyrillic-capital-letter-ef" }, { 0x0425, "cyrillic-capital-letter-ha" }, { 0x0426, "cyrillic-capital-letter-tse" }, { 0x0427, "cyrillic-capital-letter-che" }, { 0x0428, "cyrillic-capital-letter-sha" }, { 0x0429, "cyrillic-capital-letter-shcha" }, { 0x042a, "cyrillic-capital-letter-hard-sign" }, { 0x042b, "cyrillic-capital-letter-yeru" }, { 0x042c, "cyrillic-capital-letter-soft-sign" }, { 0x042d, "cyrillic-capital-letter-e" }, { 0x042e, "cyrillic-capital-letter-yu" }, { 0x042f, "cyrillic-capital-letter-ya" }, { 0x0430, "cyrillic-small-letter-a" }, { 0x0431, "cyrillic-small-letter-be" }, { 0x0432, "cyrillic-small-letter-ve" }, { 0x0433, "cyrillic-small-letter-ghe" }, { 0x0434, "cyrillic-small-letter-de" }, { 0x0435, "cyrillic-small-letter-ie" }, { 0x0436, "cyrillic-small-letter-zhe" }, { 0x0437, "cyrillic-small-letter-ze" }, { 0x0438, "cyrillic-small-letter-i" }, { 0x0439, "cyrillic-small-letter-short-i" }, { 0x043a, "cyrillic-small-letter-ka" }, { 0x043b, "cyrillic-small-letter-el" }, { 0x043c, "cyrillic-small-letter-em" }, { 0x043d, "cyrillic-small-letter-en" }, { 0x043e, "cyrillic-small-letter-o" }, { 0x043f, "cyrillic-small-letter-pe" }, { 0x0440, "cyrillic-small-letter-er" }, { 0x0441, "cyrillic-small-letter-es" }, { 0x0442, "cyrillic-small-letter-te" }, { 0x0443, "cyrillic-small-letter-u" }, { 0x0444, "cyrillic-small-letter-ef" }, { 0x0445, "cyrillic-small-letter-ha" }, { 0x0446, "cyrillic-small-letter-tse" }, { 0x0447, "cyrillic-small-letter-che" }, { 0x0448, "cyrillic-small-letter-sha" }, { 0x0449, "cyrillic-small-letter-shcha" }, { 0x044a, "cyrillic-small-letter-hard-sign" }, { 0x044b, "cyrillic-small-letter-yeru" }, { 0x044c, "cyrillic-small-letter-soft-sign" }, { 0x044d, "cyrillic-small-letter-e" }, { 0x044e, "cyrillic-small-letter-yu" }, { 0x044f, "cyrillic-small-letter-ya" }, { 0x0451, "cyrillic-small-letter-io" }, { 0x0452, "cyrillic-small-letter-dje" }, { 0x0453, "cyrillic-small-letter-gje" }, { 0x0454, "cyrillic-small-letter-ukrainian-ie" }, { 0x0455, "cyrillic-small-letter-dze" }, { 0x0456, "cyrillic-small-letter-byelorussian-ukrainian-i" }, { 0x0457, "cyrillic-small-letter-yi" }, { 0x0458, "cyrillic-small-letter-je" }, { 0x0459, "cyrillic-small-letter-lje" }, { 0x045a, "cyrillic-small-letter-nje" }, { 0x045b, "cyrillic-small-letter-tshe" }, { 0x045c, "cyrillic-small-letter-kje" }, { 0x045e, "cyrillic-small-letter-short-u" }, { 0x045f, "cyrillic-small-letter-dzhe" }, { 0x0490, "cyrillic-capital-letter-ghe-with-upturn" }, { 0x0491, "cyrillic-small-letter-ghe-with-upturn" }, { 0x0950, "devanagari-om" }, { 0x1e80, "latin-capital-letter-w-with-grave" }, { 0x1e81, "latin-small-letter-w-with-grave" }, { 0x1e82, "latin-capital-letter-w-with-acute" }, { 0x1e83, "latin-small-letter-w-with-acute" }, { 0x1e84, "latin-capital-letter-w-with-diaeresis" }, { 0x1e85, "latin-small-letter-w-with-diaeresis" }, { 0x1ef2, "latin-capital-letter-y-with-grave" }, { 0x1ef3, "latin-small-letter-y-with-grave" }, { 0x2013, "en-dash" }, { 0x2014, "em-dash" }, { 0x2015, "horizontal-bar" }, { 0x2017, "double-low-line" }, { 0x2018, "left-single-quotation-mark" }, { 0x2019, "right-single-quotation-mark" }, { 0x201a, "single-low-9-quotation-mark" }, { 0x201b, "single-high-reversed-9-quotation-mark" }, { 0x201c, "left-double-quotation-mark" }, { 0x201d, "right-double-quotation-mark" }, { 0x201e, "double-low-9-quotation-mark" }, { 0x2020, "dagger" }, { 0x2021, "double-dagger" }, { 0x2022, "bullet" }, { 0x2026, "horizontal-ellipsis" }, { 0x2030, "per-mille-sign" }, { 0x2032, "prime" }, { 0x2033, "double-prime" }, { 0x2039, "single-left-pointing-angle-quotation-mark" }, { 0x203a, "single-right-pointing-angle-quotation-mark" }, { 0x203c, "double-exclamation-mark" }, { 0x203e, "overline" }, { 0x2044, "fraction-slash" }, { 0x207f, "superscript-latin-small-letter-n" }, { 0x20a3, "french-franc-sign" }, { 0x20a4, "lira-sign" }, { 0x20a7, "peseta-sign" }, { 0x2105, "care-of" }, { 0x2111, "black-letter-capital-i" }, { 0x2113, "script-small-l" }, { 0x2116, "numero-sign" }, { 0x2118, "script-capital-p" }, { 0x211c, "black-letter-capital-r" }, { 0x2122, "trade-mark-sign" }, { 0x2126, "ohm-sign" }, { 0x212e, "estimated-symbol" }, { 0x2135, "alef-symbol" }, { 0x215b, "vulgar-fraction-one-eighth" }, { 0x215c, "vulgar-fraction-three-eighths" }, { 0x215d, "vulgar-fraction-five-eighths" }, { 0x215e, "vulgar-fraction-seven-eighths" }, { 0x2190, "leftwards-arrow" }, { 0x2191, "upwards-arrow" }, { 0x2192, "rightwards-arrow" }, { 0x2193, "downwards-arrow" }, { 0x2194, "left-right-arrow" }, { 0x2195, "up-down-arrow" }, { 0x21a8, "up-down-arrow-with-base" }, { 0x21b5, "downwards-arrow-with-corner-leftwards" }, { 0x21d0, "leftwards-double-arrow" }, { 0x21d1, "upwards-double-arrow" }, { 0x21d2, "rightwards-double-arrow" }, { 0x21d3, "downwards-double-arrow" }, { 0x21d4, "left-right-double-arrow" }, { 0x2200, "for-all" }, { 0x2202, "partial-differential" }, { 0x2203, "there-exists" }, { 0x2205, "empty-set" }, { 0x2206, "increment" }, { 0x2207, "nabla" }, { 0x2208, "element-of" }, { 0x2209, "not-an-element-of" }, { 0x220b, "contains-as-member" }, { 0x220f, "n-ary-product" }, { 0x2211, "n-ary-summation" }, { 0x2212, "minus-sign" }, { 0x2215, "division-slash" }, { 0x2217, "asterisk-operator" }, { 0x2219, "bullet-operator" }, { 0x221a, "square-root" }, { 0x221d, "proportional-to" }, { 0x221e, "infinity" }, { 0x221f, "right-angle" }, { 0x2220, "angle" }, { 0x2227, "logical-and" }, { 0x2228, "logical-or" }, { 0x2229, "intersection" }, { 0x222a, "union" }, { 0x222b, "integral" }, { 0x2234, "therefore" }, { 0x223c, "tilde-operator" }, { 0x2245, "approximately-equal-to" }, { 0x2248, "almost-equal-to" }, { 0x2260, "not-equal-to" }, { 0x2261, "identical-to" }, { 0x2264, "less-than-or-equal-to" }, { 0x2265, "greater-than-or-equal-to" }, { 0x2282, "subset-of" }, { 0x2283, "superset-of" }, { 0x2284, "not-a-subset-of" }, { 0x2286, "subset-of-or-equal-to" }, { 0x2287, "superset-of-or-equal-to" }, { 0x2295, "circled-plus" }, { 0x2297, "circled-times" }, { 0x22a5, "up-tack" }, { 0x22c5, "dot-operator" }, { 0x2302, "house" }, { 0x2310, "reversed-not-sign" }, { 0x2320, "top-half-integral" }, { 0x2321, "bottom-half-integral" }, { 0x2326, "erase-to-the-right" }, { 0x2328, "keyboard" }, { 0x2329, "left-pointing-angle-bracket" }, { 0x232a, "right-pointing-angle-bracket" }, { 0x232b, "erase-to-the-left" }, { 0x2460, "circled-digit-one" }, { 0x2461, "circled-digit-two" }, { 0x2462, "circled-digit-three" }, { 0x2463, "circled-digit-four" }, { 0x2464, "circled-digit-five" }, { 0x2465, "circled-digit-six" }, { 0x2466, "circled-digit-seven" }, { 0x2467, "circled-digit-eight" }, { 0x2468, "circled-digit-nine" }, { 0x2469, "circled-number-ten" }, { 0x2500, "box-drawings-light-horizontal" }, { 0x2502, "box-drawings-light-vertical" }, { 0x250c, "box-drawings-light-down-and-right" }, { 0x2510, "box-drawings-light-down-and-left" }, { 0x2514, "box-drawings-light-up-and-right" }, { 0x2518, "box-drawings-light-up-and-left" }, { 0x251c, "box-drawings-light-vertical-and-right" }, { 0x2524, "box-drawings-light-vertical-and-left" }, { 0x252c, "box-drawings-light-down-and-horizontal" }, { 0x2534, "box-drawings-light-up-and-horizontal" }, { 0x253c, "box-drawings-light-vertical-and-horizontal" }, { 0x2550, "box-drawings-double-horizontal" }, { 0x2551, "box-drawings-double-vertical" }, { 0x2552, "box-drawings-down-single-and-right-double" }, { 0x2553, "box-drawings-down-double-and-right-single" }, { 0x2554, "box-drawings-double-down-and-right" }, { 0x2555, "box-drawings-down-single-and-left-double" }, { 0x2556, "box-drawings-down-double-and-left-single" }, { 0x2557, "box-drawings-double-down-and-left" }, { 0x2558, "box-drawings-up-single-and-right-double" }, { 0x2559, "box-drawings-up-double-and-right-single" }, { 0x255a, "box-drawings-double-up-and-right" }, { 0x255b, "box-drawings-up-single-and-left-double" }, { 0x255c, "box-drawings-up-double-and-left-single" }, { 0x255d, "box-drawings-double-up-and-left" }, { 0x255e, "box-drawings-vertical-single-and-right-double" }, { 0x255f, "box-drawings-vertical-double-and-right-single" }, { 0x2560, "box-drawings-double-vertical-and-right" }, { 0x2561, "box-drawings-vertical-single-and-left-double" }, { 0x2562, "box-drawings-vertical-double-and-left-single" }, { 0x2563, "box-drawings-double-vertical-and-left" }, { 0x2564, "box-drawings-down-single-and-horizontal-double" }, { 0x2565, "box-drawings-down-double-and-horizontal-single" }, { 0x2566, "box-drawings-double-down-and-horizontal" }, { 0x2567, "box-drawings-up-single-and-horizontal-double" }, { 0x2568, "box-drawings-up-double-and-horizontal-single" }, { 0x2569, "box-drawings-double-up-and-horizontal" }, { 0x256a, "box-drawings-vertical-single-and-horizontal-double" }, { 0x256b, "box-drawings-vertical-double-and-horizontal-single" }, { 0x256c, "box-drawings-double-vertical-and-horizontal" }, { 0x2580, "upper-half-block" }, { 0x2584, "lower-half-block" }, { 0x2588, "full-block" }, { 0x258c, "left-half-block" }, { 0x2590, "right-half-block" }, { 0x2591, "light-shade" }, { 0x2592, "medium-shade" }, { 0x2593, "dark-shade" }, { 0x25a0, "black-square" }, { 0x25a1, "white-square" }, { 0x25aa, "black-small-square" }, { 0x25ab, "white-small-square" }, { 0x25ac, "black-rectangle" }, { 0x25b2, "black-up-pointing-triangle" }, { 0x25ba, "black-right-pointing-pointer" }, { 0x25bc, "black-down-pointing-triangle" }, { 0x25c4, "black-left-pointing-pointer" }, { 0x25c6, "black-diamond" }, { 0x25ca, "lozenge" }, { 0x25cb, "white-circle" }, { 0x25cf, "black-circle" }, { 0x25d8, "inverse-bullet" }, { 0x25d9, "inverse-white-circle" }, { 0x25e6, "white-bullet" }, { 0x2605, "black-star" }, { 0x260e, "black-telephone" }, { 0x2611, "ballot-box-with-check" }, { 0x2612, "ballot-box-with-x" }, { 0x261b, "black-right-pointing-index" }, { 0x261c, "white-left-pointing-index" }, { 0x261d, "white-up-pointing-index" }, { 0x261e, "white-right-pointing-index" }, { 0x261f, "white-down-pointing-index" }, { 0x2620, "skull-and-crossbones" }, { 0x262a, "star-and-crescent" }, { 0x262f, "yin-yang" }, { 0x2638, "wheel-of-dharma" }, { 0x2639, "white-frowning-face" }, { 0x263a, "white-smiling-face" }, { 0x263b, "black-smiling-face" }, { 0x263c, "white-sun-with-rays" }, { 0x2640, "female-sign" }, { 0x2642, "male-sign" }, { 0x2648, "aries" }, { 0x2649, "taurus" }, { 0x264a, "gemini" }, { 0x264b, "cancer" }, { 0x264c, "leo" }, { 0x264d, "virgo" }, { 0x264e, "libra" }, { 0x264f, "scorpius" }, { 0x2650, "sagittarius" }, { 0x2651, "capricorn" }, { 0x2652, "aquarius" }, { 0x2653, "pisces" }, { 0x2660, "black-spade-suit" }, { 0x2663, "black-club-suit" }, { 0x2665, "black-heart-suit" }, { 0x2666, "black-diamond-suit" }, { 0x266a, "eighth-note" }, { 0x266b, "beamed-eighth-notes" }, { 0x2701, "upper-blade-scissors" }, { 0x2702, "black-scissors" }, { 0x2703, "lower-blade-scissors" }, { 0x2704, "white-scissors" }, { 0x2706, "telephone-location-sign" }, { 0x2707, "tape-drive" }, { 0x2708, "airplane" }, { 0x2709, "envelope" }, { 0x270c, "victory-hand" }, { 0x270d, "writing-hand" }, { 0x270e, "lower-right-pencil" }, { 0x270f, "pencil" }, { 0x2710, "upper-right-pencil" }, { 0x2711, "white-nib" }, { 0x2712, "black-nib" }, { 0x2713, "check-mark" }, { 0x2714, "heavy-check-mark" }, { 0x2715, "multiplication-x" }, { 0x2716, "heavy-multiplication-x" }, { 0x2717, "ballot-x" }, { 0x2718, "heavy-ballot-x" }, { 0x2719, "outlined-greek-cross" }, { 0x271a, "heavy-greek-cross" }, { 0x271b, "open-centre-cross" }, { 0x271c, "heavy-open-centre-cross" }, { 0x271d, "latin-cross" }, { 0x271e, "shadowed-white-latin-cross" }, { 0x271f, "outlined-latin-cross" }, { 0x2720, "maltese-cross" }, { 0x2721, "star-of-david" }, { 0x2722, "four-teardrop-spoked-asterisk" }, { 0x2723, "four-balloon-spoked-asterisk" }, { 0x2724, "heavy-four-balloon-spoked-asterisk" }, { 0x2725, "four-club-spoked-asterisk" }, { 0x2726, "black-four-pointed-star" }, { 0x2727, "white-four-pointed-star" }, { 0x2729, "stress-outlined-white-star" }, { 0x272a, "circled-white-star" }, { 0x272b, "open-centre-black-star" }, { 0x272c, "black-centre-white-star" }, { 0x272d, "outlined-black-star" }, { 0x272e, "heavy-outlined-black-star" }, { 0x272f, "pinwheel-star" }, { 0x2730, "shadowed-white-star" }, { 0x2731, "heavy-asterisk" }, { 0x2732, "open-centre-asterisk" }, { 0x2733, "eight-spoked-asterisk" }, { 0x2734, "eight-pointed-black-star" }, { 0x2735, "eight-pointed-pinwheel-star" }, { 0x2736, "six-pointed-black-star" }, { 0x2737, "eight-pointed-rectilinear-black-star" }, { 0x2738, "heavy-eight-pointed-rectilinear-black-star" }, { 0x2739, "twelve-pointed-black-star" }, { 0x273a, "sixteen-pointed-asterisk" }, { 0x273b, "teardrop-spoked-asterisk" }, { 0x273c, "open-centre-teardrop-spoked-asterisk" }, { 0x273d, "heavy-teardrop-spoked-asterisk" }, { 0x273e, "six-petalled-black-and-white-florette" }, { 0x273f, "black-florette" }, { 0x2740, "white-florette" }, { 0x2741, "eight-petalled-outlined-black-florette" }, { 0x2742, "circled-open-centre-eight-pointed-star" }, { 0x2743, "heavy-teardrop-spoked-pinwheel-asterisk" }, { 0x2744, "snowflake" }, { 0x2745, "tight-trifoliate-snowflake" }, { 0x2746, "heavy-chevron-snowflake" }, { 0x2747, "sparkle" }, { 0x2748, "heavy-sparkle" }, { 0x2749, "balloon-spoked-asterisk" }, { 0x274a, "eight-teardrop-spoked-propeller-asterisk" }, { 0x274b, "heavy-eight-teardrop-spoked-propeller-asterisk" }, { 0x274d, "shadowed-white-circle" }, { 0x274f, "lower-right-drop-shadowed-white-square" }, { 0x2750, "upper-right-drop-shadowed-white-square" }, { 0x2751, "lower-right-shadowed-white-square" }, { 0x2752, "upper-right-shadowed-white-square" }, { 0x2756, "black-diamond-minus-white-x" }, { 0x2758, "light-vertical-bar" }, { 0x2759, "medium-vertical-bar" }, { 0x275a, "heavy-vertical-bar" }, { 0x275b, "heavy-single-turned-comma-quotation-mark-ornament" }, { 0x275c, "heavy-single-comma-quotation-mark-ornament" }, { 0x275d, "heavy-double-turned-comma-quotation-mark-ornament" }, { 0x275e, "heavy-double-comma-quotation-mark-ornament" }, { 0x2761, "curved-stem-paragraph-sign-ornament" }, { 0x2762, "heavy-exclamation-mark-ornament" }, { 0x2763, "heavy-heart-exclamation-mark-ornament" }, { 0x2764, "heavy-black-heart" }, { 0x2765, "rotated-heavy-black-heart-bullet" }, { 0x2766, "floral-heart" }, { 0x2767, "rotated-floral-heart-bullet" }, { 0x2776, "dingbat-negative-circled-digit-one" }, { 0x2777, "dingbat-negative-circled-digit-two" }, { 0x2778, "dingbat-negative-circled-digit-three" }, { 0x2779, "dingbat-negative-circled-digit-four" }, { 0x277a, "dingbat-negative-circled-digit-five" }, { 0x277b, "dingbat-negative-circled-digit-six" }, { 0x277c, "dingbat-negative-circled-digit-seven" }, { 0x277d, "dingbat-negative-circled-digit-eight" }, { 0x277e, "dingbat-negative-circled-digit-nine" }, { 0x277f, "dingbat-negative-circled-number-ten" }, { 0x2780, "dingbat-circled-sans-serif-digit-one" }, { 0x2781, "dingbat-circled-sans-serif-digit-two" }, { 0x2782, "dingbat-circled-sans-serif-digit-three" }, { 0x2783, "dingbat-circled-sans-serif-digit-four" }, { 0x2784, "dingbat-circled-sans-serif-digit-five" }, { 0x2785, "dingbat-circled-sans-serif-digit-six" }, { 0x2786, "dingbat-circled-sans-serif-digit-seven" }, { 0x2787, "dingbat-circled-sans-serif-digit-eight" }, { 0x2788, "dingbat-circled-sans-serif-digit-nine" }, { 0x2789, "dingbat-circled-sans-serif-number-ten" }, { 0x278a, "dingbat-negative-circled-sans-serif-digit-one" }, { 0x278b, "dingbat-negative-circled-sans-serif-digit-two" }, { 0x278c, "dingbat-negative-circled-sans-serif-digit-three" }, { 0x278d, "dingbat-negative-circled-sans-serif-digit-four" }, { 0x278e, "dingbat-negative-circled-sans-serif-digit-five" }, { 0x278f, "dingbat-negative-circled-sans-serif-digit-six" }, { 0x2790, "dingbat-negative-circled-sans-serif-digit-seven" }, { 0x2791, "dingbat-negative-circled-sans-serif-digit-eight" }, { 0x2792, "dingbat-negative-circled-sans-serif-digit-nine" }, { 0x2793, "dingbat-negative-circled-sans-serif-number-ten" }, { 0x2794, "heavy-wide-headed-rightwards-arrow" }, { 0x2798, "heavy-south-east-arrow" }, { 0x2799, "heavy-rightwards-arrow" }, { 0x279a, "heavy-north-east-arrow" }, { 0x279b, "drafting-point-rightwards-arrow" }, { 0x279c, "heavy-round-tipped-rightwards-arrow" }, { 0x279d, "triangle-headed-rightwards-arrow" }, { 0x279e, "heavy-triangle-headed-rightwards-arrow" }, { 0x279f, "dashed-triangle-headed-rightwards-arrow" }, { 0x27a0, "heavy-dashed-triangle-headed-rightwards-arrow" }, { 0x27a1, "black-rightwards-arrow" }, { 0x27a2, "three-d-top-lighted-rightwards-arrowhead" }, { 0x27a3, "three-d-bottom-lighted-rightwards-arrowhead" }, { 0x27a4, "black-rightwards-arrowhead" }, { 0x27a5, "heavy-black-curved-downwards-and-rightwards-arrow" }, { 0x27a6, "heavy-black-curved-upwards-and-rightwards-arrow" }, { 0x27a7, "squat-black-rightwards-arrow" }, { 0x27a8, "heavy-concave-pointed-black-rightwards-arrow" }, { 0x27a9, "right-shaded-white-rightwards-arrow" }, { 0x27aa, "left-shaded-white-rightwards-arrow" }, { 0x27ab, "back-tilted-shadowed-white-rightwards-arrow" }, { 0x27ac, "front-tilted-shadowed-white-rightwards-arrow" }, { 0x27ad, "heavy-lower-right-shadowed-white-rightwards-arrow" }, { 0x27ae, "heavy-upper-right-shadowed-white-rightwards-arrow" }, { 0x27af, "notched-lower-right-shadowed-white-rightwards-arrow" }, { 0x27b1, "notched-upper-right-shadowed-white-rightwards-arrow" }, { 0x27b2, "circled-heavy-white-rightwards-arrow" }, { 0x27b3, "white-feathered-rightwards-arrow" }, { 0x27b4, "black-feathered-south-east-arrow" }, { 0x27b5, "black-feathered-rightwards-arrow" }, { 0x27b6, "black-feathered-north-east-arrow" }, { 0x27b7, "heavy-black-feathered-south-east-arrow" }, { 0x27b8, "heavy-black-feathered-rightwards-arrow" }, { 0x27b9, "heavy-black-feathered-north-east-arrow" }, { 0x27ba, "teardrop-barbed-rightwards-arrow" }, { 0x27bb, "heavy-teardrop-shanked-rightwards-arrow" }, { 0x27bc, "wedge-tailed-rightwards-arrow" }, { 0x27bd, "heavy-wedge-tailed-rightwards-arrow" }, { 0x27be, "open-outlined-rightwards-arrow" }, { 0xfb01, "latin-small-ligature-fi" }, { 0xfb02, "latin-small-ligature-fl" }, jade-1.2.1/style/Collector.h100444 764 764 12766 6604607714 13510 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef Collector_INCLUDED #define Collector_INCLUDED 1 #include #include "Boolean.h" // A garbage collector. class Collector { public: struct Block; class Object { friend struct Block; friend class Collector; public: bool readOnly() const { return readOnly_; } bool permanent() const { return color_ == permanentColor; } protected: Object() : readOnly_(0) { } virtual ~Object() { } // If we copy an object, don't copy inappropriate info. Object(const Object &obj) { hasSubObjects_ = obj.hasSubObjects_; } // For objects with subobjects, this must be overriden // to call Collector::trace for each direct subobject. virtual void traceSubObjects(Collector &) const { } private: enum Color { someColor, anotherColor, permanentColor }; Object *next() const { return next_; } Object *prev() const { return prev_; } void makeHead() { prev_ = next_ = this; } Color color() const { return Color(color_); } void setColor(Color color) { color_ = color; } void moveAfter(Object *tail); bool hasSubObjects() const { return hasSubObjects_; } void finalize() { this->~Object(); } private: Object *prev_; Object *next_; char color_; char hasFinalizer_; protected: char hasSubObjects_; char readOnly_; }; class DynamicRoot { public: DynamicRoot(Collector &); virtual ~DynamicRoot(); virtual void trace(Collector &) const { } DynamicRoot(const DynamicRoot &); void operator=(const DynamicRoot &); private: DynamicRoot(); void link(const DynamicRoot *); void unlink(); DynamicRoot *next_; DynamicRoot *prev_; friend class Collector; }; class ObjectDynamicRoot : public DynamicRoot { public: ObjectDynamicRoot(Collector &, Object * = 0); ObjectDynamicRoot &operator=(Object *obj); void trace(Collector &) const; operator Object *() const { return obj_; } private: Object *obj_; }; struct Block { Block(Block *, size_t, size_t, Object *); ~Block(); Block *next; Object *firstObj; }; Collector(size_t maxSize); virtual ~Collector(); void *allocateObject(bool hasFinalizer); // This is called only when the constructor throws an exception. void unallocateObject(void *); void trace(const Object *obj); // Permanent objects must not be altered in such a way that // they contain pointers to non-permanent objects. void makePermanent(Object *); // Returns the number of live objects. unsigned long collect(); void makeReadOnly(Object *); bool objectMaybeLive(Object *); protected: virtual void traceStaticRoots() const { } private: Collector(const Collector &); // undefined void operator=(const Collector &); // undefined Object *freePtr_; Object allObjectsList_; // doubly-linked circular list of all objects Object permanentFinalizersList_; Object *lastTraced_; DynamicRoot dynRootList_; // doubly-linked circular list Object::Color currentColor_; Block *blocks_; unsigned long totalObjects_; size_t maxSize_; void makeSpace(); void traceDynamicRoots(); void check(); void makeReadOnly1(Object *); friend class DynamicRoot; friend class Object; }; inline void Collector::Object::moveAfter(Object *tail) { // unlink from old position next_->prev_ = prev_; prev_->next_ = next_; // link in following tail next_ = tail->next_; tail->next_->prev_ = this; prev_ = tail; tail->next_ = this; } inline void *Collector::allocateObject(bool hasFinalizer) { if (freePtr_ == &allObjectsList_) makeSpace(); Object *tem = freePtr_; freePtr_ = freePtr_->next(); tem->setColor(currentColor_); tem->hasFinalizer_ = hasFinalizer; if (hasFinalizer) tem->moveAfter(&allObjectsList_); return tem; } inline void Collector::trace(const Object *obj) { if (obj && obj->color() != currentColor_ && obj->color() != Object::permanentColor) { ((Object *)obj)->setColor(currentColor_); ((Object *)obj)->moveAfter(lastTraced_); lastTraced_ = (Object *)obj; } } inline void Collector::DynamicRoot::link(const DynamicRoot *root) { DynamicRoot *list = (DynamicRoot *)root; // link in just after list prev_ = list; next_ = list->next_; list->next_->prev_ = this; list->next_ = this; } inline void Collector::DynamicRoot::unlink() { next_->prev_ = prev_; prev_->next_ = next_; } inline Collector::DynamicRoot::DynamicRoot(Collector &c) { link(&c.dynRootList_); } inline Collector::DynamicRoot::DynamicRoot() : next_(this), prev_(this) { } inline Collector::DynamicRoot::DynamicRoot(const DynamicRoot &root) { link(&root); } inline void Collector::DynamicRoot::operator=(const DynamicRoot &root) { unlink(); link(&root); } inline Collector::ObjectDynamicRoot::ObjectDynamicRoot(Collector &c, Object *obj) : Collector::DynamicRoot(c), obj_(obj) { } inline Collector::ObjectDynamicRoot & Collector::ObjectDynamicRoot::operator=(Object *obj) { obj_ = obj; return *this; } inline void Collector::ObjectDynamicRoot::trace(Collector &c) const { c.trace(obj_); } inline Collector::Block::~Block() { ::operator delete(firstObj); } inline bool Collector::objectMaybeLive(Object *obj) { return obj->color() == currentColor_ || obj->color() == Object::permanentColor; } inline void Collector::makeReadOnly(Object *obj) { if (!obj->hasSubObjects()) obj->readOnly_ = 1; else if (!obj->readOnly()) makeReadOnly1(obj); } #endif /* not Collector_INCLUDED */ jade-1.2.1/style/DssslApp.h100444 764 764 3677 6606574462 13301 0ustar jjcjjc// Copyright (c) 1996, 1997 James Clark // See the file copying.txt for copying permission. #ifndef DssslApp_INCLUDED #define DssslApp_INCLUDED 1 #include "GroveApp.h" #include "FOTBuilder.h" #include "GroveManager.h" #include "dsssl_ns.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class STYLE_API DssslApp : public GroveApp, public GroveManager { public: DssslApp(int unitsPerInch); virtual FOTBuilder *makeFOTBuilder(const FOTBuilder::Extension *&) = 0; int processSysid(const StringC &); bool load(const StringC &sysid, const Vector &active, const NodePtr &parent, NodePtr &rootNode, const Vector &architecture); bool readEntity(const StringC &, StringC &); protected: void processOption(AppChar opt, const AppChar *arg); int init(int argc, AppChar **argv); int unitsPerInch_; StringC defaultOutputBasename_; private: void processGrove(); int generateEvents(ErrorCountEventHandler *eceh); Boolean getDssslSpecFromGrove(); Boolean getDssslSpecFromPi(const Char *s, size_t n, const Location &loc); static void splitOffId(StringC &, StringC &); Boolean handleSimplePi(const Char *, size_t, const Location &); Boolean handleAttlistPi(const Char *, size_t, const Location &); static void skipS(const Char *&s, size_t &n); static Boolean isS(Char c); static Boolean matchCi(const StringC &s, const char *key); static Boolean matchCi(const Char *s, size_t n, const char *key); static Boolean getAttribute(const Char *&s, size_t &n, StringC &name, StringC &value); Boolean initSpecParser(); Boolean dssslSpecOption_; StringC dssslSpecSysid_; // system ID of doc StringC dssslSpecId_; // unique ID in doc // Variables to be defined as true Vector defineVars_; SgmlParser specParser_; HashTable groveTable_; StringC rootSystemId_; bool debugMode_; bool dsssl2_; }; #ifdef DSSSL_NAMESPACE } #endif #endif /* not DssslApp_INCLUDED */ jade-1.2.1/style/DssslSpecEventHandler.h100444 764 764 12014 6606574462 15754 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef DssslSpecEventHandler_INCLUDED #define DssslSpecEventHandler_INCLUDED 1 #include "ErrorCountEventHandler.h" #include "ArcEngine.h" #include "Message.h" #include "Text.h" #include "Owner.h" #include "Boolean.h" #include "InputSource.h" #include "Vector.h" #include "NCVector.h" #include "IList.h" #include "IListIter.h" #include "StringC.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class DssslSpecEventHandler : private ErrorCountEventHandler, private ArcDirector { public: class BodyElement : public Link { public: virtual ~BodyElement(); virtual void makeInputSource(DssslSpecEventHandler &, Owner &) = 0; }; class ImmediateBodyElement : public BodyElement { public: ImmediateBodyElement(Text &); void makeInputSource(DssslSpecEventHandler &, Owner &); private: Text text_; }; class EntityBodyElement : public BodyElement { public: EntityBodyElement(const ConstPtr &); void makeInputSource(DssslSpecEventHandler &, Owner &); private: ConstPtr entity_; }; class SpecPart; class Doc; class Part; class PartHeader : public Link { public: PartHeader(Doc *, const StringC &id); const StringC &id() const; Part *resolve(DssslSpecEventHandler &); void setPart(SpecPart *); void setRefLoc(const Location &); private: Doc *doc_; StringC id_; // Location of first reference Location refLoc_; Owner specPart_; }; class SpecPart { public: virtual ~SpecPart(); virtual Part *resolve(DssslSpecEventHandler &) = 0; }; class ExternalPart : public SpecPart { public: ExternalPart(PartHeader *); Part *resolve(DssslSpecEventHandler &); private: PartHeader *header_; }; class ExternalFirstPart : public SpecPart { public: ExternalFirstPart(Doc *); Part *resolve(DssslSpecEventHandler &); private: Doc *doc_; }; class Part : public SpecPart { public: typedef IListIter Iter; Part(); Iter iter(); const Vector &use() const; void addUse(PartHeader *); void append(BodyElement *); bool setMark(bool = 1); private: Part *resolve(DssslSpecEventHandler &); IList bodyElements_; Vector use_; bool mark_; }; class Doc : public Link { public: Doc(); Doc(const StringC &sysid); void setLocation(const Location &); PartHeader *refPart(const StringC &); PartHeader *refPart(const StringC &, const Location &refLoc); Part *resolveFirstPart(DssslSpecEventHandler &); void load(DssslSpecEventHandler &); const StringC &sysid() const; private: bool loaded_; StringC sysid_; IList headers_; Location loc_; }; DssslSpecEventHandler(Messenger &); void load(SgmlParser &specParser, const CharsetInfo &, const StringC &id, Vector &parts); void externalSpecificationStart(const StartElementEvent &); void externalSpecificationEnd(const EndElementEvent &); void styleSpecificationStart(const StartElementEvent &); void styleSpecificationEnd(const EndElementEvent &); void styleSpecificationBodyStart(const StartElementEvent &); void styleSpecificationBodyEnd(const EndElementEvent &); private: Vector &parts(); void startElement(StartElementEvent *); void endElement(EndElementEvent *); void data(DataEvent *); void message(MessageEvent *); void endProlog(EndPrologEvent *); EventHandler *arcEventHandler(const Notation *, const Vector &, const SubstTable *); void loadDoc(SgmlParser &, Doc &); void resolveParts(Part *, Vector &); Doc *findDoc(const StringC &); const StringC *attributeString(const StartElementEvent &, const char *); const Text *attributeText(const StartElementEvent &, const char *); ConstPtr attributeEntity(const StartElementEvent &, const char *); Messenger *mgr_; bool gotArc_; bool gatheringBody_; Part *currentPart_; Text currentBody_; Doc *currentDoc_; IList docs_; SgmlParser *parser_; const CharsetInfo *charset_; friend class Doc; friend class EntityBodyElement; friend class PartHeader; }; inline const StringC &DssslSpecEventHandler::PartHeader::id() const { return id_; } inline void DssslSpecEventHandler::PartHeader::setPart(SpecPart *part) { specPart_ = part; } inline void DssslSpecEventHandler::Part::addUse(PartHeader *header) { use_.push_back(header); } inline const Vector & DssslSpecEventHandler::Part::use() const { return use_; } inline const StringC &DssslSpecEventHandler::Doc::sysid() const { return sysid_; } inline DssslSpecEventHandler::Part::Iter DssslSpecEventHandler::Part::iter() { return Iter(bodyElements_); } inline bool DssslSpecEventHandler::Part::setMark(bool b) { bool tem = mark_; mark_ = b; return tem; } #ifdef DSSSL_NAMESPACE } #endif #endif /* not DssslSpecEventHandler_INCLUDED */ jade-1.2.1/style/dsssl_ns.h100444 764 764 1554 6606574462 13370 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef dsssl_ns_INCLUDED #define dsssl_ns_INCLUDED 1 #ifdef DSSSL_NAMESPACE #ifdef SP_NAMESPACE namespace SP_NAMESPACE { } #endif #ifdef GROVE_NAMESPACE namespace GROVE_NAMESPACE { } #endif namespace DSSSL_NAMESPACE { #ifdef SP_NAMESPACE using namespace SP_NAMESPACE; #endif #ifdef GROVE_NAMESPACE using namespace GROVE_NAMESPACE; #endif #if _MSC_VER >= 1100 /* This works around a bug with using directives in Visual C++ 6.0. I don't know if it also works in 5.0 */ const int work_around_bug_in_visual_c_6 = 0; } namespace DSSSL_NAMESPACE { #ifdef SP_NAMESPACE using namespace SP_NAMESPACE; #endif #ifdef GROVE_NAMESPACE using namespace GROVE_NAMESPACE; #endif #endif /* _MSC_VER >= 1100 */ } #endif /* DSSSL_NAMESPACE */ #endif /* not dsssl_ns_INCLUDED */ jade-1.2.1/style/ELObj.h100444 764 764 34475 6606574462 12523 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef ELObj_INCLUDED #define ELObj_INCLUDED 1 #include "types.h" #include "Collector.h" #include "OutputCharStream.h" #include "Boolean.h" #include "Location.h" #include "Node.h" #include "FOTBuilder.h" #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class Interpreter; class EvalContext; class Unit; class PairObj; class FunctionObj; class SymbolObj; class KeywordObj; class BoxObj; class StringObj; class SosofoObj; class ColorObj; class ColorSpaceObj; class StyleObj; class AddressObj; class NodeListObj; class NamedNodeListObj; class Identifier; class LengthSpec; class DisplaySpaceObj; class InlineSpaceObj; class GlyphSubstTableObj; class VectorObj; class ELObj : public Collector::Object { public: ELObj(); void *operator new(size_t, Collector &c) { return c.allocateObject(0); } #ifdef SP_HAVE_PLACEMENT_OPERATOR_DELETE private: void operator delete(void *p) { } public: void operator delete(void *p, Collector &c) { c.unallocateObject(p); } #endif virtual bool isNil() const; virtual bool isList() const; virtual bool isTrue() const; virtual PairObj *asPair(); virtual SymbolObj *asSymbol(); virtual KeywordObj *asKeyword(); virtual FunctionObj *asFunction(); virtual SosofoObj *asSosofo(); virtual ColorObj *asColor(); virtual ColorSpaceObj *asColorSpace(); virtual StyleObj *asStyle(); virtual AddressObj *asAddress(); virtual DisplaySpaceObj *asDisplaySpace(); virtual InlineSpaceObj *asInlineSpace(); virtual GlyphSubstTableObj *asGlyphSubstTable(); virtual NodeListObj *asNodeList(); virtual NamedNodeListObj *asNamedNodeList(); virtual StringObj *convertToString(); // either symbol or string virtual BoxObj *asBox(); virtual VectorObj *asVector(); virtual bool charValue(Char &); virtual bool stringData(const Char *&, size_t &); virtual void print(Interpreter &, OutputCharStream &); virtual void print(Interpreter &, OutputCharStream &, unsigned); virtual bool exactIntegerValue(long &); virtual bool realValue(double &); virtual bool inexactRealValue(double &); virtual bool lengthValue(long &); virtual const FOTBuilder::GlyphId *glyphId() const; virtual const LengthSpec *lengthSpec() const; enum QuantityType { noQuantity, longQuantity, doubleQuantity }; virtual QuantityType quantityValue(long &, double &, int &); virtual ELObj *resolveQuantities(bool force, Interpreter &, const Location &); virtual bool optSingletonNodeList(EvalContext &, Interpreter &, NodePtr &); static bool equal(ELObj &, ELObj &); // Note that in DSSSL2 unlike Scheme eqv? for lists and strings is the same // as equal?. Only for vectors do they differ. static bool eqv(ELObj &, ELObj &); protected: // This checks for equality of *distinct* objects. virtual bool isEqual(ELObj &); // This checks for equivalence of *distinct* objects. virtual bool isEquiv(ELObj &); }; class ErrorObj : public ELObj { public: private: ErrorObj(); friend class Interpreter; }; class UnspecifiedObj : public ELObj { public: private: UnspecifiedObj(); friend class Interpreter; }; class NilObj : public ELObj { public: bool isNil() const; bool isList() const; void print(Interpreter &, OutputCharStream &); private: NilObj(); friend class Interpreter; }; class TrueObj : public ELObj { public: void print(Interpreter &, OutputCharStream &); private: TrueObj(); friend class Interpreter; }; class FalseObj : public ELObj { public: void print(Interpreter &, OutputCharStream &); bool isTrue() const; private: FalseObj(); friend class Interpreter; }; class StringObj; class CharObj; class SymbolObj : public ELObj { public: void print(Interpreter &, OutputCharStream &); SymbolObj *asSymbol(); StringObj *convertToString(); StringObj *name() const; void traceSubObjects(Collector &) const; FOTBuilder::Symbol cValue() const; void setCValue(FOTBuilder::Symbol); static const StringC &key(const SymbolObj &); private: SymbolObj(StringObj *); StringObj *name_; FOTBuilder::Symbol cValue_; friend class Interpreter; }; class Identifier; class KeywordObj : public ELObj { public: void print(Interpreter &, OutputCharStream &); KeywordObj *asKeyword(); const Identifier *identifier() const; bool isEqual(ELObj &); private: KeywordObj(const Identifier *); const Identifier *ident_; friend class Interpreter; }; class PairObj : public ELObj { public: PairObj(ELObj *car, ELObj *cdr); ELObj *car(); ELObj *cdr(); void setCar(ELObj *); void setCdr(ELObj *); PairObj *asPair(); bool isList() const; void print(Interpreter &, OutputCharStream &); void traceSubObjects(Collector &) const; ELObj *resolveQuantities(bool force, Interpreter &, const Location &); bool isEqual(ELObj &); bool isEquiv(ELObj &); private: ELObj *car_; ELObj *cdr_; }; class VectorObj : public ELObj, public Vector { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } VectorObj(); VectorObj(Vector &v); void traceSubObjects(Collector &) const; VectorObj *asVector(); bool isEqual(ELObj &); bool isEquiv(ELObj &); void print(Interpreter &, OutputCharStream &); ELObj *resolveQuantities(bool force, Interpreter &, const Location &); }; class CharObj : public ELObj { public: Char ch(); void print(Interpreter &, OutputCharStream &); void display(Interpreter &, OutputCharStream &) const; bool isEqual(ELObj &); bool charValue(Char &); private: CharObj(Char); Char ch_; friend class Interpreter; }; class StringObj : public ELObj, public StringC { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } StringObj(); StringObj(const StringC &str); StringObj(const Char *, size_t); void print(Interpreter &, OutputCharStream &); StringObj *convertToString(); bool stringData(const Char *&, size_t &); bool isEqual(ELObj &); }; class IntegerObj : public ELObj { public: void print(Interpreter &, OutputCharStream &); void print(Interpreter &, OutputCharStream &, unsigned); bool exactIntegerValue(long &); bool realValue(double &); QuantityType quantityValue(long &, double &, int &); bool isEqual(ELObj &); private: friend class Interpreter; IntegerObj(); IntegerObj(long); long n_; }; class RealObj : public ELObj { public: RealObj(double); bool realValue(double &); bool inexactRealValue(double &); QuantityType quantityValue(long &, double &, int &); bool isEqual(ELObj &); void print(Interpreter &, OutputCharStream &); private: double n_; }; class LengthObj : public ELObj { public: LengthObj(long units); bool lengthValue(long &); QuantityType quantityValue(long &, double &, int &); void print(Interpreter &, OutputCharStream &); bool isEqual(ELObj &); private: long n_; }; class QuantityObj : public ELObj { public: QuantityObj(double, int); QuantityType quantityValue(long &, double &, int &); void print(Interpreter &, OutputCharStream &); bool isEqual(ELObj &); bool realValue(double &); bool inexactRealValue(double &); private: // This is in units per inch. double val_; int dim_; }; class LengthSpec { public: enum Unknown { displaySize = 1, tableUnit }; LengthSpec(); LengthSpec(double); LengthSpec(Unknown, double); void operator+=(const LengthSpec &); void operator+=(double d) { val_[0] += d; } void operator-=(const LengthSpec &); void operator-=(double d) { val_[0] -= d; } void operator*=(double); void operator/=(double); bool convert(FOTBuilder::LengthSpec &) const; bool convert(FOTBuilder::TableLengthSpec &) const; private: enum { nVals = 3 }; double val_[nVals]; }; class LengthSpecObj : public ELObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } LengthSpecObj(const LengthSpec &); const LengthSpec *lengthSpec() const; private: Owner lengthSpec_; }; class DisplaySpaceObj : public ELObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } DisplaySpaceObj(const FOTBuilder::DisplaySpace &); const FOTBuilder::DisplaySpace &displaySpace() const; DisplaySpaceObj *asDisplaySpace(); private: Owner displaySpace_; }; class InlineSpaceObj : public ELObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } InlineSpaceObj(const FOTBuilder::InlineSpace &); const FOTBuilder::InlineSpace &inlineSpace() const; InlineSpaceObj *asInlineSpace(); private: Owner inlineSpace_; }; class UnresolvedQuantityObj : public ELObj { public: UnresolvedQuantityObj(double, Unit *, int); ELObj *resolveQuantities(bool force, Interpreter &, const Location &); private: double val_; Unit *unit_; int unitExp_; }; class UnresolvedLengthObj : public ELObj { public: UnresolvedLengthObj(long val, int valExp, Unit *); ELObj *resolveQuantities(bool force, Interpreter &, const Location &); private: long val_; Unit *unit_; int valExp_; }; class GlyphIdObj : public ELObj { public: GlyphIdObj(const FOTBuilder::GlyphId &); const FOTBuilder::GlyphId *glyphId() const; bool isEqual(ELObj &); private: FOTBuilder::GlyphId glyphId_; }; class GlyphSubstTableObj : public ELObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } GlyphSubstTableObj(const ConstPtr &); GlyphSubstTableObj *asGlyphSubstTable(); const ConstPtr &glyphSubstTable() const; private: ConstPtr table_; }; class AddressObj : public ELObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } AddressObj(FOTBuilder::Address::Type, const NodePtr & = NodePtr(), const StringC & = StringC(), const StringC & = StringC(), const StringC & = StringC()); AddressObj *asAddress(); const FOTBuilder::Address &address() const; private: Owner address_; }; class NodeListObj : public ELObj { public: NodeListObj *asNodeList(); bool optSingletonNodeList(EvalContext &, Interpreter &, NodePtr &); virtual NodePtr nodeListFirst(EvalContext &, Interpreter &) = 0; virtual NodeListObj *nodeListRest(EvalContext &, Interpreter &) = 0; virtual NodeListObj *nodeListNoOrder(Collector &); // If this node contains all the node in the chunk of the first node, then // this *may* return the node list containing the nodes following the chunk; // If so chunk, will be set to 1. Otherwise return nodeListRest() and set // chunk to 0. If charChunk() returns a string of length n, then // the chunk of the node is the node together with the n - 1 following siblings; // otherwise the chunk of the node is the node itself. virtual NodeListObj *nodeListChunkRest(EvalContext &, Interpreter &, bool &chunk); virtual NodePtr nodeListRef(long, EvalContext &, Interpreter &); virtual NodeListObj *nodeListReverse(EvalContext &, Interpreter &); virtual long nodeListLength(EvalContext &, Interpreter &); virtual bool suppressError(); }; class NamedNodeListObj : public NodeListObj { public: NamedNodeListObj *asNamedNodeList(); virtual NodePtr namedNode(const Char *, size_t) = 0; virtual bool nodeName(const NodePtr &, GroveString &) = 0; virtual size_t normalize(Char *, size_t) = 0; }; class NodePtrNodeListObj : public NodeListObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } NodePtrNodeListObj(); NodePtrNodeListObj(const NodePtr &); NodePtr nodeListFirst(EvalContext &, Interpreter &); NodeListObj *nodeListRest(EvalContext &, Interpreter &); bool optSingletonNodeList(EvalContext &, Interpreter &, NodePtr &); bool chunkComplete(); private: // Null for no node. NodePtr node_; }; class NodeListPtrNodeListObj : public NodeListObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } NodeListPtrNodeListObj(const NodeListPtr &); NodePtr nodeListFirst(EvalContext &, Interpreter &); NodeListObj *nodeListRest(EvalContext &, Interpreter &); NodeListObj *nodeListChunkRest(EvalContext &, Interpreter &, bool &); NodePtr nodeListRef(long, EvalContext &, Interpreter &); private: // never null NodeListPtr nodeList_; }; class NamedNodeListPtrNodeListObj : public NamedNodeListObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } NamedNodeListPtrNodeListObj(const NamedNodeListPtr &); NodePtr nodeListFirst(EvalContext &, Interpreter &); NodeListObj *nodeListRest(EvalContext &, Interpreter &); NodePtr namedNode(const Char *, size_t); bool nodeName(const NodePtr &, GroveString &); size_t normalize(Char *, size_t); NodeListObj *nodeListNoOrder(Collector &); private: NamedNodeListPtr namedNodeList_; // cached node list, null if not yet computed NodeListPtr nodeList_; }; class PairNodeListObj : public NodeListObj { public: PairNodeListObj(NodeListObj *, NodeListObj *); NodePtr nodeListFirst(EvalContext &, Interpreter &); NodeListObj *nodeListRest(EvalContext &, Interpreter &); NodeListObj *nodeListChunkRest(EvalContext &, Interpreter &, bool &); void traceSubObjects(Collector &) const; private: NodeListObj *head_; // may be null NodeListObj *tail_; }; inline bool ELObj::equal(ELObj &obj1, ELObj &obj2) { return &obj1 == &obj2 || obj1.isEqual(obj2); } inline bool ELObj::eqv(ELObj &obj1, ELObj &obj2) { return &obj1 == &obj2 || obj1.isEquiv(obj2); } inline ELObj *PairObj::car() { return car_; } inline ELObj *PairObj::cdr() { return cdr_; } inline void PairObj::setCar(ELObj *car) { car_ = car; } inline void PairObj::setCdr(ELObj *cdr) { cdr_ = cdr; } inline StringObj *SymbolObj::name() const { return name_; } inline FOTBuilder::Symbol SymbolObj::cValue() const { return cValue_; } inline void SymbolObj::setCValue(FOTBuilder::Symbol sym) { cValue_ = sym; } inline Char CharObj::ch() { return ch_; } inline const StringC &SymbolObj::key(const SymbolObj &sym) { return *sym.name(); } inline const Identifier *KeywordObj::identifier() const { return ident_; } inline const FOTBuilder::Address &AddressObj::address() const { return *address_; } inline const ConstPtr & GlyphSubstTableObj::glyphSubstTable() const { return table_; } #ifdef DSSSL_NAMESPACE } #endif #endif /* not ELObj_INCLUDED */ jade-1.2.1/style/ELObjMessageArg.h100444 764 764 774 6606574462 14415 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef ELObjMessageArg_INCLUDED #define ELObjMessageArg_INCLUDED 1 #include "ELObj.h" #include "MessageArg.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class ELObjMessageArg : public StringMessageArg { public: ELObjMessageArg(ELObj *, Interpreter &); private: static StringC convert(ELObj *obj, Interpreter &interp); }; #ifdef DSSSL_NAMESPACE } #endif #endif /* not ELObjMessageArg_INCLUDED */ jade-1.2.1/style/EvalContext.h100444 764 764 2746 6606574462 14000 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef EvalContext_INCLUDED #define EvalContext_INCLUDED 1 #include "Boolean.h" #include "Node.h" #include "Vector.h" #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class StyleStack; class StyleObj; class ProcessingMode; class EvalContext { public: class CurrentNodeSetter { public: CurrentNodeSetter(const NodePtr &, const ProcessingMode *, EvalContext &); ~CurrentNodeSetter(); private: EvalContext *ec_; NodePtr saveCurrentNode_; const ProcessingMode *saveProcessingMode_; }; EvalContext(); StyleStack *styleStack; unsigned specLevel; // level of the specification flow object in the style stack StyleObj *overridingStyle; Vector *actualDependencies; NodePtr currentNode; const ProcessingMode *processingMode; }; inline EvalContext::EvalContext() : styleStack(0), overridingStyle(0), actualDependencies(0), processingMode(0) { } inline EvalContext::CurrentNodeSetter::CurrentNodeSetter(const NodePtr &node, const ProcessingMode *mode, EvalContext &ec) : ec_(&ec), saveCurrentNode_(ec.currentNode), saveProcessingMode_(ec.processingMode) { ec.currentNode = node; ec.processingMode = mode; } inline EvalContext::CurrentNodeSetter::~CurrentNodeSetter() { ec_->currentNode = saveCurrentNode_; ec_->processingMode = saveProcessingMode_; } #ifdef DSSSL_NAMESPACE } #endif #endif /* not EvalContext_INCLUDED */ jade-1.2.1/style/Expression.h100444 764 764 27025 6606574462 13720 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef Expression_INCLUDED #define Expression_INCLUDED 1 #include "ELObj.h" #include "Owner.h" #include "Vector.h" #include "NCVector.h" #include "Resource.h" #include "Ptr.h" #include "Insn.h" #include "Named.h" #include "Location.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class Interpreter; class Identifier; struct BoundVar { const Identifier *ident; enum { usedFlag = 01, assignedFlag = 02, sharedFlag = 04, uninitFlag = 010, boxedFlags = assignedFlag|sharedFlag }; static bool flagsBoxed(unsigned f) { return (f & boxedFlags) == boxedFlags; } bool boxed() const { return flagsBoxed(flags); } unsigned flags; unsigned reboundCount; }; class BoundVarList : public Vector { public: BoundVarList() { } BoundVarList(const Vector &); BoundVarList(const Vector &, size_t, unsigned flags = 0); void append(const Identifier *, unsigned flags); void mark(const Identifier *, unsigned flags); void removeUnused(); void remove(const Vector &); void rebind(const Vector &); void unbind(const Vector &); BoundVar *find(const Identifier *); }; class Environment { public: Environment(); Environment(const BoundVarList &frameVars, const BoundVarList &closureVars); void boundVars(BoundVarList &) const; bool lookup(const Identifier *var, bool &isFrame, int &index, unsigned &flags) const; void augmentFrame(const BoundVarList &, int stackPos); private: struct FrameVarList : public Resource { int stackPos; const BoundVarList *vars; ConstPtr next; }; ConstPtr frameVarList_; const BoundVarList *closureVars_; }; class Expression { public: Expression(const Location &); virtual ~Expression() { } virtual InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &) = 0; static InsnPtr optimizeCompile(Owner &, Interpreter &, const Environment &, int, const InsnPtr &); virtual void markBoundVars(BoundVarList &vars, bool); virtual void optimize(Interpreter &, const Environment &, Owner &); virtual ELObj *constantValue() const; virtual bool canEval(bool maybeCall) const = 0; virtual const Identifier *keyword() const; const Location &location() const; protected: static InsnPtr compilePushVars(Interpreter &interp, const Environment &env, int stackPos, const BoundVarList &vars, size_t varIndex, const InsnPtr &next); private: Location loc_; }; class ConstantExpression : public Expression { public: ConstantExpression(ELObj *, const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void optimize(Interpreter &, const Environment &, Owner &); bool canEval(bool maybeCall) const; const Identifier *keyword() const; private: ELObj *obj_; // must be permanent }; class ResolvedConstantExpression : public Expression { public: ResolvedConstantExpression(ELObj *, const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); bool canEval(bool maybeCall) const; ELObj *constantValue() const; private: ELObj *obj_; }; class CallExpression : public Expression { public: CallExpression(Owner &, NCVector > &, const Location &loc); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void markBoundVars(BoundVarList &vars, bool); int nArgs(); bool canEval(bool maybeCall) const; private: Owner op_; NCVector > args_; }; class VariableExpression : public Expression { public: VariableExpression(const Identifier *, const Location &loc); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void optimize(Interpreter &, const Environment &, Owner &); void markBoundVars(BoundVarList &vars, bool); bool canEval(bool maybeCall) const; private: const Identifier *ident_; bool isTop_; }; class IfExpression : public Expression { public: IfExpression(Owner &, Owner &, Owner &, const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void markBoundVars(BoundVarList &vars, bool); bool canEval(bool maybeCall) const; void optimize(Interpreter &, const Environment &, Owner &); private: Owner test_; Owner consequent_; Owner alternate_; }; class OrExpression : public Expression { public: OrExpression(Owner &, Owner &, const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void markBoundVars(BoundVarList &vars, bool); bool canEval(bool maybeCall) const; void optimize(Interpreter &, const Environment &, Owner &); private: Owner test1_; Owner test2_; }; class CondFailExpression : public Expression { public: CondFailExpression(const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); bool canEval(bool maybeCall) const; }; class CaseExpression : public Expression { public: struct Case { Vector datums; Owner expr; }; CaseExpression(Owner &, NCVector &, Owner &, const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void markBoundVars(BoundVarList &vars, bool); bool canEval(bool maybeCall) const; void optimize(Interpreter &, const Environment &, Owner &); private: Owner key_; NCVector cases_; Vector nResolved_; Owner else_; }; class LambdaExpression : public Expression { public: LambdaExpression(Vector &vars, NCVector > &inits, int nOptional, bool hasRest, int nKey, Owner &body, const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void markBoundVars(BoundVarList &vars, bool); bool canEval(bool maybeCall) const; private: Vector formals_; NCVector > inits_; Signature sig_; Owner body_; }; class LetExpression : public Expression { public: LetExpression(Vector &vars, NCVector > &inits, Owner &body, const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void markBoundVars(BoundVarList &vars, bool); bool canEval(bool maybeCall) const; protected: InsnPtr compileInits(Interpreter &interp, const Environment &env, const BoundVarList &initVars, size_t initIndex, int stackPos, const InsnPtr &next); Vector vars_; NCVector > inits_; Owner body_; }; class LetStarExpression : public LetExpression { public: LetStarExpression(Vector &vars, NCVector > &inits, Owner &body, const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); private: InsnPtr compileInits(Interpreter &interp, const Environment &env, const BoundVarList &initVars, size_t initIndex, int stackPos, const InsnPtr &next); }; class LetrecExpression : public Expression { public: LetrecExpression(Vector &vars, NCVector > &inits, Owner &body, const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void markBoundVars(BoundVarList &vars, bool); bool canEval(bool maybeCall) const; private: InsnPtr compileInits(Interpreter &interp, const Environment &env, size_t initIndex, int stackPos, const InsnPtr &next); Vector vars_; NCVector > inits_; Owner body_; }; class QuasiquoteExpression : public Expression { public: enum Type { listType, improperType, vectorType }; QuasiquoteExpression(NCVector > &, Vector &spliced, Type type, const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void markBoundVars(BoundVarList &vars, bool); bool canEval(bool maybeCall) const; void optimize(Interpreter &, const Environment &, Owner &); private: NCVector > members_; Vector spliced_; Type type_; }; class SequenceExpression : public Expression { public: SequenceExpression(NCVector > &, const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void markBoundVars(BoundVarList &vars, bool); bool canEval(bool maybeCall) const; void optimize(Interpreter &, const Environment &, Owner &); private: NCVector > sequence_; }; class AssignmentExpression : public Expression { public: AssignmentExpression(const Identifier *, Owner &, const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void markBoundVars(BoundVarList &vars, bool); bool canEval(bool maybeCall) const; private: const Identifier *var_; Owner value_; }; class ProcessingMode; class WithModeExpression : public Expression { public: WithModeExpression(const ProcessingMode *, Owner &, const Location &); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void markBoundVars(BoundVarList &vars, bool); bool canEval(bool maybeCall) const; private: const ProcessingMode *mode_; Owner expr_; }; class StyleExpression : public Expression { public: StyleExpression(Vector &, NCVector > &, const Location &loc); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); void markBoundVars(BoundVarList &vars, bool); bool canEval(bool maybeCall) const; protected: virtual void unknownStyleKeyword(const Identifier *ident, Interpreter &interp, const Location &loc) const; virtual bool maybeStyleKeyword(const Identifier *ident) const; Vector keys_; NCVector > exprs_; }; class FlowObj; class MakeExpression : public StyleExpression { public: MakeExpression(const Identifier *, Vector &, NCVector > &, const Location &loc); InsnPtr compile(Interpreter &, const Environment &, int, const InsnPtr &); private: InsnPtr compileNonInheritedCs(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next); FlowObj *applyConstNonInheritedCs(FlowObj *, Interpreter &, const Environment &); void unknownStyleKeyword(const Identifier *ident, Interpreter &interp, const Location &loc) const; bool maybeStyleKeyword(const Identifier *ident) const; const Identifier *foc_; }; inline const Location &Expression::location() const { return loc_; } inline InsnPtr Expression::optimizeCompile(Owner &expr, Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { expr->optimize(interp, env, expr); return expr->compile(interp, env, stackPos, next); } #ifdef DSSSL_NAMESPACE } #endif #endif /* not Expression_INCLUDED */ jade-1.2.1/style/FOTBuilder.h100444 764 764 130164 6604607716 13534 0ustar jjcjjc// Copyright (c) 1996, 1997 James Clark // See the file copying.txt for copying permission. #ifndef FOTBuilder_INCLUDED #define FOTBuilder_INCLUDED 1 #include "types.h" #include "StringC.h" #include "Boolean.h" #include "Node.h" #include "Link.h" #include "IList.h" #include "Vector.h" #include "Resource.h" #include "Ptr.h" #include "Owner.h" #include #include #include "dsssl_ns.h" // This is a work around for a bug in Sun C++ 4.1. // The class local typedef of PublicId will cause it to reject a // subsequent declaration of the class PublicId, but it's happy // if it sees the class first. #ifdef __SUNPRO_CC #include "ExternalId.h" #endif #ifdef SP_USE_DLL #ifdef BUILD_LIBSTYLE #define STYLE_API SP_DLLEXPORT #else #define STYLE_API SP_DLLIMPORT #endif #else /* not SP_USE_DLL */ #define STYLE_API /* as nothing */ #endif /* not SP_USE_DLL */ #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class SaveFOTBuilder; class STYLE_API FOTBuilder { public: enum Symbol { symbolFalse, symbolTrue, symbolNotApplicable, // These are guaranteed to be in increasing order of weight, // and expansion. symbolUltraCondensed, symbolExtraCondensed, symbolCondensed, symbolSemiCondensed, symbolUltraLight, symbolExtraLight, symbolLight, symbolSemiLight, symbolMedium, symbolSemiExpanded, symbolExpanded, symbolExtraExpanded, symbolUltraExpanded, symbolSemiBold, symbolBold, symbolExtraBold, symbolUltraBold, symbolUpright, symbolOblique, symbolBackSlantedOblique, symbolItalic, symbolBackSlantedItalic, symbolStart, symbolEnd, symbolCenter, symbolJustify, symbolSpreadInside, symbolSpreadOutside, symbolPageInside, symbolPageOutside, symbolWrap, symbolAsis, symbolAsisWrap, symbolAsisTruncate, symbolNone, symbolBefore, symbolThrough, symbolAfter, symbolTopToBottom, symbolLeftToRight, symbolBottomToTop, symbolRightToLeft, symbolInside, symbolOutside, symbolHorizontal, symbolVertical, symbolEscapement, symbolLineProgression, symbolMath, symbolOrdinary, symbolOperator, symbolBinary, symbolRelation, symbolOpening, symbolClosing, symbolPunctuation, symbolInner, symbolSpace, symbolPage, symbolPageRegion, symbolColumnSet, symbolColumn, symbolMax, symbolMaxUniform, symbolMiter, symbolRound, symbolBevel, symbolButt, symbolSquare, symbolLoose, symbolNormal, symbolKern, symbolTight, symbolTouch, symbolPreserve, symbolCollapse, symbolIgnore, symbolRelative, symbolDisplay, symbolInline, symbolBorder, symbolBackground, symbolBoth, symbolBase, symbolFont, symbolTop, symbolBottom, symbolSpread, symbolSolid, symbolOutline, symbolWith, symbolAgainst, symbolForce, symbolIndependent, symbolPile, symbolSupOut, symbolSubOut, symbolLeadEdge, symbolTrailEdge, symbolExplicit, symbolRowMajor, symbolColumnMajor }; enum { nSymbols = symbolColumnMajor + 1 }; typedef const char *PublicId; struct GlyphId { GlyphId() : publicId(0), suffix(0) { } GlyphId(const char *s, unsigned long n = 0) : publicId(s), suffix(n) { } PublicId publicId; // If suffix is non-zero, then add a double-colon plus // the suffix in decimal onto publicId to get the complete // public identifier of the glyph id. unsigned long suffix; }; struct GlyphSubstTable : public Resource { unsigned uniqueId; Vector pairs; GlyphId subst(const GlyphId &) const; }; // SP_LETTER2('U', 'K') #define SP_LETTER2(c1, c2) (((c1) << 8) | (c2)) typedef unsigned Letter2; typedef long Length; struct LengthSpec { LengthSpec(long len = 0) : length(len), displaySizeFactor(0.0) { } long length; double displaySizeFactor; operator bool() const { return length != 0 || displaySizeFactor != 0.0; } }; struct TableLengthSpec : LengthSpec { TableLengthSpec() : tableUnitFactor(0.0) { } double tableUnitFactor; }; struct OptLengthSpec { OptLengthSpec() : hasLength(0) { } bool hasLength; LengthSpec length; }; struct DisplaySpace { DisplaySpace() : priority(0), conditional(1), force(0) { } LengthSpec nominal; LengthSpec min; LengthSpec max; long priority; bool conditional; bool force; }; struct InlineSpace { LengthSpec nominal; LengthSpec min; LengthSpec max; }; // non-inherited characteristics for all displayed flow objects struct DisplayNIC { DisplayNIC(); DisplaySpace spaceBefore; DisplaySpace spaceAfter; Symbol positionPreference; Symbol keep; Symbol breakBefore; Symbol breakAfter; bool keepWithPrevious; bool keepWithNext; bool mayViolateKeepBefore; bool mayViolateKeepAfter; }; struct InlineNIC { InlineNIC(); long breakBeforePriority; long breakAfterPriority; }; struct DisplayGroupNIC : DisplayNIC { DisplayGroupNIC(); bool hasCoalesceId; StringC coalesceId; }; struct ExternalGraphicNIC : DisplayNIC, InlineNIC { ExternalGraphicNIC(); bool isDisplay; Symbol scaleType; // symbolFalse if not a symbol double scale[2]; // if scaleType == symbolFalse StringC entitySystemId; StringC notationSystemId; bool hasMaxWidth; LengthSpec maxWidth; bool hasMaxHeight; LengthSpec maxHeight; // These apply only if !isDisplay // symbolFalse if no escapementDirection Symbol escapementDirection; LengthSpec positionPointX; LengthSpec positionPointY; }; struct BoxNIC : DisplayNIC, InlineNIC { BoxNIC(); bool isDisplay; }; struct RuleNIC : DisplayNIC, InlineNIC { RuleNIC(); Symbol orientation; bool hasLength; LengthSpec length; }; struct LeaderNIC : InlineNIC { LeaderNIC(); bool hasLength; LengthSpec length; }; // A paragraph has the same non-inherited characteristics // as a display-group. typedef DisplayNIC ParagraphNIC; struct CharacterNIC { CharacterNIC(); enum { cIsDropAfterLineBreak, cIsDropUnlessBeforeLineBreak, cIsPunct, cIsInputWhitespace, cIsInputTab, cIsRecordEnd, cIsSpace, cChar, cGlyphId, cScript, cMathClass, cMathFontPosture, cBreakBeforePriority, cBreakAfterPriority }; unsigned specifiedC; Char ch; GlyphId glyphId; long breakBeforePriority; long breakAfterPriority; Symbol mathClass; Symbol mathFontPosture; PublicId script; bool isDropAfterLineBreak; bool isDropUnlessBeforeLineBreak; bool isPunct; bool isInputWhitespace; bool isInputTab; bool isRecordEnd; bool isSpace; // This doesn't have a flag in specifiedC, // because it has a fixed default. double stretchFactor; }; typedef InlineNIC LineFieldNIC; struct TableNIC : public DisplayNIC { TableNIC(); enum WidthType { widthFull, widthMinimum, widthExplicit }; WidthType widthType; LengthSpec width; }; typedef DisplayNIC TablePartNIC; struct TableColumnNIC { TableColumnNIC(); unsigned columnIndex; // zero-based unsigned nColumnsSpanned; bool hasWidth; TableLengthSpec width; }; struct TableCellNIC { TableCellNIC(); // If true, this isn't a real table cell. // Rather it's one that can be used to fill in cells missing in this row. bool missing; unsigned columnIndex; // zero-based unsigned nColumnsSpanned; unsigned nRowsSpanned; }; struct DeviceRGBColor { unsigned char red; unsigned char green; unsigned char blue; }; struct MultiMode { MultiMode(); bool hasDesc; StringC name; StringC desc; }; struct Address { enum Type { // An address of #f none, // An address that was resolved by the front-end to a node // Only the node member is valid. resolvedNode, // node contains current node, params[0] is string. idref, entity, sgmlDocument, hytimeLinkend, tei, html }; Type type; // Gives current node or resolved node. NodePtr node; StringC params[3]; }; virtual SaveFOTBuilder *asSaveFOTBuilder(); virtual ~FOTBuilder(); // Default for compound flow objects virtual void start(); virtual void end(); // Default for atomic flow objects: defaults to start(); end(); virtual void atomic(); // Atomic flow objects virtual void characters(const Char *, size_t); // Like characters(), but data comes from charChunk() on a NodePtr. // If you are building a tree, then the NodePtr can be saved instead // of the data. The default implementation calls characters(). virtual void charactersFromNode(const NodePtr &, const Char *, size_t); virtual void character(const CharacterNIC &); virtual void paragraphBreak(const ParagraphNIC &); virtual void externalGraphic(const ExternalGraphicNIC &); virtual void rule(const RuleNIC &); virtual void alignmentPoint(); // For flow object class public id // "UNREGISTERED::James Clark//Flow Object Class::formatting-instruction" virtual void formattingInstruction(const StringC &); // Non-atomic flow objects virtual void startSequence(); virtual void endSequence(); virtual void startLineField(const LineFieldNIC &); virtual void endLineField(); virtual void startParagraph(const ParagraphNIC &); virtual void endParagraph(); virtual void startDisplayGroup(const DisplayGroupNIC &); virtual void endDisplayGroup(); virtual void startScroll(); virtual void endScroll(); virtual void startLink(const Address &); virtual void endLink(); virtual void startMarginalia(); virtual void endMarginalia(); virtual void startMultiMode(const MultiMode *principalPort, // null if no principal port const Vector &namedPorts, Vector &); virtual void endMultiMode(); virtual void startScore(Char); virtual void startScore(const LengthSpec &); virtual void startScore(Symbol); virtual void endScore(); virtual void startLeader(const LeaderNIC &); virtual void endLeader(); virtual void startSideline(); virtual void endSideline(); virtual void startBox(const BoxNIC &); virtual void endBox(); // Tables virtual void startTable(const TableNIC &); virtual void endTable(); // A call for each border is made immediately // after startTable(), each preceded by any appropriate set*() calls. virtual void tableBeforeRowBorder(); virtual void tableAfterRowBorder(); virtual void tableBeforeColumnBorder(); virtual void tableAfterColumnBorder(); virtual void startTablePart(const TablePartNIC &, FOTBuilder *&header, FOTBuilder *&footer); virtual void endTablePart(); virtual void tableColumn(const TableColumnNIC &); virtual void startTableRow(); virtual void endTableRow(); virtual void startTableCell(const TableCellNIC &); virtual void endTableCell(); virtual void tableCellBeforeRowBorder(); virtual void tableCellAfterRowBorder(); virtual void tableCellBeforeColumnBorder(); virtual void tableCellAfterColumnBorder(); // Implementation must set numerator and denominator // must be set to non-null values. virtual void startMathSequence(); virtual void endMathSequence(); virtual void startFraction(FOTBuilder *&numerator, FOTBuilder *&denominator); // startFraction is followed by call to fractionBar with set...() calls // intervening virtual void fractionBar(); virtual void endFraction(); virtual void startUnmath(); virtual void endUnmath(); virtual void startSuperscript(); virtual void endSuperscript(); virtual void startSubscript(); virtual void endSubscript(); virtual void startScript(FOTBuilder *&preSup, FOTBuilder *&preSub, FOTBuilder *&postSup, FOTBuilder *&postSub, FOTBuilder *&midSup, FOTBuilder *&midSub); virtual void endScript(); virtual void startMark(FOTBuilder *&overMark, FOTBuilder *&underMark); virtual void endMark(); virtual void startFence(FOTBuilder *&open, FOTBuilder *&close); virtual void endFence(); virtual void startRadical(FOTBuilder *°ree); // startRadical is followed by one of the following virtual void radicalRadical(const CharacterNIC &); virtual void radicalRadicalDefaulted(); virtual void endRadical(); virtual void startMathOperator(FOTBuilder *&oper, FOTBuilder *&lowerLimit, FOTBuilder *&upperLimit); virtual void endMathOperator(); struct GridNIC { GridNIC(); unsigned nColumns; unsigned nRows; }; virtual void startGrid(const GridNIC &); virtual void endGrid(); struct GridCellNIC { GridCellNIC(); unsigned columnNumber; unsigned rowNumber; }; virtual void startGridCell(const GridCellNIC &); virtual void endGridCell(); // Simple page virtual void startSimplePageSequence(); virtual void endSimplePageSequence(); // Headers and footers are treated like a separate port. // There are 24 different parts to the headers and footers // numbered 0 to 027; the numbers are computed by or'ing the // following flags. enum HF { // first page or other page firstHF = 01, otherHF = 0, // front page or back page frontHF = 02, backHF = 0, // header or footer headerHF = 04, footerHF = 0, // left, center or right part of header leftHF = 0, centerHF = 010, rightHF = 020, // number of different HF calls nHF = 030 }; virtual void startSimplePageSequenceHeaderFooter(unsigned); virtual void endSimplePageSequenceHeaderFooter(unsigned); virtual void endAllSimplePageSequenceHeaderFooter(); // page-number sosofo virtual void pageNumber(); // Inherited characteristics // Set the value of the characteristic for the next flow object. // Inherited characteristics that are not explicitly set have // the same value as the parent flow object. virtual void setFontSize(Length); virtual void setFontFamilyName(const StringC &); virtual void setFontWeight(Symbol); virtual void setFontPosture(Symbol); virtual void setStartIndent(const LengthSpec &); virtual void setEndIndent(const LengthSpec &); virtual void setFirstLineStartIndent(const LengthSpec &); virtual void setLastLineEndIndent(const LengthSpec &); virtual void setLineSpacing(const LengthSpec &); virtual void setFieldWidth(const LengthSpec &); virtual void setMarginaliaSep(const LengthSpec &); virtual void setLines(Symbol); virtual void setQuadding(Symbol); virtual void setDisplayAlignment(Symbol); virtual void setFieldAlign(Symbol); virtual void setColor(const DeviceRGBColor &); virtual void setBackgroundColor(); // background of #f virtual void setBackgroundColor(const DeviceRGBColor &); virtual void setBorderPresent(bool); virtual void setLineThickness(Length); virtual void setCellBeforeRowMargin(Length); virtual void setCellAfterRowMargin(Length); virtual void setCellBeforeColumnMargin(Length); virtual void setCellAfterColumnMargin(Length); virtual void setLineSep(Length); virtual void setBoxSizeBefore(Length); virtual void setBoxSizeAfter(Length); virtual void setPositionPointShift(const LengthSpec &); virtual void setStartMargin(const LengthSpec &); virtual void setEndMargin(const LengthSpec &); virtual void setSidelineSep(const LengthSpec &); virtual void setAsisWrapIndent(const LengthSpec &); virtual void setLineNumberSep(const LengthSpec &); virtual void setLastLineJustifyLimit(const LengthSpec &); virtual void setJustifyGlyphSpaceMaxAdd(const LengthSpec &); virtual void setJustifyGlyphSpaceMaxRemove(const LengthSpec &); virtual void setTableCornerRadius(const LengthSpec &); virtual void setBoxCornerRadius(const LengthSpec &); virtual void setMinPreLineSpacing(const OptLengthSpec &); virtual void setMinPostLineSpacing(const OptLengthSpec &); virtual void setMinLeading(const OptLengthSpec &); virtual void setInhibitLineBreaks(bool); virtual void setHyphenate(bool); virtual void setKern(bool); virtual void setLigature(bool); virtual void setScoreSpaces(bool); virtual void setFloatOutMarginalia(bool); virtual void setFloatOutSidelines(bool); virtual void setFloatOutLineNumbers(bool); virtual void setCellBackground(bool); virtual void setSpanWeak(bool); virtual void setIgnoreRecordEnd(bool); virtual void setNumberedLines(bool); virtual void setHangingPunct(bool); virtual void setBoxOpenEnd(bool); virtual void setTruncateLeader(bool); virtual void setAlignLeader(bool); virtual void setTablePartOmitMiddleHeader(bool); virtual void setTablePartOmitMiddleFooter(bool); virtual void setBorderOmitAtBreak(bool); virtual void setPrincipalModeSimultaneous(bool); virtual void setMarginaliaKeepWithPrevious(bool); virtual void setGridEquidistantRows(bool); virtual void setGridEquidistantColumns(bool); virtual void setLineJoin(Symbol); virtual void setLineCap(Symbol); virtual void setLineNumberSide(Symbol); virtual void setKernMode(Symbol); virtual void setInputWhitespaceTreatment(Symbol); virtual void setFillingDirection(Symbol); virtual void setWritingMode(Symbol); virtual void setLastLineQuadding(Symbol); virtual void setMathDisplayMode(Symbol); virtual void setScriptPreAlign(Symbol); virtual void setScriptPostAlign(Symbol); virtual void setScriptMidSupAlign(Symbol); virtual void setScriptMidSubAlign(Symbol); virtual void setNumeratorAlign(Symbol); virtual void setDenominatorAlign(Symbol); virtual void setGridPositionCellType(Symbol); virtual void setGridColumnAlignment(Symbol); virtual void setGridRowAlignment(Symbol); virtual void setBoxType(Symbol); virtual void setGlyphAlignmentMode(Symbol); virtual void setBoxBorderAlignment(Symbol); virtual void setCellRowAlignment(Symbol); virtual void setBorderAlignment(Symbol); virtual void setSidelineSide(Symbol); virtual void setHyphenationKeep(Symbol); virtual void setFontStructure(Symbol); virtual void setFontProportionateWidth(Symbol); virtual void setCellCrossed(Symbol); virtual void setMarginaliaSide(Symbol); virtual void setLayer(long); virtual void setBackgroundLayer(long); virtual void setBorderPriority(long); virtual void setLineRepeat(long); virtual void setSpan(long); virtual void setMinLeaderRepeat(long); virtual void setHyphenationRemainCharCount(long); virtual void setHyphenationPushCharCount(long); virtual void setWidowCount(long); virtual void setOrphanCount(long); // 0 means #f virtual void setExpandTabs(long); virtual void setHyphenationLadderCount(long); // public id or #f virtual void setBackgroundTile(PublicId); virtual void setLineBreakingMethod(PublicId); virtual void setLineCompositionMethod(PublicId); virtual void setImplicitBidiMethod(PublicId); virtual void setGlyphSubstMethod(PublicId); virtual void setGlyphReorderMethod(PublicId); virtual void setHyphenationMethod(PublicId); virtual void setTableAutoWidthMethod(PublicId); virtual void setFontName(PublicId); // Two-letter code virtual void setLanguage(Letter2); virtual void setCountry(Letter2); virtual void setEscapementSpaceBefore(const InlineSpace &); virtual void setEscapementSpaceAfter(const InlineSpace &); // For simple page sequence virtual void setPageWidth(Length); virtual void setPageHeight(Length); virtual void setLeftMargin(Length); virtual void setRightMargin(Length); virtual void setTopMargin(Length); virtual void setBottomMargin(Length); virtual void setHeaderMargin(Length); virtual void setFooterMargin(Length); // Others virtual void setGlyphSubstTable(const Vector > &); // Backlinks // processingMode is empty for initial processing mode. virtual void startNode(const NodePtr &, const StringC &processingMode); virtual void endNode(); virtual void currentNodePageNumber(const NodePtr &); class CompoundExtensionFlowObj; class STYLE_API ExtensionFlowObj { public: virtual ~ExtensionFlowObj(); class Value { public: virtual bool convertString(StringC &) const = 0; virtual bool convertStringPairList(Vector &) const = 0; virtual bool convertStringList(Vector &) const = 0; virtual bool convertBoolean(bool &) const = 0; }; virtual CompoundExtensionFlowObj *asCompoundExtensionFlowObj(); virtual const CompoundExtensionFlowObj *asCompoundExtensionFlowObj() const; virtual bool hasNIC(const StringC &) const; virtual void setNIC(const StringC &, const Value &); virtual ExtensionFlowObj *copy() const = 0; }; class STYLE_API CompoundExtensionFlowObj : public ExtensionFlowObj { public: CompoundExtensionFlowObj *asCompoundExtensionFlowObj(); const CompoundExtensionFlowObj *asCompoundExtensionFlowObj() const; virtual bool hasPrincipalPort() const; virtual void portNames(Vector &) const; }; // extension inherited characteristics virtual void extensionSet(void (FOTBuilder::*)(bool), bool); virtual void extensionSet(void (FOTBuilder::*)(const StringC &), const StringC &); virtual void extensionSet(void (FOTBuilder::*)(long), long); // extension flow objects virtual void extension(const ExtensionFlowObj &, const NodePtr &); virtual void startExtension(const CompoundExtensionFlowObj &, const NodePtr &, Vector &ports); virtual void endExtension(const CompoundExtensionFlowObj &); struct Extension { const char *pubid; void (FOTBuilder::*boolSetter)(bool); void (FOTBuilder::*stringSetter)(const StringC &); void (FOTBuilder::*integerSetter)(long); void (FOTBuilder::*lengthSetter)(Length); const ExtensionFlowObj *flowObj; }; static const char *symbolName(Symbol); }; class STYLE_API SaveFOTBuilder : public Link, public FOTBuilder { public: SaveFOTBuilder(); SaveFOTBuilder(const NodePtr &, const StringC &processingMode); ~SaveFOTBuilder(); SaveFOTBuilder *asSaveFOTBuilder(); void emit(FOTBuilder &); void characters(const Char *, size_t); void charactersFromNode(const NodePtr &, const Char *, size_t); void character(const CharacterNIC &); void paragraphBreak(const ParagraphNIC &); void externalGraphic(const ExternalGraphicNIC &); void rule(const RuleNIC &); void alignmentPoint(); void formattingInstruction(const StringC &); void startSequence(); void endSequence(); void startLineField(const LineFieldNIC &); void endLineField(); void startParagraph(const ParagraphNIC &); void endParagraph(); void startDisplayGroup(const DisplayGroupNIC &); void endDisplayGroup(); void startScroll(); void endScroll(); void startLink(const Address &); void endLink(); void startMultiMode(const MultiMode *principalPort, const Vector &namedPorts, Vector &); void endMultiMode(); void startMarginalia(); void endMarginalia(); void startScore(Char); void startScore(const LengthSpec &); void startScore(Symbol); void endScore(); void startLeader(const LeaderNIC &); void endLeader(); void startSideline(); void endSideline(); void startBox(const BoxNIC &); void endBox(); void startSimplePageSequence(); void endSimplePageSequence(); // Headers and footers are treated like a separate port. void startSimplePageSequenceHeaderFooter(unsigned); void endSimplePageSequenceHeaderFooter(unsigned); void endAllSimplePageSequenceHeaderFooter(); // page-number sosofo void pageNumber(); // math void startMathSequence(); void endMathSequence(); void startFraction(FOTBuilder *&numerator, FOTBuilder *&denominator); void fractionBar(); void endFraction(); void startUnmath(); void endUnmath(); void startSuperscript(); void endSuperscript(); void startSubscript(); void endSubscript(); void startScript(FOTBuilder *&preSup, FOTBuilder *&preSub, FOTBuilder *&postSup, FOTBuilder *&postSub, FOTBuilder *&midSup, FOTBuilder *&midSub); void endScript(); void startMark(FOTBuilder *&overMark, FOTBuilder *&underMark); void endMark(); void startFence(FOTBuilder *&open, FOTBuilder *&close); void endFence(); void startRadical(FOTBuilder *°ree); void endRadical(); void radicalRadical(const CharacterNIC &); void radicalRadicalDefaulted(); void startMathOperator(FOTBuilder *&oper, FOTBuilder *&lowerLimit, FOTBuilder *&upperLimit); void endMathOperator(); void startGrid(const GridNIC &); void endGrid(); void startGridCell(const GridCellNIC &); void endGridCell(); // Tables void startTable(const TableNIC &); void endTable(); void tableBeforeRowBorder(); void tableAfterRowBorder(); void tableBeforeColumnBorder(); void tableAfterColumnBorder(); void startTablePart(const TablePartNIC &, FOTBuilder *&header, FOTBuilder *&footer); void endTablePart(); void tableColumn(const TableColumnNIC &); void startTableRow(); void endTableRow(); void startTableCell(const TableCellNIC &); void endTableCell(); void tableCellBeforeRowBorder(); void tableCellAfterRowBorder(); void tableCellBeforeColumnBorder(); void tableCellAfterColumnBorder(); // Inherited characteristics void setFontSize(Length); void setFontFamilyName(const StringC &); void setFontWeight(Symbol); void setFontPosture(Symbol); void setStartIndent(const LengthSpec &); void setEndIndent(const LengthSpec &); void setFirstLineStartIndent(const LengthSpec &); void setLastLineEndIndent(const LengthSpec &); void setLineSpacing(const LengthSpec &); void setFieldWidth(const LengthSpec &); void setLines(Symbol); void setQuadding(Symbol); void setDisplayAlignment(Symbol); void setFieldAlign(Symbol); void setColor(const DeviceRGBColor &); void setBackgroundColor(const DeviceRGBColor &); void setBackgroundColor(); void setPageWidth(Length); void setPageHeight(Length); void setLeftMargin(Length); void setRightMargin(Length); void setTopMargin(Length); void setBottomMargin(Length); void setHeaderMargin(Length); void setFooterMargin(Length); void setBorderPresent(bool); void setLineThickness(Length); void setCellBeforeRowMargin(Length); void setCellAfterRowMargin(Length); void setCellBeforeColumnMargin(Length); void setCellAfterColumnMargin(Length); void setLineSep(Length); void setBoxSizeBefore(Length); void setBoxSizeAfter(Length); void setPositionPointShift(const LengthSpec &); void setStartMargin(const LengthSpec &); void setEndMargin(const LengthSpec &); void setSidelineSep(const LengthSpec &); void setAsisWrapIndent(const LengthSpec &); void setLineNumberSep(const LengthSpec &); void setLastLineJustifyLimit(const LengthSpec &); void setJustifyGlyphSpaceMaxAdd(const LengthSpec &); void setJustifyGlyphSpaceMaxRemove(const LengthSpec &); void setTableCornerRadius(const LengthSpec &); void setBoxCornerRadius(const LengthSpec &); void setMarginaliaSep(const LengthSpec &); void setMinPreLineSpacing(const OptLengthSpec &); void setMinPostLineSpacing(const OptLengthSpec &); void setMinLeading(const OptLengthSpec &); void setInhibitLineBreaks(bool); void setHyphenate(bool); void setKern(bool); void setLigature(bool); void setScoreSpaces(bool); void setFloatOutMarginalia(bool); void setFloatOutSidelines(bool); void setFloatOutLineNumbers(bool); void setCellBackground(bool); void setSpanWeak(bool); void setIgnoreRecordEnd(bool); void setNumberedLines(bool); void setHangingPunct(bool); void setBoxOpenEnd(bool); void setTruncateLeader(bool); void setAlignLeader(bool); void setTablePartOmitMiddleHeader(bool); void setTablePartOmitMiddleFooter(bool); void setBorderOmitAtBreak(bool); void setPrincipalModeSimultaneous(bool); void setMarginaliaKeepWithPrevious(bool); void setGridEquidistantRows(bool); void setGridEquidistantColumns(bool); void setLineJoin(Symbol); void setLineCap(Symbol); void setLineNumberSide(Symbol); void setKernMode(Symbol); void setInputWhitespaceTreatment(Symbol); void setFillingDirection(Symbol); void setWritingMode(Symbol); void setLastLineQuadding(Symbol); void setMathDisplayMode(Symbol); void setScriptPreAlign(Symbol); void setScriptPostAlign(Symbol); void setScriptMidSupAlign(Symbol); void setScriptMidSubAlign(Symbol); void setNumeratorAlign(Symbol); void setDenominatorAlign(Symbol); void setGridPositionCellType(Symbol); void setGridColumnAlignment(Symbol); void setGridRowAlignment(Symbol); void setBoxType(Symbol); void setGlyphAlignmentMode(Symbol); void setBoxBorderAlignment(Symbol); void setCellRowAlignment(Symbol); void setBorderAlignment(Symbol); void setSidelineSide(Symbol); void setHyphenationKeep(Symbol); void setFontStructure(Symbol); void setFontProportionateWidth(Symbol); void setCellCrossed(Symbol); void setMarginaliaSide(Symbol); void setLayer(long); void setBackgroundLayer(long); void setBorderPriority(long); void setLineRepeat(long); void setSpan(long); void setMinLeaderRepeat(long); void setHyphenationRemainCharCount(long); void setHyphenationPushCharCount(long); void setWidowCount(long); void setOrphanCount(long); void setExpandTabs(long); void setHyphenationLadderCount(long); void setBackgroundTile(PublicId); void setLineBreakingMethod(PublicId); void setLineCompositionMethod(PublicId); void setImplicitBidiMethod(PublicId); void setGlyphSubstMethod(PublicId); void setGlyphReorderMethod(PublicId); void setHyphenationMethod(PublicId); void setTableAutoWidthMethod(PublicId); void setFontName(PublicId); void setLanguage(Letter2); void setCountry(Letter2); void setEscapementSpaceBefore(const InlineSpace &); void setEscapementSpaceAfter(const InlineSpace &); void setGlyphSubstTable(const Vector > &); void startNode(const NodePtr &, const StringC &processingMode); void endNode(); void currentNodePageNumber(const NodePtr &); void extensionSet(void (FOTBuilder::*)(bool), bool); void extensionSet(void (FOTBuilder::*)(const StringC &), const StringC &); void extensionSet(void (FOTBuilder::*)(long), long); void extension(const ExtensionFlowObj &, const NodePtr &); void startExtension(const CompoundExtensionFlowObj &, const NodePtr &, Vector &ports); void endExtension(const CompoundExtensionFlowObj &); struct Call { virtual ~Call(); virtual void emit(FOTBuilder &) = 0; Call *next; }; private: SaveFOTBuilder(const SaveFOTBuilder &); // undefined void operator=(const SaveFOTBuilder &); // undefined struct NoArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(); NoArgCall(FuncPtr f) : func(f) { } void emit(FOTBuilder &); FuncPtr func; }; struct LongArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(long); LongArgCall(FuncPtr f, long n) : func(f), arg(n) { } void emit(FOTBuilder &); FuncPtr func; long arg; }; struct ExtensionLongArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(long); ExtensionLongArgCall(FuncPtr f, long n) : func(f), arg(n) { } void emit(FOTBuilder &); FuncPtr func; long arg; }; struct LengthSpecArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(const LengthSpec &); LengthSpecArgCall(FuncPtr f, const LengthSpec &ls) : func(f), arg(ls) { } void emit(FOTBuilder &); FuncPtr func; LengthSpec arg; }; struct OptLengthSpecArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(const OptLengthSpec &); OptLengthSpecArgCall(FuncPtr f, const OptLengthSpec &ols) : func(f), arg(ols) { } void emit(FOTBuilder &); FuncPtr func; OptLengthSpec arg; }; struct NodePtrArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(const NodePtr &); NodePtrArgCall(FuncPtr f, const NodePtr &nd) : func(f), arg(nd) { } void emit(FOTBuilder &); FuncPtr func; NodePtr arg; }; struct StringArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(const StringC &); StringArgCall(FuncPtr f, const StringC &s) : func(f), arg(s) { } void emit(FOTBuilder &); FuncPtr func; StringC arg; }; struct ExtensionStringArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(const StringC &); ExtensionStringArgCall(FuncPtr f, const StringC &s) : func(f), arg(s) { } void emit(FOTBuilder &); FuncPtr func; StringC arg; }; struct CharArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(Char); CharArgCall(FuncPtr f, Char c) : func(f), arg(c) { } void emit(FOTBuilder &); FuncPtr func; Char arg; }; struct BoolArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(bool); BoolArgCall(FuncPtr f, bool b) : func(f), arg(b) { } void emit(FOTBuilder &); FuncPtr func; bool arg; }; struct ExtensionBoolArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(bool); ExtensionBoolArgCall(FuncPtr f, bool b) : func(f), arg(b) { } void emit(FOTBuilder &); FuncPtr func; bool arg; }; struct SymbolArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(Symbol); SymbolArgCall(FuncPtr f, Symbol sym) : func(f), arg(sym) { } void emit(FOTBuilder &); FuncPtr func; Symbol arg; }; struct PublicIdArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(PublicId); PublicIdArgCall(FuncPtr f, PublicId pubid) : func(f), arg(pubid) { } void emit(FOTBuilder &); FuncPtr func; PublicId arg; }; struct UnsignedArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(unsigned); UnsignedArgCall(FuncPtr f, unsigned n) : func(f), arg(n) { } void emit(FOTBuilder &); FuncPtr func; unsigned arg; }; struct DeviceRGBColorArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(const DeviceRGBColor &); DeviceRGBColorArgCall(FuncPtr f, const DeviceRGBColor &color) : func(f), arg(color) { } void emit(FOTBuilder &); FuncPtr func; DeviceRGBColor arg; }; struct InlineSpaceArgCall : Call { typedef void (FOTBuilder::*FuncPtr)(const InlineSpace &); InlineSpaceArgCall(FuncPtr f, InlineSpace is) : func(f), arg(is) { } void emit(FOTBuilder &); FuncPtr func; InlineSpace arg; }; struct CharactersFromNodeCall : Call { CharactersFromNodeCall(const NodePtr &, const Char *, size_t); void emit(FOTBuilder &); const Char *data; size_t size; NodePtr node; }; struct CharactersCall : Call { CharactersCall(const Char *, size_t); void emit(FOTBuilder &); StringC str; }; struct CharacterCall : Call { CharacterCall(const CharacterNIC &nic) : arg(nic) { } void emit(FOTBuilder &); CharacterNIC arg; }; struct StartNodeCall : Call { StartNodeCall(const NodePtr &, const StringC &); void emit(FOTBuilder &); NodePtr node; StringC mode; }; struct StartParagraphCall : Call { StartParagraphCall(const ParagraphNIC &nic); void emit(FOTBuilder &); ParagraphNIC arg; }; struct ParagraphBreakCall : Call { ParagraphBreakCall(const ParagraphNIC &nic); void emit(FOTBuilder &); ParagraphNIC arg; }; struct StartDisplayGroupCall : Call { StartDisplayGroupCall(const DisplayGroupNIC &nic); void emit(FOTBuilder &); DisplayGroupNIC arg; }; struct StartBoxCall : Call { StartBoxCall(const BoxNIC &nic) : arg(nic) { } void emit(FOTBuilder &); BoxNIC arg; }; struct StartLineFieldCall : Call { StartLineFieldCall(const LineFieldNIC &nic) : arg(nic) { } void emit(FOTBuilder &); LineFieldNIC arg; }; struct ExternalGraphicCall : Call { ExternalGraphicCall(const ExternalGraphicNIC &nic) : arg(nic) { } void emit(FOTBuilder &); ExternalGraphicNIC arg; }; struct RuleCall : Call { RuleCall(const RuleNIC &nic) : arg(nic) { } void emit(FOTBuilder &); RuleNIC arg; }; struct StartLeaderCall : Call { StartLeaderCall(const LeaderNIC &nic) : arg(nic) { } void emit(FOTBuilder &); LeaderNIC arg; }; struct StartTableCall : Call { StartTableCall(const TableNIC &nic) : arg(nic) { } void emit(FOTBuilder &); TableNIC arg; }; struct TableColumnCall : Call { TableColumnCall(const TableColumnNIC &nic) : arg(nic) { } void emit(FOTBuilder &); TableColumnNIC arg; }; struct StartTableCellCall : Call { StartTableCellCall(const TableCellNIC &nic) : arg(nic) { } void emit(FOTBuilder &); TableCellNIC arg; }; struct StartLinkCall : Call { StartLinkCall(const Address &addr) : arg(addr) { } void emit(FOTBuilder &); Address arg; }; struct SetGlyphSubstTableCall : Call { SetGlyphSubstTableCall(const Vector > &tables) : arg(tables) { } void emit(FOTBuilder &); Vector > arg; }; struct StartGridCall : Call { StartGridCall(const GridNIC &nic) : arg(nic) { } void emit(FOTBuilder &); GridNIC arg; }; struct StartGridCellCall : Call { StartGridCellCall(const GridCellNIC &nic) : arg(nic) { } void emit(FOTBuilder &); GridCellNIC arg; }; struct RadicalRadicalCall : Call { RadicalRadicalCall(const CharacterNIC &nic) : arg(nic) { } void emit(FOTBuilder &); CharacterNIC arg; }; struct ExtensionCall : Call { ExtensionCall(const ExtensionFlowObj &fo, const NodePtr &nd) : arg(fo.copy()), node(nd) { } void emit(FOTBuilder &); Owner arg; NodePtr node; }; struct EndExtensionCall : Call { EndExtensionCall(const CompoundExtensionFlowObj &fo) : arg(fo.copy()->asCompoundExtensionFlowObj()) { } void emit(FOTBuilder &); Owner arg; }; Call *calls_; Call **tail_; NodePtr currentNode_; StringC processingMode_; }; // Would like to make this a member of SaveFOTBuilder, but can't because // it has members that are instances of SaveFOTBuilder. struct StartFractionCall : SaveFOTBuilder::Call { StartFractionCall(FOTBuilder *&numerator, FOTBuilder *&denominator); void emit(FOTBuilder &); SaveFOTBuilder numerator; SaveFOTBuilder denominator; }; struct StartScriptCall : SaveFOTBuilder::Call { StartScriptCall(FOTBuilder *&preSup, FOTBuilder *&preSub, FOTBuilder *&postSup, FOTBuilder *&postSub, FOTBuilder *&midSup, FOTBuilder *&midSub); void emit(FOTBuilder &); SaveFOTBuilder preSup; SaveFOTBuilder preSub; SaveFOTBuilder postSup; SaveFOTBuilder postSub; SaveFOTBuilder midSup; SaveFOTBuilder midSub; }; struct StartMarkCall : public SaveFOTBuilder::Call { StartMarkCall(FOTBuilder *&overMark, FOTBuilder *&underMark); void emit(FOTBuilder &); SaveFOTBuilder overMark; SaveFOTBuilder underMark; }; struct StartFenceCall : public SaveFOTBuilder::Call { StartFenceCall(FOTBuilder *&open, FOTBuilder *&close); void emit(FOTBuilder &); SaveFOTBuilder open; SaveFOTBuilder close; }; struct StartRadicalCall : public SaveFOTBuilder::Call { StartRadicalCall(FOTBuilder *°ree); void emit(FOTBuilder &); SaveFOTBuilder degree; }; struct StartMathOperatorCall : public SaveFOTBuilder::Call { StartMathOperatorCall(FOTBuilder *&oper, FOTBuilder *&lowerLimit, FOTBuilder *&upperLimit); void emit(FOTBuilder &); SaveFOTBuilder oper; SaveFOTBuilder lowerLimit; SaveFOTBuilder upperLimit; }; struct StartTablePartCall : SaveFOTBuilder::Call { StartTablePartCall(const FOTBuilder::TablePartNIC &nic, FOTBuilder *&header, FOTBuilder *&footer); void emit(FOTBuilder &); FOTBuilder::TablePartNIC arg; SaveFOTBuilder header; SaveFOTBuilder footer; }; struct StartMultiModeCall : SaveFOTBuilder::Call { StartMultiModeCall(const FOTBuilder::MultiMode *principalMode, const Vector &namedModes, Vector &ports); void emit(FOTBuilder &); FOTBuilder::MultiMode principalMode; bool hasPrincipalMode; Vector namedModes; IList ports; }; struct StartExtensionCall : SaveFOTBuilder::Call { StartExtensionCall(const FOTBuilder::CompoundExtensionFlowObj &, const NodePtr &, Vector &); void emit(FOTBuilder &); IList ports; NodePtr node; Owner flowObj; }; // This uses SaveFOTBuilder to provide a serial view of multi-port objects. class STYLE_API SerialFOTBuilder : public FOTBuilder { public: SerialFOTBuilder(); // Instead of overriding these void startTablePart(const TablePartNIC &, FOTBuilder *&header, FOTBuilder *&footer); void endTablePart(); void startFraction(FOTBuilder *&numerator, FOTBuilder *&denominator); void endFraction(); void startScript(FOTBuilder *&preSup, FOTBuilder *&preSub, FOTBuilder *&postSup, FOTBuilder *&postSub, FOTBuilder *&midSup, FOTBuilder *&midSub); void endScript(); void startMark(FOTBuilder *&overMark, FOTBuilder *&underMark); void endMark(); void startFence(FOTBuilder *&open, FOTBuilder *&close); void endFence(); void startRadical(FOTBuilder *°ree); void endRadical(); void startMathOperator(FOTBuilder *&oper, FOTBuilder *&lowerLimit, FOTBuilder *&upperLimit); void endMathOperator(); void startMultiMode(const MultiMode *, const Vector &, Vector &); void endMultiMode(); void startExtension(const CompoundExtensionFlowObj &, const NodePtr &, Vector &ports); void endExtension(const CompoundExtensionFlowObj &); // Override these virtual void startFractionSerial(); virtual void endFractionSerial(); virtual void startFractionNumerator(); virtual void endFractionNumerator(); virtual void startFractionDenominator(); virtual void endFractionDenominator(); virtual void startScriptSerial(); virtual void endScriptSerial(); virtual void startScriptPreSup(); virtual void endScriptPreSup(); virtual void startScriptPreSub(); virtual void endScriptPreSub(); virtual void startScriptPostSup(); virtual void endScriptPostSup(); virtual void startScriptPostSub(); virtual void endScriptPostSub(); virtual void startScriptMidSup(); virtual void endScriptMidSup(); virtual void startScriptMidSub(); virtual void endScriptMidSub(); virtual void startMarkSerial(); virtual void endMarkSerial(); virtual void startMarkOver(); virtual void endMarkOver(); virtual void startMarkUnder(); virtual void endMarkUnder(); virtual void startFenceSerial(); virtual void endFenceSerial(); virtual void startFenceOpen(); virtual void endFenceOpen(); virtual void startFenceClose(); virtual void endFenceClose(); virtual void startRadicalSerial(); virtual void endRadicalSerial(); virtual void startRadicalDegree(); virtual void endRadicalDegree(); virtual void startMathOperatorSerial(); virtual void endMathOperatorSerial(); virtual void startMathOperatorOperator(); virtual void endMathOperatorOperator(); virtual void startMathOperatorLowerLimit(); virtual void endMathOperatorLowerLimit(); virtual void startMathOperatorUpperLimit(); virtual void endMathOperatorUpperLimit(); virtual void startTablePartSerial(const TablePartNIC &); virtual void endTablePartSerial(); virtual void startTablePartHeader(); virtual void endTablePartHeader(); virtual void startTablePartFooter(); virtual void endTablePartFooter(); virtual void startMultiModeSerial(const MultiMode *); virtual void endMultiModeSerial(); virtual void startMultiModeMode(const MultiMode &); virtual void endMultiModeMode(); virtual void startExtensionSerial(const CompoundExtensionFlowObj &, const NodePtr &); virtual void endExtensionSerial(const CompoundExtensionFlowObj &); virtual void startExtensionStream(const StringC &); virtual void endExtensionStream(const StringC &); private: IList save_; Vector > multiModeStack_; }; inline bool operator==(const FOTBuilder::GlyphId &g1, const FOTBuilder::GlyphId &g2) { return g1.publicId == g2.publicId && g1.suffix == g2.suffix; } bool STYLE_API operator==(const StringC &, const char *); #ifdef DSSSL_NAMESPACE } #endif #endif /* not FOTBuilder_INCLUDED */ jade-1.2.1/style/GroveManager.h100444 764 764 1304 6604607716 14103 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file copying.txt for copying permission. #ifndef GroveManager_INCLUDED #define GroveManager_INCLUDED 1 #include "Boolean.h" #include "Node.h" #include "StringC.h" #include "Vector.h" #include "FOTBuilder.h" #include "Boolean.h" #include "dsssl_ns.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class STYLE_API GroveManager { public: virtual ~GroveManager(); virtual bool load(const StringC &, const Vector &active, const NodePtr &parent, NodePtr &, const Vector &architecture) = 0; virtual bool readEntity(const StringC &, StringC &) = 0; }; #ifdef DSSSL_NAMESPACE } #endif #endif /* not GroveManager_INCLUDED */ jade-1.2.1/style/Insn.h100444 764 764 27526 6604607716 12473 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef Insn_INCLUDED #define Insn_INCLUDED 1 #include "ELObj.h" #include "Resource.h" #include "Ptr.h" #include "Location.h" #include "Message.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class VM; class EvalContext; class Interpreter; class Insn : public Resource { public: virtual ~Insn(); virtual const Insn *execute(VM &) const = 0; virtual bool isReturn(int &nArgs) const; virtual bool isPopBindings(int &n, ConstPtr &) const; }; typedef ConstPtr InsnPtr; class ErrorInsn : public Insn { public: const Insn *execute(VM &) const; }; class CondFailInsn : public ErrorInsn { public: CondFailInsn(const Location &loc); const Insn *execute(VM &) const; private: Location loc_; }; class CaseFailInsn : public ErrorInsn { public: CaseFailInsn(const Location &loc); const Insn *execute(VM &) const; private: Location loc_; }; class ConstantInsn : public Insn { public: ConstantInsn(ELObj *, InsnPtr); const Insn *execute(VM &) const; private: ELObj *value_; InsnPtr next_; }; class ResolveQuantitiesInsn : public Insn { public: ResolveQuantitiesInsn(const Location &, InsnPtr); const Insn *execute(VM &) const; private: Location loc_; InsnPtr next_; }; class TestInsn : public Insn { public: TestInsn(InsnPtr, InsnPtr); const Insn *execute(VM &) const; private: InsnPtr consequent_; InsnPtr alternative_; }; class OrInsn : public Insn { public: OrInsn(InsnPtr nextTest, InsnPtr next); const Insn *execute(VM &) const; private: InsnPtr nextTest_; InsnPtr next_; }; class AndInsn : public Insn { public: AndInsn(InsnPtr nextTest, InsnPtr next); const Insn *execute(VM &) const; private: InsnPtr nextTest_; InsnPtr next_; }; class CaseInsn : public Insn { public: CaseInsn(ELObj *, InsnPtr match, InsnPtr fail); const Insn *execute(VM &) const; private: ELObj *obj_; InsnPtr match_; InsnPtr fail_; }; class PopInsn : public Insn { public: PopInsn(InsnPtr next); const Insn *execute(VM &) const; private: InsnPtr next_; }; class ConsInsn : public Insn { public: ConsInsn(InsnPtr next); const Insn *execute(VM &) const; private: InsnPtr next_; }; class AppendInsn : public Insn { public: AppendInsn(const Location &, InsnPtr next); const Insn *execute(VM &) const; private: Location loc_; InsnPtr next_; }; class ApplyBaseInsn : public Insn { public: ApplyBaseInsn(int nArgs, const Location &); protected: FunctionObj *decodeArgs(VM &) const; Location loc_; int nArgs_; }; class ApplyInsn : public ApplyBaseInsn { public: ApplyInsn(int nArgs, const Location &, InsnPtr); const Insn *execute(VM &) const; private: InsnPtr next_; }; class TailApplyInsn : public ApplyBaseInsn { public: TailApplyInsn(int nCallerArgs, int nArgs, const Location &); const Insn *execute(VM &) const; private: int nCallerArgs_; }; class FrameRefInsn : public Insn { public: FrameRefInsn(int index, InsnPtr next); const Insn *execute(VM &vm) const; private: int index_; InsnPtr next_; }; class StackRefInsn : public Insn { public: StackRefInsn(int index, int frameIndex, InsnPtr next); const Insn *execute(VM &vm) const; private: int index_; // always negative int frameIndex_; InsnPtr next_; }; class ClosureRefInsn : public Insn { public: ClosureRefInsn(int index, InsnPtr next); const Insn *execute(VM &vm) const; private: int index_; InsnPtr next_; }; class StackSetBoxInsn : public Insn { public: StackSetBoxInsn(int index, int frameIndex, const Location &loc, InsnPtr next); const Insn *execute(VM &vm) const; private: int index_; // always negative int frameIndex_; Location loc_; InsnPtr next_; }; class StackSetInsn : public Insn { public: StackSetInsn(int index, int frameIndex, InsnPtr next); const Insn *execute(VM &vm) const; private: int index_; // always negative int frameIndex_; InsnPtr next_; }; class ClosureSetBoxInsn : public Insn { public: ClosureSetBoxInsn(int index, const Location &loc, InsnPtr next); const Insn *execute(VM &vm) const; private: int index_; Location loc_; InsnPtr next_; }; class TopRefInsn : public Insn { public: TopRefInsn(const Identifier *var, InsnPtr next); const Insn *execute(VM &vm) const; private: const Identifier *var_; InsnPtr next_; Location loc_; }; class PopBindingsInsn : public Insn { public: const Insn *execute(VM &vm) const; bool isPopBindings(int &n, InsnPtr &) const; static InsnPtr make(int n, InsnPtr next); private: PopBindingsInsn(int n, InsnPtr next); int n_; InsnPtr next_; }; class PrimitiveObj; class PrimitiveCallInsn : public Insn { public: PrimitiveCallInsn(int nArgs, PrimitiveObj *, const Location &, InsnPtr); const Insn *execute(VM &) const; private: int nArgs_; PrimitiveObj *prim_; Location loc_; InsnPtr next_; }; struct Signature { int nRequiredArgs; int nOptionalArgs; bool restArg; int nKeyArgs; const Identifier *const *keys; }; // This Insn constructs a ClosureObj. class ClosureInsn : public Insn { public: ClosureInsn(const Signature *, InsnPtr code, int displayLength, InsnPtr next); const Insn *execute(VM &) const; private: const Signature *sig_; InsnPtr code_; int displayLength_; InsnPtr next_; }; class ClosureObj; class FunctionCallInsn : public Insn { public: FunctionCallInsn(int nArgs, FunctionObj *, const Location &, InsnPtr); const Insn *execute(VM &) const; private: int nArgs_; FunctionObj *function_; // must be permanent Location loc_; InsnPtr next_; }; class FunctionTailCallInsn : public Insn { public: FunctionTailCallInsn(int nArgs, FunctionObj *, const Location &, int nCallerArgs); const Insn *execute(VM &) const; private: int nArgs_; FunctionObj *function_; // must be permanent Location loc_; int nCallerArgs_; }; class VarargsInsn : public Insn { public: VarargsInsn(const Signature &, Vector &entryPoints, const Location &); const Insn *execute(VM &) const; private: const Signature *sig_; Vector entryPoints_; Location loc_; }; class SetKeyArgInsn : public Insn { public: SetKeyArgInsn(int offset, InsnPtr); const Insn *execute(VM &) const; private: int offset_; InsnPtr next_; }; class TestNullInsn : public Insn { public: TestNullInsn(int offset, InsnPtr ifNull, InsnPtr ifNotNull); const Insn *execute(VM &) const; private: int offset_; InsnPtr ifNull_; InsnPtr ifNotNull_; InsnPtr next_; }; class ReturnInsn : public Insn { public: ReturnInsn(int totalArgs); const Insn *execute(VM &) const; bool isReturn(int &nArgs) const; private: int totalArgs_; }; class FunctionObj : public ELObj { public: FunctionObj(const Signature *sig) : sig_(sig) { } int totalArgs(); int nRequiredArgs(); int nOptionalArgs(); int nKeyArgs(); bool restArg(); virtual const Insn *call(VM &vm, const Location &, const Insn *next) = 0; virtual const Insn *tailCall(VM &vm, const Location &, int nCallerArgs) = 0; virtual InsnPtr makeCallInsn(int nArgs, Interpreter &, const Location &, InsnPtr next); virtual InsnPtr makeTailCallInsn(int nArgs, Interpreter &, const Location &, int nCallerArgs); const Signature &signature() const { return *sig_; } FunctionObj *asFunction(); virtual void setArgToCC(VM &); private: const Signature *sig_; }; class PrimitiveObj : public FunctionObj { public: PrimitiveObj(const Signature *sig) : FunctionObj(sig) { } const Insn *call(VM &vm, const Location &, const Insn *next); const Insn *tailCall(VM &vm, const Location &, int nCallerArgs); InsnPtr makeCallInsn(int nArgs, Interpreter &, const Location &, InsnPtr next); virtual ELObj *primitiveCall(int nArgs, ELObj **args, EvalContext &, Interpreter &, const Location &) = 0; void setIdentifier(const Identifier *ident); protected: ELObj *argError(Interpreter &, const Location &, const MessageType3 &, unsigned, ELObj *) const; ELObj *noCurrentNodeError(Interpreter &, const Location &) const; private: const Identifier *ident_; }; class ApplyPrimitiveObj : public FunctionObj { public: ApplyPrimitiveObj(); const Insn *call(VM &vm, const Location &, const Insn *next); const Insn *tailCall(VM &vm, const Location &, int nCallerArgs); private: bool shuffle(VM &vm, const Location &loc); static const Signature signature_; }; class CallWithCurrentContinuationPrimitiveObj : public FunctionObj { public: CallWithCurrentContinuationPrimitiveObj(); const Insn *call(VM &vm, const Location &, const Insn *next); const Insn *tailCall(VM &vm, const Location &, int nCallerArgs); private: static const Signature signature_; }; class ClosureObj : public FunctionObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } ClosureObj(const Signature *, InsnPtr, ELObj **display); ~ClosureObj() { delete [] display_; } ELObj **display(); const Insn *call(VM &, const Location &, const Insn *); const Insn *tailCall(VM &, const Location &, int nCallerArgs); void traceSubObjects(Collector &) const; ELObj *display(int) const; void setArgToCC(VM &); private: InsnPtr code_; // terminated by null pointer. // null if empty. ELObj **display_; }; class ContinuationObj : public FunctionObj { public: ContinuationObj(); const Insn *call(VM &, const Location &, const Insn *); const Insn *tailCall(VM &, const Location &, int nCallerArgs); void set(size_t stackSize, size_t controlStackSize) { stackSize_ = stackSize; controlStackSize_ = controlStackSize; } void kill() { controlStackSize_ = 0; } bool live() const { return controlStackSize_ > 0; } private: size_t stackSize_; size_t controlStackSize_; static const Signature signature_; }; class BoxObj : public ELObj { public: BoxObj(); BoxObj(ELObj *); BoxObj *asBox(); void traceSubObjects(Collector &) const; ELObj *value; }; class SetBoxInsn : public Insn { public: SetBoxInsn(int n, InsnPtr next); const Insn *execute(VM &vm) const; private: int n_; InsnPtr next_; }; class SetImmediateInsn : public Insn { public: SetImmediateInsn(int n, InsnPtr next); const Insn *execute(VM &vm) const; private: int n_; InsnPtr next_; }; class UnboxInsn : public Insn { public: UnboxInsn(InsnPtr next); const Insn *execute(VM &vm) const; private: InsnPtr next_; }; class CheckInitInsn : public Insn { public: CheckInitInsn(const Identifier *ident, const Location &, InsnPtr next); const Insn *execute(VM &vm) const; private: const Identifier *ident_; Location loc_; InsnPtr next_; }; class BoxInsn : public Insn { public: BoxInsn(InsnPtr next); const Insn *execute(VM &vm) const; private: InsnPtr next_; }; class BoxArgInsn : public Insn { public: BoxArgInsn(int n, InsnPtr next); const Insn *execute(VM &vm) const; private: int n_; InsnPtr next_; }; class BoxStackInsn : public Insn { public: BoxStackInsn(int n, InsnPtr next); const Insn *execute(VM &vm) const; private: int n_; InsnPtr next_; }; class VectorInsn : public Insn { public: VectorInsn(size_t n, InsnPtr next); const Insn *execute(VM &vm) const; private: size_t n_; InsnPtr next_; }; class ListToVectorInsn : public Insn { public: ListToVectorInsn(InsnPtr next); const Insn *execute(VM &vm) const; private: InsnPtr next_; }; inline int FunctionObj::nRequiredArgs() { return signature().nRequiredArgs; } inline int FunctionObj::nOptionalArgs() { return signature().nOptionalArgs; } inline bool FunctionObj::restArg() { return signature().restArg; } inline int FunctionObj::nKeyArgs() { return signature().nKeyArgs; } inline int FunctionObj::totalArgs() { const Signature &sig = signature(); return sig.nRequiredArgs + sig.nOptionalArgs + sig.nKeyArgs + sig.restArg; } inline void PrimitiveObj::setIdentifier(const Identifier *ident) { ident_ = ident; } inline ELObj *ClosureObj::display(int i) const { return display_[i]; } #ifdef DSSSL_NAMESPACE } #endif #endif /* not Insn_INCLUDED */ jade-1.2.1/style/Insn2.h100444 764 764 10556 6604607716 12550 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef Insn2_INCLUDED #define Insn2_INCLUDED 1 #include "Insn.h" #include "SosofoObj.h" #include "Style.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class CheckSosofoInsn : public Insn { public: CheckSosofoInsn(const Location &loc, InsnPtr next) : loc_(loc), next_(next) { } const Insn *execute(VM &vm) const; private: Location loc_; InsnPtr next_; }; class CheckStyleInsn : public Insn { public: CheckStyleInsn(const Location &loc, InsnPtr next) : loc_(loc), next_(next) { } const Insn *execute(VM &vm) const; private: Location loc_; InsnPtr next_; }; class ProcessingMode; class PushModeInsn : public Insn { public: PushModeInsn(const ProcessingMode *mode, InsnPtr next) : mode_(mode), next_(next) { } const Insn *execute(VM &) const; private: const ProcessingMode *mode_; InsnPtr next_; }; class PopModeInsn : public Insn { public: PopModeInsn(InsnPtr next) : next_(next) { } const Insn *execute(VM &) const; private: InsnPtr next_; }; // This creates a SetNonInheritedCsSosofo // displayLength_ vars are on the top of the stack. // flowObj is next. class SetNonInheritedCsSosofoInsn : public Insn { public: SetNonInheritedCsSosofoInsn(InsnPtr code, int displayLength, InsnPtr next); const Insn *execute(VM &) const; private: InsnPtr code_; int displayLength_; InsnPtr next_; }; class CopyFlowObjInsn : public Insn { public: CopyFlowObjInsn(FlowObj *, InsnPtr); const Insn *execute(VM &) const; private: FlowObj *flowObj_; InsnPtr next_; }; // Value for characteristic is on top of the stack // Flow object is next down. class SetPseudoNonInheritedCInsn : public Insn { public: SetPseudoNonInheritedCInsn(const Identifier *, const Location &, InsnPtr); const Insn *execute(VM &) const; private: Location loc_; const Identifier *nic_; InsnPtr next_; }; class SetNonInheritedCInsn : public SetPseudoNonInheritedCInsn { public: SetNonInheritedCInsn(const Identifier *, const Location &, InsnPtr); const Insn *execute(VM &) const; }; // sosofo with content is on top of the stack // flow object is next class SetContentInsn : public Insn { public: SetContentInsn(const CompoundFlowObj *, InsnPtr next); const Insn *execute(VM &vm) const; private: InsnPtr next_; const CompoundFlowObj *flowObj_; }; class SetDefaultContentInsn : public Insn { public: SetDefaultContentInsn(const CompoundFlowObj *, const Location &loc, InsnPtr next); const Insn *execute(VM &vm) const; private: Location loc_; InsnPtr next_; const CompoundFlowObj *flowObj_; }; class MakeDefaultContentInsn : public Insn { public: MakeDefaultContentInsn(const Location &loc, InsnPtr next); const Insn *execute(VM &vm) const; private: Location loc_; InsnPtr next_; }; class SosofoAppendInsn : public Insn { public: SosofoAppendInsn(size_t, InsnPtr); const Insn *execute(VM &vm) const; private: size_t n_; InsnPtr next_; }; // This creates a VarStyleObj. // displayLength vars are on the top, then the use StyleObj is there is one. class VarStyleInsn : public Insn { public: VarStyleInsn(const ConstPtr &, unsigned, bool, InsnPtr); const Insn *execute(VM &vm) const; private: unsigned displayLength_; bool hasUse_; ConstPtr styleSpec_; InsnPtr next_; }; // BasicStyleObj is on top of stack. // If there is a current overriding style, // replace it by an OverridenStyleObj. class MaybeOverrideStyleInsn : public Insn { public: MaybeOverrideStyleInsn(InsnPtr next); const Insn *execute(VM &vm) const; private: InsnPtr next_; }; // StyleObj is on top // FlowObj is next down // calls set style on the flowobj class SetStyleInsn : public Insn { public: SetStyleInsn(InsnPtr next); const Insn *execute(VM &vm) const; private: InsnPtr next_; }; class Expression; // label is on the top // content is next down class LabelSosofoInsn : public Insn { public: LabelSosofoInsn(const Location &, InsnPtr next); const Insn *execute(VM &) const; private: Location loc_; InsnPtr next_; }; // Constructs a ContentMapSosofo // content-map is on top // content is next down class ContentMapSosofoInsn : public Insn { public: ContentMapSosofoInsn(const Location &loc, InsnPtr next); const Insn *execute(VM &) const; private: Location loc_; InsnPtr next_; }; #ifdef DSSSL_NAMESPACE } #endif #endif /* not Insn2_INCLUDED */ jade-1.2.1/style/Interpreter.h100444 764 764 44430 6604607716 14060 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef Interpreter_INCLUDED #define Interpreter_INCLUDED 1 #include "ELObj.h" #include "Expression.h" #include "Message.h" #include "PointerTable.h" #include "NamedTable.h" #include "Collector.h" #include "InputSource.h" #include "XcharMap.h" #include "Owner.h" #include "Style.h" #include "SosofoObj.h" #include "ProcessingMode.h" #include "NumberCache.h" #include "HashTable.h" #include "FOTBuilder.h" #include "Owner.h" #include "Boolean.h" #include "Node.h" #include "GroveManager.h" #include "Pattern.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class Interpreter; class Identifier : public Named { public: enum SyntacticKey { notKey, keyQuote, keyLambda, keyIf, keyCond, keyAnd, keyOr, keyCase, keyLet, keyLetStar, keyLetrec, keyQuasiquote, keyUnquote, keyUnquoteSplicing, keyDefine, keyElse, keyArrow, keySet, keyBegin, keyMake, keyStyle, keyWithMode, keyDefineUnit, keyElement, keyDefault, keyRoot, keyId, keyMode, keyDeclareInitialValue, keyDeclareCharacteristic, keyDeclareFlowObjectClass, keyDeclareCharCharacteristicAndProperty, keyDeclareReferenceValueType, keyDeclareDefaultLanguage, keyDeclareCharProperty, keyDefinePageModel, keyDefineColumnSetModel, keyDefineLanguage, keyAddCharProperties, keyUse, keyLabel, keyContentMap, keyIsKeepWithPrevious, keyIsKeepWithNext, keySpaceBefore, keySpaceAfter, keyLeftHeader, keyCenterHeader, keyRightHeader, keyLeftFooter, keyCenterFooter, keyRightFooter, keyDestination, keyType, keyCoalesceId, keyIsDisplay, keyScale, keyMaxWidth, keyMaxHeight, keyEntitySystemId, keyNotationSystemId, keyPositionPointX, keyPositionPointY, keyEscapementDirection, keyBreakBeforePriority, keyBreakAfterPriority, keyOrientation, keyLength, keyChar, keyGlyphId, keyIsSpace, keyIsRecordEnd, keyIsInputTab, keyIsInputWhitespace, keyIsPunct, keyIsDropAfterLineBreak, keyIsDropUnlessBeforeLineBreak, keyMathClass, keyMathFontPosture, keyScript, keyStretchFactor, keyKeep, keyBreakBefore, keyBreakAfter, keyIsMayViolateKeepBefore, keyIsMayViolateKeepAfter, keyBeforeRowBorder, keyAfterRowBorder, keyBeforeColumnBorder, keyAfterColumnBorder, keyColumnNumber, keyRowNumber, keyNColumnsSpanned, keyNRowsSpanned, keyWidth, keyIsStartsRow, keyIsEndsRow, keyTableWidth, keyMultiModes, keyData, keyMin, keyMax, keyIsConditional, keyPriority, keyGridNRows, keyGridNColumns, keyRadical, keyNull, keyIsRcs, keyParent, keyActive, keyAttributes, keyChildren, keyRepeat, keyPosition, keyOnly, keyClass, keyImportance, keyDeclareClassAttribute, keyDeclareIdAttribute, keyDeclareFlowObjectMacro, keyOrElement, keyPositionPreference, keyArchitecture }; enum { lastSyntacticKey = keyWithMode }; Identifier(const StringC &name); // Return 0 is value can't yet be computed. ELObj *computeValue(bool force, Interpreter &) const; bool syntacticKey(SyntacticKey &) const; void setSyntacticKey(SyntacticKey); bool defined(unsigned &, Location &) const; void setDefinition(Owner &, unsigned part, const Location &); void setValue(ELObj *, unsigned defPart = unsigned(-1)); bool evaluated() const; const ConstPtr &inheritedC() const; bool inheritedCDefined(unsigned &, Location &) const; void setInheritedC(const ConstPtr &); void setInheritedC(const ConstPtr &, unsigned part, const Location &); FlowObj *flowObj() const; bool flowObjDefined(unsigned &, Location &) const; void setFlowObj(FlowObj *); void setFlowObj(FlowObj *, unsigned part, const Location &); private: unsigned defPart_; Owner def_; InsnPtr insn_; // Value in top-level environment. ELObj *value_; // must be permanent FlowObj *flowObj_; // prototype FlowObj with this name unsigned flowObjPart_; Location flowObjLoc_; Location defLoc_; SyntacticKey syntacticKey_; bool beingComputed_; ConstPtr inheritedC_; unsigned inheritedCPart_; Location inheritedCLoc_; }; class Unit : public Named { public: Unit(const StringC &); void setValue(long); void setValue(double); bool defined(unsigned &, Location &) const; // return 0 if it can't be done ELObj *resolveQuantity(bool force, Interpreter &, double val, int unitExp); ELObj *resolveQuantity(bool force, Interpreter &, long val, int valExp); void setDefinition(Owner &, unsigned part, const Location &); private: void tryCompute(bool force, Interpreter &); static bool scale(long val, int valExp, long num, long &result); unsigned defPart_; Location defLoc_; Owner def_; InsnPtr insn_; enum { notComputed, beingComputed, computedExact, computedInexact, computedError } computed_; union { long exact_; double inexact_; }; int dim_; }; class ELObjDynamicRoot : public Collector::DynamicRoot { public: ELObjDynamicRoot(Collector &c, ELObj *obj = 0) : Collector::DynamicRoot(c), obj_(obj) { } void operator=(ELObj *obj) { obj_ = obj; } operator ELObj *() const { return obj_; } private: void trace(Collector &) const; ELObj *obj_; }; class Interpreter : public Collector, public Pattern::MatchContext, public NumberCache, public Messenger { public: enum PortName { portNumerator, portDenominator, portPreSup, portPreSub, portPostSup, portPostSub, portMidSup, portMidSub, portOverMark, portUnderMark, portOpen, portClose, portDegree, portOperator, portLowerLimit, portUpperLimit, portHeader, portFooter }; enum { nPortNames = portFooter + 1 }; Interpreter(GroveManager *, Messenger *, int unitsPerInch, bool debugMode, bool dsssl2, const FOTBuilder::Extension *); void defineVariable(const StringC &); void endPart(); FalseObj *makeFalse(); TrueObj *makeTrue(); NilObj *makeNil(); SymbolObj *makeSymbol(const StringC &); KeywordObj *makeKeyword(const StringC &); IntegerObj *makeInteger(long n); ErrorObj *makeError(); UnspecifiedObj *makeUnspecified(); PairObj *makePair(ELObj *, ELObj *); ELObj *convertGlyphId(const Char *, size_t, const Location &); bool isError(const ELObj *) const; bool isUnspecified(const ELObj *) const; CharObj *makeChar(Char); ELObj *makeLengthSpec(const FOTBuilder::LengthSpec &); AddressObj *makeAddressNone(); NodeListObj *makeEmptyNodeList(); void dispatchMessage(Message &); void dispatchMessage(const Message &); Identifier *lookup(const StringC &); Unit *lookupUnit(const StringC &); FunctionObj *lookupExternalProc(const StringC &); int unitsPerInch() const; unsigned currentPartIndex() const; void compile(); static StringC makeStringC(const char *); SymbolObj *portName(PortName); ELObj *cValueSymbol(FOTBuilder::Symbol); // Map of LexCategory XcharMap lexCategory_; static void normalizeGeneralName(const NodePtr &, StringC &); GroveManager *groveManager() const; StyleObj *initialStyle() const; StyleObj *borderTrueStyle() const; StyleObj *borderFalseStyle() const; bool convertBooleanC(ELObj *, const Identifier *, const Location &, bool &); bool convertPublicIdC(ELObj *, const Identifier *, const Location &, FOTBuilder::PublicId &); bool convertStringC(ELObj *, const Identifier *, const Location &, StringC &); bool convertLengthC(ELObj *, const Identifier *, const Location &, FOTBuilder::Length &); bool convertLengthSpecC(ELObj *, const Identifier *, const Location &, FOTBuilder::LengthSpec &); bool convertLetter2C(ELObj *, const Identifier *, const Location &, FOTBuilder::Letter2 &); bool convertOptLengthSpecC(ELObj *, const Identifier *, const Location &, FOTBuilder::OptLengthSpec &); bool convertCharC(ELObj *, const Identifier *, const Location &, Char &); bool convertColorC(ELObj *, const Identifier *, const Location &, ColorObj *&); bool convertOptColorC(ELObj *, const Identifier *, const Location &, ColorObj *&); // FIXME allow inexact value bool convertIntegerC(ELObj *, const Identifier *, const Location &, long &); bool convertOptPositiveIntegerC(ELObj *, const Identifier *, const Location &, long &); bool convertRealC(ELObj *, const Identifier *, const Location &, double &); bool convertEnumC(const FOTBuilder::Symbol *, size_t, ELObj *, const Identifier *, const Location &, FOTBuilder::Symbol &); bool convertEnumC(ELObj *, const Identifier *, const Location &, FOTBuilder::Symbol &); void invalidCharacteristicValue(const Identifier *ident, const Location &loc); bool convertLengthSpec(ELObj *, FOTBuilder::LengthSpec &); bool convertToPattern(ELObj *, const Location &, Pattern &); const ConstPtr &tableBorderC() const; const ConstPtr &cellBeforeRowBorderC() const; const ConstPtr &cellAfterRowBorderC() const; const ConstPtr &cellBeforeColumnBorderC() const; const ConstPtr &cellAfterColumnBorderC() const; const ConstPtr &fractionBarC() const; const char *storePublicId(const Char *, size_t, const Location &); unsigned allocGlyphSubstTableUniqueId(); bool lookupNodeProperty(const StringC &, ComponentName::Id &); bool debugMode() const; bool dsssl2() const; void setNodeLocation(const NodePtr &); void makeReadOnly(ELObj *); ProcessingMode *lookupProcessingMode(const StringC &); ProcessingMode *initialProcessingMode(); void addClassAttributeName(const StringC &name); void addIdAttributeName(const StringC &name); void installInitialValue(Identifier *, Owner &); void installExtensionInheritedC(Identifier *, const StringC &, const Location &); void installExtensionFlowObjectClass(Identifier *, const StringC &, const Location &); // Return 0 if an invalid number. ELObj *convertNumber(const StringC &, int radix = 10); bool convertCharName(const StringC &str, Char &c) const; enum LexCategory { lexLetter, // a - z A - Z lexOtherNameStart, // lexDigit, // 0-9 lexOtherNumberStart, // -+. lexDelimiter, // ;()" lexWhiteSpace, lexOther }; LexCategory lexCategory(Xchar); private: Interpreter(const Interpreter &); // undefined void operator=(const Interpreter &); // undefined void installSyntacticKeys(); void installPortNames(); void installCValueSymbols(); void installPrimitives(); void installPrimitive(const char *s, PrimitiveObj *value); void installXPrimitive(const char *s, PrimitiveObj *value); void installUnits(); void installCharNames(); void installInheritedCs(); void installInheritedC(const char *, InheritedC *); void installInheritedCProc(const Identifier *); void installFlowObjs(); void installSdata(); void installNodeProperties(); void compileInitialValues(); bool sdataMap(GroveString, GroveString, GroveChar &) const; static bool convertUnicodeCharName(const StringC &str, Char &c); bool convertToPattern(ELObj *obj, const Location &loc, bool isChild, IList &list); bool patternAddAttributeQualifiers(ELObj *obj, const Location &loc, Pattern::Element &elem); enum { convertAllowBoolean = 01, convertAllowSymbol = 02, convertAllowNumber = 04 }; ELObj *convertFromString(ELObj *, unsigned hints, const Location &); ELObj *convertNumberFloat(const StringC &); bool scanSignDigits(const StringC &str, size_t &i, int &n); Unit *scanUnit(const StringC &str, size_t i, int &unitExp); NilObj *theNilObj_; TrueObj *theTrueObj_; FalseObj *theFalseObj_; ErrorObj *theErrorObj_; UnspecifiedObj *theUnspecifiedObj_; typedef PointerTable SymbolTable; SymbolTable symbolTable_; NamedTable identTable_; NamedTable unitTable_; HashTable externalProcTable_; Messenger *messenger_; const FOTBuilder::Extension *extensionTable_; unsigned partIndex_; int unitsPerInch_; unsigned nInheritedC_; GroveManager *groveManager_; ProcessingMode initialProcessingMode_; NamedTable processingModeTable_; SymbolObj *portNames_[nPortNames]; ELObj *cValueSymbols_[FOTBuilder::nSymbols]; HashTable namedCharTable_; Vector initialValueNames_; NCVector > initialValueValues_; size_t currentPartFirstInitialValue_; StyleObj *initialStyle_; StyleObj *borderTrueStyle_; StyleObj *borderFalseStyle_; ConstPtr tableBorderC_; ConstPtr cellBeforeRowBorderC_; ConstPtr cellAfterRowBorderC_; ConstPtr cellBeforeColumnBorderC_; ConstPtr cellAfterColumnBorderC_; ConstPtr fractionBarC_; class StringSet { public: StringSet(); const char *store(String &); static unsigned long hash(const String &); static inline const String &key(const String &str) { return str; } private: OwnerTable, String, StringSet, StringSet> table_; }; StringSet publicIds_; HashTable sdataEntityNameTable_; unsigned nextGlyphSubstTableUniqueId_; AddressObj *addressNoneObj_; NodeListObj *emptyNodeListObj_; HashTable nodePropertyTable_; bool debugMode_; bool dsssl2_; friend class Identifier; }; inline ErrorObj *Interpreter::makeError() { return theErrorObj_; } inline bool Interpreter::isError(const ELObj *obj) const { return obj == theErrorObj_; } inline bool Interpreter::isUnspecified(const ELObj *obj) const { return obj == theUnspecifiedObj_; } inline FalseObj *Interpreter::makeFalse() { return theFalseObj_; } inline TrueObj *Interpreter::makeTrue() { return theTrueObj_; } inline NilObj *Interpreter::makeNil() { return theNilObj_; } inline UnspecifiedObj *Interpreter::makeUnspecified() { return theUnspecifiedObj_; } inline IntegerObj *Interpreter::makeInteger(long n) { return new (*this) IntegerObj(n); } inline PairObj *Interpreter::makePair(ELObj *car, ELObj *cdr) { return new (*this) PairObj(car, cdr); } inline CharObj *Interpreter::makeChar(Char c) { return new (*this) CharObj(c); } inline AddressObj *Interpreter::makeAddressNone() { return addressNoneObj_; } inline NodeListObj *Interpreter::makeEmptyNodeList() { return emptyNodeListObj_; } inline ELObj *Interpreter::cValueSymbol(FOTBuilder::Symbol sym) { return cValueSymbols_[sym]; } inline SymbolObj *Interpreter::portName(PortName i) { return portNames_[i]; } inline ProcessingMode *Interpreter::initialProcessingMode() { return &initialProcessingMode_; } inline int Interpreter::unitsPerInch() const { return unitsPerInch_; } inline unsigned Interpreter::currentPartIndex() const { return partIndex_; } inline KeywordObj *Interpreter::makeKeyword(const StringC &str) { return new (*this) KeywordObj(lookup(str)); } inline StyleObj *Interpreter::initialStyle() const { return initialStyle_; } inline StyleObj *Interpreter::borderTrueStyle() const { return borderTrueStyle_; } inline StyleObj *Interpreter::borderFalseStyle() const { return borderFalseStyle_; } inline GroveManager *Interpreter::groveManager() const { return groveManager_; } inline const ConstPtr &Interpreter::tableBorderC() const { return tableBorderC_; } inline const ConstPtr &Interpreter::cellBeforeRowBorderC() const { return cellBeforeRowBorderC_; } inline const ConstPtr &Interpreter::cellAfterRowBorderC() const { return cellAfterRowBorderC_; } inline const ConstPtr &Interpreter::cellBeforeColumnBorderC() const { return cellBeforeColumnBorderC_; } inline const ConstPtr &Interpreter::cellAfterColumnBorderC() const { return cellAfterColumnBorderC_; } inline const ConstPtr &Interpreter::fractionBarC() const { return fractionBarC_; } inline FunctionObj *Interpreter::lookupExternalProc(const StringC &pubid) { FunctionObj *const *func = externalProcTable_.lookup(pubid); return func ? *func : 0; } inline unsigned Interpreter::allocGlyphSubstTableUniqueId() { return nextGlyphSubstTableUniqueId_++; } inline bool Interpreter::debugMode() const { return debugMode_; } inline bool Interpreter::dsssl2() const { return dsssl2_; } inline void Interpreter::makeReadOnly(ELObj *obj) { if (dsssl2()) Collector::makeReadOnly(obj); } inline void Interpreter::addClassAttributeName(const StringC &name) { classAttributeNames_.push_back(name); } inline void Interpreter::addIdAttributeName(const StringC &name) { idAttributeNames_.push_back(name); } inline Interpreter::LexCategory Interpreter::lexCategory(Xchar c) { return LexCategory(lexCategory_[c]); } inline bool Identifier::syntacticKey(SyntacticKey &key) const { if (syntacticKey_ == notKey) return 0; key = syntacticKey_; return 1; } inline void Identifier::setSyntacticKey(SyntacticKey key) { syntacticKey_ = key; } inline bool Identifier::evaluated() const { return value_ != 0; } inline const ConstPtr &Identifier::inheritedC() const { return inheritedC_; } inline bool Identifier::inheritedCDefined(unsigned &part, Location &loc) const { if (inheritedC_.isNull()) return 0; part = inheritedCPart_; loc = inheritedCLoc_; return 1; } inline void Identifier::setInheritedC(const ConstPtr &ic) { inheritedC_ = ic; inheritedCPart_ = unsigned(-1); } inline void Identifier::setInheritedC(const ConstPtr &ic, unsigned part, const Location &loc) { inheritedC_ = ic; inheritedCPart_ = part; inheritedCLoc_ = loc; } inline FlowObj *Identifier::flowObj() const { return flowObj_; } inline bool Identifier::flowObjDefined(unsigned &part, Location &loc) const { if (!flowObj_) return 0; part = flowObjPart_; loc = flowObjLoc_; return 1; } inline void Identifier::setFlowObj(FlowObj *fo) { flowObj_ = fo; flowObjPart_ = unsigned(-1); } inline void Identifier::setFlowObj(FlowObj *fo, unsigned part, const Location &loc) { flowObj_ = fo; flowObjPart_ = part; flowObjLoc_ = loc; } #ifdef DSSSL_NAMESPACE } #endif #endif /* not Interpreter_INCLUDED */ jade-1.2.1/style/InterpreterMessages.h100444 764 764 15671 6604613156 15550 0ustar jjcjjc// This file was automatically generated from style/InterpreterMessages.msg by msggen.pl. #ifndef InterpreterMessages_INCLUDED #define InterpreterMessages_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct InterpreterMessages { // 0 static const MessageType0 unexpectedEof; // 1 static const MessageType0 invalidChar; // 2 static const MessageType0 unknownHash; // 3 static const MessageType1 unknownNamedConstant; // 4 static const MessageType1 unexpectedToken; // 5 static const MessageType0 unterminatedString; // 6 static const MessageType0 missingCloseParen; // 7 static const MessageType1 invalidNumber; // 8 static const MessageType1 invalidAfiiGlyphId; // 9 static const MessageType1 callNonFunction; // 10 static const MessageType0 tooManyArgs; // 11 static const MessageType0 oddKeyArgs; // 12 static const MessageType0 missingArg; // 13 static const MessageType1 syntacticKeywordAsVariable; // 14 static const MessageType1 undefinedVariableReference; // 15 static const MessageType0 badCharName; // 16 static const MessageType1 keywordNotAllowedCall; // 17 static const MessageType1 symbolRequired; // 18 static const MessageType1 unknownTopLevelForm; // 19 static const MessageType1 badModeForm; // 20 static const MessageType1L duplicateDefinition; // 22 static const MessageType1 identifierLoop; // 23 static const MessageType0 outOfRange; // 24 static const MessageType1 unitLoop; // 25 static const MessageType1 badUnitDefinition; // 26 static const MessageType1L duplicateUnitDefinition; // 28 static const MessageType1 undefinedQuantity; // 29 static const MessageType0 incompatibleDimensions; // 30 static const MessageType3 notABoolean; // 31 static const MessageType3 notAPair; // 32 static const MessageType3 notAList; // 33 static const MessageType3 notASymbol; // 34 static const MessageType3 notAString; // 35 static const MessageType3 notAStringOrSymbol; // 36 static const MessageType3 notASymbolOrString; // 37 static const MessageType3 notAChar; // 38 static const MessageType3 notAStyle; // 39 static const MessageType3 notAnExactInteger; // 40 static const MessageType3 notAQuantity; // 41 static const MessageType3 notAColorSpace; // 42 static const MessageType3 notANumber; // 43 static const MessageType3 notASosofo; // 44 static const MessageType3 notAnOptSingletonNode; // 45 static const MessageType3 notASingletonNode; // 46 static const MessageType3 notANodeList; // 47 static const MessageType3 notANamedNodeList; // 48 static const MessageType3 notALengthSpec; // 49 static const MessageType3 notAQuantityOrLengthSpec; // 50 static const MessageType3 notAPriority; // 51 static const MessageType3 notAPattern; // 52 static const MessageType3 notAnAddress; // 53 static const MessageType3 notAGlyphId; // 54 static const MessageType3 notAGlyphSubstTable; // 55 static const MessageType3 notAGlyphIdPairList; // 56 static const MessageType3 notAProcedure; // 57 static const MessageType3 notAVector; // 58 static const MessageType0L duplicateRootRule; // 60 static const MessageType1L duplicateInitialValue; // 62 static const MessageType1 invalidStyleKeyword; // 63 static const MessageType2 invalidMakeKeyword; // 64 static const MessageType1 unknownFlowObjectClass; // 65 static const MessageType1 atomicContent; // 66 static const MessageType0 labelNotASymbol; // 67 static const MessageType1 badConnection; // 68 static const MessageType0 badContentMap; // 69 static const MessageType1 contentMapBadPort; // 70 static const MessageType1 invalidCharacteristicValue; // 71 static const MessageType0 condFail; // 72 static const MessageType1 caseFail; // 73 static const MessageType1 caseElse; // 74 static const MessageType0 caseUnresolvedQuantities; // 75 static const MessageType1 errorProc; // 76 static const MessageType0 divideBy0; // 77 static const MessageType1 invalidKeyArg; // 78 static const MessageType0 keyArgsNotKey; // 79 static const MessageType0 oneBody; // 80 static const MessageType0 specNotArc; // 81 static const MessageType0 noStyleSpec; // 82 static const MessageType1 unknownCharName; // 83 static const MessageType0 noCurrentNode; // 84 static const MessageType0 noCurrentProcessingMode; // 85 static const MessageType0 invalidRadix; // 86 static const MessageType0 sosofoContext; // 87 static const MessageType0 styleContext; // 88 static const MessageType0 notInCharacteristicValue; // 89 static const MessageType1 expressionNotImplemented; // 90 static const MessageType0 RGBColorArgCount; // 91 static const MessageType0 RGBColorArgType; // 92 static const MessageType0 RGBColorArgRange; // 93 static const MessageType1 unknownColorSpaceFamily; // 94 static const MessageType0 deviceRGBColorSpaceNoArgs; // 95 static const MessageType1 notABuiltinInheritedC; // 96 static const MessageType1 invalidNumberFormat; // 97 static const MessageType1 invalidPublicIdChar; // 98 static const MessageType1 debug; // 99 static const MessageType0 useLoop; // 100 static const MessageType1 missingPart; // 101 static const MessageType0 noParts; // 102 static const MessageType0 tableCellOutsideTable; // 103 static const MessageType0 tableRowOutsideTable; // 104 static const MessageType1 noNodePropertyValue; // 105 static const MessageType0 returnNotNodeList; // 106 static const MessageType0 stackTrace; // 107 static const MessageType1 stackTraceEllipsis; // 108 static const MessageType0 processNodeLoop; // 109 static const MessageType0 spliceNotList; // 110 static const MessageType0 readOnly; // 111 static const MessageType1 topLevelAssignment; // 112 static const MessageType0 continuationDead; // 113 static const MessageType0 patternEmptyGi; // 114 static const MessageType0 patternNotList; // 115 static const MessageType1 patternBadGi; // 116 static const MessageType1 patternBadMember; // 117 static const MessageType0 patternMissingQualifierValue; // 118 static const MessageType1 patternUnknownQualifier; // 119 static const MessageType2 patternBadQualifierValue; // 120 static const MessageType0 patternChildRepeat; // 121 static const MessageType0 patternBadAttributeQualifier; // 122 static const MessageType1L ambiguousStyle; // 124 static const MessageType0 ambiguousMatch; // 125 static const MessageType1 uninitializedVariableReference; // 126 static const MessageType1 actualLoop; // 127 static const MessageType1L duplicateCharacteristic; // 129 static const MessageType1L duplicateFlowObjectClass; // 131 static const MessageType1 undefinedMode; }; #ifdef SP_NAMESPACE } #endif #endif /* not InterpreterMessages_INCLUDED */ jade-1.2.1/style/jade_version.h100444 764 764 43 6607562376 14142 0ustar jjcjjc#define JADE_VERSION SP_T("1.2.1") jade-1.2.1/style/MacroFlowObj.h100444 764 764 4127 6604607716 14060 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file copying.txt for copying permission. #ifndef MacroFlowObj_INCLUDED #define MacroFlowObj_INCLUDED 1 #include "SosofoObj.h" #include "Insn.h" #include "Resource.h" #include "Ptr.h" #include "Vector.h" #include "NCVector.h" #include "Owner.h" #include "Expression.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class ProcessContext; class Identifier; class Interpreter; class MacroFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } class Definition : public Resource { public: Definition(Vector &, NCVector > &, const Identifier *contentsId, Owner &); void process(ProcessContext &, MacroFlowObj *); bool isCompound() const; const Vector &nics() const; private: Definition(const Definition &); // undefined void operator=(const Definition &); // undefined void compile(Interpreter &); Vector charics_; NCVector > charicInits_; const Identifier *contentsId_; Owner body_; InsnPtr code_; }; MacroFlowObj(Vector &, NCVector > &, const Identifier *contentsId, Owner &); MacroFlowObj(const MacroFlowObj &); ~MacroFlowObj(); FlowObj *copy(Collector &) const; CompoundFlowObj *asCompoundFlowObj(); bool hasNonInheritedC(const Identifier *) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); void traceSubObjects(Collector &) const; void processInner(ProcessContext &); void unpack(VM &); private: void operator=(const MacroFlowObj &); // undefined Ptr def_; ELObj **charicVals_; }; inline bool MacroFlowObj::Definition::isCompound() const { return contentsId_ != 0; } inline const Vector &MacroFlowObj::Definition::nics() const { return charics_; } #ifdef DSSSL_NAMESPACE } #endif #endif /* not MacroFlowObj_INCLUDED */ jade-1.2.1/style/NumberCache.h100444 764 764 2441 6604607716 13705 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef NumberCache_INCLUDED #define NumberCache_INCLUDED 1 #include "Boolean.h" #include "Node.h" #include "NamedTable.h" #include "StringC.h" #include "NCVector.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class NumberCache { public: NumberCache(); // Return 0 if argument is not a node. bool childNumber(const NodePtr &node, unsigned long &); // Number of elements before or equal to node whose gi is equal to s. unsigned long elementNumber(const NodePtr &node, const StringC &s); // Number of elements before or equal to node whose gi is equal to s, // and that are after the last element before node with gi reset. unsigned long elementNumberAfter(const NodePtr &, const StringC &s, const StringC &reset); private: struct Entry : Named { Entry(const StringC &); NodePtr node; unsigned long num; }; // A separate cache for each level of the tree. NCVector > childNumbers_; struct ElementEntry : Entry { ElementEntry(const StringC &); NodePtr subNode; unsigned long subNum; }; NamedTable elementNumbers_; friend struct ElementEntry; }; #ifdef DSSSL_NAMESPACE } #endif #endif /* not NumberCache_INCLUDED */ jade-1.2.1/style/primitive.h100444 764 764 21342 6606574462 13565 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. PRIMITIVE(Cons, "cons", 2, 0, 0) PRIMITIVE(List, "list", 0, 0, 1) PRIMITIVE(IsNull, "null?", 1, 0, 0) PRIMITIVE(IsList, "list?", 1, 0, 0) PRIMITIVE(IsPair, "pair?", 1, 0, 0) PRIMITIVE(IsEqual, "equal?", 2, 0, 0) PRIMITIVE(Car, "car", 1, 0, 0) PRIMITIVE(Cdr, "cdr", 1, 0, 0) PRIMITIVE(Length, "length", 1, 0, 0) PRIMITIVE(Append, "append", 0, 0, 1) PRIMITIVE(Reverse, "reverse", 1, 0, 0) PRIMITIVE(ListTail, "list-tail", 2, 0, 0) PRIMITIVE(ListRef, "list-ref", 2, 0, 0) PRIMITIVE(Member, "member", 2, 0, 0) PRIMITIVE(Not, "not", 1, 0, 0) PRIMITIVE(IsSymbol, "symbol?", 1, 0, 0) PRIMITIVE(IsKeyword, "keyword?", 1, 0, 0) PRIMITIVE(IsBoolean, "boolean?", 1, 0, 0) PRIMITIVE(IsProcedure, "procedure?", 1, 0, 0) PRIMITIVE(IsString, "string?", 1, 0, 0) PRIMITIVE(IsInteger, "integer?", 1, 0, 0) PRIMITIVE(IsReal, "real?", 1, 0, 0) PRIMITIVE(IsNumber, "number?", 1, 0, 0) PRIMITIVE(IsQuantity, "quantity?", 1, 0, 0) PRIMITIVE(IsChar, "char?", 1, 0, 0) PRIMITIVE(IsCharEqual, "char=?", 2, 0, 0) PRIMITIVE(String, "string", 0, 0, 1) PRIMITIVE(SymbolToString, "symbol->string", 1, 0, 0) PRIMITIVE(StringToSymbol, "string->symbol", 1, 0, 0) PRIMITIVE(StringLength, "string-length", 1, 0, 0) PRIMITIVE(IsStringEqual, "string=?", 2, 0, 0) PRIMITIVE(StringAppend, "string-append", 0, 0, 1) PRIMITIVE(StringRef, "string-ref", 2, 0, 0) PRIMITIVE(Substring, "substring", 3, 0, 0) PRIMITIVE(Equal, "=", 0, 0, 1) PRIMITIVE(Plus, "+", 0, 0, 1) PRIMITIVE(Minus, "-", 1, 0, 1) PRIMITIVE(Multiply, "*", 0, 0, 1) PRIMITIVE(Divide, "/", 1, 0, 1) PRIMITIVE(Quotient, "quotient", 2, 0, 0) PRIMITIVE(Remainder, "remainder", 2, 0, 0) PRIMITIVE(Modulo, "modulo", 2, 0, 0) PRIMITIVE(Less, "<", 0, 0, 1) PRIMITIVE(Greater, ">", 0, 0, 1) PRIMITIVE(LessEqual, "<=", 0, 0, 1) PRIMITIVE(GreaterEqual, ">=", 0, 0, 1) PRIMITIVE(Min, "min", 1, 0, 1) PRIMITIVE(Max, "max", 1, 0, 1) PRIMITIVE(Floor, "floor", 1, 0, 0) PRIMITIVE(Ceiling, "ceiling", 1, 0, 0) PRIMITIVE(Truncate, "truncate", 1, 0, 0) PRIMITIVE(Round, "round", 1, 0, 0) PRIMITIVE(Abs, "abs", 1, 0, 0) PRIMITIVE(Sqrt, "sqrt", 1, 0, 0) PRIMITIVE(Time, "time", 0, 0, 0) PRIMITIVE(TimeToString, "time->string", 1, 1, 0) PRIMITIVE(CharProperty, "char-property", 2, 1, 0) PRIMITIVE(Literal, "literal", 0, 0, 1) PRIMITIVE(ProcessChildren, "process-children", 0, 0, 0) PRIMITIVE(ProcessChildrenTrim, "process-children-trim", 0, 0, 0) PRIMITIVE(SosofoAppend, "sosofo-append", 0, 0, 1) PRIMITIVE(NextMatch, "next-match", 0, 1, 0) PRIMITIVE(EmptySosofo, "empty-sosofo", 0, 0, 0) PRIMITIVE(SosofoLabel, "sosofo-label", 2, 0, 0) PRIMITIVE(SosofoDiscardLabeled, "sosofo-discard-labeled", 2, 0, 0) PRIMITIVE(IsSosofo, "sosofo?", 1, 0, 0) PRIMITIVE(IsStyle, "style?", 1, 0, 0) PRIMITIVE(MergeStyle, "merge-style", 0, 0, 1) PRIMITIVE(ProcessElementWithId, "process-element-with-id", 1, 0, 0) PRIMITIVE(ProcessFirstDescendant, "process-first-descendant", 0, 0, 1) PRIMITIVE(ProcessMatchingChildren, "process-matching-children", 0, 0, 1) PRIMITIVE(ProcessNodeList, "process-node-list", 1, 0, 0) PRIMITIVE(CurrentNodePageNumberSosofo, "current-node-page-number-sosofo", 0, 0, 0) PRIMITIVE(PageNumberSosofo, "page-number-sosofo", 0, 0, 0) PRIMITIVE(FormatNumber, "format-number", 2, 0, 0) PRIMITIVE(FormatNumberList, "format-number-list", 3, 0, 0) PRIMITIVE(Error, "error", 1, 0, 0) PRIMITIVE(ExternalProcedure, "external-procedure", 1, 0, 0) PRIMITIVE(StringToNumber, "string->number", 1, 1, 0) PRIMITIVE(NumberToString, "number->string", 1, 1, 0) PRIMITIVE(DisplaySize, "display-size", 0, 0, 0) PRIMITIVE(TableUnit, "table-unit", 1, 0, 0) PRIMITIVE(IsDisplaySpace, "display-space?", 1, 0, 0) PRIMITIVE(DisplaySpace, "display-space", 1, 0, 1) PRIMITIVE(IsInlineSpace, "inline-space?", 1, 0, 0) PRIMITIVE(InlineSpace, "inline-space", 1, 0, 1) PRIMITIVE(IsColor, "color?", 1, 0, 0) PRIMITIVE(IsColorSpace, "color-space?", 1, 0, 0) PRIMITIVE(Color, "color", 1, 0, 1) PRIMITIVE(ColorSpace, "color-space", 1, 0, 1) PRIMITIVE(IsAddress, "address?", 1, 0, 0) PRIMITIVE(IsAddressLocal, "address-local?", 1, 0, 0) PRIMITIVE(IsAddressVisited, "address-visited?", 1, 0, 0) PRIMITIVE(CurrentNodeAddress, "current-node-address", 0, 0, 0) PRIMITIVE(IdrefAddress, "idref-address", 1, 0, 0) PRIMITIVE(EntityAddress, "entity-address", 1, 0, 0) PRIMITIVE(SgmlDocumentAddress, "sgml-document-address", 2, 0, 0) PRIMITIVE(NodeListAddress, "node-list-address", 1, 0, 0) PRIMITIVE(HytimeLinkend, "hytime-linkend", 0, 0, 0) PRIMITIVE(CharScriptCase, "char-script-case", 1, 0, 1) PRIMITIVE(IsGlyphId, "glyph-id?", 1, 0, 0) PRIMITIVE(GlyphId, "glyph-id", 1, 0, 0) PRIMITIVE(IsGlyphSubstTable, "glyph-subst-table?", 1, 0, 0) PRIMITIVE(GlyphSubstTable, "glyph-subst-table", 1, 0, 0) PRIMITIVE(GlyphSubst, "glyph-subst", 2, 0, 0) // Core query language PRIMITIVE(CurrentNode, "current-node", 0, 0, 0) PRIMITIVE(IsNodeListEmpty, "node-list-empty?", 1, 0, 0) PRIMITIVE(IsNodeList, "node-list?", 1, 0, 0) PRIMITIVE(NodeListError, "node-list-error", 2, 0, 0) PRIMITIVE(Gi, "gi", 0, 1, 0) PRIMITIVE(FirstChildGi, "first-child-gi", 0, 1, 0) PRIMITIVE(Id, "id", 0, 1, 0) PRIMITIVE(Parent, "parent", 0, 1, 0) PRIMITIVE(Ancestor, "ancestor", 1, 1, 0) PRIMITIVE(AttributeString, "attribute-string", 1, 1, 0) PRIMITIVE(InheritedAttributeString, "inherited-attribute-string", 1, 1, 0) PRIMITIVE(InheritedElementAttributeString, "inherited-element-attribute-string", 2, 1, 0) PRIMITIVE(IsFirstSibling, "first-sibling?", 0, 1, 0) PRIMITIVE(IsAbsoluteFirstSibling, "absolute-first-sibling?", 0, 1, 0) PRIMITIVE(IsLastSibling, "last-sibling?", 0, 1, 0) PRIMITIVE(IsAbsoluteLastSibling, "absolute-last-sibling?", 0, 1, 0) PRIMITIVE(IsHaveAncestor, "have-ancestor?", 1, 1, 0) PRIMITIVE(ChildNumber, "child-number", 0, 1, 0) PRIMITIVE(AncestorChildNumber, "ancestor-child-number", 1, 1, 0) PRIMITIVE(HierarchicalNumber, "hierarchical-number", 1, 1, 0) PRIMITIVE(HierarchicalNumberRecursive, "hierarchical-number-recursive", 1, 1, 0) PRIMITIVE(ElementNumber, "element-number", 0, 1, 0) PRIMITIVE(ElementNumberList, "element-number-list", 1, 1, 0) PRIMITIVE(EntitySystemId, "entity-system-id", 1, 1, 0) PRIMITIVE(EntityPublicId, "entity-public-id", 1, 1, 0) PRIMITIVE(EntityGeneratedSystemId, "entity-generated-system-id", 1, 1, 0) PRIMITIVE(EntityText, "entity-text", 1, 1, 0) PRIMITIVE(EntityNotation, "entity-notation", 1, 1, 0) PRIMITIVE(EntityType, "entity-type", 1, 1, 0) PRIMITIVE(EntityAttributeString, "entity-attribute-string", 2, 1, 0) PRIMITIVE(NotationSystemId, "notation-system-id", 1, 1, 0) PRIMITIVE(NotationPublicId, "notation-public-id", 1, 1, 0) PRIMITIVE(NotationGeneratedSystemId, "notation-generated-system-id", 1, 1, 0) PRIMITIVE(GeneralNameNormalize, "general-name-normalize", 1, 1, 0) PRIMITIVE(EntityNameNormalize, "entity-name-normalize", 1, 1, 0) // Some non-core query language PRIMITIVE(NodeListFirst, "node-list-first", 1, 0, 0) PRIMITIVE(NodeListRest, "node-list-rest", 1, 0, 0) PRIMITIVE(NodeList, "node-list", 0, 0, 1) PRIMITIVE(Children, "children", 1, 0, 0) PRIMITIVE(Follow, "follow", 1, 0, 0) PRIMITIVE(Preced, "preced", 1, 0, 0) PRIMITIVE(Descendants, "descendants", 1, 0, 0) PRIMITIVE(Attributes, "attributes", 1, 0, 0) PRIMITIVE(NodeListNoOrder, "node-list-no-order", 1, 0, 0) PRIMITIVE(IsNodeListEqual, "node-list=?", 2, 0, 0) PRIMITIVE(IsNamedNodeList, "named-node-list?", 1, 0, 0) PRIMITIVE(NamedNode, "named-node", 2, 0, 0) PRIMITIVE(NamedNodeListNames, "named-node-list-names", 1, 0, 0) PRIMITIVE(NamedNodeListNormalize, "named-node-list-normalize", 3, 0, 0) PRIMITIVE(SelectElements, "select-elements", 2, 0, 0) PRIMITIVE(Data, "data", 1, 0, 0) PRIMITIVE(ElementWithId, "element-with-id", 1, 1, 0) PRIMITIVE(EmptyNodeList, "empty-node-list", 0, 0, 0) PRIMITIVE(NodeProperty, "node-property", 2, 0, 1) PRIMITIVE(SelectByClass, "select-by-class", 2, 0, 0) PRIMITIVE(NodeListMap, "node-list-map", 2, 0, 0) PRIMITIVE(NodeListRef, "node-list-ref", 2, 0, 0) PRIMITIVE(NodeListReverse, "node-list-reverse", 1, 0, 0) PRIMITIVE(NodeListLength, "node-list-length", 1, 0, 0) PRIMITIVE(SgmlParse, "sgml-parse", 1, 0, 1) PRIMITIVE(IsMatchElement, "match-element?", 2, 0, 0) // External procedures XPRIMITIVE(ReadEntity, "read-entity", 1, 0, 0) XPRIMITIVE(Debug, "debug", 1, 0, 0) XPRIMITIVE(IfFirstPage, "if-first-page", 2, 0, 0) XPRIMITIVE(IfFrontPage, "if-front-page", 2, 0, 0) XPRIMITIVE(AllElementNumber, "all-element-number", 0, 1, 0) // DSSSL2 procedures PRIMITIVE2(IsVector, "vector?", 1, 0, 0) PRIMITIVE2(Vector, "vector", 0, 0, 1) PRIMITIVE2(VectorRef, "vector-ref", 2, 0, 0) PRIMITIVE2(VectorSet, "vector-set!", 3, 0, 0) PRIMITIVE2(MakeVector, "make-vector", 1, 1, 0) PRIMITIVE2(VectorToList, "vector->list", 1, 0, 0) PRIMITIVE2(ListToVector, "list->vector", 1, 0, 0) PRIMITIVE2(VectorFill, "vector-fill!", 2, 0, 0) PRIMITIVE2(IsEqv, "eqv?", 2, 0, 0) PRIMITIVE2(Memv, "memv", 2, 0, 0) PRIMITIVE2(QuantityToString, "quantity->string", 1, 1, 0) jade-1.2.1/style/Pattern.h100444 764 764 16476 6604607716 13203 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file copying.txt for copying permission. #ifndef Pattern_INCLUDED #define Pattern_INCLUDED 1 #include "Boolean.h" #include "Node.h" #include "Link.h" #include "IList.h" #include "IListIter.h" #include "StringC.h" #include "Vector.h" #include "Ptr.h" #include "Resource.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class Pattern { public: class MatchContext : public SdataMapper { public: const Vector &classAttributeNames() const; const Vector &idAttributeNames() const; protected: Vector classAttributeNames_; Vector idAttributeNames_; }; class Qualifier : public Link { public: virtual ~Qualifier(); virtual bool satisfies(const NodePtr &, MatchContext &) const = 0; virtual void contributeSpecificity(int *) const = 0; virtual bool vacuous() const; protected: static bool matchAttribute(const StringC &name, const StringC &value, const NodePtr &nd, MatchContext &context); }; class IdQualifier : public Qualifier { public: IdQualifier(const StringC &); bool satisfies(const NodePtr &, MatchContext &) const; void contributeSpecificity(int *) const; private: StringC id_; }; class ClassQualifier : public Qualifier { public: ClassQualifier(const StringC &); bool satisfies(const NodePtr &, MatchContext &) const; void contributeSpecificity(int *) const; private: StringC class_; }; class AttributeHasValueQualifier : public Qualifier { public: AttributeHasValueQualifier(const StringC &); bool satisfies(const NodePtr &, MatchContext &) const; void contributeSpecificity(int *) const; private: StringC name_; }; class AttributeMissingValueQualifier : public Qualifier { public: AttributeMissingValueQualifier(const StringC &); bool satisfies(const NodePtr &, MatchContext &) const; void contributeSpecificity(int *) const; private: StringC name_; }; class AttributeQualifier : public Qualifier { public: AttributeQualifier(const StringC &, const StringC &); bool satisfies(const NodePtr &, MatchContext &) const; void contributeSpecificity(int *) const; private: StringC name_; StringC value_; }; class PositionQualifier : public Qualifier { public: void contributeSpecificity(int *) const; }; class FirstOfTypeQualifier : public PositionQualifier { public: bool satisfies(const NodePtr &, MatchContext &) const; }; class LastOfTypeQualifier : public PositionQualifier { public: bool satisfies(const NodePtr &, MatchContext &) const; }; class FirstOfAnyQualifier : public PositionQualifier { public: bool satisfies(const NodePtr &, MatchContext &) const; }; class LastOfAnyQualifier : public PositionQualifier { public: bool satisfies(const NodePtr &, MatchContext &) const; }; class OnlyQualifier : public Qualifier { public: void contributeSpecificity(int *) const; }; class OnlyOfTypeQualifier : public OnlyQualifier { public: bool satisfies(const NodePtr &, MatchContext &) const; }; class OnlyOfAnyQualifier : public OnlyQualifier { public: bool satisfies(const NodePtr &, MatchContext &) const; }; class VacuousQualifier : public Qualifier { public: bool vacuous() const; }; class PriorityQualifier : public VacuousQualifier { public: PriorityQualifier(long); void contributeSpecificity(int *) const; bool satisfies(const NodePtr &, MatchContext &) const; private: long n_; }; class ImportanceQualifier : public VacuousQualifier { public: ImportanceQualifier(long); void contributeSpecificity(int *) const; bool satisfies(const NodePtr &, MatchContext &) const; private: long n_; }; typedef unsigned Repeat; class Element : public Link { public: Element(const StringC &); bool matches(const NodePtr &, MatchContext &) const; void contributeSpecificity(int *) const; void addQualifier(Qualifier *); void setRepeat(Repeat minRepeat, Repeat maxRepeat); Repeat minRepeat() const; Repeat maxRepeat() const; bool mustHaveGi(StringC &) const; bool trivial() const; private: StringC gi_; Repeat minRepeat_; Repeat maxRepeat_; IList qualifiers_; }; class ChildrenQualifier : public Qualifier { public: ChildrenQualifier(IList &); bool satisfies(const NodePtr &, MatchContext &) const; void contributeSpecificity(int *) const; private: IList children_; }; Pattern(); Pattern(IList &); void swap(Pattern &); bool matches(const NodePtr &, MatchContext &) const; // If mustHaveGi returns true, then any element that matches the pattern // must have the string returned in str. bool mustHaveGi(StringC &str) const; // A pattern is trivial if any element that has the gi returned my mustHaveGi // matches the pattern, or, if mustHaveGi returns false, if any element matches // the pattern. bool trivial() const; static int compareSpecificity(const Pattern &, const Pattern &); enum { importanceSpecificity, idSpecificity, classSpecificity, giSpecificity, repeatSpecificity, prioritySpecificity, onlySpecificity, positionSpecificity, attributeSpecificity, nSpecificity }; private: Pattern(const Pattern &); // undefined void operator=(const Pattern &); // undefined void computeSpecificity(int *) const; static bool computeTrivial(const IList &); static bool matchAncestors(const IListIter &, const NodePtr &, MatchContext &); static bool matchAncestors1(const IListIter &, const NodePtr &, MatchContext &); IList ancestors_; // first is self, second is parent ... bool trivial_; }; inline void Pattern::Element::setRepeat(Repeat minRepeat, Repeat maxRepeat) { minRepeat_ = minRepeat; maxRepeat_ = maxRepeat; } inline Pattern::Repeat Pattern::Element::minRepeat() const { return minRepeat_; } inline Pattern::Repeat Pattern::Element::maxRepeat() const { return maxRepeat_; } inline void Pattern::Element::addQualifier(Qualifier *q) { qualifiers_.insert(q); } inline bool Pattern::matchAncestors(const IListIter &ancestors, const NodePtr &node, MatchContext &context) { return ancestors.done() || matchAncestors1(ancestors, node, context); } inline bool Pattern::matches(const NodePtr &nd, MatchContext &context) const { return matchAncestors(IListIter(ancestors_), nd, context); } inline void Pattern::swap(Pattern &pattern) { ancestors_.swap(pattern.ancestors_); bool tem = trivial_; trivial_ = pattern.trivial_; pattern.trivial_ = tem; } inline bool Pattern::Element::mustHaveGi(StringC &gi) const { if (minRepeat_ == 0) return 0; else if (gi_.size()) { gi = gi_; return 1; } else return 0; } inline bool Pattern::mustHaveGi(StringC &gi) const { return !ancestors_.empty() && ancestors_.head()->mustHaveGi(gi); } inline const Vector &Pattern::MatchContext::classAttributeNames() const { return classAttributeNames_; } inline const Vector &Pattern::MatchContext::idAttributeNames() const { return idAttributeNames_; } inline bool Pattern::trivial() const { return trivial_; } #ifdef DSSSL_NAMESPACE } #endif #endif /* not Pattern_INCLUDED */ jade-1.2.1/style/ProcessContext.h100444 764 764 11761 6607321470 14532 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef ProcessContext_INCLUDED #define ProcessContext_INCLUDED 1 #include "Resource.h" #include "Ptr.h" #include "Vector.h" #include "NCVector.h" #include "Owner.h" #include "Collector.h" #include "Style.h" #include "FOTBuilder.h" #include "ELObj.h" #include "SosofoObj.h" #include "VM.h" #include "ProcessingMode.h" #include "Link.h" #include "IList.h" #include "IQueue.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class Expression; class ProcessContext : public Collector::DynamicRoot { public: ProcessContext(Interpreter &, FOTBuilder &); FOTBuilder ¤tFOTBuilder(); StyleStack ¤tStyleStack(); void process(const NodePtr &); void processNode(const NodePtr &, const ProcessingMode *, bool chunk = 1); void processNodeSafe(const NodePtr &, const ProcessingMode *, bool chunk = 1); void nextMatch(StyleObj *); void processChildren(const ProcessingMode *); void processChildrenTrim(const ProcessingMode *); void trace(Collector &) const; void startFlowObj(); void endFlowObj(); // Uses of label: do this void startConnection(SymbolObj *, const Location &); void endConnection(); // happens only for objcet with a non-principal port void pushPorts(bool hasPrincipalPort, const Vector &ports, const Vector &fotbs); void popPorts(); // happens inside pushPorts() (if any) void startMapContent(ELObj *, const Location &); void endMapContent(); void startDiscardLabeled(SymbolObj *); void endDiscardLabeled(); // table support void startTable(); void endTable(); void startTablePart(); void endTablePart(); void addTableColumn(unsigned columnIndex, unsigned span, StyleObj *); unsigned currentTableColumn(); void noteTableCell(unsigned colIndex, unsigned colSpan, unsigned rowSpan); StyleObj *tableColumnStyle(unsigned columnIndex, unsigned span); StyleObj *tableRowStyle(); void startTableRow(StyleObj *); bool inTable() const; bool inTableRow(); void endTableRow(); void clearPageType(); void setPageType(unsigned); bool getPageType(unsigned &) const; VM &vm(); private: ProcessContext(const ProcessContext &); // undefined void operator=(const ProcessContext &); // undefined void badContentMap(bool &, const Location &); void coverSpannedRows(); void restoreConnection(unsigned connectableLevel, size_t portIndex); struct Port { Port(); FOTBuilder *fotb; IQueue saveQueue; Vector labels; unsigned connected; }; // A flow object with a port that can be connected to. struct Connectable; friend struct Connectable; struct Connectable : public Link { Connectable(int nPorts, const StyleStack &, unsigned); NCVector ports; StyleStack styleStack; unsigned flowObjLevel; Vector principalPortLabels; }; // An connection between a flow object and its flow parent // made with label:. struct Connection; friend struct Connection; struct Connection : public Link { Connection(FOTBuilder *); Connection(const StyleStack &, Port *, unsigned connectableLevel); FOTBuilder *fotb; StyleStack styleStack; Port *port; unsigned connectableLevel; unsigned nBadFollow; }; struct Table : public Link { Table(); unsigned currentColumn; // first index is column (zero-based) // second is span - 1. Vector > columnStyles; // for each column, how many rows are covered // starting with the current row Vector covered; unsigned nColumns; StyleObj *rowStyle; bool inTableRow; unsigned rowConnectableLevel; }; struct NodeStackEntry { unsigned long elementIndex; unsigned groveIndex; const ProcessingMode *processingMode; }; FOTBuilder ignoreFotb_; IList connectionStack_; IList connectableStack_; unsigned connectableStackLevel_; IList tableStack_; NCVector > principalPortSaveQueues_; VM vm_; ProcessingMode::Specificity matchSpecificity_; unsigned flowObjLevel_; bool havePageType_; unsigned pageType_; Vector nodeStack_; friend class CurrentNodeSetter; friend struct Table; }; inline FOTBuilder &ProcessContext::currentFOTBuilder() { return *connectionStack_.head()->fotb; } inline StyleStack &ProcessContext::currentStyleStack() { return connectionStack_.head()->styleStack; } inline VM &ProcessContext::vm() { return vm_; } inline void ProcessContext::startFlowObj() { flowObjLevel_++; } inline void ProcessContext::setPageType(unsigned n) { havePageType_ = 1; pageType_ = n; } inline void ProcessContext::clearPageType() { havePageType_ = 0; } inline bool ProcessContext::getPageType(unsigned &n) const { if (!havePageType_) return 0; n = pageType_; return 1; } inline bool ProcessContext::inTable() const { return !tableStack_.empty(); } #ifdef DSSSL_NAMESPACE } #endif #endif /* not ProcessContext_INCLUDED */ jade-1.2.1/style/ProcessingMode.h100444 764 764 10766 6606574462 14506 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef ProcessingMode_INCLUDED #define ProcessingMode_INCLUDED 1 #include "Named.h" #include "StringC.h" #include "Location.h" #include "Owner.h" #include "Vector.h" #include "NCVector.h" #include "NamedTable.h" #include "Expression.h" #include "Insn.h" #include "Boolean.h" #include "Node.h" #include "FOTBuilder.h" #include "IList.h" #include "Pattern.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class Interpreter; class SosofoObj; class ProcessingMode : public Named { public: enum RuleType { styleRule, constructionRule }; enum { nRuleType = 2 }; class Specificity { public: Specificity(); bool isStyle() const; private: bool toInitial_; // 1 if the match fell through from a named processing mode to // the initial processing mode RuleType ruleType_; size_t nextRuleIndex_; friend class ProcessingMode; }; class Action : public Resource { public: Action(unsigned partIndex, Owner &, const Location &); void compile(Interpreter &, RuleType); void get(InsnPtr &, SosofoObj *&) const; const Location &location() const; unsigned partIndex() const; private: Location defLoc_; Owner expr_; // One of these will be non-null. InsnPtr insn_; // must be permanent SosofoObj *sosofo_; unsigned partIndex_; }; class Rule { public: Rule(); Rule(const Ptr &); const Action &action() const; Action &action(); virtual int compareSpecificity(const Rule &) const; const Location &location() const; void swap(Rule &); private: Ptr action_; }; class ElementRule : public Rule, public Pattern, public Link { public: ElementRule(const Ptr &, Pattern &); int compareSpecificity(const Rule &) const; }; ProcessingMode(const StringC &, const ProcessingMode *initial = 0); void addRule(bool matchesRoot, NCVector &, Owner &expr, RuleType, const Location &, Interpreter &); // Specificity gives specificity of last match; gets specificity of current match. const Rule *findMatch(const NodePtr &, Pattern::MatchContext &, Messenger &, Specificity &) const; void compile(Interpreter &); bool defined() const; void setDefined(); struct ElementRules : public Named { public: ElementRules(const StringC &); Vector rules[nRuleType]; }; struct GroveRules { GroveRules(); bool built; NamedTable elementTable; Vector otherRules[nRuleType]; void build(const IList *, const NodePtr &, Messenger &); static void sortRules(Vector &v); }; private: const Rule *findElementMatch(const StringC &, const NodePtr &, Pattern::MatchContext &, Messenger &, Specificity &) const; const Rule *findRootMatch(const NodePtr &, Pattern::MatchContext &, Messenger &, Specificity &) const; const GroveRules &groveRules(const NodePtr &, Messenger &) const; static void elementRuleAdvance(const NodePtr &nd, Pattern::MatchContext &context, Messenger &mgr, Specificity &specificity, const Vector &vec); Vector rootRules_[nRuleType]; IList elementRules_[nRuleType]; NCVector groveRules_; const ProcessingMode *initial_; // 0 for initial mode bool defined_; }; inline bool ProcessingMode::defined() const { return defined_; } inline void ProcessingMode::setDefined() { defined_ = 1; } inline ProcessingMode::Specificity::Specificity() : toInitial_(0), nextRuleIndex_(0), ruleType_(styleRule) { } inline bool ProcessingMode::Specificity::isStyle() const { return ruleType_ == styleRule; } inline void ProcessingMode::Action::get(InsnPtr &insn, SosofoObj *&sosofo) const { insn = insn_; sosofo = sosofo_; } inline const Location &ProcessingMode::Action::location() const { return defLoc_; } inline ProcessingMode::Action &ProcessingMode::Rule::action() { return *action_; } inline const ProcessingMode::Action &ProcessingMode::Rule::action() const { return *action_; } inline unsigned ProcessingMode::Action::partIndex() const { return partIndex_; } inline const Location &ProcessingMode::Rule::location() const { return action_->location(); } inline void ProcessingMode::Rule::swap(Rule &r) { action_.swap(r.action_); } #ifdef DSSSL_NAMESPACE } #endif #endif /* not ProcessingMode_INCLUDED */ jade-1.2.1/style/SchemeParser.h100444 764 764 11447 6606574462 14143 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef SchemeParser_INCLUDED #define SchemeParser_INCLUDED 1 #include "Interpreter.h" #include "Expression.h" #include "Owner.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class SchemeParser : public Messenger { public: SchemeParser(Interpreter &, Owner &); void parse(); bool parseExpression(Owner &); private: SchemeParser(const SchemeParser &); // undefined void operator=(const SchemeParser &); // undefined enum { allowEndOfEntity = 01, allowFalse = 02, allowKeyword = 04, allowOpenParen = 010, allowCloseParen = 020, allowIdentifier = 040, allowPeriod = 0100, allowOtherExpr = 0200, // number, character, glyph-id, quote, backquote allowExpressionKey = 0400, allowKeyDefine = 01000, allowKeyElse = 02000, allowKeyArrow = 04000, // => allowString = 010000, allowHashOptional = 020000, allowHashKey = 040000, allowHashRest = 0100000, allowUnquote = 0200000, allowUnquoteSplicing = 0400000, allowQuasiquoteKey = 01000000, allowVector = 02000000, allowHashContents = 04000000, allowExpr = (allowFalse|allowKeyword|allowOpenParen|allowIdentifier |allowString|allowHashOptional|allowHashKey|allowHashRest |allowOtherExpr) }; enum Token { tokenEndOfEntity, tokenTrue, tokenFalse, tokenString, tokenIdentifier, tokenKeyword, tokenChar, tokenNumber, tokenGlyphId, tokenOpenParen, tokenCloseParen, tokenPeriod, tokenVector, tokenQuote, tokenQuasiquote, tokenUnquote, tokenUnquoteSplicing, tokenHashRest, tokenHashOptional, tokenHashKey, tokenHashContents, tokenVoid }; bool doDefine(); bool doDefineUnit(); bool doElement(); bool doOrElement(); bool doDefault(); bool doId(); bool doRoot(); bool doMode(); bool doDeclareInitialValue(); bool doDeclareCharacteristic(); bool doDeclareFlowObjectClass(); bool doDeclareClassAttribute(); bool doDeclareIdAttribute(); bool doDeclareFlowObjectMacro(); bool skipForm(); bool parseExpression(unsigned allowed, Owner &, Identifier::SyntacticKey &, Token &); bool parseBegin(Owner &expr); bool parseSet(Owner &expr); bool parseLambda(Owner &); bool parseLet(Owner &); bool parseLetStar(Owner &); bool parseLetrec(Owner &); bool parseBindingsAndBody(Vector &vars, NCVector > &inits, Owner &body); bool parseBindingsAndBody1(Vector &vars, NCVector > &inits, Owner &body); bool parseQuote(Owner &); bool parseIf(Owner &); bool parseCond(Owner &, bool opt = 0); bool parseCase(Owner &); bool parseOr(Owner &); bool parseAnd(Owner &, bool opt = 0); bool parseMake(Owner &); bool parseStyle(Owner &); bool parseWithMode(Owner &); bool parseFormals(Vector &, NCVector > &, int &, bool &, int &); bool parseDatum(unsigned otherAllowed, ELObj *&, Location &, Token &); bool parseSelfEvaluating(unsigned otherAllowed, ELObj *&, Token &); bool parseAbbreviation(const char *, ELObj *&); bool parseQuasiquote(Owner &); bool parseQuasiquoteTemplate(unsigned level, unsigned allowed, Owner &, Identifier::SyntacticKey &, Token &, bool &spliced); void createQuasiquoteAbbreviation(const char *, Owner &); bool parseRuleBody(Owner &, ProcessingMode::RuleType &); bool getToken(unsigned, Token &); bool isDelimiter(Xchar); void extendToken(); bool scanString(); void skipComment(); bool tokenRecover(unsigned, Token &); bool tokenIsNumber(); bool scanString(unsigned, Token &); ELObj *convertAfiiGlyphId(const StringC &); Identifier *lookup(const StringC &str); ProcessingMode *lookupProcessingMode(const StringC &); void dispatchMessage(Message &); void dispatchMessage(const Message &); void initMessage(Message &msg); bool dsssl2() const; Interpreter *interp_; Owner in_; StringC currentToken_; ProcessingMode *defMode_; const char *afiiPublicId_; bool dsssl2_; }; inline Identifier *SchemeParser::lookup(const StringC &str) { return interp_->lookup(str); } inline ProcessingMode *SchemeParser::lookupProcessingMode(const StringC &name) { return interp_->lookupProcessingMode(name); } inline bool SchemeParser::dsssl2() const { return dsssl2_; } #ifdef DSSSL_NAMESPACE } #endif #endif /* not SchemeParser_INCLUDED */ jade-1.2.1/style/sdata.h100444 764 764 43607 6606574462 12661 0ustar jjcjjc// Unicode code, SDATA entity name { 0x0021, "excl" }, { 0x0022, "quot" }, { 0x0023, "num" }, { 0x0024, "dollar" }, { 0x0025, "percnt" }, { 0x0026, "amp" }, { 0x0027, "apos" }, { 0x0028, "lpar" }, { 0x0029, "rpar" }, { 0x002A, "ast" }, { 0x002B, "plus" }, { 0x002C, "comma" }, { 0x002D, "hyphen" }, { 0x002E, "period" }, { 0x002F, "sol" }, { 0x003A, "colon" }, { 0x003B, "semi" }, { 0x003C, "lt" }, { 0x003D, "equals" }, { 0x003E, "gt" }, { 0x003F, "quest" }, { 0x0040, "commat" }, { 0x005B, "lsqb" }, { 0x005C, "bsol" }, { 0x005D, "rsqb" }, { 0x005E, "circ" }, { 0x005F, "lowbar" }, { 0x0060, "grave" }, { 0x007B, "lcub" }, { 0x007C, "verbar" }, { 0x007D, "rcub" }, { 0x007E, "tilde" }, { 0x00A0, "nbsp" }, { 0x00A1, "iexcl" }, { 0x00A2, "cent" }, { 0x00A3, "pound" }, { 0x00A4, "curren" }, { 0x00A5, "yen" }, { 0x00A6, "brvbar" }, { 0x00A7, "sect" }, { 0x00A8, "die" }, { 0x00A8, "Dot" }, { 0x00A8, "uml" }, { 0x00A9, "copy" }, { 0x00AA, "ordf" }, { 0x00AB, "laquo" }, { 0x00AC, "not" }, { 0x00AD, "shy" }, { 0x00AE, "reg" }, { 0x00AF, "macr" }, { 0x00B0, "deg" }, { 0x00B1, "plusmn" }, { 0x00B2, "sup2" }, { 0x00B3, "sup3" }, { 0x00B4, "acute" }, { 0x00B5, "micro" }, { 0x00B6, "para" }, { 0x00B7, "middot" }, { 0x00B8, "cedil" }, { 0x00B9, "sup1" }, { 0x00BA, "ordm" }, { 0x00BB, "raquo" }, { 0x00BC, "frac14" }, { 0x00BD, "frac12" }, { 0x00BE, "frac34" }, { 0x00BF, "iquest" }, { 0x00C0, "Agrave" }, { 0x00C1, "Aacute" }, { 0x00C2, "Acirc" }, { 0x00C3, "Atilde" }, { 0x00C4, "Auml" }, { 0x00C5, "Aring" }, { 0x00C6, "AElig" }, { 0x00C7, "Ccedil" }, { 0x00C8, "Egrave" }, { 0x00C9, "Eacute" }, { 0x00CA, "Ecirc" }, { 0x00CB, "Euml" }, { 0x00CC, "Igrave" }, { 0x00CD, "Iacute" }, { 0x00CE, "Icirc" }, { 0x00CF, "Iuml" }, { 0x00D0, "ETH" }, { 0x00D1, "Ntilde" }, { 0x00D2, "Ograve" }, { 0x00D3, "Oacute" }, { 0x00D4, "Ocirc" }, { 0x00D5, "Otilde" }, { 0x00D6, "Ouml" }, { 0x00D7, "times" }, { 0x00D8, "Oslash" }, { 0x00D9, "Ugrave" }, { 0x00DA, "Uacute" }, { 0x00DB, "Ucirc" }, { 0x00DC, "Uuml" }, { 0x00DD, "Yacute" }, { 0x00DE, "THORN" }, { 0x00DF, "szlig" }, { 0x00E0, "agrave" }, { 0x00E1, "aacute" }, { 0x00E2, "acirc" }, { 0x00E3, "atilde" }, { 0x00E4, "auml" }, { 0x00E5, "aring" }, { 0x00E6, "aelig" }, { 0x00E7, "ccedil" }, { 0x00E8, "egrave" }, { 0x00E9, "eacute" }, { 0x00EA, "ecirc" }, { 0x00EB, "euml" }, { 0x00EC, "igrave" }, { 0x00ED, "iacute" }, { 0x00EE, "icirc" }, { 0x00EF, "iuml" }, { 0x00F0, "eth" }, { 0x00F1, "ntilde" }, { 0x00F2, "ograve" }, { 0x00F3, "oacute" }, { 0x00F4, "ocirc" }, { 0x00F5, "otilde" }, { 0x00F6, "ouml" }, { 0x00F7, "divide" }, { 0x00F8, "oslash" }, { 0x00F9, "ugrave" }, { 0x00FA, "uacute" }, { 0x00FB, "ucirc" }, { 0x00FC, "uuml" }, { 0x00FD, "yacute" }, { 0x00FE, "thorn" }, { 0x00FF, "yuml" }, { 0x0100, "Amacr" }, { 0x0101, "amacr" }, { 0x0102, "Abreve" }, { 0x0103, "abreve" }, { 0x0104, "Aogon" }, { 0x0105, "aogon" }, { 0x0106, "Cacute" }, { 0x0107, "cacute" }, { 0x0108, "Ccirc" }, { 0x0109, "ccirc" }, { 0x010A, "Cdot" }, { 0x010B, "cdot" }, { 0x010C, "Ccaron" }, { 0x010D, "ccaron" }, { 0x010E, "Dcaron" }, { 0x010F, "dcaron" }, { 0x0110, "Dstrok" }, { 0x0111, "dstrok" }, { 0x0112, "Emacr" }, { 0x0113, "emacr" }, { 0x0116, "Edot" }, { 0x0117, "edot" }, { 0x0118, "Eogon" }, { 0x0119, "eogon" }, { 0x011A, "Ecaron" }, { 0x011B, "ecaron" }, { 0x011C, "Gcirc" }, { 0x011D, "gcirc" }, { 0x011E, "Gbreve" }, { 0x011F, "gbreve" }, { 0x0120, "Gdot" }, { 0x0121, "gdot" }, { 0x0122, "Gcedil" }, { 0x0123, "gcedil" }, { 0x0124, "Hcirc" }, { 0x0125, "hcirc" }, { 0x0126, "Hstrok" }, { 0x0127, "hstrok" }, { 0x0128, "Itilde" }, { 0x0129, "itilde" }, { 0x012A, "Imacr" }, { 0x012B, "imacr" }, { 0x012E, "Iogon" }, { 0x012F, "iogon" }, { 0x0130, "Idot" }, { 0x0131, "inodot" }, { 0x0132, "IJlig" }, { 0x0133, "ijlig" }, { 0x0134, "Jcirc" }, { 0x0135, "jcirc" }, { 0x0136, "Kcedil" }, { 0x0137, "kcedil" }, { 0x0138, "kgreen" }, { 0x0139, "Lacute" }, { 0x013A, "lacute" }, { 0x013B, "Lcedil" }, { 0x013C, "lcedil" }, { 0x013D, "Lcaron" }, { 0x013E, "lcaron" }, { 0x013F, "Lmidot" }, { 0x0140, "lmidot" }, { 0x0141, "Lstrok" }, { 0x0142, "lstrok" }, { 0x0143, "Nacute" }, { 0x0144, "nacute" }, { 0x0145, "Ncedil" }, { 0x0146, "ncedil" }, { 0x0147, "Ncaron" }, { 0x0148, "ncaron" }, { 0x0149, "napos" }, { 0x014A, "ENG" }, { 0x014B, "eng" }, { 0x014C, "Omacr" }, { 0x014D, "omacr" }, { 0x0150, "Odblac" }, { 0x0151, "odblac" }, { 0x0152, "OElig" }, { 0x0153, "oelig" }, { 0x0154, "Racute" }, { 0x0155, "racute" }, { 0x0156, "Rcedil" }, { 0x0157, "rcedil" }, { 0x0158, "Rcaron" }, { 0x0159, "rcaron" }, { 0x015A, "Sacute" }, { 0x015B, "sacute" }, { 0x015C, "Scirc" }, { 0x015D, "scirc" }, { 0x015E, "Scedil" }, { 0x015F, "scedil" }, { 0x0160, "Scaron" }, { 0x0161, "scaron" }, { 0x0162, "Tcedil" }, { 0x0163, "tcedil" }, { 0x0164, "Tcaron" }, { 0x0165, "tcaron" }, { 0x0166, "Tstrok" }, { 0x0167, "tstrok" }, { 0x0168, "Utilde" }, { 0x0169, "utilde" }, { 0x016A, "Umacr" }, { 0x016B, "umacr" }, { 0x016C, "Ubreve" }, { 0x016D, "ubreve" }, { 0x016E, "Uring" }, { 0x016F, "uring" }, { 0x0170, "Udblac" }, { 0x0171, "udblac" }, { 0x0172, "Uogon" }, { 0x0173, "uogon" }, { 0x0174, "Wcirc" }, { 0x0175, "wcirc" }, { 0x0176, "Ycirc" }, { 0x0177, "ycirc" }, { 0x0178, "Yuml" }, { 0x0179, "Zacute" }, { 0x017A, "zacute" }, { 0x017B, "Zdot" }, { 0x017C, "zdot" }, { 0x017D, "Zcaron" }, { 0x017E, "zcaron" }, { 0x0192, "fnof" }, { 0x02C7, "caron" }, { 0x02D8, "breve" }, { 0x02D9, "dot" }, { 0x02DA, "ring" }, { 0x02DB, "ogon" }, { 0x02DC, "tilde" }, { 0x02DD, "dblac" }, { 0x0386, "Aacgr" }, { 0x0388, "Eacgr" }, { 0x0389, "EEacgr" }, { 0x038A, "Iacgr" }, { 0x038C, "Oacgr" }, { 0x038E, "Uacgr" }, { 0x038F, "OHacgr" }, { 0x0390, "idiagr" }, { 0x0391, "Agr" }, { 0x0392, "Bgr" }, { 0x0393, "Ggr" }, { 0x0393, "Gamma" }, { 0x0394, "Dgr" }, { 0x0394, "Delta" }, { 0x0395, "Egr" }, { 0x0396, "Zgr" }, { 0x0397, "EEgr" }, { 0x0398, "THgr" }, { 0x0398, "Theta" }, { 0x0399, "Igr" }, { 0x039A, "Kgr" }, { 0x039B, "Lgr" }, { 0x039B, "Lambda" }, { 0x039C, "Mgr" }, { 0x039D, "Ngr" }, { 0x039E, "Xgr" }, { 0x039E, "Xi" }, { 0x039F, "Ogr" }, { 0x03A0, "Pgr" }, { 0x03A0, "Pi" }, { 0x03A1, "Rgr" }, { 0x03A3, "Sgr" }, { 0x03A3, "Sigma" }, { 0x03A4, "Tgr" }, { 0x03A5, "Ugr" }, { 0x03A5, "Upsi" }, { 0x03A6, "PHgr" }, { 0x03A6, "Phi" }, { 0x03A7, "KHgr" }, { 0x03A8, "PSgr" }, { 0x03A8, "Psi" }, { 0x03A9, "OHgr" }, { 0x03A9, "Omega" }, { 0x03AA, "Idigr" }, { 0x03AB, "Udigr" }, { 0x03AC, "aacgr" }, { 0x03AD, "eacgr" }, { 0x03AE, "eeacgr" }, { 0x03AF, "iacgr" }, { 0x03B0, "udiagr" }, { 0x03B1, "agr" }, { 0x03B1, "alpha" }, { 0x03B2, "bgr" }, { 0x03B2, "beta" }, { 0x03B3, "ggr" }, { 0x03B3, "gamma" }, { 0x03B4, "dgr" }, { 0x03B4, "delta" }, { 0x03B5, "egr" }, { 0x03B5, "epsi" }, { 0x03B6, "zgr" }, { 0x03B6, "zeta" }, { 0x03B7, "eegr" }, { 0x03B7, "eta" }, { 0x03B8, "thetas" }, { 0x03B8, "thgr" }, { 0x03B9, "igr" }, { 0x03B9, "iota" }, { 0x03BA, "kgr" }, { 0x03BA, "kappa" }, { 0x03BB, "lgr" }, { 0x03BB, "lambda" }, { 0x03BC, "mgr" }, { 0x03BC, "mu" }, { 0x03BD, "ngr" }, { 0x03BD, "nu" }, { 0x03BE, "xgr" }, { 0x03BE, "xi" }, { 0x03BF, "ogr" }, { 0x03C0, "pgr" }, { 0x03C0, "pi" }, { 0x03C1, "rgr" }, { 0x03C1, "rho" }, { 0x03C2, "sfgr" }, { 0x03C2, "sigmav" }, { 0x03C3, "sgr" }, { 0x03C3, "sigma" }, { 0x03C4, "tgr" }, { 0x03C4, "tau" }, { 0x03C5, "ugr" }, { 0x03C5, "upsi" }, { 0x03C6, "phgr" }, { 0x03C6, "phis" }, { 0x03C7, "khgr" }, { 0x03C7, "chi" }, { 0x03C8, "psgr" }, { 0x03C8, "psi" }, { 0x03C9, "ohgr" }, { 0x03C9, "omega" }, { 0x03CA, "idigr" }, { 0x03CB, "udigr" }, { 0x03CC, "oacgr" }, { 0x03CD, "uacgr" }, { 0x03CE, "ohacgr" }, { 0x03D1, "thetav" }, { 0x03D5, "phiv" }, { 0x03D6, "piv" }, { 0x03DD, "gammad" }, { 0x03F0, "kappav" }, { 0x03F1, "rhov" }, { 0x0401, "IOcy" }, { 0x0402, "DJcy" }, { 0x0403, "GJcy" }, { 0x0404, "Jukcy" }, { 0x0405, "DScy" }, { 0x0406, "Iukcy" }, { 0x0407, "YIcy" }, { 0x0408, "Jsercy" }, { 0x0409, "LJcy" }, { 0x040A, "NJcy" }, { 0x040B, "TSHcy" }, { 0x040C, "KJcy" }, { 0x040E, "Ubrcy" }, { 0x040F, "DZcy" }, { 0x0410, "Acy" }, { 0x0411, "Bcy" }, { 0x0412, "Vcy" }, { 0x0413, "Gcy" }, { 0x0414, "dcy" }, { 0x0415, "IEcy" }, { 0x0416, "ZHcy" }, { 0x0417, "Zcy" }, { 0x0418, "Icy" }, { 0x0419, "Jcy" }, { 0x041A, "Kcy" }, { 0x041B, "Lcy" }, { 0x041C, "Mcy" }, { 0x041D, "Ncy" }, { 0x041E, "Ocy" }, { 0x041F, "Pcy" }, { 0x0420, "Rcy" }, { 0x0421, "Scy" }, { 0x0422, "Tcy" }, { 0x0423, "Ucy" }, { 0x0424, "Fcy" }, { 0x0425, "KHcy" }, { 0x0426, "TScy" }, { 0x0427, "CHcy" }, { 0x0428, "SHcy" }, { 0x0429, "SHCHcy" }, { 0x042A, "HARDcy" }, { 0x042B, "Ycy" }, { 0x042C, "SOFTcy" }, { 0x042D, "Ecy" }, { 0x042E, "YUcy" }, { 0x042F, "YAcy" }, { 0x0430, "acy" }, { 0x0431, "bcy" }, { 0x0432, "vcy" }, { 0x0433, "gcy" }, { 0x0434, "dcy" }, { 0x0435, "iecy" }, { 0x0436, "zhcy" }, { 0x0437, "zcy" }, { 0x0438, "icy" }, { 0x0439, "jcy" }, { 0x043A, "kcy" }, { 0x043B, "lcy" }, { 0x043C, "mcy" }, { 0x043D, "ncy" }, { 0x043E, "ocy" }, { 0x043F, "pcy" }, { 0x0440, "rcy" }, { 0x0441, "scy" }, { 0x0442, "tcy" }, { 0x0443, "ucy" }, { 0x0444, "fcy" }, { 0x0445, "khcy" }, { 0x0446, "tscy" }, { 0x0447, "chcy" }, { 0x0448, "shcy" }, { 0x0449, "shchcy" }, { 0x044A, "hardcy" }, { 0x044B, "ycy" }, { 0x044C, "softcy" }, { 0x044D, "ecy" }, { 0x044E, "yucy" }, { 0x044F, "yacy" }, { 0x0451, "iocy" }, { 0x0452, "djcy" }, { 0x0453, "gjcy" }, { 0x0454, "jukcy" }, { 0x0455, "dscy" }, { 0x0456, "iukcy" }, { 0x0457, "yicy" }, { 0x0458, "jsercy" }, { 0x0459, "ljcy" }, { 0x045A, "njcy" }, { 0x045B, "tshcy" }, { 0x045C, "kjcy" }, { 0x045E, "ubrcy" }, { 0x045F, "dzcy" }, { 0x2002, "ensp" }, { 0x2003, "emsp" }, { 0x2004, "emsp13" }, { 0x2005, "emsp14" }, { 0x2007, "numsp" }, { 0x2008, "puncsp" }, { 0x2009, "thinsp" }, { 0x200A, "hairsp" }, { 0x2010, "dash" }, { 0x2013, "ndash" }, { 0x2014, "mdash" }, { 0x2015, "horbar" }, { 0x2016, "Verbar" }, { 0x2018, "lsquo" }, { 0x2018, "rsquor" }, { 0x2019, "rsquo" }, { 0x201A, "lsquor" }, { 0x201C, "ldquo" }, { 0x201C, "rdquor" }, { 0x201D, "rdquo" }, { 0x201E, "ldquor" }, { 0x2020, "dagger" }, { 0x2021, "Dagger" }, { 0x2022, "bull" }, { 0x2025, "nldr" }, { 0x2026, "hellip" }, { 0x2026, "mldr" }, { 0x2030, "permil" }, { 0x2032, "prime" }, { 0x2032, "vprime" }, { 0x2033, "Prime" }, { 0x2034, "tprime" }, { 0x2035, "bprime" }, { 0x2041, "caret" }, { 0x2043, "hybull" }, { 0x20DB, "tdot" }, { 0x20DC, "DotDot" }, { 0x2105, "incare" }, { 0x210B, "hamilt" }, { 0x210F, "planck" }, { 0x2111, "image" }, { 0x2112, "lagran" }, { 0x2113, "ell" }, { 0x2116, "numero" }, { 0x2117, "copysr" }, { 0x2118, "weierp" }, { 0x211C, "real" }, { 0x211E, "rx" }, { 0x2122, "trade" }, { 0x2126, "ohm" }, { 0x212B, "angst" }, { 0x212C, "bernou" }, { 0x2133, "phmmat" }, { 0x2134, "order" }, { 0x2135, "aleph" }, { 0x2136, "beth" }, { 0x2137, "gimel" }, { 0x2138, "daleth" }, { 0x2153, "frac13" }, { 0x2154, "frac23" }, { 0x2155, "frac15" }, { 0x2156, "frac25" }, { 0x2157, "frac35" }, { 0x2158, "frac45" }, { 0x2159, "frac16" }, { 0x215A, "frac56" }, { 0x215B, "frac18" }, { 0x215C, "frac38" }, { 0x215D, "frac58" }, { 0x215E, "frac78" }, { 0x2190, "larr" }, { 0x2191, "uarr" }, { 0x2192, "rarr" }, { 0x2193, "darr" }, { 0x2194, "harr" }, { 0x2195, "varr" }, { 0x2196, "nwarr" }, { 0x2197, "nearr" }, { 0x2198, "drarr" }, { 0x2199, "dlarr" }, { 0x219A, "nlarr" }, { 0x219B, "nrarr" }, { 0x219D, "rarrw" }, { 0x219E, "Larr" }, { 0x21A0, "Rarr" }, { 0x21A2, "larrtl" }, { 0x21A3, "rarrtl" }, { 0x21A6, "map" }, { 0x21A9, "larrhk" }, { 0x21AA, "rarrhk" }, { 0x21AB, "larrlp" }, { 0x21AC, "rarrlp" }, { 0x21AD, "harrw" }, { 0x21AE, "nharr" }, { 0x21B0, "lsh" }, { 0x21B1, "rsh" }, { 0x21B6, "cularr" }, { 0x21B7, "curarr" }, { 0x21BA, "olarr" }, { 0x21BB, "orarr" }, { 0x21BC, "lharu" }, { 0x21BD, "lhard" }, { 0x21BE, "uharr" }, { 0x21BF, "uharl" }, { 0x21C0, "rharu" }, { 0x21C1, "rhard" }, { 0x21C2, "dharr" }, { 0x21C3, "dharl" }, { 0x21C4, "rlarr2" }, { 0x21C6, "lrarr2" }, { 0x21C7, "larr2" }, { 0x21C8, "uarr2" }, { 0x21C9, "rarr2" }, { 0x21CA, "darr2" }, { 0x21CB, "lrhar2" }, { 0x21CC, "rlhar2" }, { 0x21CD, "nlArr" }, { 0x21CE, "nhArr" }, { 0x21CF, "nrArr" }, { 0x21D0, "lArr" }, { 0x21D1, "uArr" }, { 0x21D2, "rArr" }, { 0x21D3, "dArr" }, { 0x21D4, "hArr" }, { 0x21D4, "iff" }, { 0x21D5, "vArr" }, { 0x21DA, "lAarr" }, { 0x21DB, "rAarr" }, { 0x21DD, "rarrw" }, { 0x2200, "forall" }, { 0x2201, "comp" }, { 0x2202, "part" }, { 0x2203, "exist" }, { 0x2204, "nexist" }, { 0x2205, "empty" }, { 0x2207, "nabla" }, { 0x2208, "isin" }, { 0x2209, "notin" }, { 0x220A, "epsis" }, { 0x220B, "ni" }, { 0x220D, "bepsi" }, { 0x220F, "prod" }, { 0x2210, "coprod" }, { 0x2210, "amalg" }, { 0x2210, "samalg" }, { 0x2211, "sum" }, { 0x2212, "minus" }, { 0x2213, "mnplus" }, { 0x2214, "plusdo" }, { 0x2216, "setmn" }, { 0x2218, "compfn" }, { 0x221A, "radic" }, { 0x221D, "vprop" }, { 0x221D, "prop" }, { 0x221E, "infin" }, { 0x221F, "ang90" }, { 0x2220, "ang" }, { 0x2221, "angmsd" }, { 0x2222, "angsph" }, { 0x2223, "mid" }, { 0x2224, "nmid" }, { 0x2225, "par" }, { 0x2226, "npar" }, { 0x2227, "and" }, { 0x2228, "or" }, { 0x2229, "cap" }, { 0x222A, "cup" }, { 0x222B, "int" }, { 0x222E, "conint" }, { 0x2234, "there4" }, { 0x2235, "becaus" }, { 0x223C, "thksim" }, { 0x223C, "sim" }, { 0x223D, "bsim" }, { 0x2240, "wreath" }, { 0x2241, "nsim" }, { 0x2243, "sime" }, { 0x2244, "nsime" }, { 0x2245, "cong" }, { 0x2247, "ncong" }, { 0x2248, "thkap" }, { 0x2248, "ap" }, { 0x2249, "nap" }, { 0x224A, "ape" }, { 0x224C, "bcong" }, { 0x224D, "asymp" }, { 0x224E, "bump" }, { 0x224F, "bumpe" }, { 0x2250, "esdot" }, { 0x2251, "eDot" }, { 0x2252, "efDot" }, { 0x2253, "erDot" }, { 0x2254, "colone" }, { 0x2255, "ecolon" }, { 0x2256, "ecir" }, { 0x2257, "cire" }, { 0x2259, "wedgeq" }, { 0x225C, "trie" }, { 0x2260, "ne" }, { 0x2261, "equiv" }, { 0x2262, "nequiv" }, { 0x2264, "le" }, { 0x2264, "les" }, { 0x2265, "ge" }, { 0x2265, "ges" }, { 0x2266, "lE" }, { 0x2267, "gE" }, { 0x2268, "lnE" }, { 0x2268, "lvnE" }, { 0x2269, "gnE" }, { 0x2269, "gvnE" }, { 0x226A, "Lt" }, { 0x226B, "Gt" }, { 0x226C, "twixt" }, { 0x226E, "nlt" }, { 0x226F, "ngt" }, { 0x2270, "nles" }, { 0x2270, "nle" }, { 0x2271, "nges" }, { 0x2271, "nge" }, { 0x2272, "lsim" }, { 0x2273, "gsim" }, { 0x2276, "lg" }, { 0x2277, "gl" }, { 0x227A, "pr" }, { 0x227B, "sc" }, { 0x227C, "cupre" }, { 0x227D, "sccue" }, { 0x227E, "prsim" }, { 0x227F, "scsim" }, { 0x2280, "npr" }, { 0x2281, "nsc" }, { 0x2282, "sub" }, { 0x2283, "sup" }, { 0x2284, "nsub" }, { 0x2285, "nsup" }, { 0x2286, "sube" }, { 0x2287, "supe" }, { 0x2288, "nsube" }, { 0x2289, "nsupe" }, { 0x228A, "subnE" }, { 0x228B, "supnE" }, { 0x228E, "uplus" }, { 0x228F, "sqsub" }, { 0x2290, "sqsup" }, { 0x2291, "sqsube" }, { 0x2292, "sqsupe" }, { 0x2293, "sqcap" }, { 0x2294, "sqcup" }, { 0x2295, "oplus" }, { 0x2296, "ominus" }, { 0x2297, "otimes" }, { 0x2298, "osol" }, { 0x2299, "odot" }, { 0x229A, "ocir" }, { 0x229B, "oast" }, { 0x229D, "odash" }, { 0x229E, "plusb" }, { 0x229F, "minusb" }, { 0x22A0, "timesb" }, { 0x22A1, "sdotb" }, { 0x22A2, "vdash" }, { 0x22A3, "dashv" }, { 0x22A4, "top" }, { 0x22A5, "bottom" }, { 0x22A5, "perp" }, { 0x22A7, "models" }, { 0x22A8, "vDash" }, { 0x22A9, "Vdash" }, { 0x22AA, "Vvdash" }, { 0x22AC, "nvdash" }, { 0x22AD, "nvDash" }, { 0x22AE, "nVdash" }, { 0x22AF, "nVDash" }, { 0x22B2, "vltri" }, { 0x22B3, "vrtri" }, { 0x22B4, "ltrie" }, { 0x22B5, "rtrie" }, { 0x22B8, "mumap" }, { 0x22BA, "intcal" }, { 0x22BB, "veebar" }, { 0x22BC, "barwed" }, { 0x22C4, "diam" }, { 0x22C5, "sdot" }, { 0x22C6, "sstarf" }, { 0x22C7, "divonx" }, { 0x22C8, "bowtie" }, { 0x22C9, "ltimes" }, { 0x22CA, "rtimes" }, { 0x22CB, "lthree" }, { 0x22CC, "rthree" }, { 0x22CD, "bsime" }, { 0x22CE, "cuvee" }, { 0x22CF, "cuwed" }, { 0x22D0, "Sub" }, { 0x22D1, "Sup" }, { 0x22D2, "Cap" }, { 0x22D3, "Cup" }, { 0x22D4, "fork" }, { 0x22D6, "ldot" }, { 0x22D7, "gsdot" }, { 0x22D8, "Ll" }, { 0x22D9, "Gg" }, { 0x22DA, "leg" }, { 0x22DB, "gel" }, { 0x22DC, "els" }, { 0x22DD, "egs" }, { 0x22DE, "cuepr" }, { 0x22DF, "cuesc" }, { 0x22E0, "npre" }, { 0x22E1, "nsce" }, { 0x22E6, "lnsim" }, { 0x22E7, "gnsim" }, { 0x22E8, "prnsim" }, { 0x22E9, "scnsim" }, { 0x22EA, "nltri" }, { 0x22EB, "nrtri" }, { 0x22EC, "nltrie" }, { 0x22ED, "nrtrie" }, { 0x22EE, "vellip" }, { 0x2306, "Barwed" }, { 0x2308, "lceil" }, { 0x2309, "rceil" }, { 0x230A, "lfloor" }, { 0x230B, "rfloor" }, { 0x230C, "drcrop" }, { 0x230D, "dlcrop" }, { 0x230E, "urcrop" }, { 0x230F, "ulcrop" }, { 0x2315, "telrec" }, { 0x2316, "target" }, { 0x231C, "ulcorn" }, { 0x231D, "urcorn" }, { 0x231E, "dlcorn" }, { 0x231F, "drcorn" }, { 0x2322, "frown" }, { 0x2323, "smile" }, { 0x2329, "lang" }, { 0x232A, "rang" }, { 0x2423, "blank" }, { 0x24C8, "oS" }, { 0x2500, "boxh" }, { 0x2502, "boxv" }, { 0x250C, "boxdr" }, { 0x2510, "boxdl" }, { 0x2514, "boxur" }, { 0x2518, "boxul" }, { 0x251C, "boxvr" }, { 0x2524, "boxvl" }, { 0x252C, "boxhd" }, { 0x2534, "boxhu" }, { 0x253C, "boxvh" }, { 0x2550, "boxH" }, { 0x2551, "boxV" }, { 0x2552, "boxdR" }, { 0x2553, "boxDr" }, { 0x2554, "boxDR" }, { 0x2555, "boxdL" }, { 0x2556, "boxDl" }, { 0x2557, "boxDL" }, { 0x2558, "boxuR" }, { 0x2559, "boxUr" }, { 0x255A, "boxUR" }, { 0x255B, "boxuL" }, { 0x255C, "boxUl" }, { 0x255D, "boxUL" }, { 0x255E, "boxvR" }, { 0x255F, "boxVr" }, { 0x2560, "boxVR" }, { 0x2561, "boxvL" }, { 0x2562, "boxVl" }, { 0x2563, "boxVL" }, { 0x2564, "boxHd" }, { 0x2565, "boxhD" }, { 0x2566, "boxHD" }, { 0x2567, "boxHu" }, { 0x2568, "boxhU" }, { 0x2569, "boxHU" }, { 0x256A, "boxvH" }, { 0x256B, "boxVh" }, { 0x256C, "boxVH" }, { 0x2580, "uhblk" }, { 0x2584, "lhblk" }, { 0x2588, "block" }, { 0x2591, "blk14" }, { 0x2592, "blk12" }, { 0x2593, "blk34" }, { 0x25A1, "squ" }, { 0x25A1, "square" }, { 0x25AA, "squf" }, { 0x25AD, "rect" }, { 0x25AE, "marker" }, { 0x25B3, "xutri" }, { 0x25B4, "utrif" }, { 0x25B5, "utri" }, { 0x25B8, "rtrif" }, { 0x25B9, "rtri" }, { 0x25BD, "xdtri" }, { 0x25BE, "dtrif" }, { 0x25BF, "dtri" }, { 0x25C2, "ltrif" }, { 0x25C3, "ltri" }, { 0x25CB, "cir" }, { 0x25CB, "xcirc" }, { 0x2605, "starf" }, { 0x2606, "star" }, { 0x260E, "phone" }, { 0x2640, "female" }, { 0x2642, "male" }, { 0x2660, "spades" }, { 0x2661, "hearts" }, { 0x2662, "diams" }, { 0x2663, "clubs" }, { 0x266A, "sung" }, { 0x266D, "flat" }, { 0x266E, "natur" }, { 0x266F, "sharp" }, { 0x2713, "check" }, { 0x2717, "cross" }, { 0x2720, "malt" }, { 0x2726, "lozf" }, { 0x2727, "loz" }, { 0x2736, "sextile" }, jade-1.2.1/style/SosofoObj.h100444 764 764 14646 6606574462 13471 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef SosofoObj_INCLUDED #define SosofoObj_INCLUDED 1 #include "ELObj.h" #include "Location.h" #include "FOTBuilder.h" #include "Owner.h" #include "CopyOwner.h" #include "Insn.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class ProcessContext; class Interpreter; class SosofoObj : public ELObj { public: virtual void process(ProcessContext &) = 0; SosofoObj *asSosofo(); virtual bool tableBorderStyle(StyleObj *&); virtual bool ruleStyle(ProcessContext &, StyleObj *&); virtual bool isRule(); virtual bool characterStyle(ProcessContext &, StyleObj *&, FOTBuilder::CharacterNIC &); virtual bool isCharacter(); }; class NextMatchSosofoObj : public SosofoObj { public: NextMatchSosofoObj(StyleObj *); void process(ProcessContext &); private: StyleObj *style_; }; class EmptySosofoObj : public SosofoObj { public: void process(ProcessContext &); }; class ProcessingMode; class ProcessNodeSosofoObj : public SosofoObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } ProcessNodeSosofoObj(const NodePtr &node, const ProcessingMode *mode); void process(ProcessContext &); private: NodePtr node_; const ProcessingMode *mode_; }; class ProcessNodeListSosofoObj : public SosofoObj { public: ProcessNodeListSosofoObj(NodeListObj *, const ProcessingMode *); void process(ProcessContext &); void traceSubObjects(Collector &) const; private: NodeListObj *nodeList_; const ProcessingMode *mode_; }; class AppendSosofoObj : public SosofoObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } AppendSosofoObj() { hasSubObjects_ = 1; } void process(ProcessContext &); void append(SosofoObj *); void traceSubObjects(Collector &) const; private: Vector v_; }; class LiteralSosofoObj : public SosofoObj { public: LiteralSosofoObj(ELObj *str) : str_(str) { hasSubObjects_ = 1; } void process(ProcessContext &); void traceSubObjects(Collector &) const; private: ELObj *str_; }; class CurrentNodePageNumberSosofoObj : public SosofoObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } CurrentNodePageNumberSosofoObj(const NodePtr &node) : node_(node) { } void process(ProcessContext &); private: NodePtr node_; }; class PageNumberSosofoObj : public SosofoObj { public: PageNumberSosofoObj() { } void process(ProcessContext &); }; class CompoundFlowObj; class FlowObj : public SosofoObj { public: FlowObj(); virtual FlowObj *copy(Collector &) const = 0; virtual CompoundFlowObj *asCompoundFlowObj(); virtual bool hasNonInheritedC(const Identifier *) const; virtual bool hasPseudoNonInheritedC(const Identifier *) const; virtual void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); void traceSubObjects(Collector &) const; void setStyle(StyleObj *); void process(ProcessContext &); virtual void pushStyle(ProcessContext &, unsigned &); virtual void popStyle(ProcessContext &, unsigned); virtual void processInner(ProcessContext &) = 0; protected: static bool setDisplayNIC(FOTBuilder::DisplayNIC &, const Identifier *, ELObj *, const Location &, Interpreter &); static bool isDisplayNIC(const Identifier *); StyleObj *style_; }; class CompoundFlowObj : public FlowObj { public: CompoundFlowObj() : content_(0) { } void processInner(ProcessContext &); void traceSubObjects(Collector &) const; void setContent(SosofoObj *content) { content_ = content; } CompoundFlowObj *asCompoundFlowObj(); protected: SosofoObj *content() const; private: SosofoObj *content_; }; class SequenceFlowObj : public CompoundFlowObj { public: SequenceFlowObj() { } void processInner(ProcessContext &); FlowObj *copy(Collector &) const; }; class ProcessingMode; class ProcessChildrenSosofoObj : public SosofoObj { public: ProcessChildrenSosofoObj(const ProcessingMode *mode) : mode_(mode) { } void process(ProcessContext &); private: const ProcessingMode *mode_; }; class ProcessChildrenTrimSosofoObj : public SosofoObj { public: ProcessChildrenTrimSosofoObj(const ProcessingMode *mode) : mode_(mode) { } void process(ProcessContext &); private: const ProcessingMode *mode_; }; class SetNonInheritedCsSosofoObj : public SosofoObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } SetNonInheritedCsSosofoObj(FlowObj *, const InsnPtr &, ELObj **); ~SetNonInheritedCsSosofoObj(); void process(ProcessContext &); void traceSubObjects(Collector &) const; bool characterStyle(ProcessContext &, StyleObj *&, FOTBuilder::CharacterNIC &); bool isCharacter(); bool ruleStyle(ProcessContext &, StyleObj *&); bool isRule(); private: ELObj *resolve(ProcessContext &); FlowObj *flowObj_; ELObj **display_; InsnPtr code_; }; class Expression; // This wraps a flow object that has a label:. class LabelSosofoObj : public SosofoObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } LabelSosofoObj(SymbolObj *, const Location &, SosofoObj *content); void process(ProcessContext &); void traceSubObjects(Collector &) const; private: SymbolObj *label_; Owner locp_; SosofoObj *content_; }; // This wraps the content of a sosofo with a content-map:. class ContentMapSosofoObj : public SosofoObj { public: ContentMapSosofoObj(ELObj *, const Location *, SosofoObj *content); void process(ProcessContext &); void traceSubObjects(Collector &) const; private: ELObj *contentMap_; const Location *locp_; SosofoObj *content_; }; class DiscardLabeledSosofoObj : public SosofoObj { public: DiscardLabeledSosofoObj(SymbolObj *, SosofoObj *); void process(ProcessContext &); void traceSubObjects(Collector &) const; private: SymbolObj *label_; SosofoObj *content_; }; class PageTypeSosofoObj : public SosofoObj { public: PageTypeSosofoObj(unsigned, SosofoObj *, SosofoObj *); void process(ProcessContext &); void traceSubObjects(Collector &) const; private: unsigned pageTypeFlag_; SosofoObj *match_; SosofoObj *noMatch_; }; inline void FlowObj::setStyle(StyleObj *style) { style_ = style; } inline void AppendSosofoObj::append(SosofoObj *obj) { v_.push_back(obj); } inline SosofoObj *CompoundFlowObj::content() const { return content_; } #ifdef DSSSL_NAMESPACE } #endif #endif /* not SosofoObj_INCLUDED */ jade-1.2.1/style/Style.h100444 764 764 16372 6606574462 12664 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef Style_INCLUDED #define Style_INCLUDED 1 #include "types.h" #include "StringC.h" #include "Named.h" #include #include "ELObj.h" #include "Vector.h" #include "Ptr.h" #include "Resource.h" #include "Owner.h" #include "Insn.h" #include "FOTBuilder.h" #include "Boolean.h" #include "Node.h" #include "Location.h" #include "ProcessingMode.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class StyleStack; class Interpreter; class VarStyleObj; // InheritedC represents the specification of a value // of an inherited characteristic. // It is also used as a prototype for other specifications of // values for that characteristic: // the identifier for an inherited characteristic contains the // InheritedC that specifies its initial value. class InheritedC : public Resource { public: InheritedC(const Identifier *ident, unsigned index); virtual ~InheritedC(); virtual void set(VM &vm, const VarStyleObj *, FOTBuilder &, ELObj *&, Vector &dependencies) const = 0; virtual ELObj *value(VM &, const VarStyleObj *, Vector &) const = 0; virtual ConstPtr make(ELObj *, const Location &, Interpreter &) const = 0; unsigned index() const; const Identifier *identifier() const; void setIdentifier(const Identifier *); protected: void invalidValue(const Location &, Interpreter &) const; private: const Identifier *ident_; // The index of the inherited characteristic (not the specification). unsigned index_; }; class VarInheritedC : public InheritedC { public: VarInheritedC(const ConstPtr &, const InsnPtr &code, const Location &); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ELObj *value(VM &, const VarStyleObj *, Vector &) const; virtual ConstPtr make(ELObj *, const Location &, Interpreter &) const; private: ConstPtr inheritedC_; InsnPtr code_; Location loc_; }; class StyleObjIter { public: StyleObjIter(); void append(const Vector > *, const VarStyleObj *); ConstPtr next(const VarStyleObj *&); private: size_t i_; size_t vi_; Vector styleVec_; Vector > *> vecs_; }; class StyleObj : public ELObj { public: StyleObj *asStyle(); virtual void appendIter(StyleObjIter &) const = 0; }; struct StyleSpec : public Resource { StyleSpec(Vector > &, Vector > &); Vector > forceSpecs; Vector > specs; }; class BasicStyleObj : public StyleObj { public: virtual void appendIterForce(StyleObjIter &) const = 0; virtual void appendIterNormal(StyleObjIter &) const = 0; }; class VarStyleObj : public BasicStyleObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } VarStyleObj(const ConstPtr &, StyleObj *use, ELObj **display, const NodePtr &node); ~VarStyleObj(); void appendIter(StyleObjIter &) const; void appendIterForce(StyleObjIter &) const; void appendIterNormal(StyleObjIter &) const; const NodePtr &node() const; ELObj **display() const; void traceSubObjects(Collector &) const; private: ConstPtr styleSpec_; StyleObj *use_; ELObj **display_; NodePtr node_; }; class OverriddenStyleObj : public StyleObj { public: OverriddenStyleObj(BasicStyleObj *basic, StyleObj *override); void appendIter(StyleObjIter &) const; void traceSubObjects(Collector &) const; private: BasicStyleObj *basic_; StyleObj *override_; }; class MergeStyleObj : public StyleObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } MergeStyleObj(); void append(StyleObj *); void appendIter(StyleObjIter &) const; void traceSubObjects(Collector &) const; private: Vector styles_; }; class ColorObj : public ELObj { public: ColorObj *asColor(); virtual void set(FOTBuilder &) const = 0; virtual void setBackground(FOTBuilder &) const = 0; }; class DeviceRGBColorObj : public ColorObj { public: DeviceRGBColorObj(unsigned char, unsigned char, unsigned char); void set(FOTBuilder &) const; void setBackground(FOTBuilder &) const; private: FOTBuilder::DeviceRGBColor color_; }; class ColorSpaceObj : public ELObj { public: ColorSpaceObj *asColorSpace(); virtual ELObj *makeColor(int argc, ELObj **argv, Interpreter &, const Location &) = 0; }; class DeviceRGBColorSpaceObj : public ColorSpaceObj { public: ELObj *makeColor(int argc, ELObj **argv, Interpreter &interp, const Location &); }; struct InheritedCInfo : public Resource { InheritedCInfo(const ConstPtr &, const VarStyleObj *, unsigned valLevel, unsigned specLevel, const ProcessingMode::Rule *, const Ptr &); ConstPtr spec; Ptr prev; unsigned valLevel; unsigned specLevel; const ProcessingMode::Rule *rule; // If there are dependencies, then the cached value can only // be used only when the "value" flow object is at this level. ELObj *cachedValue; const VarStyleObj *style; // Includes both direct and indirect dependencies. Vector dependencies; }; struct PopList : public Resource { PopList(const Ptr &); Vector list; // List of the indices of those ICs that have dependencies // (ie that use actual-*) directly or indirectly. Vector dependingList; Ptr prev; }; class StyleStack { public: StyleStack(); // These append on to dependencies. ELObj *actual(const ConstPtr &, const Location &, Interpreter &, Vector &dependencies); ELObj *actual(const ConstPtr &, Interpreter &, Vector &dependencies); ELObj *inherited(const ConstPtr &, unsigned specLevel, Interpreter &, Vector &dependencies); void push(StyleObj *, VM &, FOTBuilder &); void pushStart(); void pushContinue(StyleObj *, const ProcessingMode::Rule *, const NodePtr &, Messenger *); void pushEnd(VM &, FOTBuilder &); void pop(); void pushEmpty() { level_++; } void popEmpty() { level_--; } unsigned level() const { return level_; } void trace(Collector &) const; private: Vector > inheritedCInfo_; unsigned level_; Ptr popList_; }; inline PopList::PopList(const Ptr &p) : prev(p) { } inline const Identifier *InheritedC::identifier() const { return ident_; } inline void InheritedC::setIdentifier(const Identifier *ident) { ident_ = ident; } inline unsigned InheritedC::index() const { return index_; } inline ELObj **VarStyleObj::display() const { return display_; } inline const NodePtr &VarStyleObj::node() const { return node_; } inline void StyleStack::pushStart() { level_++; popList_ = new PopList(popList_); } inline void StyleStack::push(StyleObj *style, VM &vm, FOTBuilder &fotb) { pushStart(); pushContinue(style, 0, NodePtr(), 0); pushEnd(vm, fotb); } inline ELObj *StyleStack::actual(const ConstPtr &ic, Interpreter &interp, Vector &dep) { return actual(ic, Location(), interp, dep); } #ifdef DSSSL_NAMESPACE } #endif #endif /* not Style_INCLUDED */ jade-1.2.1/style/StyleEngine.h100444 764 764 1745 6606574462 13770 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef StyleEngine_INCLUDED #define StyleEngine_INCLUDED 1 #include "Boolean.h" #include "Node.h" #include "Message.h" #include "SgmlParser.h" #include "FOTBuilder.h" #include "GroveManager.h" #include "dsssl_ns.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class Interpreter; class STYLE_API StyleEngine { public: StyleEngine(Messenger &, GroveManager &, int unitsPerInch, bool debugMode, bool dsssl2, const FOTBuilder::Extension * = 0); void defineVariable(const StringC &); void parseSpec(SgmlParser &specParser, const CharsetInfo &charset, const StringC &id, Messenger &mgr); void process(const NodePtr &, FOTBuilder &); ~StyleEngine(); private: StyleEngine(const StyleEngine &); // undefined void operator=(const StyleEngine &); // undefined Interpreter *interpreter_; }; #ifdef DSSSL_NAMESPACE } #endif #endif /* not StyleEngine_INCLUDED */ jade-1.2.1/style/stylelib.h100444 764 764 551 6604607720 13333 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #define BUILD_LIBSP #include "config.h" #undef BUILD_LIBSP #define BUILD_LIBSTYLE #ifdef SP_USE_DLL #undef SP_API #define SP_API SP_DLLIMPORT #endif #ifdef _MSC_VER #pragma warning (disable: 4355) #endif #include "dsssl_ns.h" #ifdef SP_PCH #include "style_pch.h" #endif jade-1.2.1/style/style_pch.h100444 764 764 1237 6604607720 13520 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "Interpreter.h" #include "Collector.h" #include "DssslApp.h" #include "DssslSpecEventHandler.h" #include "ELObj.h" #include "ELObjMessageArg.h" #include "EvalContext.h" #include "Expression.h" #include "FOTBuilder.h" #include "GroveManager.h" #include "Insn.h" #include "Insn2.h" #include "Interpreter.h" #include "InterpreterMessages.h" #include "MacroFlowObj.h" #include "NumberCache.h" #include "Pattern.h" #include "ProcessContext.h" #include "ProcessingMode.h" #include "SchemeParser.h" #include "SosofoObj.h" #include "Style.h" #include "StyleEngine.h" #include "VM.h" jade-1.2.1/style/VM.h100444 764 764 2704 6604607720 12050 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef VM_INCLUDED #define VM_INCLUDED 1 #include "Collector.h" #include "EvalContext.h" #include "Location.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class ELObj; class ContinuationObj; class Interpreter; class Insn; class VM : public EvalContext, private Collector::DynamicRoot { public: VM(Interpreter &); VM(EvalContext &, Interpreter &); virtual ~VM(); ELObj **sp; Interpreter *interp; ELObj **closure; ELObj *protectClosure; ELObj **frame; int nActualArgs; Location closureLoc; ELObj *eval(const Insn *, ELObj **display = 0, ELObj *arg = 0); void initStack(); void needStack(int); void pushFrame(const Insn *next, int argsPushed); const Insn *popFrame(); void setClosureArgToCC(); void trace(Collector &) const; Vector modeStack; private: void growStack(int); void init(); void stackTrace(); ELObj **slim; ELObj **sbase; struct ControlStackEntry { int frameSize; // before pushing args ELObj **closure; ELObj *protectClosure; Location closureLoc; ContinuationObj *continuation; const Insn *next; }; ControlStackEntry *csp; ControlStackEntry *csbase; ControlStackEntry *cslim; friend class ContinuationObj; }; inline void VM::needStack(int n) { if (slim - sp < n) growStack(n); } #ifdef DSSSL_NAMESPACE } #endif #endif /* not VM_INCLUDED */ jade-1.2.1/style/Collector.cxx100444 764 764 15355 6604607714 14060 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "config.h" #include "Collector.h" #include "macros.h" #include #if 0 #define DEBUG #endif Collector::Collector(size_t maxSize) : freePtr_(&allObjectsList_), currentColor_(Object::someColor), blocks_(0), lastTraced_(0), totalObjects_(0), maxSize_(maxSize) { allObjectsList_.makeHead(); permanentFinalizersList_.makeHead(); } Collector::~Collector() { if (freePtr_ != &allObjectsList_) { for (Object *p = allObjectsList_.next(); p != freePtr_; p = p->next()) { if (!p->hasFinalizer_) break; p->finalize(); } } { for (Object *p = permanentFinalizersList_.next(); p != &permanentFinalizersList_; p = p->next()) { ASSERT(p->hasFinalizer_); p->finalize(); } } while (blocks_) { Block *tem = blocks_; blocks_ = blocks_->next; delete tem; } } void Collector::makeSpace() { unsigned long nLive = collect(); // Ensure that at least one-quarter of the heap is free, but don't allocate fewer // than 512 objects. if (freePtr_ == &allObjectsList_ || totalObjects_ - nLive < (totalObjects_ >> 2) || totalObjects_ < 128) { size_t allocObjs; if (totalObjects_ < 128) allocObjs = 512; else { allocObjs = (totalObjects_ >> 2) - (totalObjects_ - nLive); if (allocObjs < 512) allocObjs = 512; } if (freePtr_ == &allObjectsList_) { blocks_ = new Block(blocks_, allocObjs, maxSize_, freePtr_->prev()); freePtr_ = blocks_->firstObj; } else blocks_ = new Block(blocks_, allocObjs, maxSize_, freePtr_); totalObjects_ += allocObjs; } #ifdef DEBUG check(); #endif } void Collector::check() { size_t n = 0; bool allocated = 1; bool allowFinalizer = 1; for (Object *p = allObjectsList_.next(); p != &allObjectsList_; p = p->next()) { if (p == freePtr_) allocated = 0; else if (allocated) { if (p->color() != currentColor_) abort(); if (allowFinalizer) { if (!p->hasFinalizer_) allowFinalizer = 0; } else if (p->hasFinalizer_) abort(); } if (p->next()->prev() != p) abort(); if (p->prev()->next() != p) abort(); n++; } if (n != totalObjects_) abort(); } // Link block in after follow. Collector::Block::Block(Block *p, size_t n, size_t sz, Object *follow) : next(p) { Object *next = follow->next_; Object *prev = follow; Object *cur = (Object *)::operator new(n * sz); firstObj = follow->next_ = cur; for (size_t i = 0; i < n; i++) { Object *tem = (i == n - 1 ? next : (Object *)((char *)cur + sz)); cur->next_ = tem; cur->prev_ = prev; prev = cur; cur = tem; } next->prev_ = prev; } unsigned long Collector::collect() { Object *oldFreePtr = freePtr_; unsigned long nLive = 0; currentColor_ = (currentColor_ == Object::someColor ? Object::anotherColor : Object::someColor); lastTraced_ = &allObjectsList_; traceStaticRoots(); traceDynamicRoots(); if (lastTraced_ != &allObjectsList_) { Object *scanPtr = allObjectsList_.next(); for (;;) { if (scanPtr->hasSubObjects()) scanPtr->traceSubObjects(*this); nLive++; Object *next = scanPtr->next(); if (scanPtr->hasFinalizer_) scanPtr->moveAfter(&allObjectsList_); if (scanPtr == lastTraced_) { freePtr_ = next; break; } scanPtr = next; } } else freePtr_ = allObjectsList_.next(); lastTraced_ = 0; for (Object *p = freePtr_; p != oldFreePtr; p = p->next()) { if (!p->hasFinalizer_) break; p->finalize(); } #ifdef DEBUG check(); #endif return nLive; } void Collector::makePermanent(Object *obj) { if (!obj->hasSubObjects()) { // Handle the simple case quickly. if (obj->color() != Object::permanentColor) { totalObjects_--; obj->setColor(Object::permanentColor); obj->readOnly_ = 1; if (obj->hasFinalizer_) obj->moveAfter(&permanentFinalizersList_); else { obj->next_->prev_ = obj->prev_; obj->prev_->next_ = obj->next_; } } } else { Object::Color saveColor = currentColor_; currentColor_ = Object::permanentColor; lastTraced_ = &allObjectsList_; trace(obj); if (lastTraced_ != &allObjectsList_) { Object *scanPtr = allObjectsList_.next(); for (;;) { scanPtr->readOnly_ = 1; if (scanPtr->hasSubObjects()) scanPtr->traceSubObjects(*this); totalObjects_--; Object *next = scanPtr->next(); if (scanPtr->hasFinalizer_) scanPtr->moveAfter(&permanentFinalizersList_); else { // unlink from allObjectsList_ scanPtr->next_->prev_ = scanPtr->prev_; scanPtr->prev_->next_ = scanPtr->next_; } if (scanPtr == lastTraced_) break; scanPtr = next; } } lastTraced_ = 0; currentColor_ = saveColor; } } void Collector::makeReadOnly1(Object *obj) { Object::Color saveColor = currentColor_; currentColor_ = (currentColor_ == Object::someColor ? Object::anotherColor : Object::someColor); lastTraced_ = &allObjectsList_; trace(obj); if (lastTraced_ != &allObjectsList_) { Object *scanPtr = allObjectsList_.next(); Object *firstNonFinal = 0; Object *lim; for (;;) { if (scanPtr->hasSubObjects()) scanPtr->traceSubObjects(*this); Object *next = scanPtr->next(); if (scanPtr->hasFinalizer_) scanPtr->moveAfter(&allObjectsList_); else if (!firstNonFinal) firstNonFinal = scanPtr; if (scanPtr == lastTraced_) { lim = next; break; } scanPtr = next; } // We have 1 or more objects to be made read-only in currentColor // Followed by 0 or more objects with finalizers in saveColor // Followed by 0 or more objects without finalizers in saveColor for (scanPtr = allObjectsList_.next(); scanPtr != lim; scanPtr = scanPtr->next()) { scanPtr->readOnly_ = 1; scanPtr->setColor(saveColor); } if (firstNonFinal) { for (; scanPtr != freePtr_ && scanPtr->hasFinalizer_; scanPtr = scanPtr->next()) ; if (scanPtr != lim) { Object *last = lim->prev(); // Move section of list from firstNonFinal up to lastTraced but not including // lim to before scanPtr firstNonFinal->prev()->next_ = last->next(); last->next()->prev_ = firstNonFinal->prev(); firstNonFinal->prev_ = scanPtr->prev(); last->next_ = scanPtr->prev()->next(); firstNonFinal->prev()->next_ = firstNonFinal; last->next()->prev_ = last; } } } lastTraced_ = 0; currentColor_ = saveColor; #ifdef DEBUG check(); #endif } void Collector::traceDynamicRoots() { for (DynamicRoot *p = dynRootList_.next_; p != &dynRootList_; p = p->next_) p->trace(*this); } Collector::DynamicRoot::~DynamicRoot() { unlink(); } void Collector::unallocateObject(void *obj) { ((Object *)obj)->moveAfter(freePtr_); } jade-1.2.1/style/DssslApp.cxx100444 764 764 23432 6606574462 13663 0ustar jjcjjc// Copyright (c) 1996, 1997 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "DssslApp.h" #include "StorageManager.h" #include "DssslAppMessages.h" #include "StyleEngine.h" #include "sptchar.h" #include "macros.h" #include "LocNode.h" #include "SdNode.h" #include "InputSource.h" #include "jade_version.h" #include "ArcEngine.h" #include #include #ifdef SP_HAVE_LOCALE #include #endif #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif DssslApp::DssslApp(int unitsPerInch) : GroveApp("unicode"), unitsPerInch_(unitsPerInch), dssslSpecOption_(0), debugMode_(0), dsssl2_(0) { registerOption('G'); registerOption('2'); registerOption('d', SP_T("dsssl_spec")); registerOption('V', SP_T("variable")); } int DssslApp::init(int argc, AppChar **argv) { int ret = GroveApp::init(argc, argv); #ifdef SP_HAVE_LOCALE // Since we use strtod(), must have C numeric setlocale(LC_NUMERIC, "C"); #endif return ret; } int DssslApp::processSysid(const StringC &sysid) { rootSystemId_ = sysid; ParsedSystemId v; if (!entityManager()->parseSystemId(sysid, systemCharset(), 0, 0, *this, v)) return 0; for (size_t i = v.size(); i > 0; i--) if (v[i - 1].storageManager->inheritable()) { ParsedSystemId specId; specId.resize(1); StorageObjectSpec &spec = specId[0]; spec = v[i - 1]; StringC &s = spec.specId; // replace an up to 5 character extension with .dsl for (size_t j = 0; j < 5; j++) { if (s.size() < j + 1) break; if (s[s.size() - j - 1] == '.') { s.resize(s.size() - j - 1); break; } } if (strcmp(v[i - 1].storageManager->type(), "OSFILE") == 0) defaultOutputBasename_ = s; if (!dssslSpecOption_) { static const Char ext[] = { '.', 'd', 's', 'l' }; s.append(ext, SIZEOF(ext)); specId.unparse(systemCharset(), 0, dssslSpecSysid_); } break; } return GroveApp::processSysid(sysid); } void DssslApp::processOption(AppChar opt, const AppChar *arg) { switch (opt) { case 'G': debugMode_ = 1; break; case '2': dsssl2_ = 1; break; case 'd': dssslSpecId_.resize(0); dssslSpecSysid_ = convertInput(arg); dssslSpecOption_ = 1; splitOffId(dssslSpecSysid_, dssslSpecId_); break; case 'V': defineVars_.push_back(convertInput(arg)); break; case 'v': message(DssslAppMessages::versionInfo, StringMessageArg(convertInput(JADE_VERSION))); // fall through default: GroveApp::processOption(opt, arg); } } void DssslApp::splitOffId(StringC &sysid, StringC &id) { id.resize(0); for (size_t i = sysid.size(); i > 0; i--) { if (sysid[i - 1] == '#') { id.assign(sysid.data() + i, sysid.size() - i); sysid.resize(i - 1); break; } } } int DssslApp::generateEvents(ErrorCountEventHandler *eceh) { groveTable_.insert(rootSystemId_, rootNode_); // Since the thread parsing the DSSSL spec is a different thread // from the thread parsing the document, we can't share an // entity manager. // The document parser has already been inited and so will // use the current entity manager. // The spec parser hasn't yet been inited and so will use // a new entity manager. // The parser thread is started in GroveApp::generateEvents // which hasn't happened yet. clearEntityManager(); return GroveApp::generateEvents(eceh); } Boolean DssslApp::getDssslSpecFromGrove() { NodeListPtr nl; if (rootNode_->getProlog(nl) != accessOK) return 0; for (;;) { NodePtr nd; if (nl->first(nd) != accessOK) break; GroveString pi; if (nd->getSystemData(pi) == accessOK) { Location loc; const LocNode *lnd = LocNode::convert(nd); if (lnd) lnd->getLocation(loc); if (getDssslSpecFromPi(pi.data(), pi.size(), loc)) return 1; } if (nl.assignRest() != accessOK) break; } return 0; } Boolean DssslApp::getDssslSpecFromPi(const Char *s, size_t n, const Location &loc) { static struct { const char *key; Boolean (DssslApp::*handler)(const Char *s, size_t, const Location &); } pis[] = { { "xml-stylesheet", &DssslApp::handleAttlistPi }, { "xml:stylesheet", &DssslApp::handleAttlistPi }, { "stylesheet", &DssslApp::handleAttlistPi }, { "dsssl", &DssslApp::handleSimplePi }, }; for (size_t i = 0; i < SIZEOF(pis); i++) { size_t len = strlen(pis[i].key); if (n >= len && matchCi(s, len, pis[i].key) && (n == len || isS(s[len]))) { s += len; n -= len; return (this->*pis[i].handler)(s, n, loc); } } return 0; } Boolean DssslApp::handleSimplePi(const Char *s, size_t n, const Location &loc) { skipS(s, n); if (n == 0) return 0; StringC sysid(s, n); splitOffId(sysid, dssslSpecId_); return entityManager()->expandSystemId(sysid, loc, 0, systemCharset(), 0, *this, dssslSpecSysid_); } Boolean DssslApp::handleAttlistPi(const Char *s, size_t n, const Location &loc) { // FIXME maybe give warnings if syntax is wrong Boolean hadHref = 0; StringC href; Boolean isDsssl = 0; StringC name; StringC value; while (getAttribute(s, n, name, value)) { if (matchCi(name, "type")) { static const char *types[] = { "text/dsssl", "text/x-dsssl", "application/dsssl", "application/x-dsssl" }; for (size_t i = 0; i < SIZEOF(types); i++) if (matchCi(value, types[i])) { isDsssl = 1; break; } if (!isDsssl) return 0; } else if (matchCi(name, "href")) { hadHref = 1; value.swap(href); } } if (!isDsssl || !hadHref) return 0; splitOffId(href, dssslSpecId_); // FIXME should use location of attribute value rather than location of PI return entityManager()->expandSystemId(href, loc, 0, systemCharset(), 0, *this, dssslSpecSysid_); } void DssslApp::skipS(const Char *&s, size_t &n) { while (n > 0 && isS(*s)) s++, n--; } Boolean DssslApp::isS(Char c) { return c <= CHAR_MAX && isspace((unsigned char)c); } Boolean DssslApp::matchCi(const StringC &s, const char *key) { return matchCi(s.data(), s.size(), key); } Boolean DssslApp::matchCi(const Char *s, size_t n, const char *key) { for (; *key; key++, s++, n--) { if (!n) return 0; if (*s != tolower(*key) && *s != toupper(*key)) return 0; } return n == 0; } Boolean DssslApp::getAttribute(const Char *&s, size_t &n, StringC &name, StringC &value) { name.resize(0); value.resize(0); skipS(s, n); for (;;) { if (n == 0) return 0; if (*s == '=' || isS(*s)) break; name += *s; s++, n--; } skipS(s, n); if (n == 0 || *s != '=') return 0; s++, n--; skipS(s, n); Char quote = 0; if (n > 0 && (*s == '"' || *s == '\'')) { quote = *s; s++, n--; } for (;;) { if (n == 0) { if (quote) return 0; break; } if (quote) { if (*s == quote) { s++, n--; break; } } else if (isS(*s)) break; value += *s; s++, n--; } // FIXME resolve numeric character references return 1; } Boolean DssslApp::initSpecParser() { if (!dssslSpecOption_ && !getDssslSpecFromGrove() && dssslSpecSysid_.size() == 0) { message(DssslAppMessages::noSpec); return 0; } SgmlParser::Params params; params.sysid = dssslSpecSysid_; params.entityManager = entityManager().pointer(); params.options = &options_; specParser_.init(params); specParser_.allLinkTypesActivated(); return 1; } void DssslApp::processGrove() { if (!initSpecParser()) return; const FOTBuilder::Extension *extensions = 0; Owner fotb(makeFOTBuilder(extensions)); if (!fotb) return; StyleEngine se(*this, *this, unitsPerInch_, debugMode_, dsssl2_, extensions); for (size_t i = 0; i < defineVars_.size(); i++) se.defineVariable(defineVars_[i]); se.parseSpec(specParser_, systemCharset(), dssslSpecId_, *this); se.process(rootNode_, *fotb); } bool DssslApp::load(const StringC &sysid, const Vector &active, const NodePtr &parent, NodePtr &rootNode, const Vector &architecture) { SgmlParser::Params params; params.sysid = sysid; const NodePtr *ndp = groveTable_.lookup(params.sysid); if (ndp) { rootNode = *ndp; return 1; } ErrorCountEventHandler *eceh; const SdNode *sdNode; NodePtr parentRoot; if (parent && parent->getGroveRoot(parentRoot) == accessOK && (sdNode = SdNode::convert(parentRoot)) != 0 && sdNode->getSd(params.sd, params.prologSyntax, params.instanceSyntax) == accessOK) { params.entityType = SgmlParser::Params::subdoc; eceh = GroveBuilder::make(groveTable_.count() + 1, this, this, 0, params.sd, params.prologSyntax, params.instanceSyntax, rootNode); } else eceh = GroveBuilder::make(groveTable_.count() + 1, this, this, 0, rootNode); Owner eh(eceh); groveTable_.insert(params.sysid, rootNode); params.entityManager = entityManager().pointer(); params.options = &options_; SgmlParser parser; parser.init(params); for (size_t i = 0; i < active.size(); i++) parser.activateLinkType(active[i]); parser.allLinkTypesActivated(); if (architecture.size() > 0) { SelectOneArcDirector director(architecture, *eh); ArcEngine::parseAll(parser, director, director, eceh->cancelPtr()); } else parser.parseAll(*eh, eceh->cancelPtr()); return 1; } bool DssslApp::readEntity(const StringC &sysid, StringC &contents) { Owner in(entityManager()->open(sysid, systemCharset(), InputSourceOrigin::make(), 0, *this)); if (!in) return 0; for (;;) { Xchar c = in->get(*this); if (c == InputSource::eE) break; in->extendToBufferEnd(); contents.append(in->currentTokenStart(), in->currentTokenLength()); } return !in->accessError(); } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/DssslSpecEventHandler.cxx100444 764 764 30175 6606574462 16337 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "DssslSpecEventHandler.h" #include "InterpreterMessages.h" #include "InternalInputSource.h" #include "FOTBuilder.h" #include "macros.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif // FIXME Stop parsing spec when we know we don't we have everything we ever need class TextInputSourceOrigin : public InputSourceOrigin { public: TextInputSourceOrigin(Text &text); Boolean defLocation(Offset off, const Origin *&, Index &) const; const Text &text() const { return text_; } void noteCharRef(Index, const NamedCharRef &) { CANNOT_HAPPEN(); } void setExternalInfo(ExternalInfo *) { CANNOT_HAPPEN(); } InputSourceOrigin *copy() const { return new TextInputSourceOrigin(*this); } const Location &parent() const { return refLocation_; } private: Text text_; Location refLocation_; }; DssslSpecEventHandler::DssslSpecEventHandler(Messenger &mgr) : mgr_(&mgr), gatheringBody_(0) { } void DssslSpecEventHandler::load(SgmlParser &specParser, const CharsetInfo &charset, const StringC &id, Vector &parts) { parser_ = &specParser; charset_ = &charset; Doc *doc = findDoc(StringC()); // Load it now so that we can get the concrete syntax. doc->load(*this); Part *tem; if (id.size() == 0) tem = doc->resolveFirstPart(*this); else { StringC normId(id); ConstPtr syn = parser_->instanceSyntax(); if (!syn.isNull()) syn->generalSubstTable()->subst(normId); tem = doc->refPart(normId)->resolve(*this); } resolveParts(tem, parts); } DssslSpecEventHandler::Doc *DssslSpecEventHandler::findDoc(const StringC &sysid) { for (IListIter iter(docs_); !iter.done(); iter.next()) if (sysid == iter.cur()->sysid()) return iter.cur(); Doc *doc = new Doc(sysid); docs_.insert(doc); return doc; } void DssslSpecEventHandler::resolveParts(Part *part, Vector &parts) { if (!part) return; parts.push_back(part); if (part->setMark()) { mgr_->message(InterpreterMessages::useLoop); return; } const Vector &use = part->use(); for (size_t i = 0; i < use.size(); i++) { Part *tem = use[i]->resolve(*this); resolveParts(tem, parts); } part->setMark(0); } void DssslSpecEventHandler::loadDoc(SgmlParser &parser, Doc &doc) { currentDoc_ = &doc; gotArc_ = 0; ArcEngine::parseAll(parser, *mgr_, *this, cancelPtr()); if (!gotArc_) { mgr_->message(InterpreterMessages::specNotArc); return; } } EventHandler * DssslSpecEventHandler::arcEventHandler(const Notation *notation, const Vector &, const SubstTable *) { if (!notation) return 0; const StringC *pubid = notation->externalId().publicIdString(); static const char dssslArc[] = "ISO/IEC 10179:1996//NOTATION DSSSL Architecture Definition Document//EN"; if (pubid == 0 || pubid->size() != sizeof(dssslArc) - 1) return 0; for (int i = 0; dssslArc[i] != '\0'; i++) { if (dssslArc[i] != (*pubid)[i]) return 0; } gotArc_ = 1; return this; } void DssslSpecEventHandler::message(MessageEvent *event) { mgr_->dispatchMessage(event->message()); delete event; } static struct { const char *gi; void (DssslSpecEventHandler::*start)(const StartElementEvent &); void (DssslSpecEventHandler::*end)(const EndElementEvent &); } mappingTable[] = { { "STYLE-SPECIFICATION", &DssslSpecEventHandler::styleSpecificationStart, &DssslSpecEventHandler::styleSpecificationEnd }, { "STYLE-SPECIFICATION-BODY", &DssslSpecEventHandler::styleSpecificationBodyStart, &DssslSpecEventHandler::styleSpecificationBodyEnd }, { "EXTERNAL-SPECIFICATION", &DssslSpecEventHandler::externalSpecificationStart, &DssslSpecEventHandler::externalSpecificationEnd }, }; void DssslSpecEventHandler::endProlog(EndPrologEvent *event) { currentDoc_->setLocation(event->location()); delete event; } void DssslSpecEventHandler::startElement(StartElementEvent *event) { for (size_t i = 0; i < SIZEOF(mappingTable); i++) if (event->name() == mappingTable[i].gi) { (this->*(mappingTable[i].start))(*event); break; } delete event; } void DssslSpecEventHandler::endElement(EndElementEvent *event) { for (size_t i = 0; i < SIZEOF(mappingTable); i++) if (event->name() == mappingTable[i].gi) { (this->*(mappingTable[i].end))(*event); break; } delete event; } void DssslSpecEventHandler::data(DataEvent *event) { if (gatheringBody_) currentBody_.addChars(event->data(), event->dataLength(), event->location()); delete event; } const Text * DssslSpecEventHandler::attributeText(const StartElementEvent &event, const char *attName) { const AttributeList &atts = event.attributes(); StringC attNameString; for (const char *p = attName; *p; p++) attNameString += Char(*p); unsigned index; if (atts.attributeIndex(attNameString, index)) { const AttributeValue *val = atts.value(index); if (val) return val->text(); } return 0; } const StringC * DssslSpecEventHandler::attributeString(const StartElementEvent &event, const char *attName) { const Text *text = attributeText(event, attName); if (text) return &text->string(); else return 0; } ConstPtr DssslSpecEventHandler::attributeEntity(const StartElementEvent &event, const char *attName) { const AttributeList &atts = event.attributes(); StringC attNameString; for (const char *p = attName; *p; p++) attNameString += Char(*p); unsigned index; if (!atts.attributeIndex(attNameString, index)) return 0; const AttributeSemantics *sem = atts.semantics(index); if (!sem || sem->nEntities() != 1) return 0; return sem->entity(0); } void DssslSpecEventHandler::externalSpecificationStart(const StartElementEvent &event) { StringC empty; const StringC *idP = attributeString(event, "ID"); if (!idP) idP = ∅ PartHeader *header = currentDoc_->refPart(*idP); const Entity *ent = attributeEntity(event, "DOCUMENT").pointer(); if (!ent) return; const ExternalEntity *ext = ent->asExternalEntity(); if (!ext) return; const StringC &sysid = ext->externalId().effectiveSystemId(); if (sysid.size()) { Doc *doc = findDoc(sysid); const StringC *specidP = attributeString(event, "SPECID"); if (!specidP) header->setPart(new ExternalFirstPart(doc)); else header->setPart(new ExternalPart(doc->refPart(*specidP, event.location()))); } } void DssslSpecEventHandler::externalSpecificationEnd(const EndElementEvent &) { // nothing to do } void DssslSpecEventHandler::styleSpecificationStart(const StartElementEvent &event) { StringC empty; const StringC *idP = attributeString(event, "ID"); if (!idP) idP = ∅ PartHeader *header = currentDoc_->refPart(*idP); // FIXME give an error (or ignore) if header has part already const Text *useP = attributeText(event, "USE"); header->setPart(currentPart_ = new Part); if (useP) { const StringC &use = useP->string(); size_t i = 0; for (;;) { size_t j; for (j = i; j < use.size() && use[j] != ' '; j++) ; if (j > i) currentPart_->addUse(currentDoc_->refPart(StringC(use.data() + i, j - i), useP->charLocation(i))); if (j >= use.size()) break; i = j + 1; } } // FIXME Give warning if selected part is incomplete } void DssslSpecEventHandler::styleSpecificationEnd(const EndElementEvent &event) { currentPart_ = 0; } void DssslSpecEventHandler::styleSpecificationBodyStart(const StartElementEvent &event) { if (currentPart_) { currentBody_.clear(); ConstPtr entity = attributeEntity(event, "CONTENT"); if (entity.isNull()) gatheringBody_ = 1; else currentPart_->append(new EntityBodyElement(entity)); } } void DssslSpecEventHandler::styleSpecificationBodyEnd(const EndElementEvent &event) { if (gatheringBody_) { if (currentPart_) currentPart_->append(new ImmediateBodyElement(currentBody_)); gatheringBody_ = 0; } } TextInputSourceOrigin::TextInputSourceOrigin(Text &text) { text_.swap(text); } Boolean TextInputSourceOrigin::defLocation(Offset off, const Origin *&origin, Index &index) const { return text_.charLocation(off, origin, index); } DssslSpecEventHandler::Doc::Doc() : loaded_(0) { } DssslSpecEventHandler::Doc::Doc(const StringC &sysid) : sysid_(sysid), loaded_(0) { } void DssslSpecEventHandler::Doc::setLocation(const Location &loc) { loc_ = loc; } DssslSpecEventHandler::Part * DssslSpecEventHandler::Doc::resolveFirstPart(DssslSpecEventHandler &eh) { load(eh); PartHeader *header = 0; for (IListIter iter(headers_); !iter.done(); iter.next()) header = iter.cur(); if (!header) { if (!loc_.origin().isNull()) { eh.mgr_->setNextLocation(loc_); eh.mgr_->message(InterpreterMessages::noParts); } return 0; } return header->resolve(eh); } void DssslSpecEventHandler::Doc::load(DssslSpecEventHandler &eh) { if (loaded_) return; loaded_ = 1; if (sysid_.size() > 0) { SgmlParser::Params params; params.parent = eh.parser_; params.sysid = sysid_; SgmlParser specParser(params); eh.loadDoc(specParser, *this); } else eh.loadDoc(*eh.parser_, *this); } DssslSpecEventHandler::PartHeader * DssslSpecEventHandler::Doc::refPart(const StringC &id) { for (IListIter iter(headers_); !iter.done(); iter.next()) if (iter.cur()->id() == id) return iter.cur(); PartHeader *header = new PartHeader(this, id); headers_.insert(header); return header; } DssslSpecEventHandler::PartHeader * DssslSpecEventHandler::Doc::refPart(const StringC &id, const Location &refLoc) { PartHeader *header = refPart(id); header->setRefLoc(refLoc); return header; } DssslSpecEventHandler::BodyElement::~BodyElement() { } DssslSpecEventHandler::ImmediateBodyElement::ImmediateBodyElement(Text &text) { text_.swap(text); } void DssslSpecEventHandler ::ImmediateBodyElement::makeInputSource(DssslSpecEventHandler &, Owner &in) { TextInputSourceOrigin *origin = new TextInputSourceOrigin(text_); in = new InternalInputSource(origin->text().string(), origin); } DssslSpecEventHandler ::EntityBodyElement::EntityBodyElement(const ConstPtr &entity) : entity_(entity) { } void DssslSpecEventHandler ::EntityBodyElement::makeInputSource(DssslSpecEventHandler &eh, Owner &in) { const InternalEntity *internal = entity_->asInternalEntity(); if (internal) { in = new InternalInputSource(internal->string(), EntityOrigin::make(entity_, Location())); return; } const StringC &sysid = entity_->asExternalEntity()->externalId().effectiveSystemId(); if (sysid.size()) in = eh.parser_->entityManager().open(sysid, *eh.charset_, InputSourceOrigin::make(), 0, *eh.mgr_); } DssslSpecEventHandler::PartHeader::PartHeader(Doc *doc, const StringC &id) : doc_(doc), id_(id) { } void DssslSpecEventHandler::PartHeader::setRefLoc(const Location &loc) { if (refLoc_.origin().isNull()) refLoc_ = loc; } DssslSpecEventHandler::Part * DssslSpecEventHandler::PartHeader::resolve(DssslSpecEventHandler &eh) { doc_->load(eh); if (!specPart_) { eh.mgr_->setNextLocation(refLoc_); eh.mgr_->message(InterpreterMessages::missingPart, StringMessageArg(id_)); return 0; } return specPart_->resolve(eh); } DssslSpecEventHandler::SpecPart::~SpecPart() { } DssslSpecEventHandler::ExternalPart::ExternalPart(PartHeader *header) : header_(header) { } DssslSpecEventHandler::Part * DssslSpecEventHandler::ExternalPart::resolve(DssslSpecEventHandler &eh) { return header_->resolve(eh); } DssslSpecEventHandler::ExternalFirstPart::ExternalFirstPart(Doc *doc) : doc_(doc) { } DssslSpecEventHandler::Part * DssslSpecEventHandler::ExternalFirstPart::resolve(DssslSpecEventHandler &eh) { return doc_->resolveFirstPart(eh); } DssslSpecEventHandler::Part::Part() : mark_(0) { } DssslSpecEventHandler::Part * DssslSpecEventHandler::Part::resolve(DssslSpecEventHandler &) { return this; } void DssslSpecEventHandler::Part::append(BodyElement *element) { bodyElements_.append(element); } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/ELObj.cxx100444 764 764 56646 6606574462 13102 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "ELObj.h" #include "Interpreter.h" #include "InterpreterMessages.h" #include "macros.h" #include #include #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class ReverseNodeListObj : public NodeListObj { public: ReverseNodeListObj(NodeListObj *); NodePtr nodeListFirst(EvalContext &, Interpreter &); NodeListObj *nodeListRest(EvalContext &, Interpreter &); NodeListObj *nodeListReverse(EvalContext &context, Interpreter &interp); NodePtr nodeListRef(long, EvalContext &, Interpreter &); long nodeListLength(EvalContext &context, Interpreter &interp); void traceSubObjects(Collector &) const; private: NodeListObj *reversed(EvalContext &context, Interpreter &interp); NodeListObj *nl_; NodeListObj *reversed_; }; ELObj::ELObj() { hasSubObjects_ = 0; } bool ELObj::isEqual(ELObj &) { return false; } bool ELObj::isEquiv(ELObj &obj) { return isEqual(obj); } bool ELObj::isNil() const { return false; } bool ELObj::isList() const { return false; } bool ELObj::isTrue() const { return true; } PairObj *ELObj::asPair() { return 0; } VectorObj *ELObj::asVector() { return 0; } SymbolObj *ELObj::asSymbol() { return 0; } KeywordObj *ELObj::asKeyword() { return 0; } StringObj *ELObj::convertToString() { return 0; } FunctionObj *ELObj::asFunction() { return 0; } SosofoObj *ELObj::asSosofo() { return 0; } ColorObj *ELObj::asColor() { return 0; } ColorSpaceObj *ELObj::asColorSpace() { return 0; } AddressObj *ELObj::asAddress() { return 0; } DisplaySpaceObj *ELObj::asDisplaySpace() { return 0; } InlineSpaceObj *ELObj::asInlineSpace() { return 0; } GlyphSubstTableObj *ELObj::asGlyphSubstTable() { return 0; } bool ELObj::optSingletonNodeList(EvalContext &, Interpreter &, NodePtr &) { return 0; } NodeListObj *ELObj::asNodeList() { return 0; } NamedNodeListObj *ELObj::asNamedNodeList() { return 0; } StyleObj *ELObj::asStyle() { return 0; } BoxObj *ELObj::asBox() { return 0; } void ELObj::print(Interpreter &interp, OutputCharStream &out) { out << "#"; } void ELObj::print(Interpreter &interp, OutputCharStream &out, unsigned) { print(interp, out); } bool ELObj::exactIntegerValue(long &) { return false; } bool ELObj::realValue(double &) { return false; } bool ELObj::inexactRealValue(double &) { return false; } bool ELObj::lengthValue(long &n) { return false; } ELObj::QuantityType ELObj::quantityValue(long &, double &, int &) { return noQuantity; } const LengthSpec *ELObj::lengthSpec() const { return 0; } bool ELObj::stringData(const Char *&, size_t &) { return false; } bool ELObj::charValue(Char &) { return false; } const FOTBuilder::GlyphId *ELObj::glyphId() const { return 0; } ELObj *ELObj::resolveQuantities(bool, Interpreter &, const Location &) { return this; } ErrorObj::ErrorObj() { } UnspecifiedObj::UnspecifiedObj() { } NilObj::NilObj() { } bool NilObj::isNil() const { return true; } bool NilObj::isList() const { return true; } void NilObj::print(Interpreter &, OutputCharStream &out) { out << "()"; } TrueObj::TrueObj() { } void TrueObj::print(Interpreter &, OutputCharStream &out) { out << "#t"; } FalseObj::FalseObj() { } bool FalseObj::isTrue() const { return false; } void FalseObj::print(Interpreter &, OutputCharStream &out) { out << "#f"; } SymbolObj::SymbolObj(StringObj *name) : name_(name), cValue_(FOTBuilder::symbolFalse) { hasSubObjects_ = 1; } void SymbolObj::traceSubObjects(Collector &c) const { c.trace(name_); } void SymbolObj::print(Interpreter &interp, OutputCharStream &out) { out.write(name()->data(), name()->size()); } SymbolObj *SymbolObj::asSymbol() { return this; } StringObj *SymbolObj::convertToString() { return name(); } KeywordObj::KeywordObj(const Identifier *ident) : ident_(ident) { } KeywordObj *KeywordObj::asKeyword() { return this; } bool KeywordObj::isEqual(ELObj &obj) { KeywordObj *k = obj.asKeyword(); return k && k->ident_ == ident_; } void KeywordObj::print(Interpreter &interp, OutputCharStream &out) { out << ident_->name() << ":"; } PairObj::PairObj(ELObj *car, ELObj *cdr) : car_(car), cdr_(cdr) { hasSubObjects_ = 1; } bool PairObj::isEqual(ELObj &obj) { PairObj *p = obj.asPair(); // FIXME need non-recursive implementation return p && equal(*p->car(), *car()) && equal(*p->cdr(), *cdr()); } bool PairObj::isEquiv(ELObj &obj) { PairObj *p = obj.asPair(); // FIXME need non-recursive implementation return p && eqv(*p->car(), *car()) && eqv(*p->cdr(), *cdr()); } void PairObj::traceSubObjects(Collector &c) const { c.trace(car_); c.trace(cdr_); } ELObj *PairObj::resolveQuantities(bool force, Interpreter &interp, const Location &loc) { bool fail = 0; PairObj *pair = this; for (;;) { ELObj *tem = pair->car_->resolveQuantities(force, interp, loc); if (!tem) fail = 1; else { if (pair->permanent()) interp.makePermanent(tem); pair->car_ = tem; } PairObj *nextPair = pair->cdr_->asPair(); if (!nextPair) break; pair = nextPair; } ELObj *tem = pair->cdr_->resolveQuantities(force, interp, loc); if (!tem) fail = 1; else { if (pair->permanent()) interp.makePermanent(tem); pair->cdr_ = tem; } if (fail) return 0; else return this; } PairObj *PairObj::asPair() { return this; } bool PairObj::isList() const { ELObj *p = cdr_; while (!p->isNil()) { PairObj *pair = p->asPair(); if (!pair) return false; p = pair->cdr(); } return true; } void PairObj::print(Interpreter &interp, OutputCharStream &out) { out << "("; car_->print(interp, out); ELObj *p = cdr_; for (;;) { if (p->isNil()) { out << ")"; return; } PairObj *pair = p->asPair(); if (!pair) { out << " . "; p->print(interp, out); out << ")"; return; } out << " "; pair->car()->print(interp, out); p = pair->cdr(); } } VectorObj::VectorObj() { hasSubObjects_ = 1; } VectorObj::VectorObj(Vector &v) { hasSubObjects_ = 1; v.swap(*this); } void VectorObj::traceSubObjects(Collector &c) const { for (size_t i = 0; i < Vector::size(); i++) c.trace((*this)[i]); } VectorObj *VectorObj::asVector() { return this; } bool VectorObj::isEquiv(ELObj &) { return 0; } bool VectorObj::isEqual(ELObj &obj) { VectorObj *v = obj.asVector(); if (!v) return 0; if (size() != v->size()) return 0; for (size_t i = 0; i < size(); i++) if (!equal(*(*this)[i], *(*v)[i])) return 0; return 1; } void VectorObj::print(Interpreter &interp, OutputCharStream &out) { out << "#("; Vector &v = *this; for (size_t i = 0; i < v.size(); i++) { if (i) out << " "; ELObj *tem = v[i]; if (!tem) out << "#"; else { v[i] = 0; tem->print(interp, out); v[i] = tem; } } out << ")"; } ELObj *VectorObj::resolveQuantities(bool force, Interpreter &interp, const Location &loc) { bool fail = 0; Vector &v = *this; for (size_t i = 0; i < v.size(); i++) { ELObj *tem = v[i]->resolveQuantities(force, interp, loc); if (tem) { if (permanent()) interp.makePermanent(tem); v[i] = tem; } else fail = 1; } if (fail) return 0; return this; } CharObj::CharObj(Char ch) : ch_(ch) { } void CharObj::display(Interpreter &interp, OutputCharStream &out) const { out.put(ch_); // FIXME } void CharObj::print(Interpreter &, OutputCharStream &out) { out << "#\\"; out.put(ch_); // FIXME } bool CharObj::charValue(Char &c) { c = ch_; return 1; } bool CharObj::isEqual(ELObj &obj) { Char c; return obj.charValue(c) && c == ch_; } StringObj::StringObj() { } StringObj::StringObj(const StringC &str) : StringC(str) { } StringObj::StringObj(const Char *s, size_t len) : StringC(s, len) { } bool StringObj::stringData(const Char *&s, size_t &n) { s = data(); n = size(); return true; } bool StringObj::isEqual(ELObj &obj) { const Char *s; size_t n; return (obj.stringData(s, n) && n == size() && (n == 0 || memcmp(s, data(), n*sizeof(Char)) == 0)); } StringObj *StringObj::convertToString() { return this; } void StringObj::print(Interpreter &interp, OutputCharStream &out) { // FIXME out << "\""; const Char *s = data(); for (size_t i = 0; i < size(); i++) switch (s[i]) { case '\\': case '"': out << "\\"; // fall through default: out.put(s[i]); break; } out << "\""; } IntegerObj::IntegerObj() : n_(0) { } IntegerObj::IntegerObj(long n) : n_(n) { } bool IntegerObj::isEqual(ELObj &obj) { long n; return obj.exactIntegerValue(n) && n == n_; } void IntegerObj::print(Interpreter &interp, OutputCharStream &out) { print(interp, out, 10); } void IntegerObj::print(Interpreter &, OutputCharStream &out, unsigned radix) { if (radix == 10) { if (n_ < 0) out << '-' << (unsigned long)-n_; else out << (unsigned long)n_; return; } if (n_ == 0) { out << '0'; return; } unsigned long n; if (n_ < 0) { out << '-'; n = -n_; } else n = n_; char buf[64]; int i = 0; while (n != 0) { buf[i++] = "0123456789abcdef"[n % radix]; n /= radix; } while (i > 0) out << buf[--i]; } bool IntegerObj::exactIntegerValue(long &n) { n = n_; return true; } bool IntegerObj::realValue(double &n) { n = n_; return true; } ELObj::QuantityType IntegerObj::quantityValue(long &val, double &, int &dim) { val = n_; dim = 0; return longQuantity; } RealObj::RealObj(double n) : n_(n) { } bool RealObj::isEqual(ELObj &obj) { double n; return obj.inexactRealValue(n) && n == n_; } bool RealObj::realValue(double &n) { n = n_; return true; } bool RealObj::inexactRealValue(double &n) { n = n_; return true; } ELObj::QuantityType RealObj::quantityValue(long &, double &val, int &dim) { val = n_; dim = 0; return doubleQuantity; } void RealObj::print(Interpreter &, OutputCharStream &out) { char buf[1024]; sprintf(buf, "%g", n_); out << buf; } LengthObj::LengthObj(long n) : n_(n) { } bool LengthObj::lengthValue(long &n) { n = n_; return true; } ELObj::QuantityType LengthObj::quantityValue(long &val, double &, int &dim) { val = n_; dim = 1; return longQuantity; } bool LengthObj::isEqual(ELObj &obj) { long n; double d; int dim; switch (obj.quantityValue(n, d, dim)) { case noQuantity: break; case doubleQuantity: return dim == 1 && d == n_; case longQuantity: return dim == 1 && n == n_; } return 0; } void LengthObj::print(Interpreter &interp, OutputCharStream &out) { char buf[1024]; sprintf(buf, "%gpt", n_ * 72.0/interp.unitsPerInch()); out << buf; } QuantityObj::QuantityObj(double val, int dim) : val_(val), dim_(dim) { } bool QuantityObj::isEqual(ELObj &obj) { long n; double d; int dim; switch (obj.quantityValue(n, d, dim)) { case noQuantity: break; case doubleQuantity: return dim == dim_ && d == val_; case longQuantity: return dim == dim_ && n == val_; } return 0; } ELObj::QuantityType QuantityObj::quantityValue(long &, double &val, int &dim) { val = val_; dim = dim_; return doubleQuantity; } void QuantityObj::print(Interpreter &interp, OutputCharStream &out) { char buf[1024]; sprintf(buf, "%gpt%d", val_ * pow(72.0/interp.unitsPerInch(), double(dim_)), dim_); out << buf; } bool QuantityObj::realValue(double &d) { if (dim_ != 0) return 0; d = val_; return 1; } bool QuantityObj::inexactRealValue(double &d) { if (dim_ != 0) return 0; d = val_; return 1; } LengthSpecObj::LengthSpecObj(const LengthSpec &spec) : lengthSpec_(new LengthSpec(spec)) { } const LengthSpec *LengthSpecObj::lengthSpec() const { return lengthSpec_.pointer(); } LengthSpec::LengthSpec() { for (int i = 0; i < nVals; i++) val_[i] = 0.0; } LengthSpec::LengthSpec(double d) { val_[0] = d; for (int i = 1; i < nVals; i++) val_[i] = 0.0; } LengthSpec::LengthSpec(Unknown unknown, double d) { int i; for (i = 0; i < unknown; i++) val_[i] = 0.0; val_[unknown] = d; for (i = unknown + 1; i < nVals; i++) val_[i] = 0.0; } void LengthSpec::operator+=(const LengthSpec &ls) { for (int i = 0; i < nVals; i++) val_[i] += ls.val_[i]; } void LengthSpec::operator-=(const LengthSpec &ls) { for (int i = 0; i < nVals; i++) val_[i] -= ls.val_[i]; } void LengthSpec::operator*=(double d) { for (int i = 0; i < nVals; i++) val_[i] *= d; } void LengthSpec::operator/=(double d) { for (int i = 0; i < nVals; i++) val_[i] /= d; } bool LengthSpec::convert(FOTBuilder::LengthSpec &result) const { // FIXME do some checking result.length = long(val_[0] < 0.0 ? val_[0] - 0.5 : val_[0] + .5); result.displaySizeFactor = val_[1]; return 1; } bool LengthSpec::convert(FOTBuilder::TableLengthSpec &result) const { // FIXME do some checking result.length = long(val_[0] < 0.0 ? val_[0] - 0.5 : val_[0] + .5); result.displaySizeFactor = val_[1]; result.tableUnitFactor = val_[2]; return 1; } DisplaySpaceObj::DisplaySpaceObj(const FOTBuilder::DisplaySpace &displaySpace) : displaySpace_(new FOTBuilder::DisplaySpace(displaySpace)) { } const FOTBuilder::DisplaySpace &DisplaySpaceObj::displaySpace() const { return *displaySpace_; } DisplaySpaceObj *DisplaySpaceObj::asDisplaySpace() { return this; } InlineSpaceObj::InlineSpaceObj(const FOTBuilder::InlineSpace &inlineSpace) : inlineSpace_(new FOTBuilder::InlineSpace(inlineSpace)) { } const FOTBuilder::InlineSpace &InlineSpaceObj::inlineSpace() const { return *inlineSpace_; } InlineSpaceObj *InlineSpaceObj::asInlineSpace() { return this; } UnresolvedLengthObj::UnresolvedLengthObj(long val, int valExp, Unit *unit) : val_(val), valExp_(valExp), unit_(unit) { } ELObj *UnresolvedLengthObj::resolveQuantities(bool force, Interpreter &interp, const Location &loc) { unsigned part; Location defLoc; if (!unit_->defined(part, defLoc)) { interp.setNextLocation(loc); interp.message(InterpreterMessages::undefinedQuantity, StringMessageArg(unit_->name())); return interp.makeError(); } return unit_->resolveQuantity(force, interp, val_, valExp_); } UnresolvedQuantityObj ::UnresolvedQuantityObj(double val, Unit *unit, int unitExp) : val_(val), unit_(unit), unitExp_(unitExp) { } ELObj *UnresolvedQuantityObj::resolveQuantities(bool force, Interpreter &interp, const Location &loc) { unsigned part; Location defLoc; if (!unit_->defined(part, defLoc)) { interp.setNextLocation(loc); interp.message(InterpreterMessages::undefinedQuantity, StringMessageArg(unit_->name())); return interp.makeError(); } return unit_->resolveQuantity(force, interp, val_, unitExp_); } GlyphIdObj::GlyphIdObj(const FOTBuilder::GlyphId &glyphId) : glyphId_(glyphId) { } const FOTBuilder::GlyphId *GlyphIdObj::glyphId() const { return &glyphId_; } bool GlyphIdObj::isEqual(ELObj &obj) { const FOTBuilder::GlyphId *p = obj.glyphId(); return (p && p->publicId == glyphId_.publicId && p->suffix == glyphId_.suffix); } GlyphSubstTableObj::GlyphSubstTableObj(const ConstPtr &table) : table_(table) { } GlyphSubstTableObj *GlyphSubstTableObj::asGlyphSubstTable() { return this; } AddressObj::AddressObj(FOTBuilder::Address::Type type, const NodePtr &node, const StringC &str1, const StringC &str2, const StringC &str3) { address_ = new FOTBuilder::Address; address_->type = type; address_->node = node; address_->params[0] = str1; address_->params[1] = str2; address_->params[2] = str3; } AddressObj *AddressObj::asAddress() { return this; } NodeListObj *NodeListObj::asNodeList() { return this; } NodeListObj *NodeListObj::nodeListNoOrder(Collector &) { return this; } NodeListObj *NodeListObj::nodeListChunkRest(EvalContext &context, Interpreter &interp, bool &chunk) { chunk = 0; return nodeListRest(context, interp); } bool NodeListObj::optSingletonNodeList(EvalContext &context, Interpreter &interp, NodePtr &node) { NodeListObj *rest = nodeListRest(context, interp); ELObjDynamicRoot protect(interp, rest); if (rest->nodeListFirst(context, interp)) return 0; node = nodeListFirst(context, interp); return 1; } NodePtr NodeListObj::nodeListRef(long n, EvalContext &context, Interpreter &interp) { if (n < 0) return NodePtr(); NodeListObj *nl = this; ELObjDynamicRoot protect(interp, nl); while (n > 0) { NodePtr nd(nl->nodeListFirst(context, interp)); if (!nd) return NodePtr(); GroveString str; if (nd->charChunk(interp, str) == accessOK && str.size() <= n) { bool chunk; nl = nl->nodeListChunkRest(context, interp, chunk); if (chunk) n -= str.size(); else n--; } else { nl = nl->nodeListRest(context, interp); n--; } protect = nl; } return nl->nodeListFirst(context, interp); } NodeListObj *NodeListObj::nodeListReverse(EvalContext &, Interpreter &interp) { return new (interp) ReverseNodeListObj(this); } long NodeListObj::nodeListLength(EvalContext &context, Interpreter &interp) { NodeListObj *nl = this; long n = 0; ELObjDynamicRoot protect(interp, nl); for (;;) { NodePtr nd(nl->nodeListFirst(context, interp)); if (!nd) break; bool chunk; nl = nl->nodeListChunkRest(context, interp, chunk); protect = nl; GroveString str; if (chunk && nd->charChunk(interp, str) == accessOK) n += str.size(); else n += 1; } return n; } bool NodeListObj::suppressError() { return 0; } NamedNodeListObj *NamedNodeListObj::asNamedNodeList() { return this; } NodePtrNodeListObj::NodePtrNodeListObj() { } NodePtrNodeListObj::NodePtrNodeListObj(const NodePtr &node) : node_(node) { } bool NodePtrNodeListObj::optSingletonNodeList(EvalContext &, Interpreter &, NodePtr &node) { node = node_; return 1; } NodePtr NodePtrNodeListObj::nodeListFirst(EvalContext &, Interpreter &) { return node_; } NodeListObj *NodePtrNodeListObj::nodeListRest(EvalContext &context, Interpreter &interp) { if (node_) return new (interp) NodePtrNodeListObj; else return this; } NodeListPtrNodeListObj::NodeListPtrNodeListObj(const NodeListPtr &nodeList) : nodeList_(nodeList) { } NodePtr NodeListPtrNodeListObj::nodeListFirst(EvalContext &, Interpreter &) { NodePtr nd; if (nodeList_->first(nd) == accessOK) return nd; else return NodePtr(); } NodeListObj *NodeListPtrNodeListObj::nodeListRest(EvalContext &context, Interpreter &interp) { NodeListPtr nl; if (nodeList_->rest(nl) == accessOK) return new (interp) NodeListPtrNodeListObj(nl); else return interp.makeEmptyNodeList(); } NodeListObj *NodeListPtrNodeListObj::nodeListChunkRest(EvalContext &context, Interpreter &interp, bool &chunk) { NodeListPtr nl; if (nodeList_->chunkRest(nl) == accessOK) { chunk = 1; return new (interp) NodeListPtrNodeListObj(nl); } else { chunk = 0; return interp.makeEmptyNodeList(); } } NodePtr NodeListPtrNodeListObj::nodeListRef(long i, EvalContext &, Interpreter &interp) { NodePtr nd; if (i < 0 || nodeList_->ref(i, nd) != accessOK) return NodePtr(); return nd; } NamedNodeListPtrNodeListObj ::NamedNodeListPtrNodeListObj(const NamedNodeListPtr &nnl) : namedNodeList_(nnl) { } NodePtr NamedNodeListPtrNodeListObj::namedNode(const Char *s, size_t n) { NodePtr node; if (namedNodeList_->namedNode(GroveString(s, n), node) != accessOK) node.clear(); return node; } bool NamedNodeListPtrNodeListObj::nodeName(const NodePtr &nd, GroveString &str) { return namedNodeList_->nodeName(nd, str) == accessOK; } size_t NamedNodeListPtrNodeListObj::normalize(Char *s, size_t n) { return namedNodeList_->normalize(s, n); } NodePtr NamedNodeListPtrNodeListObj::nodeListFirst(EvalContext &, Interpreter &) { if (!nodeList_) nodeList_ = namedNodeList_->nodeList(); NodePtr nd; if (nodeList_->first(nd) == accessOK) return nd; else return NodePtr(); } NodeListObj *NamedNodeListPtrNodeListObj::nodeListRest(EvalContext &context, Interpreter &interp) { if (!nodeList_) nodeList_ = namedNodeList_->nodeList(); NodeListPtr nl; if (nodeList_->rest(nl) == accessOK) return new (interp) NodeListPtrNodeListObj(nl); else return new (interp) NodePtrNodeListObj; } NodeListObj *NamedNodeListPtrNodeListObj::nodeListNoOrder(Collector &c) { return new (c) NodeListPtrNodeListObj(namedNodeList_->nodeListNoOrder()); } PairNodeListObj::PairNodeListObj(NodeListObj *head, NodeListObj *tail) : head_(head), tail_(tail) { hasSubObjects_ = 1; } NodePtr PairNodeListObj::nodeListFirst(EvalContext &context, Interpreter &interp) { if (head_) { NodePtr nd(head_->nodeListFirst(context, interp)); if (nd) return nd; head_ = 0; } return tail_->nodeListFirst(context, interp); } NodeListObj *PairNodeListObj::nodeListRest(EvalContext &context, Interpreter &interp) { if (!head_ || !head_->nodeListFirst(context, interp)) return tail_->nodeListRest(context, interp); NodeListObj *tem = head_->nodeListRest(context, interp); ELObjDynamicRoot protect(interp, tem); return new (interp) PairNodeListObj(tem, tail_); } NodeListObj *PairNodeListObj::nodeListChunkRest(EvalContext &context, Interpreter &interp, bool &chunk) { if (!head_ || !head_->nodeListFirst(context, interp)) return tail_->nodeListChunkRest(context, interp, chunk); NodeListObj *tem = head_->nodeListChunkRest(context, interp, chunk); ELObjDynamicRoot protect(interp, tem); return new (interp) PairNodeListObj(tem, tail_); } void PairNodeListObj::traceSubObjects(Collector &c) const { c.trace(head_); c.trace(tail_); } ReverseNodeListObj::ReverseNodeListObj(NodeListObj *nl) : nl_(nl), reversed_(0) { hasSubObjects_ = 1; } NodePtr ReverseNodeListObj::nodeListFirst(EvalContext &context, Interpreter &interp) { return reversed(context, interp)->nodeListFirst(context, interp); } NodeListObj *ReverseNodeListObj::nodeListRest(EvalContext &context, Interpreter &interp) { return reversed(context, interp)->nodeListRest(context, interp); } NodePtr ReverseNodeListObj::nodeListRef(long n, EvalContext &context, Interpreter &interp) { if (reversed_) return reversed_->nodeListRef(n, context, interp); if (n < 0) return NodePtr(); size_t len = nl_->nodeListLength(context, interp); if (n >= len) return 0; return nl_->nodeListRef(len - n - 1, context, interp); } NodeListObj *ReverseNodeListObj::reversed(EvalContext &context, Interpreter &interp) { if (!reversed_) { NodePtr nd(nl_->nodeListFirst(context, interp)); if (nd) { reversed_ = new (interp) NodePtrNodeListObj(nd); NodeListObj *tem = nl_; ELObjDynamicRoot protect(interp, tem); ELObjDynamicRoot protect2(interp, reversed_); for (;;) { tem = tem->nodeListRest(context, interp); protect = tem; nd = tem->nodeListFirst(context, interp); if (!nd) break; NodeListObj *single = new (interp) NodePtrNodeListObj(nd); protect2 = single; reversed_ = new (interp) PairNodeListObj(single, reversed_); } } else reversed_ = nl_; } return reversed_; } NodeListObj *ReverseNodeListObj::nodeListReverse(EvalContext &, Interpreter &) { return nl_; } long ReverseNodeListObj::nodeListLength(EvalContext &context, Interpreter &interp) { return nl_->nodeListLength(context, interp); } void ReverseNodeListObj::traceSubObjects(Collector &c) const { c.trace(nl_); c.trace(reversed_); } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/ELObjMessageArg.cxx100444 764 764 1107 6606574462 14777 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "ELObjMessageArg.h" #include "Interpreter.h" #include "OutputCharStream.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif ELObjMessageArg::ELObjMessageArg(ELObj *obj, Interpreter &interp) : StringMessageArg(convert(obj, interp)) { } StringC ELObjMessageArg::convert(ELObj *obj, Interpreter &interp) { StrOutputCharStream os; obj->print(interp, os); StringC result; os.extractString(result); return result; } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/Expression.cxx100444 764 764 124114 6606574462 14310 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "Insn.h" #include "Insn2.h" #include "Interpreter.h" #include "InterpreterMessages.h" #include "ELObjMessageArg.h" #include "Expression.h" #include "Style.h" #include "macros.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif Expression::Expression(const Location &loc) : loc_(loc) { } void Expression::optimize(Interpreter &, const Environment &, Owner &) { } ELObj *Expression::constantValue() const { return 0; } const Identifier *Expression::keyword() const { return 0; } void Expression::markBoundVars(BoundVarList &, bool) { } ConstantExpression::ConstantExpression(ELObj *obj, const Location &loc) : Expression(loc), obj_(obj) { } InsnPtr ConstantExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { return new ConstantInsn(obj_, new ResolveQuantitiesInsn(location(), next)); } void ConstantExpression::optimize(Interpreter &interp, const Environment &, Owner &expr) { ELObj *tem = obj_->resolveQuantities(0, interp, location()); if (tem) { interp.makePermanent(tem); expr = new ResolvedConstantExpression(tem, location()); } } bool ConstantExpression::canEval(bool) const { return 0; } const Identifier *ConstantExpression::keyword() const { const KeywordObj *k = obj_->asKeyword(); if (k) return k->identifier(); else return 0; } ResolvedConstantExpression::ResolvedConstantExpression(ELObj *obj, const Location &loc) : Expression(loc), obj_(obj) { } InsnPtr ResolvedConstantExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { return new ConstantInsn(obj_, next); } ELObj *ResolvedConstantExpression::constantValue() const { return obj_; } bool ResolvedConstantExpression::canEval(bool) const { return 1; } CallExpression::CallExpression(Owner &op, NCVector > &args, const Location &loc) : Expression(loc) { op.swap(op_); args.swap(args_); } bool CallExpression::canEval(bool) const { if (!op_->canEval(1)) return 0; for (size_t i = 0; i < args_.size(); i++) if (!args_[i]->canEval(1)) return 0; return 1; } int CallExpression::nArgs() { return args_.size(); } InsnPtr CallExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { op_->optimize(interp, env, op_); ELObj *value = op_->constantValue(); InsnPtr result; if (value) { FunctionObj *func = value->asFunction(); if (!func) { interp.setNextLocation(location()); interp.message(InterpreterMessages::callNonFunction, ELObjMessageArg(value, interp)); return new ErrorInsn; } if (nArgs() < func->nRequiredArgs()) { interp.setNextLocation(location()); interp.message(InterpreterMessages::missingArg); return new ErrorInsn; } if (nArgs() - func->nRequiredArgs() > func->nOptionalArgs()) { if (func->nKeyArgs()) { if ((nArgs() - func->nRequiredArgs() - func->nOptionalArgs()) & 1) { interp.setNextLocation(location()); interp.message(InterpreterMessages::oddKeyArgs); args_.resize(func->nRequiredArgs() + func->nOptionalArgs()); } } else if (!func->restArg()) { interp.setNextLocation(location()); interp.message(InterpreterMessages::tooManyArgs); args_.resize(func->nRequiredArgs() + func->nOptionalArgs()); } } int callerArgs; if (!next.isNull() && next->isReturn(callerArgs) && !interp.debugMode()) result = func->makeTailCallInsn(nArgs(), interp, location(), callerArgs); else result = func->makeCallInsn(nArgs(), interp, location(), next); } else { int n = nArgs(); int callerArgs; if (!next.isNull() && next->isReturn(callerArgs) && !interp.debugMode()) result = new TailApplyInsn(callerArgs, n, location()); else result = new ApplyInsn(n, location(), next); result = op_->compile(interp, env, stackPos + n, result); } for (size_t i = args_.size(); i > 0; i--) result = optimizeCompile(args_[i - 1], interp, env, stackPos + i - 1, result); return result; } void CallExpression::markBoundVars(BoundVarList &vars, bool shared) { op_->markBoundVars(vars, shared); for (size_t i = 0; i < args_.size(); i++) args_[i]->markBoundVars(vars, shared); } VariableExpression::VariableExpression(const Identifier *ident, const Location &loc) : Expression(loc), ident_(ident), isTop_(0) { } InsnPtr VariableExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { bool isFrame; int index; unsigned flags; if (env.lookup(ident_, isFrame, index, flags)) { bool boxed = BoundVar::flagsBoxed(flags); InsnPtr tem; int n; if (isFrame && !next.isNull() && next->isPopBindings(n, tem) && n == 1 && index - stackPos == -1) { if (flags & BoundVar::uninitFlag) tem = new CheckInitInsn(ident_, location(), tem); // This happens with named let. if (boxed) return new UnboxInsn(tem); else return tem; } if (flags & BoundVar::uninitFlag) tem = new CheckInitInsn(ident_, location(), next); else tem = next; if (boxed) tem = new UnboxInsn(tem); if (isFrame) return new StackRefInsn(index - stackPos, index, tem); else return new ClosureRefInsn(index, tem); } isTop_ = 1; Location loc; unsigned part; if (!ident_->defined(part, loc)) { interp.setNextLocation(location()); interp.message(InterpreterMessages::undefinedVariableReference, StringMessageArg(ident_->name())); return new ErrorInsn; } ELObj *val = ident_->computeValue(0, interp); if (!val) return new TopRefInsn(ident_, next); if (interp.isError(val)) return new ErrorInsn; return new ConstantInsn(val, next); } void VariableExpression::optimize(Interpreter &interp, const Environment &env, Owner &expr) { bool isFrame; int index; unsigned flags; if (env.lookup(ident_, isFrame, index, flags)) return; isTop_ = 1; Location loc; unsigned part; if (ident_->defined(part, loc)) { ELObj *obj = ident_->computeValue(0, interp); if (obj && !interp.isError(obj)) { interp.makePermanent(obj); expr = new ConstantExpression(obj, location()); expr->optimize(interp, env, expr); } } } bool VariableExpression::canEval(bool) const { return !isTop_ || ident_->evaluated(); } void VariableExpression::markBoundVars(BoundVarList &vars, bool shared) { vars.mark(ident_, BoundVar::usedFlag | (shared ? BoundVar::sharedFlag : 0)); } IfExpression::IfExpression(Owner &test, Owner &consequent, Owner &alternate, const Location &loc) : Expression(loc) { test.swap(test_); consequent.swap(consequent_); alternate.swap(alternate_); } bool IfExpression::canEval(bool maybeCall) const { return (test_->canEval(maybeCall) && consequent_->canEval(maybeCall) && alternate_->canEval(maybeCall)); } void IfExpression::optimize(Interpreter &interp, const Environment &env, Owner &expr) { test_->optimize(interp, env, test_); ELObj *obj = test_->constantValue(); if (obj) { if (obj->isTrue()) { expr = consequent_.extract(); expr->optimize(interp, env, expr); } else { expr = alternate_.extract(); expr->optimize(interp, env, expr); } } } InsnPtr IfExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { alternate_->optimize(interp, env, alternate_); if (alternate_->constantValue() == interp.makeFalse()) return test_->compile(interp, env, stackPos, new AndInsn(optimizeCompile(consequent_, interp, env, stackPos, next), next)); else return test_->compile(interp, env, stackPos, new TestInsn(optimizeCompile(consequent_, interp, env, stackPos, next), alternate_->compile(interp, env, stackPos, next))); } void IfExpression::markBoundVars(BoundVarList &vars, bool shared) { test_->markBoundVars(vars, shared); consequent_->markBoundVars(vars, shared); alternate_->markBoundVars(vars, shared); } OrExpression::OrExpression(Owner &test1, Owner &test2, const Location &loc) : Expression(loc) { test1.swap(test1_); test2.swap(test2_); } bool OrExpression::canEval(bool maybeCall) const { return (test1_->canEval(maybeCall) && test2_->canEval(maybeCall)); } void OrExpression::optimize(Interpreter &interp, const Environment &env, Owner &expr) { test1_->optimize(interp, env, test1_); ELObj *obj = test1_->constantValue(); if (obj) { if (obj->isTrue()) expr = test1_.extract(); else { expr = test2_.extract(); expr->optimize(interp, env, expr); } } } InsnPtr OrExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { return test1_->compile(interp, env, stackPos, new OrInsn(optimizeCompile(test2_, interp, env, stackPos, next), next)); } void OrExpression::markBoundVars(BoundVarList &vars, bool shared) { test1_->markBoundVars(vars, shared); test2_->markBoundVars(vars, shared); } CondFailExpression::CondFailExpression(const Location &loc) : Expression(loc) { } InsnPtr CondFailExpression::compile(Interpreter &, const Environment &, int, const InsnPtr &) { return new CondFailInsn(location()); } bool CondFailExpression::canEval(bool maybeCall) const { return 1; } CaseExpression::CaseExpression(Owner &key, NCVector &cases, Owner &elseClause, const Location &loc) : Expression(loc) { key.swap(key_); cases.swap(cases_); elseClause.swap(else_); } InsnPtr CaseExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { InsnPtr finish; if (else_) finish = new PopInsn(else_->compile(interp, env, stackPos, next)); else finish = new CaseFailInsn(location()); for (size_t i = 0; i < cases_.size(); i++) { InsnPtr match = cases_[i].expr->compile(interp, env, stackPos, next); for (size_t j = 0; j < nResolved_[i]; j++) finish = new CaseInsn(cases_[i].datums[j], match, finish); } // FIXME handle unresolved quantities return key_->compile(interp, env, stackPos, finish); } void CaseExpression::markBoundVars(BoundVarList &vars, bool shared) { key_->markBoundVars(vars, shared); for (size_t i = 0; i < cases_.size(); i++) cases_[i].expr->markBoundVars(vars, shared); if (else_) else_->markBoundVars(vars, shared); } bool CaseExpression::canEval(bool maybeCall) const { if (!key_->canEval(maybeCall)) return 0; if (else_ && !else_->canEval(maybeCall)) return 0; for (size_t i = 0; i < cases_.size(); i++) { if (!cases_[i].expr->canEval(maybeCall)) return 0; if (nResolved_[i] == cases_[i].datums.size()) return 0; } return 1; } void CaseExpression::optimize(Interpreter &interp, const Environment &env, Owner &expr) { key_->optimize(interp, env, key_); ELObj *k = key_->constantValue(); nResolved_.assign(cases_.size(), 0); bool unresolved = 0; for (size_t i = 0; i < cases_.size(); i++) { cases_[i].expr->optimize(interp, env, cases_[i].expr); int nResolved = 0; for (size_t j = 0; j < cases_[i].datums.size(); j++) { ELObj *tem = cases_[i].datums[j]->resolveQuantities(0, interp, location()); if (tem) { if (k && ELObj::eqv(*k, *tem)) { expr = cases_[i].expr.extract(); return; } if (j != nResolved) cases_[i].datums[j] = cases_[i].datums[nResolved]; cases_[i].datums[nResolved++] = tem; } else unresolved = 1; } nResolved_[i] = nResolved; } if (else_) { else_->optimize(interp, env, else_); if (k && !unresolved) expr = else_.extract(); } else if (k && !unresolved) { interp.setNextLocation(location()); interp.message(InterpreterMessages::caseFail, ELObjMessageArg(k, interp)); } if (unresolved) { interp.setNextLocation(location()); interp.message(InterpreterMessages::caseUnresolvedQuantities); } } LambdaExpression::LambdaExpression(Vector &formals, NCVector > &inits, int nOptional, bool hasRest, int nKey, Owner &body, const Location &loc) : Expression(loc) { formals.swap(formals_); inits.swap(inits_); body.swap(body_); sig_.nRequiredArgs = formals_.size() - nOptional - nKey - hasRest; sig_.nOptionalArgs = nOptional; sig_.restArg = hasRest; sig_.nKeyArgs = nKey; sig_.keys = formals_.begin() + formals_.size() - nKey; } bool LambdaExpression::canEval(bool maybeCall) const { if (!maybeCall) return 1; if (!body_->canEval(1)) return 0; for (size_t i = 0; i < inits_.size(); i++) if (inits_[i] && !inits_[i]->canEval(1)) return 0; return 1; } InsnPtr LambdaExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { BoundVarList boundVars; env.boundVars(boundVars); markBoundVars(boundVars, 0); boundVars.removeUnused(); BoundVarList formalVars(formals_, sig_.nRequiredArgs); for (int i = 0; i < sig_.nOptionalArgs + sig_.nKeyArgs; i++) { if (inits_[i]) inits_[i]->markBoundVars(formalVars, 0); formalVars.append(formals_[sig_.nRequiredArgs + i], 0); } if (sig_.restArg) formalVars.append(formals_.back(), 0); ASSERT(formalVars.size() == formals_.size()); body_->markBoundVars(formalVars, 0); InsnPtr code = optimizeCompile(body_, interp, Environment(formalVars, boundVars), formals_.size(), new ReturnInsn(formals_.size())); if (sig_.nOptionalArgs || sig_.restArg || sig_.nKeyArgs) { Vector entryPoints(sig_.nOptionalArgs + (sig_.restArg || sig_.nKeyArgs) + 1); // First entry point is for only required args supplied // Next entry is for one optional arg supplied, no rest arg // Next entry is for two optional args, no rest arg // .. // Next entry is for all optional args, no other args // Last entry is for all optional args supplied, and other args // (for this entry point all args are pushed; unspecified // keyword args are bound to 0). entryPoints.back() = code; // Box the rest arg if necessary. if (sig_.restArg && formalVars.back().boxed()) entryPoints.back() = new BoxStackInsn(-1 - sig_.nKeyArgs, entryPoints.back()); if (sig_.nKeyArgs) { // For each keyword argument test whether it is 0, // and if so initialize it. for (int i = sig_.nOptionalArgs + sig_.nKeyArgs - 1; i >= sig_.nOptionalArgs; i--) { int offset = i - (sig_.nOptionalArgs + sig_.nKeyArgs); InsnPtr &next = entryPoints.back(); InsnPtr set(new SetKeyArgInsn(offset, next)); if (formalVars[sig_.nRequiredArgs + i].boxed()) set = new BoxInsn(set); if (inits_[i]) { BoundVarList f(formalVars); f.resize(sig_.nRequiredArgs + i + sig_.restArg); set = optimizeCompile(inits_[i], interp, Environment(f, boundVars), formals_.size(), set); } else set = new ConstantInsn(interp.makeFalse(), set); next = new TestNullInsn(offset, set, next); } } if (sig_.restArg || sig_.nKeyArgs) { for (int i = sig_.nOptionalArgs + sig_.nKeyArgs - 1; i >= sig_.nOptionalArgs; i--) { if (formalVars[sig_.nRequiredArgs + i].boxed()) code = new BoxInsn(code); if (inits_[i]) { BoundVarList f(formalVars); f.resize(sig_.nRequiredArgs + i + sig_.restArg); code = optimizeCompile(inits_[i], interp, Environment(f, boundVars), f.size(), code); } else code = new ConstantInsn(interp.makeFalse(), code); } if (sig_.restArg) { if (formalVars.back().boxed()) code = new BoxInsn(code); code = new ConstantInsn(interp.makeNil(), code); } entryPoints[sig_.nOptionalArgs] = code; } for (int i = sig_.nOptionalArgs - 1; i >= 0; i--) { InsnPtr tem(entryPoints[i + 1]); if (formalVars[sig_.nRequiredArgs + i].boxed()) tem = new BoxInsn(tem); if (inits_[i]) { BoundVarList f(formalVars); f.resize(sig_.nRequiredArgs + i); entryPoints[i] = optimizeCompile(inits_[i], interp, Environment(f, boundVars), f.size(), tem); } else entryPoints[i] = new ConstantInsn(interp.makeFalse(), tem); } for (int i = 0; i < sig_.nOptionalArgs; i++) { if (formalVars[sig_.nRequiredArgs + i].boxed()) { for (int j = i; j < sig_.nOptionalArgs; j++) entryPoints[j + 1] = new BoxArgInsn(i + sig_.nRequiredArgs, entryPoints[j + 1]); if (sig_.nKeyArgs || sig_.restArg) entryPoints.back() = new BoxStackInsn(i - sig_.nKeyArgs - sig_.restArg - sig_.nOptionalArgs, entryPoints.back()); } } code = new VarargsInsn(sig_, entryPoints, location()); } for (int i = 0; i < sig_.nRequiredArgs; i++) if (formalVars[i].boxed()) code = new BoxArgInsn(i, code); return compilePushVars(interp, env, stackPos, boundVars, 0, new ClosureInsn(&sig_, code, boundVars.size(), next)); } InsnPtr Expression::compilePushVars(Interpreter &interp, const Environment &env, int stackPos, const BoundVarList &vars, size_t varIndex, const InsnPtr &next) { if (varIndex >= vars.size()) return next; bool isFrame; int index; unsigned flags; if (!env.lookup(vars[varIndex].ident, isFrame, index, flags)) CANNOT_HAPPEN(); if (isFrame) return new FrameRefInsn(index, compilePushVars(interp, env, stackPos + 1, vars, varIndex + 1, next)); else return new ClosureRefInsn(index, compilePushVars(interp, env, stackPos + 1, vars, varIndex + 1, next)); } void LambdaExpression::markBoundVars(BoundVarList &vars, bool shared) { for (int i = 0; i < sig_.nOptionalArgs + sig_.nKeyArgs; i++) if (inits_[i]) { Vector f(formals_); f.resize(sig_.nRequiredArgs + i + (sig_.restArg && i >= sig_.nOptionalArgs)); vars.rebind(f); inits_[i]->markBoundVars(vars, 1); vars.unbind(f); } vars.rebind(formals_); body_->markBoundVars(vars, 1); vars.unbind(formals_); } LetExpression::LetExpression(Vector &vars, NCVector > &inits, Owner &body, const Location &loc) : Expression(loc) { vars.swap(vars_); inits.swap(inits_); body.swap(body_); } bool LetExpression::canEval(bool maybeCall) const { if (!body_->canEval(maybeCall)) return 0; for (size_t i = 0; i < inits_.size(); i++) if (!inits_[i]->canEval(1)) return 0; return 1; } InsnPtr LetExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { int nVars = vars_.size(); Environment bodyEnv(env); BoundVarList boundVars(vars_); body_->markBoundVars(boundVars, 0); bodyEnv.augmentFrame(boundVars, stackPos); return compileInits(interp, env, boundVars, 0, stackPos, optimizeCompile(body_, interp, bodyEnv, stackPos + nVars, PopBindingsInsn::make(nVars, next))); } InsnPtr LetExpression::compileInits(Interpreter &interp, const Environment &env, const BoundVarList &initVars, size_t initIndex, int stackPos, const InsnPtr &next) { if (initIndex >= inits_.size()) return next; InsnPtr tem = compileInits(interp, env, initVars, initIndex + 1, stackPos + 1, next); if (initVars[initIndex].boxed()) tem = new BoxInsn(tem); return optimizeCompile(inits_[initIndex], interp, env, stackPos, tem); } void LetExpression::markBoundVars(BoundVarList &vars, bool shared) { for (size_t i = 0; i < inits_.size(); i++) inits_[i]->markBoundVars(vars, shared); vars.rebind(vars_); body_->markBoundVars(vars, shared); vars.unbind(vars_); } LetStarExpression::LetStarExpression(Vector &vars, NCVector > &inits, Owner &body, const Location &loc) : LetExpression(vars, inits, body, loc) { } InsnPtr LetStarExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { int nVars = vars_.size(); Environment bodyEnv(env); BoundVarList vars; for (int i = 0; i < nVars; i++) { if (i > 0) inits_[i]->markBoundVars(vars, 0); vars.append(vars_[i], 0); } body_->markBoundVars(vars, 0); bodyEnv.augmentFrame(vars, stackPos); return compileInits(interp, env, vars, 0, stackPos, optimizeCompile(body_, interp, bodyEnv, stackPos + vars_.size(), PopBindingsInsn::make(nVars, next))); } InsnPtr LetStarExpression::compileInits(Interpreter &interp, const Environment &env, const BoundVarList &initVars, size_t initIndex, int stackPos, const InsnPtr &next) { if (initIndex >= inits_.size()) return next; Environment nextEnv(env); BoundVarList vars; vars.append(initVars[initIndex].ident, initVars[initIndex].flags); nextEnv.augmentFrame(vars, stackPos); InsnPtr tem = compileInits(interp, nextEnv, initVars, initIndex + 1, stackPos + 1, next); if (initVars[initIndex].boxed()) tem = new BoxInsn(tem); return optimizeCompile(inits_[initIndex], interp, env, stackPos, tem); } LetrecExpression::LetrecExpression(Vector &vars, NCVector > &inits, Owner &body, const Location &loc) : Expression(loc) { vars.swap(vars_); inits.swap(inits_); body.swap(body_); } bool LetrecExpression::canEval(bool maybeCall) const { if (!body_->canEval(maybeCall)) return 0; for (size_t i = 0; i < inits_.size(); i++) if (!inits_[i]->canEval(1)) return 0; return 1; } InsnPtr LetrecExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { int nVars = vars_.size(); BoundVarList vars(vars_, nVars, BoundVar::assignedFlag); Environment bodyEnv(env); for (size_t i = 0; i < nVars; i++) inits_[i]->markBoundVars(vars, 0); body_->markBoundVars(vars, 0); bodyEnv.augmentFrame(vars, stackPos); InsnPtr tem = optimizeCompile(body_, interp, bodyEnv, stackPos + nVars, PopBindingsInsn::make(nVars, next)); for (size_t i = 0; i < nVars; i++) vars[i].flags |= BoundVar::uninitFlag; for (int i = 0; i < nVars; i++) { if (vars[i].boxed()) tem = new SetBoxInsn(nVars, tem); else tem = new SetImmediateInsn(nVars, tem); } tem = compileInits(interp, bodyEnv, 0, stackPos + nVars, tem); for (int i = nVars; i > 0; --i) { if (vars[i - 1].boxed()) tem = new BoxInsn(tem); tem = new ConstantInsn(0, tem); } return tem; } InsnPtr LetrecExpression::compileInits(Interpreter &interp, const Environment &env, size_t initIndex, int stackPos, const InsnPtr &next) { if (initIndex >= inits_.size()) return next; return optimizeCompile(inits_[initIndex], interp, env, stackPos, compileInits(interp, env, initIndex + 1, stackPos + 1, next)); } void LetrecExpression::markBoundVars(BoundVarList &vars, bool shared) { vars.rebind(vars_); for (size_t i = 0; i < inits_.size(); i++) inits_[i]->markBoundVars(vars, shared); body_->markBoundVars(vars, shared); vars.unbind(vars_); } QuasiquoteExpression::QuasiquoteExpression(NCVector > &members, Vector &spliced, Type type, const Location &loc) : Expression(loc), spliced_(spliced), type_(type) { members.swap(members_); } InsnPtr QuasiquoteExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { InsnPtr tem(next); size_t n = members_.size(); if (type_ == vectorType) { bool splicy = 0; for (size_t i = 0; i < n; i++) { if (spliced_[i]) { splicy = 1; break; } } if (!splicy) { tem = new VectorInsn(n, tem); for (size_t i = n; i > 0; i--) tem = members_[i - 1]->compile(interp, env, stackPos + (i - 1), tem); return tem; } tem = new ListToVectorInsn(tem); } else if (type_ == improperType) n--; for (size_t i = 0; i < n; i++) { if (spliced_[i]) tem = new AppendInsn(location(), tem); else tem = new ConsInsn(tem); tem = members_[i]->compile(interp, env, stackPos + 1, tem); } if (type_ == improperType) tem = members_.back()->compile(interp, env, stackPos, tem); else tem = new ConstantInsn(interp.makeNil(), tem); return tem; } void QuasiquoteExpression::markBoundVars(BoundVarList &vars, bool shared) { for (size_t i = 0; i < members_.size(); i++) members_[i]->markBoundVars(vars, shared); } bool QuasiquoteExpression::canEval(bool maybeCall) const { for (size_t i = 0; i < members_.size(); i++) if (!members_[i]->canEval(maybeCall)) return 0; return 1; } void QuasiquoteExpression::optimize(Interpreter &interp, const Environment &env, Owner &expr) { for (size_t i = 0; i < members_.size(); i++) members_[i]->optimize(interp, env, members_[i]); if (type_ == vectorType) return; if (members_.size() == 0) { expr = new ResolvedConstantExpression(interp.makeNil(), location()); return; } ELObj *tail = members_.back()->constantValue(); if (!tail) return; ASSERT(!(spliced_.back() && type_ == improperType)); if (type_ != improperType && !spliced_.back()) { tail = interp.makePair(tail, interp.makeNil()); interp.makePermanent(tail); } for (size_t i = members_.size() - 1; i-- > 0;) { ELObj *tem = members_[i]->constantValue(); // FIXME optimize splice as well if (!tem || spliced_[i]) { members_.resize(i + 2); type_ = improperType; members_[i + 1] = new ResolvedConstantExpression(tail, location()); return; } tail = interp.makePair(tem, tail); interp.makePermanent(tail); } expr = new ResolvedConstantExpression(tail, location()); } SequenceExpression::SequenceExpression(NCVector > &sequence, const Location &loc) : Expression(loc) { ASSERT(sequence.size() > 0); sequence.swap(sequence_); } InsnPtr SequenceExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { // FIXME optimize this InsnPtr result(sequence_.back()->compile(interp, env, stackPos, next)); for (size_t i = sequence_.size() - 1; i > 0; i--) result = sequence_[i - 1]->compile(interp, env, stackPos, new PopInsn(result)); return result; } void SequenceExpression::markBoundVars(BoundVarList &vars, bool shared) { for (size_t i = 0; i < sequence_.size(); i++) sequence_[i]->markBoundVars(vars, shared); } bool SequenceExpression::canEval(bool maybeCall) const { for (size_t i = 0; i < sequence_.size(); i++) if (!sequence_[i]->canEval(maybeCall)) return 0; return 1; } void SequenceExpression::optimize(Interpreter &interp, const Environment &env, Owner &expr) { size_t j = 0; for (size_t i = 0;; i++) { if (j != i) sequence_[j].swap(sequence_[i]); sequence_[j]->optimize(interp, env, sequence_[j]); if (i == sequence_.size() - 1) break; if (!sequence_[j]->constantValue()) j++; } if (j == 0) sequence_[0].swap(expr); else sequence_.resize(j + 1); } AssignmentExpression::AssignmentExpression(const Identifier *var, Owner &value, const Location &loc) : Expression(loc), var_(var) { value.swap(value_); } InsnPtr AssignmentExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { bool isFrame; int index; unsigned flags; if (!env.lookup(var_, isFrame, index, flags)) { interp.setNextLocation(location()); unsigned part; Location loc; if (var_->defined(part, loc)) interp.message(InterpreterMessages::topLevelAssignment, StringMessageArg(var_->name())); else interp.message(InterpreterMessages::undefinedVariableReference, StringMessageArg(var_->name())); return new ErrorInsn; } InsnPtr result; if (flags & BoundVar::uninitFlag) result = new CheckInitInsn(var_, location(), next); else result = next; if (isFrame) { if (BoundVar::flagsBoxed(flags)) result = new StackSetBoxInsn(index - (stackPos + 1), index, location(), result); else result = new StackSetInsn(index - (stackPos + 1), index, result); } else { ASSERT(BoundVar::flagsBoxed(flags)); result = new ClosureSetBoxInsn(index, location(), result); } return optimizeCompile(value_, interp, env, stackPos, result); } void AssignmentExpression::markBoundVars(BoundVarList &vars, bool shared) { vars.mark(var_, (BoundVar::usedFlag |BoundVar::assignedFlag |(shared ? BoundVar::sharedFlag : 0))); value_->markBoundVars(vars, shared); } bool AssignmentExpression::canEval(bool maybeCall) const { return value_->canEval(maybeCall); } WithModeExpression::WithModeExpression(const ProcessingMode *mode, Owner &expr, const Location &loc) : Expression(loc), mode_(mode) { expr.swap(expr_); } InsnPtr WithModeExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { if (!mode_->defined()) { interp.setNextLocation(location()); interp.message(InterpreterMessages::undefinedMode, StringMessageArg(mode_->name())); } return new PushModeInsn(mode_, optimizeCompile(expr_, interp, env, stackPos, new PopModeInsn(next))); } void WithModeExpression::markBoundVars(BoundVarList &vars, bool shared) { expr_->markBoundVars(vars, shared); } bool WithModeExpression::canEval(bool maybeCall) const { return expr_->canEval(maybeCall); } StyleExpression::StyleExpression(Vector &keys, NCVector > &exprs, const Location &loc) : Expression(loc) { keys.swap(keys_); exprs.swap(exprs_); } // Interpret keywords in the following order of preference // 1. non-inherited characteristics // 2. DSSSL defined meaning (use: content-map:) etc // 3. inherited characteristics InsnPtr StyleExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { // FIXME handle force! Vector > ics; Vector > forceIcs; bool hasUse = 0; size_t useIndex; BoundVarList boundVars; env.boundVars(boundVars); for (size_t i = 0; i < keys_.size(); i++) { Identifier::SyntacticKey sk; if (maybeStyleKeyword(keys_[i]) && !(keys_[i]->syntacticKey(sk) && sk == Identifier::keyUse) && !keys_[i]->inheritedC().isNull()) { ics.resize(ics.size() + 1); exprs_[i]->markBoundVars(boundVars, 0); } } // FIXME optimize case where ics.size() == 0 boundVars.removeUnused(); BoundVarList noVars; Environment newEnv(noVars, boundVars); size_t j = 0; for (size_t i = 0; i < keys_.size(); i++) { Identifier::SyntacticKey sk; if (!maybeStyleKeyword(keys_[i])) ; else if (keys_[i]->syntacticKey(sk) && sk == Identifier::keyUse) { if (!hasUse) { hasUse = 1; useIndex = i; } } else if (!keys_[i]->inheritedC().isNull()) { exprs_[i]->optimize(interp, newEnv, exprs_[i]); ELObj *val = exprs_[i]->constantValue(); if (val) { interp.makePermanent(val); ics[j] = keys_[i]->inheritedC()->make(val, exprs_[i]->location(), interp); if (ics[j].isNull()) ics.resize(ics.size() - 1); else j++; } else { ics[j++] = new VarInheritedC(keys_[i]->inheritedC(), exprs_[i]->compile(interp, newEnv, 0, InsnPtr()), exprs_[i]->location()); } } else unknownStyleKeyword(keys_[i], interp, location()); } InsnPtr result = compilePushVars(interp, env, stackPos + hasUse, boundVars, 0, new VarStyleInsn(new StyleSpec(forceIcs, ics), boundVars.size(), hasUse, new MaybeOverrideStyleInsn(next))); if (!hasUse) return result; else { result = new CheckStyleInsn(location(), result); return optimizeCompile(exprs_[useIndex], interp, env, stackPos, result); } } void StyleExpression::markBoundVars(BoundVarList &vars, bool shared) { for (size_t i = 0; i < exprs_.size(); i++) exprs_[i]->markBoundVars(vars, 1); } bool StyleExpression::canEval(bool maybeCall) const { for (size_t i = 0; i < exprs_.size(); i++) if (!exprs_[i]->canEval(maybeCall)) return 0; return 1; } void StyleExpression::unknownStyleKeyword(const Identifier *ident, Interpreter &interp, const Location &loc) const { interp.setNextLocation(loc); StringC tem(ident->name()); tem += Char(':'); interp.message(InterpreterMessages::invalidStyleKeyword, StringMessageArg(tem)); } bool StyleExpression::maybeStyleKeyword(const Identifier *ident) const { return 1; } MakeExpression::MakeExpression(const Identifier *foc, Vector &keys, NCVector > &exprs, const Location &loc) : foc_(foc), StyleExpression(keys, exprs, loc) { } InsnPtr MakeExpression::compile(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { FlowObj *flowObj = foc_->flowObj(); if (!flowObj) { interp.setNextLocation(location()); interp.message(InterpreterMessages::unknownFlowObjectClass, StringMessageArg(foc_->name())); flowObj = new (interp) SequenceFlowObj; interp.makePermanent(flowObj); } Owner *contentMapExpr = 0; InsnPtr rest(next); for (size_t i = 0; i < keys_.size(); i++) { Identifier::SyntacticKey syn; if (!flowObj->hasNonInheritedC(keys_[i]) && keys_[i]->syntacticKey(syn)) { if (syn == Identifier::keyLabel) rest = optimizeCompile(exprs_[i], interp, env, stackPos + 1, new LabelSosofoInsn(exprs_[i]->location(), rest)); else if (syn == Identifier::keyContentMap) contentMapExpr = &exprs_[i]; } } flowObj = applyConstNonInheritedCs(flowObj, interp, env); size_t nContent = exprs_.size() - keys_.size(); CompoundFlowObj *cFlowObj = flowObj->asCompoundFlowObj(); if (!cFlowObj && nContent > 0) { interp.setNextLocation(location()); interp.message(InterpreterMessages::atomicContent, StringMessageArg(foc_->name())); nContent = 0; } rest = compileNonInheritedCs(interp, env, stackPos + 1, rest); for (size_t i = 0; i < keys_.size(); i++) { if (flowObj->hasPseudoNonInheritedC(keys_[i]) && !exprs_[i]->constantValue()) { rest = exprs_[i]->compile(interp, env, stackPos + 1, new SetPseudoNonInheritedCInsn(keys_[i], exprs_[i]->location(), rest)); } } // FIXME optimize case where there are no non-inherited styles. rest = StyleExpression::compile(interp, env, stackPos + 1, new SetStyleInsn(rest)); if (nContent == 0 && !contentMapExpr) { if (cFlowObj) return new SetDefaultContentInsn(cFlowObj, location(), rest); else return new CopyFlowObjInsn(flowObj, rest); } rest = new SetContentInsn(cFlowObj, rest); if (contentMapExpr) { rest = optimizeCompile(*contentMapExpr, interp, env, stackPos + 1, new ContentMapSosofoInsn((*contentMapExpr)->location(), rest)); if (nContent == 0) return new MakeDefaultContentInsn(location(), rest); } // FIXME get rid of CheckSosofoInsn if we can guarantee result is a SosofoObj. if (nContent == 1) return optimizeCompile(exprs_.back(), interp, env, stackPos, new CheckSosofoInsn(exprs_.back()->location(), rest)); rest = new SosofoAppendInsn(nContent, rest); for (size_t i = 1; i <= nContent; i++) rest = optimizeCompile(exprs_[exprs_.size() - i], interp, env, stackPos + nContent - i, new CheckSosofoInsn(exprs_[exprs_.size() - i]->location(), rest)); return rest; } FlowObj *MakeExpression::applyConstNonInheritedCs(FlowObj *flowObj, Interpreter &interp, const Environment &env) { FlowObj *result = flowObj; for (size_t i = 0; i < keys_.size(); i++) if (flowObj->hasNonInheritedC(keys_[i]) || flowObj->hasPseudoNonInheritedC(keys_[i])) { exprs_[i]->optimize(interp, env, exprs_[i]); ELObj *val = exprs_[i]->constantValue(); if (val) { if (result == flowObj) { result = flowObj->copy(interp); interp.makePermanent(result); } result->setNonInheritedC(keys_[i], val, exprs_[i]->location(), interp); } } return result; } // Have a copied flow object on the stack. // Generate code to set its non-constant, non-inherited characteristics. InsnPtr MakeExpression::compileNonInheritedCs(Interpreter &interp, const Environment &env, int stackPos, const InsnPtr &next) { FlowObj *flowObj = foc_->flowObj(); if (!flowObj) return next; bool gotOne = 0; BoundVarList boundVars; env.boundVars(boundVars); for (size_t i = 0; i < keys_.size(); i++) { if (flowObj->hasNonInheritedC(keys_[i]) && !exprs_[i]->constantValue()) { exprs_[i]->markBoundVars(boundVars, 0); gotOne = 1; } } if (!gotOne) return next; boundVars.removeUnused(); BoundVarList noVars; Environment newEnv(noVars, boundVars); InsnPtr code; for (size_t i = 0; i < keys_.size(); i++) if (flowObj->hasNonInheritedC(keys_[i]) && !exprs_[i]->constantValue()) code = exprs_[i]->compile(interp, newEnv, 1, new SetNonInheritedCInsn(keys_[i], exprs_[i]->location(), code)); return compilePushVars(interp, env, stackPos, boundVars, 0, new SetNonInheritedCsSosofoInsn(code, boundVars.size(), next)); } void MakeExpression::unknownStyleKeyword(const Identifier *ident, Interpreter &interp, const Location &loc) const { FlowObj *flowObj = foc_->flowObj(); if (!flowObj) return; Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch(key) { case Identifier::keyLabel: case Identifier::keyContentMap: return; default: break; } } if (flowObj->hasNonInheritedC(ident) || flowObj->hasPseudoNonInheritedC(ident)) return; interp.setNextLocation(loc); StringC tem(ident->name()); tem += Char(':'); interp.message(InterpreterMessages::invalidMakeKeyword, StringMessageArg(tem), StringMessageArg(foc_->name())); } bool MakeExpression::maybeStyleKeyword(const Identifier *ident) const { FlowObj *flowObj = foc_->flowObj(); if (!flowObj) return 1; return (!flowObj->hasNonInheritedC(ident) && !flowObj->hasPseudoNonInheritedC(ident)); } Environment::Environment() : closureVars_(0) { } Environment::Environment(const BoundVarList &frameVars, const BoundVarList &closureVars) : closureVars_(&closureVars) { FrameVarList *tem = new FrameVarList; frameVarList_ = tem; tem->vars = &frameVars; tem->stackPos = 0; } void Environment::boundVars(BoundVarList &result) const { if (closureVars_) { for (size_t i = 0; i < closureVars_->size(); i++) result.append((*closureVars_)[i].ident, (*closureVars_)[i].flags); } for (const FrameVarList *f = frameVarList_.pointer(); f; f = f->next.pointer()) { for (size_t i = 0; i < f->vars->size(); i++) result.append((*f->vars)[i].ident, (*f->vars)[i].flags); } } bool Environment::lookup(const Identifier *ident, bool &isFrame, int &index, unsigned &flags) const { for (const FrameVarList *p = frameVarList_.pointer(); p; p = p->next.pointer()) { for (size_t i = 0; i < p->vars->size(); i++) if ((*p->vars)[i].ident == ident) { isFrame = true; index = i + p->stackPos; flags = (*p->vars)[i].flags; return true; } } if (closureVars_) { for (size_t i = 0; i < closureVars_->size(); i++) if ((*closureVars_)[i].ident == ident) { isFrame = false; index = i; flags = (*closureVars_)[i].flags; return true; } } return false; } void Environment::augmentFrame(const BoundVarList &vars, int stackPos) { FrameVarList *tem = new FrameVarList; tem->stackPos = stackPos; tem->vars = &vars; tem->next = frameVarList_; frameVarList_ = tem; } BoundVarList::BoundVarList(const Vector &idents) : Vector(idents.size()) { for (size_t i = 0; i < size(); i++) { BoundVar &tem = (*this)[i]; tem.ident = idents[i]; tem.reboundCount = 0; tem.flags = 0; } } BoundVarList::BoundVarList(const Vector &idents, size_t n, unsigned flags) : Vector(n) { for (size_t i = 0; i < n; i++) { BoundVar &tem = (*this)[i]; tem.ident = idents[i]; tem.reboundCount = 0; tem.flags = (flags & ~BoundVar::usedFlag); } } void BoundVarList::append(const Identifier *id, unsigned flags) { resize(size() + 1); BoundVar &tem = back(); tem.ident = id; tem.flags = (flags & ~BoundVar::usedFlag); tem.reboundCount = 0; } void BoundVarList::remove(const Vector &idents) { size_t j = 0; for (size_t i = 0; i < size(); i++) { const Identifier *ident = (*this)[i].ident; for (size_t k = 0;; k++) { if (k >= idents.size()) { if (j != i) (*this)[j] = (*this)[i]; j++; break; } if (idents[k] == ident) break; // skip it } } resize(j); } void BoundVarList::removeUnused() { size_t j = 0; for (size_t i = 0; i < size(); i++) { if ((*this)[i].flags & BoundVar::usedFlag) { if (j != i) (*this)[j] = (*this)[i]; j++; } } resize(j); } void BoundVarList::mark(const Identifier *ident, unsigned flags) { BoundVar *bv = find(ident); if (bv && !bv->reboundCount) bv->flags |= flags; } void BoundVarList::rebind(const Vector &idents) { for (size_t i = 0; i < idents.size(); i++) { BoundVar *bv = find(idents[i]); if (bv) bv->reboundCount += 1; } } void BoundVarList::unbind(const Vector &idents) { for (size_t i = 0; i < idents.size(); i++) { BoundVar *bv = find(idents[i]); if (bv) bv->reboundCount -= 1; } } BoundVar *BoundVarList::find(const Identifier *ident) { for (size_t i = 0; i < size(); i++) if ((*this)[i].ident == ident) return &(*this)[i]; return 0; } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/FOTBuilder.cxx100444 764 764 141345 6607322062 14101 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "FOTBuilder.h" #include "Owner.h" #include "macros.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif const char *FOTBuilder::symbolName(Symbol sym) { if (sym < 2 || sym >= int(nSymbols)) return 0; // These must match the order in Symbol static const char *names[] = { "not-applicable", "ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "ultra-light", "extra-light", "light", "semi-light", "medium", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded", "semi-bold", "bold", "extra-bold", "ultra-bold", "upright", "oblique", "back-slanted-oblique", "italic", "back-slanted-italic", "start", "end", "center", "justify", "spread-inside", "spread-outside", "page-inside", "page-outside", "wrap", "asis", "asis-wrap", "asis-truncate", "none", "before", "through", "after", "top-to-bottom", "left-to-right", "bottom-to-top", "right-to-left", "inside", "outside", "horizontal", "vertical", "escapement", "line-progression", "math", "ordinary", "operator", "binary", "relation", "opening", "closing", "punctuation", "inner", "space", "page", "page-region", "column-set", "column", "max", "max-uniform", "miter", "round", "join", "butt", "square", "loose", "normal", "kern", "tight", "touch", "preserve", "collapse", "ignore", "relative", "display", "inline", "border", "background", "both", "base", "font", "top", "bottom", "spread", "solid", "outline", "with", "against", "force", "independent", "pile", "sup-out", "sub-out", "lead-edge", "trail-edge", "explicit", "row-major", "column-major", }; ASSERT(SIZEOF(names) == nSymbols - 2); return names[sym - 2]; } SaveFOTBuilder *FOTBuilder::asSaveFOTBuilder() { return 0; } FOTBuilder::~FOTBuilder() { } void FOTBuilder::start() { } void FOTBuilder::end() { } void FOTBuilder::atomic() { start(); end(); } void FOTBuilder::characters(const Char *, size_t) { } void FOTBuilder::charactersFromNode(const NodePtr &, const Char *s, size_t n) { characters(s, n); } void FOTBuilder::character(const CharacterNIC &nic) { if (nic.specifiedC & (1 << CharacterNIC::cChar)) characters(&nic.ch, 1); atomic(); } void FOTBuilder::startSequence() { start(); } void FOTBuilder::endSequence() { end(); } void FOTBuilder::startLineField(const LineFieldNIC &) { start(); } void FOTBuilder::endLineField() { end(); } void FOTBuilder::paragraphBreak(const ParagraphNIC &) { atomic(); } void FOTBuilder::externalGraphic(const ExternalGraphicNIC &) { atomic(); } void FOTBuilder::rule(const RuleNIC &) { atomic(); } void FOTBuilder::alignmentPoint() { atomic(); } void FOTBuilder::formattingInstruction(const StringC &) { atomic(); } void FOTBuilder::startParagraph(const ParagraphNIC &) { start(); } void FOTBuilder::endParagraph() { end(); } void FOTBuilder::startDisplayGroup(const DisplayGroupNIC &) { start(); } void FOTBuilder::endDisplayGroup() { end(); } void FOTBuilder::startScroll() { start(); } void FOTBuilder::endScroll() { end(); } void FOTBuilder::startLink(const Address &) { start(); } void FOTBuilder::endLink() { end(); } void FOTBuilder::startMarginalia() { start(); } void FOTBuilder::endMarginalia() { end(); } void FOTBuilder::startMultiMode(const FOTBuilder::MultiMode *, const Vector &, Vector &ports) { start(); for (size_t i = 0; i < ports.size(); i++) ports[i] = this; } void FOTBuilder::endMultiMode() { end(); } void FOTBuilder::startScore(Symbol) { start(); } void FOTBuilder::startScore(Char) { start(); } void FOTBuilder::startScore(const LengthSpec &) { start(); } void FOTBuilder::endScore() { end(); } void FOTBuilder::startLeader(const LeaderNIC &) { start(); } void FOTBuilder::endLeader() { end(); } void FOTBuilder::startBox(const BoxNIC &) { start(); } void FOTBuilder::endBox() { end(); } void FOTBuilder::startSideline() { } void FOTBuilder::endSideline() { } void FOTBuilder::startSimplePageSequence() { start(); } void FOTBuilder::endSimplePageSequence() { end(); } void FOTBuilder::startSimplePageSequenceHeaderFooter(unsigned) { } void FOTBuilder::endSimplePageSequenceHeaderFooter(unsigned) { } void FOTBuilder::endAllSimplePageSequenceHeaderFooter() { } void FOTBuilder::pageNumber() { } void FOTBuilder::startTable(const TableNIC &) { start(); } void FOTBuilder::endTable() { end(); } void FOTBuilder::tableBeforeRowBorder() { atomic(); } void FOTBuilder::tableAfterRowBorder() { atomic(); } void FOTBuilder::tableBeforeColumnBorder() { atomic(); } void FOTBuilder::tableAfterColumnBorder() { atomic(); } void FOTBuilder::startTablePart(const TablePartNIC &, FOTBuilder *&header, FOTBuilder *&footer) { start(); header = footer = this; } void FOTBuilder::endTablePart() { end(); } void FOTBuilder::tableColumn(const TableColumnNIC &) { atomic(); } void FOTBuilder::startTableRow() { start(); } void FOTBuilder::endTableRow() { end(); } void FOTBuilder::startTableCell(const TableCellNIC &) { start(); } void FOTBuilder::endTableCell() { end(); } void FOTBuilder::tableCellBeforeRowBorder() { atomic(); } void FOTBuilder::tableCellAfterRowBorder() { atomic(); } void FOTBuilder::tableCellBeforeColumnBorder() { atomic(); } void FOTBuilder::tableCellAfterColumnBorder() { atomic(); } void FOTBuilder::startMathSequence() { start(); } void FOTBuilder::endMathSequence() { end(); } void FOTBuilder::startFraction(FOTBuilder *&numerator, FOTBuilder *&denominator) { start(); numerator = denominator = this; } void FOTBuilder::endFraction() { end(); } void FOTBuilder::fractionBar() { atomic(); } void FOTBuilder::startUnmath() { start(); } void FOTBuilder::endUnmath() { end(); } void FOTBuilder::startSuperscript() { start(); } void FOTBuilder::endSuperscript() { end(); } void FOTBuilder::startSubscript() { start(); } void FOTBuilder::endSubscript() { end(); } void FOTBuilder::startScript(FOTBuilder *&preSup, FOTBuilder *&preSub, FOTBuilder *&postSup, FOTBuilder *&postSub, FOTBuilder *&midSup, FOTBuilder *&midSub) { start(); preSup = preSub = postSup = postSub = midSup = midSub = this; } void FOTBuilder::endScript() { end(); } void FOTBuilder::startMark(FOTBuilder *&overMark, FOTBuilder *&underMark) { start(); overMark = underMark = this; } void FOTBuilder::endMark() { end(); } void FOTBuilder::startFence(FOTBuilder *&open, FOTBuilder *&close) { start(); open = close = this; } void FOTBuilder::endFence() { end(); } void FOTBuilder::startRadical(FOTBuilder *°ree) { start(); degree = this; } void FOTBuilder::endRadical() { end(); } void FOTBuilder::radicalRadical(const CharacterNIC &) { atomic(); } void FOTBuilder::radicalRadicalDefaulted() { } void FOTBuilder::startMathOperator(FOTBuilder *&oper, FOTBuilder *&lowerLimit, FOTBuilder *&upperLimit) { start(); oper = lowerLimit = upperLimit = this; } void FOTBuilder::endMathOperator() { end(); } void FOTBuilder::startGrid(const GridNIC &) { start(); } void FOTBuilder::endGrid() { end(); } void FOTBuilder::startGridCell(const GridCellNIC &) { start(); } void FOTBuilder::endGridCell() { end(); } void FOTBuilder::extension(const ExtensionFlowObj &, const NodePtr &) { atomic(); } void FOTBuilder::startExtension(const CompoundExtensionFlowObj &, const NodePtr &, Vector &ports) { for (size_t i = 0; i < ports.size(); i++) ports[i] = this; start(); } void FOTBuilder::endExtension(const CompoundExtensionFlowObj &) { end(); } void FOTBuilder::setFontSize(Length) { } void FOTBuilder::setFontFamilyName(const StringC &) { } void FOTBuilder::setFontWeight(Symbol) { } void FOTBuilder::setFontPosture(Symbol) { } void FOTBuilder::setStartIndent(const LengthSpec &) { } void FOTBuilder::setEndIndent(const LengthSpec &) { } void FOTBuilder::setFirstLineStartIndent(const LengthSpec &) { } void FOTBuilder::setLastLineEndIndent(const LengthSpec &) { } void FOTBuilder::setLineSpacing(const LengthSpec &) { } void FOTBuilder::setFieldWidth(const LengthSpec &) { } void FOTBuilder::setQuadding(Symbol) { } void FOTBuilder::setDisplayAlignment(Symbol) { } void FOTBuilder::setFieldAlign(Symbol) { } void FOTBuilder::setLines(Symbol) { } void FOTBuilder::setColor(const DeviceRGBColor &) { } void FOTBuilder::setBackgroundColor(const DeviceRGBColor &) { } void FOTBuilder::setBackgroundColor() { } void FOTBuilder::setPageWidth(Length) { } void FOTBuilder::setPageHeight(Length) { } void FOTBuilder::setLeftMargin(Length) { } void FOTBuilder::setRightMargin(Length) { } void FOTBuilder::setTopMargin(Length) { } void FOTBuilder::setBottomMargin(Length) { } void FOTBuilder::setHeaderMargin(Length) { } void FOTBuilder::setFooterMargin(Length) { } void FOTBuilder::setBorderPresent(bool) { } void FOTBuilder::setLineThickness(Length) { } void FOTBuilder::setCellBeforeRowMargin(Length) { } void FOTBuilder::setCellAfterRowMargin(Length) { } void FOTBuilder::setCellBeforeColumnMargin(Length) { } void FOTBuilder::setCellAfterColumnMargin(Length) { } void FOTBuilder::setLineSep(Length) { } void FOTBuilder::setBoxSizeBefore(Length) { } void FOTBuilder::setBoxSizeAfter(Length) { } void FOTBuilder::setPositionPointShift(const LengthSpec &) { } void FOTBuilder::setStartMargin(const LengthSpec &) { } void FOTBuilder::setEndMargin(const LengthSpec &) { } void FOTBuilder::setSidelineSep(const LengthSpec &) { } void FOTBuilder::setAsisWrapIndent(const LengthSpec &) { } void FOTBuilder::setLineNumberSep(const LengthSpec &) { } void FOTBuilder::setLastLineJustifyLimit(const LengthSpec &) { } void FOTBuilder::setJustifyGlyphSpaceMaxAdd(const LengthSpec &) { } void FOTBuilder::setJustifyGlyphSpaceMaxRemove(const LengthSpec &) { } void FOTBuilder::setTableCornerRadius(const LengthSpec &) { } void FOTBuilder::setBoxCornerRadius(const LengthSpec &) { } void FOTBuilder::setMarginaliaSep(const LengthSpec &) { } void FOTBuilder::setMinPreLineSpacing(const OptLengthSpec &) { } void FOTBuilder::setMinPostLineSpacing(const OptLengthSpec &) { } void FOTBuilder::setMinLeading(const OptLengthSpec &) { } void FOTBuilder::setInhibitLineBreaks(bool) { } void FOTBuilder::setHyphenate(bool) { } void FOTBuilder::setKern(bool) { } void FOTBuilder::setLigature(bool) { } void FOTBuilder::setScoreSpaces(bool) { } void FOTBuilder::setFloatOutMarginalia(bool) { } void FOTBuilder::setFloatOutSidelines(bool) { } void FOTBuilder::setFloatOutLineNumbers(bool) { } void FOTBuilder::setCellBackground(bool) { } void FOTBuilder::setSpanWeak(bool) { } void FOTBuilder::setIgnoreRecordEnd(bool) { } void FOTBuilder::setNumberedLines(bool) { } void FOTBuilder::setHangingPunct(bool) { } void FOTBuilder::setBoxOpenEnd(bool) { } void FOTBuilder::setTruncateLeader(bool) { } void FOTBuilder::setAlignLeader(bool) { } void FOTBuilder::setTablePartOmitMiddleHeader(bool) { } void FOTBuilder::setTablePartOmitMiddleFooter(bool) { } void FOTBuilder::setBorderOmitAtBreak(bool) { } void FOTBuilder::setPrincipalModeSimultaneous(bool) { } void FOTBuilder::setMarginaliaKeepWithPrevious(bool) { } void FOTBuilder::setGridEquidistantRows(bool) { } void FOTBuilder::setGridEquidistantColumns(bool) { } void FOTBuilder::setLineJoin(Symbol) { } void FOTBuilder::setLineCap(Symbol) { } void FOTBuilder::setLineNumberSide(Symbol) { } void FOTBuilder::setKernMode(Symbol) { } void FOTBuilder::setInputWhitespaceTreatment(Symbol) { } void FOTBuilder::setFillingDirection(Symbol) { } void FOTBuilder::setWritingMode(Symbol) { } void FOTBuilder::setLastLineQuadding(Symbol) { } void FOTBuilder::setMathDisplayMode(Symbol) { } void FOTBuilder::setScriptPreAlign(Symbol) { } void FOTBuilder::setScriptPostAlign(Symbol) { } void FOTBuilder::setScriptMidSupAlign(Symbol) { } void FOTBuilder::setScriptMidSubAlign(Symbol) { } void FOTBuilder::setNumeratorAlign(Symbol) { } void FOTBuilder::setDenominatorAlign(Symbol) { } void FOTBuilder::setGridPositionCellType(Symbol) { } void FOTBuilder::setGridColumnAlignment(Symbol) { } void FOTBuilder::setGridRowAlignment(Symbol) { } void FOTBuilder::setBoxType(Symbol) { } void FOTBuilder::setGlyphAlignmentMode(Symbol) { } void FOTBuilder::setBoxBorderAlignment(Symbol) { } void FOTBuilder::setCellRowAlignment(Symbol) { } void FOTBuilder::setBorderAlignment(Symbol) { } void FOTBuilder::setSidelineSide(Symbol) { } void FOTBuilder::setHyphenationKeep(Symbol) { } void FOTBuilder::setFontStructure(Symbol) { } void FOTBuilder::setFontProportionateWidth(Symbol) { } void FOTBuilder::setCellCrossed(Symbol) { } void FOTBuilder::setMarginaliaSide(Symbol) { } void FOTBuilder::setLayer(long) { } void FOTBuilder::setBackgroundLayer(long) { } void FOTBuilder::setBorderPriority(long) { } void FOTBuilder::setLineRepeat(long) { } void FOTBuilder::setSpan(long) { } void FOTBuilder::setMinLeaderRepeat(long) { } void FOTBuilder::setHyphenationRemainCharCount(long) { } void FOTBuilder::setHyphenationPushCharCount(long) { } void FOTBuilder::setWidowCount(long) { } void FOTBuilder::setOrphanCount(long) { } void FOTBuilder::setExpandTabs(long) { } void FOTBuilder::setHyphenationLadderCount(long) { } void FOTBuilder::setBackgroundTile(PublicId) { } void FOTBuilder::setLineBreakingMethod(PublicId) { } void FOTBuilder::setLineCompositionMethod(PublicId) { } void FOTBuilder::setImplicitBidiMethod(PublicId) { } void FOTBuilder::setGlyphSubstMethod(PublicId) { } void FOTBuilder::setGlyphReorderMethod(PublicId) { } void FOTBuilder::setHyphenationMethod(PublicId) { } void FOTBuilder::setTableAutoWidthMethod(PublicId) { } void FOTBuilder::setFontName(PublicId) { } void FOTBuilder::setLanguage(Letter2) { } void FOTBuilder::setCountry(Letter2) { } void FOTBuilder::setEscapementSpaceBefore(const InlineSpace &) { } void FOTBuilder::setEscapementSpaceAfter(const InlineSpace &) { } void FOTBuilder::setGlyphSubstTable(const Vector > &) { } void FOTBuilder::startNode(const NodePtr &, const StringC &) { } void FOTBuilder::endNode() { } void FOTBuilder::currentNodePageNumber(const NodePtr &) { } void FOTBuilder::extensionSet(void (FOTBuilder::*func)(bool), bool arg) { (this->*func)(arg); } void FOTBuilder::extensionSet(void (FOTBuilder::*func)(const StringC &), const StringC &arg) { (this->*func)(arg); } void FOTBuilder::extensionSet(void (FOTBuilder::*func)(long), long arg) { (this->*func)(arg); } FOTBuilder::DisplayNIC::DisplayNIC() : positionPreference(symbolFalse), keep(symbolFalse), breakBefore(symbolFalse), breakAfter(symbolFalse), keepWithPrevious(0), keepWithNext(0), mayViolateKeepBefore(0), mayViolateKeepAfter(0) { } FOTBuilder::DisplayGroupNIC::DisplayGroupNIC() : hasCoalesceId(0) { } FOTBuilder::InlineNIC::InlineNIC() : breakBeforePriority(0), breakAfterPriority(0) { } FOTBuilder::ExternalGraphicNIC::ExternalGraphicNIC() : scaleType(symbolMaxUniform), isDisplay(0), hasMaxWidth(0), hasMaxHeight(0), escapementDirection(symbolFalse) { } FOTBuilder::BoxNIC::BoxNIC() : isDisplay(0) { } FOTBuilder::RuleNIC::RuleNIC() : orientation(symbolHorizontal), hasLength(0) { } FOTBuilder::LeaderNIC::LeaderNIC() : hasLength(0) { } FOTBuilder::CharacterNIC::CharacterNIC() : specifiedC(0), stretchFactor(1.0) { } FOTBuilder::TableNIC::TableNIC() : widthType(widthFull) { } FOTBuilder::TableColumnNIC::TableColumnNIC() : columnIndex(0), nColumnsSpanned(1), hasWidth(0) { } FOTBuilder::TableCellNIC::TableCellNIC() : columnIndex(0), nColumnsSpanned(1), nRowsSpanned(1), missing(0) { } FOTBuilder::GridNIC::GridNIC() : nColumns(0), nRows(0) { } FOTBuilder::GridCellNIC::GridCellNIC() : columnNumber(0), rowNumber(0) { } FOTBuilder::MultiMode::MultiMode() : hasDesc(0) { } FOTBuilder::GlyphId FOTBuilder::GlyphSubstTable::subst(const FOTBuilder::GlyphId &gid) const { for (size_t i = 0; i < pairs.size(); i += 2) if (gid == pairs[i]) return pairs[i + 1]; return gid; } SaveFOTBuilder::SaveFOTBuilder() : calls_(0), tail_(&calls_) { } SaveFOTBuilder::SaveFOTBuilder(const NodePtr ¤tNode, const StringC &processingMode) : currentNode_(currentNode), processingMode_(processingMode), calls_(0), tail_(&calls_) { } SaveFOTBuilder::~SaveFOTBuilder() { *tail_ = 0; while (calls_) { Call *tem = calls_; calls_ = calls_->next; delete tem; } } SaveFOTBuilder *SaveFOTBuilder::asSaveFOTBuilder() { return this; } void SaveFOTBuilder::emit(FOTBuilder &fotb) { if (currentNode_) fotb.startNode(currentNode_, processingMode_); SaveFOTBuilder *save = fotb.asSaveFOTBuilder(); if (save) { if (calls_) { *save->tail_ = calls_; save->tail_ = tail_; calls_ = 0; tail_ = &calls_; } } else { *tail_ = 0; while (calls_) { Call *tem = calls_; calls_ = calls_->next; tem->emit(fotb); delete tem; } tail_ = &calls_; } if (currentNode_) fotb.endNode(); } #define NO_ARG_CALL(F) \ void SaveFOTBuilder::F() { \ *tail_ = new NoArgCall(&FOTBuilder::F); \ tail_ = &(*tail_)->next; } NO_ARG_CALL(startSequence) NO_ARG_CALL(endSequence) NO_ARG_CALL(endLineField) NO_ARG_CALL(endParagraph) NO_ARG_CALL(endDisplayGroup) NO_ARG_CALL(alignmentPoint) NO_ARG_CALL(startScroll) NO_ARG_CALL(endScroll) NO_ARG_CALL(endLeader) NO_ARG_CALL(endLink) NO_ARG_CALL(startMarginalia) NO_ARG_CALL(endMarginalia) NO_ARG_CALL(endMultiMode) NO_ARG_CALL(endScore) NO_ARG_CALL(endBox) NO_ARG_CALL(startSideline) NO_ARG_CALL(endSideline) NO_ARG_CALL(endNode) NO_ARG_CALL(startSimplePageSequence) NO_ARG_CALL(endSimplePageSequence) NO_ARG_CALL(endAllSimplePageSequenceHeaderFooter) NO_ARG_CALL(pageNumber) NO_ARG_CALL(endTable) NO_ARG_CALL(tableBeforeRowBorder) NO_ARG_CALL(tableAfterRowBorder) NO_ARG_CALL(tableBeforeColumnBorder) NO_ARG_CALL(tableAfterColumnBorder) NO_ARG_CALL(endTablePart) NO_ARG_CALL(startTableRow) NO_ARG_CALL(endTableRow) NO_ARG_CALL(endTableCell) NO_ARG_CALL(tableCellBeforeRowBorder) NO_ARG_CALL(tableCellAfterRowBorder) NO_ARG_CALL(tableCellBeforeColumnBorder) NO_ARG_CALL(tableCellAfterColumnBorder) NO_ARG_CALL(startMathSequence) NO_ARG_CALL(endMathSequence) NO_ARG_CALL(endFraction) NO_ARG_CALL(fractionBar) NO_ARG_CALL(startUnmath) NO_ARG_CALL(endUnmath) NO_ARG_CALL(startSuperscript) NO_ARG_CALL(endSuperscript) NO_ARG_CALL(startSubscript) NO_ARG_CALL(endSubscript) NO_ARG_CALL(endScript) NO_ARG_CALL(endMark) NO_ARG_CALL(endFence) NO_ARG_CALL(endRadical) NO_ARG_CALL(radicalRadicalDefaulted) NO_ARG_CALL(endMathOperator) NO_ARG_CALL(endGrid) NO_ARG_CALL(endGridCell) #define LENGTH_SPEC_ARG_CALL(F) \ void SaveFOTBuilder::F(const LengthSpec &lengthSpec) { \ *tail_ = new LengthSpecArgCall(&FOTBuilder::F, lengthSpec); \ tail_ = &(*tail_)->next; } LENGTH_SPEC_ARG_CALL(setStartIndent) LENGTH_SPEC_ARG_CALL(setEndIndent) LENGTH_SPEC_ARG_CALL(setFirstLineStartIndent) LENGTH_SPEC_ARG_CALL(setLastLineEndIndent) LENGTH_SPEC_ARG_CALL(setLineSpacing) LENGTH_SPEC_ARG_CALL(setFieldWidth) LENGTH_SPEC_ARG_CALL(setPositionPointShift) LENGTH_SPEC_ARG_CALL(setStartMargin) LENGTH_SPEC_ARG_CALL(setEndMargin) LENGTH_SPEC_ARG_CALL(setSidelineSep) LENGTH_SPEC_ARG_CALL(setAsisWrapIndent) LENGTH_SPEC_ARG_CALL(setLineNumberSep) LENGTH_SPEC_ARG_CALL(setLastLineJustifyLimit) LENGTH_SPEC_ARG_CALL(setJustifyGlyphSpaceMaxAdd) LENGTH_SPEC_ARG_CALL(setJustifyGlyphSpaceMaxRemove) LENGTH_SPEC_ARG_CALL(setTableCornerRadius) LENGTH_SPEC_ARG_CALL(setBoxCornerRadius) LENGTH_SPEC_ARG_CALL(setMarginaliaSep) #define OPT_LENGTH_SPEC_ARG_CALL(F) \ void SaveFOTBuilder::F(const OptLengthSpec &optLengthSpec) { \ *tail_ = new OptLengthSpecArgCall(&FOTBuilder::F, optLengthSpec); \ tail_ = &(*tail_)->next; } OPT_LENGTH_SPEC_ARG_CALL(setMinPreLineSpacing) OPT_LENGTH_SPEC_ARG_CALL(setMinPostLineSpacing) OPT_LENGTH_SPEC_ARG_CALL(setMinLeading) #define LONG_ARG_CALL(F) \ void SaveFOTBuilder::F(long n) { \ *tail_ = new LongArgCall(&FOTBuilder::F, n); \ tail_ = &(*tail_)->next; } LONG_ARG_CALL(setFontSize) LONG_ARG_CALL(setPageWidth) LONG_ARG_CALL(setPageHeight) LONG_ARG_CALL(setLeftMargin) LONG_ARG_CALL(setRightMargin) LONG_ARG_CALL(setTopMargin) LONG_ARG_CALL(setBottomMargin) LONG_ARG_CALL(setHeaderMargin) LONG_ARG_CALL(setFooterMargin) LONG_ARG_CALL(setLineThickness) LONG_ARG_CALL(setCellBeforeRowMargin) LONG_ARG_CALL(setCellAfterRowMargin) LONG_ARG_CALL(setCellBeforeColumnMargin) LONG_ARG_CALL(setCellAfterColumnMargin) LONG_ARG_CALL(setLineSep) LONG_ARG_CALL(setBoxSizeBefore) LONG_ARG_CALL(setBoxSizeAfter) LONG_ARG_CALL(setLayer) LONG_ARG_CALL(setBackgroundLayer) LONG_ARG_CALL(setBorderPriority) LONG_ARG_CALL(setLineRepeat) LONG_ARG_CALL(setSpan) LONG_ARG_CALL(setMinLeaderRepeat) LONG_ARG_CALL(setHyphenationRemainCharCount) LONG_ARG_CALL(setHyphenationPushCharCount) LONG_ARG_CALL(setWidowCount) LONG_ARG_CALL(setOrphanCount) LONG_ARG_CALL(setExpandTabs) LONG_ARG_CALL(setHyphenationLadderCount) #define BOOL_ARG_CALL(F) \ void SaveFOTBuilder::F(bool b) { \ *tail_ = new BoolArgCall(&FOTBuilder::F, b); \ tail_ = &(*tail_)->next; } BOOL_ARG_CALL(setBorderPresent) BOOL_ARG_CALL(setInhibitLineBreaks) BOOL_ARG_CALL(setHyphenate) BOOL_ARG_CALL(setKern) BOOL_ARG_CALL(setLigature) BOOL_ARG_CALL(setScoreSpaces) BOOL_ARG_CALL(setFloatOutMarginalia) BOOL_ARG_CALL(setFloatOutSidelines) BOOL_ARG_CALL(setFloatOutLineNumbers) BOOL_ARG_CALL(setCellBackground) BOOL_ARG_CALL(setSpanWeak) BOOL_ARG_CALL(setIgnoreRecordEnd) BOOL_ARG_CALL(setNumberedLines) BOOL_ARG_CALL(setHangingPunct) BOOL_ARG_CALL(setBoxOpenEnd) BOOL_ARG_CALL(setTruncateLeader) BOOL_ARG_CALL(setAlignLeader) BOOL_ARG_CALL(setTablePartOmitMiddleHeader) BOOL_ARG_CALL(setTablePartOmitMiddleFooter) BOOL_ARG_CALL(setBorderOmitAtBreak) BOOL_ARG_CALL(setPrincipalModeSimultaneous) BOOL_ARG_CALL(setMarginaliaKeepWithPrevious) BOOL_ARG_CALL(setGridEquidistantRows) BOOL_ARG_CALL(setGridEquidistantColumns) #define SYMBOL_ARG_CALL(F) \ void SaveFOTBuilder::F(Symbol sym) { \ *tail_ = new SymbolArgCall(&FOTBuilder::F, sym); \ tail_ = &(*tail_)->next; } SYMBOL_ARG_CALL(setFontWeight) SYMBOL_ARG_CALL(setFontPosture) SYMBOL_ARG_CALL(setLines) SYMBOL_ARG_CALL(setQuadding) SYMBOL_ARG_CALL(setDisplayAlignment) SYMBOL_ARG_CALL(setFieldAlign) SYMBOL_ARG_CALL(setLineJoin) SYMBOL_ARG_CALL(setLineCap) SYMBOL_ARG_CALL(setLineNumberSide) SYMBOL_ARG_CALL(setKernMode) SYMBOL_ARG_CALL(setInputWhitespaceTreatment) SYMBOL_ARG_CALL(setFillingDirection) SYMBOL_ARG_CALL(setWritingMode) SYMBOL_ARG_CALL(setLastLineQuadding) SYMBOL_ARG_CALL(setMathDisplayMode) SYMBOL_ARG_CALL(setScriptPreAlign) SYMBOL_ARG_CALL(setScriptPostAlign) SYMBOL_ARG_CALL(setScriptMidSupAlign) SYMBOL_ARG_CALL(setScriptMidSubAlign) SYMBOL_ARG_CALL(setNumeratorAlign) SYMBOL_ARG_CALL(setDenominatorAlign) SYMBOL_ARG_CALL(setGridPositionCellType) SYMBOL_ARG_CALL(setGridColumnAlignment) SYMBOL_ARG_CALL(setGridRowAlignment) SYMBOL_ARG_CALL(setBoxType) SYMBOL_ARG_CALL(setGlyphAlignmentMode) SYMBOL_ARG_CALL(setBoxBorderAlignment) SYMBOL_ARG_CALL(setCellRowAlignment) SYMBOL_ARG_CALL(setBorderAlignment) SYMBOL_ARG_CALL(setSidelineSide) SYMBOL_ARG_CALL(setHyphenationKeep) SYMBOL_ARG_CALL(setFontStructure) SYMBOL_ARG_CALL(setFontProportionateWidth) SYMBOL_ARG_CALL(setCellCrossed) SYMBOL_ARG_CALL(setMarginaliaSide) #define PUBLIC_ID_ARG_CALL(F) \ void SaveFOTBuilder::F(PublicId pubid) { \ *tail_ = new PublicIdArgCall(&FOTBuilder::F, pubid); \ tail_ = &(*tail_)->next; } PUBLIC_ID_ARG_CALL(setBackgroundTile) PUBLIC_ID_ARG_CALL(setLineBreakingMethod) PUBLIC_ID_ARG_CALL(setLineCompositionMethod) PUBLIC_ID_ARG_CALL(setImplicitBidiMethod) PUBLIC_ID_ARG_CALL(setGlyphSubstMethod) PUBLIC_ID_ARG_CALL(setGlyphReorderMethod) PUBLIC_ID_ARG_CALL(setHyphenationMethod) PUBLIC_ID_ARG_CALL(setTableAutoWidthMethod) PUBLIC_ID_ARG_CALL(setFontName) #define UNSIGNED_ARG_CALL(F) \ void SaveFOTBuilder::F(unsigned n) { \ *tail_ = new UnsignedArgCall(&FOTBuilder::F, n); \ tail_ = &(*tail_)->next; } UNSIGNED_ARG_CALL(setLanguage) UNSIGNED_ARG_CALL(setCountry) UNSIGNED_ARG_CALL(startSimplePageSequenceHeaderFooter) UNSIGNED_ARG_CALL(endSimplePageSequenceHeaderFooter) #define STRING_ARG_CALL(F) \ void SaveFOTBuilder::F(const StringC &str) { \ *tail_ = new StringArgCall(&FOTBuilder::F, str); \ tail_ = &(*tail_)->next; } STRING_ARG_CALL(setFontFamilyName) STRING_ARG_CALL(formattingInstruction) #define INLINE_SPACE_ARG_CALL(F) \ void SaveFOTBuilder::F(const InlineSpace &is) { \ *tail_ = new InlineSpaceArgCall(&FOTBuilder::F, is); \ tail_ = &(*tail_)->next; } INLINE_SPACE_ARG_CALL(setEscapementSpaceBefore) INLINE_SPACE_ARG_CALL(setEscapementSpaceAfter) SaveFOTBuilder::Call::~Call() { } void SaveFOTBuilder::NoArgCall::emit(FOTBuilder &fotb) { (fotb.*func)(); } void SaveFOTBuilder::LongArgCall::emit(FOTBuilder &fotb) { (fotb.*func)(arg); } void SaveFOTBuilder::ExtensionLongArgCall::emit(FOTBuilder &fotb) { fotb.extensionSet(func, arg); } void SaveFOTBuilder::BoolArgCall::emit(FOTBuilder &fotb) { (fotb.*func)(arg); } void SaveFOTBuilder::ExtensionBoolArgCall::emit(FOTBuilder &fotb) { fotb.extensionSet(func, arg); } void SaveFOTBuilder::SymbolArgCall::emit(FOTBuilder &fotb) { (fotb.*func)(arg); } void SaveFOTBuilder::PublicIdArgCall::emit(FOTBuilder &fotb) { (fotb.*func)(arg); } void SaveFOTBuilder::UnsignedArgCall::emit(FOTBuilder &fotb) { (fotb.*func)(arg); } void SaveFOTBuilder::InlineSpaceArgCall::emit(FOTBuilder &fotb) { (fotb.*func)(arg); } void SaveFOTBuilder::StringArgCall::emit(FOTBuilder &fotb) { (fotb.*func)(arg); } void SaveFOTBuilder::ExtensionStringArgCall::emit(FOTBuilder &fotb) { fotb.extensionSet(func, arg); } void SaveFOTBuilder::CharArgCall::emit(FOTBuilder &fotb) { (fotb.*func)(arg); } void SaveFOTBuilder::LengthSpecArgCall::emit(FOTBuilder &fotb) { (fotb.*func)(arg); } void SaveFOTBuilder::OptLengthSpecArgCall::emit(FOTBuilder &fotb) { (fotb.*func)(arg); } void SaveFOTBuilder::NodePtrArgCall::emit(FOTBuilder &fotb) { (fotb.*func)(arg); } void SaveFOTBuilder::DeviceRGBColorArgCall::emit(FOTBuilder &fotb) { (fotb.*func)(arg); } void SaveFOTBuilder::charactersFromNode(const NodePtr &node, const Char *s, size_t n) { *tail_ = new CharactersFromNodeCall(node, s, n); tail_ = &(*tail_)->next; } SaveFOTBuilder::CharactersFromNodeCall::CharactersFromNodeCall(const NodePtr &nd, const Char *s, size_t n) : data(s), size(n), node(nd) { } void SaveFOTBuilder::CharactersFromNodeCall::emit(FOTBuilder &fotb) { fotb.charactersFromNode(node, data, size); } void SaveFOTBuilder::characters(const Char *s, size_t n) { *tail_ = new CharactersCall(s, n); tail_ = &(*tail_)->next; } void SaveFOTBuilder::CharacterCall::emit(FOTBuilder &fotb) { fotb.character(arg); } void SaveFOTBuilder::character(const CharacterNIC &nic) { *tail_ = new CharacterCall(nic); tail_ = &(*tail_)->next; } SaveFOTBuilder::StartNodeCall::StartNodeCall(const NodePtr &nd, const StringC &m) : node(nd), mode(m) { } void SaveFOTBuilder::StartNodeCall::emit(FOTBuilder &fotb) { fotb.startNode(node, mode); } void SaveFOTBuilder::startNode(const NodePtr &node, const StringC &mode) { *tail_ = new StartNodeCall(node, mode); tail_ = &(*tail_)->next; } void SaveFOTBuilder::currentNodePageNumber(const NodePtr &node) { *tail_ = new NodePtrArgCall(&FOTBuilder::currentNodePageNumber, node); tail_ = &(*tail_)->next; } void SaveFOTBuilder::setColor(const DeviceRGBColor &color) { *tail_ = new DeviceRGBColorArgCall(&FOTBuilder::setColor, color); tail_ = &(*tail_)->next; } void SaveFOTBuilder::setBackgroundColor(const DeviceRGBColor &color) { DeviceRGBColorArgCall::FuncPtr f = &FOTBuilder::setBackgroundColor; *tail_ = new DeviceRGBColorArgCall(f, color); tail_ = &(*tail_)->next; } void SaveFOTBuilder::setBackgroundColor() { NoArgCall::FuncPtr f = &FOTBuilder::setBackgroundColor; *tail_ = new NoArgCall(f); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startParagraph(const ParagraphNIC &nic) { *tail_ = new StartParagraphCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::paragraphBreak(const ParagraphNIC &nic) { *tail_ = new ParagraphBreakCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startDisplayGroup(const DisplayGroupNIC &nic) { *tail_ = new StartDisplayGroupCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::externalGraphic(const ExternalGraphicNIC &nic) { *tail_ = new ExternalGraphicCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::rule(const RuleNIC &nic) { *tail_ = new RuleCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startLeader(const LeaderNIC &nic) { *tail_ = new StartLeaderCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startLink(const Address &addr) { *tail_ = new StartLinkCall(addr); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startScore(Symbol type) { SymbolArgCall::FuncPtr func = &FOTBuilder::startScore; *tail_ = new SymbolArgCall(func, type); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startScore(Char c) { CharArgCall::FuncPtr func = &FOTBuilder::startScore; *tail_ = new CharArgCall(func, c); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startScore(const LengthSpec &len) { LengthSpecArgCall::FuncPtr func = &FOTBuilder::startScore; *tail_ = new LengthSpecArgCall(func, len); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startLineField(const LineFieldNIC &nic) { *tail_ = new StartLineFieldCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startBox(const BoxNIC &nic) { *tail_ = new StartBoxCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startTable(const TableNIC &nic) { *tail_ = new StartTableCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startTablePart(const TablePartNIC &nic, FOTBuilder *&header, FOTBuilder *&footer) { *tail_ = new StartTablePartCall(nic, header, footer); tail_ = &(*tail_)->next; } void SaveFOTBuilder::tableColumn(const TableColumnNIC &nic) { *tail_ = new TableColumnCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startTableCell(const TableCellNIC &nic) { *tail_ = new StartTableCellCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startFraction(FOTBuilder *&numerator, FOTBuilder *&denominator) { *tail_ = new StartFractionCall(numerator, denominator); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startScript(FOTBuilder *&preSup, FOTBuilder *&preSub, FOTBuilder *&postSup, FOTBuilder *&postSub, FOTBuilder *&midSup, FOTBuilder *&midSub) { *tail_ = new StartScriptCall(preSup, preSub, postSup, postSub, midSup, midSub); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startMark(FOTBuilder *&overMark, FOTBuilder *&underMark) { *tail_ = new StartMarkCall(overMark, underMark); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startFence(FOTBuilder *&open, FOTBuilder *&close) { *tail_ = new StartFenceCall(open, close); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startRadical(FOTBuilder *°ree) { *tail_ = new StartRadicalCall(degree); tail_ = &(*tail_)->next; } void SaveFOTBuilder::radicalRadical(const CharacterNIC &nic) { *tail_ = new RadicalRadicalCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startMathOperator(FOTBuilder *&oper, FOTBuilder *&lowerLimit, FOTBuilder *&upperLimit) { *tail_ = new StartMathOperatorCall(oper, lowerLimit, upperLimit); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startGrid(const GridNIC &nic) { *tail_ = new StartGridCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startGridCell(const GridCellNIC &nic) { *tail_ = new StartGridCellCall(nic); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startMultiMode(const MultiMode *principalMode, const Vector &namedModes, Vector &namedPorts) { *tail_ = new StartMultiModeCall(principalMode, namedModes, namedPorts); tail_ = &(*tail_)->next; } void SaveFOTBuilder::setGlyphSubstTable(const Vector > &tables) { *tail_ = new SetGlyphSubstTableCall(tables); tail_ = &(*tail_)->next; } void SaveFOTBuilder::extensionSet(void (FOTBuilder::*func)(bool), bool arg) { *tail_ = new ExtensionBoolArgCall(func, arg); tail_ = &(*tail_)->next; } void SaveFOTBuilder::extensionSet(void (FOTBuilder::*func)(const StringC &), const StringC &arg) { *tail_ = new ExtensionStringArgCall(func, arg); tail_ = &(*tail_)->next; } void SaveFOTBuilder::extensionSet(void (FOTBuilder::*func)(long), long arg) { *tail_ = new ExtensionLongArgCall(func, arg); tail_ = &(*tail_)->next; } void SaveFOTBuilder::startExtension(const CompoundExtensionFlowObj &fo, const NodePtr &node, Vector &ports) { *tail_ = new StartExtensionCall(fo, node, ports); tail_ = &(*tail_)->next; } void SaveFOTBuilder::endExtension(const CompoundExtensionFlowObj &fo) { *tail_ = new EndExtensionCall(fo); tail_ = &(*tail_)->next; } void SaveFOTBuilder::extension(const ExtensionFlowObj &fo, const NodePtr &node) { *tail_ = new ExtensionCall(fo, node); tail_ = &(*tail_)->next; } SaveFOTBuilder::CharactersCall::CharactersCall(const Char *s, size_t n) : str(s, n) { } void SaveFOTBuilder::CharactersCall::emit(FOTBuilder &fotb) { fotb.characters(str.data(), str.size()); } StartFractionCall::StartFractionCall(FOTBuilder *&n, FOTBuilder *&d) { n = &numerator; d = &denominator; } void StartFractionCall::emit(FOTBuilder &fotb) { FOTBuilder *n, *d; fotb.startFraction(n, d); numerator.emit(*n); denominator.emit(*d); } StartScriptCall::StartScriptCall(FOTBuilder *&p0, FOTBuilder *&p1, FOTBuilder *&p2, FOTBuilder *&p3, FOTBuilder *&p4, FOTBuilder *&p5) { p0 = &preSup; p1 = &preSub; p2 = &postSup; p3 = &postSub; p4 = &midSup; p5 = &midSub; } void StartScriptCall::emit(FOTBuilder &fotb) { FOTBuilder *v[6]; fotb.startScript(v[0], v[1], v[2], v[3], v[4], v[5]); preSup.emit(*v[0]); preSub.emit(*v[1]); postSup.emit(*v[2]); postSub.emit(*v[3]); midSup.emit(*v[4]); midSub.emit(*v[5]); } StartMarkCall::StartMarkCall(FOTBuilder *&o, FOTBuilder *&u) { o = &overMark; u = &underMark; } void StartMarkCall::emit(FOTBuilder &fotb) { FOTBuilder *o, *u; fotb.startMark(o, u); overMark.emit(*o); underMark.emit(*u); } StartFenceCall::StartFenceCall(FOTBuilder *&o, FOTBuilder *&c) { o = &open; c = &close; } void StartFenceCall::emit(FOTBuilder &fotb) { FOTBuilder *o, *c; fotb.startFence(o, c); open.emit(*o); close.emit(*c); } StartRadicalCall::StartRadicalCall(FOTBuilder *&d) { d = °ree; } void StartRadicalCall::emit(FOTBuilder &fotb) { FOTBuilder *d; fotb.startRadical(d); degree.emit(*d); } StartMathOperatorCall::StartMathOperatorCall(FOTBuilder *&o, FOTBuilder *&l, FOTBuilder *&u) { o = &oper; l = &lowerLimit; u = &upperLimit; } void StartMathOperatorCall::emit(FOTBuilder &fotb) { FOTBuilder *o, *l, *u; fotb.startMathOperator(o, l, u); oper.emit(*o); lowerLimit.emit(*l); upperLimit.emit(*u); } StartMultiModeCall::StartMultiModeCall(const FOTBuilder::MultiMode *pm, const Vector &nm, Vector &v) : namedModes(nm) { if (pm) { hasPrincipalMode = 1; principalMode = *pm; } else hasPrincipalMode = 0; for (size_t i = v.size(); i > 0; i--) { ports.insert(new SaveFOTBuilder); v[i - 1] = ports.head(); } } void StartMultiModeCall::emit(FOTBuilder &fotb) { Vector v(namedModes.size()); fotb.startMultiMode(hasPrincipalMode ? &principalMode : 0, namedModes, v); for (size_t i = 0; i < v.size(); i++) { Owner tem(ports.get()); tem->emit(*v[i]); } } void SaveFOTBuilder::StartTableCall::emit(FOTBuilder &fotb) { fotb.startTable(arg); } void SaveFOTBuilder::TableColumnCall::emit(FOTBuilder &fotb) { fotb.tableColumn(arg); } void SaveFOTBuilder::StartTableCellCall::emit(FOTBuilder &fotb) { fotb.startTableCell(arg); } StartTablePartCall::StartTablePartCall(const SaveFOTBuilder::TablePartNIC &nic, FOTBuilder *&h, FOTBuilder *&f) : arg(nic) { h = &header; f = &footer; } void StartTablePartCall::emit(FOTBuilder &fotb) { FOTBuilder *h, *f; fotb.startTablePart(arg, h, f); header.emit(*h); footer.emit(*f); } SaveFOTBuilder::StartParagraphCall::StartParagraphCall(const ParagraphNIC &nic) : arg(nic) { } void SaveFOTBuilder::StartParagraphCall::emit(FOTBuilder &fotb) { fotb.startParagraph(arg); } SaveFOTBuilder::ParagraphBreakCall::ParagraphBreakCall(const ParagraphNIC &nic) : arg(nic) { } void SaveFOTBuilder::ParagraphBreakCall::emit(FOTBuilder &fotb) { fotb.paragraphBreak(arg); } SaveFOTBuilder ::StartDisplayGroupCall::StartDisplayGroupCall(const DisplayGroupNIC &nic) : arg(nic) { } void SaveFOTBuilder::StartDisplayGroupCall::emit(FOTBuilder &fotb) { fotb.startDisplayGroup(arg); } void SaveFOTBuilder::ExternalGraphicCall::emit(FOTBuilder &fotb) { fotb.externalGraphic(arg); } void SaveFOTBuilder::RuleCall::emit(FOTBuilder &fotb) { fotb.rule(arg); } void SaveFOTBuilder::StartLeaderCall::emit(FOTBuilder &fotb) { fotb.startLeader(arg); } void SaveFOTBuilder::StartBoxCall::emit(FOTBuilder &fotb) { fotb.startBox(arg); } void SaveFOTBuilder::StartLineFieldCall::emit(FOTBuilder &fotb) { fotb.startLineField(arg); } void SaveFOTBuilder::StartLinkCall::emit(FOTBuilder &fotb) { fotb.startLink(arg); } void SaveFOTBuilder::SetGlyphSubstTableCall::emit(FOTBuilder &fotb) { fotb.setGlyphSubstTable(arg); } void SaveFOTBuilder::StartGridCall::emit(FOTBuilder &fotb) { fotb.startGrid(arg); } void SaveFOTBuilder::StartGridCellCall::emit(FOTBuilder &fotb) { fotb.startGridCell(arg); } void SaveFOTBuilder::RadicalRadicalCall::emit(FOTBuilder &fotb) { fotb.radicalRadical(arg); } void SaveFOTBuilder::ExtensionCall::emit(FOTBuilder &fotb) { fotb.extension(*arg, node); } void SaveFOTBuilder::EndExtensionCall::emit(FOTBuilder &fotb) { fotb.endExtension(*arg); } StartExtensionCall::StartExtensionCall(const FOTBuilder::CompoundExtensionFlowObj &fo, const NodePtr &nd, Vector &v) : flowObj(fo.copy()->asCompoundExtensionFlowObj()), node(nd) { for (size_t i = v.size(); i > 0; i--) { ports.insert(new SaveFOTBuilder); v[i - 1] = ports.head(); } } void StartExtensionCall::emit(FOTBuilder &fotb) { Vector portNames; flowObj->portNames(portNames); Vector v(portNames.size()); fotb.startExtension(*flowObj, node, v); for (size_t i = 0; i < v.size(); i++) { Owner tem(ports.get()); tem->emit(*v[i]); } } SerialFOTBuilder::SerialFOTBuilder() { } void SerialFOTBuilder::startFraction(FOTBuilder *&numerator, FOTBuilder *&denominator) { save_.insert(new SaveFOTBuilder); denominator = save_.head(); save_.insert(new SaveFOTBuilder); numerator = save_.head(); startFractionSerial(); } void SerialFOTBuilder::endFraction() { { Owner numerator(save_.get()); startFractionNumerator(); numerator->emit(*this); endFractionNumerator(); } { Owner denominator(save_.get()); startFractionDenominator(); denominator->emit(*this); endFractionDenominator(); } endFractionSerial(); } void SerialFOTBuilder::startScript(FOTBuilder *&preSup, FOTBuilder *&preSub, FOTBuilder *&postSup, FOTBuilder *&postSub, FOTBuilder *&midSup, FOTBuilder *&midSub) { save_.insert(new SaveFOTBuilder); midSub = save_.head(); save_.insert(new SaveFOTBuilder); midSup = save_.head(); save_.insert(new SaveFOTBuilder); postSub = save_.head(); save_.insert(new SaveFOTBuilder); postSup = save_.head(); save_.insert(new SaveFOTBuilder); preSub = save_.head(); save_.insert(new SaveFOTBuilder); preSup = save_.head(); startScriptSerial(); } void SerialFOTBuilder::endScript() { { Owner tem(save_.get()); startScriptPreSup(); tem->emit(*this); endScriptPreSup(); } { Owner tem(save_.get()); startScriptPreSub(); tem->emit(*this); endScriptPreSub(); } { Owner tem(save_.get()); startScriptPostSup(); tem->emit(*this); endScriptPostSup(); } { Owner tem(save_.get()); startScriptPostSub(); tem->emit(*this); endScriptPostSub(); } { Owner tem(save_.get()); startScriptMidSup(); tem->emit(*this); endScriptMidSup(); } { Owner tem(save_.get()); startScriptMidSub(); tem->emit(*this); endScriptMidSub(); } endScriptSerial(); } void SerialFOTBuilder::startMark(FOTBuilder *&overMark, FOTBuilder *&underMark) { save_.insert(new SaveFOTBuilder); underMark = save_.head(); save_.insert(new SaveFOTBuilder); overMark = save_.head(); startMarkSerial(); } void SerialFOTBuilder::endMark() { { Owner tem(save_.get()); startMarkOver(); tem->emit(*this); endMarkOver(); } { Owner tem(save_.get()); startMarkUnder(); tem->emit(*this); endMarkUnder(); } endMarkSerial(); } void SerialFOTBuilder::startFence(FOTBuilder *&open, FOTBuilder *&close) { save_.insert(new SaveFOTBuilder); close = save_.head(); save_.insert(new SaveFOTBuilder); open = save_.head(); startFenceSerial(); } void SerialFOTBuilder::endFence() { { Owner tem(save_.get()); startFenceOpen(); tem->emit(*this); endFenceOpen(); } { Owner tem(save_.get()); startFenceClose(); tem->emit(*this); endFenceClose(); } endFenceSerial(); } void SerialFOTBuilder::startRadical(FOTBuilder *°ree) { save_.insert(new SaveFOTBuilder); degree = save_.head(); startRadicalSerial(); } void SerialFOTBuilder::endRadical() { Owner tem(save_.get()); startRadicalDegree(); tem->emit(*this); endRadicalDegree(); endRadicalSerial(); } void SerialFOTBuilder::startMathOperator(FOTBuilder *&oper, FOTBuilder *&lowerLimit, FOTBuilder *&upperLimit) { save_.insert(new SaveFOTBuilder); upperLimit = save_.head(); save_.insert(new SaveFOTBuilder); lowerLimit = save_.head(); save_.insert(new SaveFOTBuilder); oper = save_.head(); startMathOperatorSerial(); } void SerialFOTBuilder::endMathOperator() { { Owner tem(save_.get()); startMathOperatorOperator(); tem->emit(*this); endMathOperatorOperator(); } { Owner tem(save_.get()); startMathOperatorLowerLimit(); tem->emit(*this); endMathOperatorLowerLimit(); } { Owner tem(save_.get()); startMathOperatorUpperLimit(); tem->emit(*this); endMathOperatorUpperLimit(); } endMathOperatorSerial(); } void SerialFOTBuilder::startFractionSerial() { start(); } void SerialFOTBuilder::endFractionSerial() { end(); } void SerialFOTBuilder::startFractionNumerator() { } void SerialFOTBuilder::endFractionNumerator() { } void SerialFOTBuilder::startFractionDenominator() { } void SerialFOTBuilder::endFractionDenominator() { } void SerialFOTBuilder::startScriptSerial() { start(); } void SerialFOTBuilder::endScriptSerial() { end(); } void SerialFOTBuilder::startScriptPreSup() { } void SerialFOTBuilder::endScriptPreSup() { } void SerialFOTBuilder::startScriptPreSub() { } void SerialFOTBuilder::endScriptPreSub() { } void SerialFOTBuilder::startScriptPostSup() { } void SerialFOTBuilder::endScriptPostSup() { } void SerialFOTBuilder::startScriptPostSub() { } void SerialFOTBuilder::endScriptPostSub() { } void SerialFOTBuilder::startScriptMidSup() { } void SerialFOTBuilder::endScriptMidSup() { } void SerialFOTBuilder::startScriptMidSub() { } void SerialFOTBuilder::endScriptMidSub() { } void SerialFOTBuilder::startMarkSerial() { start(); } void SerialFOTBuilder::endMarkSerial() { end(); } void SerialFOTBuilder::startMarkOver() { } void SerialFOTBuilder::endMarkOver() { } void SerialFOTBuilder::startMarkUnder() { } void SerialFOTBuilder::endMarkUnder() { } void SerialFOTBuilder::startFenceSerial() { start(); } void SerialFOTBuilder::endFenceSerial() { end(); } void SerialFOTBuilder::startFenceOpen() { } void SerialFOTBuilder::endFenceOpen() { } void SerialFOTBuilder::startFenceClose() { } void SerialFOTBuilder::endFenceClose() { } void SerialFOTBuilder::startRadicalSerial() { start(); } void SerialFOTBuilder::endRadicalSerial() { end(); } void SerialFOTBuilder::startRadicalDegree() { } void SerialFOTBuilder::endRadicalDegree() { } void SerialFOTBuilder::startMathOperatorSerial() { start(); } void SerialFOTBuilder::endMathOperatorSerial() { end(); } void SerialFOTBuilder::startMathOperatorOperator() { } void SerialFOTBuilder::endMathOperatorOperator() { } void SerialFOTBuilder::startMathOperatorLowerLimit() { } void SerialFOTBuilder::endMathOperatorLowerLimit() { } void SerialFOTBuilder::startMathOperatorUpperLimit() { } void SerialFOTBuilder::endMathOperatorUpperLimit() { } void SerialFOTBuilder::startTablePart(const FOTBuilder::TablePartNIC &nic, FOTBuilder *&header, FOTBuilder *&footer) { save_.insert(new SaveFOTBuilder); footer = save_.head(); save_.insert(new SaveFOTBuilder); header = save_.head(); startTablePartSerial(nic); } void SerialFOTBuilder::endTablePart() { Owner header(save_.get()); startTablePartHeader(); header->emit(*this); endTablePartHeader(); Owner footer(save_.get()); startTablePartFooter(); footer->emit(*this); endTablePartFooter(); endTablePartSerial(); } void SerialFOTBuilder::startTablePartSerial(const TablePartNIC &) { start(); } void SerialFOTBuilder::endTablePartSerial() { end(); } void SerialFOTBuilder::startTablePartHeader() { } void SerialFOTBuilder::endTablePartHeader() { } void SerialFOTBuilder::startTablePartFooter() { } void SerialFOTBuilder::endTablePartFooter() { } void SerialFOTBuilder::startMultiMode(const MultiMode *principalMode, const Vector &namedModes, Vector &namedPorts) { for (size_t i = namedModes.size(); i > 0; i--) { save_.insert(new SaveFOTBuilder); namedPorts[i - 1] = save_.head(); } multiModeStack_.push_back(namedModes); startMultiModeSerial(principalMode); } void SerialFOTBuilder::endMultiMode() { const Vector &namedModes = multiModeStack_.back(); for (size_t i = 0; i < namedModes.size(); i++) { Owner mode(save_.get()); startMultiModeMode(namedModes[i]); mode->emit(*this); endMultiModeMode(); } endMultiModeSerial(); multiModeStack_.resize(multiModeStack_.size() - 1); } void SerialFOTBuilder::startMultiModeSerial(const MultiMode *) { start(); } void SerialFOTBuilder::endMultiModeSerial() { end(); } void SerialFOTBuilder::startMultiModeMode(const MultiMode &) { } void SerialFOTBuilder::endMultiModeMode() { } void SerialFOTBuilder::startExtension(const CompoundExtensionFlowObj &flowObj, const NodePtr &nd, Vector &ports) { for (size_t i = ports.size(); i > 0; i--) { save_.insert(new SaveFOTBuilder); ports[i - 1] = save_.head(); } startExtensionSerial(flowObj, nd); } void SerialFOTBuilder::endExtension(const CompoundExtensionFlowObj &flowObj) { Vector portNames; flowObj.portNames(portNames); for (size_t i = 0; i < portNames.size(); i++) { Owner stream(save_.get()); startExtensionStream(portNames[i]); stream->emit(*this); endExtensionStream(portNames[i]); } endExtensionSerial(flowObj); } void SerialFOTBuilder::startExtensionSerial(const CompoundExtensionFlowObj &, const NodePtr &) { start(); } void SerialFOTBuilder::endExtensionSerial(const CompoundExtensionFlowObj &) { end(); } void SerialFOTBuilder::startExtensionStream(const StringC &) { } void SerialFOTBuilder::endExtensionStream(const StringC &) { } FOTBuilder::ExtensionFlowObj::~ExtensionFlowObj() { } FOTBuilder::CompoundExtensionFlowObj * FOTBuilder::ExtensionFlowObj::asCompoundExtensionFlowObj() { return 0; } const FOTBuilder::CompoundExtensionFlowObj * FOTBuilder::ExtensionFlowObj::asCompoundExtensionFlowObj() const { return 0; } bool FOTBuilder::ExtensionFlowObj::hasNIC(const StringC &) const { return 0; } void FOTBuilder::ExtensionFlowObj::setNIC(const StringC &, const Value &) { CANNOT_HAPPEN(); } FOTBuilder::CompoundExtensionFlowObj * FOTBuilder::CompoundExtensionFlowObj::asCompoundExtensionFlowObj() { return this; } const FOTBuilder::CompoundExtensionFlowObj * FOTBuilder::CompoundExtensionFlowObj::asCompoundExtensionFlowObj() const { return this; } bool FOTBuilder::CompoundExtensionFlowObj::hasPrincipalPort() const { return 1; } void FOTBuilder::CompoundExtensionFlowObj::portNames(Vector &) const { } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/GroveManager.cxx100444 764 764 407 6604607716 14441 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "GroveManager.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif GroveManager::~GroveManager() { } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/Insn.cxx100444 764 764 100773 6604607716 13062 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "VM.h" #include "Insn.h" #include "Interpreter.h" #include "InterpreterMessages.h" #include "ELObjMessageArg.h" #include "Expression.h" #include "macros.h" #include "Insn2.h" #include "SosofoObj.h" #include #include #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif VM::VM(Interpreter &interpreter) : Collector::DynamicRoot(interpreter), interp(&interpreter) { init(); } VM::VM(EvalContext &context, Interpreter &interpreter) : EvalContext(context), Collector::DynamicRoot(interpreter), interp(&interpreter) { init(); } void VM::init() { slim = 0; sbase = 0; sp = 0; closure = 0; frame = 0; protectClosure = 0; csp = 0; cslim = 0; csbase = 0; closureLoc.clear(); } VM::~VM() { delete [] sbase; delete [] csbase; } void VM::initStack() { sp = sbase; frame = sbase; csp = csbase; modeStack.resize(0); } void VM::growStack(int n) { size_t newSize = sp - sbase; if (n > newSize) newSize += (n + 15) & ~15; else newSize += newSize; ELObj **newStack = new ELObj *[newSize]; slim = newStack + newSize; memcpy(newStack, sbase, (sp - sbase)*sizeof(ELObj *)); sp = newStack + (sp - sbase); frame = newStack + (frame - sbase); if (sbase) delete [] sbase; sbase = newStack; } void VM::trace(Collector &c) const { if (sp) { for (ELObj **p = sbase; p != sp; p++) c.trace(*p); } for (ControlStackEntry *p = csbase; p != csp; p++) { c.trace(p->protectClosure); c.trace(p->continuation); } c.trace(protectClosure); } void VM::pushFrame(const Insn *next, int argsPushed) { if (csp >= cslim) { size_t newSize = csbase ? (cslim - csbase)*2 : 8; ControlStackEntry *newBase = new ControlStackEntry[newSize]; cslim = newBase + newSize; ControlStackEntry *newP = newBase; for (const ControlStackEntry *oldP = csbase; oldP < csp; oldP++) *newP++ = *oldP; csp = newP; if (csbase) delete [] csbase; csbase = newBase; } csp->closure = closure; csp->protectClosure = protectClosure; csp->next = next; csp->frameSize = sp - frame - argsPushed; csp->closureLoc = closureLoc; csp->continuation = 0; csp++; } const Insn *VM::popFrame() { ASSERT(csp > csbase); --csp; if (csp->continuation) csp->continuation->kill(); closure = csp->closure; protectClosure = csp->protectClosure; frame = sp - csp->frameSize; closureLoc = csp->closureLoc; return csp->next; } void VM::setClosureArgToCC() { ASSERT(nActualArgs == 1); ContinuationObj *cc = (ContinuationObj *)sp[-1]; csp[-1].continuation = cc; cc->set(sp - sbase, csp - csbase); } ELObj *VM::eval(const Insn *insn, ELObj **display, ELObj *arg) { initStack(); if (arg) { needStack(1); *sp++ = arg; } closure = display; protectClosure = 0; closureLoc.clear(); // The inner loop. while (insn) insn = insn->execute(*this); ELObj *result; if (sp) { sp--; ASSERT(sp == sbase); ASSERT(csp == csbase); result = *sp; ASSERT(result != 0); } else { if (interp->debugMode()) stackTrace(); result = interp->makeError(); } return result; } void VM::stackTrace() { unsigned long count = 0; if (protectClosure) { interp->setNextLocation(closureLoc); interp->message(InterpreterMessages::stackTrace); count++; } ControlStackEntry *lim = csbase; if (csp != csbase && !csbase->protectClosure) lim++; for (ControlStackEntry *p = csp; p != lim; p--) { interp->setNextLocation(p[-1].closureLoc); count++; if (count == 5 && p - lim > 7) { interp->message(InterpreterMessages::stackTraceEllipsis, NumberMessageArg(p - (lim + 6))); p = lim + 6; } else interp->message(InterpreterMessages::stackTrace); } } Insn::~Insn() { } bool Insn::isReturn(int &) const { return false; } bool Insn::isPopBindings(int &, InsnPtr &) const { return false; } const Insn *ErrorInsn::execute(VM &vm) const { vm.sp = 0; return 0; } CondFailInsn::CondFailInsn(const Location &loc) : loc_(loc) { } const Insn *CondFailInsn::execute(VM &vm) const { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::condFail); return ErrorInsn::execute(vm); } CaseFailInsn::CaseFailInsn(const Location &loc) : loc_(loc) { } const Insn *CaseFailInsn::execute(VM &vm) const { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::caseFail, ELObjMessageArg(vm.sp[-1], *vm.interp)); return ErrorInsn::execute(vm); } ConstantInsn::ConstantInsn(ELObj *obj, InsnPtr next) : value_(obj), next_(next) { } const Insn *ConstantInsn::execute(VM &vm) const { vm.needStack(1); *vm.sp++ = value_; return next_.pointer(); } ResolveQuantitiesInsn::ResolveQuantitiesInsn(const Location &loc, InsnPtr next) : loc_(loc), next_(next) { } const Insn *ResolveQuantitiesInsn::execute(VM &vm) const { ELObj *tem = vm.sp[-1]->resolveQuantities(1, *vm.interp, loc_); ASSERT(tem != 0); if (vm.interp->isError(tem)) { vm.sp = 0; return 0; } vm.sp[-1] = tem; return next_.pointer(); } TestInsn::TestInsn(InsnPtr consequent, InsnPtr alternative) : consequent_(consequent), alternative_(alternative) { } const Insn *TestInsn::execute(VM &vm) const { return (*--vm.sp)->isTrue() ? consequent_.pointer() : alternative_.pointer(); } OrInsn::OrInsn(InsnPtr nextTest, InsnPtr next) : nextTest_(nextTest), next_(next) { } const Insn *OrInsn::execute(VM &vm) const { if (vm.sp[-1]->isTrue()) return next_.pointer(); --vm.sp; return nextTest_.pointer(); } AndInsn::AndInsn(InsnPtr nextTest, InsnPtr next) : nextTest_(nextTest), next_(next) { } const Insn *AndInsn::execute(VM &vm) const { if (!vm.sp[-1]->isTrue()) return next_.pointer(); --vm.sp; return nextTest_.pointer(); } CaseInsn::CaseInsn(ELObj *obj, InsnPtr match, InsnPtr fail) : obj_(obj), match_(match), fail_(fail) { } const Insn *CaseInsn::execute(VM &vm) const { if (ELObj::eqv(*vm.sp[-1], *obj_)) { --vm.sp; return match_.pointer(); } return fail_.pointer(); } PopInsn::PopInsn(InsnPtr next) : next_(next) { } const Insn *PopInsn::execute(VM &vm) const { --vm.sp; return next_.pointer(); } ConsInsn::ConsInsn(InsnPtr next) : next_(next) { } const Insn *ConsInsn::execute(VM &vm) const { vm.sp[-2] = vm.interp->makePair(vm.sp[-1], vm.sp[-2]); --vm.sp; return next_.pointer(); } AppendInsn:: AppendInsn(const Location &loc, InsnPtr next) : loc_(loc), next_(next) { } const Insn *AppendInsn::execute(VM &vm) const { ELObj *&source = vm.sp[-1]; if (!source->isNil()) { PairObj *pair = source->asPair(); if (!pair) { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::spliceNotList); vm.sp = 0; return 0; } source = pair->cdr(); PairObj *tail = vm.interp->makePair(pair->car(), 0); ELObjDynamicRoot head(*vm.interp, tail); while (!source->isNil()) { pair = source->asPair(); if (!pair) { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::spliceNotList); vm.sp = 0; return 0; } PairObj *newTail = vm.interp->makePair(pair->car(), 0); tail->setCdr(newTail); tail = newTail; source = pair->cdr(); } tail->setCdr(vm.sp[-2]); vm.sp[-2] = head; } --vm.sp; return next_.pointer(); } ApplyBaseInsn::ApplyBaseInsn(int nArgs, const Location &loc) : nArgs_(nArgs), loc_(loc) { } ApplyInsn::ApplyInsn(int nArgs, const Location &loc, InsnPtr next) : ApplyBaseInsn(nArgs, loc), next_(next) { } TailApplyInsn::TailApplyInsn(int nCallerArgs, int nArgs, const Location &loc) : ApplyBaseInsn(nArgs, loc), nCallerArgs_(nCallerArgs) { } // top of stack is operand; next down is last operand and so on FunctionObj *ApplyBaseInsn::decodeArgs(VM &vm) const { FunctionObj *func = (*--vm.sp)->asFunction(); if (!func) { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::callNonFunction, ELObjMessageArg(*vm.sp, *vm.interp)); vm.sp = 0; return 0; } int nReq = func->nRequiredArgs(); if (nArgs_ < nReq) { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::missingArg); vm.sp = 0; return 0; } if (nArgs_ - nReq > func->nOptionalArgs()) { if (func->nKeyArgs()) { // Keyword args can be specified more than once // so we can only check there are an even number. if ((nArgs_ - nReq - func->nOptionalArgs()) & 1) { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::oddKeyArgs); vm.sp -= (nArgs_ - nReq) - func->nOptionalArgs(); } } else if (!func->restArg()) { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::tooManyArgs); vm.sp -= (nArgs_ - nReq) - func->nOptionalArgs(); } } return func; } const Insn *ApplyInsn::execute(VM &vm) const { FunctionObj *func = decodeArgs(vm); vm.nActualArgs = nArgs_; if (func) return func->call(vm, loc_, next_.pointer()); else return 0; } const Insn *TailApplyInsn::execute(VM &vm) const { FunctionObj *func = decodeArgs(vm); vm.nActualArgs = nArgs_; if (func) return func->tailCall(vm, loc_, nCallerArgs_); else return 0; } ApplyPrimitiveObj::ApplyPrimitiveObj() : FunctionObj(&signature_) { } const Signature ApplyPrimitiveObj::signature_ = { 2, 0, 1 }; const Insn *ApplyPrimitiveObj::call(VM &vm, const Location &loc, const Insn *next) { if (!shuffle(vm, loc)) return 0; ApplyInsn insn(vm.nActualArgs, loc, (Insn *)next); return insn.execute(vm); } bool ApplyPrimitiveObj::shuffle(VM &vm, const Location &loc) { int nArgs = vm.nActualArgs; ELObj *func = vm.sp[-nArgs]; for (int i = nArgs - 2; i > 0; i--) vm.sp[-i - 2] = vm.sp[-i - 1]; vm.nActualArgs = nArgs - 2; ELObj *list = *--vm.sp; --vm.sp; while (!list->isNil()) { PairObj *tem = list->asPair(); if (!tem) { vm.interp->setNextLocation(loc); vm.interp->message(InterpreterMessages::notAList, StringMessageArg(vm.interp->makeStringC("apply")), OrdinalMessageArg(nArgs), ELObjMessageArg(list, *vm.interp)); vm.sp = 0; return 0; } vm.needStack(1); vm.nActualArgs++; *vm.sp++ = tem->car(); list = tem->cdr(); } vm.needStack(1); *vm.sp++ = func; return 1; } const Insn *ApplyPrimitiveObj::tailCall(VM &vm, const Location &loc, int nCallerArgs) { if (!shuffle(vm, loc)) return 0; TailApplyInsn insn(nCallerArgs, vm.nActualArgs, loc); return insn.execute(vm); } PrimitiveCallInsn::PrimitiveCallInsn(int nArgs, PrimitiveObj *prim, const Location &loc, InsnPtr next) : nArgs_(nArgs), prim_(prim), loc_(loc), next_(next) { } const Insn *PrimitiveCallInsn::execute(VM &vm) const { if (nArgs_ == 0) vm.needStack(1); ELObj **argp = vm.sp - nArgs_; *argp = prim_->primitiveCall(nArgs_, argp, vm, *vm.interp, loc_); ASSERT(vm.interp->objectMaybeLive(*argp)); vm.sp = argp + 1; if (vm.interp->isError(*argp)) { vm.sp = 0; return 0; } else return next_.pointer(); } InsnPtr FunctionObj::makeCallInsn(int nArgs, Interpreter &, const Location &loc, InsnPtr next) { return new FunctionCallInsn(nArgs, this, loc, next); } InsnPtr FunctionObj::makeTailCallInsn(int nArgs, Interpreter &, const Location &loc, int nCallerArgs) { return new FunctionTailCallInsn(nArgs, this, loc, nCallerArgs); } FunctionObj *FunctionObj::asFunction() { return this; } void FunctionObj::setArgToCC(VM &) { } const Insn *PrimitiveObj::call(VM &vm, const Location &loc, const Insn *next) { if (vm.nActualArgs == 0) vm.needStack(1); ELObj **argp = vm.sp - vm.nActualArgs; *argp = primitiveCall(vm.nActualArgs, argp, vm, *vm.interp, loc); vm.sp = argp + 1; if (vm.interp->isError(*argp)) { vm.sp = 0; return 0; } else return next; } const Insn *PrimitiveObj::tailCall(VM &vm, const Location &loc, int nCallerArgs) { ELObj **argp = vm.sp - vm.nActualArgs; ELObj *result = primitiveCall(vm.nActualArgs, argp, vm, *vm.interp, loc); if (vm.interp->isError(result)) { vm.sp = 0; return 0; } else { vm.sp = argp - nCallerArgs; const Insn *next = vm.popFrame(); vm.needStack(1); *vm.sp++ = result; return next; } } InsnPtr PrimitiveObj::makeCallInsn(int nArgs, Interpreter &interp, const Location &loc, InsnPtr next) { return new PrimitiveCallInsn(nArgs, this, loc, next); } ELObj *PrimitiveObj::argError(Interpreter &interp, const Location &loc, const MessageType3 &msg, unsigned index, ELObj *obj) const { NodeListObj *nl = obj->asNodeList(); if (!nl || !nl->suppressError()) { interp.setNextLocation(loc); interp.message(msg, StringMessageArg(ident_->name()), OrdinalMessageArg(index + 1), ELObjMessageArg(obj, interp)); } return interp.makeError(); } ELObj *PrimitiveObj::noCurrentNodeError(Interpreter &interp, const Location &loc) const { interp.setNextLocation(loc); interp.message(InterpreterMessages::noCurrentNode); return interp.makeError(); } ClosureInsn::ClosureInsn(const Signature *sig, InsnPtr code, int displayLength, InsnPtr next) : sig_(sig), code_(code), displayLength_(displayLength), next_(next) { } const Insn *ClosureInsn::execute(VM &vm) const { ELObj **display = displayLength_ ? new ELObj *[displayLength_ + 1] : 0; ELObj **tem = vm.sp - displayLength_; for (int i = 0; i < displayLength_; i++) display[i] = tem[i]; if (displayLength_ == 0) { vm.needStack(1); tem = vm.sp; } else display[displayLength_] = 0; // Make sure objects in display are still visible on the stack // to the garbage collector. *tem++ = new (*vm.interp) ClosureObj(sig_, code_, display); vm.sp = tem; return next_.pointer(); } FunctionCallInsn:: FunctionCallInsn(int nArgs, FunctionObj *function, const Location &loc, InsnPtr next) : nArgs_(nArgs), function_(function), loc_(loc), next_(next) { } const Insn *FunctionCallInsn::execute(VM &vm) const { vm.nActualArgs = nArgs_; return function_->call(vm, loc_, next_.pointer()); } FunctionTailCallInsn:: FunctionTailCallInsn(int nArgs, FunctionObj *function, const Location &loc, int nCallerArgs) : nArgs_(nArgs), function_(function), loc_(loc), nCallerArgs_(nCallerArgs) { } const Insn *FunctionTailCallInsn::execute(VM &vm) const { vm.nActualArgs = nArgs_; return function_->tailCall(vm, loc_, nCallerArgs_); } TestNullInsn::TestNullInsn(int offset, InsnPtr ifNull, InsnPtr ifNotNull) : offset_(offset), ifNull_(ifNull), ifNotNull_(ifNotNull) { } const Insn *TestNullInsn::execute(VM &vm) const { if (vm.sp[offset_] == 0) return ifNull_.pointer(); else return ifNotNull_.pointer(); } VarargsInsn::VarargsInsn(const Signature &sig, Vector &entryPoints, const Location &loc) : sig_(&sig), loc_(loc) { entryPoints.swap(entryPoints_); } const Insn *VarargsInsn::execute(VM &vm) const { int n = vm.nActualArgs - sig_->nRequiredArgs; if ((sig_->restArg || sig_->nKeyArgs) && n > entryPoints_.size() - 2) { // cons up the rest args ELObjDynamicRoot protect(*vm.interp, vm.interp->makeNil()); for (int i = n - (entryPoints_.size() - 2); i > 0; i--) { protect = new (*vm.interp) PairObj(vm.sp[-1], protect); --vm.sp; } vm.needStack(sig_->nKeyArgs + sig_->restArg); if (sig_->restArg) *vm.sp++ = protect; if (sig_->nKeyArgs) { for (int i = 0; i < sig_->nKeyArgs; i++) vm.sp[i] = 0; ELObj *tem = protect; for (int i = n - (entryPoints_.size() - 2); i > 0; i -= 2) { KeywordObj *k = ((PairObj *)tem)->car()->asKeyword(); tem = ((PairObj *)tem)->cdr(); if (k) { for (int j = 0; j < sig_->nKeyArgs; j++) if (sig_->keys[j] == k->identifier()) { if (vm.sp[j] == 0) vm.sp[j] = ((PairObj *)tem)->car(); k = 0; break; } if (k && !sig_->restArg) { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::invalidKeyArg, StringMessageArg(k->identifier()->name())); } } else { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::keyArgsNotKey); } tem = ((PairObj *)tem)->cdr(); } vm.sp += sig_->nKeyArgs; } return entryPoints_.back().pointer(); } return entryPoints_[n].pointer(); } SetKeyArgInsn::SetKeyArgInsn(int offset, InsnPtr next) : offset_(offset), next_(next) { } const Insn *SetKeyArgInsn::execute(VM &vm) const { ELObj *val = *--vm.sp; vm.sp[offset_] = val; return next_.pointer(); } ClosureObj::ClosureObj(const Signature *sig, InsnPtr code, ELObj **display) : FunctionObj(sig), code_(code), display_(display) { hasSubObjects_ = 1; } const Insn *ClosureObj::call(VM &vm, const Location &loc, const Insn *next) { vm.needStack(1); vm.pushFrame(next, vm.nActualArgs); vm.frame = vm.sp - vm.nActualArgs; vm.closure = display_; vm.protectClosure = this; vm.closureLoc = loc; return code_.pointer(); } const Insn *ClosureObj::tailCall(VM &vm, const Location &loc, int nCallerArgs) { vm.needStack(1); int nArgs = vm.nActualArgs; if (nCallerArgs) { ELObj **oldFrame = vm.sp - nArgs; ELObj **newFrame = oldFrame - nCallerArgs; for (int i = 0; i < nArgs; i++) newFrame[i] = oldFrame[i]; vm.frame = newFrame; vm.sp = newFrame + nArgs; } else vm.frame = vm.sp - nArgs; vm.closure = display_; vm.protectClosure = this; vm.closureLoc = loc; return code_.pointer(); } void ClosureObj::setArgToCC(VM &vm) { vm.setClosureArgToCC(); } void ClosureObj::traceSubObjects(Collector &c) const { if (display_) { for (ELObj **p = display_; *p; p++) c.trace(*p); } } const Signature ContinuationObj::signature_ = { 1, 0, 0 }; ContinuationObj::ContinuationObj() : FunctionObj(&signature_), controlStackSize_(0) { } const Insn *ContinuationObj::call(VM &vm, const Location &loc, const Insn *) { if (!live() || readOnly()) { vm.interp->setNextLocation(loc); vm.interp->message(InterpreterMessages::continuationDead); vm.sp = 0; return 0; } ELObj *result = vm.sp[-1]; ASSERT(vm.sp - vm.sbase >= stackSize_); ASSERT(vm.csp - vm.csbase >= controlStackSize_); ASSERT(vm.csbase[controlStackSize_ - 1].continuation == this); while (vm.csp - vm.csbase > controlStackSize_) { vm.csp--; if (vm.csp->continuation) vm.csp->continuation->kill(); } vm.sp = vm.sbase + stackSize_; --vm.sp; const Insn *next = vm.popFrame(); *vm.sp++ = result; return next; } const Insn *ContinuationObj::tailCall(VM &vm, const Location &loc, int nCallerArgs) { return call(vm, loc, 0); } ReturnInsn::ReturnInsn(int totalArgs) : totalArgs_(totalArgs) { } bool ReturnInsn::isReturn(int &nArgs) const { nArgs = totalArgs_; return true; } const Insn *ReturnInsn::execute(VM &vm) const { ELObj *result = *--vm.sp; vm.sp -= totalArgs_; const Insn *next = vm.popFrame(); *vm.sp++ = result; return next; } FrameRefInsn::FrameRefInsn(int index, InsnPtr next) : index_(index), next_(next) { } const Insn *FrameRefInsn::execute(VM &vm) const { vm.needStack(1); *vm.sp++ = vm.frame[index_]; return next_.pointer(); } StackRefInsn::StackRefInsn(int index, int frameIndex, InsnPtr next) : index_(index), frameIndex_(frameIndex), next_(next) { } const Insn *StackRefInsn::execute(VM &vm) const { vm.needStack(1); ASSERT(vm.sp - vm.frame == frameIndex_ - index_); *vm.sp = vm.sp[index_]; vm.sp += 1; return next_.pointer(); } ClosureRefInsn::ClosureRefInsn(int index, InsnPtr next) : index_(index), next_(next) { } const Insn *ClosureRefInsn::execute(VM &vm) const { vm.needStack(1); *vm.sp++ = vm.closure[index_]; return next_.pointer(); } TopRefInsn::TopRefInsn(const Identifier *var, InsnPtr next) : var_(var), next_(next) { } const Insn *TopRefInsn::execute(VM &vm) const { ELObj *tem = var_->computeValue(1, *vm.interp); if (vm.interp->isError(tem)) { vm.sp = 0; return 0; } else { vm.needStack(1); *vm.sp++ = tem; return next_.pointer(); } } ClosureSetBoxInsn::ClosureSetBoxInsn(int index, const Location &loc, InsnPtr next) : index_(index), loc_(loc), next_(next) { } const Insn *ClosureSetBoxInsn::execute(VM &vm) const { BoxObj *box = vm.closure[index_]->asBox(); ASSERT(box != 0); if (box->readOnly()) { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::readOnly); vm.sp = 0; return 0; } ELObj *tem = box->value; box->value = vm.sp[-1]; vm.sp[-1] = tem; return next_.pointer(); } StackSetBoxInsn::StackSetBoxInsn(int index, int frameIndex, const Location &loc, InsnPtr next) : index_(index), frameIndex_(frameIndex), loc_(loc), next_(next) { } const Insn *StackSetBoxInsn::execute(VM &vm) const { ASSERT(vm.sp - vm.frame == frameIndex_ - index_); BoxObj *box = vm.sp[index_]->asBox(); ASSERT(box != 0); if (box->readOnly()) { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::readOnly); vm.sp = 0; return 0; } ELObj *tem = box->value; box->value = vm.sp[-1]; vm.sp[-1] = tem; return next_.pointer(); } StackSetInsn::StackSetInsn(int index, int frameIndex, InsnPtr next) : index_(index), frameIndex_(frameIndex), next_(next) { } const Insn *StackSetInsn::execute(VM &vm) const { ASSERT(vm.sp - vm.frame == frameIndex_ - index_); ELObj *tem = vm.sp[index_]; vm.sp[index_] = vm.sp[-1]; vm.sp[-1] = tem; return next_.pointer(); } InsnPtr PopBindingsInsn::make(int n, InsnPtr next) { if (!next.isNull()) { int i; if (next->isReturn(i)) return new ReturnInsn(n + i); if (next->isPopBindings(i, next)) return new PopBindingsInsn(n + i, next); } return new PopBindingsInsn(n, next); } PopBindingsInsn::PopBindingsInsn(int n, InsnPtr next) : n_(n), next_(next) { } const Insn *PopBindingsInsn::execute(VM &vm) const { vm.sp -= n_; vm.sp[-1] = vm.sp[n_ - 1]; return next_.pointer(); } bool PopBindingsInsn::isPopBindings(int &n, InsnPtr &next) const { n = n_; next = next_; return true; } SetBoxInsn::SetBoxInsn(int n, InsnPtr next) : n_(n), next_(next) { } const Insn *SetBoxInsn::execute(VM &vm) const { --vm.sp; BoxObj *box = vm.sp[-n_]->asBox(); ASSERT(box != 0); box->value = *vm.sp; return next_.pointer(); } SetImmediateInsn::SetImmediateInsn(int n, InsnPtr next) : n_(n), next_(next) { } const Insn *SetImmediateInsn::execute(VM &vm) const { --vm.sp; vm.sp[-n_] = *vm.sp; return next_.pointer(); } CheckInitInsn::CheckInitInsn(const Identifier *ident, const Location &loc, InsnPtr next) : ident_(ident), loc_(loc), next_(next) { } const Insn *CheckInitInsn::execute(VM &vm) const { if (vm.sp[-1] == 0) { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::uninitializedVariableReference, StringMessageArg(ident_->name())); vm.sp = 0; return 0; } return next_.pointer(); } UnboxInsn::UnboxInsn(InsnPtr next) : next_(next) { } const Insn *UnboxInsn::execute(VM &vm) const { BoxObj *box = vm.sp[-1]->asBox(); ASSERT(box != 0); vm.sp[-1] = box->value; return next_.pointer(); } BoxInsn::BoxInsn(InsnPtr next) : next_(next) { } const Insn *BoxInsn::execute(VM &vm) const { vm.sp[-1] = new (*vm.interp) BoxObj(vm.sp[-1]); return next_.pointer(); } BoxArgInsn::BoxArgInsn(int n, InsnPtr next) : n_(n), next_(next) { } const Insn *BoxArgInsn::execute(VM &vm) const { ELObj *&arg = vm.sp[n_ - vm.nActualArgs]; arg = new (*vm.interp) BoxObj(arg); return next_.pointer(); } BoxStackInsn::BoxStackInsn(int n, InsnPtr next) : n_(n), next_(next) { } const Insn *BoxStackInsn::execute(VM &vm) const { vm.sp[n_] = new (*vm.interp) BoxObj(vm.sp[n_]); return next_.pointer(); } VectorInsn::VectorInsn(size_t n, InsnPtr next) : n_(n), next_(next) { } const Insn *VectorInsn::execute(VM &vm) const { if (n_ == 0) { vm.needStack(1); *vm.sp++ = new (*vm.interp) VectorObj; } else { Vector v(n_); ELObj **p = vm.sp; for (size_t n = n_; n > 0; n--) v[n - 1] = *--p; *p = new (*vm.interp) VectorObj(v); vm.sp = p + 1; } return next_.pointer(); } ListToVectorInsn::ListToVectorInsn(InsnPtr next) : next_(next) { } const Insn *ListToVectorInsn::execute(VM &vm) const { Vector v; ELObj *obj = vm.sp[-1]; while (!obj->isNil()) { PairObj *pair = obj->asPair(); ASSERT(pair != 0); v.push_back(pair->car()); obj = pair->cdr(); } vm.sp[-1] = new (*vm.interp) VectorObj(v); return next_.pointer(); } const Insn *CheckSosofoInsn::execute(VM &vm) const { if (!vm.sp[-1]->asSosofo()) { vm.sp = 0; vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::sosofoContext); return 0; } return next_.pointer(); } const Insn *CheckStyleInsn::execute(VM &vm) const { if (!vm.sp[-1]->asStyle()) { vm.sp = 0; vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::styleContext); return 0; } return next_.pointer(); } const Insn *PushModeInsn::execute(VM &vm) const { vm.modeStack.push_back(vm.processingMode); vm.processingMode = mode_; return next_.pointer(); } const Insn *PopModeInsn::execute(VM &vm) const { vm.processingMode = vm.modeStack.back(); vm.modeStack.resize(vm.modeStack.size() - 1); return next_.pointer(); } MaybeOverrideStyleInsn::MaybeOverrideStyleInsn(InsnPtr next) : next_(next) { } const Insn *MaybeOverrideStyleInsn::execute(VM &vm) const { if (vm.overridingStyle) vm.sp[-1] = new (*vm.interp) OverriddenStyleObj((BasicStyleObj *)vm.sp[-1], vm.overridingStyle); return next_.pointer(); } VarStyleInsn::VarStyleInsn(const ConstPtr &styleSpec, unsigned displayLength, bool hasUse, InsnPtr next) : styleSpec_(styleSpec), displayLength_(displayLength), hasUse_(hasUse), next_(next) { } const Insn *VarStyleInsn::execute(VM &vm) const { ELObj **display = displayLength_ ? new ELObj *[displayLength_ + 1] : 0; ELObj **tem = vm.sp - displayLength_; for (int i = 0; i < displayLength_; i++) display[i] = tem[i]; if (displayLength_ == 0) { vm.needStack(1); tem = vm.sp; } else display[displayLength_] = 0; // Make sure objects in display are still visible on the stack // to the garbage collector. StyleObj *use; if (hasUse_) use = (StyleObj *)*--tem; else use = 0; *tem++ = new (*vm.interp) VarStyleObj(styleSpec_, use, display, vm.currentNode); vm.sp = tem; vm.interp->makeReadOnly(tem[-1]); return next_.pointer(); } SetStyleInsn::SetStyleInsn(InsnPtr next) : next_(next) { } const Insn *SetStyleInsn::execute(VM &vm) const { ((FlowObj *)vm.sp[-2])->setStyle((StyleObj *)vm.sp[-1]); vm.sp--; return next_.pointer(); } SosofoAppendInsn::SosofoAppendInsn(size_t n, InsnPtr next) : n_(n), next_(next) { } const Insn *SosofoAppendInsn::execute(VM &vm) const { AppendSosofoObj *obj = new (*vm.interp) AppendSosofoObj; ELObj **tem = vm.sp - n_; for (size_t i = 0; i < n_; i++) { ASSERT(tem[i]->asSosofo() != 0); obj->append((SosofoObj *)tem[i]); } vm.sp -= n_ - 1; vm.sp[-1] = obj; return next_.pointer(); } CopyFlowObjInsn::CopyFlowObjInsn(FlowObj *flowObj, InsnPtr next) : flowObj_(flowObj), next_(next) { } const Insn *CopyFlowObjInsn::execute(VM &vm) const { vm.needStack(1); *vm.sp++ = flowObj_->copy(*vm.interp); return next_.pointer(); } SetNonInheritedCsSosofoInsn ::SetNonInheritedCsSosofoInsn(InsnPtr code, int displayLength, InsnPtr next) : code_(code), displayLength_(displayLength), next_(next) { } const Insn *SetNonInheritedCsSosofoInsn::execute(VM &vm) const { ELObj **display = displayLength_ ? new ELObj *[displayLength_ + 1] : 0; ELObj **tem = vm.sp - displayLength_; for (int i = 0; i < displayLength_; i++) { display[i] = tem[i]; ASSERT(display[i] != 0); } if (displayLength_) display[displayLength_] = 0; // Make sure objects in display are still visible on the stack // to the garbage collector. FlowObj *flowObj = (FlowObj *)*--tem; ASSERT((*tem)->asSosofo() != 0); *tem++ = new (*vm.interp) SetNonInheritedCsSosofoObj(flowObj, code_, display); vm.sp = tem; return next_.pointer(); } SetPseudoNonInheritedCInsn::SetPseudoNonInheritedCInsn(const Identifier *nic, const Location &loc, InsnPtr next) : nic_(nic), loc_(loc), next_(next) { } const Insn *SetPseudoNonInheritedCInsn::execute(VM &vm) const { ASSERT(vm.sp[-2]->asSosofo() != 0); ((FlowObj *)vm.sp[-2])->setNonInheritedC(nic_, vm.sp[-1], loc_, *vm.interp); vm.sp--; return next_.pointer(); } SetNonInheritedCInsn::SetNonInheritedCInsn(const Identifier *nic, const Location &loc, InsnPtr next) : SetPseudoNonInheritedCInsn(nic, loc, next) { } const Insn *SetNonInheritedCInsn::execute(VM &vm) const { vm.actualDependencies->resize(0); return SetPseudoNonInheritedCInsn::execute(vm); } SetContentInsn::SetContentInsn(const CompoundFlowObj *flowObj, InsnPtr next) : flowObj_(flowObj), next_(next) { } const Insn *SetContentInsn::execute(VM &vm) const { CompoundFlowObj *copy = (CompoundFlowObj *)flowObj_->copy(*vm.interp); copy->setContent((SosofoObj *)vm.sp[-1]); vm.sp[-1] = copy; return next_.pointer(); } SetDefaultContentInsn::SetDefaultContentInsn(const CompoundFlowObj *flowObj, const Location &loc, InsnPtr next) : flowObj_(flowObj), next_(next), loc_(loc) { } const Insn *SetDefaultContentInsn::execute(VM &vm) const { if (!vm.processingMode) { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::noCurrentProcessingMode); vm.sp = 0; return 0; } vm.needStack(1); *vm.sp++ = flowObj_->copy(*vm.interp); ((CompoundFlowObj *)vm.sp[-1]) ->setContent(new (*vm.interp) ProcessChildrenSosofoObj(vm.processingMode)); return next_.pointer(); } MakeDefaultContentInsn::MakeDefaultContentInsn(const Location &loc, InsnPtr next) : next_(next), loc_(loc) { } const Insn *MakeDefaultContentInsn::execute(VM &vm) const { if (!vm.processingMode) { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::noCurrentProcessingMode); vm.sp = 0; return 0; } vm.needStack(1); *vm.sp++ = new (*vm.interp) ProcessChildrenSosofoObj(vm.processingMode); return next_.pointer(); } LabelSosofoInsn::LabelSosofoInsn(const Location &loc, InsnPtr next) : loc_(loc), next_(next) { } const Insn *LabelSosofoInsn::execute(VM &vm) const { SymbolObj *sym = vm.sp[-1]->asSymbol(); if (!sym) { vm.interp->setNextLocation(loc_); vm.interp->message(InterpreterMessages::labelNotASymbol); vm.sp = 0; return 0; } ASSERT(vm.sp[-2]->asSosofo() != 0); vm.sp[-2] = new (*vm.interp) LabelSosofoObj(sym, loc_, (SosofoObj *)vm.sp[-2]); vm.sp--; return next_.pointer(); } ContentMapSosofoInsn::ContentMapSosofoInsn(const Location &loc, InsnPtr next) : loc_(loc), next_(next) { } const Insn *ContentMapSosofoInsn::execute(VM &vm) const { ASSERT(vm.sp[-2]->asSosofo() != 0); vm.sp[-2] = new (*vm.interp) ContentMapSosofoObj(vm.sp[-1], &loc_, (SosofoObj *)vm.sp[-2]); vm.sp--; return next_.pointer(); } BoxObj::BoxObj() : value(0) { hasSubObjects_ = 1; } BoxObj::BoxObj(ELObj *obj) : value(obj) { hasSubObjects_ = 1; } BoxObj *BoxObj::asBox() { return this; } void BoxObj::traceSubObjects(Collector &c) const { c.trace(value); } CallWithCurrentContinuationPrimitiveObj::CallWithCurrentContinuationPrimitiveObj() : FunctionObj(&signature_) { } const Insn *CallWithCurrentContinuationPrimitiveObj::call(VM &vm, const Location &loc, const Insn *next) { FunctionObj *f = vm.sp[-1]->asFunction(); if (!f) { vm.interp->setNextLocation(loc); vm.interp->message(InterpreterMessages::notAProcedure, StringMessageArg(Interpreter::makeStringC("call-with-current-continuation")), OrdinalMessageArg(1), ELObjMessageArg(vm.sp[-1], *vm.interp)); vm.sp = 0; return 0; } ELObjDynamicRoot protect(*vm.interp, f); vm.sp[-1] = new (*vm.interp) ContinuationObj; const Insn *insn = f->call(vm, loc, next); f->setArgToCC(vm); return insn; } const Insn *CallWithCurrentContinuationPrimitiveObj::tailCall(VM &vm, const Location &loc, int nCallerArgs) { FunctionObj *f = vm.sp[-1]->asFunction(); if (!f) { vm.interp->setNextLocation(loc); vm.interp->message(InterpreterMessages::notAProcedure, StringMessageArg(Interpreter::makeStringC("call-with-current-continuation")), OrdinalMessageArg(1), ELObjMessageArg(vm.sp[-1], *vm.interp)); vm.sp = 0; return 0; } ELObjDynamicRoot protect(*vm.interp, f); vm.sp[-1] = new (*vm.interp) ContinuationObj; const Insn *insn = f->tailCall(vm, loc, nCallerArgs); f->setArgToCC(vm); return insn; } const Signature CallWithCurrentContinuationPrimitiveObj::signature_ = { 1, 0, 0 }; #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/Interpreter.cxx100444 764 764 130575 6604607716 14461 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "Interpreter.h" #include "Insn.h" #include "InterpreterMessages.h" #include "LocNode.h" #include "Pattern.h" #include "MacroFlowObj.h" #include "ELObjMessageArg.h" #include "VM.h" #include "macros.h" #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif const Char defaultChar = 0xfffd; static size_t maxObjSize() { static size_t sz[] = { sizeof(UnresolvedQuantityObj), sizeof(VarStyleObj), sizeof(OverriddenStyleObj), sizeof(MergeStyleObj), sizeof(DeviceRGBColorObj), sizeof(ColorSpaceObj), sizeof(PairObj), sizeof(QuantityObj), sizeof(GlyphIdObj), sizeof(NamedNodeListPtrNodeListObj), sizeof(ProcessNodeSosofoObj), sizeof(AppendSosofoObj), sizeof(SetNonInheritedCsSosofoObj), sizeof(LabelSosofoObj), sizeof(MacroFlowObj), sizeof(FlowObj) + sizeof(StringC), // for FormattingInstructionFlowObj }; size_t n = sz[0]; for (size_t i = 1; i < SIZEOF(sz); i++) if (sz[i] > n) n = sz[i]; return n; } Interpreter::Interpreter(GroveManager *groveManager, Messenger *messenger, int unitsPerInch, bool debugMode, bool dsssl2, const FOTBuilder::Extension *extensionTable) : groveManager_(groveManager), messenger_(messenger), extensionTable_(extensionTable), Collector(maxObjSize()), partIndex_(1), // 0 is for command-line definitions lexCategory_(lexOther), unitsPerInch_(unitsPerInch), nInheritedC_(0), initialProcessingMode_(StringC()), currentPartFirstInitialValue_(0), initialStyle_(0), nextGlyphSubstTableUniqueId_(0), debugMode_(debugMode), dsssl2_(dsssl2) { makePermanent(theNilObj_ = new (*this) NilObj); makePermanent(theFalseObj_ = new (*this) FalseObj); makePermanent(theTrueObj_ = new (*this) TrueObj); makePermanent(theErrorObj_ = new (*this) ErrorObj); makePermanent(theUnspecifiedObj_ = new (*this) UnspecifiedObj); makePermanent(addressNoneObj_ = new (*this) AddressObj(FOTBuilder::Address::none)); makePermanent(emptyNodeListObj_ = new (*this) NodePtrNodeListObj); installSyntacticKeys(); installCValueSymbols(); installPortNames(); installPrimitives(); installUnits(); installCharNames(); installFlowObjs(); installInheritedCs(); installSdata(); installNodeProperties(); static const char *lexCategories[] = { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", "!$%&*/<=>?~_^:", "0123456789", "-+.", "();\"", " \t\r\n\f", }; // for (size_t i = 0; i < SIZEOF(lexCategories); i++) for (const char *s = lexCategories[i]; *s; s++) lexCategory_.setChar(*s, i); initialProcessingMode_.setDefined(); } void Interpreter::compile() { // FIXME compile all definitions compileInitialValues(); initialProcessingMode_.compile(*this); NamedTableIter iter(processingModeTable_); for (;;) { ProcessingMode *mode = iter.next(); if (!mode) break; mode->compile(*this); } } void Interpreter::compileInitialValues() { Vector > ics; for (size_t i = 0; i < initialValueNames_.size(); i++) { const Identifier *ident = initialValueNames_[i]; Owner &expr = initialValueValues_[i]; ConstPtr ic(ident->inheritedC()); expr->optimize(*this, Environment(), expr); ELObj *val = expr->constantValue(); if (val) { ConstPtr tem(ic->make(val, expr->location(), *this)); if (!tem.isNull()) ics.push_back(tem); } else ics.push_back(new VarInheritedC(ic, expr->compile(*this, Environment(), 0, InsnPtr()), expr->location())); } if (ics.size()) { Vector > forceIcs; initialStyle_ = new (*this) VarStyleObj(new StyleSpec(forceIcs, ics), 0, 0, NodePtr()); makePermanent(initialStyle_); } } void Interpreter::installInitialValue(Identifier *ident, Owner &expr) { for (size_t i = 0; i < initialValueNames_.size(); i++) { if (ident == initialValueNames_[i]) { if (i >= currentPartFirstInitialValue_) { setNextLocation(expr->location()); message(InterpreterMessages::duplicateInitialValue, StringMessageArg(ident->name()), initialValueValues_[i]->location()); } return; } } initialValueValues_.resize(initialValueValues_.size() + 1); expr.swap(initialValueValues_.back()); initialValueNames_.push_back(ident); } void Interpreter::defineVariable(const StringC &str) { lookup(str)->setValue(makeTrue(), 0); } void Interpreter::installUnits() { static struct { const char *name; int numer; int denom; bool dsssl2; } units[] = { { "m", 5000, 127 }, { "cm", 50, 127 }, { "mm", 5, 127 }, { "in", 1, 1 }, { "pt", 1, 72 }, { "pica", 1, 6 }, { "pc", 1, 6 } // a DSSSL2 addition }; size_t nUnits = dsssl2() ? SIZEOF(units) : SIZEOF(units) - 1; for (size_t i = 0; i < nUnits; i++) { Unit *unit = lookupUnit(makeStringC(units[i].name)); long n = unitsPerInch_ * units[i].numer; if (n % units[i].denom == 0) unit->setValue(long(n / units[i].denom)); else unit->setValue(double(n)/units[i].denom); } } void Interpreter::installSyntacticKeys() { static struct { const char *name; Identifier::SyntacticKey key; } keys[] = { { "quote", Identifier::keyQuote }, { "lambda", Identifier::keyLambda }, { "if", Identifier::keyIf }, { "cond", Identifier::keyCond }, { "and", Identifier::keyAnd }, { "or", Identifier::keyOr }, { "case", Identifier::keyCase }, { "let", Identifier::keyLet }, { "let*", Identifier::keyLetStar }, { "letrec", Identifier::keyLetrec }, { "quasiquote", Identifier::keyQuasiquote }, { "unquote", Identifier::keyUnquote }, { "unquote-splicing", Identifier::keyUnquoteSplicing }, { "define", Identifier::keyDefine }, { "else", Identifier::keyElse }, { "=>", Identifier::keyArrow }, { "make", Identifier::keyMake }, { "style", Identifier::keyStyle }, { "with-mode", Identifier::keyWithMode }, { "define-unit", Identifier::keyDefineUnit }, { "element", Identifier::keyElement }, { "default", Identifier::keyDefault }, { "root", Identifier::keyRoot }, { "id", Identifier::keyId }, { "mode", Identifier::keyMode }, { "declare-initial-value", Identifier::keyDeclareInitialValue }, { "declare-characteristic", Identifier::keyDeclareCharacteristic }, { "declare-flow-object-class", Identifier::keyDeclareFlowObjectClass }, { "declare-char-characteristic+property", Identifier::keyDeclareCharCharacteristicAndProperty }, { "declare-reference-value-type", Identifier::keyDeclareReferenceValueType }, { "declare-default-language", Identifier::keyDeclareDefaultLanguage }, { "declare-char-property", Identifier::keyDeclareCharProperty }, { "define-page-model", Identifier::keyDefinePageModel }, { "define-column-set-model", Identifier::keyDefineColumnSetModel }, { "define-language", Identifier::keyDefineLanguage }, { "add-char-properties", Identifier::keyAddCharProperties }, { "use", Identifier::keyUse }, { "label", Identifier::keyLabel }, { "content-map", Identifier::keyContentMap }, { "keep-with-previous?", Identifier::keyIsKeepWithPrevious }, { "keep-with-next?", Identifier::keyIsKeepWithNext }, { "space-before", Identifier::keySpaceBefore }, { "space-after", Identifier::keySpaceAfter }, { "left-header", Identifier::keyLeftHeader }, { "center-header", Identifier::keyCenterHeader }, { "right-header", Identifier::keyRightHeader }, { "left-footer", Identifier::keyLeftFooter }, { "center-footer", Identifier::keyCenterFooter }, { "right-footer", Identifier::keyRightFooter }, { "destination", Identifier::keyDestination }, { "type", Identifier::keyType }, { "coalesce-id", Identifier::keyCoalesceId }, { "display?", Identifier::keyIsDisplay }, { "scale", Identifier::keyScale }, { "max-width", Identifier::keyMaxWidth }, { "max-height", Identifier::keyMaxHeight }, { "entity-system-id", Identifier::keyEntitySystemId }, { "notation-system-id", Identifier::keyNotationSystemId }, { "position-point-x", Identifier::keyPositionPointX }, { "position-point-y", Identifier::keyPositionPointY }, { "escapement-direction", Identifier::keyEscapementDirection }, { "break-before-priority", Identifier::keyBreakBeforePriority }, { "break-after-priority", Identifier::keyBreakAfterPriority }, { "orientation", Identifier::keyOrientation }, { "length", Identifier::keyLength }, { "char", Identifier::keyChar }, { "glyph-id", Identifier::keyGlyphId }, { "space?", Identifier::keyIsSpace }, { "record-end?", Identifier::keyIsRecordEnd }, { "input-tab?", Identifier::keyIsInputTab }, { "input-whitespace?", Identifier::keyIsInputWhitespace }, { "punct?", Identifier::keyIsPunct }, { "drop-after-line-break?", Identifier::keyIsDropAfterLineBreak }, { "drop-unless-before-line-break?", Identifier::keyIsDropUnlessBeforeLineBreak }, { "math-class", Identifier::keyMathClass }, { "math-font-posture", Identifier::keyMathFontPosture }, { "script", Identifier::keyScript }, { "stretch-factor", Identifier::keyStretchFactor }, { "keep", Identifier::keyKeep }, { "break-before", Identifier::keyBreakBefore }, { "break-after", Identifier::keyBreakAfter }, { "may-violate-keep-before?", Identifier::keyIsMayViolateKeepBefore }, { "may-violate-keep-after?", Identifier::keyIsMayViolateKeepAfter }, { "before-row-border", Identifier::keyBeforeRowBorder }, { "after-row-border", Identifier::keyAfterRowBorder }, { "before-column-border", Identifier::keyBeforeColumnBorder }, { "after-column-border", Identifier::keyAfterColumnBorder }, { "column-number", Identifier::keyColumnNumber }, { "row-number", Identifier::keyRowNumber }, { "n-columns-spanned", Identifier::keyNColumnsSpanned }, { "n-rows-spanned", Identifier::keyNRowsSpanned }, { "width", Identifier::keyWidth }, { "starts-row?", Identifier::keyIsStartsRow }, { "ends-row?", Identifier::keyIsEndsRow }, { "table-width", Identifier::keyTableWidth }, { "multi-modes", Identifier::keyMultiModes }, { "data", Identifier::keyData }, { "min", Identifier::keyMin }, { "max", Identifier::keyMax }, { "conditional?", Identifier::keyIsConditional }, { "priority", Identifier::keyPriority }, { "grid-n-rows", Identifier::keyGridNRows }, { "grid-n-columns", Identifier::keyGridNColumns }, { "radical", Identifier::keyRadical }, { "null", Identifier::keyNull }, { "rcs?", Identifier::keyIsRcs }, { "parent", Identifier::keyParent }, { "active", Identifier::keyActive }, { "attributes", Identifier::keyAttributes }, { "children", Identifier::keyChildren }, { "repeat", Identifier::keyRepeat }, { "position", Identifier::keyPosition }, { "only", Identifier::keyOnly }, { "class", Identifier::keyClass }, { "importance", Identifier::keyImportance }, { "position-preference", Identifier::keyPositionPreference }, { "architecture", Identifier::keyArchitecture }, }, keys2[] = { { "declare-class-attribute", Identifier::keyDeclareClassAttribute }, { "declare-id-attribute", Identifier::keyDeclareIdAttribute }, { "declare-flow-object-macro", Identifier::keyDeclareFlowObjectMacro }, { "or-element", Identifier::keyOrElement }, { "set!", Identifier::keySet }, { "begin", Identifier::keyBegin }, }; for (size_t i = 0; i < SIZEOF(keys); i++) { StringC tem(makeStringC(keys[i].name)); lookup(tem)->setSyntacticKey(keys[i].key); if (dsssl2() && tem[tem.size() - 1] == '?') { tem.resize(tem.size() - 1); lookup(tem)->setSyntacticKey(keys[i].key); } } if (dsssl2()) { for (size_t i = 0; i < SIZEOF(keys2); i++) lookup(makeStringC(keys2[i].name))->setSyntacticKey(keys2[i].key); } } void Interpreter::installCValueSymbols() { cValueSymbols_[0] = makeFalse(); cValueSymbols_[1] = makeTrue(); for (size_t i = 2; i < FOTBuilder::nSymbols; i++) { SymbolObj *sym = makeSymbol(makeStringC(FOTBuilder::symbolName(FOTBuilder::Symbol(i)))); sym->setCValue(FOTBuilder::Symbol(i)); cValueSymbols_[i] = sym; } } void Interpreter::installPortNames() { // These must match the order in SymbolObj. static const char *names[] = { "numerator", "denominator", "pre-sup", "pre-sub", "post-sup", "post-sub", "mid-sup", "mid-sub", "over-mark", "under-mark", "open", "close", "degree", "operator", "lower-limit", "upper-limit", "header", "footer" }; ASSERT(SIZEOF(names) == nPortNames); for (size_t i = 0; i < SIZEOF(names); i++) portNames_[i] = makeSymbol(makeStringC(names[i])); } void Interpreter::installCharNames() { static struct { Char c; const char *name; } chars[] = { #include "charNames.h" }; for (size_t i = 0; i < SIZEOF(chars); i++) namedCharTable_.insert(makeStringC(chars[i].name), chars[i].c); } void Interpreter::installSdata() { // This comes from uni2sgml.txt on ftp://unicode.org. // It is marked there as obsolete, so it probably ought to be checked. // The definitions of apos and quot have been fixed for consistency with XML. static struct { Char c; const char *name; } entities[] = { #include "sdata.h" }; for (size_t i = 0; i < SIZEOF(entities); i++) sdataEntityNameTable_.insert(makeStringC(entities[i].name), entities[i].c); } void Interpreter::installNodeProperties() { for (int i = 0; i < ComponentName::nIds; i++) { ComponentName::Id id = ComponentName::Id(i); nodePropertyTable_.insert(makeStringC(ComponentName::rcsName(id)), i); nodePropertyTable_.insert(makeStringC(ComponentName::sdqlName(id)), i); } } bool Interpreter::sdataMap(GroveString name, GroveString, GroveChar &c) const { StringC tem(name.data(), name.size()); const Char *cp = sdataEntityNameTable_.lookup(tem); if (cp) { c = *cp; return 1; } if (convertUnicodeCharName(tem, c)) return 1; // I think this is the most thing to do. // At least it makes preserve-sdata work with unknown SDATA entities. c = defaultChar; return 1; } ELObj *Interpreter::convertGlyphId(const Char *str, size_t len, const Location &loc) { unsigned long n = 0; const char *publicId = 0; for (size_t i = len; i > 1; --i) { if (str[i - 1] == ':' && str[i - 2] == ':' && i < len && str[i] != '0') { for (size_t j = i; j < len; j++) n = n*10 + (str[j] - '0'); publicId = storePublicId(str, i - 2, loc); break; } if (str[i - 1] < '0' || str[i - 1] > '9') break; } if (!publicId) publicId = storePublicId(str, len, loc); return new (*this) GlyphIdObj(FOTBuilder::GlyphId(publicId, n)); } bool Interpreter::convertCharName(const StringC &str, Char &c) const { const Char *cp = namedCharTable_.lookup(str); if (cp) { c = *cp; return 1; } return convertUnicodeCharName(str, c); } bool Interpreter::convertUnicodeCharName(const StringC &str, Char &c) { if (str.size() != 6 || str[0] != 'U' || str[1] != '-') return 0; Char value = 0; for (int i = 2; i < 6; i++) { value <<= 4; switch (str[i]) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': value |= str[i] - '0'; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': value |= 10 + (str[i] - 'A'); break; default: return 0; } } c = value; return 1; } SymbolObj *Interpreter::makeSymbol(const StringC &str) { SymbolObj *sym = symbolTable_.lookup(str); if (!sym) { StringObj *strObj = new (*this) StringObj(str); makePermanent(strObj); sym = new (*this) SymbolObj(strObj); makePermanent(sym); symbolTable_.insert(sym); } return sym; } Identifier *Interpreter::lookup(const StringC &str) { Identifier *ident = identTable_.lookup(str); if (!ident) { ident = new Identifier(str); identTable_.insert(ident); } return ident; } bool Interpreter::lookupNodeProperty(const StringC &str, ComponentName::Id &id) { const int *val = nodePropertyTable_.lookup(str); if (!val) { StringC tem(str); for (size_t i = 0; i < tem.size(); i++) { if (tem[i] >= 'A' && tem[i] <= 'Z') tem[i] = 'a' + (tem[i] - 'A'); } val = nodePropertyTable_.lookup(tem); if (!val) return 0; } id = ComponentName::Id(*val); return 1; } Unit *Interpreter::lookupUnit(const StringC &str) { Unit *unit = unitTable_.lookup(str); if (!unit) { unit = new Unit(str); unitTable_.insert(unit); } return unit; } ProcessingMode *Interpreter::lookupProcessingMode(const StringC &str) { ProcessingMode *mode = processingModeTable_.lookup(str); if (!mode) { mode = new ProcessingMode(str, &initialProcessingMode_); processingModeTable_.insert(mode); } return mode; } StringC Interpreter::makeStringC(const char *s) { StringC tem; if (s) while (*s) tem += (unsigned char)*s++; return tem; } void Interpreter::endPart() { currentPartFirstInitialValue_ = initialValueNames_.size(); partIndex_++; } void Interpreter::normalizeGeneralName(const NodePtr &nd, StringC &str) { NamedNodeListPtr nnl; NodePtr root; if (nd->getGroveRoot(root) == accessOK && root->getElements(nnl) == accessOK) str.resize(nnl->normalize(str.begin(), str.size())); } ELObj *Interpreter::makeLengthSpec(const FOTBuilder::LengthSpec &ls) { if (ls.displaySizeFactor != 0.0) { LengthSpec result(LengthSpec::displaySize, ls.displaySizeFactor); result += double(ls.length); return new (*this) LengthSpecObj(result); } else return new (*this) LengthObj(ls.length); } bool Interpreter::convertBooleanC(ELObj *obj, const Identifier *ident, const Location &loc, bool &result) { obj = convertFromString(obj, convertAllowBoolean, loc); if (obj == makeFalse()) { result = 0; return 1; } if (obj == makeTrue()) { result = 1; return 1; } invalidCharacteristicValue(ident, loc); return 0; } bool Interpreter::convertPublicIdC(ELObj *obj, const Identifier *ident, const Location &loc, FOTBuilder::PublicId &pubid) { if (obj == makeFalse()) { pubid = 0; return 1; } const Char *s; size_t n; if (obj->stringData(s, n)) { if (n == 0) pubid = 0; else pubid = storePublicId(s, n, loc); return 1; } invalidCharacteristicValue(ident, loc); return 0; } const char *Interpreter::storePublicId(const Char *s, size_t n, const Location &loc) { String buf; for (; n > 0; s++, n--) { if (*s >= 128) { setNextLocation(loc); message(InterpreterMessages::invalidPublicIdChar, StringMessageArg(StringC(s, 1))); } else buf += char(*s); } buf += '\0'; return publicIds_.store(buf); } bool Interpreter::convertStringC(ELObj *obj, const Identifier *ident, const Location &loc, StringC &result) { const Char *s; size_t n; if (obj->stringData(s, n)) { result.assign(s, n); return 1; } invalidCharacteristicValue(ident, loc); return 0; } bool Interpreter::convertLengthSpec(ELObj *obj, FOTBuilder::LengthSpec &result) { int dim; double d; switch (obj->quantityValue(result.length, d, dim)) { case ELObj::longQuantity: if (dim == 1) return 1; break; case ELObj::doubleQuantity: if (dim == 1) { // FIXME catch overflow result.length = d < 0.0 ? long(d - .5) : long(d + .5); return 1; } break; default: { const LengthSpec *ls = obj->lengthSpec(); if (ls) return ls->convert(result); } break; } return 0; } bool Interpreter::convertLengthC(ELObj *obj, const Identifier *ident, const Location &loc, FOTBuilder::Length &n) { obj = convertFromString(obj, convertAllowNumber, loc); int dim; double d; switch (obj->quantityValue(n, d, dim)) { case ELObj::longQuantity: if (dim == 1) return 1; break; case ELObj::doubleQuantity: if (dim == 1) { // FIXME catch overflow n = long(d); return 1; } break; default: break; } invalidCharacteristicValue(ident, loc); return 0; } bool Interpreter::convertLengthSpecC(ELObj *obj, const Identifier *ident, const Location &loc, FOTBuilder::LengthSpec &result) { obj = convertFromString(obj, convertAllowNumber, loc); if (convertLengthSpec(obj, result)) return 1; invalidCharacteristicValue(ident, loc); return 0; } bool Interpreter::convertOptLengthSpecC(ELObj *obj, const Identifier *ident, const Location &loc, FOTBuilder::OptLengthSpec &result) { obj = convertFromString(obj, convertAllowBoolean|convertAllowNumber, loc); if (obj == makeFalse()) { result.hasLength = 0; return 1; } if (convertLengthSpecC(obj, ident, loc, result.length)) { result.hasLength = 1; return 1; } return 0; } bool Interpreter::convertOptPositiveIntegerC(ELObj *obj, const Identifier *ident, const Location &loc, long &result) { obj = convertFromString(obj, convertAllowNumber|convertAllowBoolean, loc); if (obj == makeFalse()) { result = 0; return 1; } if (obj->exactIntegerValue(result) && result > 0) return 1; // FIXME allow inexact value invalidCharacteristicValue(ident, loc); return 0; } bool Interpreter::convertIntegerC(ELObj *obj, const Identifier *ident, const Location &loc, long &result) { obj = convertFromString(obj, convertAllowNumber, loc); if (obj->exactIntegerValue(result)) return 1; // FIXME allow inexact value invalidCharacteristicValue(ident, loc); return 0; } bool Interpreter::convertLetter2C(ELObj *obj, const Identifier *ident, const Location &loc, FOTBuilder::Letter2 &code) { StringObj *strObj = obj->convertToString(); if (strObj) { const StringC &str = *strObj; if (str.size() == 2 && str[0] >= 'A' && str[0] <= 'Z' && str[1] >= 'A' && str[1] <= 'Z') { code = SP_LETTER2(str[0], str[1]); return 1; } if (str.size() == 0) { code = 0; return 1; } } else if (obj == makeFalse()) { code = 0; return 1; } invalidCharacteristicValue(ident, loc); return 0; } bool Interpreter::convertCharC(ELObj *obj, const Identifier *ident, const Location &loc, Char &result) { if (obj->charValue(result)) return 1; const Char *s; size_t n; if (obj->stringData(s, n) && n == 1) { result = s[0]; return 1; } invalidCharacteristicValue(ident, loc); return 0; } bool Interpreter::convertColorC(ELObj *obj, const Identifier *ident, const Location &loc, ColorObj *&color) { color = obj->asColor(); if (color) return 1; invalidCharacteristicValue(ident, loc); return 0; } bool Interpreter::convertOptColorC(ELObj *obj, const Identifier *ident, const Location &loc, ColorObj *&color) { color = obj->asColor(); if (color) return 1; if (obj == makeFalse()) return 1; invalidCharacteristicValue(ident, loc); return 0; } bool Interpreter::convertRealC(ELObj *obj, const Identifier *ident, const Location &loc, double &result) { obj = convertFromString(obj, convertAllowNumber, loc); if (obj->realValue(result)) return 1; invalidCharacteristicValue(ident, loc); return 0; } bool Interpreter::convertEnumC(ELObj *obj, const Identifier *ident, const Location &loc, FOTBuilder::Symbol &sym) { obj = convertFromString(obj, convertAllowSymbol|convertAllowBoolean, loc); if (obj == makeFalse()) { sym = FOTBuilder::symbolFalse; return 1; } SymbolObj *symObj = obj->asSymbol(); if (symObj) { sym = symObj->cValue(); if (sym != FOTBuilder::symbolFalse) return 1; } if (obj == makeTrue()) { sym = FOTBuilder::symbolTrue; return 1; } invalidCharacteristicValue(ident, loc); return 0; } bool Interpreter::convertEnumC(const FOTBuilder::Symbol *syms, size_t nSyms, ELObj *obj, const Identifier *ident, const Location &loc, FOTBuilder::Symbol &result) { obj = convertFromString(obj, convertAllowSymbol|convertAllowBoolean, loc); SymbolObj *symObj = obj->asSymbol(); FOTBuilder::Symbol val; if (symObj) { val = symObj->cValue(); if (val == FOTBuilder::symbolFalse) { invalidCharacteristicValue(ident, loc); return 0; } } else if (obj == makeFalse()) val = FOTBuilder::symbolFalse; else if (obj == makeTrue()) val = FOTBuilder::symbolTrue; else { invalidCharacteristicValue(ident, loc); return 0; } for (size_t i = 0; i < nSyms; i++) if (val == syms[i]) { result = val; return 1; } invalidCharacteristicValue(ident, loc); return 0; } void Interpreter::invalidCharacteristicValue(const Identifier *ident, const Location &loc) { setNextLocation(loc); message(InterpreterMessages::invalidCharacteristicValue, StringMessageArg(ident->name())); } static bool equal(const Char *s1, const char *s2, size_t n) { while (n > 0) { if (*s1++ != (unsigned char)*s2++) return 0; --n; } return 1; } ELObj *Interpreter::convertFromString(ELObj *obj, unsigned hints, const Location &loc) { // FIXME fold to lower case const Char *s; size_t n; if (!dsssl2() || !obj->stringData(s, n)) return obj; if (hints & convertAllowNumber) { ELObj *tem = convertNumber(StringC(s, n)); if (tem) return tem->resolveQuantities(1, *this, loc); } if (hints & convertAllowSymbol) { StringC tem(s, n); SymbolObj *sym = symbolTable_.lookup(tem); if (sym && sym->cValue() != FOTBuilder::symbolFalse) return sym; } if (hints & convertAllowBoolean) { switch (n) { case 2: if (equal(s, "no", n)) return makeFalse(); break; case 3: if (equal(s, "yes", n)) return makeTrue(); break; case 4: if (equal(s, "true", n)) return makeTrue(); break; case 5: if (equal(s, "false", n)) return makeFalse(); break; } } return obj; } ELObj *Interpreter::convertNumber(const StringC &str, int radix) { { if (str.size() == 0) return 0; size_t i = 0; if (str[0] == '#') { if (str.size() < 2) return 0; switch (str[1]) { case 'd': radix = 10; break; case 'x': radix = 16; break; case 'o': radix = 8; break; case 'b': radix = 2; break; default: return 0; } i += 2; } if (i >= str.size()) return 0; bool negative; if (str[i] == '-') { negative = 1; i++; } else { negative = 0; if (str[i] == '+') i++; } bool hadDecimalPoint = 0; bool hadDigit = 0; long n = 0; int exp = 0; for (; i < str.size(); i++) { Char c = str[i]; int weight; switch (c) { case '0': weight = 0; break; case '1': weight = 1; break; case '2': weight = 2; break; case '3': weight = 3; break; case '4': weight = 4; break; case '5': weight = 5; break; case '6': weight = 6; break; case '7': weight = 7; break; case '8': weight = 8; break; case '9': weight = 9; break; case 'a': weight = 10; break; case 'b': weight = 11; break; case 'c': weight = 12; break; case 'd': weight = 13; break; case 'e': weight = 14; break; case 'f': weight = 15; break; default: weight = -1; break; } if (weight >= 0 && weight < radix) { hadDigit = 1; if (negative) { if (-(unsigned long)n > (-(unsigned long)LONG_MIN - weight)/radix) { if (radix != 10) return 0; return convertNumberFloat(str); } else n = n*radix - weight; } else { if (n > (LONG_MAX - weight)/radix) { if (radix != 10) return 0; return convertNumberFloat(str); } else n = n*radix + weight; } if (hadDecimalPoint) exp--; } else if (c == '.' && radix == 10) { if (hadDecimalPoint) return 0; hadDecimalPoint = 1; } else break; } if (!hadDigit || (radix != 10 && i < str.size())) return 0; if (i + 1 < str.size() && str[i] == 'e' && lexCategory(str[i + 1]) != lexLetter) { hadDecimalPoint = 1; i++; int e; if (!scanSignDigits(str, i, e)) return 0; exp += e; } if (i < str.size()) { int unitExp; Unit *unit = scanUnit(str, i, unitExp); if (!unit) return 0; if (unitExp == 1) return new (*this) UnresolvedLengthObj(n, exp, unit); else return convertNumberFloat(str); } if (hadDecimalPoint) return convertNumberFloat(str); return makeInteger(n); } } bool Interpreter::scanSignDigits(const StringC &str, size_t &i, int &n) { bool negative = 0; if (i < str.size()) { if (str[i] == '-') { i++; negative = 1; } else if (str[i] == '+') i++; } size_t j = i; n = 0; while (i < str.size() && ('0' <= str[i] && str[i] <= '9')) { if (negative) n = n*10 - (str[i] - '0'); else n = n*10 + (str[i] - '0'); i++; } if (i == j) return 0; return 1; } ELObj *Interpreter::convertNumberFloat(const StringC &str) { String buf; // omit an optional radix prefix size_t i0 = 0; if (str.size() > 1 && str[0] == '#' && str[1] == 'd') i0 = 2; for (size_t i = i0; i < str.size(); i++) { if (str[i] > CHAR_MAX || str[i] == '\0') return 0; // 'E' is a valid exponent marker for C but not us if (str[i] == 'E') break; buf += char(str[i]); } buf += '\0'; const char *endPtr; double val = strtod((char *)buf.data(), (char **)&endPtr); if (endPtr - buf.data() == str.size() - i0) return new (*this) RealObj(val); if (endPtr == buf.data()) return 0; int unitExp; Unit *unit = scanUnit(str, endPtr - buf.data(), unitExp); if (!unit) return 0; return new (*this) UnresolvedQuantityObj(val, unit, unitExp); } // Return 0 for error. Unit *Interpreter::scanUnit(const StringC &str, size_t i, int &unitExp) { StringC unitName; while (i < str.size()) { if (str[i] == '-' || str[i] == '+' || ('0' <= str[i] && str[i] <= '9')) break; unitName += str[i++]; } if (i >= str.size()) unitExp = 1; else { unitExp = 0; bool neg = 0; if (str[i] == '-' || str[i] == '+') { if (str[i] == '-') neg = 1; i++; if (i >= str.size()) return 0; } while (i < str.size()) { if (str[i] < '0' || str[i] > '9') return 0; unitExp *= 10; if (neg) unitExp -= (str[i] - '0'); else unitExp += (str[i] - '0'); i++; } } return lookupUnit(unitName); } void Interpreter::setNodeLocation(const NodePtr &nd) { const LocNode *lnp; Location nodeLoc; if ((lnp = LocNode::convert(nd)) != 0 && lnp->getLocation(nodeLoc) == accessOK) setNextLocation(nodeLoc); } bool Interpreter::convertToPattern(ELObj *obj, const Location &loc, Pattern &pattern) { IList list; if (!convertToPattern(obj, loc, 0, list)) return 0; Pattern tem(list); tem.swap(pattern); return 1; } bool Interpreter::convertToPattern(ELObj *obj, const Location &loc, bool isChild, IList &list) { StringObj *str = obj->convertToString(); if (str) { const Char *s; size_t n; str->stringData(s, n); if (!n) { setNextLocation(loc); message(InterpreterMessages::patternEmptyGi); return 0; } list.insert(new Pattern::Element(StringC(s, n))); return 1; } if (obj == makeTrue()) { list.insert(new Pattern::Element(StringC())); return 1; } Pattern::Element *curElement = 0; while (!obj->isNil()) { PairObj *pair = obj->asPair(); if (!pair) { setNextLocation(loc); message(InterpreterMessages::patternNotList); return 0; } ELObj *head = pair->car(); obj = pair->cdr(); if (head == makeTrue() && dsssl2()) { list.insert(curElement = new Pattern::Element(StringC())); continue; } str = head->convertToString(); if (str) { const Char *s; size_t n; str->stringData(s, n); if (!n) { setNextLocation(loc); message(InterpreterMessages::patternEmptyGi); return 0; } list.insert(curElement = new Pattern::Element(StringC(s, n))); continue; } if (!curElement) { setNextLocation(loc); message(InterpreterMessages::patternBadGi, ELObjMessageArg(head, *this)); return 0; } if (head->isNil()) continue; // empty attribute list if (head->asPair()) { if (!patternAddAttributeQualifiers(head, loc, *curElement)) { setNextLocation(loc); message(InterpreterMessages::patternBadAttributeQualifier); return 0; } continue; } KeywordObj *key = dsssl2() ? head->asKeyword() : 0; if (!key) { setNextLocation(loc); message(InterpreterMessages::patternBadMember, ELObjMessageArg(head, *this)); return 0; } pair = obj->asPair(); if (!pair) { setNextLocation(loc); message(obj->isNil() ? InterpreterMessages::patternMissingQualifierValue : InterpreterMessages::patternNotList); return 0; } ELObj *value = pair->car(); obj = pair->cdr(); Identifier::SyntacticKey k; if (!key->identifier()->syntacticKey(k)) { setNextLocation(loc); message(InterpreterMessages::patternUnknownQualifier, StringMessageArg(key->identifier()->name())); return 0; } switch (k) { case Identifier::keyAttributes: if (!patternAddAttributeQualifiers(value, loc, *curElement)) { setNextLocation(loc); message(InterpreterMessages::patternBadAttributeQualifier); return 0; } break; case Identifier::keyChildren: { IList children; if (!convertToPattern(value, loc, 1, children)) return 0; if (!children.empty()) curElement->addQualifier(new Pattern::ChildrenQualifier(children)); } break; case Identifier::keyRepeat: { if (isChild) { setNextLocation(loc); message(InterpreterMessages::patternChildRepeat); return 0; } SymbolObj *sym = value->asSymbol(); if (sym) { const StringC &str = *sym->name(); if (str.size() == 1) { switch (str[0]) { case '*': curElement->setRepeat(0, Pattern::Repeat(-1)); value = 0; break; case '?': curElement->setRepeat(0, 1); value = 0; break; case '+': curElement->setRepeat(1, Pattern::Repeat(-1)); value = 0; break; default: break; } } } if (value) { setNextLocation(loc); message(InterpreterMessages::patternBadQualifierValue, ELObjMessageArg(value, *this), StringMessageArg(key->identifier()->name())); return 0; } } break; case Identifier::keyPosition: { SymbolObj *sym = value->asSymbol(); if (sym) { Pattern::Qualifier *qual = 0; const StringC &str = *sym->name(); if (str == "first-of-type") qual = new Pattern::FirstOfTypeQualifier; else if (str == "last-of-type") qual = new Pattern::LastOfTypeQualifier; else if (str == "first-of-any") qual = new Pattern::FirstOfAnyQualifier; else if (str == "last-of-any") qual = new Pattern::LastOfAnyQualifier; if (qual) { curElement->addQualifier(qual); break; } } setNextLocation(loc); message(InterpreterMessages::patternBadQualifierValue, ELObjMessageArg(value, *this), StringMessageArg(key->identifier()->name())); return 0; } case Identifier::keyOnly: { SymbolObj *sym = value->asSymbol(); if (sym) { Pattern::Qualifier *qual = 0; const StringC &str = *sym->name(); if (str == "of-type") qual = new Pattern::OnlyOfTypeQualifier; else if (str == "of-any") qual = new Pattern::OnlyOfAnyQualifier; if (qual) { curElement->addQualifier(qual); break; } } setNextLocation(loc); message(InterpreterMessages::patternBadQualifierValue, ELObjMessageArg(value, *this), StringMessageArg(key->identifier()->name())); return 0; } break; case Identifier::keyId: { StringObj *str = value->convertToString(); if (!str) { setNextLocation(loc); message(InterpreterMessages::patternBadQualifierValue, ELObjMessageArg(value, *this), StringMessageArg(key->identifier()->name())); return 0; } const Char *s; size_t n; str->stringData(s, n); curElement->addQualifier(new Pattern::IdQualifier(StringC(s, n))); } break; case Identifier::keyClass: { StringObj *str = value->convertToString(); if (!str) { setNextLocation(loc); message(InterpreterMessages::patternBadQualifierValue, ELObjMessageArg(value, *this), StringMessageArg(key->identifier()->name())); return 0; } const Char *s; size_t n; str->stringData(s, n); curElement->addQualifier(new Pattern::ClassQualifier(StringC(s, n))); } break; case Identifier::keyImportance: { long n; if (!value->exactIntegerValue(n)) { setNextLocation(loc); message(InterpreterMessages::patternBadQualifierValue, ELObjMessageArg(value, *this), StringMessageArg(key->identifier()->name())); return 0; } curElement->addQualifier(new Pattern::ImportanceQualifier(n)); } break; case Identifier::keyPriority: { long n; if (!value->exactIntegerValue(n)) { setNextLocation(loc); message(InterpreterMessages::patternBadQualifierValue, ELObjMessageArg(value, *this), StringMessageArg(key->identifier()->name())); return 0; } curElement->addQualifier(new Pattern::PriorityQualifier(n)); } break; default: setNextLocation(loc); message(InterpreterMessages::patternUnknownQualifier, StringMessageArg(key->identifier()->name())); return 0; } } return 1; } bool Interpreter::patternAddAttributeQualifiers(ELObj *obj, const Location &loc, Pattern::Element &elem) { while (!obj->isNil()) { PairObj *pair = obj->asPair(); if (!pair) return 0; StringObj *tem = pair->car()->convertToString(); if (!tem) return 0; const Char *s; size_t n; tem->stringData(s, n); if (n == 0) return 0; StringC name(s, n); obj = pair->cdr(); pair = obj->asPair(); if (!pair) return 0; obj = pair->cdr(); if (pair->car() == makeFalse() && dsssl2()) elem.addQualifier(new Pattern::AttributeMissingValueQualifier(name)); else if (pair->car() == makeTrue() && dsssl2()) elem.addQualifier(new Pattern::AttributeHasValueQualifier(name)); else { tem = pair->car()->convertToString(); if (!tem) return 0; tem->stringData(s, n); elem.addQualifier(new Pattern::AttributeQualifier(name, StringC(s, n))); } } return 1; } void Interpreter::dispatchMessage(Message &msg) { messenger_->dispatchMessage(msg); } void Interpreter::dispatchMessage(const Message &msg) { messenger_->dispatchMessage(msg); } Interpreter::StringSet::StringSet() { } const char *Interpreter::StringSet::store(String &str) { str += '\0'; const String *p = table_.lookup(str); if (!p) { String *tem = new String; str.swap(*tem); table_.insert(tem); p = tem; } return p->data(); } unsigned long Interpreter::StringSet::hash(const String &str) { const char *p = str.data(); unsigned long h = 0; for (size_t n = str.size(); n > 0; n--) h = (h << 5) + h + (unsigned char)*p++; // from Chris Torek return h; } Identifier::Identifier(const StringC &name) : Named(name), value_(0), syntacticKey_(notKey), beingComputed_(0), flowObj_(0) { } void Identifier::setDefinition(Owner &expr, unsigned part, const Location &loc) { def_.swap(expr); defPart_ = part; defLoc_ = loc; value_ = 0; } void Identifier::setValue(ELObj *value, unsigned partIndex) { value_ = value; // Built in functions have lowest priority. defPart_ = partIndex; } bool Identifier::defined(unsigned &part, Location &loc) const { if (!def_ && !value_) return 0; part = defPart_; loc = defLoc_; return 1; } ELObj *Identifier::computeValue(bool force, Interpreter &interp) const { if (value_) return value_; ASSERT(def_); if (beingComputed_) { if (force) { interp.setNextLocation(defLoc_); interp.message(InterpreterMessages::identifierLoop, StringMessageArg(name())); ((Identifier *)this)->value_ = interp.makeError(); } } else { ((Identifier *)this)->beingComputed_ = 1; if (insn_.isNull()) ((Identifier *)this)->insn_ = Expression::optimizeCompile(((Identifier *)this)->def_, interp, Environment(), 0, InsnPtr()); if (force || def_->canEval(0)) { VM vm(interp); ELObj *v = vm.eval(insn_.pointer()); interp.makePermanent(v); ((Identifier *)this)->value_ = v; } ((Identifier *)this)->beingComputed_ = 0; } return value_; } Unit::Unit(const StringC &name) : Named(name), computed_(notComputed) { } bool Unit::defined(unsigned &part, Location &loc) const { if (!def_ && computed_ == notComputed) return 0; part = defPart_; loc = defLoc_; return 1; } void Unit::setDefinition(Owner &expr, unsigned part, const Location &loc) { def_.swap(expr); defPart_ = part; defLoc_ = loc; computed_ = notComputed; } void Unit::setValue(long n) { computed_ = computedExact; exact_ = n; dim_ = 1; defPart_ = unsigned(-1); } void Unit::setValue(double n) { computed_ = computedInexact; inexact_ = n; dim_ = 1; defPart_ = unsigned(-1); } void Unit::tryCompute(bool force, Interpreter &interp) { if (computed_ == notComputed) { computed_ = beingComputed; if (insn_.isNull()) insn_ = Expression::optimizeCompile(def_, interp, Environment(), 0, InsnPtr()); if (force || def_->canEval(0)) { VM vm(interp); ELObj *v = vm.eval(insn_.pointer()); switch (v->quantityValue(exact_, inexact_, dim_)) { case ELObj::noQuantity: if (!interp.isError(v)) { interp.setNextLocation(defLoc_); interp.message(InterpreterMessages::badUnitDefinition, StringMessageArg(name())); } computed_ = computedError; break; case ELObj::longQuantity: computed_ = computedExact; break; case ELObj::doubleQuantity: computed_ = computedInexact; break; default: CANNOT_HAPPEN(); } } if (computed_ == beingComputed) computed_ = notComputed; } else if (computed_ == beingComputed) { interp.setNextLocation(defLoc_); interp.message(InterpreterMessages::unitLoop, StringMessageArg(name())); computed_ = computedError; } } // multiply by 10^valExp // quantity has exponent of 1 ELObj *Unit::resolveQuantity(bool force, Interpreter &interp, long val, int valExp) { tryCompute(force, interp); long result; if (computed_ == computedExact && scale(val, valExp, exact_, result)) return new (interp) LengthObj(result); double x = val; while (valExp > 0) { x *= 10.0; valExp--; } while (valExp < 0) { x /= 10.0; valExp++; } return resolveQuantity(force, interp, x, 1); } // val * 10^valExp * factor // return 0 if it can't be done without overflow bool Unit::scale(long val, int valExp, long factor, long &result) { if (factor <= 0) return 0; // feeble while (valExp > 0) { if (factor > LONG_MAX/10) return 0; valExp--; factor *= 10; } if (val >= 0) { if (val > LONG_MAX/factor) return 0; } else { if (-(unsigned long)val > -(unsigned long)LONG_MIN/factor) return 0; } result = val*factor; while (valExp < 0) { result /= 10; valExp++; } return 1; } ELObj *Unit::resolveQuantity(bool force, Interpreter &interp, double val, int unitExp) { tryCompute(force, interp); double factor; switch (computed_) { case computedExact: factor = exact_; break; case computedInexact: factor = inexact_; break; case computedError: return interp.makeError(); default: return 0; } int resultDim = 0; double resultVal = val; while (unitExp > 0) { resultDim += dim_; resultVal *= factor; unitExp--; } while (unitExp < 0) { resultDim -= dim_; resultVal /= factor; unitExp++; } if (resultDim == 0) return new (interp) RealObj(resultVal); return new (interp) QuantityObj(resultVal, resultDim); } void ELObjDynamicRoot::trace(Collector &c) const { c.trace(obj_); } bool operator==(const StringC &s, const char *p) { for (size_t i = 0; i < s.size(); i++) if (p[i] == '\0' || (unsigned char)p[i] != s[i]) return 0; return p[s.size()] == '\0'; } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/InterpreterMessages.cxx100444 764 764 76744 6604613156 16133 0ustar jjcjjc// This file was automatically generated from style/InterpreterMessages.msg by msggen.pl. #ifdef __GNUG__ #pragma implementation #endif #include "config.h" #include "InterpreterMessages.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const MessageType0 InterpreterMessages::unexpectedEof( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 0 #ifndef SP_NO_MESSAGE_TEXT ,"unexpected end of file" #endif ); const MessageType0 InterpreterMessages::invalidChar( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1 #ifndef SP_NO_MESSAGE_TEXT ,"invalid character" #endif ); const MessageType0 InterpreterMessages::unknownHash( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2 #ifndef SP_NO_MESSAGE_TEXT ,"invalid character after '#'" #endif ); const MessageType1 InterpreterMessages::unknownNamedConstant( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3 #ifndef SP_NO_MESSAGE_TEXT ,"unknown #! named constant %1" #endif ); const MessageType1 InterpreterMessages::unexpectedToken( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4 #ifndef SP_NO_MESSAGE_TEXT ,"unexpected token %1" #endif ); const MessageType0 InterpreterMessages::unterminatedString( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5 #ifndef SP_NO_MESSAGE_TEXT ,"string with no closing quote" #endif ); const MessageType0 InterpreterMessages::missingCloseParen( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 6 #ifndef SP_NO_MESSAGE_TEXT ,"missing closing parenthesis" #endif ); const MessageType1 InterpreterMessages::invalidNumber( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 7 #ifndef SP_NO_MESSAGE_TEXT ,"invalid number %1" #endif ); const MessageType1 InterpreterMessages::invalidAfiiGlyphId( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 8 #ifndef SP_NO_MESSAGE_TEXT ,"invalid AFII glyph identifier %1" #endif ); const MessageType1 InterpreterMessages::callNonFunction( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 9 #ifndef SP_NO_MESSAGE_TEXT ,"call of non-function object %1" #endif ); const MessageType0 InterpreterMessages::tooManyArgs( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 10 #ifndef SP_NO_MESSAGE_TEXT ,"too many arguments for function" #endif ); const MessageType0 InterpreterMessages::oddKeyArgs( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 11 #ifndef SP_NO_MESSAGE_TEXT ,"odd number of keyword/value arguments" #endif ); const MessageType0 InterpreterMessages::missingArg( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 12 #ifndef SP_NO_MESSAGE_TEXT ,"missing argument for function call" #endif ); const MessageType1 InterpreterMessages::syntacticKeywordAsVariable( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 13 #ifndef SP_NO_MESSAGE_TEXT ,"syntactic keyword %1 used as variable" #endif ); const MessageType1 InterpreterMessages::undefinedVariableReference( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 14 #ifndef SP_NO_MESSAGE_TEXT ,"reference to undefined variable %1" #endif ); const MessageType0 InterpreterMessages::badCharName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 15 #ifndef SP_NO_MESSAGE_TEXT ,"no character with that name" #endif ); const MessageType1 InterpreterMessages::keywordNotAllowedCall( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 16 #ifndef SP_NO_MESSAGE_TEXT ,"syntactic keyword %1 not valid in call position" #endif ); const MessageType1 InterpreterMessages::symbolRequired( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 17 #ifndef SP_NO_MESSAGE_TEXT ,"symbol required (got %1)" #endif ); const MessageType1 InterpreterMessages::unknownTopLevelForm( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 18 #ifndef SP_NO_MESSAGE_TEXT ,"unknown top level form %1" #endif ); const MessageType1 InterpreterMessages::badModeForm( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 19 #ifndef SP_NO_MESSAGE_TEXT ,"bad form %1 in mode group" #endif ); const MessageType1L InterpreterMessages::duplicateDefinition( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 20 #ifndef SP_NO_MESSAGE_TEXT ,"identifier %1 already defined in same part" ,"first definition was here" #endif ); const MessageType1 InterpreterMessages::identifierLoop( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 22 #ifndef SP_NO_MESSAGE_TEXT ,"loop in specification of value of %1" #endif ); const MessageType0 InterpreterMessages::outOfRange( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 23 #ifndef SP_NO_MESSAGE_TEXT ,"argument out of range" #endif ); const MessageType1 InterpreterMessages::unitLoop( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 24 #ifndef SP_NO_MESSAGE_TEXT ,"loop in specification of value of unit %1" #endif ); const MessageType1 InterpreterMessages::badUnitDefinition( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 25 #ifndef SP_NO_MESSAGE_TEXT ,"bad value specified for unit %1" #endif ); const MessageType1L InterpreterMessages::duplicateUnitDefinition( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 26 #ifndef SP_NO_MESSAGE_TEXT ,"unit %1 already defined in same part" ,"first definition was here" #endif ); const MessageType1 InterpreterMessages::undefinedQuantity( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 28 #ifndef SP_NO_MESSAGE_TEXT ,"quantity %1 undefined" #endif ); const MessageType0 InterpreterMessages::incompatibleDimensions( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 29 #ifndef SP_NO_MESSAGE_TEXT ,"incompatible dimensions" #endif ); const MessageType3 InterpreterMessages::notABoolean( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 30 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a boolean" #endif ); const MessageType3 InterpreterMessages::notAPair( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 31 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a pair" #endif ); const MessageType3 InterpreterMessages::notAList( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 32 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a list" #endif ); const MessageType3 InterpreterMessages::notASymbol( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 33 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a symbol" #endif ); const MessageType3 InterpreterMessages::notAString( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 34 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a string" #endif ); const MessageType3 InterpreterMessages::notAStringOrSymbol( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 35 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a string or symbol" #endif ); const MessageType3 InterpreterMessages::notASymbolOrString( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 36 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 neither a string not a symbol" #endif ); const MessageType3 InterpreterMessages::notAChar( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 37 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a char" #endif ); const MessageType3 InterpreterMessages::notAStyle( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 38 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a style" #endif ); const MessageType3 InterpreterMessages::notAnExactInteger( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 39 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not an exact integer" #endif ); const MessageType3 InterpreterMessages::notAQuantity( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 40 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a quantity" #endif ); const MessageType3 InterpreterMessages::notAColorSpace( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 41 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a color-space" #endif ); const MessageType3 InterpreterMessages::notANumber( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 42 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a number" #endif ); const MessageType3 InterpreterMessages::notASosofo( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 43 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a sosofo" #endif ); const MessageType3 InterpreterMessages::notAnOptSingletonNode( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 44 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not an optional singleton node list" #endif ); const MessageType3 InterpreterMessages::notASingletonNode( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 45 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a singleton node list" #endif ); const MessageType3 InterpreterMessages::notANodeList( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 46 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a node list" #endif ); const MessageType3 InterpreterMessages::notANamedNodeList( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 47 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a named node list" #endif ); const MessageType3 InterpreterMessages::notALengthSpec( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 48 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a length or length-spec" #endif ); const MessageType3 InterpreterMessages::notAQuantityOrLengthSpec( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 49 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a quantity or length-spec" #endif ); const MessageType3 InterpreterMessages::notAPriority( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 50 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not an integer or the symbol \"force\"" #endif ); const MessageType3 InterpreterMessages::notAPattern( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 51 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a valid element matching pattern" #endif ); const MessageType3 InterpreterMessages::notAnAddress( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 52 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not an address" #endif ); const MessageType3 InterpreterMessages::notAGlyphId( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 53 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a glyph-id" #endif ); const MessageType3 InterpreterMessages::notAGlyphSubstTable( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 54 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a glyph-subst-table" #endif ); const MessageType3 InterpreterMessages::notAGlyphIdPairList( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 55 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a list of pairs of glyph-ids" #endif ); const MessageType3 InterpreterMessages::notAProcedure( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 56 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a procedure" #endif ); const MessageType3 InterpreterMessages::notAVector( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 57 #ifndef SP_NO_MESSAGE_TEXT ,"%2 argument for primitive %1 of wrong type: %3 not a vector" #endif ); const MessageType0L InterpreterMessages::duplicateRootRule( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 58 #ifndef SP_NO_MESSAGE_TEXT ,"root rule already defined in same part with same importance" ,"first definition was here" #endif ); const MessageType1L InterpreterMessages::duplicateInitialValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 60 #ifndef SP_NO_MESSAGE_TEXT ,"initial value already declared for characteristic %1 in same part" ,"first declaration was here" #endif ); const MessageType1 InterpreterMessages::invalidStyleKeyword( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 62 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a valid keyword in a style expression" #endif ); const MessageType2 InterpreterMessages::invalidMakeKeyword( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 63 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a valid keyword in a make expression for flow object class %2" #endif ); const MessageType1 InterpreterMessages::unknownFlowObjectClass( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 64 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not the name of any flow object class" #endif ); const MessageType1 InterpreterMessages::atomicContent( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 65 #ifndef SP_NO_MESSAGE_TEXT ,"content expression cannot be specified in make expression for atomic flow object class %1" #endif ); const MessageType0 InterpreterMessages::labelNotASymbol( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 66 #ifndef SP_NO_MESSAGE_TEXT ,"value for \"label:\" not a symbol" #endif ); const MessageType1 InterpreterMessages::badConnection( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 67 #ifndef SP_NO_MESSAGE_TEXT ,"no port for label %1" #endif ); const MessageType0 InterpreterMessages::badContentMap( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 68 #ifndef SP_NO_MESSAGE_TEXT ,"invalid content map" #endif ); const MessageType1 InterpreterMessages::contentMapBadPort( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 69 #ifndef SP_NO_MESSAGE_TEXT ,"content map references non-existent port %1" #endif ); const MessageType1 InterpreterMessages::invalidCharacteristicValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 70 #ifndef SP_NO_MESSAGE_TEXT ,"invalid value for %1 characteristic" #endif ); const MessageType0 InterpreterMessages::condFail( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 71 #ifndef SP_NO_MESSAGE_TEXT ,"no clause in cond expression matched" #endif ); const MessageType1 InterpreterMessages::caseFail( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 72 #ifndef SP_NO_MESSAGE_TEXT ,"no clause in case expression matched %1" #endif ); const MessageType1 InterpreterMessages::caseElse( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 73 #ifndef SP_NO_MESSAGE_TEXT ,"expected \"else\" not %1" #endif ); const MessageType0 InterpreterMessages::caseUnresolvedQuantities( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 74 #ifndef SP_NO_MESSAGE_TEXT ,"sorry, cannot handle unresolvable quantities in datums in case expression" #endif ); const MessageType1 InterpreterMessages::errorProc( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 75 #ifndef SP_NO_MESSAGE_TEXT ,"%1" #endif ); const MessageType0 InterpreterMessages::divideBy0( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 76 #ifndef SP_NO_MESSAGE_TEXT ,"division by zero" #endif ); const MessageType1 InterpreterMessages::invalidKeyArg( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 77 #ifndef SP_NO_MESSAGE_TEXT ,"procedure does not have %1 keyword argument" #endif ); const MessageType0 InterpreterMessages::keyArgsNotKey( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 78 #ifndef SP_NO_MESSAGE_TEXT ,"argument not a keyword" #endif ); const MessageType0 InterpreterMessages::oneBody( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 79 #ifndef SP_NO_MESSAGE_TEXT ,"support for more than one style-specification-body not yet implemented" #endif ); const MessageType0 InterpreterMessages::specNotArc( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 80 #ifndef SP_NO_MESSAGE_TEXT ,"specification document does not have the DSSSL architecture as a base architecture" #endif ); const MessageType0 InterpreterMessages::noStyleSpec( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 81 #ifndef SP_NO_MESSAGE_TEXT ,"specification document did not contain a style-specification-body element" #endif ); const MessageType1 InterpreterMessages::unknownCharName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 82 #ifndef SP_NO_MESSAGE_TEXT ,"unknown character name %1" #endif ); const MessageType0 InterpreterMessages::noCurrentNode( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 83 #ifndef SP_NO_MESSAGE_TEXT ,"attempt to use current node when there is none" #endif ); const MessageType0 InterpreterMessages::noCurrentProcessingMode( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 84 #ifndef SP_NO_MESSAGE_TEXT ,"attempt to process node in illegal context" #endif ); const MessageType0 InterpreterMessages::invalidRadix( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 85 #ifndef SP_NO_MESSAGE_TEXT ,"radix must be 2, 8, 10 or 16" #endif ); const MessageType0 InterpreterMessages::sosofoContext( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 86 #ifndef SP_NO_MESSAGE_TEXT ,"this context requires a sosofo" #endif ); const MessageType0 InterpreterMessages::styleContext( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 87 #ifndef SP_NO_MESSAGE_TEXT ,"this context requires a style object" #endif ); const MessageType0 InterpreterMessages::notInCharacteristicValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 88 #ifndef SP_NO_MESSAGE_TEXT ,"procedure can only be used in evaluation of characteristic value" #endif ); const MessageType1 InterpreterMessages::expressionNotImplemented( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 89 #ifndef SP_NO_MESSAGE_TEXT ,"sorry, %1 expression not implemented" #endif ); const MessageType0 InterpreterMessages::RGBColorArgCount( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 90 #ifndef SP_NO_MESSAGE_TEXT ,"Device RGB color requires three arguments" #endif ); const MessageType0 InterpreterMessages::RGBColorArgType( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 91 #ifndef SP_NO_MESSAGE_TEXT ,"arguments for Device RGB color must be numbers" #endif ); const MessageType0 InterpreterMessages::RGBColorArgRange( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 92 #ifndef SP_NO_MESSAGE_TEXT ,"arguments for Device RGB color must be in the range 0 to 1" #endif ); const MessageType1 InterpreterMessages::unknownColorSpaceFamily( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 93 #ifndef SP_NO_MESSAGE_TEXT ,"unknown color-space family %1" #endif ); const MessageType0 InterpreterMessages::deviceRGBColorSpaceNoArgs( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 94 #ifndef SP_NO_MESSAGE_TEXT ,"Device RGB Color Space Family does not take any arguments" #endif ); const MessageType1 InterpreterMessages::notABuiltinInheritedC( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 95 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a pre-defined inherited characteristic" #endif ); const MessageType1 InterpreterMessages::invalidNumberFormat( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 96 #ifndef SP_NO_MESSAGE_TEXT ,"invalid number format %1" #endif ); const MessageType1 InterpreterMessages::invalidPublicIdChar( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 97 #ifndef SP_NO_MESSAGE_TEXT ,"invalid character %1 in public identifier" #endif ); const MessageType1 InterpreterMessages::debug( MessageType::info, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 98 #ifndef SP_NO_MESSAGE_TEXT ,"debug %1" #endif ); const MessageType0 InterpreterMessages::useLoop( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 99 #ifndef SP_NO_MESSAGE_TEXT ,"circular use of specification parts" #endif ); const MessageType1 InterpreterMessages::missingPart( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 100 #ifndef SP_NO_MESSAGE_TEXT ,"no style-specification or external-specification with ID %1" #endif ); const MessageType0 InterpreterMessages::noParts( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 101 #ifndef SP_NO_MESSAGE_TEXT ,"document did not contain any style-specifications or external-specifications" #endif ); const MessageType0 InterpreterMessages::tableCellOutsideTable( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 102 #ifndef SP_NO_MESSAGE_TEXT ,"table-cell flow object not inside a table" #endif ); const MessageType0 InterpreterMessages::tableRowOutsideTable( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 103 #ifndef SP_NO_MESSAGE_TEXT ,"table-row flow object not inside a table" #endif ); const MessageType1 InterpreterMessages::noNodePropertyValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 104 #ifndef SP_NO_MESSAGE_TEXT ,"no value for node property %1" #endif ); const MessageType0 InterpreterMessages::returnNotNodeList( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 105 #ifndef SP_NO_MESSAGE_TEXT ,"value returned by procedure was not a node-list" #endif ); const MessageType0 InterpreterMessages::stackTrace( MessageType::info, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 106 #ifndef SP_NO_MESSAGE_TEXT ,"called from here" #endif ); const MessageType1 InterpreterMessages::stackTraceEllipsis( MessageType::info, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 107 #ifndef SP_NO_MESSAGE_TEXT ,"called from here...(%1 calls omitted)" #endif ); const MessageType0 InterpreterMessages::processNodeLoop( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 108 #ifndef SP_NO_MESSAGE_TEXT ,"node processing loop detected" #endif ); const MessageType0 InterpreterMessages::spliceNotList( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 109 #ifndef SP_NO_MESSAGE_TEXT ,"unquote-splicing expression does not evaluate to a list" #endif ); const MessageType0 InterpreterMessages::readOnly( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 110 #ifndef SP_NO_MESSAGE_TEXT ,"object is read-only" #endif ); const MessageType1 InterpreterMessages::topLevelAssignment( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 111 #ifndef SP_NO_MESSAGE_TEXT ,"assignment to top-level variable %1" #endif ); const MessageType0 InterpreterMessages::continuationDead( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 112 #ifndef SP_NO_MESSAGE_TEXT ,"invalid call to continuation" #endif ); const MessageType0 InterpreterMessages::patternEmptyGi( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 113 #ifndef SP_NO_MESSAGE_TEXT ,"empty generic identifier in pattern" #endif ); const MessageType0 InterpreterMessages::patternNotList( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 114 #ifndef SP_NO_MESSAGE_TEXT ,"pattern is not a list" #endif ); const MessageType1 InterpreterMessages::patternBadGi( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 115 #ifndef SP_NO_MESSAGE_TEXT ,"%1 cannot be used as a generic identifier in a pattern" #endif ); const MessageType1 InterpreterMessages::patternBadMember( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 116 #ifndef SP_NO_MESSAGE_TEXT ,"%1 cannot occur in a pattern" #endif ); const MessageType0 InterpreterMessages::patternMissingQualifierValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 117 #ifndef SP_NO_MESSAGE_TEXT ,"value missing for qualifier in pattern" #endif ); const MessageType1 InterpreterMessages::patternUnknownQualifier( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 118 #ifndef SP_NO_MESSAGE_TEXT ,"unknown pattern qualifier %1" #endif ); const MessageType2 InterpreterMessages::patternBadQualifierValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 119 #ifndef SP_NO_MESSAGE_TEXT ,"bad value %1 for %2 qualifier in pattern" #endif ); const MessageType0 InterpreterMessages::patternChildRepeat( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 120 #ifndef SP_NO_MESSAGE_TEXT ,"repeat qualifier not allowed inside children qualifier" #endif ); const MessageType0 InterpreterMessages::patternBadAttributeQualifier( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 121 #ifndef SP_NO_MESSAGE_TEXT ,"bad value for attributes qualifier in pattern" #endif ); const MessageType1L InterpreterMessages::ambiguousStyle( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 122 #ifndef SP_NO_MESSAGE_TEXT ,"characteristic %1 applied in style rule with same specificity" ,"other style rule is here" #endif ); const MessageType0 InterpreterMessages::ambiguousMatch( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 124 #ifndef SP_NO_MESSAGE_TEXT ,"node matches more than one pattern with the same specificity" #endif ); const MessageType1 InterpreterMessages::uninitializedVariableReference( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 125 #ifndef SP_NO_MESSAGE_TEXT ,"reference to uninitialized variable %1" #endif ); const MessageType1 InterpreterMessages::actualLoop( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 126 #ifndef SP_NO_MESSAGE_TEXT ,"circular use of actual value of characteristic %1" #endif ); const MessageType1L InterpreterMessages::duplicateCharacteristic( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 127 #ifndef SP_NO_MESSAGE_TEXT ,"characteristic %1 already defined in same part" ,"first definition was here" #endif ); const MessageType1L InterpreterMessages::duplicateFlowObjectClass( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 129 #ifndef SP_NO_MESSAGE_TEXT ,"flow object class %1 already defined in same part" ,"first definition was here" #endif ); const MessageType1 InterpreterMessages::undefinedMode( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 131 #ifndef SP_NO_MESSAGE_TEXT ,"mode %1 not defined" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/style/MacroFlowObj.cxx100444 764 764 12106 6604607716 14447 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "MacroFlowObj.h" #include "VM.h" #include "Insn2.h" #include "Insn.h" #include "Expression.h" #include "Interpreter.h" #include "ProcessContext.h" #include "macros.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif MacroFlowObj::MacroFlowObj(Vector &nics, NCVector > &inits, const Identifier *contentsId, Owner &body) : def_(new Definition(nics, inits, contentsId, body)) { size_t n = def_->nics().size(); charicVals_ = new ELObj *[n]; for (size_t i = 0; i < n; i++) charicVals_[i] = 0; } MacroFlowObj::MacroFlowObj(const MacroFlowObj &obj) : CompoundFlowObj(obj), def_(obj.def_) { size_t n = def_->nics().size(); charicVals_ = new ELObj *[n]; for (size_t i = 0; i < n; i++) charicVals_[i] = obj.charicVals_[i]; } MacroFlowObj::~MacroFlowObj() { delete [] charicVals_; } FlowObj *MacroFlowObj::copy(Collector &c) const { return new (c) MacroFlowObj(*this); } CompoundFlowObj *MacroFlowObj::asCompoundFlowObj() { if (def_->isCompound()) return this; else return 0; } bool MacroFlowObj::hasNonInheritedC(const Identifier *id) const { const Vector &nics = def_->nics(); for (size_t i = 0; i < nics.size(); i++) if (nics[i] == id) return 1; return 0; } void MacroFlowObj::setNonInheritedC(const Identifier *id, ELObj *obj, const Location &, Interpreter &) { const Vector &nics = def_->nics(); for (size_t i = 0;; i++) { if (nics[i] == id) { charicVals_[i] = obj; return; } } } void MacroFlowObj::traceSubObjects(Collector &c) const { size_t n = def_->nics().size(); for (size_t i = 0; i < n; i++) c.trace(charicVals_[i]); CompoundFlowObj::traceSubObjects(c); } class EmptyStyleObj : public StyleObj { public: void appendIter(StyleObjIter &) const { } }; void MacroFlowObj::unpack(VM &vm) { size_t n = def_->nics().size(); vm.needStack(n + 1 + def_->isCompound()); for (size_t i = 0; i < n; i++) *vm.sp++ = charicVals_[i]; if (def_->isCompound()) { ELObj *tem = content(); if (!tem) tem = new (*vm.interp) ProcessChildrenSosofoObj(vm.interp->initialProcessingMode()); *vm.sp++ = tem; } } void MacroFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startSequence(); def_->process(context, this); fotb.endSequence(); } MacroFlowObj::Definition::Definition(Vector &charics, NCVector > &charicInits, const Identifier *contentsId, Owner &body) : contentsId_(contentsId) { charics.swap(charics_); charicInits.swap(charicInits_); charicInits_.resize(charics_.size()); body.swap(body_); } void MacroFlowObj::Definition::process(ProcessContext &context, MacroFlowObj *macro) { VM &vm = context.vm(); Interpreter &interp = *vm.interp;; if (code_.isNull()) compile(interp); StyleStack *saveStyleStack = vm.styleStack; vm.styleStack = &context.currentStyleStack(); unsigned saveSpecLevel = vm.specLevel; vm.specLevel = vm.styleStack->level(); Vector dep; vm.actualDependencies = &dep; ELObj *obj = context.vm().eval(code_.pointer(), 0, macro); vm.styleStack = saveStyleStack; vm.specLevel = saveSpecLevel; if (!interp.isError(obj)) { ELObjDynamicRoot protect(interp, obj); ((SosofoObj *)obj)->process(context); } } class UnpackMacroFlowObjInsn : public Insn { public: UnpackMacroFlowObjInsn(InsnPtr next) : next_(next) { } const Insn *execute(VM &vm) const { ((MacroFlowObj *)*--vm.sp)->unpack(vm); return next_.pointer(); } private: InsnPtr next_; }; void MacroFlowObj::Definition::compile(Interpreter &interp) { InsnPtr result; result = new CheckSosofoInsn(body_->location(), result); int nPush = charics_.size() + (contentsId_ != 0); result = PopBindingsInsn::make(nPush, result); BoundVarList frameVars; for (size_t i = 0; i < charics_.size(); i++) { if (i > 0 && charicInits_[i]) charicInits_[i]->markBoundVars(frameVars, 0); frameVars.append(charics_[i], 0); } if (contentsId_) frameVars.append(contentsId_, 0); body_->markBoundVars(frameVars, 0); result = Expression::optimizeCompile(body_, interp, Environment(frameVars, BoundVarList()), nPush, result); for (size_t i = charics_.size(); i > 0; i--) { int stackOffset = int(i) - nPush - 1; if (frameVars[i - 1].boxed()) result = new BoxStackInsn(stackOffset, result); InsnPtr ifNull = new SetKeyArgInsn(stackOffset, result); if (charicInits_[i - 1]) { BoundVarList f(frameVars); f.resize(i - 1); ifNull = Expression::optimizeCompile(charicInits_[i - 1], interp, Environment(f, BoundVarList()), nPush, ifNull); } else ifNull = new ConstantInsn(interp.makeFalse(), ifNull); result = new TestNullInsn(stackOffset, ifNull, result); } code_ = new UnpackMacroFlowObjInsn(result); } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/NumberCache.cxx100444 764 764 12070 6604607716 14277 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "NumberCache.h" #include "macros.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif NumberCache::NumberCache() { } inline void advance(NodePtr &node) { if (node.assignNextChunkAfter() != accessOK) CANNOT_HAPPEN(); } // This caching scheme will be defeated (but not disastrously so) // by numbering both notes and footnotes, say, per chapter. unsigned long NumberCache::elementNumberAfter(const NodePtr &node, const StringC &gi, const StringC &resetGi) { NodePtr start; NodePtr lastMatch; unsigned long resetCount = 0; unsigned long count = 0; ElementEntry *entry = elementNumbers_.lookup(resetGi); if (entry) { unsigned long nodeIndex, entryIndex; bool useSubnode = 1; node->elementIndex(nodeIndex); unsigned long nodeGroveIndex = node->groveIndex(); if (entry->node) { if (*entry->node == *node) return 0; entry->node->elementIndex(entryIndex); if (entryIndex < nodeIndex && entry->node->groveIndex() == nodeGroveIndex) { start = lastMatch = entry->node; advance(start); resetCount = entry->num; } else useSubnode = 0; } if (entry->subNode && useSubnode) { GroveString tem; if (entry->subNode->getGi(tem) == accessOK && tem == GroveString(gi.data(), gi.size())) { if (*entry->subNode == *node) return entry->subNum; entry->subNode->elementIndex(entryIndex); if (entryIndex < nodeIndex && entry->subNode->groveIndex() == nodeGroveIndex) { start = entry->subNode; advance(start); count = entry->subNum; } } } } else elementNumbers_.insert(entry = new ElementEntry(resetGi)); if (!start) { node->getGroveRoot(start); start->getDocumentElement(start); } for (;;) { GroveString tem; if (start->getGi(tem) == accessOK) { if (tem == GroveString(resetGi.data(), resetGi.size())) { lastMatch = start; resetCount++; count = 0; } else if (tem == GroveString(gi.data(), gi.size())) count++; } if (*start == *node) break; advance(start); } entry->node = lastMatch; entry->num = resetCount; entry->subNode = node; entry->subNum = count; return count; } unsigned long NumberCache::elementNumber(const NodePtr &node, const StringC &gi) { NodePtr start; NodePtr lastMatch; unsigned long count = 0; ElementEntry *entry = elementNumbers_.lookup(gi); if (entry && entry->node) { if (*entry->node == *node) { lastMatch = node; return entry->num; } unsigned long nodeIndex, entryIndex; entry->node->elementIndex(entryIndex); node->elementIndex(nodeIndex); if (entryIndex < nodeIndex && node->groveIndex() == entry->node->groveIndex()) { lastMatch = start = entry->node; count = entry->num; advance(start); } } if (!start) { node->getGroveRoot(start); start->getDocumentElement(start); } for (;;) { GroveString tem; if (start->getGi(tem) == accessOK && tem == GroveString(gi.data(), gi.size())) { lastMatch = start; count++; } if (*start == *node) break; advance(start); } if (count) { ASSERT(lastMatch); if (!entry) elementNumbers_.insert(entry = new ElementEntry(gi)); entry->node = lastMatch; entry->subNode.clear(); entry->num = count; } return count; } bool NumberCache::childNumber(const NodePtr &node, unsigned long &result) { GroveString gs; if (node->getGi(gs) != accessOK) return 0; NodePtr tem; if (node->getParent(tem) != accessOK) { // must be document element result = 0; return 1; } NodePtr parent(tem); unsigned level = 0; while (tem->getParent(tem) == accessOK) level++; StringC gi(gs.data(), gs.size()); if (level >= childNumbers_.size()) childNumbers_.resize(level + 1); NodePtr start; unsigned long count = 0; Entry *entry = childNumbers_[level].lookup(gi); if (entry) { if (*entry->node == *node) { result = entry->num; return 1; } // Start counting from the cached entry if it has the same // parent as us and it is before us. NodePtr entryParent; entry->node->getParent(entryParent); if (*entryParent == *parent) { unsigned long nodeIndex, entryIndex; entry->node->elementIndex(entryIndex); node->elementIndex(nodeIndex); if (entryIndex < nodeIndex && node->groveIndex() == entry->node->groveIndex()) { start = entry->node; count = entry->num; } } } else { entry = new Entry(gi); childNumbers_[level].insert(entry); } if (!start) node->firstSibling(start); while (*start != *node) { GroveString tem; if (start->getGi(tem) == accessOK && tem == gs) count++; if (start.assignNextChunkSibling() != accessOK) CANNOT_HAPPEN(); } entry->node = node; entry->num = count; result = count; return 1; } NumberCache::Entry::Entry(const StringC &name) : Named(name) { } NumberCache::ElementEntry::ElementEntry(const StringC &name) : NumberCache::Entry(name) { } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/primitive.cxx100444 764 764 376521 6606574462 14174 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "Interpreter.h" #include "InterpreterMessages.h" #include "EvalContext.h" #include "SosofoObj.h" #include "Style.h" #include "Insn.h" #include "macros.h" #include "ELObjMessageArg.h" #include "LocNode.h" #include "VM.h" #include "Pattern.h" #include #include #include #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class DescendantsNodeListObj : public NodeListObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } DescendantsNodeListObj(const NodePtr &, unsigned = 0); NodePtr nodeListFirst(EvalContext &, Interpreter &); NodeListObj *nodeListRest(EvalContext &, Interpreter &); NodeListObj *nodeListChunkRest(EvalContext &, Interpreter &, bool &); private: static void advance(NodePtr &, unsigned &); static void chunkAdvance(NodePtr &, unsigned &); // nodes in node list are strictly after this node NodePtr start_; unsigned depth_; }; class SiblingNodeListObj : public NodeListObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } SiblingNodeListObj(const NodePtr &first, const NodePtr &end); NodePtr nodeListFirst(EvalContext &, Interpreter &); NodeListObj *nodeListRest(EvalContext &, Interpreter &); NodeListObj *nodeListChunkRest(EvalContext &, Interpreter &, bool &); private: NodePtr first_; NodePtr end_; }; class SelectByClassNodeListObj : public NodeListObj { public: SelectByClassNodeListObj(NodeListObj *nl, ComponentName::Id); NodePtr nodeListFirst(EvalContext &, Interpreter &); NodeListObj *nodeListRest(EvalContext &, Interpreter &); NodeListObj *nodeListChunkRest(EvalContext &, Interpreter &, bool &); void traceSubObjects(Collector &) const; private: NodeListObj *nodeList_; ComponentName::Id cls_; }; class MapNodeListObj : public NodeListObj { public: class Context : public Resource { public: Context(const EvalContext &, const Location &); void set(EvalContext &) const; void traceSubObjects(Collector &) const; Location loc; private: NodePtr currentNode_; const ProcessingMode *processingMode_; StyleObj *overridingStyle_; bool haveStyleStack_; }; void *operator new(size_t, Collector &c) { return c.allocateObject(1); } MapNodeListObj(FunctionObj *func, NodeListObj *nl, const ConstPtr &, NodeListObj *mapped = 0); NodePtr nodeListFirst(EvalContext &, Interpreter &); NodeListObj *nodeListRest(EvalContext &, Interpreter &); void traceSubObjects(Collector &) const; bool suppressError(); private: void mapNext(EvalContext &, Interpreter &); FunctionObj *func_; NodeListObj *nl_; NodeListObj *mapped_; ConstPtr context_; }; class SelectElementsNodeListObj : public NodeListObj { public: struct PatternSet : public Resource, public NCVector { }; void *operator new(size_t, Collector &c) { return c.allocateObject(1); } SelectElementsNodeListObj(NodeListObj *, NCVector &); SelectElementsNodeListObj(NodeListObj *, const ConstPtr &); void traceSubObjects(Collector &) const; NodePtr nodeListFirst(EvalContext &, Interpreter &); NodeListObj *nodeListRest(EvalContext &, Interpreter &); private: NodeListObj *nodeList_; ConstPtr patterns_; }; #define PRIMITIVE(name, string, nRequired, nOptional, rest) \ class name ## PrimitiveObj : public PrimitiveObj { \ public: \ static const Signature signature_; \ name ## PrimitiveObj() : PrimitiveObj(&signature_) { } \ ELObj *primitiveCall(int, ELObj **, EvalContext &, Interpreter &, const Location &); \ }; \ const Signature name ## PrimitiveObj::signature_ \ = { nRequired, nOptional, rest }; #define XPRIMITIVE PRIMITIVE #define PRIMITIVE2 PRIMITIVE #include "primitive.h" #undef PRIMITIVE #undef XPRIMITIVE #undef PRIMITIVE2 #define DEFPRIMITIVE(name, argc, argv, context, interp, loc) \ ELObj *name ## PrimitiveObj \ ::primitiveCall(int argc, ELObj **argv, EvalContext &context, Interpreter &interp, \ const Location &loc) DEFPRIMITIVE(Cons, argc, argv, context, interp, loc) { return new (interp) PairObj(argv[0], argv[1]); } DEFPRIMITIVE(List, argc, argv, context, interp, loc) { if (argc == 0) return interp.makeNil(); PairObj *head = new (interp) PairObj(argv[0], 0); ELObjDynamicRoot protect(interp, head); PairObj *tail = head; for (int i = 1; i < argc; i++) { PairObj *tem = new (interp) PairObj(argv[i], 0); tail->setCdr(tem); tail = tem; } tail->setCdr(interp.makeNil()); return head; } DEFPRIMITIVE(IsNull, argc, argv, context, interp, loc) { if (argv[0]->isNil()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsList, argc, argv, context, interp, loc) { ELObj *obj = argv[0]; for (;;) { PairObj *pair = obj->asPair(); if (pair) obj = pair->cdr(); else if (obj->isNil()) return interp.makeTrue(); else break; } return interp.makeFalse(); } DEFPRIMITIVE(IsEqual, argc, argv, context, interp, loc) { if (ELObj::equal(*argv[0], *argv[1])) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsEqv, argc, argv, context, interp, loc) { if (ELObj::eqv(*argv[0], *argv[1])) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(Car, argc, argv, context, interp, loc) { PairObj *pair = argv[0]->asPair(); if (!pair) return argError(interp, loc, InterpreterMessages::notAPair, 0, argv[0]); else return pair->car(); } DEFPRIMITIVE(Cdr, argc, argv, context, interp, loc) { PairObj *pair = argv[0]->asPair(); if (!pair) return argError(interp, loc, InterpreterMessages::notAPair, 0, argv[0]); else return pair->cdr(); } DEFPRIMITIVE(Append, argc, argv, context, interp, loc) { if (argc == 0) return interp.makeNil(); PairObj *tail = interp.makePair(0, 0); PairObj *head = tail; ELObjDynamicRoot protect(interp, head); for (int i = 0; i < argc - 1; i++) { for (ELObj *p = argv[i]; !p->isNil();) { PairObj *tem = p->asPair(); if (!tem) return argError(interp, loc, InterpreterMessages::notAList, i, p); PairObj *newTail = new (interp) PairObj(tem->car(), 0); tail->setCdr(newTail); tail = newTail; p = tem->cdr(); } } tail->setCdr(argv[argc - 1]); return head->cdr(); } DEFPRIMITIVE(Reverse, argc, argv, context, interp, loc) { ELObjDynamicRoot protect(interp, interp.makeNil()); ELObj *p = argv[0]; while (!p->isNil()) { PairObj *tem = p->asPair(); if (!tem) return argError(interp, loc, InterpreterMessages::notAList, 0, argv[0]); protect = new (interp) PairObj(tem->car(), protect); p = tem->cdr(); } return protect; } DEFPRIMITIVE(ListTail, argc, argv, context, interp, loc) { long k; if (!argv[1]->exactIntegerValue(k)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 1, argv[1]); if (k < 0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::outOfRange); return interp.makeError(); } ELObj *p = argv[0]; for (; k > 0; k--) { PairObj *tem = p->asPair(); if (!tem) { if (p->isNil()) { interp.setNextLocation(loc); interp.message(InterpreterMessages::outOfRange); return interp.makeError(); } else return argError(interp, loc, InterpreterMessages::notAList, 0, argv[0]); } p = tem->cdr(); } return p; } DEFPRIMITIVE(ListRef, argc, argv, context, interp, loc) { long k; if (!argv[1]->exactIntegerValue(k)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 1, argv[1]); if (k < 0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::outOfRange); return interp.makeError(); } ELObj *p = argv[0]; for (;;) { PairObj *tem = p->asPair(); if (!tem) break; if (k == 0) return tem->car(); --k; p = tem->cdr(); } if (p->isNil()) { interp.setNextLocation(loc); interp.message(InterpreterMessages::outOfRange); return interp.makeError(); } else return argError(interp, loc, InterpreterMessages::notAList, 0, argv[0]); } DEFPRIMITIVE(Member, argc, argv, context, interp, loc) { ELObj *p = argv[1]; while (!p->isNil()) { PairObj *tem = p->asPair(); if (!tem) return argError(interp, loc, InterpreterMessages::notAList, 1, argv[1]); if (ELObj::equal(*argv[0], *tem->car())) return p; p = tem->cdr(); } return interp.makeFalse(); } DEFPRIMITIVE(Memv, argc, argv, context, interp, loc) { ELObj *p = argv[1]; while (!p->isNil()) { PairObj *tem = p->asPair(); if (!tem) return argError(interp, loc, InterpreterMessages::notAList, 1, argv[1]); if (ELObj::eqv(*argv[0], *tem->car())) return p; p = tem->cdr(); } return interp.makeFalse(); } DEFPRIMITIVE(Length, argc, argv, context, interp, loc) { ELObj *obj = argv[0]; long n = 0; for (;;) { PairObj *pair = obj->asPair(); if (pair) { n++; obj = pair->cdr(); } else if (obj->isNil()) break; else if (interp.isError(obj)) return obj; else return argError(interp, loc, InterpreterMessages::notAList, 0, obj); } return interp.makeInteger(n); } DEFPRIMITIVE(Not, argc, argv, context, interp, loc) { if (argv[0]->isTrue()) return interp.makeFalse(); else return interp.makeTrue(); } DEFPRIMITIVE(IsSymbol, argc, argv, context, interp, loc) { if (argv[0]->asSymbol()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsKeyword, argc, argv, context, interp, loc) { if (argv[0]->asKeyword()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsInteger, argc, argv, context, interp, loc) { long n; if (argv[0]->exactIntegerValue(n)) return interp.makeTrue(); double x; if (argv[0]->realValue(x) && modf(x, &x) == 0.0) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsReal, argc, argv, context, interp, loc) { double x; if (argv[0]->realValue(x)) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsNumber, argc, argv, context, interp, loc) { double x; if (argv[0]->realValue(x)) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsQuantity, argc, argv, context, interp, loc) { long n; double d; int dim; if (argv[0]->quantityValue(n, d, dim) != ELObj::noQuantity) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsPair, argc, argv, context, interp, loc) { if (argv[0]->asPair()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsProcedure, argc, argv, context, interp, loc) { if (argv[0]->asFunction()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsBoolean, argc, argv, context, interp, loc) { if (argv[0] == interp.makeTrue()) return argv[0]; else if (argv[0] == interp.makeFalse()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsChar, argc, argv, context, interp, loc) { Char c; if (argv[0]->charValue(c)) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsCharEqual, argc, argv, context, interp, loc) { Char c1, c2; if (!argv[0]->charValue(c1)) return argError(interp, loc, InterpreterMessages::notAChar, 0, argv[0]); if (!argv[1]->charValue(c2)) return argError(interp, loc, InterpreterMessages::notAChar, 1, argv[1]); if (c1 == c2) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(String, argc, argv, context, interp, loc) { StringObj *obj = new (interp) StringObj; for (int i = 0; i < argc; i++) { Char c; if (!argv[i]->charValue(c)) return argError(interp, loc, InterpreterMessages::notAChar, i, argv[i]); *obj += c; } return obj; } DEFPRIMITIVE(SymbolToString, argc, argv, context, interp, loc) { SymbolObj *obj = argv[0]->asSymbol(); if (!obj) return argError(interp, loc, InterpreterMessages::notASymbol, 0, argv[0]); return obj->name(); } DEFPRIMITIVE(StringToSymbol, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); return interp.makeSymbol(StringC(s, n)); } DEFPRIMITIVE(IsString, argc, argv, context, interp, loc) { const Char *s; size_t n; if (argv[0]->stringData(s, n)) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(StringLength, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); return interp.makeInteger(n); } DEFPRIMITIVE(IsStringEqual, argc, argv, context, interp, loc) { const Char *s1, *s2; size_t n1, n2; if (!argv[0]->stringData(s1, n1)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); if (!argv[1]->stringData(s2, n2)) return argError(interp, loc, InterpreterMessages::notAString, 1, argv[1]); if (n1 == n2 && (n1 == 0 || memcmp(s1, s2, n1*sizeof(Char)) == 0)) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(StringAppend, argc, argv, context, interp, loc) { StringObj *result = new (interp) StringObj; for (int i = 0; i < argc; i++) { const Char *s; size_t n; if (!argv[i]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, i, argv[i]); result->append(s, n); } return result; } DEFPRIMITIVE(StringRef, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); long k; if (!argv[1]->exactIntegerValue(k)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 1, argv[1]); if (k < 0 || (unsigned long)k >= n) { interp.setNextLocation(loc); interp.message(InterpreterMessages::outOfRange); return interp.makeError(); } return interp.makeChar(s[size_t(k)]); } DEFPRIMITIVE(Substring, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); long start; if (!argv[1]->exactIntegerValue(start)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 1, argv[1]); long end; if (!argv[2]->exactIntegerValue(end)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 2, argv[2]); if (start < 0 || (unsigned long)end > n || start > end) { interp.setNextLocation(loc); interp.message(InterpreterMessages::outOfRange); return interp.makeError(); } return new (interp) StringObj(s + size_t(start), size_t(end - start)); } DEFPRIMITIVE(Equal, argc, argv, context, interp, loc) { if (argc == 0) return interp.makeTrue(); long lResult; double dResult; int dim; int i = 1; switch (argv[0]->quantityValue(lResult, dResult, dim)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, 0, argv[0]); case ELObj::longQuantity: break; case ELObj::doubleQuantity: goto useDouble; break; default: CANNOT_HAPPEN(); } long lResult2; double dResult2; int dim2; for (; i < argc; i++) { switch (argv[i]->quantityValue(lResult2, dResult2, dim2)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, i, argv[i]); case ELObj::longQuantity: if (lResult2 != lResult || dim2 != dim) return interp.makeFalse(); break; case ELObj::doubleQuantity: dResult = lResult; if (dResult2 != dResult || dim2 != dim) return interp.makeFalse(); i++; goto useDouble; default: CANNOT_HAPPEN(); } } return interp.makeTrue(); useDouble: for (; i < argc; i++) { switch (argv[i]->quantityValue(lResult2, dResult2, dim2)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, i, argv[i]); case ELObj::longQuantity: if (lResult2 != dResult || dim2 != dim) return interp.makeFalse(); break; case ELObj::doubleQuantity: if (dResult2 != dResult || dim2 != dim) return interp.makeFalse(); break; } } return interp.makeTrue(); } DEFPRIMITIVE(Plus, argc, argv, context, interp, loc) { if (argc == 0) return interp.makeInteger(0); long lResult; double dResult; bool usingD; int dim; switch (argv[0]->quantityValue(lResult, dResult, dim)) { case ELObj::noQuantity: { const LengthSpec *lsp = argv[0]->lengthSpec(); if (!lsp) return argError(interp, loc, InterpreterMessages::notAQuantityOrLengthSpec, 0, argv[0]); LengthSpec ls(*lsp); for (int i = 1; i < argc; i++) { lsp = argv[i]->lengthSpec(); if (lsp) ls += *lsp; else { switch (argv[i]->quantityValue(lResult, dResult, dim)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantityOrLengthSpec, i, argv[i]); case ELObj::longQuantity: dResult = lResult; // fall through case ELObj::doubleQuantity: if (dim != 1) { interp.setNextLocation(loc); interp.message(InterpreterMessages::incompatibleDimensions); return interp.makeError(); } ls += dResult; break; } } } return new (interp) LengthSpecObj(ls); } case ELObj::longQuantity: usingD = 0; break; case ELObj::doubleQuantity: usingD = 1; break; default: CANNOT_HAPPEN(); } for (int i = 1; i < argc; i++) { long lResult2; double dResult2; int dim2; switch (argv[i]->quantityValue(lResult2, dResult2, dim2)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, i, argv[i]); case ELObj::longQuantity: if (!usingD) { if (lResult2 < 0) { if (lResult >= LONG_MIN - lResult2) { lResult += lResult2; break; } } else { if (lResult <= LONG_MAX - lResult2) { lResult += lResult2; break; } } usingD = 1; dResult = double(lResult); } dResult += double(lResult2); break; case ELObj::doubleQuantity: if (!usingD) { dResult = lResult; usingD = 1; } dResult += dResult2; break; default: CANNOT_HAPPEN(); } if (dim2 != dim) { interp.setNextLocation(loc); interp.message(InterpreterMessages::incompatibleDimensions); return interp.makeError(); } } if (!usingD) { if (dim == 0) return interp.makeInteger(lResult); else if (dim == 1) return new (interp) LengthObj(lResult); else dResult = lResult; } if (dim == 0) return new (interp) RealObj(dResult); else return new (interp) QuantityObj(dResult, dim); } DEFPRIMITIVE(Minus, argc, argv, context, interp, loc) { long lResult; double dResult; bool usingD; int dim; switch (argv[0]->quantityValue(lResult, dResult, dim)) { case ELObj::noQuantity: { const LengthSpec *lsp = argv[0]->lengthSpec(); if (!lsp) return argError(interp, loc, InterpreterMessages::notAQuantityOrLengthSpec, 0, argv[0]); LengthSpec ls(*lsp); for (int i = 1; i < argc; i++) { lsp = argv[i]->lengthSpec(); if (lsp) ls -= *lsp; else { switch (argv[i]->quantityValue(lResult, dResult, dim)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantityOrLengthSpec, i, argv[i]); case ELObj::longQuantity: dResult = lResult; // fall through case ELObj::doubleQuantity: if (dim != 1) { interp.setNextLocation(loc); interp.message(InterpreterMessages::incompatibleDimensions); return interp.makeError(); } ls -= dResult; break; } } } return new (interp) LengthSpecObj(ls); } case ELObj::longQuantity: usingD = 0; break; case ELObj::doubleQuantity: usingD = 1; break; default: CANNOT_HAPPEN(); } if (argc == 1) { if (usingD) dResult = -dResult; else lResult = -lResult; } else { for (int i = 1; i < argc; i++) { long lResult2; double dResult2; int dim2; switch (argv[i]->quantityValue(lResult2, dResult2, dim2)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, i, argv[i]); case ELObj::longQuantity: if (!usingD) { if (lResult2 > 0) { if (lResult >= LONG_MIN + lResult2) { lResult -= lResult2; break; } } else { if (lResult <= LONG_MAX + lResult2) { lResult -= lResult2; break; } } usingD = 1; dResult = double(lResult); } dResult -= double(lResult2); break; case ELObj::doubleQuantity: if (!usingD) { dResult = lResult; usingD = 1; } dResult -= dResult2; break; default: CANNOT_HAPPEN(); } if (dim2 != dim) { interp.setNextLocation(loc); interp.message(InterpreterMessages::incompatibleDimensions); return interp.makeError(); } } } if (!usingD) { if (dim == 0) return interp.makeInteger(lResult); else if (dim == 1) return new (interp) LengthObj(lResult); else dResult = lResult; } if (dim == 0) return new (interp) RealObj(dResult); else return new (interp) QuantityObj(dResult, dim); } DEFPRIMITIVE(Multiply, argc, argv, context, interp, loc) { if (argc == 0) return interp.makeInteger(1); long lResult; double dResult; int dim; int i = 1; switch (argv[0]->quantityValue(lResult, dResult, dim)) { case ELObj::noQuantity: { const LengthSpec *ls = argv[0]->lengthSpec(); if (ls) { LengthSpec result(*ls); double d; for (; i < argc; i++) { if (!argv[i]->realValue(d)) return argError(interp, loc, InterpreterMessages::notANumber, 1, argv[1]); result *= d; } return new (interp) LengthSpecObj(result); } } return argError(interp, loc, InterpreterMessages::notAQuantity, 0, argv[0]); case ELObj::longQuantity: break; case ELObj::doubleQuantity: goto useDouble; default: CANNOT_HAPPEN(); } long lResult2; double dResult2; int dim2; for (; i < argc; i++) { switch (argv[i]->quantityValue(lResult2, dResult2, dim2)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, i, argv[i]); case ELObj::longQuantity: dim += dim2; if (dim > 1 || (lResult2 != 0 && (lResult2 < 0 ? (lResult > 0 ? lResult > -(unsigned)LONG_MIN / -(unsigned)lResult2 : -(unsigned)lResult > LONG_MAX / -(unsigned)lResult2) : (lResult > 0 ? lResult > LONG_MAX / lResult2 : -(unsigned)lResult > -(unsigned)LONG_MIN / lResult2)))) { dResult = double(lResult) * lResult2; i++; goto useDouble; } lResult *= lResult2; break; case ELObj::doubleQuantity: dim += dim2; dResult = lResult * dResult2; i++; goto useDouble; default: CANNOT_HAPPEN(); } } if (dim == 0) return interp.makeInteger(lResult); else return new (interp) LengthObj(lResult); useDouble: for (; i < argc; i++) { switch (argv[i]->quantityValue(lResult2, dResult2, dim2)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, i, argv[i]); case ELObj::longQuantity: dResult *= lResult2; break; case ELObj::doubleQuantity: dResult *= dResult2; break; } dim += dim2; } if (dim == 0) return new (interp) RealObj(dResult); else return new (interp) QuantityObj(dResult, dim); } DEFPRIMITIVE(Divide, argc, argv, context, interp, loc) { long lResult; double dResult; int dim; if (argc == 1) { switch (argv[0]->quantityValue(lResult, dResult, dim)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, 0, argv[0]); case ELObj::longQuantity: if (lResult == 0) goto divide0; dResult = 1.0/lResult; break; case ELObj::doubleQuantity: if (dResult == 0.0) goto divide0; dResult = 1.0/dResult; break; default: CANNOT_HAPPEN(); } dim = -dim; } else { int i = 1; switch (argv[0]->quantityValue(lResult, dResult, dim)) { case ELObj::noQuantity: { const LengthSpec *ls = argv[0]->lengthSpec(); if (ls) { LengthSpec result(*ls); double d; for (; i < argc; i++) { if (!argv[i]->realValue(d)) return argError(interp, loc, InterpreterMessages::notANumber, 1, argv[1]); if (d == 0.0) goto divide0; result /= d; } return new (interp) LengthSpecObj(result); } } return argError(interp, loc, InterpreterMessages::notAQuantity, 0, argv[0]); case ELObj::longQuantity: break; case ELObj::doubleQuantity: goto useDouble; default: CANNOT_HAPPEN(); } long lResult2; double dResult2; int dim2; for (; i < argc; i++) { switch (argv[i]->quantityValue(lResult2, dResult2, dim2)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, 0, argv[0]); case ELObj::longQuantity: if (lResult2 == 0) goto divide0; dim -= dim2; // If dim and dim2 are both 1, must goto useDouble: // since lengths are inexact, result must be inexact. if (dim2 == 0 && lResult % lResult2 == 0) { lResult /= lResult2; break; } dResult = double(lResult)/lResult2; i++; goto useDouble; case ELObj::doubleQuantity: dim -= dim2; dResult = lResult; if (dResult2 == 0.0) goto divide0; dResult /= dResult2; i++; goto useDouble; default: CANNOT_HAPPEN(); } } if (dim == 0) return interp.makeInteger(lResult); else return new (interp) LengthObj(lResult); useDouble: for (; i < argc; i++) { switch (argv[i]->quantityValue(lResult2, dResult2, dim2)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, i, argv[i]); case ELObj::longQuantity: if (lResult2 == 0) goto divide0; dResult /= lResult2; break; case ELObj::doubleQuantity: dResult /= dResult2; if (dResult2 == 0.0) goto divide0; break; } dim -= dim2; } } if (dim == 0) return new (interp) RealObj(dResult); else return new (interp) QuantityObj(dResult, dim); divide0: interp.setNextLocation(loc); interp.message(InterpreterMessages::divideBy0); return interp.makeError(); } DEFPRIMITIVE(Quotient, argc, argv, context, interp, loc) { long n1; long n2; if (argv[0]->exactIntegerValue(n1) && argv[1]->exactIntegerValue(n2)) { if (n2 == 0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::divideBy0); return interp.makeError(); } // This isn't strictly portable. return interp.makeInteger(n1 / n2); } double d1; if (!argv[0]->realValue(d1) || modf(d1, &d1) != 0.0) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 0, argv[0]); double d2; if (!argv[1]->realValue(d2) || modf(d2, &d2) != 0.0) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 1, argv[1]); if (d2 == 0.0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::divideBy0); return interp.makeError(); } return new (interp) RealObj((d1 - fmod(d1, d2))/d2); } DEFPRIMITIVE(Remainder, argc, argv, context, interp, loc) { long n1; long n2; if (argv[0]->exactIntegerValue(n1) && argv[1]->exactIntegerValue(n2)) { if (n2 == 0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::divideBy0); return interp.makeError(); } // This isn't strictly portable. return interp.makeInteger(n1 % n2); } double d1; if (!argv[0]->realValue(d1) || modf(d1, &d1) != 0.0) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 0, argv[0]); double d2; if (!argv[1]->realValue(d2) || modf(d2, &d2) != 0.0) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 1, argv[1]); if (d2 == 0.0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::divideBy0); return interp.makeError(); } return new (interp) RealObj(fmod(d1, d2)); } DEFPRIMITIVE(Modulo, argc, argv, context, interp, loc) { long n1; long n2; if (argv[0]->exactIntegerValue(n1) && argv[1]->exactIntegerValue(n2)) { if (n2 == 0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::divideBy0); return interp.makeError(); } long r = n1 % n2; if (n2 > 0 ? r < 0 : r > 0) r += n2; return interp.makeInteger(r); } double d1; if (!argv[0]->realValue(d1) || modf(d1, &d1) != 0.0) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 0, argv[0]); double d2; if (!argv[1]->realValue(d2) || modf(d2, &d2) != 0.0) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 1, argv[1]); if (d2 == 0.0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::divideBy0); return interp.makeError(); } double r = fmod(d1, d2); if (d2 > 0 ? r < 0 : r > 0) r += d2; return new (interp) RealObj(r); } #define DEFCOMPARE(NAME, OP) \ DEFPRIMITIVE(NAME, argc, argv, context, interp, loc) \ { \ if (argc == 0) \ return interp.makeTrue(); \ long lResult; \ double dResult; \ int dim; \ bool lastWasDouble; \ switch (argv[0]->quantityValue(lResult, dResult, dim)) { \ case ELObj::noQuantity: \ return argError(interp, loc, \ InterpreterMessages::notAQuantity, 0, argv[0]); \ case ELObj::longQuantity: \ lastWasDouble = 0; \ break; \ case ELObj::doubleQuantity: \ lastWasDouble = 1; \ break; \ default: \ CANNOT_HAPPEN(); \ } \ for (int i = 1; i < argc; i++) { \ long lResult2; \ double dResult2; \ int dim2; \ switch (argv[i]->quantityValue(lResult2, dResult2, dim2)) { \ case ELObj::noQuantity: \ return argError(interp, loc, \ InterpreterMessages::notAQuantity, i, argv[i]); \ case ELObj::longQuantity: \ if (dim2 != dim) \ goto badDim; \ if (!(lastWasDouble \ ? (dResult OP lResult2) \ : (lResult OP lResult2))) \ return interp.makeFalse(); \ lResult = lResult2; \ lastWasDouble = 0; \ break; \ case ELObj::doubleQuantity: \ if (dim != dim2) \ goto badDim; \ if (!(lastWasDouble \ ? (dResult OP dResult2) \ : (lResult OP dResult2))) \ return interp.makeFalse(); \ dResult = dResult2; \ lastWasDouble = 1; \ break; \ } \ } \ return interp.makeTrue(); \ badDim: \ interp.setNextLocation(loc); \ interp.message(InterpreterMessages::incompatibleDimensions); \ return interp.makeError(); \ } DEFCOMPARE(Less, <) DEFCOMPARE(Greater, >) DEFCOMPARE(LessEqual, <=) DEFCOMPARE(GreaterEqual, >=) DEFPRIMITIVE(Min, argc, argv, context, interp, loc) { long lResult; double dResult; int dim; int i = 1; switch (argv[0]->quantityValue(lResult, dResult, dim)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, 0, argv[0]); case ELObj::longQuantity: break; case ELObj::doubleQuantity: goto useDouble; default: CANNOT_HAPPEN(); } // Note that result is inexact if any of the arguments are for (; i < argc; i++) { long lResult2; double dResult2; int dim2; switch (argv[i]->quantityValue(lResult2, dResult2, dim2)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, i, argv[i]); case ELObj::longQuantity: if (dim2 != dim) goto badDim; if (lResult2 < lResult) lResult = lResult2; break; case ELObj::doubleQuantity: if (dim != dim2) goto badDim; if (dResult2 < lResult) dResult = dResult2; else if (dim) break; else dResult = lResult; i++; goto useDouble; } } if (dim == 0) return interp.makeInteger(lResult); else return new (interp) LengthObj(lResult); useDouble: for (; i < argc; i++) { long lResult2; double dResult2; int dim2; switch (argv[i]->quantityValue(lResult2, dResult2, dim2)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, i, argv[i]); case ELObj::longQuantity: if (dim2 != dim) goto badDim; if (lResult2 < dResult) dResult = lResult2; break; case ELObj::doubleQuantity: if (dim != dim2) goto badDim; if (dResult2 < dResult) dResult = dResult2; break; } } if (dim == 0) return new (interp) RealObj(dResult); else return new (interp) QuantityObj(dResult, dim); badDim: interp.setNextLocation(loc); interp.message(InterpreterMessages::incompatibleDimensions); return interp.makeError(); } DEFPRIMITIVE(Max, argc, argv, context, interp, loc) { long lResult; double dResult; int dim; int i = 1; switch (argv[0]->quantityValue(lResult, dResult, dim)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, 0, argv[0]); case ELObj::longQuantity: break; case ELObj::doubleQuantity: goto useDouble; default: CANNOT_HAPPEN(); } // Note that result is inexact if any of the arguments are for (; i < argc; i++) { long lResult2; double dResult2; int dim2; switch (argv[i]->quantityValue(lResult2, dResult2, dim2)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, i, argv[i]); case ELObj::longQuantity: if (dim2 != dim) goto badDim; if (lResult2 > lResult) lResult = lResult2; break; case ELObj::doubleQuantity: if (dim != dim2) goto badDim; if (dResult2 > lResult) dResult = dResult2; else if (dim) break; else dResult = lResult; i++; goto useDouble; } } if (dim == 0) return interp.makeInteger(lResult); else return new (interp) LengthObj(lResult); useDouble: for (; i < argc; i++) { long lResult2; double dResult2; int dim2; switch (argv[i]->quantityValue(lResult2, dResult2, dim2)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, i, argv[i]); case ELObj::longQuantity: if (dim2 != dim) goto badDim; if (lResult2 > dResult) dResult = lResult2; break; case ELObj::doubleQuantity: if (dim != dim2) goto badDim; if (dResult2 > dResult) dResult = dResult2; break; } } if (dim == 0) return new (interp) RealObj(dResult); else return new (interp) QuantityObj(dResult, dim); badDim: interp.setNextLocation(loc); interp.message(InterpreterMessages::incompatibleDimensions); return interp.makeError(); } DEFPRIMITIVE(Floor, argc, argv, context, interp, loc) { double d; if (argv[0]->inexactRealValue(d)) return new (interp) RealObj(floor(d)); long n; if (argv[0]->exactIntegerValue(n)) return argv[0]; return argError(interp, loc, InterpreterMessages::notANumber, 0, argv[0]); } DEFPRIMITIVE(Ceiling, argc, argv, context, interp, loc) { double d; if (argv[0]->inexactRealValue(d)) return new (interp) RealObj(ceil(d)); long n; if (argv[0]->exactIntegerValue(n)) return argv[0]; return argError(interp, loc, InterpreterMessages::notANumber, 0, argv[0]); } DEFPRIMITIVE(Round, argc, argv, context, interp, loc) { double d; if (argv[0]->inexactRealValue(d)) { double result = floor(d + .5); // That rounded it upwards. // Now figure out if that was different from round to // even. if (result - d == 0.5 && fmod(result, 2.0) != 0) result -= 1.0; return new (interp) RealObj(result); } long n; if (argv[0]->exactIntegerValue(n)) return argv[0]; return argError(interp, loc, InterpreterMessages::notANumber, 0, argv[0]); } DEFPRIMITIVE(Truncate, argc, argv, context, interp, loc) { double d; if (argv[0]->inexactRealValue(d)) { double iPart; modf(d, &iPart); return new (interp) RealObj(iPart); } long n; if (argv[0]->exactIntegerValue(n)) return argv[0]; return argError(interp, loc, InterpreterMessages::notANumber, 0, argv[0]); } DEFPRIMITIVE(Abs, argc, argv, context, interp, loc) { long lResult; double dResult; int dim; switch (argv[0]->quantityValue(lResult, dResult, dim)) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, 0, argv[0]); case ELObj::longQuantity: if (lResult != LONG_MIN) { if (lResult >= 0) return argv[0]; if (dim == 0) return interp.makeInteger(-lResult); else return new (interp) LengthObj(-lResult); } dResult = lResult; break; case ELObj::doubleQuantity: break; default: CANNOT_HAPPEN(); } if (dResult >= 0) return argv[0]; if (dim == 0) return new (interp) RealObj(-dResult); else return new (interp) QuantityObj(-dResult, dim); } DEFPRIMITIVE(Sqrt, argc, argv, context, interp, loc) { long lResult; double dResult; int dim; ELObj::QuantityType type = argv[0]->quantityValue(lResult, dResult, dim); switch (type) { case ELObj::noQuantity: return argError(interp, loc, InterpreterMessages::notAQuantity, 0, argv[0]); case ELObj::longQuantity: dResult = lResult; break; case ELObj::doubleQuantity: break; default: CANNOT_HAPPEN(); } if ((dim & 1) || dResult < 0.0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::outOfRange); return interp.makeError(); } dim /= 2; dResult = sqrt(dResult); if (type == ELObj::longQuantity && dim == 0) { long n = long(dResult); if (n*n == lResult) return interp.makeInteger(n); } return new (interp) QuantityObj(dResult, dim); } DEFPRIMITIVE(Time, argc, argv, context, interp, loc) { // This assumes a Posix compatible time(). time_t t = time(0); return interp.makeInteger(long(t)); } DEFPRIMITIVE(TimeToString, argc, argv, context, interp, loc) { long k; if (!argv[0]->exactIntegerValue(k)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 0, argv[0]); time_t t = time_t(k); const struct tm *p; if (argc > 1 && argv[1] != interp.makeFalse()) p = gmtime(&t); else p = localtime(&t); char buf[64]; sprintf(buf, "%04d-%02d-%02dT%02d:%02d:%02d", p->tm_year + 1900, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); return new (interp) StringObj(interp.makeStringC(buf)); } DEFPRIMITIVE(CharProperty, argc, argv, context, interp, loc) { SymbolObj *sym = argv[0]->asSymbol(); if (!sym) return argError(interp, loc, InterpreterMessages::notASymbol, 0, argv[0]); Char c; if (!argv[1]->charValue(c)) return argError(interp, loc, InterpreterMessages::notAChar, 1, argv[1]); // FIXME if (argc > 2) return argv[2]; else return interp.makeFalse(); } DEFPRIMITIVE(Literal, argc, argv, context, interp, loc) { if (argc == 0) return new (interp) EmptySosofoObj; const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); if (argc == 1) return new (interp) LiteralSosofoObj(argv[0]); StringObj *strObj = new (interp) StringObj(s, n); for (int i = 1; i < argc; i++) { if (!argv[i]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, i, argv[i]); strObj->append(s, n); } ELObjDynamicRoot protect(interp, strObj); return new (interp) LiteralSosofoObj(strObj); } DEFPRIMITIVE(ProcessChildren, argc, argv, context, interp, loc) { if (!context.processingMode) { interp.setNextLocation(loc); interp.message(InterpreterMessages::noCurrentProcessingMode); return interp.makeError(); } return new (interp) ProcessChildrenSosofoObj(context.processingMode); } DEFPRIMITIVE(ProcessChildrenTrim, argc, argv, context, interp, loc) { if (!context.processingMode) { interp.setNextLocation(loc); interp.message(InterpreterMessages::noCurrentProcessingMode); return interp.makeError(); } return new (interp) ProcessChildrenTrimSosofoObj(context.processingMode); } DEFPRIMITIVE(SosofoAppend, argc, argv, context, interp, loc) { AppendSosofoObj *obj = new (interp) AppendSosofoObj; for (int i = 0; i < argc; i++) { SosofoObj *sosofo = argv[i]->asSosofo(); if (!sosofo) return argError(interp, loc, InterpreterMessages::notASosofo, i, argv[i]); obj->append(sosofo); } return obj; } DEFPRIMITIVE(NextMatch, argc, argv, context, interp, loc) { if (!context.processingMode) { interp.setNextLocation(loc); interp.message(InterpreterMessages::noCurrentProcessingMode); return interp.makeError(); } StyleObj *style; if (argc == 0) style = 0; else { style = argv[0]->asStyle(); if (!style) return argError(interp, loc, InterpreterMessages::notAStyle, 0, argv[0]); } return new (interp) NextMatchSosofoObj(style); } DEFPRIMITIVE(EmptySosofo, argc, argv, context, interp, loc) { return new (interp) EmptySosofoObj; } DEFPRIMITIVE(SosofoLabel, argc, argv, context, interp, loc) { SosofoObj *sosofo = argv[0]->asSosofo(); if (!sosofo) return argError(interp, loc, InterpreterMessages::notASosofo, 0, argv[0]); SymbolObj *sym = argv[1]->asSymbol(); if (!sym) return argError(interp, loc, InterpreterMessages::notASymbol, 1, argv[1]); return new (interp) LabelSosofoObj(sym, loc, sosofo); } DEFPRIMITIVE(SosofoDiscardLabeled, argc, argv, context, interp, loc) { SosofoObj *sosofo = argv[0]->asSosofo(); if (!sosofo) return argError(interp, loc, InterpreterMessages::notASosofo, 0, argv[0]); SymbolObj *sym = argv[1]->asSymbol(); if (!sym) return argError(interp, loc, InterpreterMessages::notASymbol, 1, argv[1]); return new (interp) DiscardLabeledSosofoObj(sym, sosofo); } DEFPRIMITIVE(IsSosofo, argc, argv, context, interp, loc) { if (argv[0]->asSosofo()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(MergeStyle, argc, argv, context, interp, loc) { MergeStyleObj *merged = new (interp) MergeStyleObj; for (int i = 0; i < argc; i++) { StyleObj *style = argv[i]->asStyle(); if (!style) return argError(interp, loc, InterpreterMessages::notAStyle, i, argv[i]); merged->append(style); } return merged; } DEFPRIMITIVE(IsStyle, argc, argv, context, interp, loc) { if (argv[0]->asStyle()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(CurrentNodePageNumberSosofo, argc, argv, context, interp, loc) { if (!context.currentNode) return noCurrentNodeError(interp, loc); return new (interp) CurrentNodePageNumberSosofoObj(context.currentNode); } DEFPRIMITIVE(PageNumberSosofo, argc, argv, context, interp, loc) { return new (interp) PageNumberSosofoObj; } DEFPRIMITIVE(ProcessElementWithId, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); if (!context.currentNode) return noCurrentNodeError(interp, loc); if (!context.processingMode) { interp.setNextLocation(loc); interp.message(InterpreterMessages::noCurrentProcessingMode); return interp.makeError(); } NodePtr root; NamedNodeListPtr elements; if (context.currentNode->getGroveRoot(root) == accessOK && root->getElements(elements) == accessOK) { NodePtr node; if (elements->namedNode(GroveString(s, n), node) == accessOK) return new (interp) ProcessNodeSosofoObj(node, context.processingMode); } return new (interp) EmptySosofoObj; } DEFPRIMITIVE(ProcessFirstDescendant, argc, argv, context, interp, loc) { if (!context.processingMode) { interp.setNextLocation(loc); interp.message(InterpreterMessages::noCurrentProcessingMode); return interp.makeError(); } if (!context.currentNode) return noCurrentNodeError(interp, loc); NCVector patterns(argc); for (size_t i = 0; i < argc; i++) { if (!interp.convertToPattern(argv[i], loc, patterns[i])) return interp.makeError(); } NodeListObj *nl = new (interp) DescendantsNodeListObj(context.currentNode); ELObjDynamicRoot protect(interp, nl); nl = new (interp) SelectElementsNodeListObj(nl, patterns); protect = nl; NodePtr nd(nl->nodeListFirst(context, interp)); if (!nd) return new (interp) EmptySosofoObj; return new (interp) ProcessNodeSosofoObj(nd, context.processingMode); } DEFPRIMITIVE(ProcessMatchingChildren, argc, argv, context, interp, loc) { if (!context.processingMode) { interp.setNextLocation(loc); interp.message(InterpreterMessages::noCurrentProcessingMode); return interp.makeError(); } if (!context.currentNode) return noCurrentNodeError(interp, loc); NCVector patterns(argc); for (size_t i = 0; i < argc; i++) { if (!interp.convertToPattern(argv[i], loc, patterns[i])) return interp.makeError(); } NodeListPtr nlPtr; // FIXME handle root if (patterns.size() == 0 || context.currentNode->children(nlPtr) != accessOK) return new (interp) EmptySosofoObj; NodeListObj *nl = new (interp) NodeListPtrNodeListObj(nlPtr); ELObjDynamicRoot protect(interp, nl); nl = new (interp) SelectElementsNodeListObj(nl, patterns); protect = nl; return new (interp) ProcessNodeListSosofoObj(nl, context.processingMode); } DEFPRIMITIVE(SelectElements, argc, argv, context, interp, loc) { NodeListObj *nl = argv[0]->asNodeList(); if (!nl) return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); NCVector patterns(1); if (!interp.convertToPattern(argv[1], loc, patterns[0])) return interp.makeError(); return new (interp) SelectElementsNodeListObj(nl, patterns); } DEFPRIMITIVE(IsMatchElement, argc, argv, context, interp, loc) { Pattern pattern; if (!interp.convertToPattern(argv[0], loc, pattern)) return interp.makeError(); NodePtr node; if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); if (pattern.matches(node, interp)) return interp.makeTrue(); return interp.makeFalse(); } DEFPRIMITIVE(ProcessNodeList, argc, argv, context, interp, loc) { if (!context.processingMode) { interp.setNextLocation(loc); interp.message(InterpreterMessages::noCurrentProcessingMode); return interp.makeError(); } NodeListObj *nl = argv[0]->asNodeList(); if (!nl) return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); return new (interp) ProcessNodeListSosofoObj(nl, context.processingMode); } static void reverse(StringC &s) { size_t i = 0; size_t j = s.size() - 1; while (i < j) { Char tem = s[i]; s[i] = s[j]; s[j] = tem; i++; j--; } } static StringC formatNumberLetter(long n, const char *letters) { StringC result; if (n == 0) result += '0'; else { bool neg; // FIXME possibility of overflow if (n < 0) { n = -n; neg = 1; } else neg = 0; do { n--; int r = n % 26; n -= r; n /= 26; result += letters[r]; } while (n > 0); if (neg) result += '-'; reverse(result); } return result; } static StringC formatNumberDecimal(long n, size_t minWidth) { StringC result; char buf[32]; sprintf(buf, "%ld", n); const char *p = buf; if (*p == '-') { p++; result += '-'; } size_t len = strlen(p); while (len < minWidth) { result += '0'; len++; } while (*p) result += *p++; return result; } static StringC formatNumberRoman(long n, const char *letters) { StringC result; if (n > 5000 || n < -5000 || n == 0) return formatNumberDecimal(n, 1); if (n < 0) { n = -n; result += '-'; } while (n >= 1000) { result += letters[0]; n -= 1000; } for (int i = 100; i > 0; i /= 10, letters += 2) { long q = n / i; n -= q * i; switch (q) { case 1: result += letters[2]; break; case 2: result += letters[2]; result += letters[2]; break; case 3: result += letters[2]; result += letters[2]; result += letters[2]; break; case 4: result += letters[2]; result += letters[1]; break; case 5: result += letters[1]; break; case 6: result += letters[1]; result += letters[2]; break; case 7: result += letters[1]; result += letters[2]; result += letters[2]; break; case 8: result += letters[1]; result += letters[2]; result += letters[2]; result += letters[2]; break; case 9: result += letters[2]; result += letters[0]; break; } } return result; } static bool formatNumber(long n, const Char *s, size_t len, StringC &result) { if (len > 0) { switch (s[len - 1]) { case 'a': result += formatNumberLetter(n, "abcdefghijklmnopqrstuvwxyz"); return 1; case 'A': result += formatNumberLetter(n, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); return 1; case 'i': result += formatNumberRoman(n, "mdclxvi"); return 1; case 'I': result += formatNumberRoman(n, "MDCLXVI"); return 1; case '1': result += formatNumberDecimal(n, len); return 1; default: break; } } result += formatNumberDecimal(n, 1); return 0; } DEFPRIMITIVE(FormatNumber, argc, argv, context, interp, loc) { long n; if (!argv[0]->exactIntegerValue(n)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 0, argv[0]); const Char *s; size_t len; if (!argv[1]->stringData(s, len)) return argError(interp, loc, InterpreterMessages::notAString, 1, argv[1]); StringObj *result = new (interp) StringObj; if (!formatNumber(n, s, len, *result)) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidNumberFormat, StringMessageArg(StringC(s, len))); } return result; } DEFPRIMITIVE(FormatNumberList, argc, argv, context, interp, loc) { ELObj *numbers = argv[0]; ELObj *formats = argv[1]; ELObj *seps = argv[2]; StringObj *result = new (interp) StringObj; while (!numbers->isNil()) { PairObj *tem; const Char *s; size_t len; if (numbers != argv[0]) { if (!seps->stringData(s, len)) { tem = seps->asPair(); if (!tem) return argError(interp, loc, InterpreterMessages::notAList, 2, argv[2]); if (!tem->car()->stringData(s, len)) return argError(interp, loc, InterpreterMessages::notAString, 2, tem->car()); seps = tem->cdr(); } result->append(s, len); } tem = numbers->asPair(); if (!tem) return argError(interp, loc, InterpreterMessages::notAList, 0, argv[0]); long k; if (!tem->car()->exactIntegerValue(k)) // FIXME message not quite right return argError(interp, loc, InterpreterMessages::notAnExactInteger, 0, tem->car()); numbers = tem->cdr(); if (!formats->stringData(s, len)) { tem = formats->asPair(); if (!tem) return argError(interp, loc, InterpreterMessages::notAList, 1, argv[1]); if (!tem->car()->stringData(s, len)) return argError(interp, loc, InterpreterMessages::notAString, 0, tem->car()); formats = tem->cdr(); } if (!formatNumber(k, s, len, *result)) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidNumberFormat, StringMessageArg(StringC(s, len))); } } return result; } DEFPRIMITIVE(ExternalProcedure, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); StringC tem(s, n); FunctionObj *func = interp.lookupExternalProc(tem); if (func) return func; return interp.makeFalse(); } DEFPRIMITIVE(Error, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); interp.setNextLocation(loc); interp.message(InterpreterMessages::errorProc, StringMessageArg(StringC(s, n))); return interp.makeError(); } DEFPRIMITIVE(StringToNumber, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); long radix; if (argc > 1) { if (!argv[1]->exactIntegerValue(radix)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 1, argv[1]); switch (radix) { case 2: case 8: case 10: case 16: break; default: interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidRadix); radix = 10; break; } } else radix = 10; ELObj *result = interp.convertNumber(StringC(s, n), int(radix)); if (result) { result = result->resolveQuantities(0, interp, loc); if (interp.isError(result)) return result; long n; double d; int dim; if (result->quantityValue(n, d, dim) != ELObj::noQuantity) return result; } return interp.makeFalse(); } DEFPRIMITIVE(NumberToString, argc, argv, context, interp, loc) { double x; if (!argv[0]->realValue(x)) return argError(interp, loc, InterpreterMessages::notANumber, 0, argv[0]); unsigned radix; if (argc > 1) { long r; if (!argv[1]->exactIntegerValue(r)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 1, argv[1]); switch (r) { case 2: case 8: case 10: case 16: radix = unsigned(r); break; default: interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidRadix); radix = 10; break; } } else radix = 10; StrOutputCharStream os; argv[0]->print(interp, os, radix); StringC tem; os.extractString(tem); return new (interp) StringObj(tem); } DEFPRIMITIVE(QuantityToString, argc, argv, context, interp, loc) { long lResult; double dResult; int dim; if (argv[0]->quantityValue(lResult, dResult, dim) == ELObj::noQuantity) return argError(interp, loc, InterpreterMessages::notAQuantity, 0, argv[0]); unsigned radix; if (argc > 1) { long r; if (!argv[1]->exactIntegerValue(r)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 1, argv[1]); switch (r) { case 2: case 8: case 10: case 16: radix = unsigned(r); break; default: interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidRadix); radix = 10; break; } } else radix = 10; StrOutputCharStream os; argv[0]->print(interp, os, radix); StringC tem; os.extractString(tem); return new (interp) StringObj(tem); } DEFPRIMITIVE(DisplaySize, argc, argv, context, interp, loc) { return new (interp) LengthSpecObj(LengthSpec(LengthSpec::displaySize, 1.0)); } DEFPRIMITIVE(TableUnit, argc, argv, context, interp, loc) { long k; if (!argv[0]->exactIntegerValue(k)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 0, argv[0]); return new (interp) LengthSpecObj(LengthSpec(LengthSpec::tableUnit, double(k))); } DEFPRIMITIVE(IsDisplaySpace, argc, argv, context, interp, loc) { if (argv[0]->asDisplaySpace()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(DisplaySpace, argc, argv, context, interp, loc) { FOTBuilder::DisplaySpace displaySpace; if (!interp.convertLengthSpec(argv[0], displaySpace.nominal)) return argError(interp, loc, InterpreterMessages::notALengthSpec, 0, argv[0]); displaySpace.min = displaySpace.nominal; displaySpace.max = displaySpace.nominal; // first specified keyword argument takes priority, // so scan them backwards... for (int i = argc - 1; i > 0; i -= 2) { if ((argc & 1) == 0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::oddKeyArgs); return interp.makeError(); } KeywordObj *keyObj = argv[i - 1]->asKeyword(); if (!keyObj) { interp.setNextLocation(loc); interp.message(InterpreterMessages::keyArgsNotKey); return interp.makeError(); } Identifier::SyntacticKey key; if (!keyObj->identifier()->syntacticKey(key)) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidKeyArg, StringMessageArg(keyObj->identifier()->name())); return interp.makeError(); } else { switch (key) { case Identifier::keyMin: if (!interp.convertLengthSpec(argv[i], displaySpace.min)) return argError(interp, loc, InterpreterMessages::notALengthSpec, i, argv[i]); break; case Identifier::keyMax: if (!interp.convertLengthSpec(argv[i], displaySpace.max)) return argError(interp, loc, InterpreterMessages::notALengthSpec, i, argv[i]); break; case Identifier::keyIsConditional: if (argv[i] == interp.makeTrue()) displaySpace.conditional = 1; else if (argv[i] == interp.makeFalse()) displaySpace.conditional = 0; else return argError(interp, loc, InterpreterMessages::notABoolean, i, argv[i]); break; case Identifier::keyPriority: if (argv[i]->exactIntegerValue(displaySpace.priority)) displaySpace.force = 0; else { SymbolObj *sym = argv[i]->asSymbol(); if (sym && sym->cValue() == FOTBuilder::symbolForce) displaySpace.force = 1; else return argError(interp, loc, InterpreterMessages::notAPriority, i, argv[i]); } break; default: interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidKeyArg, StringMessageArg(keyObj->identifier()->name())); return interp.makeError(); } } } return new (interp) DisplaySpaceObj(displaySpace); } DEFPRIMITIVE(IsInlineSpace, argc, argv, context, interp, loc) { if (argv[0]->asInlineSpace()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(InlineSpace, argc, argv, context, interp, loc) { FOTBuilder::InlineSpace inlineSpace; if (!interp.convertLengthSpec(argv[0], inlineSpace.nominal)) return argError(interp, loc, InterpreterMessages::notALengthSpec, 0, argv[0]); inlineSpace.min = inlineSpace.nominal; inlineSpace.max = inlineSpace.nominal; // first specified keyword argument takes priority, // so scan them backwards... for (int i = argc - 1; i > 0; i -= 2) { if ((argc & 1) == 0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::oddKeyArgs); return interp.makeError(); } KeywordObj *keyObj = argv[i - 1]->asKeyword(); if (!keyObj) { interp.setNextLocation(loc); interp.message(InterpreterMessages::keyArgsNotKey); return interp.makeError(); } Identifier::SyntacticKey key; if (!keyObj->identifier()->syntacticKey(key)) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidKeyArg, StringMessageArg(keyObj->identifier()->name())); return interp.makeError(); } else { switch (key) { case Identifier::keyMin: if (!interp.convertLengthSpec(argv[i], inlineSpace.min)) return argError(interp, loc, InterpreterMessages::notALengthSpec, i, argv[i]); break; case Identifier::keyMax: if (!interp.convertLengthSpec(argv[i], inlineSpace.max)) return argError(interp, loc, InterpreterMessages::notALengthSpec, i, argv[i]); break; default: interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidKeyArg, StringMessageArg(keyObj->identifier()->name())); return interp.makeError(); } } } return new (interp) InlineSpaceObj(inlineSpace); return argv[0]; } DEFPRIMITIVE(IsColor, argc, argv, context, interp, loc) { if (argv[0]->asColor()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsColorSpace, argc, argv, context, interp, loc) { if (argv[0]->asColorSpace()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(ColorSpace, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); if (StringC(s, n) != interp.makeStringC("ISO/IEC 10179:1996//Color-Space Family::Device RGB")) { interp.setNextLocation(loc); interp.message(InterpreterMessages::unknownColorSpaceFamily, StringMessageArg(StringC(s, n))); return interp.makeError(); } if (argc > 1) { interp.setNextLocation(loc); interp.message(InterpreterMessages::deviceRGBColorSpaceNoArgs); } return new (interp) DeviceRGBColorSpaceObj; } DEFPRIMITIVE(Color, argc, argv, context, interp, loc) { ColorSpaceObj *colorSpace = argv[0]->asColorSpace(); if (!colorSpace) return argError(interp, loc, InterpreterMessages::notAColorSpace, 0, argv[0]); return colorSpace->makeColor(argc - 1, argv + 1, interp, loc); } DEFPRIMITIVE(IsAddress, argc, argv, context, interp, loc) { if (argv[0]->asAddress()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(IsAddressLocal, argc, argv, context, interp, loc) { AddressObj *address = argv[0]->asAddress(); if (!address) return argError(interp, loc, InterpreterMessages::notAnAddress, 0, argv[0]); if (!context.currentNode) return noCurrentNodeError(interp, loc); switch (address->address().type) { case FOTBuilder::Address::resolvedNode: if (address->address().node->sameGrove(*context.currentNode)) return interp.makeTrue(); else return interp.makeFalse(); case FOTBuilder::Address::idref: return interp.makeTrue(); case FOTBuilder::Address::entity: return interp.makeFalse(); default: break; } return interp.makeFalse(); } DEFPRIMITIVE(IsAddressVisited, argc, argv, context, interp, loc) { AddressObj *address = argv[0]->asAddress(); if (!address) return argError(interp, loc, InterpreterMessages::notAnAddress, 0, argv[0]); // FIXME return interp.makeFalse(); } DEFPRIMITIVE(CurrentNodeAddress, argc, argv, context, interp, loc) { if (!context.currentNode) return noCurrentNodeError(interp, loc); return new (interp) AddressObj(FOTBuilder::Address::resolvedNode, context.currentNode); } DEFPRIMITIVE(HytimeLinkend, argc, argv, context, interp, loc) { if (!context.currentNode) return noCurrentNodeError(interp, loc); return new (interp) AddressObj(FOTBuilder::Address::hytimeLinkend, context.currentNode); } DEFPRIMITIVE(SgmlDocumentAddress, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); StringC sysid(s, n); if (!argv[1]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 1, argv[1]); return new (interp) AddressObj(FOTBuilder::Address::sgmlDocument, NodePtr(), sysid, StringC(s, n)); } DEFPRIMITIVE(IdrefAddress, argc, argv, context, interp, loc) { // The advantage of doing this rather than using an NodeAddressObj, // is that when it's a forward reference we don't have to // wait for the node. It might be cleaner to use a ProxyNode class // for this. const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); if (!context.currentNode) return noCurrentNodeError(interp, loc); return new (interp) AddressObj(FOTBuilder::Address::idref, context.currentNode, StringC(s, n)); } DEFPRIMITIVE(EntityAddress, argc, argv, context, interp, loc) { // Note that multiple space separated entity names are allowed; // currently Address doesn't support multiple nodes, so we can't resolve here. const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); if (!context.currentNode) return noCurrentNodeError(interp, loc); return new (interp) AddressObj(FOTBuilder::Address::entity, context.currentNode, StringC(s, n)); } DEFPRIMITIVE(NodeListAddress, argc, argv, context, interp, loc) { NodePtr node; if (!argv[0]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 0, argv[0]); return new (interp) AddressObj(FOTBuilder::Address::resolvedNode, node); } DEFPRIMITIVE(CharScriptCase, argc, argv, context, interp, loc) { if (!context.styleStack) { interp.setNextLocation(loc); interp.message(InterpreterMessages::notInCharacteristicValue); return interp.makeError(); } for (size_t i = 0; i < argc; i += 2) { const Char *s; size_t n; if (!argv[i]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, i, argv[i]); } // FIXME return argv[argc - 1]; } DEFPRIMITIVE(IsGlyphId, argc, argv, context, interp, loc) { if (argv[0]->glyphId()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(GlyphId, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); return interp.convertGlyphId(s, n, loc); } DEFPRIMITIVE(IsGlyphSubstTable, argc, argv, context, interp, loc) { if (argv[0]->asGlyphSubstTable()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(GlyphSubstTable, argc, argv, context, interp, loc) { ELObj *p = argv[0]; Ptr table = new FOTBuilder::GlyphSubstTable; table->uniqueId = interp.allocGlyphSubstTableUniqueId(); while (!p->isNil()) { PairObj *tem = p->asPair(); if (!tem) return argError(interp, loc, InterpreterMessages::notAGlyphIdPairList, 0, argv[0]); p = tem->cdr(); tem = tem->car()->asPair(); const FOTBuilder::GlyphId *g1, *g2; if (!tem || (g1 = tem->car()->glyphId()) == 0 || (g2 = tem->cdr()->glyphId()) == 0) return argError(interp, loc, InterpreterMessages::notAGlyphIdPairList, 0, argv[0]); table->pairs.push_back(*g1); table->pairs.push_back(*g2); } return new (interp) GlyphSubstTableObj(table); } DEFPRIMITIVE(GlyphSubst, argc, argv, context, interp, loc) { GlyphSubstTableObj *table = argv[0]->asGlyphSubstTable(); if (!table) return argError(interp, loc, InterpreterMessages::notAGlyphSubstTable, 0, argv[0]); const FOTBuilder::GlyphId *glyphId = argv[1]->glyphId(); if (!glyphId) return argError(interp, loc, InterpreterMessages::notAGlyphId, 1, argv[1]); return new (interp) GlyphIdObj(table->glyphSubstTable()->subst(*glyphId)); } // Core query language DEFPRIMITIVE(CurrentNode, argc, argv, context, interp, loc) { if (!context.currentNode) return noCurrentNodeError(interp, loc); return new (interp) NodePtrNodeListObj(context.currentNode); } DEFPRIMITIVE(NodeListError, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); if (!argv[1]->asNodeList()) return argError(interp, loc, InterpreterMessages::notANodeList, 1, argv[1]); NodePtr nd; const LocNode *lnp; Location nodeLoc; if (argv[1]->optSingletonNodeList(context, interp, nd) && (lnp = LocNode::convert(nd)) != 0 && lnp->getLocation(nodeLoc) == accessOK) interp.setNextLocation(nodeLoc); else interp.setNextLocation(loc); interp.message(InterpreterMessages::errorProc, StringMessageArg(StringC(s, n))); return interp.makeError(); } DEFPRIMITIVE(IsNodeListEmpty, argc, argv, context, interp, loc) { NodeListObj *nl = argv[0]->asNodeList(); if (!nl) return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); if (nl->nodeListFirst(context, interp)) return interp.makeFalse(); else return interp.makeTrue(); } DEFPRIMITIVE(IsNodeList, argc, argv, context, interp, loc) { if (argv[0]->asNodeList()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(Parent, argc, argv, context, interp, loc) { NodePtr node; if (argc > 0) { if (!argv[0]->optSingletonNodeList(context, interp, node)) return argError(interp, loc, InterpreterMessages::notAnOptSingletonNode, 0, argv[0]); if (!node) return argv[0]; } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } if (node->getParent(node) != accessOK) return interp.makeEmptyNodeList(); return new (interp) NodePtrNodeListObj(node); } static bool convertGeneralName(ELObj *obj, const NodePtr &node, StringC &result) { const Char *s; size_t n; if (!obj->stringData(s, n)) return 0; result.assign(s, n); NodePtr root; node->getGroveRoot(root); NamedNodeListPtr elements; root->getElements(elements); result.resize(elements->normalize(result.begin(), result.size())); return 1; } DEFPRIMITIVE(Ancestor, argc, argv, context, interp, loc) { NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } StringC gi; if (!convertGeneralName(argv[0], node, gi)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); while (node->getParent(node) == accessOK) { GroveString str; if (node->getGi(str) == accessOK && str == GroveString(gi.data(), gi.size())) return new (interp) NodePtrNodeListObj(node); } return interp.makeEmptyNodeList(); } DEFPRIMITIVE(Gi, argc, argv, context, interp, loc) { NodePtr node; if (argc > 0) { if (!argv[0]->optSingletonNodeList(context, interp, node)) return argError(interp, loc, InterpreterMessages::notAnOptSingletonNode, 0, argv[0]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } GroveString str; if (node && node->getGi(str) == accessOK) return new (interp) StringObj(str.data(), str.size()); else return interp.makeFalse(); } DEFPRIMITIVE(FirstChildGi, argc, argv, context, interp, loc) { NodePtr node; if (argc > 0) { if (!argv[0]->optSingletonNodeList(context, interp, node)) return argError(interp, loc, InterpreterMessages::notAnOptSingletonNode, 0, argv[0]); if (!node) return interp.makeFalse(); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } if (node.assignFirstChild() != accessOK) return interp.makeFalse(); for (;;) { GroveString str; if (node->getGi(str) == accessOK) return new (interp) StringObj(str.data(), str.size()); if (node.assignNextChunkSibling() != accessOK) break; } return interp.makeFalse(); } DEFPRIMITIVE(Id, argc, argv, context, interp, loc) { NodePtr node; if (argc > 0) { if (!argv[0]->optSingletonNodeList(context, interp, node)) return argError(interp, loc, InterpreterMessages::notAnOptSingletonNode, 0, argv[0]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } GroveString str; if (node && node->getId(str) == accessOK) return new (interp) StringObj(str.data(), str.size()); else return interp.makeFalse(); } static bool nodeAttributeString(const NodePtr &node, const Char *s, size_t n, const SdataMapper &mapper, StringC &value) { NamedNodeListPtr atts; if (node->getAttributes(atts) != accessOK) return 0; NodePtr att; if (atts->namedNode(GroveString(s, n), att) != accessOK) return 0; bool implied; if (att->getImplied(implied) == accessOK && implied) return 0; GroveString tokens; if (att->tokens(tokens) == accessOK) { value.assign(tokens.data(), tokens.size()); return 1; } NodePtr tem; value.resize(0); if (att->firstChild(tem) == accessOK) { do { GroveString chunk; if (tem->charChunk(mapper, chunk) == accessOK) value.append(chunk.data(), chunk.size()); } while (tem.assignNextChunkSibling() == accessOK); } return 1; } DEFPRIMITIVE(AttributeString, argc, argv, context, interp, loc) { NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node)) return argError(interp, loc, InterpreterMessages::notAnOptSingletonNode, 1, argv[1]); if (!node) return interp.makeFalse(); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); StringC value; if (nodeAttributeString(node, s, n, interp, value)) return new (interp) StringObj(value); return interp.makeFalse(); } DEFPRIMITIVE(InheritedAttributeString, argc, argv, context, interp, loc) { NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node)) return argError(interp, loc, InterpreterMessages::notAnOptSingletonNode, 1, argv[1]); if (!node) return interp.makeFalse(); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); do { StringC value; if (nodeAttributeString(node, s, n, interp, value)) return new (interp) StringObj(value); } while (node->getParent(node) == accessOK); return interp.makeFalse(); } DEFPRIMITIVE(InheritedElementAttributeString, argc, argv, context, interp, loc) { NodePtr node; if (argc > 2) { if (!argv[2]->optSingletonNodeList(context, interp, node)) return argError(interp, loc, InterpreterMessages::notAnOptSingletonNode, 2, argv[2]); if (!node) return interp.makeFalse(); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } StringC gi; if (!convertGeneralName(argv[0], node, gi)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); const Char *s; size_t n; if (!argv[1]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 1, argv[1]); do { GroveString nodeGi; StringC value; if (node->getGi(nodeGi) == accessOK && nodeGi == GroveString(gi.data(), gi.size()) && nodeAttributeString(node, s, n, interp, value)) return new (interp) StringObj(value); } while (node->getParent(node) == accessOK); return interp.makeFalse(); } DEFPRIMITIVE(IsFirstSibling, argc, argv, context, interp, loc) { NodePtr nd; if (argc > 0) { if (!argv[0]->optSingletonNodeList(context, interp, nd) || !nd) return argError(interp, loc, InterpreterMessages::notASingletonNode, 0, argv[0]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); nd = context.currentNode; } GroveString gi; NodePtr p; if (nd->firstSibling(p) != accessOK || nd->getGi(gi) != accessOK) return interp.makeFalse(); while (*p != *nd) { GroveString tem; if (p->getGi(tem) == accessOK && tem == gi) return interp.makeFalse(); if (p.assignNextChunkSibling() != accessOK) CANNOT_HAPPEN(); } return interp.makeTrue(); } DEFPRIMITIVE(IsAbsoluteFirstSibling, argc, argv, context, interp, loc) { NodePtr nd; if (argc > 0) { if (!argv[0]->optSingletonNodeList(context, interp, nd) || !nd) return argError(interp, loc, InterpreterMessages::notASingletonNode, 0, argv[0]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); nd = context.currentNode; } NodePtr p; if (nd->firstSibling(p) != accessOK) return interp.makeFalse(); while (*p != *nd) { GroveString tem; if (p->getGi(tem) == accessOK) return interp.makeFalse(); if (p.assignNextChunkSibling() != accessOK) CANNOT_HAPPEN(); } return interp.makeTrue(); } DEFPRIMITIVE(IsLastSibling, argc, argv, context, interp, loc) { NodePtr nd; if (argc > 0) { if (!argv[0]->optSingletonNodeList(context, interp, nd) || !nd) return argError(interp, loc, InterpreterMessages::notASingletonNode, 0, argv[0]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); nd = context.currentNode; } GroveString gi; if (nd->getGi(gi) != accessOK) return interp.makeFalse(); while (nd.assignNextChunkSibling() == accessOK) { GroveString tem; if (nd->getGi(tem) == accessOK && tem == gi) return interp.makeFalse(); } return interp.makeTrue(); } DEFPRIMITIVE(IsAbsoluteLastSibling, argc, argv, context, interp, loc) { NodePtr nd; if (argc > 0) { if (!argv[0]->optSingletonNodeList(context, interp, nd) || !nd) return argError(interp, loc, InterpreterMessages::notASingletonNode, 0, argv[0]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); nd = context.currentNode; } while (nd.assignNextChunkSibling() == accessOK) { GroveString tem; if (nd->getGi(tem) == accessOK) return interp.makeFalse(); } return interp.makeTrue(); } // Return 0 on error. bool matchAncestors(ELObj *obj, const NodePtr &node, ELObj *&unmatched) { NodePtr parent; if (node->getParent(parent) != accessOK) { unmatched = obj; return 1; } if (!matchAncestors(obj, parent, unmatched)) return 0; if (!unmatched->isNil()) { PairObj *pair = unmatched->asPair(); if (!pair) return 0; StringC gi; if (!convertGeneralName(pair->car(), node, gi)) return 0; GroveString tem; if (parent->getGi(tem) == accessOK && tem == GroveString(gi.data(), gi.size())) unmatched = pair->cdr(); } return 1; } DEFPRIMITIVE(IsHaveAncestor, argc, argv, context, interp, loc) { NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } StringC gi; if (convertGeneralName(argv[0], node, gi)) { while (node->getParent(node) == accessOK) { GroveString tem; if (node->getGi(tem) == accessOK && tem == GroveString(gi.data(), gi.size())) return interp.makeTrue(); } return interp.makeFalse(); } ELObj *unmatched; if (!matchAncestors(argv[0], node, unmatched)) return argError(interp, loc, InterpreterMessages::notAList, 0, argv[0]); else if (unmatched->isNil()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(ChildNumber, argc, argv, context, interp, loc) { NodePtr node; if (argc > 0) { if (!argv[0]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 0, argv[0]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } unsigned long num; if (!interp.childNumber(node, num)) return interp.makeFalse(); return interp.makeInteger(num + 1); } DEFPRIMITIVE(AncestorChildNumber, argc, argv, context, interp, loc) { NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } StringC gi; if (!convertGeneralName(argv[0], node, gi)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); while (node->getParent(node) == accessOK) { GroveString str; if (node->getGi(str) == accessOK && str == GroveString(gi.data(), gi.size())) { unsigned long num; interp.childNumber(node, num); return interp.makeInteger(num + 1); } } return interp.makeFalse(); } DEFPRIMITIVE(HierarchicalNumber, argc, argv, context, interp, loc) { NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } // Make a reversed copy of the list of GIs. ELObjDynamicRoot list(interp, 0); ELObj *p = argv[0]; while (!p->isNil()) { PairObj *tem = p->asPair(); if (!tem) return argError(interp, loc, InterpreterMessages::notAList, 0, argv[0]); list = new (interp) PairObj(tem->car(), list); p = tem->cdr(); } p = list; while (p) { PairObj *pair = (PairObj *)p; StringC gi; // FIXME error message not quite right if (!convertGeneralName(pair->car(), node, gi)) return argError(interp, loc, InterpreterMessages::notAString, 0, pair->car()); for (;;) { // Replace the GI by its number. if (node->getParent(node) != accessOK) { pair->setCar(interp.makeInteger(0)); break; } GroveString str; if (node->getGi(str) == accessOK && str == GroveString(gi.data(), gi.size())) { unsigned long num; interp.childNumber(node, num); pair->setCar(interp.makeInteger(num + 1)); break; } } p = pair->cdr(); } // Reverse the list of numbers in place. p = list; ELObj *result = interp.makeNil(); while (p) { PairObj *tem = (PairObj *)p; p = tem->cdr(); tem->setCdr(result); result = tem; } return result; } DEFPRIMITIVE(HierarchicalNumberRecursive, argc, argv, context, interp, loc) { NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } StringC gi; if (!convertGeneralName(argv[0], node, gi)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); ELObjDynamicRoot result(interp, interp.makeNil()); while (node->getParent(node) == accessOK) { GroveString str; if (node->getGi(str) == accessOK && str == GroveString(gi.data(), gi.size())) { unsigned long num; interp.childNumber(node, num); PairObj *pair = new (interp) PairObj(0, result); result = pair; pair->setCar(interp.makeInteger(num + 1)); } } return result; } DEFPRIMITIVE(ElementNumber, argc, argv, context, interp, loc) { NodePtr node; if (argc > 0) { if (!argv[0]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 0, argv[0]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } GroveString gi; if (node->getGi(gi) != accessOK) return interp.makeFalse(); StringC buf(gi.data(), gi.size()); unsigned long num = interp.elementNumber(node, buf); return interp.makeInteger(num); } DEFPRIMITIVE(ElementNumberList, argc, argv, context, interp, loc) { NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } ELObjDynamicRoot list(interp, 0); ELObj *p = argv[0]; while (!p->isNil()) { PairObj *tem = p->asPair(); if (!tem) return argError(interp, loc, InterpreterMessages::notAList, 0, argv[0]); list = new (interp) PairObj(tem->car(), list); p = tem->cdr(); } ELObjDynamicRoot result(interp, interp.makeNil()); p = list; if (p) { PairObj *pair = (PairObj *)p; StringC gi; if (!convertGeneralName(pair->car(), node, gi)) return argError(interp, loc, InterpreterMessages::notAString, 0, pair->car()); p = pair->cdr(); while (p) { pair = (PairObj *)p; StringC numGi(gi); if (!convertGeneralName(pair->car(), node, gi)) return argError(interp, loc, InterpreterMessages::notAString, 0, pair->car()); unsigned long num = interp.elementNumberAfter(node, numGi, gi); PairObj *tem = new (interp) PairObj(0, result); result = tem; tem->setCar(interp.makeInteger(num)); p = pair->cdr(); } unsigned long num = interp.elementNumber(node, gi); PairObj *tem = new (interp) PairObj(0, result); result = tem; tem->setCar(interp.makeInteger(num)); } return result; } DEFPRIMITIVE(EntityAttributeString, argc, argv, context, interp, loc) { const Char *entityName; size_t entityNameLen; if (!argv[0]->stringData(entityName, entityNameLen)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); const Char *attName; size_t attNameLen; if (!argv[1]->stringData(attName, attNameLen)) return argError(interp, loc, InterpreterMessages::notAString, 1, argv[1]); NodePtr node; if (argc > 2) { if (!argv[2]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 2, argv[2]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } NamedNodeListPtr entities; StringC value; if (node->getGroveRoot(node) == accessOK && node->getEntities(entities) == accessOK && entities->namedNode(GroveString(entityName, entityNameLen), node) == accessOK && nodeAttributeString(node, attName, attNameLen, interp, value)) return new (interp) StringObj(value); return interp.makeFalse(); } DEFPRIMITIVE(EntityGeneratedSystemId, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } GroveString str; NamedNodeListPtr entities; if (node->getGroveRoot(node) == accessOK && node->getEntities(entities) == accessOK && entities->namedNode(GroveString(s, n), node) == accessOK && node->getExternalId(node) == accessOK && node->getGeneratedSystemId(str) == accessOK) return new (interp) StringObj(str.data(), str.size()); return interp.makeFalse(); } DEFPRIMITIVE(EntitySystemId, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } GroveString str; NamedNodeListPtr entities; if (node->getGroveRoot(node) == accessOK && node->getEntities(entities) == accessOK && entities->namedNode(GroveString(s, n), node) == accessOK && node->getExternalId(node) == accessOK && node->getSystemId(str) == accessOK) return new (interp) StringObj(str.data(), str.size()); return interp.makeFalse(); } DEFPRIMITIVE(EntityPublicId, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } GroveString str; NamedNodeListPtr entities; if (node->getGroveRoot(node) == accessOK && node->getEntities(entities) == accessOK) { StringC tem(s, n); tem.resize(entities->normalize(tem.begin(), tem.size())); if (entities->namedNode(GroveString(tem.data(), tem.size()), node) == accessOK && node->getExternalId(node) == accessOK && node->getPublicId(str) == accessOK) return new (interp) StringObj(str.data(), str.size()); } return interp.makeFalse(); } DEFPRIMITIVE(EntityNotation, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } GroveString str; NamedNodeListPtr entities; if (node->getGroveRoot(node) == accessOK && node->getEntities(entities) == accessOK && entities->namedNode(GroveString(s, n), node) == accessOK && node->getNotation(node) == accessOK && node->getName(str) == accessOK) return new (interp) StringObj(str.data(), str.size()); return interp.makeFalse(); } DEFPRIMITIVE(EntityText, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } GroveString str; NamedNodeListPtr entities; if (node->getGroveRoot(node) == accessOK && node->getEntities(entities) == accessOK && entities->namedNode(GroveString(s, n), node) == accessOK && node->getText(str) == accessOK) return new (interp) StringObj(str.data(), str.size()); return interp.makeFalse(); } DEFPRIMITIVE(EntityType, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } NamedNodeListPtr entities; Node::EntityType type; if (node->getGroveRoot(node) == accessOK && node->getEntities(entities) == accessOK && entities->namedNode(GroveString(s, n), node) == accessOK && node->getEntityType(type) == accessOK) { const char *s; switch (type) { case Node::text: s = "text"; break; case Node::cdata: s = "cdata"; break; case Node::sdata: s = "sdata"; break; case Node::ndata: s = "ndata"; break; case Node::subdocument: s = "subdocument"; break; case Node::pi: s = "pi"; break; default: CANNOT_HAPPEN(); } return interp.makeSymbol(interp.makeStringC(s)); } return interp.makeFalse(); } DEFPRIMITIVE(NotationSystemId, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } GroveString str; NamedNodeListPtr notations; if (node->getGroveRoot(node) == accessOK && node->getGoverningDoctype(node) == accessOK && node->getNotations(notations) == accessOK && notations->namedNode(GroveString(s, n), node) == accessOK && node->getExternalId(node) == accessOK && node->getSystemId(str) == accessOK) return new (interp) StringObj(str.data(), str.size()); return interp.makeFalse(); } DEFPRIMITIVE(NotationPublicId, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } GroveString str; NamedNodeListPtr notations; if (node->getGroveRoot(node) == accessOK && node->getGoverningDoctype(node) == accessOK && node->getNotations(notations) == accessOK && notations->namedNode(GroveString(s, n), node) == accessOK && node->getExternalId(node) == accessOK && node->getPublicId(str) == accessOK) return new (interp) StringObj(str.data(), str.size()); return interp.makeFalse(); } DEFPRIMITIVE(NotationGeneratedSystemId, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } GroveString str; NamedNodeListPtr notations; if (node->getGroveRoot(node) == accessOK && node->getGoverningDoctype(node) == accessOK && node->getNotations(notations) == accessOK && notations->namedNode(GroveString(s, n), node) == accessOK && node->getExternalId(node) == accessOK && node->getGeneratedSystemId(str) == accessOK) return new (interp) StringObj(str.data(), str.size()); return interp.makeFalse(); } DEFPRIMITIVE(GeneralNameNormalize, argc, argv, context, interp, loc) { NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } StringC result; if (!convertGeneralName(argv[0], node, result)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); return new (interp) StringObj(result); } DEFPRIMITIVE(EntityNameNormalize, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } StringC result(s, n); node->getGroveRoot(node); NamedNodeListPtr entities; node->getEntities(entities); result.resize(entities->normalize(result.begin(), result.size())); return new (interp) StringObj(result); } DEFPRIMITIVE(NodeListFirst, argc, argv, context, interp, loc) { NodeListObj *nl = argv[0]->asNodeList(); if (!nl) return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); NodePtr nd = nl->nodeListFirst(context, interp); return new (interp) NodePtrNodeListObj(nd); } DEFPRIMITIVE(NodeListRest, argc, argv, context, interp, loc) { NodeListObj *nl = argv[0]->asNodeList(); if (!nl) return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); return nl->nodeListRest(context, interp); } DEFPRIMITIVE(NodeList, argc, argv, context, interp, loc) { if (argc == 0) return interp.makeEmptyNodeList(); int i = argc - 1; NodeListObj *nl = argv[i]->asNodeList(); if (!nl) return argError(interp, loc, InterpreterMessages::notANodeList, i, argv[i]); if (i > 0) { ELObjDynamicRoot protect(interp, nl); for (;;) { i--; NodeListObj *tem = argv[i]->asNodeList(); if (!tem) return argError(interp, loc, InterpreterMessages::notANodeList, i, argv[i]); nl = new (interp) PairNodeListObj(tem, nl); if (i == 0) break; protect = nl; } } return nl; } DEFPRIMITIVE(NodeListNoOrder, argc, argv, context, interp, loc) { NodeListObj *nl = argv[0]->asNodeList(); if (!nl) return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); return nl->nodeListNoOrder(interp); } DEFPRIMITIVE(IsNodeListEqual, argc, argv, context, interp, loc) { NodeListObj *nl1 = argv[0]->asNodeList(); if (!nl1) return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); if (nl1 == argv[1]) return interp.makeTrue(); NodeListObj *nl2 = argv[1]->asNodeList(); if (!nl2) return argError(interp, loc, InterpreterMessages::notANodeList, 1, argv[1]); ELObjDynamicRoot protect1(interp, nl1); ELObjDynamicRoot protect2(interp, nl2); for (;;) { NodePtr nd1 = nl1->nodeListFirst(context, interp); NodePtr nd2 = nl2->nodeListFirst(context, interp); if (!nd1) { if (nd2) return interp.makeFalse(); else break; } else if (!nd2) return interp.makeFalse(); else if (*nd1 != *nd2) return interp.makeFalse(); nl1 = nl1->nodeListRest(context, interp); protect1 = nl1; nl2 = nl2->nodeListRest(context, interp); protect2 = nl2; } return interp.makeTrue(); } DEFPRIMITIVE(IsNamedNodeList, argc, argv, context, interp, loc) { if (argv[0]->asNamedNodeList()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(NamedNode, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); NamedNodeListObj *nnl = argv[1]->asNamedNodeList(); if (!nnl) return argError(interp, loc, InterpreterMessages::notANamedNodeList, 1, argv[1]); return new (interp) NodePtrNodeListObj(nnl->namedNode(s, n)); } DEFPRIMITIVE(NamedNodeListNormalize, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); NamedNodeListObj *nnl = argv[1]->asNamedNodeList(); if (!nnl) return argError(interp, loc, InterpreterMessages::notANamedNodeList, 1, argv[1]); if (!argv[2]->asSymbol()) return argError(interp, loc, InterpreterMessages::notASymbol, 2, argv[2]); StringC result(s, n); result.resize(nnl->normalize(result.begin(), result.size())); return new (interp) StringObj(result); } DEFPRIMITIVE(NamedNodeListNames, argc, argv, context, interp, loc) { NamedNodeListObj *nnl = argv[0]->asNamedNodeList(); if (!nnl) return argError(interp, loc, InterpreterMessages::notANamedNodeList, 0, argv[0]); NodeListObj *nl = nnl; PairObj *tail = interp.makePair(0, 0); PairObj *head = tail; ELObjDynamicRoot protect(interp, head); for (;;) { ELObjDynamicRoot protect(interp, nl); NodePtr nd = nl->nodeListFirst(context, interp); if (!nd) break; GroveString str; if (nnl->nodeName(nd, str)) { // protect the StringObj by putting in the head's car head->setCar(new (interp) StringObj(str.data(), str.size())); PairObj *newTail = new (interp) PairObj(head->car(), 0); tail->setCdr(newTail); tail = newTail; } nl = nl->nodeListRest(context, interp); } tail->setCdr(interp.makeNil()); return head->cdr(); } DEFPRIMITIVE(Children, argc, argv, context, interp, loc) { NodePtr node; if (!argv[0]->optSingletonNodeList(context, interp, node)) { NodeListObj *nl = argv[0]->asNodeList(); if (nl) return new (interp) MapNodeListObj(this, nl, new MapNodeListObj::Context(context, loc)); return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); } if (!node) return argv[0]; NodeListPtr nl; if (node->children(nl) != accessOK) return interp.makeEmptyNodeList(); return new (interp) NodeListPtrNodeListObj(nl); } DEFPRIMITIVE(Follow, argc, argv, context, interp, loc) { NodePtr node; if (!argv[0]->optSingletonNodeList(context, interp, node)) { NodeListObj *nl = argv[0]->asNodeList(); if (nl) return new (interp) MapNodeListObj(this, nl, new MapNodeListObj::Context(context, loc)); return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); } if (!node) return argv[0]; NodeListPtr nl; if (node->follow(nl) != accessOK) return interp.makeEmptyNodeList(); return new (interp) NodeListPtrNodeListObj(nl); } DEFPRIMITIVE(Descendants, argc, argv, context, interp, loc) { NodePtr node; if (!argv[0]->optSingletonNodeList(context, interp, node)) { NodeListObj *nl = argv[0]->asNodeList(); if (nl) return new (interp) MapNodeListObj(this, nl, new MapNodeListObj::Context(context, loc)); return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); } return new (interp) DescendantsNodeListObj(node); } DEFPRIMITIVE(Preced, argc, argv, context, interp, loc) { NodePtr node; if (!argv[0]->optSingletonNodeList(context, interp, node)) { NodeListObj *nl = argv[0]->asNodeList(); if (nl) return new (interp) MapNodeListObj(this, nl, new MapNodeListObj::Context(context, loc)); return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); } NodePtr first; if (!node || node->firstSibling(first) != accessOK) return interp.makeEmptyNodeList(); return new (interp) SiblingNodeListObj(first, node); } DEFPRIMITIVE(Attributes, argc, argv, context, interp, loc) { NodePtr node; if (!argv[0]->optSingletonNodeList(context, interp, node)) { NodeListObj *nl = argv[0]->asNodeList(); if (nl) return new (interp) MapNodeListObj(this, nl, new MapNodeListObj::Context(context, loc)); return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); } if (!node) return argv[0]; NamedNodeListPtr nnl; if (node->getAttributes(nnl) != accessOK) return interp.makeEmptyNodeList(); return new (interp) NamedNodeListPtrNodeListObj(nnl); } static void nodeData(const NodePtr &nd, const SdataMapper &mapper, bool chunk, StringC &s) { GroveString tem; if (nd->charChunk(mapper, tem) == accessOK) { s.append(tem.data(), chunk ? tem.size() : 1); return; } if (nd->tokens(tem) == accessOK) { s.append(tem.data(), tem.size()); return; } NodePtr cnd; if (nd->firstChild(cnd) == accessOK) { do { nodeData(cnd, mapper, 1, s); } while (cnd.assignNextChunkSibling() == accessOK); return; } // This happens if the data procedure is called on an AVT node if (nd->getToken(tem) == accessOK) s.append(tem.data(), tem.size()); } DEFPRIMITIVE(Data, argc, argv, context, interp, loc) { NodeListObj *nl = argv[0]->asNodeList(); if (!nl) return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); StringObj *s = new (interp) StringObj; ELObjDynamicRoot protect(interp, s); for (;;) { ELObjDynamicRoot protect(interp, nl); NodePtr nd = nl->nodeListFirst(context, interp); if (!nd) break; bool chunk; nl = nl->nodeListChunkRest(context, interp, chunk); nodeData(nd, interp, chunk, *s); } return s; } DEFPRIMITIVE(ElementWithId, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); NodePtr node; if (argc > 1) { if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); } else { node = context.currentNode; if (!node) return noCurrentNodeError(interp, loc); } NamedNodeListPtr elements; if (node->getGroveRoot(node) == accessOK && node->getElements(elements) == accessOK && elements->namedNode(GroveString(s, n), node) == accessOK) return new (interp) NodePtrNodeListObj(node); return interp.makeEmptyNodeList(); } DEFPRIMITIVE(EmptyNodeList, argc, argv, context, interp, loc) { return interp.makeEmptyNodeList(); } static bool decodeKeyArgs(int argc, ELObj **argv, const Identifier::SyntacticKey *keys, int nKeys, Interpreter &interp, const Location &loc, int *pos) { if ((argc & 1) == 1) { interp.setNextLocation(loc); interp.message(InterpreterMessages::oddKeyArgs); return 0; } for (int i = 0; i < nKeys; i++) pos[i] = -1; // First has priority, so scan in reverse order for (int i = argc - 1; i > 0; i -= 2) { KeywordObj *keyObj = argv[i - 1]->asKeyword(); if (!keyObj) { interp.setNextLocation(loc); interp.message(InterpreterMessages::keyArgsNotKey); return 0; } bool found = 0; Identifier::SyntacticKey key; if (keyObj->identifier()->syntacticKey(key)) { for (int j = 0; j < nKeys; j++) { if (key == keys[j]) { pos[j] = i; found = 1; } } } if (!found) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidKeyArg, StringMessageArg(keyObj->identifier()->name())); return 0; } } return 1; } class ELObjPropertyValue : public PropertyValue { public: ELObjPropertyValue(Interpreter &interp, bool rcs) : interp_(&interp), rcs_(rcs), obj(0) { } void set(const NodePtr &nd) { obj = new (*interp_) NodePtrNodeListObj(nd); } void set(const NodeListPtr &nl) { obj = new (*interp_) NodeListPtrNodeListObj(nl); } void set(const NamedNodeListPtr &nnl) { obj = new (*interp_) NamedNodeListPtrNodeListObj(nnl); } void set(bool b) { if (b) obj = interp_->makeTrue(); else obj = interp_->makeFalse(); } void set(GroveChar c) { obj = interp_->makeChar(c); } void set(GroveString s) { obj = new (*interp_) StringObj(s.data(), s.size()); } void set(ComponentName::Id id) { const char *s = rcs_ ? ComponentName::rcsName(id) : ComponentName::sdqlName(id); obj = interp_->makeSymbol(interp_->makeStringC(s)); } void set(const ComponentName::Id *names) { PairObj *head = new (*interp_) PairObj(0, 0); ELObjDynamicRoot protect(*interp_, head); PairObj *tail = head; for (int i = 0; names[i] != ComponentName::noId; i++) { const char *s = (rcs_ ? ComponentName::rcsName(names[i]) : ComponentName::sdqlName(names[i])); SymbolObj *sym = interp_->makeSymbol(interp_->makeStringC(s)); tail->setCdr(sym); // in case we ever gc symbols PairObj *tem = new (*interp_) PairObj(sym, 0); tail->setCdr(tem); tail = tem; } tail->setCdr(interp_->makeNil()); obj = head->cdr(); } ELObj *obj; private: Interpreter *interp_; bool rcs_; }; DEFPRIMITIVE(NodeProperty, argc, argv, context, interp, loc) { StringObj *str = argv[0]->convertToString(); if (!str) return argError(interp, loc, InterpreterMessages::notAStringOrSymbol, 0, argv[0]); NodePtr node; if (!argv[1]->optSingletonNodeList(context, interp, node) || !node) return argError(interp, loc, InterpreterMessages::notASingletonNode, 1, argv[1]); static const Identifier::SyntacticKey keys[3] = { Identifier::keyDefault, Identifier::keyNull, Identifier::keyIsRcs }; int pos[3]; if (!decodeKeyArgs(argc - 2, argv + 2, keys, 3, interp, loc, pos)) return interp.makeError(); ComponentName::Id id; if (interp.lookupNodeProperty(*str, id)) { ELObjPropertyValue value(interp, pos[2] >= 0 && argv[pos[2] + 2] != interp.makeFalse()); AccessResult ret = node->property(id, interp, value); if (ret == accessOK) return value.obj; if (ret == accessNull && pos[1] >= 0) return argv[pos[1] + 2]; } if (pos[0] < 0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::noNodePropertyValue, StringMessageArg(*str)); return interp.makeError(); } return argv[pos[0] + 2]; } DEFPRIMITIVE(SelectByClass, argc, argv, context, interp, loc) { NodeListObj *nl = argv[0]->asNodeList(); if (!nl) return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); StringObj *str = argv[1]->convertToString(); if (!str) return argError(interp, loc, InterpreterMessages::notAStringOrSymbol, 1, argv[1]); ComponentName::Id id; if (!interp.lookupNodeProperty(*str, id)) return interp.makeEmptyNodeList(); return new (interp) SelectByClassNodeListObj(nl, id); } DEFPRIMITIVE(NodeListMap, argc, argv, context, interp, loc) { FunctionObj *func = argv[0]->asFunction(); if (!func) return argError(interp, loc, InterpreterMessages::notAProcedure, 0, argv[0]); if (func->nRequiredArgs() > 1) { interp.setNextLocation(loc); // FIXME interp.message(InterpreterMessages::missingArg); return interp.makeError(); } if (func->nRequiredArgs() + func->nOptionalArgs() + func->restArg() == 0) { interp.setNextLocation(loc); // FIXME interp.message(InterpreterMessages::tooManyArgs); return interp.makeError(); } interp.makeReadOnly(func); NodeListObj *nl = argv[1]->asNodeList(); if (!nl) return argError(interp, loc, InterpreterMessages::notANodeList, 1, argv[1]); return new (interp) MapNodeListObj(func, nl, new MapNodeListObj::Context(context, loc)); } DEFPRIMITIVE(NodeListRef, argc, argv, context, interp, loc) { NodeListObj *nl = argv[0]->asNodeList(); if (!nl) return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); long k; if (!argv[1]->exactIntegerValue(k)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 1, argv[1]); // Must use temporary variable, because operator new may bew called before nodeListRef. NodePtr nd(nl->nodeListRef(k, context, interp)); return new (interp) NodePtrNodeListObj(nd); } DEFPRIMITIVE(NodeListReverse, argc, argv, context, interp, loc) { NodeListObj *nl = argv[0]->asNodeList(); if (!nl) return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); return nl->nodeListReverse(context, interp); } DEFPRIMITIVE(NodeListLength, argc, argv, context, interp, loc) { NodeListObj *nl = argv[0]->asNodeList(); if (!nl) return argError(interp, loc, InterpreterMessages::notANodeList, 0, argv[0]); return interp.makeInteger(nl->nodeListLength(context, interp)); } DEFPRIMITIVE(SgmlParse, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); StringC sysid(s, n); static const Identifier::SyntacticKey keys[3] = { Identifier::keyActive, Identifier::keyArchitecture, Identifier::keyParent }; int pos[3]; if (!decodeKeyArgs(argc - 1, argv + 1, keys, 3, interp, loc, pos)) return interp.makeError(); Vector lists[2]; for (int i = 0; i < 2; i++) { if (pos[i] >= 0) { ELObj *obj = argv[pos[0] + 1]; while (!obj->isNil()) { PairObj *pair = obj->asPair(); if (!pair) return argError(interp, loc, InterpreterMessages::notAList, pos[i] + 1, argv[pos[i] + 1]); if (!pair->car()->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, pos[i] + 1, pair->car()); lists[i].resize(lists[i].size() + 1); lists[i].back().assign(s, n); obj = pair->cdr(); } } } NodePtr parent; if (pos[2] >= 0) { if (!argv[pos[2] + 1]->optSingletonNodeList(context, interp, parent) || !parent) return argError(interp, loc, InterpreterMessages::notASingletonNode, pos[2] + 1, argv[pos[2] + 1]); } NodePtr nd; if (!interp.groveManager()->load(sysid, lists[0], parent, nd, lists[1])) return interp.makeEmptyNodeList(); return new (interp) NodePtrNodeListObj(nd); } DEFPRIMITIVE(ReadEntity, argc, argv, context, interp, loc) { const Char *s; size_t n; if (!argv[0]->stringData(s, n)) return argError(interp, loc, InterpreterMessages::notAString, 0, argv[0]); StringC sysid(s, n); StringObj *contents = new (interp) StringObj; if (interp.groveManager()->readEntity(sysid, *contents)) return contents; return interp.makeError(); } DEFPRIMITIVE(Debug, argc, argv, context, interp, loc) { interp.setNextLocation(loc); interp.message(InterpreterMessages::debug, ELObjMessageArg(argv[0], interp)); return argv[0]; } DEFPRIMITIVE(IfFirstPage, argc, argv, context, interp, loc) { SosofoObj *sosofo[2]; for (int i = 0; i < 2; i++) { sosofo[i] = argv[i]->asSosofo(); if (!sosofo[i]) return argError(interp, loc, InterpreterMessages::notASosofo, i, argv[i]); } return new (interp) PageTypeSosofoObj(FOTBuilder::firstHF, sosofo[0], sosofo[1]); } DEFPRIMITIVE(IfFrontPage, argc, argv, context, interp, loc) { SosofoObj *sosofo[2]; for (int i = 0; i < 2; i++) { sosofo[i] = argv[i]->asSosofo(); if (!sosofo[i]) return argError(interp, loc, InterpreterMessages::notASosofo, i, argv[i]); } return new (interp) PageTypeSosofoObj(FOTBuilder::frontHF, sosofo[0], sosofo[1]); } DEFPRIMITIVE(AllElementNumber, argc, argv, context, interp, loc) { NodePtr node; if (argc > 0) { if (!argv[0]->optSingletonNodeList(context, interp, node)) return argError(interp, loc, InterpreterMessages::notAnOptSingletonNode, 0, argv[0]); } else { if (!context.currentNode) return noCurrentNodeError(interp, loc); node = context.currentNode; } unsigned long n; if (node && node->elementIndex(n) == accessOK) return interp.makeInteger(long(n) + 1); else return interp.makeFalse(); } DEFPRIMITIVE(IsVector, argc, argv, context, interp, loc) { if (argv[0]->asVector()) return interp.makeTrue(); else return interp.makeFalse(); } DEFPRIMITIVE(Vector, argc, argv, context, interp, loc) { Vector v(argc); for (size_t i = 0; i < argc; i++) v[i] = argv[i]; return new (interp) VectorObj(v); } DEFPRIMITIVE(MakeVector, argc, argv, context, interp, loc) { long k; if (!argv[0]->exactIntegerValue(k)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 0, argv[0]); if (k < 0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::outOfRange); return interp.makeError(); } ELObj *fill = argc > 1 ? argv[1] : interp.makeUnspecified(); Vector v((size_t)k); for (size_t i = 0; i < v.size(); i++) v[i] = fill; return new (interp) VectorObj(v); } DEFPRIMITIVE(VectorSet, argc, argv, context, interp, loc) { VectorObj *v = argv[0]->asVector(); if (!v) return argError(interp, loc, InterpreterMessages::notAVector, 0, argv[0]); long k; if (!argv[1]->exactIntegerValue(k)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 1, argv[1]); if (k < 0 || (unsigned long)k >= v->size()) { interp.setNextLocation(loc); interp.message(InterpreterMessages::outOfRange); return interp.makeError(); } if (v->readOnly()) { interp.setNextLocation(loc); interp.message(InterpreterMessages::readOnly); return interp.makeError(); } (*v)[k] = argv[2]; return interp.makeUnspecified(); } DEFPRIMITIVE(VectorRef, argc, argv, context, interp, loc) { VectorObj *v = argv[0]->asVector(); if (!v) return argError(interp, loc, InterpreterMessages::notAVector, 0, argv[0]); long k; if (!argv[1]->exactIntegerValue(k)) return argError(interp, loc, InterpreterMessages::notAnExactInteger, 1, argv[1]); if (k < 0 || (unsigned long)k >= v->size()) { interp.setNextLocation(loc); interp.message(InterpreterMessages::outOfRange); return interp.makeError(); } return (*v)[k]; } DEFPRIMITIVE(VectorToList, argc, argv, context, interp, loc) { VectorObj *v = argv[0]->asVector(); if (!v) return argError(interp, loc, InterpreterMessages::notAVector, 0, argv[0]); Vector &vec = *v; ELObjDynamicRoot result(interp, interp.makeNil()); for (size_t i = vec.size(); i > 0; i--) result = new (interp) PairObj(vec[i - 1], result); return result; } DEFPRIMITIVE(ListToVector, argc, argv, context, interp, loc) { Vector v; ELObj *obj = argv[0]; while (!obj->isNil()) { PairObj *pair = obj->asPair(); if (!pair) return argError(interp, loc, InterpreterMessages::notAList, 0, obj); v.push_back(pair->car()); obj = pair->cdr(); } return new (interp) VectorObj(v); } DEFPRIMITIVE(VectorFill, argc, argv, context, interp, loc) { VectorObj *v = argv[0]->asVector(); if (!v) return argError(interp, loc, InterpreterMessages::notAVector, 0, argv[0]); if (v->readOnly()) { interp.setNextLocation(loc); interp.message(InterpreterMessages::readOnly); return interp.makeError(); } Vector &vec = *v; for (size_t i = 0; i < vec.size(); i++) vec[i] = argv[1]; return interp.makeUnspecified(); } void Interpreter::installPrimitives() { #define PRIMITIVE(name, string, nRequired, nOptional, rest) \ installPrimitive(string, new (*this) name ## PrimitiveObj); #define XPRIMITIVE(name, string, nRequired, nOptional, rest) \ installXPrimitive(string, new (*this) name ## PrimitiveObj); #define PRIMITIVE2(name, string, nRequired, nOptional, rest) \ if (dsssl2()) installPrimitive(string, new (*this) name ## PrimitiveObj); #include "primitive.h" #undef PRIMITIVE #undef XPRIMITIVE #undef PRIMITIVE2 FunctionObj *apply = new (*this) ApplyPrimitiveObj; makePermanent(apply); lookup(makeStringC("apply"))->setValue(apply); if (dsssl2()) { FunctionObj *callCC = new (*this) CallWithCurrentContinuationPrimitiveObj; makePermanent(callCC); lookup(makeStringC("call-with-current-continuation"))->setValue(callCC); } if (dsssl2()) lookup(makeStringC("string->quantity")) ->setValue(lookup(makeStringC("string->number"))->computeValue(0, *this)); } void Interpreter::installPrimitive(const char *s, PrimitiveObj *value) { makePermanent(value); Identifier *ident = lookup(makeStringC(s)); ident->setValue(value); value->setIdentifier(ident); StringC pubid(makeStringC("ISO/IEC 10179:1996//Procedure::")); pubid += makeStringC(s); externalProcTable_.insert(pubid, value); } void Interpreter::installXPrimitive(const char *s, PrimitiveObj *value) { makePermanent(value); value->setIdentifier(lookup(makeStringC(s))); StringC pubid(makeStringC("UNREGISTERED::James Clark//Procedure::")); pubid += makeStringC(s); externalProcTable_.insert(pubid, value); } DescendantsNodeListObj::DescendantsNodeListObj(const NodePtr &start, unsigned depth) : start_(start), depth_(depth) { advance(start_, depth_); } NodePtr DescendantsNodeListObj::nodeListFirst(EvalContext &, Interpreter &) { return start_; } NodeListObj *DescendantsNodeListObj::nodeListRest(EvalContext &context, Interpreter &interp) { DescendantsNodeListObj *obj = new (interp) DescendantsNodeListObj(*this); advance(obj->start_, obj->depth_); return obj; } NodeListObj *DescendantsNodeListObj::nodeListChunkRest(EvalContext &context, Interpreter &interp, bool &chunk) { DescendantsNodeListObj *obj = new (interp) DescendantsNodeListObj(*this); chunkAdvance(obj->start_, obj->depth_); chunk = 1; return obj; } void DescendantsNodeListObj::advance(NodePtr &nd, unsigned &depth) { if (!nd) return; if (nd.assignFirstChild() == accessOK) { depth++; return; } if (depth == 0) { nd.clear(); return; } while (nd.assignNextSibling() != accessOK) { if (depth == 1 || nd.assignOrigin() != accessOK) { nd.clear(); return; } depth--; } } void DescendantsNodeListObj::chunkAdvance(NodePtr &nd, unsigned &depth) { if (!nd) return; if (nd.assignFirstChild() == accessOK) { depth++; return; } if (depth == 0) { nd.clear(); return; } while (nd.assignNextChunkSibling() != accessOK) { if (depth == 1 || nd.assignOrigin() != accessOK) { nd.clear(); return; } depth--; } } SelectByClassNodeListObj::SelectByClassNodeListObj(NodeListObj *nl, ComponentName::Id cls) : nodeList_(nl), cls_(cls) { hasSubObjects_ = 1; } NodePtr SelectByClassNodeListObj::nodeListFirst(EvalContext &context, Interpreter &interp) { for (;;) { NodePtr nd = nodeList_->nodeListFirst(context, interp); if (!nd || nd->classDef().className == cls_) return nd; // All nodes in a chunk have the same class bool chunk; nodeList_ = nodeList_->nodeListChunkRest(context, interp, chunk); } // not reached return NodePtr(); } NodeListObj *SelectByClassNodeListObj::nodeListRest(EvalContext &context, Interpreter &interp) { for (;;) { NodePtr nd = nodeList_->nodeListFirst(context, interp); if (!nd || nd->classDef().className == cls_) break; // All nodes in a chunk have the same class bool chunk; nodeList_ = nodeList_->nodeListChunkRest(context, interp, chunk); } NodeListObj *tem = nodeList_->nodeListRest(context, interp); ELObjDynamicRoot protect(interp, tem); return new (interp) SelectByClassNodeListObj(tem, cls_); } NodeListObj *SelectByClassNodeListObj::nodeListChunkRest(EvalContext &context, Interpreter &interp, bool &chunk) { for (;;) { NodePtr nd = nodeList_->nodeListFirst(context, interp); if (!nd) return interp.makeEmptyNodeList(); if (nd->classDef().className == cls_) break; bool tem; nodeList_ = nodeList_->nodeListChunkRest(context, interp, tem); } NodeListObj *tem = nodeList_->nodeListChunkRest(context, interp, chunk); ELObjDynamicRoot protect(interp, tem); return new (interp) SelectByClassNodeListObj(tem, cls_); } void SelectByClassNodeListObj::traceSubObjects(Collector &c) const { c.trace(nodeList_); } MapNodeListObj::MapNodeListObj(FunctionObj *func, NodeListObj *nl, const ConstPtr &context, NodeListObj *mapped) : func_(func), nl_(nl), context_(context), mapped_(mapped) { hasSubObjects_ = 1; } NodePtr MapNodeListObj::nodeListFirst(EvalContext &context, Interpreter &interp) { for (;;) { if (!mapped_) { mapNext(context, interp); if (!mapped_) break; } NodePtr nd = mapped_->nodeListFirst(context, interp); if (nd) return nd; mapped_ = 0; } return NodePtr(); } NodeListObj *MapNodeListObj::nodeListRest(EvalContext &context, Interpreter &interp) { for (;;) { if (!mapped_) { mapNext(context, interp); if (!mapped_) break; } NodePtr nd = mapped_->nodeListFirst(context, interp); if (nd) { NodeListObj *tem = mapped_->nodeListRest(context, interp); ELObjDynamicRoot protect(interp, tem); return new (interp) MapNodeListObj(func_, nl_, context_, tem); } mapped_ = 0; } return interp.makeEmptyNodeList(); } void MapNodeListObj::mapNext(EvalContext &context, Interpreter &interp) { if (!func_) return; NodePtr nd = nl_->nodeListFirst(context, interp); if (!nd) return; VM vm(context, interp); context_->set(vm); InsnPtr insn(func_->makeCallInsn(1, interp, context_->loc, InsnPtr())); ELObj *ret = vm.eval(insn.pointer(), 0, new (interp) NodePtrNodeListObj(nd)); if (interp.isError(ret)) { func_ = 0; return; } mapped_ = ret->asNodeList(); if (!mapped_) { interp.setNextLocation(context_->loc); interp.message(InterpreterMessages::returnNotNodeList); func_ = 0; return; } nl_ = nl_->nodeListRest(context, interp); } void MapNodeListObj::traceSubObjects(Collector &c) const { c.trace(nl_); c.trace(func_); c.trace(mapped_); context_->traceSubObjects(c); } bool MapNodeListObj::suppressError() { return func_ == 0; } MapNodeListObj::Context::Context(const EvalContext &context, const Location &l) : loc(l), haveStyleStack_(context.styleStack != 0), processingMode_(context.processingMode), currentNode_(context.currentNode), overridingStyle_(context.overridingStyle) { } void MapNodeListObj::Context::set(EvalContext &context) const { context.processingMode = processingMode_; context.currentNode = currentNode_; context.overridingStyle = overridingStyle_; if (!haveStyleStack_) context.styleStack = 0; } void MapNodeListObj::Context::traceSubObjects(Collector &c) const { c.trace(overridingStyle_); } SelectElementsNodeListObj::SelectElementsNodeListObj(NodeListObj *nodeList, const ConstPtr &patterns) : nodeList_(nodeList), patterns_(patterns) { ASSERT(!patterns_.isNull()); hasSubObjects_ = 1; } SelectElementsNodeListObj::SelectElementsNodeListObj(NodeListObj *nodeList, NCVector &patterns) : nodeList_(nodeList) { hasSubObjects_ = 1; Ptr tem(new PatternSet); tem->swap(patterns); patterns_ = tem; } void SelectElementsNodeListObj::traceSubObjects(Collector &c) const { c.trace(nodeList_); } NodePtr SelectElementsNodeListObj::nodeListFirst(EvalContext &context, Interpreter &interp) { for (;;) { NodePtr nd = nodeList_->nodeListFirst(context, interp); if (!nd) return nd; for (size_t i = 0; i < patterns_->size(); i++) if ((*patterns_)[i].matches(nd, interp)) return nd; bool chunk; nodeList_ = nodeList_->nodeListChunkRest(context, interp, chunk); } // not reached return NodePtr(); } NodeListObj *SelectElementsNodeListObj::nodeListRest(EvalContext &context, Interpreter &interp) { for (;;) { NodePtr nd = nodeList_->nodeListFirst(context, interp); if (!nd) break; bool matched = 0; for (size_t i = 0; i < patterns_->size(); i++) { if ((*patterns_)[i].matches(nd, interp)) { matched = 1; break; } } if (matched) break; bool chunk; nodeList_ = nodeList_->nodeListChunkRest(context, interp, chunk); } bool chunk; NodeListObj *tem = nodeList_->nodeListChunkRest(context, interp, chunk); ELObjDynamicRoot protect(interp, tem); return new (interp) SelectElementsNodeListObj(tem, patterns_); } SiblingNodeListObj::SiblingNodeListObj(const NodePtr &first, const NodePtr &end) : first_(first), end_(end) { } NodePtr SiblingNodeListObj::nodeListFirst(EvalContext &, Interpreter &) { if (*first_ == *end_) return NodePtr(); return first_; } NodeListObj *SiblingNodeListObj::nodeListRest(EvalContext &context, Interpreter &interp) { if (*first_ == *end_) return interp.makeEmptyNodeList(); NodePtr nd; if (first_->nextSibling(nd) != accessOK) CANNOT_HAPPEN(); return new (interp) SiblingNodeListObj(nd, end_); } NodeListObj *SiblingNodeListObj::nodeListChunkRest(EvalContext &context, Interpreter &interp, bool &chunk) { if (first_->chunkContains(*end_)) { chunk = 0; return nodeListRest(context, interp); } NodePtr nd; if (first_->nextChunkSibling(nd) != accessOK) CANNOT_HAPPEN(); chunk = 1; return new (interp) SiblingNodeListObj(nd, end_); } #ifdef DSSSL_NAMESPACE } #endif #include "primitive_inst.cxx" jade-1.2.1/style/primitive_inst.cxx100444 764 764 3575 6606636374 15166 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Ptr.h" #undef SP_DEFINE_TEMPLATES #if _MSC_VER >= 1100 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef DSSSL_NAMESPACE using namespace DSSSL_NAMESPACE; #endif #ifdef GROVE_NAMESPACE using namespace GROVE_NAMESPACE; #endif #else #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_2; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_3; #endif #endif #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/style/primitive_inst.m4100444 764 764 1364 6606574462 14675 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Ptr.h" #undef SP_DEFINE_TEMPLATES #if _MSC_VER >= 1100 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef DSSSL_NAMESPACE using namespace DSSSL_NAMESPACE; #endif #ifdef GROVE_NAMESPACE using namespace GROVE_NAMESPACE; #endif #else #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif #endif __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(Ptr) __instantiate(ConstPtr) #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/style/Pattern.cxx100444 764 764 26050 6604607716 13543 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "Pattern.h" #include "macros.h" #include "Vector.h" #include "Interpreter.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif Pattern::Pattern() : trivial_(0) { } Pattern::Pattern(IList &ancestors) : trivial_(computeTrivial(ancestors)) { ancestors_.swap(ancestors); } bool Pattern::computeTrivial(const IList &ancestors) { IListIter iter(ancestors); if (iter.done()) return 1; if (!iter.cur()->trivial()) return 0; iter.next(); if (!iter.done()) return 0; return 1; } Pattern::Element::Element(const StringC &gi) : gi_(gi), minRepeat_(1), maxRepeat_(1) { } bool Pattern::Element::matches(const NodePtr &nd, MatchContext &context) const { if (gi_.size()) { if (!nd->hasGi(GroveString(gi_.data(), gi_.size()))) return 0; } else { GroveString tem; if (nd->getGi(tem) != accessOK) return 0; } for (IListIter iter(qualifiers_); !iter.done(); iter.next()) if (!iter.cur()->satisfies(nd, context)) return 0; return 1; } bool Pattern::Element::trivial() const { if (minRepeat_ > 1) return 0; for (IListIter iter(qualifiers_); !iter.done(); iter.next()) if (!iter.cur()->vacuous()) return 0; return 1; } void Pattern::Element::contributeSpecificity(int *s) const { if (gi_.size()) s[giSpecificity] += minRepeat_; for (IListIter iter(qualifiers_); !iter.done(); iter.next()) iter.cur()->contributeSpecificity(s); if (minRepeat_ != maxRepeat_) s[repeatSpecificity] -= 1; } Pattern::Qualifier::~Qualifier() { } bool Pattern::Qualifier::vacuous() const { return 0; } bool Pattern::Qualifier::matchAttribute(const StringC &name, const StringC &value, const NodePtr &nd, MatchContext &context) { NamedNodeListPtr atts; if (nd->getAttributes(atts) != accessOK) return 0; NodePtr att; if (atts->namedNode(GroveString(name.data(), name.size()), att) != accessOK) return 0; bool implied; if (att->getImplied(implied) == accessOK && implied) return 0; GroveString tokens; if (att->tokens(tokens) == accessOK) { if (tokens.size() != value.size()) return 0; NodePtr node; NamedNodeListPtr normalizer; if (att->firstChild(node) != accessOK || node->getEntity(node) != accessOK || node->getGroveRoot(node) != accessOK || node->getEntities(normalizer) != accessOK) normalizer = atts; StringC tem(value); tem.resize(normalizer->normalize(&tem[0], tem.size())); if (tokens != GroveString(tem.data(), tem.size())) return 0; } else { NodePtr tem; StringC s; if (att->firstChild(tem) == accessOK) { do { GroveString chunk; if (tem->charChunk(context, chunk) == accessOK) s.append(chunk.data(), chunk.size()); } while (tem.assignNextChunkSibling() == accessOK); } if (s != value) return 0; } return 1; } Pattern::ChildrenQualifier::ChildrenQualifier(IList &children) { children.swap(children_); } bool Pattern::ChildrenQualifier::satisfies(const NodePtr &nd, MatchContext &context) const { ASSERT(!children_.empty()); NodePtr child; if (nd->firstChild(child) != accessOK) return 0; Vector toMatch; for (IListIter iter(children_); !iter.done(); iter.next()) toMatch.push_back(iter.cur()); do { size_t j = 0; for (size_t i = 0; i < toMatch.size(); i++) { if (!toMatch[i]->matches(child, context)) { if (j != i) toMatch[j] = toMatch[i]; j++; } } if (j == 0) return 1; toMatch.resize(j); } while (child.assignNextChunkSibling() == accessOK); return 0; } void Pattern::ChildrenQualifier::contributeSpecificity(int *s) const { for (IListIter iter(children_); !iter.done(); iter.next()) iter.cur()->contributeSpecificity(s); } Pattern::IdQualifier::IdQualifier(const StringC &id) : id_(id) { } bool Pattern::IdQualifier::satisfies(const NodePtr &nd, MatchContext &context) const { GroveString nodeId; if (nd->getId(nodeId) == accessOK) { size_t len = id_.size(); if (nodeId.size() == len) { StringC tem(id_); Interpreter::normalizeGeneralName(nd, tem); GroveString patternId(tem.data(), tem.size()); if (patternId == nodeId) return 1; } } const Vector &idAtts = context.idAttributeNames(); for (size_t i = 0; i < idAtts.size(); i++) if (matchAttribute(idAtts[i], id_, nd, context)) return 1; return 0; } void Pattern::IdQualifier::contributeSpecificity(int *s) const { s[idSpecificity] += 1; } Pattern::ClassQualifier::ClassQualifier(const StringC &cls) : class_(cls) { } bool Pattern::ClassQualifier::satisfies(const NodePtr &nd, MatchContext &context) const { const Vector &classAtts = context.classAttributeNames(); for (size_t i = 0; i < classAtts.size(); i++) if (matchAttribute(classAtts[i], class_, nd, context)) return 1; return 0; } void Pattern::ClassQualifier::contributeSpecificity(int *s) const { s[classSpecificity] += 1; } Pattern::AttributeHasValueQualifier::AttributeHasValueQualifier(const StringC &name) : name_(name) { } bool Pattern::AttributeHasValueQualifier::satisfies(const NodePtr &nd, MatchContext &context) const { NamedNodeListPtr atts; if (nd->getAttributes(atts) != accessOK) return 0; NodePtr att; if (atts->namedNode(GroveString(name_.data(), name_.size()), att) != accessOK) return 0; bool implied; if (att->getImplied(implied) == accessOK && implied) return 0; return 1; } void Pattern::AttributeHasValueQualifier::contributeSpecificity(int *s) const { s[attributeSpecificity] += 1; } Pattern::AttributeMissingValueQualifier::AttributeMissingValueQualifier(const StringC &name) : name_(name) { } bool Pattern::AttributeMissingValueQualifier::satisfies(const NodePtr &nd, MatchContext &context) const { NamedNodeListPtr atts; if (nd->getAttributes(atts) != accessOK) return 1; NodePtr att; if (atts->namedNode(GroveString(name_.data(), name_.size()), att) != accessOK) return 1; bool implied; if (att->getImplied(implied) == accessOK && implied) return 1; return 0; } void Pattern::AttributeMissingValueQualifier::contributeSpecificity(int *s) const { s[attributeSpecificity] += 1; } Pattern::AttributeQualifier::AttributeQualifier(const StringC &name, const StringC &value) : name_(name), value_(value) { } bool Pattern::AttributeQualifier::satisfies(const NodePtr &nd, MatchContext &context) const { return matchAttribute(name_, value_, nd, context); } void Pattern::AttributeQualifier::contributeSpecificity(int *s) const { s[attributeSpecificity] += 1; } void Pattern::PositionQualifier::contributeSpecificity(int *s) const { s[positionSpecificity] += 1; } bool Pattern::FirstOfTypeQualifier::satisfies(const NodePtr &nd, MatchContext &context) const { GroveString ndType; nd->getGi(ndType); NodePtr tem; if (nd->firstSibling(tem) != accessOK) return 1; // must be document element while (*tem != *nd) { GroveString temType; if (tem->getGi(temType) == accessOK && temType == ndType) return 0; tem.assignNextChunkSibling(); } return 1; } bool Pattern::LastOfTypeQualifier::satisfies(const NodePtr &nd, MatchContext &context) const { NodePtr tem; if (nd->nextChunkSibling(tem) != accessOK) return 1; GroveString ndType; nd->getGi(ndType); do { GroveString temType; if (tem->getGi(temType) == accessOK && temType == ndType) return 0; } while (tem.assignNextChunkSibling() == accessOK); return 1; } bool Pattern::FirstOfAnyQualifier::satisfies(const NodePtr &nd, MatchContext &) const { NodePtr tem; if (nd->firstSibling(tem) != accessOK) return 1; // must be document element while (*tem != *nd) { GroveString temType; if (tem->getGi(temType) == accessOK) return 0; tem.assignNextChunkSibling(); } return 1; } bool Pattern::LastOfAnyQualifier::satisfies(const NodePtr &nd, MatchContext &context) const { NodePtr tem; if (nd->nextChunkSibling(tem) != accessOK) return 1; GroveString ndType; nd->getGi(ndType); do { GroveString temType; if (tem->getGi(temType) == accessOK) return 0; } while (tem.assignNextChunkSibling() == accessOK); return 1; } void Pattern::OnlyQualifier::contributeSpecificity(int *s) const { s[onlySpecificity] += 1; } bool Pattern::OnlyOfTypeQualifier::satisfies(const NodePtr &nd, MatchContext &context) const { GroveString ndType; nd->getGi(ndType); NodePtr tem; if (nd->firstSibling(tem) != accessOK) return 1; // must be document element unsigned count = 0; do { GroveString temType; if (tem->getGi(temType) == accessOK && temType == ndType) { if (count++) return 0; } } while (tem.assignNextChunkSibling() == accessOK); return 1; } bool Pattern::OnlyOfAnyQualifier::satisfies(const NodePtr &nd, MatchContext &context) const { NodePtr tem; if (nd->firstSibling(tem) != accessOK) return 1; // must be document element unsigned count = 0; do { GroveString temType; if (tem->getGi(temType) == accessOK) { if (count++) return 0; } } while (tem.assignNextChunkSibling() == accessOK); return 1; } bool Pattern::VacuousQualifier::vacuous() const { return 1; } Pattern::PriorityQualifier::PriorityQualifier(long n) : n_(n) { } void Pattern::PriorityQualifier::contributeSpecificity(int *s) const { s[prioritySpecificity] += n_; } bool Pattern::PriorityQualifier::satisfies(const NodePtr &, MatchContext &) const { return 1; } Pattern::ImportanceQualifier::ImportanceQualifier(long n) : n_(n) { } void Pattern::ImportanceQualifier::contributeSpecificity(int *s) const { s[importanceSpecificity] += n_; } bool Pattern::ImportanceQualifier::satisfies(const NodePtr &, MatchContext &) const { return 1; } bool Pattern::matchAncestors1(const IListIter &ancestors, const NodePtr &node, MatchContext &context) { const Element &r = *ancestors.cur(); NodePtr tem(node); for (Repeat i = 0; i < r.minRepeat(); i++) { if (!tem || !r.matches(tem, context)) return 0; if (tem->getParent(tem) != accessOK) tem.clear(); } Repeat i = r.minRepeat(); for (;;) { IListIter up(ancestors); up.next(); if (matchAncestors(up, tem, context)) break; if (i == r.maxRepeat() || !tem || !r.matches(tem, context)) return 0; i++; if (tem->getParent(tem) != accessOK) tem.clear(); } return 1; } void Pattern::computeSpecificity(int *s) const { for (int i = 0; i < nSpecificity; i++) s[i] = 0; for (IListIter iter(ancestors_); !iter.done(); iter.next()) iter.cur()->contributeSpecificity(s); } int Pattern::compareSpecificity(const Pattern &pattern1, const Pattern &pattern2) { int s1[nSpecificity]; int s2[nSpecificity]; int i; // declare here to avoid gcc bug pattern1.computeSpecificity(s1); pattern2.computeSpecificity(s2); for (i = 0; i < nSpecificity; i++) { if (s1[i] != s2[i]) return s1[i] > s2[i] ? -1 : 1; } return 0; } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/ProcessContext.cxx100444 764 764 51530 6606574462 15115 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "ProcessContext.h" #include "Interpreter.h" #include "InterpreterMessages.h" #include "SosofoObj.h" #include "macros.h" #include "IListIter.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif ProcessContext::ProcessContext(Interpreter &interp, FOTBuilder &fotb) : Collector::DynamicRoot(interp), vm_(interp), flowObjLevel_(0), havePageType_(0), connectableStackLevel_(0) { connectionStack_.insert(new Connection(&fotb)); } void ProcessContext::process(const NodePtr &node) { Interpreter &interp = *vm_.interp; StyleObj *style = interp.initialStyle(); if (style) { currentStyleStack().push(style, vm(), currentFOTBuilder()); currentFOTBuilder().startSequence(); } processNode(node, interp.initialProcessingMode()); if (style) { currentFOTBuilder().endSequence(); currentStyleStack().pop(); } } void ProcessContext::processNodeSafe(const NodePtr &nodePtr, const ProcessingMode *processingMode, bool chunk) { unsigned long elementIndex; if (nodePtr->elementIndex(elementIndex) == accessOK) { unsigned groveIndex = nodePtr->groveIndex(); for (size_t i = 0; i < nodeStack_.size(); i++) { const NodeStackEntry &nse = nodeStack_[i]; if (nse.elementIndex == elementIndex && nse.groveIndex == groveIndex && nse.processingMode == processingMode) { vm_.interp->setNodeLocation(nodePtr); vm_.interp->message(InterpreterMessages::processNodeLoop); return; } } nodeStack_.resize(nodeStack_.size() + 1); NodeStackEntry &e = nodeStack_.back(); e.elementIndex = elementIndex; e.groveIndex = groveIndex; e.processingMode = processingMode; processNode(nodePtr, processingMode, chunk); nodeStack_.resize(nodeStack_.size() - 1); } else processNode(nodePtr, processingMode, chunk); } void ProcessContext::processNode(const NodePtr &nodePtr, const ProcessingMode *processingMode, bool chunk) { ASSERT(processingMode != 0); GroveString str; if (nodePtr->charChunk(*vm_.interp, str) == accessOK) currentFOTBuilder().charactersFromNode(nodePtr, str.data(), chunk ? str.size() : 1); else { EvalContext::CurrentNodeSetter cns(nodePtr, processingMode, vm()); ProcessingMode::Specificity saveSpecificity(matchSpecificity_); matchSpecificity_ = ProcessingMode::Specificity(); bool hadStyle = 0; currentFOTBuilder().startNode(nodePtr, processingMode->name()); for (;;) { const ProcessingMode::Rule *rule = vm().processingMode->findMatch(nodePtr, *vm_.interp, *vm_.interp, matchSpecificity_); if (!rule) { if (hadStyle) { currentStyleStack().pushEnd(vm(), currentFOTBuilder()); currentFOTBuilder().startSequence(); } processChildren(processingMode); break; } if (!matchSpecificity_.isStyle()) { SosofoObj *sosofoObj; InsnPtr insn; rule->action().get(insn, sosofoObj); if (hadStyle) { currentStyleStack().pushEnd(vm(), currentFOTBuilder()); currentFOTBuilder().startSequence(); } if (sosofoObj) sosofoObj->process(*this); else { ELObj *obj = vm().eval(insn.pointer()); if (vm_.interp->isError(obj)) { if (processingMode->name().size() == 0) processChildren(processingMode); } else { ELObjDynamicRoot protect(*vm_.interp, obj); ((SosofoObj *)obj)->process(*this); } } break; } SosofoObj *sosofoObj; InsnPtr insn; rule->action().get(insn, sosofoObj); ELObj *obj = vm().eval(insn.pointer()); if (!vm_.interp->isError(obj)) { if (!hadStyle) { currentStyleStack().pushStart(); hadStyle = 1; } currentStyleStack().pushContinue((StyleObj *)obj, rule, nodePtr, vm_.interp); } } if (hadStyle) { currentFOTBuilder().endSequence(); currentStyleStack().pop(); } currentFOTBuilder().endNode(); matchSpecificity_ = saveSpecificity; } } void ProcessContext::nextMatch(StyleObj *overridingStyle) { ProcessingMode::Specificity saveSpecificity(matchSpecificity_); StyleObj *saveOverridingStyle = vm().overridingStyle; if (overridingStyle) vm().overridingStyle = overridingStyle; const ProcessingMode::Rule *rule = vm().processingMode->findMatch(vm().currentNode, *vm_.interp, *vm_.interp, matchSpecificity_); if (rule) { ASSERT(!matchSpecificity_.isStyle()); SosofoObj *sosofoObj; InsnPtr insn; rule->action().get(insn, sosofoObj); if (sosofoObj) sosofoObj->process(*this); else { ELObj *obj = vm().eval(insn.pointer()); if (vm_.interp->isError(obj)) processChildren(vm().processingMode); else { ELObjDynamicRoot protect(*vm_.interp, obj); ((SosofoObj *)obj)->process(*this); } } } else processChildren(vm().processingMode); vm().overridingStyle = saveOverridingStyle; matchSpecificity_ = saveSpecificity; } void ProcessContext::processChildren(const ProcessingMode *processingMode) { if (vm().currentNode.assignFirstChild() == accessOK) { do { processNode(vm().currentNode, processingMode); } while (vm().currentNode.assignNextChunkSibling() == accessOK); } else if (vm().currentNode->getDocumentElement(vm().currentNode) == accessOK) processNode(vm().currentNode, processingMode); } inline bool isWhiteSpace(Char c) { switch (c) { case '\f': case '\r': case '\n': case '\t': case ' ': return 1; } return 0; } static bool onlyWhiteSpaceFollows(const NodePtr &node, const SdataMapper &mapper) { NodePtr tem; if (node->nextChunkSibling(tem) == accessOK) { do { GroveString str; if (tem->charChunk(mapper, str) == accessOK) { for (size_t i = 0; i < str.size(); i++) if (!isWhiteSpace(str[i])) return 0; } else if (tem->getGi(str) == accessOK) return 0; } while (tem.assignNextChunkSibling() == accessOK); } return 1; } void ProcessContext::processChildrenTrim(const ProcessingMode *processingMode) { if (vm().currentNode.assignFirstChild() == accessOK) { bool atStart = 1; do { NodePtr curNode = vm().currentNode; GroveString str; if (curNode->charChunk(*vm().interp, str) == accessOK) { if (atStart) { const Char *s = str.data(); size_t n = str.size(); for (; n > 0; n--, s++) { if (!isWhiteSpace(*s)) break; } if (n == 0) str.assign(0, 0); else { atStart = 0; if (s != str.data()) { if (curNode->followSiblingRef(str.size() - (n + 1), curNode) != accessOK) CANNOT_HAPPEN(); str.assign(s, n); } } } if (str.size()) { if (isWhiteSpace(str[str.size() - 1]) && onlyWhiteSpaceFollows(curNode, *vm().interp)) { for (size_t n = str.size() - 1; n > 0; n--) { if (!isWhiteSpace(str[n - 1])) { currentFOTBuilder().charactersFromNode(curNode, str.data(), n); return; } } return; } currentFOTBuilder().charactersFromNode(curNode, str.data(), str.size()); } } else { if (atStart && vm().currentNode->getGi(str) == accessOK) atStart = 0; processNode(vm().currentNode, processingMode); } } while (vm().currentNode.assignNextChunkSibling() == accessOK); } else if (vm().currentNode->getDocumentElement(vm().currentNode) == accessOK) processNode(vm().currentNode, processingMode); } void ProcessContext::startConnection(SymbolObj *label, const Location &loc) { unsigned connLevel = connectableStackLevel_; for (IListIter iter(connectableStack_); !iter.done(); iter.next(), --connLevel) { Connectable *conn = iter.cur(); for (size_t i = 0; i < conn->ports.size(); i++) { Port &port = conn->ports[i]; for (size_t j = 0; j < port.labels.size(); j++) if (port.labels[j] == label) { restoreConnection(connLevel, i); return; } } for (size_t i = 0; i < conn->principalPortLabels.size(); i++) if (conn->principalPortLabels[i] == label) { restoreConnection(connLevel, size_t(-1)); return; } } vm().interp->setNextLocation(loc); vm().interp->message(InterpreterMessages::badConnection, StringMessageArg(*label->name())); connectionStack_.head()->nBadFollow++; } void ProcessContext::endConnection() { if (inTableRow() && tableStack_.head()->rowConnectableLevel == connectableStackLevel_) endTableRow(); if (connectionStack_.head()->nBadFollow > 0) connectionStack_.head()->nBadFollow--; else { currentFOTBuilder().endNode(); Port *port = connectionStack_.head()->port; if (port && --(port->connected) == 0) { while (!port->saveQueue.empty()) { SaveFOTBuilder *saved = port->saveQueue.get(); saved->emit(*port->fotb); delete saved; } } delete connectionStack_.get(); } } void ProcessContext::restoreConnection(unsigned connectableLevel, size_t portIndex) { unsigned connLevel = connectableStackLevel_; IListIter iter(connectableStack_); for (; connLevel != connectableLevel; iter.next(), --connLevel) ; Connectable *conn = iter.cur(); if (portIndex != size_t(-1)) { Port &port = conn->ports[portIndex]; Connection *c = new Connection(conn->styleStack, &port, connLevel); if (port.connected) { port.connected++; SaveFOTBuilder *save = new SaveFOTBuilder(vm().currentNode, vm().processingMode->name()); c->fotb = save; port.saveQueue.append(save); } else { c->fotb = port.fotb; port.connected = 1; } connectionStack_.insert(c); currentFOTBuilder().startNode(vm().currentNode, vm().processingMode->name()); } else { Connection *c = new Connection(conn->styleStack, 0, connLevel); if (conn->flowObjLevel == flowObjLevel_) { c->fotb = ¤tFOTBuilder(); } else { SaveFOTBuilder *save = new SaveFOTBuilder(vm().currentNode, vm().processingMode->name()); c->fotb = save; if (conn->flowObjLevel >= principalPortSaveQueues_.size()) principalPortSaveQueues_.resize(conn->flowObjLevel + 1); principalPortSaveQueues_[conn->flowObjLevel].append(save); } connectionStack_.insert(c); currentFOTBuilder().startNode(vm().currentNode, vm().processingMode->name()); } } void ProcessContext::endFlowObj() { flowObjLevel_--; if (flowObjLevel_ < principalPortSaveQueues_.size()) { IQueue &saveQueue = principalPortSaveQueues_[flowObjLevel_]; while (!saveQueue.empty()) { SaveFOTBuilder *saved = saveQueue.get(); saved->emit(currentFOTBuilder()); delete saved; } } } ProcessContext::Connection::Connection(const StyleStack &s, Port *p, unsigned connLevel) : styleStack(s), port(p), nBadFollow(0), connectableLevel(connLevel) { } ProcessContext::Connection::Connection(FOTBuilder *f) : fotb(f), port(0), nBadFollow(0), connectableLevel(0) { } void ProcessContext::pushPorts(bool, const Vector &labels, const Vector &fotbs) { Connectable *c = new Connectable(labels.size(), currentStyleStack(), flowObjLevel_); connectableStack_.insert(c); for (size_t i = 0; i < labels.size(); i++) { c->ports[i].labels.push_back(labels[i]); c->ports[i].fotb = fotbs[i]; } connectableStackLevel_++; // FIXME deal with !hasPrincipalPort } void ProcessContext::popPorts() { connectableStackLevel_--; delete connectableStack_.get(); } void ProcessContext::startDiscardLabeled(SymbolObj *label) { startFlowObj(); Connectable *c = new Connectable(1, currentStyleStack(), flowObjLevel_); connectableStack_.insert(c); c->ports[0].labels.push_back(label); c->ports[0].fotb = &ignoreFotb_; } void ProcessContext::endDiscardLabeled() { delete connectableStack_.get(); endFlowObj(); } void ProcessContext::startMapContent(ELObj *contentMap, const Location &loc) { bool badFlag = 0; if (!connectableStack_.head() || connectableStack_.head()->flowObjLevel != flowObjLevel_) connectableStack_.insert(new Connectable(0, currentStyleStack(), flowObjLevel_)); Connectable &conn = *connectableStack_.head(); Vector portNames(conn.ports.size()); for (size_t i = 0; i < conn.ports.size(); i++) { portNames[i] = conn.ports[i].labels[0]; conn.ports[i].labels.clear(); } for (;;) { if (contentMap->isNil()) break; PairObj *tem = contentMap->asPair(); if (!tem) { badContentMap(badFlag, loc); break; } ELObj *entry = tem->car(); contentMap = tem->cdr(); tem = entry->asPair(); if (tem) { SymbolObj *label = tem->car()->asSymbol(); if (label) { // FIXME check if label already specified tem = tem->cdr()->asPair(); if (tem) { SymbolObj *port = tem->car()->asSymbol(); if (port) { for (size_t i = 0; i < portNames.size(); i++) if (portNames[i] == port) { conn.ports[i].labels.push_back(label); port = 0; break; } if (port) { vm().interp->setNextLocation(loc); vm().interp->message(InterpreterMessages::contentMapBadPort, StringMessageArg(*port->name())); } } else if (tem->car() == vm().interp->makeFalse()) conn.principalPortLabels.push_back(label); else badContentMap(badFlag, loc); if (!tem->cdr()->isNil()) badContentMap(badFlag, loc); } else badContentMap(badFlag, loc); } else badContentMap(badFlag, loc); } else badContentMap(badFlag, loc); } } void ProcessContext::endMapContent() { if (connectableStack_.head()->ports.size() == 0) delete connectableStack_.get(); } void ProcessContext::badContentMap(bool &badFlag, const Location &loc) { if (badFlag) return; badFlag = 1; vm().interp->setNextLocation(loc); vm().interp->message(InterpreterMessages::badContentMap); } ProcessContext::Connectable::Connectable(int nPorts, const StyleStack &ss, unsigned fol) : ports(nPorts), styleStack(ss), flowObjLevel(fol) { } ProcessContext::Port::Port() : connected(0), fotb(0) { } void ProcessContext::trace(Collector &c) const { for (IListIter iter(connectionStack_); !iter.done(); iter.next()) iter.cur()->styleStack.trace(c); for (IListIter iter(connectableStack_); !iter.done(); iter.next()) iter.cur()->styleStack.trace(c); for (IListIter
iter(tableStack_); !iter.done(); iter.next()) { c.trace(iter.cur()->rowStyle); Vector > &styles = iter.cur()->columnStyles; for (size_t i = 0; i < styles.size(); i++) for (size_t j = 0; j < styles[i].size(); j++) c.trace(styles[i][j]); } } SosofoObj *SosofoObj::asSosofo() { return this; } bool SosofoObj::tableBorderStyle(StyleObj *&) { return 0; } bool SosofoObj::isRule() { return 0; } bool SosofoObj::ruleStyle(ProcessContext &, StyleObj *&) { return 0; } bool SosofoObj::isCharacter() { return 0; } bool SosofoObj::characterStyle(ProcessContext &, StyleObj *&, FOTBuilder::CharacterNIC &) { return 0; } void AppendSosofoObj::process(ProcessContext &context) { for (size_t i = 0; i < v_.size(); i++) v_[i]->process(context); } void AppendSosofoObj::traceSubObjects(Collector &c) const { for (size_t i = 0; i < v_.size(); i++) c.trace(v_[i]); } void LiteralSosofoObj::process(ProcessContext &context) { const Char *s; size_t n; if (str_->stringData(s, n)) context.currentFOTBuilder().characters(s, n); } void LiteralSosofoObj::traceSubObjects(Collector &c) const { c.trace(str_); } void ProcessChildrenSosofoObj::process(ProcessContext &context) { NodePtr node(context.vm().currentNode); context.processChildren(mode_); context.vm().currentNode = node; } void ProcessChildrenTrimSosofoObj::process(ProcessContext &context) { NodePtr node(context.vm().currentNode); context.processChildrenTrim(mode_); context.vm().currentNode = node; } NextMatchSosofoObj::NextMatchSosofoObj(StyleObj *style) : style_(style) { } void NextMatchSosofoObj::process(ProcessContext &context) { context.nextMatch(style_); } void EmptySosofoObj::process(ProcessContext &) { // nothing needed } ProcessNodeListSosofoObj::ProcessNodeListSosofoObj(NodeListObj *nodeList, const ProcessingMode *mode) : nodeList_(nodeList), mode_(mode) { hasSubObjects_ = 1; } void ProcessNodeListSosofoObj::process(ProcessContext &context) { NodeListObj *nl = nodeList_; Interpreter &interp = *context.vm().interp; ELObjDynamicRoot protect(interp, nl); for (;;) { NodePtr node = nl->nodeListFirst(context.vm(), interp); if (!node) break; bool chunk; nl = nl->nodeListChunkRest(context.vm(), interp, chunk); protect = nl; context.processNodeSafe(node, mode_, chunk); } } void ProcessNodeListSosofoObj::traceSubObjects(Collector &c) const { c.trace(nodeList_); } ProcessNodeSosofoObj::ProcessNodeSosofoObj(const NodePtr &node, const ProcessingMode *mode) : node_(node), mode_(mode) { } void ProcessNodeSosofoObj::process(ProcessContext &context) { context.processNode(node_, mode_); } void CurrentNodePageNumberSosofoObj::process(ProcessContext &context) { context.currentFOTBuilder().currentNodePageNumber(node_); } void PageNumberSosofoObj::process(ProcessContext &context) { context.currentFOTBuilder().pageNumber(); } SetNonInheritedCsSosofoObj ::SetNonInheritedCsSosofoObj(FlowObj *flowObj, const InsnPtr &code, ELObj **display) : flowObj_(flowObj), code_(code), display_(display) { hasSubObjects_ = 1; } SetNonInheritedCsSosofoObj::~SetNonInheritedCsSosofoObj() { delete [] display_; } ELObj *SetNonInheritedCsSosofoObj::resolve(ProcessContext &context) { VM &vm = context.vm(); StyleStack *saveStyleStack = vm.styleStack; vm.styleStack = &context.currentStyleStack(); unsigned saveSpecLevel = vm.specLevel; vm.specLevel = vm.styleStack->level(); Vector dep; vm.actualDependencies = &dep; ELObj *obj = vm.eval(code_.pointer(), display_, flowObj_->copy(*vm.interp)); vm.styleStack = saveStyleStack; vm.specLevel = saveSpecLevel; if (vm.interp->isError(obj)) return 0; return obj; } void SetNonInheritedCsSosofoObj::process(ProcessContext &context) { context.startFlowObj(); unsigned flags = 0; flowObj_->pushStyle(context, flags); ELObj *obj = resolve(context); if (obj) { ELObjDynamicRoot protect(*context.vm().interp, obj); ((FlowObj *)obj)->processInner(context); } flowObj_->popStyle(context, flags); context.endFlowObj(); } bool SetNonInheritedCsSosofoObj::isCharacter() { return flowObj_->isCharacter(); } bool SetNonInheritedCsSosofoObj::isRule() { return flowObj_->isRule(); } bool SetNonInheritedCsSosofoObj::characterStyle(ProcessContext &context, StyleObj *&style, FOTBuilder::CharacterNIC &nic) { ELObj *obj = resolve(context); if (obj) { ELObjDynamicRoot protect(*context.vm().interp, obj); return ((SosofoObj *)obj)->characterStyle(context, style, nic); } return 0; } bool SetNonInheritedCsSosofoObj::ruleStyle(ProcessContext &context, StyleObj *&style) { ELObj *obj = resolve(context); if (obj) { ELObjDynamicRoot protect(*context.vm().interp, obj); return ((SosofoObj *)obj)->ruleStyle(context, style); } return 0; } void SetNonInheritedCsSosofoObj::traceSubObjects(Collector &c) const { c.trace(flowObj_); if (display_) for (ELObj **p = display_; *p; p++) c.trace(*p); } LabelSosofoObj::LabelSosofoObj(SymbolObj *label, const Location &loc, SosofoObj *content) : label_(label), locp_(new Location(loc)), content_(content) { hasSubObjects_ = 1; } void LabelSosofoObj::process(ProcessContext &context) { context.startConnection(label_, *locp_); content_->process(context); context.endConnection(); } void LabelSosofoObj::traceSubObjects(Collector &c) const { // Symbols are permanent and don't need tracing. c.trace(content_); } ContentMapSosofoObj::ContentMapSosofoObj(ELObj *contentMap, const Location *locp, SosofoObj *content) : contentMap_(contentMap), locp_(locp), content_(content) { hasSubObjects_ = 1; } void ContentMapSosofoObj::process(ProcessContext &context) { context.startMapContent(contentMap_, *locp_); content_->process(context); context.endMapContent(); } void ContentMapSosofoObj::traceSubObjects(Collector &c) const { c.trace(contentMap_); c.trace(content_); } DiscardLabeledSosofoObj::DiscardLabeledSosofoObj(SymbolObj *label, SosofoObj *content) : label_(label), content_(content) { hasSubObjects_ = 1; } void DiscardLabeledSosofoObj::process(ProcessContext &context) { context.startDiscardLabeled(label_); content_->process(context); context.endDiscardLabeled(); } void DiscardLabeledSosofoObj::traceSubObjects(Collector &c) const { c.trace(content_); } PageTypeSosofoObj::PageTypeSosofoObj(unsigned pageTypeFlag, SosofoObj *match, SosofoObj *noMatch) : pageTypeFlag_(pageTypeFlag), match_(match), noMatch_(noMatch) { hasSubObjects_ = 1; } void PageTypeSosofoObj::process(ProcessContext &context) { unsigned pageType; if (context.getPageType(pageType)) { if (pageType & pageTypeFlag_) match_->process(context); else noMatch_->process(context); } } void PageTypeSosofoObj::traceSubObjects(Collector &c) const { c.trace(match_); c.trace(noMatch_); } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/ProcessingMode.cxx100444 764 764 20736 6606574462 15057 0ustar jjcjjc// Copyright (c) 1996, 1997 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "ProcessingMode.h" #include "Interpreter.h" #include "MessageArg.h" #include "InterpreterMessages.h" #include "Expression.h" #include "Insn.h" #include "Insn2.h" #include "IListIter.h" #include "LocNode.h" #include "macros.h" #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif ProcessingMode::ProcessingMode(const StringC &name, const ProcessingMode *initial) : Named(name), initial_(initial), defined_(0) { } void ProcessingMode::compile(Interpreter &interp) { for (int i = 0; i < nRuleType; i++) { for (size_t j = 0; j < rootRules_[i].size(); j++) rootRules_[i][j].action().compile(interp, RuleType(i)); for (IListIter iter(elementRules_[i]); !iter.done(); iter.next()) iter.cur()->action().compile(interp, RuleType(i)); } } void ProcessingMode::GroveRules::build(const IList *lists, const NodePtr &node, Messenger &) { built = 1; for (int ruleType = 0; ruleType < nRuleType; ruleType++) { for (IListIter iter(lists[ruleType]); !iter.done(); iter.next()) { StringC gi; if (iter.cur()->mustHaveGi(gi)) { Interpreter::normalizeGeneralName(node, gi); ElementRules *p = elementTable.lookup(gi); if (!p) { p = new ElementRules(gi); elementTable.insert(p); } p->rules[ruleType].push_back(iter.cur()); } else otherRules[ruleType].push_back(iter.cur()); } } for (int ruleType = 0; ruleType < nRuleType; ruleType++) { NamedTableIter iter(elementTable); for (;;) { ElementRules *p = iter.next(); if (!p) break; size_t j = p->rules[ruleType].size(); p->rules[ruleType].resize(p->rules[ruleType].size() + otherRules[ruleType].size()); for (size_t i = 0; i < otherRules[ruleType].size(); i++) p->rules[ruleType][j++] = otherRules[ruleType][i]; sortRules(p->rules[ruleType]); } sortRules(otherRules[ruleType]); } } extern "C" { static int ruleCompare(const void *p1, const void *p2) { return (*(const ProcessingMode::Rule *const *)p1) ->compareSpecificity(**(const ProcessingMode::Rule *const *)p2); } } void ProcessingMode::GroveRules::sortRules(Vector &v) { qsort(&v[0], v.size(), sizeof(v[0]), ruleCompare); } ProcessingMode::Action::Action(unsigned partIndex, Owner &expr, const Location &loc) : partIndex_(partIndex), defLoc_(loc), sosofo_(0) { expr.swap(expr_); } ProcessingMode::Rule::Rule() { } ProcessingMode::Rule::Rule(const Ptr &action) : action_(action) { } int ProcessingMode::Rule::compareSpecificity(const Rule &r) const { unsigned i1 = action().partIndex(); unsigned i2 = r.action().partIndex(); if (i1 == i2) return 0; return i1 < i2 ? -1 : 1; } void ProcessingMode::Action::compile(Interpreter &interp, RuleType ruleType) { expr_->optimize(interp, Environment(), expr_); ELObj *tem = expr_->constantValue(); if (tem) { if (ruleType == constructionRule) { sosofo_ = tem->asSosofo(); if (sosofo_) return; } } InsnPtr check; if (ruleType == constructionRule) check = new CheckSosofoInsn(defLoc_, check); insn_ = expr_->compile(interp, Environment(), 0, check); } ProcessingMode::ElementRule::ElementRule(const Ptr &action, Pattern &pattern) : Rule(action) { pattern.swap(*this); } int ProcessingMode::ElementRule::compareSpecificity(const Rule &r) const { int result = Rule::compareSpecificity(r); if (result) return result; return Pattern::compareSpecificity(*this, (const ElementRule &)r); } void ProcessingMode::addRule(bool root, NCVector &patterns, Owner &expr, RuleType ruleType, const Location &loc, Interpreter &interp) { Ptr action = new Action(interp.currentPartIndex(), expr, loc); for (size_t i = 0; i < patterns.size(); i++) elementRules_[ruleType].insert(new ElementRule(action, patterns[i])); if (!root) return; Vector &rules = rootRules_[ruleType]; rules.push_back(Rule(action)); for (size_t i = rules.size() - 1; i > 0; i--) { int cmp = rules[i - 1].compareSpecificity(rules[i]); if (cmp <= 0) { if (cmp == 0 && ruleType == constructionRule) { interp.setNextLocation(loc); interp.message(InterpreterMessages::duplicateRootRule, rules[i - 1].location()); } break; } rules[i - 1].swap(rules[i]); } } ProcessingMode::GroveRules::GroveRules() : built(0) { } ProcessingMode::ElementRules::ElementRules(const StringC &name) : Named(name) { } // Specificity gives specificity of last match; get specificity of current match. const ProcessingMode::Rule * ProcessingMode::findMatch(const NodePtr &node, Pattern::MatchContext &context, Messenger &mgr, Specificity &specificity) const { GroveString gi; if (node->getGi(gi) == accessOK) return findElementMatch(StringC(gi.data(), gi.size()), node, context, mgr, specificity); NodePtr tem; if (node->getOrigin(tem) != accessOK) return findRootMatch(node, context, mgr, specificity); return 0; } const ProcessingMode::Rule * ProcessingMode::findElementMatch(const StringC &gi, const NodePtr &node, Pattern::MatchContext &context, Messenger &mgr, Specificity &specificity) const { const Vector *vecP = 0; for (;;) { for (;;) { const ProcessingMode &mode = *(initial_ && specificity.toInitial_ ? initial_ : this); if (!vecP) { const GroveRules &gr = mode.groveRules(node, mgr); const ElementRules *er = gr.elementTable.lookup(gi); vecP = er ? er->rules : gr.otherRules; } const Vector &vec = vecP[specificity.ruleType_]; ASSERT(specificity.nextRuleIndex_ <= vec.size()); for (size_t &i = specificity.nextRuleIndex_; i < vec.size(); i++) { if (vec[i]->trivial() || vec[i]->matches(node, context)) { const Rule *rule = vec[i]; elementRuleAdvance(node, context, mgr, specificity, vec); return rule; } } if (!initial_) break; vecP = 0; if (specificity.toInitial_) break; specificity.nextRuleIndex_ = 0; specificity.toInitial_ = 1; } if (specificity.ruleType_ == constructionRule) break; specificity.ruleType_ = constructionRule; specificity.nextRuleIndex_ = 0; specificity.toInitial_ = 0; } return 0; } const ProcessingMode::Rule * ProcessingMode::findRootMatch(const NodePtr &node, Pattern::MatchContext &context, Messenger &mgr, Specificity &specificity) const { for (;;) { for (;;) { const ProcessingMode &mode = *(initial_ && specificity.toInitial_ ? initial_ : this); const Vector &rules = mode.rootRules_[specificity.ruleType_]; if (specificity.nextRuleIndex_ < rules.size()) return &rules[specificity.nextRuleIndex_++]; if (!initial_ || specificity.toInitial_) break; specificity.nextRuleIndex_ = 0; specificity.toInitial_ = 1; } if (specificity.ruleType_ == constructionRule) break; specificity.ruleType_ = constructionRule; specificity.nextRuleIndex_ = 0; specificity.toInitial_ = 0; } return 0; } const ProcessingMode::GroveRules &ProcessingMode::groveRules(const NodePtr &node, Messenger &mgr) const { unsigned long n = node->groveIndex(); ProcessingMode *cache = (ProcessingMode *)this; if (n >= groveRules_.size()) cache->groveRules_.resize(n + 1); if (!groveRules_[n].built) cache->groveRules_[n].build(elementRules_, node, mgr); return groveRules_[n]; } void ProcessingMode::elementRuleAdvance(const NodePtr &node, Pattern::MatchContext &context, Messenger &mgr, Specificity &specificity, const Vector &vec) { size_t &i = specificity.nextRuleIndex_; if (specificity.ruleType_ != constructionRule) { ++i; return; } size_t hit = i; do { ++i; if (i >= vec.size() || vec[hit]->ElementRule::compareSpecificity(*vec[i]) != 0) return; } while (!(vec[i]->trivial() || vec[i]->matches(node, context))); const LocNode *lnp; Location nodeLoc; if ((lnp = LocNode::convert(node)) != 0 && lnp->getLocation(nodeLoc) == accessOK) mgr.setNextLocation(nodeLoc); mgr.message(InterpreterMessages::ambiguousMatch); do { ++i; } while (i < vec.size() && vec[hit]->ElementRule::compareSpecificity(*vec[i]) == 0); } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/SchemeParser.cxx100444 764 764 137334 6607321736 14535 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "SchemeParser.h" #include "InterpreterMessages.h" #include "Pattern.h" #include "MacroFlowObj.h" #include "macros.h" #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif const Char defaultChar = 0xfffd; SchemeParser::SchemeParser(Interpreter &interp, Owner &in) : interp_(&interp), defMode_(interp.initialProcessingMode()), dsssl2_(interp.dsssl2()) { in_.swap(in); { StringC tem(Interpreter::makeStringC("ISO/IEC 10036/RA//Glyphs")); afiiPublicId_ = interp_->storePublicId(tem.data(), tem.size(), Location()); } } void SchemeParser::parse() { bool recovering = 0; for (;;) { Token tok; if (!getToken(recovering ? ~0 : allowOpenParen|allowEndOfEntity, tok)) recovering = 1; else { if (tok == tokenEndOfEntity) break; if (tok != tokenOpenParen || !getToken(recovering ? ~0 : unsigned(allowIdentifier), tok) || tok != tokenIdentifier) recovering = 1; else { const Identifier *ident = lookup(currentToken_); Identifier::SyntacticKey key; if (!ident->syntacticKey(key)) { if (!recovering) message(InterpreterMessages::unknownTopLevelForm, StringMessageArg(currentToken_)); recovering = 1; } else { switch (key) { case Identifier::keyDefine: recovering = !doDefine(); break; case Identifier::keyDefineUnit: recovering = !doDefineUnit(); break; case Identifier::keyDefault: recovering = !doDefault(); break; case Identifier::keyElement: recovering = !doElement(); break; case Identifier::keyOrElement: recovering = !doOrElement(); break; case Identifier::keyRoot: recovering = !doRoot(); break; case Identifier::keyId: recovering = !doId(); break; case Identifier::keyMode: recovering = !doMode(); break; case Identifier::keyDeclareInitialValue: recovering = !doDeclareInitialValue(); break; case Identifier::keyDeclareCharacteristic: recovering = !doDeclareCharacteristic(); break; case Identifier::keyDeclareFlowObjectClass: recovering = !doDeclareFlowObjectClass(); break; case Identifier::keyDeclareClassAttribute: recovering = !doDeclareClassAttribute(); break; case Identifier::keyDeclareIdAttribute: recovering = !doDeclareIdAttribute(); break; case Identifier::keyDeclareFlowObjectMacro: recovering = !doDeclareFlowObjectMacro(); break; case Identifier::keyDeclareCharCharacteristicAndProperty: case Identifier::keyDeclareReferenceValueType: case Identifier::keyDeclareDefaultLanguage: case Identifier::keyDeclareCharProperty: case Identifier::keyDefinePageModel: case Identifier::keyDefineColumnSetModel: case Identifier::keyDefineLanguage: case Identifier::keyAddCharProperties: recovering = !skipForm(); break; default: if (!recovering) message(InterpreterMessages::unknownTopLevelForm, StringMessageArg(currentToken_)); recovering = 1; break; } } } } } #if 0 NamedTableIter iter(identTable_); for (;;) { Identifier *ident = iter.next(); if (!ident) break; Location loc; unsigned part; if (ident->defined(part, loc)) { ELObj *obj = ident->computeValue(1, *this); if (!isError(obj)) { *os_ << ident->name() << "="; obj->print(*this, *os_); *os_ << OutputCharStream::newline; os_->flush(); } } } #endif } bool SchemeParser::parseExpression(Owner &expr) { Identifier::SyntacticKey key; Token tok; if (!parseExpression(0, expr, key, tok)) return 0; getToken(allowEndOfEntity, tok); return 1; } bool SchemeParser::doMode() { Token tok; if (!getToken(allowIdentifier, tok)) return 0; defMode_ = lookupProcessingMode(currentToken_); defMode_->setDefined(); for (;;) { if (!getToken(allowOpenParen|allowCloseParen, tok)) return 0; if (tok == tokenCloseParen) break; if (!getToken(allowIdentifier, tok)) return 0; const Identifier *ident = lookup(currentToken_); Identifier::SyntacticKey key; if (!ident->syntacticKey(key)) { message(InterpreterMessages::badModeForm, StringMessageArg(currentToken_)); return 0; } else { switch (key) { case Identifier::keyDefault: if (!doDefault()) return 0; break; case Identifier::keyElement: if (!doElement()) return 0; break; case Identifier::keyOrElement: if (!doOrElement()) return 0; break; case Identifier::keyRoot: if (!doRoot()) return 0; break; case Identifier::keyId: if (!doId()) return 0; break; default: message(InterpreterMessages::badModeForm, StringMessageArg(currentToken_)); return 0; } } } defMode_ = interp_->initialProcessingMode(); return 1; } bool SchemeParser::doElement() { Location loc(in_->currentLocation()); Token tok; ELObj *obj; if (!parseDatum(0, obj, loc, tok)) return 0; NCVector patterns(1); Owner expr; ProcessingMode::RuleType ruleType; if (interp_->convertToPattern(obj, loc, patterns[0])) { if (!parseRuleBody(expr, ruleType)) return 0; defMode_->addRule(0, patterns, expr, ruleType, loc, *interp_); } else if (!parseRuleBody(expr, ruleType)) return 0; return 1; } bool SchemeParser::doOrElement() { Location loc(in_->currentLocation()); Token tok; if (!getToken(allowOpenParen, tok)) return 0; NCVector patterns; unsigned allowed = 0; bool ok = 1; for (;;) { ELObj *obj; if (!parseDatum(allowed, obj, loc, tok)) return 0; if (!obj) break; allowed = allowCloseParen; if (ok) { patterns.resize(patterns.size() + 1); if (!interp_->convertToPattern(obj, loc, patterns.back())) ok = 0; } } ProcessingMode::RuleType ruleType; Owner expr; if (!parseRuleBody(expr, ruleType)) return 0; if (ok) defMode_->addRule(0, patterns, expr, ruleType, loc, *interp_); return 1; } bool SchemeParser::doId() { Location loc(in_->currentLocation()); Token tok; if (!getToken(allowString|allowIdentifier, tok)) return 0; StringC id(currentToken_); Owner expr; ProcessingMode::RuleType ruleType; if (!parseRuleBody(expr, ruleType)) return 0; IList list; Pattern::Element *elem = new Pattern::Element(StringC()); list.insert(elem); elem->addQualifier(new Pattern::IdQualifier(id)); Pattern pattern(list); NCVector patterns(1); patterns[0].swap(pattern); defMode_->addRule(0, patterns, expr, ruleType, loc, *interp_); return 1; } bool SchemeParser::doDefault() { Location loc(in_->currentLocation()); Owner expr; ProcessingMode::RuleType ruleType; if (!parseRuleBody(expr, ruleType)) return 0; IList list; list.insert(new Pattern::Element(StringC())); Pattern pattern(list); NCVector patterns(1); pattern.swap(patterns[0]); defMode_->addRule(0, patterns, expr, ruleType, loc, *interp_); return 1; } bool SchemeParser::doRoot() { Location loc(in_->currentLocation()); Owner expr; ProcessingMode::RuleType ruleType; if (!parseRuleBody(expr, ruleType)) return 0; NCVector patterns; defMode_->addRule(1, patterns, expr, ruleType, loc, *interp_); return 1; } bool SchemeParser::parseRuleBody(Owner &expr, ProcessingMode::RuleType &ruleType) { Token tok; Identifier::SyntacticKey key; if (!parseExpression(0, expr, key, tok)) return 0; const Identifier *k = dsssl2() ? expr->keyword() : 0; if (k) { // style rule Vector keys; NCVector > exprs; for (;;) { keys.push_back(k); exprs.resize(exprs.size() + 1); if (!parseExpression(0, exprs.back(), key, tok)) return 0; if (!getToken(allowKeyword|allowCloseParen, tok)) return 0; if (tok == tokenCloseParen) break; k = lookup(currentToken_); } expr = new StyleExpression(keys, exprs, expr->location()); ruleType = ProcessingMode::styleRule; } else { ruleType = ProcessingMode::constructionRule; if (!getToken(allowCloseParen, tok)) return 0; } return 1; } bool SchemeParser::doDeclareInitialValue() { Token tok; if (!getToken(allowIdentifier, tok)) return 0; Identifier *ident = lookup(currentToken_); if (ident->inheritedC().isNull()) message(InterpreterMessages::notABuiltinInheritedC, StringMessageArg(ident->name())); Owner expr; Identifier::SyntacticKey key; if (!parseExpression(0, expr, key, tok)) return 0; if (!getToken(allowCloseParen, tok)) return 0; if (ident->inheritedC().isNull()) return 1; interp_->installInitialValue(ident, expr); return 1; } bool SchemeParser::doDeclareCharacteristic() { Location loc(in_->currentLocation()); Token tok; if (!getToken(allowIdentifier, tok)) return 0; Identifier *ident = lookup(currentToken_); if (!getToken(allowString|(dsssl2() ? unsigned(allowFalse) : 0), tok)) return 0; StringC pubid; if (tok == tokenString) pubid = currentToken_; Owner expr; Identifier::SyntacticKey key; if (!parseExpression(0, expr, key, tok)) return 0; if (!getToken(allowCloseParen, tok)) return 0; Location defLoc; unsigned defPart; if (ident->inheritedCDefined(defPart, defLoc) && defPart <= interp_->currentPartIndex()) { if (defPart == interp_->currentPartIndex()) { interp_->setNextLocation(loc); interp_->message(InterpreterMessages::duplicateCharacteristic, StringMessageArg(ident->name()), defLoc); } } else { interp_->installExtensionInheritedC(ident, pubid, loc); interp_->installInitialValue(ident, expr); } return 1; } bool SchemeParser::doDeclareFlowObjectClass() { Location loc(in_->currentLocation()); Token tok; if (!getToken(allowIdentifier, tok)) return 0; Identifier *ident = lookup(currentToken_); if (!getToken(allowString, tok)) return 0; Location defLoc; unsigned defPart; if (ident->inheritedCDefined(defPart, defLoc) && defPart <= interp_->currentPartIndex()) { if (defPart == interp_->currentPartIndex()) { interp_->setNextLocation(loc); interp_->message(InterpreterMessages::duplicateFlowObjectClass, StringMessageArg(ident->name()), defLoc); } } else interp_->installExtensionFlowObjectClass(ident, currentToken_, loc); if (!getToken(allowCloseParen, tok)) return 0; return 1; } bool SchemeParser::doDeclareFlowObjectMacro() { Location loc(in_->currentLocation()); Token tok; if (!getToken(allowIdentifier, tok)) return 0; Identifier *ident = lookup(currentToken_); if (ident->flowObj()) // FIXME report an error if same part ; if (!getToken(allowOpenParen, tok)) return 0; Vector nics; NCVector > inits; const Identifier *contentsId = 0; unsigned allowed = (allowOpenParen|allowCloseParen|allowIdentifier|allowHashContents); for (;;) { if (!getToken(allowed, tok)) return 0; if (tok == tokenCloseParen) break; switch (tok) { case tokenHashContents: if (!getToken(allowIdentifier, tok)) return 0; contentsId = lookup(currentToken_); allowed = allowCloseParen; break; case tokenIdentifier: nics.push_back(lookup(currentToken_)); break; case tokenOpenParen: { if (!getToken(allowIdentifier, tok)) return 0; nics.push_back(lookup(currentToken_)); inits.resize(nics.size()); Identifier::SyntacticKey key; if (!parseExpression(0, inits.back(), key, tok)) return 0; if (!getToken(allowCloseParen, tok)) return 0; } break; default: CANNOT_HAPPEN(); } } // We could allow sequence which is appended together here. Owner body; Identifier::SyntacticKey key; if (!parseExpression(0, body, key, tok)) return 0; if (!getToken(allowCloseParen, tok)) return 0; Location defLoc; unsigned defPart; if (ident->inheritedCDefined(defPart, defLoc) && defPart <= interp_->currentPartIndex()) { if (defPart == interp_->currentPartIndex()) { interp_->setNextLocation(loc); interp_->message(InterpreterMessages::duplicateFlowObjectClass, StringMessageArg(ident->name()), defLoc); } } else { MacroFlowObj *flowObj = new (*interp_) MacroFlowObj(nics, inits, contentsId, body); interp_->makePermanent(flowObj); ident->setFlowObj(flowObj); } return 1; } bool SchemeParser::doDeclareClassAttribute() { Token tok; if (!getToken(allowString|allowIdentifier, tok)) return 0; interp_->addClassAttributeName(currentToken_); if (!getToken(allowCloseParen, tok)) return 0; return 1; } bool SchemeParser::doDeclareIdAttribute() { Token tok; if (!getToken(allowString|allowIdentifier, tok)) return 0; interp_->addIdAttributeName(currentToken_); if (!getToken(allowCloseParen, tok)) return 0; return 1; } bool SchemeParser::doDefine() { Location loc(in_->currentLocation()); Token tok; if (!getToken(allowOpenParen|allowIdentifier, tok)) return 0; Vector formals; bool isProcedure; if (tok == tokenOpenParen) { if (!getToken(allowIdentifier, tok)) return 0; isProcedure = 1; } else isProcedure = 0; Identifier *ident = lookup(currentToken_); Identifier::SyntacticKey key; if (ident->syntacticKey(key) && key <= int(Identifier::lastSyntacticKey)) message(InterpreterMessages::syntacticKeywordAsVariable, StringMessageArg(currentToken_)); NCVector > inits; int nOptional; int nKey; bool hasRest; if (isProcedure && !parseFormals(formals, inits, nOptional, hasRest, nKey)) return 0; Owner expr; if (isProcedure) { if (!parseBegin(expr)) return 0; } else { if (!parseExpression(0, expr, key, tok)) return 0; if (!getToken(allowCloseParen, tok)) return 0; } if (isProcedure) expr = new LambdaExpression(formals, inits, nOptional, hasRest, nKey, expr, loc); Location defLoc; unsigned defPart; if (ident->defined(defPart, defLoc) && defPart <= interp_->currentPartIndex()) { if (defPart == interp_->currentPartIndex()) message(InterpreterMessages::duplicateDefinition, StringMessageArg(ident->name()), defLoc); } else ident->setDefinition(expr, interp_->currentPartIndex(), loc); return 1; } bool SchemeParser::doDefineUnit() { Location loc(in_->currentLocation()); Token tok; if (!getToken(allowIdentifier, tok)) return 0; Unit *unit = interp_->lookupUnit(currentToken_); Owner expr; Identifier::SyntacticKey key; if (!parseExpression(0, expr, key, tok)) return 0; if (!getToken(allowCloseParen, tok)) return 0; Location defLoc; unsigned defPart; if (unit->defined(defPart, defLoc) && defPart <= interp_->currentPartIndex()) { if (defPart == interp_->currentPartIndex()) message(InterpreterMessages::duplicateUnitDefinition, StringMessageArg(unit->name()), defLoc); } else unit->setDefinition(expr, interp_->currentPartIndex(), loc); return 1; } bool SchemeParser::skipForm() { static const unsigned allow = (~0 & ~allowEndOfEntity); unsigned level = 0; for (;;) { Token tok; if (!getToken(allow, tok)) break; switch (tok) { case tokenOpenParen: level++; break; case tokenCloseParen: if (level == 0) return 1; level--; break; default: break; } } return 0; } bool SchemeParser::parseExpression(unsigned allowed, Owner &expr, Identifier::SyntacticKey &key, Token &tok) { expr.clear(); key = Identifier::notKey; ELObj *obj; if (!parseSelfEvaluating(allowed, obj, tok)) return 0; if (obj) { interp_->makePermanent(obj); expr = new ConstantExpression(obj, in_->currentLocation()); return 1; } switch (tok) { case tokenQuote: { Location loc; if (!parseDatum(0, obj, loc, tok)) return 0; interp_->makePermanent(obj); expr = new ConstantExpression(obj, loc); break; } case tokenQuasiquote: { bool spliced; return parseQuasiquoteTemplate(0, 0, expr, key, tok, spliced); } case tokenOpenParen: { Location loc(in_->currentLocation()); if (!parseExpression(allowExpressionKey, expr, key, tok)) return 0; if (expr) { NCVector > args; for (;;) { args.resize(args.size() + 1); if (!parseExpression(allowCloseParen, args.back(), key, tok)) return 0; if (!args.back()) { args.resize(args.size() - 1); break; } } expr = new CallExpression(expr, args, loc); } else { switch (key) { case Identifier::keyQuote: return parseQuote(expr); case Identifier::keyLambda: return parseLambda(expr); case Identifier::keyIf: return parseIf(expr); case Identifier::keyCond: return parseCond(expr); case Identifier::keyAnd: return parseAnd(expr); case Identifier::keyOr: return parseOr(expr); case Identifier::keyCase: return parseCase(expr); case Identifier::keyLet: return parseLet(expr); case Identifier::keyLetStar: return parseLetStar(expr); case Identifier::keyLetrec: return parseLetrec(expr); case Identifier::keyMake: return parseMake(expr); case Identifier::keyStyle: return parseStyle(expr); case Identifier::keyWithMode: return parseWithMode(expr); case Identifier::keyQuasiquote: return parseQuasiquote(expr); case Identifier::keySet: return parseSet(expr); case Identifier::keyBegin: return parseBegin(expr); default: CANNOT_HAPPEN(); } } break; } case tokenIdentifier: { const Identifier *ident = lookup(currentToken_); if (ident->syntacticKey(key) && key <= int(Identifier::lastSyntacticKey)) { switch (key) { case Identifier::keyDefine: if (allowed & allowKeyDefine) return 1; break; case Identifier::keyArrow: if (allowed & allowKeyArrow) return 1; break; case Identifier::keyElse: if (allowed & allowKeyElse) return 1; break; case Identifier::keyUnquote: case Identifier::keyUnquoteSplicing: break; default: if (allowed & allowExpressionKey) return 1; break; } message(InterpreterMessages::syntacticKeywordAsVariable, StringMessageArg(currentToken_)); } expr = new VariableExpression(ident, in_->currentLocation()); } break; default: break; } return 1; } bool SchemeParser::parseQuote(Owner &expr) { Token tok; Location loc; ELObj *obj; if (!parseDatum(0, obj, loc, tok)) return 0; if (!getToken(allowCloseParen, tok)) return 0; interp_->makePermanent(obj); expr = new ConstantExpression(obj, loc); return 1; } bool SchemeParser::parseQuasiquote(Owner &expr) { bool spliced; Token tok; Identifier::SyntacticKey key; if (!parseQuasiquoteTemplate(0, 0, expr, key, tok, spliced)) return 0; return getToken(allowCloseParen, tok); } bool SchemeParser::parseQuasiquoteTemplate(unsigned level, unsigned allowed, Owner &expr, Identifier::SyntacticKey &key, Token &tok, bool &spliced) { key = Identifier::notKey; spliced = 0; ELObj *obj; if (!parseSelfEvaluating(allowed|allowUnquote|allowVector, obj, tok)) return 0; switch (tok) { case tokenQuasiquote: if (!parseQuasiquoteTemplate(level + 1, 0, expr, key, tok, spliced)) return 0; createQuasiquoteAbbreviation("quasiquote", expr); break; case tokenQuote: if (!parseQuasiquoteTemplate(level, 0, expr, key, tok, spliced)) break; createQuasiquoteAbbreviation("quote", expr); break; case tokenUnquote: case tokenUnquoteSplicing: if (level == 0) { spliced = (tok == tokenUnquoteSplicing); if (!parseExpression(0, expr, key, tok)) return 0; } else { Token tem; if (!parseQuasiquoteTemplate(level - 1, 0, expr, key, tem, spliced)) break; createQuasiquoteAbbreviation(tok == tokenUnquote ? "unquote" : "unquote-splicing", expr); } break; case tokenOpenParen: case tokenVector: { QuasiquoteExpression::Type type = (tok == tokenVector ? QuasiquoteExpression::vectorType : QuasiquoteExpression::listType); Location loc(in_->currentLocation()); NCVector > exprs(1); Vector exprsSpliced; bool temSpliced; if (!parseQuasiquoteTemplate(level, allowCloseParen|allowQuasiquoteKey|allowUnquoteSplicing, exprs[0], key, tok, temSpliced)) return 0; if (!exprs[0]) { switch (key) { case Identifier::keyQuasiquote: if (!parseQuasiquoteTemplate(level + 1, 0, expr, key, tok, spliced)) return 0; createQuasiquoteAbbreviation("quasiquotation", expr); break; case Identifier::keyUnquoteSplicing: spliced = 1; // fall through case Identifier::keyUnquote: if (level == 0) { if (!parseExpression(0, expr, key, tok)) return 0; } else { if (!parseQuasiquoteTemplate(level - 1, 0, expr, key, tok, temSpliced)) return 0; createQuasiquoteAbbreviation(spliced ? "unquote-splicing" : "unquote", expr); spliced = 0; } break; default: expr = new ConstantExpression(interp_->makeNil(), loc); return 1; } return getToken(allowCloseParen, tok); } exprsSpliced.push_back(PackedBoolean(temSpliced)); for (;;) { Owner tem; if (!parseQuasiquoteTemplate(level, allowCloseParen|allowUnquoteSplicing |(type == QuasiquoteExpression::vectorType ? 0 : allowPeriod), tem, key, tok, temSpliced)) return 0; if (!tem) { if (tok == tokenCloseParen) break; exprs.resize(exprs.size() + 1); type = QuasiquoteExpression::improperType; if (!parseQuasiquoteTemplate(level, 0, exprs.back(), key, tok, temSpliced)) return 0; if (!getToken(allowCloseParen, tok)) return 0; exprsSpliced.push_back(0); break; } exprs.resize(exprs.size() + 1); exprs.back().swap(tem); exprsSpliced.push_back(PackedBoolean(temSpliced)); } expr = new QuasiquoteExpression(exprs, exprsSpliced, type, loc); } break; case tokenIdentifier: if (allowed & allowQuasiquoteKey) { const Identifier *ident = lookup(currentToken_); if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyUnquoteSplicing: case Identifier::keyUnquote: case Identifier::keyQuasiquote: return 1; default: break; } } } obj = interp_->makeSymbol(currentToken_); // fall through default: if (obj) { interp_->makePermanent(obj); expr = new ConstantExpression(obj, in_->currentLocation()); } break; } return 1; } void SchemeParser::createQuasiquoteAbbreviation(const char *sym, Owner &expr) { Location loc(expr->location()); NCVector > v(2); v[1].swap(expr); v[0] = new ConstantExpression(interp_->makeSymbol(Interpreter::makeStringC(sym)), loc); Vector spliced; spliced.push_back(0); spliced.push_back(0); expr = new QuasiquoteExpression(v, spliced, QuasiquoteExpression::listType, loc); } bool SchemeParser::parseIf(Owner &expr) { Location loc(in_->currentLocation()); Owner expr0, expr1, expr2; Token tok; Identifier::SyntacticKey key; if (!parseExpression(0, expr0, key, tok) || !parseExpression(0, expr1, key, tok) || !parseExpression(dsssl2() ? allowCloseParen : 0, expr2, key, tok)) return 0; if (!expr2) expr2 = new ConstantExpression(interp_->makeUnspecified(), in_->currentLocation()); else if (!getToken(allowCloseParen, tok)) return 0; expr = new IfExpression(expr0, expr1, expr2, loc); return 1; } bool SchemeParser::parseCond(Owner &expr, bool opt) { Location loc(in_->currentLocation()); Token tok; if (!getToken(allowOpenParen|(opt ? unsigned(allowCloseParen) : 0), tok)) return 0; if (tok == tokenCloseParen) { if (dsssl2()) expr = new ConstantExpression(interp_->makeUnspecified(), loc); else expr = new CondFailExpression(loc); return 1; } Identifier::SyntacticKey key; Owner testExpr; if (!parseExpression(allowKeyElse, testExpr, key, tok)) return 0; if (!testExpr) { if (!parseBegin(expr)) return 0; return getToken(allowCloseParen, tok); } NCVector > valExprs; for (;;) { Owner tem; if (!parseExpression(allowCloseParen, tem, key, tok)) return 0; if (!tem) break; valExprs.resize(valExprs.size() + 1); tem.swap(valExprs.back()); } Owner valExpr; if (valExprs.size() == 1) valExprs[0].swap(valExpr); else if (valExprs.size()) valExpr = new SequenceExpression(valExprs, valExprs[0]->location()); Owner elseExpr; if (!parseCond(elseExpr, 1)) return 0; if (valExpr) expr = new IfExpression(testExpr, valExpr, elseExpr, loc); else expr = new OrExpression(testExpr, elseExpr, loc); return 1; } bool SchemeParser::parseCase(Owner &expr) { Owner keyExpr; Owner elseClause; NCVector cases; Location loc(in_->currentLocation()); Token tok; Identifier::SyntacticKey key; if (!parseExpression(0, keyExpr, key, tok)) return 0; for (;;) { if (!getToken(allowOpenParen |(cases.size() ? unsigned(allowCloseParen) : 0), tok)) return 0; if (tok == tokenCloseParen) break; if (!getToken(allowOpenParen|allowIdentifier, tok)) return 0; if (tok == tokenOpenParen) { cases.resize(cases.size() + 1); Location loc; for (;;) { ELObj *obj; if (!parseDatum(allowCloseParen, obj, loc, tok)) return 0; if (tok == tokenCloseParen) break; interp_->makePermanent(obj); cases.back().datums.push_back(obj); } if (!parseBegin(cases.back().expr)) return 0; } else { const Identifier *ident = lookup(currentToken_); if (ident->syntacticKey(key) && key == Identifier::keyElse) { if (!parseBegin(elseClause)) return 0; if (!getToken(allowCloseParen, tok)) return 0; break; } else { message(InterpreterMessages::caseElse, StringMessageArg(currentToken_)); return 0; } } } if (dsssl2() && !elseClause) elseClause = new ConstantExpression(interp_->makeUnspecified(), loc); expr = new CaseExpression(keyExpr, cases, elseClause, loc); return 1; } bool SchemeParser::parseOr(Owner &expr) { Location loc(in_->currentLocation()); Token tok; Identifier::SyntacticKey key; Owner test1Expr; if (!parseExpression(allowCloseParen, test1Expr, key, tok)) return 0; if (!test1Expr) { expr = new ConstantExpression(interp_->makeFalse(), loc); return 1; } Owner test2Expr; if (!parseOr(test2Expr)) return 0; expr = new OrExpression(test1Expr, test2Expr, loc); return 1; } bool SchemeParser::parseAnd(Owner &expr, bool opt) { Location loc(in_->currentLocation()); Token tok; Identifier::SyntacticKey key; Owner testExpr; if (!parseExpression(allowCloseParen, testExpr, key, tok)) return 0; if (!testExpr) { if (!opt) expr = new ConstantExpression(interp_->makeTrue(), loc); return 1; } Owner restExpr; if (!parseAnd(restExpr, 1)) return 0; if (!restExpr) testExpr.swap(expr); else { // This relies on the fact that #f is the only false value. Owner falseExpr(new ConstantExpression(interp_->makeFalse(), loc)); expr = new IfExpression(testExpr, restExpr, falseExpr, loc); } return 1; } bool SchemeParser::parseBegin(Owner &expr) { Location loc(in_->currentLocation()); Token tok; Identifier::SyntacticKey key; if (!parseExpression(0, expr, key, tok)) return 0; if (dsssl2()) { NCVector > exprs; for (size_t i = 1;; i++) { Owner tem; if (!parseExpression(allowCloseParen, tem, key, tok)) return 0; if (!tem) break; exprs.resize(i + 1); tem.swap(exprs[i]); } if (exprs.size()) { expr.swap(exprs[0]); expr = new SequenceExpression(exprs, loc); } return 1; } else return getToken(allowCloseParen, tok); } bool SchemeParser::parseSet(Owner &expr) { Location loc(in_->currentLocation()); Token tok; if (!getToken(allowIdentifier, tok)) return 0; const Identifier *var = lookup(currentToken_); Identifier::SyntacticKey key; Owner value; if (!parseExpression(0, value, key, tok)) return 0; if (!getToken(allowCloseParen, tok)) return 0; expr = new AssignmentExpression(var, value, loc); return 1; } bool SchemeParser::parseWithMode(Owner &expr) { Location loc(in_->currentLocation()); Token tok; if (!getToken(allowIdentifier|allowFalse, tok)) return 0; const ProcessingMode *mode; if (tok == tokenFalse) mode = interp_->initialProcessingMode(); else mode = interp_->lookupProcessingMode(currentToken_); Owner content; Identifier::SyntacticKey key; if (!parseExpression(0, content, key, tok)) return 0; if (!getToken(allowCloseParen, tok)) return 0; expr = new WithModeExpression(mode, content, loc); return 1; } bool SchemeParser::parseMake(Owner &expr) { Location loc(in_->currentLocation()); Token tok; if (!getToken(allowIdentifier, tok)) return 0; const Identifier *foc = lookup(currentToken_); NCVector > exprs; Vector keys; for (;;) { Owner tem; Identifier::SyntacticKey key; if (!parseExpression(allowCloseParen, tem, key, tok)) return 0; if (!tem) break; // FIXME check for duplicates if (keys.size() == exprs.size()) { const Identifier *k = tem->keyword(); if (k) { keys.push_back(k); tem.clear(); if (!parseExpression(0, tem, key, tok)) return 0; } } exprs.resize(exprs.size() + 1); tem.swap(exprs.back()); } expr = new MakeExpression(foc, keys, exprs, loc); return 1; } bool SchemeParser::parseStyle(Owner &expr) { Location loc(in_->currentLocation()); NCVector > exprs; Vector keys; for (;;) { Token tok; if (!getToken(allowKeyword|allowCloseParen, tok)) return 0; if (tok == tokenCloseParen) break; keys.resize(keys.size() + 1); keys.back() = lookup(currentToken_); exprs.resize(exprs.size() + 1); Identifier::SyntacticKey key; if (!parseExpression(0, exprs.back(), key, tok)) return 0; } expr = new StyleExpression(keys, exprs, loc); return 1; } bool SchemeParser::parseLambda(Owner &expr) { Location loc(in_->currentLocation()); Token tok; if (!getToken(allowOpenParen, tok)) return 0; Vector formals; NCVector > inits; int nOptional; int nKey; bool hasRest; if (!parseFormals(formals, inits, nOptional, hasRest, nKey)) return 0; Owner body; if (!parseBegin(body)) return 0; expr = new LambdaExpression(formals, inits, nOptional, hasRest, nKey, body, loc); return 1; } // The rest arg is put last. bool SchemeParser::parseFormals(Vector &formals, NCVector > &inits, int &nOptional, bool &hasRest, int &nKey) { Token tok; enum FormalType { required, optional, rest, key } type = required; unsigned allowed = (allowCloseParen|allowIdentifier |allowHashOptional|allowHashRest|allowHashKey); int argCount[4]; for (int i = 0; i < 4; i++) argCount[i] = 0; for (;;) { if (!getToken(allowed, tok)) return 0; switch (tok) { case tokenHashOptional: allowed |= allowOpenParen; allowed &= ~allowHashOptional; type = optional; break; case tokenHashRest: allowed = allowIdentifier; type = rest; break; case tokenHashKey: allowed = (allowOpenParen|allowCloseParen|allowIdentifier); type = key; break; case tokenOpenParen: { if (!getToken(allowIdentifier, tok)) return 0; argCount[type]++; formals.push_back(lookup(currentToken_)); inits.resize(argCount[optional] + argCount[key]); Identifier::SyntacticKey key; if (!parseExpression(0, inits.back(), key, tok)) return 0; if (!getToken(allowCloseParen, tok)) return 0; } break; case tokenIdentifier: { formals.push_back(lookup(currentToken_)); argCount[type]++; if (type == rest) allowed = (allowHashKey|allowCloseParen); } break; case tokenCloseParen: goto done; default: CANNOT_HAPPEN(); } } done: nOptional = argCount[optional]; nKey = argCount[key]; inits.resize(nOptional + nKey); hasRest = argCount[rest]; return 1; } bool SchemeParser::parseLet(Owner &expr) { Location loc(in_->currentLocation()); Token tok; if (!getToken(allowOpenParen|allowIdentifier, tok)) return 0; Vector vars; NCVector > inits; Owner body; const Identifier *name; if (tok == tokenOpenParen) { name = 0; if (!parseBindingsAndBody1(vars, inits, body)) return 0; } else { name = lookup(currentToken_); if (!parseBindingsAndBody(vars, inits, body)) return 0; } if (name) { // Named let NCVector > loopInit(1); NCVector > argsInit; loopInit[0] = new LambdaExpression(vars, argsInit, 0, 0, 0, body, loc); Vector loopFormal(1); loopFormal[0] = name; expr = new VariableExpression(name, loc); expr = new LetrecExpression(loopFormal, loopInit, expr, loc); expr = new CallExpression(expr, inits, loc); } else expr = new LetExpression(vars, inits, body, loc); return 1; } bool SchemeParser::parseLetStar(Owner &expr) { Location loc(in_->currentLocation()); Vector vars; NCVector > inits; Owner body; if (!parseBindingsAndBody(vars, inits, body)) return 0; expr = new LetStarExpression(vars, inits, body, loc); return 1; } bool SchemeParser::parseLetrec(Owner &expr) { Location loc(in_->currentLocation()); Vector vars; NCVector > inits; Owner body; if (!parseBindingsAndBody(vars, inits, body)) return 0; expr = new LetrecExpression(vars, inits, body, loc); return 1; } bool SchemeParser::parseBindingsAndBody(Vector &vars, NCVector > &inits, Owner &body) { Token tok; if (!getToken(allowOpenParen, tok)) return 0; return parseBindingsAndBody1(vars, inits, body); } bool SchemeParser::parseBindingsAndBody1(Vector &vars, NCVector > &inits, Owner &body) { Token tok; Identifier::SyntacticKey key; for (;;) { if (!getToken(allowCloseParen|allowOpenParen, tok)) return 0; if (tok == tokenCloseParen) break; if (!getToken(allowIdentifier, tok)) return 0; vars.push_back(lookup(currentToken_)); inits.resize(inits.size() + 1); if (!parseExpression(0, inits.back(), key, tok)) return 0; if (!getToken(allowCloseParen, tok)) return 0; } return parseBegin(body); } bool SchemeParser::parseDatum(unsigned otherAllowed, ELObj *&result, Location &loc, Token &tok) { if (!parseSelfEvaluating(otherAllowed|allowVector|allowUnquote|allowUnquoteSplicing, result, tok)) return 0; loc = in_->currentLocation(); if (result) return 1; switch (tok) { case tokenIdentifier: result = interp_->makeSymbol(currentToken_); break; case tokenQuote: return parseAbbreviation("quote", result); case tokenQuasiquote: return parseAbbreviation("quasiquote", result); case tokenUnquote: return parseAbbreviation("unquote", result); case tokenUnquoteSplicing: return parseAbbreviation("unquote-splicing", result); case tokenOpenParen: { ELObj *tem; Location ignore; if (!parseDatum(allowCloseParen, tem, ignore, tok)) return 0; if (!tem) { result = interp_->makeNil(); break; } ELObjDynamicRoot list(*interp_, tem); PairObj *last = new (*interp_) PairObj(tem, 0); list = last; for (;;) { if (!parseDatum(allowCloseParen|allowPeriod, tem, ignore, tok)) return 0; if (!tem) { if (tok == tokenCloseParen) { last->setCdr(interp_->makeNil()); break; } if (!parseDatum(0, tem, ignore, tok)) return 0; last->setCdr(tem); if (!getToken(allowCloseParen, tok)) return 0; break; } last->setCdr(tem); // to protect it PairObj *p = new (*interp_) PairObj(tem, 0); last->setCdr(p); last = p; } result = list; } break; case tokenVector: { VectorObj *v = new (*interp_) VectorObj; ELObjDynamicRoot protect(*interp_, v); Vector &vec = *v; Location ignore; for (;;) { ELObj *tem; if (!parseDatum(allowCloseParen, tem, ignore, tok)) return 0; if (!tem) break; vec.push_back(tem); } result = v; } break; default: break; } return 1; } bool SchemeParser::parseSelfEvaluating(unsigned otherAllowed, ELObj *&result, Token &tok) { if (!getToken(allowExpr|otherAllowed, tok)) return 0; switch (tok) { case tokenTrue: result = interp_->makeTrue(); break; case tokenFalse: result = interp_->makeFalse(); break; case tokenVoid: result = interp_->makeUnspecified(); break; case tokenString: result = new (*interp_) StringObj(currentToken_); break; case tokenKeyword: result = interp_->makeKeyword(currentToken_); break; case tokenChar: result = interp_->makeChar(currentToken_[0]); break; case tokenNumber: result = interp_->convertNumber(currentToken_); if (!result) { message(InterpreterMessages::invalidNumber, StringMessageArg(currentToken_)); result = interp_->makeError(); } break; case tokenGlyphId: result = convertAfiiGlyphId(currentToken_); break; default: result = 0; break; } return 1; } bool SchemeParser::parseAbbreviation(const char *sym, ELObj *&result) { SymbolObj *quoteSym = interp_->makeSymbol(Interpreter::makeStringC(sym)); ELObj *obj; Location ignore; Token tok; if (!parseDatum(0, obj, ignore, tok)) return 0; ELObjDynamicRoot protect(*interp_, obj); protect = new (*interp_) PairObj(protect, interp_->makeNil()); result = interp_->makePair(quoteSym, protect); return 1; } bool SchemeParser::getToken(unsigned allowed, Token &tok) { InputSource *in = in_.pointer(); for (;;) { in->startToken(); Xchar c = in->tokenChar(*this); switch (c) { case InputSource::eE: if (!(allowed & allowEndOfEntity)) return tokenRecover(allowed, tok); tok = tokenEndOfEntity; return 1; case '(': if (!(allowed & allowOpenParen)) return tokenRecover(allowed, tok); tok = tokenOpenParen; return 1; case ')': if (!(allowed & allowCloseParen)) return tokenRecover(allowed, tok); tok = tokenCloseParen; return 1; case '\'': if (!(allowed & allowOtherExpr)) return tokenRecover(allowed, tok); tok = tokenQuote; return 1; case '`': if (!(allowed & allowOtherExpr)) return tokenRecover(allowed, tok); tok = tokenQuasiquote; return 1; case ',': c = in->tokenChar(*this); if (c == '@') { if (!(allowed & allowUnquoteSplicing)) return tokenRecover(allowed, tok); tok = tokenUnquoteSplicing; } else { if (!(allowed & allowUnquote)) return tokenRecover(allowed, tok); tok = tokenUnquote; in->endToken(1); } return 1; case ' ': case '\r': case '\n': case '\t': case '\f': // whitespace break; case '#': c = in->tokenChar(*this); switch (c) { case 't': if (!(allowed & allowOtherExpr)) return tokenRecover(allowed, tok); tok = tokenTrue; return 1; case 'f': if (!(allowed & allowFalse)) return tokenRecover(allowed, tok); tok = tokenFalse; return 1; case '\\': { c = in->tokenChar(*this); if (c == InputSource::eE) { message(InterpreterMessages::unexpectedEof); if (allowed & allowEndOfEntity) { tok = tokenEndOfEntity; return 1; } return 0; } if (!(allowed & allowOtherExpr)) { extendToken(); return tokenRecover(allowed, tok); } in->discardInitial(); extendToken(); tok = tokenChar; if (in->currentTokenLength() == 1) { currentToken_.assign(in->currentTokenStart(), 1); } else { StringC tem(in->currentTokenStart(), in->currentTokenLength()); currentToken_.resize(1); if (!interp_->convertCharName(tem, currentToken_[0])) { message(InterpreterMessages::unknownCharName, StringMessageArg(tem)); currentToken_[0] = defaultChar; } } return 1; } case '!': { extendToken(); StringC tem(in->currentTokenStart() + 2, in->currentTokenLength() - 2); if (tem == Interpreter::makeStringC("optional")) { if (!(allowed & allowHashOptional)) return tokenRecover(allowed, tok); tok = tokenHashOptional; return 1; } if (tem == Interpreter::makeStringC("key")) { if (!(allowed & allowHashKey)) return tokenRecover(allowed, tok); tok = tokenHashKey; return 1; } if (tem == Interpreter::makeStringC("rest")) { if (!(allowed & allowHashRest)) return tokenRecover(allowed, tok); tok = tokenHashRest; return 1; } if (tem == Interpreter::makeStringC("contents")) { if (!(allowed & allowHashContents)) return tokenRecover(allowed, tok); tok = tokenHashContents; return 1; } message(InterpreterMessages::unknownNamedConstant, StringMessageArg(tem)); break; } case 'b': case 'o': case 'x': case 'd': extendToken(); if (!(allowed & allowOtherExpr)) return tokenRecover(allowed, tok); tok = tokenNumber; currentToken_.assign(in->currentTokenStart(), in->currentTokenLength()); return 1; case 'A': extendToken(); if (!(allowed & allowOtherExpr)) return tokenRecover(allowed, tok); tok = tokenGlyphId; currentToken_.assign(in->currentTokenStart() + 2, in->currentTokenLength() - 2); return 1; case InputSource::eE: message(InterpreterMessages::unexpectedEof); if (allowed & allowEndOfEntity) { tok = tokenEndOfEntity; return 1; } return 0; case 'v': if (dsssl2()) { if (!(allowed & allowOtherExpr)) return tokenRecover(allowed, tok); tok = tokenVoid; return 1; } // fall through case '(': if (dsssl2()) { if (!(allowed & allowVector)) return tokenRecover(allowed, tok); tok = tokenVector; return 1; } //fall through default: message(InterpreterMessages::unknownHash); break; } break; case '"': if (!(allowed & allowString)) return tokenRecover(allowed, tok); return scanString(allowed, tok); case ';': skipComment(); break; default: if (c < ' ') { // ignore it message(InterpreterMessages::invalidChar); break; } extendToken(); if (tokenIsNumber()) { if (!(allowed & allowOtherExpr)) return tokenRecover(allowed, tok); tok = tokenNumber; currentToken_.assign(in->currentTokenStart(), in->currentTokenLength()); return 1; } else if (in_->currentTokenEnd()[-1] == ':') { if (!(allowed & allowKeyword)) return tokenRecover(allowed, tok); currentToken_.assign(in->currentTokenStart(), in->currentTokenLength() - 1); tok = tokenKeyword; return 1; } else if (*in->currentTokenStart() == '.' && in->currentTokenLength() == 1) { if (!(allowed & allowPeriod)) return tokenRecover(allowed, tok); tok = tokenPeriod; return 1; } else { if (!(allowed & allowIdentifier)) return tokenRecover(allowed, tok); currentToken_.assign(in->currentTokenStart(), in->currentTokenLength()); #if 0 if (!isValidIdentifier(currentToken_)) message(); #endif tok = tokenIdentifier; return 1; } } } } bool SchemeParser::tokenRecover(unsigned allowed, Token &tok) { if (allowed == allowCloseParen) { in_->ungetToken(); tok = tokenCloseParen; message(InterpreterMessages::missingCloseParen); return 1; } if (in_->currentTokenLength() == 0) message(InterpreterMessages::unexpectedEof); else message(InterpreterMessages::unexpectedToken, StringMessageArg(StringC(in_->currentTokenStart(), in_->currentTokenLength()))); return 0; } bool SchemeParser::tokenIsNumber() { switch (*in_->currentTokenStart()) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return 1; case '+': case '-': return in_->currentTokenLength() > 1; case '.': if (in_->currentTokenLength() == 1 || (in_->currentTokenLength() == 3 && in_->currentTokenStart()[1] == '.' && in_->currentTokenStart()[2] == '.')) return 0; return 1; } return 0; } void SchemeParser::extendToken() { // extend to a delimiter InputSource *in = in_.pointer(); size_t length = in->currentTokenLength(); while (!isDelimiter(in->tokenChar(*this))) length++; in->endToken(length); } bool SchemeParser::isDelimiter(Xchar c) { switch (c) { case InputSource::eE: case '(': case ')': case '"': case ';': case ' ': case '\t': case '\f': case '\r': case '\n': return 1; default: if (c < ' ') { // FIXME check not added name character return 1; } } // FIXME return 1 if added white space char return 0; } bool SchemeParser::scanString(unsigned allowed, Token &tok) { InputSource *in = in_.pointer(); currentToken_.resize(0); for (;;) { Xchar c = in->tokenChar(*this); switch (c) { case InputSource::eE: message(InterpreterMessages::unterminatedString); in->endToken(1); return 0; case '"': tok = tokenString; return 1; case '\\': c = in->tokenChar(*this); if (c == '\\' || c == '"') currentToken_ += c; else if (c == InputSource::eE) break; else { StringC name; name += c; while (interp_->lexCategory(c = in->tokenChar(*this)) < Interpreter::lexDelimiter) name += c; if (c != ';') in->endToken(in->currentTokenLength() - 1); Char ch; if (interp_->convertCharName(name, ch)) currentToken_ += ch; else message(InterpreterMessages::unknownCharName, StringMessageArg(name)); } break; default: currentToken_ += c; break; } } return 0; // not reached } void SchemeParser::skipComment() { for (;;) { Xchar c = in_->get(*this); if (c == InputSource::eE || c == '\r') break; } } ELObj *SchemeParser::convertAfiiGlyphId(const StringC &str) { unsigned long n = 0; for (size_t i = 0; i < str.size(); i++) { if (str[i] < '0' || str[i] > '9') { n = 0; break; } // FIXME check for overflow n = n*10 + (str[i] - '0'); } if (n == 0) { message(InterpreterMessages::invalidAfiiGlyphId, StringMessageArg(str)); return 0; } return new (*interp_) GlyphIdObj(FOTBuilder::GlyphId(afiiPublicId_, n)); } void SchemeParser::dispatchMessage(Message &msg) { interp_->dispatchMessage(msg); } void SchemeParser::dispatchMessage(const Message &msg) { interp_->dispatchMessage(msg); } void SchemeParser::initMessage(Message &msg) { if (in_) msg.loc = in_->currentLocation(); } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/Style.cxx100444 764 764 25354 6606574462 13237 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "Style.h" #include "VM.h" #include "Interpreter.h" #include "InterpreterMessages.h" #include "SosofoObj.h" #include "macros.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif StyleStack::StyleStack() : level_(0) { } void StyleStack::pushContinue(StyleObj *style, const ProcessingMode::Rule *rule, const NodePtr &nodePtr, Messenger *mgr) { StyleObjIter iter; style->appendIter(iter); for (;;) { const VarStyleObj *varStyle; ConstPtr spec(iter.next(varStyle)); if (spec.isNull()) break; size_t ind = spec->index(); if (ind >= inheritedCInfo_.size()) inheritedCInfo_.resize(ind + 1); Ptr &info = inheritedCInfo_[ind]; if (!info.isNull() && info->valLevel == level_) { if (rule) { ASSERT(info->rule != 0); if (rule->compareSpecificity(*info->rule) == 0) { mgr->setNextLocation(info->rule->location()); mgr->message(InterpreterMessages::ambiguousStyle, StringMessageArg(info->spec->identifier()->name()), rule->location()); } } } else { popList_->list.push_back(ind); info = new InheritedCInfo(spec, varStyle, level_, level_, rule, info); } } } void StyleStack::pushEnd(VM &vm, FOTBuilder &fotb) { const PopList *oldPopList = popList_->prev.pointer(); if (oldPopList) { for (size_t i = 0; i < oldPopList->dependingList.size(); i++) { size_t d = oldPopList->dependingList[i]; // d is the index of a characteristic that depends on the actual // value of another characteritistic if (inheritedCInfo_[d]->valLevel != level_) { const Vector &dependencies = inheritedCInfo_[d]->dependencies; bool changed = 0; for (size_t j = 0; j < dependencies.size(); j++) { const InheritedCInfo *p = inheritedCInfo_[dependencies[j]].pointer(); if (p && p->valLevel == level_) { inheritedCInfo_[d] = new InheritedCInfo(inheritedCInfo_[d]->spec, inheritedCInfo_[d]->style, level_, inheritedCInfo_[d]->specLevel, inheritedCInfo_[d]->rule, inheritedCInfo_[d]); popList_->list.push_back(d); changed = 1; break; } } // If it changed, then doing set() on the new value will add // it to the dependingList for this level. if (!changed) popList_->dependingList.push_back(d); } } } vm.styleStack = this; for (size_t i = 0; i < popList_->list.size(); i++) { InheritedCInfo &info = *inheritedCInfo_[popList_->list[i]]; vm.specLevel = info.specLevel; info.spec->set(vm, info.style, fotb, info.cachedValue, info.dependencies); if (info.dependencies.size()) popList_->dependingList.push_back(popList_->list[i]); } vm.styleStack = 0; } void StyleStack::pop() { for (size_t i = 0; i < popList_->list.size(); i++) { size_t ind = popList_->list[i]; ASSERT(inheritedCInfo_[ind]->valLevel == level_); Ptr tem(inheritedCInfo_[ind]->prev); inheritedCInfo_[ind] = tem; } level_--; Ptr tem(popList_->prev); popList_ = tem; } ELObj *StyleStack::inherited(const ConstPtr &ic, unsigned specLevel, Interpreter &interp, Vector &dependencies) { ASSERT(specLevel != unsigned(-1)); size_t ind = ic->index(); ConstPtr spec; const VarStyleObj *style = 0; unsigned newSpecLevel = unsigned(-1); if (ind >= inheritedCInfo_.size()) spec = ic; else { const InheritedCInfo *p = inheritedCInfo_[ind].pointer(); while (p != 0) { if (p->specLevel < specLevel) break; p = p->prev.pointer(); } if (!p) spec = ic; else { if (p->cachedValue) { // We can only use the cached value if none of the values // we depended on changed since we computed it. bool cacheOk = 1; for (size_t i = 0; i < p->dependencies.size(); i++) { size_t d = p->dependencies[i]; if (d < inheritedCInfo_.size() && inheritedCInfo_[d]->valLevel > p->valLevel) { cacheOk = 0; break; } } if (cacheOk) return p->cachedValue; } style = p->style; spec = p->spec; newSpecLevel = p->specLevel; } } VM vm(interp); vm.styleStack = this; vm.specLevel = newSpecLevel; return spec->value(vm, style, dependencies); } ELObj *StyleStack::actual(const ConstPtr &ic, const Location &loc, Interpreter &interp, Vector &dependencies) { size_t ind = ic->index(); for (size_t i = 0; i < dependencies.size(); i++) { if (dependencies[i] == ind) { interp.setNextLocation(loc); interp.message(InterpreterMessages::actualLoop, StringMessageArg(ic->identifier()->name())); return interp.makeError(); } } dependencies.push_back(ind); ConstPtr spec; const VarStyleObj *style = 0; if (ind >= inheritedCInfo_.size()) spec = ic; else { const InheritedCInfo *p = inheritedCInfo_[ind].pointer(); if (!p) spec = ic; else if (p->cachedValue) { const Vector &dep = p->dependencies; for (size_t i = 0; i < dep.size(); i++) dependencies.push_back(dep[i]); return p->cachedValue; } else { style = p->style; spec = p->spec; } } VM vm(interp); vm.styleStack = this; vm.specLevel = level_; return spec->value(vm, style, dependencies); } void StyleStack::trace(Collector &c) const { for (size_t i = 0; i < inheritedCInfo_.size(); i++) { for (const InheritedCInfo *p = inheritedCInfo_[i].pointer(); p; p = p->prev.pointer()) { c.trace(p->style); c.trace(p->cachedValue); } } } InheritedCInfo::InheritedCInfo(const ConstPtr &sp, const VarStyleObj *so, unsigned vl, unsigned sl, const ProcessingMode::Rule *r, const Ptr &p) : spec(sp), style(so), valLevel(vl), specLevel(sl), rule(r), prev(p), cachedValue(0) { } StyleObj *StyleObj::asStyle() { return this; } VarStyleObj::VarStyleObj(const ConstPtr &styleSpec, StyleObj *use, ELObj **display, const NodePtr &node) : styleSpec_(styleSpec), use_(use), display_(display), node_(node) { hasSubObjects_ = 1; } VarStyleObj::~VarStyleObj() { delete [] display_; } void VarStyleObj::traceSubObjects(Collector &c) const { c.trace(use_); if (display_) for (ELObj **pp = display_; *pp; pp++) c.trace(*pp); } void VarStyleObj::appendIterForce(StyleObjIter &iter) const { if (styleSpec_->forceSpecs.size()) iter.append(&styleSpec_->forceSpecs, this); } void VarStyleObj::appendIterNormal(StyleObjIter &iter) const { if (styleSpec_->specs.size()) iter.append(&styleSpec_->specs, this); if (use_) use_->appendIter(iter); } void VarStyleObj::appendIter(StyleObjIter &iter) const { VarStyleObj::appendIterForce(iter); VarStyleObj::appendIterNormal(iter); } OverriddenStyleObj::OverriddenStyleObj(BasicStyleObj *basic, StyleObj *override) : basic_(basic), override_(override) { hasSubObjects_ = 1; } void OverriddenStyleObj::traceSubObjects(Collector &c) const { c.trace(basic_); c.trace(override_); } void OverriddenStyleObj::appendIter(StyleObjIter &iter) const { basic_->appendIterForce(iter); override_->appendIter(iter); basic_->appendIterNormal(iter); } MergeStyleObj::MergeStyleObj() { hasSubObjects_ = 1; } void MergeStyleObj::append(StyleObj *obj) { styles_.push_back(obj); } void MergeStyleObj::appendIter(StyleObjIter &iter) const { for (size_t i = 0; i < styles_.size(); i++) styles_[i]->appendIter(iter); } void MergeStyleObj::traceSubObjects(Collector &c) const { for (size_t i = 0; i < styles_.size(); i++) c.trace(styles_[i]); } ColorObj *ColorObj::asColor() { return this; } DeviceRGBColorObj::DeviceRGBColorObj(unsigned char red, unsigned char green, unsigned char blue) { color_.red = red; color_.green = green; color_.blue = blue; } void DeviceRGBColorObj::set(FOTBuilder &fotb) const { fotb.setColor(color_); } void DeviceRGBColorObj::setBackground(FOTBuilder &fotb) const { fotb.setBackgroundColor(color_); } ColorSpaceObj *ColorSpaceObj::asColorSpace() { return this; } ELObj *DeviceRGBColorSpaceObj::makeColor(int argc, ELObj **argv, Interpreter &interp, const Location &loc) { if (argc == 0) return new (interp) DeviceRGBColorObj(0, 0, 0); if (argc != 3) { interp.setNextLocation(loc); interp.message(InterpreterMessages::RGBColorArgCount); return interp.makeError(); } unsigned char c[3]; for (int i = 0; i < 3; i++) { double d; if (!argv[i]->realValue(d)) { interp.setNextLocation(loc); interp.message(InterpreterMessages::RGBColorArgType); return interp.makeError(); } if (d < 0.0 || d > 1.0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::RGBColorArgRange); return interp.makeError(); } c[i] = (unsigned char)(d*255.0 + .5); } return new (interp) DeviceRGBColorObj(c[0], c[1], c[2]); } VarInheritedC::VarInheritedC(const ConstPtr &ic, const InsnPtr &code, const Location &loc) : InheritedC(ic->identifier(), ic->index()), inheritedC_(ic), code_(code), loc_(loc) { } void VarInheritedC::set(VM &vm, const VarStyleObj *style, FOTBuilder &fotb, ELObj *&cacheObj, Vector &dependencies) const { if (!cacheObj) { EvalContext::CurrentNodeSetter cns(style->node(), 0, vm); vm.actualDependencies = &dependencies; cacheObj = vm.eval(code_.pointer(), style->display()); ASSERT(cacheObj != 0); vm.actualDependencies = 0; } if (!vm.interp->isError(cacheObj)) { ConstPtr c(inheritedC_->make(cacheObj, loc_, *vm.interp)); if (!c.isNull()) c->set(vm, 0, fotb, cacheObj, dependencies); } } ConstPtr VarInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { return inheritedC_->make(obj, loc, interp); } ELObj *VarInheritedC::value(VM &vm, const VarStyleObj *style, Vector &dependencies) const { EvalContext::CurrentNodeSetter cns(style->node(), 0, vm); vm.actualDependencies = &dependencies; return vm.eval(code_.pointer(), style->display()); } StyleObjIter::StyleObjIter() : i_(0), vi_(0) { } void StyleObjIter::append(const Vector > *v, const VarStyleObj *obj) { styleVec_.push_back(obj); vecs_.push_back(v); } ConstPtr StyleObjIter::next(const VarStyleObj *&style) { for (; vi_ < vecs_.size(); vi_++, i_ = 0) { if (i_ < vecs_[vi_]->size()) { style = styleVec_[vi_]; return (*vecs_[vi_])[i_++]; } } return ConstPtr(); } StyleSpec::StyleSpec(Vector > &fs, Vector > &s) { fs.swap(forceSpecs); s.swap(specs); } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/StyleEngine.cxx100444 764 764 3150 6606574462 14333 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "StyleEngine.h" #include "Interpreter.h" #include "SchemeParser.h" #include "FOTBuilder.h" #include "DssslSpecEventHandler.h" #include "ArcEngine.h" #include "ProcessContext.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif StyleEngine::StyleEngine(Messenger &mgr, GroveManager &groveManager, int unitsPerInch, bool debugMode, bool dsssl2, const FOTBuilder::Extension *extensionTable) : interpreter_(new Interpreter(&groveManager, &mgr, unitsPerInch, debugMode, dsssl2, extensionTable)) { } void StyleEngine::parseSpec(SgmlParser &specParser, const CharsetInfo &charset, const StringC &id, Messenger &mgr) { DssslSpecEventHandler specHandler(mgr); Vector parts; specHandler.load(specParser, charset, id, parts); for (size_t i = 0; i < parts.size(); i++) { for (DssslSpecEventHandler::Part::Iter iter(parts[i]->iter()); !iter.done(); iter.next()) { Owner in; iter.cur()->makeInputSource(specHandler, in); if (in) { SchemeParser scm(*interpreter_, in); scm.parse(); } } interpreter_->endPart(); } interpreter_->compile(); } void StyleEngine::defineVariable(const StringC &ident) { interpreter_->defineVariable(ident); } StyleEngine::~StyleEngine() { delete interpreter_; } void StyleEngine::process(const NodePtr &node, FOTBuilder &fotb) { ProcessContext context(*interpreter_, fotb); context.process(node); } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/stylelib.cxx100444 764 764 155 6604607720 13706 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" jade-1.2.1/style/style_inst.cxx100444 764 764 72706 6604613126 14324 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Vector.h" #include "NCVector.h" #include "Ptr.h" #include "Owner.h" #include "PointerTable.h" #include "OwnerTable.h" #include "NamedTable.h" #include "IList.h" #include "IListIter.h" #include "IQueue.h" #include "HashTable.h" #ifdef SP_SIZEOF_BOOL_1 #include "XcharMap.h" #endif #undef SP_DEFINE_TEMPLATES #include "Insn.h" #include "Expression.h" #include "Interpreter.h" #include "ELObj.h" #include "Style.h" #include "FOTBuilder.h" #include "ProcessingMode.h" #include "ProcessContext.h" #include "SosofoObj.h" #include "DssslSpecEventHandler.h" #include "Boolean.h" #include "Node.h" #include "DssslApp.h" #include "Pattern.h" #include "MacroFlowObj.h" #ifdef DSSSL_NAMESPACE class DSSSL_NAMESPACE::ProcessingMode; class DSSSL_NAMESPACE::SosofoObj; #else class ProcessingMode; class SosofoObj; #endif #if _MSC_VER >= 1100 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef DSSSL_NAMESPACE using namespace DSSSL_NAMESPACE; #endif #ifdef GROVE_NAMESPACE using namespace GROVE_NAMESPACE; #endif #else #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_2; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector > #else #ifdef __xlC__ #pragma define(NCVector >) #else #ifdef SP_ANSI_CLASS_INST template class NCVector >; #else typedef NCVector > Dummy_3; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_4; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_5; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_6; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_7; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_8; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_9; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_10; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_11; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable #else #ifdef __xlC__ #pragma define(PointerTable) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable; #else typedef PointerTable Dummy_12; #endif #endif #endif #ifdef __DECCXX #pragma define_template NamedTableIter #else #ifdef __xlC__ #pragma define(NamedTableIter) #else #ifdef SP_ANSI_CLASS_INST template class NamedTableIter; #else typedef NamedTableIter Dummy_13; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_14; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_15; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_16; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_17; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > *> #else #ifdef __xlC__ #pragma define(Vector > *>) #else #ifdef SP_ANSI_CLASS_INST template class Vector > *>; #else typedef Vector > *> Dummy_18; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_19; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_20; #endif #endif #endif #ifdef __DECCXX #pragma define_template NamedTable #else #ifdef __xlC__ #pragma define(NamedTable) #else #ifdef SP_ANSI_CLASS_INST template class NamedTable; #else typedef NamedTable Dummy_21; #endif #endif #endif #ifdef __DECCXX #pragma define_template NamedTableIter #else #ifdef __xlC__ #pragma define(NamedTableIter) #else #ifdef SP_ANSI_CLASS_INST template class NamedTableIter; #else typedef NamedTableIter Dummy_22; #endif #endif #endif #ifdef __DECCXX #pragma define_template NamedTableIter #else #ifdef __xlC__ #pragma define(NamedTableIter) #else #ifdef SP_ANSI_CLASS_INST template class NamedTableIter; #else typedef NamedTableIter Dummy_23; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector #else #ifdef __xlC__ #pragma define(NCVector) #else #ifdef SP_ANSI_CLASS_INST template class NCVector; #else typedef NCVector Dummy_24; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_25; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_26; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_27; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_28; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_29; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_30; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_31; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_32; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_33; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_34; #endif #endif #endif #ifdef __DECCXX #pragma define_template IQueue #else #ifdef __xlC__ #pragma define(IQueue) #else #ifdef SP_ANSI_CLASS_INST template class IQueue; #else typedef IQueue Dummy_35; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector > #else #ifdef __xlC__ #pragma define(NCVector >) #else #ifdef SP_ANSI_CLASS_INST template class NCVector >; #else typedef NCVector > Dummy_36; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_37; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_38; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_39; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_40; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_41; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_42; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector #else #ifdef __xlC__ #pragma define(NCVector) #else #ifdef SP_ANSI_CLASS_INST template class NCVector; #else typedef NCVector Dummy_43; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector #else #ifdef __xlC__ #pragma define(NCVector) #else #ifdef SP_ANSI_CLASS_INST template class NCVector; #else typedef NCVector Dummy_44; #endif #endif #endif #ifdef __DECCXX #pragma define_template NamedTable #else #ifdef __xlC__ #pragma define(NamedTable) #else #ifdef SP_ANSI_CLASS_INST template class NamedTable; #else typedef NamedTable Dummy_45; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector > #else #ifdef __xlC__ #pragma define(NCVector >) #else #ifdef SP_ANSI_CLASS_INST template class NCVector >; #else typedef NCVector > Dummy_46; #endif #endif #endif #ifdef __DECCXX #pragma define_template NamedTable #else #ifdef __xlC__ #pragma define(NamedTable) #else #ifdef SP_ANSI_CLASS_INST template class NamedTable; #else typedef NamedTable Dummy_47; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector > #else #ifdef __xlC__ #pragma define(NCVector >) #else #ifdef SP_ANSI_CLASS_INST template class NCVector >; #else typedef NCVector > Dummy_48; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_49; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_50; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_51; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_52; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_53; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_54; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_55; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_56; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_57; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_58; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTable #else #ifdef __xlC__ #pragma define(HashTable) #else #ifdef SP_ANSI_CLASS_INST template class HashTable; #else typedef HashTable Dummy_59; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTableItem #else #ifdef __xlC__ #pragma define(HashTableItem) #else #ifdef SP_ANSI_CLASS_INST template class HashTableItem; #else typedef HashTableItem Dummy_60; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_61; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_62; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_63; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_64; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_65; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_66; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_67; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_68; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_69; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_70; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_71; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_72; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_73; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector *> #else #ifdef __xlC__ #pragma define(Vector *>) #else #ifdef SP_ANSI_CLASS_INST template class Vector *>; #else typedef Vector *> Dummy_74; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable *, String, Interpreter::StringSet, Interpreter::StringSet> #else #ifdef __xlC__ #pragma define(PointerTable *, String, Interpreter::StringSet, Interpreter::StringSet>) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable *, String, Interpreter::StringSet, Interpreter::StringSet>; #else typedef PointerTable *, String, Interpreter::StringSet, Interpreter::StringSet> Dummy_75; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTable, String, Interpreter::StringSet, Interpreter::StringSet> #else #ifdef __xlC__ #pragma define(OwnerTable, String, Interpreter::StringSet, Interpreter::StringSet>) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTable, String, Interpreter::StringSet, Interpreter::StringSet>; #else typedef OwnerTable, String, Interpreter::StringSet, Interpreter::StringSet> Dummy_76; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_77; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_78; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_79; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_80; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_81; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_82; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTable #else #ifdef __xlC__ #pragma define(HashTable) #else #ifdef SP_ANSI_CLASS_INST template class HashTable; #else typedef HashTable Dummy_83; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTableItem #else #ifdef __xlC__ #pragma define(HashTableItem) #else #ifdef SP_ANSI_CLASS_INST template class HashTableItem; #else typedef HashTableItem Dummy_84; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_85; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_86; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector #else #ifdef __xlC__ #pragma define(NCVector) #else #ifdef SP_ANSI_CLASS_INST template class NCVector; #else typedef NCVector Dummy_87; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_88; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_89; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_90; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_91; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_92; #endif #endif #endif #ifdef SP_SIZEOF_BOOL_1 #ifdef __DECCXX #pragma define_template XcharMap #else #ifdef __xlC__ #pragma define(XcharMap) #else #ifdef SP_ANSI_CLASS_INST template class XcharMap; #else typedef XcharMap Dummy_93; #endif #endif #endif #ifdef __DECCXX #pragma define_template SharedXcharMap #else #ifdef __xlC__ #pragma define(SharedXcharMap) #else #ifdef SP_ANSI_CLASS_INST template class SharedXcharMap; #else typedef SharedXcharMap Dummy_94; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr > #else #ifdef __xlC__ #pragma define(Ptr >) #else #ifdef SP_ANSI_CLASS_INST template class Ptr >; #else typedef Ptr > Dummy_95; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr > #else #ifdef __xlC__ #pragma define(ConstPtr >) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr >; #else typedef ConstPtr > Dummy_96; #endif #endif #endif #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/style/style_inst.m4100444 764 764 13364 6604607720 14040 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Vector.h" #include "NCVector.h" #include "Ptr.h" #include "Owner.h" #include "PointerTable.h" #include "OwnerTable.h" #include "NamedTable.h" #include "IList.h" #include "IListIter.h" #include "IQueue.h" #include "HashTable.h" #ifdef SP_SIZEOF_BOOL_1 #include "XcharMap.h" #endif #undef SP_DEFINE_TEMPLATES #include "Insn.h" #include "Expression.h" #include "Interpreter.h" #include "ELObj.h" #include "Style.h" #include "FOTBuilder.h" #include "ProcessingMode.h" #include "ProcessContext.h" #include "SosofoObj.h" #include "DssslSpecEventHandler.h" #include "Boolean.h" #include "Node.h" #include "DssslApp.h" #include "Pattern.h" #include "MacroFlowObj.h" #ifdef DSSSL_NAMESPACE class DSSSL_NAMESPACE::ProcessingMode; class DSSSL_NAMESPACE::SosofoObj; #else class ProcessingMode; class SosofoObj; #endif #if _MSC_VER >= 1100 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef DSSSL_NAMESPACE using namespace DSSSL_NAMESPACE; #endif #ifdef GROVE_NAMESPACE using namespace GROVE_NAMESPACE; #endif #else #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif #endif __instantiate(Ptr) __instantiate(Owner) __instantiate(Vector) __instantiate(NCVector >) __instantiate(Vector) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Vector) __instantiate(Owner) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(`PointerTable') __instantiate(NamedTableIter) __instantiate(Ptr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Vector >) __instantiate(Vector > *>) __instantiate(Vector) __instantiate(Ptr) __instantiate(NamedTable) __instantiate(NamedTableIter) __instantiate(NamedTableIter) __instantiate(NCVector) __instantiate(Vector) __instantiate(Ptr) __instantiate(IList) __instantiate(IListIter) __instantiate(Vector) __instantiate(IList) __instantiate(Vector) __instantiate(Owner) __instantiate(Vector) __instantiate(Vector) __instantiate(IQueue) __instantiate(NCVector >) __instantiate(IList) __instantiate(IListIter) __instantiate(IList) __instantiate(IListIter) __instantiate(Ptr) __instantiate(Vector >) __instantiate(NCVector) __instantiate(NCVector) __instantiate(NamedTable) __instantiate(NCVector >) __instantiate(NamedTable) __instantiate(NCVector >) __instantiate(Vector) __instantiate(Vector >) __instantiate(Vector) __instantiate(Vector >) __instantiate(IList) __instantiate(IListIter) __instantiate(Vector >) __instantiate(Owner) __instantiate(Vector) __instantiate(Vector >) __instantiate(`HashTable') __instantiate(`HashTableItem') __instantiate(Vector) __instantiate(Vector) __instantiate(IListIter) __instantiate(IList) __instantiate(IListIter) __instantiate(IList) __instantiate(IListIter) __instantiate(IList) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Vector *>) __instantiate(`PointerTable *, String, Interpreter::StringSet, Interpreter::StringSet>') __instantiate(`OwnerTable, String, Interpreter::StringSet, Interpreter::StringSet>') __instantiate(Vector) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Vector >) __instantiate(Owner) __instantiate(Owner) __instantiate(`HashTable') __instantiate(`HashTableItem') __instantiate(Vector) __instantiate(Vector) __instantiate(NCVector) __instantiate(IList) __instantiate(IListIter) __instantiate(IList) __instantiate(IListIter) __instantiate(Ptr) #ifdef SP_SIZEOF_BOOL_1 __instantiate(XcharMap) __instantiate(SharedXcharMap) __instantiate(Ptr >) __instantiate(ConstPtr >) #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/style/DssslAppMessages.h100444 764 764 1406 6606636374 14756 0ustar jjcjjc// This file was automatically generated from .\DssslAppMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct DssslAppMessages { // 2000 static const MessageType1 versionInfo; // 2001 static const MessageType0 noSpec; }; const MessageType1 DssslAppMessages::versionInfo( MessageType::info, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2000 #ifndef SP_NO_MESSAGE_TEXT ,"Jade version %1" #endif ); const MessageType0 DssslAppMessages::noSpec( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2001 #ifndef SP_NO_MESSAGE_TEXT ,"no DSSSL specification: use -d to specify" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/style/DssslAppMessages.msg100444 764 764 254 6606574462 15274 0ustar jjcjjc# Copyright (c) 1996 James Clark # See the file COPYING for copying permission =2000 I1+versionInfo++Jade version %1 E0+noSpec++no DSSSL specification: use -d to specify jade-1.2.1/style/DssslAppMessages.rc100444 764 764 144 6606636374 15111 0ustar jjcjjcSTRINGTABLE BEGIN 2000, "Jade version %1" 2001, "no DSSSL specification: use -d to specify" END jade-1.2.1/style/InterpreterMessages.msg100444 764 764 20332 6604607716 16102 0ustar jjcjjc!cxx E0+unexpectedEof++unexpected end of file E0+invalidChar++invalid character E0+unknownHash++invalid character after '#' E1+unknownNamedConstant++unknown #! named constant %1 E1+unexpectedToken++unexpected token %1 E0+unterminatedString++string with no closing quote E0+missingCloseParen++missing closing parenthesis E1+invalidNumber++invalid number %1 E1+invalidAfiiGlyphId++invalid AFII glyph identifier %1 E1+callNonFunction++call of non-function object %1 E0+tooManyArgs++too many arguments for function E0+oddKeyArgs++odd number of keyword/value arguments E0+missingArg++missing argument for function call E1+syntacticKeywordAsVariable++syntactic keyword %1 used as variable E1+undefinedVariableReference++reference to undefined variable %1 E0+badCharName++no character with that name E1+keywordNotAllowedCall++syntactic keyword %1 not valid in call position E1+symbolRequired++symbol required (got %1) E1+unknownTopLevelForm++unknown top level form %1 E1+badModeForm++bad form %1 in mode group E1+duplicateDefinition++identifier %1 already defined in same part+first definition was here E1+identifierLoop++loop in specification of value of %1 E0+outOfRange++argument out of range E1+unitLoop++loop in specification of value of unit %1 E1+badUnitDefinition++bad value specified for unit %1 E1+duplicateUnitDefinition++unit %1 already defined in same part+first definition was here E1+undefinedQuantity++quantity %1 undefined E0+incompatibleDimensions++incompatible dimensions E3+notABoolean++%2 argument for primitive %1 of wrong type: %3 not a boolean E3+notAPair++%2 argument for primitive %1 of wrong type: %3 not a pair E3+notAList++%2 argument for primitive %1 of wrong type: %3 not a list E3+notASymbol++%2 argument for primitive %1 of wrong type: %3 not a symbol E3+notAString++%2 argument for primitive %1 of wrong type: %3 not a string E3+notAStringOrSymbol++%2 argument for primitive %1 of wrong type: %3 not a string or symbol E3+notASymbolOrString++%2 argument for primitive %1 of wrong type: %3 neither a string not a symbol E3+notAChar++%2 argument for primitive %1 of wrong type: %3 not a char E3+notAStyle++%2 argument for primitive %1 of wrong type: %3 not a style E3+notAnExactInteger++%2 argument for primitive %1 of wrong type: %3 not an exact integer E3+notAQuantity++%2 argument for primitive %1 of wrong type: %3 not a quantity E3+notAColorSpace++%2 argument for primitive %1 of wrong type: %3 not a color-space E3+notANumber++%2 argument for primitive %1 of wrong type: %3 not a number E3+notASosofo++%2 argument for primitive %1 of wrong type: %3 not a sosofo E3+notAnOptSingletonNode++%2 argument for primitive %1 of wrong type: %3 not an optional singleton node list E3+notASingletonNode++%2 argument for primitive %1 of wrong type: %3 not a singleton node list E3+notANodeList++%2 argument for primitive %1 of wrong type: %3 not a node list E3+notANamedNodeList++%2 argument for primitive %1 of wrong type: %3 not a named node list E3+notALengthSpec++%2 argument for primitive %1 of wrong type: %3 not a length or length-spec E3+notAQuantityOrLengthSpec++%2 argument for primitive %1 of wrong type: %3 not a quantity or length-spec E3+notAPriority++%2 argument for primitive %1 of wrong type: %3 not an integer or the symbol "force" E3+notAPattern++%2 argument for primitive %1 of wrong type: %3 not a valid element matching pattern E3+notAnAddress++%2 argument for primitive %1 of wrong type: %3 not an address E3+notAGlyphId++%2 argument for primitive %1 of wrong type: %3 not a glyph-id E3+notAGlyphSubstTable++%2 argument for primitive %1 of wrong type: %3 not a glyph-subst-table E3+notAGlyphIdPairList++%2 argument for primitive %1 of wrong type: %3 not a list of pairs of glyph-ids E3+notAProcedure++%2 argument for primitive %1 of wrong type: %3 not a procedure E3+notAVector++%2 argument for primitive %1 of wrong type: %3 not a vector E0+duplicateRootRule++root rule already defined in same part with same importance+first definition was here E1+duplicateInitialValue++initial value already declared for characteristic %1 in same part+first declaration was here E1+invalidStyleKeyword++%1 is not a valid keyword in a style expression E2+invalidMakeKeyword++%1 is not a valid keyword in a make expression for flow object class %2 E1+unknownFlowObjectClass++%1 is not the name of any flow object class E1+atomicContent++content expression cannot be specified in make expression for atomic flow object class %1 E0+labelNotASymbol++value for "label:" not a symbol E1+badConnection++no port for label %1 E0+badContentMap++invalid content map E1+contentMapBadPort++content map references non-existent port %1 E1+invalidCharacteristicValue++invalid value for %1 characteristic E0+condFail++no clause in cond expression matched E1+caseFail++no clause in case expression matched %1 E1+caseElse++expected "else" not %1 E0+caseUnresolvedQuantities++sorry, cannot handle unresolvable quantities in datums in case expression E1+errorProc++%1 E0+divideBy0++division by zero E1+invalidKeyArg++procedure does not have %1 keyword argument E0+keyArgsNotKey++argument not a keyword E0+oneBody++support for more than one style-specification-body not yet implemented E0+specNotArc++specification document does not have the DSSSL architecture as a base architecture E0+noStyleSpec++specification document did not contain a style-specification-body element E1+unknownCharName++unknown character name %1 E0+noCurrentNode++attempt to use current node when there is none E0+noCurrentProcessingMode++attempt to process node in illegal context E0+invalidRadix++radix must be 2, 8, 10 or 16 E0+sosofoContext++this context requires a sosofo E0+styleContext++this context requires a style object E0+notInCharacteristicValue++procedure can only be used in evaluation of characteristic value E1+expressionNotImplemented++sorry, %1 expression not implemented E0+RGBColorArgCount++Device RGB color requires three arguments E0+RGBColorArgType++arguments for Device RGB color must be numbers E0+RGBColorArgRange++arguments for Device RGB color must be in the range 0 to 1 E1+unknownColorSpaceFamily++unknown color-space family %1 E0+deviceRGBColorSpaceNoArgs++Device RGB Color Space Family does not take any arguments E1+notABuiltinInheritedC++%1 is not a pre-defined inherited characteristic E1+invalidNumberFormat++invalid number format %1 E1+invalidPublicIdChar++invalid character %1 in public identifier I1+debug++debug %1 E0+useLoop++circular use of specification parts E1+missingPart++no style-specification or external-specification with ID %1 E0+noParts++document did not contain any style-specifications or external-specifications E0+tableCellOutsideTable++table-cell flow object not inside a table E0+tableRowOutsideTable++table-row flow object not inside a table E1+noNodePropertyValue++no value for node property %1 E0+returnNotNodeList++value returned by procedure was not a node-list I0+stackTrace++called from here I1+stackTraceEllipsis++called from here...(%1 calls omitted) E0+processNodeLoop++node processing loop detected E0+spliceNotList++unquote-splicing expression does not evaluate to a list E0+readOnly++object is read-only E1+topLevelAssignment++assignment to top-level variable %1 E0+continuationDead++invalid call to continuation E0+patternEmptyGi++empty generic identifier in pattern E0+patternNotList++pattern is not a list E1+patternBadGi++%1 cannot be used as a generic identifier in a pattern E1+patternBadMember++%1 cannot occur in a pattern E0+patternMissingQualifierValue++value missing for qualifier in pattern E1+patternUnknownQualifier++unknown pattern qualifier %1 E2+patternBadQualifierValue++bad value %1 for %2 qualifier in pattern E0+patternChildRepeat++repeat qualifier not allowed inside children qualifier E0+patternBadAttributeQualifier++bad value for attributes qualifier in pattern E1+ambiguousStyle++characteristic %1 applied in style rule with same specificity+other style rule is here E0+ambiguousMatch++node matches more than one pattern with the same specificity E1+uninitializedVariableReference++reference to uninitialized variable %1 E1+actualLoop++circular use of actual value of characteristic %1 E1+duplicateCharacteristic++characteristic %1 already defined in same part+first definition was here E1+duplicateFlowObjectClass++flow object class %1 already defined in same part+first definition was here E1+undefinedMode++mode %1 not defined jade-1.2.1/style/InterpreterMessages.rc100444 764 764 15454 6604613156 15724 0ustar jjcjjcSTRINGTABLE BEGIN 0, "unexpected end of file" 1, "invalid character" 2, "invalid character after '#'" 3, "unknown #! named constant %1" 4, "unexpected token %1" 5, "string with no closing quote" 6, "missing closing parenthesis" 7, "invalid number %1" 8, "invalid AFII glyph identifier %1" 9, "call of non-function object %1" 10, "too many arguments for function" 11, "odd number of keyword/value arguments" 12, "missing argument for function call" 13, "syntactic keyword %1 used as variable" 14, "reference to undefined variable %1" 15, "no character with that name" 16, "syntactic keyword %1 not valid in call position" 17, "symbol required (got %1)" 18, "unknown top level form %1" 19, "bad form %1 in mode group" 20, "identifier %1 already defined in same part" 21, "first definition was here" 22, "loop in specification of value of %1" 23, "argument out of range" 24, "loop in specification of value of unit %1" 25, "bad value specified for unit %1" 26, "unit %1 already defined in same part" 27, "first definition was here" 28, "quantity %1 undefined" 29, "incompatible dimensions" 30, "%2 argument for primitive %1 of wrong type: %3 not a boolean" 31, "%2 argument for primitive %1 of wrong type: %3 not a pair" 32, "%2 argument for primitive %1 of wrong type: %3 not a list" 33, "%2 argument for primitive %1 of wrong type: %3 not a symbol" 34, "%2 argument for primitive %1 of wrong type: %3 not a string" 35, "%2 argument for primitive %1 of wrong type: %3 not a string or symbol" 36, "%2 argument for primitive %1 of wrong type: %3 neither a string not a symbol" 37, "%2 argument for primitive %1 of wrong type: %3 not a char" 38, "%2 argument for primitive %1 of wrong type: %3 not a style" 39, "%2 argument for primitive %1 of wrong type: %3 not an exact integer" 40, "%2 argument for primitive %1 of wrong type: %3 not a quantity" 41, "%2 argument for primitive %1 of wrong type: %3 not a color-space" 42, "%2 argument for primitive %1 of wrong type: %3 not a number" 43, "%2 argument for primitive %1 of wrong type: %3 not a sosofo" 44, "%2 argument for primitive %1 of wrong type: %3 not an optional singleton node list" 45, "%2 argument for primitive %1 of wrong type: %3 not a singleton node list" 46, "%2 argument for primitive %1 of wrong type: %3 not a node list" 47, "%2 argument for primitive %1 of wrong type: %3 not a named node list" 48, "%2 argument for primitive %1 of wrong type: %3 not a length or length-spec" 49, "%2 argument for primitive %1 of wrong type: %3 not a quantity or length-spec" 50, "%2 argument for primitive %1 of wrong type: %3 not an integer or the symbol ""force""" 51, "%2 argument for primitive %1 of wrong type: %3 not a valid element matching pattern" 52, "%2 argument for primitive %1 of wrong type: %3 not an address" 53, "%2 argument for primitive %1 of wrong type: %3 not a glyph-id" 54, "%2 argument for primitive %1 of wrong type: %3 not a glyph-subst-table" 55, "%2 argument for primitive %1 of wrong type: %3 not a list of pairs of glyph-ids" 56, "%2 argument for primitive %1 of wrong type: %3 not a procedure" 57, "%2 argument for primitive %1 of wrong type: %3 not a vector" 58, "root rule already defined in same part with same importance" 59, "first definition was here" 60, "initial value already declared for characteristic %1 in same part" 61, "first declaration was here" 62, "%1 is not a valid keyword in a style expression" 63, "%1 is not a valid keyword in a make expression for flow object class %2" 64, "%1 is not the name of any flow object class" 65, "content expression cannot be specified in make expression for atomic flow object class %1" 66, "value for ""label:"" not a symbol" 67, "no port for label %1" 68, "invalid content map" 69, "content map references non-existent port %1" 70, "invalid value for %1 characteristic" 71, "no clause in cond expression matched" 72, "no clause in case expression matched %1" 73, "expected ""else"" not %1" 74, "sorry, cannot handle unresolvable quantities in datums in case expression" 75, "%1" 76, "division by zero" 77, "procedure does not have %1 keyword argument" 78, "argument not a keyword" 79, "support for more than one style-specification-body not yet implemented" 80, "specification document does not have the DSSSL architecture as a base architecture" 81, "specification document did not contain a style-specification-body element" 82, "unknown character name %1" 83, "attempt to use current node when there is none" 84, "attempt to process node in illegal context" 85, "radix must be 2, 8, 10 or 16" 86, "this context requires a sosofo" 87, "this context requires a style object" 88, "procedure can only be used in evaluation of characteristic value" 89, "sorry, %1 expression not implemented" 90, "Device RGB color requires three arguments" 91, "arguments for Device RGB color must be numbers" 92, "arguments for Device RGB color must be in the range 0 to 1" 93, "unknown color-space family %1" 94, "Device RGB Color Space Family does not take any arguments" 95, "%1 is not a pre-defined inherited characteristic" 96, "invalid number format %1" 97, "invalid character %1 in public identifier" 98, "debug %1" 99, "circular use of specification parts" 100, "no style-specification or external-specification with ID %1" 101, "document did not contain any style-specifications or external-specifications" 102, "table-cell flow object not inside a table" 103, "table-row flow object not inside a table" 104, "no value for node property %1" 105, "value returned by procedure was not a node-list" 106, "called from here" 107, "called from here...(%1 calls omitted)" 108, "node processing loop detected" 109, "unquote-splicing expression does not evaluate to a list" 110, "object is read-only" 111, "assignment to top-level variable %1" 112, "invalid call to continuation" 113, "empty generic identifier in pattern" 114, "pattern is not a list" 115, "%1 cannot be used as a generic identifier in a pattern" 116, "%1 cannot occur in a pattern" 117, "value missing for qualifier in pattern" 118, "unknown pattern qualifier %1" 119, "bad value %1 for %2 qualifier in pattern" 120, "repeat qualifier not allowed inside children qualifier" 121, "bad value for attributes qualifier in pattern" 122, "characteristic %1 applied in style rule with same specificity" 123, "other style rule is here" 124, "node matches more than one pattern with the same specificity" 125, "reference to uninitialized variable %1" 126, "circular use of actual value of characteristic %1" 127, "characteristic %1 already defined in same part" 128, "first definition was here" 129, "flow object class %1 already defined in same part" 130, "first definition was here" 131, "mode %1 not defined" END jade-1.2.1/style/FlowObj.cxx100444 764 764 236107 6606574462 13521 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "ProcessContext.h" #include "Interpreter.h" #include "InterpreterMessages.h" #include "SosofoObj.h" #include "macros.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif FlowObj::FlowObj() : style_(0) { hasSubObjects_ = 1; } void FlowObj::process(ProcessContext &context) { context.startFlowObj(); unsigned flags = 0; pushStyle(context, flags); processInner(context); popStyle(context, flags); context.endFlowObj(); } void FlowObj::pushStyle(ProcessContext &context, unsigned &) { if (style_) context.currentStyleStack().push(style_, context.vm(), context.currentFOTBuilder()); else context.currentStyleStack().pushEmpty(); } void FlowObj::popStyle(ProcessContext &context, unsigned) { if (style_) context.currentStyleStack().pop(); else context.currentStyleStack().popEmpty(); } void FlowObj::traceSubObjects(Collector &c) const { c.trace(style_); } CompoundFlowObj *FlowObj::asCompoundFlowObj() { return 0; } bool FlowObj::hasNonInheritedC(const Identifier *) const { return 0; } bool FlowObj::hasPseudoNonInheritedC(const Identifier *) const { return 0; } void FlowObj::setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &) { CANNOT_HAPPEN(); } bool FlowObj::isDisplayNIC(const Identifier *ident) { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyPositionPreference: case Identifier::keyIsKeepWithPrevious: case Identifier::keyIsKeepWithNext: case Identifier::keyKeep: case Identifier::keyBreakBefore: case Identifier::keyBreakAfter: case Identifier::keyIsMayViolateKeepBefore: case Identifier::keyIsMayViolateKeepAfter: case Identifier::keySpaceBefore: case Identifier::keySpaceAfter: return 1; default: break; } } return 0; } bool FlowObj::setDisplayNIC(FOTBuilder::DisplayNIC &nic, const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { static FOTBuilder::Symbol breakVals[] = { FOTBuilder::symbolFalse, FOTBuilder::symbolPage, FOTBuilder::symbolColumnSet, FOTBuilder::symbolColumn }; Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyPositionPreference: { static FOTBuilder::Symbol vals[] = { FOTBuilder::symbolFalse, FOTBuilder::symbolTop, FOTBuilder::symbolBottom, }; interp.convertEnumC(vals, SIZEOF(vals), obj, ident, loc, nic.positionPreference); } return 1; case Identifier::keyIsKeepWithPrevious: interp.convertBooleanC(obj, ident, loc, nic.keepWithPrevious); return 1; case Identifier::keyIsKeepWithNext: interp.convertBooleanC(obj, ident, loc, nic.keepWithNext); return 1; case Identifier::keyKeep: { static FOTBuilder::Symbol vals[] = { FOTBuilder::symbolFalse, FOTBuilder::symbolTrue, FOTBuilder::symbolPage, FOTBuilder::symbolColumnSet, FOTBuilder::symbolColumn }; interp.convertEnumC(vals, SIZEOF(vals), obj, ident, loc, nic.keep); } return 1; case Identifier::keyBreakBefore: interp.convertEnumC(breakVals, SIZEOF(breakVals), obj, ident, loc, nic.breakBefore); return 1; case Identifier::keyBreakAfter: interp.convertEnumC(breakVals, SIZEOF(breakVals), obj, ident, loc, nic.breakAfter); return 1; case Identifier::keyIsMayViolateKeepBefore: interp.convertBooleanC(obj, ident, loc, nic.mayViolateKeepBefore); return 1; case Identifier::keyIsMayViolateKeepAfter: interp.convertBooleanC(obj, ident, loc, nic.mayViolateKeepAfter); return 1; case Identifier::keySpaceBefore: case Identifier::keySpaceAfter: { FOTBuilder::DisplaySpace &ds = (key == Identifier::keySpaceBefore ? nic.spaceBefore : nic.spaceAfter); DisplaySpaceObj *dso = obj->asDisplaySpace(); if (dso) ds = dso->displaySpace(); else if (interp.convertLengthSpecC(obj, ident, loc, ds.nominal)) { ds.max = ds.nominal; ds.min = ds.nominal; } } return 1; default: break; } } return 0; } void CompoundFlowObj::processInner(ProcessContext &context) { if (content_) content_->process(context); else context.processChildren(context.vm().interp->initialProcessingMode()); } void CompoundFlowObj::traceSubObjects(Collector &c) const { c.trace(content_); FlowObj::traceSubObjects(c); } CompoundFlowObj *CompoundFlowObj::asCompoundFlowObj() { return this; } class DisplayGroupFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } DisplayGroupFlowObj(); DisplayGroupFlowObj(const DisplayGroupFlowObj &); void processInner(ProcessContext &); FlowObj *copy(Collector &) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); bool hasNonInheritedC(const Identifier *) const; protected: Owner nic_; }; DisplayGroupFlowObj::DisplayGroupFlowObj() : nic_(new FOTBuilder::DisplayGroupNIC) { } DisplayGroupFlowObj::DisplayGroupFlowObj(const DisplayGroupFlowObj &fo) : CompoundFlowObj(fo), nic_(new FOTBuilder::DisplayGroupNIC(*fo.nic_)) { } void DisplayGroupFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startDisplayGroup(*nic_); CompoundFlowObj::processInner(context); fotb.endDisplayGroup(); } bool DisplayGroupFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key) && key == Identifier::keyCoalesceId) return 1; return isDisplayNIC(ident); } void DisplayGroupFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { if (!setDisplayNIC(*nic_, ident, obj, loc, interp)) { const Char *s; size_t n; if (!obj->stringData(s, n)) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidCharacteristicValue, StringMessageArg(ident->name())); } nic_->hasCoalesceId = 1; nic_->coalesceId.assign(s, n); } } FlowObj *DisplayGroupFlowObj::copy(Collector &c) const { return new (c) DisplayGroupFlowObj(*this); } class ParagraphFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } ParagraphFlowObj(); ParagraphFlowObj(const ParagraphFlowObj &); void processInner(ProcessContext &); FlowObj *copy(Collector &) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); bool hasNonInheritedC(const Identifier *) const; private: Owner nic_; }; ParagraphFlowObj::ParagraphFlowObj() : nic_(new FOTBuilder::ParagraphNIC) { } ParagraphFlowObj::ParagraphFlowObj(const ParagraphFlowObj &fo) : CompoundFlowObj(fo), nic_(new FOTBuilder::ParagraphNIC(*fo.nic_)) { } void ParagraphFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startParagraph(*nic_); CompoundFlowObj::processInner(context); fotb.endParagraph(); } void ParagraphFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { setDisplayNIC(*nic_, ident, obj, loc, interp); } bool ParagraphFlowObj::hasNonInheritedC(const Identifier *ident) const { return isDisplayNIC(ident); } FlowObj *ParagraphFlowObj::copy(Collector &c) const { return new (c) ParagraphFlowObj(*this); } class ParagraphBreakFlowObj : public FlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } ParagraphBreakFlowObj(); ParagraphBreakFlowObj(const ParagraphBreakFlowObj &); FlowObj *copy(Collector &) const; void processInner(ProcessContext &); void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); bool hasNonInheritedC(const Identifier *) const; private: Owner nic_; }; ParagraphBreakFlowObj::ParagraphBreakFlowObj() : nic_(new FOTBuilder::ParagraphNIC) { } ParagraphBreakFlowObj::ParagraphBreakFlowObj(const ParagraphBreakFlowObj &fo) : FlowObj(fo), nic_(new FOTBuilder::ParagraphNIC(*fo.nic_)) { } FlowObj *ParagraphBreakFlowObj::copy(Collector &c) const { return new (c) ParagraphBreakFlowObj(*this); } void ParagraphBreakFlowObj::processInner(ProcessContext &context) { context.currentFOTBuilder().paragraphBreak(*nic_); } void ParagraphBreakFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { setDisplayNIC(*nic_, ident, obj, loc, interp); } bool ParagraphBreakFlowObj::hasNonInheritedC(const Identifier *ident) const { return isDisplayNIC(ident); } class ExternalGraphicFlowObj : public FlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } ExternalGraphicFlowObj(); ExternalGraphicFlowObj(const ExternalGraphicFlowObj &); void processInner(ProcessContext &); FlowObj *copy(Collector &) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); bool hasNonInheritedC(const Identifier *) const; private: Owner nic_; }; ExternalGraphicFlowObj::ExternalGraphicFlowObj() : nic_(new FOTBuilder::ExternalGraphicNIC) { } ExternalGraphicFlowObj::ExternalGraphicFlowObj(const ExternalGraphicFlowObj &fo) : FlowObj(fo), nic_(new FOTBuilder::ExternalGraphicNIC(*fo.nic_)) { } void ExternalGraphicFlowObj::processInner(ProcessContext &context) { context.currentFOTBuilder().externalGraphic(*nic_); } void ExternalGraphicFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { if (!setDisplayNIC(*nic_, ident, obj, loc, interp)) { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyIsDisplay: interp.convertBooleanC(obj, ident, loc, nic_->isDisplay); return; case Identifier::keyScale: { double d; if (obj->realValue(d)) { nic_->scaleType = FOTBuilder::symbolFalse; nic_->scale[0] = nic_->scale[1] = d; } else if (obj->asSymbol()) { static FOTBuilder::Symbol vals[] = { FOTBuilder::symbolMax, FOTBuilder::symbolMaxUniform }; interp.convertEnumC(vals, 2, obj, ident, loc, nic_->scaleType); } else { PairObj *pair = obj->asPair(); if (pair && pair->car()->realValue(nic_->scale[0]) && (pair = pair->cdr()->asPair()) != 0 && pair->car()->realValue(nic_->scale[1]) && pair->cdr()->isNil()) { nic_->scaleType = FOTBuilder::symbolFalse; } else interp.invalidCharacteristicValue(ident, loc); } } return; case Identifier::keyMaxWidth: if (interp.convertLengthSpecC(obj, ident, loc, nic_->maxWidth)) nic_->hasMaxWidth = 1; return; case Identifier::keyMaxHeight: if (interp.convertLengthSpecC(obj, ident, loc, nic_->maxHeight)) nic_->hasMaxHeight = 1; return; case Identifier::keyEntitySystemId: interp.convertStringC(obj, ident, loc, nic_->entitySystemId); return; case Identifier::keyNotationSystemId: interp.convertStringC(obj, ident, loc, nic_->notationSystemId); return; case Identifier::keyPositionPointX: interp.convertLengthSpecC(obj, ident, loc, nic_->positionPointX); return; case Identifier::keyPositionPointY: interp.convertLengthSpecC(obj, ident, loc, nic_->positionPointY); return; case Identifier::keyEscapementDirection: { static FOTBuilder::Symbol vals[] = { FOTBuilder::symbolTopToBottom, FOTBuilder::symbolLeftToRight, FOTBuilder::symbolBottomToTop, FOTBuilder::symbolRightToLeft }; interp.convertEnumC(vals, SIZEOF(vals), obj, ident, loc, nic_->escapementDirection); } return; case Identifier::keyBreakBeforePriority: interp.convertIntegerC(obj, ident, loc, nic_->breakBeforePriority); return; case Identifier::keyBreakAfterPriority: interp.convertIntegerC(obj, ident, loc, nic_->breakAfterPriority); return; default: break; } } CANNOT_HAPPEN(); } } bool ExternalGraphicFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyIsDisplay: case Identifier::keyScale: case Identifier::keyMaxWidth: case Identifier::keyMaxHeight: case Identifier::keyEntitySystemId: case Identifier::keyNotationSystemId: case Identifier::keyPositionPointX: case Identifier::keyPositionPointY: case Identifier::keyEscapementDirection: case Identifier::keyBreakBeforePriority: case Identifier::keyBreakAfterPriority: return 1; default: break; } } return isDisplayNIC(ident); } FlowObj *ExternalGraphicFlowObj::copy(Collector &c) const { return new (c) ExternalGraphicFlowObj(*this); } class RuleFlowObj : public FlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } RuleFlowObj(); RuleFlowObj(const RuleFlowObj &); void processInner(ProcessContext &); FlowObj *copy(Collector &) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); bool hasNonInheritedC(const Identifier *) const; bool ruleStyle(ProcessContext &, StyleObj *&style) { style = style_; return 1; } bool isRule() { return 1; } private: Owner nic_; }; RuleFlowObj::RuleFlowObj() : nic_(new FOTBuilder::RuleNIC) { } RuleFlowObj::RuleFlowObj(const RuleFlowObj &fo) : FlowObj(fo), nic_(new FOTBuilder::RuleNIC(*fo.nic_)) { } void RuleFlowObj::processInner(ProcessContext &context) { context.currentFOTBuilder().rule(*nic_); } void RuleFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { if (setDisplayNIC(*nic_, ident, obj, loc, interp)) return; Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyOrientation: { static FOTBuilder::Symbol vals[] = { FOTBuilder::symbolHorizontal, FOTBuilder::symbolVertical, FOTBuilder::symbolEscapement, FOTBuilder::symbolLineProgression }; interp.convertEnumC(vals, SIZEOF(vals), obj, ident, loc, nic_->orientation); } return; case Identifier::keyLength: if (interp.convertLengthSpecC(obj, ident, loc, nic_->length)) nic_->hasLength = 1; return; case Identifier::keyBreakBeforePriority: interp.convertIntegerC(obj, ident, loc, nic_->breakBeforePriority); return; case Identifier::keyBreakAfterPriority: interp.convertIntegerC(obj, ident, loc, nic_->breakAfterPriority); return; default: break; } } CANNOT_HAPPEN(); } bool RuleFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyOrientation: case Identifier::keyLength: case Identifier::keyBreakBeforePriority: case Identifier::keyBreakAfterPriority: return 1; default: break; } } return isDisplayNIC(ident); } FlowObj *RuleFlowObj::copy(Collector &c) const { return new (c) RuleFlowObj(*this); } class AlignmentPointFlowObj : public FlowObj { public: AlignmentPointFlowObj() { } FlowObj *copy(Collector &) const; void processInner(ProcessContext &); }; FlowObj *AlignmentPointFlowObj::copy(Collector &c) const { return new (c) AlignmentPointFlowObj(*this); } void AlignmentPointFlowObj::processInner(ProcessContext &context) { context.currentFOTBuilder().alignmentPoint(); } class SidelineFlowObj : public CompoundFlowObj { public: SidelineFlowObj() { } FlowObj *copy(Collector &) const; void processInner(ProcessContext &); }; FlowObj *SidelineFlowObj::copy(Collector &c) const { return new (c) SidelineFlowObj(*this); } void SidelineFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startSideline(); CompoundFlowObj::processInner(context); fotb.endSideline(); } void SequenceFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startSequence(); CompoundFlowObj::processInner(context); fotb.endSequence(); } FlowObj *SequenceFlowObj::copy(Collector &c) const { return new (c) SequenceFlowObj(*this); } class LineFieldFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } LineFieldFlowObj() : nic_(new FOTBuilder::LineFieldNIC) { } LineFieldFlowObj(const LineFieldFlowObj &fo) : CompoundFlowObj(fo), nic_(new FOTBuilder::LineFieldNIC(*fo.nic_)) { } void processInner(ProcessContext &); FlowObj *copy(Collector &) const; bool hasNonInheritedC(const Identifier *ident) const; void setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp); private: Owner nic_; }; FlowObj *LineFieldFlowObj::copy(Collector &c) const { return new (c) LineFieldFlowObj(*this); } void LineFieldFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startLineField(*nic_); CompoundFlowObj::processInner(context); fotb.endLineField(); } void LineFieldFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyBreakBeforePriority: interp.convertIntegerC(obj, ident, loc, nic_->breakBeforePriority); return; case Identifier::keyBreakAfterPriority: interp.convertIntegerC(obj, ident, loc, nic_->breakAfterPriority); return; default: break; } } CANNOT_HAPPEN(); } bool LineFieldFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyBreakBeforePriority: case Identifier::keyBreakAfterPriority: return 1; default: break; } } return 0; } class SimplePageSequenceFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } struct HeaderFooter { enum { nParts = 6 }; HeaderFooter(); SosofoObj *part[nParts]; }; SimplePageSequenceFlowObj(); SimplePageSequenceFlowObj(const SimplePageSequenceFlowObj &); void processInner(ProcessContext &); FlowObj *copy(Collector &) const; bool hasNonInheritedC(const Identifier *) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); void traceSubObjects(Collector &) const; private: enum { nPageTypeBits = 2 }; Owner hf_; }; SimplePageSequenceFlowObj::SimplePageSequenceFlowObj() : hf_(new HeaderFooter) { hasSubObjects_ = 1; } SimplePageSequenceFlowObj::SimplePageSequenceFlowObj(const SimplePageSequenceFlowObj &fo) : CompoundFlowObj(fo), hf_(new HeaderFooter(*fo.hf_)) { } void SimplePageSequenceFlowObj::traceSubObjects(Collector &c) const { for (int i = 0; i < HeaderFooter::nParts; i++) c.trace(hf_->part[i]); CompoundFlowObj::traceSubObjects(c); } void SimplePageSequenceFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startSimplePageSequence(); for (int i = 0; i < (1 << nPageTypeBits); i++) { context.setPageType(i); for (int j = 0; j < HeaderFooter::nParts; j++) { fotb.startSimplePageSequenceHeaderFooter(i | (j << nPageTypeBits)); if (hf_->part[j]) hf_->part[j]->process(context); fotb.endSimplePageSequenceHeaderFooter(i | (j << nPageTypeBits)); } } fotb.endAllSimplePageSequenceHeaderFooter(); context.clearPageType(); CompoundFlowObj::processInner(context); fotb.endSimplePageSequence(); } void SimplePageSequenceFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { SosofoObj *sosofo = obj->asSosofo(); if (!sosofo) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidCharacteristicValue, StringMessageArg(ident->name())); return; } Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyLeftHeader: hf_->part[(FOTBuilder::leftHF | FOTBuilder::headerHF) >> nPageTypeBits] = sosofo; return; case Identifier::keyCenterHeader: hf_->part[(FOTBuilder::centerHF | FOTBuilder::headerHF) >> nPageTypeBits] = sosofo; return; case Identifier::keyRightHeader: hf_->part[(FOTBuilder::rightHF | FOTBuilder::headerHF) >> nPageTypeBits] = sosofo; return; case Identifier::keyLeftFooter: hf_->part[(FOTBuilder::leftHF | FOTBuilder::footerHF) >> nPageTypeBits] = sosofo; return; case Identifier::keyCenterFooter: hf_->part[(FOTBuilder::centerHF | FOTBuilder::footerHF) >> nPageTypeBits] = sosofo; return; case Identifier::keyRightFooter: hf_->part[(FOTBuilder::rightHF | FOTBuilder::footerHF) >> nPageTypeBits] = sosofo; return; default: break; } } CANNOT_HAPPEN(); } bool SimplePageSequenceFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyLeftHeader: case Identifier::keyCenterHeader: case Identifier::keyRightHeader: case Identifier::keyLeftFooter: case Identifier::keyCenterFooter: case Identifier::keyRightFooter: return 1; default: break; } } return 0; } FlowObj *SimplePageSequenceFlowObj::copy(Collector &c) const { return new (c) SimplePageSequenceFlowObj(*this); } SimplePageSequenceFlowObj::HeaderFooter::HeaderFooter() { for (int i = 0; i < nParts; i++) part[i] = 0; } class LinkFlowObj : public CompoundFlowObj { public: LinkFlowObj(); FlowObj *copy(Collector &) const; void processInner(ProcessContext &); void traceSubObjects(Collector &) const; bool hasNonInheritedC(const Identifier *) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); private: AddressObj *addressObj_; }; LinkFlowObj::LinkFlowObj() : addressObj_(0) { } void LinkFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); if (!addressObj_) { FOTBuilder::Address addr; addr.type = FOTBuilder::Address::none; fotb.startLink(addr); } else fotb.startLink(addressObj_->address()); CompoundFlowObj::processInner(context); fotb.endLink(); } FlowObj *LinkFlowObj::copy(Collector &c) const { return new (c) LinkFlowObj(*this); } void LinkFlowObj::traceSubObjects(Collector &c) const { CompoundFlowObj::traceSubObjects(c); c.trace(addressObj_); } bool LinkFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; return ident->syntacticKey(key) && key == Identifier::keyDestination; } void LinkFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { AddressObj *address = obj->asAddress(); if (!address) { if (obj != interp.makeFalse()) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidCharacteristicValue, StringMessageArg(ident->name())); } else address = interp.makeAddressNone(); } addressObj_ = address; } class ScrollFlowObj : public CompoundFlowObj { public: ScrollFlowObj() { } void processInner(ProcessContext &); FlowObj *copy(Collector &) const; }; void ScrollFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startScroll(); CompoundFlowObj::processInner(context); fotb.endScroll(); } FlowObj *ScrollFlowObj::copy(Collector &c) const { return new (c) ScrollFlowObj(*this); } class MarginaliaFlowObj : public CompoundFlowObj { public: MarginaliaFlowObj() { } void processInner(ProcessContext &); FlowObj *copy(Collector &) const; }; void MarginaliaFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startMarginalia(); CompoundFlowObj::processInner(context); fotb.endMarginalia(); } FlowObj *MarginaliaFlowObj::copy(Collector &c) const { return new (c) MarginaliaFlowObj(*this); } class MultiModeFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } MultiModeFlowObj(); MultiModeFlowObj(const MultiModeFlowObj &); void processInner(ProcessContext &); FlowObj *copy(Collector &) const; bool hasNonInheritedC(const Identifier *) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); struct NIC { NIC() : hasPrincipalMode(0) { } bool hasPrincipalMode; FOTBuilder::MultiMode principalMode; Vector namedModes; }; private: bool handleMultiModesMember(const Identifier *, ELObj *obj, const Location &, Interpreter &); Owner nic_; }; MultiModeFlowObj::MultiModeFlowObj() : nic_(new NIC) { } MultiModeFlowObj::MultiModeFlowObj(const MultiModeFlowObj &fo) : CompoundFlowObj(fo), nic_(new NIC(*fo.nic_)) { } void MultiModeFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); Vector fotbs(nic_->namedModes.size()); fotb.startMultiMode(nic_->hasPrincipalMode ? &nic_->principalMode : 0, nic_->namedModes, fotbs); Vector portSyms(nic_->namedModes.size()); for (size_t i = 0; i < portSyms.size(); i++) portSyms[i] = context.vm().interp->makeSymbol(nic_->namedModes[i].name); context.pushPorts(nic_->hasPrincipalMode, portSyms, fotbs); CompoundFlowObj::processInner(context); context.popPorts(); fotb.endMultiMode(); } FlowObj *MultiModeFlowObj::copy(Collector &c) const { return new (c) MultiModeFlowObj(*this); } bool MultiModeFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; return ident->syntacticKey(key) && key == Identifier::keyMultiModes; } void MultiModeFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { while (!obj->isNil()) { PairObj *pair = obj->asPair(); if (!pair || !handleMultiModesMember(ident, pair->car(), loc, interp)) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidCharacteristicValue, StringMessageArg(ident->name())); return; } obj = pair->cdr(); } } bool MultiModeFlowObj::handleMultiModesMember(const Identifier *, ELObj *obj, const Location &loc, Interpreter &interp) { if (obj == interp.makeFalse()) { nic_->hasPrincipalMode = 1; return 1; } SymbolObj *sym = obj->asSymbol(); if (sym) { nic_->namedModes.resize(nic_->namedModes.size() + 1); nic_->namedModes.back().name = *sym->name(); return 1; } PairObj *pair = obj->asPair(); if (!pair) return 0; ELObj *spec = pair->car(); pair = pair->cdr()->asPair(); if (!pair || !pair->cdr()->isNil()) return 0; const Char *s; size_t n; if (!pair->car()->stringData(s, n)) return 0; if (spec == interp.makeFalse()) { nic_->hasPrincipalMode = 1; nic_->principalMode.hasDesc = 1; nic_->principalMode.desc.assign(s, n); return 1; } sym = spec->asSymbol(); if (!sym) return 0; nic_->namedModes.resize(nic_->namedModes.size() + 1); nic_->namedModes.back().name = *sym->name(); nic_->namedModes.back().desc.assign(s, n); nic_->namedModes.back().hasDesc = 1; return 1; } class ScoreFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } ScoreFlowObj(); FlowObj *copy(Collector &) const; void processInner(ProcessContext &); bool hasNonInheritedC(const Identifier *) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); class Type { public: virtual ~Type(); virtual void start(FOTBuilder &) = 0; virtual Type *copy() const = 0; }; private: class SymbolType : public Type { public: SymbolType(FOTBuilder::Symbol type) : type_(type) { } void start(FOTBuilder &); Type *copy() const; private: FOTBuilder::Symbol type_; }; class LengthSpecType : public Type { public: LengthSpecType(long n) : len_(n) { } void start(FOTBuilder &); Type *copy() const; private: FOTBuilder::LengthSpec len_; }; class CharType : public Type { public: CharType(Char c) : c_(c) { } void start(FOTBuilder &); Type *copy() const; private: Char c_; }; CopyOwner type_; }; ScoreFlowObj::ScoreFlowObj() { } FlowObj *ScoreFlowObj::copy(Collector &c) const { return new (c) ScoreFlowObj(*this); } void ScoreFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); if (type_) type_->start(fotb); else fotb.startSequence(); CompoundFlowObj::processInner(context); if (type_) fotb.endScore(); else fotb.endSequence(); } bool ScoreFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; return ident->syntacticKey(key) && key == Identifier::keyType; } void ScoreFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { Char c; if (obj->charValue(c)) { type_ = new CharType(c); return; } double d; long n; int dim; switch (obj->quantityValue(n, d, dim)) { case longQuantity: if (dim == 1) { type_ = new LengthSpecType(n); return; } break; case doubleQuantity: if (dim == 1) { type_ = new LengthSpecType(long(d)); return; } break; default: break; } static FOTBuilder::Symbol vals[] = { FOTBuilder::symbolBefore, FOTBuilder::symbolThrough, FOTBuilder::symbolAfter }; FOTBuilder::Symbol sym; if (interp.convertEnumC(vals, SIZEOF(vals), obj, ident, loc, sym)) type_ = new SymbolType(sym); } ScoreFlowObj::Type::~Type() { } void ScoreFlowObj::SymbolType::start(FOTBuilder &fotb) { fotb.startScore(type_); } void ScoreFlowObj::CharType::start(FOTBuilder &fotb) { fotb.startScore(c_); } void ScoreFlowObj::LengthSpecType::start(FOTBuilder &fotb) { fotb.startScore(len_); } ScoreFlowObj::Type *ScoreFlowObj::SymbolType::copy() const { return new SymbolType(*this); } ScoreFlowObj::Type *ScoreFlowObj::LengthSpecType::copy() const { return new LengthSpecType(*this); } ScoreFlowObj::Type *ScoreFlowObj::CharType::copy() const { return new CharType(*this); } class BoxFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } BoxFlowObj(); BoxFlowObj(const BoxFlowObj &); FlowObj *copy(Collector &) const; void processInner(ProcessContext &); bool hasNonInheritedC(const Identifier *) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); private: Owner nic_; }; BoxFlowObj::BoxFlowObj() : nic_(new FOTBuilder::BoxNIC) { } BoxFlowObj::BoxFlowObj(const BoxFlowObj &fo) : CompoundFlowObj(fo), nic_(new FOTBuilder::BoxNIC(*fo.nic_)) { } void BoxFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startBox(*nic_); CompoundFlowObj::processInner(context); fotb.endBox(); } void BoxFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { if (setDisplayNIC(*nic_, ident, obj, loc, interp)) return; Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyIsDisplay: interp.convertBooleanC(obj, ident, loc, nic_->isDisplay); return; case Identifier::keyBreakBeforePriority: interp.convertIntegerC(obj, ident, loc, nic_->breakBeforePriority); return; case Identifier::keyBreakAfterPriority: interp.convertIntegerC(obj, ident, loc, nic_->breakAfterPriority); return; default: break; } } CANNOT_HAPPEN(); } bool BoxFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyIsDisplay: case Identifier::keyBreakBeforePriority: case Identifier::keyBreakAfterPriority: return 1; default: break; } } return isDisplayNIC(ident); } FlowObj *BoxFlowObj::copy(Collector &c) const { return new (c) BoxFlowObj(*this); } class LeaderFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } LeaderFlowObj(); LeaderFlowObj(const LeaderFlowObj &); void processInner(ProcessContext &); FlowObj *copy(Collector &) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); bool hasNonInheritedC(const Identifier *) const; private: Owner nic_; }; LeaderFlowObj::LeaderFlowObj() : nic_(new FOTBuilder::LeaderNIC) { } LeaderFlowObj::LeaderFlowObj(const LeaderFlowObj &fo) : CompoundFlowObj(fo), nic_(new FOTBuilder::LeaderNIC(*fo.nic_)) { } void LeaderFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startLeader(*nic_); CompoundFlowObj::processInner(context); fotb.endLeader(); } void LeaderFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyLength: if (interp.convertLengthSpecC(obj, ident, loc, nic_->length)) nic_->hasLength = 1; return; case Identifier::keyBreakBeforePriority: interp.convertIntegerC(obj, ident, loc, nic_->breakBeforePriority); return; case Identifier::keyBreakAfterPriority: interp.convertIntegerC(obj, ident, loc, nic_->breakAfterPriority); return; default: break; } } CANNOT_HAPPEN(); } bool LeaderFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyLength: case Identifier::keyBreakBeforePriority: case Identifier::keyBreakAfterPriority: return 1; default: break; } } return 0; } FlowObj *LeaderFlowObj::copy(Collector &c) const { return new (c) LeaderFlowObj(*this); } class CharacterFlowObj : public FlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } CharacterFlowObj(); CharacterFlowObj(const CharacterFlowObj &); void processInner(ProcessContext &); FlowObj *copy(Collector &) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); bool hasNonInheritedC(const Identifier *) const; bool characterStyle(ProcessContext &, StyleObj *&style, FOTBuilder::CharacterNIC &nic) { style = style_; nic = *nic_; return 1; } bool isCharacter() { return 1; } private: Owner nic_; }; CharacterFlowObj::CharacterFlowObj() : nic_(new FOTBuilder::CharacterNIC) { } CharacterFlowObj::CharacterFlowObj(const CharacterFlowObj &fo) : FlowObj(fo), nic_(new FOTBuilder::CharacterNIC(*fo.nic_)) { } void CharacterFlowObj::processInner(ProcessContext &context) { context.currentFOTBuilder().character(*nic_); } void CharacterFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyIsSpace: if (interp.convertBooleanC(obj, ident, loc, nic_->isSpace)) nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cIsSpace); return; case Identifier::keyIsRecordEnd: if (interp.convertBooleanC(obj, ident, loc, nic_->isRecordEnd)) nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cIsRecordEnd); return; case Identifier::keyIsInputTab: if (interp.convertBooleanC(obj, ident, loc, nic_->isInputTab)) nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cIsInputTab); return; case Identifier::keyIsInputWhitespace: if (interp.convertBooleanC(obj, ident, loc, nic_->isInputWhitespace)) nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cIsInputWhitespace); return; case Identifier::keyIsPunct: if (interp.convertBooleanC(obj, ident, loc, nic_->isPunct)) nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cIsPunct); return; case Identifier::keyIsDropAfterLineBreak: if (interp.convertBooleanC(obj, ident, loc, nic_->isDropAfterLineBreak)) nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cIsDropAfterLineBreak); return; case Identifier::keyIsDropUnlessBeforeLineBreak: if (interp.convertBooleanC(obj, ident, loc, nic_->isDropUnlessBeforeLineBreak)) nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cIsDropUnlessBeforeLineBreak); return; case Identifier::keyBreakBeforePriority: if (interp.convertIntegerC(obj, ident, loc, nic_->breakBeforePriority)) nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cBreakBeforePriority); return; case Identifier::keyBreakAfterPriority: if (interp.convertIntegerC(obj, ident, loc, nic_->breakAfterPriority)) nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cBreakAfterPriority); return; case Identifier::keyScript: { if (obj == interp.makeFalse()) nic_->script = 0; else { StringC tem; if (!interp.convertStringC(obj, ident, loc, tem)) return; nic_->script = interp.storePublicId(tem.data(), tem.size(), loc); } nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cScript); } return; case Identifier::keyChar: if (interp.convertCharC(obj, ident, loc, nic_->ch)) nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cChar); return; case Identifier::keyGlyphId: { if (obj == interp.makeFalse()) { nic_->glyphId = FOTBuilder::GlyphId(); nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cGlyphId); return; } const FOTBuilder::GlyphId *p = obj->glyphId(); if (!p) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidCharacteristicValue, StringMessageArg(ident->name())); return; } nic_->glyphId = *p; nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cGlyphId); } return; case Identifier::keyMathFontPosture: { static FOTBuilder::Symbol vals[] = { FOTBuilder::symbolFalse, FOTBuilder::symbolNotApplicable, FOTBuilder::symbolUpright, FOTBuilder::symbolOblique, FOTBuilder::symbolBackSlantedOblique, FOTBuilder::symbolItalic, FOTBuilder::symbolBackSlantedItalic, }; if (interp.convertEnumC(vals, SIZEOF(vals), obj, ident, loc, nic_->mathFontPosture)) nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cMathFontPosture); } return; case Identifier::keyMathClass: { static FOTBuilder::Symbol vals[] = { FOTBuilder::symbolOrdinary, FOTBuilder::symbolOperator, FOTBuilder::symbolBinary, FOTBuilder::symbolRelation, FOTBuilder::symbolOpening, FOTBuilder::symbolClosing, FOTBuilder::symbolPunctuation, FOTBuilder::symbolInner, FOTBuilder::symbolSpace, }; if (interp.convertEnumC(vals, SIZEOF(vals), obj, ident, loc, nic_->mathClass)) nic_->specifiedC |= (1 << FOTBuilder::CharacterNIC::cMathClass); } return; case Identifier::keyStretchFactor: interp.convertRealC(obj, ident, loc, nic_->stretchFactor); return; default: break; } } CANNOT_HAPPEN(); } bool CharacterFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyChar: case Identifier::keyGlyphId: case Identifier::keyIsSpace: case Identifier::keyIsRecordEnd: case Identifier::keyIsInputTab: case Identifier::keyIsInputWhitespace: case Identifier::keyIsPunct: case Identifier::keyIsDropAfterLineBreak: case Identifier::keyIsDropUnlessBeforeLineBreak: case Identifier::keyScript: case Identifier::keyMathClass: case Identifier::keyMathFontPosture: case Identifier::keyStretchFactor: case Identifier::keyBreakBeforePriority: case Identifier::keyBreakAfterPriority: return 1; default: break; } } return 0; } FlowObj *CharacterFlowObj::copy(Collector &c) const { return new (c) CharacterFlowObj(*this); } class MathSequenceFlowObj : public CompoundFlowObj { public: MathSequenceFlowObj() { } void processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startMathSequence(); CompoundFlowObj::processInner(context); fotb.endMathSequence(); } FlowObj *copy(Collector &c) const { return new (c) MathSequenceFlowObj(*this); } }; class FractionFlowObj : public CompoundFlowObj { public: FractionFlowObj() { } void processInner(ProcessContext &); FlowObj *copy(Collector &) const; }; void FractionFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); Vector fotbs(2); fotb.startFraction(fotbs[0], fotbs[1]); Vector dep; StyleObj *fractionBarStyle = 0; SosofoObj *sosofo = context.currentStyleStack().actual(context.vm().interp->fractionBarC(), *context.vm().interp, dep)->asSosofo(); if (sosofo) sosofo->ruleStyle(context, fractionBarStyle); if (fractionBarStyle) context.currentStyleStack().push(fractionBarStyle, context.vm(), fotb); fotb.fractionBar(); if (fractionBarStyle) context.currentStyleStack().pop(); Vector labels(2); labels[0] = context.vm().interp->portName(Interpreter::portNumerator); labels[1] = context.vm().interp->portName(Interpreter::portDenominator); context.pushPorts(0, labels, fotbs); // Fraction flow object doesn't have principal port, // so clear the current connection. CompoundFlowObj::processInner(context); context.popPorts(); fotb.endFraction(); } FlowObj *FractionFlowObj::copy(Collector &c) const { return new (c) FractionFlowObj(*this); } class UnmathFlowObj : public CompoundFlowObj { public: UnmathFlowObj() { } void processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startUnmath(); CompoundFlowObj::processInner(context); fotb.endUnmath(); } FlowObj *copy(Collector &c) const { return new (c) UnmathFlowObj(*this); } }; class SuperscriptFlowObj : public CompoundFlowObj { public: SuperscriptFlowObj() { } void processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startSuperscript(); CompoundFlowObj::processInner(context); fotb.endSuperscript(); } FlowObj *copy(Collector &c) const { return new (c) SuperscriptFlowObj(*this); } }; class SubscriptFlowObj : public CompoundFlowObj { public: SubscriptFlowObj() { } void processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startSubscript(); CompoundFlowObj::processInner(context); fotb.endSubscript(); } FlowObj *copy(Collector &c) const { return new (c) SubscriptFlowObj(*this); } }; class ScriptFlowObj : public CompoundFlowObj { public: ScriptFlowObj() { } void processInner(ProcessContext &); FlowObj *copy(Collector &c) const { return new (c) ScriptFlowObj(*this); } }; void ScriptFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); Vector fotbs(6); fotb.startScript(fotbs[0], fotbs[1], fotbs[2], fotbs[3], fotbs[4], fotbs[5]); Vector labels(6); labels[0] = context.vm().interp->portName(Interpreter::portPreSup); labels[1] = context.vm().interp->portName(Interpreter::portPreSub); labels[2] = context.vm().interp->portName(Interpreter::portPostSup); labels[3] = context.vm().interp->portName(Interpreter::portPostSub); labels[4] = context.vm().interp->portName(Interpreter::portMidSup); labels[5] = context.vm().interp->portName(Interpreter::portMidSub); context.pushPorts(1, labels, fotbs); CompoundFlowObj::processInner(context); context.popPorts(); fotb.endScript(); } class MarkFlowObj : public CompoundFlowObj { public: MarkFlowObj() { } void processInner(ProcessContext &); FlowObj *copy(Collector &c) const { return new (c) MarkFlowObj(*this); } }; void MarkFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); Vector fotbs(2); fotb.startMark(fotbs[0], fotbs[1]); Vector labels(2); labels[0] = context.vm().interp->portName(Interpreter::portOverMark); labels[1] = context.vm().interp->portName(Interpreter::portUnderMark); context.pushPorts(1, labels, fotbs); CompoundFlowObj::processInner(context); context.popPorts(); fotb.endMark(); } class FenceFlowObj : public CompoundFlowObj { public: FenceFlowObj() { } void processInner(ProcessContext &); FlowObj *copy(Collector &c) const { return new (c) FenceFlowObj(*this); } }; void FenceFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); Vector fotbs(2); fotb.startFence(fotbs[0], fotbs[1]); Vector labels(2); labels[0] = context.vm().interp->portName(Interpreter::portOpen); labels[1] = context.vm().interp->portName(Interpreter::portClose); context.pushPorts(1, labels, fotbs); CompoundFlowObj::processInner(context); context.popPorts(); fotb.endFence(); } class RadicalFlowObj : public CompoundFlowObj { public: RadicalFlowObj() : radical_(0) { } void processInner(ProcessContext &); FlowObj *copy(Collector &c) const { return new (c) RadicalFlowObj(*this); } void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); bool hasNonInheritedC(const Identifier *) const; void traceSubObjects(Collector &c) const { c.trace(radical_); CompoundFlowObj::traceSubObjects(c); } private: SosofoObj *radical_; }; void RadicalFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); Vector fotbs(1); fotb.startRadical(fotbs[0]); StyleObj *style; FOTBuilder::CharacterNIC nic; if (radical_ && radical_->characterStyle(context, style, nic)) { if (style) context.currentStyleStack().push(style, context.vm(), fotb); fotb.radicalRadical(nic); if (style) context.currentStyleStack().pop(); } else fotb.radicalRadicalDefaulted(); Vector labels(1); labels[0] = context.vm().interp->portName(Interpreter::portDegree); context.pushPorts(1, labels, fotbs); CompoundFlowObj::processInner(context); context.popPorts(); fotb.endRadical(); } bool RadicalFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; return ident->syntacticKey(key) && key == Identifier::keyRadical; } void RadicalFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { radical_ = obj->asSosofo(); if (!radical_ || !radical_->isCharacter()) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidCharacteristicValue, StringMessageArg(ident->name())); } } class MathOperatorFlowObj : public CompoundFlowObj { public: MathOperatorFlowObj() { } void processInner(ProcessContext &); FlowObj *copy(Collector &c) const { return new (c) MathOperatorFlowObj(*this); } }; void MathOperatorFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); Vector fotbs(3); fotb.startMathOperator(fotbs[0], fotbs[1], fotbs[2]); Vector labels(3); labels[0] = context.vm().interp->portName(Interpreter::portOperator); labels[1] = context.vm().interp->portName(Interpreter::portLowerLimit); labels[2] = context.vm().interp->portName(Interpreter::portUpperLimit); context.pushPorts(1, labels, fotbs); CompoundFlowObj::processInner(context); context.popPorts(); fotb.endMathOperator(); } class GridFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } GridFlowObj(); GridFlowObj(const GridFlowObj &); void processInner(ProcessContext &); FlowObj *copy(Collector &c) const { return new (c) GridFlowObj(*this); } void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); bool hasNonInheritedC(const Identifier *) const; private: Owner nic_; }; GridFlowObj::GridFlowObj() : nic_(new FOTBuilder::GridNIC) { } GridFlowObj::GridFlowObj(const GridFlowObj &fo) : CompoundFlowObj(fo), nic_(new FOTBuilder::GridNIC(*fo.nic_)) { } void GridFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startGrid(*nic_); CompoundFlowObj::processInner(context); fotb.endGrid(); } void GridFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { long tem; if (!interp.convertIntegerC(obj, ident, loc, tem)) return; if (tem <= 0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidCharacteristicValue, StringMessageArg(ident->name())); return; } Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyGridNColumns: nic_->nColumns = tem; return; case Identifier::keyGridNRows: nic_->nRows = tem; return; default: break; } } CANNOT_HAPPEN(); } bool GridFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyGridNColumns: case Identifier::keyGridNRows: return 1; default: break; } } return 0; } class GridCellFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } GridCellFlowObj(); GridCellFlowObj(const GridCellFlowObj &); void processInner(ProcessContext &); FlowObj *copy(Collector &c) const { return new (c) GridCellFlowObj(*this); } void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); bool hasNonInheritedC(const Identifier *) const; private: Owner nic_; }; GridCellFlowObj::GridCellFlowObj() : nic_(new FOTBuilder::GridCellNIC) { } GridCellFlowObj::GridCellFlowObj(const GridCellFlowObj &fo) : CompoundFlowObj(fo), nic_(new FOTBuilder::GridCellNIC(*fo.nic_)) { } void GridCellFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startGridCell(*nic_); CompoundFlowObj::processInner(context); fotb.endGridCell(); } void GridCellFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { long tem; if (!interp.convertIntegerC(obj, ident, loc, tem)) return; if (tem <= 0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidCharacteristicValue, StringMessageArg(ident->name())); return; } Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyColumnNumber: nic_->columnNumber = tem; return; case Identifier::keyRowNumber: nic_->rowNumber = tem; return; default: break; } } CANNOT_HAPPEN(); } bool GridCellFlowObj::hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyColumnNumber: case Identifier::keyRowNumber: return 1; default: break; } } return 0; } class TableFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } struct NIC : public FOTBuilder::TableNIC { NIC() : beforeRowBorder(0), afterRowBorder(0), beforeColumnBorder(0), afterColumnBorder(0) { } StyleObj *beforeRowBorder; StyleObj *afterRowBorder; StyleObj *beforeColumnBorder; StyleObj *afterColumnBorder; }; TableFlowObj() : nic_(new NIC) { } TableFlowObj(const TableFlowObj &fo) : CompoundFlowObj(fo), nic_(new NIC(*fo.nic_)) { } void processInner(ProcessContext &context) { context.startTable(); FOTBuilder &fotb = context.currentFOTBuilder(); fotb.startTable(*nic_); Interpreter &interp = *context.vm().interp; Vector dep; ELObj *obj = context.currentStyleStack().actual(interp.tableBorderC(), interp, dep); StyleObj *borderStyle; if (obj == interp.makeFalse()) borderStyle = interp.borderFalseStyle(); else if (obj == interp.makeTrue()) borderStyle = interp.borderTrueStyle(); else { SosofoObj *sosofo = obj->asSosofo(); if (!sosofo || !sosofo->tableBorderStyle(borderStyle)) borderStyle = 0; } border(nic_->beforeRowBorder, borderStyle, &FOTBuilder::tableBeforeRowBorder, context); border(nic_->afterRowBorder, borderStyle, &FOTBuilder::tableAfterRowBorder, context); border(nic_->beforeColumnBorder, borderStyle, &FOTBuilder::tableBeforeColumnBorder, context); border(nic_->afterColumnBorder, borderStyle, &FOTBuilder::tableAfterColumnBorder, context); CompoundFlowObj::processInner(context); if (context.inTableRow()) context.endTableRow(); context.endTable(); fotb.endTable(); } FlowObj *copy(Collector &c) const { return new (c) TableFlowObj(*this); } bool hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyBeforeRowBorder: case Identifier::keyAfterRowBorder: case Identifier::keyBeforeColumnBorder: case Identifier::keyAfterColumnBorder: case Identifier::keyTableWidth: return 1; default: break; } } return isDisplayNIC(ident); } void setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { if (setDisplayNIC(*nic_, ident, obj, loc, interp)) return; Identifier::SyntacticKey key; if (!ident->syntacticKey(key)) CANNOT_HAPPEN(); if (key == Identifier::keyTableWidth) { if (obj == interp.makeFalse()) nic_->widthType = FOTBuilder::TableNIC::widthMinimum; else if (interp.convertLengthSpecC(obj, ident, loc, nic_->width)) nic_->widthType = FOTBuilder::TableNIC::widthExplicit; return; } StyleObj *style; SosofoObj *sosofo = obj->asSosofo(); if (!sosofo || !sosofo->tableBorderStyle(style)) { Boolean b; if (!interp.convertBooleanC(obj, ident, loc, b)) return; style = b ? interp.borderTrueStyle() : interp.borderFalseStyle(); } switch (key) { case Identifier::keyBeforeRowBorder: nic_->beforeRowBorder = style; break; case Identifier::keyAfterRowBorder: nic_->afterRowBorder = style; break; case Identifier::keyBeforeColumnBorder: nic_->beforeColumnBorder = style; break; case Identifier::keyAfterColumnBorder: nic_->afterColumnBorder = style; break; default: CANNOT_HAPPEN(); } } private: void border(StyleObj *style, StyleObj *style2, void (FOTBuilder::*setter)(), ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); if (!style) style = style2; if (style) context.currentStyleStack().push(style, context.vm(), fotb); (fotb.*setter)(); if (style) context.currentStyleStack().pop(); } Owner nic_; }; class TablePartFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } TablePartFlowObj() : nic_(new FOTBuilder::TablePartNIC) { } TablePartFlowObj(const TablePartFlowObj &fo) : CompoundFlowObj(fo), nic_(new FOTBuilder::TablePartNIC(*fo.nic_)) { } void processInner(ProcessContext &context) { context.startTablePart(); FOTBuilder &fotb = context.currentFOTBuilder(); Vector fotbs(2); fotb.startTablePart(*nic_, fotbs[0], fotbs[1]); Vector labels(2); labels[0] = context.vm().interp->portName(Interpreter::portHeader); labels[1] = context.vm().interp->portName(Interpreter::portFooter); context.pushPorts(1, labels, fotbs); CompoundFlowObj::processInner(context); context.popPorts(); if (context.inTableRow()) context.endTableRow(); context.endTablePart(); fotb.endTablePart(); } FlowObj *copy(Collector &c) const { return new (c) TablePartFlowObj(*this); } void setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { setDisplayNIC(*nic_, ident, obj, loc, interp); } bool hasNonInheritedC(const Identifier *ident) const { if (!isDisplayNIC(ident)) return 0; Identifier::SyntacticKey key; ident->syntacticKey(key); if (key == Identifier::keyPositionPreference) return 0; return 1; } private: Owner nic_; }; class TableColumnFlowObj : public FlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } struct NIC : public FOTBuilder::TableColumnNIC { NIC() : hasColumnNumber(0) { } bool hasColumnNumber; }; TableColumnFlowObj() : nic_(new NIC) { } TableColumnFlowObj(const TableColumnFlowObj &fo) : FlowObj(fo), nic_(new NIC(*fo.nic_)) { } void processInner(ProcessContext &context) { if (nic_->hasColumnNumber) { context.currentFOTBuilder().tableColumn(*nic_); context.addTableColumn(nic_->columnIndex, nic_->nColumnsSpanned, style_); } else { FOTBuilder::TableColumnNIC nic(*nic_); nic.columnIndex = context.currentTableColumn(); context.currentFOTBuilder().tableColumn(nic); context.addTableColumn(nic.columnIndex, nic_->nColumnsSpanned, style_); } } FlowObj *copy(Collector &c) const { return new (c) TableColumnFlowObj(*this); } bool hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyColumnNumber: case Identifier::keyNColumnsSpanned: case Identifier::keyWidth: return 1; default: break; } } return 0; } void setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyColumnNumber: case Identifier::keyNColumnsSpanned: { long n; if (!interp.convertIntegerC(obj, ident, loc, n)) return; if (n <= 0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidCharacteristicValue, StringMessageArg(ident->name())); return; } if (key == Identifier::keyColumnNumber) { nic_->columnIndex = n - 1; nic_->hasColumnNumber = 1; } else nic_->nColumnsSpanned = n; } return; case Identifier::keyWidth: { const LengthSpec *ls = obj->lengthSpec(); if (ls) { // width is a TableLengthSpec not just a LengthSpec if (ls->convert(nic_->width)) nic_->hasWidth = 1; else interp.invalidCharacteristicValue(ident, loc); } else if (interp.convertLengthSpecC(obj, ident, loc, nic_->width)) nic_->hasWidth = 1; } return; default: break; } } CANNOT_HAPPEN(); } private: Owner nic_; }; class TableRowFlowObj : public CompoundFlowObj { public: TableRowFlowObj() { } void pushStyle(ProcessContext &, unsigned &) { } void popStyle(ProcessContext &, unsigned) { } void processInner(ProcessContext &context) { if (!context.inTable()) { // FIXME location context.vm().interp->message(InterpreterMessages::tableRowOutsideTable); CompoundFlowObj::processInner(context); return; } if (context.inTableRow()) context.endTableRow(); context.startTableRow(style_); CompoundFlowObj::processInner(context); if (context.inTableRow()) context.endTableRow(); // else FIXME give an error // must have used ends-row? in a table-row } FlowObj *copy(Collector &c) const { return new (c) TableRowFlowObj(*this); } }; class TableCellFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } struct NIC : FOTBuilder::TableCellNIC { NIC() : startsRow(0), endsRow(0), hasColumnNumber(0) { } bool hasColumnNumber; bool startsRow; bool endsRow; }; TableCellFlowObj(bool missing = 0) : nic_(new NIC) { if (missing) nic_->missing = 1; } TableCellFlowObj(const TableCellFlowObj &fo) : CompoundFlowObj(fo), nic_(new NIC(*fo.nic_)) { } void pushStyle(ProcessContext &context, unsigned &nPush) { if (context.inTableRow()) { if (nic_->startsRow) { context.endTableRow(); context.startTableRow(0); } } else context.startTableRow(0); unsigned columnNumber = nic_->hasColumnNumber ? nic_->columnIndex : context.currentTableColumn(); StyleObj *columnStyle = context.tableColumnStyle(columnNumber, nic_->nColumnsSpanned); if (columnStyle) { context.currentStyleStack().push(columnStyle, context.vm(), context.currentFOTBuilder()); context.currentFOTBuilder().startSequence(); nPush++; } StyleObj *rowStyle = context.tableRowStyle(); if (rowStyle) { context.currentStyleStack().push(rowStyle, context.vm(), context.currentFOTBuilder()); context.currentFOTBuilder().startSequence(); nPush++; } CompoundFlowObj::pushStyle(context, nPush); } void popStyle(ProcessContext &context, unsigned nPush) { CompoundFlowObj::popStyle(context, nPush); for (unsigned i = 0; i < nPush; i++) { context.currentFOTBuilder().endSequence(); context.currentStyleStack().pop(); } if (nic_->endsRow) context.endTableRow(); } void processInner(ProcessContext &context) { if (!context.inTable()) { // FIXME location context.vm().interp->message(InterpreterMessages::tableCellOutsideTable); CompoundFlowObj::processInner(context); return; } FOTBuilder &fotb = context.currentFOTBuilder(); if (!nic_->hasColumnNumber) { FOTBuilder::TableCellNIC nic(*nic_); nic.columnIndex = context.currentTableColumn(); fotb.startTableCell(nic); if (!nic_->missing) context.noteTableCell(nic.columnIndex, nic.nColumnsSpanned, nic.nRowsSpanned); } else { fotb.startTableCell(*nic_); if (!nic_->missing) context.noteTableCell(nic_->columnIndex, nic_->nColumnsSpanned, nic_->nRowsSpanned); } Interpreter &interp = *context.vm().interp; border(interp.cellBeforeRowBorderC(), &FOTBuilder::tableCellBeforeRowBorder, context); border(interp.cellAfterRowBorderC(), &FOTBuilder::tableCellAfterRowBorder, context); border(interp.cellBeforeColumnBorderC(), &FOTBuilder::tableCellBeforeColumnBorder, context); border(interp.cellAfterColumnBorderC(), &FOTBuilder::tableCellAfterColumnBorder, context); CompoundFlowObj::processInner(context); fotb.endTableCell(); } FlowObj *copy(Collector &c) const { return new (c) TableCellFlowObj(*this); } bool hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyNRowsSpanned: return 1; default: break; } } return 0; } bool hasPseudoNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyColumnNumber: case Identifier::keyNColumnsSpanned: case Identifier::keyIsStartsRow: case Identifier::keyIsEndsRow: return 1; default: break; } } return 0; } void setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { Identifier::SyntacticKey key; if (ident->syntacticKey(key)) { switch (key) { case Identifier::keyIsStartsRow: interp.convertBooleanC(obj, ident, loc, nic_->startsRow); return; case Identifier::keyIsEndsRow: interp.convertBooleanC(obj, ident, loc, nic_->endsRow); return; case Identifier::keyColumnNumber: case Identifier::keyNColumnsSpanned: case Identifier::keyNRowsSpanned: { long n; if (!interp.convertIntegerC(obj, ident, loc, n)) return; if (n <= 0) { interp.setNextLocation(loc); interp.message(InterpreterMessages::invalidCharacteristicValue, StringMessageArg(ident->name())); return; } if (key == Identifier::keyColumnNumber) { nic_->columnIndex = n - 1; nic_->hasColumnNumber = 1; } else if (key == Identifier::keyNColumnsSpanned) nic_->nColumnsSpanned = n; else nic_->nRowsSpanned = n; } return; default: break; } } CANNOT_HAPPEN(); } private: void border(const ConstPtr &ic, void (FOTBuilder::*setter)(), ProcessContext &context) { Interpreter &interp = *context.vm().interp; Vector dep; ELObj *obj = context.currentStyleStack().actual(ic, interp, dep); StyleObj *style; if (obj == interp.makeFalse()) style = interp.borderFalseStyle(); else if (obj == interp.makeTrue()) style = interp.borderTrueStyle(); else { SosofoObj *sosofo = obj->asSosofo(); if (!sosofo || !sosofo->tableBorderStyle(style)) style = 0; } FOTBuilder &fotb = context.currentFOTBuilder(); if (style) context.currentStyleStack().push(style, context.vm(), fotb); (fotb.*setter)(); if (style) context.currentStyleStack().pop(); } Owner nic_; }; class TableBorderFlowObj : public FlowObj { public: TableBorderFlowObj() { } void process(ProcessContext &) { } void processInner(ProcessContext &) { } bool tableBorderStyle(StyleObj *&style) { style = style_; return 1; } FlowObj *copy(Collector &c) const { return new (c) TableBorderFlowObj(*this); } }; void ProcessContext::startTable() { tableStack_.insert(new Table); } void ProcessContext::endTable() { coverSpannedRows(); delete tableStack_.get(); } void ProcessContext::coverSpannedRows() { // Generate empty cells to cover any remaining vertical spans Table *table = tableStack_.head(); if (!table) return; unsigned n = 0; for (size_t i = 0; i < table->covered.size(); i++) if (table->covered[i] > n) n = table->covered[i]; for (; n > 0; n--) { SosofoObj *content = new (*vm().interp) EmptySosofoObj; ELObjDynamicRoot protect(*vm().interp, content); TableRowFlowObj *row = new (*vm().interp) TableRowFlowObj; row->setContent(content); protect = row; row->process(*this); } } void ProcessContext::startTablePart() { Table *table = tableStack_.head(); if (table) { table->currentColumn = 0; table->rowStyle = 0; table->columnStyles.clear(); table->covered.clear(); table->nColumns = 0; } } void ProcessContext::endTablePart() { coverSpannedRows(); } void ProcessContext::addTableColumn(unsigned columnIndex, unsigned span, StyleObj *style) { Table *table = tableStack_.head(); if (table) { table->currentColumn = columnIndex + span; if (columnIndex >= table->columnStyles.size()) table->columnStyles.resize(columnIndex + 1); Vector &tem = table->columnStyles[columnIndex]; if (span > 0) { while (tem.size() < span) tem.push_back((StyleObj *)0); tem[span - 1] = style; } } } unsigned ProcessContext::currentTableColumn() { Table *table = tableStack_.head(); if (table) return table->currentColumn; return 0; } void ProcessContext::noteTableCell(unsigned colIndex, unsigned colSpan, unsigned rowSpan) { Table *table = tableStack_.head(); if (!table) return; table->currentColumn = colIndex + colSpan; Vector &covered = table->covered; for (size_t i = covered.size(); i < colIndex + colSpan; i++) covered.push_back(0); for (size_t i = 0; i < colSpan; i++) covered[colIndex + i] = rowSpan; if (colIndex + colSpan > table->nColumns) table->nColumns = colIndex + colSpan; } StyleObj *ProcessContext::tableColumnStyle(unsigned columnIndex, unsigned span) { Table *table = tableStack_.head(); if (table) { if (columnIndex < table->columnStyles.size()) { Vector &tem = table->columnStyles[columnIndex]; if (span > 0 && span <= tem.size()) return tem[span - 1]; } } return 0; } StyleObj *ProcessContext::tableRowStyle() { Table *table = tableStack_.head(); if (table) return table->rowStyle; return 0; } void ProcessContext::startTableRow(StyleObj *style) { Table *table = tableStack_.head(); if (table) { table->rowStyle = style; table->currentColumn = 0; table->inTableRow = 1; table->rowConnectableLevel = connectionStack_.head()->connectableLevel; } currentFOTBuilder().startTableRow(); } void ProcessContext::endTableRow() { Table *table = tableStack_.head(); if (table) { // Fill in blank cells Vector &covered = table->covered; for (size_t i = 0; i < table->nColumns + 1; i++) { if (i >= covered.size() || !covered[i]) { table->currentColumn = i; SosofoObj *content = new (*vm().interp) EmptySosofoObj; ELObjDynamicRoot protect(*vm().interp, content); // The last cell is a dummy one TableCellFlowObj *cell = new (*vm().interp) TableCellFlowObj(i >= table->nColumns); cell->setContent(content); protect = cell; cell->process(*this); } // cell->process() will cover it if (i < table->nColumns) covered[i] -= 1; } table->inTableRow = 0; } currentFOTBuilder().endTableRow(); } bool ProcessContext::inTableRow() { Table *table = tableStack_.head(); if (table) return table->inTableRow; return 0; } ProcessContext::Table::Table() : rowStyle(0), currentColumn(0), inTableRow(0), nColumns(0) { } // Flow object classes declared with declare-flow-object-class // that we don't know about are assumed to have one principal port // and accept any non-inherited characteristic. class UnknownFlowObj : public CompoundFlowObj { public: UnknownFlowObj() { } FlowObj *copy(Collector &c) const { return new (c) UnknownFlowObj(*this); } void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &) { } bool hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey syn; if (ident->syntacticKey(syn) && (syn == Identifier::keyLabel || syn == Identifier::keyContentMap)) return 0; if (!ident->inheritedC().isNull()) return 0; return 1; } }; class FormattingInstructionFlowObj : public FlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } FormattingInstructionFlowObj() { } void processInner(ProcessContext &context) { context.currentFOTBuilder().formattingInstruction(data_); } FlowObj *copy(Collector &c) const { return new (c) FormattingInstructionFlowObj(*this); } void setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { interp.convertStringC(obj, ident, loc, data_); } bool hasNonInheritedC(const Identifier *ident) const { Identifier::SyntacticKey key; return ident->syntacticKey(key) && key == Identifier::keyData; } private: StringC data_; }; class ELObjExtensionFlowObjValue : public FOTBuilder::ExtensionFlowObj::Value { public: ELObjExtensionFlowObjValue(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) : ident_(ident), obj_(obj), loc_(&loc), interp_(&interp) { } bool convertString(StringC &result) const { return interp_->convertStringC(obj_, ident_, *loc_, result); } bool convertStringPairList(Vector &v) const { ELObj *obj = obj_; for (;;) { if (obj->isNil()) return 1; PairObj *pair = obj->asPair(); if (!pair) break; obj = pair->cdr(); PairObj *att = pair->car()->asPair(); if (!att) break; const Char *s; size_t n; if (!att->car()->stringData(s, n)) break; v.resize(v.size() + 1); v.back().assign(s, n); att = att->cdr()->asPair(); if (!att || !att->car()->stringData(s, n) || !att->cdr()->isNil()) { v.resize(v.size() - 1); break; } v.resize(v.size() + 1); v.back().assign(s, n); } interp_->setNextLocation(*loc_); interp_->message(InterpreterMessages::invalidCharacteristicValue, StringMessageArg(ident_->name())); return 0; } bool convertStringList(Vector &v) const { ELObj *obj = obj_; for (;;) { if (obj->isNil()) return 1; PairObj *pair = obj->asPair(); if (!pair) break; const Char *s; size_t n; if (!pair->car()->stringData(s, n)) break; v.resize(v.size() + 1); v.back().assign(s, n); obj = pair->cdr(); } interp_->setNextLocation(*loc_); interp_->message(InterpreterMessages::invalidCharacteristicValue, StringMessageArg(ident_->name())); return 0; } bool convertBoolean(bool &result) const { return interp_->convertBooleanC(obj_, ident_, *loc_, result); } private: ELObj *obj_; const Identifier *ident_; const Location *loc_; Interpreter *interp_; }; class ExtensionFlowObj : public FlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } ExtensionFlowObj(const FOTBuilder::ExtensionFlowObj &); ExtensionFlowObj(const ExtensionFlowObj &); void processInner(ProcessContext &); FlowObj *copy(Collector &) const; bool hasNonInheritedC(const Identifier *) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); private: Owner fo_; }; ExtensionFlowObj::ExtensionFlowObj(const FOTBuilder::ExtensionFlowObj &fo) : fo_(fo.copy()) { } ExtensionFlowObj::ExtensionFlowObj(const ExtensionFlowObj &fo) : FlowObj(fo), fo_(fo.fo_->copy()) { } void ExtensionFlowObj::processInner(ProcessContext &context) { context.currentFOTBuilder().extension(*fo_, context.vm().currentNode); } void ExtensionFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { fo_->setNIC(ident->name(), ELObjExtensionFlowObjValue(ident, obj, loc, interp)); } bool ExtensionFlowObj::hasNonInheritedC(const Identifier *ident) const { return fo_->hasNIC(ident->name()); } FlowObj *ExtensionFlowObj::copy(Collector &c) const { return new (c) ExtensionFlowObj(*this); } class CompoundExtensionFlowObj : public CompoundFlowObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } CompoundExtensionFlowObj(const FOTBuilder::CompoundExtensionFlowObj &); CompoundExtensionFlowObj(const CompoundExtensionFlowObj &); void processInner(ProcessContext &); FlowObj *copy(Collector &) const; bool hasNonInheritedC(const Identifier *) const; void setNonInheritedC(const Identifier *, ELObj *, const Location &, Interpreter &); private: Owner fo_; }; CompoundExtensionFlowObj::CompoundExtensionFlowObj(const FOTBuilder::CompoundExtensionFlowObj &fo) : fo_(fo.copy()->asCompoundExtensionFlowObj()) { } CompoundExtensionFlowObj::CompoundExtensionFlowObj(const CompoundExtensionFlowObj &fo) : CompoundFlowObj(fo), fo_(fo.fo_->copy()->asCompoundExtensionFlowObj()) { } void CompoundExtensionFlowObj::processInner(ProcessContext &context) { FOTBuilder &fotb = context.currentFOTBuilder(); Vector portNames; fo_->portNames(portNames); Vector fotbs(portNames.size()); fotb.startExtension(*fo_, context.vm().currentNode, fotbs); if (portNames.size()) { Vector portSyms(portNames.size()); for (size_t i = 0; i < portSyms.size(); i++) portSyms[i] = context.vm().interp->makeSymbol(portNames[i]); context.pushPorts(fo_->hasPrincipalPort(), portSyms, fotbs); CompoundFlowObj::processInner(context); context.popPorts(); } else CompoundFlowObj::processInner(context); fotb.endExtension(*fo_); } void CompoundExtensionFlowObj::setNonInheritedC(const Identifier *ident, ELObj *obj, const Location &loc, Interpreter &interp) { fo_->setNIC(ident->name(), ELObjExtensionFlowObjValue(ident, obj, loc, interp)); } bool CompoundExtensionFlowObj::hasNonInheritedC(const Identifier *ident) const { return fo_->hasNIC(ident->name()); } FlowObj *CompoundExtensionFlowObj::copy(Collector &c) const { return new (c) CompoundExtensionFlowObj(*this); } #define FLOW_OBJ(name, string) \ { FlowObj *tem = new (*this) name; \ lookup(makeStringC(string))->setFlowObj(tem); \ makePermanent(tem); } void Interpreter::installFlowObjs() { FLOW_OBJ(SequenceFlowObj, "sequence"); FLOW_OBJ(DisplayGroupFlowObj, "display-group"); FLOW_OBJ(ParagraphFlowObj, "paragraph"); FLOW_OBJ(ParagraphBreakFlowObj, "paragraph-break"); FLOW_OBJ(LineFieldFlowObj, "line-field"); FLOW_OBJ(ScoreFlowObj, "score"); FLOW_OBJ(ExternalGraphicFlowObj, "external-graphic"); FLOW_OBJ(RuleFlowObj, "rule"); FLOW_OBJ(LeaderFlowObj, "leader"); FLOW_OBJ(CharacterFlowObj, "character"); FLOW_OBJ(BoxFlowObj, "box"); FLOW_OBJ(AlignmentPointFlowObj, "alignment-point"); FLOW_OBJ(SidelineFlowObj, "sideline"); // simple-page FLOW_OBJ(SimplePageSequenceFlowObj, "simple-page-sequence"); // tables FLOW_OBJ(TableFlowObj, "table"); FLOW_OBJ(TablePartFlowObj, "table-part"); FLOW_OBJ(TableColumnFlowObj, "table-column"); FLOW_OBJ(TableRowFlowObj, "table-row"); FLOW_OBJ(TableCellFlowObj, "table-cell"); FLOW_OBJ(TableBorderFlowObj, "table-border"); // online FLOW_OBJ(LinkFlowObj, "link"); FLOW_OBJ(ScrollFlowObj, "scroll"); FLOW_OBJ(MarginaliaFlowObj, "marginalia"); FLOW_OBJ(MultiModeFlowObj, "multi-mode"); // math FLOW_OBJ(MathSequenceFlowObj, "math-sequence"); FLOW_OBJ(FractionFlowObj, "fraction"); FLOW_OBJ(UnmathFlowObj, "unmath"); FLOW_OBJ(SuperscriptFlowObj, "superscript"); FLOW_OBJ(SubscriptFlowObj, "subscript"); FLOW_OBJ(ScriptFlowObj, "script"); FLOW_OBJ(MarkFlowObj, "mark"); FLOW_OBJ(FenceFlowObj, "fence"); FLOW_OBJ(RadicalFlowObj, "radical"); FLOW_OBJ(MathOperatorFlowObj, "math-operator"); FLOW_OBJ(GridFlowObj, "grid"); FLOW_OBJ(GridCellFlowObj, "grid-cell"); } void Interpreter::installExtensionFlowObjectClass(Identifier *ident, const StringC &pubid, const Location &loc) { FlowObj *tem = 0; if (extensionTable_) { for (const FOTBuilder::Extension *ep = extensionTable_; ep->pubid; ep++) { if (pubid == ep->pubid) { if (ep->flowObj) { const FOTBuilder::CompoundExtensionFlowObj *cFlowObj = ep->flowObj->asCompoundExtensionFlowObj(); if (cFlowObj) tem = new (*this) CompoundExtensionFlowObj(*cFlowObj); else tem = new (*this) ExtensionFlowObj(*ep->flowObj); } break; } } } if (!tem) { if (pubid == "UNREGISTERED::James Clark//Flow Object Class::" "formatting-instruction") tem = new (*this) FormattingInstructionFlowObj; else tem = new (*this) UnknownFlowObj; } makePermanent(tem); ident->setFlowObj(tem, currentPartIndex(), loc); } #ifdef DSSSL_NAMESPACE } #endif #include "FlowObj_inst.cxx" jade-1.2.1/style/InheritedC.cxx100444 764 764 147464 6604607716 14201 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #include "Style.h" #include "VM.h" #include "Interpreter.h" #include "InterpreterMessages.h" #include "macros.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif InheritedC::InheritedC(const Identifier *ident, unsigned index) : ident_(ident), index_(index) { } InheritedC::~InheritedC() { } void InheritedC::invalidValue(const Location &loc, Interpreter &interp) const { interp.invalidCharacteristicValue(identifier(), loc); } class BoolInheritedC : public InheritedC { public: BoolInheritedC(const Identifier *, unsigned index, bool); ELObj *value(VM &, const VarStyleObj *, Vector &) const; protected: bool value_; }; BoolInheritedC::BoolInheritedC(const Identifier *ident, unsigned index, bool value) : InheritedC(ident, index), value_(value) { } ELObj *BoolInheritedC::value(VM &vm, const VarStyleObj *, Vector &) const { if (value_) return vm.interp->makeTrue(); else return vm.interp->makeFalse(); } class IntegerInheritedC : public InheritedC { public: IntegerInheritedC(const Identifier *, unsigned index, long); ELObj *value(VM &, const VarStyleObj *, Vector &) const; protected: long n_; }; IntegerInheritedC::IntegerInheritedC(const Identifier *ident, unsigned index, long n) : InheritedC(ident, index), n_(n) { } ELObj *IntegerInheritedC::value(VM &vm, const VarStyleObj *, Vector &) const { return vm.interp->makeInteger(n_); } class LengthInheritedC : public InheritedC { public: LengthInheritedC(const Identifier *, unsigned index, FOTBuilder::Length); ELObj *value(VM &, const VarStyleObj *, Vector &) const; protected: FOTBuilder::Length size_; }; LengthInheritedC::LengthInheritedC(const Identifier *ident, unsigned index, FOTBuilder::Length size) : InheritedC(ident, index), size_(size) { } ELObj *LengthInheritedC::value(VM &vm, const VarStyleObj *, Vector &) const { return new (*vm.interp) LengthObj(size_); } class SymbolInheritedC : public InheritedC { public: SymbolInheritedC(const Identifier *, unsigned index, FOTBuilder::Symbol); ELObj *value(VM &, const VarStyleObj *, Vector &) const; protected: FOTBuilder::Symbol sym_; }; SymbolInheritedC::SymbolInheritedC(const Identifier *ident, unsigned index, FOTBuilder::Symbol sym) : InheritedC(ident, index), sym_(sym) { } ELObj *SymbolInheritedC::value(VM &vm, const VarStyleObj *, Vector &) const { return vm.interp->cValueSymbol(sym_); } class PublicIdInheritedC : public InheritedC { public: PublicIdInheritedC(const Identifier *, unsigned index, FOTBuilder::PublicId = 0); ELObj *value(VM &, const VarStyleObj *, Vector &) const; protected: FOTBuilder::PublicId pubid_; }; PublicIdInheritedC::PublicIdInheritedC(const Identifier *ident, unsigned index, FOTBuilder::PublicId pubid) : InheritedC(ident, index), pubid_(pubid) { } ELObj *PublicIdInheritedC::value(VM &vm, const VarStyleObj *, Vector &) const { Interpreter &interp = *vm.interp; if (pubid_) return interp.makeSymbol(interp.makeStringC(pubid_)); else return interp.makeFalse(); } class Letter2InheritedC : public InheritedC { public: Letter2InheritedC(const Identifier *, unsigned index, FOTBuilder::Letter2 = 0); ELObj *value(VM &, const VarStyleObj *, Vector &) const; protected: FOTBuilder::Letter2 code_; }; Letter2InheritedC::Letter2InheritedC(const Identifier *ident, unsigned index, FOTBuilder::Letter2 code) : InheritedC(ident, index), code_(code) { } ELObj *Letter2InheritedC::value(VM &vm, const VarStyleObj *, Vector &) const { Interpreter &interp = *vm.interp; if (code_) { StringC buf; buf += (code_ >> 8) & 0xff; buf += code_ & 0xff; buf += 0; return interp.makeSymbol(buf); } else return interp.makeFalse(); } class LengthSpecInheritedC : public InheritedC { public: LengthSpecInheritedC(const Identifier *, unsigned index, FOTBuilder::Length); ELObj *value(VM &, const VarStyleObj *, Vector &) const; protected: bool setValue(ELObj *, const Location &, Interpreter &); FOTBuilder::LengthSpec value_; }; LengthSpecInheritedC::LengthSpecInheritedC(const Identifier *ident, unsigned index, FOTBuilder::Length n) : InheritedC(ident, index), value_(n) { } ELObj *LengthSpecInheritedC::value(VM &vm, const VarStyleObj *, Vector &) const { return vm.interp->makeLengthSpec(value_); } bool LengthSpecInheritedC::setValue(ELObj *obj, const Location &loc, Interpreter &interp) { return interp.convertLengthSpecC(obj, identifier(), loc, value_); } class OptLengthSpecInheritedC : public InheritedC { public: OptLengthSpecInheritedC(const Identifier *, unsigned index); ELObj *value(VM &, const VarStyleObj *, Vector &) const; protected: bool setValue(ELObj *, const Location &, Interpreter &); FOTBuilder::OptLengthSpec value_; }; OptLengthSpecInheritedC::OptLengthSpecInheritedC(const Identifier *ident, unsigned index) : InheritedC(ident, index) { } ELObj *OptLengthSpecInheritedC::value(VM &vm, const VarStyleObj *, Vector &) const { if (!value_.hasLength) return vm.interp->makeFalse(); else return vm.interp->makeLengthSpec(value_.length); } bool OptLengthSpecInheritedC::setValue(ELObj *obj, const Location &loc, Interpreter &interp) { return interp.convertOptLengthSpecC(obj, identifier(), loc, value_); } class StringInheritedC : public InheritedC { public: StringInheritedC(const Identifier *, unsigned index, const Char *, size_t ); StringInheritedC(const Identifier *, unsigned index, const StringC &); ELObj *value(VM &, const VarStyleObj *, Vector &) const; protected: StringC str_; }; StringInheritedC::StringInheritedC(const Identifier *ident, unsigned index, const Char *s, size_t n) : InheritedC(ident, index), str_(s, n) { } StringInheritedC::StringInheritedC(const Identifier *ident, unsigned index, const StringC &s) : InheritedC(ident, index), str_(s) { } ELObj *StringInheritedC::value(VM &vm, const VarStyleObj *, Vector &) const { return new(*vm.interp) StringObj(str_); } class GenericInlineSpaceInheritedC : public InheritedC { public: typedef void (FOTBuilder::*Setter)(const FOTBuilder::InlineSpace &); GenericInlineSpaceInheritedC(const Identifier *, unsigned index, Setter setter); ELObj *value(VM &, const VarStyleObj *, Vector &) const; void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; private: FOTBuilder::InlineSpace value_; Setter setter_; }; GenericInlineSpaceInheritedC::GenericInlineSpaceInheritedC(const Identifier *ident, unsigned index, Setter setter) : InheritedC(ident, index), setter_(setter) { } ELObj *GenericInlineSpaceInheritedC::value(VM &vm, const VarStyleObj *, Vector &) const { return new (*vm.interp) InlineSpaceObj(value_); } void GenericInlineSpaceInheritedC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { (fotb.*setter_)(value_); } ConstPtr GenericInlineSpaceInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { GenericInlineSpaceInheritedC *copy = new GenericInlineSpaceInheritedC(identifier(), index(), setter_); InlineSpaceObj *iso = obj->asInlineSpace(); if (iso) { copy->value_ = iso->inlineSpace(); return copy; } else if (interp.convertLengthSpecC(obj, identifier(), loc, copy->value_.nominal)) { copy->value_.min = copy->value_.nominal; copy->value_.max = copy->value_.nominal; return copy; } delete copy; return 0; } class GenericBoolInheritedC : public BoolInheritedC { public: typedef void (FOTBuilder::*Setter)(bool); GenericBoolInheritedC(const Identifier *, unsigned index, Setter, bool = 0); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; private: Setter setter_; }; GenericBoolInheritedC ::GenericBoolInheritedC(const Identifier *ident, unsigned index, Setter setter, bool b) : BoolInheritedC(ident, index, b), setter_(setter) { } void GenericBoolInheritedC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { (fotb.*setter_)(value_); } ConstPtr GenericBoolInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { bool b; if (interp.convertBooleanC(obj, identifier(), loc, b)) return new GenericBoolInheritedC(identifier(), index(), setter_, b); return ConstPtr(); } class ExtensionBoolInheritedC : public BoolInheritedC { public: typedef void (FOTBuilder::*Setter)(bool); ExtensionBoolInheritedC(const Identifier *, unsigned index, Setter, bool = 0); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; private: Setter setter_; }; ExtensionBoolInheritedC ::ExtensionBoolInheritedC(const Identifier *ident, unsigned index, Setter setter, bool b) : BoolInheritedC(ident, index, b), setter_(setter) { } void ExtensionBoolInheritedC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { fotb.extensionSet(setter_, value_); } ConstPtr ExtensionBoolInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { bool b; if (interp.convertBooleanC(obj, identifier(), loc, b)) return new ExtensionBoolInheritedC(identifier(), index(), setter_, b); return ConstPtr(); } class ExtensionStringInheritedC : public StringInheritedC { public: typedef void (FOTBuilder::*Setter)(const StringC &); ExtensionStringInheritedC(const Identifier *, unsigned index, Setter); ExtensionStringInheritedC(const Identifier *, unsigned index, Setter, const Char *, size_t); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; private: Setter setter_; }; ExtensionStringInheritedC ::ExtensionStringInheritedC(const Identifier *ident, unsigned index, Setter setter) : StringInheritedC(ident, index, StringC()), setter_(setter) { } ExtensionStringInheritedC ::ExtensionStringInheritedC(const Identifier *ident, unsigned index, Setter setter, const Char *s, size_t n) : StringInheritedC(ident, index, s, n), setter_(setter) { } void ExtensionStringInheritedC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { fotb.extensionSet(setter_, str_); } ConstPtr ExtensionStringInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { const Char *s; size_t n; if (obj->stringData(s, n)) return new ExtensionStringInheritedC(identifier(), index(), setter_, s, n); invalidValue(loc, interp); return ConstPtr(); } class ExtensionIntegerInheritedC : public IntegerInheritedC { public: typedef void (FOTBuilder::*Setter)(long); ExtensionIntegerInheritedC(const Identifier *, unsigned index, Setter, long = 0); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; private: Setter setter_; }; ExtensionIntegerInheritedC ::ExtensionIntegerInheritedC(const Identifier *ident, unsigned index, Setter setter, long n) : IntegerInheritedC(ident, index, n), setter_(setter) { } void ExtensionIntegerInheritedC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { fotb.extensionSet(setter_, n_); } ConstPtr ExtensionIntegerInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { long n; if (interp.convertIntegerC(obj, identifier(), loc, n)) return new ExtensionIntegerInheritedC(identifier(), index(), setter_, n); return ConstPtr(); } class ExtensionLengthInheritedC : public LengthInheritedC { public: typedef void (FOTBuilder::*Setter)(FOTBuilder::Length); ExtensionLengthInheritedC(const Identifier *, unsigned index, Setter, FOTBuilder::Length = 0); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; private: Setter setter_; }; ExtensionLengthInheritedC ::ExtensionLengthInheritedC(const Identifier *ident, unsigned index, Setter setter, FOTBuilder::Length n) : LengthInheritedC(ident, index, n), setter_(setter) { } void ExtensionLengthInheritedC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { fotb.extensionSet(setter_, size_); } ConstPtr ExtensionLengthInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { FOTBuilder::Length n; if (interp.convertLengthC(obj, identifier(), loc, n)) return new ExtensionLengthInheritedC(identifier(), index(), setter_, n); return ConstPtr(); } class GenericLengthInheritedC : public LengthInheritedC { public: typedef void (FOTBuilder::*Setter)(FOTBuilder::Length); GenericLengthInheritedC(const Identifier *, unsigned index, Setter, FOTBuilder::Length = 0); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; private: Setter setter_; }; GenericLengthInheritedC ::GenericLengthInheritedC(const Identifier *ident, unsigned index, Setter setter, FOTBuilder::Length n) : LengthInheritedC(ident, index, n), setter_(setter) { } void GenericLengthInheritedC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { (fotb.*setter_)(size_); } ConstPtr GenericLengthInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { FOTBuilder::Length n; if (interp.convertLengthC(obj, identifier(), loc, n)) return new GenericLengthInheritedC(identifier(), index(), setter_, n); return ConstPtr(); } class GenericIntegerInheritedC : public IntegerInheritedC { public: typedef void (FOTBuilder::*Setter)(long); GenericIntegerInheritedC(const Identifier *, unsigned index, Setter, long); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; protected: Setter setter_; }; GenericIntegerInheritedC ::GenericIntegerInheritedC(const Identifier *ident, unsigned index, Setter setter, long n) : IntegerInheritedC(ident, index, n), setter_(setter) { } void GenericIntegerInheritedC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { (fotb.*setter_)(n_); } ConstPtr GenericIntegerInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { long n; if (interp.convertIntegerC(obj, identifier(), loc, n)) return new GenericIntegerInheritedC(identifier(), index(), setter_, n); return ConstPtr(); } class GenericMaybeIntegerInheritedC : public GenericIntegerInheritedC { public: GenericMaybeIntegerInheritedC(const Identifier *, unsigned index, Setter, long); ConstPtr make(ELObj *, const Location &, Interpreter &) const; ELObj *value(VM &, const VarStyleObj *, Vector &) const; }; GenericMaybeIntegerInheritedC ::GenericMaybeIntegerInheritedC(const Identifier *ident, unsigned index, Setter setter, long n) : GenericIntegerInheritedC(ident, index, setter, n) { } ELObj *GenericMaybeIntegerInheritedC::value(VM &vm, const VarStyleObj *style, Vector &dep) const { if (!n_) return vm.interp->makeFalse(); else return IntegerInheritedC::value(vm, style, dep); } ConstPtr GenericMaybeIntegerInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { long n; if (interp.convertOptPositiveIntegerC(obj, identifier(), loc, n)) return new GenericMaybeIntegerInheritedC(identifier(), index(), setter_, n); return ConstPtr(); } class GenericSymbolInheritedC : public SymbolInheritedC { public: typedef void (FOTBuilder::*Setter)(FOTBuilder::Symbol); GenericSymbolInheritedC(const Identifier *, unsigned index, Setter, FOTBuilder::Symbol = FOTBuilder::symbolFalse); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; private: Setter setter_; }; GenericSymbolInheritedC ::GenericSymbolInheritedC(const Identifier *ident, unsigned index, Setter setter, FOTBuilder::Symbol sym) : SymbolInheritedC(ident, index, sym), setter_(setter) { } void GenericSymbolInheritedC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { (fotb.*setter_)(sym_); } ConstPtr GenericSymbolInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { FOTBuilder::Symbol sym; if (interp.convertEnumC(obj, identifier(), loc, sym)) return new GenericSymbolInheritedC(identifier(), index(), setter_, sym); return ConstPtr(); } class GenericPublicIdInheritedC : public PublicIdInheritedC { public: typedef void (FOTBuilder::*Setter)(FOTBuilder::PublicId); GenericPublicIdInheritedC(const Identifier *, unsigned index, Setter, FOTBuilder::PublicId = 0); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; private: Setter setter_; }; GenericPublicIdInheritedC ::GenericPublicIdInheritedC(const Identifier *ident, unsigned index, Setter setter, FOTBuilder::PublicId pubid) : PublicIdInheritedC(ident, index, pubid), setter_(setter) { } void GenericPublicIdInheritedC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { (fotb.*setter_)(pubid_); } ConstPtr GenericPublicIdInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { FOTBuilder::PublicId pubid; if (interp.convertPublicIdC(obj, identifier(), loc, pubid)) return new GenericPublicIdInheritedC(identifier(), index(), setter_, pubid); return ConstPtr(); } class GenericLetter2InheritedC : public Letter2InheritedC { public: typedef void (FOTBuilder::*Setter)(FOTBuilder::Letter2); GenericLetter2InheritedC(const Identifier *, unsigned index, Setter, FOTBuilder::Letter2 = 0); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; private: Setter setter_; }; GenericLetter2InheritedC ::GenericLetter2InheritedC(const Identifier *ident, unsigned index, Setter setter, FOTBuilder::Letter2 code) : Letter2InheritedC(ident, index, code), setter_(setter) { } void GenericLetter2InheritedC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { (fotb.*setter_)(code_); } ConstPtr GenericLetter2InheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { FOTBuilder::Letter2 code; if (interp.convertLetter2C(obj, identifier(), loc, code)) return new GenericLetter2InheritedC(identifier(), index(), setter_, code); return ConstPtr(); } class GenericLengthSpecInheritedC : public LengthSpecInheritedC { public: typedef void (FOTBuilder::*Setter)(const FOTBuilder::LengthSpec &); GenericLengthSpecInheritedC(const Identifier *, unsigned index, Setter, long = 0); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; private: Setter setter_; }; GenericLengthSpecInheritedC ::GenericLengthSpecInheritedC(const Identifier *ident, unsigned index, Setter setter, long n) : LengthSpecInheritedC(ident, index, n), setter_(setter) { } void GenericLengthSpecInheritedC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { (fotb.*setter_)(value_); } ConstPtr GenericLengthSpecInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { GenericLengthSpecInheritedC *copy = new GenericLengthSpecInheritedC(identifier(), index(), setter_); if (!copy->setValue(obj, loc, interp)) { delete copy; copy = 0; } return copy; } class GenericOptLengthSpecInheritedC : public OptLengthSpecInheritedC { public: typedef void (FOTBuilder::*Setter)(const FOTBuilder::OptLengthSpec &); GenericOptLengthSpecInheritedC(const Identifier *, unsigned index, Setter); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; private: Setter setter_; }; GenericOptLengthSpecInheritedC ::GenericOptLengthSpecInheritedC(const Identifier *ident, unsigned index, Setter setter) : OptLengthSpecInheritedC(ident, index), setter_(setter) { } void GenericOptLengthSpecInheritedC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { (fotb.*setter_)(value_); } ConstPtr GenericOptLengthSpecInheritedC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { GenericOptLengthSpecInheritedC *copy = new GenericOptLengthSpecInheritedC(identifier(), index(), setter_); if (!copy->setValue(obj, loc, interp)) { delete copy; copy = 0; } return copy; } class FontSizeC : public LengthInheritedC { public: FontSizeC(const Identifier *, unsigned index, long); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; }; FontSizeC::FontSizeC(const Identifier *ident, unsigned index, long size) : LengthInheritedC(ident, index, size) { } void FontSizeC::set(VM &vm, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { fotb.setFontSize(size_); } ConstPtr FontSizeC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { long n; if (interp.convertLengthC(obj, identifier(), loc, n)) return new FontSizeC(identifier(), index(), n); return ConstPtr(); } class FontFamilyNameC : public StringInheritedC { public: FontFamilyNameC(const Identifier *, unsigned index, const Char *, size_t); FontFamilyNameC(const Identifier *, unsigned index, const StringC &); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; }; FontFamilyNameC::FontFamilyNameC(const Identifier *ident, unsigned index, const Char *s, size_t n) : StringInheritedC(ident, index, s, n) { } FontFamilyNameC::FontFamilyNameC(const Identifier *ident, unsigned index, const StringC &s) : StringInheritedC(ident, index, s) { } void FontFamilyNameC::set(VM &vm, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { fotb.setFontFamilyName(str_); } ConstPtr FontFamilyNameC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { const Char *s; size_t n; if (obj->stringData(s, n)) return new FontFamilyNameC(identifier(), index(), s, n); invalidValue(loc, interp); return ConstPtr(); } class ColorC : public InheritedC, private Collector::DynamicRoot { public: ColorC(const Identifier *, unsigned index, ColorObj *, Interpreter &); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; ELObj *value(VM &, const VarStyleObj *, Vector &) const; void trace(Collector &) const; private: ColorObj *color_; }; ColorC::ColorC(const Identifier *ident, unsigned index, ColorObj *color, Interpreter &interp) : InheritedC(ident, index), Collector::DynamicRoot(interp), color_(color) { } void ColorC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { color_->set(fotb); } ConstPtr ColorC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { ColorObj *color; if (interp.convertColorC(obj, identifier(), loc, color)) return new ColorC(identifier(), index(), color, interp); return ConstPtr(); } ELObj *ColorC::value(VM &vm, const VarStyleObj *, Vector &) const { if (!color_) return vm.interp->makeFalse(); else return color_; } void ColorC::trace(Collector &c) const { c.trace(color_); } class BackgroundColorC : public InheritedC, private Collector::DynamicRoot { public: BackgroundColorC(const Identifier *, unsigned index, ColorObj *, Interpreter &); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; ELObj *value(VM &, const VarStyleObj *, Vector &) const; void trace(Collector &) const; private: ColorObj *color_; }; BackgroundColorC::BackgroundColorC(const Identifier *ident, unsigned index, ColorObj *color, Interpreter &interp) : InheritedC(ident, index), Collector::DynamicRoot(interp), color_(color) { } void BackgroundColorC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { if (color_) color_->setBackground(fotb); else fotb.setBackgroundColor(); } ConstPtr BackgroundColorC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { ColorObj *color; if (interp.convertOptColorC(obj, identifier(), loc, color)) return new BackgroundColorC(identifier(), index(), color, interp); return ConstPtr(); } ELObj * BackgroundColorC::value(VM &vm, const VarStyleObj *, Vector &) const { if (color_) return color_; else return vm.interp->makeFalse(); } void BackgroundColorC::trace(Collector &c) const { c.trace(color_); } class GlyphSubstTableC : public InheritedC { public: GlyphSubstTableC(const Identifier *, unsigned index, bool isList); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&value, Vector &dependencies) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; ELObj *value(VM &, const VarStyleObj *, Vector &) const; void append(const ConstPtr &table) { tables_.push_back(table); } private: // Distinguish between #f and () for inherited-glyph-subst-table bool isList_; Vector > tables_; }; GlyphSubstTableC::GlyphSubstTableC(const Identifier *ident, unsigned index, bool isList) : InheritedC(ident, index), isList_(isList) { } void GlyphSubstTableC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { fotb.setGlyphSubstTable(tables_); } ConstPtr GlyphSubstTableC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { if (obj == interp.makeFalse()) return new GlyphSubstTableC(identifier(), index(), 0); GlyphSubstTableObj *table = obj->asGlyphSubstTable(); if (table) { Ptr tem = new GlyphSubstTableC(identifier(), index(), 0); ((GlyphSubstTableC *)tem.pointer())->append(table->glyphSubstTable()); return tem; } Ptr tem = new GlyphSubstTableC(identifier(), index(), 1); for (;;) { if (obj->isNil()) return tem; PairObj *pair = obj->asPair(); if (!pair) break; obj = pair->cdr(); table = pair->car()->asGlyphSubstTable(); if (!table) break; ((GlyphSubstTableC *)tem.pointer())->append(table->glyphSubstTable()); } invalidValue(loc, interp); return ConstPtr(); } ELObj *GlyphSubstTableC::value(VM &vm, const VarStyleObj *, Vector &) const { if (!isList_) { if (tables_.size()) return new (*vm.interp) GlyphSubstTableObj(tables_[0]); else return vm.interp->makeFalse(); } else { ELObj *list = vm.interp->makeNil(); ELObjDynamicRoot protect(*vm.interp, list); for (size_t i = tables_.size(); i > 0; i--) { ELObj *tableObj = new (*vm.interp) GlyphSubstTableObj(tables_[i - 1]); ELObjDynamicRoot protect2(*vm.interp, tableObj); list = vm.interp->makePair(tableObj, list); protect = list; } return list; } } class IgnoredC : public InheritedC, private Collector::DynamicRoot { public: IgnoredC(const Identifier *, unsigned index, ELObj *, Interpreter &); void set(VM &, const VarStyleObj *, FOTBuilder &, ELObj *&, Vector &) const; ConstPtr make(ELObj *, const Location &, Interpreter &) const; ELObj *value(VM &, const VarStyleObj *, Vector &) const; void trace(Collector &) const; private: ELObj *value_; }; IgnoredC::IgnoredC(const Identifier *ident, unsigned index, ELObj *value, Interpreter &interp) : InheritedC(ident, index), Collector::DynamicRoot(interp), value_(value) { } void IgnoredC::set(VM &, const VarStyleObj *, FOTBuilder &fotb, ELObj *&, Vector &) const { } ConstPtr IgnoredC::make(ELObj *obj, const Location &, Interpreter &interp) const { return new IgnoredC(identifier(), index(), obj, interp); } ELObj *IgnoredC::value(VM &, const VarStyleObj *, Vector &) const { return value_; } void IgnoredC::trace(Collector &c) const { c.trace(value_); } class BorderC : public IgnoredC { public: BorderC(const Identifier *, unsigned index, ELObj *, Interpreter &); ConstPtr make(ELObj *, const Location &, Interpreter &) const; }; BorderC::BorderC(const Identifier *ident, unsigned index, ELObj *value, Interpreter &interp) : IgnoredC(ident, index, value, interp) { } ConstPtr BorderC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { StyleObj *tem; SosofoObj *sosofo = obj->asSosofo(); if (sosofo && sosofo->tableBorderStyle(tem)) return new BorderC(identifier(), index(), obj, interp); bool b; if (interp.convertBooleanC(obj, identifier(), loc, b)) { if (b) obj = interp.makeTrue(); else obj = interp.makeFalse(); return new BorderC(identifier(), index(), obj, interp); } return ConstPtr(); } class RuleC : public IgnoredC { public: RuleC(const Identifier *, unsigned index, ELObj *, Interpreter &); ConstPtr make(ELObj *, const Location &, Interpreter &) const; }; RuleC::RuleC(const Identifier *ident, unsigned index, ELObj *value, Interpreter &interp) : IgnoredC(ident, index, value, interp) { } ConstPtr RuleC::make(ELObj *obj, const Location &loc, Interpreter &interp) const { SosofoObj *sosofo = obj->asSosofo(); if (sosofo && sosofo->isRule()) return new RuleC(identifier(), index(), obj, interp); invalidValue(loc, interp); return ConstPtr(); } class InheritedCPrimitiveObj : public PrimitiveObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } static const Signature signature_; InheritedCPrimitiveObj(const ConstPtr &ic) : PrimitiveObj(&signature_), inheritedC_(ic) { } ELObj *primitiveCall(int, ELObj **, EvalContext &, Interpreter &, const Location &); private: ConstPtr inheritedC_; }; const Signature InheritedCPrimitiveObj::signature_ = { 0, 0, 0 }; ELObj *InheritedCPrimitiveObj::primitiveCall(int, ELObj **, EvalContext &ec, Interpreter &interp, const Location &loc) { if (!ec.styleStack) { interp.setNextLocation(loc); interp.message(InterpreterMessages::notInCharacteristicValue); return interp.makeError(); } ELObj *obj = ec.styleStack->inherited(inheritedC_, ec.specLevel, interp, *ec.actualDependencies); interp.makeReadOnly(obj); return obj; } class ActualCPrimitiveObj : public PrimitiveObj { public: void *operator new(size_t, Collector &c) { return c.allocateObject(1); } static const Signature signature_; ActualCPrimitiveObj(const ConstPtr &ic) : PrimitiveObj(&signature_), inheritedC_(ic) { } ELObj *primitiveCall(int, ELObj **, EvalContext &, Interpreter &, const Location &); private: ConstPtr inheritedC_; }; const Signature ActualCPrimitiveObj::signature_ = { 0, 0, 0 }; ELObj *ActualCPrimitiveObj::primitiveCall(int, ELObj **, EvalContext &ec, Interpreter &interp, const Location &loc) { if (!ec.styleStack) { interp.setNextLocation(loc); interp.message(InterpreterMessages::notInCharacteristicValue); return interp.makeError(); } ELObj *obj = ec.styleStack->actual(inheritedC_, loc, interp, *ec.actualDependencies); interp.makeReadOnly(obj); return obj; } #define INHERITED_C(name, C, init) \ installInheritedC(name, new C(0, nInheritedC_++, init)) #define INHERITED_C2(name, C, init1, init2) \ installInheritedC(name, new C(0, nInheritedC_++, init1, init2)) #define STORE_INHERITED_C2(var, name, C, init1, init2) \ { InheritedC *ic = new C(0, nInheritedC_++, init1, init2); \ installInheritedC(name, ic); \ var = ic; } #define IGNORED_C(name, init) INHERITED_C2(name, IgnoredC, init, *this) static StyleObj *makeBorderStyle(bool b, unsigned index, Interpreter &interp) { Vector > forceSpecs; Vector > specs; specs.push_back( new GenericBoolInheritedC(interp.lookup(interp.makeStringC("border-present?")), index, &FOTBuilder::setBorderPresent, b)); StyleObj *style = new (interp) VarStyleObj(new StyleSpec(forceSpecs, specs), 0, 0, NodePtr()); interp.makePermanent(style); return style; } void Interpreter::installInheritedCs() { INHERITED_C("font-size", FontSizeC, (unitsPerInch()*10)/72); INHERITED_C("font-family-name", FontFamilyNameC, makeStringC("iso-serif")); INHERITED_C2("font-weight", GenericSymbolInheritedC, &FOTBuilder::setFontWeight, FOTBuilder::symbolMedium); INHERITED_C2("font-posture", GenericSymbolInheritedC, &FOTBuilder::setFontPosture, FOTBuilder::symbolUpright); INHERITED_C2("quadding", GenericSymbolInheritedC, &FOTBuilder::setQuadding, FOTBuilder::symbolStart); INHERITED_C2("display-alignment", GenericSymbolInheritedC, &FOTBuilder::setDisplayAlignment, FOTBuilder::symbolStart); INHERITED_C2("field-align", GenericSymbolInheritedC, &FOTBuilder::setFieldAlign, FOTBuilder::symbolStart); INHERITED_C2("lines", GenericSymbolInheritedC, &FOTBuilder::setLines, FOTBuilder::symbolWrap); INHERITED_C("start-indent", GenericLengthSpecInheritedC, &FOTBuilder::setStartIndent); INHERITED_C("first-line-start-indent", GenericLengthSpecInheritedC, &FOTBuilder::setFirstLineStartIndent); INHERITED_C("end-indent", GenericLengthSpecInheritedC, &FOTBuilder::setEndIndent); INHERITED_C("last-line-end-indent", GenericLengthSpecInheritedC, &FOTBuilder::setLastLineEndIndent); INHERITED_C2("line-spacing", GenericLengthSpecInheritedC, &FOTBuilder::setLineSpacing, unitsPerInch()*12/72); INHERITED_C("field-width", GenericLengthSpecInheritedC, &FOTBuilder::setFieldWidth); INHERITED_C("left-margin", GenericLengthInheritedC, &FOTBuilder::setLeftMargin); INHERITED_C("right-margin", GenericLengthInheritedC, &FOTBuilder::setRightMargin); INHERITED_C("top-margin", GenericLengthInheritedC, &FOTBuilder::setTopMargin); INHERITED_C("bottom-margin", GenericLengthInheritedC, &FOTBuilder::setBottomMargin); INHERITED_C("header-margin", GenericLengthInheritedC, &FOTBuilder::setHeaderMargin); INHERITED_C("footer-margin", GenericLengthInheritedC, &FOTBuilder::setFooterMargin); INHERITED_C2("page-width", GenericLengthInheritedC, &FOTBuilder::setPageWidth, unitsPerInch()*8 + unitsPerInch()/2); INHERITED_C2("page-height", GenericLengthInheritedC, &FOTBuilder::setPageHeight, unitsPerInch()*11); INHERITED_C2("color", ColorC, new (*this) DeviceRGBColorObj(0, 0, 0), *this); INHERITED_C2("background-color", BackgroundColorC, 0, *this); INHERITED_C2("border-present?", GenericBoolInheritedC, &FOTBuilder::setBorderPresent, 1); borderTrueStyle_ = makeBorderStyle(1, nInheritedC_ - 1, *this); borderFalseStyle_ = makeBorderStyle(0, nInheritedC_ - 1, *this); STORE_INHERITED_C2(tableBorderC_, "table-border", BorderC, makeFalse(), *this); STORE_INHERITED_C2(cellBeforeRowBorderC_, "cell-before-row-border", BorderC, makeFalse(), *this); STORE_INHERITED_C2(cellAfterRowBorderC_, "cell-after-row-border", BorderC, makeFalse(), *this); STORE_INHERITED_C2(cellBeforeColumnBorderC_, "cell-before-column-border", BorderC, makeFalse(), *this); STORE_INHERITED_C2(cellAfterColumnBorderC_, "cell-after-column-border", BorderC, makeFalse(), *this); STORE_INHERITED_C2(fractionBarC_, "fraction-bar", RuleC, lookup(makeStringC("rule"))->flowObj(), *this); INHERITED_C2("line-thickness", GenericLengthInheritedC, &FOTBuilder::setLineThickness, unitsPerInch()/72); INHERITED_C2("cell-before-row-margin", GenericLengthInheritedC, &FOTBuilder::setCellBeforeRowMargin, 0); INHERITED_C2("cell-after-row-margin", GenericLengthInheritedC, &FOTBuilder::setCellAfterRowMargin, 0); INHERITED_C2("cell-before-column-margin", GenericLengthInheritedC, &FOTBuilder::setCellBeforeColumnMargin, 0); INHERITED_C2("cell-after-column-margin", GenericLengthInheritedC, &FOTBuilder::setCellAfterColumnMargin, 0); INHERITED_C2("line-sep", GenericLengthInheritedC, &FOTBuilder::setLineSep, unitsPerInch()/72); INHERITED_C2("box-size-before", GenericLengthInheritedC, &FOTBuilder::setBoxSizeBefore, 8*unitsPerInch()/72); INHERITED_C2("box-size-after", GenericLengthInheritedC, &FOTBuilder::setBoxSizeAfter, 4*unitsPerInch()/72); INHERITED_C2("position-point-shift", GenericLengthSpecInheritedC, &FOTBuilder::setPositionPointShift, 0); INHERITED_C2("start-margin", GenericLengthSpecInheritedC, &FOTBuilder::setStartMargin, 0); INHERITED_C2("end-margin", GenericLengthSpecInheritedC, &FOTBuilder::setEndMargin, 0); INHERITED_C2("sideline-sep", GenericLengthSpecInheritedC, &FOTBuilder::setSidelineSep, 4*unitsPerInch()/72); INHERITED_C2("asis-wrap-indent", GenericLengthSpecInheritedC, &FOTBuilder::setAsisWrapIndent, 0); INHERITED_C2("line-number-sep", GenericLengthSpecInheritedC, &FOTBuilder::setLineNumberSep, 0); INHERITED_C2("last-line-justify-limit", GenericLengthSpecInheritedC, &FOTBuilder::setLastLineJustifyLimit, 0); INHERITED_C2("justify-glyph-space-max-add", GenericLengthSpecInheritedC, &FOTBuilder::setJustifyGlyphSpaceMaxAdd, 0); INHERITED_C2("justify-glyph-space-max-remove", GenericLengthSpecInheritedC, &FOTBuilder::setJustifyGlyphSpaceMaxRemove, 0); INHERITED_C2("table-corner-radius", GenericLengthSpecInheritedC, &FOTBuilder::setTableCornerRadius, 3*unitsPerInch()/72); INHERITED_C2("box-corner-radius", GenericLengthSpecInheritedC, &FOTBuilder::setBoxCornerRadius, 3*unitsPerInch()/72); INHERITED_C2("marginalia-sep", GenericLengthSpecInheritedC, &FOTBuilder::setMarginaliaSep, 0); INHERITED_C2("inhibit-line-breaks?", GenericBoolInheritedC, &FOTBuilder::setInhibitLineBreaks, 0); INHERITED_C2("hyphenate?", GenericBoolInheritedC, &FOTBuilder::setHyphenate, 0); INHERITED_C2("kern?", GenericBoolInheritedC, &FOTBuilder::setKern, 0); INHERITED_C2("ligature?", GenericBoolInheritedC, &FOTBuilder::setLigature, 0); INHERITED_C2("score-spaces?", GenericBoolInheritedC, &FOTBuilder::setScoreSpaces, 0); INHERITED_C2("float-out-sidelines?", GenericBoolInheritedC, &FOTBuilder::setFloatOutSidelines, 0); INHERITED_C2("float-out-marginalia?", GenericBoolInheritedC, &FOTBuilder::setFloatOutMarginalia, 0); INHERITED_C2("float-out-line-numbers?", GenericBoolInheritedC, &FOTBuilder::setFloatOutLineNumbers, 0); INHERITED_C2("cell-background?", GenericBoolInheritedC, &FOTBuilder::setCellBackground, 0); INHERITED_C2("span-weak?", GenericBoolInheritedC, &FOTBuilder::setSpanWeak, 0); INHERITED_C2("ignore-record-end?", GenericBoolInheritedC, &FOTBuilder::setIgnoreRecordEnd, 0); INHERITED_C2("numbered-lines?", GenericBoolInheritedC, &FOTBuilder::setNumberedLines, 1); INHERITED_C2("hanging-punct?", GenericBoolInheritedC, &FOTBuilder::setHangingPunct, 0); INHERITED_C2("box-open-end?", GenericBoolInheritedC, &FOTBuilder::setBoxOpenEnd, 0); INHERITED_C2("truncate-leader?", GenericBoolInheritedC, &FOTBuilder::setTruncateLeader, 0); INHERITED_C2("align-leader?", GenericBoolInheritedC, &FOTBuilder::setAlignLeader, 1); INHERITED_C2("table-part-omit-middle-header?", GenericBoolInheritedC, &FOTBuilder::setTablePartOmitMiddleHeader, 0); INHERITED_C2("table-part-omit-middle-footer?", GenericBoolInheritedC, &FOTBuilder::setTablePartOmitMiddleFooter, 0); INHERITED_C2("border-omit-at-break?", GenericBoolInheritedC, &FOTBuilder::setBorderOmitAtBreak, 0); INHERITED_C2("principal-mode-simultaneous?", GenericBoolInheritedC, &FOTBuilder::setPrincipalModeSimultaneous, 0); INHERITED_C2("marginalia-keep-with-previous?", GenericBoolInheritedC, &FOTBuilder::setMarginaliaKeepWithPrevious, 0); INHERITED_C2("grid-equidistant-rows?", GenericBoolInheritedC, &FOTBuilder::setGridEquidistantRows, 0); INHERITED_C2("grid-equidistant-columns?", GenericBoolInheritedC, &FOTBuilder::setGridEquidistantColumns, 0); INHERITED_C2("line-join", GenericSymbolInheritedC, &FOTBuilder::setLineJoin, FOTBuilder::symbolMiter); INHERITED_C2("line-cap", GenericSymbolInheritedC, &FOTBuilder::setLineCap, FOTBuilder::symbolButt); INHERITED_C2("line-number-side", GenericSymbolInheritedC, &FOTBuilder::setLineNumberSide, FOTBuilder::symbolStart); INHERITED_C2("kern-mode", GenericSymbolInheritedC, &FOTBuilder::setKernMode, FOTBuilder::symbolNormal); INHERITED_C2("input-whitespace-treatment", GenericSymbolInheritedC, &FOTBuilder::setInputWhitespaceTreatment, FOTBuilder::symbolPreserve); INHERITED_C2("filling-direction", GenericSymbolInheritedC, &FOTBuilder::setFillingDirection, FOTBuilder::symbolTopToBottom ); INHERITED_C2("writing-mode", GenericSymbolInheritedC, &FOTBuilder::setWritingMode, FOTBuilder::symbolLeftToRight ); INHERITED_C2("last-line-quadding", GenericSymbolInheritedC, &FOTBuilder::setLastLineQuadding, FOTBuilder::symbolRelative); INHERITED_C2("math-display-mode", GenericSymbolInheritedC, &FOTBuilder::setMathDisplayMode, FOTBuilder::symbolDisplay); INHERITED_C2("script-pre-align", GenericSymbolInheritedC, &FOTBuilder::setScriptPreAlign, FOTBuilder::symbolIndependent); INHERITED_C2("script-post-align", GenericSymbolInheritedC, &FOTBuilder::setScriptPostAlign, FOTBuilder::symbolIndependent); INHERITED_C2("script-mid-sup-align", GenericSymbolInheritedC, &FOTBuilder::setScriptMidSupAlign, FOTBuilder::symbolCenter); INHERITED_C2("script-mid-sub-align", GenericSymbolInheritedC, &FOTBuilder::setScriptMidSubAlign, FOTBuilder::symbolCenter); INHERITED_C2("numerator-align", GenericSymbolInheritedC, &FOTBuilder::setNumeratorAlign, FOTBuilder::symbolCenter); INHERITED_C2("denominator-align", GenericSymbolInheritedC, &FOTBuilder::setDenominatorAlign, FOTBuilder::symbolCenter); INHERITED_C2("grid-position-cell-type", GenericSymbolInheritedC, &FOTBuilder::setGridPositionCellType, FOTBuilder::symbolRowMajor); INHERITED_C2("grid-column-alignment", GenericSymbolInheritedC, &FOTBuilder::setGridColumnAlignment, FOTBuilder::symbolCenter); INHERITED_C2("grid-row-alignment", GenericSymbolInheritedC, &FOTBuilder::setGridRowAlignment, FOTBuilder::symbolCenter); INHERITED_C2("box-type", GenericSymbolInheritedC, &FOTBuilder::setBoxType, FOTBuilder::symbolBorder); INHERITED_C2("glyph-alignment-mode", GenericSymbolInheritedC, &FOTBuilder::setGlyphAlignmentMode, FOTBuilder::symbolFont); INHERITED_C2("box-border-alignment", GenericSymbolInheritedC, &FOTBuilder::setBoxBorderAlignment, FOTBuilder::symbolOutside); INHERITED_C2("cell-row-alignment", GenericSymbolInheritedC, &FOTBuilder::setCellRowAlignment, FOTBuilder::symbolStart); INHERITED_C2("border-alignment", GenericSymbolInheritedC, &FOTBuilder::setBorderAlignment, FOTBuilder::symbolCenter); INHERITED_C2("sideline-side", GenericSymbolInheritedC, &FOTBuilder::setSidelineSide, FOTBuilder::symbolStart); INHERITED_C2("hyphenation-keep", GenericSymbolInheritedC, &FOTBuilder::setHyphenationKeep, FOTBuilder::symbolFalse); INHERITED_C2("font-structure", GenericSymbolInheritedC, &FOTBuilder::setFontStructure, FOTBuilder::symbolSolid); INHERITED_C2("font-proportionate-width", GenericSymbolInheritedC, &FOTBuilder::setFontProportionateWidth, FOTBuilder::symbolMedium); INHERITED_C2("cell-crossed", GenericSymbolInheritedC, &FOTBuilder::setCellCrossed, FOTBuilder::symbolFalse); INHERITED_C2("marginalia-side", GenericSymbolInheritedC, &FOTBuilder::setMarginaliaSide, FOTBuilder::symbolStart); INHERITED_C2("layer", GenericIntegerInheritedC, &FOTBuilder::setLayer, 0); INHERITED_C2("background-layer", GenericIntegerInheritedC, &FOTBuilder::setBackgroundLayer, -1); INHERITED_C2("border-priority", GenericIntegerInheritedC, &FOTBuilder::setBorderPriority, 0); INHERITED_C2("line-repeat", GenericIntegerInheritedC, &FOTBuilder::setLineRepeat, 1); INHERITED_C2("span", GenericIntegerInheritedC, &FOTBuilder::setSpan, 1); INHERITED_C2("min-leader-repeat", GenericIntegerInheritedC, &FOTBuilder::setMinLeaderRepeat, 1); INHERITED_C2("hyphenation-remain-char-count", GenericIntegerInheritedC, &FOTBuilder::setHyphenationRemainCharCount, 2); INHERITED_C2("hyphenation-push-char-count", GenericIntegerInheritedC, &FOTBuilder::setHyphenationPushCharCount, 2); INHERITED_C2("widow-count", GenericIntegerInheritedC, &FOTBuilder::setWidowCount, 2); INHERITED_C2("orphan-count", GenericIntegerInheritedC, &FOTBuilder::setOrphanCount, 2); // #f or strictly positive integer INHERITED_C2("expand-tabs?", GenericMaybeIntegerInheritedC, &FOTBuilder::setExpandTabs, 8); INHERITED_C2("hyphenation-ladder-count", GenericMaybeIntegerInheritedC, &FOTBuilder::setHyphenationLadderCount, 0); INHERITED_C("background-tile", GenericPublicIdInheritedC, &FOTBuilder::setBackgroundTile); INHERITED_C("line-breaking-method", GenericPublicIdInheritedC, &FOTBuilder::setLineBreakingMethod); INHERITED_C("line-composition-method", GenericPublicIdInheritedC, &FOTBuilder::setLineCompositionMethod); INHERITED_C("implicit-bidi-method", GenericPublicIdInheritedC, &FOTBuilder::setImplicitBidiMethod); INHERITED_C("glyph-subst-method", GenericPublicIdInheritedC, &FOTBuilder::setGlyphSubstMethod); INHERITED_C("glyph-reorder-method", GenericPublicIdInheritedC, &FOTBuilder::setGlyphReorderMethod); INHERITED_C("hyphenation-method", GenericPublicIdInheritedC, &FOTBuilder::setHyphenationMethod); INHERITED_C("table-auto-width-method", GenericPublicIdInheritedC, &FOTBuilder::setTableAutoWidthMethod); INHERITED_C("font-name", GenericPublicIdInheritedC, &FOTBuilder::setFontName); // 2 letter symbol or #f INHERITED_C("language", GenericLetter2InheritedC, &FOTBuilder::setLanguage); INHERITED_C("country", GenericLetter2InheritedC, &FOTBuilder::setCountry); // Ignored characteristics ELObjDynamicRoot length0(*this, new (*this) LengthObj(0)); // #f or length-spec INHERITED_C("min-pre-line-spacing", GenericOptLengthSpecInheritedC, &FOTBuilder::setMinPreLineSpacing); INHERITED_C("min-post-line-spacing", GenericOptLengthSpecInheritedC, &FOTBuilder::setMinPostLineSpacing); INHERITED_C("min-leading", GenericOptLengthSpecInheritedC, &FOTBuilder::setMinLeading); // inline spaces INHERITED_C("escapement-space-before", GenericInlineSpaceInheritedC, &FOTBuilder::setEscapementSpaceBefore); INHERITED_C("escapement-space-after", GenericInlineSpaceInheritedC, &FOTBuilder::setEscapementSpaceAfter); // #f or glyph-subst-table INHERITED_C("glyph-subst-table", GlyphSubstTableC, 0); // #f or inline-space IGNORED_C("inline-space-space", makeFalse()); // integers // float IGNORED_C("line-miter-limit", makeInteger(10)); // #f or percentage IGNORED_C("alignment-point-offset", makeInteger(50)); // char IGNORED_C("hyphenation-char", new (*this) CharObj('-')); // char or #f IGNORED_C("asis-truncate-char", makeFalse()); IGNORED_C("asis-wrap-char", makeFalse()); // #f, #t or char IGNORED_C("first-line-align", makeFalse()); // list of strings IGNORED_C("hyphenation-exceptions", makeNil()); // set of corners IGNORED_C("box-corner-rounded", makeFalse()); IGNORED_C("table-corner-rounded", makeFalse()); // list of lengths IGNORED_C("line-dash", new (*this) PairObj(length0, makeNil())); // list of glyphs/chars IGNORED_C("allowed-ligatures", makeNil()); // #f or sosofo IGNORED_C("line-number", makeFalse()); // integer or 'force IGNORED_C("line-spacing-priority", makeInteger(0)); // procedure or #f IGNORED_C("char-map", makeFalse()); } void Interpreter::installInheritedC(const char *s, InheritedC *ic) { StringC name(makeStringC(s)); Identifier *ident = lookup(name); ic->setIdentifier(ident); ident->setInheritedC(ic); installInheritedCProc(ident); if (dsssl2() && name.size() && name[name.size() - 1] == '?') { name.resize(name.size() - 1); Identifier *ident2 = lookup(name); ASSERT(ident2->inheritedC().isNull()); ident2->setInheritedC(ic); installInheritedCProc(ident2); } } void Interpreter::installExtensionInheritedC(Identifier *ident, const StringC &pubid, const Location &loc) { ConstPtr ic; if (pubid.size() != 0 && extensionTable_) { for (const FOTBuilder::Extension *ep = extensionTable_; ep->pubid; ep++) { if (pubid == ep->pubid) { if (ep->boolSetter) ic = new ExtensionBoolInheritedC(ident, nInheritedC_++, ep->boolSetter); else if (ep->stringSetter) ic = new ExtensionStringInheritedC(ident, nInheritedC_++, ep->stringSetter); else if (ep->integerSetter) ic = new ExtensionIntegerInheritedC(ident, nInheritedC_++, ep->integerSetter); else if (ep->lengthSetter) ic = new ExtensionLengthInheritedC(ident, nInheritedC_++, ep->lengthSetter); break; } } } if (ic.isNull()) // FIXME should call FOTBuilder with PublicId argument ic = new IgnoredC(ident, nInheritedC_++, makeFalse(), *this); ident->setInheritedC(ic, currentPartIndex(), loc); installInheritedCProc(ident); } void Interpreter::installInheritedCProc(const Identifier *ident) { const ConstPtr &ic = ident->inheritedC(); StringC tem(makeStringC("inherited-")); tem += ident->name(); Identifier *inhIdent = lookup(tem); PrimitiveObj *prim = new (*this) InheritedCPrimitiveObj(ic); makePermanent(prim); prim->setIdentifier(inhIdent); inhIdent->setValue(prim); tem = makeStringC("actual-"); tem += ident->name(); Identifier *actIdent = lookup(tem); prim = new (*this) ActualCPrimitiveObj(ic); makePermanent(prim); prim->setIdentifier(actIdent); actIdent->setValue(prim); } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/style/FlowObj_inst.m4100444 764 764 2415 6606574462 14225 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Owner.h" #include "CopyOwner.h" #undef SP_DEFINE_TEMPLATES #if _MSC_VER >= 1100 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef DSSSL_NAMESPACE using namespace DSSSL_NAMESPACE; #endif #ifdef GROVE_NAMESPACE using namespace GROVE_NAMESPACE; #endif #else #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif #endif __instantiate(Owner) __instantiate(CopyOwner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/style/FlowObj_inst.cxx100444 764 764 12270 6607561634 14525 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "stylelib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Owner.h" #include "CopyOwner.h" #undef SP_DEFINE_TEMPLATES #if _MSC_VER >= 1100 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef DSSSL_NAMESPACE using namespace DSSSL_NAMESPACE; #endif #ifdef GROVE_NAMESPACE using namespace GROVE_NAMESPACE; #endif #else #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template CopyOwner #else #ifdef __xlC__ #pragma define(CopyOwner) #else #ifdef SP_ANSI_CLASS_INST template class CopyOwner; #else typedef CopyOwner Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_2; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_3; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_4; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_5; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_6; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_7; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_8; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_9; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_10; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_11; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_12; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_13; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_14; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_15; #endif #endif #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/style/common_inst.m4100444 764 764 5414 6606574462 14155 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. // Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #include "stylelib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "StringOf.h" #include "Vector.h" #include "XcharMap.h" #include "Ptr.h" #include "PointerTable.h" #include "OwnerTable.h" #include "HashTable.h" #include "HashTableItemBase.h" #include "SubstTable.h" #include "ISet.h" #include "Owner.h" #undef SP_DEFINE_TEMPLATES #include "types.h" #include "Entity.h" #include "Syntax.h" #include "ExtendEntityManager.h" #include "Event.h" #include "CmdLineApp.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif __instantiate(Vector) __instantiate(Ptr) __instantiate(Ptr) __instantiate(Ptr) __instantiate(Vector) __instantiate(Vector) __instantiate(String) __instantiate(Vector >) __instantiate(String) __instantiate(`OwnerTable') __instantiate(`OwnerTableIter') __instantiate(XcharMap) __instantiate(SharedXcharMap) __instantiate(Ptr >) __instantiate(ConstPtr >) __instantiate(`PointerTableIter') __instantiate(`PointerTable') __instantiate(HashTableItemBase >) __instantiate(`OwnerTable >,String,Hash,HashTableKeyFunction > >') __instantiate(`CopyOwnerTable >,String,Hash,HashTableKeyFunction > >') __instantiate(`OwnerTableIter >, String, Hash, HashTableKeyFunction > >') __instantiate(`PointerTable >*,String,Hash,HashTableKeyFunction > >') __instantiate(`PointerTableIter > *, String, Hash, HashTableKeyFunction > >') __instantiate(Vector >*>) __instantiate(Ptr) __instantiate(`HashTable') __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(SubstTable) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(ISet) __instantiate(Vector) __instantiate(`HashTableItem') __instantiate(`HashTable') __instantiate(Vector) __instantiate(Owner) __instantiate(Ptr) __instantiate(Ptr) __instantiate(Vector) #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/style/common_inst.cxx100444 764 764 32117 6606636374 14460 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. // Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #include "stylelib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "StringOf.h" #include "Vector.h" #include "XcharMap.h" #include "Ptr.h" #include "PointerTable.h" #include "OwnerTable.h" #include "HashTable.h" #include "HashTableItemBase.h" #include "SubstTable.h" #include "ISet.h" #include "Owner.h" #undef SP_DEFINE_TEMPLATES #include "types.h" #include "Entity.h" #include "Syntax.h" #include "ExtendEntityManager.h" #include "Event.h" #include "CmdLineApp.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_2; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_3; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_4; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_5; #endif #endif #endif #ifdef __DECCXX #pragma define_template String #else #ifdef __xlC__ #pragma define(String) #else #ifdef SP_ANSI_CLASS_INST template class String; #else typedef String Dummy_6; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_7; #endif #endif #endif #ifdef __DECCXX #pragma define_template String #else #ifdef __xlC__ #pragma define(String) #else #ifdef SP_ANSI_CLASS_INST template class String; #else typedef String Dummy_8; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTable #else #ifdef __xlC__ #pragma define(OwnerTable) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTable; #else typedef OwnerTable Dummy_9; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTableIter #else #ifdef __xlC__ #pragma define(OwnerTableIter) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTableIter; #else typedef OwnerTableIter Dummy_10; #endif #endif #endif #ifdef __DECCXX #pragma define_template XcharMap #else #ifdef __xlC__ #pragma define(XcharMap) #else #ifdef SP_ANSI_CLASS_INST template class XcharMap; #else typedef XcharMap Dummy_11; #endif #endif #endif #ifdef __DECCXX #pragma define_template SharedXcharMap #else #ifdef __xlC__ #pragma define(SharedXcharMap) #else #ifdef SP_ANSI_CLASS_INST template class SharedXcharMap; #else typedef SharedXcharMap Dummy_12; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr > #else #ifdef __xlC__ #pragma define(Ptr >) #else #ifdef SP_ANSI_CLASS_INST template class Ptr >; #else typedef Ptr > Dummy_13; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr > #else #ifdef __xlC__ #pragma define(ConstPtr >) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr >; #else typedef ConstPtr > Dummy_14; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTableIter #else #ifdef __xlC__ #pragma define(PointerTableIter) #else #ifdef SP_ANSI_CLASS_INST template class PointerTableIter; #else typedef PointerTableIter Dummy_15; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable #else #ifdef __xlC__ #pragma define(PointerTable) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable; #else typedef PointerTable Dummy_16; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTableItemBase > #else #ifdef __xlC__ #pragma define(HashTableItemBase >) #else #ifdef SP_ANSI_CLASS_INST template class HashTableItemBase >; #else typedef HashTableItemBase > Dummy_17; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTable >,String,Hash,HashTableKeyFunction > > #else #ifdef __xlC__ #pragma define(OwnerTable >,String,Hash,HashTableKeyFunction > >) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTable >,String,Hash,HashTableKeyFunction > >; #else typedef OwnerTable >,String,Hash,HashTableKeyFunction > > Dummy_18; #endif #endif #endif #ifdef __DECCXX #pragma define_template CopyOwnerTable >,String,Hash,HashTableKeyFunction > > #else #ifdef __xlC__ #pragma define(CopyOwnerTable >,String,Hash,HashTableKeyFunction > >) #else #ifdef SP_ANSI_CLASS_INST template class CopyOwnerTable >,String,Hash,HashTableKeyFunction > >; #else typedef CopyOwnerTable >,String,Hash,HashTableKeyFunction > > Dummy_19; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTableIter >, String, Hash, HashTableKeyFunction > > #else #ifdef __xlC__ #pragma define(OwnerTableIter >, String, Hash, HashTableKeyFunction > >) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTableIter >, String, Hash, HashTableKeyFunction > >; #else typedef OwnerTableIter >, String, Hash, HashTableKeyFunction > > Dummy_20; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable >*,String,Hash,HashTableKeyFunction > > #else #ifdef __xlC__ #pragma define(PointerTable >*,String,Hash,HashTableKeyFunction > >) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable >*,String,Hash,HashTableKeyFunction > >; #else typedef PointerTable >*,String,Hash,HashTableKeyFunction > > Dummy_21; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTableIter > *, String, Hash, HashTableKeyFunction > > #else #ifdef __xlC__ #pragma define(PointerTableIter > *, String, Hash, HashTableKeyFunction > >) #else #ifdef SP_ANSI_CLASS_INST template class PointerTableIter > *, String, Hash, HashTableKeyFunction > >; #else typedef PointerTableIter > *, String, Hash, HashTableKeyFunction > > Dummy_22; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector >*> #else #ifdef __xlC__ #pragma define(Vector >*>) #else #ifdef SP_ANSI_CLASS_INST template class Vector >*>; #else typedef Vector >*> Dummy_23; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_24; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTable #else #ifdef __xlC__ #pragma define(HashTable) #else #ifdef SP_ANSI_CLASS_INST template class HashTable; #else typedef HashTable Dummy_25; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_26; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_27; #endif #endif #endif #ifdef __DECCXX #pragma define_template SubstTable #else #ifdef __xlC__ #pragma define(SubstTable) #else #ifdef SP_ANSI_CLASS_INST template class SubstTable; #else typedef SubstTable Dummy_28; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_29; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_30; #endif #endif #endif #ifdef __DECCXX #pragma define_template ISet #else #ifdef __xlC__ #pragma define(ISet) #else #ifdef SP_ANSI_CLASS_INST template class ISet; #else typedef ISet Dummy_31; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_32; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTableItem #else #ifdef __xlC__ #pragma define(HashTableItem) #else #ifdef SP_ANSI_CLASS_INST template class HashTableItem; #else typedef HashTableItem Dummy_33; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTable #else #ifdef __xlC__ #pragma define(HashTable) #else #ifdef SP_ANSI_CLASS_INST template class HashTable; #else typedef HashTable Dummy_34; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_35; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_36; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_37; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_38; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_39; #endif #endif #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/style/Makefile.sub100444 764 764 1233 6604607716 13606 0ustar jjcjjcLIB=style OBJS=Collector.o \ DssslApp.o \ DssslSpecEventHandler.o \ ELObj.o \ ELObjMessageArg.o \ Expression.o \ FOTBuilder.o \ FlowObj.o \ InheritedC.o \ Insn.o \ Interpreter.o \ InterpreterMessages.o \ NumberCache.o \ ProcessContext.o \ ProcessingMode.o \ SchemeParser.o \ Style.o \ StyleEngine.o \ primitive.o \ GroveManager.o \ Pattern.o \ MacroFlowObj.o \ style_inst.o INCLUDE=-I$(srcdir)/../grove -I$(srcdir)/../spgrove GENSRCS=style_inst.cxx FlowObj_inst.cxx primitive_inst.cxx \ InterpreterMessages.h DssslAppMessages.h FlowObj.o: FlowObj_inst.cxx primitive.o: primitive_inst.cxx DssslApp.o: DssslAppMessages.h jade-1.2.1/style/style.dsp100444 764 764 33146 6607561236 13255 0ustar jjcjjc# Microsoft Developer Studio Project File - Name="style" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=style - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "style.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "style.mak" CFG="style - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "style - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "style - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "style - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\spgrove" /I "..\grove" /I "..\include" /D "_WINDOWS" /D "NDEBUG" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x20000000" /subsystem:windows /dll /machine:I386 /out:"..\bin\style.dll" # SUBTRACT LINK32 /profile /map !ELSEIF "$(CFG)" == "style - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\Debug" # PROP BASE Intermediate_Dir ".\Debug" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir ".\Debug" # PROP Intermediate_Dir ".\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\spgrove" /I "..\grove" /I "..\include" /D "_WINDOWS" /D "_DEBUG" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /FR /YX /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x20000000" /subsystem:windows /dll /debug /machine:I386 /out:"..\dbgbin\style.dll" # SUBTRACT LINK32 /incremental:no /map !ENDIF # Begin Target # Name "style - Win32 Release" # Name "style - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # Begin Source File SOURCE=.\Collector.cxx # SUBTRACT CPP /YX # End Source File # Begin Source File SOURCE=.\common_inst.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\common_inst.m4 !IF "$(CFG)" == "style - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\common_inst.m4 InputName=common_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "style - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\common_inst.m4 InputName=common_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\DssslApp.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\DssslAppMessages.msg !IF "$(CFG)" == "style - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\DssslAppMessages.msg InputName=DssslAppMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "style - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\DssslAppMessages.msg InputName=DssslAppMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\DssslSpecEventHandler.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\ELObj.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\ELObjMessageArg.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\Expression.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\FlowObj.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\FlowObj_inst.m4 !IF "$(CFG)" == "style - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\FlowObj_inst.m4 InputName=FlowObj_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "style - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\FlowObj_inst.m4 InputName=FlowObj_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\FOTBuilder.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\GroveManager.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\InheritedC.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\Insn.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\Interpreter.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\InterpreterMessages.cxx # SUBTRACT CPP /YX # End Source File # Begin Source File SOURCE=.\InterpreterMessages.msg !IF "$(CFG)" == "style - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\InterpreterMessages.msg InputName=InterpreterMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "style - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\InterpreterMessages.msg InputName=InterpreterMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\MacroFlowObj.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\NumberCache.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\Pattern.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\primitive.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\primitive_inst.m4 !IF "$(CFG)" == "style - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\primitive_inst.m4 InputName=primitive_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "style - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\primitive_inst.m4 InputName=primitive_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\ProcessContext.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\ProcessingMode.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\SchemeParser.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\Style.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\style_inst.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\style_inst.m4 !IF "$(CFG)" == "style - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\style_inst.m4 InputName=style_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "style - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\style_inst.m4 InputName=style_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\StyleEngine.cxx # ADD CPP /Yu"stylelib.h" # End Source File # Begin Source File SOURCE=.\stylelib.cxx # ADD CPP /Yc"stylelib.h" # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # Begin Source File SOURCE=.\charNames.h # End Source File # Begin Source File SOURCE=.\Collector.h # End Source File # Begin Source File SOURCE=.\dsssl_ns.h # End Source File # Begin Source File SOURCE=.\DssslApp.h # End Source File # Begin Source File SOURCE=.\DssslAppMessages.h # End Source File # Begin Source File SOURCE=.\DssslSpecEventHandler.h # End Source File # Begin Source File SOURCE=.\ELObj.h # End Source File # Begin Source File SOURCE=.\ELObjMessageArg.h # End Source File # Begin Source File SOURCE=.\EvalContext.h # End Source File # Begin Source File SOURCE=.\Expression.h # End Source File # Begin Source File SOURCE=.\FOTBuilder.h # End Source File # Begin Source File SOURCE=.\GroveManager.h # End Source File # Begin Source File SOURCE=.\Insn.h # End Source File # Begin Source File SOURCE=.\Insn2.h # End Source File # Begin Source File SOURCE=.\Interpreter.h # End Source File # Begin Source File SOURCE=.\InterpreterMessages.h # End Source File # Begin Source File SOURCE=.\jade_version.h # End Source File # Begin Source File SOURCE=.\MacroFlowObj.h # End Source File # Begin Source File SOURCE=.\NumberCache.h # End Source File # Begin Source File SOURCE=.\Pattern.h # End Source File # Begin Source File SOURCE=.\primitive.h # End Source File # Begin Source File SOURCE=.\ProcessContext.h # End Source File # Begin Source File SOURCE=.\ProcessingMode.h # End Source File # Begin Source File SOURCE=.\SchemeParser.h # End Source File # Begin Source File SOURCE=.\sdata.h # End Source File # Begin Source File SOURCE=.\SosofoObj.h # End Source File # Begin Source File SOURCE=.\Style.h # End Source File # Begin Source File SOURCE=.\style_pch.h # End Source File # Begin Source File SOURCE=.\StyleEngine.h # End Source File # Begin Source File SOURCE=.\stylelib.h # End Source File # Begin Source File SOURCE=.\VM.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # End Group # Begin Source File SOURCE=.\FlowObj_inst.cxx # PROP BASE Exclude_From_Build 1 # PROP Ignore_Default_Tool 1 # End Source File # Begin Source File SOURCE=.\primitive_inst.cxx # PROP BASE Exclude_From_Build 1 # PROP Ignore_Default_Tool 1 # End Source File # End Target # End Project jade-1.2.1/jade/ 40775 764 764 0 6610553420 11016 5ustar jjcjjcjade-1.2.1/jade/jade.cxx100444 764 764 11026 6606574462 12574 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "config.h" #include "DssslApp.h" #include "SgmlFOTBuilder.h" #include "RtfFOTBuilder.h" #include "TeXFOTBuilder.h" #include "TransformFOTBuilder.h" #ifdef JADE_HTML #include "HtmlFOTBuilder.h" #endif #ifdef JADE_MIF #include "MifFOTBuilder.h" #endif #include "OutputCharStream.h" #include "macros.h" #include "sptchar.h" #include "JadeMessages.h" #include "ErrnoMessageArg.h" #include "OutputByteStream.h" #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class JadeApp : public DssslApp { public: enum { u = 72000 }; JadeApp(); void processOption(AppChar opt, const AppChar *arg); FOTBuilder *makeFOTBuilder(const FOTBuilder::Extension *&); private: enum OutputType { fotType, rtfType, #ifdef JADE_HTML htmlType, #endif texType, #ifdef JADE_MIF mifType, #endif sgmlType, xmlType }; static const AppChar *const outputTypeNames[]; OutputType outputType_; String outputFilename_; Vector outputOptions_; FileOutputByteStream outputFile_; }; const JadeApp::AppChar *const JadeApp::outputTypeNames[] = { SP_T("fot"), SP_T("rtf"), #ifdef JADE_HTML SP_T("html"), #endif SP_T("tex"), #ifdef JADE_MIF SP_T("mif"), #endif SP_T("sgml"), SP_T("xml") }; JadeApp::JadeApp() : DssslApp(u), outputType_(fotType) { registerOption('t', #ifdef JADE_MIF SP_T("(fot|rtf|tex|mif|sgml|xml)") #else SP_T("(fot|rtf|tex|sgml|xml)") #endif ); registerOption('o', SP_T("output_file")); } void JadeApp::processOption(AppChar opt, const AppChar *arg) { switch (opt) { case 't': { const AppChar *sub = tcschr(arg, SP_T('-')); size_t len = sub ? sub - arg : tcslen(arg); for (size_t i = 0;; i++) { if (i >= SIZEOF(outputTypeNames)) { message(JadeMessages::unknownType, StringMessageArg(convertInput(arg))); break; } if (tcsncmp(arg, outputTypeNames[i], len) == 0) { outputType_ = OutputType(i); break; } } if (sub) { StringC tem(convertInput(sub)); StringC arg; for (size_t i = 0; i < tem.size(); i++) { if (tem[i] == '-') { if (arg.size()) outputOptions_.push_back(arg); arg.resize(0); } else arg += tem[i]; } if (arg.size()) outputOptions_.push_back(arg); } } break; case 'o': if (*arg == 0) message(JadeMessages::emptyOutputFilename); else outputFilename_.assign(arg, tcslen(arg)); break; default: DssslApp::processOption(opt, arg); break; } } FOTBuilder *JadeApp::makeFOTBuilder(const FOTBuilder::Extension *&exts) { if (outputFilename_.size() == 0) { if (defaultOutputBasename_.size() != 0) { #ifdef SP_WIDE_SYSTEM outputFilename_ = defaultOutputBasename_; #else outputFilename_ = codingSystem()->convertOut(defaultOutputBasename_); // convertOut adds a nul outputFilename_.resize(outputFilename_.size() - 1); #endif } else outputFilename_.assign(SP_T("jade-out"), 8); outputFilename_ += SP_T('.'); const AppChar *ext = outputTypeNames[outputType_]; outputFilename_.append(ext, tcslen(ext)); } switch (outputType_) { #ifdef JADE_HTML case htmlType: #endif case sgmlType: case xmlType: break; default: outputFilename_ += 0; if (!outputFile_.open(outputFilename_.data())) { message(JadeMessages::cannotOpenOutputError, StringMessageArg(CmdLineApp::convertInput(outputFilename_.data())), ErrnoMessageArg(errno)); return 0; } break; } switch (outputType_) { case rtfType: unitsPerInch_ = 20*72; // twips return makeRtfFOTBuilder(&outputFile_, outputOptions_, entityManager(), systemCharset(), this, exts); case texType: return makeTeXFOTBuilder(&outputFile_, this, exts); #ifdef JADE_HTML case htmlType: return makeHtmlFOTBuilder(outputFilename_, this, exts); #endif /* JADE_HTML */ #ifdef JADE_MIF case mifType: return makeMifFOTBuilder(outputFilename_, entityManager(), systemCharset(), this, exts); #endif /* JADE_MIF */ case fotType: return makeSgmlFOTBuilder(new RecordOutputCharStream(new EncodeOutputCharStream(&outputFile_, outputCodingSystem_))); case sgmlType: case xmlType: return makeTransformFOTBuilder(this, outputType_ == xmlType, exts); default: break; } CANNOT_HAPPEN(); return 0; } #ifdef DSSSL_NAMESPACE } #endif #ifdef DSSSL_NAMESPACE SP_DEFINE_APP(DSSSL_NAMESPACE::JadeApp) #else SP_DEFINE_APP(JadeApp) #endif jade-1.2.1/jade/Makefile.sub100444 764 764 1434 6606574462 13357 0ustar jjcjjcPROG=jade OBJS=jade.o SgmlFOTBuilder.o RtfFOTBuilder.o HtmlFOTBuilder.o \ TeXFOTBuilder.o TransformFOTBuilder.o MifFOTBuilder.o INCLUDE=-I$(srcdir)/../grove -I$(srcdir)/../spgrove -I$(srcdir)/../style XLIBS=../style/libstyle.a ../spgrove/libspgrove.a ../grove/libgrove.a \ ../lib/libsp.a GENSRCS=JadeMessages.h HtmlMessages.h RtfMessages.h TeXMessages.h \ HtmlFOTBuilder_inst.cxx RtfFOTBuilder_inst.cxx TeXFOTBuilder_inst.cxx \ TransformFOTBuilder_inst.cxx MifMessages.h MifFOTBuilder_inst.cxx HtmlFOTBuilder.o: HtmlFOTBuilder_inst.cxx HtmlMessages.h RtfFOTBuilder.o: RtfFOTBuilder_inst.cxx RtfMessages.h TeXFOTBuilder.o: TeXFOTBuilder_inst.cxx TeXMessages.h MifFOTBuilder.o: MifFOTBuilder_inst.cxx MifMessages.h TransformFOTBuilder.o: TransformFOTBuilder_inst.cxx jade.o: JadeMessages.h jade-1.2.1/jade/jade.dsp100444 764 764 34535 6607562146 12567 0ustar jjcjjc# Microsoft Developer Studio Project File - Name="jade" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=jade - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "jade.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "jade.mak" CFG="jade - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "jade - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "jade - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "jade - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\include" /I "..\style" /I "..\grove" /I "..\spgrove" /D "_CONSOLE" /D "NDEBUG" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"..\bin\jade.exe" # SUBTRACT LINK32 /profile /map !ELSEIF "$(CFG)" == "jade - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\Debug" # PROP BASE Intermediate_Dir ".\Debug" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir ".\Debug" # PROP Intermediate_Dir ".\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\include" /I "..\style" /I "..\grove" /I "..\spgrove" /D "_CONSOLE" /D "_DEBUG" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\dbgbin\jade.exe" # SUBTRACT LINK32 /incremental:no !ENDIF # Begin Target # Name "jade - Win32 Release" # Name "jade - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # Begin Source File SOURCE=..\dsssl\fot.dtd # End Source File # Begin Source File SOURCE=.\HtmlFOTBuilder.cxx # End Source File # Begin Source File SOURCE=.\HtmlFOTBuilder_inst.m4 !IF "$(CFG)" == "jade - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\HtmlFOTBuilder_inst.m4 InputName=HtmlFOTBuilder_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "jade - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\HtmlFOTBuilder_inst.m4 InputName=HtmlFOTBuilder_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\HtmlMessages.msg !IF "$(CFG)" == "jade - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\HtmlMessages.msg InputName=HtmlMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "jade - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\HtmlMessages.msg InputName=HtmlMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\jade.cxx # ADD CPP /D "JADE_MIF" # End Source File # Begin Source File SOURCE=.\JadeMessages.msg !IF "$(CFG)" == "jade - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\JadeMessages.msg InputName=JadeMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "jade - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\JadeMessages.msg InputName=JadeMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\MifFOTBuilder.cxx # ADD CPP /D "JADE_MIF" # End Source File # Begin Source File SOURCE=.\MifFOTBuilder_inst.m4 !IF "$(CFG)" == "jade - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\MifFOTBuilder_inst.m4 InputName=MifFOTBuilder_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "jade - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\MifFOTBuilder_inst.m4 InputName=MifFOTBuilder_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\MifMessages.msg !IF "$(CFG)" == "jade - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\MifMessages.msg InputName=MifMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "jade - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\MifMessages.msg InputName=MifMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\RtfFOTBuilder.cxx # End Source File # Begin Source File SOURCE=.\RtfFOTBuilder_inst.m4 !IF "$(CFG)" == "jade - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\RtfFOTBuilder_inst.m4 InputName=RtfFOTBuilder_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "jade - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\RtfFOTBuilder_inst.m4 InputName=RtfFOTBuilder_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\RtfMessages.msg !IF "$(CFG)" == "jade - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\RtfMessages.msg InputName=RtfMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "jade - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\RtfMessages.msg InputName=RtfMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\RtfOle.cxx # End Source File # Begin Source File SOURCE=.\SgmlFOTBuilder.cxx # End Source File # Begin Source File SOURCE=.\TeXFOTBuilder.cxx # End Source File # Begin Source File SOURCE=.\TeXFOTBuilder_inst.m4 !IF "$(CFG)" == "jade - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\TeXFOTBuilder_inst.m4 InputName=TeXFOTBuilder_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "jade - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\TeXFOTBuilder_inst.m4 InputName=TeXFOTBuilder_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\TeXMessages.msg !IF "$(CFG)" == "jade - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\TeXMessages.msg InputName=TeXMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "jade - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\TeXMessages.msg InputName=TeXMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\TransformFOTBuilder.cxx # End Source File # Begin Source File SOURCE=.\TransformFOTBuilder_inst.m4 !IF "$(CFG)" == "jade - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\TransformFOTBuilder_inst.m4 InputName=TransformFOTBuilder_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "jade - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\TransformFOTBuilder_inst.m4 InputName=TransformFOTBuilder_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # Begin Source File SOURCE=.\HtmlMessages.h # End Source File # Begin Source File SOURCE=.\JadeMessages.h # End Source File # Begin Source File SOURCE=.\MifFOTBuilder.h # End Source File # Begin Source File SOURCE=.\MifMessages.h # End Source File # Begin Source File SOURCE=.\RtfFOTBuilder.h # End Source File # Begin Source File SOURCE=.\RtfMessages.h # End Source File # Begin Source File SOURCE=.\RtfOle.h # End Source File # Begin Source File SOURCE=.\TeXFOTBuilder.h # End Source File # Begin Source File SOURCE=.\TeXMessages.h # End Source File # Begin Source File SOURCE=.\TmpOutputByteStream.h # End Source File # Begin Source File SOURCE=.\TransformFOTBuilder.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # Begin Source File SOURCE=..\style\DssslAppMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\HtmlMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\style\InterpreterMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\jade.rc # ADD BASE RSC /l 0x809 /i "jade" # ADD RSC /l 0x809 /i "." /i "..\style" /i "jade" /d "JADE_MIF" # End Source File # Begin Source File SOURCE=.\JadeMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\RtfMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\TeXMessages.rc # PROP Exclude_From_Build 1 # End Source File # End Group # Begin Source File SOURCE=.\HtmlFOTBuilder_inst.cxx # PROP Ignore_Default_Tool 1 # End Source File # Begin Source File SOURCE=.\MifFOTBuilder_inst.cxx # PROP Ignore_Default_Tool 1 # End Source File # Begin Source File SOURCE=.\RtfFOTBuilder_inst.cxx # PROP Ignore_Default_Tool 1 # End Source File # Begin Source File SOURCE=.\TeXFOTBuilder_inst.cxx # PROP Ignore_Default_Tool 1 # End Source File # Begin Source File SOURCE=.\TransformFOTBuilder_inst.cxx # PROP Ignore_Default_Tool 1 # End Source File # End Target # End Project jade-1.2.1/jade/RtfFOTBuilder.cxx100444 764 764 352634 6606574462 14341 0ustar jjcjjc// Copyright (c) 1996, 1997 James Clark // See the file copying.txt for copying permission. #include "config.h" #include "RtfFOTBuilder.h" #include "TmpOutputByteStream.h" #include "RtfMessages.h" #include "MessageArg.h" #include "Vector.h" #include "HashTable.h" #include "InputSource.h" #include "StorageManager.h" #include "Location.h" #include "macros.h" #include "CharMap.h" #include "CharsetRegistry.h" #ifdef WIN32 #include "RtfOle.h" #endif #include "IList.h" #include #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class NullOutputByteStream : public OutputByteStream { public: NullOutputByteStream() { ptr_ = end_ = 0; } void flush() { } void flushBuf(char) { } }; class ElementSet { public: ElementSet(); void add(unsigned long, unsigned long); bool contains(unsigned long, unsigned long) const; private: Vector > v_; }; class RtfFOTBuilder : public SerialFOTBuilder { public: RtfFOTBuilder(OutputByteStream *, const Vector &, const Ptr &, const CharsetInfo &, Messenger *); ~RtfFOTBuilder(); void characters(const Char *, size_t); void paragraphBreak(const ParagraphNIC &); void externalGraphic(const ExternalGraphicNIC &); void rule(const RuleNIC &); void setFontSize(long n); void setFontFamilyName(const StringC &); void setFontWeight(Symbol); void setFontPosture(Symbol); void setGlyphSubstTable(const Vector > &); void setPositionPointShift(const LengthSpec &); void setLanguage(Letter2); void setCountry(Letter2); void setStartIndent(const LengthSpec &); void setEndIndent(const LengthSpec &); void setFirstLineStartIndent(const LengthSpec &); void setLineSpacing(const LengthSpec &); void setMinLeading(const OptLengthSpec &); void setFieldWidth(const LengthSpec &); void setLines(Symbol); void setInputWhitespaceTreatment(Symbol); void setExpandTabs(long); void setQuadding(Symbol); void setDisplayAlignment(Symbol); void setFieldAlign(Symbol); void setHyphenate(bool); void setKern(bool); void setHyphenationLadderCount(long); void setWidowCount(long); void setOrphanCount(long); void setHeadingLevel(long); void setColor(const DeviceRGBColor &); void setBackgroundColor(const DeviceRGBColor &); void setBackgroundColor(); void setLineThickness(Length); void setLineRepeat(long); void setScoreSpaces(bool); void setBoxType(Symbol); void setBorderPresent(bool); void setBorderPriority(long); void setBorderOmitAtBreak(bool); void setPageWidth(long units); void setPageHeight(long units); void setLeftMargin(long units); void setRightMargin(long units); void setTopMargin(long units); void setBottomMargin(long units); void setHeaderMargin(long units); void setFooterMargin(long units); void setPageNumberRestart(bool); void setPageNumberFormat(const StringC &); void setPageNColumns(long); void setPageColumnSep(Length); void setPageBalanceColumns(bool); void setSpan(long); void startSimplePageSequence(); void endSimplePageSequence(); void startSimplePageSequenceHeaderFooter(unsigned); void endSimplePageSequenceHeaderFooter(unsigned); void endAllSimplePageSequenceHeaderFooter(); void pageNumber(); void startLink(const Address &); void endLink(); void startScore(Symbol); void startBox(const BoxNIC &); void endBox(); void startParagraph(const ParagraphNIC &); void endParagraph(); void startDisplayGroup(const DisplayGroupNIC &); void endDisplayGroup(); void startLineField(const LineFieldNIC &); void endLineField(); void startLeader(const LeaderNIC &); void endLeader(); void startTable(const TableNIC &); void endTable(); void startTablePartSerial(const TablePartNIC &); void endTablePartSerial(); void startTablePartHeader(); void endTablePartHeader(); void startTablePartFooter(); void endTablePartFooter(); void tableColumn(const TableColumnNIC &); void startTableRow(); void endTableRow(); void startTableCell(const TableCellNIC &); void endTableCell(); void tableBeforeRowBorder(); void tableAfterRowBorder(); void tableBeforeColumnBorder(); void tableAfterColumnBorder(); void tableCellBeforeRowBorder(); void tableCellAfterRowBorder(); void tableCellBeforeColumnBorder(); void tableCellAfterColumnBorder(); void setCellBeforeRowMargin(Length); void setCellAfterRowMargin(Length); void setCellBeforeColumnMargin(Length); void setCellAfterColumnMargin(Length); void setCellBackground(bool); void setCellRowAlignment(Symbol); // math void startMathSequence(); void endMathSequence(); void startFractionSerial(); void endFractionSerial(); void startFractionNumerator(); void endFractionNumerator(); void startFractionDenominator(); void endFractionDenominator(); void startSubscript(); void endSubscript(); void startSuperscript(); void endSuperscript(); void startRadicalSerial(); void endRadicalSerial(); void startRadicalDegree(); void endRadicalDegree(); void startFenceSerial(); void endFenceSerial(); void startFenceOpen(); void endFenceOpen(); void startFenceClose(); void endFenceClose(); void startMathOperatorSerial(); void endMathOperatorSerial(); void startMathOperatorOperator(); void endMathOperatorOperator(); void startMathOperatorLowerLimit(); void endMathOperatorLowerLimit(); void startMathOperatorUpperLimit(); void endMathOperatorUpperLimit(); void startMarkSerial(); void endMarkSerial(); void startMarkOver(); void endMarkOver(); void startMarkUnder(); void endMarkUnder(); void startScriptSerial(); void endScriptSerial(); void startScriptPreSup(); void startScriptPreSub(); void startScriptPostSup(); void startScriptPostSub(); void startScriptMidSup(); void startScriptMidSub(); void startGrid(const GridNIC &); void endGrid(); void startGridCell(const GridCellNIC &); void endGridCell(); void setMathDisplayMode(Symbol); void setGridPositionCellType(Symbol); void setGridColumnAlignment(Symbol); void setGridRowSep(Length); void setGridColumnSep(Length); void setSubscriptDepth(Length); void setSuperscriptHeight(Length); void setUnderMarkDepth(Length); void setOverMarkHeight(Length); void startNode(const NodePtr &, const StringC &); void endNode(); void currentNodePageNumber(const NodePtr &); struct WinCharset { unsigned char charsetCode; const char *fontSuffix; Char mapping[128]; }; enum { jisCharset = 5, nWinCharsets = 7 }; static const WinCharset winCharsets[nWinCharsets]; struct SymbolFont { const char *name; Char mapping[256]; }; enum { nSymbolFonts = 3 }; static const SymbolFont symbolFonts[nSymbolFonts]; enum { topBorder, bottomBorder, leftBorder, rightBorder }; struct Border { Border() : priority(0), flags(0) { } long priority; enum { isPresent = 01, isDouble = 02, omitAtBreak = 04 }; unsigned char flags; unsigned char thickness; unsigned short color; }; enum BreakType { breakNone, breakPage, breakColumn }; private: OutputByteStream &os() { return *osp_; } void start(); void end(); void atomic(); void syncCharFormat(); void setCharset(int); void inlinePrepare(); void flushPendingElements(); void doStartLink(const Address &); void flushFields() { if (!suppressBookmarks_) flushPendingElements(); if (havePendingLink_) { havePendingLink_ = 0; doStartLink(pendingLink_); } } void startDisplay(const DisplayNIC &); void endDisplay(); void newPar(bool allowSpaceBefore = 1); bool includePicture(const ExternalGraphicNIC &); bool embedObject(const ExternalGraphicNIC &); bool systemIdNotation(const StringC &systemId, const char *, StringC &); bool systemIdFilename(const StringC &systemId, StringC &filename); int systemIdFilename1(const StringC &systemId, StringC &filename); int makeColor(const DeviceRGBColor &); void outputBookmarkName(unsigned long groveIndex, const Char *, size_t); void outputBookmarkName(unsigned long groveIndex, unsigned long elementIndex); static unsigned convertLanguage(unsigned language, unsigned country, unsigned &langCharsets); void idrefButton(unsigned long groveIndex, const Char *s, size_t n); void outputTable(); void storeBorder(Border &); void resolveBorder(Border &, Border &); void resolveOutsideBorder(Border &, const Border &); void outputTableBorder(const Border &); void outputHeaderFooter(const char *suffix, unsigned flags); long computeLengthSpec(const LengthSpec &); void displaySizeChanged(); void symbolChar(int ff, unsigned code); void initJIS(); void enterMathMode(); void exitMathMode(); static int points(Length n) { if (n >= 0) return (n + 10)/20; else return (n - 10)/20; } enum InlineState { inlineFirst, // never had an inline FO inlineStart, // must emit \par before next inline FO inlineField, // in a line field inlineFieldEnd, // in a line field with align=end inlineMiddle, // had some inline FOs inlineTable // just after \row }; InlineState inlineState_; bool continuePar_; enum UnderlineType { noUnderline, underlineSingle, underlineDouble, underlineWords }; // What the RTF reader thinks the format is. struct CommonFormat { CommonFormat(); bool isBold; bool isItalic; bool isSmallCaps; // UnderlineType char underline; bool isStrikethrough; int fontFamily; int fontSize; int color; int charBackgroundColor; int positionPointShift; unsigned language; unsigned country; bool kern; bool charBorder; int charBorderColor; long charBorderThickness; bool charBorderDouble; }; struct OutputFormat : CommonFormat { OutputFormat(); int charset; unsigned lang; // the RTF language code // bitmap of charsets that can be used for the lang unsigned langCharsets; }; enum { widowControl = 01, orphanControl = 02 }; struct ParaFormat { ParaFormat(); int leftIndent; int rightIndent; int firstLineIndent; int lineSpacing; bool lineSpacingAtLeast; char quadding; // 'l', 'c', 'r', 'j' Symbol lines; char widowOrphanControl; char headingLevel; }; enum { gridPosRowMajor, gridPosColumnMajor, gridPosExplicit }; struct Format : ParaFormat, CommonFormat { Format(); bool hyphenate; int fieldWidth; Symbol fieldAlign; Symbol inputWhitespaceTreatment; long expandTabs; char displayAlignment; // 'l', 'c', 'r' long lineThickness; bool lineDouble; bool scoreSpaces; bool boxHasBorder; bool boxHasBackground; int backgroundColor; // 0 for none bool borderPresent; bool borderOmitAtBreak; bool cellBackground; long borderPriority; long cellTopMargin; long cellBottomMargin; long cellLeftMargin; long cellRightMargin; char cellVerticalAlignment; char gridPosType; char gridColumnAlignment; bool mathInline; bool mathPosture; int superscriptHeight; // in points int subscriptDepth; // in points int overMarkHeight; // in points int underMarkDepth; // in points int gridRowSep; // in points int gridColumnSep; // in points bool span; // These are needed for handling LengthSpecs LengthSpec positionPointShiftSpec; LengthSpec leftIndentSpec; LengthSpec rightIndentSpec; LengthSpec firstLineIndentSpec; LengthSpec lineSpacingSpec; LengthSpec fieldWidthSpec; }; struct PageFormat { PageFormat(); long pageWidth; long pageHeight; long leftMargin; long rightMargin; long headerMargin; long footerMargin; long topMargin; long bottomMargin; bool pageNumberRestart; const char *pageNumberFormat; long nColumns; long columnSep; bool balance; }; // This is for a nested displayed flow object struct DisplayInfo { int spaceAfter; bool keepWithNext; bool saveKeep; BreakType breakAfter; }; OutputFormat outputFormat_; Format specFormat_; ParaFormat paraFormat_; Vector paraStack_; Vector displayStack_; Vector specFormatStack_; Vector pendingElements_; Vector pendingElementLevels_; unsigned nPendingElementsNonEmpty_; bool suppressBookmarks_; unsigned nodeLevel_; Vector displayBoxLevels_; bool boxFirstPara_; // not yet had a paragraph in the outermost displayed box long boxLeftSep_; long boxRightSep_; long boxTopSep_; long accumSpaceBox_; HashTable fontFamilyNameTable_; struct FontFamilyCharsets { FontFamilyCharsets(); int rtfFontNumber[nWinCharsets]; }; Vector fontFamilyCharsetsTable_; int nextRtfFontNumber_; int accumSpace_; bool keepWithNext_; bool hyphenateSuppressed_; long maxConsecHyphens_; OutputByteStream *osp_; OutputByteStream *finalos_; TmpOutputByteStream tempos_; StrOutputByteStream cellos_; long tableWidth_; char tableAlignment_; long tableDisplaySize_; int tableLeftIndent_; int tableRightIndent_; long addLeftIndent_; long addRightIndent_; Border tableBorder_[4]; unsigned cellIndex_; struct Cell { Cell() : present(0), hasBackground(0), span(1), vspan(1), valign('t') { } bool present; bool hasBackground; unsigned short backgroundColor; char valign; String content; unsigned span; unsigned vspan; Border border[4]; }; struct Column { Column() : hasWidth(0) { } bool hasWidth; TableLengthSpec width; }; Vector > cells_; bool inTableHeader_; unsigned nHeaderRows_; Vector columns_; unsigned tableLevel_; StrOutputByteStream fieldos_; int fieldTabPos_; long displaySize_; bool hadSection_; bool doBalance_; unsigned spanDisplayLevels_; unsigned currentCols_; BreakType doBreak_; bool keep_; bool hadParInKeep_; unsigned linkDepth_; unsigned inSimplePageSequence_; PageFormat pageFormat_; Vector pageFormatStack_; OutputFormat saveOutputFormat_; OutputFormat leaderSaveOutputFormat_; Vector colorTable_; Ptr entityManager_; Messenger *mgr_; const CharsetInfo *systemCharset_; bool followWhitespaceChar_; unsigned currentColumn_; ElementSet elementsRefed_; // Leaders unsigned leaderDepth_; NullOutputByteStream nullos_; OutputByteStream *preLeaderOsp_; enum { CHAR_TABLE_CHAR_BITS = 16 }; enum { CHAR_TABLE_SYMBOL_FLAG = 1U << 31, CHAR_TABLE_DB_FLAG = 1U << 30 }; CharMap charTable_; String hfPart_[nHF]; StrOutputByteStream hfos_; enum RTFVersion { word95, word97 }; RTFVersion rtfVersion_; Address pendingLink_; bool havePendingLink_; // Charaction for separating arguments in an EQ field; must be ',' or ';' char eqArgSep_; unsigned mathLevel_; enum MathSpecial { mathNormal, mathFence, mathIntegral }; MathSpecial mathSpecial_; OutputFormat mathSaveOutputFormat_; struct ReorderFlowObject; friend struct ReorderFlowObject; struct ReorderFlowObject : public Link { OutputByteStream *saveOsp; StrOutputByteStream buf; OutputFormat saveOutputFormat; Vector > streams; }; struct Grid; friend struct Grid; struct Grid : public Link { OutputByteStream *saveOsp; StrOutputByteStream buf; OutputFormat saveOutputFormat; size_t nRows; size_t nColumns; char posType; String *curCellPtr; Vector > > cells; }; IList reorderStack_; IList gridStack_; #ifdef WIN32 Vector oleObject_; #endif void startReorderFlowObject(); void endReorderFlowObjectPort(); void endReorderFlowObject(); friend struct OutputFormat; friend struct Format; friend struct CommonFormat; friend struct ParaFormat; }; inline long RtfFOTBuilder::computeLengthSpec(const LengthSpec &spec) { if (spec.displaySizeFactor == 0.0) return spec.length; else { double tem = displaySize_ * spec.displaySizeFactor; return spec.length + long(tem >= 0.0 ? tem +.5 : tem - .5); } } // Use a line-spacing of 12pt for the header and footer // and assume 2.5pt of it occur after the baseline. const int hfPreSpace = 190; const int hfPostSpace = 50; const char INSERTION_CHAR = '\0'; const int SYMBOL_FONT_PAGE = 0xf000; const unsigned DEFAULT_LANG = 0x400; inline int halfPoints(long n) { return n/10; } TmpOutputByteStream::TmpOutputByteStream() : head_(0), last_(0), nFullBlocks_(0) { } TmpOutputByteStream::~TmpOutputByteStream() { while (head_) { Block *tem = head_; head_ = head_->next; delete tem; } } void TmpOutputByteStream::flushBuf(char ch) { Block *tem = new Block; char *p = tem->buf; *p++ = ch; ptr_ = p; end_ = tem->buf + bufSize; tem->next = 0; if (last_) { nFullBlocks_++; last_->next = tem; } else head_ = tem; last_ = tem; } void TmpOutputByteStream::flush() { } FOTBuilder *makeRtfFOTBuilder(OutputByteStream *os, const Vector &options, const Ptr &entityManager, const CharsetInfo &systemCharset, Messenger *mgr, const FOTBuilder::Extension *&ext) { static const FOTBuilder::Extension extensions[] = { { "UNREGISTERED::James Clark//Characteristic::page-number-format", 0, (void (FOTBuilder::*)(const StringC &))&RtfFOTBuilder::setPageNumberFormat, 0, 0 }, { "UNREGISTERED::James Clark//Characteristic::page-number-restart?", (void (FOTBuilder::*)(bool))&RtfFOTBuilder::setPageNumberRestart, 0, 0 }, { "UNREGISTERED::James Clark//Characteristic::page-n-columns", 0, 0, (void (FOTBuilder::*)(long))&RtfFOTBuilder::setPageNColumns, 0 }, { "UNREGISTERED::James Clark//Characteristic::page-column-sep", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&RtfFOTBuilder::setPageColumnSep, }, { "UNREGISTERED::James Clark//Characteristic::page-balance-columns?", (void (FOTBuilder::*)(bool))&RtfFOTBuilder::setPageBalanceColumns, 0, 0 }, { "UNREGISTERED::James Clark//Characteristic::subscript-depth", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&RtfFOTBuilder::setSubscriptDepth, }, { "UNREGISTERED::James Clark//Characteristic::over-mark-height", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&RtfFOTBuilder::setOverMarkHeight, }, { "UNREGISTERED::James Clark//Characteristic::under-mark-depth", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&RtfFOTBuilder::setUnderMarkDepth, }, { "UNREGISTERED::James Clark//Characteristic::superscript-height", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&RtfFOTBuilder::setSuperscriptHeight, }, { "UNREGISTERED::James Clark//Characteristic::grid-row-sep", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&RtfFOTBuilder::setGridRowSep, }, { "UNREGISTERED::James Clark//Characteristic::grid-column-sep", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&RtfFOTBuilder::setGridColumnSep, }, { "UNREGISTERED::James Clark//Characteristic::heading-level", 0, 0, (void (FOTBuilder::*)(long))&RtfFOTBuilder::setHeadingLevel, 0 }, { 0, 0, 0} }; ext = extensions; return new RtfFOTBuilder(os, options, entityManager, systemCharset, mgr); } RtfFOTBuilder::RtfFOTBuilder(OutputByteStream *os, const Vector &options, const Ptr &entityManager, const CharsetInfo &systemCharset, Messenger *mgr) : finalos_(os), entityManager_(entityManager), systemCharset_(&systemCharset), mgr_(mgr), inlineState_(inlineFirst), continuePar_(0), osp_(&tempos_), accumSpace_(0), keepWithNext_(0), hadSection_(0), linkDepth_(0), tableLevel_(0), nodeLevel_(0), nPendingElementsNonEmpty_(0), suppressBookmarks_(0), followWhitespaceChar_(0), currentColumn_(0), boxFirstPara_(0), leaderDepth_(0), fontFamilyCharsetsTable_(1 + nSymbolFonts), nextRtfFontNumber_(1), inTableHeader_(0), nHeaderRows_(0), displaySize_(72*10*17), addLeftIndent_(0), addRightIndent_(0), inSimplePageSequence_(0), doBalance_(0), spanDisplayLevels_(0), currentCols_(1), hyphenateSuppressed_(0), maxConsecHyphens_(0), doBreak_(breakNone), keep_(0), hadParInKeep_(0), charTable_(0), rtfVersion_(word97), havePendingLink_(0), eqArgSep_(','), mathLevel_(0), mathSpecial_(mathNormal) { specFormat_.fontSize = 20; // 10 points specFormatStack_.push_back(specFormat_); pageFormatStack_.push_back(pageFormat_); StringC times; for (const char *s = "Times New Roman"; *s; s++) times += *s; fontFamilyNameTable_.insert(times, 0); fontFamilyCharsetsTable_[0].rtfFontNumber[0] = 0; for (int i = 0; i < nWinCharsets; i++) { for (int j = 0; j < 128; j++) { Char c = winCharsets[i].mapping[j]; if (c) { if (!charTable_[c]) charTable_.setChar(c, (j + 0x80) | (1 << (i + CHAR_TABLE_CHAR_BITS))); else if ((charTable_[c] & ((1 << CHAR_TABLE_CHAR_BITS) - 1)) == (j + 0x80)) charTable_.setChar(c, charTable_[c] | (1 << (i + CHAR_TABLE_CHAR_BITS))); } } } for (int i = 0; i < nSymbolFonts; i++) { for (int j = 0; j < 256; j++) { Char c = symbolFonts[i].mapping[j]; if (c && !charTable_[c]) charTable_.setChar(c, j | (i << CHAR_TABLE_CHAR_BITS) | CHAR_TABLE_SYMBOL_FLAG); } StringC tem; for (const char *s = symbolFonts[i].name; *s; s++) tem += *s; fontFamilyNameTable_.insert(tem, i + 1); } // We want characters like right arrow to come from the symbol font, not using // charset 128. initJIS(); for (size_t i = 0; i < options.size(); i++) { if (options[i] == systemCharset.execToDesc("95")) rtfVersion_ = word95; } } void RtfFOTBuilder::initJIS() { WideChar min, max; UnivChar univ; Owner jis(CharsetRegistry::makeIter(CharsetRegistry::JIS0208)); while (jis->next(min, max, univ)) { do { if (!charTable_[univ]) { unsigned char c1 = min >> 8; unsigned char c2 = min & 0x7f; unsigned char out1; if (c1 < 33) out1 = 0; else if (c1 < 95) out1 = ((c1 + 1) >> 1) + 112; else if (c1 < 127) out1 = ((c1 + 1) >> 1) + 176; else out1 = 0; if (out1) { unsigned char out2; if (c1 & 1) { if (c2 < 33) out2 = 0; else if (c2 <= 95) out2 = c2 + 31; else if (c2 <= 126) out2 = c2 + 32; else out2 = 0; } else { if (33 <= c2 && c2 <= 126) out2 = c2 + 126; else out2 = 0; } if (out2) charTable_.setChar(univ, (out1 << 8) | out2 | (1 << (jisCharset + CHAR_TABLE_CHAR_BITS)) | CHAR_TABLE_DB_FLAG); } } univ++; } while (min++ != max); } } inline void outputWord(OutputByteStream &os, unsigned long n) { os << char((n >> 24) & 0xff) << char((n >> 16) & 0xff) << char((n >> 8) & 0xff) << char(n & 0xff); } inline unsigned long readWord(const char *&s, size_t &n, TmpOutputByteStream::Iter &sbIter) { unsigned long result = 0; for (int i = 0; i < 4; i++, n--) { if (n == 0) { bool gotSome = sbIter.next(s, n); ASSERT(gotSome); } result = (result << 8) | (unsigned char)*s++; } return result; } RtfFOTBuilder::~RtfFOTBuilder() { if (doBalance_) { os() << "\\sect\\sbknone\\par"; doBalance_ = 0; } os() << "}\n"; os().flush(); osp_ = finalos_; os() << "{\\rtf1\\ansi\\deff0\n"; os() << "{\\fonttbl"; HashTableIter iter(fontFamilyNameTable_); for (;;) { const StringC *key; const int *ip; if (!iter.next(key, ip)) break; const int *charsets = fontFamilyCharsetsTable_[*ip].rtfFontNumber; for (int i = 0; i < nWinCharsets; i++) { if (charsets[i] >= 0) { os() << "{\\f" << charsets[i] << "\\fnil\\fcharset" << int(winCharsets[i].charsetCode) << ' '; for (size_t j = 0; j < key->size(); j++) os() << (char)(*key)[j]; os() << winCharsets[i].fontSuffix; os() << ";}\n"; } } } os() << "}\n"; os() << "{\\colortbl;"; for (size_t i = 0; i < colorTable_.size(); i++) { unsigned n = colorTable_[i]; os() << "\\red" << (n >> 16) << "\\green" << ((n >> 8) & 0xff) << "\\blue" << (n & 0xff) << ';'; } os() << "}{\\stylesheet"; for (int i = 1; i <= 9; i++) os() << "{\\s" << i << " Heading " << i << ";}"; os() << "}\n"; if (maxConsecHyphens_ > 0) os() << "\\hyphconsec" << maxConsecHyphens_; os() << "\\deflang" << DEFAULT_LANG << "\\notabind\\facingp\\hyphauto1\\widowctrl\n"; TmpOutputByteStream::Iter sbIter(tempos_); const char *s; size_t n; while (sbIter.next(s, n)) { while (n > 0) { const char *p = (char *)memchr(s, INSERTION_CHAR, n); if (!p) { os().sputn(s, n); break; } os().sputn(s, p - s); n -= (p - s); s = p; --n; s++; if (n == 0) { bool gotSome = sbIter.next(s, n); ASSERT(gotSome); } char kind = *s++; n--; switch (kind) { case 'b': { unsigned long grovei = readWord(s, n, sbIter); unsigned long ei = readWord(s, n, sbIter); if (elementsRefed_.contains(grovei, ei)) { os() << "{\\*\\bkmkstart "; outputBookmarkName(grovei, ei); os() << '}'; os() << "{\\*\\bkmkend "; outputBookmarkName(grovei, ei); os() << '}'; } break; } #ifdef WIN32 case 'o': { unsigned long oi = readWord(s, n, sbIter); StringC filename(oleObject_[oi]); filename += 0; StringC clsid(oleObject_[oi + 1]); clsid += 0; if (!outputObject(filename.data(), clsid.data(), os())) mgr_->message(RtfMessages::cannotEmbedFilename, StringMessageArg(oleObject_[oi]), StringMessageArg(oleObject_[oi + 1])); break; } #endif /* WIN32 */ default: CANNOT_HAPPEN(); } } } } void RtfFOTBuilder::syncCharFormat() { bool changed = 0; if (outputFormat_.isBold != specFormat_.isBold) { os() << "\\b"; if (!specFormat_.isBold) os() << '0'; outputFormat_.isBold = specFormat_.isBold; changed = 1; } if (outputFormat_.isItalic != specFormat_.isItalic) { os() << "\\i"; if (!specFormat_.isItalic) os() << '0'; outputFormat_.isItalic = specFormat_.isItalic; changed = 1; } if (outputFormat_.underline != specFormat_.underline) { switch (specFormat_.underline) { case noUnderline: os() << "\\ul0"; break; case underlineSingle: os() << "\\ul"; break; case underlineDouble: os() << "\\uldb"; break; case underlineWords: os() << "\\ulw"; break; } outputFormat_.underline = specFormat_.underline; changed = 1; } if (outputFormat_.isSmallCaps != specFormat_.isSmallCaps) { os() << "\\scaps"; if (!specFormat_.isSmallCaps) os() << '0'; outputFormat_.isSmallCaps = specFormat_.isSmallCaps; changed = 1; } if (outputFormat_.isStrikethrough != specFormat_.isStrikethrough) { os() << "\\strike"; if (!specFormat_.isStrikethrough) os() << '0'; outputFormat_.isStrikethrough = specFormat_.isStrikethrough; changed = 1; } if (outputFormat_.positionPointShift != specFormat_.positionPointShift) { if (specFormat_.positionPointShift >= 0) os() << "\\up" << specFormat_.positionPointShift; else os() << "\\dn" << -specFormat_.positionPointShift; outputFormat_.positionPointShift = specFormat_.positionPointShift; changed = 1; } if (outputFormat_.fontSize != specFormat_.fontSize) { os() << "\\fs" << specFormat_.fontSize; outputFormat_.fontSize = specFormat_.fontSize; changed = 1; } if (outputFormat_.country != specFormat_.country || outputFormat_.language != specFormat_.language) { outputFormat_.country = specFormat_.country; outputFormat_.language = specFormat_.language; unsigned lang = convertLanguage(outputFormat_.language, outputFormat_.country, outputFormat_.langCharsets); if (lang != outputFormat_.lang) { outputFormat_.lang = lang; os() << "\\lang" << lang; changed = 1; } } bool charsetOk = ((1 << outputFormat_.charset) & outputFormat_.langCharsets); if (outputFormat_.fontFamily != specFormat_.fontFamily || !charsetOk) { outputFormat_.fontFamily = specFormat_.fontFamily; // Make sure the charset is compatible with the language if (!charsetOk) { for (outputFormat_.charset = 0; !(outputFormat_.langCharsets & (1 << outputFormat_.charset)); outputFormat_.charset++) ; } int &n = fontFamilyCharsetsTable_[outputFormat_.fontFamily].rtfFontNumber[outputFormat_.charset]; if (n < 0) n = nextRtfFontNumber_++; os() << "\\f" << n; changed = 1; } if (outputFormat_.color != specFormat_.color) { os() << "\\cf" << specFormat_.color; outputFormat_.color = specFormat_.color; changed = 1; } if (outputFormat_.charBackgroundColor != specFormat_.charBackgroundColor) { os() << "\\highlight" << specFormat_.charBackgroundColor; outputFormat_.charBackgroundColor = specFormat_.charBackgroundColor; changed = 1; } if (specFormat_.charBorder) { if (!outputFormat_.charBorder || specFormat_.charBorderColor != outputFormat_.charBorderColor || specFormat_.charBorderThickness != outputFormat_.charBorderThickness || specFormat_.charBorderDouble != outputFormat_.charBorderDouble) { outputFormat_.charBorder = 1; os() << "\\chbrdr"; if (specFormat_.charBorderDouble) os() << "\\brdrdb"; else os() << "\\brdrs"; os() << "\\brdrw" << specFormat_.charBorderThickness; if (specFormat_.charBorderColor) os() << "\\brdrcf" << specFormat_.charBorderColor; changed = 1; outputFormat_.charBorderColor = specFormat_.charBorderColor; outputFormat_.charBorderThickness = specFormat_.charBorderThickness; outputFormat_.charBorderDouble = specFormat_.charBorderDouble; } } else { if (outputFormat_.charBorder) { os() << "\\chbrdr"; changed = 1; outputFormat_.charBorder = 0; } } if (!specFormat_.hyphenate) hyphenateSuppressed_ = 1; if (outputFormat_.kern != specFormat_.kern) { os() << "\\kerning" << (specFormat_.kern ? '1' : '0'); outputFormat_.kern = specFormat_.kern; changed = 1; } if (changed) os() << ' '; } void RtfFOTBuilder::setCharset(int cs) { outputFormat_.charset = cs; int &n = fontFamilyCharsetsTable_[outputFormat_.fontFamily].rtfFontNumber[cs]; if (n < 0) n = nextRtfFontNumber_++; os() << "\\f" << n; } inline void hexChar(OutputByteStream &os, unsigned code) { static const char hex[] = "0123456789abcdef"; os << "\\'" << hex[(code >> 4) & 0xf] << hex[code & 0xf]; } void RtfFOTBuilder::symbolChar(int ff, unsigned code) { #if 0 os() << "{\\field{\\*\\fldinst SYMBOL " << (unsigned long)code << " \\\\f \"" << symbolFonts[ff - 1].name << "\"}{\\fldrslt "; #endif int &n = fontFamilyCharsetsTable_[ff].rtfFontNumber[nWinCharsets - 1]; if (n < 0) n = nextRtfFontNumber_++; os() << "{\\f" << n; hexChar(os(), code); os() << "}"; #if 0 os() << "}}"; #endif } void RtfFOTBuilder::characters(const Char *s, size_t n) { // Ignore record ends at the start of continuation paragraphs. if (continuePar_ && (inlineState_ == inlineStart || inlineState_ == inlineFirst) && paraFormat_.lines == symbolWrap) { for (; n > 0 && *s == '\r'; s++, n--) ; if (n == 0) return; } // This avoids clearing followWhitespaceChar_. if (inlineState_ != inlineMiddle) inlinePrepare(); else flushFields(); syncCharFormat(); if (mathLevel_ && mathSpecial_ == mathIntegral && n > 0) { switch (*s) { case 0x222b: // integral return; case 0x2211: // sum os() << "\\\\su"; return; case 0x220f: // product os() << "\\\\pr"; return; default: os() << "\\\\vc\\\\"; break; } } for (; n > 0; s++, n--) { bool prevWhitespaceChar = followWhitespaceChar_; followWhitespaceChar_ = 0; currentColumn_++; switch (*s) { case '\n': currentColumn_--; followWhitespaceChar_ = prevWhitespaceChar; break; case '\r': followWhitespaceChar_ = 1; switch (paraFormat_.lines) { case symbolNone: // FIXME case symbolWrap: switch (specFormat_.inputWhitespaceTreatment) { case symbolIgnore: currentColumn_--; break; case symbolCollapse: if (prevWhitespaceChar) { currentColumn_--; break; } // fall through default: os() << ' '; } break; default: os() << "\\sa0\\par\\fi0\\sb0\n"; currentColumn_ = 0; break; } break; case '\t': if (specFormat_.expandTabs && specFormat_.inputWhitespaceTreatment == symbolPreserve) { unsigned col = --currentColumn_ + specFormat_.expandTabs; col = (col / specFormat_.expandTabs) * specFormat_.expandTabs; for (; currentColumn_ < col; currentColumn_++) os() << ' '; followWhitespaceChar_ = 1; break; } // fall through case ' ': followWhitespaceChar_ = 1; switch (specFormat_.inputWhitespaceTreatment) { case symbolIgnore: currentColumn_--; break; case symbolCollapse: if (prevWhitespaceChar) { currentColumn_--; break; } // fall through default: os() << ' '; } break; case 0x2002: os() << "\\u8194\\'20"; break; case 0x2003: os() << "\\u8195\\'20"; break; case 0x2010: os() << '-'; break; case 0x2011: os() << "\\_"; break; case 0x200c: os() << "\\zwnj "; break; case 0x200d: os() << "\\zwj "; break; case 0xa0: os() << "\\~"; break; case 0xad: os() << "\\-"; break; case '\0': break; case ';': case ',': if (mathLevel_ && *s == eqArgSep_ && mathSpecial_ == mathNormal) os() << "\\\\"; os() << char(*s); break; case '(': case ')': if (mathLevel_ && mathSpecial_ == mathNormal) os() << "\\\\"; os() << char(*s); break; case '\\': if (outputFormat_.charset == jisCharset) setCharset(0); if (mathLevel_ && mathSpecial_ == mathNormal) { // quote once to get through RTF // quote again to get through field // quote again to get through C++ os() << "\\\\\\\\"; break; } // fall through case '{': case '}': os() << '\\' << char(*s); break; case '|': case '~': if (outputFormat_.charset == jisCharset) setCharset(0); // fall through default: if (*s < 0x80) { if (specFormat_.mathPosture && (('a' <= *s && *s <= 'z') || ('A' <= *s && *s <= 'Z'))) os() << "{\\i " << char(*s) << '}'; else os() << char(*s); } else { unsigned long code = charTable_[*s]; if (code & CHAR_TABLE_SYMBOL_FLAG) symbolChar(((code & ~CHAR_TABLE_SYMBOL_FLAG) >> CHAR_TABLE_CHAR_BITS) + 1, code & 0xff); else if (code) { if (!(code & (1 << (outputFormat_.charset + CHAR_TABLE_CHAR_BITS)))) { // If possible, choose a charset compatible with the language if (code & (outputFormat_.langCharsets << CHAR_TABLE_CHAR_BITS)) code &= ((outputFormat_.langCharsets << CHAR_TABLE_CHAR_BITS) | ((1 << CHAR_TABLE_CHAR_BITS) - 1)); int i = 0; for (unsigned mask = 1 << CHAR_TABLE_CHAR_BITS; !(code & mask); mask <<= 1, i++) ; setCharset(i); } if (code & CHAR_TABLE_DB_FLAG) { os() << "{\\dbch\\uc2\\u" << int(short(*s)); hexChar(os(), (code >> 8) & 0xff); hexChar(os(), code & 0xff); os() << "}"; } else hexChar(os(), code & 0xff); } else { if (*s >= SYMBOL_FONT_PAGE + 0x20 && *s <= SYMBOL_FONT_PAGE + 0xff) symbolChar(outputFormat_.fontFamily, *s & 0xff); else { os() << "\\u" << int(short(*s)); hexChar(os(), '?'); } } } break; } } } void RtfFOTBuilder::setFontSize(long n) { specFormat_.fontSize = halfPoints(n); } void RtfFOTBuilder::setFontFamilyName(const StringC &name) { const int *p = fontFamilyNameTable_.lookup(name); if (!p) { specFormat_.fontFamily = fontFamilyCharsetsTable_.size(); fontFamilyNameTable_.insert(name, specFormat_.fontFamily); fontFamilyCharsetsTable_.resize(fontFamilyCharsetsTable_.size() + 1); } else specFormat_.fontFamily = *p; } void RtfFOTBuilder::setFontWeight(Symbol weight) { specFormat_.isBold = (weight > symbolMedium); } void RtfFOTBuilder::setFontPosture(Symbol posture) { switch (posture) { case symbolOblique: case symbolItalic: specFormat_.isItalic = 1; specFormat_.mathPosture = 0; break; case symbolMath: specFormat_.isItalic = 0; specFormat_.mathPosture = 1; break; default: specFormat_.isItalic = 0; specFormat_.mathPosture = 0; break; } } void RtfFOTBuilder::setGlyphSubstTable(const Vector > &tables) { static const int smallCapAfiiSignature = 0375; specFormat_.isSmallCaps = 0; for (size_t i = 0; i < tables.size(); i++) { const Vector &pairs = tables[i]->pairs; for (size_t j = 0; j < pairs.size(); j += 2) { if (pairs[j].suffix + (smallCapAfiiSignature << 8) == pairs[j + 1].suffix && pairs[j].suffix >= 'a' && pairs[j].suffix <= 'z' && pairs[j].publicId == pairs[j + 1].publicId && strcmp(pairs[j].publicId, "ISO/IEC 10036/RA//Glyphs") == 0) { specFormat_.isSmallCaps = 1; break; } } } } void RtfFOTBuilder::setHyphenate(bool b) { specFormat_.hyphenate = b; } void RtfFOTBuilder::setKern(bool b) { specFormat_.kern = b; } void RtfFOTBuilder::setHyphenationLadderCount(long n) { if (n > 0 && (maxConsecHyphens_ == 0 || n < maxConsecHyphens_)) maxConsecHyphens_ = n; } void RtfFOTBuilder::setWidowCount(long n) { if (n > 1) specFormat_.widowOrphanControl |= widowControl; else specFormat_.widowOrphanControl &= orphanControl; } void RtfFOTBuilder::setOrphanCount(long n) { if (n > 1) specFormat_.widowOrphanControl |= orphanControl; else specFormat_.widowOrphanControl &= widowControl; } void RtfFOTBuilder::setHeadingLevel(long n) { specFormat_.headingLevel = (n >= 1 && n <= 9) ? char(n) : 0; } void RtfFOTBuilder::setColor(const DeviceRGBColor &color) { specFormat_.color = makeColor(color); } void RtfFOTBuilder::setBackgroundColor(const DeviceRGBColor &color) { specFormat_.backgroundColor = makeColor(color); } void RtfFOTBuilder::setBackgroundColor() { specFormat_.backgroundColor = 0; } int RtfFOTBuilder::makeColor(const DeviceRGBColor &color) { unsigned n = (color.red << 16) | (color.green << 8) | color.blue; for (int i = 0; i < colorTable_.size(); i++) if (colorTable_[i] == n) return i + 1; colorTable_.push_back(n); return colorTable_.size(); } void RtfFOTBuilder::setBoxType(Symbol sym) { switch (sym) { case symbolBorder: specFormat_.boxHasBorder = 1; specFormat_.boxHasBackground = 0; break; case symbolBackground: specFormat_.boxHasBorder = 0; specFormat_.boxHasBackground = 1; break; case symbolBoth: specFormat_.boxHasBorder = 1; specFormat_.boxHasBackground = 1; break; default: break; } } void RtfFOTBuilder::setLineThickness(Length len) { specFormat_.lineThickness = (len > 150 ? 150 : len); } void RtfFOTBuilder::setLineRepeat(long n) { specFormat_.lineDouble = (n > 1); } void RtfFOTBuilder::setScoreSpaces(bool b) { specFormat_.scoreSpaces = b; } void RtfFOTBuilder::setBorderPresent(bool b) { specFormat_.borderPresent = b; } void RtfFOTBuilder::setBorderPriority(long n) { specFormat_.borderPriority = n; } void RtfFOTBuilder::setBorderOmitAtBreak(bool b) { specFormat_.borderOmitAtBreak = b; } void RtfFOTBuilder::newPar(bool allowSpaceBefore) { long boxExtraTopSep = 0; if (boxFirstPara_) { boxFirstPara_ = 0; boxLeftSep_ = paraFormat_.leftIndent; boxRightSep_ = paraFormat_.rightIndent; for (size_t i = 1; i < displayBoxLevels_.size(); i++) { boxLeftSep_ += specFormatStack_[displayBoxLevels_[i]].leftIndent; boxRightSep_ += specFormatStack_[displayBoxLevels_[i]].rightIndent; } // RTF doesn't include space before or after a paragraph inside // the box. boxTopSep_ = accumSpace_; accumSpace_ = accumSpaceBox_; accumSpaceBox_ = 0; } if (inlineState_ != inlineFirst) { if (!allowSpaceBefore) { os() << "\\sa" << accumSpace_; accumSpace_ = 0; } if (keep_) { if (hadParInKeep_ || continuePar_) keepWithNext_ = 1; hadParInKeep_ = 1; } if (!doBreak_ && keepWithNext_) os() << "\\keepn"; keepWithNext_ = 0; if (hyphenateSuppressed_) { os() << "\\hyphpar0"; hyphenateSuppressed_ = 0; } os() << "\\par"; } switch (doBreak_) { case breakPage: os() << "\\page"; doBreak_ = breakNone; break; case breakColumn: os() << "\\column"; doBreak_ = breakNone; break; default: break; } if (currentCols_ > 1) { if (spanDisplayLevels_) { os() << "\\sect\\sbknone\\cols1"; currentCols_ = 1; } } else if (spanDisplayLevels_ == 0 && currentCols_ == 1 && pageFormat_.nColumns > 1) { if (inlineState_ != inlineFirst) os() << "\\sect\\sbknone"; os() << "\\cols" << pageFormat_.nColumns << "\\colsx" << pageFormat_.columnSep; currentCols_ = pageFormat_.nColumns; } os() << "\\pard"; if (tableLevel_) os() << "\\intbl"; if (accumSpace_) { os() << "\\sb" << accumSpace_; accumSpace_ = 0; } if (keep_) os() << "\\keep"; if (!paraFormat_.widowOrphanControl) os() << "\\nowidctlpar"; if (paraFormat_.headingLevel) os() << "\\s" << int(paraFormat_.headingLevel); if (displayBoxLevels_.size() > 0) { const Format &boxFormat = specFormatStack_[displayBoxLevels_[0]]; for (const char *s = "tlbr"; *s; s++) { os() << "\\brdr" << *s; if (boxFormat.lineThickness > 75) os() << "\\brdrth\\brdrw" << boxFormat.lineThickness/2; else { if (boxFormat.lineDouble) os() << "\\brdrdb"; else os() << "\\brdrs"; os() << "\\brdrw" << boxFormat.lineThickness; } long sep; switch (*s) { case 't': sep = boxTopSep_; break; case 'l': sep = boxLeftSep_; break; case 'r': sep = boxRightSep_; break; default: sep = 0; break; } os() << "\\brsp" << sep; if (boxFormat.color) os() << "\\brdrcf" << boxFormat.color; if (boxLeftSep_ + boxFormat.leftIndent + addLeftIndent_) os() << "\\li" << boxLeftSep_ + boxFormat.leftIndent + addLeftIndent_; if (boxRightSep_ + boxFormat.rightIndent + addRightIndent_) os() << "\\ri" << boxRightSep_ + boxFormat.rightIndent + addRightIndent_; } } else { if (paraFormat_.leftIndent || addLeftIndent_) os() << "\\li" << paraFormat_.leftIndent + addLeftIndent_; if (paraFormat_.rightIndent || addRightIndent_) os() << "\\ri" << paraFormat_.rightIndent + addRightIndent_; } } // This must be called before any inline flow object. void RtfFOTBuilder::inlinePrepare() { followWhitespaceChar_ = 0; if (inlineState_ == inlineMiddle || inlineState_ == inlineField || inlineState_ == inlineFieldEnd) { flushFields(); return; } newPar(); os() << "\\sl" << (paraFormat_.lineSpacingAtLeast ? paraFormat_.lineSpacing : - paraFormat_.lineSpacing); int fli = continuePar_ ? 0 : paraFormat_.firstLineIndent; if (fli) os() << "\\fi" << fli; if (paraFormat_.quadding != 'l') os() << "\\q" << paraFormat_.quadding; inlineState_ = inlineMiddle; os() << ' '; flushFields(); } void RtfFOTBuilder::setPositionPointShift(const LengthSpec &val) { specFormat_.positionPointShiftSpec = val; specFormat_.positionPointShift = halfPoints(computeLengthSpec(val)); } void RtfFOTBuilder::setStartIndent(const LengthSpec &val) { specFormat_.leftIndentSpec = val; specFormat_.leftIndent = computeLengthSpec(val); } void RtfFOTBuilder::setLanguage(Letter2 code) { specFormat_.language = code; } void RtfFOTBuilder::setCountry(Letter2 code) { specFormat_.country = code; } void RtfFOTBuilder::setEndIndent(const LengthSpec &val) { specFormat_.rightIndentSpec = val; specFormat_.rightIndent = computeLengthSpec(val); } void RtfFOTBuilder::setFirstLineStartIndent(const LengthSpec &val) { specFormat_.firstLineIndentSpec = val; specFormat_.firstLineIndent = computeLengthSpec(val); } void RtfFOTBuilder::setLineSpacing(const LengthSpec &val) { specFormat_.lineSpacingSpec = val; specFormat_.lineSpacing = computeLengthSpec(val); } void RtfFOTBuilder::setMinLeading(const OptLengthSpec &ols) { specFormat_.lineSpacingAtLeast = ols.hasLength; } void RtfFOTBuilder::setFieldWidth(const LengthSpec &val) { specFormat_.fieldWidthSpec = val; specFormat_.fieldWidth = computeLengthSpec(val); } void RtfFOTBuilder::displaySizeChanged() { specFormat_.positionPointShift = computeLengthSpec(specFormat_.positionPointShiftSpec); specFormat_.leftIndent = computeLengthSpec(specFormat_.leftIndentSpec); specFormat_.rightIndent = computeLengthSpec(specFormat_.rightIndentSpec); specFormat_.firstLineIndent = computeLengthSpec(specFormat_.firstLineIndentSpec); specFormat_.lineSpacing = computeLengthSpec(specFormat_.lineSpacingSpec); specFormat_.fieldWidth = computeLengthSpec(specFormat_.fieldWidthSpec); } void RtfFOTBuilder::setQuadding(Symbol quadding) { switch (quadding) { case symbolStart: default: specFormat_.quadding = 'l'; break; case symbolEnd: specFormat_.quadding = 'r'; break; case symbolCenter: specFormat_.quadding = 'c'; break; case symbolJustify: specFormat_.quadding = 'j'; break; } } void RtfFOTBuilder::setDisplayAlignment(Symbol displayAlignment) { switch (displayAlignment) { case symbolStart: specFormat_.displayAlignment = 'l'; break; case symbolEnd: specFormat_.displayAlignment = 'r'; break; case symbolCenter: specFormat_.displayAlignment = 'c'; break; case symbolInside: case symbolOutside: default: specFormat_.displayAlignment = 'l'; break; } } void RtfFOTBuilder::setFieldAlign(Symbol fieldAlign) { specFormat_.fieldAlign = fieldAlign; } void RtfFOTBuilder::setLines(Symbol lines) { specFormat_.lines = lines; } void RtfFOTBuilder::setInputWhitespaceTreatment(Symbol sym) { specFormat_.inputWhitespaceTreatment = sym; } void RtfFOTBuilder::setExpandTabs(long n) { specFormat_.expandTabs = n; } void RtfFOTBuilder::startParagraph(const ParagraphNIC &nic) { startDisplay(nic); start(); paraStack_.resize(paraStack_.size() + 1); paraStack_.back() = paraFormat_; paraFormat_ = specFormat_; } void RtfFOTBuilder::endParagraph() { paraFormat_ = paraStack_.back(); paraStack_.resize(paraStack_.size() - 1); endDisplayGroup(); } void RtfFOTBuilder::paragraphBreak(const ParagraphNIC &nic) { if (paraStack_.size() > 0) { endDisplay(); startDisplay(nic); paraFormat_ = specFormat_; } atomic(); } void RtfFOTBuilder::startBox(const BoxNIC &nic) { if (nic.isDisplay) { startDisplay(nic); if (displayBoxLevels_.size() == 0) { accumSpaceBox_ = accumSpace_; accumSpace_ = 0; boxFirstPara_ = 1; } displayBoxLevels_.push_back(specFormatStack_.size()); } else { if (specFormat_.boxHasBackground && specFormat_.backgroundColor) specFormat_.charBackgroundColor = specFormat_.backgroundColor; if (specFormat_.boxHasBorder && !specFormat_.charBorder) { specFormat_.charBorder = 1; specFormat_.charBorderColor = specFormat_.color; specFormat_.charBorderThickness = specFormat_.lineThickness; specFormat_.charBorderDouble = specFormat_.lineDouble; } inlinePrepare(); } start(); } void RtfFOTBuilder::endBox() { if (displayBoxLevels_.size() > 0 && displayBoxLevels_.back() + 1 == specFormatStack_.size()) { // We're ending a displayed box. if (displayBoxLevels_.size() == 1) { // It was the outermost box. if (boxFirstPara_) { boxFirstPara_ = 0; boxLeftSep_ = boxRightSep_ = boxTopSep_ = 0; long boxHeight = accumSpace_; if (boxHeight <= 0) boxHeight = 1; accumSpace_ = accumSpaceBox_; newPar(1); os() << "\\sl-" << boxHeight; } else if (accumSpace_) { long extra = accumSpace_; accumSpace_ = 0; keepWithNext_ = 1; newPar(1); os() << "\\sl-" << extra; } else accumSpace_ = 0; // This prevents an adjacent box being merged by RTF. displayBoxLevels_.resize(displayBoxLevels_.size() - 1); os() << "\\keepn\\par\\pard\\sl-1"; if (tableLevel_) os() << "\\intbl"; } end(); endDisplay(); } else end(); } void RtfFOTBuilder::startDisplayGroup(const DisplayGroupNIC &nic) { startDisplay(nic); start(); } void RtfFOTBuilder::startDisplay(const DisplayNIC &nic) { if (spanDisplayLevels_) spanDisplayLevels_++; else if (specFormat_.span && pageFormat_.nColumns > 1 && tableLevel_ == 0) { spanDisplayLevels_ = 1; displaySize_ = pageFormat_.pageWidth - pageFormat_.leftMargin - pageFormat_.rightMargin; displaySizeChanged(); } long spaceBefore = computeLengthSpec(nic.spaceBefore.nominal); if (spaceBefore > accumSpace_) accumSpace_ = spaceBefore; if (nic.keepWithPrevious) keepWithNext_ = 1; if (inlineState_ != inlineFirst && inlineState_ != inlineTable) inlineState_ = inlineStart; continuePar_ = 0; switch (nic.breakBefore) { case symbolPage: case symbolPageRegion: case symbolColumnSet: doBreak_ = breakPage; break; case symbolColumn: if (doBreak_ != breakPage) doBreak_ = breakColumn; break; default: break; } displayStack_.resize(displayStack_.size() + 1); long spaceAfter = computeLengthSpec(nic.spaceAfter.nominal); displayStack_.back().spaceAfter = spaceAfter; displayStack_.back().keepWithNext = nic.keepWithNext; displayStack_.back().saveKeep = keep_; switch (nic.keep) { case symbolTrue: case symbolPage: case symbolColumnSet: case symbolColumn: if (!keep_) { hadParInKeep_ = 0; keep_ = 1; } break; default: break; } switch (nic.breakAfter) { case symbolPage: case symbolPageRegion: case symbolColumnSet: displayStack_.back().breakAfter = breakPage; break; case symbolColumn: displayStack_.back().breakAfter = breakColumn; break; default: displayStack_.back().breakAfter = breakNone; break; } } void RtfFOTBuilder::endDisplayGroup() { end(); endDisplay(); } void RtfFOTBuilder::endDisplay() { doBreak_ = displayStack_.back().breakAfter; keep_ = displayStack_.back().saveKeep; if (inlineState_ != inlineTable) { if (inlineState_ != inlineFirst) inlineState_ = inlineStart; continuePar_ = 1; } if (displayStack_.back().spaceAfter > accumSpace_) accumSpace_ = displayStack_.back().spaceAfter; if (displayStack_.back().keepWithNext) keepWithNext_ = 1; displayStack_.resize(displayStack_.size() - 1); if (spanDisplayLevels_) { if (--spanDisplayLevels_ == 0) { displaySize_ = pageFormat_.pageWidth - pageFormat_.leftMargin - pageFormat_.rightMargin; displaySize_ -= pageFormat_.columnSep * (pageFormat_.nColumns - 1); displaySize_ /= pageFormat_.nColumns; displaySizeChanged(); } } } void RtfFOTBuilder::startLineField(const LineFieldNIC &) { start(); if (inlineState_ == inlineStart || inlineState_ == inlineFirst) { fieldTabPos_ = specFormat_.fieldWidth + paraFormat_.leftIndent; if (!continuePar_) fieldTabPos_ += paraFormat_.firstLineIndent; inlinePrepare(); inlineState_ = inlineField; // Empirically-determined minimum possible distance between tabs. static const int minTabSep = 26; switch (specFormat_.fieldAlign) { case symbolStart: default: os() << "\\tx" << fieldTabPos_ << ' '; break; case symbolEnd: osp_ = &fieldos_; inlineState_ = inlineFieldEnd; break; case symbolCenter: { int sep = specFormat_.fieldWidth / 2; if (sep < minTabSep) sep = minTabSep; os() << "\\tqc\\tx" << fieldTabPos_ - sep << "\\tx" << fieldTabPos_ << "\\tab "; } break; } } } void RtfFOTBuilder::endLineField() { if (inlineState_ == inlineFieldEnd) { osp_ = &tempos_; // Strip trailing spaces and adjust position of // tab stop accordingly. String str; fieldos_.extractString(str); size_t i = str.size(); for (; i > 0; i--) if (str[i - 1] != ' ') break; // Assume each space is .25 em. int sep = (str.size() - i)*outputFormat_.fontSize*5/2; str.resize(i); static const int minTabSep = 26; if (sep < minTabSep) sep = minTabSep; os() << "\\tqr\\tx" << fieldTabPos_ - sep << "\\tx" << fieldTabPos_ << "\\tab "; os() << str; os() << "\\tab "; } else if (inlineState_ == inlineField) { os() << "\\tab "; inlineState_ = inlineMiddle; } end(); } void RtfFOTBuilder::startLeader(const LeaderNIC &) { start(); inlinePrepare(); syncCharFormat(); if (leaderDepth_++ == 0) { leaderSaveOutputFormat_ = outputFormat_; preLeaderOsp_ = osp_; osp_ = &nullos_; } } void RtfFOTBuilder::endLeader() { if (--leaderDepth_ == 0) { outputFormat_ = leaderSaveOutputFormat_; osp_ = preLeaderOsp_; // MS Word doesn't mind if tabs aren't set at the beginning of the paragraph. os() << "\\tqr\\tldot\\tx" << (displaySize_ - paraFormat_.rightIndent) << "\\tab "; } end(); } void RtfFOTBuilder::setPageWidth(long units) { if (!inSimplePageSequence_) pageFormat_.pageWidth = units; } void RtfFOTBuilder::setPageHeight(long units) { if (!inSimplePageSequence_) pageFormat_.pageHeight = units; } void RtfFOTBuilder::setLeftMargin(long units) { if (!inSimplePageSequence_) pageFormat_.leftMargin = units; } void RtfFOTBuilder::setRightMargin(long units) { if (!inSimplePageSequence_) pageFormat_.rightMargin = units; } void RtfFOTBuilder::setTopMargin(long units) { if (!inSimplePageSequence_) pageFormat_.topMargin = units; } void RtfFOTBuilder::setBottomMargin(long units) { if (!inSimplePageSequence_) pageFormat_.bottomMargin = units; } void RtfFOTBuilder::setHeaderMargin(long units) { if (!inSimplePageSequence_) pageFormat_.headerMargin = units; } void RtfFOTBuilder::setFooterMargin(long units) { if (!inSimplePageSequence_) pageFormat_.footerMargin = units; } void RtfFOTBuilder::setPageNumberRestart(bool b) { if (!inSimplePageSequence_) pageFormat_.pageNumberRestart = b; } void RtfFOTBuilder::setPageNumberFormat(const StringC &str) { if (inSimplePageSequence_) return; pageFormat_.pageNumberFormat = "dec"; if (str.size() == 1) { switch (str[0]) { case 'A': pageFormat_.pageNumberFormat = "ucltr"; break; case 'a': pageFormat_.pageNumberFormat = "lcltr"; break; case 'I': pageFormat_.pageNumberFormat = "ucrm"; break; case 'i': pageFormat_.pageNumberFormat = "lcrm"; break; } } } void RtfFOTBuilder::setPageNColumns(long n) { if (!inSimplePageSequence_) pageFormat_.nColumns = n > 0 ? n : 1; } void RtfFOTBuilder::setPageColumnSep(Length n) { if (!inSimplePageSequence_) pageFormat_.columnSep = n >= 0 ? n : 0; } void RtfFOTBuilder::setPageBalanceColumns(bool b) { if (!inSimplePageSequence_) pageFormat_.balance = b; } void RtfFOTBuilder::setSpan(long n) { specFormat_.span = n > 1; } void RtfFOTBuilder::startSimplePageSequence() { inSimplePageSequence_++; start(); if (doBalance_) { os() << "\\sect\\sbknone"; doBalance_ = 0; } if (hadSection_) os() << "\\sect"; else hadSection_ = 1; if (pageFormat_.headerMargin < hfPreSpace) pageFormat_.headerMargin = hfPreSpace; if (pageFormat_.footerMargin < hfPostSpace) pageFormat_.footerMargin = hfPostSpace; // Word 97 seems to get very confused by top or bottom margins less than this. static const int minVMargin = 12*20; if (pageFormat_.topMargin < minVMargin) pageFormat_.topMargin = minVMargin; if (pageFormat_.bottomMargin < minVMargin) pageFormat_.bottomMargin = minVMargin; os() << "\\sectd\\plain"; if (pageFormat_.pageWidth > pageFormat_.pageHeight) os() << "\\lndscpsxn"; os() << "\\pgwsxn" << pageFormat_.pageWidth << "\\pghsxn" << pageFormat_.pageHeight << "\\marglsxn" << pageFormat_.leftMargin << "\\margrsxn" << pageFormat_.rightMargin << "\\margtsxn" << pageFormat_.topMargin << "\\margbsxn" << pageFormat_.bottomMargin << "\\headery" << 0 << "\\footery" << 0 << "\\pgn" << pageFormat_.pageNumberFormat; if (pageFormat_.pageNumberRestart) os() << "\\pgnrestart"; displaySize_ = pageFormat_.pageWidth - pageFormat_.leftMargin - pageFormat_.rightMargin; currentCols_ = 1; if (pageFormat_.nColumns > 1) { displaySize_ -= pageFormat_.columnSep * (pageFormat_.nColumns - 1); displaySize_ /= pageFormat_.nColumns; } if (pageFormat_.balance) doBalance_ = 1; displaySizeChanged(); outputFormat_ = OutputFormat(); doBreak_ = breakNone; suppressBookmarks_ = 1; accumSpace_ = 0; } void RtfFOTBuilder::endSimplePageSequence() { if (inlineState_ != inlineFirst) { if (hyphenateSuppressed_) { os() << "\\hyphpar0"; hyphenateSuppressed_ = 0; } os() << "\\par"; } inlineState_ = inlineFirst; continuePar_ = 0; end(); --inSimplePageSequence_; if (!inSimplePageSequence_) pageFormat_ = pageFormatStack_.back(); doBreak_ = breakNone; } void RtfFOTBuilder::startSimplePageSequenceHeaderFooter(unsigned) { inlineState_ = inlineMiddle; saveOutputFormat_ = outputFormat_; outputFormat_ = OutputFormat(); osp_ = &hfos_; } void RtfFOTBuilder::endSimplePageSequenceHeaderFooter(unsigned i) { outputFormat_ = saveOutputFormat_; hfos_.extractString(hfPart_[i]); osp_ = &tempos_; } void RtfFOTBuilder::endAllSimplePageSequenceHeaderFooter() { bool titlePage = 0; for (int i = 0; i < nHF; i += nHF/6) { if (hfPart_[i | frontHF | firstHF] != hfPart_[i | frontHF | otherHF] || hfPart_[i | backHF | firstHF] != hfPart_[i | backHF | otherHF]) { titlePage = 1; break; } } if (titlePage) { os() << "\\titlepg"; outputHeaderFooter("f", frontHF|firstHF); } outputHeaderFooter("l", backHF|otherHF); outputHeaderFooter("r", frontHF|otherHF); for (size_t i = 0; i < nHF; i++) hfPart_[i].resize(0); inlineState_ = inlineFirst; continuePar_ = 0; suppressBookmarks_ = 0; } void RtfFOTBuilder::outputHeaderFooter(const char *suffix, unsigned flags) { os() << "{\\header" << suffix << "\\pard\\sl" << -(hfPreSpace + hfPostSpace) << "\\sb" << (pageFormat_.headerMargin - hfPreSpace) << "\\sa" << (pageFormat_.topMargin - hfPostSpace - pageFormat_.headerMargin) << "\\plain\\tqc\\tx" << (pageFormat_.pageWidth - pageFormat_.leftMargin - pageFormat_.rightMargin)/2 << "\\tqr\\tx" << (pageFormat_.pageWidth - pageFormat_.leftMargin - pageFormat_.rightMargin) << ' ' << '{' << hfPart_[flags | headerHF | leftHF] << '}' << "\\tab " << '{' << hfPart_[flags | headerHF | centerHF] << '}' << "\\tab " << '{' << hfPart_[flags | headerHF | rightHF] << '}' << "\\par}" << "{\\footer" << suffix << "\\pard\\sl" << -(hfPreSpace + hfPostSpace) << "\\sb" << (pageFormat_.bottomMargin - hfPreSpace - pageFormat_.footerMargin) << "\\sa" << (pageFormat_.footerMargin - hfPostSpace) << "\\plain\\tqc\\tx" << (pageFormat_.pageWidth - pageFormat_.leftMargin - pageFormat_.rightMargin)/2 << "\\tqr\\tx" << (pageFormat_.pageWidth - pageFormat_.leftMargin - pageFormat_.rightMargin) << ' ' << '{' << hfPart_[flags | footerHF | leftHF] << '}' << "\\tab " << '{' << hfPart_[flags | footerHF | centerHF] << '}' << "\\tab " << '{' << hfPart_[flags | footerHF | rightHF] << '}' << "\\par}"; } void RtfFOTBuilder::pageNumber() { inlinePrepare(); syncCharFormat(); os() << "\\chpgn "; } void RtfFOTBuilder::startScore(Symbol type) { switch (type) { case symbolAfter: if (specFormat_.lineDouble) specFormat_.underline = underlineDouble; else if (!specFormat_.scoreSpaces) specFormat_.underline = underlineWords; else specFormat_.underline = underlineSingle; break; case symbolThrough: specFormat_.isStrikethrough = 1; break; default: break; } start(); } void RtfFOTBuilder::idrefButton(unsigned long groveIndex, const Char *s, size_t n) { os() << "{\\field"; os() << "{\\*\\fldinst "; // doesn't work without the trailing spaces! os() << (rtfVersion_ >= word97 ? "HYPERLINK \\\\l " : "GOTOBUTTON "); outputBookmarkName(groveIndex, s, n); if (rtfVersion_ >= word97) os() << "}{\\fldrslt"; os() << ' '; } void RtfFOTBuilder::startLink(const Address &addr) { start(); if (linkDepth_++ == 0) { if (inlineState_ == inlineMiddle) doStartLink(addr); else { pendingLink_ = addr; havePendingLink_ = 1; } } } void RtfFOTBuilder::doStartLink(const Address &addr) { switch (addr.type) { case Address::resolvedNode: { GroveString id; if (addr.node->getId(id) == accessOK) idrefButton(addr.node->groveIndex(), id.data(), id.size()); else { unsigned long n; if (addr.node->elementIndex(n) == accessOK) { os() << "{\\field"; os() << "{\\*\\fldinst "; // doesn't work without the trailing spaces! os() << (rtfVersion_ >= word97 ? "HYPERLINK \\\\l " : "GOTOBUTTON "); unsigned long g = addr.node->groveIndex(); outputBookmarkName(g, n); os() << ' '; if (rtfVersion_ >= word97) os() << "}{\\fldrslt "; elementsRefed_.add(g, n); } else os() << "{{"; } break; } case Address::idref: { const StringC &id = addr.params[0]; size_t i = 0; for (; i < id.size(); i++) { // If they use multiple IDREFs, they'll only get // the first. if (id[i] == ' ') break; } idrefButton(addr.node->groveIndex(), id.data(), i); break; } default: os() << "{{"; break; } saveOutputFormat_ = outputFormat_; } void RtfFOTBuilder::endLink() { if (--linkDepth_ == 0) { if (havePendingLink_) havePendingLink_ = 0; else { os() << (rtfVersion_ >= word97 ? "}}" : "}{\\fldrslt }}"); outputFormat_ = saveOutputFormat_; } } end(); } void RtfFOTBuilder::rule(const RuleNIC &nic) { switch (nic.orientation) { case symbolHorizontal: { long lineOffset; long lineLength; if (nic.hasLength && (lineLength = computeLengthSpec(nic.length)) >= 0) { switch (specFormat_.displayAlignment) { default: case 'l': lineOffset = specFormat_.leftIndent; break; case 'c': lineOffset = (displaySize_ + specFormat_.leftIndent - specFormat_.rightIndent - lineLength)/2; break; case 'r': lineOffset = displaySize_ - specFormat_.rightIndent - lineLength; break; } } else { lineOffset = specFormat_.leftIndent; lineLength = displaySize_ - specFormat_.leftIndent - specFormat_.rightIndent; } startDisplay(nic); // We can't allow spaceBefore on this paragraph, because the y position // is measured from the start of the space before, but this space will // disappear on a page break. newPar(0); os() << "\\sl-1{\\*\\do\\dobxcolumn\\dobypara\\dodhgt0\\dpline\\dpptx0\\dppty0" << "\\dpptx" << lineLength << "\\dppty0" << "\\dpx" << lineOffset << "\\dpy0" << "\\dpxsize" << lineLength << "\\dpysize0"; if (specFormat_.color) { unsigned n = colorTable_[specFormat_.color - 1]; os() << "\\dplinecor" << (n >> 16) << "\\dplinecog" << ((n >> 8) & 0xff) << "\\dplinecob" << (n & 0xff); } os() << "\\dplinew" << specFormat_.lineThickness; os() << "}"; endDisplay(); } break; case symbolVertical: startDisplay(nic); newPar(); if (nic.hasLength) { long lineLength = computeLengthSpec(nic.length); if (lineLength > 0) os() << "\\sl-" << lineLength; // FIXME handle other display alignments } endDisplay(); break; case symbolEscapement: // if we don't have a length, can handle this with a leader tab. // If we do have a length, perhaps underline a blank space. inlinePrepare(); break; case symbolLineProgression: inlinePrepare(); break; default: break; } atomic(); } void RtfFOTBuilder::externalGraphic(const ExternalGraphicNIC &nic) { if (nic.isDisplay) { startDisplay(nic); newPar(); if (specFormat_.displayAlignment != 'l') os() << "\\q" << specFormat_.displayAlignment; flushFields(); } else inlinePrepare(); if (!embedObject(nic)) includePicture(nic); if (nic.isDisplay) endDisplay(); atomic(); } bool RtfFOTBuilder::includePicture(const ExternalGraphicNIC &nic) { StringC filename; if (systemIdFilename(nic.entitySystemId, filename)) { os() << "{\\field\\flddirty{\\*\\fldinst INCLUDEPICTURE \""; // FIXME non-ascii characters for (size_t i = 0; i < filename.size(); i++) { if (filename[i] == '\\') os() << "\\\\\\\\"; else os() << char(filename[i]); } os() << "\" }{\\fldrslt }}"; return 1; } return 0; } #ifdef WIN32 bool RtfFOTBuilder::embedObject(const ExternalGraphicNIC &nic) { if (nic.notationSystemId.size() == 0) return 0; StringC clsid; if (!systemIdNotation(nic.notationSystemId, "CLSID", clsid)) return 0; StringC filename; if (systemIdFilename(nic.entitySystemId, filename)) { os() << INSERTION_CHAR << 'o'; outputWord(os(), oleObject_.size()); oleObject_.push_back(filename); oleObject_.push_back(clsid); } return 1; } #else /* not WIN32 */ bool RtfFOTBuilder::embedObject(const ExternalGraphicNIC &) { return 0; } #endif /* not WIN32 */ bool RtfFOTBuilder::systemIdFilename(const StringC &systemId, StringC &filename) { int res = systemIdFilename1(systemId, filename); if (res < 0) { mgr_->message(RtfMessages::systemIdNotFilename, StringMessageArg(systemId)); return 0; } return res; } // Return -1 if an error should be generated // FIXME in some cases should copy the entity into a file in the same // directory as the output file. int RtfFOTBuilder::systemIdFilename1(const StringC &systemId, StringC &filename) { if (systemId.size() == 0) return -1; Owner in(entityManager_->open(systemId, *systemCharset_, InputSourceOrigin::make(), 0, *mgr_)); if (!in) return 0; Xchar c = in->get(*mgr_); StorageObjectLocation soLoc; ParsedSystemId parsedBuf; if (c == InputSource::eE && in->accessError()) { if (!entityManager_->parseSystemId(systemId, *systemCharset_, 0, 0, *mgr_, parsedBuf)) return 0; if (parsedBuf.size() != 1 || parsedBuf[0].baseId.size()) return 0; soLoc.storageObjectSpec = &parsedBuf[0]; soLoc.actualStorageId = parsedBuf[0].specId; } else { const Location &loc = in->currentLocation(); if (loc.origin().isNull()) return -1; const InputSourceOrigin *tem = loc.origin()->asInputSourceOrigin(); if (!tem) return -1; const ParsedSystemId *psi = ExtendEntityManager::externalInfoParsedSystemId(tem->externalInfo()); if (!psi || psi->size() != 1) return -1; if (!ExtendEntityManager::externalize(tem->externalInfo(), 0, soLoc)) return -1; } if (strcmp(soLoc.storageObjectSpec->storageManager->type(), "OSFILE") != 0) return -1; filename = soLoc.actualStorageId; return 1; } bool RtfFOTBuilder::systemIdNotation(const StringC &systemId, const char *notation, StringC &id) { ParsedSystemId parsedBuf; if (!entityManager_->parseSystemId(systemId, *systemCharset_, 0, 0, *mgr_, parsedBuf)) return 0; if (parsedBuf.size() != 1) return 0; if (strcmp(parsedBuf[0].storageManager->type(), notation) != 0) return 0; id = parsedBuf[0].specId; return 1; } void RtfFOTBuilder::startTable(const TableNIC &nic) { startDisplay(nic); start(); if (tableLevel_++) { mgr_->message(RtfMessages::nestedTable); return; } if (nic.widthType == TableNIC::widthExplicit) tableWidth_ = computeLengthSpec(nic.width); else tableWidth_ = (displaySize_ - specFormat_.leftIndent - specFormat_.rightIndent); tableDisplaySize_ = displaySize_; tableLeftIndent_ = specFormat_.leftIndent; tableRightIndent_ = specFormat_.rightIndent; tableAlignment_ = specFormat_.displayAlignment; switch (tableAlignment_) { case 'r': if (tableRightIndent_ != 0) { tableAlignment_ = 'l'; tableLeftIndent_ = tableDisplaySize_ - tableWidth_ - tableRightIndent_; } break; case 'c': if (tableLeftIndent_ != 0 || tableRightIndent_ != 0) { tableAlignment_ = 'l'; tableLeftIndent_ = (tableDisplaySize_ - tableWidth_ + tableLeftIndent_ - tableRightIndent_)/2; } break; default: break; } } void RtfFOTBuilder::endTable() { if (--tableLevel_ == 0) { if (cells_.size()) outputTable(); if (inlineState_ == inlineTable) { outputFormat_ = OutputFormat(); os() << "\\pard\\plain\\sl-1"; inlineState_ = inlineStart; } displaySize_ = tableDisplaySize_; } end(); endDisplay(); } // FIXME How should borders between table-parts be handled? // This treats them like outside borders, which probably isn't right. void RtfFOTBuilder::startTablePartSerial(const TablePartNIC &nic) { startDisplay(nic); start(); } void RtfFOTBuilder::endTablePartSerial() { if (tableLevel_ == 1 && cells_.size()) { outputTable(); nHeaderRows_ = 0; } end(); endDisplay(); } void RtfFOTBuilder::startTablePartHeader() { if (tableLevel_ == 1) inTableHeader_ = 1; } void RtfFOTBuilder::endTablePartHeader() { if (tableLevel_ == 1) inTableHeader_ = 0; } void RtfFOTBuilder::startTablePartFooter() { } void RtfFOTBuilder::endTablePartFooter() { } void RtfFOTBuilder::tableColumn(const TableColumnNIC &nic) { if (tableLevel_ == 1 && nic.nColumnsSpanned == 1) { if (nic.columnIndex >= columns_.size()) columns_.resize(nic.columnIndex + 1); columns_[nic.columnIndex].hasWidth = nic.hasWidth; if (nic.hasWidth) columns_[nic.columnIndex].width = nic.width; } atomic(); } void RtfFOTBuilder::outputTable() { for (size_t i = 0; i < cells_.size(); i++) { size_t j; bool lastIsDummy = 0; // last cell should be a dummy cell for (j = 0; j < cells_[i].size(); j += cells_[i][j].span) lastIsDummy = !cells_[i][j].present; if (lastIsDummy) j--; if (j > columns_.size()) columns_.resize(j); } for (size_t i = 0; i < cells_.size(); i++) { size_t oldSize = cells_[i].size(); if (oldSize != columns_.size()) { cells_[i].resize(columns_.size()); if (oldSize > 0 && oldSize < cells_[i].size() && !cells_[i][oldSize - 1].present) { for (size_t j = oldSize; j < cells_[i].size(); j++) cells_[i][j] = cells_[i][oldSize - 1]; } } } // Deal the best we can with vertical spanning for (size_t i = 0; i < cells_.size(); i++) { for (size_t j = 0; j < cells_[i].size(); j += cells_[i][j].span) { if (cells_[i][j].vspan > 1) { if (i + cells_[i][j].vspan > cells_.size()) cells_[i][j].vspan = cells_.size() - i; for (size_t k = 1; k < cells_[i][j].vspan; k++) { if (cells_[i + k][j].present) { cells_[i][j].vspan = k; break; } cells_[i + k][j].vspan = 0; cells_[i + k][j].present = 1; cells_[i + k][j].span = cells_[i][j].span; cells_[i + k][j].border[leftBorder] = cells_[i][j].border[leftBorder]; cells_[i + k][j].border[rightBorder] = cells_[i][j].border[rightBorder]; } cells_[i + cells_[i][j].vspan - 1][j].border[bottomBorder] = cells_[i][j].border[bottomBorder]; cells_[i][j].border[bottomBorder].flags = 0; } } } Vector columnWidths(columns_.size()); int nExplicitWidth = 0; int totalExplicitWidth = 0; double totalTableUnits = 0; displaySize_ = tableDisplaySize_; for (size_t i = 0; i < columns_.size(); i++) if (columns_[i].hasWidth) { columnWidths[i] = computeLengthSpec(columns_[i].width); nExplicitWidth++; totalExplicitWidth += columnWidths[i]; totalTableUnits += columns_[i].width.tableUnitFactor; } double tableUnitWidth = 0.0; totalTableUnits += columns_.size() - nExplicitWidth; if (totalTableUnits) tableUnitWidth = ((tableWidth_ - totalExplicitWidth)/totalTableUnits); for (size_t i = 0; i < columns_.size(); i++) if (!columns_[i].hasWidth) columnWidths[i] = long(tableUnitWidth); else if (columns_[i].width.tableUnitFactor > 0.0) columnWidths[i] += long(columns_[i].width.tableUnitFactor * tableUnitWidth); if (cells_.size() > 0) { for (size_t i = 0; i < cells_[0].size(); i += cells_[0][i].span) resolveOutsideBorder(cells_[0][i].border[topBorder], tableBorder_[topBorder]); for (size_t i = 0; i < cells_.back().size(); i += cells_.back()[i].span) resolveOutsideBorder(cells_.back()[i].border[bottomBorder], tableBorder_[bottomBorder]); } for (size_t i = 0; i < cells_.size(); i++) { // Resolve the column borders if (cells_[i].size()) { resolveOutsideBorder(cells_[i][0].border[leftBorder], tableBorder_[leftBorder]); size_t prev = 0; size_t j; for (j = cells_[i][0].span; j < cells_[i].size(); j += cells_[i][j].span) { resolveBorder(cells_[i][prev].border[rightBorder], cells_[i][j].border[leftBorder]); prev = j; } if (j == columns_.size()) resolveOutsideBorder(cells_[i][prev].border[rightBorder], tableBorder_[rightBorder]); } // Resolve the borders adjacent to the next row if (i + 1 < cells_.size()) { size_t j2 = 0; for (size_t j1 = 0; j1 < cells_[i].size(); j1 += cells_[i][j1].span) { while (j2 < j1 && j2 < cells_[i + 1].size()) j2 += cells_[i + 1][j2].span; if (j1 == j2 && j2 < cells_[i + 1].size() && cells_[i][j1].span == cells_[i + 1][j2].span) resolveBorder(cells_[i][j1].border[bottomBorder], cells_[i + 1][j2].border[topBorder]); } } os() << "\\trowd"; if (tableAlignment_ == 'l' && tableLeftIndent_ != 0) os() << "\\trleft" << tableLeftIndent_; else os() << "\\trq" << char(tableAlignment_); if (keep_) os() << "\\trkeep"; if (i < nHeaderRows_) os() << "\\trhdr"; #if 0 // Including this causes Word to leave out rules seemingly at random else if (i > 0) { // This is necessary to get borders on table-breaks. // Putting it on the first row confuses Word. const Border &brdr = tableBorder_[bottomBorder]; if ((brdr.flags & RtfFOTBuilder::Border::isPresent) && !(brdr.flags & RtfFOTBuilder::Border::omitAtBreak)) { os() << "\\trbrdrb"; outputTableBorder(brdr); } } #endif os() << ' '; long pos = tableLeftIndent_; for (unsigned j = 0; j < cells_[i].size(); j += cells_[i][j].span) { if (cells_[i][j].vspan == 0) os() << "\\clvmrg"; else { if (cells_[i][j].vspan > 1) os() << "\\clvmgf"; os() << "\\clvertal" << cells_[i][j].valign; } for (int k = 0; k < 4; k++) { const Border &brdr = cells_[i][j].border[k]; if (brdr.flags & RtfFOTBuilder::Border::isPresent) { os() << "\\clbrdr" << "tblr"[k]; outputTableBorder(brdr); } } if (cells_[i][j].hasBackground && cells_[i][j].backgroundColor) os() << "\\clshdng10000\\clcfpat" << cells_[i][j].backgroundColor; for (int k = 0; k < cells_[i][j].span; k++) pos += columnWidths[j + k]; os() << "\\cellx" << pos; } os() << ' '; for (unsigned j = 0; j < cells_[i].size(); j += cells_[i][j].span) { if (cells_[i][j].content.size() == 0) { if (j == 0) os() << "\\intbl"; } else { os() << cells_[i][j].content; if (keep_) os() << "\\keepn"; } os() << "\\cell "; } os() << "\\row "; } columns_.resize(0); cells_.resize(0); } void RtfFOTBuilder::outputTableBorder(const Border &brdr) { if (brdr.thickness > 75) os() << "\\brdrth\\brdrw" << long(brdr.thickness)/2; else if (brdr.flags & Border::isDouble) os() << "\\brdrdb\\brdrw" << long(brdr.thickness); else os() << "\\brdrs\\brdrw" << long(brdr.thickness); if (brdr.color) os() << "\\brdrcf" << long(brdr.color); } void RtfFOTBuilder::startTableRow() { if (tableLevel_ != 1) { start(); return; } if (inlineState_ == inlineStart) { if (accumSpace_) os() << "\\sa" << accumSpace_; if (keepWithNext_) os() << "\\keepn"; os() << "\\par"; } // FIXME if state is inlineTable and there's some accumSpace_, must add blank row keepWithNext_ = 0; accumSpace_ = 0; cells_.resize(cells_.size() + 1); start(); } void RtfFOTBuilder::endTableRow() { if (tableLevel_ != 1) { end(); return; } if (inTableHeader_) { Vector headerRow; cells_.back().swap(headerRow); for (size_t i = cells_.size() - 1; i > nHeaderRows_; i--) cells_[i - 1].swap(cells_[i]); headerRow.swap(cells_[nHeaderRows_++]); } end(); inlineState_ = inlineTable; } void RtfFOTBuilder::startTableCell(const TableCellNIC &nic) { if (tableLevel_ != 1) { start(); return; } if (nic.columnIndex >= cells_.back().size()) cells_.back().resize(nic.columnIndex + 1); cellIndex_ = nic.columnIndex; cells_.back()[cellIndex_].present = !nic.missing; cells_.back()[cellIndex_].span = nic.nColumnsSpanned; cells_.back()[cellIndex_].vspan = nic.nRowsSpanned; cells_.back()[cellIndex_].hasBackground = specFormat_.cellBackground; if (specFormat_.cellBackground) cells_.back()[cellIndex_].backgroundColor = specFormat_.backgroundColor; cells_.back()[cellIndex_].valign = specFormat_.cellVerticalAlignment; // Make a guess at the display-size. bool hasWidth = 1; long newDisplaySize = 0; displaySize_ = tableDisplaySize_; for (unsigned i = cellIndex_; i < cellIndex_ + nic.nColumnsSpanned; i++) { if (i >= columns_.size() || !columns_[i].hasWidth) { hasWidth = 0; break; } newDisplaySize += computeLengthSpec(columns_[i].width); } if (!hasWidth) newDisplaySize = (tableWidth_*nic.nColumnsSpanned) /(columns_.size() ? columns_.size() : 2); osp_ = &cellos_; inlineState_ = inlineFirst; continuePar_ = 0; addLeftIndent_ = specFormat_.cellLeftMargin; addRightIndent_ = specFormat_.cellRightMargin; accumSpace_ = specFormat_.cellTopMargin; displaySize_ = newDisplaySize; displaySizeChanged(); start(); os() << "\\plain "; outputFormat_ = OutputFormat(); } void RtfFOTBuilder::endTableCell() { if (tableLevel_ != 1) { end(); return; } accumSpace_ += specFormat_.cellBottomMargin; if (accumSpace_ > 0) { if (inlineState_ == inlineFirst) os() << "\\pard\\intbl\\sl-" << accumSpace_ << "\\par"; else os() << "\\sa" << accumSpace_; } else if (inlineState_ == inlineFirst) os() << "\\intbl"; accumSpace_ = 0; cellos_.extractString(cells_.back()[cellIndex_].content); end(); osp_ = &tempos_; accumSpace_ = 0; addLeftIndent_ = 0; addRightIndent_ = 0; keepWithNext_ = 0; } void RtfFOTBuilder::tableBeforeRowBorder() { if (tableLevel_ == 1) storeBorder(tableBorder_[topBorder]); } void RtfFOTBuilder::tableAfterRowBorder() { if (tableLevel_ == 1) storeBorder(tableBorder_[bottomBorder]); } void RtfFOTBuilder::tableBeforeColumnBorder() { if (tableLevel_ == 1) storeBorder(tableBorder_[leftBorder]); } void RtfFOTBuilder::tableAfterColumnBorder() { if (tableLevel_ == 1) storeBorder(tableBorder_[rightBorder]); } void RtfFOTBuilder::tableCellBeforeRowBorder() { if (tableLevel_ == 1) storeBorder(cells_.back()[cellIndex_].border[topBorder]); } void RtfFOTBuilder::tableCellAfterRowBorder() { if (tableLevel_ == 1) storeBorder(cells_.back()[cellIndex_].border[bottomBorder]); } void RtfFOTBuilder::tableCellBeforeColumnBorder() { if (tableLevel_ == 1) storeBorder(cells_.back()[cellIndex_].border[leftBorder]); } void RtfFOTBuilder::tableCellAfterColumnBorder() { if (tableLevel_ == 1) storeBorder(cells_.back()[cellIndex_].border[rightBorder]); } void RtfFOTBuilder::storeBorder(Border &b) { b.flags = 0; if (specFormat_.borderPresent) { b.flags |= Border::isPresent; b.thickness = specFormat_.lineThickness; b.color = specFormat_.color; if (specFormat_.lineDouble) b.flags |= Border::isDouble; } if (specFormat_.borderOmitAtBreak) b.flags |= Border::omitAtBreak; b.priority = specFormat_.borderPriority; atomic(); } void RtfFOTBuilder::resolveBorder(Border &b1, Border &b2) { if (b1.priority != b2.priority) { if (b1.priority > b2.priority) b2 = b1; else b1 = b2; } else if ((b1.flags ^ b2.flags) & Border::isPresent) { if (b1.flags & Border::isPresent) b2 = b1; else b1 = b2; } } void RtfFOTBuilder::resolveOutsideBorder(Border &cellBorder, const Border &tableBorder) { // The standard doesn't say this, but otherwise table-border: #t wouldn't work. if (tableBorder.priority > cellBorder.priority || (tableBorder.priority == cellBorder.priority && (tableBorder.flags & Border::isPresent))) cellBorder = tableBorder; } void RtfFOTBuilder::setCellBeforeRowMargin(Length n) { specFormat_.cellTopMargin = n; } void RtfFOTBuilder::setCellAfterRowMargin(Length n) { specFormat_.cellBottomMargin = n; } void RtfFOTBuilder::setCellBeforeColumnMargin(Length n) { specFormat_.cellLeftMargin = n; } void RtfFOTBuilder::setCellAfterColumnMargin(Length n) { specFormat_.cellRightMargin = n; } void RtfFOTBuilder::setCellBackground(bool b) { specFormat_.cellBackground = b; } void RtfFOTBuilder::setCellRowAlignment(Symbol align) { switch (align) { case symbolStart: specFormat_.cellVerticalAlignment = 't'; break; case symbolCenter: specFormat_.cellVerticalAlignment = 'c'; break; case symbolEnd: specFormat_.cellVerticalAlignment = 'b'; break; default: break; } } void RtfFOTBuilder::enterMathMode() { if (mathLevel_++ == 0) { mathSaveOutputFormat_ = outputFormat_; os() << "{\\field{\\*\\fldinst EQ "; } } void RtfFOTBuilder::exitMathMode() { if (--mathLevel_ == 0) { os() << "}{\\fldrslt}}"; outputFormat_ = mathSaveOutputFormat_; } } void RtfFOTBuilder::setSubscriptDepth(Length n) { specFormat_.subscriptDepth = points(n); } void RtfFOTBuilder::setSuperscriptHeight(Length n) { specFormat_.superscriptHeight = points(n); } void RtfFOTBuilder::setUnderMarkDepth(Length n) { specFormat_.underMarkDepth = points(n); } void RtfFOTBuilder::setOverMarkHeight(Length n) { specFormat_.overMarkHeight = points(n); } void RtfFOTBuilder::startSubscript() { start(); inlinePrepare(); enterMathMode(); os() << "\\\\s\\\\do" << specFormat_.subscriptDepth << '('; } void RtfFOTBuilder::endSubscript() { os() << ")"; exitMathMode(); end(); } void RtfFOTBuilder::startSuperscript() { start(); inlinePrepare(); enterMathMode(); os() << "\\\\s\\\\up" << specFormat_.superscriptHeight << '('; } void RtfFOTBuilder::endSuperscript() { os() << ")"; exitMathMode(); end(); } void RtfFOTBuilder::startMathSequence() { start(); inlinePrepare(); enterMathMode(); } void RtfFOTBuilder::endMathSequence() { exitMathMode(); end(); } void RtfFOTBuilder::startFractionSerial() { start(); inlinePrepare(); enterMathMode(); os() << "\\\\f"; } void RtfFOTBuilder::endFractionSerial() { exitMathMode(); end(); } void RtfFOTBuilder::startFractionNumerator() { os() << '('; } void RtfFOTBuilder::endFractionNumerator() { } void RtfFOTBuilder::startFractionDenominator() { os() << eqArgSep_; } void RtfFOTBuilder::endFractionDenominator() { os() << ')'; } void RtfFOTBuilder::startRadicalSerial() { start(); inlinePrepare(); enterMathMode(); startReorderFlowObject(); } void RtfFOTBuilder::endRadicalSerial() { Vector > &v = reorderStack_.head()->streams; *reorderStack_.head()->saveOsp << "\\\\r(" << v[1] << eqArgSep_ << v[0] << ')'; endReorderFlowObject(); end(); exitMathMode(); } void RtfFOTBuilder::startRadicalDegree() { endReorderFlowObjectPort(); } void RtfFOTBuilder::endRadicalDegree() { endReorderFlowObjectPort(); } void RtfFOTBuilder::startFenceSerial() { start(); inlinePrepare(); enterMathMode(); startReorderFlowObject(); } void RtfFOTBuilder::endFenceSerial() { Vector > &v = reorderStack_.head()->streams; *reorderStack_.head()->saveOsp << "\\\\b\\\\lc\\\\" << v[1] << "\\\\rc\\\\" << v[2] <<'(' << v[0] << ')'; endReorderFlowObject(); end(); exitMathMode(); } void RtfFOTBuilder::startFenceOpen() { endReorderFlowObjectPort(); mathSpecial_ = mathFence; } void RtfFOTBuilder::endFenceOpen() { endReorderFlowObjectPort(); } void RtfFOTBuilder::startFenceClose() { } void RtfFOTBuilder::endFenceClose() { endReorderFlowObjectPort(); mathSpecial_ = mathNormal; } void RtfFOTBuilder::setMathDisplayMode(Symbol sym) { switch (sym) { case symbolDisplay: specFormat_.mathInline = 0; break; case symbolInline: specFormat_.mathInline = 1; break; default: break; } } void RtfFOTBuilder::startMathOperatorSerial() { start(); inlinePrepare(); enterMathMode(); os() << "\\\\i"; if (specFormat_.mathInline) os() << "\\\\in"; startReorderFlowObject(); } void RtfFOTBuilder::endMathOperatorSerial() { Vector > &v = reorderStack_.head()->streams; // FIXME handle sum, product, integral specially *reorderStack_.head()->saveOsp << v[1] << '(' << v[2] << eqArgSep_ << v[3] << eqArgSep_ << v[0] << ')'; endReorderFlowObject(); end(); exitMathMode(); } void RtfFOTBuilder::startMathOperatorOperator() { endReorderFlowObjectPort(); mathSpecial_ = mathIntegral; } void RtfFOTBuilder::endMathOperatorOperator() { mathSpecial_ = mathNormal; endReorderFlowObjectPort(); } void RtfFOTBuilder::startMathOperatorLowerLimit() { } void RtfFOTBuilder::endMathOperatorLowerLimit() { endReorderFlowObjectPort(); } void RtfFOTBuilder::startMathOperatorUpperLimit() { } void RtfFOTBuilder::endMathOperatorUpperLimit() { endReorderFlowObjectPort(); } void RtfFOTBuilder::startMarkSerial() { start(); inlinePrepare(); enterMathMode(); startReorderFlowObject(); } void RtfFOTBuilder::endMarkSerial() { Vector > &v = reorderStack_.head()->streams; OutputByteStream &o = *reorderStack_.head()->saveOsp; o << "\\\\o(" << v[0]; if (v[1].size() > 2) o << eqArgSep_ << "\\\\s\\\\up" << specFormat_.overMarkHeight << '(' << v[1] << ')'; if (v[2].size() > 2) o << eqArgSep_ << "\\\\s\\\\do" << specFormat_.underMarkDepth << '(' << v[2] << ')'; o << ')'; endReorderFlowObject(); end(); exitMathMode(); } void RtfFOTBuilder::startMarkOver() { endReorderFlowObjectPort(); } void RtfFOTBuilder::endMarkOver() { endReorderFlowObjectPort(); } void RtfFOTBuilder::startMarkUnder() { } void RtfFOTBuilder::endMarkUnder() { endReorderFlowObjectPort(); } void RtfFOTBuilder::startScriptSerial() { start(); inlinePrepare(); enterMathMode(); startReorderFlowObject(); } void RtfFOTBuilder::endScriptSerial() { endReorderFlowObjectPort(); Vector > &v = reorderStack_.head()->streams; ASSERT(v.size() == 7); OutputByteStream &o = *reorderStack_.head()->saveOsp; const String &preSup = v[1]; const String &preSub = v[2]; const String &postSup = v[3]; const String &postSub = v[4]; const String &midSup = v[5]; const String &midSub = v[6]; o << "\\\\o("; if (preSup.size() > 2) o << "\\\\s\\\\up" << specFormat_.superscriptHeight << '(' << preSup << ')'; o << eqArgSep_; if (preSub.size() > 2) o << "\\\\s\\\\do" << specFormat_.subscriptDepth << '(' << preSub << ')'; o << ')'; o << "\\\\o("; o << v[0]; if (midSup.size() > 2) o << eqArgSep_ << "\\\\s\\\\up" << specFormat_.overMarkHeight << '(' << midSup << ')'; if (midSub.size() > 2) o << eqArgSep_ << "\\\\s\\\\do" << specFormat_.underMarkDepth << '(' << midSub << ')'; o << ')'; o << "\\\\o("; if (postSup.size() > 2) o << "\\\\s\\\\up" << specFormat_.superscriptHeight << '(' << postSup << ')'; o << eqArgSep_; if (postSub.size() > 2) o << "\\\\s\\\\do" << specFormat_.subscriptDepth << '(' << postSub << ')'; o << ')'; endReorderFlowObject(); end(); exitMathMode(); } void RtfFOTBuilder::startScriptPreSup() { endReorderFlowObjectPort(); } void RtfFOTBuilder::startScriptPreSub() { endReorderFlowObjectPort(); } void RtfFOTBuilder::startScriptPostSup() { endReorderFlowObjectPort(); } void RtfFOTBuilder::startScriptPostSub() { endReorderFlowObjectPort(); } void RtfFOTBuilder::startScriptMidSup() { endReorderFlowObjectPort(); } void RtfFOTBuilder::startScriptMidSub() { endReorderFlowObjectPort(); } void RtfFOTBuilder::startReorderFlowObject() { reorderStack_.insert(new ReorderFlowObject); ReorderFlowObject &r = *reorderStack_.head(); r.saveOsp = osp_; r.saveOutputFormat = outputFormat_; osp_ = &r.buf; os() << '{'; } void RtfFOTBuilder::endReorderFlowObjectPort() { os() << '}'; ReorderFlowObject &r = *reorderStack_.head(); r.streams.resize(r.streams.size() + 1); r.buf.extractString(r.streams.back()); os() << '{'; outputFormat_ = r.saveOutputFormat; } void RtfFOTBuilder::endReorderFlowObject() { osp_ = reorderStack_.head()->saveOsp; delete reorderStack_.get(); } void RtfFOTBuilder::setGridPositionCellType(Symbol sym) { switch (sym) { case symbolRowMajor: specFormat_.gridPosType = gridPosRowMajor; break; case symbolColumnMajor: specFormat_.gridPosType = gridPosColumnMajor; break; case symbolExplicit: specFormat_.gridPosType = gridPosExplicit; break; default: break; } } void RtfFOTBuilder::setGridColumnAlignment(Symbol sym) { switch (sym) { case symbolStart: specFormat_.gridColumnAlignment = 'l'; break; case symbolCenter: specFormat_.gridColumnAlignment = 'c'; break; case symbolEnd: specFormat_.gridColumnAlignment = 'r'; break; default: break; } } void RtfFOTBuilder::setGridRowSep(Length n) { specFormat_.gridRowSep = points(n); } void RtfFOTBuilder::setGridColumnSep(Length n) { specFormat_.gridColumnSep = points(n); } void RtfFOTBuilder::startGrid(const GridNIC &nic) { start(); inlinePrepare(); enterMathMode(); gridStack_.insert(new Grid); Grid &g = *gridStack_.head(); g.saveOsp = osp_; g.saveOutputFormat = outputFormat_; g.posType = specFormat_.gridPosType; g.nColumns = nic.nColumns; if (!g.nColumns) g.nColumns = 1; g.nRows = nic.nRows; if (!g.nRows) g.nRows = 1; osp_ = &g.buf; } void RtfFOTBuilder::endGrid() { osp_ = gridStack_.head()->saveOsp; Grid &g = *gridStack_.head(); for (size_t i = 0; i < g.cells.size(); i++) { if (g.cells[i].size() > g.nColumns) g.nColumns = g.cells[i].size(); } if (g.cells.size() > g.nRows) g.nRows = g.cells.size(); os() << "\\\\a" << "\\\\hs" << specFormat_.gridColumnSep << "\\\\vs" << specFormat_.gridRowSep << "\\\\a" << specFormat_.gridColumnAlignment << "\\\\co" << g.nColumns << '('; for (size_t i = 0; i < g.cells.size(); i++) { size_t j = 0; for (; j < g.cells[i].size(); j++) { if (i || j) os() << eqArgSep_; os() << g.cells[i][j]; } if (!j) j++; for (; j < g.nColumns; j++) os() << eqArgSep_; } os() << ')'; delete gridStack_.get(); end(); exitMathMode(); } void RtfFOTBuilder::startGridCell(const GridCellNIC &nic) { if (!gridStack_.empty()) { os() << '{'; Grid &g = *gridStack_.head(); g.curCellPtr = 0; switch (g.posType) { case gridPosExplicit: if (nic.rowNumber > 0 && nic.columnNumber > 0) { if (nic.columnNumber > g.cells.size()) g.cells.resize(nic.columnNumber); Vector > &column = g.cells[nic.columnNumber - 1]; if (nic.rowNumber > column.size()) column.resize(nic.rowNumber); g.curCellPtr = &column[nic.rowNumber - 1]; } break; case gridPosRowMajor: if (g.cells.size() == 0 || g.cells.back().size() >= g.nColumns) g.cells.resize(g.cells.size() + 1); g.cells.back().resize(g.cells.back().size() + 1); g.curCellPtr = &g.cells.back().back(); break; case gridPosColumnMajor: if (g.cells.size() < g.nRows) g.cells.resize(g.nRows); if (g.cells[g.nRows - 1].size() == g.cells[0].size()) { g.cells[0].resize(g.cells[0].size() + 1); g.curCellPtr = &g.cells[0].back(); } else { for (size_t i = 1;; i++) { ASSERT(i < g.cells.size()); if (g.cells[i].size() < g.cells[0].size()) { g.cells[i].resize(g.cells[i].size() + 1); g.curCellPtr = &g.cells[i].back(); break; } } } break; default: CANNOT_HAPPEN(); } } start(); } void RtfFOTBuilder::endGridCell() { if (!gridStack_.empty()) { os() << '}'; Grid &g = *gridStack_.head(); if (g.curCellPtr) g.buf.extractString(*g.curCellPtr); else { String tem; g.buf.extractString(tem); } outputFormat_ = g.saveOutputFormat; } end(); } void RtfFOTBuilder::outputBookmarkName(unsigned long groveIndex, const Char *s, size_t n) { os() << "ID"; if (groveIndex) os() << groveIndex; os() << '_'; for (; n > 0; n--, s++) { Char c = *s; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': os() << char(c); break; default: os() << '_' << (unsigned long)c << '_'; break; } } } void RtfFOTBuilder::outputBookmarkName(unsigned long groveIndex, unsigned long n) { os() << (rtfVersion_ >= word97 ? "_" : "E_"); if (groveIndex) os() << groveIndex << '_'; os() << n; } void RtfFOTBuilder::flushPendingElements() { for (size_t i = 0; i < pendingElements_.size(); i++) { const NodePtr &node = pendingElements_[i]; GroveString id; if (node->getId(id) == accessOK) { unsigned long g = node->groveIndex(); os() << "{\\*\\bkmkstart "; outputBookmarkName(g, id.data(), id.size()); os() << '}'; os() << "{\\*\\bkmkend "; outputBookmarkName(g, id.data(), id.size()); os() << '}'; } else { unsigned long n; if (node->elementIndex(n) == accessOK) { os() << INSERTION_CHAR << 'b'; outputWord(os(), node->groveIndex()); outputWord(os(), n); } } } nPendingElementsNonEmpty_ = 0; pendingElements_.resize(0); pendingElementLevels_.resize(0); } void RtfFOTBuilder::startNode(const NodePtr &node, const StringC &mode) { nodeLevel_++; if (mode.size() == 0) { pendingElements_.push_back(node); pendingElementLevels_.push_back(nodeLevel_); } } void RtfFOTBuilder::endNode() { // The idea is not to put out a bookmark if there were // no flow objects associated with the node. // The flow objects might have been labeled, in which case // we will get a startNode for the node later. if (pendingElements_.size() > 0 && pendingElementLevels_.back() == nodeLevel_ && nPendingElementsNonEmpty_ < pendingElements_.size()) { pendingElementLevels_.resize(pendingElements_.size() - 1); pendingElements_.resize(pendingElements_.size() - 1); } nodeLevel_--; } void RtfFOTBuilder::currentNodePageNumber(const NodePtr &node) { inlinePrepare(); syncCharFormat(); GroveString id; unsigned long n; if (node->getId(id) == accessOK) { os() << "{\\field\\flddirty{\\*\\fldinst PAGEREF "; outputBookmarkName(node->groveIndex(), id.data(), id.size()); os() << "}{\\fldrslt 000}}"; } else if (node->elementIndex(n) == accessOK) { os() << "{\\field\\flddirty{\\*\\fldinst PAGEREF "; unsigned long groveIndex = node->groveIndex(); outputBookmarkName(groveIndex, n); elementsRefed_.add(groveIndex, n); os() << "}{\\fldrslt 000}}"; } } void RtfFOTBuilder::start() { nPendingElementsNonEmpty_ = pendingElements_.size(); specFormatStack_.push_back(specFormat_); if (!inSimplePageSequence_) pageFormatStack_.push_back(pageFormat_); } void RtfFOTBuilder::end() { specFormatStack_.resize(specFormatStack_.size() - 1); specFormat_ = specFormatStack_.back(); if (!inSimplePageSequence_) { pageFormatStack_.resize(pageFormatStack_.size() - 1); pageFormat_ = pageFormatStack_.back(); } } void RtfFOTBuilder::atomic() { nPendingElementsNonEmpty_ = pendingElements_.size(); specFormat_ = specFormatStack_.back(); } RtfFOTBuilder::CommonFormat::CommonFormat() : isBold(0), isItalic(0), fontSize(24), fontFamily(0), language(0), country(0), color(0), charBackgroundColor(0), underline(noUnderline), isStrikethrough(0), positionPointShift(0), kern(0), isSmallCaps(0), charBorder(0) { } RtfFOTBuilder::OutputFormat::OutputFormat() : charset(0), lang(DEFAULT_LANG), langCharsets(0x1f) { } RtfFOTBuilder::Format::Format() : fieldWidth(0), fieldAlign(symbolStart), displayAlignment('l'), inputWhitespaceTreatment(symbolPreserve), expandTabs(8), lineThickness(20), lineDouble(0), backgroundColor(0), boxHasBorder(1), boxHasBackground(0), borderPresent(1), borderPriority(0), borderOmitAtBreak(0), cellLeftMargin(0), cellRightMargin(0), cellTopMargin(0), cellBottomMargin(0), cellVerticalAlignment('t'), lineSpacingSpec(240), cellBackground(0), scoreSpaces(1), hyphenate(0), gridPosType(gridPosRowMajor), gridColumnAlignment('c'), gridRowSep(2), gridColumnSep(2), mathInline(0), mathPosture(0), superscriptHeight(5), subscriptDepth(3), overMarkHeight(10), underMarkDepth(10), span(0) { } RtfFOTBuilder::ParaFormat::ParaFormat() : leftIndent(0), rightIndent(0), firstLineIndent(0), quadding('l'), lineSpacing(240), lines(symbolWrap), lineSpacingAtLeast(0), widowOrphanControl(widowControl|orphanControl), headingLevel(0) { } RtfFOTBuilder::PageFormat::PageFormat() : leftMargin(0), rightMargin(0), topMargin(0), bottomMargin(0), headerMargin(0), footerMargin(0), pageHeight(72*20*11), pageWidth(72*10*17), pageNumberFormat("dec"), pageNumberRestart(0), nColumns(1), columnSep(72*10), balance(0) { } RtfFOTBuilder::FontFamilyCharsets::FontFamilyCharsets() { for (int i = 0; i < nWinCharsets; i++) rtfFontNumber[i] = -1; } ElementSet::ElementSet() { } void ElementSet::add(unsigned long groveIndex, unsigned long n) { if (groveIndex >= v_.size()) v_.resize(groveIndex + 1); Vector &elems = v_[groveIndex]; if (n >= elems.size()) { for (size_t k = 1 + (n - elems.size()); k > 0; --k) elems.push_back(0); } elems[n] = 1; } bool ElementSet::contains(unsigned long groveIndex, unsigned long n) const { return groveIndex < v_.size() && n < v_[groveIndex].size() && v_[groveIndex][n] != 0; } // This was mostly automatically generated using GetLocaleInfo(). unsigned RtfFOTBuilder::convertLanguage(unsigned language, unsigned country, unsigned &langCharsets) { if (language == 0) { langCharsets = 0x1f; return DEFAULT_LANG; } switch (language) { case SP_LETTER2('B', 'G'): langCharsets = 0x4; return 0x402; case SP_LETTER2('C', 'A'): langCharsets = 0x3; return 0x403; case SP_LETTER2('C', 'S'): langCharsets = 0x13; return 0x405; case SP_LETTER2('D', 'A'): langCharsets = 0x13; return 0x406; case SP_LETTER2('D', 'E'): langCharsets = 0x13; switch (country) { case SP_LETTER2('D', 'E'): return 0x407; case SP_LETTER2('C', 'H'): return 0x807; case SP_LETTER2('A', 'T'): return 0xc07; case SP_LETTER2('L', 'U'): return 0x1007; case SP_LETTER2('L', 'I'): return 0x1407; } return 0x407; case SP_LETTER2('E', 'L'): langCharsets = 0x8; return 0x408; case SP_LETTER2('E', 'N'): langCharsets = 0x1f; switch (country) { case SP_LETTER2('U', 'S'): return 0x409; case SP_LETTER2('G', 'B'): return 0x809; case SP_LETTER2('A', 'U'): return 0xc09; case SP_LETTER2('C', 'A'): return 0x1009; case SP_LETTER2('N', 'Z'): return 0x1409; case SP_LETTER2('I', 'E'): return 0x1809; case SP_LETTER2('Z', 'A'): return 0x1c09; case SP_LETTER2('J', 'M'): return 0x2009; case SP_LETTER2('C', 'B'): return 0x2409; case SP_LETTER2('B', 'Z'): return 0x2809; case SP_LETTER2('T', 'T'): return 0x2c09; } return 0x409; case SP_LETTER2('E', 'S'): langCharsets = 0x13; switch (country) { case SP_LETTER2('E', 'S'): return 0x40a; case SP_LETTER2('M', 'X'): return 0x80a; case SP_LETTER2('G', 'T'): return 0x100a; case SP_LETTER2('C', 'R'): return 0x140a; case SP_LETTER2('P', 'A'): return 0x180a; case SP_LETTER2('D', 'O'): return 0x1c0a; case SP_LETTER2('V', 'E'): return 0x200a; case SP_LETTER2('C', 'O'): return 0x240a; case SP_LETTER2('P', 'E'): return 0x280a; case SP_LETTER2('A', 'R'): return 0x2c0a; case SP_LETTER2('E', 'C'): return 0x300a; case SP_LETTER2('C', 'L'): return 0x340a; case SP_LETTER2('U', 'Y'): return 0x380a; case SP_LETTER2('P', 'Y'): return 0x3c0a; case SP_LETTER2('B', 'O'): return 0x400a; case SP_LETTER2('S', 'V'): return 0x440a; case SP_LETTER2('H', 'N'): return 0x480a; case SP_LETTER2('N', 'I'): return 0x4c0a; case SP_LETTER2('P', 'R'): return 0x500a; } return 0x40a; case SP_LETTER2('F', 'I'): langCharsets = 0x13; return 0x40b; case SP_LETTER2('F', 'R'): langCharsets = 0x13; switch (country) { case SP_LETTER2('F', 'R'): return 0x40c; case SP_LETTER2('B', 'E'): return 0x80c; case SP_LETTER2('C', 'A'): return 0xc0c; case SP_LETTER2('C', 'H'): return 0x100c; case SP_LETTER2('L', 'U'): return 0x140c; } return 0x40c; case SP_LETTER2('H', 'U'): langCharsets = 0x12; return 0x40e; case SP_LETTER2('I', 'S'): langCharsets = 0x3; return 0x40f; case SP_LETTER2('I', 'T'): langCharsets = 0x13; switch (country) { case SP_LETTER2('I', 'T'): return 0x410; case SP_LETTER2('C', 'H'): return 0x810; } return 0x410; case SP_LETTER2('N', 'L'): langCharsets = 0x13; switch (country) { case SP_LETTER2('N', 'L'): return 0x413; case SP_LETTER2('B', 'E'): return 0x813; } return 0x413; case SP_LETTER2('N', 'O'): langCharsets = 0x13; return 0x414; case SP_LETTER2('P', 'L'): langCharsets = 0x12; return 0x415; case SP_LETTER2('P', 'T'): langCharsets = 0x13; switch (country) { case SP_LETTER2('B', 'R'): return 0x416; case SP_LETTER2('P', 'T'): return 0x816; } return 0x416; case SP_LETTER2('R', 'O'): langCharsets = 0x12; return 0x418; case SP_LETTER2('R', 'U'): langCharsets = 0x4; return 0x419; case SP_LETTER2('H', 'R'): langCharsets = 0x12; // FIXME are langCharsets different here? switch (country) { case SP_LETTER2('H', 'R'): return 0x41a; case SP_LETTER2('S', 'P'): return 0x81a; } return 0x41a; case SP_LETTER2('S', 'K'): langCharsets = 0x12; return 0x41b; case SP_LETTER2('S', 'Q'): langCharsets = 0x12; return 0x41c; case SP_LETTER2('S', 'V'): langCharsets = 0x13; switch (country) { case SP_LETTER2('S', 'E'): return 0x41d; case SP_LETTER2('F', 'I'): return 0x81d; } return 0x41d; case SP_LETTER2('T', 'R'): langCharsets = 0x12; return 0x41f; case SP_LETTER2('I', 'D'): langCharsets = 0x13; return 0x421; case SP_LETTER2('U', 'K'): langCharsets = 0x4; return 0x422; case SP_LETTER2('B', 'E'): langCharsets = 0x4; return 0x423; case SP_LETTER2('S', 'L'): langCharsets = 0x12; return 0x424; case SP_LETTER2('E', 'T'): langCharsets = 0x12; return 0x425; case SP_LETTER2('L', 'V'): langCharsets = 0x12; return 0x426; case SP_LETTER2('L', 'T'): langCharsets = 0x12; return 0x427; case SP_LETTER2('V', 'I'): langCharsets = 0x13; return 0x42a; case SP_LETTER2('E', 'U'): langCharsets = 0x13; return 0x42d; case SP_LETTER2('A', 'F'): langCharsets = 0x1f; return 0x436; case SP_LETTER2('F', 'O'): langCharsets = 0x13; return 0x438; case SP_LETTER2('J', 'A'): langCharsets = (1 << jisCharset); return 0x411; } langCharsets = 0x1f; return DEFAULT_LANG; } const RtfFOTBuilder::WinCharset RtfFOTBuilder::winCharsets[RtfFOTBuilder::nWinCharsets] = { // CP 1252 { 0, "", { 0x0000, 0x0000, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x0000, 0x0000, 0x0178, 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff } }, // CP 1250 { 238, " CE", { 0x0000, 0x0000, 0x201a, 0x0000, 0x201e, 0x2026, 0x2020, 0x2021, 0x0000, 0x2030, 0x0160, 0x2039, 0x015a, 0x0164, 0x017d, 0x0179, 0x0000, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0161, 0x203a, 0x015b, 0x0165, 0x017e, 0x017a, 0x00a0, 0x02c7, 0x02d8, 0x0141, 0x00a4, 0x0104, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x015e, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x017b, 0x00b0, 0x00b1, 0x02db, 0x0142, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x0105, 0x015f, 0x00bb, 0x013d, 0x02dd, 0x013e, 0x017c, 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9 } }, // CP 1251 { 204, " CYR", { 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021, 0x0000, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f, 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f, 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7, 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407, 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7, 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f } }, // CP 1253 { 161, " Greek", { 0x0000, 0x0000, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0000, 0x203a, 0x0000, 0x0000, 0x0000, 0x0000, 0x00a0, 0x0385, 0x0386, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x0000, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x2015, 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x00b5, 0x00b6, 0x00b7, 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x0000, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0000 } }, // CP 1254 { 162, " TUR", { 0x0000, 0x0000, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x0000, 0x0000, 0x0178, 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff } }, // Shift JIS Katakana { 128, "", { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff61, 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67, 0xff68, 0xff69, 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f, 0xff70, 0xff71, 0xff72, 0xff73, 0xff74, 0xff75, 0xff76, 0xff77, 0xff78, 0xff79, 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f, 0xff80, 0xff81, 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87, 0xff88, 0xff89, 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f, 0xff90, 0xff91, 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97, 0xff98, 0xff99, 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f } }, // This is the Symbol charset which is treated specially. // It must be last in this table. { 2, "" } }; const RtfFOTBuilder::SymbolFont RtfFOTBuilder::symbolFonts[RtfFOTBuilder::nSymbolFonts] = { { "Symbol", { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0021, 0x2200, 0x0023, 0x2203, 0x0025, 0x0026, 0x220B, 0x0028, 0x0029, 0x2217, 0x002B, 0x002C, 0x2212, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x2245, 0x0391, 0x0392, 0x03A7, 0x2206, 0x0395, 0x03A6, 0x0393, 0x0397, 0x0399, 0x03D1, 0x039A, 0x039B, 0x039C, 0x039D, 0x039F, 0x03A0, 0x0398, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03C2, 0x2126, 0x039E, 0x03A8, 0x0396, 0x005B, 0x2234, 0x005D, 0x22A5, 0x005F, 0x203E, 0x03B1, 0x03B2, 0x03C7, 0x03B4, 0x03B5, 0x03C6, 0x03B3, 0x03B7, 0x03B9, 0x03D5, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BF, 0x03C0, 0x03B8, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03D6, 0x03C9, 0x03BE, 0x03C8, 0x03B6, 0x007B, 0x007C, 0x007D, 0x223C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03D2, 0x2032, 0x2264, 0x2215, 0x221E, 0x0192, 0x2663, 0x2666, 0x2665, 0x2660, 0x2194, 0x2190, 0x2191, 0x2192, 0x2193, 0x00B0, 0x00B1, 0x2033, 0x2265, 0x00D7, 0x221D, 0x2202, 0x2022, 0x00F7, 0x2260, 0x2261, 0x2248, 0x2026, 0x0000, 0x0000, 0x21B5, 0x2135, 0x2111, 0x211C, 0x2118, 0x2297, 0x2295, 0x2205, 0x2229, 0x222A, 0x2283, 0x2287, 0x2284, 0x2282, 0x2286, 0x2208, 0x2209, 0x2220, 0x2207, 0x00AE, 0x00A9, 0x2122, 0x220F, 0x221A, 0x22C5, 0x00AC, 0x2227, 0x2228, 0x21D4, 0x21D0, 0x21D1, 0x21D2, 0x21D3, 0x25CA, 0x2329, 0x00AE, 0x00A9, 0x2122, 0x2211, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x232A, 0x222B, 0x2320, 0x0000, 0x2321, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 } }, // I created this table by hand. It's sometimes not obvious what // the appropriate mapping is. { "Wingdings", { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2702, 0x2701, 0x0000, 0x0000, 0x0000, 0x0000, 0x260e, 0x2706, 0x2709, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2328, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2707, 0x270d, 0x0000, 0x270c, 0x0000, 0x0000, 0x0000, 0x261c, 0x261e, 0x261d, 0x261f, 0x0000, 0x263a, 0x0000, 0x2639, 0x0000, 0x2620, 0x0000, 0x0000, 0x2708, 0x263c, 0x0000, 0x2744, 0x0000, 0x271e, 0x0000, 0x2720, 0x2721, 0x262a, 0x262f, 0x0950, 0x2638, 0x2648, 0x2649, 0x264a, 0x264b, 0x264c, 0x264d, 0x264e, 0x264f, 0x2650, 0x2651, 0x2652, 0x2653, 0x0000, 0x0000, 0x25cf, 0x274d, 0x25a0, 0x25a1, 0x0000, 0x2751, 0x2752, 0x0000, 0x0000, 0x25c6, 0x2756, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2780, 0x2781, 0x2782, 0x2783, 0x2784, 0x2785, 0x2786, 0x2787, 0x2788, 0x2789, 0x0000, 0x278a, 0x278b, 0x278c, 0x278d, 0x278e, 0x278f, 0x2790, 0x2791, 0x2792, 0x2793, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x25cb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x25aa, 0x0000, 0x0000, 0x2726, 0x2605, 0x2736, 0x0000, 0x2739, 0x0000, 0x0000, 0x0000, 0x2727, 0x0000, 0x0000, 0x272a, 0x2730, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x232b, 0x2326, 0x0000, 0x27a2, 0x0000, 0x0000, 0x0000, 0x27b2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x25ab, 0x2718, 0x2714, 0x2612, 0x2611, 0x0000 } }, { "ZapfDingbats", { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2701, 0x2702, 0x2703, 0x2704, 0x260E, 0x2706, 0x2707, 0x2708, 0x2709, 0x261B, 0x261E, 0x270C, 0x270D, 0x270E, 0x270F, 0x2710, 0x2711, 0x2712, 0x2713, 0x2714, 0x2715, 0x2716, 0x2717, 0x2718, 0x2719, 0x271A, 0x271B, 0x271C, 0x271D, 0x271E, 0x271F, 0x2720, 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2727, 0x2605, 0x2729, 0x272A, 0x272B, 0x272C, 0x272D, 0x272E, 0x272F, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738, 0x2739, 0x273A, 0x273B, 0x273C, 0x273D, 0x273E, 0x273F, 0x2740, 0x2741, 0x2742, 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, 0x2748, 0x2749, 0x274A, 0x274B, 0x0000, 0x274D, 0x25A0, 0x274F, 0x2750, 0x2751, 0x2752, 0x25B2, 0x25BC, 0x25C6, 0x2756, 0x0000, 0x2758, 0x2759, 0x275A, 0x275B, 0x275C, 0x275D, 0x275E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x2663, 0x2666, 0x2665, 0x2660, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x2776, 0x2777, 0x2778, 0x2779, 0x277A, 0x277B, 0x277C, 0x277D, 0x277E, 0x277F, 0x2780, 0x2781, 0x2782, 0x2783, 0x2784, 0x2785, 0x2786, 0x2787, 0x2788, 0x2789, 0x278A, 0x278B, 0x278C, 0x278D, 0x278E, 0x278F, 0x2790, 0x2791, 0x2792, 0x2793, 0x2794, 0x2192, 0x2194, 0x2195, 0x2798, 0x2799, 0x279A, 0x279B, 0x279C, 0x279D, 0x279E, 0x279F, 0x27A0, 0x27A1, 0x27A2, 0x27A3, 0x27A4, 0x27A5, 0x27A6, 0x27A7, 0x27A8, 0x27A9, 0x27AA, 0x27AB, 0x27AC, 0x27AD, 0x27AE, 0x27AF, 0x0000, 0x27B1, 0x27B2, 0x27B3, 0x27B4, 0x27B5, 0x27B6, 0x27B7, 0x27B8, 0x27B9, 0x27BA, 0x27BB, 0x27BC, 0x27BD, 0x27BE, 0x0000 } }, }; #ifdef DSSSL_NAMESPACE } #endif #include "RtfFOTBuilder_inst.cxx" jade-1.2.1/jade/RtfFOTBuilder.h100444 764 764 1175 6606574462 13715 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef RtfFOTBuilder_INCLUDED #define RtfFOTBuilder_INCLUDED 1 #include "OutputByteStream.h" #include "FOTBuilder.h" #include "Ptr.h" #include "ExtendEntityManager.h" #include "CharsetInfo.h" #include "Message.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif FOTBuilder * makeRtfFOTBuilder(OutputByteStream *, const Vector &options, const Ptr &, const CharsetInfo &, Messenger *, const FOTBuilder::Extension *&); #ifdef DSSSL_NAMESPACE } #endif #endif /* not RtfFOTBuilder_INCLUDED */ jade-1.2.1/jade/SgmlFOTBuilder.cxx100444 764 764 151173 6606574462 14503 0ustar jjcjjc// Copyright (c) 1996, 1997 James Clark // See the file copying.txt for copying permission. // Possible improvements: // Don't serialize ports // Extension flow objects // Merge text chunks // Handle input-whitespace-treatment/tabs // Table processing // When element has an ID, output both ID anchor and numeric anchor #include "config.h" #include "SgmlFOTBuilder.h" #include "macros.h" #include #include #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class SgmlFOTBuilder : public SerialFOTBuilder { public: SgmlFOTBuilder(OutputCharStream *); ~SgmlFOTBuilder(); void setFontSize(Length); void setFontFamilyName(const StringC &); void setFontWeight(Symbol); void setFontPosture(Symbol); void setStartIndent(const LengthSpec &); void setEndIndent(const LengthSpec &); void setFirstLineStartIndent(const LengthSpec &); void setLastLineEndIndent(const LengthSpec &); void setLineSpacing(const LengthSpec &); void setFieldWidth(const LengthSpec &); void setPositionPointShift(const LengthSpec &); void setStartMargin(const LengthSpec &); void setEndMargin(const LengthSpec &); void setSidelineSep(const LengthSpec &); void setAsisWrapIndent(const LengthSpec &); void setLineNumberSep(const LengthSpec &); void setLastLineJustifyLimit(const LengthSpec &); void setJustifyGlyphSpaceMaxAdd(const LengthSpec &); void setJustifyGlyphSpaceMaxRemove(const LengthSpec &); void setTableCornerRadius(const LengthSpec &); void setBoxCornerRadius(const LengthSpec &); void setMarginaliaSep(const LengthSpec &); void setMinPreLineSpacing(const OptLengthSpec &); void setMinPostLineSpacing(const OptLengthSpec &); void setMinLeading(const OptLengthSpec &); void setLines(Symbol); void setQuadding(Symbol); void setDisplayAlignment(Symbol sym); void setFieldAlign(Symbol); void setLineJoin(Symbol); void setLineCap(Symbol); void setLineNumberSide(Symbol); void setKernMode(Symbol); void setInputWhitespaceTreatment(Symbol); void setFillingDirection(Symbol); void setWritingMode(Symbol); void setLastLineQuadding(Symbol); void setMathDisplayMode(Symbol); void setScriptPreAlign(Symbol); void setScriptPostAlign(Symbol); void setScriptMidSupAlign(Symbol); void setScriptMidSubAlign(Symbol); void setNumeratorAlign(Symbol); void setDenominatorAlign(Symbol); void setGridPositionCellType(Symbol); void setGridColumnAlignment(Symbol); void setGridRowAlignment(Symbol); void setBoxType(Symbol); void setGlyphAlignmentMode(Symbol); void setBoxBorderAlignment(Symbol); void setCellRowAlignment(Symbol); void setBorderAlignment(Symbol); void setSidelineSide(Symbol); void setHyphenationKeep(Symbol); void setFontStructure(Symbol); void setFontProportionateWidth(Symbol); void setCellCrossed(Symbol); void setMarginaliaSide(Symbol); void setColor(const DeviceRGBColor &); void setBackgroundColor(const DeviceRGBColor &); void setBackgroundColor(); void setPageWidth(Length); void setPageHeight(Length); void setLeftMargin(Length); void setRightMargin(Length); void setTopMargin(Length); void setBottomMargin(Length); void setHeaderMargin(Length); void setFooterMargin(Length); void setLineThickness(Length); void setCellBeforeRowMargin(Length); void setCellAfterRowMargin(Length); void setCellBeforeColumnMargin(Length); void setCellAfterColumnMargin(Length); void setLineSep(Length); void setBoxSizeBefore(Length); void setBoxSizeAfter(Length); void setLayer(long); void setBackgroundLayer(long); void setBorderPriority(long); void setLineRepeat(long); void setSpan(long); void setMinLeaderRepeat(long); void setHyphenationRemainCharCount(long); void setHyphenationPushCharCount(long); void setWidowCount(long); void setOrphanCount(long); void setExpandTabs(long); void setHyphenationLadderCount(long); void setLanguage(Letter2); void setCountry(Letter2); void setBackgroundTile(PublicId); void setLineBreakingMethod(PublicId); void setLineCompositionMethod(PublicId); void setImplicitBidiMethod(PublicId); void setGlyphSubstMethod(PublicId); void setGlyphReorderMethod(PublicId); void setHyphenationMethod(PublicId); void setTableAutoWidthMethod(PublicId); void setFontName(PublicId); void setBorderPresent(bool); void setInhibitLineBreaks(bool); void setHyphenate(bool); void setKern(bool); void setLigature(bool); void setScoreSpaces(bool); void setFloatOutMarginalia(bool); void setFloatOutSidelines(bool); void setFloatOutLineNumbers(bool); void setCellBackground(bool); void setSpanWeak(bool); void setIgnoreRecordEnd(bool); void setNumberedLines(bool); void setHangingPunct(bool); void setBoxOpenEnd(bool); void setTruncateLeader(bool); void setAlignLeader(bool); void setTablePartOmitMiddleHeader(bool); void setTablePartOmitMiddleFooter(bool); void setBorderOmitAtBreak(bool); void setPrincipalModeSimultaneous(bool); void setMarginaliaKeepWithPrevious(bool); void setGridEquidistantRows(bool); void setGridEquidistantColumns(bool); void setEscapementSpaceBefore(const InlineSpace &); void setEscapementSpaceAfter(const InlineSpace &); void setGlyphSubstTable(const Vector > &tables); void paragraphBreak(const ParagraphNIC &); void characters(const Char *, size_t); void charactersFromNode(const NodePtr &nd, const Char *s, size_t n); void character(const CharacterNIC &); void externalGraphic(const ExternalGraphicNIC &); void rule(const RuleNIC &); void alignmentPoint(); void startSimplePageSequence(); void endSimplePageSequence(); void pageNumber(); void startSimplePageSequenceHeaderFooter(unsigned); void endSimplePageSequenceHeaderFooter(unsigned); void endAllSimplePageSequenceHeaderFooter(); void startScroll(); void endScroll(); void startLink(const Address &); void endLink(); void startMarginalia(); void endMarginalia(); void startMultiModeSerial(const MultiMode *); void endMultiModeSerial(); void startMultiModeMode(const MultiMode &); void endMultiModeMode(); void startScore(Char); void startScore(const LengthSpec &); void startScore(Symbol); void endScore(); void startLeader(const LeaderNIC &); void endLeader(); void startSideline(); void endSideline(); void startBox(const BoxNIC &); void endBox(); void startParagraph(const ParagraphNIC &); void endParagraph(); void startSequence(); void endSequence(); void startLineField(const LineFieldNIC &); void endLineField(); void startDisplayGroup(const DisplayGroupNIC &); void endDisplayGroup(); void startTable(const TableNIC &); void endTable(); void tableBeforeRowBorder(); void tableAfterRowBorder(); void tableBeforeColumnBorder(); void tableAfterColumnBorder(); void tableColumn(const TableColumnNIC &); void startTablePartSerial(const TablePartNIC &); void endTablePartSerial(); void startTablePartHeader(); void endTablePartHeader(); void startTablePartFooter(); void endTablePartFooter(); void startTableRow(); void endTableRow(); void startTableCell(const TableCellNIC &); void endTableCell(); void tableCellBeforeRowBorder(); void tableCellAfterRowBorder(); void tableCellBeforeColumnBorder(); void tableCellAfterColumnBorder(); void startMathSequence(); void endMathSequence(); void startFractionSerial(); void endFractionSerial(); void startFractionNumerator(); void endFractionNumerator(); void startFractionDenominator(); void endFractionDenominator(); void fractionBar(); void startUnmath(); void endUnmath(); void startSuperscript(); void endSuperscript(); void startSubscript(); void endSubscript(); void startScriptSerial(); void endScriptSerial(); void startScriptPreSup(); void endScriptPreSup(); void startScriptPreSub(); void endScriptPreSub(); void startScriptPostSup(); void endScriptPostSup(); void startScriptPostSub(); void endScriptPostSub(); void startScriptMidSup(); void endScriptMidSup(); void startScriptMidSub(); void endScriptMidSub(); void startMarkSerial(); void endMarkSerial(); void startMarkOver(); void endMarkOver(); void startMarkUnder(); void endMarkUnder(); void startFenceSerial(); void endFenceSerial(); void startFenceOpen(); void endFenceOpen(); void startFenceClose(); void endFenceClose(); void startRadicalSerial(); void endRadicalSerial(); void startRadicalDegree(); void endRadicalDegree(); void radicalRadical(const CharacterNIC &); void radicalRadicalDefaulted(); void startMathOperatorSerial(); void endMathOperatorSerial(); void startMathOperatorOperator(); void endMathOperatorOperator(); void startMathOperatorLowerLimit(); void endMathOperatorLowerLimit(); void startMathOperatorUpperLimit(); void endMathOperatorUpperLimit(); void startGrid(const GridNIC &); void endGrid(); void startGridCell(const GridCellNIC &); void endGridCell(); void startNode(const NodePtr &, const StringC &); void endNode(); void currentNodePageNumber(const NodePtr &); struct Data { Data(const StringC &str) : ptr(str.data()), size(str.size()) { } Data(const Char *p, size_t n) : ptr(p), size(n) { } const Char *ptr; size_t size; }; struct Units { Units(long i) : n(i) { } long n; }; private: OutputCharStream &os() { return *curOs_; } void outputIcs(); void startSimpleFlowObj(const char *name); void simpleFlowObj(const char *name); void startPortFlow(const char *name); void endFlow(const char *name); void characterNIC(const CharacterNIC &nic); void displayNIC(const DisplayNIC &nic); void inlineNIC(const InlineNIC &nic); void boolC(const char *, bool); void lengthC(const char *, Length); void lengthSpecC(const char *, const LengthSpec &); void optLengthSpecC(const char *, const OptLengthSpec &); void symbolC(const char *name, Symbol sym); void integerC(const char *, long); void publicIdC(const char *, PublicId); void inlineSpaceC(const char *name, const InlineSpace &); void displaySpaceNIC(const char *name, const DisplaySpace &); void flushPendingElements(); void outputElementName(unsigned long groveIndex, const Char *, size_t); void outputElementName(const NodePtr &node); static bool nodeIsElement(const NodePtr &node) { GroveString gi; return node->getGi(gi) == accessOK; } Owner os_; StrOutputCharStream ics_; StrOutputCharStream hfs_; OutputCharStream *curOs_; Vector multiModeHasPrincipalMode_; Vector glyphSubstTableDefined_; Vector pendingElements_; Vector pendingElementLevels_; unsigned nPendingElementsNonEmpty_; unsigned nodeLevel_; bool suppressAnchors_; StringC hf_[nHF]; }; const char RE = '\r'; const char quot = '"'; const char *const trueString = "true"; const char *const falseString = "false"; // May change this to "null" const char *const nullString = "false"; typedef SgmlFOTBuilder::Units Units; inline OutputCharStream &operator<<(OutputCharStream &os, #ifdef GROVE_NAMESPACE GROVE_NAMESPACE:: #endif GroveString &str) { return os.write(str.data(), str.size()); } inline OutputCharStream &operator<<(OutputCharStream &os, long n) { if (n < 0) return os << '-' << (unsigned long)-n; else return os << (unsigned long)n; } inline const char *boolString(bool b) { return b ? trueString : falseString; } inline OutputCharStream &operator<<(OutputCharStream &os, FOTBuilder::Symbol sym) { switch (sym) { case FOTBuilder::symbolFalse: os << falseString; break; case FOTBuilder::symbolTrue: os << trueString; break; default: os << FOTBuilder::symbolName(sym); break; } return os; } inline OutputCharStream &operator<<(OutputCharStream &os, double d) { char buf[128]; sprintf(buf, "%g", d); return os << buf; } OutputCharStream &operator<<(OutputCharStream &os, Units u) { char buf[32]; sprintf(buf, "%03d", u.n); int len = strlen(buf); int i = 0; for (; i < 3 && buf[len - i - 1] == '0'; i++) ; if (i == 3) { i = len - 3; if (i == 0) buf[i++] = '0'; } else { int j = len + 1 - i; for (; i < 3; i++) buf[len - i] = buf[len - i - 1]; buf[len - 3] = '.'; i = j; } strcpy(buf + i, "pt"); return os << buf; } inline OutputCharStream &operator<<(OutputCharStream &os, const FOTBuilder::LengthSpec &ls) { if (ls.displaySizeFactor != 0.0) { // 100+20% if (ls.length) { os << Units(ls.length); if (ls.displaySizeFactor >= 0.0) os << '+'; } char buf[128]; sprintf(buf, "%.2f%%", ls.displaySizeFactor * 100.0); } else os << Units(ls.length); return os; } OutputCharStream &operator<<(OutputCharStream &os, const FOTBuilder::TableLengthSpec &ls) { if (ls.displaySizeFactor != 0.0 || ls.tableUnitFactor != 0.0) { // 100+20% bool needSign = 0; if (ls.length) { os << Units(ls.length); needSign = 1; } char buf[128]; if (ls.displaySizeFactor != 0.0) { if (needSign && ls.displaySizeFactor >= 0.0) os << '+'; sprintf(buf, "%.2f%%", ls.displaySizeFactor * 100.0); needSign = 1; os << buf; } if (ls.tableUnitFactor != 0.0) { if (needSign && ls.tableUnitFactor >= 0.0) os << '+'; sprintf(buf, "%.2f*", ls.tableUnitFactor); os << buf; } } else os << Units(ls.length); return os; } OutputCharStream &operator<<(OutputCharStream &os, SgmlFOTBuilder::Data data) { const Char *s = data.ptr; size_t n = data.size; for (; n > 0; n--, s++) { switch (*s) { case '&': os << "&"; break; case '<': os << "<"; break; case '>': os << ">"; break; case '"': os << """; break; default: if (*s < 0x80) os.put(*s); else os << "&#" << (unsigned long)*s << ';'; break; } } return os; } inline OutputCharStream &operator<<(OutputCharStream &os, const FOTBuilder::GlyphId &gid) { if (gid.publicId) { os << gid.publicId; if (gid.suffix) os << "::" << gid.suffix; } else os << falseString; return os; } FOTBuilder *makeSgmlFOTBuilder(OutputCharStream *os) { return new SgmlFOTBuilder(os); } static void outputNumericCharRef(OutputCharStream &os, Char c) { os << "&#" << (unsigned long)c << ';'; } SgmlFOTBuilder::SgmlFOTBuilder(OutputCharStream *os) : os_(os), curOs_(os), nodeLevel_(0), nPendingElementsNonEmpty_(0), suppressAnchors_(0) { os->setEscaper(outputNumericCharRef); *os_ << "" << RE; #if 0 *os_ << "" << RE; #endif *os_ << "" << RE; } SgmlFOTBuilder::~SgmlFOTBuilder() { os() << "" << RE; } void SgmlFOTBuilder::characters(const Char *s, size_t n) { if (n == 0) return; flushPendingElements(); os() << "" << Data(s, n) << "" << RE; } void SgmlFOTBuilder::charactersFromNode(const NodePtr &nd, const Char *s, size_t n) { GroveString name; GroveString text; NodePtr entity; if (n == 1 && *s == 0xFFFD && nd->getEntityName(name) == accessOK && nd->getEntity(entity) == accessOK && entity->getText(text) == accessOK) os() << "" << RE; else SgmlFOTBuilder::characters(s, n); } void SgmlFOTBuilder::characterNIC(const CharacterNIC &nic) { if (nic.specifiedC) { if (nic.specifiedC & (1 << CharacterNIC::cChar)) os() << " char=" << quot << "&#" << (unsigned long)nic.ch << ";" << quot; if (nic.specifiedC & (1 << CharacterNIC::cGlyphId)) os() << " glyph-id=" << quot << nic.glyphId << quot; if (nic.specifiedC & (1 << CharacterNIC::cIsDropAfterLineBreak)) os() << " drop-after-line-break=" << quot << boolString(nic.isDropAfterLineBreak) << quot; if (nic.specifiedC & (1 << CharacterNIC::cIsDropUnlessBeforeLineBreak)) os() << " drop-unless-before-line-break=" << quot << boolString(nic.isDropUnlessBeforeLineBreak) << quot; if (nic.specifiedC & (1 << CharacterNIC::cIsPunct)) os() << " punct=" << quot << boolString(nic.isPunct) << quot; if (nic.specifiedC & (1 << CharacterNIC::cIsInputWhitespace)) os() << " input-whitespace=" << quot << boolString(nic.isInputWhitespace) << quot; if (nic.specifiedC & (1 << CharacterNIC::cIsInputTab)) os() << " input-tab=" << quot << boolString(nic.isInputTab) << quot; if (nic.specifiedC & (1 << CharacterNIC::cIsRecordEnd)) os() << " record-end=" << quot << boolString(nic.isRecordEnd) << quot; if (nic.specifiedC & (1 << CharacterNIC::cIsSpace)) os() << " space=" << quot << boolString(nic.isSpace) << quot; if (nic.specifiedC & (1 << CharacterNIC::cScript)) { if (nic.script) os() << " script=" << quot << nic.script << quot; else os() << " script=" << quot << falseString << quot; } if (nic.specifiedC & (1 << CharacterNIC::cMathClass)) os() << " math-class=" << quot << nic.mathClass << quot; if (nic.specifiedC & (1 << CharacterNIC::cMathFontPosture)) os() << " math-font-posture=" << quot << nic.mathFontPosture << quot; if (nic.specifiedC & (1 << CharacterNIC::cBreakBeforePriority)) os() << " break-before-priority=" << quot << nic.breakBeforePriority << quot; if (nic.specifiedC & (1 << CharacterNIC::cBreakAfterPriority)) os() << " break-after-priority=" << quot << nic.breakAfterPriority << quot; } if (nic.stretchFactor != 1.0) os() << " stretch-factor=" << quot << nic.stretchFactor << quot; } void SgmlFOTBuilder::character(const CharacterNIC &nic) { flushPendingElements(); os() << ""; } void SgmlFOTBuilder::outputIcs() { StringC str; ics_.extractString(str); os() << str; } void SgmlFOTBuilder::setFontSize(Length n) { lengthC("font-size", n); } void SgmlFOTBuilder::setFontFamilyName(const StringC &str) { ics_ << " font-family-name=" << quot << str << quot; } void SgmlFOTBuilder::setFontWeight(Symbol weight) { symbolC("font-weight", weight); } void SgmlFOTBuilder::setFontPosture(Symbol posture) { symbolC("font-posture", posture); } void SgmlFOTBuilder::setStartIndent(const LengthSpec &ls) { lengthSpecC("start-indent", ls); } void SgmlFOTBuilder::setEndIndent(const LengthSpec &ls) { lengthSpecC("end-indent", ls); } void SgmlFOTBuilder::setFirstLineStartIndent(const LengthSpec &ls) { lengthSpecC("first-line-start-indent", ls); } void SgmlFOTBuilder::setLastLineEndIndent(const LengthSpec &ls) { lengthSpecC("last-line-end-indent", ls); } void SgmlFOTBuilder::setLineSpacing(const LengthSpec &ls) { lengthSpecC("line-spacing", ls); } void SgmlFOTBuilder::setFieldWidth(const LengthSpec &ls) { lengthSpecC("field-width", ls); } void SgmlFOTBuilder::setPositionPointShift(const LengthSpec &ls) { lengthSpecC("position-point-shift", ls); } void SgmlFOTBuilder::setStartMargin(const LengthSpec &ls) { lengthSpecC("start-margin", ls); } void SgmlFOTBuilder::setEndMargin(const LengthSpec &ls) { lengthSpecC("end-margin", ls); } void SgmlFOTBuilder::setSidelineSep(const LengthSpec &ls) { lengthSpecC("sideline-sep", ls); } void SgmlFOTBuilder::setAsisWrapIndent(const LengthSpec &ls) { lengthSpecC("asis-wrap-indent", ls); } void SgmlFOTBuilder::setLineNumberSep(const LengthSpec &ls) { lengthSpecC("line-number-sep", ls); } void SgmlFOTBuilder::setLastLineJustifyLimit(const LengthSpec &ls) { lengthSpecC("last-line-justify-limit", ls); } void SgmlFOTBuilder::setJustifyGlyphSpaceMaxAdd(const LengthSpec &ls) { lengthSpecC("justify-glyph-space-max-add", ls); } void SgmlFOTBuilder::setJustifyGlyphSpaceMaxRemove(const LengthSpec &ls) { lengthSpecC("justify-glyph-space-max-remove", ls); } void SgmlFOTBuilder::setTableCornerRadius(const LengthSpec &ls) { lengthSpecC("table-corner-radius", ls); } void SgmlFOTBuilder::setBoxCornerRadius(const LengthSpec &ls) { lengthSpecC("box-corner-radius", ls); } void SgmlFOTBuilder::setMarginaliaSep(const LengthSpec &ls) { lengthSpecC("marginalia-sep", ls); } void SgmlFOTBuilder::lengthSpecC(const char *s, const LengthSpec &ls) { ics_ << ' ' << s << '=' << quot << ls << quot; } void SgmlFOTBuilder::setMinPreLineSpacing(const OptLengthSpec &ols) { optLengthSpecC("min-pre-line-spacing", ols); } void SgmlFOTBuilder::setMinPostLineSpacing(const OptLengthSpec &ols) { optLengthSpecC("min-post-line-spacing", ols); } void SgmlFOTBuilder::setMinLeading(const OptLengthSpec &ols) { optLengthSpecC("min-leading", ols); } void SgmlFOTBuilder::optLengthSpecC(const char *s, const OptLengthSpec &ols) { if (ols.hasLength) lengthSpecC(s, ols.length); else ics_ << ' ' << s << quot << falseString << quot; } void SgmlFOTBuilder::setLines(Symbol sym) { symbolC("lines", sym); } void SgmlFOTBuilder::setQuadding(Symbol sym) { symbolC("quadding", sym); } void SgmlFOTBuilder::setDisplayAlignment(Symbol sym) { symbolC("display-alignment", sym); } void SgmlFOTBuilder::setFieldAlign(Symbol sym) { symbolC("field-align", sym); } void SgmlFOTBuilder::setLineJoin(Symbol sym) { symbolC("line-join", sym); } void SgmlFOTBuilder::setLineCap(Symbol sym) { symbolC("line-cap", sym); } void SgmlFOTBuilder::setLineNumberSide(Symbol sym) { symbolC("line-number-side", sym); } void SgmlFOTBuilder::setKernMode(Symbol sym) { symbolC("kern-mode", sym); } void SgmlFOTBuilder::setInputWhitespaceTreatment(Symbol sym) { symbolC("input-whitespace-treatment", sym); } void SgmlFOTBuilder::setFillingDirection(Symbol sym) { symbolC("filling-direction", sym); } void SgmlFOTBuilder::setWritingMode(Symbol sym) { symbolC("writing-mode", sym); } void SgmlFOTBuilder::setLastLineQuadding(Symbol sym) { symbolC("last-line-quadding", sym); } void SgmlFOTBuilder::setMathDisplayMode(Symbol sym) { symbolC("math-display-mode", sym); } void SgmlFOTBuilder::setScriptPreAlign(Symbol sym) { symbolC("script-pre-align", sym); } void SgmlFOTBuilder::setScriptPostAlign(Symbol sym) { symbolC("script-post-align", sym); } void SgmlFOTBuilder::setScriptMidSupAlign(Symbol sym) { symbolC("script-mid-sup-align", sym); } void SgmlFOTBuilder::setScriptMidSubAlign(Symbol sym) { symbolC("script-mid-sub-align", sym); } void SgmlFOTBuilder::setNumeratorAlign(Symbol sym) { symbolC("numerator-align", sym); } void SgmlFOTBuilder::setDenominatorAlign(Symbol sym) { symbolC("denominator-align", sym); } void SgmlFOTBuilder::setGridPositionCellType(Symbol sym) { symbolC("grid-position-cell-type", sym); } void SgmlFOTBuilder::setGridColumnAlignment(Symbol sym) { symbolC("grid-column-alignment", sym); } void SgmlFOTBuilder::setGridRowAlignment(Symbol sym) { symbolC("grid-row-alignment", sym); } void SgmlFOTBuilder::setBoxType(Symbol sym) { symbolC("box-type", sym); } void SgmlFOTBuilder::setGlyphAlignmentMode(Symbol sym) { symbolC("glyph-alignment-mode", sym); } void SgmlFOTBuilder::setBoxBorderAlignment(Symbol sym) { symbolC("box-border-alignment", sym); } void SgmlFOTBuilder::setCellRowAlignment(Symbol sym) { symbolC("cell-row-alignment", sym); } void SgmlFOTBuilder::setBorderAlignment(Symbol sym) { symbolC("border-alignment", sym); } void SgmlFOTBuilder::setSidelineSide(Symbol sym) { symbolC("sideline-side", sym); } void SgmlFOTBuilder::setHyphenationKeep(Symbol sym) { symbolC("hyphenation-keep", sym); } void SgmlFOTBuilder::setFontStructure(Symbol sym) { symbolC("font-structure", sym); } void SgmlFOTBuilder::setFontProportionateWidth(Symbol sym) { symbolC("font-proportionate-width", sym); } void SgmlFOTBuilder::setCellCrossed(Symbol sym) { symbolC("cell-crossed", sym); } void SgmlFOTBuilder::setMarginaliaSide(Symbol sym) { symbolC("marginalia-side", sym); } void SgmlFOTBuilder::symbolC(const char *name, Symbol sym) { ics_ << ' ' << name << '=' << quot << sym << quot; } inline void hex2(OutputCharStream &os, unsigned char c) { static const char hexDigits[] = "0123456789ABCDEF"; os << hexDigits[c >> 4] << hexDigits[c & 0xF]; } inline OutputCharStream &operator<<(OutputCharStream &os, const FOTBuilder::DeviceRGBColor &color) { os << '#'; hex2(os, color.red); hex2(os, color.green); hex2(os, color.blue); return os; } void SgmlFOTBuilder::setColor(const DeviceRGBColor &color) { ics_ << " color=" << quot << color << quot; } void SgmlFOTBuilder::setBackgroundColor() { ics_ << " background-color=" << quot << falseString << quot; } void SgmlFOTBuilder::setBackgroundColor(const DeviceRGBColor &color) { ics_ << " background-color=" << quot << color << quot; } void SgmlFOTBuilder::setPageWidth(Length units) { lengthC("page-width", units); } void SgmlFOTBuilder::setPageHeight(Length units) { lengthC("page-height", units); } void SgmlFOTBuilder::setLeftMargin(Length units) { lengthC("left-margin", units); } void SgmlFOTBuilder::setRightMargin(Length units) { lengthC("right-margin", units); } void SgmlFOTBuilder::setTopMargin(Length units) { lengthC("top-margin", units); } void SgmlFOTBuilder::setBottomMargin(Length units) { lengthC("bottom-margin", units); } void SgmlFOTBuilder::setHeaderMargin(Length units) { lengthC("header-margin", units); } void SgmlFOTBuilder::setFooterMargin(Length units) { lengthC("footer-margin", units); } void SgmlFOTBuilder::setLineThickness(Length units) { lengthC("line-thickness", units); } void SgmlFOTBuilder::setCellBeforeRowMargin(Length units) { lengthC("cell-before-row-margin", units); } void SgmlFOTBuilder::setCellAfterRowMargin(Length units) { lengthC("cell-after-row-margin", units); } void SgmlFOTBuilder::setCellBeforeColumnMargin(Length units) { lengthC("cell-before-column-margin", units); } void SgmlFOTBuilder::setCellAfterColumnMargin(Length units) { lengthC("cell-after-column-margin", units); } void SgmlFOTBuilder::setLineSep(Length units) { lengthC("line-sep", units); } void SgmlFOTBuilder::setBoxSizeBefore(Length units) { lengthC("box-size-before", units); } void SgmlFOTBuilder::setBoxSizeAfter(Length units) { lengthC("box-size-after", units); } void SgmlFOTBuilder::lengthC(const char *s, Length units) { ics_ << ' ' << s << '=' << quot << Units(units) << quot; } void SgmlFOTBuilder::setLayer(long n) { integerC("layer", n); } void SgmlFOTBuilder::setBackgroundLayer(long n) { integerC("background-layer", n); } void SgmlFOTBuilder::setBorderPriority(long n) { integerC("border-priority", n); } void SgmlFOTBuilder::setLineRepeat(long n) { integerC("line-repeat", n); } void SgmlFOTBuilder::setSpan(long n) { integerC("span", n); } void SgmlFOTBuilder::setMinLeaderRepeat(long n) { integerC("min-leader-repeat", n); } void SgmlFOTBuilder::setHyphenationRemainCharCount(long n) { integerC("hyphenation-remain-char-count", n); } void SgmlFOTBuilder::setHyphenationPushCharCount(long n) { integerC("hyphenation-push-char-count", n); } void SgmlFOTBuilder::setWidowCount(long n) { integerC("widow-count", n); } void SgmlFOTBuilder::setOrphanCount(long n) { integerC("orphan-count", n); } void SgmlFOTBuilder::integerC(const char *s, long n) { ics_ << ' ' << s << '=' << quot << n << quot; } void SgmlFOTBuilder::setExpandTabs(long n) { integerC("expand-tabs", n); } void SgmlFOTBuilder::setHyphenationLadderCount(long n) { integerC("hyphenation-ladder-count", n); } void SgmlFOTBuilder::setCountry(Letter2 code) { ics_ << " country=" << quot; if (code) ics_ << char((code >> 8) & 0xff) << char(code & 0xff); else ics_ << falseString; ics_ << quot; } void SgmlFOTBuilder::setLanguage(Letter2 code) { ics_ << " language=" << quot; if (code) ics_ << char((code >> 8) & 0xff) << char(code & 0xff); else ics_ << falseString; ics_ << quot; } void SgmlFOTBuilder::setBackgroundTile(PublicId pubid) { publicIdC("background-tile", pubid); } void SgmlFOTBuilder::setLineBreakingMethod(PublicId pubid) { publicIdC("line-breaking-method", pubid); } void SgmlFOTBuilder::setLineCompositionMethod(PublicId pubid) { publicIdC("line-composition-method", pubid); } void SgmlFOTBuilder::setImplicitBidiMethod(PublicId pubid) { publicIdC("implicit-bidi-method", pubid); } void SgmlFOTBuilder::setGlyphSubstMethod(PublicId pubid) { publicIdC("glyph-subst-method", pubid); } void SgmlFOTBuilder::setGlyphReorderMethod(PublicId pubid) { publicIdC("glyph-reorder-method", pubid); } void SgmlFOTBuilder::setHyphenationMethod(PublicId pubid) { publicIdC("hyphenation-method", pubid); } void SgmlFOTBuilder::setTableAutoWidthMethod(PublicId pubid) { publicIdC("table-auto-width-method", pubid); } void SgmlFOTBuilder::setFontName(PublicId pubid) { publicIdC("font-name", pubid); } void SgmlFOTBuilder::publicIdC(const char *s, PublicId pubid) { ics_ << ' ' << s << '=' << quot; if (pubid) ics_ << pubid; else ics_ << falseString; ics_ << quot; } void SgmlFOTBuilder::setBorderPresent(bool b) { boolC("border-present", b); } void SgmlFOTBuilder::setInhibitLineBreaks(bool b) { boolC("border-present", b); } void SgmlFOTBuilder::setHyphenate(bool b) { boolC("hyphenate", b); } void SgmlFOTBuilder::setKern(bool b) { boolC("kern", b); } void SgmlFOTBuilder::setLigature(bool b) { boolC("ligature", b); } void SgmlFOTBuilder::setScoreSpaces(bool b) { boolC("score-spaces", b); } void SgmlFOTBuilder::setFloatOutMarginalia(bool b) { boolC("float-out-marginalia", b); } void SgmlFOTBuilder::setFloatOutSidelines(bool b) { boolC("float-out-sidelines", b); } void SgmlFOTBuilder::setFloatOutLineNumbers(bool b) { boolC("float-out-line-numbers", b); } void SgmlFOTBuilder::setCellBackground(bool b) { boolC("cell-background", b); } void SgmlFOTBuilder::setSpanWeak(bool b) { boolC("span-weak", b); } void SgmlFOTBuilder::setIgnoreRecordEnd(bool b) { boolC("ignore-record-end", b); } void SgmlFOTBuilder::setNumberedLines(bool b) { boolC("numbered-lines", b); } void SgmlFOTBuilder::setHangingPunct(bool b) { boolC("hanging-punct", b); } void SgmlFOTBuilder::setBoxOpenEnd(bool b) { boolC("box-open-end", b); } void SgmlFOTBuilder::setTruncateLeader(bool b) { boolC("truncate-leader", b); } void SgmlFOTBuilder::setAlignLeader(bool b) { boolC("align-leader", b); } void SgmlFOTBuilder::setTablePartOmitMiddleHeader(bool b) { boolC("table-part-omit-middle-header", b); } void SgmlFOTBuilder::setTablePartOmitMiddleFooter(bool b) { boolC("table-part-omit-middle-footer", b); } void SgmlFOTBuilder::setBorderOmitAtBreak(bool b) { boolC("border-omit-at-break", b); } void SgmlFOTBuilder::setPrincipalModeSimultaneous(bool b) { boolC("principal-mode-simultaneous", b); } void SgmlFOTBuilder::setMarginaliaKeepWithPrevious(bool b) { boolC("marginalia-keep-with-previous", b); } void SgmlFOTBuilder::setGridEquidistantRows(bool b) { boolC("grid-equidistant-rows", b); } void SgmlFOTBuilder::setGridEquidistantColumns(bool b) { boolC("grid-equidistant-columns", b); } void SgmlFOTBuilder::boolC(const char *s, bool b) { ics_ << ' ' << s << '=' << quot << boolString(b) << quot; } void SgmlFOTBuilder::setEscapementSpaceBefore(const InlineSpace &is) { inlineSpaceC("escapement-space-before", is); } void SgmlFOTBuilder::setEscapementSpaceAfter(const InlineSpace &is) { inlineSpaceC("escapement-space-after", is); } void SgmlFOTBuilder::setGlyphSubstTable(const Vector > &tables) { if (tables.size() == 0) { ics_ << " glyph-subst-table=" << quot << quot; return; } static const char idPrefix[] = "gst"; ics_ << " glyph-subst-table=" << quot; for (size_t i = 0; i < tables.size(); i++) { unsigned long n = tables[i]->uniqueId; if (n >= glyphSubstTableDefined_.size()) { for (size_t j = glyphSubstTableDefined_.size(); j < n + 1; j++) glyphSubstTableDefined_.push_back(0); } if (!glyphSubstTableDefined_[n]) { glyphSubstTableDefined_[n] = 1; os() << "" << RE; os() << ""; } if (i > 0) ics_ << ' '; ics_ << idPrefix << n; } ics_ << quot; } void SgmlFOTBuilder::inlineSpaceC(const char *s, const InlineSpace &is) { if (is.nominal || is.min || is.max) { ics_ << ' ' << s << '=' << quot << is.nominal; if (is.min.length != is.nominal.length || is.min.displaySizeFactor != is.nominal.displaySizeFactor || is.max.length != is.nominal.length || is.max.displaySizeFactor != is.nominal.displaySizeFactor) ics_ << ',' << is.min << ',' << is.max; } } void SgmlFOTBuilder::displayNIC(const DisplayNIC &nic) { if (nic.keepWithPrevious) os() << " keep-with-previous=" << quot << trueString << quot; if (nic.keepWithNext) os() << " keep-with-next=" << quot << trueString << quot; if (nic.mayViolateKeepBefore) os() << " may-violate-keep-before=" << quot << trueString << quot; if (nic.mayViolateKeepAfter) os() << " may-violate-keep-after=" << quot << trueString << quot; if (nic.positionPreference != symbolFalse) os() << " position-preference=" << quot << nic.positionPreference << quot; if (nic.keep != symbolFalse) os() << " keep=" << quot << nic.keep << quot; if (nic.breakBefore != symbolFalse) os() << " break-before=" << quot << nic.breakBefore << quot; if (nic.breakAfter != symbolFalse) os() << " break-after=" << quot << nic.breakAfter << quot; displaySpaceNIC("space-before", nic.spaceBefore); displaySpaceNIC("space-after", nic.spaceAfter); } void SgmlFOTBuilder::displaySpaceNIC(const char *s, const DisplaySpace &ds) { if (ds.nominal || ds.min || ds.max) { os() << ' ' << s << '=' << quot << ds.nominal; if (ds.min.length != ds.nominal.length || ds.min.displaySizeFactor != ds.nominal.displaySizeFactor || ds.max.length != ds.nominal.length || ds.max.displaySizeFactor != ds.nominal.displaySizeFactor) os() << ',' << ds.min << ',' << ds.max; os() << quot; } if (ds.force) os() << ' ' << s << "-priority=" << quot << "force" << quot; else if (ds.priority) os() << ' ' << s << "-priority=" << quot << ds.priority << quot; if (!ds.conditional) os() << ' ' << s << "-conditional=" << quot << falseString << quot; } void SgmlFOTBuilder::inlineNIC(const InlineNIC &nic) { if (nic.breakBeforePriority) os() << " break-before-priority=" << quot << nic.breakBeforePriority << quot; if (nic.breakAfterPriority) os() << " break-after-priority=" << quot << nic.breakAfterPriority << quot; } void SgmlFOTBuilder::startParagraph(const ParagraphNIC &nic) { os() << "" << RE; } void SgmlFOTBuilder::endParagraph() { endFlow("paragraph"); } void SgmlFOTBuilder::paragraphBreak(const ParagraphNIC &nic) { os() << "" << RE; } void SgmlFOTBuilder::startDisplayGroup(const DisplayGroupNIC &nic) { os() << "" << RE; } void SgmlFOTBuilder::endDisplayGroup() { endFlow("display-group"); } void SgmlFOTBuilder::simpleFlowObj(const char *name) { os() << '<' << name; outputIcs(); os() << "/>" << RE; } void SgmlFOTBuilder::startSimpleFlowObj(const char *name) { os() << '<' << name; outputIcs(); os() << ">" << RE; } void SgmlFOTBuilder::startPortFlow(const char *name) { os() << "<" << name << ">" << RE; } void SgmlFOTBuilder::endFlow(const char *name) { os() << "" << RE; } void SgmlFOTBuilder::startSequence() { startSimpleFlowObj("sequence"); } void SgmlFOTBuilder::endSequence() { endFlow("sequence"); } void SgmlFOTBuilder::startLineField(const LineFieldNIC &) { flushPendingElements(); startSimpleFlowObj("line-field"); } void SgmlFOTBuilder::endLineField() { endFlow("line-field"); } void SgmlFOTBuilder::startScroll() { startSimpleFlowObj("scroll"); } void SgmlFOTBuilder::endScroll() { endFlow("scroll"); } void SgmlFOTBuilder::startLink(const Address &addr) { os() << "hasDesc) os() << " desc=" << quot << Data(principalMode->desc) << quot; os() << '>' << RE; } multiModeHasPrincipalMode_.push_back(principalMode != 0); } void SgmlFOTBuilder::endMultiModeSerial() { if (multiModeHasPrincipalMode_.back()) endFlow("multi-mode.mode"); multiModeHasPrincipalMode_.resize(multiModeHasPrincipalMode_.size() - 1); endFlow("multi-mode"); } void SgmlFOTBuilder::startMultiModeMode(const MultiMode &mode) { if (multiModeHasPrincipalMode_.back()) { endFlow("multi-mode.mode"); multiModeHasPrincipalMode_.back() = 0; } os() << "' << RE; } } } } } void SgmlFOTBuilder::pageNumber() { os() << "" << RE; } void SgmlFOTBuilder::startMathSequence() { startSimpleFlowObj("math-sequence"); } void SgmlFOTBuilder::endMathSequence() { endFlow("math-sequence"); } void SgmlFOTBuilder::startFractionSerial() { startSimpleFlowObj("fraction"); } void SgmlFOTBuilder::endFractionSerial() { endFlow("fraction"); } void SgmlFOTBuilder::startFractionNumerator() { startPortFlow("fraction.numerator"); } void SgmlFOTBuilder::endFractionNumerator() { endFlow("fraction.numerator"); } void SgmlFOTBuilder::startFractionDenominator() { startPortFlow("fraction.denominator"); } void SgmlFOTBuilder::endFractionDenominator() { endFlow("fraction.denominator"); } void SgmlFOTBuilder::fractionBar() { simpleFlowObj("fraction.fraction-bar"); } void SgmlFOTBuilder::startUnmath() { startSimpleFlowObj("unmath"); } void SgmlFOTBuilder::endUnmath() { endFlow("unmath"); } void SgmlFOTBuilder::startSuperscript() { startSimpleFlowObj("superscript"); } void SgmlFOTBuilder::endSuperscript() { endFlow("superscript"); } void SgmlFOTBuilder::startSubscript() { startSimpleFlowObj("subscript"); } void SgmlFOTBuilder::endSubscript() { endFlow("subscript"); } void SgmlFOTBuilder::startScriptSerial() { startSimpleFlowObj("script"); startPortFlow("script.principal"); } void SgmlFOTBuilder::endScriptSerial() { endFlow("script"); } void SgmlFOTBuilder::startScriptPreSup() { endFlow("script.principal"); startPortFlow("script.pre-sup"); } void SgmlFOTBuilder::endScriptPreSup() { endFlow("script.pre-sup"); } void SgmlFOTBuilder::startScriptPreSub() { startPortFlow("script.pre-sub"); } void SgmlFOTBuilder::endScriptPreSub() { endFlow("script.pre-sub"); } void SgmlFOTBuilder::startScriptPostSup() { startPortFlow("script.post-sup"); } void SgmlFOTBuilder::endScriptPostSup() { endFlow("script.post-sup"); } void SgmlFOTBuilder::startScriptPostSub() { startPortFlow("script.post-sub"); } void SgmlFOTBuilder::endScriptPostSub() { endFlow("script.post-sub"); } void SgmlFOTBuilder::startScriptMidSup() { startPortFlow("script.mid-sup"); } void SgmlFOTBuilder::endScriptMidSup() { endFlow("script.mid-sup"); } void SgmlFOTBuilder::startScriptMidSub() { startPortFlow("script.mid-sub"); } void SgmlFOTBuilder::endScriptMidSub() { endFlow("script.mid-sub"); } void SgmlFOTBuilder::startMarkSerial() { startSimpleFlowObj("mark"); startPortFlow("mark.principal"); } void SgmlFOTBuilder::endMarkSerial() { endFlow("mark"); } void SgmlFOTBuilder::startMarkOver() { endFlow("mark.principal"); startPortFlow("mark.over-mark"); } void SgmlFOTBuilder::endMarkOver() { endFlow("mark.over-mark"); } void SgmlFOTBuilder::startMarkUnder() { startPortFlow("mark.under-mark"); } void SgmlFOTBuilder::endMarkUnder() { endFlow("mark.under-mark"); } void SgmlFOTBuilder::startFenceSerial() { startSimpleFlowObj("fence"); startPortFlow("fence.principal"); } void SgmlFOTBuilder::endFenceSerial() { endFlow("fence"); } void SgmlFOTBuilder::startFenceOpen() { endFlow("fence.principal"); startPortFlow("fence.open"); } void SgmlFOTBuilder::endFenceOpen() { endFlow("fence.open"); } void SgmlFOTBuilder::startFenceClose() { startPortFlow("fence.close"); } void SgmlFOTBuilder::endFenceClose() { endFlow("fence.close"); } void SgmlFOTBuilder::startRadicalSerial() { startSimpleFlowObj("radical"); } void SgmlFOTBuilder::endRadicalSerial() { endFlow("radical"); } void SgmlFOTBuilder::startRadicalDegree() { endFlow("radical.principal"); startPortFlow("radical.degree"); } void SgmlFOTBuilder::endRadicalDegree() { endFlow("radical.degree"); } void SgmlFOTBuilder::radicalRadical(const CharacterNIC &nic) { os() << "" << RE; startPortFlow("radical.principal"); } void SgmlFOTBuilder::radicalRadicalDefaulted() { startPortFlow("radical.principal"); } void SgmlFOTBuilder::startMathOperatorSerial() { startSimpleFlowObj("math-operator"); startPortFlow("math-operator.principal"); } void SgmlFOTBuilder::endMathOperatorSerial() { endFlow("math-operator"); } void SgmlFOTBuilder::startMathOperatorOperator() { endFlow("math-operator.principal"); startPortFlow("math-operator.operator"); } void SgmlFOTBuilder::endMathOperatorOperator() { endFlow("math-operator.operator"); } void SgmlFOTBuilder::startMathOperatorLowerLimit() { startPortFlow("math-operator.lower-limit"); } void SgmlFOTBuilder::endMathOperatorLowerLimit() { endFlow("math-operator.lower-limit"); } void SgmlFOTBuilder::startMathOperatorUpperLimit() { startPortFlow("math-operator.upper-limit"); } void SgmlFOTBuilder::endMathOperatorUpperLimit() { endFlow("math-operator.upper-limit"); } void SgmlFOTBuilder::startGrid(const GridNIC &nic) { os() << "" << RE; } void SgmlFOTBuilder::rule(const RuleNIC &nic) { flushPendingElements(); const char *s = symbolName(nic.orientation); if (!s) return; os() << "" << RE; } void SgmlFOTBuilder::startLeader(const LeaderNIC &nic) { flushPendingElements(); os() << "" << RE; } void SgmlFOTBuilder::startTablePartSerial(const TablePartNIC &nic) { os() << "' << RE; startPortFlow("table-part.principal"); } void SgmlFOTBuilder::endTablePartSerial() { endFlow("table-part"); } void SgmlFOTBuilder::startTablePartHeader() { endFlow("table-part.principal"); os() << "" << RE; } void SgmlFOTBuilder::endTablePartHeader() { endFlow("table-part.header"); } void SgmlFOTBuilder::startTablePartFooter() { os() << "" << RE; } void SgmlFOTBuilder::endTablePartFooter() { endFlow("table-part.footer"); } void SgmlFOTBuilder::startTableRow() { startSimpleFlowObj("table-row"); } void SgmlFOTBuilder::endTableRow() { endFlow("table-row"); } void SgmlFOTBuilder::startTableCell(const TableCellNIC &nic) { if (nic.missing) os() << " 0 && pendingElementLevels_.back() == nodeLevel_ && nPendingElementsNonEmpty_ < pendingElements_.size()) { pendingElementLevels_.resize(pendingElements_.size() - 1); pendingElements_.resize(pendingElements_.size() - 1); } nodeLevel_--; } void SgmlFOTBuilder::currentNodePageNumber(const NodePtr &node) { if (!nodeIsElement(node)) return; os() << "" << RE; } void SgmlFOTBuilder::outputElementName(unsigned long groveIndex, const Char *idData, size_t idSize) { if (groveIndex) os() << groveIndex << '.'; os() << Data(idData, idSize); } void SgmlFOTBuilder::outputElementName(const NodePtr &node) { GroveString id; if (node->getId(id) == accessOK) outputElementName(node->groveIndex(), id.data(), id.size()); else { unsigned long n; n = node->groveIndex(); if (n) os() << n << '.'; if (node->elementIndex(n) == accessOK) os() << n; } } void SgmlFOTBuilder::flushPendingElements() { if (suppressAnchors_) return; for (size_t i = 0; i < pendingElements_.size(); i++) { const NodePtr &node = pendingElements_[i]; os() << "" << RE; } nPendingElementsNonEmpty_ = 0; pendingElements_.resize(0); pendingElementLevels_.resize(0); } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/jade/SgmlFOTBuilder.h100444 764 764 613 6606574462 14040 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef SgmlFOTBuilder_INCLUDED #define SgmlFOTBuilder_INCLUDED 1 #include "FOTBuilder.h" #include "OutputCharStream.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif FOTBuilder *makeSgmlFOTBuilder(OutputCharStream *); #ifdef DSSSL_NAMESPACE } #endif #endif /* not SgmlFOTBuilder_INCLUDED */ jade-1.2.1/jade/TransformFOTBuilder.cxx100444 764 764 35021 6604607714 15520 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file copying.txt for copying permission. #include "config.h" #include "TransformFOTBuilder.h" #include "FOTBuilder.h" #include "OutputCharStream.h" #include "MessageArg.h" #include "ErrnoMessageArg.h" #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif const char RE = '\r'; class TransformFOTBuilder : public SerialFOTBuilder { public: // SGML Transformations struct DocumentTypeNIC { ~DocumentTypeNIC(); StringC name; StringC publicId; StringC systemId; }; struct ElementNIC { ~ElementNIC(); StringC gi; Vector attributes; }; class TransformExtensionFlowObj : public FOTBuilder::ExtensionFlowObj { public: virtual void atomic(TransformFOTBuilder &, const NodePtr &) const = 0; }; class TransformCompoundExtensionFlowObj : public FOTBuilder::CompoundExtensionFlowObj { public: virtual void start(TransformFOTBuilder &, const NodePtr &) const = 0; virtual void end(TransformFOTBuilder &) const = 0; }; class EntityRefFlowObj : public TransformExtensionFlowObj { public: void atomic(TransformFOTBuilder &fotb, const NodePtr &) const { fotb.entityRef(name_); } bool hasNIC(const StringC &name) const { return name == "name"; } void setNIC(const StringC &name, const Value &value) { value.convertString(name_); } ExtensionFlowObj *copy() const { return new EntityRefFlowObj(*this); } private: StringC name_; }; class ProcessingInstructionFlowObj : public TransformExtensionFlowObj { public: void atomic(TransformFOTBuilder &fotb, const NodePtr &) const { fotb.processingInstruction(data_); } bool hasNIC(const StringC &name) const { return name.size() == 4 && name[0] == 'd' && name[1] == 'a' && name[2] == 't' && name[3] == 'a'; } void setNIC(const StringC &name, const Value &value) { value.convertString(data_); } ExtensionFlowObj *copy() const { return new ProcessingInstructionFlowObj(*this); } private: StringC data_; }; class EmptyElementFlowObj : public TransformExtensionFlowObj { void atomic(TransformFOTBuilder &fotb, const NodePtr &nd) const { if (nic_.gi.size() > 0) fotb.emptyElement(nic_); else { GroveString str; if (nd && nd->getGi(str) == accessOK) { ElementNIC tem(nic_); tem.gi.assign(str.data(), str.size()); fotb.emptyElement(tem); } else fotb.emptyElement(nic_); } } bool hasNIC(const StringC &name) const { return name == "gi" || name == "attributes"; } void setNIC(const StringC &name, const Value &value) { switch (name[0]) { case 'g': value.convertString(nic_.gi); break; case 'a': value.convertStringPairList(nic_.attributes); break; } } ExtensionFlowObj *copy() const { return new EmptyElementFlowObj(*this); } private: ElementNIC nic_; }; class ElementFlowObj : public TransformCompoundExtensionFlowObj { void start(TransformFOTBuilder &fotb, const NodePtr &nd) const { if (nic_.gi.size() > 0) fotb.startElement(nic_); else { GroveString str; if (nd && nd->getGi(str) == accessOK) { ElementNIC tem(nic_); tem.gi.assign(str.data(), str.size()); fotb.startElement(tem); } else fotb.startElement(nic_); } } void end(TransformFOTBuilder &fotb) const { fotb.endElement(); } bool hasNIC(const StringC &name) const { return name == "gi" || name == "attributes"; } void setNIC(const StringC &name, const Value &value) { switch (name[0]) { case 'g': value.convertString(nic_.gi); break; case 'a': value.convertStringPairList(nic_.attributes); break; } } ExtensionFlowObj *copy() const { return new ElementFlowObj(*this); } private: ElementNIC nic_; }; class EntityFlowObj : public TransformCompoundExtensionFlowObj { void start(TransformFOTBuilder &fotb, const NodePtr &) const { fotb.startEntity(systemId_); } void end(TransformFOTBuilder &fotb) const { fotb.endEntity(); } bool hasNIC(const StringC &name) const { return name == "system-id"; } void setNIC(const StringC &name, const Value &value) { value.convertString(systemId_); } ExtensionFlowObj *copy() const { return new EntityFlowObj(*this); } private: StringC systemId_; }; class DocumentTypeFlowObj : public TransformExtensionFlowObj { void atomic(TransformFOTBuilder &fotb, const NodePtr &nd) const { fotb.documentType(nic_); } bool hasNIC(const StringC &name) const { return name == "system-id" || name == "public-id" || name == "name"; } void setNIC(const StringC &name, const Value &value) { switch (name[0]) { case 's': value.convertString(nic_.systemId); break; case 'p': value.convertString(nic_.publicId); break; case 'n': value.convertString(nic_.name); break; } } ExtensionFlowObj *copy() const { return new DocumentTypeFlowObj(*this); } private: DocumentTypeNIC nic_; }; TransformFOTBuilder(CmdLineApp *, bool xml); ~TransformFOTBuilder(); void startElement(const ElementNIC &); void endElement(); void emptyElement(const ElementNIC &); void characters(const Char *s, size_t n); void charactersFromNode(const NodePtr &, const Char *, size_t); void processingInstruction(const StringC &); void documentType(const DocumentTypeNIC &); void formattingInstruction(const StringC &); void entityRef(const StringC &); void startEntity(const StringC &); void endEntity(); void extension(const ExtensionFlowObj &fo, const NodePtr &); void startExtensionSerial(const CompoundExtensionFlowObj &fo, const NodePtr &nd); void endExtensionSerial(const CompoundExtensionFlowObj &fo); void start(); void end(); void setPreserveSdata(bool); private: TransformFOTBuilder(const TransformFOTBuilder &); void operator=(const TransformFOTBuilder &); OutputCharStream &os() { return *os_; } void attributes(const Vector &atts); void flushPendingRe() { if (state_ == statePendingRe) { os() << RE; state_ = stateMiddle; } } void flushPendingReCharRef() { if (state_ == statePendingRe) { os() << " "; state_ = stateMiddle; } } CmdLineApp *app_; OutputCharStream *os_; Owner topOs_; Vector openElements_; StringC undefGi_; struct OpenFile : Link { ~OpenFile(); OutputCharStream *saveOs; // fb must be before os so it gets destroyed afterwards FileOutputByteStream fb; Owner os; StringC systemId; }; IList openFileStack_; bool xml_; enum ReState { stateMiddle, stateStartOfElement, statePendingRe }; ReState state_; bool preserveSdata_; // Really Vector StringC preserveSdataStack_; }; FOTBuilder *makeTransformFOTBuilder(CmdLineApp *app, bool xml, const FOTBuilder::Extension *&ext) { static const TransformFOTBuilder::ProcessingInstructionFlowObj pi; static const TransformFOTBuilder::ElementFlowObj element; static const TransformFOTBuilder::EmptyElementFlowObj emptyElement; static const TransformFOTBuilder::EntityFlowObj entity; static const TransformFOTBuilder::EntityRefFlowObj entityRef; static const TransformFOTBuilder::DocumentTypeFlowObj documentType; static const FOTBuilder::Extension extensions[] = { { "UNREGISTERED::James Clark//Flow Object Class::processing-instruction", 0, 0, 0, 0, &pi }, { "UNREGISTERED::James Clark//Flow Object Class::element", 0, 0, 0, 0, &element }, { "UNREGISTERED::James Clark//Flow Object Class::empty-element", 0, 0, 0, 0, &emptyElement }, { "UNREGISTERED::James Clark//Flow Object Class::entity", 0, 0, 0, 0, &entity }, { "UNREGISTERED::James Clark//Flow Object Class::entity-ref", 0, 0, 0, 0, &entityRef }, { "UNREGISTERED::James Clark//Flow Object Class::document-type", 0, 0, 0, 0, &documentType }, { "UNREGISTERED::James Clark//Characteristic::preserve-sdata?", (void (FOTBuilder::*)(bool))&TransformFOTBuilder::setPreserveSdata, 0, 0, 0, 0 }, { 0 } }; ext = extensions; return new TransformFOTBuilder(app, xml); } static void outputNumericCharRef(OutputCharStream &os, Char c) { os << "&#" << (unsigned long)c << ';'; } TransformFOTBuilder::TransformFOTBuilder(CmdLineApp *app, bool xml) : app_(app), xml_(xml), topOs_(new RecordOutputCharStream(app->makeStdOut())), state_(stateMiddle), preserveSdata_(0) { undefGi_ = app_->systemCharset().execToDesc("#UNDEF"); topOs_->setEscaper(outputNumericCharRef); os_ = topOs_.pointer(); preserveSdataStack_ += 0; } TransformFOTBuilder::~TransformFOTBuilder() { } static bool contains(const StringC &str, Char c) { for (size_t i = 0; i < str.size(); i++) if (str[i] == c) return 1; return 0; } void TransformFOTBuilder::documentType(const DocumentTypeNIC &nic) { flushPendingRe(); if (nic.name.size()) { os() << "' << RE; } atomic(); } void TransformFOTBuilder::attributes(const Vector &atts) { for (size_t i = 0; i < atts.size(); i += 2) { os() << RE << atts[i] << '='; const StringC &s = atts[i + 1]; if (!contains(s, '"')) os() << '"' << s << '"'; else if (!contains(s, '\'')) os() << '\'' << s << '\''; else { os() << '"'; for (size_t j = 0; j < s.size(); j++) { if (s[j] == '"') { if (xml_) os() << """; else outputNumericCharRef(os(), '"'); } else os().put(s[j]); } os() << '"'; } } } void TransformFOTBuilder::startElement(const ElementNIC &nic) { flushPendingRe(); os() << "<"; const StringC &s = nic.gi.size() == 0 ? undefGi_ : nic.gi; os() << s; attributes(nic.attributes); os() << RE << '>'; openElements_.push_back(s); start(); state_ = stateStartOfElement; } void TransformFOTBuilder::emptyElement(const ElementNIC &nic) { flushPendingRe(); os() << "<"; const StringC &s = nic.gi.size() == 0 ? undefGi_ : nic.gi; os() << s; attributes(nic.attributes); if (xml_) os() << "/>"; else os() << '>'; atomic(); state_ = stateMiddle; } void TransformFOTBuilder::endElement() { flushPendingReCharRef(); os() << "'; openElements_.resize(openElements_.size() - 1); end(); state_ = stateMiddle; } void TransformFOTBuilder::processingInstruction(const StringC &s) { flushPendingReCharRef(); os() << ""; else os() << '>'; atomic(); } void TransformFOTBuilder::formattingInstruction(const StringC &s) { flushPendingRe(); os() << s; } void TransformFOTBuilder::entityRef(const StringC &s) { flushPendingRe(); os() << "&" << s << ";"; } void TransformFOTBuilder::startEntity(const StringC &systemId) { flushPendingRe(); OpenFile *ofp = new OpenFile; openFileStack_.insert(ofp); ofp->systemId = systemId; ofp->saveOs = os_; String filename; #ifdef SP_WIDE_SYSTEM filename = systemId; #else filename = app_->codingSystem()->convertOut(systemId); #endif if (filename.size()) { filename += 0; if (!ofp->fb.open(filename.data())) { app_->message(CmdLineApp::openFileErrorMessage(), StringMessageArg(systemId), ErrnoMessageArg(errno)); } else { ofp->os = new RecordOutputCharStream( new EncodeOutputCharStream(&ofp->fb, app_->outputCodingSystem())); ofp->os->setEscaper(outputNumericCharRef); os_ = ofp->os.pointer(); } } } void TransformFOTBuilder::endEntity() { flushPendingRe(); OpenFile &of = *openFileStack_.head(); if (of.os) { errno = 0; of.os->flush(); if (!of.fb.close()) app_->message(CmdLineApp::closeFileErrorMessage(), StringMessageArg(of.systemId), ErrnoMessageArg(errno)); } os_ = of.saveOs; delete openFileStack_.get(); } inline OutputCharStream &operator<<(OutputCharStream &os, GroveString &str) { return os.write(str.data(), str.size()); } void TransformFOTBuilder::charactersFromNode(const NodePtr &nd, const Char *s, size_t n) { GroveString name; if (preserveSdata_ && n == 1 && nd->getEntityName(name) == accessOK) { flushPendingRe(); os() << "&" << name << ';'; } else TransformFOTBuilder::characters(s, n); } void TransformFOTBuilder::characters(const Char *s, size_t n) { if (n == 0) return; flushPendingRe(); if (state_ == stateStartOfElement && *s == RE) { s++; n--; os() << " "; if (n == 0) { state_ = stateMiddle; return; } } if (s[n - 1] == RE) { n--; state_ = statePendingRe; } else state_ = stateMiddle; for (; n > 0; n--, s++) { switch (*s) { case '&': if (xml_) os() << "&"; else outputNumericCharRef(os(), *s); break; case '<': if (xml_) os() << "<"; else outputNumericCharRef(os(), *s); break; case '>': if (xml_) os() << ">"; else outputNumericCharRef(os(), *s); break; default: os().put(*s); break; } } } void TransformFOTBuilder::extension(const ExtensionFlowObj &fo, const NodePtr &nd) { ((const TransformExtensionFlowObj &)fo).atomic(*this, nd); } void TransformFOTBuilder::startExtensionSerial(const CompoundExtensionFlowObj &fo, const NodePtr &nd) { ((const TransformCompoundExtensionFlowObj &)fo).start(*this, nd); } void TransformFOTBuilder::endExtensionSerial(const CompoundExtensionFlowObj &fo) { ((const TransformCompoundExtensionFlowObj &)fo).end(*this); } void TransformFOTBuilder::setPreserveSdata(bool b) { preserveSdata_ = b; } void TransformFOTBuilder::start() { preserveSdataStack_ += Char(preserveSdata_); } void TransformFOTBuilder::end() { preserveSdataStack_.resize(preserveSdataStack_.size() - 1); preserveSdata_ = bool(preserveSdataStack_[preserveSdataStack_.size() - 1]); } TransformFOTBuilder::OpenFile::~OpenFile() { } TransformFOTBuilder::DocumentTypeNIC::~DocumentTypeNIC() { } TransformFOTBuilder::ElementNIC::~ElementNIC() { } #ifdef DSSSL_NAMESPACE } #endif #include "TransformFOTBuilder_inst.cxx" jade-1.2.1/jade/TransformFOTBuilder.h100444 764 764 720 6604607714 15103 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file copying.txt for copying permission. #ifndef TransformFOTBuilder_INCLUDED #define TransformFOTBuilder_INCLUDED 1 #include "FOTBuilder.h" #include "CmdLineApp.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif FOTBuilder *makeTransformFOTBuilder(CmdLineApp *app, bool xml, const FOTBuilder::Extension *&); #ifdef DSSSL_NAMESPACE } #endif #endif /* not TransformFOTBuilder_INCLUDED */ jade-1.2.1/jade/TransformFOTBuilder_inst.cxx100444 764 764 1323 6604613144 16525 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "IList.h" #undef SP_DEFINE_TEMPLATES #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_0; #endif #endif #endif #ifdef DSSSL_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/jade/TransformFOTBuilder_inst.m4100444 764 764 567 6604607714 16242 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "IList.h" #undef SP_DEFINE_TEMPLATES #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif __instantiate(IList) #ifdef DSSSL_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/jade/HtmlFOTBuilder.cxx100444 764 764 77440 6605020706 14453 0ustar jjcjjc// Copyright (c) 1996, 1997 James Clark // See the file copying.txt for copying permission. #include "config.h" #ifdef JADE_HTML #include "HtmlFOTBuilder.h" #include "FOTBuilder.h" #include "Link.h" #include "IList.h" #include "IListIter.h" #include "OutputCharStream.h" #include "Ptr.h" #include "Resource.h" #include "macros.h" #include "HtmlMessages.h" #include "MessageArg.h" #include "ErrnoMessageArg.h" #include "StringResource.h" #include "OwnerTable.h" #include "Hash.h" #include "OutputByteStream.h" #include #include #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class DiscardOutputCharStream : public OutputCharStream { public: DiscardOutputCharStream() { } void flush() { } void flushBuf(Char) { } }; const char RE = '\r'; class HtmlFOTBuilder : public SerialFOTBuilder { public: class OutputState; struct CharProps { CharProps(); static unsigned long hash(const CharProps &) { return 17; } bool operator==(const CharProps &cp) const { return (fontWeight == cp.fontWeight && fontStyle == cp.fontStyle && fontSize == cp.fontSize && fontFamily == cp.fontFamily && color == cp.color); } bool operator!=(const CharProps &cp) const { return !(*this == cp); } char fontWeight; enum { styleNormal, styleItalic, styleOblique }; char fontStyle; unsigned color; Length fontSize; StringC fontFamily; }; struct InheritParaProps { InheritParaProps(); enum { alignLeft, alignCenter, alignRight, alignJustify }; Length leftMargin; Length rightMargin; Length lineHeight; Length textIndent; char align; }; struct ParaProps : public InheritParaProps { ParaProps(const InheritParaProps &props) : InheritParaProps(props), topMargin(0) { } static unsigned long hash(const ParaProps &) { return 17; } bool operator==(const ParaProps &pp) const { return (leftMargin == pp.leftMargin && rightMargin == pp.rightMargin && lineHeight == pp.lineHeight && textIndent == pp.textIndent && topMargin == pp.topMargin && align == pp.align); } bool operator!=(const ParaProps &pp) const { return !(*this == pp); } Length topMargin; }; struct ClassPrefix { ClassPrefix(const StringC &s) : prefix(s), nCharClasses(0), nParaClasses(0) { } StringC prefix; unsigned nCharClasses; unsigned nParaClasses; static const StringC &key(const ClassPrefix &cp) { return cp.prefix; } }; struct StyleClass : public Link { StyleClass(const StringC &, ClassPrefix *); void outputName(OutputCharStream &) const; StringC gi; const ClassPrefix *prefix; unsigned prefixIndex; }; struct CharStyle; struct CharStyleClass : public StyleClass { CharStyleClass(const StringC &, ClassPrefix *, const CharStyle *); const CharStyle *style; }; struct CharStyle : public CharProps { CharStyle(const CharProps &cp) : CharProps(cp) { } void output(OutputCharStream &) const; static const CharProps &key(const CharStyle &style) { return style; } IList classes; }; struct ParaStyle; struct ParaStyleClass : public StyleClass { ParaStyleClass(const StringC &, ClassPrefix *, const ParaStyle *); const ParaStyle *style; }; struct ParaStyle : public ParaProps { ParaStyle(const ParaProps &pp) : ParaProps(pp) { } void output(OutputCharStream &) const; static const ParaProps &key(const ParaStyle &style) { return style; } IList classes; }; struct FlowObjectInfo : public CharProps, public InheritParaProps { FlowObjectInfo(); unsigned docIndex; ConstPtr > scrollTitle; Length parentLeftMargin; Length parentRightMargin; }; // An address that has been referenced. class AddressRef { public: virtual void outputRef(bool end, OutputCharStream &, OutputState &) const = 0; virtual ~AddressRef(); }; class OutputState { public: OutputState(const String *outputFilename, const StringC &styleSheetFilename, CmdLineApp *app) : outputFilename_(outputFilename), styleSheetFilename_(styleSheetFilename), app_(app), curAref_(0), specAref_(0), curCharStyleClass_(0), outputDocIndex_(unsigned(-1)) { } unsigned setOutputDocIndex(unsigned i) { unsigned tem = outputDocIndex_; outputDocIndex_ = i; return tem; } const AddressRef *setAddress(const AddressRef *aref) { const AddressRef *tem = specAref_; specAref_ = aref; return tem; } void syncChar(const CharStyleClass *, OutputCharStream &); unsigned outputDocIndex() const { return outputDocIndex_; } String outputFilename(unsigned i) const; const String &outputFilename() const { return *outputFilename_; } CmdLineApp &app() { return *app_; } const StringC &styleSheetFilename() const { return styleSheetFilename_; } const OutputCodingSystem *codingSystem() const { return app_->outputCodingSystem(); } Messenger &messenger() { return *app_; } private: const String *outputFilename_; CmdLineApp *app_; unsigned outputDocIndex_; const AddressRef *curAref_; const AddressRef *specAref_; const CharStyleClass *curCharStyleClass_; StringC styleSheetFilename_; }; class Item : public Link { public: Item() { } virtual ~Item(); virtual void output(OutputCharStream &, OutputState &) { } private: void operator=(const Item &); Item(const Item &); }; // Corresponds to class Addressable : public Item, public AddressRef { public: Addressable(size_t g, size_t e) : groveIndex_(g), elementIndex_(e), referenced_(0), docIndex_(unsigned(-1)) { } void outputRef(bool end, OutputCharStream &, OutputState &) const; void output(OutputCharStream &, OutputState &); bool defined() const { return docIndex_ != unsigned(-1); } bool referenced() const { return referenced_; } void setDefined(unsigned docIndex, bool wholeDocument = 0) { docIndex_ = docIndex; if (wholeDocument) elementIndex_ = (unsigned)-1; } void setReferenced() { referenced_ = 1; } private: size_t groveIndex_; // -1 if the whole document size_t elementIndex_; // unsigned(-1) if not defined unsigned docIndex_; bool referenced_; }; class Markup : public Item { public: Markup(const StringC &str) : str_(str) { } void output(OutputCharStream &, OutputState &); private: StringC str_; }; class Pcdata : public Item { public: Pcdata(const CharStyleClass *styleClass) : styleClass_(styleClass) { } void output(OutputCharStream &, OutputState &); private: const CharStyleClass *styleClass_; virtual const Char *data(size_t &) const = 0; }; class ImmediatePcdata : public Pcdata { public: ImmediatePcdata(const Char *s, size_t n, const CharStyleClass *styleClass) : Pcdata(styleClass), str_(s, n) { } private: const Char *data(size_t &n) const { n = str_.size(); return str_.data(); } StringC str_; }; class NodePcdata : public Pcdata { public: NodePcdata(const NodePtr &node, const Char *s, size_t n, const CharStyleClass *styleClass) : Pcdata(styleClass), node_(node), s_(s), n_(n) { } private: const Char *data(size_t &n) const { n = n_; return s_; } NodePtr node_; const Char *s_; size_t n_; }; class Container : public Item { public: Container() { } IList *contentPtr() { return &content_; } void output(OutputCharStream &, OutputState &); protected: void reverse(); // In reverse order while being built. IList content_; private: Container(const Container &); void operator=(const Container &); }; class Ref : public Container { public: Ref(AddressRef *aref) : aref_(aref) { } void output(OutputCharStream &, OutputState &); private: AddressRef *aref_; }; class Block : public Container { public: Block(const ParaStyleClass *styleClass) : styleClass_(styleClass) { } void output(OutputCharStream &, OutputState &); private: const ParaStyleClass *styleClass_; }; class Document : public Container { public: Document(unsigned index, const ConstPtr > &title) : index_(index), title_(title) { } ~Document(); void output(OutputCharStream &, OutputState &); private: ConstPtr > title_; unsigned index_; }; HtmlFOTBuilder(const String &, CmdLineApp *); ~HtmlFOTBuilder(); void setFontWeight(Symbol); void setFontPosture(Symbol); void setFontFamilyName(const StringC &); void setFontSize(Length); void setColor(const DeviceRGBColor &); void setQuadding(Symbol); void setLineSpacing(const LengthSpec &); void setFirstLineStartIndent(const LengthSpec &); void setStartIndent(const LengthSpec &); void setEndIndent(const LengthSpec &); void setScrollTitle(const StringC &); void formattingInstruction(const StringC &); void start(); void end(); void atomic(); void characters(const Char *s, size_t n); void charactersFromNode(const NodePtr &, const Char *s, size_t n); void startParagraph(const ParagraphNIC &nic); void endParagraph(); void startLink(const Address &); void endLink(); void startScroll(); void endScroll(); void startNode(const NodePtr &, const StringC &); void endNode(); void flushPendingAddresses(); static void outputCdata(const Char *, size_t, OutputCharStream &); static void outputCdata(const StringC &s, OutputCharStream &os) { outputCdata(s.data(), s.size(), os); } static void outputLength(FOTBuilder::Length n, OutputCharStream &); private: HtmlFOTBuilder(const HtmlFOTBuilder &); void operator=(const HtmlFOTBuilder &); struct DestInfo : public Link { DestInfo(IList *p) : list(p) { } IList *list; }; void insertAddr(size_t, size_t); void outputStyleSheet(StringC &); void startDisplay(const DisplayNIC &); void endDisplay(); Addressable *elementAddress(size_t g, size_t e); const CharStyleClass *makeCharStyleClass(); const ParaStyleClass *makeParaStyleClass(); ClassPrefix *makeClassPrefix(const StringC &); OwnerTable charStyleTable_; OwnerTable paraStyleTable_; OwnerTable prefixTable_; Vector flowObjectStack_; FlowObjectInfo nextFlowObject_; IList destStack_; IList *dest_; Container root_; // Number of HTML documents unsigned nDocuments_; Vector > elements_; Vector > pendingAddr_; String outputFilename_; CmdLineApp *app_; Vector giStack_; Length topMargin_; Vector spaceAfterStack_; }; FOTBuilder *makeHtmlFOTBuilder(const String &outputFilename, CmdLineApp *app, const FOTBuilder::Extension *&ext) { static const FOTBuilder::Extension extensions[] = { { "UNREGISTERED::James Clark//Characteristic::scroll-title", 0, (void (FOTBuilder::*)(const StringC &))&HtmlFOTBuilder::setScrollTitle }, { 0, 0, 0} }; ext = extensions; return new HtmlFOTBuilder(outputFilename, app); } static void reverse(IList &list) { IList tem; while (!list.empty()) tem.insert(list.get()); tem.swap(list); } HtmlFOTBuilder::HtmlFOTBuilder(const String &outputFilename, CmdLineApp *app) : outputFilename_(outputFilename), app_(app), nDocuments_(0), giStack_(1), topMargin_(0) { flowObjectStack_.push_back(nextFlowObject_); dest_ = root_.contentPtr(); giStack_[0] += 'S'; } HtmlFOTBuilder::~HtmlFOTBuilder() { reverse(*dest_); while (!destStack_.empty()) { reverse(*destStack_.head()->list); delete destStack_.get(); } StringC styleSheetFilename; outputStyleSheet(styleSheetFilename); OutputState state(&outputFilename_, styleSheetFilename, app_); DiscardOutputCharStream os; root_.output(os, state); for (size_t i = 0; i < elements_.size(); i++) { for (size_t j = 0; j < elements_[i].size(); j++) if (elements_[i][j] && !elements_[i][j]->defined()) delete elements_[i][j]; } } void HtmlFOTBuilder::outputStyleSheet(StringC &styleSheetFilename) { String filename(outputFilename_); for (size_t j = 0; j < 5; j++) { if (filename.size() < j + 1) break; Char c = filename[filename.size() - j - 1]; if (c == '/' || c == '\\') break; if (c == '.') { filename.resize(filename.size() - j - 1); break; } } filename += '.'; filename += 'c'; filename += 's'; filename += 's'; filename += 0; FileOutputByteStream file; if (!file.open(filename.data())) { app_->message(HtmlMessages::cannotOpenOutputError, StringMessageArg(app_->convertInput(filename.data())), ErrnoMessageArg(errno)); return; } styleSheetFilename = app_->convertInput(filename.data()); RecordOutputCharStream os(new EncodeOutputCharStream(&file, app_->outputCodingSystem())); { OwnerTableIter iter(charStyleTable_); for (;;) { const CharStyle *style = iter.next(); if (!style) break; style->output(os); } } os << "DIV { margin-top: 0pt; margin-bottom: 0pt; margin-left: 0pt; margin-right: 0pt }" << RE; { OwnerTableIter iter(paraStyleTable_); for (;;) { const ParaStyle *style = iter.next(); if (!style) break; style->output(os); } } } void HtmlFOTBuilder::CharStyle::output(OutputCharStream &os) const { bool first = 1; for (IListIter iter(classes); !iter.done(); iter.next()) { if (first) first = 0; else os << ", "; os << "SPAN."; iter.cur()->outputName(os); } if (!first) { os << " {" << RE; static const char indent[] = " "; // Netscape Communicator preview release 2 can't handle quoted font family names. os << indent << "font-family: " << fontFamily << ';' << RE; os << indent << "font-weight: " << int(fontWeight) << "00;" << RE; static const char *styleNames[3] = { "normal", "italic", "oblique" }; os << indent << "font-style: " << styleNames[fontStyle] << ';' << RE; os << indent << "font-size: "; outputLength(fontSize, os); os << ';' << RE; os << indent << "color: #"; for (int i = 20; i >= 0; i -= 4) os << "0123456789abcdef"[(color >> i) & 0xf]; os << ';' << RE; os << '}' << RE; } } void HtmlFOTBuilder::ParaStyle::output(OutputCharStream &os) const { bool first = 1; for (IListIter iter(classes); !iter.done(); iter.next()) { if (first) first = 0; else os << ", "; os << "DIV."; iter.cur()->outputName(os); } if (!first) { os << " {" << RE; static const char indent[] = " "; if (leftMargin) { os << indent << "margin-left: "; outputLength(leftMargin, os); os << ';' << RE; } if (rightMargin) { os << indent << "margin-right: "; outputLength(rightMargin, os); os << ';' << RE; } if (topMargin) { os << indent << "margin-top: "; outputLength(topMargin, os); os << ';' << RE; } static const char *alignNames[4] = { "left", "center", "right", "justify" }; os << indent << "text-align: " << alignNames[align] << ';' << RE; os << indent << "line-height: "; outputLength(lineHeight, os); os << ';' << RE; os << indent << "text-indent: "; outputLength(textIndent, os); os << ';' << RE; os << '}' << RE; } } void HtmlFOTBuilder::outputLength(FOTBuilder::Length n, OutputCharStream &os) { char buf[32]; sprintf(buf, "%04ld", long(n)); char *end = strchr(buf, '\0'); for (int i = 0; i < 4; i++) end[1 - i] = end[-i]; end[-3] = '.'; while (*end == '0') *end-- = '\0'; if (*end == '.') *end = '\0'; strcat(buf, "pt"); os << buf; } void HtmlFOTBuilder::start() { flowObjectStack_.push_back(nextFlowObject_); } void HtmlFOTBuilder::end() { flowObjectStack_.resize(flowObjectStack_.size() - 1); nextFlowObject_ = flowObjectStack_.back(); } void HtmlFOTBuilder::atomic() { nextFlowObject_ = flowObjectStack_.back(); } void HtmlFOTBuilder::formattingInstruction(const StringC &s) { dest_->insert(new Markup(s)); atomic(); } const HtmlFOTBuilder::CharStyleClass *HtmlFOTBuilder::makeCharStyleClass() { CharStyle *style = charStyleTable_.lookup(nextFlowObject_); if (!style) { style = new CharStyle(nextFlowObject_); charStyleTable_.insert(style); } for (IListIter iter(style->classes); !iter.done(); iter.next()) if (iter.cur()->gi == giStack_.back()) return iter.cur(); ClassPrefix *prefix = makeClassPrefix(giStack_.back()); CharStyleClass *sc = new CharStyleClass(giStack_.back(), prefix, style); style->classes.insert(sc); return sc; } const HtmlFOTBuilder::ParaStyleClass *HtmlFOTBuilder::makeParaStyleClass() { ParaProps props(nextFlowObject_); props.topMargin = topMargin_; topMargin_ = 0; ParaStyle *style = paraStyleTable_.lookup(props); if (!style) { style = new ParaStyle(props); paraStyleTable_.insert(style); } for (IListIter iter(style->classes); !iter.done(); iter.next()) if (iter.cur()->gi == giStack_.back()) return iter.cur(); ClassPrefix *prefix = makeClassPrefix(giStack_.back()); ParaStyleClass *sc = new ParaStyleClass(giStack_.back(), prefix, style); style->classes.insert(sc); return sc; } HtmlFOTBuilder::StyleClass::StyleClass(const StringC &g, ClassPrefix *pfx) : gi(g), prefix(pfx), prefixIndex(pfx->nCharClasses + pfx->nParaClasses + 1) { } HtmlFOTBuilder::CharStyleClass::CharStyleClass(const StringC &g, ClassPrefix *pfx, const CharStyle *s) : StyleClass(g, pfx), style(s) { pfx->nCharClasses += 1; } HtmlFOTBuilder::ParaStyleClass::ParaStyleClass(const StringC &g, ClassPrefix *pfx, const ParaStyle *s) : StyleClass(g, pfx), style(s) { pfx->nParaClasses += 1; } HtmlFOTBuilder::ClassPrefix *HtmlFOTBuilder::makeClassPrefix(const StringC &gi) { // FIXME strip illegal characters ClassPrefix *prefix = prefixTable_.lookup(gi); if (!prefix) { prefix = new ClassPrefix(gi); prefixTable_.insert(prefix); } return prefix; } void HtmlFOTBuilder::charactersFromNode(const NodePtr &node, const Char *s, size_t n) { flushPendingAddresses(); dest_->insert(new NodePcdata(node, s, n, makeCharStyleClass())); } void HtmlFOTBuilder::characters(const Char *s, size_t n) { flushPendingAddresses(); dest_->insert(new ImmediatePcdata(s, n, makeCharStyleClass())); } void HtmlFOTBuilder::startParagraph(const ParagraphNIC &nic) { startDisplay(nic); Block *block = new Block(makeParaStyleClass()); nextFlowObject_.parentLeftMargin += nextFlowObject_.leftMargin; nextFlowObject_.parentRightMargin += nextFlowObject_.rightMargin; nextFlowObject_.leftMargin = 0; nextFlowObject_.rightMargin = 0; dest_->insert(block); destStack_.insert(new DestInfo(dest_)); dest_ = block->contentPtr(); start(); } void HtmlFOTBuilder::endParagraph() { reverse(*dest_); dest_ = destStack_.head()->list; delete destStack_.get(); end(); endDisplay(); } void HtmlFOTBuilder::startDisplay(const DisplayNIC &nic) { Length spaceBefore = nic.spaceBefore.nominal.length; if (spaceBefore > topMargin_) topMargin_ = spaceBefore; spaceAfterStack_.push_back(nic.spaceAfter.nominal.length); } void HtmlFOTBuilder::endDisplay() { const Length &spaceAfter = spaceAfterStack_.back(); if (spaceAfter > topMargin_) topMargin_ = spaceAfter; spaceAfterStack_.resize(spaceAfterStack_.size() - 1); } void HtmlFOTBuilder::startScroll() { nextFlowObject_.docIndex = nDocuments_++; start(); Document *doc = new Document(nextFlowObject_.docIndex, nextFlowObject_.scrollTitle); dest_->insert(doc); destStack_.insert(new DestInfo(dest_)); dest_ = doc->contentPtr(); if (pendingAddr_.size()) { Vector &v = pendingAddr_.back(); for (size_t i = 0; i < v.size(); i += 2) { Addressable *tem = elementAddress(v[i], v[i + 1]); if (!tem->defined()) { dest_->insert(tem); tem->setDefined(nextFlowObject_.docIndex, 1); } } v.resize(0); } } void HtmlFOTBuilder::endScroll() { reverse(*dest_); dest_ = destStack_.head()->list; delete destStack_.get(); end(); } void HtmlFOTBuilder::startLink(const Address &addr) { start(); AddressRef *aref = 0; switch (addr.type) { case Address::resolvedNode: { unsigned long n; if (addr.node->elementIndex(n) == accessOK) { Addressable *tem = elementAddress(addr.node->groveIndex(), n); tem->setReferenced(); aref = tem; } break; } case Address::idref: { const StringC &id = addr.params[0]; size_t i; for (i = 0; i < id.size(); i++) if (id[i] == ' ') break; NodePtr node; NamedNodeListPtr elements; unsigned long n; if (addr.node->getGroveRoot(node) == accessOK && node->getElements(elements) == accessOK && elements->namedNode(GroveString(id.data(), i), node) == accessOK && node->elementIndex(n) == accessOK) { Addressable *tem = elementAddress(addr.node->groveIndex(), n); tem->setReferenced(); aref = tem; } break; } default: break; } Ref *ref = new Ref(aref); dest_->insert(ref); destStack_.insert(new DestInfo(dest_)); dest_ = ref->contentPtr(); } void HtmlFOTBuilder::endLink() { reverse(*dest_); dest_ = destStack_.head()->list; delete destStack_.get(); end(); } HtmlFOTBuilder::Addressable *HtmlFOTBuilder::elementAddress(size_t g, size_t e) { if (g >= elements_.size()) elements_.resize(g + 1); Vector &v = elements_[g]; for (size_t i = v.size(); i <= e; i++) v.push_back((Addressable *)0); if (!v[e]) v[e] = new Addressable(g, e); return v[e]; } void HtmlFOTBuilder::startNode(const NodePtr &node, const StringC &mode) { pendingAddr_.resize(pendingAddr_.size() + 1); if (mode.size() == 0) { if (pendingAddr_.size() > 1) pendingAddr_.back() = pendingAddr_[pendingAddr_.size() - 2]; unsigned long n; if (node->elementIndex(n) == accessOK) { pendingAddr_.back().push_back(node->groveIndex()); pendingAddr_.back().push_back(size_t(n)); } } giStack_.resize(giStack_.size() + 1); GroveString str; if (node->getGi(str) == accessOK) giStack_.back().assign(str.data(), str.size()); else if (giStack_.size() >= 2) giStack_.back() = giStack_[giStack_.size() - 2]; } void HtmlFOTBuilder::endNode() { pendingAddr_.resize(pendingAddr_.size() - 1); giStack_.resize(giStack_.size() - 1); } void HtmlFOTBuilder::insertAddr(size_t g, size_t e) { Addressable *tem = elementAddress(g, e); if (!tem->defined() && nextFlowObject_.docIndex != (unsigned)-1) { dest_->insert(tem); tem->setDefined(nextFlowObject_.docIndex); } } void HtmlFOTBuilder::setLineSpacing(const LengthSpec &val) { nextFlowObject_.lineHeight = val.length; } void HtmlFOTBuilder::setQuadding(Symbol sym) { switch (sym) { case symbolStart: nextFlowObject_.align = ParaProps::alignLeft; break; case symbolEnd: nextFlowObject_.align = ParaProps::alignRight; break; case symbolCenter: nextFlowObject_.align = ParaProps::alignCenter; break; case symbolJustify: nextFlowObject_.align = ParaProps::alignJustify; break; default: break; } } void HtmlFOTBuilder::setFirstLineStartIndent(const LengthSpec &ls) { nextFlowObject_.textIndent = ls.length; } void HtmlFOTBuilder::setStartIndent(const LengthSpec &ls) { nextFlowObject_.leftMargin = ls.length - nextFlowObject_.parentLeftMargin; } void HtmlFOTBuilder::setEndIndent(const LengthSpec &ls) { nextFlowObject_.rightMargin = ls.length - nextFlowObject_.parentRightMargin; } void HtmlFOTBuilder::setFontFamilyName(const StringC &name) { nextFlowObject_.fontFamily = name; } void HtmlFOTBuilder::setFontWeight(Symbol weight) { switch (weight) { case symbolUltraLight: nextFlowObject_.fontWeight = 1; break; case symbolExtraLight: nextFlowObject_.fontWeight = 2; break; case symbolLight: nextFlowObject_.fontWeight = 3; break; case symbolSemiLight: nextFlowObject_.fontWeight = 4; break; case symbolMedium: nextFlowObject_.fontWeight = 5; break; case symbolSemiBold: nextFlowObject_.fontWeight = 6; break; case symbolBold: nextFlowObject_.fontWeight = 7; break; case symbolExtraBold: nextFlowObject_.fontWeight = 8; break; case symbolUltraBold: nextFlowObject_.fontWeight = 9; break; default: break; } } void HtmlFOTBuilder::setFontPosture(Symbol posture) { switch (posture) { case symbolOblique: nextFlowObject_.fontStyle = CharProps::styleOblique; break; case symbolItalic: nextFlowObject_.fontStyle = CharProps::styleItalic; break; default: nextFlowObject_.fontStyle = CharProps::styleNormal; break; } } void HtmlFOTBuilder::setFontSize(Length n) { nextFlowObject_.fontSize = n; } void HtmlFOTBuilder::setColor(const DeviceRGBColor &color) { nextFlowObject_.color = (color.red << 16) | (color.green << 8) | color.blue; } void HtmlFOTBuilder::setScrollTitle(const StringC &s) { nextFlowObject_.scrollTitle = new StringResource(s); } void HtmlFOTBuilder::flushPendingAddresses() { if (pendingAddr_.size()) { for (size_t i = 0; i < pendingAddr_.back().size(); i += 2) insertAddr(pendingAddr_.back()[i], pendingAddr_.back()[i + 1]); pendingAddr_.back().resize(0); } } void HtmlFOTBuilder::outputCdata(const Char *s, size_t n, OutputCharStream &os) { for (; n > 0; n--, s++) { switch (*s) { case '\n': break; case '&': os << "&"; break; case '<': os << "<"; break; case '>': os << ">"; break; case '\r': os << RE; break; default: if (*s >= 255) os << "&#" << (unsigned long)*s << ';'; else os.put(*s); break; } } } void HtmlFOTBuilder::Document::output(OutputCharStream &, OutputState &oldState) { OutputState state(&oldState.outputFilename(), oldState.styleSheetFilename(), &oldState.app()); FileOutputByteStream file; String filename(state.outputFilename(index_)); filename += 0; if (!file.open(filename.data())) { state.messenger() .message(HtmlMessages::cannotOpenOutputError, StringMessageArg(state.app().convertInput(filename.data())), ErrnoMessageArg(errno)); return; } RecordOutputCharStream os(new EncodeOutputCharStream(&file, state.app().outputCodingSystem())); // FIXME setEscaper unsigned oldDocIndex = state.setOutputDocIndex(index_); os << "" << RE; const StringC &styleSheetFilename = state.styleSheetFilename(); if (styleSheetFilename.size()) { os << " 0; i--) if (styleSheetFilename[i - 1] == '\\' || styleSheetFilename[i - 1] == '/') break; os.write(styleSheetFilename.data() + i, styleSheetFilename.size() - i); os << "\">" << RE; } if (!title_.isNull()) { os << ""; HtmlFOTBuilder::outputCdata(*title_, os); os << ""; } os << "" << RE; Container::output(os, state); os << "" << RE; os << "" << RE; state.setOutputDocIndex(oldDocIndex); } void HtmlFOTBuilder::Container::output(OutputCharStream &os, OutputState &state) { for (IListIter iter(content_); !iter.done(); iter.next()) iter.cur()->output(os, state); } void HtmlFOTBuilder::Block::output(OutputCharStream &os, OutputState &state) { const AddressRef *addr = state.setAddress(0); state.syncChar(0, os); os << "
"; state.setAddress(addr); } void HtmlFOTBuilder::Ref::output(OutputCharStream &os, OutputState &state) { const AddressRef *oldAref = state.setAddress(aref_); Container::output(os, state); state.setAddress(oldAref); } void HtmlFOTBuilder::Pcdata::output(OutputCharStream &os, OutputState &state) { size_t n; const Char *s = data(n); state.syncChar(styleClass_, os); HtmlFOTBuilder::outputCdata(s, n, os); } void HtmlFOTBuilder::Markup::output(OutputCharStream &os, OutputState &state) { state.syncChar(0, os); os << str_; } void HtmlFOTBuilder::Addressable::output(OutputCharStream &os, OutputState &) { ASSERT(defined()); if (referenced_ && elementIndex_ != (unsigned)-1) { os << ""; } } void HtmlFOTBuilder::Addressable::outputRef(bool end, OutputCharStream &os, OutputState &state) const { ASSERT(referenced_); if (defined()) { if (end) os << ""; else { os << " &outputFilename = state.outputFilename(docIndex_); size_t i = outputFilename.size(); for (; i > 0; i--) if (outputFilename[i - 1] == '\\' || outputFilename[i - 1] == '/') break; for (; i < outputFilename.size(); i++) os.put(outputFilename[i]); } if (elementIndex_ != (unsigned)-1) { os << "#"; if (groveIndex_) os << (unsigned long)groveIndex_ << '.'; os << (unsigned long)elementIndex_; } os << "\">"; } } } String HtmlFOTBuilder::OutputState::outputFilename(unsigned index) const { if (index == 0) return *outputFilename_; String base(*outputFilename_); String ext; for (size_t j = 0; j < 5; j++) { if (base.size() < j + 1) break; Char c = base[base.size() - j - 1]; if (c == '/' || c == '\\') break; if (c == '.') { ext.assign(base.data() + (base.size() - j - 1), j + 1); base.resize(base.size() - j - 1); break; } } char buf[32]; sprintf(buf, "%u", index); for (const char *p = buf; *p; p++) base += CmdLineApp::AppChar(*p); base += ext; return base; } void HtmlFOTBuilder::OutputState::syncChar(const CharStyleClass *styleClass, OutputCharStream &os) { // ... if (curAref_ != specAref_) { if (curCharStyleClass_) { os << ""; curCharStyleClass_ = 0; } if (curAref_) curAref_->outputRef(1, os, *this); if (specAref_) specAref_->outputRef(0, os, *this); curAref_ = specAref_; } if (curCharStyleClass_ != styleClass) { if (curCharStyleClass_) os << ""; if (styleClass) { os << "prefix; if (prefix->nCharClasses > 1 || prefix->nParaClasses > 1) os << (unsigned long)prefixIndex; } #ifdef DSSSL_NAMESPACE } #endif #include "HtmlFOTBuilder_inst.cxx" #endif /* JADE_HTML */ jade-1.2.1/jade/HtmlFOTBuilder.h100444 764 764 770 6606574462 14046 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef HtmlFOTBuilder_INCLUDED #define HtmlFOTBuilder_INCLUDED 1 #include "FOTBuilder.h" #include "CmdLineApp.h" #include "Message.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif FOTBuilder *makeHtmlFOTBuilder(const String &basename, CmdLineApp *app, const FOTBuilder::Extension *&); #ifdef DSSSL_NAMESPACE } #endif #endif /* not HtmlFOTBuilder_INCLUDED */ jade-1.2.1/jade/HtmlFOTBuilder_inst.cxx100444 764 764 25766 6606636454 15532 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Ptr.h" #include "IList.h" #include "IListIter.h" #include "Vector.h" #include "OwnerTable.h" #include "PointerTable.h" #undef SP_DEFINE_TEMPLATES #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_2; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_3; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_4; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_5; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_6; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTable #else #ifdef __xlC__ #pragma define(OwnerTable) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTable; #else typedef OwnerTable Dummy_7; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTable #else #ifdef __xlC__ #pragma define(OwnerTable) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTable; #else typedef OwnerTable Dummy_8; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTable #else #ifdef __xlC__ #pragma define(OwnerTable) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTable; #else typedef OwnerTable Dummy_9; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable #else #ifdef __xlC__ #pragma define(PointerTable) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable; #else typedef PointerTable Dummy_10; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable #else #ifdef __xlC__ #pragma define(PointerTable) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable; #else typedef PointerTable Dummy_11; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable #else #ifdef __xlC__ #pragma define(PointerTable) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable; #else typedef PointerTable Dummy_12; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTableIter #else #ifdef __xlC__ #pragma define(OwnerTableIter) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTableIter; #else typedef OwnerTableIter Dummy_13; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTableIter #else #ifdef __xlC__ #pragma define(OwnerTableIter) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTableIter; #else typedef OwnerTableIter Dummy_14; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTableIter #else #ifdef __xlC__ #pragma define(PointerTableIter) #else #ifdef SP_ANSI_CLASS_INST template class PointerTableIter; #else typedef PointerTableIter Dummy_15; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTableIter #else #ifdef __xlC__ #pragma define(PointerTableIter) #else #ifdef SP_ANSI_CLASS_INST template class PointerTableIter; #else typedef PointerTableIter Dummy_16; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_17; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_18; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_19; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_20; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_21; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_22; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_23; #endif #endif #endif #ifdef DSSSL_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/jade/HtmlFOTBuilder_inst.m4100444 764 764 4663 6606574462 15221 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Ptr.h" #include "IList.h" #include "IListIter.h" #include "Vector.h" #include "OwnerTable.h" #include "PointerTable.h" #undef SP_DEFINE_TEMPLATES #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif __instantiate(IList) __instantiate(IListIter) __instantiate(IList) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector >) __instantiate(Vector >) __instantiate(`OwnerTable') __instantiate(`OwnerTable') __instantiate(`OwnerTable') __instantiate(`PointerTable') __instantiate(`PointerTable') __instantiate(`PointerTable') __instantiate(`OwnerTableIter') __instantiate(`OwnerTableIter') __instantiate(`PointerTableIter') __instantiate(`PointerTableIter') __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(IList) __instantiate(IList) __instantiate(IListIter) __instantiate(IListIter) #ifdef DSSSL_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/jade/JadeMessages.msg100444 764 764 346 6606574462 14153 0ustar jjcjjc# Copyright (c) 1996 James Clark # See the file COPYING for copying permission =1000 E1+unknownType++unknown output type %1 E0+emptyOutputFilename++empty output filename E2+cannotOpenOutputError++cannot open output file %1 (%2) jade-1.2.1/jade/JadeMessages.h100444 764 764 2062 6606636454 13631 0ustar jjcjjc// This file was automatically generated from .\JadeMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct JadeMessages { // 1000 static const MessageType1 unknownType; // 1001 static const MessageType0 emptyOutputFilename; // 1002 static const MessageType2 cannotOpenOutputError; }; const MessageType1 JadeMessages::unknownType( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1000 #ifndef SP_NO_MESSAGE_TEXT ,"unknown output type %1" #endif ); const MessageType0 JadeMessages::emptyOutputFilename( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1001 #ifndef SP_NO_MESSAGE_TEXT ,"empty output filename" #endif ); const MessageType2 JadeMessages::cannotOpenOutputError( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1002 #ifndef SP_NO_MESSAGE_TEXT ,"cannot open output file %1 (%2)" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/jade/JadeMessages.rc100444 764 764 201 6606636454 13757 0ustar jjcjjcSTRINGTABLE BEGIN 1000, "unknown output type %1" 1001, "empty output filename" 1002, "cannot open output file %1 (%2)" END jade-1.2.1/jade/jade.rc100444 764 764 463 6606574462 12341 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "InterpreterMessages.rc" #include "JadeMessages.rc" #include "DssslAppMessages.rc" #include "HtmlMessages.rc" #include "RtfMessages.rc" #include "TeXMessages.rc" #ifdef JADE_MIF #include "MifMessages.rc" #endif jade-1.2.1/jade/HtmlMessages.h100444 764 764 1001 6606636454 13662 0ustar jjcjjc// This file was automatically generated from .\HtmlMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct HtmlMessages { // 3000 static const MessageType2 cannotOpenOutputError; }; const MessageType2 HtmlMessages::cannotOpenOutputError( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3000 #ifndef SP_NO_MESSAGE_TEXT ,"cannot open output file %1 (%2)" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/jade/HtmlMessages.msg100444 764 764 221 6606574462 14204 0ustar jjcjjc# Copyright (c) 1996 James Clark # See the file COPYING for copying permission =3000 E2+cannotOpenOutputError++cannot open output file %1 (%2) jade-1.2.1/jade/HtmlMessages.rc100444 764 764 100 6606636454 14016 0ustar jjcjjcSTRINGTABLE BEGIN 3000, "cannot open output file %1 (%2)" END jade-1.2.1/jade/RtfFOTBuilder_inst.cxx100444 764 764 11251 6606636454 15341 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Vector.h" #include "HashTable.h" #include "IList.h" #undef SP_DEFINE_TEMPLATES #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_2; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_3; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_4; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_5; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_6; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_7; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_8; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_9; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTableIter #else #ifdef __xlC__ #pragma define(HashTableIter) #else #ifdef SP_ANSI_CLASS_INST template class HashTableIter; #else typedef HashTableIter Dummy_10; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_11; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_12; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > > #else #ifdef __xlC__ #pragma define(Vector > >) #else #ifdef SP_ANSI_CLASS_INST template class Vector > >; #else typedef Vector > > Dummy_13; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_14; #endif #endif #endif #ifdef DSSSL_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/jade/RtfFOTBuilder_inst.m4100444 764 764 2023 6606574462 15034 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Vector.h" #include "HashTable.h" #include "IList.h" #undef SP_DEFINE_TEMPLATES #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector >) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(`HashTableIter') __instantiate(IList) __instantiate(IList) __instantiate(Vector > >) __instantiate(Vector >) #ifdef DSSSL_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/jade/RtfMessages.h100444 764 764 2136 6606636454 13523 0ustar jjcjjc// This file was automatically generated from .\RtfMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct RtfMessages { // 4000 static const MessageType0 nestedTable; // 4001 static const MessageType1 systemIdNotFilename; // 4002 static const MessageType2 cannotEmbedFilename; }; const MessageType0 RtfMessages::nestedTable( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4000 #ifndef SP_NO_MESSAGE_TEXT ,"nested tables are not allowed in RTF" #endif ); const MessageType1 RtfMessages::systemIdNotFilename( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4001 #ifndef SP_NO_MESSAGE_TEXT ,"could not convert system identifier %1 to a single filename" #endif ); const MessageType2 RtfMessages::cannotEmbedFilename( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4002 #ifndef SP_NO_MESSAGE_TEXT ,"could not embed %1 with clsid %2" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/jade/RtfMessages.msg100444 764 764 431 6606574462 14036 0ustar jjcjjc# Copyright (c) 1996 James Clark # See the file COPYING for copying permission =4000 E0+nestedTable++nested tables are not allowed in RTF E1+systemIdNotFilename++could not convert system identifier %1 to a single filename E2+cannotEmbedFilename++could not embed %1 with clsid %2 jade-1.2.1/jade/RtfMessages.rc100444 764 764 266 6606636454 13662 0ustar jjcjjcSTRINGTABLE BEGIN 4000, "nested tables are not allowed in RTF" 4001, "could not convert system identifier %1 to a single filename" 4002, "could not embed %1 with clsid %2" END jade-1.2.1/jade/RtfOle.cxx100444 764 764 15776 6606574462 13104 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file copying.txt for copying permission. #include "config.h" #define STRICT #include #include "RtfOle.h" #include "StringC.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif class OleUninitializer { public: OleUninitializer() : enabled_(0) { } ~OleUninitializer() { if (enabled_) ::OleUninitialize(); } void enable() { enabled_ = 1; } bool enabled() const { return enabled_; } private: bool enabled_; }; static OleUninitializer oleUninit; struct ComException { ComException(HRESULT hRes, const char *fn, const char *ifn = 0) : hResult(hRes), functionName(fn), interfaceName(ifn) { } HRESULT hResult; const char *functionName; const char *interfaceName; }; inline void checkCom(HRESULT hRes, const char *functionName, const char *ifn = 0) { if (FAILED(hRes)) throw ComException(hRes, functionName, ifn); } #define COMFUNC(func, args) checkCom(func args, #func) #define COMMETH(obj, iface, meth, args) checkCom((obj)->meth args, #meth, #iface) static const char hexdigits[] = "0123456789ABCDEF"; class MyOleStream : public OLESTREAM { public: MyOleStream(OutputByteStream &os): os_(&os), col_(0) { static OLESTREAMVTBL vtbl = { get, put }; lpstbl = &vtbl; } unsigned long write(const char *p, unsigned long n) { for (size_t i = 0; i < n; i++) { if (col_++ % 64 == 0) *os_ << "\n"; *os_ << hexdigits[(p[i] >> 4) & 0xf] << hexdigits[p[i] & 0xf]; } return n; } private: static DWORD CALLBACK get(LPOLESTREAM, void *, DWORD) { return 0; } static DWORD CALLBACK put(LPOLESTREAM stm, const void *p, DWORD n) { return ((MyOleStream *)stm)->write((const char *)p, n); } unsigned col_; OutputByteStream *os_; }; template class ComPtr { public: ComPtr() : p_(0) { } ComPtr(const ComPtr &cp) : p_(cp) { if (p_) p_->AddRef(); } ~ComPtr() { if (p_) p_->Release(); } void operator=(const ComPtr &cp) { if (cp.p_) cp.p_->AddRef(); if (p_) p_->Release(); p_ = cp.p_; } operator T *() const { return p_; } T *operator->() const { return p_; } // Legal only when p_ is 0. T **operator&() { return &p_; } private: T *p_; }; template class GlobalPtr { public: GlobalPtr(HGLOBAL h) : h_(h), p_((T *)GlobalLock(h)) { } ~GlobalPtr() { if (p_) GlobalUnlock(h_); } operator T *() const { return p_; } T *operator->() const { return p_; } private: GlobalPtr(const GlobalPtr &); void operator=(const GlobalPtr &); T *p_; HGLOBAL h_; }; class StorageMedium : public STGMEDIUM { public: StorageMedium() { pUnkForRelease = 0; tymed = TYMED_NULL; } ~StorageMedium() { ReleaseStgMedium(this); } private: StorageMedium(const StorageMedium &); void operator=(const StorageMedium &); }; static const wchar_t *makeAbsolute(const wchar_t *filename, StringC &buf); int outputObject(const wchar_t *filename, const wchar_t *clsidString, OutputByteStream &os) { try { if (!oleUninit.enabled()) { COMFUNC(OleInitialize, (NULL)); oleUninit.enable(); } StringC buf; filename = makeAbsolute(filename, buf); FORMATETC fmt; fmt.cfFormat = CF_METAFILEPICT; fmt.ptd = 0; fmt.dwAspect = DVASPECT_CONTENT; fmt.lindex = -1; fmt.tymed = TYMED_MFPICT; ComPtr pStorage; #if 0 ComPtr pBytes; COMFUNC(CreateILockBytesOnHGlobal, (0, 1, &pBytes)); COMFUNC(StgCreateDocfileOnILockBytes,(pBytes, STGM_CREATE|STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, 0, &pStorage)); #else COMFUNC(StgCreateDocfile,(NULL,STGM_DELETEONRELEASE|STGM_CREATE|STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, 0, &pStorage)); #endif ComPtr pPersist; CLSID clsid; if (clsidString && *clsidString) COMFUNC(CLSIDFromString, ((wchar_t *)clsidString, &clsid)); else COMFUNC(GetClassFile, (filename, &clsid)); COMFUNC(CoCreateInstance, (clsid, NULL, CLSCTX_SERVER, IID_IPersistStorage, (void **)&pPersist)); COMMETH(pPersist, IPersistStorage, InitNew, (pStorage)); ComPtr pPersistF; COMMETH(pPersist, IUnknown, QueryInterface, (IID_IPersistFile, (void **)&pPersistF)); COMMETH(pPersistF, IPersistFile, Load, (filename, STGM_READ|STGM_SHARE_DENY_WRITE)); COMFUNC(OleSave, (pPersist, pStorage, 1)); COMMETH(pPersist, IPersistStorage, SaveCompleted, (pStorage)); #if 0 COMFUNC(OleCreateLinkToFile, (filename, IID_IPersistStorage, OLERENDER_FORMAT, &fmt, NULL, // pClientSite pStorage, (void **)&pPersist)); COMFUNC(OleSave, (pPersist, pStorage, 0)); #endif os << "{\\object\\objemb"; os << "{\\*\\objdata"; MyOleStream stm(os); COMFUNC(OleConvertIStorageToOLESTREAM, (pStorage, &stm)); os << "}"; ComPtr pData; COMMETH(pPersist, IUnknown, QueryInterface, (IID_IDataObject, (void **)&pData)); StorageMedium med; COMMETH(pData, IDataObject, GetData, (&fmt, &med)); if (med.tymed != TYMED_MFPICT) { return 0; } GlobalPtr pMeta(med.hMetaFilePict); os << "{\\result"; os << "{\\pict\\wmetafile" << pMeta->mm << "\\picw" << pMeta->xExt << "\\pich" << pMeta->yExt ; UINT n = GetMetaFileBitsEx(pMeta->hMF, 0, 0); if (n == 0) { return 0; } char *s = new char[n]; n = GetMetaFileBitsEx(pMeta->hMF, n, s); if (n == 0) { return 0; } for (size_t i = 0; i < n; i++) { if (i % 64 == 0) os << "\n"; os << hexdigits[(s[i] >> 4) & 0xf] << hexdigits[s[i] & 0xf]; } delete [] s; os << "}"; // pict os << "}"; // result os << "}"; // object } catch (const ComException &) { return 0; } return 1; } static void multiByteToWideChar(const char *mb, StringC &w) { int n = ::MultiByteToWideChar(CP_ACP, 0, mb, -1, 0, 0); w.resize(n); ::MultiByteToWideChar(CP_ACP, 0, mb, -1, &w[0], n); } static void wideCharToMultiByte(const wchar_t *w, String &mb) { int n = ::WideCharToMultiByte(CP_ACP, 0, w, -1, 0, 0, 0, 0); mb.resize(n); ::WideCharToMultiByte(CP_ACP, 0, w, -1, &mb[0], n, 0, 0); } static const wchar_t *makeAbsolute(const wchar_t *filename, StringC &fbuf) { { fbuf.resize(128); Char *tem; int n = GetFullPathNameW(filename, fbuf.size(), &fbuf[0], &tem); if (n > fbuf.size()) { fbuf.resize(n); n = GetFullPathNameW(filename, fbuf.size(), &fbuf[0], &tem); } if (n) { fbuf.resize(n + 1); return fbuf.data(); } } { String mb; wideCharToMultiByte(filename, mb); mb += 0; String buf; buf.resize(128); char *tem; int n = GetFullPathNameA(mb.data(), buf.size(), &buf[0], &tem); if (n > buf.size()) { buf.resize(n); n = GetFullPathNameA(mb.data(), buf.size(), &buf[0], &tem); } if (n) { buf.resize(n + 1); multiByteToWideChar(buf.data(), fbuf); fbuf += 0; return fbuf.data(); } } return filename; } #ifdef DSSSL_NAMESPACE } #endif jade-1.2.1/jade/RtfOle.h100444 764 764 640 6606574462 12451 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file copying.txt for copying permission. #ifndef RtfOle_INCLUDED #define RtfOle_INCLUDED 1 #include "dsssl_ns.h" #include "OutputByteStream.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif int outputObject(const wchar_t *filename, const wchar_t *clsidString, OutputByteStream &os); #ifdef DSSSL_NAMESPACE } #endif #endif /* not RtfOle_INCLUDED */ jade-1.2.1/jade/TeXFOTBuilder.cxx100444 764 764 335777 6606574462 14317 0ustar jjcjjc// TeXFotBuilder.cxx: a Generic TeX backend for Jade // Written by David Megginson // With changes from Sebastian Rahtz // Last Modification: August 6th, 1998 // Table Support: Kathleen Marszalek // Version: 1.0b7 // Last Modification: July 7th, 1998 #include "config.h" #include "TeXFOTBuilder.h" #include "TeXMessages.h" #include "MessageArg.h" #include "TmpOutputByteStream.h" #include #include #undef TEXDEBUG #undef NDEBUG #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif // --------- TeXTmpOutputByteStream ------------------------------------------ struct TeXTmpOutputByteStream : public TmpOutputByteStream { TeXTmpOutputByteStream() : TmpOutputByteStream() {} void commit( OutputByteStream &os ) const; }; // ---------------------------------------------------------------------------- struct LengthInPoints { LengthInPoints( long l_ ) : l( l_ ) {} long l; }; void TeXTmpOutputByteStream::commit( OutputByteStream &os ) const { TmpOutputByteStream::Iter iter( *this ); const char *s; size_t n; while( iter.next( s, n ) ) { os.sputn( s, n ); } } // --------- TeXFOTBuilder ---------------------------------------------------- class TeXFOTBuilder : public SerialFOTBuilder { public: #ifdef TEXDEBUG static TeXFOTBuilder &curInstance() { assert( CurInstance != NULL ); return *CurInstance; } // used for testing only: otherwise code is re-entrant #endif struct PageFloatNIC { ~PageFloatNIC(); StringC placement; }; class TeXExtensionFlowObj : public FOTBuilder::ExtensionFlowObj { public: virtual void atomic(TeXFOTBuilder &, const NodePtr &) const = 0; }; class TeXCompoundExtensionFlowObj : public FOTBuilder::CompoundExtensionFlowObj { public: virtual void start(TeXFOTBuilder &, const NodePtr &) const = 0; virtual void end(TeXFOTBuilder &) const = 0; }; class PageFloatFlowObj : public TeXCompoundExtensionFlowObj { void start(TeXFOTBuilder &fotb, const NodePtr &) const { fotb.startPageFloat(nic_); } void end(TeXFOTBuilder &fotb) const { fotb.endPageFloat(); } bool hasNIC(const StringC &name) const { return name == "placement" ; } void setNIC(const StringC &, const Value &value) { value.convertString(nic_.placement); } ExtensionFlowObj *copy() const { return new PageFloatFlowObj(*this); } private: PageFloatNIC nic_; StringC name_; StringC placement; }; class PageFootnoteFlowObj : public TeXCompoundExtensionFlowObj { void start(TeXFOTBuilder &fotb, const NodePtr &) const { fotb.startPageFootnote(); } void end(TeXFOTBuilder &fotb) const { fotb.endPageFootnote(); } ExtensionFlowObj *copy() const { return new PageFootnoteFlowObj(*this); } private: }; ////////////////////////////////////////////////////////////////////// // Constructor and destructor. ////////////////////////////////////////////////////////////////////// TeXFOTBuilder(OutputByteStream *, Messenger *mgr); ~TeXFOTBuilder(); ////////////////////////////////////////////////////////////////////// // Atomic flow objects ////////////////////////////////////////////////////////////////////// void extension(const ExtensionFlowObj &fo, const NodePtr &); void startExtensionSerial(const CompoundExtensionFlowObj &fo, const NodePtr &nd); void endExtensionSerial(const CompoundExtensionFlowObj &fo); void start(); void end(); void charactersFromNode(const NodePtr &, const Char *, size_t); void setPreserveSdata(bool); void startPageFloat(const PageFloatNIC &); void endPageFloat(); void setPageFloatNIC(const PageFloatNIC &); void startPageFootnote(); void endPageFootnote(); void characters(const Char *, size_t); void character(const CharacterNIC &); void paragraphBreak(const ParagraphNIC &); void externalGraphic(const ExternalGraphicNIC &); void rule(const RuleNIC &); void alignmentPoint(); void pageNumber(); void formattingInstruction(const StringC &); void tableColumn(const TableColumnNIC &); void tableCellBeforeRowBorder(); void tableCellAfterRowBorder(); void tableCellBeforeColumnBorder(); void tableCellAfterColumnBorder(); void fractionBar(); void radicalRadical(const CharacterNIC &); void radicalRadicalDefaulted(); void currentNodePageNumber(const NodePtr &); ////////////////////////////////////////////////////////////////////// // Non-atomic flow objects ////////////////////////////////////////////////////////////////////// void startSequence(); void endSequence(); void startLineField(const LineFieldNIC &); void endLineField(); void startParagraph(const ParagraphNIC &); void endParagraph(); void startDisplayGroup(const DisplayGroupNIC &); void endDisplayGroup(); void startScroll(); void endScroll(); void startScore(Char); void startScore(const LengthSpec &); void startScore(Symbol); void endScore(); void startLeader(const LeaderNIC &); void endLeader(); void startSideline(); void endSideline(); void startBox(const BoxNIC &); void endBox(); // Tables void startTable(const TableNIC &); void endTable(); // A call for each border is made immediately // after startTable(), each preceded by any appropriate set*() calls. void tableBeforeRowBorder(); void tableAfterRowBorder(); void tableBeforeColumnBorder(); void tableAfterColumnBorder(); void startTablePartSerial(const TablePartNIC &); void endTablePartSerial(); void startTableRow(); void endTableRow(); void startTableCell(const TableCellNIC &); void endTableCell(); void startSimplePageSequence(); void endSimplePageSequence(); // Headers and footers are treated like a separate port. void startSimplePageSequenceHeaderFooter(unsigned); void endSimplePageSequenceHeaderFooter(unsigned); // page-number sosofo void startTablePartHeader(); void endTablePartHeader(); void startTablePartFooter(); void endTablePartFooter(); void startMathSequence(); void endMathSequence(); void startFractionSerial(); void endFractionSerial(); void startFractionNumerator(); void endFractionNumerator(); void startFractionDenominator(); void endFractionDenominator(); void startUnmath(); void endUnmath(); void startSuperscript(); void endSuperscript(); void startSubscript(); void endSubscript(); void startScriptSerial(); void endScriptSerial(); void startScriptPreSup(); void endScriptPreSup(); void startScriptPreSub(); void endScriptPreSub(); void startScriptPostSup(); void endScriptPostSup(); void startScriptPostSub(); void endScriptPostSub(); void startScriptMidSup(); void endScriptMidSup(); void startScriptMidSub(); void endScriptMidSub(); void startMarkSerial(); void endMarkSerial(); void startMarkOver(); void endMarkOver(); void startMarkUnder(); void endMarkUnder(); void startFenceSerial(); void endFenceSerial(); void startFenceOpen(); void endFenceOpen(); void startFenceClose(); void endFenceClose(); void startRadicalSerial(); void endRadicalSerial(); void startRadicalDegree(); void endRadicalDegree(); void startMathOperatorSerial(); void endMathOperatorSerial(); void startMathOperatorOperator(); void endMathOperatorOperator(); void startMathOperatorLowerLimit(); void endMathOperatorLowerLimit(); void startMathOperatorUpperLimit(); void endMathOperatorUpperLimit(); void startGrid(const GridNIC &); void endGrid(); void startGridCell(const GridCellNIC &); void endGridCell(); void startNode(const NodePtr &, const StringC &); void endNode(); void startLink(const Address &); void endLink(); ////////////////////////////////////////////////////////////////////// // Inherited characteristics // Set the value of the characteristic for the next flow object. // Inherited characteristics that are not explicitly set have // the same value as the parent flow object. ////////////////////////////////////////////////////////////////////// void setFontSize(Length); void setFontFamilyName(const StringC &); void setFontWeight(Symbol); void setFontPosture(Symbol); void setStartIndent(const LengthSpec &); void setEndIndent(const LengthSpec &); void setFirstLineStartIndent(const LengthSpec &); void setLastLineEndIndent(const LengthSpec &); void setLineSpacing(const LengthSpec &); void setFieldWidth(const LengthSpec &); void setMarginaliaSep(const LengthSpec &); void setLines(Symbol); void setQuadding(Symbol); void setDisplayAlignment(Symbol); void setFieldAlign(Symbol); void setColor(const DeviceRGBColor &); void setBackgroundColor(); // background of #f void setBackgroundColor(const DeviceRGBColor &); void setBorderPresent(bool); void setLineThickness(Length); void setCellBeforeRowMargin(Length); void setCellAfterRowMargin(Length); void setCellBeforeColumnMargin(Length); void setCellAfterColumnMargin(Length); void setLineSep(Length); void setBoxSizeBefore(Length); void setBoxSizeAfter(Length); void setPositionPointShift(const LengthSpec &); void setStartMargin(const LengthSpec &); void setEndMargin(const LengthSpec &); void setSidelineSep(const LengthSpec &); void setAsisWrapIndent(const LengthSpec &); void setLineNumberSep(const LengthSpec &); void setLastLineJustifyLimit(const LengthSpec &); void setJustifyGlyphSpaceMaxAdd(const LengthSpec &); void setJustifyGlyphSpaceMaxRemove(const LengthSpec &); void setTableCornerRadius(const LengthSpec &); void setBoxCornerRadius(const LengthSpec &); void setInhibitLineBreaks(bool); void setHyphenate(bool); void setKern(bool); void setLigature(bool); void setScoreSpaces(bool); void setFloatOutMarginalia(bool); void setFloatOutSidelines(bool); void setFloatOutLineNumbers(bool); void setCellBackground(bool); void setSpanWeak(bool); void setIgnoreRecordEnd(bool); void setNumberedLines(bool); void setHangingPunct(bool); void setBoxOpenEnd(bool); void setTruncateLeader(bool); void setAlignLeader(bool); void setTablePartOmitMiddleHeader(bool); void setTablePartOmitMiddleFooter(bool); void setBorderOmitAtBreak(bool); void setPrincipalModeSimultaneous(bool); void setMarginaliaKeepWithPrevious(bool); void setLineJoin(Symbol); void setLineCap(Symbol); void setLineNumberSide(Symbol); void setKernMode(Symbol); void setInputWhitespaceTreatment(Symbol); void setFillingDirection(Symbol); void setWritingMode(Symbol); void setLastLineQuadding(Symbol); void setMathDisplayMode(Symbol); void setBoxType(Symbol); void setGlyphAlignmentMode(Symbol); void setBoxBorderAlignment(Symbol); void setCellRowAlignment(Symbol); void setBorderAlignment(Symbol); void setSidelineSide(Symbol); void setHyphenationKeep(Symbol); void setFontStructure(Symbol); void setFontProportionateWidth(Symbol); void setCellCrossed(Symbol); void setMarginaliaSide(Symbol); void setLayer(long); void setBackgroundLayer(long); void setBorderPriority(long); void setLineRepeat(long); void setSpan(long); void setMinLeaderRepeat(long); void setHyphenationRemainCharCount(long); void setHyphenationPushCharCount(long); void setWidowCount(long); void setOrphanCount(long); // 0 means #f void setExpandTabs(long); void setHyphenationLadderCount(long); // public id or #f void setBackgroundTile(PublicId); void setLineBreakingMethod(PublicId); void setLineCompositionMethod(PublicId); void setImplicitBidiMethod(PublicId); void setGlyphSubstMethod(PublicId); void setGlyphReorderMethod(PublicId); void setHyphenationMethod(PublicId); void setTableAutoWidthMethod(PublicId); void setFontName(PublicId); // Two-letter code void setLanguage(Letter2); void setCountry(Letter2); // For simple page sequence void setPageWidth(Length); void setPageHeight(Length); void setLeftMargin(Length); void setRightMargin(Length); void setTopMargin(Length); void setBottomMargin(Length); void setHeaderMargin(Length); void setFooterMargin(Length); void setPageNumberRestart(bool); void setPageNumberFormat(const StringC &); void setPageNColumns(long); void setPageColumnSep(Length); void setPageBalanceColumns(bool); void setGridRowSep(Length); void setGridColumnSep(Length); void setSubscriptDepth(Length); void setSuperscriptHeight(Length); void setUnderMarkDepth(Length); void setOverMarkHeight(Length); void setHeadingLevel(long); void setMinPreLineSpacing(const OptLengthSpec &); void setMinPostLineSpacing(const OptLengthSpec &); void setMinLeading(const OptLengthSpec &); void setScriptPreAlign(Symbol); void setScriptPostAlign(Symbol); void setScriptMidSupAlign(Symbol); void setScriptMidSubAlign(Symbol); void setNumeratorAlign(Symbol); void setDenominatorAlign(Symbol); void setGridPositionCellType(Symbol); void setGridColumnAlignment(Symbol); void setGridRowAlignment(Symbol); void setGridEquidistantRows(bool); void setGridEquidistantColumns(bool); void setEscapementSpaceBefore(const InlineSpace &); void setEscapementSpaceAfter(const InlineSpace &); void setGlyphSubstTable(const Vector > &tables); void startDisplay( const DisplayNIC & ); void endDisplay(); enum FotObjectClassType { oc_Unknown, oc_Cell }; struct Format { Format() : FotCurDisplaySize( 0 ), FotLineThickness( 1000 ), FotLineCap( symbolButt ), FotBorderPriority( 0 ), FotBorderPresent( true ), FotLineRepeat( 1 ), FotLineSep( 1000 ), FotDisplayAlignment( symbolStart ), FotStartIndentSpec( 0 ), FotEndIndentSpec( 0 ), FotLeftMargin( 1 ), FotRightMargin( 1 ), FotPageWidth( 72000*8 ), FotPageNColumns( 1 ), FotPageColumnSep( 72000/2 ), FotSpan( 1 ), FotCellBeforeColumnMargin( 0 ), FotCellAfterColumnMargin( 0 ), FotObjectClass( oc_Unknown ) {} long FotCurDisplaySize; Length FotLineThickness; Symbol FotLineCap; long FotBorderPriority; bool FotBorderPresent; long FotLineRepeat; Length FotLineSep; Symbol FotDisplayAlignment; LengthSpec FotStartIndentSpec; LengthSpec FotEndIndentSpec; Length FotLeftMargin; Length FotRightMargin; Length FotPageWidth; long FotPageNColumns; Length FotPageColumnSep; long FotSpan; Length FotCellBeforeColumnMargin; Length FotCellAfterColumnMargin; FotObjectClassType FotObjectClass; static const Length INITIAL_PAGE_SIZE() { return 72000*8; } }; struct CompoundFotElement; struct FotElement { FotElement( CompoundFotElement *parent = NULL ) : Parent( parent ), SiblingSeqIdx( -1 ) {} String Characteristics; virtual void out( OutputByteStream &stream ) const { outProlog( stream ); outContent( stream ); outEpilog( stream ); } virtual void open( TeXFOTBuilder &builder ); virtual void close( TeXFOTBuilder &builder ); virtual bool isAtomic() const = 0; virtual const char *name() const = 0; CompoundFotElement *parent() const { return Parent; } String &nodeInfoEpilog() { return NodeInfoEpilog; } void setParent( CompoundFotElement *parent ) { Parent = parent; } virtual FotElement *lastClosed_() = 0; virtual FotElement *currentlyOpen_() = 0; void setSiblingSeqIdx( int idx ) { SiblingSeqIdx = idx; } int siblingSeqIdx() const { assert( SiblingSeqIdx > -1 ); return SiblingSeqIdx; } protected: int SiblingSeqIdx; CompoundFotElement* Parent; String NodeInfoProlog; String NodeInfoEpilog; virtual void outContent( OutputByteStream & ) const {}; virtual void outProlog( OutputByteStream &stream ) const = 0; virtual void outEpilog( OutputByteStream &stream ) const = 0; }; struct FotElementState { FotElementState() : EnforcingStructure( true ), IsOpen( false ) {} bool enforcingStructure() { return IsOpen && EnforcingStructure; } bool EnforcingStructure; bool IsOpen; String CurNodeInfoProlog; }; struct AtomicFotElement : public FotElement { AtomicFotElement( CompoundFotElement *parent = NULL ) : FotElement( parent ) {} virtual bool isAtomic() const { return true; } virtual FotElement *lastClosed_() { return NULL; }; virtual FotElement *currentlyOpen_() { return this; } protected: virtual void outProlog( OutputByteStream &stream ) const { stream << NodeInfoProlog << "\\insert" << name() << "%\n{" << Characteristics << '}'; } virtual void outEpilog( OutputByteStream &stream ) const { stream << '}' << NodeInfoEpilog; } }; struct CompoundFotElement : public FotElement { CompoundFotElement( CompoundFotElement *parent = NULL ) : FotElement( parent ), CurrentlyOpenChildIdx( -1 ), LastClosedChildIdx( -1 ) {} virtual bool isAtomic() const { return false; } virtual void open( TeXFOTBuilder &builder ) { FotElement::open( builder ); builder.setCurOs( &PreContent ); }; virtual void childJustClosed( FotElement &child ) { CurrentlyOpenChildIdx = -1; LastClosedChildIdx = child.siblingSeqIdx(); }; virtual void childJustOpened( FotElement &child ) { CurrentlyOpenChildIdx = child.siblingSeqIdx(); }; virtual FotElement &child( size_t idx ) = 0; static FotElement *lastClosed( CompoundFotElement &treeRoot ) { return treeRoot.currentlyOpen( treeRoot ) ? treeRoot.currentlyOpen( treeRoot )->lastClosed_() : (FotElement*)NULL; } static FotElement *currentlyOpen( CompoundFotElement &treeRoot ) { return treeRoot.currentlyOpen_(); } virtual FotElement *currentlyOpen_() { return CurrentlyOpenChildIdx > -1 ? child( (size_t)CurrentlyOpenChildIdx ).currentlyOpen_() : this; } virtual FotElement *lastClosed_() { return LastClosedChildIdx > -1 ? &child( (size_t)LastClosedChildIdx ) : ( parent() ? parent()->lastClosed_() : (FotElement*)NULL ); } protected: virtual void outProlog( OutputByteStream &stream ) const { #ifdef TEXDEBUG stream << "\nELEMENT\n" << "\nPRO\n" << NodeInfoProlog << "\nEND_PRO\n" << "\\" << name() << "%\n{" << Characteristics << '}'; #else stream << NodeInfoProlog << "\\" << name() << "%\n{" << Characteristics << '}'; #endif PreContent.commit( stream ); } virtual void outEpilog( OutputByteStream &stream ) const { #ifdef TEXDEBUG stream << "\\end" << name() << "{}" << "\nEPI\n" << NodeInfoEpilog << "\nEND_EPI\nEND_ELEMENT\n" ; #else stream << "\\end" << name() << "{}" << NodeInfoEpilog << "%\n" ; #endif } int CurrentlyOpenChildIdx; int LastClosedChildIdx; TeXTmpOutputByteStream PreContent; }; struct Border : public AtomicFotElement { Border( CompoundFotElement *parent = NULL, bool cellBorder_ = true ) : AtomicFotElement( parent ), cellBorder( cellBorder_ ), borderPresent( false ) {} long borderPriority; Length lineThickness; bool borderPresent; long lineRepeat; Length lineSep; bool cellBorder; void resolve( Border &adjacentBorder ); void setFromFot( TeXFOTBuilder &builder ); }; struct CellBeforeRowBorder : public Border { CellBeforeRowBorder( CompoundFotElement *parent = NULL ) : Border( parent ) {} virtual const char *name() const { return "TableCellBeforeRowBorder"; } }; struct CellAfterRowBorder : public Border { CellAfterRowBorder( CompoundFotElement *parent = NULL ) : Border( parent ) {} virtual const char *name() const { return "TableCellAfterRowBorder"; } }; struct CellBeforeColumnBorder : public Border { CellBeforeColumnBorder( CompoundFotElement *parent = NULL ) : Border( parent ) {} virtual const char *name() const { return "TableCellBeforeColumnBorder"; } }; struct CellAfterColumnBorder : public Border { CellAfterColumnBorder( CompoundFotElement *parent = NULL ) : Border( parent ) {} virtual const char *name() const { return "TableCellAfterColumnBorder"; } }; struct TableBeforeRowBorder : public Border { TableBeforeRowBorder( CompoundFotElement *parent = NULL ) : Border( parent, false ) {} virtual const char *name() const { return "TableBeforeRowBorder"; } }; struct TableAfterRowBorder : public Border { TableAfterRowBorder( CompoundFotElement *parent = NULL ) : Border( parent, false ) {} virtual const char *name() const { return "TableAfterRowBorder"; } }; struct TableBeforeColumnBorder : public Border { TableBeforeColumnBorder( CompoundFotElement *parent = NULL ) : Border( parent, false ) {} virtual const char *name() const { return "TableBeforeColumnBorder"; } }; struct TableAfterColumnBorder : public Border { TableAfterColumnBorder( CompoundFotElement *parent = NULL ) : Border( parent, false ) {} virtual const char *name() const { return "TableAfterColumnBorder"; } }; struct Column { Column() : hasWidth( 0 ), computedWidth( 0 ), defaultTeXLeftBorder( 0 ), defaultTeXRightBorder( 0 ), displayAlignment( symbolStart ), isExplicit( false ) {} bool isExplicit; bool hasWidth; TableLengthSpec width; long computedWidth; Symbol displayAlignment; int defaultTeXLeftBorder; // also used as column border count; int defaultTeXRightBorder; // }; struct TablePart; struct Cell : public CompoundFotElement { Cell( CompoundFotElement *parent = NULL ) : CompoundFotElement( parent ), missing( false ), OverlappingCell( NULL ), nRowsSpanned( 1 ), nColumnsSpanned( 1 ), displaySize( 0 ), beforeRowBorder(), afterRowBorder(), beforeColumnBorder(), afterColumnBorder(), TeXTableRowIdx( -1 ), TeXTableColumnIdx( -1 ), displayAlignment( symbolStart ), effectiveAlignment( symbolStart ), paragraphChildrenNum( 0 ) {} bool missing; int TeXTableRowIdx; int TeXTableColumnIdx; unsigned nColumnsSpanned; unsigned nRowsSpanned; CellBeforeRowBorder beforeRowBorder; CellAfterRowBorder afterRowBorder; CellBeforeColumnBorder beforeColumnBorder; CellAfterColumnBorder afterColumnBorder; Symbol displayAlignment; Symbol effectiveAlignment; long displaySize; long paragraphChildrenNum; Cell *OverlappingCell; OutputByteStream &content() { return Content; } virtual void open( TeXFOTBuilder &builder ) { CompoundFotElement::open( builder ); builder.setCurOs( &Content ); builder.curFotElementState().EnforcingStructure = false; } virtual void close( TeXFOTBuilder &builder ) { computeMultiParFlag(); CompoundFotElement::close( builder ); builder.curFotElementState().EnforcingStructure = true; } virtual const char *name() const { return "TableCell"; } bool singleRowBeforeRowBorderPresent() const; bool singleRowAfterRowBorderPresent() const; bool singleColumnBeforeColumnBorderPresent() const; bool singleColumnAfterColumnBorderPresent() const; void computeOverridingTeXColumnBorders( TablePart &tablePart ); void computeOverridingTeXDisplayAlignment( TablePart &tablePart ); void computeMultiParFlag(); bool isOverlapped() const { return OverlappingCell == this ? false : true; } virtual FotElement &child( size_t ) { assert( false ); return *this; } protected: virtual void outProlog( OutputByteStream &stream ) const; virtual void outEpilog( OutputByteStream &stream ) const; void outContent( OutputByteStream &stream ) const { Content.commit( stream ); } TeXTmpOutputByteStream Content; }; struct Row : public CompoundFotElement { Row( CompoundFotElement *parent = NULL ) : CompoundFotElement( parent ) {} virtual const char *name() const { return "TableRow"; } Vector Cells; static void outVerticalBorders ( const Row *upperRow, const Row *lowerRow, OutputByteStream &stream ); virtual FotElement &child( size_t idx ) { assert( idx < Cells.size() ); return Cells[idx]; } protected: void outContent( OutputByteStream &stream ) const; }; struct Table; struct TablePart : public CompoundFotElement { TablePart( CompoundFotElement *parent = NULL ) : CompoundFotElement( parent ), columnsProcessed( false ), needsColumnReprocessing( false ), isExplicit( true ) {} bool isExplicit; Vector Columns; String HeaderProlog; Vector Header; String HeaderEpilog; Vector Body; String FooterProlog; Vector Footer; String FooterEpilog; void processColumns( TeXFOTBuilder &builder ); void computeTeXColumnBordersAndDisplayAlignment(); void normalizeRows(); void begin(); Table &parentTable() const { assert( Parent != NULL ); return *(Table*)Parent; } virtual const char *name() const { return "TablePart"; } virtual FotElement &child( size_t idx ); bool columnsProcessed; bool needsColumnReprocessing; protected: virtual void outProlog( OutputByteStream &stream ) const { if( isExplicit ) CompoundFotElement::outProlog( stream ); } virtual void outEpilog( OutputByteStream &stream ) const { if( isExplicit ) CompoundFotElement::outEpilog( stream ); } Row &siblingSeqIdxToRow( int idx ) const; void outContent( OutputByteStream &stream ) const; }; struct Table : public CompoundFotElement { Table( CompoundFotElement *parent = NULL ) : CompoundFotElement( parent ), beforeRowBorder(), afterRowBorder(), beforeColumnBorder(), afterColumnBorder(), CurCell( NULL ), CurTablePart( NULL ), NoTablePartsSeen( true ) {} Vector TableParts; TableBeforeRowBorder beforeRowBorder; TableAfterRowBorder afterRowBorder; TableBeforeColumnBorder beforeColumnBorder; TableAfterColumnBorder afterColumnBorder; Length tableWidth; Symbol displayAlignment; Length startIndent; virtual const char *name() const { return "Table"; } virtual FotElement &child( size_t idx ) { assert( idx < TableParts.size() ); return TableParts[idx]; } void resolveBorders( Vector *preceedingRows, Vector &rows, Vector *followingRows, unsigned startingRowIdx, bool hasFirstTableRow, bool hasLastTableRow ); void begin(); void end( TeXFOTBuilder &builder ); Vector &curRows() { assert( CurRows != NULL ); return *CurRows; } TablePart &curTablePart() { assert( CurTablePart != NULL ); return *CurTablePart; } Cell &curCell() { assert( CurCell != NULL ); return *CurCell; } TablePart *CurTablePart; Cell *CurCell; Vector *CurRows; bool NoTablePartsSeen; protected: void outContent( OutputByteStream &stream ) const; }; long computeLengthSpec( const LengthSpec &spec ) const; const Format &curFormat() const { assert( FormatStack.size() > 0 ); return FormatStack.back(); } Table &curTable() { return CurTable; } FotElementState &curFotElementState() { return CurFotElementState; } void setCurOs( OutputByteStream *to ) { CurOs = to; } void elementStart( FotObjectClassType objectClassType ); OutputByteStream *fileout_; private: // Variables. OutputByteStream *CurOs; StrOutputByteStream stringout_; Messenger *mgr_; bool preserveSdata_; Vector DisplayBoxLevels; Vector FormatStack; Format NextFormat; Table CurTable; FotElementState CurFotElementState; // Functions. OutputByteStream &os(); void insertAtomic(const char *name); void insertAtomic(FotElement &fotElement); void startGroup(FotElement &fotElement); void startGroup(const char *name, String *output = NULL ); void endGroup(const char *name, String *output = NULL ); void closeopenBrace(const char *name, String *output = NULL ); void startBrace(const char *name, String *output = NULL ); void endBrace(const char *name, String *output = NULL ); void startSimpleGroup(const char *name, String *output = NULL ); void endSimpleGroup(String *output = NULL); void endGroup() {}; void setlength(const char *,Length); void set(const char *,const StringC &); void set(const char *,const GroveString &); void set(const char *,Symbol); void set(const char *,const LengthSpec &); void set(const char *,double); void set(const char *,const DeviceRGBColor &); void set(const char *,bool); void set(const char *,long); void set(const char *,long unsigned int); void set(const char *name,unsigned int n) { set(name, (unsigned long)n); } void set(const char *,PublicId); void setletter2(const char *,Letter2); void set(const char *,const DisplaySpace &); void set(const char *,const GlyphId &); void set(const char *,const OptLengthSpec &); void set(const char *,const InlineSpace &); // Structures for non-inherited characteristics, // in the order specified in style/FOTBuilder.h. void setDisplayNIC(const DisplayNIC &); void setInlineNIC(const InlineNIC &); void setDisplayGroupNIC(const DisplayGroupNIC &); void setExternalGraphicNIC(const ExternalGraphicNIC &); void setBoxNIC(const BoxNIC &); void setRuleNIC(const RuleNIC &); void setLeaderNIC(const LeaderNIC &); void setParagraphNIC(const ParagraphNIC &); void setCharacterNIC(const CharacterNIC &); void setLineFieldNIC(const LineFieldNIC &); void setTableNIC(const TableNIC &); void setTablePartNIC(const TablePartNIC &); void setTableColumnNIC(const TableColumnNIC &); void setTableCellNIC(const TableCellNIC &); void setGridNIC(const GridNIC &); void setGridCellNIC(const GridCellNIC &); void dumpInherited(); void message(const MessageType0 &); }; #ifdef TEXDEBUG TeXFOTBuilder *TeXFOTBuilder::CurInstance = NULL; #endif // --------- OutputByteStream operators -------------------------------------- OutputByteStream &operator<<( OutputByteStream &os, LengthInPoints length ) { char buf[32]; int i; sprintf( buf, "%li.%.3i%n", long(length.l)/1000, abs(long(length.l)%1000), &i ); while( buf[--i] == '0' ) {}; if( buf[i] == '.' ) i--; buf[i+1] = '\0'; os << buf << "\\p@"; return os; } // --------- TeXFOTBuilder::FotElement --------------------------------------- void TeXFOTBuilder::FotElement::open( TeXFOTBuilder &builder ) { builder.curFotElementState().IsOpen = true; if( parent() ) parent()->childJustOpened( *this ); if( builder.curFotElementState().CurNodeInfoProlog.size() > 0 ) { NodeInfoProlog = builder.curFotElementState().CurNodeInfoProlog; builder.curFotElementState().CurNodeInfoProlog.resize( 0 ); } } void TeXFOTBuilder::FotElement::close( TeXFOTBuilder &builder ) { if( parent() ) parent()->childJustClosed( *this ); else { builder.curFotElementState().IsOpen = false; builder.setCurOs( NULL ); } } TeXFOTBuilder::FotElement *TeXFOTBuilder::FotElement::lastClosed_() { return parent() ? parent()->lastClosed_() : (FotElement*)NULL; } // --------- TeXFOTBuilder Standard Display/Element Handling ----------------- void TeXFOTBuilder::elementStart( FotObjectClassType objectClassType ) { NextFormat.FotObjectClass = objectClassType; FormatStack.push_back( NextFormat ); } void TeXFOTBuilder::start() { NextFormat.FotObjectClass = oc_Unknown; FormatStack.push_back( NextFormat ); } void TeXFOTBuilder::end() { assert( FormatStack.size() > 0 ); FormatStack.resize( FormatStack.size()-1 ); assert( FormatStack.size() > 0 ); NextFormat = FormatStack.back(); } void TeXFOTBuilder::startDisplay( const DisplayNIC & ) { if( curTable().CurCell != NULL ) NextFormat.FotCurDisplaySize = curTable().CurCell->displaySize; else if( NextFormat.FotSpan > 1 ) NextFormat.FotCurDisplaySize = NextFormat.FotPageWidth - NextFormat.FotLeftMargin - NextFormat.FotRightMargin; else NextFormat.FotCurDisplaySize = ( NextFormat.FotPageWidth - NextFormat.FotLeftMargin - NextFormat.FotRightMargin - NextFormat.FotPageColumnSep * ( NextFormat.FotPageNColumns - 1 ) ) / NextFormat.FotPageNColumns; } void TeXFOTBuilder::endDisplay() { } // --------- TeXFOTBuilder Misc ---------------------------------------------- long TeXFOTBuilder::computeLengthSpec( const LengthSpec &spec ) const { if( spec.displaySizeFactor == 0.0 ) { return spec.length; } else { double tem = curFormat().FotCurDisplaySize * spec.displaySizeFactor; return spec.length + long( tem >= 0.0 ? tem +.5 : tem - .5 ); } } // --------- TeXFOTBuilder::Table --------------------------------------------- void TeXFOTBuilder::Table::resolveBorders ( Vector *preceedingRows, Vector &rows, Vector *, unsigned startingRowIdx, bool hasFirstTableRow, bool hasLastTableRow ) { bool isFirstRow; bool isLastRow; bool isFirstColumn; bool isLastColumn; Cell *cell = NULL; size_t r, c, rr, cc; bool leftEdge, topEdge; #ifdef TEXDEBUG *TeXFOTBuilder::curInstance().fileout_ << "RESOLVING_BORDERS\n"; #endif for( r = 0; r < rows.size(); r++ ) { for( c = 0; c < rows[r].Cells.size()-1; c++ ) { cell = &rows[r].Cells[c]; if( cell->OverlappingCell == NULL ) { for( rr = r; rr < r + cell->nRowsSpanned; rr++ ) { for( cc = c, leftEdge = true; cc < c + cell->nColumnsSpanned; cc++ ) { rows[rr].Cells[cc].OverlappingCell = cell; rows[rr].Cells[cc].TeXTableRowIdx = rr + startingRowIdx; rows[rr].Cells[cc].TeXTableColumnIdx = cc; } } } } } for( r = 0; r < rows.size(); r++ ) { #ifdef TEXDEBUG *TeXFOTBuilder::curInstance().fileout_ << "ROW " << r << "\n"; #endif for( c = 0; c < rows[r].Cells.size() - 1; c++ ) { #ifdef TEXDEBUG *TeXFOTBuilder::curInstance().fileout_ << " COL " << c << "\n"; #endif cell = &rows[r].Cells[c]; if( cell->OverlappingCell == cell ) { for( rr = r, topEdge = true; rr < r + cell->nRowsSpanned; rr++ ) { isFirstRow = ( rr == 0 ) ? true : false; isLastRow = ( rr == rows.size() - 1 ) ? true : false; for( cc = c, leftEdge = true; cc < c + cell->nColumnsSpanned; cc++ ) { isFirstColumn = ( cc == 0 ) ? true : false; isLastColumn = ( cc == rows[rr].Cells.size() - 2 ) ? true : false; if( leftEdge ) if( isFirstColumn ) { #ifdef TEXDEBUG *TeXFOTBuilder::curInstance().fileout_ << "LEFT_TABLE_BORDER_RES \n"; #endif cell->beforeColumnBorder.resolve( beforeColumnBorder ); } else cell->beforeColumnBorder.resolve ( rows[rr].Cells[cc-1].OverlappingCell->afterColumnBorder ); if( topEdge ) if( isFirstRow && hasFirstTableRow ) cell->beforeRowBorder.resolve( beforeRowBorder ); else if( !isFirstRow ) cell->beforeRowBorder.resolve ( rows[rr-1].Cells[cc].OverlappingCell->afterRowBorder ); else if( preceedingRows != NULL ) { assert( preceedingRows->size() > 0 ); cell->beforeRowBorder.resolve ( (*preceedingRows)[preceedingRows->size()-1].Cells[cc] .OverlappingCell->afterRowBorder ); } if( isLastColumn ) cell->afterColumnBorder.resolve( afterColumnBorder ); if( isLastRow && hasLastTableRow ) cell->afterRowBorder.resolve( afterRowBorder ); leftEdge = false; } topEdge = false; } } } } } void TeXFOTBuilder::Table::begin() { CurCell = NULL; NoTablePartsSeen = true; TableParts.resize( 0 ); TableParts.resize( 1 ); TableParts.back().setSiblingSeqIdx( 0 ); TableParts.back().setParent( this ); TableParts.back().begin(); } void TeXFOTBuilder::Table::end( TeXFOTBuilder &builder ) { bool firstPart, lastPart, hasHeader, hasBody, hasFooter; for( size_t i = 0; i < TableParts.size(); i++ ) { firstPart = ( i == 0 ) ? true : false; lastPart = ( i == TableParts.size() - 1 ) ? true : false; TablePart &tablePart = TableParts[i]; tablePart.normalizeRows(); hasHeader = tablePart.Header.size() > 0 ? true : false; hasBody = tablePart.Body.size() > 0 ? true : false; hasFooter = tablePart.Footer.size() > 0 ? true : false; if( hasHeader ) resolveBorders( (Vector*)NULL, tablePart.Header, hasBody ? &tablePart.Body : (Vector*)NULL, 0, firstPart ? true : false, false ); resolveBorders( hasHeader ? &tablePart.Header : (Vector*)NULL, tablePart.Body, hasFooter ? &tablePart.Footer : (Vector*)NULL, tablePart.Header.size(), hasHeader ? false : true, hasFooter ? false : true ); if( hasFooter ) resolveBorders( hasBody ? &tablePart.Body : (Vector*)NULL, tablePart.Footer, (Vector*)NULL, tablePart.Header.size() + tablePart.Body.size(), false, lastPart ? true : false ); if( tablePart.needsColumnReprocessing ) tablePart.processColumns( builder ); tablePart.computeTeXColumnBordersAndDisplayAlignment(); } } void TeXFOTBuilder::Table::outContent( OutputByteStream &stream ) const { for( size_t i = 0; i < TableParts.size(); i++ ) TableParts[i].out( stream ); }; // --------- TeXFOTBuilder::TablePart ----------------------------------------- void TeXFOTBuilder::TablePart::begin() { Columns.resize( 0 ); Header.resize( 0 ); Body.resize( 0 ); Footer.resize( 0 ); columnsProcessed = false; needsColumnReprocessing = false; parentTable().CurRows = &Body; parentTable().CurTablePart = this; } TeXFOTBuilder::FotElement &TeXFOTBuilder::TablePart::child( size_t idx ) { if( idx < Header.size() ) return Header[idx]; idx -= Header.size(); if( idx < Body.size() ) return Body[idx]; assert( idx < Footer.size() ); idx -= Body.size(); return Footer[idx]; } void TeXFOTBuilder::TablePart::computeTeXColumnBordersAndDisplayAlignment() { Vector *rows; for( int step = 0; step < 3; step++ ) { switch( step ) { case 0: rows = &Header; break; case 1: rows = &Body; break; default: rows = &Footer; } for( size_t r = 0; r < rows->size(); r++ ) { if( (*rows)[r].Cells.size()-1 > Columns.size() ) Columns.resize( (*rows)[r].Cells.size()-1 ); for( size_t c = 0; c < (*rows)[r].Cells.size()-1; c++ ) { if( (*rows)[r].Cells[c].singleColumnBeforeColumnBorderPresent() ) Columns[c].defaultTeXLeftBorder++; if( (*rows)[r].Cells[c].singleColumnAfterColumnBorderPresent() ) Columns[c].defaultTeXRightBorder++; } } } #ifdef TEXDEBUG for( int step = 0; step < 3; step++ ) { switch( step ) { case 0: rows = &Header; break; case 1: rows = &Body; break; default: rows = &Footer; } for( size_t r = 0; r < rows->size(); r++ ) { *TeXFOTBuilder::curInstance().fileout_ << "\nROW " << ( step == 0 ? "Header" : ( step == 1 ? "Body" : "Footer" ) ) << "\n"; for( size_t c = 0; c < (*rows)[r].Cells.size()-1; c++ ) { *TeXFOTBuilder::curInstance().fileout_ << "\n CELL " << c << " LB: " << (*rows)[r].Cells[c].beforeColumnBorder.borderPresent << " RB: " << (*rows)[r].Cells[c].beforeColumnBorder.borderPresent << " OVERLAPPED: " << ( (*rows)[r].Cells[c].isOverlapped() ? "YES" : "NO" ) << "\n"; } } } #endif size_t TeXTableRowsNum = Header.size() + Body.size() + Footer.size(); for( size_t c = 0; c < Columns.size(); c++ ) { Columns[c].defaultTeXLeftBorder = ((size_t)Columns[c].defaultTeXLeftBorder)*2 >= TeXTableRowsNum ? 1 : 0; Columns[c].defaultTeXRightBorder = ((size_t)Columns[c].defaultTeXRightBorder)*2 >= TeXTableRowsNum ? 1 : 0; } for( int step = 0; step < 3; step++ ) { switch( step ) { case 0: rows = &Header; break; case 1: rows = &Body; break; default: rows = &Footer; } for( size_t r = 0; r < rows->size(); r++ ) { for( size_t c = 0; c < (*rows)[r].Cells.size()-1; c++ ) { if( !(*rows)[r].Cells[c].isOverlapped() ) { (*rows)[r].Cells[c].computeOverridingTeXColumnBorders( *this ); (*rows)[r].Cells[c].computeOverridingTeXDisplayAlignment( *this ); } } } } } void TeXFOTBuilder::TablePart::processColumns( TeXFOTBuilder &builder ) { long totalNonproportionalWidth = 0L; double totalProportionalUnits = 0.0; size_t nonWidthCellsNum = 0; for( size_t i = 0; i < Columns.size(); i++ ) { if( Columns[i].hasWidth ) { if( Columns[i].width.tableUnitFactor ) { totalProportionalUnits += Columns[i].width.tableUnitFactor; } else { Columns[i].computedWidth = builder.computeLengthSpec( Columns[i].width ); totalNonproportionalWidth += Columns[i].computedWidth; } } else nonWidthCellsNum++; } if( totalProportionalUnits > 0 ) totalProportionalUnits += nonWidthCellsNum; // cannot predict width of some cells, but their width is needed to // compute widths of proportional cells - force non-with cells to be 1 table-unit double proportionalUnit = 0.0; if( totalProportionalUnits ) proportionalUnit = ( parentTable().tableWidth - totalNonproportionalWidth ) / totalProportionalUnits; for( size_t i = 0; i < Columns.size(); i++ ) { if( Columns[i].hasWidth ) { if( Columns[i].width.tableUnitFactor ) Columns[i].computedWidth = long(proportionalUnit * Columns[i].width.tableUnitFactor); } else if( totalProportionalUnits > 0 ) Columns[i].computedWidth = long(proportionalUnit); } columnsProcessed = true; } void TeXFOTBuilder::TablePart::outContent( OutputByteStream &stream ) const { stream << "\\TeXTable%\n{" << LengthInPoints( parentTable().tableWidth ) << "}{" << Columns.size() << '}'; stream << '{'; for( size_t i = 0; i < Columns.size(); i++ ) { #ifdef TEXDEBUG stream << "\nCOLUMN " << i << " DEF_LEFT_B: " << Columns[i].defaultTeXLeftBorder << " DEF_RIGHT_B: " << Columns[i].defaultTeXRightBorder << "\n"; #endif if( i == 0 && Columns[i].defaultTeXLeftBorder ) stream << '|'; if( Columns[i].computedWidth > 0 ) { switch( Columns[i].displayAlignment ) { case symbolInside: case symbolStart: stream << "L{" << LengthInPoints( Columns[i].computedWidth ) << '}'; break; case symbolOutside: case symbolEnd: stream << "R{" << LengthInPoints( Columns[i].computedWidth ) << '}'; break; case symbolCenter: default: stream << "C{" << LengthInPoints( Columns[i].computedWidth ) << '}'; } } else { switch( Columns[i].displayAlignment ) { case symbolOutside: case symbolEnd: stream << 'r'; break; case symbolCenter: stream << 'c'; break; case symbolInside: case symbolStart: default: stream << 'l'; break; } } if( Columns[i].defaultTeXRightBorder ) stream << '|'; } stream << "}%\n"; stream << HeaderProlog; const Row *recentRow = NULL; for( size_t i = 0; i < Header.size(); i++ ) { Row::outVerticalBorders( recentRow, &Header[i], stream ); Header[i].out( stream ); recentRow = &Header[i]; } stream << HeaderEpilog; for( size_t i = 0; i < Body.size(); i++ ) { Row::outVerticalBorders( recentRow, &Body[i], stream ); Body[i].out( stream ); recentRow = &Body[i]; } stream << FooterProlog; for( size_t i = 0; i < Footer.size(); i++ ) { Row::outVerticalBorders( recentRow, &Footer[i], stream ); Footer[i].out( stream ); recentRow = &Footer[i]; } stream << FooterEpilog; if( recentRow ) Row::outVerticalBorders( recentRow, NULL, stream ); stream << "\\endTeXTable" << "{}%\n"; } void TeXFOTBuilder::TablePart::normalizeRows() { size_t maxCellsInRow = Columns.size()+1; Vector *rows; for( int step = 0; step < 2; step++ ) { for( int rowType = 0; rowType < 3; rowType++ ) { switch( rowType ) { case 0: rows = &Header; break; case 1: rows = &Body; break; default: rows = &Footer; } for( size_t r = 0; r < rows->size(); r++ ) { if( step == 0 ) { if( (*rows)[r].Cells.size() > 1 ) { size_t lastCellIdx = (*rows)[r].Cells.size()-2; Cell &lastCell = (*rows)[r].Cells[lastCellIdx]; if( !lastCell.missing && lastCellIdx+lastCell.nColumnsSpanned+1 > maxCellsInRow ) maxCellsInRow = lastCellIdx+lastCell.nColumnsSpanned+1; } } else if( (*rows)[r].Cells.size() < maxCellsInRow ) (*rows)[r].Cells.resize( maxCellsInRow ); } } } } // --------- TeXFOTBuilder::Row ----------------------------------------------- void TeXFOTBuilder::Row::outContent( OutputByteStream &stream ) const { bool first = true; for( size_t i = 0; i + 1 < Cells.size(); i++ ) { if( !Cells[i].isOverlapped() ) { if( !first ) stream << "&"; else first = false; Cells[i].out( stream ); } } } void TeXFOTBuilder::Row::outVerticalBorders ( const TeXFOTBuilder::Row *upperRow, const TeXFOTBuilder::Row *lowerRow, OutputByteStream &stream ) { assert( upperRow != NULL || lowerRow != NULL ); size_t colNum = upperRow ? upperRow->Cells.size()-1 : lowerRow->Cells.size()-1; int borderStartIdx = -1; int borderEndIdx; for( size_t i = 0; i < colNum; i++ ) { #ifdef TEXDEBUG stream << "\nROW: " << "COL " << i << " " << ( ( ( upperRow && upperRow->Cells[i].singleRowAfterRowBorderPresent() ) || ( lowerRow && lowerRow->Cells[i].singleRowBeforeRowBorderPresent() ) ) ? "Border" : "No Border" ); #endif if( ( upperRow && upperRow->Cells[i].singleRowAfterRowBorderPresent() ) || ( lowerRow && lowerRow->Cells[i].singleRowBeforeRowBorderPresent() ) ) { if( borderStartIdx < 0 ) borderStartIdx = i; if( i == colNum-1 ) { borderEndIdx = i; goto OUT_BORDER; } } else if( borderStartIdx > -1 ) { borderEndIdx = i-1; goto OUT_BORDER; } continue; OUT_BORDER: if( borderStartIdx == 0 && i == colNum-1 ) stream << "\\Hline%\n"; else stream << "\\Cline{" << borderStartIdx+1 << '-' << borderEndIdx+1 << "}%\n"; borderStartIdx = -1; } } // --------- TeXFOTBuilder::Cell ---------------------------------------------- void TeXFOTBuilder::Cell::outProlog( OutputByteStream &stream ) const { if( nColumnsSpanned > 1 ) { stream << "\\multicolumn%\n{" << nColumnsSpanned << "}{"; if( beforeColumnBorder.borderPresent ) stream << '|'; switch( effectiveAlignment ) { case symbolOutside: case symbolEnd: stream << 'r'; break; case symbolCenter: stream << 'c'; break; case symbolInside: case symbolStart: default: stream << 'l'; break; } if( afterColumnBorder.borderPresent ) stream << '|'; stream << "}{"; } CompoundFotElement::outProlog( stream ); } void TeXFOTBuilder::Cell::outEpilog( OutputByteStream &stream ) const { CompoundFotElement::outEpilog( stream ); if( nColumnsSpanned > 1 ) stream << "}%\n"; } void TeXFOTBuilder::Cell::computeMultiParFlag() { if( paragraphChildrenNum > 1 ) { StrOutputByteStream str; str << "\\def\\MultiPar{1}"; String s; str.extractString( s ); Characteristics += s; } } void TeXFOTBuilder::Cell::computeOverridingTeXColumnBorders( TablePart &tablePart ) { StrOutputByteStream str; if( tablePart.Columns[TeXTableColumnIdx].defaultTeXLeftBorder != beforeColumnBorder.borderPresent ) str << "\\def\\TeXTableCellBeforeColumnBorder{" << beforeColumnBorder.borderPresent << '}'; if( tablePart.Columns[TeXTableColumnIdx+nColumnsSpanned-1].defaultTeXRightBorder != afterColumnBorder.borderPresent ) str << "\\def\\TeXTableCellAfterColumnBorder{" << afterColumnBorder.borderPresent << '}'; String s; str.extractString( s ); Characteristics += s; } void TeXFOTBuilder::Cell::computeOverridingTeXDisplayAlignment( TablePart &tablePart ) { effectiveAlignment = tablePart.Columns[TeXTableColumnIdx].isExplicit ? tablePart.Columns[TeXTableColumnIdx].displayAlignment : displayAlignment; StrOutputByteStream str; if( effectiveAlignment != tablePart.Columns[TeXTableColumnIdx].displayAlignment ) { str << "\\def\\TeXTableCellDisplayAlignment{"; switch( effectiveAlignment ) { case symbolOutside: case symbolEnd: str << 'r'; break; case symbolCenter: str << 'c'; break; case symbolInside: case symbolStart: default: str << 'l'; break; } str << '}'; String s; str.extractString( s ); Characteristics += s; } } bool TeXFOTBuilder::Cell::singleRowBeforeRowBorderPresent() const { assert( OverlappingCell != NULL ); if( OverlappingCell->TeXTableRowIdx == TeXTableRowIdx ) return OverlappingCell->beforeRowBorder.borderPresent; else return false; } bool TeXFOTBuilder::Cell::singleRowAfterRowBorderPresent() const { assert( OverlappingCell != NULL ); assert( TeXTableRowIdx > -1 ); if( OverlappingCell->TeXTableRowIdx + OverlappingCell->nRowsSpanned == ((unsigned)TeXTableRowIdx)+1 ) return OverlappingCell->afterRowBorder.borderPresent; else return false; } bool TeXFOTBuilder::Cell::singleColumnBeforeColumnBorderPresent() const { assert( OverlappingCell != NULL ); assert( TeXTableRowIdx > -1 ); if( OverlappingCell->TeXTableColumnIdx == TeXTableColumnIdx ) return OverlappingCell->beforeColumnBorder.borderPresent; else return false; } bool TeXFOTBuilder::Cell::singleColumnAfterColumnBorderPresent() const { assert( OverlappingCell != NULL ); if( OverlappingCell->TeXTableColumnIdx + (int)OverlappingCell->nColumnsSpanned == TeXTableColumnIdx+1 ) return OverlappingCell->afterColumnBorder.borderPresent; else return false; } // --------- TeXFOTBuilder::Border -------------------------------------------- void TeXFOTBuilder::Border::setFromFot( TeXFOTBuilder &builder ) { const TeXFOTBuilder::Format &f = builder.curFormat(); borderPriority = f.FotBorderPriority; borderPresent = f.FotBorderPresent; lineThickness = f.FotLineThickness; lineRepeat = f.FotLineRepeat; lineSep = f.FotLineSep; } void TeXFOTBuilder::Border::resolve( Border &adjacentBorder ) { if( adjacentBorder.borderPriority > borderPriority || ( adjacentBorder.borderPriority == borderPriority && !adjacentBorder.cellBorder && adjacentBorder.borderPresent ) ) { lineThickness = adjacentBorder.lineThickness; borderPresent = adjacentBorder.borderPresent; lineRepeat = adjacentBorder.lineRepeat; lineSep = adjacentBorder.lineSep; if( adjacentBorder.cellBorder ) adjacentBorder.borderPresent = false; } #ifdef TEXDEBUG *TeXFOTBuilder::curInstance().fileout_ << "RESOLVE_RESULT: " << borderPresent << "\n"; #endif } // --------- End Tables ------------------------------------------------------- #define MAYBESET(name,value,default) (value!=default?(set(name,value),0):0) // // Get the current output stream. // inline OutputByteStream &TeXFOTBuilder::os() { return CurOs == NULL ? *fileout_ : *CurOs; } // // Define an output operator for StringC // // FIXME This won't work for Unicode characters. static OutputByteStream &operator<<(OutputByteStream &os, const StringC &s) { for (size_t i = 0; i < s.size(); i++) os << char(s[i]); return os; } // // Define an output operator for GroveString // static OutputByteStream &operator<<(OutputByteStream &os, const GroveString &s) { for (size_t i = 0; i < s.size(); i++) os << char(s[i]); return os; } static OutputByteStream &operator<<(OutputByteStream &os, double d) { char buf[64]; sprintf(buf, "%g", d); return os << buf; } FOTBuilder *makeTeXFOTBuilder(OutputByteStream *os, Messenger *mgr, const FOTBuilder::Extension *&ext) { static const TeXFOTBuilder::PageFloatFlowObj pageFloat; static const TeXFOTBuilder::PageFootnoteFlowObj pageFootnote; static const FOTBuilder::Extension extensions[] = { { "UNREGISTERED::Sebastian Rahtz//Flow Object Class::page-float", 0, 0, 0, 0, &pageFloat }, { "UNREGISTERED::Sebastian Rahtz//Flow Object Class::page-footnote", 0, 0, 0, 0, &pageFootnote }, { "UNREGISTERED::James Clark//Characteristic::page-number-format", 0, (void (FOTBuilder::*)(const StringC &))&TeXFOTBuilder::setPageNumberFormat, 0, 0 }, { "UNREGISTERED::James Clark//Characteristic::page-number-restart?", (void (FOTBuilder::*)(bool))&TeXFOTBuilder::setPageNumberRestart, 0, 0 }, { "UNREGISTERED::James Clark//Characteristic::page-n-columns", 0, 0, (void (FOTBuilder::*)(long))&TeXFOTBuilder::setPageNColumns, 0 }, { "UNREGISTERED::James Clark//Characteristic::page-column-sep", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&TeXFOTBuilder::setPageColumnSep, }, { "UNREGISTERED::James Clark//Characteristic::page-balance-columns?", (void (FOTBuilder::*)(bool))&TeXFOTBuilder::setPageBalanceColumns, 0, 0 }, { "UNREGISTERED::James Clark//Characteristic::subscript-depth", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&TeXFOTBuilder::setSubscriptDepth, }, { "UNREGISTERED::James Clark//Characteristic::over-mark-height", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&TeXFOTBuilder::setOverMarkHeight, }, { "UNREGISTERED::James Clark//Characteristic::under-mark-depth", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&TeXFOTBuilder::setUnderMarkDepth, }, { "UNREGISTERED::James Clark//Characteristic::superscript-height", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&TeXFOTBuilder::setSuperscriptHeight, }, { "UNREGISTERED::James Clark//Characteristic::grid-row-sep", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&TeXFOTBuilder::setGridRowSep, }, { "UNREGISTERED::James Clark//Characteristic::grid-column-sep", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&TeXFOTBuilder::setGridColumnSep, }, { "UNREGISTERED::James Clark//Characteristic::heading-level", 0, 0, (void (FOTBuilder::*)(long))&TeXFOTBuilder::setHeadingLevel, 0 }, { "UNREGISTERED::James Clark//Characteristic::preserve-sdata?", (void (FOTBuilder::*)(bool))&TeXFOTBuilder::setPreserveSdata, 0, 0, 0, 0 }, { 0, 0, 0} }; ext = extensions; return new TeXFOTBuilder(os, mgr); } //////////////////////////////////////////////////////////////////////// // Constructor and Destructor //////////////////////////////////////////////////////////////////////// TeXFOTBuilder::TeXFOTBuilder(OutputByteStream *o, Messenger *mgr) : fileout_(o), mgr_(mgr), CurOs( NULL ), preserveSdata_(1) { #ifdef TEXDEBUG CurInstance = this; #endif NextFormat.FotCurDisplaySize = Format::INITIAL_PAGE_SIZE(); FormatStack.push_back( NextFormat ); os() << "\\FOT{2}"; } TeXFOTBuilder::~TeXFOTBuilder() { os() << "\\endFOT{}"; } ////////////////////////////////////////////////////////////////////// // Atomic flow objects ////////////////////////////////////////////////////////////////////// void TeXFOTBuilder::characters(const Char *s, size_t n) { for (; n > 0; n--, s++) { // Since TeX has only 256 characters // by default, two-byte characters // will need special treatment. if (*s > 255) { // set("Ch",(unsigned long)(*s)); // insertAtomic("Character"); // // Don't complicate matters, just give the character! os() << "\\Character{" << (unsigned long)(*s) << "}"; } else { // Otherwise, check for special // TeX escapes. switch(*s) { default: os() << char(*s); break; case '\\': case '^': case '_': case '~': os() << "\\char" << int(*s) << "{}"; break; case '{': case '}': case '$': case '&': case '#': case '%': os() << "\\" << char(*s); break; case '\r': os() << '\n'; break; case '\n': break; } } } } void TeXFOTBuilder::character(const CharacterNIC &nic) { setCharacterNIC(nic); // insertAtomic("Character"); dumpInherited(); os() << "\\Character{" << (unsigned long)(nic.ch) << "}"; } void TeXFOTBuilder::paragraphBreak(const ParagraphNIC &nic) { setParagraphNIC(nic); insertAtomic("ParagraphBreak"); } void TeXFOTBuilder::externalGraphic(const ExternalGraphicNIC &nic) { setExternalGraphicNIC(nic); insertAtomic("ExternalGraphic"); } void TeXFOTBuilder::rule(const RuleNIC &nic) { setRuleNIC(nic); insertAtomic("Rule"); } void TeXFOTBuilder::alignmentPoint() { insertAtomic("AlignmentPoint"); } // page-number sosofo void TeXFOTBuilder::pageNumber() { insertAtomic("PageNumber"); } void TeXFOTBuilder::formattingInstruction (const StringC &instr) { os() << instr; } void TeXFOTBuilder::tableColumn(const TableColumnNIC &nic) { setTableColumnNIC(nic); if( nic.columnIndex >= curTable().curTablePart().Columns.size() ) curTable().curTablePart().Columns.resize( nic.columnIndex + 1 ); Column &col = curTable().curTablePart().Columns[nic.columnIndex]; col.isExplicit = true; col.hasWidth = nic.hasWidth; if( nic.hasWidth ) col.width = nic.width; col.displayAlignment = curFormat().FotDisplayAlignment; insertAtomic("TableColumn"); } void TeXFOTBuilder::tableCellBeforeRowBorder() { start(); curTable().curCell().beforeRowBorder.setFromFot( *this ); insertAtomic( curTable().curCell().beforeRowBorder ); end(); } void TeXFOTBuilder::tableCellAfterRowBorder() { start(); curTable().curCell().afterRowBorder.setFromFot( *this ); insertAtomic( curTable().curCell().afterRowBorder ); end(); } void TeXFOTBuilder::tableCellBeforeColumnBorder() { start(); curTable().curCell().beforeColumnBorder.setFromFot( *this ); insertAtomic( curTable().curCell().beforeColumnBorder ); end(); } void TeXFOTBuilder::tableCellAfterColumnBorder() { start(); curTable().curCell().afterColumnBorder.setFromFot( *this ); insertAtomic( curTable().curCell().afterColumnBorder ); end(); } void TeXFOTBuilder::fractionBar() { insertAtomic("FractionBar"); } void TeXFOTBuilder::radicalRadical(const CharacterNIC &c) { setCharacterNIC(c); insertAtomic("RadicalRadical"); } void TeXFOTBuilder::radicalRadicalDefaulted() { insertAtomic("RadicalRadicalDefaulted"); } void TeXFOTBuilder::currentNodePageNumber(const NodePtr &node) { GroveString id; unsigned long ei; // FIX ME! // Only PARTIALLY supported -- I currently allow cross-references // only to elements. if (node->getId(id) == accessOK) { set("Label",id); } else if (node->elementIndex(ei) == accessOK) { set("Element",ei); } else { message(TeXMessages::unsupportedPageNumberNonElement); return; } unsigned long g = node->groveIndex(); if (g) { set("GroveIndex",g); } insertAtomic("CurrentNodePageNumber"); } ////////////////////////////////////////////////////////////////////// // Non-atomic flow objects ////////////////////////////////////////////////////////////////////// void TeXFOTBuilder::startSequence() { start(); if( !curFotElementState().enforcingStructure() ) startGroup("Seq"); } void TeXFOTBuilder::endSequence() { if( !curFotElementState().enforcingStructure() ) endGroup("Seq"); end(); } void TeXFOTBuilder::startLineField(const LineFieldNIC &nic) { start(); setLineFieldNIC(nic); startGroup("LineField"); } void TeXFOTBuilder::endLineField() { endGroup("LineField"); end(); } void TeXFOTBuilder::startParagraph(const ParagraphNIC &nic) { startDisplay( nic ); if( curFormat().FotObjectClass == oc_Cell ) curTable().curCell().paragraphChildrenNum++; start(); setParagraphNIC(nic); startGroup("Par"); } void TeXFOTBuilder::endParagraph() { endGroup("Par"); end(); endDisplay(); } void TeXFOTBuilder::startDisplayGroup(const DisplayGroupNIC &nic) { startDisplay( nic ); start(); setDisplayGroupNIC(nic); startGroup("DisplayGroup"); } void TeXFOTBuilder::endDisplayGroup() { endGroup("DisplayGroup"); end(); endDisplay(); } void TeXFOTBuilder::startScroll() { start(); startGroup("Scroll"); } void TeXFOTBuilder::endScroll() { endGroup("Scroll"); end(); } void TeXFOTBuilder::startScore(Char ch) { start(); set("ScoreCharacter",(unsigned long)ch); startGroup("Score"); } void TeXFOTBuilder::startScore(const LengthSpec &len) { start(); set("ScoreLength",len); startGroup("Score"); } void TeXFOTBuilder::startScore(Symbol type) { start(); set("ScoreType",type); startGroup("Score"); } void TeXFOTBuilder::endScore() { endGroup("Score"); end(); } void TeXFOTBuilder::startLeader(const LeaderNIC &nic) { start(); setLeaderNIC(nic); startGroup("Leader"); } void TeXFOTBuilder::endLeader() { endGroup("Leader"); end(); } void TeXFOTBuilder::startSideline() { start(); startGroup("SideLine"); } void TeXFOTBuilder::endSideline() { endGroup("SideLine"); end(); } void TeXFOTBuilder::startBox(const BoxNIC &nic) { if( nic.isDisplay ) { DisplayBoxLevels.push_back( FormatStack.size() ); startDisplay(nic); } start(); setBoxNIC(nic); startGroup("BOX"); } void TeXFOTBuilder::endBox() { endGroup("BOX"); end(); if( DisplayBoxLevels.size() > 0 && DisplayBoxLevels.back() == FormatStack.size() ) { DisplayBoxLevels.resize( DisplayBoxLevels.size() - 1 ); endDisplay(); } } // Tables void TeXFOTBuilder::startTable(const TableNIC &nic) { #ifdef TEXDEBUG *fileout_ << "\nTABLE_START\n"; #endif startDisplay( nic ); start(); setTableNIC(nic); Length curStartIndent = computeLengthSpec( curFormat().FotStartIndentSpec ); curTable().startIndent = curStartIndent; curTable().begin(); curTable().displayAlignment = curFormat().FotDisplayAlignment; if( nic.widthType == TableNIC::widthExplicit ) curTable().tableWidth = computeLengthSpec( nic.width ); else curTable().tableWidth = curFormat().FotCurDisplaySize - curStartIndent - computeLengthSpec( curFormat().FotEndIndentSpec ); startGroup( curTable() ); curTable().curTablePart().open( *this ); } void TeXFOTBuilder::endTable() { #ifdef TEXDEBUG *fileout_ << "\nTABLE_END\n"; #endif if( curTable().NoTablePartsSeen ) { curTable().curTablePart().close( *this ); curTable().curTablePart().isExplicit = false; } curTable().end( *this ); curTable().close( *this ); curTable().out( os() ); endGroup(); end(); endDisplay(); } // A call for each border is made immediately // after startTable(), each preceded by any appropriate set*() calls. void TeXFOTBuilder::tableBeforeRowBorder() { start(); curTable().beforeRowBorder.setFromFot( *this ); insertAtomic( curTable().beforeRowBorder ); end(); } void TeXFOTBuilder::tableAfterRowBorder() { start(); curTable().afterRowBorder.setFromFot( *this ); insertAtomic( curTable().afterRowBorder ); end(); } void TeXFOTBuilder::tableBeforeColumnBorder() { start(); curTable().beforeColumnBorder.setFromFot( *this ); insertAtomic( curTable().beforeColumnBorder ); end(); } void TeXFOTBuilder::tableAfterColumnBorder() { start(); curTable().afterColumnBorder.setFromFot( *this ); insertAtomic( curTable().afterColumnBorder ); end(); } void TeXFOTBuilder::startTablePartSerial(const TablePartNIC &nic) { #ifdef TEXDEBUG *fileout_ << "\nTABLE_PART_START\n"; #endif startDisplay( nic ); start(); setTablePartNIC(nic); if( curTable().NoTablePartsSeen ) curTable().NoTablePartsSeen = false; else { curTable().TableParts.resize( curTable().TableParts.size()+1 ); curTable().TableParts.back().setSiblingSeqIdx( curTable().TableParts.size()-1 ); curTable().TableParts.back().setParent( &curTable() ); } curTable().TableParts.back().begin(); curTable().TableParts.back().open( *this ); startGroup( curTable().curTablePart() ); } void TeXFOTBuilder::endTablePartSerial() { curTable().curTablePart().close( *this ); curTable().CurTablePart = NULL; endGroup(); end(); endDisplay(); #ifdef TEXDEBUG *fileout_ << "\nTABLE_PART_END\n"; #endif } void TeXFOTBuilder::startTableRow() { #ifdef TEXDEBUG *fileout_ << "\nTABLE_ROW_START\n"; #endif curTable().curRows().resize( curTable().curRows().size() + 1 ); curTable().curRows().back().setSiblingSeqIdx( curTable().curRows().size()-1 ); curTable().curRows().back().setParent( &curTable().curTablePart() ); startGroup( curTable().curRows().back() ); curTable().curRows().back().open( *this ); } void TeXFOTBuilder::endTableRow() { curTable().curRows().back().close( *this ); endGroup(); #ifdef TEXDEBUG *fileout_ << "\nTABLE_ROW_END\n"; #endif } void TeXFOTBuilder::startTableCell(const TableCellNIC &nic) { #ifdef TEXDEBUG *fileout_ << "\nTABLE_CELL_START index: " << nic.columnIndex << " missing: " << nic.missing << "\n"; #endif setTableCellNIC(nic); TablePart &tp = curTable().curTablePart(); if( !tp.columnsProcessed ) tp.processColumns( *this ); Vector &Cells = curTable().curRows().back().Cells; { size_t curSize = Cells.size(); if( nic.columnIndex >= curSize ) { Cells.resize( nic.columnIndex + 1 ); for( size_t i = curSize; i < Cells.size(); i++ ) Cells[i].setSiblingSeqIdx( i ); } } Cell &cell = Cells[nic.columnIndex]; curTable().CurCell = &cell; cell.missing = nic.missing; cell.setParent( &curTable().curRows().back() ); if( nic.nColumnsSpanned != 1 ) cell.nColumnsSpanned = nic.nColumnsSpanned; if( nic.nRowsSpanned != 1 ) cell.nRowsSpanned = nic.nRowsSpanned; long newDisplaySize = 0; for( size_t i = nic.columnIndex; i < nic.columnIndex + nic.nColumnsSpanned; i++ ) if( i < tp.Columns.size() ) { if( tp.Columns[i].hasWidth ) newDisplaySize += computeLengthSpec( tp.Columns[i].width ); } else if( !nic.missing ) { tp.Columns.resize( tp.Columns.size() + 1 ); tp.Columns.back().hasWidth = false; } if( newDisplaySize > 0 ) { newDisplaySize -= NextFormat.FotCellBeforeColumnMargin + NextFormat.FotCellAfterColumnMargin; NextFormat.FotCurDisplaySize = newDisplaySize; } cell.displaySize = NextFormat.FotCurDisplaySize; cell.displayAlignment = NextFormat.FotDisplayAlignment; elementStart( oc_Cell ); startGroup( cell ); cell.open( *this ); } void TeXFOTBuilder::endTableCell() { curTable().curCell().close( *this ); curTable().CurCell = NULL; endGroup(); end(); #ifdef TEXDEBUG *fileout_ << "\nTABLE_CELL_END\n"; #endif } void TeXFOTBuilder::startSimplePageSequence() { NextFormat.FotCurDisplaySize = ( NextFormat.FotPageWidth - NextFormat.FotLeftMargin - NextFormat.FotRightMargin - NextFormat.FotPageColumnSep * ( NextFormat.FotPageNColumns - 1 ) ) / NextFormat.FotPageNColumns; start(); startGroup("SpS"); } void TeXFOTBuilder::endSimplePageSequence() { endGroup("SpS"); end(); } // These aren't real flow objects, so handle them a little // differently. void TeXFOTBuilder::startSimplePageSequenceHeaderFooter(unsigned flags) { os() << "\n\\SpS"; if ((flags & (firstHF|otherHF)) == firstHF) os() << "First"; else os() << "Other"; if ((flags & (frontHF|backHF)) == frontHF) os() << "Front"; else os() << "Back"; switch (flags & (leftHF|centerHF|rightHF)) { case leftHF: os() << "Left"; break; case centerHF: os() << "Center"; break; case rightHF: os() << "Right"; break; } if ((flags & (headerHF|footerHF)) == headerHF) os() << "Header"; else os() << "Footer"; os() << "%\n{"; } void TeXFOTBuilder::endSimplePageSequenceHeaderFooter(unsigned) { endSimpleGroup(); } void TeXFOTBuilder::startTablePartHeader() { curTable().CurRows = &curTable().curTablePart().Header; startGroup( "TablePartHeader", &curTable().curTablePart().HeaderProlog ); } void TeXFOTBuilder::endTablePartHeader() { curTable().CurRows = &curTable().curTablePart().Body; endGroup( "TablePartHeader", &curTable().curTablePart().HeaderEpilog ); } void TeXFOTBuilder::startTablePartFooter() { curTable().CurRows = &curTable().curTablePart().Footer; startGroup( "TablePartFooter", &curTable().curTablePart().FooterProlog ); } void TeXFOTBuilder::endTablePartFooter() { curTable().CurRows = &curTable().curTablePart().Body; endGroup( "TablePartFooter", &curTable().curTablePart().FooterEpilog ); } void TeXFOTBuilder::startMathSequence() { startGroup("MathSeq"); } void TeXFOTBuilder::endMathSequence() { endGroup("MathSeq"); } void TeXFOTBuilder::startFractionSerial() { startGroup("FractionSerial"); } void TeXFOTBuilder::endFractionSerial() { endGroup("FractionSerial"); } void TeXFOTBuilder::startFractionNumerator() { startGroup("FractionNumerator"); } void TeXFOTBuilder::endFractionNumerator() { endGroup("FractionNumerator"); } void TeXFOTBuilder::startFractionDenominator() { startGroup("FractionDenominator"); } void TeXFOTBuilder::endFractionDenominator() { endGroup("FractionDenominator"); } void TeXFOTBuilder::startUnmath() { startBrace("Unmath"); } void TeXFOTBuilder::endUnmath() { endBrace("Unmath"); } void TeXFOTBuilder::startSuperscript() { startBrace("Superscript"); } void TeXFOTBuilder::endSuperscript() { endBrace("Superscript"); } void TeXFOTBuilder::startSubscript() { startBrace("Subscript"); } void TeXFOTBuilder::endSubscript() { endBrace("Subscript"); } void TeXFOTBuilder::startScriptSerial() { startBrace("ScriptSerial"); } void TeXFOTBuilder::endScriptSerial() { } void TeXFOTBuilder::startScriptPreSup() { closeopenBrace("ScriptPreSup"); // ends brace started in startScript Serial } void TeXFOTBuilder::endScriptPreSup() { endSimpleGroup(); } void TeXFOTBuilder::startScriptPreSub() { startSimpleGroup("ScriptPreSub"); } void TeXFOTBuilder::endScriptPreSub() { endSimpleGroup(); } void TeXFOTBuilder::startScriptPostSup() { startSimpleGroup("ScriptPostSup"); } void TeXFOTBuilder::endScriptPostSup() { endSimpleGroup(); } void TeXFOTBuilder::startScriptPostSub() { startSimpleGroup("ScriptPostSub"); } void TeXFOTBuilder::endScriptPostSub() { endSimpleGroup(); } void TeXFOTBuilder::startScriptMidSup() { startSimpleGroup("ScriptMidSup"); } void TeXFOTBuilder::endScriptMidSup() { endSimpleGroup(); } void TeXFOTBuilder::startScriptMidSub() { startSimpleGroup("ScriptMidSub"); } void TeXFOTBuilder::endScriptMidSub() { endSimpleGroup(); } void TeXFOTBuilder::startMarkSerial() { startGroup("MarkSerial"); } void TeXFOTBuilder::endMarkSerial() { endGroup("MarkSerial"); } void TeXFOTBuilder::startMarkOver() { startGroup("MarkOver"); } void TeXFOTBuilder::endMarkOver() { endGroup("MarkOver"); } void TeXFOTBuilder::startMarkUnder() { startGroup("MarkUnder"); } void TeXFOTBuilder::endMarkUnder() { endGroup("MarkUnder"); } void TeXFOTBuilder::startFenceSerial() { startBrace("FenceSerial"); } void TeXFOTBuilder::endFenceSerial() { // endGroup("FenceSerial"); } void TeXFOTBuilder::startFenceOpen() { // Extra closing brace for end of fence body closeopenBrace("FenceOpen"); } void TeXFOTBuilder::endFenceOpen() { endSimpleGroup(); } void TeXFOTBuilder::startFenceClose() { startSimpleGroup("FenceClose"); } void TeXFOTBuilder::endFenceClose() { endSimpleGroup(); } void TeXFOTBuilder::startRadicalSerial() { startGroup("RadicalSerial"); } void TeXFOTBuilder::endRadicalSerial() { endGroup("RadicalSerial"); } void TeXFOTBuilder::startRadicalDegree() { startGroup("RadicalDegree"); } void TeXFOTBuilder::endRadicalDegree() { endGroup("RadicalDegree"); } void TeXFOTBuilder::startMathOperatorSerial() { startGroup("MathOperatorSerial"); } void TeXFOTBuilder::endMathOperatorSerial() { endGroup("MathOperatorSerial"); } void TeXFOTBuilder::startMathOperatorOperator() { startGroup("MathOperatorOperator"); } void TeXFOTBuilder::endMathOperatorOperator() { endGroup("MathOperatorOperator"); } void TeXFOTBuilder::startMathOperatorLowerLimit() { startGroup("MathOperatorLowerLimit"); } void TeXFOTBuilder::endMathOperatorLowerLimit() { endGroup("MathOperatorLowerLimit"); } void TeXFOTBuilder::startMathOperatorUpperLimit() { startGroup("MathOperatorUpperLimit"); } void TeXFOTBuilder::endMathOperatorUpperLimit() { endGroup("MathOperatorUpperLimit"); } void TeXFOTBuilder::startGrid(const GridNIC &nic) { setGridNIC(nic); startGroup("Grid"); } void TeXFOTBuilder::endGrid() { endGroup("Grid"); } void TeXFOTBuilder::startGridCell(const GridCellNIC &nic) { setGridCellNIC(nic); startGroup("GridCell"); } void TeXFOTBuilder::endGridCell() { endGroup("GridCell"); } void TeXFOTBuilder::startNode(const NodePtr &node, const StringC &processingMode) { GroveString id; unsigned long ei; if (node->getId(id) == accessOK) { set("Label",id); } else if (node->elementIndex(ei) == accessOK) { set("Element", ei); } unsigned long g = node->groveIndex(); if (g) { set("GroveIndex", g); } if (processingMode.size()) { set("ProcessingMode", processingMode); } if( curFotElementState().enforcingStructure() ) { startGroup( "Node", &(curFotElementState().CurNodeInfoProlog) ); #ifdef TEXDEBUG *fileout_ << "\nSTART_NODE " << ei << "\n"; #endif } else startGroup("Node"); } void TeXFOTBuilder::endNode() { if( curFotElementState().enforcingStructure() ) { curFotElementState().CurNodeInfoProlog.resize( 0 ); FotElement *lastClosed = CompoundFotElement::lastClosed( curTable() ); if( lastClosed != NULL ) endGroup( "Node", &lastClosed->nodeInfoEpilog() ); #ifdef TEXDEBUG *fileout_ << "\nEND_NODE\n"; #endif } else endGroup("Node"); } void TeXFOTBuilder::startLink(const Address &addr) { GroveString id; unsigned long ei; // FIX ME! // This needs a lot of work -- for now, it supports only links to // elements. switch (addr.type) { case Address::none: break; case Address::resolvedNode: if (addr.node->getId(id) == accessOK) { set("Label",id); } else if (addr.node->elementIndex(ei) == accessOK) { set("Element", ei); } else { message(TeXMessages::unsupportedLinkNonElement); } break; case Address::idref: // just the first IDREF for now set("Label",addr.params[0]); break; case Address::entity: message(TeXMessages::unsupportedLinkEntity); break; case Address::sgmlDocument: message(TeXMessages::unsupportedLinkSgmlDoc); break; case Address::hytimeLinkend: message(TeXMessages::unsupportedLinkHyTime); break; case Address::tei: message(TeXMessages::unsupportedLinkTei); break; case Address::html: message(TeXMessages::unsupportedLinkHtml); break; } if (addr.node) { unsigned long g = addr.node->groveIndex(); if (g) { set("GroveIndex",g); } } startGroup("Link"); } void TeXFOTBuilder::endLink() { endGroup("Link"); } ///////////////////////////////////////////////////////////////////// // Inherited characteristics // Set the value of the characteristic for the next flow object. // Inherited characteristics that are not explicitly set have // the same value as the parent flow object. ////////////////////////////////////////////////////////////////////// void TeXFOTBuilder::setFontSize(Length size) { setlength("fSize",size); } void TeXFOTBuilder::setFontFamilyName(const StringC &name) { stringout_ << "\\def\\fFamName{"; for (size_t i = 0; i < name.size(); i++) { switch(name[i]) { case ' ': stringout_ << '-'; break; default: stringout_ << char(name[i]); break; } } stringout_ << "}"; } void TeXFOTBuilder::setFontWeight(Symbol weight) { set("fWeight",weight); } void TeXFOTBuilder::setFontPosture(Symbol posture) { set("fPosture",posture); } void TeXFOTBuilder::setStartIndent(const LengthSpec &indent) { NextFormat.FotStartIndentSpec = indent; set("StartIndent",indent); } void TeXFOTBuilder::setEndIndent(const LengthSpec &indent) { NextFormat.FotEndIndentSpec = indent; set("EndIndent",indent); } void TeXFOTBuilder::setFirstLineStartIndent(const LengthSpec &indent) { set("FirstLineStartIndent",indent); } void TeXFOTBuilder::setLastLineEndIndent(const LengthSpec &indent) { set("LastLineEndIndent",indent); } void TeXFOTBuilder::setLineSpacing(const LengthSpec &spacing) { set("LineSpacing",spacing); } void TeXFOTBuilder::setFieldWidth(const LengthSpec &width) { set("FieldWidth",width); } void TeXFOTBuilder::setMarginaliaSep(const LengthSpec &sep) { set("MarginaliaSep",sep); } void TeXFOTBuilder::setLines(Symbol lines) { set("Lines",lines); } void TeXFOTBuilder::setQuadding(Symbol quadding) { set("Quadding",quadding); } void TeXFOTBuilder::setDisplayAlignment(Symbol align) { NextFormat.FotDisplayAlignment = align; set("DisplayAlignment",align); } void TeXFOTBuilder::setFieldAlign(Symbol align) { set("FieldAlign",align); } void TeXFOTBuilder::setColor(const DeviceRGBColor &color) { set("Color",color); } void TeXFOTBuilder::setBackgroundColor() { set("BackgroundColor",symbolFalse); } void TeXFOTBuilder::setBackgroundColor(const DeviceRGBColor &color) { set("BackgroundColor",color); } void TeXFOTBuilder::setBorderPresent(bool flag) { NextFormat.FotBorderPresent = flag; set("BorderPresent",flag); } void TeXFOTBuilder::setLineThickness(Length thickness) { NextFormat.FotLineThickness = thickness; setlength("LineThickness",thickness); } void TeXFOTBuilder::setCellBeforeRowMargin(Length margin) { setlength("CellBeforeRowMargin",margin); } void TeXFOTBuilder::setCellAfterRowMargin(Length margin) { setlength("CellAfterRowMargin",margin); } void TeXFOTBuilder::setCellBeforeColumnMargin(Length margin) { NextFormat.FotCellBeforeColumnMargin = margin; setlength("CellBeforeColumnMargin",margin); } void TeXFOTBuilder::setCellAfterColumnMargin(Length margin) { NextFormat.FotCellAfterColumnMargin = margin; setlength("CellAfterColumnMargin",margin); } void TeXFOTBuilder::setLineSep(Length sep) { NextFormat.FotLineSep = sep; setlength("LineSep",sep); } void TeXFOTBuilder::setBoxSizeBefore(Length size) { setlength("BoxSizeBefore",size); } void TeXFOTBuilder::setBoxSizeAfter(Length size) { setlength("BoxSizeAfter",size); } void TeXFOTBuilder::setPositionPointShift(const LengthSpec &shift) { set("PositionPointShift",shift); } void TeXFOTBuilder::setStartMargin(const LengthSpec &margin) { set("StartMargin",margin); } void TeXFOTBuilder::setEndMargin(const LengthSpec &margin) { set("EndMargin",margin); } void TeXFOTBuilder::setSidelineSep(const LengthSpec &sep) { set("SidelineSep",sep); } void TeXFOTBuilder::setAsisWrapIndent(const LengthSpec &indent) { set("AsisWrapIndent",indent); } void TeXFOTBuilder::setLineNumberSep(const LengthSpec &sep) { set("LineNumberSep",sep); } void TeXFOTBuilder::setLastLineJustifyLimit(const LengthSpec &limit) { set("LastLineJustifyLimit",limit); } void TeXFOTBuilder::setJustifyGlyphSpaceMaxAdd(const LengthSpec &max) { set("JustifyGlyphSpaceMaxAdd",max); } void TeXFOTBuilder::setJustifyGlyphSpaceMaxRemove(const LengthSpec &max) { set("JustifyGlyphSpaceMaxRemove",max); } void TeXFOTBuilder::setTableCornerRadius(const LengthSpec &radius) { set("TableCornerRadius",radius); } void TeXFOTBuilder::setBoxCornerRadius(const LengthSpec &radius) { set("BoxCornerRadius",radius); } void TeXFOTBuilder::setInhibitLineBreaks(bool flag) { set("InhibitLineBreaks",flag); } void TeXFOTBuilder::setHyphenate(bool flag) { set("Hyphenate",flag); } void TeXFOTBuilder::setKern(bool flag) { set("Kern",flag); } void TeXFOTBuilder::setLigature(bool flag) { set("Ligature",flag); } void TeXFOTBuilder::setScoreSpaces(bool flag) { set("ScoreSpaces",flag); } void TeXFOTBuilder::setFloatOutMarginalia(bool flag) { set("FloatOutMarginalia",flag); } void TeXFOTBuilder::setFloatOutSidelines(bool flag) { set("FloatOutSidelines",flag); } void TeXFOTBuilder::setFloatOutLineNumbers(bool flag) { set("FloatOutLineNumbers",flag); } void TeXFOTBuilder::setCellBackground(bool flag) { set("CellBackground",flag); } void TeXFOTBuilder::setSpanWeak(bool flag) { set("SpanWeak",flag); } void TeXFOTBuilder::setIgnoreRecordEnd(bool flag) { set("IgnoreRecordEnd",flag); } void TeXFOTBuilder::setNumberedLines(bool flag) { set("NumberedLines",flag); } void TeXFOTBuilder::setHangingPunct(bool flag) { set("HangingPunct",flag); } void TeXFOTBuilder::setBoxOpenEnd(bool flag) { set("BoxOpenEnd",flag); } void TeXFOTBuilder::setTruncateLeader(bool flag) { set("TruncateLeader",flag); } void TeXFOTBuilder::setAlignLeader(bool flag) { set("AlignLeader",flag); } void TeXFOTBuilder::setTablePartOmitMiddleHeader(bool flag) { set("TablePartOmitMiddleHeader",flag); } void TeXFOTBuilder::setTablePartOmitMiddleFooter(bool flag) { set("TablePartOmitMiddleFooter",flag); } void TeXFOTBuilder::setBorderOmitAtBreak(bool flag) { set("BorderOmitAtBreak",flag); } void TeXFOTBuilder::setPrincipalModeSimultaneous(bool flag) { set("PrincipalModeSimultaneous",flag); } void TeXFOTBuilder::setMarginaliaKeepWithPrevious(bool flag) { set("MarginaliaKeepWithPrevious",flag); } void TeXFOTBuilder::setLineJoin(Symbol join) { set("LineJoin",join); } void TeXFOTBuilder::setLineCap(Symbol cap) { NextFormat.FotLineCap = cap; set("LineCap",cap); } void TeXFOTBuilder::setLineNumberSide(Symbol side) { set("LineNumberSide",side); } void TeXFOTBuilder::setKernMode(Symbol mode) { set("KernMode",mode); } void TeXFOTBuilder::setInputWhitespaceTreatment(Symbol treatment) { set("InputWhitespaceTreatment",treatment); } void TeXFOTBuilder::setFillingDirection(Symbol direction) { set("FillingDirection",direction); } void TeXFOTBuilder::setWritingMode(Symbol mode) { set("WritingMode",mode); } void TeXFOTBuilder::setLastLineQuadding(Symbol quadding) { set("LastLineQuadding",quadding); } void TeXFOTBuilder::setMathDisplayMode(Symbol mode) { set("MathDisplayMode",mode); } void TeXFOTBuilder::setBoxType(Symbol type) { set("BoxType",type); } void TeXFOTBuilder::setGlyphAlignmentMode(Symbol mode) { set("GlyphAlignmentMode",mode); } void TeXFOTBuilder::setBoxBorderAlignment(Symbol align) { set("BoxBorderAlignment",align); } void TeXFOTBuilder::setCellRowAlignment(Symbol align) { set("CellRowAlignment",align); } void TeXFOTBuilder::setBorderAlignment(Symbol align) { set("BorderAlignment",align); } void TeXFOTBuilder::setSidelineSide(Symbol side) { set("SidelineSide",side); } void TeXFOTBuilder::setHyphenationKeep(Symbol keep) { set("HyphenationKeep",keep); } void TeXFOTBuilder::setFontStructure(Symbol structure) { set("fStructure",structure); } void TeXFOTBuilder::setFontProportionateWidth(Symbol width) { set("fProportionateWidth",width); } void TeXFOTBuilder::setCellCrossed(Symbol crossed) { set("CellCrossed",crossed); } void TeXFOTBuilder::setMarginaliaSide(Symbol side) { set("MarginaliaSide",side); } void TeXFOTBuilder::setLayer(long n) { set("Layer",n); } void TeXFOTBuilder::setBackgroundLayer(long n) { set("BackgroundLayer",n); } void TeXFOTBuilder::setBorderPriority(long n) { NextFormat.FotBorderPriority = n; set("BorderPriority",n); } void TeXFOTBuilder::setLineRepeat(long n) { NextFormat.FotLineRepeat = n; set("LineRepeat",n); } void TeXFOTBuilder::setSpan(long n) { NextFormat.FotSpan = n; set("Span",n); } void TeXFOTBuilder::setMinLeaderRepeat(long n) { set("MinLeaderRepeat",n); } void TeXFOTBuilder::setHyphenationRemainCharCount(long n) { set("HyphenationRemainCharCount",n); } void TeXFOTBuilder::setHyphenationPushCharCount(long n) { set("HyphenationPushCharCount",n); } void TeXFOTBuilder::setWidowCount(long n) { set("WidowCount",n); } void TeXFOTBuilder::setOrphanCount(long n) { set("OrphanCount",n); } // 0 means #f void TeXFOTBuilder::setExpandTabs(long n) { set("ExpandTabs",n); } void TeXFOTBuilder::setHyphenationLadderCount(long n) { set("HyphenationLadderCount",n); } // public id or #f void TeXFOTBuilder::setBackgroundTile(PublicId id) { set("BackgroundTile",id); } void TeXFOTBuilder::setLineBreakingMethod(PublicId id) { set("LineBreakingMethod",id); } void TeXFOTBuilder::setLineCompositionMethod(PublicId id) { set("LineCompositionMethod",id); } void TeXFOTBuilder::setImplicitBidiMethod(PublicId id) { set("ImplicitBidiMethod",id); } void TeXFOTBuilder::setGlyphSubstMethod(PublicId id) { set("GlyphSubstMethod",id); } void TeXFOTBuilder::setGlyphReorderMethod(PublicId id) { set("GlyphReorderMethod",id); } void TeXFOTBuilder::setHyphenationMethod(PublicId id) { set("HyphenationMethod",id); } void TeXFOTBuilder::setTableAutoWidthMethod(PublicId id) { set("TableAutoWidthMethod",id); } void TeXFOTBuilder::setFontName(PublicId id) { set("fName",id); } // Two-letter code void TeXFOTBuilder::setLanguage(Letter2 language) { setletter2("Language",language); } void TeXFOTBuilder::setCountry(Letter2 country) { setletter2("Country",country); } // For simple page sequence void TeXFOTBuilder::setPageWidth(Length width) { NextFormat.FotPageWidth = width; setlength("PageWidth",width); } void TeXFOTBuilder::setPageHeight(Length height) { setlength("PageHeight",height); } void TeXFOTBuilder::setLeftMargin(Length margin) { NextFormat.FotLeftMargin = margin; setlength("LeftMargin",margin); } void TeXFOTBuilder::setRightMargin(Length margin) { NextFormat.FotRightMargin = margin; setlength("RightMargin",margin); } void TeXFOTBuilder::setTopMargin(Length margin) { setlength("TopMargin",margin); } void TeXFOTBuilder::setBottomMargin(Length margin) { setlength("BottomMargin",margin); } void TeXFOTBuilder::setHeaderMargin(Length margin) { setlength("HeaderMargin",margin); } void TeXFOTBuilder::setFooterMargin(Length margin) { setlength("FooterMargin",margin); } // New inherited characteristics // added 1 March/97 with math support. void TeXFOTBuilder::setMinPreLineSpacing(const OptLengthSpec &len) { set("MinPreLineSpacing",len); } void TeXFOTBuilder::setMinPostLineSpacing(const OptLengthSpec &len) { set("MinPostLineSpacing",len); } void TeXFOTBuilder::setMinLeading(const OptLengthSpec &len) { set("MinLeading",len); } void TeXFOTBuilder::setScriptPreAlign(Symbol sym) { set("ScriptPreAlign",sym); } void TeXFOTBuilder::setScriptPostAlign(Symbol sym) { set("ScriptPostAlign",sym); } void TeXFOTBuilder::setScriptMidSupAlign(Symbol sym) { set("ScriptMidSupAlign",sym); } void TeXFOTBuilder::setScriptMidSubAlign(Symbol sym) { set("ScriptMidSubAlign",sym); } void TeXFOTBuilder::setNumeratorAlign(Symbol sym) { set("NumeratorAlign",sym); } void TeXFOTBuilder::setDenominatorAlign(Symbol sym) { set("DenominatorAlign",sym); } void TeXFOTBuilder::setGridPositionCellType(Symbol sym) { set("GridPositionCellType",sym); } void TeXFOTBuilder::setGridColumnAlignment(Symbol sym) { set("GridColumnAlignment",sym); } void TeXFOTBuilder::setGridRowAlignment(Symbol sym) { set("GridRowAlignment",sym); } void TeXFOTBuilder::setGridEquidistantRows(bool flag) { set("GridEquidistantRows",flag); } void TeXFOTBuilder::setGridEquidistantColumns(bool flag) { set("GridEquidistantColumns",flag); } void TeXFOTBuilder::setEscapementSpaceBefore(const InlineSpace &space) { set("EscapementSpaceBefore",space); } void TeXFOTBuilder::setEscapementSpaceAfter(const InlineSpace &space) { set("EscapementSpaceAfter",space); } void TeXFOTBuilder::setGlyphSubstTable(const Vector > &) { // FIX ME! message(TeXMessages::unsupportedGlyphSubstTable); // set("GlyphSubstTable",tables); } //////////////////////////////////////////////////////////////////////// // Private member functions. //////////////////////////////////////////////////////////////////////// // // Insert an atomic flow object. // void TeXFOTBuilder::insertAtomic(const char *name) { os() << "\\insert" << name << "%\n{"; dumpInherited(); os() << '}'; } void TeXFOTBuilder::insertAtomic( TeXFOTBuilder::FotElement &fotElement ) { stringout_.extractString( fotElement.Characteristics ); } // // Start a non-atomic flow object. // void TeXFOTBuilder::startGroup(const char *name, String *output ) { if( output ) { String s; stringout_.extractString( s ); StrOutputByteStream out; out << "\\" << name << "%\n{" << s << '}'; out.extractString( s ); *output += s; } else { os() << "\\" << name << "%\n{"; dumpInherited(); os() << '}'; } } void TeXFOTBuilder::startGroup( TeXFOTBuilder::FotElement &fotElement ) { stringout_.extractString( fotElement.Characteristics ); } // // Start a non-atomic flow object, with the content delimited by braces, // but no macro name at all; we just emit all the characteristics in // the stream after the brace. // void TeXFOTBuilder::startSimpleGroup(const char *name, String *output ) { if( output ) { String s; stringout_.extractString( s ); StrOutputByteStream out; out << "%\n{" << s ; out.extractString( s ); *output += s; } else { os() << "%\n{"; dumpInherited(); } } // // End with just a closing brace // void TeXFOTBuilder::endSimpleGroup(String *output ) { if( output ) { StrOutputByteStream out; out << "}"; String s; out.extractString( s ); *output += s; } else os() << "}"; } // // Stop and start a brace, but note characteristics // void TeXFOTBuilder::closeopenBrace(const char *name, String *output ) { if( output ) { String s; stringout_.extractString( s ); StrOutputByteStream out; out << "}{" << s ; out.extractString( s ); *output += s; } else { os() << "}{"; dumpInherited(); } } // // Start a non-atomic flow object, with the content delimited by braces // void TeXFOTBuilder::startBrace(const char *name, String *output ) { if( output ) { String s; stringout_.extractString( s ); StrOutputByteStream out; out << "\\" << name << "%\n{" << s << "}{"; out.extractString( s ); *output += s; } else { os() << "\\" << name << "%\n{"; dumpInherited(); os() << "}{"; } } // // End a non-atomic flow object with just a closing brace // void TeXFOTBuilder::endBrace(const char *name, String *output ) { if( output ) { StrOutputByteStream out; out << "}"; String s; out.extractString( s ); *output += s; } else os() << "}"; } // // End a non-atomic flow object. // void TeXFOTBuilder::endGroup(const char *name, String *output ) { if( output ) { StrOutputByteStream out; out << "\\end" << name << "{}"; String s; out.extractString( s ); *output += s; } else os() << "\\end" << name << "{}"; } // // Set a Length (needs a different name to avoid conflict // with long. // void TeXFOTBuilder::setlength(const char *name,Length size) { stringout_ << "\\def\\" << name << "%\n{" << float(size/1000.0) << "\\p@}"; } // // Set a StringC. // void TeXFOTBuilder::set(const char *name,const StringC &value) { stringout_ << "\\def\\" << name << "%\n{" << value << '}'; } // // Set a GroveString // void TeXFOTBuilder::set(const char *name,const GroveString &value) { stringout_ << "\\def\\" << name << "%\n{" << value << '}'; } // // Set a Symbol. // void TeXFOTBuilder::set(const char *name,Symbol sym) { const char * symbolName = ""; switch (sym) { case symbolFalse: symbolName = "false"; break; case symbolTrue: symbolName = "true"; break; case symbolNotApplicable: symbolName = "notapplicable"; break; case symbolUltraCondensed: symbolName = "ultracondensed"; break; case symbolExtraCondensed: symbolName = "extracondensed"; break; case symbolCondensed: symbolName = "condensed"; break; case symbolSemiCondensed: symbolName = "semicondensed"; break; case symbolUltraLight: symbolName = "ultralight"; break; case symbolExtraLight: symbolName = "extralight"; break; case symbolLight: symbolName = "light"; break; case symbolSemiLight: symbolName = "semilight"; break; case symbolMedium: symbolName = "medium"; break; case symbolSemiExpanded: symbolName = "semiexpanded"; break; case symbolExpanded: symbolName = "expanded"; break; case symbolExtraExpanded: symbolName = "extraexpanded"; break; case symbolUltraExpanded: symbolName = "ultraexpanded"; break; case symbolSemiBold: symbolName = "semibold"; break; case symbolBold: symbolName = "bold"; break; case symbolExtraBold: symbolName = "extrabold"; break; case symbolUltraBold: symbolName = "ultrabold"; break; case symbolUpright: symbolName = "upright"; break; case symbolOblique: symbolName = "oblique"; break; case symbolBackSlantedOblique: symbolName = "backslantedoblique"; break; case symbolItalic: symbolName = "italic"; break; case symbolBackSlantedItalic: symbolName = "backslanteditalic"; break; case symbolStart: symbolName = "start"; break; case symbolEnd: symbolName = "end"; break; case symbolCenter: symbolName = "center"; break; case symbolJustify: symbolName = "justify"; break; case symbolSpreadInside: symbolName = "spreadinside"; break; case symbolSpreadOutside: symbolName = "spreadoutside"; break; case symbolPageInside: symbolName = "pageinside"; break; case symbolPageOutside: symbolName = "pageoutside"; break; case symbolWrap: symbolName = "wrap"; break; case symbolAsis: symbolName = "asis"; break; case symbolAsisWrap: symbolName = "asiswrap"; break; case symbolAsisTruncate: symbolName = "asistruncate"; break; case symbolNone: symbolName = "none"; break; case symbolBefore: symbolName = "before"; break; case symbolThrough: symbolName = "through"; break; case symbolAfter: symbolName = "after"; break; case symbolTopToBottom: symbolName = "toptobottom"; break; case symbolLeftToRight: symbolName = "lefttoright"; break; case symbolBottomToTop: symbolName = "bottomtotop"; break; case symbolRightToLeft: symbolName = "righttoleft"; break; case symbolInside: symbolName = "inside"; break; case symbolOutside: symbolName = "outside"; break; case symbolHorizontal: symbolName = "horizontal"; break; case symbolVertical: symbolName = "vertical"; break; case symbolEscapement: symbolName = "escapement"; break; case symbolLineProgression: symbolName = "lineprogression"; break; case symbolMath: symbolName = "math"; break; case symbolOrdinary: symbolName = "ordinary"; break; case symbolOperator: symbolName = "operator"; break; case symbolBinary: symbolName = "binary"; break; case symbolRelation: symbolName = "relation"; break; case symbolOpening: symbolName = "opening"; break; case symbolClosing: symbolName = "closing"; break; case symbolPunctuation: symbolName = "punctuation"; break; case symbolInner: symbolName = "inner"; break; case symbolSpace: symbolName = "space"; break; case symbolPage: symbolName = "page"; break; case symbolPageRegion: symbolName = "pageregion"; break; case symbolColumnSet: symbolName = "columnset"; break; case symbolColumn: symbolName = "column"; break; case symbolMax: symbolName = "max"; break; case symbolMaxUniform: symbolName = "maxuniform"; break; case symbolMiter: symbolName = "miter"; break; case symbolRound: symbolName = "round"; break; case symbolBevel: symbolName = "bevel"; break; case symbolButt: symbolName = "butt"; break; case symbolSquare: symbolName = "square"; break; case symbolLoose: symbolName = "loose"; break; case symbolNormal: symbolName = "normal"; break; case symbolKern: symbolName = "kern"; break; case symbolTight: symbolName = "tight"; break; case symbolTouch: symbolName = "touch"; break; case symbolPreserve: symbolName = "preserve"; break; case symbolCollapse: symbolName = "collapse"; break; case symbolIgnore: symbolName = "ignore"; break; case symbolRelative: symbolName = "relative"; break; case symbolDisplay: symbolName = "display"; break; case symbolInline: symbolName = "inline"; break; case symbolBorder: symbolName = "border"; break; case symbolBackground: symbolName = "background"; break; case symbolBoth: symbolName = "both"; break; case symbolBase: symbolName = "base"; break; case symbolFont: symbolName = "font"; break; case symbolTop: symbolName = "top"; break; case symbolBottom: symbolName = "bottom"; break; case symbolSpread: symbolName = "spread"; break; case symbolSolid: symbolName = "solid"; break; case symbolOutline: symbolName = "outline"; break; case symbolWith: symbolName = "with"; break; case symbolAgainst: symbolName = "against"; break; case symbolForce: symbolName = "force"; break; case symbolIndependent: symbolName = "independent"; break; case symbolPile: symbolName = "pile"; break; case symbolSupOut: symbolName = "supout"; break; case symbolSubOut: symbolName = "subout"; break; case symbolLeadEdge: symbolName = "leadedge"; break; case symbolTrailEdge: symbolName = "trailedge"; break; case symbolExplicit: symbolName = "explicit"; break; case symbolRowMajor: symbolName = "rowmajor"; break; case symbolColumnMajor: symbolName = "columnmajor"; break; } stringout_ << "\\def\\" << name << "%\n{" << symbolName << '}'; } // // Set a LengthSpec. // void TeXFOTBuilder::set(const char *name,const LengthSpec &spec) { stringout_ << "\\def\\" << name << "%\n{" << float(spec.length/1000.0) << "\\p@}"; stringout_ << "\\def\\" << name << "Factor%\n{" << spec.displaySizeFactor << '}'; } // // Set a double. // void TeXFOTBuilder::set(const char *name,double n) { stringout_ << "\\def\\" << name << "%\n{" << n << '}'; } // // Set a DeviceRGBColor. // void TeXFOTBuilder::set(const char *name, const DeviceRGBColor &color) { stringout_ << "\\def\\" << name << "Red%\n{" << int(color.red) << '}'; stringout_ << "\\def\\" << name << "Green%\n{" << int(color.green) << '}'; stringout_ << "\\def\\" << name << "Blue%\n{" << int(color.blue) << '}'; } // // Set a bool. // void TeXFOTBuilder::set(const char *name,bool flag) { stringout_ << "\\def\\" << name << "%\n{" << (flag ? 1 : 0) << '}'; } // // Set a long. // void TeXFOTBuilder::set(const char *name,long n) { stringout_ << "\\def\\" << name << "%\n{" << n << '}'; } // // Set an unsigned long. // void TeXFOTBuilder::set(const char *name,long unsigned int n) { stringout_ << "\\def\\" << name << "%\n{" << n << '}'; } // // Set a PublicId. // void TeXFOTBuilder::set(const char *name,PublicId id) { stringout_ << "\\def\\" << name << "%\n{" << id << '}'; } // // Set a Letter2. // void TeXFOTBuilder::setletter2(const char *name,Letter2 code) { char letter1 = (code & 0xff00) >> 8; char letter2 = (code & 0xff); stringout_ << "\\def\\" << name << "%\n{" << letter1 << letter2 << '}'; } // // This one is a problem because it duplications functionality from // above. // void TeXFOTBuilder::set(const char *name,const DisplaySpace &space) { if (space.nominal.length != 0 || space.min.length != 0 || space.max.length != 0) { stringout_ << "\\def\\" << name << "Nom%\n{" << (space.nominal.length/1000.0) << "\\p@}"; if (space.nominal.displaySizeFactor != 0) stringout_ << "\\def\\" << name << "NomFactor%\n{" << space.nominal.displaySizeFactor << '}'; if (space.min.length != 0) stringout_ << "\\def\\" << name << "Min%\n{" << (space.min.length/1000.0) << "\\p@}"; if (space.min.displaySizeFactor != 0) stringout_ << "\\def\\" << name << "MinFactor%\n{" << space.min.displaySizeFactor << '}'; if (space.max.length != 0) stringout_ << "\\def\\" << name << "Max%\n{" << (space.max.length/1000.0) << "\\p@}"; if (space.max.displaySizeFactor != 0) stringout_ << "\\def\\" << name << "MaxFactor%\n{" << space.max.displaySizeFactor << '}'; if (space.priority != 0) stringout_ << "\\def\\" << name << "Priority%\n{" << space.priority << '}'; if (space.conditional) stringout_ << "\\def\\" << name << "Conditional%\n{" << (space.conditional ? 1 : 0) << '}'; if (space.force) stringout_ << "\\def\\" << name << "Force%\n{" << (space.force ? 1 : 0) << '}'; } } void TeXFOTBuilder::set(const char *name,const GlyphId &glyphId) { stringout_ << "\\def\\" << name << "%\n{"; if (glyphId.publicId) { stringout_ << glyphId.publicId; if (glyphId.suffix) stringout_ << "::" << glyphId.suffix; } stringout_ << '}'; } void TeXFOTBuilder::set(const char *name,const OptLengthSpec &spec) { if (spec.hasLength) { set(name,spec.length); } } // This one is also a problem because it duplicates functionality. void TeXFOTBuilder::set(const char *name,const InlineSpace &space) { if (space.nominal.length != 0 || space.min.length != 0 || space.max.length != 0) { stringout_ << "\\def\\" << name << "Nom%\n{" << (space.nominal.length/1000.0) << "\\p@}"; if (space.nominal.displaySizeFactor != 0) stringout_ << "\\def\\" << name << "NomFactor%\n{" << space.nominal.displaySizeFactor << '}'; if (space.min.length != 0) stringout_ << "\\def\\" << name << "Min%\n{" << (space.min.length/1000.0) << "\\p@}"; if (space.min.displaySizeFactor != 0) stringout_ << "\\def\\" << name << "MinFactor%\n{" << space.min.displaySizeFactor << '}'; if (space.max.length != 0) stringout_ << "\\def\\" << name << "Max%\n{" << (space.max.length/1000.0) << "\\p@}"; if (space.max.displaySizeFactor != 0) stringout_ << "\\def\\" << name << "MaxFactor%\n{" << space.max.displaySizeFactor << '}'; } } // // Structures for non-inherited characters, in the order specified // in /style/FOTBuilder.h. // void TeXFOTBuilder::setDisplayNIC(const DisplayNIC &nic) { set("sb",nic.spaceBefore); set("sa",nic.spaceAfter); MAYBESET("PositionPreference",nic.positionPreference,symbolFalse); MAYBESET("Keep",nic.keep,symbolFalse); MAYBESET("BreakBefore",nic.breakBefore,symbolFalse); MAYBESET("BreakAfter",nic.breakAfter,symbolFalse); MAYBESET("KeepWithPrevious",nic.keepWithPrevious,symbolFalse); MAYBESET("KeepWithNext",nic.keepWithNext,symbolFalse); MAYBESET("MayViolateKeepBefore",nic.mayViolateKeepBefore,symbolFalse); MAYBESET("MayViolateKeepAfter",nic.mayViolateKeepAfter,symbolFalse); } void TeXFOTBuilder::setInlineNIC(const InlineNIC &nic) { MAYBESET("BreakBeforePriority",nic.breakBeforePriority,0); MAYBESET("BreakAfterPriority",nic.breakAfterPriority,0); } void TeXFOTBuilder::setDisplayGroupNIC(const DisplayGroupNIC &nic) { setDisplayNIC(nic); if (nic.hasCoalesceId) set("CoalesceId",nic.coalesceId); } void TeXFOTBuilder::setExternalGraphicNIC(const ExternalGraphicNIC &nic) { setDisplayNIC(nic); setInlineNIC(nic); MAYBESET("IsDisplay",nic.isDisplay,symbolFalse); MAYBESET("ScaleType",nic.scaleType,symbolMaxUniform); if (nic.scaleType == symbolFalse) { set("ScaleX",nic.scale[0]); set("ScaleY",nic.scale[1]); } set("EntitySystemId",nic.entitySystemId); set("NotationSystemId",nic.notationSystemId); if(nic.hasMaxWidth) set("MaxWidth",nic.maxWidth); if (nic.hasMaxHeight) set("MaxHeight",nic.maxHeight); if (!nic.isDisplay) { set("EscapementDirection",nic.escapementDirection); set("PositionPointX",nic.positionPointX); set("PositionPointY",nic.positionPointY); } } void TeXFOTBuilder::setBoxNIC(const BoxNIC &nic) { setDisplayNIC(nic); setInlineNIC(nic); // BoxNIC MAYBESET("IsDisplay",nic.isDisplay,symbolFalse); } void TeXFOTBuilder::setRuleNIC(const RuleNIC &nic) { setDisplayNIC(nic); setInlineNIC(nic); // Rule NIC set("Orientation",nic.orientation); if (nic.hasLength) set("Length",nic.length); } void TeXFOTBuilder::setLeaderNIC(const LeaderNIC &nic) { setInlineNIC(nic); if (nic.hasLength) set("Length",nic.length); } void TeXFOTBuilder::setParagraphNIC(const ParagraphNIC &nic) { setDisplayNIC(nic); } void TeXFOTBuilder::setCharacterNIC(const CharacterNIC &nic) { if (nic.specifiedC & (1 << CharacterNIC::cChar)) set("Ch",(unsigned long)nic.ch); if (nic.specifiedC & (1 << CharacterNIC::cGlyphId)) set("GlyphId",nic.glyphId); if (nic.specifiedC & (1 << CharacterNIC::cBreakBeforePriority)) set("BreakBeforePriority",nic.breakBeforePriority); if (nic.specifiedC & (1 << CharacterNIC::cBreakAfterPriority)) set("BreakAfterPriority",nic.breakAfterPriority); if (nic.specifiedC & (1 << CharacterNIC::cMathClass)) set("MathClass",nic.mathClass); if (nic.specifiedC & (1 << CharacterNIC::cMathFontPosture)) set("MathFontPosture",nic.mathFontPosture); if (nic.specifiedC & (1 << CharacterNIC::cScript)) set("Script",(long unsigned int)nic.script); if (nic.specifiedC & (1 << CharacterNIC::cIsDropAfterLineBreak)) set("IsDropAfterLineBreak",nic.isDropAfterLineBreak); if (nic.specifiedC & (1 << CharacterNIC::cIsDropUnlessBeforeLineBreak)) set("IsDropUnlessBeforeLineBreak",nic.isDropUnlessBeforeLineBreak); if (nic.specifiedC & (1 << CharacterNIC::cIsPunct)) set("IsPunct",nic.isPunct); if (nic.specifiedC & (1 << CharacterNIC::cIsInputWhitespace)) set("IsInputWhiteSpace",nic.isInputWhitespace); if (nic.specifiedC & (1 << CharacterNIC::cIsInputTab)) set("IsInputTab",nic.isInputTab); if (nic.specifiedC & (1 << CharacterNIC::cIsRecordEnd)) set("IsRecordEnd",nic.isRecordEnd); if (nic.specifiedC & (1 << CharacterNIC::cIsSpace)) set("IsSpace",nic.isSpace); MAYBESET("StretchFactor",nic.stretchFactor,1.0); } void TeXFOTBuilder::setLineFieldNIC(const LineFieldNIC &nic) { setInlineNIC(nic); } void TeXFOTBuilder::setTableNIC(const TableNIC &nic) { setDisplayNIC(nic); // TableNIC switch (nic.widthType) { case TableNIC::widthFull: set("TableWidth","full"); break; case TableNIC::widthMinimum: set("TableWidth","minimum"); break; case TableNIC::widthExplicit: set("TableWidth",nic.width); break; } } void TeXFOTBuilder::setTablePartNIC(const TablePartNIC &nic) { setDisplayNIC(nic); } void TeXFOTBuilder::setTableColumnNIC(const TableColumnNIC &nic) { MAYBESET("ColumnIndex",long(nic.columnIndex),0); MAYBESET("NColumnsSpanned",long(nic.nColumnsSpanned),1); if (nic.hasWidth) set("Width",nic.width); } void TeXFOTBuilder::setTableCellNIC(const TableCellNIC &nic) { // FIX ME! // does not deal with "missing" bool yet. MAYBESET("ColumnIndex",long(nic.columnIndex),0); MAYBESET("NColumnsSpanned",long(nic.nColumnsSpanned),1); MAYBESET("NRowsSpanned",long(nic.nRowsSpanned),1); } void TeXFOTBuilder::setGridNIC(const GridNIC &nic) { set("NColumns",nic.nColumns); set("NRows",nic.nRows); } void TeXFOTBuilder::setGridCellNIC(const GridCellNIC &nic) { set("ColumnNumber",nic.columnNumber); set("RowNumber",nic.rowNumber); } // Dump all accumulated inherited characteristics. void TeXFOTBuilder::dumpInherited() { String tem; stringout_.extractString(tem); os() << tem; } void TeXFOTBuilder::message(const MessageType0 &msg) { mgr_->message(msg); } void TeXFOTBuilder::setPageNumberFormat(const StringC &name) { set("PageNumberFormat",name); } void TeXFOTBuilder::setPageNColumns(long n) { NextFormat.FotPageNColumns = n; set("PageNColumns",n); } void TeXFOTBuilder::setPageColumnSep(Length w) { NextFormat.FotPageColumnSep = w; setlength("PageColumnSep",w); } void TeXFOTBuilder::setPageBalanceColumns(bool flag) { set("PageBalanceColumns",flag); } void TeXFOTBuilder::setSubscriptDepth(Length w) { setlength("SubScriptDepth",w); } void TeXFOTBuilder::setOverMarkHeight(Length w) { setlength("OverMarkHeight",w); } void TeXFOTBuilder::setUnderMarkDepth(Length w) { setlength("UnderMarkDepth",w); } void TeXFOTBuilder::setSuperscriptHeight(Length w) { setlength("SuperscriptHeight",w); } void TeXFOTBuilder::setGridRowSep(Length w) { setlength("GridRowsep",w); } void TeXFOTBuilder::setGridColumnSep(Length w) { setlength("GridColumnSep",w); } void TeXFOTBuilder::setHeadingLevel(long n) { set("HeadingLevel",n); } void TeXFOTBuilder::setPageNumberRestart(bool flag) { set("PageNumberRestart",flag); } void TeXFOTBuilder::startPageFloat(const PageFloatNIC &nic) { setPageFloatNIC(nic); startGroup("PageFloat"); } void TeXFOTBuilder::endPageFloat() { endGroup("PageFloat"); } void TeXFOTBuilder::startPageFootnote() { startBrace("PageFootnote"); } void TeXFOTBuilder::endPageFootnote() { endBrace("PageFootnote"); } void TeXFOTBuilder::setPageFloatNIC(const PageFloatNIC &nic) { set("placement",nic.placement); } TeXFOTBuilder::PageFloatNIC::~PageFloatNIC() { } void TeXFOTBuilder::extension(const ExtensionFlowObj &fo, const NodePtr &nd) { ((const TeXExtensionFlowObj &)fo).atomic(*this, nd); } void TeXFOTBuilder::startExtensionSerial(const CompoundExtensionFlowObj &fo, const NodePtr &nd) { ((const TeXCompoundExtensionFlowObj &)fo).start(*this, nd); } void TeXFOTBuilder::endExtensionSerial(const CompoundExtensionFlowObj &fo) { ((const TeXCompoundExtensionFlowObj &)fo).end(*this); } void TeXFOTBuilder::setPreserveSdata(bool b) { preserveSdata_ = b; } void TeXFOTBuilder::charactersFromNode(const NodePtr &nd, const Char *s, size_t n) { GroveString name; if (preserveSdata_ && n == 1 && nd->getEntityName(name) == accessOK) os() << "\\Entity{" << name << '}'; else TeXFOTBuilder::characters(s, n); } #ifdef DSSSL_NAMESPACE } #endif #include "TeXFOTBuilder_inst.cxx" jade-1.2.1/jade/TeXFOTBuilder.h100444 764 764 1006 6606574462 13653 0ustar jjcjjc// This is a -*-c++-*- header. // TeXFOTBuilder.h: a generic TeX backend for Jade. // Written by David Megginson #ifndef TeXFOTBuilder_INCLUDED #define TeXFOTBuilder_INCLUDED 1 #include "OutputByteStream.h" #include "FOTBuilder.h" #include "Message.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif FOTBuilder *makeTeXFOTBuilder(OutputByteStream *, Messenger *, const FOTBuilder::Extension *&); #ifdef DSSSL_NAMESPACE } #endif #endif /* not TeXFOTBuilder_INCLUDED */ jade-1.2.1/jade/TeXFOTBuilder_inst.cxx100444 764 764 3341 6604613142 15252 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Vector.h" #undef SP_DEFINE_TEMPLATES #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_2; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_3; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_4; #endif #endif #endif #ifdef DSSSL_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/jade/TeXFOTBuilder_inst.m4100444 764 764 720 6604607714 14756 0ustar jjcjjc#include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Vector.h" #undef SP_DEFINE_TEMPLATES #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) #ifdef DSSSL_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/jade/TeXMessages.h100444 764 764 5551 6604613152 13460 0ustar jjcjjc// This file was automatically generated from jade/TeXMessages.msg by msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct TeXMessages { // 5000 static const MessageType0 unsupportedPageNumberNonElement; // 5001 static const MessageType0 unsupportedLinkNonElement; // 5002 static const MessageType0 unsupportedLinkEntity; // 5003 static const MessageType0 unsupportedLinkSgmlDoc; // 5004 static const MessageType0 unsupportedLinkHyTime; // 5005 static const MessageType0 unsupportedLinkTei; // 5006 static const MessageType0 unsupportedLinkHtml; // 5007 static const MessageType0 unsupportedGlyphSubstTable; }; const MessageType0 TeXMessages::unsupportedPageNumberNonElement( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5000 #ifndef SP_NO_MESSAGE_TEXT ,"TeX backend does not currently support references to page numbers of nodes other than elements" #endif ); const MessageType0 TeXMessages::unsupportedLinkNonElement( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5001 #ifndef SP_NO_MESSAGE_TEXT ,"TeX backend does not currently support links to nodes other than elements" #endif ); const MessageType0 TeXMessages::unsupportedLinkEntity( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5002 #ifndef SP_NO_MESSAGE_TEXT ,"TeX backend does not currently support links to entities" #endif ); const MessageType0 TeXMessages::unsupportedLinkSgmlDoc( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5003 #ifndef SP_NO_MESSAGE_TEXT ,"TeX backend does not currently support links to other SGML documents" #endif ); const MessageType0 TeXMessages::unsupportedLinkHyTime( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5004 #ifndef SP_NO_MESSAGE_TEXT ,"TeX backend does not currently support HyTime linkends" #endif ); const MessageType0 TeXMessages::unsupportedLinkTei( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5005 #ifndef SP_NO_MESSAGE_TEXT ,"TeX backend does not currently support TEI links" #endif ); const MessageType0 TeXMessages::unsupportedLinkHtml( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5006 #ifndef SP_NO_MESSAGE_TEXT ,"TeX backend does not currently support HTML links" #endif ); const MessageType0 TeXMessages::unsupportedGlyphSubstTable( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5007 #ifndef SP_NO_MESSAGE_TEXT ,"TeX backend does not currently support glyph substitution tables" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/jade/TeXMessages.msg100444 764 764 1470 6604607714 14022 0ustar jjcjjc# Copyright (c) 1997 James Clark # See the file COPYING for copying permission =5000 W0+unsupportedPageNumberNonElement++TeX backend does not currently support references to page numbers of nodes other than elements W0+unsupportedLinkNonElement++TeX backend does not currently support links to nodes other than elements W0+unsupportedLinkEntity++TeX backend does not currently support links to entities W0+unsupportedLinkSgmlDoc++TeX backend does not currently support links to other SGML documents W0+unsupportedLinkHyTime++TeX backend does not currently support HyTime linkends W0+unsupportedLinkTei++TeX backend does not currently support TEI links W0+unsupportedLinkHtml++TeX backend does not currently support HTML links W0+unsupportedGlyphSubstTable++TeX backend does not currently support glyph substitution tables jade-1.2.1/jade/TeXMessages.rc100444 764 764 1150 6604613152 13624 0ustar jjcjjcSTRINGTABLE BEGIN 5000, "TeX backend does not currently support references to page numbers of nodes other than elements" 5001, "TeX backend does not currently support links to nodes other than elements" 5002, "TeX backend does not currently support links to entities" 5003, "TeX backend does not currently support links to other SGML documents" 5004, "TeX backend does not currently support HyTime linkends" 5005, "TeX backend does not currently support TEI links" 5006, "TeX backend does not currently support HTML links" 5007, "TeX backend does not currently support glyph substitution tables" END jade-1.2.1/jade/TmpOutputByteStream.h100444 764 764 2237 6604607714 15256 0ustar jjcjjc#ifndef TmpOutputByteStream_INCLUDED #define TmpOutputByteStream_INCLUDED 1 #include "OutputByteStream.h" #include "Boolean.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif #ifdef SP_NAMESPACE using namespace SP_NAMESPACE; #endif class TmpOutputByteStream : public OutputByteStream { public: enum { bufSize = 1024 }; struct Block { Block *next; char buf[bufSize]; }; class Iter { public: Iter(const TmpOutputByteStream &sb) : block_(sb.head_), lastBlockUsed_(sb.lastBlockUsed()) { } bool next(const char *&p, size_t &n) { if (block_) { p = block_->buf; n = block_->next ? TmpOutputByteStream::bufSize : lastBlockUsed_; block_ = block_->next; return 1; } else return 0; } private: Block *block_; size_t lastBlockUsed_; }; TmpOutputByteStream(); ~TmpOutputByteStream(); bool isEmpty() { return head_ == 0; } void flush(); void flushBuf(char ch); private: friend class Iter; size_t lastBlockUsed() const { return last_ ? (ptr_ - last_->buf) : 0; } unsigned nFullBlocks_; Block *head_; Block *last_; }; #ifdef DSSSL_NAMESPACE } #endif #endif /* not OutputByteStream_INCLUDED */ jade-1.2.1/jade/MifFOTBuilder.cxx100444 764 764 617563 6607321310 14305 0ustar jjcjjc/* Copyright (c) 1998 ISOGEN International Corp. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ``Software''), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ISOGEN INTERNATIONAL CORP. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of ISOGEN International Corp. shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from ISOGEN International Corp. */ /* Created by Kathleen Marszalek and Paul Prescod. */ #include "config.h" #ifdef JADE_MIF #include "MifFOTBuilder.h" #include "MifMessages.h" #include "TmpOutputByteStream.h" #include "CharMap.h" #include "CmdLineApp.h" #include "ErrnoMessageArg.h" #include "FOTBuilder.h" #include "Hash.h" #include "HashTable.h" #include "IList.h" #include "IQueue.h" #include "InputSource.h" #include "Message.h" #include "OutputByteStream.h" #include "Owner.h" #include "PointerTable.h" #include "StorageManager.h" #include "StringC.h" #include "Vector.h" #include #include #include #include #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif //#define assert(exp) (void)( (exp) || (throw "assertion_failed", 0) ) #define PROPERTY( propertyType, propertyName ) \ propertyType propertyName; \ void set ## propertyName ( propertyType p ) \ { propertyName = p; setProperties |= f ## propertyName ;} #define PROPERTY_OUT( propertyName ) \ if( properties & f ## propertyName ) \ os << '\n' << MifOutputByteStream::INDENT \ << "<" #propertyName " " << propertyName << ">"; #define VECTOR_OF_PROPERTIES( propertyType, propertyName ) \ Vector< propertyType > propertyName ## s; \ void propertyName ## sAreSet() \ { setProperties |= f ## propertyName ## s ;} #define STATIC_PROPERTY( propertyType, propertyName ) \ static propertyType propertyName; \ static void set ## propertyName ( propertyType p ) \ { propertyName = p; setProperties |= f ## propertyName ;} class StringHash { public: static unsigned long hash( const String & ); }; class MifOutputByteStream; class MifTmpOutputByteStream; class MifDoc { public: MifDoc( const String &fileLoc, CmdLineApp *app ); ~MifDoc(); static MifDoc &curInstance() { assert( CurInstance != NULL ); return *CurInstance; } static MifDoc *CurInstance; struct T_indent { T_indent( unsigned i ) : data( i ) {} long data; operator unsigned() const { return data; } }; struct T_dimension { T_dimension( long u = 0 ) : data( u ) {} long data; operator long() const { return data; } T_dimension &operator=( long s ) { data = s; return *this; } }; struct T_string : public String { T_string() : String() {}; T_string( const String &s ) : String( s ) {}; T_string( String &s ) : String() { for( size_t i = 0; i < s.size(); i++ ) *this += char( s[i] ); } T_string( const char *cS ) : String( cS, strlen( cS ) ) {}; T_string &operator=( String s ) { String::operator=( s ); return *this; } void escapeSpecialChars(); }; struct T_boolean { T_boolean( bool b = false ) : data( b ) {} bool data; operator bool() const { return data; } T_boolean &operator=( bool b ) { data = b; return *this; } }; typedef T_string T_tagstring; typedef T_string T_pathname; typedef String T_keyword; typedef long T_integer; typedef unsigned T_ID; typedef long T_degrees; typedef double T_percentage; typedef long T_metric; struct T_WH { T_dimension w, h; // width, height T_WH( T_dimension w_, T_dimension h_ ) : w( w_ ), h( h_ ) {} T_WH() : w( 0L ), h( 0L ) {} }; struct T_XY { T_dimension x, y; T_XY( T_dimension x_, T_dimension y_ ) : x( x_ ), y( y_ ) {} T_XY() : x( 0L ), y( 0L ) {} }; struct T_LTRB { T_dimension l, t, r, b; // left, top, right, bottom T_LTRB( T_dimension l_, T_dimension t_, T_dimension r_, T_dimension b_ ) : l( l_ ), t( t_ ), r( r_ ), b( b_ ) {} T_LTRB() : l( 0L ), t( 0L ), r( 0L ), b( 0L ) {} }; struct T_LTWH { T_dimension l, t, w, h; // left, top, width, height T_LTWH( T_dimension l_, T_dimension t_, T_dimension w_, T_dimension h_ ) : l( l_ ), t( t_ ), w( w_ ), h( h_ ) {} T_LTWH() : l( 0L ), t( 0L ), w( 0L ), h( 0L ) {} }; struct T_XYWH { T_dimension x, y, w, h; }; // special characters static const String sTab; static const String sHardSpace; static const String sSoftHyphen; static const String sHardHyphen; static const String sHardReturn; static const String sNumberSpace; static const String sThinSpace; static const String sEnSpace; static const String sEmSpace; static const String sCent; static const String sPound; static const String sYen; static const String sEnDash; static const String sEmDash; static const String sDagger; static const String sDoubleDagger; static const String sBullet; // for tagged text flows static const String sA; // FWeight static const String sRegular; static const String sBold; // FAngle // sRegular; static const String sItalic; // FVar // sRegular; // FColor static const String sWhite; static const String sBlack; // FUnderlining static const String sFNoUnderlining; static const String sFSingle; static const String sFDouble; static const String sFNumeric; // FPosition static const String sFNormal; static const String sFSuperscript; static const String sFSubscript; // FCase static const String sFAsTyped; static const String sFSmallCaps; static const String sFLowercase; static const String sFUppercase; // FFamily static const String sTimesNewRoman; struct FontFormat : public Link { enum { fNone = 0, fFFamily = 0x1, fFAngle = 0x2, fFWeight = 0x4, fFVar = 0x8, fFSize = 0x10, fFColor = 0x20, fFUnderlining = 0x40, fFOverline = 0x80, fFStrike = 0x100, fFPosition = 0x200, fFPairKern = 0x400, fFCase = 0x800, fFDX = 0x1000, fFDY = 0x2000, fFDW = 0x4000, fAll = 0x7FFF }; unsigned setProperties; FontFormat() : setProperties( 0 ) {} // font name PROPERTY( T_string, FFamily ); PROPERTY( T_string, FAngle ); PROPERTY( T_string, FWeight ); PROPERTY( T_string, FVar ); // font size and color PROPERTY( T_dimension, FSize ); PROPERTY( T_tagstring, FColor ); // font style PROPERTY( T_keyword, FUnderlining ); PROPERTY( T_boolean, FOverline ); PROPERTY( T_boolean, FStrike ); PROPERTY( T_keyword, FPosition ); PROPERTY( T_boolean, FPairKern ); PROPERTY( T_keyword, FCase ); // kerning information PROPERTY( T_percentage, FDX ); PROPERTY( T_percentage, FDY ); PROPERTY( T_percentage, FDW ); void setDSSSLDefaults() { setFFamily( sTimesNewRoman ); setFAngle( sRegular ); setFWeight( sRegular ); setFVar( sRegular ); setFSize( 10000 ); setFColor( sBlack ), setFUnderlining( sFNoUnderlining ); setFOverline( false ); setFStrike( false ); setFPosition( sFNormal ); setFPairKern( false ); setFCase( sFAsTyped ); setFDX( 0 ); setFDY( 0 ); setFDW( 0 ); } enum FontStatement { stPgfFont, stFont }; unsigned compare( FontFormat &f ); void setFrom( FontFormat &f, unsigned properties ); void out( MifOutputByteStream &os, unsigned properties, FontStatement fontStatement ); void ffOut( MifOutputByteStream &os, unsigned properties, FontStatement fontStatement ) { out( os, properties, fontStatement ); } void out( MifOutputByteStream &os, FontStatement fontStatement ) { out( os, setProperties, fontStatement ); } void ffOut( MifOutputByteStream &os, FontStatement fontStatement ) { out( os, fontStatement ); } void updateFrom( FontFormat & ); void ffUpdateFrom( FontFormat &f ) { updateFrom( f ); } void clearSetProperties() { setProperties = 0; } }; static const String sNONE; // paragraph formats static const String sDefaultPgfFormat; static const String sHeader; static const String sFooter; // PgfAlignment static const String sLeftRight; static const String sLeft; static const String sRight; static const String sCenter; // PgfLineSpacing static const String sFixed; static const String sProportional; // PgfCellAlignment static const String sTop; static const String sMiddle; static const String sBottom; // PgfPlacement static const String sAnywhere; static const String sColumnTop; static const String sPageTop; static const String sLPageTop; static const String sRPageTop; // PgfPlacementStyle static const String sNormal; static const String sStraddle; // PgfLanguage static const String sNoLanguage; static const String sUSEnglish; static const String sUKEnglish; static const String sGerman; static const String sSwissGerman; static const String sFrench; static const String sCanadianFrench; static const String sSpanish; static const String sCatalan; static const String sItalian; static const String sPortuguese; static const String sBrazilian; static const String sDanish; static const String sDutch; static const String sNorwegian; static const String sNynorsk; static const String sFinnish; static const String sSwedish; // TStype // sLeft; // sRight; // sCenter; static const String sDecimal; // TSLeaderStr; static const String sSPACE; struct TabStop { enum { fNone = 0, fTSX = 0x1, fTSType = 0x2, fTSLeaderStr = 0x4, fTSDecimalChar = 0x8, fAll = 0xF }; unsigned setProperties; TabStop( T_keyword type = sLeft, T_dimension x = 0, T_string tSLeaderStr = sSPACE ) : TSX( x ), TSType( type ), setProperties( fTSType | fTSX ) { setTSLeaderStr( tSLeaderStr ); } PROPERTY( T_dimension, TSX ); PROPERTY( T_keyword, TSType ); PROPERTY( T_string, TSLeaderStr ); PROPERTY( T_integer, TSDecimalChar ); void out( MifOutputByteStream &os ); }; struct ParagraphFormat : public FontFormat { enum { fNone = 0, fPgfFIndent = 0x1, fPgfLIndent = 0x2, fPgfRIndent = 0x4, fPgfAlignment = 0x8, fPgfSpBefore = 0x10, fPgfSpAfter = 0x20, fPgfLineSpacing = 0x40, fPgfLeading = 0x80, fPgfWithPrev = 0x100, fPgfWithNext = 0x200, fPgfBlockSize = 0x400, fPgfAutoNum = 0x800, fPgfNumFormat = 0x1000, fPgfNumberFont = 0x2000, fPgfHyphenate = 0x4000, fHyphenMaxLines = 0x8000, fHyphenMinPrefix = 0x10000, fHyphenMinSuffix = 0x20000, fHyphenMinWord = 0x40000, fPgfLetterSpace = 0x80000, fPgfLanguage = 0x100000, fPgfCellAlignment = 0x200000, fPgfCellMargins = 0x400000, fPgfCellLMarginFixed = 0x800000, fPgfCellTMarginFixed = 0x1000000, fPgfCellRMarginFixed = 0x2000000, fPgfCellBMarginFixed = 0x4000000, fPgfTag = 0x8000000, fTabStops = 0x10000000, fPgfPlacement = 0x20000000, fPgfNumTabs = 0x40000000, fPgfPlacementStyle = 0x80000000, fAll = 0xFFFFFFFF }; unsigned setProperties; ParagraphFormat() : setProperties( 0 ) {} // basic properties PROPERTY( T_tagstring, PgfTag ); PROPERTY( T_dimension, PgfFIndent ); PROPERTY( T_dimension, PgfLIndent ); PROPERTY( T_dimension, PgfRIndent ); PROPERTY( T_keyword, PgfAlignment ); PROPERTY( T_dimension, PgfSpBefore ); PROPERTY( T_dimension, PgfSpAfter ); PROPERTY( T_keyword, PgfLineSpacing ); PROPERTY( T_dimension, PgfLeading ); PROPERTY( T_integer, PgfNumTabs ); Vector TabStops; // default font properties // pagination properties PROPERTY( T_keyword, PgfPlacement ); PROPERTY( T_keyword, PgfPlacementStyle ); PROPERTY( T_boolean, PgfWithPrev ); PROPERTY( T_boolean, PgfWithNext ); PROPERTY( T_integer, PgfBlockSize ); // numbering properties PROPERTY( T_boolean, PgfAutoNum ); PROPERTY( T_string, PgfNumFormat ); PROPERTY( T_tagstring, PgfNumberFont ); // advanced properties PROPERTY( T_boolean, PgfHyphenate ); PROPERTY( T_integer, HyphenMaxLines ); PROPERTY( T_integer, HyphenMinPrefix ); PROPERTY( T_integer, HyphenMinSuffix ); PROPERTY( T_integer, HyphenMinWord ); PROPERTY( T_boolean, PgfLetterSpace ); PROPERTY( T_keyword, PgfLanguage ); // table cell properties PROPERTY( T_keyword, PgfCellAlignment ); PROPERTY( T_LTRB, PgfCellMargins ); PROPERTY( T_boolean, PgfCellLMarginFixed ); PROPERTY( T_boolean, PgfCellTMarginFixed ); PROPERTY( T_boolean, PgfCellRMarginFixed ); PROPERTY( T_boolean, PgfCellBMarginFixed ); // miscellaneous properties // none void setDSSSLDefaults() { FontFormat::setDSSSLDefaults(); setPgfFIndent( 0 ); setPgfLIndent( 0 ); setPgfRIndent( 0 ); setPgfAlignment( sLeft ); setPgfSpBefore( 0 ); setPgfSpAfter( 0 ); setPgfLineSpacing( sFixed ); setPgfLeading( 0 ); setPgfNumTabs( 0 ); setPgfWithPrev( false ); setPgfWithNext( false ); setPgfBlockSize( 2 ); setPgfAutoNum( false ); // setPgfNumFormat( sNONE ); // setPgfNumberFont( sNONE ); setPgfHyphenate( false ); setHyphenMaxLines( 999 ); setHyphenMinPrefix( 2 ); setHyphenMinSuffix( 2 ); setHyphenMinWord( 2 ); setPgfLetterSpace( false ); setPgfLanguage( sNoLanguage ); setPgfCellAlignment( sTop ); setPgfCellMargins( T_LTRB( 0, 0, 0, 0 ) ); setPgfCellLMarginFixed( true ); setPgfCellTMarginFixed( true ); setPgfCellRMarginFixed( true ); setPgfCellBMarginFixed( true ); // setPgfTag( sNONE ); setPgfPlacement( sAnywhere ); setPgfPlacementStyle( sNormal ); } void forceSetProperties( unsigned properties, unsigned fontProperties ) { setProperties = properties; FontFormat::setProperties = fontProperties; } unsigned &ffSetProperties() { return FontFormat::setProperties; } unsigned compare( ParagraphFormat & ); void setFrom( ParagraphFormat &, unsigned, unsigned ); void out( MifOutputByteStream &os, unsigned, unsigned, bool excludeCellProperties = true ); void out( MifOutputByteStream &os, bool excludeCellProperties = true ) { out( os, setProperties, (unsigned)FontFormat::setProperties, excludeCellProperties ); } void updateFrom( ParagraphFormat & ); void clearSetProperties() { setProperties = 0; FontFormat::clearSetProperties(); } }; // DPageNumStyle static const String sArabic; static const String sUCRoman; static const String sLCRoman; static const String sUCAlpha; static const String sLCAlpha; // DParity static const String sFirstLeft; static const String sFirstRight; struct Document { enum { fNone = 0, fDPageSize = 0x1, fDStartPage = 0x2, fDPageNumStyle = 0x4, fDTwoSides = 0x8, fDParity = 0x10, fDMargins = 0x20, fDColumns = 0x40, fDColumnGap = 0x80, fAll = 0xFF }; unsigned setProperties; Document() : setProperties( fNone ) {} // column properties PROPERTY( T_LTRB, DMargins ); PROPERTY( T_integer, DColumns ); PROPERTY( T_dimension, DColumnGap ); PROPERTY( T_WH, DPageSize ); // pagination PROPERTY( T_integer, DStartPage ); PROPERTY( T_keyword, DPageNumStyle ); PROPERTY( T_boolean, DTwoSides ); PROPERTY( T_keyword, DParity ); void out( MifOutputByteStream &os ); }; struct Object { enum { fNone = 0, fID = 0x1, fPen = 0x2, fFill = 0x4, fPenWidth = 0x8, fObjectNext = 0x10, fObColor = 0x20 }; unsigned setProperties; Object( T_integer pen = 15, T_integer fill = 15, T_dimension penWidth = 0, const T_tagstring &obColor = sBlack ) : setProperties( 0 ) { setID( ++IDCnt ); setPen( pen ); setFill( fill ); setPenWidth( penWidth ); setObColor( obColor ); } static T_ID IDCnt; PROPERTY( T_integer, ID ); PROPERTY( T_integer, Pen ); PROPERTY( T_integer, Fill ); PROPERTY( T_dimension, PenWidth ); PROPERTY( T_tagstring, ObColor ); void outObjectProperties( MifOutputByteStream &os ); virtual void out( MifOutputByteStream &os ) = 0; }; // HeadCap/TailCap static const String sButt; static const String sRound; static const String sSquare; struct PolyLine : public Object { enum { fHeadCap = fObjectNext << 1, fTailCap = fHeadCap << 1 }; PolyLine( T_keyword cap, T_integer pen = 15, T_integer fill = 15, T_dimension penWidth = 0, const T_tagstring &obColor = sBlack ) : Object( pen, fill, penWidth, obColor ) { setHeadCap( cap ); setTailCap( cap ); } PROPERTY( T_keyword, HeadCap ); PROPERTY( T_keyword, TailCap ); Vector Points; void out( MifOutputByteStream &os ); }; struct ImportObject : public Object { enum { fImportObFileDI = fObjectNext << 1, fBitMapDpi = fImportObFileDI << 1, fShapeRect = fBitMapDpi << 1, fImportObFixedSize = fShapeRect << 1, fNativeOrigin = fImportObFixedSize << 1 }; ImportObject( T_pathname importObFileDI, T_LTWH shapeRect, T_boolean importObFixedSize = true, T_integer bitMapDpi = 72 ) : Object() { setImportObFileDI( importObFileDI ); setShapeRect( shapeRect ); setImportObFixedSize( importObFixedSize ); setBitMapDpi( bitMapDpi ); } PROPERTY( T_pathname, ImportObFileDI ); PROPERTY( T_integer, BitMapDpi ); PROPERTY( T_LTWH, ShapeRect ); PROPERTY( T_boolean, ImportObFixedSize ); PROPERTY( T_XY, NativeOrigin ); void out( MifOutputByteStream &os ); }; // FrameType static const String sInline; static const String sRunIntoParagraph; static const String sBelow; // AnchorAlign // Left // Center // Right // Inside // Outside struct Frame : public Object { enum { fShapeRect = fObjectNext << 1, fFrameType = fShapeRect << 1, fNSOffset = fFrameType << 1, fBLOffset = fNSOffset << 1, fAnchorAlign = fBLOffset << 1 }; Frame() : Object() {} PROPERTY( T_LTWH, ShapeRect ); PROPERTY( T_keyword, FrameType ); PROPERTY( T_dimension, NSOffset ); PROPERTY( T_dimension, BLOffset ); PROPERTY( T_keyword, AnchorAlign ); Vector Objects; void out( MifOutputByteStream &os ); }; struct TextRect : public Object { enum { fID = fObjectNext << 1, fShapeRect = fID << 1, fTRNumColumns = fShapeRect << 1, fTRColumnGap = fTRNumColumns << 1, fTRColumnBalance = fTRColumnGap << 1 }; TextRect() : Object() {} TextRect( T_LTWH shapeRect, T_integer tRNumColumns = 1, T_dimension tRColumnGap = 0, bool tRColumnBalance = false ) : Object() { setShapeRect( shapeRect ); setTRNumColumns( tRNumColumns ); setTRColumnGap( tRColumnGap ); setTRColumnBalance( tRColumnBalance ); } PROPERTY( T_LTWH, ShapeRect ); PROPERTY( T_integer, TRNumColumns ); PROPERTY( T_dimension, TRColumnGap ); PROPERTY( T_boolean, TRColumnBalance ); void out( MifOutputByteStream &os ); }; // PageType static const String sLeftMasterPage; static const String sRightMasterPage; static const String sOtherMasterPage; static const String sBodyPage; // PageTag static const String sFirst; // sLeft // sRight struct Page { enum { fNone = 0, fPageType = 0x1, fPageTag = 0x2, fPageBackground = 0x4 }; unsigned setProperties; Page( T_keyword pageType, T_tagstring pageTag = sNONE, T_tagstring pageBackground = sNONE ) : PageType( pageType ), PageTag( pageTag ), PageBackground( pageBackground ), setProperties( fPageType | fPageTag ) { if( PageTag != sNONE ) setProperties |= fPageTag; if( PageBackground != sNONE ) setProperties |= fPageBackground; } Page() : PageType( MifDoc::sRightMasterPage ), setProperties( fPageType ) {} PROPERTY( T_keyword, PageType ); PROPERTY( T_tagstring, PageTag ); PROPERTY( T_tagstring, PageBackground ); // keyword in MIF Vector TextRects; void out( MifOutputByteStream &os ); }; struct TagStream { enum TagStreamClass { tsTagStream, tsTextFlow, tsCell, tsPara } TagStreamClass; TagStream( T_indent osIndent = 2 ); ~TagStream(); T_tagstring InitialPgfTag; bool PgfTagUsed; ParagraphFormat &format() { return Format; } MifTmpOutputByteStream &content() { assert( Content != NULL ); return *Content; } void setParagraphFormat( ParagraphFormat &pf ) { Format = pf; } protected: MifTmpOutputByteStream *Content; ParagraphFormat Format; }; struct TextFlow : public TagStream { enum { fNone = 0, fTFTag = 0x1, fTFAutoConnect = 0x02 }; unsigned setProperties; TextFlow() : setProperties( fNone ), TextRectIDUsed( false ) { TagStreamClass = tsTextFlow; } TextFlow( const TextRect &textRect, bool body, ParagraphFormat *format = NULL, T_tagstring pgfTag = sNONE ); T_ID TextRectID; // for ParaLine (not in MIF) bool TextRectIDUsed; PROPERTY( T_tagstring, TFTag ); PROPERTY( T_boolean, TFAutoConnect ); const TextRect *textRect() { assert( TextRect_ != NULL ); return TextRect_; } void out( MifOutputByteStream &os, bool resolveCrossReferences = false ); protected: const TextRect *TextRect_; }; struct Para : public TagStream { enum { fNone = 0, fPgfTag = 0x1, fParagraphFormat = 0x2 }; unsigned setProperties; Para( T_indent osIndent = 2 ) : TagStream( osIndent ), setProperties( fParagraphFormat ), leaderTabsSet( false ) { TagStreamClass = tsPara; } static bool currentlyOpened; bool leaderTabsSet; PROPERTY( T_tagstring, PgfTag ); ParagraphFormat &curFormat() { return CurFormat; } void out( MifOutputByteStream &os ); void outProlog( MifOutputByteStream &os ); static void outSimpleProlog( MifOutputByteStream &os ); static void outEpilog( MifOutputByteStream &os ); protected: ParagraphFormat CurFormat; }; struct ParaLine { enum { fNone = 0, fTextRectID = 0x1, fATbl = 0x2 }; static unsigned setProperties; STATIC_PROPERTY( T_ID, TextRectID ); STATIC_PROPERTY( T_ID, ATbl ); static void outProlog( MifOutputByteStream &os ); static void outEpilog( MifOutputByteStream &os ); }; struct PgfCatalog { Vector ParaFormats; void out( MifOutputByteStream &os ); }; struct Color { enum { fColorTag = 0x1, fColorCyan = 0x2, fColorMagenta = 0x4, fColorYellow = 0x8, fColorBlack = 0x10 }; unsigned setProperties; Color() : setProperties( 0 ) {} Color( unsigned char red, unsigned char green, unsigned char blue ); PROPERTY( T_tagstring, ColorTag ); PROPERTY( T_percentage, ColorCyan ); PROPERTY( T_percentage, ColorMagenta ); PROPERTY( T_percentage, ColorYellow ); PROPERTY( T_percentage, ColorBlack ); static const String &key( Color &color ); void out( MifOutputByteStream &os ) const; }; struct ColorCatalog { PointerTable,StringHash,Color> Colors; void out( MifOutputByteStream &os ); }; // TblAlignment // Left // Center // Right static const String sInside; static const String sOutside; struct Ruling { enum { fNone = 0, fRulingTag = 0x1, fRulingPenWidth = 0x2, fRulingGap = 0x4, fRulingPen = 0x8, fRulingLines = 0x10, fRulingColor = 0x20 }; unsigned setProperties; Ruling() : setProperties( 0 ), RulingPenWidth( 1000 ), RulingGap( 1000 ), RulingPen( 0 ), RulingLines( 1 ) {}; Ruling( T_tagstring RulingTag_ ) : setProperties( 0 ), RulingPenWidth( 1000 ), RulingGap( 1000 ), RulingPen( 0 ), RulingLines( 1 ) { setRulingTag( RulingTag_ ); } PROPERTY( T_tagstring, RulingTag ); PROPERTY( T_dimension, RulingPenWidth ); PROPERTY( T_dimension, RulingGap ); PROPERTY( T_tagstring, RulingColor ); PROPERTY( T_integer, RulingPen ); PROPERTY( T_integer, RulingLines ); static const String &key( Ruling & ); void out( MifOutputByteStream &os ) const; String Key; }; struct RulingCatalog { PointerTable,StringHash,Ruling> Rulings; void out( MifOutputByteStream &os ); }; struct Cell : public TagStream { enum { fNone = 0, fCellLRuling = 0x1, fCellBRuling = 0x2, fCellRRuling = 0x4, fCellTRuling = 0x8, fCellColumns = 0x10, fCellRows = 0x20, fCellFill = 0x40, fCellColor = 0x80 }; unsigned setProperties; Cell( T_indent osIndent = 12 ) : TagStream( osIndent ), setProperties( 0 ) { TagStreamClass = tsCell; } PROPERTY( T_integer, CellFill ); PROPERTY( T_tagstring, CellColor ); PROPERTY( T_tagstring, CellLRuling ); PROPERTY( T_tagstring, CellBRuling ); PROPERTY( T_tagstring, CellRRuling ); PROPERTY( T_tagstring, CellTRuling ); PROPERTY( T_integer, CellColumns ); PROPERTY( T_integer, CellRows ); void out( MifOutputByteStream &os, bool resolveCrossReferences = false ); }; struct Row { Vector Cells; void out( MifOutputByteStream &os, bool resolveCrossReferences = false ); }; struct TblColumn { enum { fNone = 0, fTblColumnNum = 0x1, fTblColumnWidth = 0x2 }; unsigned setProperties; TblColumn() : setProperties( 0 ), TblColumnNum( 0 ), TblColumnWidth( 0 ) {}; TblColumn( T_integer TblColumnNum_, T_dimension TblColumnWidth_ ) : setProperties( 0 ) { setTblColumnNum( TblColumnNum_ ); setTblColumnWidth( TblColumnWidth_ ); } PROPERTY( T_integer, TblColumnNum ); PROPERTY( T_dimension, TblColumnWidth ); void out( MifOutputByteStream &os ); }; // TblTitlePlacement static const String sNone; struct TblFormat { enum { fNone = 0, fTblTag = 0x1, fTblLIndent = 0x2, fTblRIndent = 0x4, fTblSpBefore = 0x8, fTblSpAfter = 0x10, fTblAlignment = 0x20, fTblCellMargins = 0x40, fTblWidth = 0x80, fTblTitlePlacement = 0x100, fAll = 0x1ff }; unsigned setProperties; TblFormat() : setProperties( 0 ) {} TblFormat( T_tagstring TblTag_ ) : setProperties( 0 ) { setTblTag( TblTag_ ); } void setDSSSLDefaults() { setTblLIndent( 0 ); setTblRIndent( 0 ); setTblSpBefore( 0 ); setTblSpAfter( 0 ); setTblAlignment( sLeft ); setTblCellMargins( T_LTRB( 0, 0, 0, 0 ) ); setTblTitlePlacement( sNone ); } // basic properties PROPERTY( T_tagstring, TblTag ); PROPERTY( T_dimension, TblLIndent ); PROPERTY( T_dimension, TblRIndent ); PROPERTY( T_dimension, TblSpBefore ); PROPERTY( T_dimension, TblSpAfter ); PROPERTY( T_keyword, TblAlignment ); PROPERTY( T_LTRB, TblCellMargins ); PROPERTY( T_keyword, TblTitlePlacement ); // column properties PROPERTY( T_dimension, TblWidth ); Vector TblColumns; void out( MifOutputByteStream &os ); }; struct TblCatalog { Vector TblFormats; void out( MifOutputByteStream &os ); }; // TblTag static const String sDefaultTblFormat; struct Tbl { enum { fNone = 0, fTblID = 0x1, fTblTag = 0x2, fTblNumColumns = 0x4, fTblColumnWidths = 0x8, fTblFormat = 0x10 }; unsigned setProperties; Tbl() : setProperties( 0 ), TblIDUsed( false ) { setTblID( MifDoc::CurInstance->nextID() ); setTblTag( MifDoc::sDefaultTblFormat ); } PROPERTY( T_ID, TblID ); PROPERTY( T_tagstring, TblTag ); bool TblIDUsed; TblFormat tblFormat; // table columns PROPERTY( T_integer, TblNumColumns ); VECTOR_OF_PROPERTIES( T_dimension, TblColumnWidth ); // table rows Vector TblH; Vector TblBody; Vector TblF; void out( MifOutputByteStream &os, bool resolveCrossReferences = false ); }; // paragraph formats static const String sPageNumXRefFormatName; struct XRefFormat { enum { fXRefName = 0x1, fXRefDef = 0x2 }; unsigned setProperties; XRefFormat() {} XRefFormat( T_string XRefName_, T_string XRefDef_ ) { setXRefName( XRefName_ ); setXRefDef( XRefDef_ ); } PROPERTY( T_string, XRefName ); PROPERTY( T_string, XRefDef ); void out( MifOutputByteStream &os ); }; static char escapeChar() { return '\x0'; } struct CrossRefInfo { enum InfoType { PotentialMarker, XRef, HypertextLink } Type; CrossRefInfo() {} CrossRefInfo ( unsigned long groveIndex_, unsigned long elementIndex_, int tagIndent_, InfoType type_, const Char *id, size_t idLen ) : groveIndex( groveIndex_ ), elementIndex( elementIndex_ ), tagIndent( tagIndent_ ), Type( type_ ) { if( id != NULL && idLen > 0 ) sgmlId.assign( id, idLen ); } InfoType type() { return Type; } void out( MifOutputByteStream &os ); T_string crossRefText() const; unsigned long groveIndex; unsigned long elementIndex; int tagIndent; StringC sgmlId; }; struct XRef { enum { fXRefName = 0x1, fXRefSrcFile = 0x2, fXRefText = 0x4, fXRefSrcText }; unsigned setProperties; XRef() {} XRef( CrossRefInfo &crossRefInfo ); XRef( T_tagstring XRefName_, T_string XRefSrcText_, T_string XRefText_, T_pathname XRefSrcFile_ ) { setXRefName( XRefName_ ); setXRefSrcText( XRefSrcText_ ); setXRefText( XRefText_ ); setXRefSrcFile( XRefSrcFile_ ); } PROPERTY( T_tagstring, XRefName ); PROPERTY( T_string, XRefSrcText ); PROPERTY( T_pathname, XRefSrcFile ); PROPERTY( T_string, XRefText ); void out( MifOutputByteStream &os ); }; struct Marker { enum Type { XRef = 9, Index = 2, Hypertext = 8, HypertextLink = 100, HypertextDestination = 101 }; enum { fMType = 0x1, fMText = 0x2 }; unsigned setProperties; Marker() {} Marker( CrossRefInfo &crossRefInfo, bool linkDestinationMode = false ); Marker( T_string MText_, Type MType_ = XRef ) { setMText( MText_ ); setMType( T_integer( MType_ ) ); } PROPERTY( T_integer, MType ); PROPERTY( T_string, MText ); void out( MifOutputByteStream &os ); }; struct BookComponent { BookComponent() : epilogOs( NULL ), pageNumXRefFormatGenerated( false ) {} BookComponent( MifTmpOutputByteStream *epilogOs ); void commit( const String &dirName, bool resolveCrossReferences = true ); String FileName; Vector XRefFormats; Document document; ColorCatalog colorCatalog; PgfCatalog pgfCatalog; TblCatalog tblCatalog; Vector AFrames; Vector Tbls; Vector Pages; Vector TextFlows; RulingCatalog rulingCatalog; bool pageNumXRefFormatGenerated; MifTmpOutputByteStream *epilogOs; }; struct ElementSet { enum ReferenceType { AnyReference = 0xC000, LinkReference = 0x8000, PageReference = 0x4000 }; static unsigned short LINK_TYPE_MASK( ReferenceType refType ) { return (unsigned short)( refType ); } static const unsigned short BOOK_COMPONENT_INDEX_M() { return 0x3FFF; } ElementSet(); struct SgmlIdInfo { SgmlIdInfo( const StringC &sgmlId_, unsigned long groveIndex_ ) : sgmlId( sgmlId_ ), groveIndex( groveIndex_ ), flags( 0 ) {} StringC sgmlId; unsigned short flags; unsigned long groveIndex; static const StringC &key( SgmlIdInfo &sgmlIdInfo) { return sgmlIdInfo.sgmlId; } }; SgmlIdInfo &enforceSgmlId( const StringC &sgmlId, unsigned long groveIndex ); void setReferencedFlag( ReferenceType, unsigned long groveIndex, unsigned long n ); void setReferencedFlag( ReferenceType, unsigned long groveIndex, const StringC &sgmlId ); void setBookComponentIndex( unsigned long groveIndex, unsigned long n, int i ); void setBookComponentIndex( unsigned long groveIndex, const StringC &sgmlId, int i ); bool hasBeenReferenced( ReferenceType, unsigned long groveIndex, unsigned long n ) const; bool hasBeenReferenced( ReferenceType, unsigned long groveIndex, const StringC &sgmlId ); int bookComponentIndex( unsigned long groveIndex, unsigned long n ) const; int bookComponentIndex( unsigned long groveIndex, const StringC &sgmlId ); private: PointerTable SgmlIdInfos; void add( unsigned long groveIndex, unsigned long n, unsigned short flags ); bool getFlags( unsigned long groveIndex, unsigned long n, unsigned short &result ) const; Vector > Flags; }; void commit(); void outTagEnd(); void outHexChar( unsigned code, MifOutputByteStream *o = NULL ); void outHexChar( unsigned code, String &targetString ); void outSpecialChar( const String &charName, MifOutputByteStream *o = NULL ); void beginParaLine(); void endParaLine(); void outPageNumber(); void outBreakingPara( T_keyword pgfPlacement ); void outAFrame( T_ID ID, MifOutputByteStream &os ); Vector &bookComponents() { return BookComponents; }; BookComponent &bookComponent() { assert( bookComponents().size() > 0 ); return bookComponents().back(); } void setCurOs( MifOutputByteStream &os ) { curOs = &os; } MifOutputByteStream &os() { assert( curOs != NULL ); return *curOs; } void setCurTextFlow( TextFlow *tf ) { CurTextFlow = tf; } TextFlow *curTextFlow() { return CurTextFlow; } void setCurCell( Cell *c ) { CurCell = c; } Cell *curCell() { return CurCell; } void setCurTblNum( size_t n ) { CurTblNum = n; } Tbl *curTbl( bool assertNotNull = true ) { if( assertNotNull ) assert( CurTblNum > 0 ); return CurTblNum > 0 ? &bookComponent().Tbls[CurTblNum-1] : (Tbl *)NULL; } void setCurPara( Para *p ) { CurPara = p; } Para *curPara( bool assertNotNull = true ) { if( assertNotNull ) assert( CurPara != NULL ); return CurPara; } void setCurParagraphFormat( ParagraphFormat &pf ) { CurFormat = pf; } ParagraphFormat &curFormat() { return CurFormat; } TagStream &curTagStream() { assert( TagStreamStack.size() > 0 ); return *TagStreamStack.back(); } void enterTextFlow( TextFlow &textFlow ) { enterTagStream( textFlow ); } void exitTextFlow() { setCurTextFlow( NULL ); exitTagStream(); } void enterTableCell( Cell &cell ) { enterTagStream( cell ); } void exitTableCell() { setCurCell( NULL ); exitTagStream(); } void enterPara( Para &p ) { enterTagStream( p ); } void exitPara() { setCurPara( NULL ); exitTagStream(); } void enterBookComponent(); void exitBookComponent(); void enterTagStream( TagStream &tagStream ); void exitTagStream(); T_ID nextID() { return ++NextID; } Document &document() { return bookComponent().document; } PgfCatalog &pgfCatalog() { return bookComponent().pgfCatalog; } TblCatalog &tblCatalog() { return bookComponent().tblCatalog; } RulingCatalog &rulingCatalog() { return bookComponent().rulingCatalog; } ColorCatalog &colorCatalog() { return bookComponent().colorCatalog; } Vector &tbls() { return bookComponent().Tbls; } Vector &pages() { return bookComponent().Pages; } Vector &textFlows() { return bookComponent().TextFlows; } Vector &aFrames() { return bookComponent().AFrames; } ElementSet &elements() { return Elements; } Vector &crossRefInfos() { return CrossRefInfos; } const String &rootOutputFileLoc() { return RootOutputFileLoc; } CmdLineApp *App; protected: Vector CrossRefInfos; ElementSet Elements; void switchToTagStream( TagStream &tagStream, bool startWithDefaultPgfFormat = true ); String RootOutputFileLoc; T_ID NextID; MifOutputByteStream *curOs; Vector BookComponents; size_t CurTblNum; ParagraphFormat CurFormat; TextFlow *CurTextFlow; Cell *CurCell; Para *CurPara; Vector TagStreamStack; }; class MifOutputByteStream { OutputByteStream *os; public: int CurTagIndent; static MifDoc::T_indent INDENT; void indent() { CurTagIndent += 2; } void undent() { CurTagIndent -= 2; assert( CurTagIndent >= 0 ); } MifOutputByteStream( MifDoc::T_indent i = 0 ) : os( NULL ), CurTagIndent( i ) {}; MifOutputByteStream( OutputByteStream &os, MifDoc::T_indent i = 0 ) : os( &os ), CurTagIndent( i ) {}; void setStream( OutputByteStream &s ) { os = &s; } OutputByteStream &stream() { assert( os != NULL ); return *os; } MifOutputByteStream &operator<<( unsigned n ) { stream() << n; return *this; } MifOutputByteStream &operator<<( long n ) { stream() << n; return *this; } MifOutputByteStream &operator<<( char c ) { stream() << c; return *this; } MifOutputByteStream &operator<<( const char *s ) { stream() << s; return *this; } #ifdef SP_WIDE_SYSTEM MifOutputByteStream &operator<<( const String &s ) { for( size_t i = 0; i < s.size(); i++ ) stream() << char( s[i] ); return *this; } #endif MifOutputByteStream &operator<<( const String &s ) { stream() << s; return *this; } MifOutputByteStream &operator<<( const MifDoc::T_string &s ) { stream() << '`'; stream() << s; stream() << '\''; return *this; } MifOutputByteStream &operator<<( const MifDoc::T_percentage &p ) { char buf[32]; sprintf( buf, "%.6f", p ); stream() << buf; return *this; } MifOutputByteStream &operator<<( const MifDoc::T_dimension &d ) { char buf[32]; int i; sprintf( buf, "%li.%.3i%n", long(d)/1000, abs(long(d)%1000), &i ); while( buf[--i] == '0' ) {}; if( buf[i] == '.' ) i--; buf[i+1] = '\0'; stream() << buf << "pt"; return *this; } MifOutputByteStream &operator<<( const MifDoc::CrossRefInfo &cri ) { Vector &crossRefInfos = MifDoc::CurInstance->crossRefInfos(); unsigned idx = crossRefInfos.size(); crossRefInfos.resize( crossRefInfos.size() + 1 ); crossRefInfos.back() = cri; stream() << MifDoc::escapeChar(); stream().sputn( (char*)&idx, sizeof( idx ) ); return *this; } MifOutputByteStream &operator<<( const MifDoc::T_LTRB &b ) { *this << b.l << " " << b.t << " " << b.r << " " << b.b; return *this; } MifOutputByteStream &operator<<( const MifDoc::T_LTWH &b ) { *this << b.l << " " << b.t << " " << b.w << " " << b.h; return *this; } MifOutputByteStream &operator<<( const MifDoc::T_WH &s ) { *this << s.w << " " << s.h; return *this; } MifOutputByteStream &operator<<( const MifDoc::T_XY &s ) { *this << s.x << " " << s.y; return *this; } MifOutputByteStream &operator<<( const MifDoc::T_boolean &b ) { if( bool(b) ) *this << "Yes"; else *this << "No"; return *this; } MifOutputByteStream &operator<<( const MifDoc::T_indent &i ) { unsigned cnt = (i==INDENT) ? CurTagIndent : unsigned( i ); for( ; cnt; cnt-- ) stream() << ' '; return *this; } }; class MifTmpOutputByteStream : public TmpOutputByteStream { MifOutputByteStream os; public: MifTmpOutputByteStream( MifDoc::T_indent osIndent = 0 ) : TmpOutputByteStream(), os( osIndent ) { os.setStream( *this ); } void commit( OutputByteStream &os, bool resolveCrossReferences = false ); void commit( String &str ); MifOutputByteStream &stream() { return os; } }; class MifFOTBuilder : public SerialFOTBuilder { public: MifFOTBuilder( const String &fileLoc, const Ptr &, const CharsetInfo &, CmdLineApp *app ); ~MifFOTBuilder() {} static MifFOTBuilder &curInstance() { assert( CurInstance != NULL ); return *CurInstance; } static MifFOTBuilder *CurInstance; struct IndexEntryNIC { IndexEntryNIC() : pageNumber( true ), startsPageRange( false ), endsPageRange( false ) {} StringC sortString; Vector components; bool pageNumber; bool startsPageRange; bool endsPageRange; }; class MifExtensionFlowObj : public FOTBuilder::ExtensionFlowObj { public: virtual void atomic( MifFOTBuilder &, const NodePtr & ) const = 0; }; class IndexEntryFlowObj : public MifExtensionFlowObj { public: void atomic( MifFOTBuilder &fb, const NodePtr & ) const { fb.indexEntry( nic ); } bool hasNIC( const StringC &name ) const; void setNIC( const StringC &name, const Value &value ); ExtensionFlowObj *copy() const { return new IndexEntryFlowObj(*this); } private: IndexEntryNIC nic; }; void extension( const ExtensionFlowObj &fo, const NodePtr & ); void start(); void end(); void startSimplePageSequence(); void endSimplePageSequence(); void startSimplePageSequenceHeaderFooter( unsigned ); void endSimplePageSequenceHeaderFooter( unsigned ); void endAllSimplePageSequenceHeaderFooter(); void indexEntry( const IndexEntryNIC & ); void setPageNColumns( long ); void setPageColumnSep( Length ); void setPageBalanceColumns( bool ); void startNode( const NodePtr &, const StringC & ); void endNode(); void currentNodePageNumber( const NodePtr & ); void startLink( const Address & ); void endLink(); void startLineField( const LineFieldNIC & ); void endLineField(); void doStartParagraph( const ParagraphNIC &, bool servesAsWrapper = false, MifDoc::T_dimension = 0, bool allowNegativeLeading = false ); void startParagraph( const ParagraphNIC &nic ) { doStartParagraph( nic ); } void doEndParagraph( bool sustainFormatStack = false, bool sustainDisplayStack = false, bool paragraphBreakTest = true, bool discardThisPara = false ); void endParagraph() { doEndParagraph(); } void startDisplayGroup( const DisplayGroupNIC & ); void endDisplayGroup(); void characters( const Char *, size_t ); void paragraphBreak( const ParagraphNIC & ); void externalGraphic( const ExternalGraphicNIC & ); void rule( const RuleNIC & ); void pageNumber(); void startScore( Symbol ); void endScore(); void startLeader( const LeaderNIC & ); void endLeader(); void startTable(const TableNIC &); void endTable(); void startTablePartSerial(const TablePartNIC &); void endTablePartSerial(); void startTablePartHeader(); void endTablePartHeader(); void startTablePartFooter(); void endTablePartFooter(); void tableColumn(const TableColumnNIC &); void startTableRow(); void endTableRow(); void startTableCell(const TableCellNIC &); void endTableCell(); void tableBeforeRowBorder(); void tableAfterRowBorder(); void tableBeforeColumnBorder(); void tableAfterColumnBorder(); void tableCellBeforeRowBorder(); void tableCellAfterRowBorder(); void tableCellBeforeColumnBorder(); void tableCellAfterColumnBorder(); // void setCellBeforeRowMargin(Length); // void setCellAfterRowMargin(Length); // void setCellBeforeColumnMargin(Length); // void setCellAfterColumnMargin(Length); void setCellBackground( bool ); void setCellRowAlignment( Symbol ); void setFontSize(Length); void setFontFamilyName( const StringC & ); void setFontWeight( Symbol ); void setFontPosture( Symbol ); void setStartIndent( const LengthSpec & ); void setEndIndent( const LengthSpec & ); void setFirstLineStartIndent( const LengthSpec & ); // void setLastLineEndIndent(const LengthSpec &); void setLineSpacing( const LengthSpec & ); void setFieldWidth( const LengthSpec & ); void setLines( Symbol ); void setQuadding( Symbol ); void setDisplayAlignment( Symbol ); void setFieldAlign( Symbol ); void setColor( const DeviceRGBColor & ); void setBackgroundColor( const DeviceRGBColor & ); void setBackgroundColor(); void setPageWidth( Length ); void setPageHeight( Length ); void setLeftMargin( Length ); void setRightMargin( Length ); void setTopMargin( Length ); void setBottomMargin( Length ); void setHeaderMargin( Length ); void setFooterMargin( Length ); void setBorderPresent(bool); void setLineThickness(Length); void setCellBeforeRowMargin( Length ); void setCellAfterRowMargin( Length ); void setCellBeforeColumnMargin( Length ); void setCellAfterColumnMargin( Length ); void setLineSep(Length); // void setBoxSizeBefore(Length); // void setBoxSizeAfter(Length); void setPositionPointShift( const LengthSpec & ); // void setStartMargin(const LengthSpec &); // void setEndMargin(const LengthSpec &); // void setSidelineSep(const LengthSpec &); // void setAsisWrapIndent(const LengthSpec &); // void setLineNumberSep(const LengthSpec &); // void setLastLineJustifyLimit(const LengthSpec &); // void setJustifyGlyphSpaceMaxAdd(const LengthSpec &); // void setJustifyGlyphSpaceMaxRemove(const LengthSpec &); // void setTableCornerRadius(const LengthSpec &); // void setBoxCornerRadius(const LengthSpec &); // void setMarginaliaSep(const LengthSpec &); // void setMinPreLineSpacing(const OptLengthSpec &); // void setMinPostLineSpacing(const OptLengthSpec &); void setMinLeading( const OptLengthSpec & ); // void setInhibitLineBreaks(bool); void setHyphenate( bool ); void setKern( bool ); // void setLigature(bool); // void setScoreSpaces(bool); // void setFloatOutMarginalia(bool); // void setFloatOutSidelines(bool); // void setFloatOutLineNumbers(bool); // void setCellBackground(bool); // void setSpanWeak(bool); // void setIgnoreRecordEnd(bool); // void setNumberedLines(bool); // void setHangingPunct(bool); // void setBoxOpenEnd(bool); // void setTruncateLeader(bool); // void setAlignLeader(bool); // void setTablePartOmitMiddleHeader(bool); // void setTablePartOmitMiddleFooter(bool); void setBorderOmitAtBreak(bool); // void setPrincipalModeSimultaneous(bool); // void setMarginaliaKeepWithPrevious(bool); // void setGridEquidistantRows(bool); // void setGridEquidistantColumns(bool); // void setLineJoin(Symbol); void setLineCap( Symbol ); // void setLineNumberSide(Symbol); // void setKernMode(Symbol); void setInputWhitespaceTreatment( Symbol ); // void setFillingDirection(Symbol); // void setWritingMode(Symbol); // void setLastLineQuadding(Symbol); // void setMathDisplayMode(Symbol); // void setScriptPreAlign(Symbol); // void setScriptPostAlign(Symbol); // void setScriptMidSupAlign(Symbol); // void setScriptMidSubAlign(Symbol); // void setNumeratorAlign(Symbol); // void setDenominatorAlign(Symbol); // void setGridPositionCellType(Symbol); // void setGridColumnAlignment(Symbol); // void setGridRowAlignment(Symbol); // void setBoxType(Symbol); // void setGlyphAlignmentMode(Symbol); // void setBoxBorderAlignment(Symbol); // void setCellRowAlignment(Symbol); // void setBorderAlignment(Symbol); // void setSidelineSide(Symbol); // void setHyphenationKeep(Symbol); // void setPositionPreference(Symbol); // void setFontStructure(Symbol); // void setFontProportionateWidth(Symbol); // void setCellCrossed(Symbol); // void setMarginaliaSide(Symbol); // void setLayer(long); // void setBackgroundLayer(long); void setBorderPriority( long ); void setLineRepeat( long ); void setSpan( long ); // void setMinLeaderRepeat(long); void setHyphenationRemainCharCount( long ); void setHyphenationPushCharCount( long ); void setWidowCount( long ); void setOrphanCount( long ); // void setExpandTabs(long); void setHyphenationLadderCount( long ); // void setBackgroundTile(PublicId); // void setLineBreakingMethod(PublicId); // void setLineCompositionMethod(PublicId); // void setImplicitBidiMethod(PublicId); // void setGlyphSubstMethod(PublicId); // void setGlyphReorderMethod(PublicId); // void setHyphenationMethod(PublicId); // void setTableAutoWidthMethod(PublicId); // void setFontName(PublicId); void setLanguage (Letter2 ); void setCountry( Letter2 ); // void setEscapementSpaceBefore(const InlineSpace &); // void setEscapementSpaceAfter(const InlineSpace &); // void setGlyphSubstTable(const Vector > &); struct DisplayInfo : public Link { DisplayInfo( const DisplayNIC &nic, DisplayInfo *parentDs ) : spaceBefore( nic.spaceBefore), spaceAfter( nic.spaceAfter ), keep( nic.keep ), breakAfter( nic.breakAfter ), breakBefore( nic.breakBefore ), keepWithPrevious( nic.keepWithPrevious ), keepWithNext( nic.keepWithNext ), mayViolateKeepBefore( nic.mayViolateKeepBefore ), isParagraph( false ), mayViolateKeepAfter( nic.mayViolateKeepAfter ), firstParaOutputed( false ), paragraphClosedInMif( false ) { keepWithinPageInEffect = (nic.keep==symbolPage) ? true : (parentDs ? parentDs->keepWithinPageInEffect : false ); } DisplaySpace spaceBefore; DisplaySpace spaceAfter; Symbol keep; Symbol breakBefore; Symbol breakAfter; bool keepWithPrevious; bool keepWithNext; bool mayViolateKeepBefore; bool mayViolateKeepAfter; bool firstParaOutputed; bool isParagraph; bool paragraphClosedInMif; bool keepWithinPageInEffect; }; struct DisplaySpaceInfo : public Link { DisplaySpaceInfo( DisplaySpace space_, Symbol breakType_, bool breakIsAfter_ ) : space( space_ ), breakType( breakType_ ), breakIsAfter( breakIsAfter_ ) {} DisplaySpace space; Symbol breakType; bool breakIsAfter; }; struct EffectiveDisplaySpace { long nominal; long min; long max; long priority; bool conditional; bool force; EffectiveDisplaySpace() { set(); } EffectiveDisplaySpace( long) { set(); } void set( long nominal_ = 0, long min_ = 0, long max_ = 0, long priority_ = 0, bool conditional_ = true, bool force_ = false ) { nominal = nominal_; min = min_; max = max_; priority = priority_; conditional = conditional_; force = force_; } void combine( const EffectiveDisplaySpace ); void clear() { set(); } }; struct TFotSimplePageSequence { TFotSimplePageSequence() : BodyTextFlow( NULL ), FirstHeaderTextFlow( NULL ), FirstFooterTextFlow( NULL ), LeftHeaderTextFlow( NULL ), LeftFooterTextFlow( NULL ), RightHeaderTextFlow( NULL ), RightFooterTextFlow( NULL ) {} MifDoc::TextFlow *BodyTextFlow; MifDoc::TextFlow *FirstHeaderTextFlow; MifDoc::TextFlow *FirstFooterTextFlow; MifDoc::TextFlow *LeftHeaderTextFlow; MifDoc::TextFlow *LeftFooterTextFlow; MifDoc::TextFlow *RightHeaderTextFlow; MifDoc::TextFlow *RightFooterTextFlow; MifDoc::ParagraphFormat paragraphFormat; }; struct Border { Border( bool cellBorder_ = true ) : cellBorder( cellBorder_ ), borderPresent( false ) {} long borderPriority; Length lineThickness; bool borderPresent; long lineRepeat; Length lineSep; bool cellBorder; MifDoc::T_tagstring color; MifDoc::T_tagstring makeMifRuling( MifDoc &mifDoc ); void resolve( Border &adjacentBorder ); void setFromFot(); }; struct Column { Column() : hasWidth( 0 ) {} bool hasWidth; TableLengthSpec width; }; struct Cell { Cell() : missing( false ), MifCell( new MifDoc::Cell ), OverlappingCell( NULL ), nRowsSpanned( 1 ), nColumnsSpanned( 1 ), displaySize( 0 ) {} bool missing; unsigned nColumnsSpanned; unsigned nRowsSpanned; Border beforeRowBorder; Border afterRowBorder; Border beforeColumnBorder; Border afterColumnBorder; long displaySize; Cell *OverlappingCell; MifDoc::Cell &mifCell() { assert( MifCell != NULL ); return *MifCell; } void translate( MifDoc::Cell &mifCell, MifDoc &mifDoc ); protected: MifDoc::Cell *MifCell; }; struct Row { Row() {} Vector Cells; void translate( Vector &mifRows, MifDoc &mifDoc ); }; struct Table; struct TablePart { TablePart() : MifTableNum( 0 ), ParentTable( NULL ), columnsProcessed( false ), needsColumnReprocessing( false ) {} Vector Columns; Vector Header; Vector Body; Vector Footer; void translate( MifDoc &mifDoc ); void processColumns(); void normalizeRows(); void begin( Table &parentTable, MifDoc &mifDoc ); MifDoc::Tbl &mifTable( MifDoc &mifDoc ) { assert( MifTableNum > 0 ); return mifDoc.tbls()[MifTableNum-1]; } Table &parentTable() { assert( ParentTable != NULL ); return *ParentTable; } size_t MifTableNum; Table *ParentTable; bool columnsProcessed; bool needsColumnReprocessing; }; struct Table { Table() : beforeRowBorder( false ), afterRowBorder( false ), beforeColumnBorder( false ), afterColumnBorder( false ), CurCell( NULL ), CurTablePart( NULL ), DefaultTblFormatGenerated( false ), NoTablePartsSeen( true ) {} Vector TableParts; Border beforeRowBorder; Border afterRowBorder; Border beforeColumnBorder; Border afterColumnBorder; // TableNIC nic; Length tableWidth; Symbol displayAlignment; Length startIndent; void resolveBorders( Vector &rows, bool hasFirstTableRow, bool hasLastTableRow ); void begin( MifDoc &mifDoc ); Vector &curRows() { assert( CurRows != NULL ); return *CurRows; } TablePart &curTablePart() { assert( CurTablePart != NULL ); return *CurTablePart; } Cell &curCell() { assert( CurCell != NULL ); return *CurCell; } TablePart *CurTablePart; Cell *CurCell; Vector *CurRows; bool DefaultTblFormatGenerated; bool NoTablePartsSeen; }; struct Format : public MifDoc::ParagraphFormat { Format() : MifDoc::ParagraphFormat(), FotLineSpacingSpec( 12000 ), FotFirstLineStartIndentSpec( 0 ), FotStartIndentSpec( 0 ), FotEndIndentSpec( 0 ), FotLanguage( 0 ), FotCurDisplaySize( 0 ), FotLineThickness( 1000 ), FotBorderPresent( true ), FotLineRepeat( 1 ), FotLineSep( 1000 ), FotBorderPriority( 0 ), FotDisplayAlignment( symbolStart ), FotLeftMargin( 1 ), FotRightMargin( 1 ), FotTopMargin( 0 ), FotBottomMargin( 0 ), FotHeaderMargin( 0 ), FotFooterMargin( 0 ), FotPageWidth( 72000*8 ), FotPageHeight( (72000*23)/2 ), FotLineCap( symbolButt ), FotPositionPointShiftSpec( 0 ), FotMinLeading(), FotFieldAlign( symbolStart ), FotFieldWidth( 0 ), FotLines( symbolWrap ), FotInputWhitespaceTreatment( symbolPreserve ), FotPageNColumns( 1 ), FotPageColumnSep( 72000/2 ), FotSpan( 1 ), FotPageBalanceColumns( false ), FotCellBackground( false ) {} LengthSpec FotFirstLineStartIndentSpec; LengthSpec FotStartIndentSpec; LengthSpec FotEndIndentSpec; LengthSpec FotLineSpacingSpec; LengthSpec FotPositionPointShiftSpec; LengthSpec FotFieldWidth; OptLengthSpec FotMinLeading; long FotCurDisplaySize; Length FotLineThickness; Symbol FotLineCap; long FotBorderPriority; bool FotBorderPresent; long FotLineRepeat; Length FotLineSep; Symbol FotDisplayAlignment; Length FotLeftMargin; Length FotRightMargin; Length FotTopMargin; Length FotBottomMargin; Length FotHeaderMargin; Length FotFooterMargin; Length FotPageWidth; Length FotPageHeight; Symbol FotFieldAlign; Symbol FotInputWhitespaceTreatment; Symbol FotLines; long FotPageNColumns; Length FotPageColumnSep; long FotSpan; bool FotPageBalanceColumns; bool FotCellBackground; MifDoc::T_tagstring MifBackgroundColor; Letter2 FotLanguage; Letter2 FotCountry; void computePgfLanguage(); static const Length INITIAL_PAGE_SIZE() { return 72000*8; } }; struct NodeInfo { NodeInfo() {} NodeInfo( NodePtr node_, unsigned nodeLevel_ ) : node( node_ ), nodeLevel( nodeLevel_ ) {} NodePtr node; unsigned nodeLevel; static unsigned nonEmptyElementsOpened; static unsigned curNodeLevel; }; struct LinkInfo { LinkInfo( MifDoc::CrossRefInfo *crossRefInfo_ = NULL ) : crossRefInfo( crossRefInfo_ ), openedInMif( false ) {} ~LinkInfo() { if( crossRefInfo != NULL ) delete crossRefInfo; } bool forcesNoLink() const { return crossRefInfo != NULL ? false : true; } MifDoc::CrossRefInfo *crossRefInfo; bool openedInMif; static unsigned pendingMifClosings; }; struct SymbolFont { const char *name; Char mapping[256]; }; enum { nSymbolFonts = 3 }; void synchronizeFontFormat(); long computeLengthSpec( const LengthSpec &spec ) const; Format &format() const { Format *result = formatStack.head(); assert( result != NULL ); return *result; } Table &curTable() { return CurTable; } void setCurLeaderStream( MifTmpOutputByteStream *s, bool doDelete = true ) { if( doDelete && CurLeaderStream ) delete CurLeaderStream; CurLeaderStream = s; } MifTmpOutputByteStream &curLeaderStream() { assert( CurLeaderStream != NULL ); return *CurLeaderStream; } CmdLineApp *App; const CharsetInfo *SystemCharset; Ptr EntityManager; bool paragraphBreakInEffect; bool inLeader; bool lastFlowObjectWasWhitespace; bool firstHeaderFooter; bool inSimplePageSequence; bool bookComponentOpened; bool bookComponentAvailable; protected: TFotSimplePageSequence FotSimplePageSequence; Table CurTable; MifDoc::T_pathname systemIdToMifPathname( const StringC &systemId ); bool systemIdToMifPathname( const StringC &systemId, MifDoc::T_pathname & ); int systemIdFilename( const StringC &systemId, StringC &filename ); void initMifBookComponent(); void setupSimplePageSequence(); void beginHeaderFooter( bool header ); void beginHeader() { beginHeaderFooter( true ); } void beginFooter() { beginHeaderFooter( false ); }; void endHeaderFooter(); void makeEmptyTextFlow( MifDoc::TextRect & ); void checkForParagraphReopening(); void outPendingInlineStatements(); void outString( const Char *s, size_t n, MifTmpOutputByteStream *o = NULL, bool inParagraph = true, String *targetString = NULL ); MifDoc::Frame &makeAnchoredFrame ( MifDoc::T_keyword frameType, long width, long height, MifDoc::T_keyword anchorAlign = MifDoc::sLeft ); void setupHeaderFooterParagraphFormat( MifDoc::ParagraphFormat &, MifDoc::ParagraphFormat &, MifDoc::T_dimension ); OutputByteStream &os() { return *outputStream; } MifDoc mifDoc; OutputByteStream *outputStream; MifTmpOutputByteStream *CurLeaderStream; EffectiveDisplaySpace createEffectiveDisplaySpace( const DisplaySpace &ds ) const; IList displayStack; IList formatStack; IQueue displaySpaceQueue; Vector nodeStack; Vector linkStack; Vector indexEntryStack; Format nextFormat; Symbol pendingBreak; EffectiveDisplaySpace pendingEffectiveDisplaySpace; void processDisplaySpaceStack(); void startDisplay( const DisplayNIC & ); void endDisplay(); // sytem font code from James Clark enum { CHAR_TABLE_CHAR_BITS = 16 }; enum { CHAR_TABLE_SYMBOL_FLAG = 1U << 31 }; CharMap CharTable; static const SymbolFont SymbolFonts[nSymbolFonts]; static const Char FrameCharsetMap[128]; }; MifFOTBuilder *MifFOTBuilder::CurInstance = NULL; unsigned MifFOTBuilder::NodeInfo::nonEmptyElementsOpened = 0; unsigned MifFOTBuilder::NodeInfo::curNodeLevel = 0; unsigned MifFOTBuilder::LinkInfo::pendingMifClosings = 0; int operator ==(struct FOTBuilder::DisplayNIC, struct FOTBuilder::DisplayNIC) { return 0; } void MifFOTBuilder::start() { NodeInfo::nonEmptyElementsOpened = nodeStack.size(); Format *effectiveFormat = new Format( nextFormat ); if( nextFormat.FSize > 0 ) effectiveFormat->setFDY ( double( computeLengthSpec( nextFormat.FotPositionPointShiftSpec ) * -100 ) / nextFormat.FSize ); formatStack.insert( effectiveFormat ); } void MifFOTBuilder::end() { assert( formatStack.head() != NULL ); delete formatStack.get(); assert( formatStack.head() != NULL ); nextFormat = *formatStack.head(); } void MifFOTBuilder::Format::computePgfLanguage() { switch( FotLanguage ) { case SP_LETTER2( 'E', 'N' ): switch( FotCountry ) { case SP_LETTER2( 'G', 'B' ): PgfLanguage = MifDoc::sUKEnglish; break; default: PgfLanguage = MifDoc::sUSEnglish; } break; case SP_LETTER2( 'D', 'E' ): switch( FotCountry ) { case SP_LETTER2( 'C', 'H' ): PgfLanguage = MifDoc::sSwissGerman; break; default: PgfLanguage = MifDoc::sGerman; } case SP_LETTER2( 'F', 'R' ): switch( FotCountry ) { case SP_LETTER2( 'C', 'A' ): PgfLanguage = MifDoc::sCanadianFrench; break; default: PgfLanguage = MifDoc::sFrench; } break; case SP_LETTER2( 'E', 'S' ): PgfLanguage = MifDoc::sSpanish; break; case SP_LETTER2( 'C', 'A' ): PgfLanguage = MifDoc::sCatalan; break; case SP_LETTER2( 'I', 'T' ): PgfLanguage = MifDoc::sItalian; break; case SP_LETTER2( 'P', 'T' ): PgfLanguage = MifDoc::sPortuguese; break; // case SP_LETTER2( '', '' ): // PgfLanguage = sBrazilian; // break; // case SP_LETTER2( '', '' ): // PgfLanguage = sDanish; // break; case SP_LETTER2( 'N', 'L' ): PgfLanguage = MifDoc::sDutch; break; case SP_LETTER2( 'N', 'O' ): PgfLanguage = MifDoc::sNorwegian; break; // case SP_LETTER2( '', '' ): // PgfLanguage = sNynorsk; // break; case SP_LETTER2( 'F', 'I' ): PgfLanguage = MifDoc::sFinnish; break; case SP_LETTER2( 'S', 'V' ): PgfLanguage = MifDoc::sSwedish; break; default: PgfLanguage = MifDoc::sNoLanguage; } } MifFOTBuilder::MifFOTBuilder( const String &fileLoc, const Ptr &entityManager, const CharsetInfo &systemCharset, CmdLineApp *app ) : App( app ), EntityManager( entityManager ), SystemCharset( &systemCharset ), mifDoc( fileLoc, app ), paragraphBreakInEffect( false ), inLeader( false ), CurLeaderStream( NULL ), CharTable( 0 ), lastFlowObjectWasWhitespace( false ), pendingBreak( symbolFalse ), firstHeaderFooter( true ), inSimplePageSequence( false ), bookComponentOpened( false ), bookComponentAvailable( false ) { CurInstance = this; nextFormat.setDSSSLDefaults(); nextFormat.FotCurDisplaySize = Format::INITIAL_PAGE_SIZE() - 2; // 2 is for margins (MIF doesn't accept zero-sized ones) formatStack.insert( new Format( nextFormat ) ); initMifBookComponent(); bookComponentOpened = true; bookComponentAvailable = true; for( int i = 0; i < 128; i++ ) { Char c = FrameCharsetMap[i]; if( c ) { if( !CharTable[i+0x80] ) CharTable.setChar( i+0x80, c ); else if ((CharTable[i+0x80] & ((1 << CHAR_TABLE_CHAR_BITS) - 1)) == c) CharTable.setChar(i+0x80, CharTable[i+0x80] | (1 << (i + CHAR_TABLE_CHAR_BITS))); } } // symbol character code from James Clark for( int i = 0; i < nSymbolFonts; i++ ) { for( int j = 0; j < 256; j++ ) { Char c = SymbolFonts[i].mapping[j]; if( c && !CharTable[c] ) CharTable.setChar( c, j | (i << CHAR_TABLE_CHAR_BITS) | CHAR_TABLE_SYMBOL_FLAG ); } } } void MifFOTBuilder::initMifBookComponent() { MifDoc::ParagraphFormat defaultParaFormat; defaultParaFormat.setDSSSLDefaults(); defaultParaFormat.setPgfTag( MifDoc::sDefaultPgfFormat ); mifDoc.pgfCatalog().ParaFormats.push_back( defaultParaFormat ); mifDoc.document().setDPageSize ( MifDoc::T_WH( MifDoc::T_dimension( format().FotPageWidth ), MifDoc::T_dimension( format().FotPageHeight ) ) ); mifDoc.document().setDMargins( MifDoc::T_LTRB( 1, 1, 1, 1 ) ); // MIF doesn't accept zeros mifDoc.document().setDColumns( 1 ); } long MifFOTBuilder::computeLengthSpec( const LengthSpec &spec ) const { if( spec.displaySizeFactor == 0.0 ) { return spec.length; } else { double tem = format().FotCurDisplaySize * spec.displaySizeFactor; return spec.length + long( tem >= 0.0 ? tem +.5 : tem - .5 ); } } MifFOTBuilder::EffectiveDisplaySpace MifFOTBuilder::createEffectiveDisplaySpace( const DisplaySpace &ds ) const { EffectiveDisplaySpace result; result.set( computeLengthSpec( ds.nominal ), computeLengthSpec( ds.min ), computeLengthSpec( ds.max ), ds.priority, ds.conditional, ds.force ); return result; } void MifFOTBuilder::EffectiveDisplaySpace::combine( const EffectiveDisplaySpace eds ) { if( eds.force ) { if( force ) { nominal += eds.nominal; min += eds.min; max += eds.max; } else *this = eds; } else { if( eds.priority > priority ) *this = eds; else { if( eds.priority == priority ) { if( eds.nominal > nominal ) *this = eds; else if( eds.nominal == nominal ) { if( eds.min < min ) { min = eds.min; } if( eds.max > max ) { max = eds.max; } } } } } } void MifFOTBuilder::synchronizeFontFormat() { if( mifDoc.curPara( false ) != NULL ) { // mifDoc.curPara()->curFormat().ffUpdateFrom( format() ); mifDoc.curPara()->curFormat().ffUpdateFrom( nextFormat ); mifDoc.curPara()->curFormat().ffOut( mifDoc.os(), MifDoc::FontFormat::stFont ); } else { // mifDoc.curFormat().ffUpdateFrom( format() ); mifDoc.curFormat().ffUpdateFrom( nextFormat ); mifDoc.curFormat().ffOut( mifDoc.os(), MifDoc::FontFormat::stFont ); } outPendingInlineStatements(); } void MifFOTBuilder::outString ( const Char *s, size_t n, MifTmpOutputByteStream *o, bool inParagraph, String *targetString ) { MifOutputByteStream *outS = ( o != NULL ) ? &o->stream() : ( ( targetString != NULL ) ? (MifOutputByteStream *)NULL : &mifDoc.os() ); enum { nStr, nCode, nChar, nNothing, nHardReturn, nSpecialChar } nextOut; union { const char *str; unsigned long code; char chr; } out; String out_specialChar; MifDoc::ParagraphFormat *curPFormat = inParagraph ? ( mifDoc.curPara( false ) != NULL ? &mifDoc.curPara()->curFormat() : &mifDoc.curFormat() ) : (MifDoc::ParagraphFormat*)NULL; MifDoc::T_string paraFFamily; if( curPFormat != NULL ) paraFFamily = curPFormat->FFamily; bool stringOpened = false; int prevSymbolFontNum = 0; int curSymbolFontNum = 0; bool thisFlowObjectIsWhitespace; for( ; n > 0; s++, n-- ) { thisFlowObjectIsWhitespace = false; nextOut = nNothing; switch( *s ) { case Char( '\n' ): break; case Char( '\r' ): if( !inParagraph ) { out.chr = ' '; nextOut = nChar; } else { switch( format().FotLines ) { case symbolNone: case symbolWrap: switch( format().FotInputWhitespaceTreatment ) { case symbolIgnore: break; case symbolCollapse: if( lastFlowObjectWasWhitespace ) break; case symbolPreserve: default: out.chr = ' '; nextOut = nChar; } break; default: nextOut = nHardReturn; } thisFlowObjectIsWhitespace = true; } break; case Char( '\t' ): if( !inParagraph ) { out.str = "\\t"; nextOut = nStr; } else { switch( format().FotInputWhitespaceTreatment ) { case symbolIgnore: break; case symbolCollapse: if( lastFlowObjectWasWhitespace ) break; case symbolPreserve: default: out.str = "\\t"; nextOut = nStr; } thisFlowObjectIsWhitespace = true; } break; case Char( '>' ): out.str = "\\>"; nextOut = nStr; break; case Char( '\'' ): out.str = "\\q"; nextOut = nStr; break; case Char( '`' ): out.str = "\\Q"; nextOut = nStr; break; case Char( '\\' ): out.str = "\\\\"; nextOut = nStr; break; case Char( ' ' ): if( !inParagraph ) { out.chr = ' '; nextOut = nChar; } else { switch( format().FotInputWhitespaceTreatment ) { case symbolIgnore: break; case symbolCollapse: if( lastFlowObjectWasWhitespace ) break; case symbolPreserve: default: out.chr = ' '; nextOut = nChar; } thisFlowObjectIsWhitespace = true; } break; case 0x00A0: out_specialChar = MifDoc::sHardSpace; nextOut = nSpecialChar; break; case 0x00A2: out_specialChar = MifDoc::sCent; nextOut = nSpecialChar; break; case 0x00A3: case 0x20A4: out_specialChar = MifDoc::sPound; nextOut = nSpecialChar; break; case 0x00A5: out_specialChar = MifDoc::sYen; nextOut = nSpecialChar; break; case 0x2002: out_specialChar = MifDoc::sEnSpace; nextOut = nSpecialChar; break; case 0x2003: out_specialChar = MifDoc::sEmSpace; nextOut = nSpecialChar; break; case 0x2009: out_specialChar = MifDoc::sThinSpace; nextOut = nSpecialChar; break; case 0x2010: out_specialChar = MifDoc::sSoftHyphen; nextOut = nSpecialChar; break; case 0x2011: out_specialChar = MifDoc::sHardHyphen; nextOut = nSpecialChar; break; case 0x2013: out_specialChar = MifDoc::sEnDash; nextOut = nSpecialChar; break; case 0x2014: out_specialChar = MifDoc::sEmDash; nextOut = nSpecialChar; break; case 0x2020: out_specialChar = MifDoc::sDagger; nextOut = nSpecialChar; break; case 0x2021: out_specialChar = MifDoc::sDoubleDagger; nextOut = nSpecialChar; break; case 0x2022: out_specialChar = MifDoc::sBullet; nextOut = nSpecialChar; break; default: if( *s >= 0x80 ) { unsigned long code = CharTable[*s]; if( code & CHAR_TABLE_SYMBOL_FLAG ) { if( curPFormat != NULL ) { curSymbolFontNum = ( ( code & ~CHAR_TABLE_SYMBOL_FLAG ) >> CHAR_TABLE_CHAR_BITS ) + 1; assert( curSymbolFontNum < nSymbolFonts ); out.code = code & 0xff; nextOut = nCode; } } else if( code ) { out.code = code & 0xff; nextOut = nCode; } } else { out.chr = char( *s ); nextOut = nChar; } } if( nextOut != nNothing ) { if( curSymbolFontNum != prevSymbolFontNum ) { if( stringOpened ) { *outS << "'>"; stringOpened = false; } MifDoc::T_string fontFamily( curSymbolFontNum == 0 ? paraFFamily : MifDoc::T_string( SymbolFonts[ curSymbolFontNum - 1 ].name ) ); curPFormat->setFFamily( fontFamily ); curPFormat->ffOut( *outS, MifDoc::FontFormat::stFont ); } if( curPFormat != NULL && !stringOpened ) { *outS << '\n' << MifOutputByteStream::INDENT << ""; stringOpened = false; } mifDoc.outSpecialChar( MifDoc::sHardReturn, outS ); MifDoc::ParaLine::outEpilog( *outS ); MifDoc::ParaLine::outProlog( *outS ); } break; case nSpecialChar: if( inParagraph ) { if( stringOpened ) { *outS << "'>"; stringOpened = false; } mifDoc.outSpecialChar( out_specialChar, outS ); } break; case nCode: if( targetString != NULL ) mifDoc.outHexChar( out.code, *targetString ); else mifDoc.outHexChar( out.code, outS ); break; break; case nStr: if( targetString != NULL ) targetString->append( out.str, strlen( out.str ) ); else *outS << out.str; break; case nNothing: break; } } prevSymbolFontNum = curSymbolFontNum; lastFlowObjectWasWhitespace = thisFlowObjectIsWhitespace; } if( stringOpened ) *outS << "'>"; if( curSymbolFontNum != 0 ) { curPFormat->setFFamily( paraFFamily ); curPFormat->ffOut( *outS, MifDoc::FontFormat::stFont ); curPFormat->ffSetProperties() &= ~MifDoc::FontFormat::fFFamily; } } void MifFOTBuilder::characters( const Char *s, size_t n ) { checkForParagraphReopening(); if( MifDoc::Para::currentlyOpened ) { if( inLeader ) { outString( s, n, &curLeaderStream(), false ); } else { synchronizeFontFormat(); outString( s, n, NULL, true ); } } } void MifFOTBuilder::checkForParagraphReopening() { DisplayInfo *curDs = displayStack.head(); // assert( curDs != NULL ); if( curDs != NULL && curDs->paragraphClosedInMif ) { Format f = format(); f.setPgfWithPrev( curDs->firstParaOutputed ? curDs->keepWithinPageInEffect : false ); f.setPgfWithNext( false ); // TMAI curDs->firstParaOutputed = true; processDisplaySpaceStack(); switch( pendingBreak ) { case symbolPage: f.setPgfPlacement( MifDoc::sPageTop ); break; case symbolColumn: f.setPgfPlacement( MifDoc::sColumnTop ); break; default: f.setPgfPlacement( MifDoc::sAnywhere ); } pendingBreak = symbolFalse; f.setPgfSpBefore( pendingEffectiveDisplaySpace.nominal ); pendingEffectiveDisplaySpace.clear(); f.setPgfFIndent( nextFormat.PgfLIndent ); MifDoc::Para *p = new MifDoc::Para( mifDoc.curTagStream().content().stream().CurTagIndent + 4 ); p->setParagraphFormat( mifDoc.curFormat() ); p->format().updateFrom( f ); p->format().FSize = mifDoc.curFormat().FSize; p->format().ffSetProperties() &= ~MifDoc::FontFormat::fFSize; Length lineSpacing = computeLengthSpec( f.FotLineSpacingSpec.length ); if( p->format().FSize != lineSpacing ) p->format().setFSize( lineSpacing ); p->curFormat() = p->format(); // assert( mifDoc.curPara( false ) == NULL ); mifDoc.setCurPara( p ); mifDoc.enterPara( *mifDoc.curPara() ); curDs->paragraphClosedInMif = false; } } void MifFOTBuilder::processDisplaySpaceStack() { pendingBreak = symbolFalse; EffectiveDisplaySpace effectiveDisplaySpace; DisplaySpaceInfo *curDSI; while( !displaySpaceQueue.empty() ) { curDSI = displaySpaceQueue.get(); if( curDSI->breakType == symbolPage || curDSI->breakType == symbolColumn ) { effectiveDisplaySpace.clear(); if( pendingBreak != symbolFalse ) mifDoc.outBreakingPara( curDSI->breakType == symbolPage ? MifDoc::sPageTop : MifDoc::sColumnTop ); pendingBreak = curDSI->breakType; if( !curDSI->breakIsAfter ) effectiveDisplaySpace.combine( createEffectiveDisplaySpace( curDSI->space ) ); } else effectiveDisplaySpace.combine( createEffectiveDisplaySpace( curDSI->space ) ); delete curDSI; } pendingEffectiveDisplaySpace = effectiveDisplaySpace; } void MifFOTBuilder::doStartParagraph ( const ParagraphNIC &nic, bool servesAsWrapper, MifDoc::T_dimension height, bool allowNegativeLeading ) { startDisplay( nic ); DisplayInfo *curDs = displayStack.head(); assert( curDs != NULL ); curDs->isParagraph = true; nextFormat.setPgfWithPrev( curDs->mayViolateKeepBefore ? curDs->keepWithPrevious : ( curDs->firstParaOutputed ? curDs->keepWithinPageInEffect : false ) ); nextFormat.setPgfWithNext( curDs->keepWithNext ); curDs->firstParaOutputed = true; processDisplaySpaceStack(); switch( pendingBreak ) { case symbolPage: nextFormat.setPgfPlacement( MifDoc::sPageTop ); break; case symbolColumn: nextFormat.setPgfPlacement( MifDoc::sColumnTop ); break; default: nextFormat.setPgfPlacement( MifDoc::sAnywhere ); } pendingBreak = symbolFalse; Length lineSpacing; Length extraSpaceBefore = 0; if( servesAsWrapper ) { if( height < 2000 ) { // FrameMaker minimum is 2pt if( allowNegativeLeading ) nextFormat.setPgfLeading( height - 2000 ); else pendingEffectiveDisplaySpace.nominal -= ( pendingEffectiveDisplaySpace.nominal > 2000 ) ? 2000 : pendingEffectiveDisplaySpace.nominal; // try to steal as much as possible from space before height = 2000; } //if( effectiveDisplaySpace.nominal <= 0 ) // extraSpaceBefore = 1; // FrameMaker bug workaround //nextFormat.setFSize( height ); lineSpacing = height; nextFormat.setFColor( MifDoc::sWhite ); nextFormat.setPgfLineSpacing( MifDoc::sFixed ); } else { //nextFormat.setFSize( computeLengthSpec( nextFormat.FotLineSpacingSpec.length ) ); lineSpacing = computeLengthSpec( nextFormat.FotLineSpacingSpec.length ); if( nextFormat.FotMinLeading.hasLength ) // but ignore the actual min-leading value nextFormat.PgfLineSpacing = MifDoc::sProportional; else nextFormat.PgfLineSpacing = MifDoc::sFixed; } nextFormat.setPgfSpBefore( pendingEffectiveDisplaySpace.nominal + extraSpaceBefore ); pendingEffectiveDisplaySpace.clear(); nextFormat.setPgfLIndent( computeLengthSpec( nextFormat.FotStartIndentSpec ) ); nextFormat.setPgfFIndent( computeLengthSpec( nextFormat.FotFirstLineStartIndentSpec ) + nextFormat.PgfLIndent ); nextFormat.setPgfRIndent( computeLengthSpec( nextFormat.FotEndIndentSpec ) ); nextFormat.setPgfPlacementStyle ( nextFormat.FotSpan > 1 ? MifDoc::sStraddle : MifDoc::sNormal ); start(); MifDoc::Para *p = new MifDoc::Para( mifDoc.curTagStream().content().stream().CurTagIndent + 4 ); p->setParagraphFormat( mifDoc.curFormat() ); p->format().updateFrom( format() ); p->format().FSize = mifDoc.curFormat().FSize; p->format().ffSetProperties() &= ~MifDoc::FontFormat::fFSize; if( p->format().FSize != lineSpacing ) p->format().setFSize( lineSpacing ); p->curFormat() = p->format(); // assert( mifDoc.curPara( false ) == NULL ); mifDoc.setCurPara( p ); mifDoc.enterPara( *mifDoc.curPara() ); lastFlowObjectWasWhitespace = false; outPendingInlineStatements(); // mifDoc.curFormat().out( mifDoc.os() ); // mifDoc.beginParaLine(); } void MifFOTBuilder::doEndParagraph ( bool sustainFormatStack, bool sustainDisplayStack, bool paragraphBreakTest, bool discardThisPara ) { // mifDoc.endParaLine(); // MifDoc::Para::outEpilog( mifDoc.os() ); DisplayInfo *curDs = displayStack.head(); assert( curDs != NULL ); if( !sustainFormatStack ) end(); if( !sustainDisplayStack ) endDisplay(); if( paragraphBreakTest && paragraphBreakInEffect ) { paragraphBreakInEffect = false; end(); } if( !curDs->paragraphClosedInMif ) { MifDoc::Para *p = mifDoc.curPara(); mifDoc.exitPara(); if( !discardThisPara ) { p->out( mifDoc.os() ); mifDoc.curFormat().updateFrom( p->format() ); } delete p; } } void MifFOTBuilder::startDisplayGroup( const DisplayGroupNIC &nic ) { startDisplay( nic ); start(); } void MifFOTBuilder::endDisplayGroup() { end(); endDisplay(); } void MifFOTBuilder::startDisplay( const DisplayNIC &nic ) { if( !inSimplePageSequence ) { if( !bookComponentOpened ) { mifDoc.enterBookComponent(); initMifBookComponent(); bookComponentOpened = true; } bookComponentAvailable = false; } displaySpaceQueue.append ( new DisplaySpaceInfo( nic.spaceBefore, nic.breakBefore, false ) ); DisplayInfo *di = displayStack.head(); if( di != NULL && di->isParagraph && !di->paragraphClosedInMif ) { if( mifDoc.curPara()->content().isEmpty() ) { doEndParagraph( true, true, true, true ); } else doEndParagraph( true, true ); di->paragraphClosedInMif = true; } if( curTable().CurCell != NULL ) nextFormat.FotCurDisplaySize = curTable().CurCell->displaySize; else if( nextFormat.FotSpan > 1 ) nextFormat.FotCurDisplaySize = nextFormat.FotPageWidth - nextFormat.FotLeftMargin - nextFormat.FotRightMargin; else nextFormat.FotCurDisplaySize = ( nextFormat.FotPageWidth - nextFormat.FotLeftMargin - nextFormat.FotRightMargin - nextFormat.FotPageColumnSep * ( nextFormat.FotPageNColumns - 1 ) ) / nextFormat.FotPageNColumns; displayStack.insert( new DisplayInfo( nic, displayStack.head() ) ); } void MifFOTBuilder::endDisplay() { DisplayInfo *di = displayStack.get(); displaySpaceQueue.append ( new DisplaySpaceInfo( di->spaceAfter, di->breakAfter, true ) ); delete di; } void MifFOTBuilder::startSimplePageSequence() { inSimplePageSequence = true; firstHeaderFooter = true; bool openBookComponent = true; if( bookComponentOpened ) { if( bookComponentAvailable ) { openBookComponent = false; bookComponentAvailable = false; } else mifDoc.exitBookComponent(); } if( openBookComponent ) { mifDoc.enterBookComponent(); initMifBookComponent(); bookComponentOpened = true; bookComponentAvailable = false; } nextFormat.FotCurDisplaySize = ( nextFormat.FotPageWidth - nextFormat.FotLeftMargin - nextFormat.FotRightMargin - nextFormat.FotPageColumnSep * ( nextFormat.FotPageNColumns - 1 ) ) / nextFormat.FotPageNColumns; mifDoc.document().setDColumns( nextFormat.FotPageNColumns ); if( nextFormat.FotPageNColumns > 1 ) mifDoc.document().setDColumnGap( nextFormat.FotPageColumnSep ); mifDoc.document().setProperties &= ~MifDoc::Document::fDMargins; start(); FotSimplePageSequence.paragraphFormat = format(); } void MifFOTBuilder::endSimplePageSequence() { end(); mifDoc.exitTextFlow(); mifDoc.exitBookComponent(); inSimplePageSequence = false; bookComponentOpened = false; bookComponentAvailable = false; } void MifFOTBuilder::makeEmptyTextFlow( MifDoc::TextRect &textRect ) { MifDoc::TextFlow &textFlow = *(new MifDoc::TextFlow( textRect, true )); mifDoc.textFlows().push_back( textFlow ); mifDoc.enterTextFlow( textFlow ); MifDoc::Para::outSimpleProlog( mifDoc.os() ); MifDoc::ParaLine::outProlog( mifDoc.os() ); MifDoc::ParaLine::outEpilog( mifDoc.os() ); MifDoc::Para::outEpilog( mifDoc.os() ); mifDoc.exitTextFlow(); } void MifFOTBuilder::beginHeaderFooter( bool header ) { start(); MifDoc::Para p; p.setPgfTag( header ? MifDoc::sHeader : MifDoc::sFooter ); p.setProperties &= ~MifDoc::Para::fParagraphFormat; p.outProlog( mifDoc.os() ); MifDoc::FontFormat ff; ff.setFSize( format().FSize ); ff.out( mifDoc.os(), MifDoc::FontFormat::fFSize, MifDoc::FontFormat::stFont ); mifDoc.beginParaLine(); } void MifFOTBuilder::endHeaderFooter() { mifDoc.endParaLine(); MifDoc::Para::outEpilog( mifDoc.os() ); end(); } void MifFOTBuilder::setupSimplePageSequence() { MifDoc::Page &firstMasterPage = *(new MifDoc::Page( MifDoc::sOtherMasterPage, MifDoc::sFirst )); MifDoc::Page &rightMasterPage = *(new MifDoc::Page( MifDoc::sRightMasterPage, MifDoc::sRight )); MifDoc::Page &leftMasterPage = *(new MifDoc::Page( MifDoc::sLeftMasterPage, MifDoc::sLeft )); MifDoc::Page &bodyPage = *(new MifDoc::Page( MifDoc::sBodyPage, MifDoc::sNONE, MifDoc::sFirst )); MifDoc::T_LTWH bodyRect; MifDoc::T_LTWH headerRect; MifDoc::T_LTWH footerRect; bodyRect.l = format().FotLeftMargin; bodyRect.t = format().FotTopMargin; bodyRect.w = format().FotPageWidth - format().FotLeftMargin - format().FotRightMargin; bodyRect.h = format().FotPageHeight - format().FotTopMargin - format().FotBottomMargin; headerRect.l = format().FotLeftMargin; headerRect.t = 0; headerRect.w = bodyRect.w; headerRect.h = format().FotTopMargin; footerRect.l = format().FotLeftMargin; footerRect.t = format().FotPageHeight - format().FotBottomMargin; footerRect.w = bodyRect.w; footerRect.h = format().FotBottomMargin; { MifDoc::TextRect &firstBodyTextRect = *(new MifDoc::TextRect( bodyRect, format().FotPageNColumns, format().FotPageColumnSep, format().FotPageBalanceColumns )); MifDoc::TextRect &rightBodyTextRect = *(new MifDoc::TextRect( bodyRect, format().FotPageNColumns, format().FotPageColumnSep, format().FotPageBalanceColumns)); MifDoc::TextRect &leftBodyTextRect = *(new MifDoc::TextRect( bodyRect, format().FotPageNColumns, format().FotPageColumnSep, format().FotPageBalanceColumns )); MifDoc::TextRect &bodyTextRect = *(new MifDoc::TextRect( bodyRect, format().FotPageNColumns, format().FotPageColumnSep, format().FotPageBalanceColumns )); MifDoc::TextRect &firstHeaderTextRect = *(new MifDoc::TextRect( headerRect )); MifDoc::TextRect &rightHeaderTextRect = *(new MifDoc::TextRect( headerRect )); MifDoc::TextRect &leftHeaderTextRect = *(new MifDoc::TextRect( headerRect )); MifDoc::TextRect &firstFooterTextRect = *(new MifDoc::TextRect( footerRect )); MifDoc::TextRect &rightFooterTextRect = *(new MifDoc::TextRect( footerRect )); MifDoc::TextRect &leftFooterTextRect = *(new MifDoc::TextRect( footerRect )); firstMasterPage.TextRects.push_back( firstHeaderTextRect ); firstMasterPage.TextRects.push_back( firstBodyTextRect ); firstMasterPage.TextRects.push_back( firstFooterTextRect ); rightMasterPage.TextRects.push_back( rightHeaderTextRect ); rightMasterPage.TextRects.push_back( rightBodyTextRect ); rightMasterPage.TextRects.push_back( rightFooterTextRect ); leftMasterPage.TextRects.push_back( leftHeaderTextRect ); leftMasterPage.TextRects.push_back( leftBodyTextRect ); leftMasterPage.TextRects.push_back( leftFooterTextRect ); bodyPage.TextRects.push_back( bodyTextRect ); mifDoc.pages().push_back( bodyPage ); mifDoc.pages().push_back( firstMasterPage ); mifDoc.pages().push_back( rightMasterPage ); mifDoc.pages().push_back( leftMasterPage ); MifDoc::ParagraphFormat headerPF; headerPF.setDSSSLDefaults(); MifDoc::ParagraphFormat footerPF; footerPF.setDSSSLDefaults(); setupHeaderFooterParagraphFormat( headerPF, footerPF, bodyRect.w ); FotSimplePageSequence.BodyTextFlow = new MifDoc::TextFlow( bodyTextRect, true, &FotSimplePageSequence.paragraphFormat, MifDoc::sDefaultPgfFormat ); FotSimplePageSequence.FirstHeaderTextFlow = new MifDoc::TextFlow( firstHeaderTextRect, false, &headerPF, MifDoc::sHeader ); FotSimplePageSequence.FirstFooterTextFlow = new MifDoc::TextFlow( firstFooterTextRect, false, &footerPF, MifDoc::sFooter ); FotSimplePageSequence.LeftHeaderTextFlow = new MifDoc::TextFlow( leftHeaderTextRect, false, &headerPF, MifDoc::sHeader ); FotSimplePageSequence.LeftFooterTextFlow = new MifDoc::TextFlow( leftFooterTextRect, false, &footerPF, MifDoc::sFooter ); FotSimplePageSequence.RightHeaderTextFlow = new MifDoc::TextFlow( rightHeaderTextRect, false, &headerPF, MifDoc::sHeader ); FotSimplePageSequence.RightFooterTextFlow = new MifDoc::TextFlow( rightFooterTextRect, false, &footerPF, MifDoc::sFooter ); makeEmptyTextFlow( firstBodyTextRect ); makeEmptyTextFlow( leftBodyTextRect ); makeEmptyTextFlow( rightBodyTextRect ); mifDoc.textFlows().push_back( *FotSimplePageSequence.BodyTextFlow ); mifDoc.textFlows().push_back( *FotSimplePageSequence.FirstHeaderTextFlow ); mifDoc.textFlows().push_back( *FotSimplePageSequence.FirstFooterTextFlow ); mifDoc.textFlows().push_back( *FotSimplePageSequence.LeftHeaderTextFlow ); mifDoc.textFlows().push_back( *FotSimplePageSequence.LeftFooterTextFlow ); mifDoc.textFlows().push_back( *FotSimplePageSequence.RightHeaderTextFlow ); mifDoc.textFlows().push_back( *FotSimplePageSequence.RightFooterTextFlow ); mifDoc.document().setDTwoSides( true ); mifDoc.document().setDParity( MifDoc::sFirstRight ); } mifDoc.enterTextFlow( *FotSimplePageSequence.BodyTextFlow ); } void MifFOTBuilder::startSimplePageSequenceHeaderFooter( unsigned hfPart ) { if( firstHeaderFooter ) { setupSimplePageSequence(); firstHeaderFooter = false; } MifDoc::TextFlow *curTextFlow; if( hfPart & firstHF ) if( hfPart & frontHF ) if( hfPart & headerHF ) curTextFlow = FotSimplePageSequence.FirstHeaderTextFlow; else curTextFlow = FotSimplePageSequence.FirstFooterTextFlow; else return; else if( hfPart & frontHF ) if( hfPart & headerHF ) curTextFlow = FotSimplePageSequence.RightHeaderTextFlow; else curTextFlow = FotSimplePageSequence.RightFooterTextFlow; else if( hfPart & headerHF ) curTextFlow = FotSimplePageSequence.LeftHeaderTextFlow; else curTextFlow = FotSimplePageSequence.LeftFooterTextFlow; mifDoc.enterTextFlow( *curTextFlow ); if( hfPart & (centerHF | rightHF) ) mifDoc.outSpecialChar( MifDoc::sTab ); else // leftHF (hfPart & headerHF) ? beginHeader() : beginFooter(); } void MifFOTBuilder::endSimplePageSequenceHeaderFooter( unsigned hfPart ) { if( hfPart & rightHF && (hfPart & frontHF || !(hfPart & firstHF)) ) { endHeaderFooter(); } if( !(hfPart & firstHF) || hfPart & frontHF ) mifDoc.exitTextFlow(); } void MifFOTBuilder::setupHeaderFooterParagraphFormat ( MifDoc::ParagraphFormat &hpf, MifDoc::ParagraphFormat &fpf, MifDoc::T_dimension textRectWidth ) { MifDoc::TabStop centerTS( MifDoc::sCenter, textRectWidth / 2 ); MifDoc::TabStop rightTS( MifDoc::sRight, textRectWidth ); hpf.setFrom( FotSimplePageSequence.paragraphFormat, 0, MifDoc::FontFormat::fAll ); hpf.TabStops.push_back( centerTS ); hpf.TabStops.push_back( rightTS ); hpf.setProperties |= MifDoc::ParagraphFormat::fTabStops; fpf = hpf; hpf.setFSize( ( ( format().FotBottomMargin - format().FotFooterMargin ) * 3 ) / 2 ); fpf.setFSize( ( format().FotHeaderMargin * 3 ) / 2 ); hpf.setPgfTag( MifDoc::sHeader ); fpf.setPgfTag( MifDoc::sFooter ); mifDoc.pgfCatalog().ParaFormats.push_back( hpf ); mifDoc.pgfCatalog().ParaFormats.push_back( fpf ); hpf.clearSetProperties(); fpf.clearSetProperties(); } void MifFOTBuilder::endAllSimplePageSequenceHeaderFooter() { // mifDoc.enterTextFlow( *FotSimplePageSequence.BodyTextFlow ); } inline void MifFOTBuilder::pageNumber() { mifDoc.outPageNumber(); } // --------- MifFOTBuilder::Table --------------------------------------------- void MifFOTBuilder::Table::resolveBorders ( Vector &rows, bool hasFirstTableRow, bool hasLastTableRow ) { bool isFirstRow; bool isLastRow; bool isFirstColumn; bool isLastColumn; Cell *cell = NULL; size_t r, c, rr, cc; bool leftEdge, topEdge; for( r = 0; r < rows.size(); r++ ) { for( c = 0; c < rows[r].Cells.size()-1; c++ ) { cell = &rows[r].Cells[c]; if( cell->OverlappingCell == NULL ) { for( rr = r; rr < r + cell->nRowsSpanned; rr++ ) { for( cc = c, leftEdge = true; cc < c + cell->nColumnsSpanned; cc++ ) { rows[rr].Cells[cc].OverlappingCell = cell; } } } } } for( r = 0; r < rows.size(); r++ ) { for( c = 0; c < rows[r].Cells.size() - 1; c++ ) { cell = &rows[r].Cells[c]; if( cell->OverlappingCell == cell ) { for( rr = r, topEdge = true; rr < r + cell->nRowsSpanned; rr++ ) { isFirstRow = ( rr == 0 ) ? true : false; isLastRow = ( rr == rows.size() - 1 ) ? true : false; for( cc = c, leftEdge = true; cc < c + cell->nColumnsSpanned; cc++ ) { isFirstColumn = ( cc == 0 ) ? true : false; isLastColumn = ( cc == rows[rr].Cells.size() - 2 ) ? true : false; if( leftEdge ) if( isFirstColumn ) { cell->beforeColumnBorder.resolve( beforeColumnBorder ); } else cell->beforeColumnBorder.resolve ( rows[rr].Cells[cc-1].OverlappingCell->afterColumnBorder ); if( topEdge ) if( isFirstRow && hasFirstTableRow ) cell->beforeRowBorder.resolve( beforeRowBorder ); else if( !isFirstRow ) cell->beforeRowBorder.resolve ( rows[rr-1].Cells[cc].OverlappingCell->afterRowBorder ); if( isLastColumn ) cell->afterColumnBorder.resolve( afterColumnBorder ); if( isLastRow && hasLastTableRow ) cell->afterRowBorder.resolve( afterRowBorder ); leftEdge = false; } topEdge = false; } } } } } void MifFOTBuilder::Table::begin( MifDoc &mifDoc ) { CurCell = NULL; NoTablePartsSeen = true; TableParts.resize( 0 ); TableParts.resize( 1 ); TableParts.back().begin( *this, mifDoc ); } // --------- MifFOTBuilder::TablePart ----------------------------------------- void MifFOTBuilder::TablePart::begin( Table &parent, MifDoc &mifDoc ) { Columns.resize( 0 ); Header.resize( 0 ); Body.resize( 0 ); Footer.resize( 0 ); columnsProcessed = false; needsColumnReprocessing = false; ParentTable = &parent; parentTable().CurRows = &Body; parentTable().CurTablePart = this; if( MifTableNum == 0 ) { mifDoc.tbls().resize( mifDoc.tbls().size() + 1 ); MifTableNum = mifDoc.tbls().size(); MifDoc::CurInstance->setCurTblNum( MifTableNum ); } } void MifFOTBuilder::TablePart::translate( MifDoc &mifDoc ) { if( needsColumnReprocessing ) processColumns(); MifDoc::Tbl &mifTbl = mifTable( mifDoc ); if( parentTable().startIndent != 0 ) { // DSSSL default mifTbl.tblFormat.setTblLIndent( parentTable().startIndent ); mifTbl.setProperties |= MifDoc::Tbl::fTblFormat; } if( parentTable().displayAlignment != symbolStart ) { mifTbl.setProperties |= MifDoc::Tbl::fTblFormat; MifDoc::T_keyword mifAlignment = MifDoc::sLeft; switch( parentTable().displayAlignment ) { case symbolStart: mifAlignment = MifDoc::sLeft; break; case symbolEnd: mifAlignment = MifDoc::sRight; break; case symbolCenter: mifAlignment = MifDoc::sCenter; break; case symbolInside: mifAlignment = MifDoc::sInside; break; case symbolOutside: mifAlignment = MifDoc::sOutside; break; default: assert( false ); } mifTbl.tblFormat.setTblAlignment( mifAlignment ); } bool putHeaderInBody = Body.size() == 0 && Header.size() > 0; bool putFooterInBody = !putHeaderInBody && Body.size() == 0 && Footer.size() > 0; for( size_t i = 0; i < Header.size(); i++ ) Header[i].translate( putHeaderInBody ? mifTbl.TblBody : mifTbl.TblH, mifDoc ); for( size_t i = 0; i < Body.size(); i++) Body[i].translate( mifTbl.TblBody, mifDoc ); for( size_t i = 0; i < Footer.size(); i++ ) Footer[i].translate( putFooterInBody ? mifTbl.TblBody : mifTbl.TblF, mifDoc ); } void MifFOTBuilder::TablePart::processColumns() { MifDoc::Tbl &mifTbl = mifTable( *MifDoc::CurInstance ); mifTbl.setTblNumColumns( 0 ); mifTbl.setTblNumColumns( Columns.size() ); mifTbl.TblColumnWidths.resize( 0 ); mifTbl.TblColumnWidths.resize( Columns.size() ); mifTbl.TblColumnWidthsAreSet(); long totalNonproportionalWidth = 0L; double totalProportionalUnits = 0.0; for( size_t i = 0; i < Columns.size(); i++ ) { if( Columns[i].hasWidth ) { if( Columns[i].width.tableUnitFactor ) { totalProportionalUnits += Columns[i].width.tableUnitFactor; } else { mifTbl.TblColumnWidths[i] = MifFOTBuilder::curInstance().computeLengthSpec( Columns[i].width ); totalNonproportionalWidth += mifTbl.TblColumnWidths[i]; } } } double proportionalUnit = 0.0; if( totalProportionalUnits ) proportionalUnit = ( parentTable().tableWidth - totalNonproportionalWidth ) / totalProportionalUnits; for( size_t i = 0; i < Columns.size(); i++ ) { if( Columns[i].hasWidth ) { if( Columns[i].width.tableUnitFactor ) mifTbl.TblColumnWidths[i] = long(proportionalUnit * Columns[i].width.tableUnitFactor); } else mifTbl.TblColumnWidths[i] = long(proportionalUnit); } columnsProcessed = true; } void MifFOTBuilder::TablePart::normalizeRows() { size_t maxCellsInRow = Columns.size()+1; Vector *rows; for( int step = 0; step < 2; step++ ) { for( int rowType = 0; rowType < 3; rowType++ ) { switch( rowType ) { case 0: rows = &Header; break; case 1: rows = &Body; break; default: rows = &Footer; } for( size_t r = 0; r < rows->size(); r++ ) { if( step == 0 ) { if( (*rows)[r].Cells.size() > 1 ) { size_t lastCellIdx = (*rows)[r].Cells.size()-2; Cell &lastCell = (*rows)[r].Cells[lastCellIdx]; if( !lastCell.missing && lastCellIdx+lastCell.nColumnsSpanned+1 > maxCellsInRow ) maxCellsInRow = lastCellIdx+lastCell.nColumnsSpanned+1; } } else if( (*rows)[r].Cells.size() < maxCellsInRow ) (*rows)[r].Cells.resize( maxCellsInRow ); } } } } // --------- MifFOTBuilder::Row ----------------------------------------------- void MifFOTBuilder::Row::translate( Vector &mifRows, MifDoc &mifDoc ) { mifRows.resize( mifRows.size() + 1 ); MifDoc::Row &mifRow = mifRows.back(); mifRow.Cells.resize( Cells.size() - 1 ); for( size_t i = 0; i + 1 < Cells.size(); i++ ) { Cells[i].translate( Cells[i].mifCell(), mifDoc ); mifRow.Cells[i] = Cells[i].mifCell(); } } // --------- MifFOTBuilder::Cell ---------------------------------------------- void MifFOTBuilder::Cell::translate( MifDoc::Cell &mifCell, MifDoc &mifDoc ) { MifDoc::T_tagstring rulingTag; rulingTag = beforeRowBorder.makeMifRuling( mifDoc ); if( rulingTag.size() ) mifCell.setCellTRuling( rulingTag ); rulingTag = afterRowBorder.makeMifRuling( mifDoc ); if( rulingTag.size() ) mifCell.setCellBRuling( rulingTag ); rulingTag = beforeColumnBorder.makeMifRuling( mifDoc ); if( rulingTag.size() ) mifCell.setCellLRuling( rulingTag ); rulingTag = afterColumnBorder.makeMifRuling( mifDoc ); if( rulingTag.size() ) mifCell.setCellRRuling( rulingTag ); } // --------- MifFOTBuilder::Border -------------------------------------------- void MifFOTBuilder::Border::setFromFot() { MifFOTBuilder::Format &f = MifFOTBuilder::curInstance().format(); borderPriority = f.FotBorderPriority; borderPresent = f.FotBorderPresent; lineThickness = f.FotLineThickness; lineRepeat = f.FotLineRepeat; lineSep = f.FotLineSep; color = f.FColor; } MifDoc::T_tagstring MifFOTBuilder::Border::makeMifRuling( MifDoc &mifDoc ) { MifDoc::T_tagstring result; if( borderPresent ) { MifDoc::Ruling *mifRuling = new MifDoc::Ruling; mifRuling->setRulingPenWidth( lineThickness ); mifRuling->setRulingLines( lineRepeat >= 2 ? 2 : lineRepeat ); mifRuling->setRulingGap( lineRepeat >= 2 ? lineSep - lineThickness : 0 ); mifRuling->setRulingColor( color ); result = MifDoc::T_tagstring( mifRuling->key( *mifRuling ) ); mifRuling->setRulingTag( result ); if( mifDoc.rulingCatalog().Rulings.lookup( result ) == NULL ) { mifDoc.rulingCatalog().Rulings.insert( mifRuling ); } else delete mifRuling; } return result; } void MifFOTBuilder::Border::resolve( Border &adjacentBorder ) { if( adjacentBorder.borderPriority > borderPriority || ( adjacentBorder.borderPriority == borderPriority && !adjacentBorder.cellBorder && adjacentBorder.borderPresent ) ) { lineThickness = adjacentBorder.lineThickness; borderPresent = adjacentBorder.borderPresent; lineRepeat = adjacentBorder.lineRepeat; lineSep = adjacentBorder.lineSep; color = adjacentBorder.color; if( adjacentBorder.cellBorder ) adjacentBorder.borderPresent = false; } } //----------------------------------------------------------------------------- void MifFOTBuilder::setFontSize( long n ) { nextFormat.FSize = n; } void MifFOTBuilder::setLineSpacing( const LengthSpec &l ) { nextFormat.FotLineSpacingSpec = l; } void MifFOTBuilder::setFontWeight( Symbol weight ) { if( weight > symbolMedium ) { nextFormat.FWeight = MifDoc::sBold; } else { nextFormat.FWeight = MifDoc::sRegular; } } void MifFOTBuilder::setFontPosture( Symbol posture ) { switch( posture ) { case symbolOblique: case symbolBackSlantedOblique: case symbolItalic: case symbolBackSlantedItalic: nextFormat.FAngle = MifDoc::sItalic; break; default: nextFormat.FAngle = MifDoc::sRegular; } } inline void MifFOTBuilder::setStartIndent( const LengthSpec &l ) { nextFormat.FotStartIndentSpec = l; } inline void MifFOTBuilder::setEndIndent( const LengthSpec &l ) { nextFormat.FotEndIndentSpec = l; } inline void MifFOTBuilder::setFirstLineStartIndent( const LengthSpec &l ) { nextFormat.FotFirstLineStartIndentSpec = l; } void MifFOTBuilder::setQuadding( Symbol quadding ) { switch( quadding ) { case symbolEnd: nextFormat.PgfAlignment = MifDoc::sRight; break; case symbolCenter: nextFormat.PgfAlignment = MifDoc::sCenter; break; case symbolJustify: nextFormat.PgfAlignment = MifDoc::sLeftRight; break; default: // symbolStart nextFormat.PgfAlignment = MifDoc::sLeft; } } inline void MifFOTBuilder::setKern( bool kern ) { nextFormat.FPairKern = kern; } inline void MifFOTBuilder::setLanguage( Letter2 code ) { nextFormat.FotLanguage = code; nextFormat.computePgfLanguage(); } inline void MifFOTBuilder::setCountry( Letter2 code ) { nextFormat.FotCountry = code; nextFormat.computePgfLanguage(); } inline void MifFOTBuilder::setHyphenate( bool hyphenate ) { nextFormat.PgfHyphenate = hyphenate; } inline void MifFOTBuilder::setHyphenationRemainCharCount( long n ) { nextFormat.HyphenMinPrefix = n; } inline void MifFOTBuilder::setHyphenationPushCharCount( long n ) { nextFormat.HyphenMinSuffix = n; } inline void MifFOTBuilder::setHyphenationLadderCount( long n ) { nextFormat.HyphenMaxLines = n; } void MifFOTBuilder::setFontFamilyName( const StringC &s ) { nextFormat.FFamily.resize( 0 ); for( size_t i = 0; i < s.size(); i++ ) nextFormat.FFamily += char(s[i]); } inline void MifFOTBuilder::setWidowCount( long n ) { nextFormat.PgfBlockSize = n; } inline void MifFOTBuilder::setOrphanCount( long n ) { nextFormat.PgfBlockSize = n; } inline void MifFOTBuilder::setPageWidth( Length pWidth ) { nextFormat.FotPageWidth = pWidth; } inline void MifFOTBuilder::setPageHeight( Length pHeight ) { nextFormat.FotPageHeight = pHeight; } inline void MifFOTBuilder::setLeftMargin( Length leftM ) { nextFormat.FotLeftMargin = leftM; } inline void MifFOTBuilder::setRightMargin( Length rightM ) { nextFormat.FotRightMargin = rightM; } inline void MifFOTBuilder::setTopMargin( Length topM ) { nextFormat.FotTopMargin = topM; } inline void MifFOTBuilder::setBottomMargin( Length bottomM ) { nextFormat.FotBottomMargin = bottomM; } void MifFOTBuilder::setHeaderMargin( Length headerM ) { nextFormat.FotHeaderMargin = headerM; } void MifFOTBuilder::setFooterMargin( Length footerM ) { nextFormat.FotFooterMargin = footerM; } void MifFOTBuilder::setDisplayAlignment( Symbol alignment ) { nextFormat.FotDisplayAlignment = alignment; } //--------- LEADERS ----------------------------------------------------------- void MifFOTBuilder::startLeader( const LeaderNIC & ) { checkForParagraphReopening(); lastFlowObjectWasWhitespace = false; mifDoc.outSpecialChar( MifDoc::sTab ); inLeader = true; setCurLeaderStream( new MifTmpOutputByteStream() ); } void MifFOTBuilder::endLeader() { if( !mifDoc.curPara()->leaderTabsSet ) { String leaderStr; curLeaderStream().commit( leaderStr ); int numTabs = mifDoc.curFormat().PgfNumTabs + 1; mifDoc.curFormat().setPgfNumTabs( numTabs ); mifDoc.curPara()->format().TabStops.push_back ( MifDoc::TabStop( MifDoc::sRight, format().FotCurDisplaySize - mifDoc.curFormat().PgfRIndent - 1, MifDoc::T_string( leaderStr ) ) ); mifDoc.curPara()->format().setPgfNumTabs( numTabs ); mifDoc.curPara()->curFormat().setPgfNumTabs( numTabs ); mifDoc.curPara()->format().setProperties |= MifDoc::ParagraphFormat::fTabStops; mifDoc.curPara()->leaderTabsSet = true; } if( CurLeaderStream ) { delete CurLeaderStream; CurLeaderStream = NULL; } inLeader = false; lastFlowObjectWasWhitespace = false; } //--------- LINE FIELDS ------------------------------------------------------- void MifFOTBuilder::startLineField( const LineFieldNIC & ) { checkForParagraphReopening(); lastFlowObjectWasWhitespace = false; Length fieldWidth = computeLengthSpec( nextFormat.FotFieldWidth ); Length firstLineIndent = mifDoc.curPara()->format().PgfFIndent; bool leadingTab = true; switch( nextFormat.FotFieldAlign ) { case symbolStart: default: mifDoc.curPara()->format().TabStops.push_back ( MifDoc::TabStop( MifDoc::sLeft, firstLineIndent + fieldWidth ) ); leadingTab = false; break; case symbolEnd: mifDoc.curPara()->format().TabStops.push_back ( MifDoc::TabStop( MifDoc::sRight, firstLineIndent + fieldWidth ) ); mifDoc.curPara()->format().TabStops.push_back ( MifDoc::TabStop( MifDoc::sLeft, firstLineIndent + fieldWidth + 1 ) ); break; case symbolCenter: mifDoc.curPara()->format().TabStops.push_back ( MifDoc::TabStop( MifDoc::sCenter, firstLineIndent + fieldWidth / 2 ) ); mifDoc.curPara()->format().TabStops.push_back ( MifDoc::TabStop( MifDoc::sLeft, firstLineIndent + fieldWidth + 1 ) ); } int numTabs = mifDoc.curFormat().PgfNumTabs + leadingTab ? 2 : 1; mifDoc.curFormat().setPgfNumTabs( numTabs ); mifDoc.curPara()->format().setPgfNumTabs( numTabs ); mifDoc.curPara()->curFormat().setPgfNumTabs( numTabs ); mifDoc.curPara()->format().setProperties |= MifDoc::ParagraphFormat::fTabStops; start(); if( leadingTab ) mifDoc.outSpecialChar( MifDoc::sTab ); } void MifFOTBuilder::endLineField() { mifDoc.outSpecialChar( MifDoc::sTab ); end(); lastFlowObjectWasWhitespace = false; } //--------- PARAGRAPH BREAKS -------------------------------------------------- void MifFOTBuilder::paragraphBreak( const ParagraphNIC &nic ) { if( MifDoc::Para::currentlyOpened ) { if( paragraphBreakInEffect ) doEndParagraph( false, false, false ); else { doEndParagraph( true, false, false ); paragraphBreakInEffect = true; } doStartParagraph( nic ); } } //--------- SCORES ------------------------------------------------------------ void MifFOTBuilder::startScore( Symbol scoreType ) { checkForParagraphReopening(); switch( scoreType ) { case symbolBefore: nextFormat.setFOverline( true ); break; case symbolThrough: nextFormat.setFStrike( true ); break; case symbolAfter: default: nextFormat.setFUnderlining ( nextFormat.FotLineRepeat > 1 ? MifDoc::sFDouble : MifDoc::sFSingle ); break; } start(); } void MifFOTBuilder::endScore() { end(); } //--------- ANCHORED FRAMES (GENERAL) ----------------------------------------- MifDoc::Frame &MifFOTBuilder::makeAnchoredFrame ( MifDoc::T_keyword frameType, long width, long height, MifDoc::T_keyword anchorAlign ) { mifDoc.aFrames().resize( mifDoc.aFrames().size() + 1 ); MifDoc::Frame &frame = mifDoc.aFrames().back(); frame.setFrameType( frameType ); frame.setAnchorAlign( anchorAlign ); frame.setShapeRect( MifDoc::T_LTWH( 0, 0, width, height ) ); return frame; } //--------- EXTERNAL GRAPHICS ------------------------------------------------- void MifFOTBuilder::externalGraphic( const ExternalGraphicNIC &nic ) { bool isInline = MifDoc::Para::currentlyOpened ? true : false; if( !isInline ) startDisplay( nic ); start(); MifDoc::T_pathname mifPathname; if( systemIdToMifPathname( nic.entitySystemId, mifPathname ) ) { MifDoc::T_keyword mifAlignment = MifDoc::sLeft; switch( format().FotDisplayAlignment ) { case symbolStart: mifAlignment = MifDoc::sLeft; break; case symbolEnd: mifAlignment = MifDoc::sRight; break; case symbolCenter: mifAlignment = MifDoc::sCenter; break; case symbolInside: mifAlignment = MifDoc::sInside; break; case symbolOutside: mifAlignment = MifDoc::sOutside; break; default: assert( false ); } MifDoc::Frame &frame = makeAnchoredFrame( isInline ? MifDoc::sInline : MifDoc::sBelow, nic.hasMaxWidth ? computeLengthSpec( nic.maxWidth ) : 72000, nic.hasMaxHeight ? computeLengthSpec( nic.maxHeight ) : 72000, mifAlignment ); MifDoc::ImportObject *importObject = new MifDoc::ImportObject( mifPathname, frame.ShapeRect ); frame.Objects.resize( frame.Objects.size() + 1 ); frame.Objects.back() = importObject; if( !isInline ) doStartParagraph( nic, true, 0, false ); else checkForParagraphReopening(); mifDoc.outAFrame( frame.ID, mifDoc.os() ); if( !isInline ) endParagraph(); else lastFlowObjectWasWhitespace = false; } end(); if( !isInline ) endDisplay(); } enum TComponent { cName, cUp, cRoot, cRootDrive }; void addComponent( MifDoc::T_pathname &target, TComponent cType, StringC &component ) { target += '<'; target += cType == cName ? 'c' : ( cType == cUp ? 'u' : 'r' ); target += '\\'; target += '>'; if( cType == cName || cType == cRootDrive ) for( size_t i = 0; i < component.size(); i++ ) target += char( component[i] ); } bool MifFOTBuilder::systemIdToMifPathname ( const StringC &systemId, MifDoc::T_pathname &mifPathname ) { StringC filename; StringC component; int result; if( ( result = systemIdFilename( systemId, filename ) ) < 0 ) { App->message( MifMessages::systemIdNotFilename, StringMessageArg( systemId ) ); return false; } else { bool firstComponent = true; size_t i = 0; do { component.resize( 0 ); while( i < filename.size() && filename[i] != '\\' && filename[i] != '/' ) component += char( filename[i++] ); switch( component.size() ) { case 2: if( firstComponent && component[1] == ':' ) addComponent( mifPathname, cRootDrive, component ); else if( component[0] == '.' && component[1] == '.' ) addComponent( mifPathname, cUp, component ); else goto add_component; break; case 1: if( component[0] != '.' ) goto add_component; break; case 0: if( firstComponent && filename.size() > 0 ) addComponent( mifPathname, cRoot, component ); break; add_component: default: addComponent( mifPathname, cName, component ); } firstComponent = false; i++; } while( i < filename.size() ); } return result == 0 ? false : true; } // System Id Resolution from James Clark // Return -1 if an error should be generated // FIXME in some cases should copy the entity into a file in the same // directory as the output file. int MifFOTBuilder::systemIdFilename(const StringC &systemId, StringC &filename) { if (systemId.size() == 0) return -1; Owner in(EntityManager->open(systemId, *SystemCharset, InputSourceOrigin::make(), 0, *App)); if (!in) return 0; Xchar c = in->get(*App); StorageObjectLocation soLoc; ParsedSystemId parsedBuf; if (c == InputSource::eE && in->accessError()) { if (!EntityManager->parseSystemId(systemId, *SystemCharset, 0, 0, *App, parsedBuf)) return 0; if (parsedBuf.size() != 1 || parsedBuf[0].baseId.size()) return 0; soLoc.storageObjectSpec = &parsedBuf[0]; soLoc.actualStorageId = parsedBuf[0].specId; } else { const Location &loc = in->currentLocation(); if (loc.origin().isNull()) return -1; const InputSourceOrigin *tem = loc.origin()->asInputSourceOrigin(); if (!tem) return -1; const ParsedSystemId *psi = ExtendEntityManager::externalInfoParsedSystemId(tem->externalInfo()); if (!psi || psi->size() != 1) return -1; if (!ExtendEntityManager::externalize(tem->externalInfo(), 0, soLoc)) return -1; } if (strcmp(soLoc.storageObjectSpec->storageManager->type(), "OSFILE") != 0) return -1; filename = soLoc.actualStorageId; return 1; } //--------- RULES ------------------------------------------------------------- void MifFOTBuilder::rule( const RuleNIC &nic ) { bool isInline = ( nic.orientation == symbolHorizontal || nic.orientation == symbolVertical ) ? false : true; if( isInline ) checkForParagraphReopening(); if( !isInline ) startDisplay( nic ); start(); long indentlessDisplaySize = format().FotCurDisplaySize - computeLengthSpec( format().FotStartIndentSpec ) - computeLengthSpec( format().FotEndIndentSpec ); MifDoc::T_dimension ruleHeight = format().FotLineThickness + format().FotLineSep * ( format().FotLineRepeat - 1 ); if( ruleHeight < 0 ) ruleHeight = 0; MifDoc::T_dimension ruleLength; MifDoc::T_dimension ruleOffset; if( nic.hasLength && ( ruleLength = computeLengthSpec( nic.length ) ) > 0 ) { switch( format().FotDisplayAlignment ) { case symbolStart: default: ruleOffset = 0; break; case symbolCenter: ruleOffset = ( indentlessDisplaySize - ruleLength ) / 2; break; case symbolEnd: ruleOffset = indentlessDisplaySize - ruleLength; } } else { ruleOffset = 0; ruleLength = indentlessDisplaySize; } MifDoc::Frame &frame = makeAnchoredFrame( MifDoc::sInline, isInline ? long(ruleLength) : indentlessDisplaySize, ruleHeight ); if( isInline ) frame.setBLOffset( computeLengthSpec( format().FotPositionPointShiftSpec ) ); else frame.setBLOffset( -ruleHeight / 2 + 4000 / 3 ); // min font baseline correction MifDoc::T_keyword capType; switch( format().FotLineCap ) { case symbolButt: default: capType = MifDoc::sButt; break; case symbolRound: capType = MifDoc::sRound; break; case symbolSquare: capType = MifDoc::sSquare; } MifDoc::PolyLine *polyLine; Length curLineVOffset = format().FotLineThickness / 2; for( long i = format().FotLineRepeat; i > 0; i--, curLineVOffset += format().FotLineSep ) { polyLine = new MifDoc::PolyLine( capType, 0, 0, format().FotLineThickness, format().FColor ); frame.Objects.resize( frame.Objects.size() + 1 ); frame.Objects.back() = polyLine; polyLine->setHeadCap( capType ); polyLine->setTailCap( capType ); polyLine->Points.resize( polyLine->Points.size() + 1 ); polyLine->Points.back() = MifDoc::T_XY( ruleOffset, curLineVOffset ); polyLine->Points.resize( polyLine->Points.size() + 1 ); polyLine->Points.back() = MifDoc::T_XY( ruleOffset + ruleLength, curLineVOffset ); } if( !isInline ) doStartParagraph( nic, true, 0, true ); mifDoc.outAFrame( frame.ID, mifDoc.os() ); if( !isInline ) endParagraph(); else lastFlowObjectWasWhitespace = false; end(); if( !isInline ) endDisplay(); } //--------- TABLES ------------------------------------------------------------ void MifFOTBuilder::startTable( const TableNIC &nic ) { startDisplay( nic ); start(); if( !curTable().DefaultTblFormatGenerated ) { MifDoc::TblFormat defaultTblFormat( MifDoc::sDefaultTblFormat ); defaultTblFormat.setDSSSLDefaults(); mifDoc.tblCatalog().TblFormats.push_back( defaultTblFormat ); curTable().DefaultTblFormatGenerated = true; } Length curStartIndent = computeLengthSpec( format().FotStartIndentSpec ); curTable().startIndent = curStartIndent; curTable().begin( mifDoc ); // curTable().nic = nic; curTable().displayAlignment = format().FotDisplayAlignment; if( nic.widthType == TableNIC::widthExplicit ) curTable().tableWidth = computeLengthSpec( nic.width ); else curTable().tableWidth = format().FotCurDisplaySize - curStartIndent - computeLengthSpec( format().FotEndIndentSpec ); doStartParagraph( nic, true, 0 ); endParagraph(); } void MifFOTBuilder::endTable() { bool firstPart, lastPart, hasHeader, hasFooter; for( size_t i = 0; i < curTable().TableParts.size(); i++ ) { firstPart = ( i == 0 ) ? true : false; lastPart = ( i == curTable().TableParts.size() - 1 ) ? true : false; TablePart &tablePart = curTable().TableParts[i]; tablePart.normalizeRows(); hasHeader = tablePart.Header.size() > 0 ? true : false; hasFooter = tablePart.Footer.size() > 0 ? true : false; if( hasHeader ) curTable().resolveBorders( tablePart.Header, firstPart ? true : false, false ); curTable().resolveBorders( tablePart.Body, hasHeader ? false : true, hasFooter ? false : true ); if( hasFooter ) curTable().resolveBorders( tablePart.Footer, false, lastPart ? true : false ); tablePart.translate( mifDoc ); } MifDoc::CurInstance->setCurTblNum( 0 ); endDisplay(); end(); } void MifFOTBuilder::tableColumn( const TableColumnNIC &nic ) { if( nic.columnIndex >= curTable().curTablePart().Columns.size() ) curTable().curTablePart().Columns.resize( nic.columnIndex + 1 ); curTable().curTablePart().Columns[nic.columnIndex].hasWidth = nic.hasWidth; if( nic.hasWidth ) { curTable().curTablePart().Columns[nic.columnIndex].width = nic.width; } } void MifFOTBuilder::startTableRow() { curTable().curRows().resize( curTable().curRows().size() + 1 ); } void MifFOTBuilder::endTableRow() { } void MifFOTBuilder::startTableCell( const TableCellNIC &nic ) { start(); TablePart &tp = curTable().curTablePart(); if( !tp.columnsProcessed ) tp.processColumns(); Vector &Cells = curTable().curRows().back().Cells; if( nic.columnIndex >= Cells.size() ) Cells.resize( nic.columnIndex + 1 ); Cell &cell = Cells[nic.columnIndex]; curTable().CurCell = &cell; cell.missing = nic.missing; if( nic.nColumnsSpanned != 1 ) { cell.nColumnsSpanned = nic.nColumnsSpanned; cell.mifCell().setCellColumns( nic.nColumnsSpanned ); } if( nic.nRowsSpanned != 1 ) { cell.nRowsSpanned = nic.nRowsSpanned; cell.mifCell().setCellRows( nic.nRowsSpanned ); } if( format().FotCellBackground && format().MifBackgroundColor.size() > 0 ) { cell.mifCell().setCellFill( 0 ); cell.mifCell().setCellColor( format().MifBackgroundColor ); } long newDisplaySize = 0; for( size_t i = nic.columnIndex; i < nic.columnIndex + nic.nColumnsSpanned; i++ ) if( i < tp.Columns.size() ) { if( tp.Columns[i].hasWidth ) newDisplaySize += computeLengthSpec( tp.Columns[i].width ); } else if( !nic.missing ) { App->message( MifMessages::missingTableColumnFlowObject ); // NOTE: at this point there's already a danger of not realizing // right display space sizes inside cells tp.Columns.resize( tp.Columns.size() + 1 ); tp.Columns.back().hasWidth = true; TableLengthSpec tls; tls.tableUnitFactor = 1.0; tp.Columns.back().width = tls; tp.needsColumnReprocessing = true; if( (MifDoc::T_integer)i > tp.mifTable( mifDoc ).TblNumColumns ) tp.mifTable( mifDoc ).setTblNumColumns( i ); } newDisplaySize -= format().PgfCellMargins.l + format().PgfCellMargins.r; if( newDisplaySize > 0 ) format().FotCurDisplaySize = newDisplaySize; cell.displaySize = format().FotCurDisplaySize; mifDoc.enterTableCell( cell.mifCell() ); } void MifFOTBuilder::endTableCell() { mifDoc.exitTableCell(); end(); curTable().CurCell = NULL; } void MifFOTBuilder::startTablePartSerial( const TablePartNIC &nic ) { startDisplay( nic ); start(); if( curTable().NoTablePartsSeen ) curTable().NoTablePartsSeen = false; else curTable().TableParts.resize( curTable().TableParts.size() + 1 ); curTable().TableParts.back().begin( curTable(), mifDoc ); doStartParagraph( nic, true, 0 ); endParagraph(); } void MifFOTBuilder::endTablePartSerial() { curTable().CurTablePart = NULL; endDisplay(); end(); } void MifFOTBuilder::startTablePartHeader() { curTable().CurRows = &curTable().curTablePart().Header; } void MifFOTBuilder::endTablePartHeader() { curTable().CurRows = &curTable().curTablePart().Body; } void MifFOTBuilder::startTablePartFooter() { curTable().CurRows = &curTable().curTablePart().Footer; } void MifFOTBuilder::endTablePartFooter() { curTable().CurRows = &curTable().curTablePart().Body; } void MifFOTBuilder::setCellBeforeRowMargin( Length l ) { nextFormat.PgfCellMargins.t = l; } void MifFOTBuilder::setCellAfterRowMargin( Length l ) { nextFormat.PgfCellMargins.b = l; } void MifFOTBuilder::setCellBeforeColumnMargin( Length l ) { nextFormat.PgfCellMargins.l = l; } void MifFOTBuilder::setCellAfterColumnMargin( Length l ) { nextFormat.PgfCellMargins.r = l; } void MifFOTBuilder::setCellRowAlignment( Symbol alignment ) { switch( alignment ) { case symbolEnd: nextFormat.PgfCellAlignment = MifDoc::sBottom; break; case symbolCenter: nextFormat.PgfCellAlignment = MifDoc::sMiddle; break; default: nextFormat.PgfCellAlignment = MifDoc::sTop; break; } } //--------- TABLE BORDERS ----------------------------------------------------- void MifFOTBuilder::setBorderPresent( bool b ) { nextFormat.FotBorderPresent = b; } void MifFOTBuilder::setBorderPriority( long p ) { nextFormat.FotBorderPriority = p; } void MifFOTBuilder::setBorderOmitAtBreak(bool) { } void MifFOTBuilder::tableBeforeRowBorder() { start(); curTable().beforeRowBorder.setFromFot(); end(); } void MifFOTBuilder::tableAfterRowBorder() { start(); curTable().afterRowBorder.setFromFot(); end(); } void MifFOTBuilder::tableBeforeColumnBorder() { start(); curTable().beforeColumnBorder.setFromFot(); end(); } void MifFOTBuilder::tableAfterColumnBorder() { start(); curTable().afterColumnBorder.setFromFot(); end(); } void MifFOTBuilder::tableCellBeforeRowBorder() { start(); curTable().curCell().beforeRowBorder.setFromFot(); end(); } void MifFOTBuilder::tableCellAfterRowBorder() { start(); curTable().curCell().afterRowBorder.setFromFot(); end(); } void MifFOTBuilder::tableCellBeforeColumnBorder() { start(); curTable().curCell().beforeColumnBorder.setFromFot(); end(); } void MifFOTBuilder::tableCellAfterColumnBorder() { start(); curTable().curCell().afterColumnBorder.setFromFot(); end(); } //--------- CROSS-REFERENCES, LINKS, AND INDEX-ENTRIES ------------------------ void MifFOTBuilder::outPendingInlineStatements() { if( linkStack.size() > 1 && linkStack[linkStack.size()-2].openedInMif && !linkStack[linkStack.size()-2].forcesNoLink() ) { LinkInfo::pendingMifClosings++; linkStack[linkStack.size()-2].openedInMif = false; } for( ; LinkInfo::pendingMifClosings > 0; LinkInfo::pendingMifClosings-- ) { MifDoc::Marker marker( MifDoc::T_string( "" ), MifDoc::Marker::Hypertext ); marker.out( mifDoc.os() ); } if( indexEntryStack.size() > 0 ) { indexEntryStack.back().out( mifDoc.os() ); indexEntryStack.resize( indexEntryStack.size() - 1 ); } for( size_t i = 0; i < nodeStack.size(); i++ ) { unsigned long n; if( nodeStack[i].node->elementIndex( n ) == accessOK ) { GroveString id; nodeStack[i].node->getId( id ); unsigned long groveIndex = nodeStack[i].node->groveIndex(); mifDoc.os() << MifDoc::CrossRefInfo ( groveIndex, n, mifDoc.os().CurTagIndent, MifDoc::CrossRefInfo::PotentialMarker, id.data(), id.size() ); if( id.size() > 0 ) mifDoc.elements().setBookComponentIndex ( groveIndex, StringC( id.data(), id.size() ), mifDoc.bookComponents().size() - 1 ); else mifDoc.elements().setBookComponentIndex ( groveIndex, n, mifDoc.bookComponents().size() - 1 ); } } NodeInfo::nonEmptyElementsOpened = 0; nodeStack.resize(0); if( linkStack.size() > 0 && !linkStack.back().openedInMif && !linkStack.back().forcesNoLink() ) { linkStack.back().crossRefInfo->tagIndent = mifDoc.os().CurTagIndent; mifDoc.os() << *linkStack.back().crossRefInfo; linkStack.back().openedInMif = true; } } //--------- LINKS ------------------------------------------------------------- void MifFOTBuilder::startLink( const Address &address ) { switch( address.type ) { case Address::resolvedNode: { unsigned long n; if( address.node->elementIndex( n ) == accessOK ) { GroveString id; address.node->getId( id ); unsigned long groveIndex = address.node->groveIndex(); linkStack.resize( linkStack.size() + 1 ); linkStack.back().crossRefInfo = new MifDoc::CrossRefInfo ( groveIndex, n, 0, MifDoc::CrossRefInfo::HypertextLink, id.data(), id.size() ); if( id.size() > 0 ) mifDoc.elements().setReferencedFlag ( MifDoc::ElementSet::LinkReference, groveIndex, StringC( id.data(), id.size() ) ); else mifDoc.elements().setReferencedFlag ( MifDoc::ElementSet::LinkReference, groveIndex, n ); } break; } case Address::idref: { const StringC &id = address.params[0]; size_t i; for( i = 0; i < id.size(); i++ ) if( id[i] == ' ') break; linkStack.resize( linkStack.size() + 1 ); linkStack.back().crossRefInfo = new MifDoc::CrossRefInfo ( address.node->groveIndex(), 0, 0, MifDoc::CrossRefInfo::HypertextLink, id.data(), i ); mifDoc.elements().setReferencedFlag ( MifDoc::ElementSet::LinkReference, address.node->groveIndex(), StringC( id.data(), i ) ); break; } case Address::none: default: linkStack.resize( linkStack.size() + 1 ); } } void MifFOTBuilder::endLink() { assert( linkStack.size() > 0 ); if( linkStack.back().openedInMif ) LinkInfo::pendingMifClosings++; linkStack.resize( linkStack.size() - 1 ); // MifDoc::Marker marker( MifDoc::T_string( "" ), MifDoc::Marker::Hypertext ); // marker.out( mifDoc.os() ); } //--------- CROSS-REFERENCES -------------------------------------------------- void MifFOTBuilder::startNode( const NodePtr &node, const StringC &mode ) { NodeInfo::curNodeLevel++; if( mode.size() == 0 ) nodeStack.push_back( NodeInfo( node, NodeInfo::curNodeLevel ) ); } void MifFOTBuilder::endNode() { if( nodeStack.size() > 0 && nodeStack.back().nodeLevel == NodeInfo::curNodeLevel && NodeInfo::nonEmptyElementsOpened < nodeStack.size() ) nodeStack.resize( nodeStack.size() - 1 ); NodeInfo::curNodeLevel--; } void MifFOTBuilder::currentNodePageNumber( const NodePtr &node ) { unsigned long n; if( node->elementIndex( n ) == accessOK ) { GroveString id; node->getId( id ); if( !mifDoc.bookComponent().pageNumXRefFormatGenerated ) { mifDoc.bookComponent().XRefFormats.push_back ( MifDoc::XRefFormat( MifDoc::sPageNumXRefFormatName, "<$pagenum\\>" ) ); mifDoc.bookComponent().pageNumXRefFormatGenerated = true; } unsigned long groveIndex = node->groveIndex(); mifDoc.os() << MifDoc::CrossRefInfo ( groveIndex, n, mifDoc.os().CurTagIndent, MifDoc::CrossRefInfo::XRef, id.data(), id.size() ); if( id.size() > 0 ) mifDoc.elements().setReferencedFlag ( MifDoc::ElementSet::PageReference, groveIndex, StringC( id.data(), id.size() ) ); else mifDoc.elements().setReferencedFlag ( MifDoc::ElementSet::PageReference, groveIndex, n ); } } //--------- INDEX-ENTRIES ----------------------------------------------------- void MifFOTBuilder::indexEntry( const IndexEntryNIC &nic ) { MifDoc::T_string mText; if( nic.components.size() > 0 ) { if( !nic.pageNumber ) mText += MifDoc::T_string( "<$nopage>" ); if( nic.startsPageRange ) mText += MifDoc::T_string( "<$startrange>" ); if( nic.endsPageRange ) mText += MifDoc::T_string( "<$endrange>" ); bool first = true; for( size_t i = 0; i < nic.components.size(); first = false, i++ ) { if( !first ) mText += ':'; for( size_t ii = 0; ii < nic.components[i].size(); ii++ ) mText += char( nic.components[i][ii] ); } if( nic.sortString.size() > 0 ) { mText += '['; for( size_t i = 0; i < nic.sortString.size(); i++ ) mText += char( nic.sortString[i] ); mText += ']'; } indexEntryStack.resize( indexEntryStack.size() + 1 ); indexEntryStack.back() = MifDoc::Marker( mText, MifDoc::Marker::Index ); } } //----------------------------------------------------------------------------- void MifFOTBuilder::setCellBackground( bool to ) { nextFormat.FotCellBackground = to; } void MifFOTBuilder::setBackgroundColor( const DeviceRGBColor &rgbColor ) { MifDoc::Color *color = new MifDoc::Color( rgbColor.red, rgbColor.green, rgbColor.blue ); nextFormat.MifBackgroundColor = color->ColorTag; if( mifDoc.colorCatalog().Colors.lookup( color->ColorTag ) == NULL ) { mifDoc.colorCatalog().Colors.insert( color ); } else delete color; } void MifFOTBuilder::setBackgroundColor() { nextFormat.MifBackgroundColor = MifDoc::T_tagstring(); } void MifFOTBuilder::setColor( const DeviceRGBColor &rgbColor ) { MifDoc::Color *color = new MifDoc::Color( rgbColor.red, rgbColor.green, rgbColor.blue ); nextFormat.FColor = color->ColorTag; if( mifDoc.colorCatalog().Colors.lookup( color->ColorTag ) == NULL ) { mifDoc.colorCatalog().Colors.insert( color ); } else delete color; } void MifFOTBuilder::setSpan( long n ) { nextFormat.FotSpan = n; } void MifFOTBuilder::setPageNColumns( long n ) { nextFormat.FotPageNColumns = n; mifDoc.document().setDColumns( n ); } void MifFOTBuilder::setPageColumnSep( Length l ) { nextFormat.FotPageColumnSep = l; mifDoc.document().setDColumnGap( l ); } void MifFOTBuilder::setPageBalanceColumns( bool b ) { nextFormat.FotPageBalanceColumns = b; } void MifFOTBuilder::setLines( Symbol s ) { nextFormat.FotLines = s; } void MifFOTBuilder::setInputWhitespaceTreatment( Symbol s ) { nextFormat.FotInputWhitespaceTreatment = s; } void MifFOTBuilder::setMinLeading( const OptLengthSpec &ol ) { nextFormat.FotMinLeading = ol; } void MifFOTBuilder::setPositionPointShift( const LengthSpec &l ) { nextFormat.FotPositionPointShiftSpec = l; } void MifFOTBuilder::setLineThickness( Length l ) { nextFormat.FotLineThickness = l; } void MifFOTBuilder::setLineRepeat( long n ) { nextFormat.FotLineRepeat = n; } void MifFOTBuilder::setLineSep( Length l ) { nextFormat.FotLineSep = l; } void MifFOTBuilder::setFieldWidth( const LengthSpec &l ) { nextFormat.FotFieldWidth = l; } void MifFOTBuilder::setLineCap( Symbol s ) { nextFormat.FotLineCap = s; } void MifFOTBuilder::setFieldAlign( Symbol s ) { nextFormat.FotFieldAlign = s; } //--------------------------------------------------------------------------------------------- void MifFOTBuilder::extension( const ExtensionFlowObj &fo, const NodePtr &node ) { ((const MifExtensionFlowObj &)fo).atomic( *this, node ); } bool MifFOTBuilder::IndexEntryFlowObj::hasNIC( const StringC &name ) const { return name == "components" || name == "page-number?" || name == "sort-string" || name == "starts-page-range?" || name == "ends-page-range?" ; } void MifFOTBuilder::IndexEntryFlowObj::setNIC( const StringC &name, const Value &value ) { if( name == "components" ) value.convertStringList( nic.components ); else if( name == "page-number?" ) value.convertBoolean( nic.pageNumber ); else if( name == "sort-string" ) { bool hasString; value.convertBoolean( hasString ); if( hasString ) value.convertString( nic.sortString ); } else if( name == "starts-page-range?" ) value.convertBoolean( nic.startsPageRange ); else if( name == "ends-page-range?" ) value.convertBoolean( nic.endsPageRange ); } //--------------------------------------------------------------------------------------------- unsigned long StringHash::hash( const String &str ) { const char *p = str.data(); unsigned long h = 0; for( size_t n = str.size(); n > 0; n-- ) h = (h << 5) + h + *p++; // from Chris Torek return h; } FOTBuilder *makeMifFOTBuilder( const String &fileLoc, const Ptr &entityManager, const CharsetInfo &systemCharset, CmdLineApp *app, const FOTBuilder::Extension *&ext ) { MifFOTBuilder::IndexEntryFlowObj *indexEntryFlowObject = new MifFOTBuilder::IndexEntryFlowObj; static const FOTBuilder::Extension extensions[] = { { "UNREGISTERED::ISOGEN//Flow Object Class::index-entry", 0, 0, 0, 0, indexEntryFlowObject }, { "UNREGISTERED::James Clark//Characteristic::page-n-columns", 0, 0, (void (FOTBuilder::*)(long))&MifFOTBuilder::setPageNColumns, 0 }, { "UNREGISTERED::James Clark//Characteristic::page-column-sep", 0, 0, 0, (void (FOTBuilder::*)(FOTBuilder::Length))&MifFOTBuilder::setPageColumnSep, }, { "UNREGISTERED::James Clark//Characteristic::page-balance-columns?", (void (FOTBuilder::*)(bool))&MifFOTBuilder::setPageBalanceColumns, 0, 0 }, { 0, 0, 0} }; ext = extensions; return new MifFOTBuilder( fileLoc, entityManager, systemCharset, app ); } const Char MifFOTBuilder::FrameCharsetMap[] = { // Latin-1 -> Frame Charset 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00c1, 0x00a2, 0x00a3, 0x00db, 0x00b4, 0x007c, 0x00a4, 0x00ac, 0x00a9, 0x00bb, 0x00c7, 0x00c2, 0x002d, 0x00a8, 0x00f8, 0x00fb, 0x0000, 0x0000, 0x0000, 0x00ab, 0x0000, 0x00a6, 0x00a5, 0x00fc, 0x0000, 0x00bc, 0x00c8, 0x0000, 0x0000, 0x0000, 0x00c0, 0x00cb, 0x00e7, 0x00e5, 0x00cc, 0x0080, 0x0081, 0x00ae, 0x0082, 0x00e9, 0x0083, 0x00e6, 0x00e9, 0x00ed, 0x00ea, 0x00eb, 0x00ec, 0x0000, 0x0084, 0x00f1, 0x00ee, 0x00ef, 0x00cd, 0x0085, 0x0000, 0x00af, 0x00f4, 0x00f2, 0x00f3, 0x0086, 0x0000, 0x0000, 0x00a7, 0x0088, 0x0087, 0x0089, 0x008b, 0x008a, 0x008c, 0x00be, 0x008d, 0x008f, 0x008e, 0x0090, 0x0091, 0x0093, 0x0092, 0x0094, 0x0095, 0x0000, 0x0096, 0x0098, 0x0097, 0x0099, 0x009b, 0x009a, 0x0000, 0x00bf, 0x009d, 0x009c, 0x009e, 0x009f, 0x0000, 0x0000, 0x00d8 }; const MifFOTBuilder::SymbolFont MifFOTBuilder::SymbolFonts[MifFOTBuilder::nSymbolFonts] = { { "Symbol", { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0021, 0x2200, 0x0023, 0x2203, 0x0025, 0x0026, 0x220B, 0x0028, 0x0029, 0x2217, 0x002B, 0x002C, 0x2212, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x2245, 0x0391, 0x0392, 0x03A7, 0x2206, 0x0395, 0x03A6, 0x0393, 0x0397, 0x0399, 0x03D1, 0x039A, 0x039B, 0x039C, 0x039D, 0x039F, 0x03A0, 0x0398, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03C2, 0x2126, 0x039E, 0x03A8, 0x0396, 0x005B, 0x2234, 0x005D, 0x22A5, 0x005F, 0x203E, 0x03B1, 0x03B2, 0x03C7, 0x03B4, 0x03B5, 0x03C6, 0x03B3, 0x03B7, 0x03B9, 0x03D5, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BF, 0x03C0, 0x03B8, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03D6, 0x03C9, 0x03BE, 0x03C8, 0x03B6, 0x007B, 0x007C, 0x007D, 0x223C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03D2, 0x2032, 0x2264, 0x2215, 0x221E, 0x0192, 0x2663, 0x2666, 0x2665, 0x2660, 0x2194, 0x2190, 0x2191, 0x2192, 0x2193, 0x00B0, 0x00B1, 0x2033, 0x2265, 0x00D7, 0x221D, 0x2202, 0x2022, 0x00F7, 0x2260, 0x2261, 0x2248, 0x2026, 0x0000, 0x0000, 0x21B5, 0x2135, 0x2111, 0x211C, 0x2118, 0x2297, 0x2295, 0x2205, 0x2229, 0x222A, 0x2283, 0x2287, 0x2284, 0x2282, 0x2286, 0x2208, 0x2209, 0x2220, 0x2207, 0x00AE, 0x00A9, 0x2122, 0x220F, 0x221A, 0x22C5, 0x00AC, 0x2227, 0x2228, 0x21D4, 0x21D0, 0x21D1, 0x21D2, 0x21D3, 0x25CA, 0x2329, 0x00AE, 0x00A9, 0x2122, 0x2211, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x232A, 0x222B, 0x2320, 0x0000, 0x2321, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 } }, // I created this table by hand. It's sometimes not obvious what // the appropriate mapping is (James Clark) { "Wingdings", { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2702, 0x2701, 0x0000, 0x0000, 0x0000, 0x0000, 0x260e, 0x2706, 0x2709, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2328, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2707, 0x270d, 0x0000, 0x270c, 0x0000, 0x0000, 0x0000, 0x261c, 0x261e, 0x261d, 0x261f, 0x0000, 0x263a, 0x0000, 0x2639, 0x0000, 0x2620, 0x0000, 0x0000, 0x2708, 0x263c, 0x0000, 0x2744, 0x0000, 0x271e, 0x0000, 0x2720, 0x2721, 0x262a, 0x262f, 0x0950, 0x2638, 0x2648, 0x2649, 0x264a, 0x264b, 0x264c, 0x264d, 0x264e, 0x264f, 0x2650, 0x2651, 0x2652, 0x2653, 0x0000, 0x0000, 0x25cf, 0x274d, 0x25a0, 0x25a1, 0x0000, 0x2751, 0x2752, 0x0000, 0x0000, 0x25c6, 0x2756, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2780, 0x2781, 0x2782, 0x2783, 0x2784, 0x2785, 0x2786, 0x2787, 0x2788, 0x2789, 0x0000, 0x278a, 0x278b, 0x278c, 0x278d, 0x278e, 0x278f, 0x2790, 0x2791, 0x2792, 0x2793, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x25cb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x25aa, 0x0000, 0x0000, 0x2726, 0x2605, 0x2736, 0x0000, 0x2739, 0x0000, 0x0000, 0x0000, 0x2727, 0x0000, 0x0000, 0x272a, 0x2730, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x232b, 0x2326, 0x0000, 0x27a2, 0x0000, 0x0000, 0x0000, 0x27b2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x25ab, 0x2718, 0x2714, 0x2612, 0x2611, 0x0000 } }, { "ZapfDingbats", { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2701, 0x2702, 0x2703, 0x2704, 0x260E, 0x2706, 0x2707, 0x2708, 0x2709, 0x261B, 0x261E, 0x270C, 0x270D, 0x270E, 0x270F, 0x2710, 0x2711, 0x2712, 0x2713, 0x2714, 0x2715, 0x2716, 0x2717, 0x2718, 0x2719, 0x271A, 0x271B, 0x271C, 0x271D, 0x271E, 0x271F, 0x2720, 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2727, 0x2605, 0x2729, 0x272A, 0x272B, 0x272C, 0x272D, 0x272E, 0x272F, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738, 0x2739, 0x273A, 0x273B, 0x273C, 0x273D, 0x273E, 0x273F, 0x2740, 0x2741, 0x2742, 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, 0x2748, 0x2749, 0x274A, 0x274B, 0x0000, 0x274D, 0x25A0, 0x274F, 0x2750, 0x2751, 0x2752, 0x25B2, 0x25BC, 0x25C6, 0x2756, 0x0000, 0x2758, 0x2759, 0x275A, 0x275B, 0x275C, 0x275D, 0x275E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x2663, 0x2666, 0x2665, 0x2660, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x2776, 0x2777, 0x2778, 0x2779, 0x277A, 0x277B, 0x277C, 0x277D, 0x277E, 0x277F, 0x2780, 0x2781, 0x2782, 0x2783, 0x2784, 0x2785, 0x2786, 0x2787, 0x2788, 0x2789, 0x278A, 0x278B, 0x278C, 0x278D, 0x278E, 0x278F, 0x2790, 0x2791, 0x2792, 0x2793, 0x2794, 0x2192, 0x2194, 0x2195, 0x2798, 0x2799, 0x279A, 0x279B, 0x279C, 0x279D, 0x279E, 0x279F, 0x27A0, 0x27A1, 0x27A2, 0x27A3, 0x27A4, 0x27A5, 0x27A6, 0x27A7, 0x27A8, 0x27A9, 0x27AA, 0x27AB, 0x27AC, 0x27AD, 0x27AE, 0x27AF, 0x0000, 0x27B1, 0x27B2, 0x27B3, 0x27B4, 0x27B5, 0x27B6, 0x27B7, 0x27B8, 0x27B9, 0x27BA, 0x27BB, 0x27BC, 0x27BD, 0x27BE, 0x0000 } }, }; // --------- static ----------------------------------------------------------- #define CONST_STRING( symbolName ) \ const String MifDoc::s ## symbolName ( #symbolName, sizeof( #symbolName ) - 1 ) const String MifDoc::sNONE; const String MifDoc::sSPACE( " ", sizeof( " " ) - 1 ); const String MifDoc::sDefaultTblFormat ( "Default Tbl Format", sizeof( "Default Tbl Format" ) - 1 ); const String MifDoc::sDefaultPgfFormat ( "Default Pgf Format", sizeof( "Default Pgf Format" ) - 1 ); const String MifDoc::sTimesNewRoman ( "Times New Roman", sizeof( "Times New Roman" ) - 1 ); const String MifDoc::sPageNumXRefFormatName ( "Page Number Format", sizeof( "Page Number Format" ) - 1 ); CONST_STRING( A ); CONST_STRING( Regular ); CONST_STRING( Bold ); CONST_STRING( Italic ); CONST_STRING( FNoUnderlining ); CONST_STRING( FSingle ); CONST_STRING( FDouble ); CONST_STRING( FNumeric ); CONST_STRING( FNormal ); CONST_STRING( FSuperscript ); CONST_STRING( FSubscript ); CONST_STRING( FAsTyped ); CONST_STRING( FSmallCaps ); CONST_STRING( FLowercase ); CONST_STRING( FUppercase ); CONST_STRING( LeftRight ); CONST_STRING( Left ); CONST_STRING( Right ); CONST_STRING( Center ); CONST_STRING( Fixed ); CONST_STRING( Proportional ); CONST_STRING( Top ); CONST_STRING( Middle ); CONST_STRING( Bottom ); CONST_STRING( NoLanguage ); CONST_STRING( USEnglish ); CONST_STRING( UKEnglish ); CONST_STRING( German ); CONST_STRING( SwissGerman ); CONST_STRING( French ); CONST_STRING( CanadianFrench ); CONST_STRING( Spanish ); CONST_STRING( Catalan ); CONST_STRING( Italian ); CONST_STRING( Portuguese ); CONST_STRING( Brazilian ); CONST_STRING( Danish ); CONST_STRING( Dutch ); CONST_STRING( Norwegian ); CONST_STRING( Nynorsk ); CONST_STRING( Finnish ); CONST_STRING( Swedish ); CONST_STRING( LeftMasterPage ); CONST_STRING( RightMasterPage ); CONST_STRING( OtherMasterPage ); CONST_STRING( BodyPage ); CONST_STRING( Decimal ); CONST_STRING( Tab ); CONST_STRING( HardSpace ); CONST_STRING( SoftHyphen ); CONST_STRING( HardHyphen ); CONST_STRING( HardReturn ); CONST_STRING( NumberSpace ); CONST_STRING( ThinSpace ); CONST_STRING( EnSpace ); CONST_STRING( EmSpace ); CONST_STRING( Header ); CONST_STRING( Footer ); CONST_STRING( Arabic ); CONST_STRING( UCRoman ); CONST_STRING( LCRoman ); CONST_STRING( UCAlpha ); CONST_STRING( LCAlpha ); CONST_STRING( FirstLeft ); CONST_STRING( FirstRight ); CONST_STRING( Anywhere ); CONST_STRING( ColumnTop ); CONST_STRING( PageTop ); CONST_STRING( LPageTop ); CONST_STRING( RPageTop ); CONST_STRING( First ); CONST_STRING( Inside ); CONST_STRING( Outside ); CONST_STRING( None ); CONST_STRING( RunIntoParagraph ); CONST_STRING( Inline ); CONST_STRING( Below ); CONST_STRING( Butt ); CONST_STRING( Round ); CONST_STRING( Square ); CONST_STRING( White ); CONST_STRING( Black ); CONST_STRING( Normal ); CONST_STRING( Straddle ); CONST_STRING( Cent ); CONST_STRING( Pound ); CONST_STRING( Yen ); CONST_STRING( EnDash ); CONST_STRING( EmDash ); CONST_STRING( Dagger ); CONST_STRING( DoubleDagger ); CONST_STRING( Bullet); MifDoc *MifDoc::CurInstance = NULL; MifDoc::T_ID MifDoc::Object::IDCnt = 0; MifDoc::T_indent MifOutputByteStream::INDENT = MifDoc::T_indent( 0xFFF ); bool MifDoc::Para::currentlyOpened = false; unsigned MifDoc::ParaLine::setProperties = 0; MifDoc::T_ID MifDoc::ParaLine::TextRectID; MifDoc::T_ID MifDoc::ParaLine::ATbl; // ---------------------------------------------------------------------------- int operator!=( const MifDoc::T_LTRB &o1, const MifDoc::T_LTRB &o2 ) { return o1.l != o2.l || o1.t != o2.t || o1.r != o2.r || o1.b != o2.b; } // --------- MifTmpOutputByteStream ------------------------------------------- void MifTmpOutputByteStream::commit( OutputByteStream &os, bool resolveCrossReferences ) { MifOutputByteStream outS( os ); TmpOutputByteStream::Iter iter( *this ); const char *s; size_t n; unsigned crossRefInfoIdx; char *byteDestPtr = NULL; size_t neededBytesNum = 0; enum { normal, waitingForCrossRefInfoIdx } state = normal; while( iter.next( s, n ) ) { while( n > 0 ) { switch( state ) { case waitingForCrossRefInfoIdx: { int bytesCopiedNum = neededBytesNum > n ? n : neededBytesNum; memcpy( byteDestPtr, s, bytesCopiedNum ); byteDestPtr += bytesCopiedNum; n -= bytesCopiedNum; s += bytesCopiedNum; neededBytesNum -= bytesCopiedNum; if( neededBytesNum == 0 ) { assert( crossRefInfoIdx < MifDoc::CurInstance->crossRefInfos().size() ); MifDoc::CrossRefInfo &crossRefInfo = MifDoc::CurInstance->crossRefInfos()[crossRefInfoIdx]; crossRefInfo.out( outS ); state = normal; } } break; case normal: if( resolveCrossReferences ) { const char *escapeCharPtr = (char*)memchr( s, MifDoc::escapeChar(), n ); if( escapeCharPtr != NULL ) { outS.stream().sputn( s, escapeCharPtr - s); n -= (escapeCharPtr - s); s = escapeCharPtr; n--; s++; state = waitingForCrossRefInfoIdx; byteDestPtr = (char*)&crossRefInfoIdx; neededBytesNum = sizeof( unsigned ); break; } } outS.stream().sputn( s, n ); n = 0; } } } assert( neededBytesNum == 0 ); } void MifTmpOutputByteStream::commit( String &str ) { TmpOutputByteStream::Iter iter( *this ); const char *s; size_t n; while( iter.next( s, n ) ) { str.append( s, n ); } } // --------- MifDoc::T_string ------------------------------------------------- void MifDoc::T_string::escapeSpecialChars() { T_string newValue; bool changes = false; for( size_t i = 0; i < size(); i++ ) { switch( (*this)[i] ) { case '\n': case '\r': changes = true; break; case '\t': newValue.append( "\\t", 2 ); changes = true; break; case '>': newValue.append( "\\>", 2 ); changes = true; break; case '\'': newValue.append( "\\q", 2 ); changes = true; break; case '`': newValue.append( "\\Q", 2 ); changes = true; break; case '\\': newValue.append( "\\\\", 2 ); changes = true; break; default: if( (unsigned)(*this)[i] >= 0x80 ) { changes = true; MifDoc::CurInstance->outHexChar( (*this)[i], newValue ); } else newValue += (*this)[i]; } } if( changes ) *this = newValue; } // --------- MifDoc::CrossRefInfo --------------------------------------------- MifDoc::T_string MifDoc::CrossRefInfo::crossRefText() const { char buf[32]; if( sgmlId.size() > 0 ) { sprintf( buf, "NODE%lu.", groveIndex ); T_string result( buf ); for( size_t i = 0; i < sgmlId.size(); i++ ) result += char( sgmlId[i] ); return result; } else { sprintf( buf, "NODE%lu.%lu", groveIndex, elementIndex ); return T_string( buf ); } } void MifDoc::CrossRefInfo::out( MifOutputByteStream &os ) { switch( type() ) { case PotentialMarker: { bool regularMarkerOut = false; bool linkMarkerOut = false; if( sgmlId.size() > 0 ) { if( MifDoc::CurInstance->elements().hasBeenReferenced ( MifDoc::ElementSet::PageReference, groveIndex, sgmlId ) ) regularMarkerOut = true; if( MifDoc::CurInstance->elements().hasBeenReferenced ( MifDoc::ElementSet::LinkReference, groveIndex, sgmlId ) ) linkMarkerOut = true; } else { if( MifDoc::CurInstance->elements().hasBeenReferenced ( MifDoc::ElementSet::PageReference, groveIndex, elementIndex ) ) regularMarkerOut = true; if( MifDoc::CurInstance->elements().hasBeenReferenced ( MifDoc::ElementSet::LinkReference, groveIndex, elementIndex ) ) linkMarkerOut = true; } if( regularMarkerOut ) { os.CurTagIndent = tagIndent; MifDoc::Marker marker( *this ); marker.out( os ); } if( linkMarkerOut ) { os.CurTagIndent = tagIndent; MifDoc::Marker marker( *this, true ); marker.out( os ); } } break; case HypertextLink: { os.CurTagIndent = tagIndent; MifDoc::Marker marker( *this ); marker.out( os ); } break; case XRef: { os.CurTagIndent = tagIndent; MifDoc::XRef xRef( *this ); xRef.out( os ); } break; default: assert( false ); } } // ---------------------------------------------------------------------------- #define CHECK_PROPERTY( propertyName ) \ \ if( setProperties & f ## propertyName ) \ os << '\n' << MifOutputByteStream::INDENT \ << "<" #propertyName " " << propertyName << ">"; #define CHECK_VECTOR_OF_PROPERTIES( propertyName ) \ \ if( setProperties & f ## propertyName ## s) \ for( size_t i = 0; i < propertyName ## s.size(); i++ ) { \ os << '\n' << MifOutputByteStream::INDENT \ << "<" #propertyName " " << propertyName ## s[i] << ">"; \ } // --------- MifDoc::TagStream ------------------------------------------------ MifDoc::TagStream::TagStream( MifDoc::T_indent osIndent ) : Format(), Content( new MifTmpOutputByteStream( osIndent ) ), PgfTagUsed( false ), InitialPgfTag( sDefaultPgfFormat ), TagStreamClass( tsTagStream ) { } MifDoc::TagStream::~TagStream() { if( Content ) delete Content; } // --------- MifDoc::TextFlow ------------------------------------------------- MifDoc::TextFlow::TextFlow( const TextRect &textRect, bool body, ParagraphFormat *format, T_tagstring pgfTag ) : TagStream(), TextRectID( textRect.ID ), setProperties( 0 ), TextRectIDUsed( false ), TextRect_( &textRect ) { TagStreamClass = tsTextFlow; InitialPgfTag = pgfTag; if( format ) Format = *format; if( body ) { setTFTag( MifDoc::sA ); setTFAutoConnect( true ); } } void MifDoc::TextFlow::out( MifOutputByteStream &os, bool resolveCrossReferences ) { os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::Color ---------------------------------------------------- MifDoc::Color::Color( unsigned char red, unsigned char green, unsigned char blue ) : setProperties( 0 ) { char colorTag[64]; sprintf( colorTag, "RGB-%i-%i-%i", int( red ), int( green ), int( blue ) ); setColorTag( T_tagstring( colorTag ) ); if( red >= green && red >= blue ) { setColorBlack( double( 255 - red ) / 2.55 ); setColorYellow( double( red - blue ) / 2.55 ); setColorMagenta( double( red - green ) / 2.55 ); setColorCyan( 0.0 ); } else if( green >= red && green >= blue ) { setColorBlack( double( 255 - green ) / 2.55 ); setColorCyan( double( green - red ) / 2.55 ); setColorYellow( double( green - blue ) / 2.55 ); setColorMagenta( 0.0 ); } else { // blue is largest setColorBlack( double( 255 - blue ) / 2.55 ); setColorCyan( double( blue - red ) / 2.55 ); setColorMagenta( double( blue - green ) / 2.55 ); setColorYellow( 0.0 ); } } void MifDoc::Color::out( MifOutputByteStream &os ) const { os << '\n' << MifOutputByteStream::INDENT << ""; } const String &MifDoc::Color::key( Color &color ) { return color.ColorTag; } // --------- MifDoc::ColorCatalog --------------------------------------------- void MifDoc::ColorCatalog::out( MifOutputByteStream &os ) { if( Colors.count() > 0 ) { os << '\n' << MifOutputByteStream::INDENT << ",StringHash,Color> iter( Colors ); const Color *color; while( ( color = iter.next() ) != NULL ) color->out( os ); os.undent(); os << '\n' << MifOutputByteStream::INDENT << ">"; } } // --------- MifDoc::Ruling --------------------------------------------------- const String &MifDoc::Ruling::key( Ruling &r ) { if( r.Key.size() < 1 ) { char keyStr[ 48 ]; sprintf( keyStr, "Ruling-%li-%li-%li-%li-", long( r.RulingPenWidth ), long( r.RulingGap ), r.RulingPen, r.RulingLines ); r.Key.assign( keyStr, strlen( keyStr ) ); r.Key += r.RulingColor; } return r.Key; } void MifDoc::Ruling::out( MifOutputByteStream &os ) const { os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::RulingCatalog -------------------------------------------- void MifDoc::RulingCatalog::out( MifOutputByteStream &os ) { if( Rulings.count() > 0 ) { os << '\n' << MifOutputByteStream::INDENT << ",StringHash,Ruling> iter( Rulings ); const Ruling *ruling; while( ( ruling = iter.next() ) != NULL ) ruling->out( os ); os.undent(); os << '\n' << MifOutputByteStream::INDENT << ">"; } } // --------- MifDoc::Cell ----------------------------------------------------- void MifDoc::Cell::out( MifOutputByteStream &os, bool resolveCrossReferences ) { os << '\n' << MifOutputByteStream::INDENT << ""; os.undent(); os << '\n' << MifOutputByteStream::INDENT << ">"; } // --------- MifDoc::Row ------------------------------------------------------ void MifDoc::Row::out( MifOutputByteStream &os, bool resolveCrossReferences ) { os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::TblColumn ------------------------------------------------ void MifDoc::TblColumn::out( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::TblFormat ------------------------------------------------ void MifDoc::TblFormat::out( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::Tbl ------------------------------------------------------ void MifDoc::Tbl::out( MifOutputByteStream &os, bool resolveCrossReferences ) { os << '\n' << MifOutputByteStream::INDENT << ""; } if( TblBody.size() ) { os << '\n' << MifOutputByteStream::INDENT << ""; } if( TblF.size() ) { os << '\n' << MifOutputByteStream::INDENT << ""; } os.undent(); os << '\n' << MifOutputByteStream::INDENT << ">"; } // --------- MifDoc::Document ------------------------------------------------- void MifDoc::Document::out( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::XRefFormat ----------------------------------------------- void MifDoc::XRefFormat::out( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::XRef ----------------------------------------------------- MifDoc::XRef::XRef( CrossRefInfo &crossRefInfo ) { switch( crossRefInfo.type() ) { case CrossRefInfo::XRef: { MifDoc::T_pathname targetFileName( "" ); int bookComponentIdx = crossRefInfo.sgmlId.size() > 0 ? MifDoc::CurInstance->elements().bookComponentIndex ( crossRefInfo.groveIndex, crossRefInfo.sgmlId ) : MifDoc::CurInstance->elements().bookComponentIndex ( crossRefInfo.groveIndex, crossRefInfo.elementIndex ); targetFileName += MifDoc::T_pathname ( MifDoc::CurInstance->bookComponents()[bookComponentIdx].FileName ); setXRefSrcFile( targetFileName ); setXRefName( MifDoc::sPageNumXRefFormatName ); setXRefSrcText( crossRefInfo.crossRefText() ); setXRefText( "000" ); break; } default: assert( false ); } } void MifDoc::XRef::out( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << ""; if( setProperties & fXRefText ) os << '\n' << MifOutputByteStream::INDENT << ""; os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::Marker --------------------------------------------------- MifDoc::Marker::Marker( CrossRefInfo &crossRefInfo, bool linkDestinationMode ) { switch( crossRefInfo.type() ) { case CrossRefInfo::PotentialMarker: if( linkDestinationMode ) { setMType( Hypertext ); setMText( "newlink " ); MText += crossRefInfo.crossRefText(); } else { setMType( XRef ); setMText( crossRefInfo.crossRefText() ); } break; case CrossRefInfo::HypertextLink: { setMType( Hypertext ); MifDoc::T_pathname targetFileName( "" ); int bookComponentIdx = crossRefInfo.sgmlId.size() > 0 ? MifDoc::CurInstance->elements().bookComponentIndex ( crossRefInfo.groveIndex, crossRefInfo.sgmlId ) : MifDoc::CurInstance->elements().bookComponentIndex ( crossRefInfo.groveIndex, crossRefInfo.elementIndex ); targetFileName += MifDoc::T_pathname ( MifDoc::CurInstance->bookComponents()[bookComponentIdx].FileName ); setMText( T_string( "gotolink " ) ); MText += targetFileName; MText += ':'; MText += crossRefInfo.crossRefText(); break; } case HypertextDestination: setMText( T_string( "newlink " ) ); MText += crossRefInfo.crossRefText(); break; default: assert( false ); } } void MifDoc::Marker::out( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::Object --------------------------------------------------- void MifDoc::Object::outObjectProperties( MifOutputByteStream &os ) { CHECK_PROPERTY( ID ); CHECK_PROPERTY( Pen ); CHECK_PROPERTY( Fill ); CHECK_PROPERTY( PenWidth ); CHECK_PROPERTY( ObColor ); } // --------- MifDoc::PolyLine ------------------------------------------------- void MifDoc::PolyLine::out( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << ""; os.undent(); os << '\n' << MifOutputByteStream::INDENT << ">"; } // --------- MifDoc::ImportObject --------------------------------------------- void MifDoc::ImportObject::out( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::Frame ---------------------------------------------------- void MifDoc::Frame::out( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << "out( os ); os.undent(); os << '\n' << MifOutputByteStream::INDENT << ">"; } // --------- MifDoc::TextRect ------------------------------------------------- void MifDoc::TextRect::out( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::Page ----------------------------------------------------- void MifDoc::Page::out( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::TabStop -------------------------------------------------- void MifDoc::TabStop::out( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::Para ----------------------------------------------------- void MifDoc::Para::out( MifOutputByteStream &os ) { outProlog( os ); MifDoc::ParaLine::outProlog( os ); content().commit( os.stream() ); MifDoc::ParaLine::outEpilog( os ); outEpilog( os ); } void MifDoc::Para::outSimpleProlog( MifOutputByteStream &os ) { currentlyOpened = true; os << '\n' << MifOutputByteStream::INDENT << ""; currentlyOpened = false; } // --------- MifDoc::ParaLine ------------------------------------------------- void MifDoc::ParaLine::outProlog( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << "curTextFlow(); if( tf != NULL && !tf->TextRectIDUsed ) { setTextRectID( tf->TextRectID ); CHECK_PROPERTY( TextRectID ); setProperties &= ~fTextRectID; tf->TextRectIDUsed = true; } MifDoc::Tbl *tbl = MifDoc::CurInstance->curTbl( false ); if( tbl != NULL && !tbl->TblIDUsed ) { setATbl( tbl->TblID ); CHECK_PROPERTY( ATbl ); setProperties &= ~fATbl; tbl->TblIDUsed = true; } } void MifDoc::ParaLine::outEpilog( MifOutputByteStream &os ) { os.undent(); os << '\n' << MifOutputByteStream::INDENT << ">"; } // --------- MifDoc::PgfCatalog ----------------------------------------------- void MifDoc::PgfCatalog::out( MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << ""; } // --------- MifDoc::TblCatalog ----------------------------------------------- void MifDoc::TblCatalog::out( MifOutputByteStream &os ) { if( TblFormats.size() > 0 ) { os << '\n' << MifOutputByteStream::INDENT << ""; } } // ---------------------------------------------------------------------------- #define COMPARE_PROPERTY( propertyName ) \ \ if( propertyName != f.propertyName ) \ differingProperties |= f ## propertyName; #define COND_SET_PROPERTY( propertyName ) \ \ if( properties & f ## propertyName ) \ propertyName = f.propertyName; #define PROPERTY_OUT( propertyName ) \ \ if( properties & f ## propertyName ) \ os << '\n' << MifOutputByteStream::INDENT \ << "<" #propertyName " " << propertyName << ">"; // --------- MifDoc::FontFormat ----------------------------------------------- unsigned MifDoc::FontFormat::compare( FontFormat &f ) { unsigned differingProperties = 0; COMPARE_PROPERTY( FFamily ); COMPARE_PROPERTY( FAngle ); COMPARE_PROPERTY( FWeight ); COMPARE_PROPERTY( FVar ); COMPARE_PROPERTY( FSize ); COMPARE_PROPERTY( FColor ); COMPARE_PROPERTY( FUnderlining ); COMPARE_PROPERTY( FOverline ); COMPARE_PROPERTY( FStrike ); COMPARE_PROPERTY( FPosition ); COMPARE_PROPERTY( FPairKern ); COMPARE_PROPERTY( FCase ); COMPARE_PROPERTY( FDX ); COMPARE_PROPERTY( FDY ); COMPARE_PROPERTY( FDW ); return differingProperties; } void MifDoc::FontFormat::setFrom( FontFormat &f, unsigned properties ) { COND_SET_PROPERTY( FFamily ); COND_SET_PROPERTY( FAngle ); COND_SET_PROPERTY( FWeight ); COND_SET_PROPERTY( FVar ); COND_SET_PROPERTY( FSize ); COND_SET_PROPERTY( FColor ); COND_SET_PROPERTY( FUnderlining ); COND_SET_PROPERTY( FOverline ); COND_SET_PROPERTY( FStrike ); COND_SET_PROPERTY( FPosition ); COND_SET_PROPERTY( FPairKern ); COND_SET_PROPERTY( FCase ); COND_SET_PROPERTY( FDX ); COND_SET_PROPERTY( FDY ); COND_SET_PROPERTY( FDW ); } void MifDoc::FontFormat::out( MifOutputByteStream &os, unsigned properties, FontStatement fontStatement ) { const char *statementName = (fontStatement == stPgfFont) ? "PgfFont" : "Font"; if( properties ) { os << '\n' << MifOutputByteStream::INDENT << "<" << statementName << " "; os.indent(); PROPERTY_OUT( FFamily ); PROPERTY_OUT( FAngle ); PROPERTY_OUT( FWeight ); PROPERTY_OUT( FVar ); PROPERTY_OUT( FSize ); PROPERTY_OUT( FColor ); PROPERTY_OUT( FUnderlining ); PROPERTY_OUT( FOverline ); PROPERTY_OUT( FStrike ); PROPERTY_OUT( FPosition ); PROPERTY_OUT( FPairKern ); PROPERTY_OUT( FCase ); PROPERTY_OUT( FDX ); PROPERTY_OUT( FDY ); PROPERTY_OUT( FDW ); os.undent(); os << '\n' << MifOutputByteStream::INDENT << ">"; } } void MifDoc::FontFormat::updateFrom( FontFormat &f ) { unsigned differingProperties = FontFormat::compare( f ); setFrom( f, differingProperties ); setProperties = differingProperties; } // --------- MifDoc::ParagraphFormat ------------------------------------------ unsigned MifDoc::ParagraphFormat::compare( ParagraphFormat &f ) { unsigned differingProperties = 0; COMPARE_PROPERTY( PgfTag ); COMPARE_PROPERTY( PgfLanguage ); COMPARE_PROPERTY( PgfFIndent ); COMPARE_PROPERTY( PgfLIndent ); COMPARE_PROPERTY( PgfRIndent ); COMPARE_PROPERTY( PgfAlignment ); COMPARE_PROPERTY( PgfSpBefore ); COMPARE_PROPERTY( PgfSpAfter ); COMPARE_PROPERTY( PgfLineSpacing ); COMPARE_PROPERTY( PgfLeading ); COMPARE_PROPERTY( PgfNumTabs ); COMPARE_PROPERTY( PgfPlacement ); COMPARE_PROPERTY( PgfPlacementStyle ); COMPARE_PROPERTY( PgfWithPrev ); COMPARE_PROPERTY( PgfWithNext ); COMPARE_PROPERTY( PgfBlockSize ); COMPARE_PROPERTY( PgfAutoNum ); COMPARE_PROPERTY( PgfNumFormat ); COMPARE_PROPERTY( PgfNumberFont ); COMPARE_PROPERTY( PgfHyphenate ); COMPARE_PROPERTY( HyphenMaxLines ); COMPARE_PROPERTY( HyphenMinPrefix ); COMPARE_PROPERTY( HyphenMinSuffix ); COMPARE_PROPERTY( HyphenMinWord ); COMPARE_PROPERTY( PgfLetterSpace ); COMPARE_PROPERTY( PgfCellAlignment ); COMPARE_PROPERTY( PgfCellMargins ); COMPARE_PROPERTY( PgfCellLMarginFixed ); COMPARE_PROPERTY( PgfCellTMarginFixed ); COMPARE_PROPERTY( PgfCellRMarginFixed ); COMPARE_PROPERTY( PgfCellBMarginFixed ); return differingProperties; } void MifDoc::ParagraphFormat::setFrom( ParagraphFormat &f, unsigned properties, unsigned fontProperties ) { COND_SET_PROPERTY( PgfTag ); COND_SET_PROPERTY( PgfLanguage ); COND_SET_PROPERTY( PgfFIndent ); COND_SET_PROPERTY( PgfLIndent ); COND_SET_PROPERTY( PgfRIndent ); COND_SET_PROPERTY( PgfAlignment ); COND_SET_PROPERTY( PgfSpBefore ); COND_SET_PROPERTY( PgfSpAfter ); COND_SET_PROPERTY( PgfLineSpacing ); COND_SET_PROPERTY( PgfLeading ); COND_SET_PROPERTY( PgfNumTabs ); COND_SET_PROPERTY( PgfPlacement ); COND_SET_PROPERTY( PgfPlacementStyle ); COND_SET_PROPERTY( PgfWithPrev ); COND_SET_PROPERTY( PgfWithNext ); COND_SET_PROPERTY( PgfBlockSize ); COND_SET_PROPERTY( PgfAutoNum ); COND_SET_PROPERTY( PgfNumFormat ); COND_SET_PROPERTY( PgfNumberFont ); COND_SET_PROPERTY( PgfHyphenate ); COND_SET_PROPERTY( HyphenMaxLines ); COND_SET_PROPERTY( HyphenMinPrefix ); COND_SET_PROPERTY( HyphenMinSuffix ); COND_SET_PROPERTY( HyphenMinWord ); COND_SET_PROPERTY( PgfLetterSpace ); COND_SET_PROPERTY( PgfCellAlignment ); COND_SET_PROPERTY( PgfCellMargins ); COND_SET_PROPERTY( PgfCellLMarginFixed ); COND_SET_PROPERTY( PgfCellTMarginFixed ); COND_SET_PROPERTY( PgfCellRMarginFixed ); COND_SET_PROPERTY( PgfCellBMarginFixed ); FontFormat::setFrom( f, fontProperties ); } void MifDoc::ParagraphFormat::out( MifOutputByteStream &os, unsigned properties, unsigned fontProperties, bool excludeCellProperties ) { bool outPgfTag = false; T_tagstring pgfTag; if( !( properties & fPgfTag ) ) { MifDoc::TagStream &ts = MifDoc::CurInstance->curTagStream(); if( !ts.PgfTagUsed ) { pgfTag = ts.InitialPgfTag; outPgfTag = true; ts.PgfTagUsed = true; } } if( properties != 0 || fontProperties != 0 || outPgfTag ) { os << '\n' << MifOutputByteStream::INDENT << ""; else PROPERTY_OUT( PgfTag ); FontFormat::out( os, fontProperties, FontFormat::stPgfFont ); PROPERTY_OUT( PgfLanguage ); PROPERTY_OUT( PgfFIndent ); PROPERTY_OUT( PgfLIndent ); PROPERTY_OUT( PgfRIndent ); PROPERTY_OUT( PgfAlignment ); PROPERTY_OUT( PgfSpBefore ); PROPERTY_OUT( PgfSpAfter ); PROPERTY_OUT( PgfLineSpacing ); PROPERTY_OUT( PgfLeading ); PROPERTY_OUT( PgfNumTabs ); if( properties & fTabStops ) for( size_t i = 0; i < TabStops.size(); i++ ) TabStops[i].out( os ); PROPERTY_OUT( PgfPlacement ); PROPERTY_OUT( PgfPlacementStyle ); PROPERTY_OUT( PgfWithPrev ); PROPERTY_OUT( PgfWithNext ); PROPERTY_OUT( PgfBlockSize ); PROPERTY_OUT( PgfAutoNum ); PROPERTY_OUT( PgfNumFormat ); PROPERTY_OUT( PgfNumberFont ); PROPERTY_OUT( PgfHyphenate ); PROPERTY_OUT( HyphenMaxLines ); PROPERTY_OUT( HyphenMinPrefix ); PROPERTY_OUT( HyphenMinSuffix ); PROPERTY_OUT( HyphenMinWord ); PROPERTY_OUT( PgfLetterSpace ); if( MifDoc::CurInstance->curCell() != NULL || !excludeCellProperties ) { PROPERTY_OUT( PgfCellAlignment ); PROPERTY_OUT( PgfCellMargins ); PROPERTY_OUT( PgfCellLMarginFixed ); PROPERTY_OUT( PgfCellTMarginFixed ); PROPERTY_OUT( PgfCellRMarginFixed ); PROPERTY_OUT( PgfCellBMarginFixed ); } os.undent(); os << '\n' << MifOutputByteStream::INDENT << ">"; } } void MifDoc::ParagraphFormat::updateFrom( ParagraphFormat &f ) { FontFormat::updateFrom( f ); unsigned differingProperties = compare( f ); setFrom( f, differingProperties, 0 ); setProperties = differingProperties; } // --------- MifDoc::BookComponent -------------------------------------------- MifDoc::BookComponent::BookComponent( MifTmpOutputByteStream *epilogOs ) : epilogOs( epilogOs ), pageNumXRefFormatGenerated( false ) { } void MifDoc::BookComponent::commit ( const String &dirName, bool resolveCrossReferences ) { assert( FileName.size() > 0 ); String fileLoc; fileLoc += dirName; fileLoc += FileName; fileLoc += 0; FileOutputByteStream outFile; if( outFile.open( fileLoc.data() ) ) { MifOutputByteStream os( outFile ); os << ""; colorCatalog.out( os ); pgfCatalog.out( os ); rulingCatalog.out( os ); size_t i; if( AFrames.size() ) { os << "\n"; } if( XRefFormats.size() ) { os << "\n"; } tblCatalog.out( os ); document.out( os ); if( Tbls.size() ) { os << "\n"; } for( i = 0; i < Pages.size(); i++ ) Pages[i].out( os ); for( i = 0; i < TextFlows.size(); i++ ) TextFlows[i].out( os, resolveCrossReferences ); if( epilogOs ) epilogOs->commit( os.stream(), resolveCrossReferences ); } else { MifDoc::curInstance().App->message ( MifMessages::cannotOpenOutputError, StringMessageArg( MifDoc::curInstance().App->convertInput( fileLoc.data() ) ), ErrnoMessageArg( errno ) ); return; } } // --------- MifDoc ----------------------------------------------------------- MifDoc::MifDoc( const String &fileLoc, CmdLineApp *app ) : App( app ), RootOutputFileLoc( fileLoc ), CurTblNum( 0 ), CurTextFlow( NULL ), CurCell( NULL ), CurPara( NULL ), NextID( 0 ) { if( RootOutputFileLoc.size() > 0 && RootOutputFileLoc[RootOutputFileLoc.size()-1] == 0 ) RootOutputFileLoc.resize( RootOutputFileLoc.size() - 1 ); CurInstance = this; enterBookComponent(); } MifDoc::~MifDoc() { commit(); } void MifDoc::commit() { String outDir = rootOutputFileLoc(); String outFileName; { int i; for( i = outDir.size() - 1; i >= 0; i-- ) if( outDir[i] == '/' || outDir[i] == '\\' ) break; if( outDir.size() - (i+1) > 0 ) outFileName.assign( &outDir.data()[i+1], outDir.size() - (i+1) ); outDir.resize( i + 1 ); } if( BookComponents.size() > 1 ) { String bookFileLoc( rootOutputFileLoc() ); String fileNameExt; { size_t idx; for( idx = bookFileLoc.size(); idx > 0; idx-- ) if( bookFileLoc[idx-1] == char( '.' ) ) break; if( idx > 0 && bookFileLoc.size() - idx > 0 ) fileNameExt.assign( &bookFileLoc[idx], bookFileLoc.size() - idx ); else { fileNameExt += 'm'; fileNameExt += 'i'; fileNameExt += 'f'; } } String fileName; char idxStr[32]; for( size_t i = 0; i < BookComponents.size(); i++ ) { fileName.resize( 0 ); sprintf( idxStr, "%u", i+1 ); for( const char *c = idxStr; *c; c++) fileName += CmdLineApp::AppChar(*c); fileName += '.'; fileName += fileNameExt; BookComponents[i].FileName = fileName; } bookFileLoc += 0; FileOutputByteStream bookFile; if( bookFile.open( bookFileLoc.data() ) ) { MifOutputByteStream os( bookFile ); os << ""; for( size_t i = 0; i < BookComponents.size(); i++ ) os << "\n" << BookComponents[i].FileName << "\'>" << "\n>"; } else { MifDoc::curInstance().App->message ( MifMessages::cannotOpenOutputError, StringMessageArg( MifDoc::curInstance().App->convertInput( bookFileLoc.data() ) ), ErrnoMessageArg( errno ) ); } } else if( BookComponents.size() == 1 ) BookComponents[0].FileName = outFileName; for( size_t i = 0; i < BookComponents.size(); i++ ) BookComponents[i].commit( outDir ); } void MifDoc::enterBookComponent() { TagStream *defaultTagStream = new TagStream( MifDoc::T_indent( 0 ) ); enterTagStream( *defaultTagStream ); BookComponent newBookComponent( &defaultTagStream->content() ); bookComponents().push_back( newBookComponent ); } void MifDoc::exitBookComponent() { exitTagStream(); } void MifDoc::outAFrame( T_ID ID, MifOutputByteStream &os ) { os << '\n' << MifOutputByteStream::INDENT << ""; } void MifDoc::switchToTagStream( TagStream &tagStream, bool startWithDefaultPgfFormat ) { if( tagStream.TagStreamClass == TagStream::tsTextFlow ) setCurTextFlow( (MifDoc::TextFlow*)&tagStream ); else if( tagStream.TagStreamClass == TagStream::tsCell ) setCurCell( (MifDoc::Cell*)&tagStream ); if( tagStream.TagStreamClass == TagStream::tsPara ) { MifDoc::Para::currentlyOpened = true; } else if( startWithDefaultPgfFormat ) { tagStream.PgfTagUsed = false; MifDoc::ParagraphFormat defaultPgfFormat; defaultPgfFormat.setDSSSLDefaults(); setCurParagraphFormat( defaultPgfFormat ); } setCurOs( tagStream.content().stream() ); } void MifDoc::enterTagStream( TagStream &tagStream ) { TagStreamStack.resize( TagStreamStack.size() + 1 ); TagStreamStack.back() = &tagStream; switchToTagStream( *TagStreamStack.back() ); } void MifDoc::exitTagStream() { bool startWithDefaultPgfFormat = true; assert( TagStreamStack.size() > 0 ); if( TagStreamStack.back()->TagStreamClass == TagStream::tsPara ) { MifDoc::Para::currentlyOpened = false; startWithDefaultPgfFormat = false; } TagStreamStack.resize( TagStreamStack.size() - 1 ); if( TagStreamStack.size() >= 1 ) switchToTagStream( *TagStreamStack.back(), startWithDefaultPgfFormat ); } void MifDoc::outTagEnd() { os() << ">"; } void MifDoc::outHexChar( unsigned code, MifOutputByteStream *o ) { MifOutputByteStream &outS = ( o != NULL ) ? *o : os(); static const char hex[] = "0123456789abcdef"; outS << "\\x" << hex[(code >> 4) & 0xf] << hex[code & 0xf] << " "; } void MifDoc::outHexChar( unsigned code, String &targetString ) { static const char hex[] = "0123456789abcdef"; targetString += '\\'; targetString += 'x'; targetString += hex[(code >> 4) & 0xf]; targetString += hex[code & 0xf]; targetString += ' '; } void MifDoc::outSpecialChar( const String &charName, MifOutputByteStream *o ) { MifOutputByteStream &outS = ( o != NULL ) ? *o : os(); outS << '\n' << MifOutputByteStream::INDENT << ""; } void MifDoc::outBreakingPara( MifDoc::T_keyword pgfPlacement ) { curFormat().setPgfSpBefore( 0 ), curFormat().setPgfSpAfter( 0 ), curFormat().setPgfPlacement( pgfPlacement ); Para::outSimpleProlog( os() ); curFormat().out( os() ); ParaLine::outProlog( os() ); ParaLine::outEpilog( os() ); Para::outEpilog( os() ); } void MifDoc::beginParaLine() { MifDoc::ParaLine::outProlog( os() ); } void MifDoc::endParaLine() { MifDoc::ParaLine::outEpilog( os() ); } void MifDoc::outPageNumber() { os() << '\n' << MifOutputByteStream::INDENT << ">"; } // --------- MifDoc::ElementSet ----------------------------------------------- MifDoc::ElementSet::ElementSet() {} int MifDoc::ElementSet::bookComponentIndex( unsigned long groveIndex, unsigned long n ) const { unsigned short flags; if( getFlags( groveIndex, n, flags ) ) return int( flags & BOOK_COMPONENT_INDEX_M() ); assert( false ); return 0; } int MifDoc::ElementSet::bookComponentIndex ( unsigned long groveIndex, const StringC &sgmlId ) { SgmlIdInfo &sgmlIdInfo = enforceSgmlId( sgmlId, groveIndex ); return int( sgmlIdInfo.flags & BOOK_COMPONENT_INDEX_M() ); } void MifDoc::ElementSet::setBookComponentIndex ( unsigned long groveIndex, unsigned long n, int i ) { unsigned short flags = 0; getFlags( groveIndex, n, flags ); add( groveIndex, n, ( flags & LINK_TYPE_MASK( AnyReference ) ) | (unsigned short)( i & BOOK_COMPONENT_INDEX_M() ) ); } void MifDoc::ElementSet::setBookComponentIndex ( unsigned long groveIndex, const StringC &sgmlId, int i ) { SgmlIdInfo &sgmlIdInfo = enforceSgmlId( sgmlId, groveIndex ); unsigned short flags = sgmlIdInfo.flags; sgmlIdInfo.flags = ( flags & LINK_TYPE_MASK( AnyReference ) ) | (unsigned short)( i & BOOK_COMPONENT_INDEX_M() ); } bool MifDoc::ElementSet::hasBeenReferenced ( ReferenceType refType, unsigned long groveIndex, unsigned long n ) const { unsigned short flags = 0; getFlags( groveIndex, n, flags ); return ( flags & LINK_TYPE_MASK( refType ) ) != 0 ? true : false; } bool MifDoc::ElementSet::hasBeenReferenced ( ReferenceType refType, unsigned long groveIndex, const StringC &sgmlId ) { SgmlIdInfo &sgmlIdInfo = enforceSgmlId( sgmlId, groveIndex ); return ( sgmlIdInfo.flags & LINK_TYPE_MASK( refType ) ) != 0 ? true : false; } MifDoc::ElementSet::SgmlIdInfo &MifDoc::ElementSet::enforceSgmlId ( const StringC &sgmlId, unsigned long groveIndex ) { SgmlIdInfo *result = SgmlIdInfos.lookup( sgmlId ); if( result == NULL ) { result = new SgmlIdInfo( sgmlId, groveIndex ); SgmlIdInfos.insert( result ); } return *result; } void MifDoc::ElementSet::setReferencedFlag ( ReferenceType refType, unsigned long groveIndex, unsigned long n ) { assert( refType != AnyReference ); unsigned short flags = 0; getFlags( groveIndex, n, flags ); add( groveIndex, n, flags | LINK_TYPE_MASK( refType ) ); } void MifDoc::ElementSet::setReferencedFlag ( ReferenceType refType, unsigned long groveIndex, const StringC &sgmlId ) { SgmlIdInfo &sgmlIdInfo = enforceSgmlId( sgmlId, groveIndex ); assert( refType != AnyReference ); sgmlIdInfo.flags |= LINK_TYPE_MASK( refType ); } void MifDoc::ElementSet::add ( unsigned long groveIndex, unsigned long n, unsigned short flags ) { if( groveIndex >= Flags.size() ) Flags.resize( groveIndex + 1 ); Vector &elems = Flags[groveIndex]; if( n >= elems.size() ) { for( size_t k = 1 + (n - elems.size()); k > 0; --k ) elems.push_back(0); } elems[n] = flags; } bool MifDoc::ElementSet::getFlags ( unsigned long groveIndex, unsigned long n, unsigned short &result ) const { if( groveIndex < Flags.size() && n < Flags[groveIndex].size() ) { result = Flags[groveIndex][n]; return true; } else return false; } #ifdef DSSSL_NAMESPACE } #endif #include "MifFOTBuilder_inst.cxx" #endif /* JADE_MIF */ jade-1.2.1/jade/MifFOTBuilder.h100444 764 764 1166 6606574462 13675 0ustar jjcjjc// Jade MIF backend // Copyright (c) 1997,1998 Kathleen Marszalek // Version 1.0a // Date: March 27th, 1998 #ifndef MifFOTBuilder_INCLUDED #define MifFOTBuilder_INCLUDED 1 #include "FOTBuilder.h" #include "Ptr.h" #include "ExtendEntityManager.h" #include "CharsetInfo.h" #include "CmdLineApp.h" #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif FOTBuilder * makeMifFOTBuilder(const String &fileLoc, const Ptr &, const CharsetInfo &, CmdLineApp *app, const FOTBuilder::Extension *&ext); #ifdef DSSSL_NAMESPACE } #endif #endif /* not MifFOTBuilder_INCLUDED */ jade-1.2.1/jade/MifFOTBuilder_inst.cxx100444 764 764 31070 6606636454 15322 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "IList.h" #include "IQueue.h" #include "Vector.h" #include "Hash.h" #include "PointerTable.h" #undef SP_DEFINE_TEMPLATES #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_2; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_3; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_4; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_5; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_6; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_7; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_8; #endif #endif #endif #ifdef __DECCXX #pragma define_template IQueue #else #ifdef __xlC__ #pragma define(IQueue) #else #ifdef SP_ANSI_CLASS_INST template class IQueue; #else typedef IQueue Dummy_9; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_10; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_11; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_12; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_13; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_14; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_15; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_16; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_17; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_18; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_19; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_20; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_21; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_22; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_23; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_24; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_25; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_26; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_27; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable, StringHash, MifDoc::Ruling> #else #ifdef __xlC__ #pragma define(PointerTable, StringHash, MifDoc::Ruling>) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable, StringHash, MifDoc::Ruling>; #else typedef PointerTable, StringHash, MifDoc::Ruling> Dummy_28; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTableIter, StringHash, MifDoc::Ruling> #else #ifdef __xlC__ #pragma define(PointerTableIter, StringHash, MifDoc::Ruling>) #else #ifdef SP_ANSI_CLASS_INST template class PointerTableIter, StringHash, MifDoc::Ruling>; #else typedef PointerTableIter, StringHash, MifDoc::Ruling> Dummy_29; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_30; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable, StringHash, MifDoc::Color> #else #ifdef __xlC__ #pragma define(PointerTable, StringHash, MifDoc::Color>) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable, StringHash, MifDoc::Color>; #else typedef PointerTable, StringHash, MifDoc::Color> Dummy_31; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTableIter, StringHash, MifDoc::Color> #else #ifdef __xlC__ #pragma define(PointerTableIter, StringHash, MifDoc::Color>) #else #ifdef SP_ANSI_CLASS_INST template class PointerTableIter, StringHash, MifDoc::Color>; #else typedef PointerTableIter, StringHash, MifDoc::Color> Dummy_32; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_33; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable #else #ifdef __xlC__ #pragma define(PointerTable) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable; #else typedef PointerTable Dummy_34; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTableIter #else #ifdef __xlC__ #pragma define(PointerTableIter) #else #ifdef SP_ANSI_CLASS_INST template class PointerTableIter; #else typedef PointerTableIter Dummy_35; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_36; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_37; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_38; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_39; #endif #endif #endif #ifdef DSSSL_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/jade/MifFOTBuilder_inst.m4100444 764 764 4437 6606574462 15027 0ustar jjcjjc#ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "IList.h" #include "IQueue.h" #include "Vector.h" #include "Hash.h" #include "PointerTable.h" #undef SP_DEFINE_TEMPLATES #ifdef DSSSL_NAMESPACE namespace DSSSL_NAMESPACE { #endif __instantiate(IList) __instantiate(IList) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(IQueue) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(`PointerTable, StringHash, MifDoc::Ruling>') __instantiate(`PointerTableIter, StringHash, MifDoc::Ruling>') __instantiate(Vector) __instantiate(`PointerTable, StringHash, MifDoc::Color>') __instantiate(`PointerTableIter, StringHash, MifDoc::Color>') __instantiate(Vector) __instantiate(`PointerTable') __instantiate(`PointerTableIter') __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector >) #ifdef DSSSL_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/jade/MifMessages.h100444 764 764 2277 6606636454 13511 0ustar jjcjjc// This file was automatically generated from .\MifMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct MifMessages { // 7000 static const MessageType2 cannotOpenOutputError; // 7001 static const MessageType1 systemIdNotFilename; // 7002 static const MessageType0 missingTableColumnFlowObject; }; const MessageType2 MifMessages::cannotOpenOutputError( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 7000 #ifndef SP_NO_MESSAGE_TEXT ,"MIF: cannot open output file %1 (%2)" #endif ); const MessageType1 MifMessages::systemIdNotFilename( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 7001 #ifndef SP_NO_MESSAGE_TEXT ,"MIF: could not convert system identifier %1 to a single filename" #endif ); const MessageType0 MifMessages::missingTableColumnFlowObject( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 7002 #ifndef SP_NO_MESSAGE_TEXT ,"MIF: missing table column flow object (table-auto-width feature not fully supported)" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/jade/MifMessages.msg100444 764 764 601 6606574462 14015 0ustar jjcjjc# Jade MIF backend # Copyright (c) 1997,1998 Kathleen Marszalek # Version 1.0a # Date: March 27th, 1998 # =7000 # E2+cannotOpenOutputError++MIF: cannot open output file %1 (%2) E1+systemIdNotFilename++MIF: could not convert system identifier %1 to a single filename W0+missingTableColumnFlowObject++MIF: missing table column flow object (table-auto-width feature not fully supported) #jade-1.2.1/jade/MifMessages.rc100444 764 764 357 6606636454 13643 0ustar jjcjjcSTRINGTABLE BEGIN 7000, "MIF: cannot open output file %1 (%2)" 7001, "MIF: could not convert system identifier %1 to a single filename" 7002, "MIF: missing table column flow object (table-auto-width feature not fully supported)" END jade-1.2.1/all/ 40775 764 764 0 6610553420 10663 5ustar jjcjjcjade-1.2.1/all/all.dsp100444 764 764 5021 6606574460 12246 0ustar jjcjjc# Microsoft Developer Studio Project File - Name="all" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) External Target" 0x0106 CFG=all - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "all.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "all.mak" CFG="all - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "all - Win32 Release" (based on "Win32 (x86) External Target") !MESSAGE "all - Win32 Debug" (based on "Win32 (x86) External Target") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" !IF "$(CFG)" == "all - Win32 Release" # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Cmd_Line "NMAKE /f all.mak" # PROP BASE Rebuild_Opt "/a" # PROP BASE Target_File "all\all.exe" # PROP BASE Bsc_Name "all\all.bsc" # PROP BASE Target_Dir "." # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Cmd_Line "" # PROP Rebuild_Opt "" # PROP Target_File "all" # PROP Bsc_Name "" # PROP Target_Dir "." !ELSEIF "$(CFG)" == "all - Win32 Debug" # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\Debug" # PROP BASE Intermediate_Dir ".\Debug" # PROP BASE Cmd_Line "NMAKE /f all.mak" # PROP BASE Rebuild_Opt "/a" # PROP BASE Target_File "all\all.exe" # PROP BASE Bsc_Name "all\all.bsc" # PROP BASE Target_Dir "." # PROP Use_Debug_Libraries 1 # PROP Output_Dir ".\Debug" # PROP Intermediate_Dir ".\Debug" # PROP Cmd_Line "" # PROP Rebuild_Opt "" # PROP Target_File "all" # PROP Bsc_Name "" # PROP Target_Dir "." !ENDIF # Begin Target # Name "all - Win32 Release" # Name "all - Win32 Debug" !IF "$(CFG)" == "all - Win32 Release" !ELSEIF "$(CFG)" == "all - Win32 Debug" !ENDIF # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # End Group # End Target # End Project jade-1.2.1/all/README100444 764 764 167 6604607552 11631 0ustar jjcjjcThis file exists only to ensure that the all directory exists. This directory is used in the Visual C++ build process. jade-1.2.1/jade.mak100444 764 764 613456 6610366576 11676 0ustar jjcjjc# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 # TARGTYPE "Win32 (x86) External Target" 0x0106 # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 !IF "$(CFG)" == "" CFG=groveoa - Win32 Debug !MESSAGE No configuration specified. Defaulting to groveoa - Win32 Debug. !ENDIF !IF "$(CFG)" != "grove - Win32 Release" && "$(CFG)" != "grove - Win32 Debug" &&\ "$(CFG)" != "spgrove - Win32 Release" && "$(CFG)" != "spgrove - Win32 Debug" &&\ "$(CFG)" != "style - Win32 Release" && "$(CFG)" != "style - Win32 Debug" &&\ "$(CFG)" != "jade - Win32 Release" && "$(CFG)" != "jade - Win32 Debug" &&\ "$(CFG)" != "jadedist - Win32 Release" && "$(CFG)" != "groveoa - Win32 Release"\ && "$(CFG)" != "groveoa - Win32 Debug" !MESSAGE Invalid configuration "$(CFG)" specified. !MESSAGE You can specify a configuration when running NMAKE on this makefile !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "jade.mak" CFG="groveoa - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "grove - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "grove - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "spgrove - Win32 Release" (based on\ "Win32 (x86) Dynamic-Link Library") !MESSAGE "spgrove - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "style - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "style - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "jade - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "jade - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE "jadedist - Win32 Release" (based on "Win32 (x86) External Target") !MESSAGE "groveoa - Win32 Release" (based on\ "Win32 (x86) Dynamic-Link Library") !MESSAGE "groveoa - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE !ERROR An invalid configuration is specified. !ENDIF !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF ################################################################################ # Begin Project # PROP Target_Last_Scanned "groveoa - Win32 Debug" !IF "$(CFG)" == "grove - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "grove\Release" # PROP BASE Intermediate_Dir "grove\Release" # PROP BASE Target_Dir "grove" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "grove\Release" # PROP Intermediate_Dir "grove\Release" # PROP Target_Dir "grove" OUTDIR=.\grove\Release INTDIR=.\grove\Release ALL : ".\bin\grove.dll" CLEAN : -@erase "$(INTDIR)\LocNode.obj" -@erase "$(INTDIR)\Node.obj" -@erase "$(OUTDIR)\grove.exp" -@erase "$(OUTDIR)\grove.lib" -@erase ".\bin\grove.dll" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SP_MULTI_BYTE" /D GROVE_NAMESPACE=James_Clark_GROVE /D SP_NAMESPACE=James_Clark_SP /D "BUILD_LIBGROVE" /YX /c CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "include" /D "NDEBUG" /D "WIN32" /D\ "_WINDOWS" /D "SP_MULTI_BYTE" /D GROVE_NAMESPACE=James_Clark_GROVE /D\ SP_NAMESPACE=James_Clark_SP /D "BUILD_LIBGROVE" /Fp"$(INTDIR)/grove.pch" /YX\ /Fo"$(INTDIR)/" /c CPP_OBJS=.\grove\Release/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< MTL=mktyplib.exe # ADD BASE MTL /nologo /D "NDEBUG" /win32 # ADD MTL /nologo /D "NDEBUG" /win32 MTL_PROJ=/nologo /D "NDEBUG" /win32 RSC=rc.exe # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/grove.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:0x20200000 /subsystem:windows /dll /machine:I386 /out:"bin\grove.dll" # SUBTRACT LINK32 /profile LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ odbccp32.lib /nologo /base:0x20200000 /subsystem:windows /dll /incremental:no\ /pdb:"$(OUTDIR)/grove.pdb" /machine:I386 /out:"bin\grove.dll"\ /implib:"$(OUTDIR)/grove.lib" LINK32_OBJS= \ "$(INTDIR)\LocNode.obj" \ "$(INTDIR)\Node.obj" ".\bin\grove.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "grove - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "grove\Debug" # PROP BASE Intermediate_Dir "grove\Debug" # PROP BASE Target_Dir "grove" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "grove\Debug" # PROP Intermediate_Dir "grove\Debug" # PROP Target_Dir "grove" OUTDIR=.\grove\Debug INTDIR=.\grove\Debug ALL : ".\dbgbin\grove.dll" CLEAN : -@erase "$(INTDIR)\LocNode.obj" -@erase "$(INTDIR)\Node.obj" -@erase "$(INTDIR)\vc40.idb" -@erase "$(INTDIR)\vc40.pdb" -@erase "$(OUTDIR)\grove.exp" -@erase "$(OUTDIR)\grove.lib" -@erase "$(OUTDIR)\grove.pdb" -@erase ".\dbgbin\grove.dll" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SP_MULTI_BYTE" /D GROVE_NAMESPACE=James_Clark_GROVE /D SP_NAMESPACE=James_Clark_SP /D "BUILD_LIBGROVE" /YX /c CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /D "_DEBUG" /D "WIN32"\ /D "_WINDOWS" /D "SP_MULTI_BYTE" /D GROVE_NAMESPACE=James_Clark_GROVE /D\ SP_NAMESPACE=James_Clark_SP /D "BUILD_LIBGROVE" /Fp"$(INTDIR)/grove.pch" /YX\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c CPP_OBJS=.\grove\Debug/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< MTL=mktyplib.exe # ADD BASE MTL /nologo /D "_DEBUG" /win32 # ADD MTL /nologo /D "_DEBUG" /win32 MTL_PROJ=/nologo /D "_DEBUG" /win32 RSC=rc.exe # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/grove.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:0x20200000 /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"dbgbin\grove.dll" LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ odbccp32.lib /nologo /base:0x20200000 /subsystem:windows /dll /incremental:no\ /pdb:"$(OUTDIR)/grove.pdb" /debug /machine:I386 /out:"dbgbin\grove.dll"\ /implib:"$(OUTDIR)/grove.lib" LINK32_OBJS= \ "$(INTDIR)\LocNode.obj" \ "$(INTDIR)\Node.obj" ".\dbgbin\grove.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "spgrove - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "spgrove\Release" # PROP BASE Intermediate_Dir "spgrove\Release" # PROP BASE Target_Dir "spgrove" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "spgrove\Release" # PROP Intermediate_Dir "spgrove\Release" # PROP Target_Dir "spgrove" OUTDIR=.\spgrove\Release INTDIR=.\spgrove\Release ALL : "grove - Win32 Release" ".\bin\spgrove.dll" CLEAN : -@erase "$(INTDIR)\GroveApp.obj" -@erase "$(INTDIR)\GroveBuilder.obj" -@erase "$(INTDIR)\SdNode.obj" -@erase "$(OUTDIR)\spgrove.exp" -@erase "$(OUTDIR)\spgrove.lib" -@erase ".\bin\spgrove.dll" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "include" /I "grove" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SP_MULTI_BYTE" /D GROVE_NAMESPACE=James_Clark_GROVE /D SP_NAMESPACE=James_Clark_SP /D "BUILD_LIBSPGROVE" /YX /c CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "include" /I "grove" /D "NDEBUG" /D "WIN32"\ /D "_WINDOWS" /D "SP_MULTI_BYTE" /D GROVE_NAMESPACE=James_Clark_GROVE /D\ SP_NAMESPACE=James_Clark_SP /D "BUILD_LIBSPGROVE" /Fp"$(INTDIR)/spgrove.pch"\ /YX /Fo"$(INTDIR)/" /c CPP_OBJS=.\spgrove\Release/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< MTL=mktyplib.exe # ADD BASE MTL /nologo /D "NDEBUG" /win32 # ADD MTL /nologo /D "NDEBUG" /win32 MTL_PROJ=/nologo /D "NDEBUG" /win32 RSC=rc.exe # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/spgrove.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 lib\Release\sp133.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:0x20100000 /subsystem:windows /dll /machine:I386 /out:"bin/spgrove.dll" # SUBTRACT LINK32 /profile LINK32_FLAGS=lib\Release\sp133.lib kernel32.lib user32.lib gdi32.lib\ winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib\ uuid.lib odbc32.lib odbccp32.lib /nologo /base:0x20100000 /subsystem:windows\ /dll /incremental:no /pdb:"$(OUTDIR)/spgrove.pdb" /machine:I386\ /out:"bin/spgrove.dll" /implib:"$(OUTDIR)/spgrove.lib" LINK32_OBJS= \ "$(INTDIR)\GroveApp.obj" \ "$(INTDIR)\GroveBuilder.obj" \ "$(INTDIR)\SdNode.obj" \ ".\grove\Release\grove.lib" ".\bin\spgrove.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "spgrove - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "spgrove\Debug" # PROP BASE Intermediate_Dir "spgrove\Debug" # PROP BASE Target_Dir "spgrove" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "spgrove\Debug" # PROP Intermediate_Dir "spgrove\Debug" # PROP Target_Dir "spgrove" OUTDIR=.\spgrove\Debug INTDIR=.\spgrove\Debug ALL : "grove - Win32 Debug" ".\dbgbin\spgrove.dll" CLEAN : -@erase "$(INTDIR)\GroveApp.obj" -@erase "$(INTDIR)\GroveBuilder.obj" -@erase "$(INTDIR)\SdNode.obj" -@erase "$(INTDIR)\vc40.idb" -@erase "$(INTDIR)\vc40.pdb" -@erase "$(OUTDIR)\spgrove.exp" -@erase "$(OUTDIR)\spgrove.lib" -@erase "$(OUTDIR)\spgrove.pdb" -@erase ".\dbgbin\spgrove.dll" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /I "grove" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SP_MULTI_BYTE" /D GROVE_NAMESPACE=James_Clark_GROVE /D SP_NAMESPACE=James_Clark_SP /D "BUILD_LIBSPGROVE" /YX /c CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /I "grove" /D "_DEBUG"\ /D "WIN32" /D "_WINDOWS" /D "SP_MULTI_BYTE" /D\ GROVE_NAMESPACE=James_Clark_GROVE /D SP_NAMESPACE=James_Clark_SP /D\ "BUILD_LIBSPGROVE" /Fp"$(INTDIR)/spgrove.pch" /YX /Fo"$(INTDIR)/"\ /Fd"$(INTDIR)/" /c CPP_OBJS=.\spgrove\Debug/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< MTL=mktyplib.exe # ADD BASE MTL /nologo /D "_DEBUG" /win32 # ADD MTL /nologo /D "_DEBUG" /win32 MTL_PROJ=/nologo /D "_DEBUG" /win32 RSC=rc.exe # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/spgrove.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 # ADD LINK32 lib\Debug\sp133d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:0x20100000 /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"dbgbin\spgrove.dll" LINK32_FLAGS=lib\Debug\sp133d.lib kernel32.lib user32.lib gdi32.lib\ winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib\ uuid.lib odbc32.lib odbccp32.lib /nologo /base:0x20100000 /subsystem:windows\ /dll /incremental:no /pdb:"$(OUTDIR)/spgrove.pdb" /debug /machine:I386\ /out:"dbgbin\spgrove.dll" /implib:"$(OUTDIR)/spgrove.lib" LINK32_OBJS= \ "$(INTDIR)\GroveApp.obj" \ "$(INTDIR)\GroveBuilder.obj" \ "$(INTDIR)\SdNode.obj" \ ".\grove\Debug\grove.lib" ".\dbgbin\spgrove.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "style - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "style\Release" # PROP BASE Intermediate_Dir "style\Release" # PROP BASE Target_Dir "style" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "style\Release" # PROP Intermediate_Dir "style\Release" # PROP Target_Dir "style" OUTDIR=.\style\Release INTDIR=.\style\Release ALL : "spgrove - Win32 Release" "grove - Win32 Release" ".\bin\style.dll" CLEAN : -@erase "$(INTDIR)\Collector.obj" -@erase "$(INTDIR)\common_inst.obj" -@erase "$(INTDIR)\DssslApp.obj" -@erase "$(INTDIR)\DssslSpecEventHandler.obj" -@erase "$(INTDIR)\ELObj.obj" -@erase "$(INTDIR)\ELObjMessageArg.obj" -@erase "$(INTDIR)\Expression.obj" -@erase "$(INTDIR)\FlowObj.obj" -@erase "$(INTDIR)\FOTBuilder.obj" -@erase "$(INTDIR)\GroveManager.obj" -@erase "$(INTDIR)\InheritedC.obj" -@erase "$(INTDIR)\Insn.obj" -@erase "$(INTDIR)\Interpreter.obj" -@erase "$(INTDIR)\InterpreterMessages.obj" -@erase "$(INTDIR)\MacroFlowObj.obj" -@erase "$(INTDIR)\NumberCache.obj" -@erase "$(INTDIR)\Pattern.obj" -@erase "$(INTDIR)\primitive.obj" -@erase "$(INTDIR)\ProcessContext.obj" -@erase "$(INTDIR)\ProcessingMode.obj" -@erase "$(INTDIR)\SchemeParser.obj" -@erase "$(INTDIR)\Style.obj" -@erase "$(INTDIR)\style.pch" -@erase "$(INTDIR)\style_inst.obj" -@erase "$(INTDIR)\StyleEngine.obj" -@erase "$(INTDIR)\stylelib.obj" -@erase "$(OUTDIR)\style.exp" -@erase "$(OUTDIR)\style.lib" -@erase ".\bin\style.dll" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /YX /c CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /YX /Fo"$(INTDIR)/" /c CPP_OBJS=.\style\Release/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< MTL=mktyplib.exe # ADD BASE MTL /nologo /D "NDEBUG" /win32 # ADD MTL /nologo /D "NDEBUG" /win32 MTL_PROJ=/nologo /D "NDEBUG" /win32 RSC=rc.exe # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/style.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 lib\Release\sp133.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:0x20000000 /subsystem:windows /dll /machine:I386 /out:"bin\style.dll" # SUBTRACT LINK32 /profile LINK32_FLAGS=lib\Release\sp133.lib kernel32.lib user32.lib gdi32.lib\ winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib\ uuid.lib odbc32.lib odbccp32.lib /nologo /base:0x20000000 /subsystem:windows\ /dll /incremental:no /pdb:"$(OUTDIR)/style.pdb" /machine:I386\ /out:"bin\style.dll" /implib:"$(OUTDIR)/style.lib" LINK32_OBJS= \ "$(INTDIR)\Collector.obj" \ "$(INTDIR)\common_inst.obj" \ "$(INTDIR)\DssslApp.obj" \ "$(INTDIR)\DssslSpecEventHandler.obj" \ "$(INTDIR)\ELObj.obj" \ "$(INTDIR)\ELObjMessageArg.obj" \ "$(INTDIR)\Expression.obj" \ "$(INTDIR)\FlowObj.obj" \ "$(INTDIR)\FOTBuilder.obj" \ "$(INTDIR)\GroveManager.obj" \ "$(INTDIR)\InheritedC.obj" \ "$(INTDIR)\Insn.obj" \ "$(INTDIR)\Interpreter.obj" \ "$(INTDIR)\InterpreterMessages.obj" \ "$(INTDIR)\MacroFlowObj.obj" \ "$(INTDIR)\NumberCache.obj" \ "$(INTDIR)\Pattern.obj" \ "$(INTDIR)\primitive.obj" \ "$(INTDIR)\ProcessContext.obj" \ "$(INTDIR)\ProcessingMode.obj" \ "$(INTDIR)\SchemeParser.obj" \ "$(INTDIR)\Style.obj" \ "$(INTDIR)\style_inst.obj" \ "$(INTDIR)\StyleEngine.obj" \ "$(INTDIR)\stylelib.obj" \ ".\grove\Release\grove.lib" \ ".\spgrove\Release\spgrove.lib" ".\bin\style.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "style - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "style\Debug" # PROP BASE Intermediate_Dir "style\Debug" # PROP BASE Target_Dir "style" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "style\Debug" # PROP Intermediate_Dir "style\Debug" # PROP Target_Dir "style" OUTDIR=.\style\Debug INTDIR=.\style\Debug ALL : "spgrove - Win32 Debug" "grove - Win32 Debug" ".\dbgbin\style.dll"\ "$(OUTDIR)\style.bsc" CLEAN : -@erase "$(INTDIR)\Collector.obj" -@erase "$(INTDIR)\Collector.sbr" -@erase "$(INTDIR)\common_inst.obj" -@erase "$(INTDIR)\common_inst.sbr" -@erase "$(INTDIR)\DssslApp.obj" -@erase "$(INTDIR)\DssslApp.sbr" -@erase "$(INTDIR)\DssslSpecEventHandler.obj" -@erase "$(INTDIR)\DssslSpecEventHandler.sbr" -@erase "$(INTDIR)\ELObj.obj" -@erase "$(INTDIR)\ELObj.sbr" -@erase "$(INTDIR)\ELObjMessageArg.obj" -@erase "$(INTDIR)\ELObjMessageArg.sbr" -@erase "$(INTDIR)\Expression.obj" -@erase "$(INTDIR)\Expression.sbr" -@erase "$(INTDIR)\FlowObj.obj" -@erase "$(INTDIR)\FlowObj.sbr" -@erase "$(INTDIR)\FOTBuilder.obj" -@erase "$(INTDIR)\FOTBuilder.sbr" -@erase "$(INTDIR)\GroveManager.obj" -@erase "$(INTDIR)\GroveManager.sbr" -@erase "$(INTDIR)\InheritedC.obj" -@erase "$(INTDIR)\InheritedC.sbr" -@erase "$(INTDIR)\Insn.obj" -@erase "$(INTDIR)\Insn.sbr" -@erase "$(INTDIR)\Interpreter.obj" -@erase "$(INTDIR)\Interpreter.sbr" -@erase "$(INTDIR)\InterpreterMessages.obj" -@erase "$(INTDIR)\InterpreterMessages.sbr" -@erase "$(INTDIR)\MacroFlowObj.obj" -@erase "$(INTDIR)\MacroFlowObj.sbr" -@erase "$(INTDIR)\NumberCache.obj" -@erase "$(INTDIR)\NumberCache.sbr" -@erase "$(INTDIR)\Pattern.obj" -@erase "$(INTDIR)\Pattern.sbr" -@erase "$(INTDIR)\primitive.obj" -@erase "$(INTDIR)\primitive.sbr" -@erase "$(INTDIR)\ProcessContext.obj" -@erase "$(INTDIR)\ProcessContext.sbr" -@erase "$(INTDIR)\ProcessingMode.obj" -@erase "$(INTDIR)\ProcessingMode.sbr" -@erase "$(INTDIR)\SchemeParser.obj" -@erase "$(INTDIR)\SchemeParser.sbr" -@erase "$(INTDIR)\Style.obj" -@erase "$(INTDIR)\style.pch" -@erase "$(INTDIR)\Style.sbr" -@erase "$(INTDIR)\style_inst.obj" -@erase "$(INTDIR)\style_inst.sbr" -@erase "$(INTDIR)\StyleEngine.obj" -@erase "$(INTDIR)\StyleEngine.sbr" -@erase "$(INTDIR)\stylelib.obj" -@erase "$(INTDIR)\stylelib.sbr" -@erase "$(INTDIR)\vc40.pdb" -@erase "$(OUTDIR)\style.bsc" -@erase "$(OUTDIR)\style.exp" -@erase "$(OUTDIR)\style.lib" -@erase "$(OUTDIR)\style.pdb" -@erase ".\dbgbin\style.dll" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /FR /YX /c CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /YX /Fo"$(INTDIR)/"\ /Fd"$(INTDIR)/" /c CPP_OBJS=.\style\Debug/ CPP_SBRS=.\style\Debug/ .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< MTL=mktyplib.exe # ADD BASE MTL /nologo /D "_DEBUG" /win32 # ADD MTL /nologo /D "_DEBUG" /win32 MTL_PROJ=/nologo /D "_DEBUG" /win32 RSC=rc.exe # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/style.bsc" BSC32_SBRS= \ "$(INTDIR)\Collector.sbr" \ "$(INTDIR)\common_inst.sbr" \ "$(INTDIR)\DssslApp.sbr" \ "$(INTDIR)\DssslSpecEventHandler.sbr" \ "$(INTDIR)\ELObj.sbr" \ "$(INTDIR)\ELObjMessageArg.sbr" \ "$(INTDIR)\Expression.sbr" \ "$(INTDIR)\FlowObj.sbr" \ "$(INTDIR)\FOTBuilder.sbr" \ "$(INTDIR)\GroveManager.sbr" \ "$(INTDIR)\InheritedC.sbr" \ "$(INTDIR)\Insn.sbr" \ "$(INTDIR)\Interpreter.sbr" \ "$(INTDIR)\InterpreterMessages.sbr" \ "$(INTDIR)\MacroFlowObj.sbr" \ "$(INTDIR)\NumberCache.sbr" \ "$(INTDIR)\Pattern.sbr" \ "$(INTDIR)\primitive.sbr" \ "$(INTDIR)\ProcessContext.sbr" \ "$(INTDIR)\ProcessingMode.sbr" \ "$(INTDIR)\SchemeParser.sbr" \ "$(INTDIR)\Style.sbr" \ "$(INTDIR)\style_inst.sbr" \ "$(INTDIR)\StyleEngine.sbr" \ "$(INTDIR)\stylelib.sbr" "$(OUTDIR)\style.bsc" : "$(OUTDIR)" $(BSC32_SBRS) $(BSC32) @<< $(BSC32_FLAGS) $(BSC32_SBRS) << LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 # ADD LINK32 lib\Debug\sp133d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:0x20000000 /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"dbgbin\style.dll" # SUBTRACT LINK32 /map LINK32_FLAGS=lib\Debug\sp133d.lib kernel32.lib user32.lib gdi32.lib\ winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib\ uuid.lib odbc32.lib odbccp32.lib /nologo /base:0x20000000 /subsystem:windows\ /dll /incremental:no /pdb:"$(OUTDIR)/style.pdb" /debug /machine:I386\ /out:"dbgbin\style.dll" /implib:"$(OUTDIR)/style.lib" LINK32_OBJS= \ "$(INTDIR)\Collector.obj" \ "$(INTDIR)\common_inst.obj" \ "$(INTDIR)\DssslApp.obj" \ "$(INTDIR)\DssslSpecEventHandler.obj" \ "$(INTDIR)\ELObj.obj" \ "$(INTDIR)\ELObjMessageArg.obj" \ "$(INTDIR)\Expression.obj" \ "$(INTDIR)\FlowObj.obj" \ "$(INTDIR)\FOTBuilder.obj" \ "$(INTDIR)\GroveManager.obj" \ "$(INTDIR)\InheritedC.obj" \ "$(INTDIR)\Insn.obj" \ "$(INTDIR)\Interpreter.obj" \ "$(INTDIR)\InterpreterMessages.obj" \ "$(INTDIR)\MacroFlowObj.obj" \ "$(INTDIR)\NumberCache.obj" \ "$(INTDIR)\Pattern.obj" \ "$(INTDIR)\primitive.obj" \ "$(INTDIR)\ProcessContext.obj" \ "$(INTDIR)\ProcessingMode.obj" \ "$(INTDIR)\SchemeParser.obj" \ "$(INTDIR)\Style.obj" \ "$(INTDIR)\style_inst.obj" \ "$(INTDIR)\StyleEngine.obj" \ "$(INTDIR)\stylelib.obj" \ ".\grove\Debug\grove.lib" \ ".\spgrove\Debug\spgrove.lib" ".\dbgbin\style.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "jade - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "jade\Release" # PROP BASE Intermediate_Dir "jade\Release" # PROP BASE Target_Dir "jade" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "jade\Release" # PROP Intermediate_Dir "jade\Release" # PROP Target_Dir "jade" OUTDIR=.\jade\Release INTDIR=.\jade\Release ALL : "style - Win32 Release" "spgrove - Win32 Release" "grove - Win32 Release"\ ".\bin\jade.exe" CLEAN : -@erase "$(INTDIR)\HtmlFOTBuilder.obj" -@erase "$(INTDIR)\jade.obj" -@erase "$(INTDIR)\jade.res" -@erase "$(INTDIR)\MifFOTBuilder.obj" -@erase "$(INTDIR)\RtfFOTBuilder.obj" -@erase "$(INTDIR)\RtfOle.obj" -@erase "$(INTDIR)\SgmlFOTBuilder.obj" -@erase "$(INTDIR)\TeXFOTBuilder.obj" -@erase "$(INTDIR)\TransformFOTBuilder.obj" -@erase ".\bin\jade.exe" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "include" /I "style" /I "grove" /I "spgrove" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP /D DSSSL_NAMESPACE=James_Clark_DSSSL /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /YX /c CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "include" /I "style" /I "grove" /I\ "spgrove" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP\ /D DSSSL_NAMESPACE=James_Clark_DSSSL /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/jade.pch" /YX /Fo"$(INTDIR)/" /c CPP_OBJS=.\jade\Release/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< RSC=rc.exe # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" RSC_PROJ=/l 0x809 /fo"$(INTDIR)/jade.res" /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/jade.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 lib\Release\sp133.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"bin/jade.exe" # SUBTRACT LINK32 /profile LINK32_FLAGS=lib\Release\sp133.lib kernel32.lib user32.lib gdi32.lib\ winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib\ uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\ /pdb:"$(OUTDIR)/jade.pdb" /machine:I386 /out:"bin/jade.exe" LINK32_OBJS= \ "$(INTDIR)\HtmlFOTBuilder.obj" \ "$(INTDIR)\jade.obj" \ "$(INTDIR)\jade.res" \ "$(INTDIR)\MifFOTBuilder.obj" \ "$(INTDIR)\RtfFOTBuilder.obj" \ "$(INTDIR)\RtfOle.obj" \ "$(INTDIR)\SgmlFOTBuilder.obj" \ "$(INTDIR)\TeXFOTBuilder.obj" \ "$(INTDIR)\TransformFOTBuilder.obj" \ ".\grove\Release\grove.lib" \ ".\spgrove\Release\spgrove.lib" \ ".\style\Release\style.lib" ".\bin\jade.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "jade - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "jade\Debug" # PROP BASE Intermediate_Dir "jade\Debug" # PROP BASE Target_Dir "jade" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "jade\Debug" # PROP Intermediate_Dir "jade\Debug" # PROP Target_Dir "jade" OUTDIR=.\jade\Debug INTDIR=.\jade\Debug ALL : "style - Win32 Debug" "spgrove - Win32 Debug" "grove - Win32 Debug"\ ".\dbgbin\jade.exe" CLEAN : -@erase "$(INTDIR)\HtmlFOTBuilder.obj" -@erase "$(INTDIR)\jade.obj" -@erase "$(INTDIR)\jade.res" -@erase "$(INTDIR)\MifFOTBuilder.obj" -@erase "$(INTDIR)\RtfFOTBuilder.obj" -@erase "$(INTDIR)\RtfOle.obj" -@erase "$(INTDIR)\SgmlFOTBuilder.obj" -@erase "$(INTDIR)\TeXFOTBuilder.obj" -@erase "$(INTDIR)\TransformFOTBuilder.obj" -@erase "$(INTDIR)\vc40.pdb" -@erase "$(OUTDIR)\jade.pdb" -@erase ".\dbgbin\jade.exe" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "include" /I "style" /I "grove" /I "spgrove" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP /D DSSSL_NAMESPACE=James_Clark_DSSSL /D GROVE_NAMESPACE=James_Clark_GROVE /D "SP_MULTI_BYTE" /YX /c CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "include" /I "style" /I "grove" /I\ "spgrove" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP\ /D DSSSL_NAMESPACE=James_Clark_DSSSL /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/jade.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c CPP_OBJS=.\jade\Debug/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< RSC=rc.exe # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" RSC_PROJ=/l 0x809 /fo"$(INTDIR)/jade.res" /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/jade.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 lib\Debug\sp133d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"dbgbin\jade.exe" LINK32_FLAGS=lib\Debug\sp133d.lib kernel32.lib user32.lib gdi32.lib\ winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib\ uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\ /pdb:"$(OUTDIR)/jade.pdb" /debug /machine:I386 /out:"dbgbin\jade.exe" LINK32_OBJS= \ "$(INTDIR)\HtmlFOTBuilder.obj" \ "$(INTDIR)\jade.obj" \ "$(INTDIR)\jade.res" \ "$(INTDIR)\MifFOTBuilder.obj" \ "$(INTDIR)\RtfFOTBuilder.obj" \ "$(INTDIR)\RtfOle.obj" \ "$(INTDIR)\SgmlFOTBuilder.obj" \ "$(INTDIR)\TeXFOTBuilder.obj" \ "$(INTDIR)\TransformFOTBuilder.obj" \ ".\grove\Debug\grove.lib" \ ".\spgrove\Debug\spgrove.lib" \ ".\style\Debug\style.lib" ".\dbgbin\jade.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "jadedist - Win32 Release" # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "jadedist\Release" # PROP BASE Intermediate_Dir "jadedist\Release" # PROP BASE Target_Dir "jadedist" # PROP BASE Cmd_Line "NMAKE /f jadedist.mak" # PROP BASE Rebuild_Opt "/a" # PROP BASE Target_File "jadedist\jadedist.exe" # PROP BASE Bsc_Name "jadedist\jadedist.bsc" # PROP Use_Debug_Libraries 0 # PROP Output_Dir "jadedist\Release" # PROP Intermediate_Dir "jadedist\Release" # PROP Target_Dir "jadedist" # PROP Cmd_Line "makedist" # PROP Rebuild_Opt "" # PROP Target_File "jadedist\jade.zip" # PROP Bsc_Name "" OUTDIR=.\jadedist\Release INTDIR=.\jadedist\Release ALL : "jade - Win32 Release" CLEAN : -@erase "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" !ELSEIF "$(CFG)" == "groveoa - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "groveoa\Release" # PROP BASE Intermediate_Dir "groveoa\Release" # PROP BASE Target_Dir "groveoa" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "groveoa\Release" # PROP Intermediate_Dir "groveoa\Release" # PROP Target_Dir "groveoa" OUTDIR=.\groveoa\Release INTDIR=.\groveoa\Release # Begin Custom Macros OutDir=.\groveoa\Release # End Custom Macros ALL : "spgrove - Win32 Release" "grove - Win32 Release" ".\bin\groveoa.dll"\ "$(OUTDIR)\regsvr32.trg" CLEAN : -@erase "$(INTDIR)\CGroveBuilder.obj" -@erase "$(INTDIR)\GroveNode.obj" -@erase "$(INTDIR)\groveoa.obj" -@erase "$(INTDIR)\groveoa.pch" -@erase "$(INTDIR)\groveoa.res" -@erase "$(INTDIR)\StdAfx.obj" -@erase "$(OUTDIR)\groveoa.exp" -@erase "$(OUTDIR)\groveoa.lib" -@erase "$(OUTDIR)\regsvr32.trg" -@erase ".\bin\groveoa.dll" -@erase ".\groveoa\groveoa.h" -@erase ".\groveoa\groveoa.tlb" -@erase ".\groveoa\groveoa_i.c" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "include" /I "grove" /I "spgrove" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D "_WINDLL" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /D GROVE_NAMESPACE=James_Clark_GROVE /YX /c CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "include" /I "grove" /I "spgrove" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D\ "_WINDLL" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /D\ GROVE_NAMESPACE=James_Clark_GROVE /Fp"$(INTDIR)/groveoa.pch" /YX\ /Fo"$(INTDIR)/" /c CPP_OBJS=.\groveoa\Release/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< MTL=mktyplib.exe # ADD BASE MTL /nologo /D "NDEBUG" /win32 # ADD MTL /nologo /D "NDEBUG" /win32 MTL_PROJ=/nologo /D "NDEBUG" /win32 RSC=rc.exe # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" RSC_PROJ=/l 0x809 /fo"$(INTDIR)/groveoa.res" /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/groveoa.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 lib\Release\sp133.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"bin/groveoa.dll" LINK32_FLAGS=lib\Release\sp133.lib kernel32.lib user32.lib gdi32.lib\ winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib\ uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll\ /incremental:no /pdb:"$(OUTDIR)/groveoa.pdb" /machine:I386\ /def:".\groveoa\groveoa.def" /out:"bin/groveoa.dll"\ /implib:"$(OUTDIR)/groveoa.lib" DEF_FILE= \ ".\groveoa\groveoa.def" LINK32_OBJS= \ "$(INTDIR)\CGroveBuilder.obj" \ "$(INTDIR)\GroveNode.obj" \ "$(INTDIR)\groveoa.obj" \ "$(INTDIR)\groveoa.res" \ "$(INTDIR)\StdAfx.obj" \ ".\grove\Release\grove.lib" \ ".\spgrove\Release\spgrove.lib" ".\bin\groveoa.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << # Begin Custom Build OutDir=.\groveoa\Release TargetPath=.\bin\groveoa.dll InputPath=.\bin\groveoa.dll SOURCE=$(InputPath) "$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" regsvr32 /s /c "$(TargetPath)" echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" # End Custom Build !ELSEIF "$(CFG)" == "groveoa - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "groveoa\Debug" # PROP BASE Intermediate_Dir "groveoa\Debug" # PROP BASE Target_Dir "groveoa" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "groveoa\Debug" # PROP Intermediate_Dir "groveoa\Debug" # PROP Target_Dir "groveoa" OUTDIR=.\groveoa\Debug INTDIR=.\groveoa\Debug ALL : "spgrove - Win32 Debug" "grove - Win32 Debug" ".\dbgbin\groveoa.dll" CLEAN : -@erase "$(INTDIR)\CGroveBuilder.obj" -@erase "$(INTDIR)\GroveNode.obj" -@erase "$(INTDIR)\groveoa.obj" -@erase "$(INTDIR)\groveoa.pch" -@erase "$(INTDIR)\groveoa.res" -@erase "$(INTDIR)\StdAfx.obj" -@erase "$(INTDIR)\vc40.idb" -@erase "$(INTDIR)\vc40.pdb" -@erase "$(OUTDIR)\groveoa.exp" -@erase "$(OUTDIR)\groveoa.lib" -@erase "$(OUTDIR)\groveoa.pdb" -@erase ".\dbgbin\groveoa.dll" -@erase ".\dbgbin\groveoa.ilk" -@erase ".\groveoa\groveoa.h" -@erase ".\groveoa\groveoa.tlb" -@erase ".\groveoa\groveoa_i.c" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /I "grove" /I "spgrove" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D "_WINDLL" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /D GROVE_NAMESPACE=James_Clark_GROVE /YX /c CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /I "grove" /I "spgrove"\ /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D\ "_WINDLL" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /D\ GROVE_NAMESPACE=James_Clark_GROVE /Fp"$(INTDIR)/groveoa.pch" /YX\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c CPP_OBJS=.\groveoa\Debug/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< MTL=mktyplib.exe # ADD BASE MTL /nologo /D "_DEBUG" /win32 # ADD MTL /nologo /D "_DEBUG" /win32 MTL_PROJ=/nologo /D "_DEBUG" /win32 RSC=rc.exe # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" RSC_PROJ=/l 0x809 /fo"$(INTDIR)/groveoa.res" /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/groveoa.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 # ADD LINK32 lib\Debug\sp133d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"dbgbin\groveoa.dll" # SUBTRACT LINK32 /incremental:no LINK32_FLAGS=lib\Debug\sp133d.lib kernel32.lib user32.lib gdi32.lib\ winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib\ uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll\ /incremental:yes /pdb:"$(OUTDIR)/groveoa.pdb" /debug /machine:I386\ /def:".\groveoa\groveoa.def" /out:"dbgbin\groveoa.dll"\ /implib:"$(OUTDIR)/groveoa.lib" DEF_FILE= \ ".\groveoa\groveoa.def" LINK32_OBJS= \ "$(INTDIR)\CGroveBuilder.obj" \ "$(INTDIR)\GroveNode.obj" \ "$(INTDIR)\groveoa.obj" \ "$(INTDIR)\groveoa.res" \ "$(INTDIR)\StdAfx.obj" \ ".\grove\Debug\grove.lib" \ ".\spgrove\Debug\spgrove.lib" ".\dbgbin\groveoa.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ENDIF ################################################################################ # Begin Target # Name "grove - Win32 Release" # Name "grove - Win32 Debug" !IF "$(CFG)" == "grove - Win32 Release" !ELSEIF "$(CFG)" == "grove - Win32 Debug" !ENDIF ################################################################################ # Begin Source File SOURCE=.\grove\Node.cxx DEP_CPP_NODE_=\ ".\grove\Node.h"\ ".\include\Boolean.h"\ ".\include\config.h"\ ".\include\macros.h"\ "$(INTDIR)\Node.obj" : $(SOURCE) $(DEP_CPP_NODE_) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\grove\LocNode.cxx DEP_CPP_LOCNO=\ ".\grove\LocNode.h"\ ".\grove\Node.h"\ ".\include\Boolean.h"\ ".\include\config.h"\ "$(INTDIR)\LocNode.obj" : $(SOURCE) $(DEP_CPP_LOCNO) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File # End Target ################################################################################ # Begin Target # Name "spgrove - Win32 Release" # Name "spgrove - Win32 Debug" !IF "$(CFG)" == "spgrove - Win32 Release" !ELSEIF "$(CFG)" == "spgrove - Win32 Debug" !ENDIF ################################################################################ # Begin Source File SOURCE=.\spgrove\GroveBuilder.cxx DEP_CPP_GROVE=\ ".\grove\LocNode.h"\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CodingSystem.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\grove_inst.cxx"\ ".\spgrove\GroveBuilder.h"\ ".\spgrove\SdNode.h"\ ".\spgrove\threads.h"\ "$(INTDIR)\GroveBuilder.obj" : $(SOURCE) $(DEP_CPP_GROVE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\spgrove\GroveApp.cxx DEP_CPP_GROVEA=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\spgrove\threads.h"\ "$(INTDIR)\GroveApp.obj" : $(SOURCE) $(DEP_CPP_GROVEA) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Project Dependency # Project_Dep_Name "grove" !IF "$(CFG)" == "spgrove - Win32 Release" "grove - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="grove - Win32 Release" !ELSEIF "$(CFG)" == "spgrove - Win32 Debug" "grove - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="grove - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Source File SOURCE=.\spgrove\SdNode.cxx DEP_CPP_SDNOD=\ ".\grove\Node.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Location.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveBuilder.h"\ ".\spgrove\SdNode.h"\ "$(INTDIR)\SdNode.obj" : $(SOURCE) $(DEP_CPP_SDNOD) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File # End Target ################################################################################ # Begin Target # Name "style - Win32 Release" # Name "style - Win32 Debug" !IF "$(CFG)" == "style - Win32 Release" !ELSEIF "$(CFG)" == "style - Win32 Debug" !ENDIF ################################################################################ # Begin Project Dependency # Project_Dep_Name "grove" !IF "$(CFG)" == "style - Win32 Release" "grove - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="grove - Win32 Release" !ELSEIF "$(CFG)" == "style - Win32 Debug" "grove - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="grove - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Source File SOURCE=.\style\stylelib.cxx DEP_CPP_STYLE=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yc"stylelib.h" BuildCmds= \ $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yc"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) \ "$(INTDIR)\stylelib.obj" : $(SOURCE) $(DEP_CPP_STYLE) "$(INTDIR)" $(BuildCmds) "$(INTDIR)\style.pch" : $(SOURCE) $(DEP_CPP_STYLE) "$(INTDIR)" $(BuildCmds) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yc"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yc"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\stylelib.obj" : $(SOURCE) $(DEP_CPP_STYLE) "$(INTDIR)" $(BuildCmds) "$(INTDIR)\stylelib.sbr" : $(SOURCE) $(DEP_CPP_STYLE) "$(INTDIR)" $(BuildCmds) "$(INTDIR)\style.pch" : $(SOURCE) $(DEP_CPP_STYLE) "$(INTDIR)" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\StyleEngine.cxx DEP_CPP_STYLEE=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\StyleEngine.obj" : $(SOURCE) $(DEP_CPP_STYLEE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\StyleEngine.obj" : $(SOURCE) $(DEP_CPP_STYLEE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\StyleEngine.sbr" : $(SOURCE) $(DEP_CPP_STYLEE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\Style.cxx DEP_CPP_STYLE_=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\Style.obj" : $(SOURCE) $(DEP_CPP_STYLE_) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\Style.obj" : $(SOURCE) $(DEP_CPP_STYLE_) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\Style.sbr" : $(SOURCE) $(DEP_CPP_STYLE_) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\ProcessingMode.cxx DEP_CPP_PROCE=\ ".\grove\LocNode.h"\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\ProcessingMode.obj" : $(SOURCE) $(DEP_CPP_PROCE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\ProcessingMode.obj" : $(SOURCE) $(DEP_CPP_PROCE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\ProcessingMode.sbr" : $(SOURCE) $(DEP_CPP_PROCE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\ProcessContext.cxx DEP_CPP_PROCES=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\ProcessContext.obj" : $(SOURCE) $(DEP_CPP_PROCES) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\ProcessContext.obj" : $(SOURCE) $(DEP_CPP_PROCES) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\ProcessContext.sbr" : $(SOURCE) $(DEP_CPP_PROCES) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\primitive.cxx DEP_CPP_PRIMI=\ ".\grove\LocNode.h"\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\primitive.h"\ ".\style\primitive_inst.cxx"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\primitive.obj" : $(SOURCE) $(DEP_CPP_PRIMI) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\primitive.obj" : $(SOURCE) $(DEP_CPP_PRIMI) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\primitive.sbr" : $(SOURCE) $(DEP_CPP_PRIMI) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\NumberCache.cxx DEP_CPP_NUMBE=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\NumberCache.obj" : $(SOURCE) $(DEP_CPP_NUMBE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\NumberCache.obj" : $(SOURCE) $(DEP_CPP_NUMBE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\NumberCache.sbr" : $(SOURCE) $(DEP_CPP_NUMBE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\InterpreterMessages.cxx DEP_CPP_INTER=\ ".\include\Boolean.h"\ ".\include\config.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Location.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\TypeId.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\xnew.h"\ ".\style\InterpreterMessages.h"\ !IF "$(CFG)" == "style - Win32 Release" # SUBTRACT CPP /YX "$(INTDIR)\InterpreterMessages.obj" : $(SOURCE) $(DEP_CPP_INTER) "$(INTDIR)" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fo"$(INTDIR)/" /c $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # SUBTRACT CPP /YX BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\InterpreterMessages.obj" : $(SOURCE) $(DEP_CPP_INTER) "$(INTDIR)" $(BuildCmds) "$(INTDIR)\InterpreterMessages.sbr" : $(SOURCE) $(DEP_CPP_INTER) "$(INTDIR)" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\Interpreter.cxx DEP_CPP_INTERP=\ ".\grove\LocNode.h"\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\charNames.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\sdata.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\Interpreter.obj" : $(SOURCE) $(DEP_CPP_INTERP) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\Interpreter.obj" : $(SOURCE) $(DEP_CPP_INTERP) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\Interpreter.sbr" : $(SOURCE) $(DEP_CPP_INTERP) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\Insn.cxx DEP_CPP_INSN_=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\Insn.obj" : $(SOURCE) $(DEP_CPP_INSN_) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\Insn.obj" : $(SOURCE) $(DEP_CPP_INSN_) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\Insn.sbr" : $(SOURCE) $(DEP_CPP_INSN_) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\FOTBuilder.cxx DEP_CPP_FOTBU=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\FOTBuilder.obj" : $(SOURCE) $(DEP_CPP_FOTBU) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\FOTBuilder.obj" : $(SOURCE) $(DEP_CPP_FOTBU) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\FOTBuilder.sbr" : $(SOURCE) $(DEP_CPP_FOTBU) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\Expression.cxx DEP_CPP_EXPRE=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\Expression.obj" : $(SOURCE) $(DEP_CPP_EXPRE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\Expression.obj" : $(SOURCE) $(DEP_CPP_EXPRE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\Expression.sbr" : $(SOURCE) $(DEP_CPP_EXPRE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\ELObjMessageArg.cxx DEP_CPP_ELOBJ=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\ELObjMessageArg.obj" : $(SOURCE) $(DEP_CPP_ELOBJ) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\ELObjMessageArg.obj" : $(SOURCE) $(DEP_CPP_ELOBJ) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\ELObjMessageArg.sbr" : $(SOURCE) $(DEP_CPP_ELOBJ) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\ELObj.cxx DEP_CPP_ELOBJ_=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\ELObj.obj" : $(SOURCE) $(DEP_CPP_ELOBJ_) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\ELObj.obj" : $(SOURCE) $(DEP_CPP_ELOBJ_) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\ELObj.sbr" : $(SOURCE) $(DEP_CPP_ELOBJ_) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\DssslSpecEventHandler.cxx DEP_CPP_DSSSL=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\DssslSpecEventHandler.obj" : $(SOURCE) $(DEP_CPP_DSSSL) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\DssslSpecEventHandler.obj" : $(SOURCE) $(DEP_CPP_DSSSL) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\DssslSpecEventHandler.sbr" : $(SOURCE) $(DEP_CPP_DSSSL) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\Collector.cxx DEP_CPP_COLLE=\ ".\include\Boolean.h"\ ".\include\config.h"\ ".\include\macros.h"\ ".\style\Collector.h"\ !IF "$(CFG)" == "style - Win32 Release" # SUBTRACT CPP /YX "$(INTDIR)\Collector.obj" : $(SOURCE) $(DEP_CPP_COLLE) "$(INTDIR)" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fo"$(INTDIR)/" /c $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # SUBTRACT CPP /YX BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\Collector.obj" : $(SOURCE) $(DEP_CPP_COLLE) "$(INTDIR)" $(BuildCmds) "$(INTDIR)\Collector.sbr" : $(SOURCE) $(DEP_CPP_COLLE) "$(INTDIR)" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\FlowObj.cxx DEP_CPP_FLOWO=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FlowObj_inst.cxx"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\FlowObj.obj" : $(SOURCE) $(DEP_CPP_FLOWO) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\FlowObj.obj" : $(SOURCE) $(DEP_CPP_FLOWO) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\FlowObj.sbr" : $(SOURCE) $(DEP_CPP_FLOWO) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\InheritedC.cxx DEP_CPP_INHER=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\InheritedC.obj" : $(SOURCE) $(DEP_CPP_INHER) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\InheritedC.obj" : $(SOURCE) $(DEP_CPP_INHER) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\InheritedC.sbr" : $(SOURCE) $(DEP_CPP_INHER) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\style_inst.cxx DEP_CPP_STYLE_I=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\style_inst.obj" : $(SOURCE) $(DEP_CPP_STYLE_I) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\style_inst.obj" : $(SOURCE) $(DEP_CPP_STYLE_I) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\style_inst.sbr" : $(SOURCE) $(DEP_CPP_STYLE_I) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\common_inst.cxx DEP_CPP_COMMO=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\common_inst.obj" : $(SOURCE) $(DEP_CPP_COMMO) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\common_inst.obj" : $(SOURCE) $(DEP_CPP_COMMO) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\common_inst.sbr" : $(SOURCE) $(DEP_CPP_COMMO) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\InterpreterMessages.msg !IF "$(CFG)" == "style - Win32 Release" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "style - Win32 Debug" # PROP Exclude_From_Build 1 !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\style_inst.m4 !IF "$(CFG)" == "style - Win32 Release" !ELSEIF "$(CFG)" == "style - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\FlowObj_inst.m4 !IF "$(CFG)" == "style - Win32 Release" !ELSEIF "$(CFG)" == "style - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\common_inst.m4 !IF "$(CFG)" == "style - Win32 Release" !ELSEIF "$(CFG)" == "style - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\GroveManager.cxx DEP_CPP_GROVEM=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\GroveManager.obj" : $(SOURCE) $(DEP_CPP_GROVEM) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\GroveManager.obj" : $(SOURCE) $(DEP_CPP_GROVEM) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\GroveManager.sbr" : $(SOURCE) $(DEP_CPP_GROVEM) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\DssslApp.cxx DEP_CPP_DSSSLA=\ ".\grove\LocNode.h"\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\sptchar.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\spgrove\SdNode.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslAppMessages.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\jade_version.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\DssslApp.obj" : $(SOURCE) $(DEP_CPP_DSSSLA) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\DssslApp.obj" : $(SOURCE) $(DEP_CPP_DSSSLA) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\DssslApp.sbr" : $(SOURCE) $(DEP_CPP_DSSSLA) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Project Dependency # Project_Dep_Name "spgrove" !IF "$(CFG)" == "style - Win32 Release" "spgrove - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="spgrove - Win32 Release" !ELSEIF "$(CFG)" == "style - Win32 Debug" "spgrove - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="spgrove - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Source File SOURCE=.\style\jade_version.h !IF "$(CFG)" == "style - Win32 Release" !ELSEIF "$(CFG)" == "style - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\Pattern.cxx DEP_CPP_PATTE=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\Pattern.obj" : $(SOURCE) $(DEP_CPP_PATTE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\Pattern.obj" : $(SOURCE) $(DEP_CPP_PATTE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\Pattern.sbr" : $(SOURCE) $(DEP_CPP_PATTE) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\MacroFlowObj.cxx DEP_CPP_MACRO=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\MacroFlowObj.obj" : $(SOURCE) $(DEP_CPP_MACRO) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\MacroFlowObj.obj" : $(SOURCE) $(DEP_CPP_MACRO) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\MacroFlowObj.sbr" : $(SOURCE) $(DEP_CPP_MACRO) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\style\SchemeParser.cxx DEP_CPP_SCHEM=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\Collector.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\DssslSpecEventHandler.h"\ ".\style\ELObj.h"\ ".\style\ELObjMessageArg.h"\ ".\style\EvalContext.h"\ ".\style\Expression.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ ".\style\Insn.h"\ ".\style\Insn2.h"\ ".\style\Interpreter.h"\ ".\style\InterpreterMessages.h"\ ".\style\MacroFlowObj.h"\ ".\style\NumberCache.h"\ ".\style\Pattern.h"\ ".\style\ProcessContext.h"\ ".\style\ProcessingMode.h"\ ".\style\SchemeParser.h"\ ".\style\SosofoObj.h"\ ".\style\Style.h"\ ".\style\style_pch.h"\ ".\style\StyleEngine.h"\ ".\style\stylelib.h"\ ".\style\VM.h"\ !IF "$(CFG)" == "style - Win32 Release" # ADD CPP /Yu"stylelib.h" "$(INTDIR)\SchemeParser.obj" : $(SOURCE) $(DEP_CPP_SCHEM) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "spgrove" /I "grove" /I "include" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "style - Win32 Debug" # ADD CPP /Yu"stylelib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "spgrove" /I "grove" /I "include" /D\ "_DEBUG" /D "WIN32" /D "_WINDOWS" /D DSSSL_NAMESPACE=James_Clark_DSSSL /D\ SP_NAMESPACE=James_Clark_SP /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /FR"$(INTDIR)/" /Fp"$(INTDIR)/style.pch" /Yu"stylelib.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\SchemeParser.obj" : $(SOURCE) $(DEP_CPP_SCHEM) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) "$(INTDIR)\SchemeParser.sbr" : $(SOURCE) $(DEP_CPP_SCHEM) "$(INTDIR)"\ "$(INTDIR)\style.pch" $(BuildCmds) !ENDIF # End Source File # End Target ################################################################################ # Begin Target # Name "jade - Win32 Release" # Name "jade - Win32 Debug" !IF "$(CFG)" == "jade - Win32 Release" !ELSEIF "$(CFG)" == "jade - Win32 Debug" !ENDIF ################################################################################ # Begin Source File SOURCE=.\jade\SgmlFOTBuilder.cxx DEP_CPP_SGMLF=\ ".\grove\Node.h"\ ".\include\Boolean.h"\ ".\include\CodingSystem.h"\ ".\include\config.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\ExternalId.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\macros.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\xnew.h"\ ".\jade\SgmlFOTBuilder.h"\ ".\style\dsssl_ns.h"\ ".\style\FOTBuilder.h"\ "$(INTDIR)\SgmlFOTBuilder.obj" : $(SOURCE) $(DEP_CPP_SGMLF) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\RtfFOTBuilder.cxx DEP_CPP_RTFFO=\ ".\grove\Node.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityManager.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\InputSource.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\macros.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\OutputByteStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\jade\RtfFOTBuilder.h"\ ".\jade\RtfFOTBuilder_inst.cxx"\ ".\jade\RtfMessages.h"\ ".\jade\RtfOle.h"\ ".\jade\TmpOutputByteStream.h"\ ".\style\dsssl_ns.h"\ ".\style\FOTBuilder.h"\ "$(INTDIR)\RtfFOTBuilder.obj" : $(SOURCE) $(DEP_CPP_RTFFO) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\jade.cxx DEP_CPP_JADE_=\ ".\grove\Node.h"\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\sptchar.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\jade\HtmlFOTBuilder.h"\ ".\jade\JadeMessages.h"\ ".\jade\MifFOTBuilder.h"\ ".\jade\RtfFOTBuilder.h"\ ".\jade\SgmlFOTBuilder.h"\ ".\jade\TeXFOTBuilder.h"\ ".\jade\TransformFOTBuilder.h"\ ".\spgrove\GroveApp.h"\ ".\spgrove\GroveBuilder.h"\ ".\style\dsssl_ns.h"\ ".\style\DssslApp.h"\ ".\style\FOTBuilder.h"\ ".\style\GroveManager.h"\ !IF "$(CFG)" == "jade - Win32 Release" # ADD CPP /D "JADE_MIF" "$(INTDIR)\jade.obj" : $(SOURCE) $(DEP_CPP_JADE_) "$(INTDIR)" $(CPP) /nologo /MD /W3 /GX /O2 /I "include" /I "style" /I "grove" /I\ "spgrove" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP\ /D DSSSL_NAMESPACE=James_Clark_DSSSL /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /D "JADE_MIF" /Fp"$(INTDIR)/jade.pch" /YX /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "jade - Win32 Debug" # ADD CPP /D "JADE_MIF" "$(INTDIR)\jade.obj" : $(SOURCE) $(DEP_CPP_JADE_) "$(INTDIR)" $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "include" /I "style" /I "grove" /I\ "spgrove" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP\ /D DSSSL_NAMESPACE=James_Clark_DSSSL /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /D "JADE_MIF" /Fp"$(INTDIR)/jade.pch" /YX /Fo"$(INTDIR)/"\ /Fd"$(INTDIR)/" /c $(SOURCE) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\HtmlFOTBuilder.cxx DEP_CPP_HTMLF=\ ".\grove\Node.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\macros.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\xnew.h"\ ".\jade\HtmlFOTBuilder.h"\ ".\jade\HtmlFOTBuilder_inst.cxx"\ ".\jade\HtmlMessages.h"\ ".\style\dsssl_ns.h"\ ".\style\FOTBuilder.h"\ "$(INTDIR)\HtmlFOTBuilder.obj" : $(SOURCE) $(DEP_CPP_HTMLF) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\HtmlFOTBuilder_inst.m4 !IF "$(CFG)" == "jade - Win32 Release" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "jade - Win32 Debug" # PROP Exclude_From_Build 1 !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\jade.rc DEP_RSC_JADE_R=\ ".\jade\HtmlMessages.rc"\ ".\jade\JadeMessages.rc"\ ".\jade\RtfMessages.rc"\ ".\jade\TeXMessages.rc"\ ".\style\DssslAppMessages.rc"\ ".\style\InterpreterMessages.rc"\ !IF "$(CFG)" == "jade - Win32 Release" # ADD BASE RSC /l 0x809 /i "jade" # ADD RSC /l 0x809 /i "jade" /i "style" /d "JADE_MIF" "$(INTDIR)\jade.res" : $(SOURCE) $(DEP_RSC_JADE_R) "$(INTDIR)" $(RSC) /l 0x809 /fo"$(INTDIR)/jade.res" /i "jade" /i "style" /d "NDEBUG" /d\ "JADE_MIF" $(SOURCE) !ELSEIF "$(CFG)" == "jade - Win32 Debug" # ADD BASE RSC /l 0x809 /i "jade" # ADD RSC /l 0x809 /i "jade" /i "style" /d "JADE_MIF" "$(INTDIR)\jade.res" : $(SOURCE) $(DEP_RSC_JADE_R) "$(INTDIR)" $(RSC) /l 0x809 /fo"$(INTDIR)/jade.res" /i "jade" /i "style" /d "_DEBUG" /d\ "JADE_MIF" $(SOURCE) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\JadeMessages.msg !IF "$(CFG)" == "jade - Win32 Release" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "jade - Win32 Debug" # PROP Exclude_From_Build 1 !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\HtmlMessages.msg !IF "$(CFG)" == "jade - Win32 Release" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "jade - Win32 Debug" # PROP Exclude_From_Build 1 !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\RtfFOTBuilder_inst.m4 !IF "$(CFG)" == "jade - Win32 Release" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "jade - Win32 Debug" # PROP Exclude_From_Build 1 !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\TeXFOTBuilder.cxx DEP_CPP_TEXFO=\ ".\grove\Node.h"\ ".\include\Boolean.h"\ ".\include\config.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\ExternalId.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\OutputByteStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\xnew.h"\ ".\jade\TeXFOTBuilder.h"\ ".\jade\TeXFOTBuilder_inst.cxx"\ ".\jade\TeXMessages.h"\ ".\jade\TmpOutputByteStream.h"\ ".\style\dsssl_ns.h"\ ".\style\FOTBuilder.h"\ "$(INTDIR)\TeXFOTBuilder.obj" : $(SOURCE) $(DEP_CPP_TEXFO) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Project Dependency # Project_Dep_Name "grove" !IF "$(CFG)" == "jade - Win32 Release" "grove - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="grove - Win32 Release" !ELSEIF "$(CFG)" == "jade - Win32 Debug" "grove - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="grove - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Project Dependency # Project_Dep_Name "spgrove" !IF "$(CFG)" == "jade - Win32 Release" "spgrove - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="spgrove - Win32 Release" !ELSEIF "$(CFG)" == "jade - Win32 Debug" "spgrove - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="spgrove - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Source File SOURCE=.\jade\RtfMessages.msg !IF "$(CFG)" == "jade - Win32 Release" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "jade - Win32 Debug" # PROP Exclude_From_Build 1 !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\TransformFOTBuilder.cxx DEP_CPP_TRANS=\ ".\grove\Node.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ExternalId.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\xnew.h"\ ".\jade\TransformFOTBuilder.h"\ ".\jade\TransformFOTBuilder_inst.cxx"\ ".\style\dsssl_ns.h"\ ".\style\FOTBuilder.h"\ "$(INTDIR)\TransformFOTBuilder.obj" : $(SOURCE) $(DEP_CPP_TRANS) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\dsssl\fot.dtd !IF "$(CFG)" == "jade - Win32 Release" !ELSEIF "$(CFG)" == "jade - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\TransformFOTBuilder_inst.m4 !IF "$(CFG)" == "jade - Win32 Release" !ELSEIF "$(CFG)" == "jade - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\RtfOle.cxx DEP_CPP_RTFOL=\ ".\include\Boolean.h"\ ".\include\config.h"\ ".\include\OutputByteStream.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\jade\RtfOle.h"\ ".\style\dsssl_ns.h"\ "$(INTDIR)\RtfOle.obj" : $(SOURCE) $(DEP_CPP_RTFOL) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Project Dependency # Project_Dep_Name "style" !IF "$(CFG)" == "jade - Win32 Release" "style - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="style - Win32 Release" !ELSEIF "$(CFG)" == "jade - Win32 Debug" "style - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="style - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Source File SOURCE=.\jade\MifFOTBuilder.cxx DEP_CPP_MIFFO=\ ".\grove\Node.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\InputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\jade\MifFOTBuilder.h"\ ".\jade\MifFOTBuilder_inst.cxx"\ ".\jade\MifMessages.h"\ ".\jade\TmpOutputByteStream.h"\ ".\style\dsssl_ns.h"\ ".\style\FOTBuilder.h"\ !IF "$(CFG)" == "jade - Win32 Release" # ADD CPP /D "JADE_MIF" "$(INTDIR)\MifFOTBuilder.obj" : $(SOURCE) $(DEP_CPP_MIFFO) "$(INTDIR)" $(CPP) /nologo /MD /W3 /GX /O2 /I "include" /I "style" /I "grove" /I\ "spgrove" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP\ /D DSSSL_NAMESPACE=James_Clark_DSSSL /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /D "JADE_MIF" /Fp"$(INTDIR)/jade.pch" /YX /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "jade - Win32 Debug" # ADD CPP /D "JADE_MIF" "$(INTDIR)\MifFOTBuilder.obj" : $(SOURCE) $(DEP_CPP_MIFFO) "$(INTDIR)" $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "include" /I "style" /I "grove" /I\ "spgrove" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP\ /D DSSSL_NAMESPACE=James_Clark_DSSSL /D GROVE_NAMESPACE=James_Clark_GROVE /D\ "SP_MULTI_BYTE" /D "JADE_MIF" /Fp"$(INTDIR)/jade.pch" /YX /Fo"$(INTDIR)/"\ /Fd"$(INTDIR)/" /c $(SOURCE) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\MifFOTBuilder_inst.m4 !IF "$(CFG)" == "jade - Win32 Release" !ELSEIF "$(CFG)" == "jade - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\jade\TeXFOTBuilder_inst.m4 !IF "$(CFG)" == "jade - Win32 Release" !ELSEIF "$(CFG)" == "jade - Win32 Debug" !ENDIF # End Source File # End Target ################################################################################ # Begin Target # Name "jadedist - Win32 Release" !IF "$(CFG)" == "jadedist - Win32 Release" ".\jadedist\jade.zip" : CD jadedist makedist !ENDIF ################################################################################ # Begin Project Dependency # Project_Dep_Name "jade" !IF "$(CFG)" == "jadedist - Win32 Release" "jade - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="jade - Win32 Release" !ENDIF # End Project Dependency ################################################################################ # Begin Source File SOURCE=".\jadedist\bin-files.txt" # End Source File ################################################################################ # Begin Source File SOURCE=.\jadedist\files.txt # End Source File ################################################################################ # Begin Source File SOURCE=.\jadedist\makedist.bat # End Source File # End Target ################################################################################ # Begin Target # Name "groveoa - Win32 Release" # Name "groveoa - Win32 Debug" !IF "$(CFG)" == "groveoa - Win32 Release" !ELSEIF "$(CFG)" == "groveoa - Win32 Debug" !ENDIF ################################################################################ # Begin Source File SOURCE=.\groveoa\GroveNode.cxx DEP_CPP_GROVEN=\ ".\grove\LocNode.h"\ ".\grove\Node.h"\ ".\groveoa\GroveNode.h"\ ".\groveoa\groveoa.h"\ ".\groveoa\StdAfx.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetInfo.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityManager.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Location.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\OutputByteStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\xnew.h"\ !IF "$(CFG)" == "groveoa - Win32 Release" # ADD CPP /Yu"stdafx.h" "$(INTDIR)\GroveNode.obj" : $(SOURCE) $(DEP_CPP_GROVEN) "$(INTDIR)"\ "$(INTDIR)\groveoa.pch" ".\groveoa\groveoa.h" $(CPP) /nologo /MD /W3 /GX /O2 /I "include" /I "grove" /I "spgrove" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D\ "_WINDLL" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /D\ GROVE_NAMESPACE=James_Clark_GROVE /Fp"$(INTDIR)/groveoa.pch" /Yu"stdafx.h"\ /Fo"$(INTDIR)/" /c $(SOURCE) !ELSEIF "$(CFG)" == "groveoa - Win32 Debug" # ADD CPP /Yu"stdafx.h" "$(INTDIR)\GroveNode.obj" : $(SOURCE) $(DEP_CPP_GROVEN) "$(INTDIR)"\ ".\groveoa\groveoa.h" "$(INTDIR)\groveoa.pch" $(CPP) /nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /I "grove" /I "spgrove"\ /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D\ "_WINDLL" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /D\ GROVE_NAMESPACE=James_Clark_GROVE /Fp"$(INTDIR)/groveoa.pch" /Yu"stdafx.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\groveoa\groveoa.cxx DEP_CPP_GROVEO=\ ".\groveoa\CGroveBuilder.h"\ ".\groveoa\groveoa.h"\ ".\groveoa\groveoa_i.c"\ ".\groveoa\StdAfx.h"\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\WinApp.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ !IF "$(CFG)" == "groveoa - Win32 Release" # ADD CPP /Yu"stdafx.h" "$(INTDIR)\groveoa.obj" : $(SOURCE) $(DEP_CPP_GROVEO) "$(INTDIR)"\ "$(INTDIR)\groveoa.pch" ".\groveoa\groveoa.h" ".\groveoa\groveoa_i.c" $(CPP) /nologo /MD /W3 /GX /O2 /I "include" /I "grove" /I "spgrove" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D\ "_WINDLL" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /D\ GROVE_NAMESPACE=James_Clark_GROVE /Fp"$(INTDIR)/groveoa.pch" /Yu"stdafx.h"\ /Fo"$(INTDIR)/" /c $(SOURCE) !ELSEIF "$(CFG)" == "groveoa - Win32 Debug" # ADD CPP /Yu"stdafx.h" "$(INTDIR)\groveoa.obj" : $(SOURCE) $(DEP_CPP_GROVEO) "$(INTDIR)"\ ".\groveoa\groveoa.h" ".\groveoa\groveoa_i.c" "$(INTDIR)\groveoa.pch" $(CPP) /nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /I "grove" /I "spgrove"\ /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D\ "_WINDLL" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /D\ GROVE_NAMESPACE=James_Clark_GROVE /Fp"$(INTDIR)/groveoa.pch" /Yu"stdafx.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\groveoa\groveoa.rc DEP_RSC_GROVEOA=\ ".\groveoa\GroveBuilder.rgs"\ ".\groveoa\groveoa.tlb"\ !IF "$(CFG)" == "groveoa - Win32 Release" "$(INTDIR)\groveoa.res" : $(SOURCE) $(DEP_RSC_GROVEOA) "$(INTDIR)"\ ".\groveoa\groveoa.tlb" $(RSC) /l 0x809 /fo"$(INTDIR)/groveoa.res" /i "groveoa" /d "NDEBUG"\ $(SOURCE) !ELSEIF "$(CFG)" == "groveoa - Win32 Debug" "$(INTDIR)\groveoa.res" : $(SOURCE) $(DEP_RSC_GROVEOA) "$(INTDIR)"\ ".\groveoa\groveoa.tlb" $(RSC) /l 0x809 /fo"$(INTDIR)/groveoa.res" /i "groveoa" /d "_DEBUG"\ $(SOURCE) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\groveoa\StdAfx.cxx DEP_CPP_STDAF=\ ".\groveoa\StdAfx.h"\ !IF "$(CFG)" == "groveoa - Win32 Release" # ADD CPP /Yc"stdafx.h" BuildCmds= \ $(CPP) /nologo /MD /W3 /GX /O2 /I "include" /I "grove" /I "spgrove" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D\ "_WINDLL" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /D\ GROVE_NAMESPACE=James_Clark_GROVE /Fp"$(INTDIR)/groveoa.pch" /Yc"stdafx.h"\ /Fo"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\StdAfx.obj" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)" $(BuildCmds) "$(INTDIR)\groveoa.pch" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)" $(BuildCmds) !ELSEIF "$(CFG)" == "groveoa - Win32 Debug" # ADD CPP /Yc"stdafx.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /I "grove" /I "spgrove"\ /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D\ "_WINDLL" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /D\ GROVE_NAMESPACE=James_Clark_GROVE /Fp"$(INTDIR)/groveoa.pch" /Yc"stdafx.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\StdAfx.obj" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)" $(BuildCmds) "$(INTDIR)\groveoa.pch" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\groveoa\CGroveBuilder.cxx DEP_CPP_CGROV=\ ".\grove\Node.h"\ ".\groveoa\CGroveBuilder.h"\ ".\groveoa\GroveNode.h"\ ".\groveoa\groveoa.h"\ ".\groveoa\StdAfx.h"\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageTable.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\sptchar.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\WinApp.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spgrove\GroveBuilder.h"\ !IF "$(CFG)" == "groveoa - Win32 Release" # ADD CPP /Yu"stdafx.h" "$(INTDIR)\CGroveBuilder.obj" : $(SOURCE) $(DEP_CPP_CGROV) "$(INTDIR)"\ "$(INTDIR)\groveoa.pch" ".\groveoa\groveoa.h" $(CPP) /nologo /MD /W3 /GX /O2 /I "include" /I "grove" /I "spgrove" /D\ "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D\ "_WINDLL" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /D\ GROVE_NAMESPACE=James_Clark_GROVE /Fp"$(INTDIR)/groveoa.pch" /Yu"stdafx.h"\ /Fo"$(INTDIR)/" /c $(SOURCE) !ELSEIF "$(CFG)" == "groveoa - Win32 Debug" # ADD CPP /Yu"stdafx.h" "$(INTDIR)\CGroveBuilder.obj" : $(SOURCE) $(DEP_CPP_CGROV) "$(INTDIR)"\ ".\groveoa\groveoa.h" "$(INTDIR)\groveoa.pch" $(CPP) /nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /I "grove" /I "spgrove"\ /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D\ "_WINDLL" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /D\ GROVE_NAMESPACE=James_Clark_GROVE /Fp"$(INTDIR)/groveoa.pch" /Yu"stdafx.h"\ /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\groveoa\groveoa.def !IF "$(CFG)" == "groveoa - Win32 Release" !ELSEIF "$(CFG)" == "groveoa - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\groveoa\groveoa.idl !IF "$(CFG)" == "groveoa - Win32 Release" # Begin Custom Build InputDir=".\groveoa" InputPath=.\groveoa\groveoa.idl BuildCmds= \ midl /Oicf /h $(InputDir)\groveoa.h /iid $(InputDir)\groveoa_i.c /proxy\ $(InputDir)\groveoa_p.c /tlb $(InputDir)\groveoa.tlb $(InputPath) \ "$(InputDir)\groveoa.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(BuildCmds) "$(InputDir)\groveoa.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(BuildCmds) "$(InputDir)\groveoa_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(BuildCmds) # End Custom Build !ELSEIF "$(CFG)" == "groveoa - Win32 Debug" # Begin Custom Build InputDir=".\groveoa" InputPath=.\groveoa\groveoa.idl BuildCmds= \ midl /Oicf /h $(InputDir)\groveoa.h /iid $(InputDir)\groveoa_i.c /proxy\ $(InputDir)\groveoa_p.c /tlb $(InputDir)\groveoa.tlb $(InputPath) \ "$(InputDir)\groveoa.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(BuildCmds) "$(InputDir)\groveoa.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(BuildCmds) "$(InputDir)\groveoa_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(BuildCmds) # End Custom Build !ENDIF # End Source File ################################################################################ # Begin Project Dependency # Project_Dep_Name "grove" !IF "$(CFG)" == "groveoa - Win32 Release" "grove - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="grove - Win32 Release" !ELSEIF "$(CFG)" == "groveoa - Win32 Debug" "grove - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="grove - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Project Dependency # Project_Dep_Name "spgrove" !IF "$(CFG)" == "groveoa - Win32 Release" "spgrove - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="spgrove - Win32 Release" !ELSEIF "$(CFG)" == "groveoa - Win32 Debug" "spgrove - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\jade.mak" CFG="spgrove - Win32 Debug" !ENDIF # End Project Dependency # End Target # End Project ################################################################################ jade-1.2.1/jade.dsw100444 764 764 11716 6604665626 11673 0ustar jjcjjcMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "all"=.\all\all.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name groveoa End Project Dependency Begin Project Dependency Project_Dep_Name jade End Project Dependency Begin Project Dependency Project_Dep_Name nsgmls End Project Dependency Begin Project Dependency Project_Dep_Name sgmlnorm End Project Dependency Begin Project Dependency Project_Dep_Name spam End Project Dependency Begin Project Dependency Project_Dep_Name spent End Project Dependency Begin Project Dependency Project_Dep_Name sx End Project Dependency }}} ############################################################################### Project: "grove"=.\grove\grove.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "groveoa"=.\groveoa\groveoa.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name grove End Project Dependency Begin Project Dependency Project_Dep_Name spgrove End Project Dependency Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Project: "jade"=.\jade\jade.dsp - Package Owner=<4> Package=<5> {{{ begin source code control c:\home\work\sp\jade.pj . end source code control }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name grove End Project Dependency Begin Project Dependency Project_Dep_Name spgrove End Project Dependency Begin Project Dependency Project_Dep_Name style End Project Dependency Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Project: "jadedist"=.\jadedist\jadedist.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name all End Project Dependency }}} ############################################################################### Project: "lib"=.\lib\lib.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "nsgmls"=.\nsgmls\nsgmls.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Project: "sgmlnorm"=.\sgmlnorm\sgmlnorm.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Project: "spam"=.\spam\spam.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Project: "spent"=.\spent\spent.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Project: "spgrove"=.\spgrove\spgrove.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name grove End Project Dependency Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Project: "style"=.\style\style.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name grove End Project Dependency Begin Project Dependency Project_Dep_Name spgrove End Project Dependency Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Project: "sx"=.\sx\sx.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### jade-1.2.1/dsssl/ 40775 764 764 0 6610553416 11250 5ustar jjcjjcjade-1.2.1/dsssl/demo.dsl100444 764 764 237 6606574462 12764 0ustar jjcjjc (root (make simple-page-sequence (make scroll))) (element p (make paragraph)) jade-1.2.1/dsssl/demo.sgm100444 764 764 173 6606574462 12767 0ustar jjcjjc ]>

The first paragraph.

The second paragraph. jade-1.2.1/dsssl/style-sheet.dtd100444 764 764 2371 6604607710 14307 0ustar jjcjjc jade-1.2.1/dsssl/dsssl.dtd100444 764 764 11076 6604607710 13213 0ustar jjcjjc jade-1.2.1/dsssl/fot.dtd100444 764 764 34725 6604607710 12661 0ustar jjcjjc jade-1.2.1/dsssl/catalog100444 764 764 313 6606574462 12664 0ustar jjcjjcPUBLIC "-//James Clark//DTD DSSSL Flow Object Tree//EN" "fot.dtd" PUBLIC "ISO/IEC 10179:1996//DTD DSSSL Architecture//EN" "dsssl.dtd" PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" "style-sheet.dtd" jade-1.2.1/dsssl/jadetex.dtx100444 764 764 573123 6610365404 13557 0ustar jjcjjc% \iffalse % RCS: $Id: jadetex.dtx 1.3 1998/10/12 11:41:51 jjc Exp $ % File: jadetex.dtx. Copyright (C) 1996, 1997, 1998 % Sebastian Rahtz % % Permission is hereby granted, free of charge, to any person obtaining % a copy of this software and associated documentation files (the % ``Software''), to deal in the Software without restriction, including % without limitation the rights to use, copy, modify, merge, publish, % distribute, sublicense, and/or sell copies of the Software, and to % permit persons to whom the Software is furnished to do so, subject to % the following conditions: % % The above copyright notice and this permission notice shall be included % in all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS % OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF % MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. % IN NO EVENT SHALL SEBASTIAN RAHTZ BE LIABLE FOR ANY CLAIM, DAMAGES OR % OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, % ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR % OTHER DEALINGS IN THE SOFTWARE. % %\ProvidesFile{isoents.tex} %\ProvidesFile{dsssl.def} %<*dtx> \ProvidesFile{jadetex.ltx} % %\NeedsTeXFormat{LaTeX2e}[1995/06/01] %\ProvidesFile{jadetex.ltx} %\GetFileInfo{JadeTeX.dtx} % \ProvidesFile{jadetex.drv} % \fi % \ProvidesFile{jadetex.dtx} % % \iffalse %<*driver> \documentclass{ltxdoc} \usepackage{times,array,longtable,colortbl} \usepackage[T1]{fontenc} \makeatletter \let\\\@centercr \def\arraybackslash{\let\\=\@arraycr} \newcolumntype{P}[1]{>{\raggedright\arraybackslash}p{#1}} \makeatother \EnableCrossrefs \CodelineIndex \begin{document} \title{Jade DSSSL \TeX{} backend macros} \author{Sebastian Rahtz\\Email: \texttt{s.rahtz@elsevier.co.uk}} \date{printed \today} \maketitle \tableofcontents \DocInput{jadetex.dtx} \end{document} % % \fi % \CheckSum{13433} % \StopEventually{} % % \section{Introduction} % \subsection{Acknowledgements} % Developed from the skeleton by David Megginson % (\texttt{dmeggins@microstar.com}), who wrote the original Jade % \texttt{TeXFOTBuilder} module. This version incorporates support for % important changes made by Paul Prescod and Kathleen Marszalek for tables; % those changes and the corresponding work in JadeTeX were commissioned by % Novare International, to whom considerable thanks are due. % % Considerable benefit has been had from corrections, additions and % discusions from David Carlisle, Matthias Clasen, % Ulrich Drepper and Christian Leutloff. % % \subsection{Usage} % The file |jadetex.ltx| can either be loaded before the Jade output % or (better) made into a format file for fast loading; it % sits on top of \LaTeX, so do: % \begin{verbatim} % tex -ini \&latex jadetex.ltx '\dump' % \end{verbatim} % Be warned that because many elements can get labelled in JadeTeX, it is % easy to run out of memory. You will very likely need to increase poolsize. % % If you really want to gain speed and save memory memory, % prepare an even more cut down \LaTeX with unneeded chunks cut out. % (such as the picture environment etc). Be careful and be legal, please. % % We build on \LaTeX, but do not need a lot of the paraphernalia % of the document classes, so we just load the \texttt{minimal} class, % designed for this purpose. We also need access to % input and output font encoding, color, graphics inclusion, and % headers and footers; so we load some standard packages. The % \texttt{inputenc} option is temporary, and needs more thought. % Eventually we want Unicode input working, with Omega. % \begin{macrocode} %<*package> \def\JadeTeXMajorVersion{2} \def\JadeTeXMinorVersion{2} \def\JadeTeXDate{1998/10/12} \documentclass{minimal} \RequirePackage{amssymb}[1995/01/01] \RequirePackage{array}[1995/01/01] \RequirePackage{longtable}[1995/01/01] \RequirePackage{color}[1997/09/09] \RequirePackage{graphicx}[1997/06/09] \RequirePackage{multicol}[1997/12/16] \RequirePackage{textcomp}[1998/01/16] \RequirePackage[dsssl]{inputenc}[1997/12/20] \IfFileExists{t3enc.def} {\RequirePackage[T3,OT2,T1]{fontenc}} {\RequirePackage[OT2,T1]{fontenc}} \fontencoding{T1}\selectfont \RequirePackage{fancyhdr} \RequirePackage[german,french,english]{babel}[1997/01/23] \RequirePackage[implicit=false,bookmarks=false]{hyperref}[1998/08/08] \def\PDFBorders{0 0 0} \def\TeXFOTversion{0.0} \makeatletter % \end{macrocode} % This was suggested by Matthias Clasen, checking that the macros % come from the right version of the Jade TeX backend. The package % will have a n.m version number, where the n changes when Jade changes, % and the m changes when the JadeTeX package changes. % \begin{macrocode} \def\checkFOTversion#1{% \ifx\\#1\\\def\TeXFOTmajor{2} \else \def\TeXFOTmajor{#1}% \fi \let\next\relax \ifnum\TeXFOTmajor=\JadeTeXMajorVersion \else \message{Your file was generated by Jade TeX backend version \TeXFOTmajor} \message{- these macros are for version \JadeTeXMajorVersion. } \message{I'll stop here...} \let\next\@@end \fi \next} % \end{macrocode} % \section{Inherited characteristics} % Here we list the default values; non-inherited characteristics % will always be specified. % \begin{macrocode} \def\AlignLeader{} \def\AsisWrapIndent{} \def\BackgroundColor{} \def\BackgroundLayer{} \def\BackgroundTile{} \def\BorderAlignment{} \def\BorderOmitAtBreak{} \def\BorderPresent{0} \def\BorderPriority{} \def\BoxBorderAlignment{} \def\BoxCornerRadius{} \def\BoxOpenEnd{} \def\BoxType{} \def\CellBackground{} \def\CellCrossed{} \def\CellRowAlignment{start} \def\CellBeforeRowMargin{\z@} \def\CellAfterRowMargin{\z@} \def\CellBeforeColumnMargin{\z@} \def\CellAfterColumnMargin{\z@} \def\Color{} \def\Country{} \def\DisplayAlignment{} \def\EndIndent{\z@} \def\EndMargin{} \def\ExpandTabs{} \def\FieldAlign{start} \def\FieldWidth{0pt} \def\FillingDirection{} \def\FirstLineStartIndent{0pt} \def\FloatOutLineNumbers{} \def\FloatOutMarginalia{} \def\FloatOutSidelines{} \def\fFamName{Times-Roman} % Use Adobe Times Roman by default \def\fPosture{normal} \def\fProportionateWidth{medium} \def\fSize{10pt} \def\fStructure{} \def\fWeight{medium} \def\GlyphAlignmentMode{} \def\GlyphReorderMethod{} \def\GlyphSubstMethod{} \def\HangingPunct{} \def\HeadingLevel{0} \def\Hyphenate{} \def\HyphenationKeep{} \def\HyphenationLadderCount{} \def\HyphenationMethod{} \def\HyphenationPushCharCount{} \def\HyphenationRemainCharCount{} \def\IgnoreRecordEnd{} \def\ImplicitBidiMethod{} \def\InhibitLineBreaks{} \def\InputWhitespaceTreatment{} \def\JustifyGlyphSpaceMaxAdd{} \def\JustifyGlyphSpaceMaxRemove{} \def\KernMode{} \def\Kern{} \def\Language{} \def\LastLineEndIndent{} \def\LastLineJustifyLimit{} \def\LastLineQuadding{} \def\Layer{} \def\Ligature{} \def\LineBreakingMethod{} \def\LineCap{} \def\LineCompositionMethod{} \def\LineJoin{} \def\LineNumberSep{} \def\LineNumberSide{} \def\LineRepeat{} \def\LineSpacing{12pt} \def\Lines{} \def\MarginaliaKeepWithPrevious{} \def\MarginaliaSep{} \def\MarginaliaSide{} \def\MathDisplayMode{inline} \def\MinLeaderRepeat{} \def\MinLeading{2\p@} \def\NColumnsSpanned{1} \def\NumberedLines{} \def\OrphanCount{} \def\PositionPreference{} \def\PrincipalModeSimultaneous{} \def\Quadding{start} \def\ScoreSpaces{} \def\SidelineSep{} \def\SidelineSide{} \def\SpanWeak{} \def\Span{0} \def\StartIndent{\z@} \def\StartMargin{} \def\TableAutoWidthMethod{} \def\TableCornerRadius{} \def\TablePartOmitMiddleFooter{} \def\TablePartOmitMiddleHeader{} \def\TruncateLeader{} \def\WidowCount{} \def\WritingMode{} \def\AlignLeader{1}% true \def\BreakAfter{0}% false \def\BreakAfterPriority{0}% \def\BreakBefore{0}% false \def\BreakBeforePriority{0}% \def\CoalesceId{0}% false \def\EntitySystemId{}% [required] \def\EscapementDirection{}% [=writing-mode] \def\EscapementSpaceAfterNom{\z@}% \def\EscapementSpaceAfterMin{\z@}% \def\EscapementSpaceAfterMax{\z@}% \def\IdrefAddress{}% \def\IsDisplay{0}% false \def\Keep{0}% false \def\KeepWithNext{0}% false \def\KeepWithPrevious{0}% false \def\MayViolateKeepAfter{0}% false \def\MayViolateKeepBefore{0}% false \def\MaxWidth{!} \def\MaxHeight{!} \def\NotationSystemId{}% [required] \def\Orientation{}% [required] \def\PageNColumns{1} \def\PageColumnSep{\z@} \def\GridColumnSep{\z@} \def\PositionPointShift{\z@} \def\PositionPointShiftFactor{} \def\PositionPointX{\z@}% ?? \def\PositionPointY{\z@}% ?? \def\PositionPreference{0}% false \def\ScaleType{max-uniform}% \def\ScaleX{}% [n/a] =scale \def\ScaleY{}% [n/a] =scale \def\ScoreLength{}% ?? \def\ScoreType{}% [required] =type \def\saConditional{0}% false =space-after \def\saForce{0}% false =space-after \def\saMax{0pt}% =space-after \def\saMaxFactor{0}% =space-after \def\saMin{0pt}% =space-after \def\saMinFactor{0}% =space-after \def\saNom{0pt}% =space-after \def\saNomFactor{0}% =space-after \def\saPriority{0}% =space-after \def\sbConditional{0}% false \def\sbForce{0}% false \def\sbMax{0pt}% \def\sbMaxFactor{0}% \def\sbMin{0pt}% \def\sbMinFactor{0}% \def\sbNom{0pt}% \def\sbNomFactor{0}% \def\sbPriority{0}% \newdimen\CurrentSpaceNom \newdimen\CurrentSpaceMin \newdimen\CurrentSpaceMax \CurrentSpaceNom0pt \CurrentSpaceMax0pt \CurrentSpaceMin0pt \newdimen\LastSpaceNom \newdimen\LastSpaceMin \newdimen\LastSpaceMax \LastSpaceNom0pt \LastSpaceMax0pt \LastSpaceMin0pt \def\LastSpaceConditional{0}% false \def\LastSpaceForce{0}% false \def\LastSpaceMaxFactor{0}% \def\LastSpaceMinFactor{0}% \def\LastSpaceNomFactor{0}% \def\LastSpacePriority{0}% \def\TruncateLeader{0}% false \def\Width{}% [required] * \def\Length{}% [context] \def\TableWidth{\hsize}% \def\ColumnIndex{}% [contextual] =column-number? \def\HeaderMargin{0pt} \def\FooterMargin{0pt} \def\LeftMargin{0pt} \def\RightMargin{0pt} \def\TopMargin{0pt} \def\BottomMargin{0pt} \def\PageWidth{211mm} \def\PageHeight{297mm} \def\placement{htbp} \edef\OldFontSize{\fSize} \edef\OldLineSpacing{\LineSpacing} \edef\OldFontPosture{\fPosture} \edef\OldFontProportionateWidth{\fProportionateWidth} \edef\OldFontWeight{\fWeight} \edef\OldfFamName{\fFamName} \let\pageFontSize\fSize \let\pageLineSpacing\LineSpacing \let\pageFontPosture\fPosture \let\pageFontProportionateWidth\fProportionateWidth \let\pageFontWeight\fWeight \let\pagefFamName\fFamName \let\ColorRed\@empty \newtoks\JadeTeXtoks \def\DEBUG#1{\typeout{DBG: #1 at \the\inputlineno}} % \end{macrocode} % \section{Nodes and labels} % \begin{macrocode} \let\Label\@empty \let\Element\@empty \def\Node#1{% \ifnum\Mathcount>1\relax \else \ifTableMode\relax \else \ifx\\#1\\\else \let\ProcessingMode\@empty #1% \ifx\ProcessingMode\@empty\else \let\Label\@empty\let\Element\@empty \fi % \typeout{Node <\Label> or <\Element> -- pending at \the\inputlineno}% \fi \fi \fi } \def\endNode#1{% \ifTableMode \else \let\Label\@empty\let\Element\@empty%\noindent \fi} \def\PageLabel#1{% \@bsphack \expandafter\ifx\csname p@#1\endcsname\relax \else \protected@write\@auxout{}% {\string\pagelabel{#1}{\thepage}}% \fi \@esphack} \def\OriginalPageLabel#1{% \@bsphack\protected@write\@auxout{}% {\string\pagelabel{#1}{\thepage}}\@esphack} \def\pagelabel#1#2{\global\@namedef{p@#1}{#2}} \def\Pageref#1{\expandafter\@Setref\csname p@#1\endcsname{#1}} \def\@Setref#1#2{% \ifx#1\relax \immediate\write\@mainaux{\string\pagelabel{#2}{-999}}% \protect\G@refundefinedtrue \nfss@text{\reset@font\bfseries ??}% \@latex@warning{Reference `#2' on page \thepage \space undefined}% \else \ifNestedLink{#1}% \else \hyper@@link[Page]{}{page.#1}{#1}% % \typeout{Made a Link at \the\inputlineno, to page.#1}% \fi \fi } % \def\insertCurrentNodePageNumber#1{% \bgroup \SetupICs{#1}% \InlineNIC \ifx\Label\@empty \Pageref{\Element}% \else \Pageref{\Label}% \fi \endInlineNIC \endSetupICs \egroup } % \end{macrocode} %\section{Atomic flow objects} % \begin{macrocode} \def\insertAlignmentPoint#1{} % \end{macrocode} % \subsection{Maths} % \subsubsection{General math sequences} % \begin{macrocode} \def\@display{display} % \end{macrocode} % We are likely to meet nested math sequences, so maintain a counter % to determine if we are at the outer level, and should turn % math (display or inline) off or on. % \begin{macrocode} \newcount\Mathcount \def\MathSeq#1{% \bgroup \SetupICs{#1}% \FlowObjectSetup{0}% \global\advance\Mathcount by 1% \let\Action\relax \ifnum\Mathcount=1 \ifx\MathDisplayMode\@display \let\Action\Dmath \else \let\Action\Imath \fi \fi \Action } \def\endMathSeq{% \global\advance\Mathcount by -1% \let\Action\relax \ifnum\Mathcount=0 \ifx\MathDisplayMode\@display\let\Action\endDmath\else\let\Action\Imath\fi \fi \Action \endSetupICs \egroup } \def\Dmath{\vskip\MinLeading\[} \def\endDmath{\]\vskip\MinLeading} \def\Imath{$} \def\Cleanmath{\def\Node##1{}\def\endNode##1{}% \def\MathSeq##1{}\def\endMathSeq##1{} } % \end{macrocode} % \subsubsection{Fences} % \begin{macrocode} \def\FenceSerial#1#2#3#4{#1\FlowObjectSetup{0}% {\Cleanmath % % #1: fence characteristics % #2: fence contents % #3 open character % #4 close character % \ifx\\#3\\\left.\else\left#3\fi {#2}% \ifx\\#4\\\right.\else\right#4\fi }% } % \end{macrocode} % \subsubsection{Fractions} % These simply translate into |{Numerator \over Denominator}| % \begin{macrocode} \def\FractionSerial#1{#1\FlowObjectSetup{0}\bgroup} \def\endFractionSerial{\egroup} \def\FractionDenominator{} \def\endFractionDenominator{} \def\FractionNumerator{} \def\endFractionNumerator{\over } \def\insertFractionBar{} % \end{macrocode} % \subsubsection{Marks} % Waiting to be implemented. % \begin{macrocode} \def\MarkOver#1#2\endMarkOver{} \def\MarkUnder#1#2\endMarkUnder{} \def\MarkSerial#1{} \def\endMarkSerial{} % \end{macrocode} % \subsubsection{Operators/limits} % \begin{macrocode} \def\MathOperatorSerial#1{#1\FlowObjectSetup{0}\begingroup\Cleanmath} \def\endMathOperatorSerial{\endgroup} \def\MathOperatorOperator#1#2\endMathOperatorOperator#3{#1% \mathop{#2}} \def\MathOperatorLowerLimit#1{#1_\bgroup} \def\endMathOperatorLowerLimit#1{\egroup} \def\MathOperatorUpperLimit#1{#1^\bgroup} \def\endMathOperatorUpperLimit#1{\egroup} % \end{macrocode} % \subsubsection{Radicals} % \begin{macrocode} \def\RadicalSerial#1\insertRadicalRadicalDefaulted#2#3\RadicalDegree#4#5\endRadicalDegree#6\endRadicalSerial{#1\FlowObjectSetup{0}% \ifx\\#5\\\ensuremath{\sqrt{#3}}\else\ensuremath{\root #5 \of {#3}}\fi} % \end{macrocode} % \subsubsection{Grids} % \begin{macrocode} \newcount\GridCells \newcount\GridRows \newif\ifExplicitGrid \def\Grid#1{#1% \begingroup \FlowObjectSetup{0}% \Cleanmath \global\GridCells\@ne\global\GridRows0 \ifnum\NColumns=0 \ExplicitGridtrue\def\NColumns{25}% \else\ExplicitGridfalse\fi \begin{array}{*{\NColumns}{c}}% } \def\endGrid{\end{array}\endgroup} \def\GridCell#1{#1\FlowObjectSetup{0}} \def\endGridCell#1{% \ifnum\NColumns=\GridCells \global\GridCells\@ne \def\@tempa{\cr}% \else \global\advance\GridCells\@ne \def\@tempa{&}% \fi \@tempa} \def\NewColumn{&} \def\NewRow{\\} % \end{macrocode} % \subsubsection{Superscript, subscript} % \begin{macrocode} \def\Subscript#1#2{_{#2}} \def\Superscript#1#2{^{#2}} % \end{macrocode} % \subsubsection{Unmath} % \begin{macrocode} \def\Unmath#1#2{% {\SetupICs{#1}\mbox{#2}\endSetupICs}% } % \end{macrocode} % \subsubsection{ScriptSerial} % \begin{macrocode} \def\ScriptSerial#1#2#3#4#5#6#7#8{% \begingroup \let\MathSeq\@gobble \let\Node\@gobble \let\endNode\@gobble \let\endMathSeq\@gobble \endgroup \ifx$#3#4$% \else \vphantom{#2}_{#4}^{#3}% \fi \ifx$#7$\else [[[over #7]]]\fi \ifx$#8$\else [[[over #8]]]\fi {#2}_{#6}^{#5}} % \end{macrocode} % \subsection{External Graphic flow object class (clause 12.6.15)} % How we include graphics depends on the NotationSystemId. % Ulrich Drepper worked this % out, and he also made the alignment and indentation work correctly. %If any other notation needs special % handling it can be implemented by adding a macro % |insertExternalGraphicNotationXXX| % where XXX is the notation name. % \begin{macrocode} \def\insertExternalGraphic#1{% \ifGroupMode\begingroup\fi \SetupICs{#1}% \expandafter\ifx\csname insertExternalGraphicNotation\NotationSystemId\endcsname\relax% \insertExternalGraphicNotation% \else \csname insertExternalGraphicNotation\NotationSystemId\endcsname \fi \ifGroupMode\endgroup\fi } \def\insertExternalGraphicNotation{% \ifTableMode\def\IsDisplay{0}\fi \ExternalGraphicNIC \ifcase\IsDisplay % 0, its inline \ifdim\PositionPointY=\z@ \expandafter\IncludeGraphic\EntitySystemId\\% \else \raisebox{\PositionPointY}[\z@][\z@]{% \expandafter\IncludeGraphic\EntitySystemId\\% }% \fi % 1 its display \or% \DisplayNIC \@@par% \@tempdima\textwidth \ifdim\EndIndent>\z@ \advance\@tempdima by-\EndIndent \fi \ifdim\StartIndent>\z@ \advance\@tempdima by-\StartIndent \moveright\StartIndent \fi \hbox to\@tempdima{% \ifx\DisplayAlignment\A@center\hfill\fi% \ifx\DisplayAlignment\A@end\hfill\fi% \expandafter\IncludeGraphic\EntitySystemId\\% \ifx\DisplayAlignment\A@center\hfill\fi% \ifx\DisplayAlignment\A@start\hfill\fi% }% \@@par% \else% \expandafter\IncludeGraphic\EntitySystemId\\% \fi \endExternalGraphicNIC \ifcase\IsDisplay \or \endDisplayNIC \fi } \def\insertExternalGraphicNotationTEX{% \input\EntitySystemId } \def\IncludeGraphic{\@ifnextchar<{\@IncludeGraphic}{\@IncludeGraphic<>}} \def\scale@max{max} \def\scale@false{false} \def\scale@maxuniform{max-uniform} % \end{macrocode} % There are three situations: ScaleX and ScaleY are supplied % (possibly identical), in which case ScaleType is `false', or % ScaleType is `max' or `max-uniform' (the default); in the latter % cases, use MaxWidth and MaxHeight, with and without preserved % aspect ratio. The width and height default to \LaTeX{} graphics package % `!', ie their natural size. I \emph{think} this is the right % interpretation of the standard. % \begin{macrocode} \def\Exclams{!!} \def\@IncludeGraphic<#1>#2\\{% \ifx\ScaleType\scale@false \ifx\ScaleX\ScaleY \scalebox{\ScaleX}{\includegraphics{#2}}% \else \scalebox{\ScaleX}[\ScaleY]{\includegraphics{#2}}% \fi \else \ifx\ScaleType\scale@maxuniform \edef\MaxBoth{\MaxHeight\MaxWidth}% \ifx\MaxBoth\Exclams \includegraphics{#2}% \else \includegraphics[width=\MaxWidth,keepaspectratio=true, height=\MaxHeight]{#2}% \fi \else \ifx\ScaleType\scale@max \includegraphics[width=\MaxWidth,height=\MaxHeight, keepaspectratio=false]{#2}% \else \typeout{ERROR: invalid scale type of \ScaleType}% \fi \fi \fi } \def\insertPageNumber#1{#1\arabic{page}} \def\insertParagraphBreak#1{\@@par} % \def\horizontal{horizontal} \def\LineThickness{1pt} \def\A@center{center} \def\A@end{end} \def\A@start{start} \def\insertRule#1{\bgroup \@@par \SetupICs{#1}% \RuleNIC % \end{macrocode} % Rules are messy; we have to indent them by the amount of % |\StartIndent|, and also align them according to the value % of |\DisplayAlignment|. We render them with rule leaders, inside % an hbox, if a width is supplied. % \begin{macrocode} \@tempdima\linewidth \ifdim\EndIndent>\z@ \advance\@tempdima by-\EndIndent \fi \ifdim\StartIndent>\z@ \advance\@tempdima by-\StartIndent \moveright\StartIndent \fi \hbox to\@tempdima{% \ifx\DisplayAlignment\A@center\hfill\fi \ifx\DisplayAlignment\A@end\hfill\fi \ifx\Orientation\horizontal \ifx\Length\@empty\else \hbox to \Length\fi {\leaders\hrule height \LineThickness \hfill}% \else \hbox to \LineThickness {\leaders\hrule \ifx\Length\@empty\else height \Length \fi \relax \hfill}% \fi \ifx\DisplayAlignment\A@center\hfill\fi \ifx\DisplayAlignment\A@start\hfill\fi }% \@@par \endRuleNIC \endSetupICs \egroup } % \end{macrocode} % \subsection{Tables} % \begin{macrocode} \setlength\arraycolsep\z@ \setlength\tabcolsep\z@ \extrarowheight3\p@ \setlength\arrayrulewidth{.4\p@} \setlength\doublerulesep{2\p@} \def\arraybackslash{\let\\=\@arraycr} \newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} \newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}} \newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}} \def\insertTableAfterColumnBorder#1{} \def\insertTableAfterRowBorder#1{} \def\insertTableBeforeColumnBorder#1{} \def\insertTableBeforeRowBorder#1{} % \def\insertTableCellAfterColumnBorder#1{\edef\AfterCol{\BorderPresent}} \def\insertTableCellAfterRowBorder#1{\edef\AfterRow{\BorderPresent}} \def\insertTableCellBeforeColumnBorder#1{\edef\BeforeCol{\BorderPresent}} \def\insertTableCellBeforeRowBorder#1{\edef\BeforeRow{\BorderPresent}} \def\insertTableColumn#1{#1} % \end{macrocode} % \section{Non-atomic flow objects} % \subsection{Box flow object class} % \begin{macrocode} \def\BOX#1{% \SetupICs{#1}% \fboxrule\LineThickness \@tempdima\columnwidth \ifdim\EndIndent>\z@ \advance\@tempdima by-\EndIndent \fi \ifdim\StartIndent>\z@ \advance\@tempdima by-\StartIndent \hspace*{\StartIndent}% \fi \advance\@tempdima by-\StartIndent \setbox0\vbox\bgroup\def\StartIndent{\z@}\hsize\@tempdima\ignorespaces} \def\endBOX{% \ifhmode\unskip\fi \egroup \ifdim\ht0>\ht\strutbox \noindent\fbox{\box0}% \else \setbox0\vbox{\unvbox0\global\setbox1\lastbox}% \noindent\fbox{\kern-\parindent\unhbox1\unskip\unskip}% \fi} % \end{macrocode} % \subsection{Display group flow object class (clause 12.6.2)} % \begin{macrocode} \def\DisplayGroup#1{\ifTableMode\else\@DisplayGroup{#1}\fi} \def\@DisplayGroup#1{% {#1\global\edef\SavedSpan{\Span}}% \ifnum\SavedSpan>1 \ifnum\col@number>1 \end{multicols} \fi \fi \ifGroupMode\begingroup\fi \SetupICs{#1}% \DisplayGroupNIC \ifnum\Mathcount>0\relax\else\@@par\fi \FlowObjectSetup{1}% } \def\endDisplayGroup#1{\ifTableMode\else\@endDisplayGroup{#1}\fi} \def\@endDisplayGroup#1{% \ifnum\Mathcount>0\relax\else \@@par \fi \endDisplayGroupNIC \ifGroupMode\endgroup\fi \ifnum\SavedSpan>1 \ifnum\PageNColumns>1 \begin{multicols}{\PageNColumns} \fi \fi \gdef\SavedSpan{0}% } % \end{macrocode} % \subsection{Leader flow object class} % \begin{macrocode} \newsavebox{\leaderbox} \def\Leader#1{#1\begin{LRbox}{\leaderbox}} \def\endLeader{\end{LRbox}\leaders\box\leaderbox\hfill} % \end{macrocode} % \subsection{Line Field flow object class} % Field align can be \emph{start}, \emph{end}, or \emph{center}. % \begin{macrocode} \newsavebox\dssslbox \def\LRbox#1{% \edef\reserved@a{% \endgroup \setbox#1\hbox{% \begingroup\aftergroup}% \def\noexpand\@currenvir{\@currenvir}}% \reserved@a \@endpefalse \color@setgroup\ignorespaces } \def\LRboxW#1#2{% \edef\reserved@a{% \endgroup \setbox#1\hbox to #2{% \begingroup\aftergroup}% \def\noexpand\@currenvir{\@currenvir}}% \reserved@a \@endpefalse \color@setgroup\ignorespaces } \def\endLRbox{\color@endgroup} \let\endLRboxW\endLRbox \def\LineField#1{\bgroup \SetupICs{#1}% \LineFieldNIC \FlowObjectSetup{0}% \begin{LRbox}{\dssslbox}% } \def\endLineField{% \end{LRbox}% \ifdim\wd\dssslbox>\FieldWidth\def\FieldWidth{\wd\dssslbox}\fi \makebox[\FieldWidth][\csname Fld@\FieldAlign\endcsname]{% \ifdim\PositionPointShift=\z@ \usebox{\dssslbox}% \else \raisebox{\PositionPointShift}{\usebox{\dssslbox}}% \fi \EndSetFont}% \endLineFieldNIC \endSetupICs \egroup } % % \end{macrocode} % \subsection{Link flow object class (clause 12.6.28.3)} % \begin{macrocode} \newif\ifLabelElements \LabelElementstrue \newif\ifNestedLink \NestedLinkfalse \def\Link#1{% \begingroup \SetupICs{#1}% \ifx\Label\@empty\let\Label\Element\fi % \typeout{Made a Link at \the\inputlineno, to \Label}% \hyper@linkstart{link}{\Label}% \NestedLinktrue } \def\endLink{% \hyper@linkend \NestedLinkfalse \endSetupICs \endgroup } % \end{macrocode} % \subsection{Marginalia flow object class (clause 12.6.28.4)} % \begin{macrocode} \def\Marginalia#1{#1\FlowObjectSetup{0}} \def\endMarginalia{} % \end{macrocode} % \subsection{Paragraph flow object class (clause 12.6.6)} %\begin{longtable}{|P{.2\textwidth}|l|P{.25\textwidth}|l|l|} %\hline %\itshape %Characteristic& %\itshape Inh.&\itshape Values&\itshape Default&\itshape Dsssl-o\\ %\hline %\endhead %\hline %\endfoot %lines&I&wrap, asis, asis-wrap*, asis-truncate*, none&wrap&Partial\\ %\rowcolor{yellow} %asis-truncate-char&I&\#f, \emph{char object}& &Ignore\\ %asis-wrap-char&I&\#f, \emph{char object}& &Ignore\\ %\rowcolor{yellow} %asis-wrap-indent&I&\emph{length-spec}& &Ignore\\ %first-line-align&I&\#f, \emph{char object}& &Ignore\\ %\rowcolor{yellow} %alignment-point-offset&I&\#f, \emph{number between 0 and 100}& &Ignore\\ %ignore-record-end?&I&\#f, \#t&\#f&Standard\\ %\rowcolor{yellow} %expand-tabs?&I&\#f, \emph{integer greater than zero}&8&Standard\\ %line-spacing&I&\emph{length-spec}&12pt&Standard\\ %\rowcolor{yellow} %line-spacing-priority&I&force, \emph{integer}&0&Default\\ %min-pre-line-spacing&I&\#f, \emph{length-spec}&\#f&Default\\ %\rowcolor{yellow} %min-post-line-spacing&I&\#f, \emph{length-spec}&\#f&Default\\ %min-leading&I&\#f, \emph{length-spec}&\#f&Standard\\ %\rowcolor{yellow} %first-line-start-indent&I&\emph{length-spec}&0m&Standard\\ %last-line-end-indent&I&\emph{length-spec}&0m&Default\\ %\rowcolor{yellow} %hyphenation-char&I&\emph{character}& &Ignore\\ %hyphenation-method&I&\#f, \emph{public identifier}&\#f&Default\\ %\rowcolor{yellow} %hyphenation-ladder-count&I&\#f, \emph{integer greater than zero}&\#f&Default\\ %hyphenation-remain-char-count&I&\emph{positive integer}&2&Ignore\\ %\rowcolor{yellow} %hyphenation-push-char-count&I&\emph{positive integer}&2&Ignore\\ %hyphenation-keep&I&\#f, spread, page, column&\#f&Default\\ %\rowcolor{yellow} %hyphenation-exceptions&I&\emph{list of strings}&empty list&Default\\ %line-breaking-method&I&\#f, \emph{public identifier}&\#f&Default\\ %\rowcolor{yellow} %line-composition-method&I&\#f, \emph{public identifier}&\#f&Default\\ %implicit-bidi-method&I&\#f, \emph{public identifier}& &Default\\ %\rowcolor{yellow} %glyph-alignment-mode&I&base, center, top, bottom, font&font&Default\\ %font-family-name&I&\#f, \emph{string}&iso-serif&Standard\\ %\rowcolor{yellow} %font-weight&I&\#f, not-applicable*, ultra-light*, extra-light*, light, semi-light*, medium, semi-bold*, bold, extra-bold*, ultra-bold*&medium&Partial\\ %font-posture&I&\#f, not-applicable*, upright, oblique, back-slanted-oblique*, italic, back-slanted-italic*&upright&Partial\\ %\rowcolor{yellow} %font-structure&I&\#f, not-applicable, solid, outline&solid&Default\\ %font-proportionate-width&I&\#f, not-applicable*, ultra-condensed*, extra-condensed*, condensed, semi-condensed*, medium, semi-expanded*, expanded, extra-expanded*, ultra-expanded*&medium&Partial\\ %\rowcolor{yellow} %font-name&I&\#f, \emph{public identifier}& &Standard\\ %font-size&I&\emph{length}&10pt&Standard\\ %\rowcolor{yellow} %numbered-lines?&I&\#f, \#t&\#t&Ignore\\ %line-number&I&\#f, \emph{unlabeled sosofo}& &Ignore\\ %\rowcolor{yellow} %line-number-side&I&start, end, spread-inside, spread-outside, page-inside, page-outside& &Ignore\\ %line-number-sep&I&\emph{length-spec}& &Ignore\\ %\rowcolor{yellow} %quadding&I&start, end, spread-inside*, spread-outside*, page-inside*, page-outside*, center, justify*&start&Partial\\ %last-line-quadding&I&relative, start, end, spread-inside, spread-outside, page-inside, page-outside, center, justify&relative&Default\\ %\rowcolor{yellow} %last-line-justify-limit&I&\emph{length-spec}&0&Ignore\\ %justify-glyph-space-max-add&I&\emph{length-spec}&0m&Ignore\\ %\rowcolor{yellow} %justify-glyph-space-max-remove&I&\emph{length-spec}&0m&Ignore\\ %hanging-punct?&I&\#f, \#t&\#f&Default\\ %\rowcolor{yellow} %widow-count&I&\emph{positive integer}&2&Default\\ %orphan-count&I&\emph{positive integer}&2&Default\\ %\rowcolor{yellow} %language&I&\#f, \emph{ISO 639 language code}&\#f&Standard\\ %country&I&\#f, \emph{ISO 3166 country code}&\#f&Standard\\ %\rowcolor{yellow} %position-preference&N&\#f, top, bottom&\#f&Ignore\\ %writing-mode&I&left-to-right, right-to-left, top-to-bottom&left-to-right&Default\\ %\rowcolor{yellow} %start-indent&I&\emph{length-spec}&0m&Standard\\ %end-indent&I&\emph{length-spec}&0m&Standard\\ %\rowcolor{yellow} %span&I&\emph{integer greater than zero}&1&Default\\ %span-weak?&I&\#f, \#t&\#f&Default\\ %\rowcolor{yellow} %space-before&N&\emph{display space}&no space before &Standard\\ %space-after&N&\emph{display space}&no space after &Standard\\ %\rowcolor{yellow} %keep-with-previous?&N&\#f, \#t&\#f&Standard\\ %keep-with-next?&N&\#f, \#t&\#f&Standard\\ %\rowcolor{yellow} %break-before&N&\#f, page, page-region*, column*, column-set*&\#f&Partial\\ %break-after&N&\#f, page, page-region*, column*, column-set*&\#f&Partial\\ %\rowcolor{yellow} %keep&N&\#f, page, column-set*, column*, \#t*&\#f&Partial\\ %may-violate-keep-before?&N&\#f, \#t&\#f&Default\\ %\rowcolor{yellow} %may-violate-keep-after?&N&\#f, \#t&\#f&Default\\ %\end{longtable} % \begin{macrocode} \newif\ifTableMode \newif\ifGroupMode \newcount\@TablePars \newcount\@ParNest \TableModefalse \GroupModetrue \def\Par#1{% % \end{macrocode} % We need to end the current paragraph, with its current line spacing, % hyphenation, what have you, before anything is done. % This could have horrible repercussions, but something like % it is necessary. % % If this is the second or subsequent paragraph inside a table cell, % start with a line break. But not if its a \emph{nested} paragraph. % \begin{macrocode} \ifTableMode \global\advance\@ParNest by 1 \ifnum\@ParNest=1 \ifnum\@TablePars>0% \@arraycr \fi \else \ifnum\@ParNest>1 \ifnum\@TablePars>0\par\paraSetup\fi \fi \fi \else \@@par \fi \ifGroupMode\begingroup\fi \SetupICs{#1}% \ifTableMode \csname startQ@\Quadding\endcsname \else \ParagraphNIC \fi \FlowObjectSetup{1}% \ifTableMode \hskip \CellBeforeColumnMargin \fi } \def\endPar#1{% \ifTableMode \ifnum\@ParNest>1 \ifnum\@TablePars>0\@@par\fi \fi \hskip \CellAfterColumnMargin \csname endQ@\Quadding\endcsname\null \global\advance\@TablePars by 1 \global\advance\@ParNest by -1 \else \@@par \endParagraphNIC \fi \endSetupICs \ifGroupMode \endgroup \fi } % \end{macrocode} % \subsection{Score flow object class (clause 12.6.17)} % \begin{macrocode} \def\Score#1{#1} \def\endScore{} % \end{macrocode} % \subsection{Scroll flow object class (clause 12.6.28.1)} % \begin{macrocode} \def\Scroll{\SpS} \def\endScroll{\endSpS} % \end{macrocode} % \subsection{Sequence flow object class (clause 12.6.1)} % \begin{macrocode} \newdimen\CurPosShift\CurPosShift\z@ \newif\if@Raised \def\Seq#1{% \ifGroupMode\begingroup\fi \SetupICs{#1}% \ifx \@nodocument\relax \else \JadeSetPage \JadeBeginDocument \GroupModetrue \ifnum\PageNColumns>1 \columnsep\PageColumnSep \begin{multicols}{\PageNColumns} \fi \fi \FlowObjectSetup{0}% \@Raisedfalse \ifdim\PositionPointShift=\CurPosShift \else \@tempdima\PositionPointShift \ifdim\PositionPointShift>\CurPosShift \advance\@tempdima by -\CurPosShift \else \advance\@tempdima by \CurPosShift \fi \CurPosShift\PositionPointShift \@Raisedtrue \fi \if@Raised\leavevmode\raise\@tempdima\hbox\bgroup\fi } \def\endSeq{% \if@Raised\egroup\fi \EndSetFont \endSetupICs \ifGroupMode\endgroup\fi } % \end{macrocode} % \subsection{Side Line flow object class} % \begin{macrocode} \def\SideLine#1{#1} \def\endSideLine{} % \end{macrocode} % \subsection{Simple Page Sequence flow object class (clause 12.6.3)} % Look out for the canonical 1in margins in TeX systems! % \begin{macrocode} \def\JadeSetPage{% \footskip\FooterMargin \oddsidemargin\LeftMargin \evensidemargin\LeftMargin \topmargin\TopMargin \headsep\HeaderMargin \paperwidth\PageWidth \paperheight\PageHeight \textheight\paperheight \textwidth\paperwidth \advance\textheight by -\TopMargin \advance\textheight by -\HeaderMargin \advance\textheight by -\BottomMargin \advance\textheight by -\FooterMargin \advance\textwidth by -\LeftMargin \advance\textwidth by -\RightMargin \ifx\pdfimage\@undefined \else \global\pdfpagewidth\paperwidth \global\pdfpageheight\paperheight \fi \@colht\textheight \@colroom\textheight \vsize\textheight \headwidth\textwidth \linewidth\textwidth \columnwidth\textwidth \hsize\columnwidth \linewidth\hsize \def\headheight{12pt}% \let\pageFontSize\fSize \let\pageLineSpacing\LineSpacing \let\pageFontPosture\fPosture \let\pageFontProportionateWidth\fProportionateWidth \let\pageFontWeight\fWeight \let\pagefFamName\fFamName \arraycolsep\GridColumnSep } % initialize it \JadeSetPage \def\JadeBeginDocument{% % \end{macrocode} % We borrow most of the code of |\begin{document}|; we do not % want it all, as it interposes an unwanted group. % \begin{macrocode} \@clubpenalty\clubpenalty \begingroup\@floatplacement\@dblfloatplacement \makeatletter\let\@writefile\@gobbletwo \global \let \@multiplelabels \relax \@input{\jobname.aux}% \endgroup \immediate\openout\@mainaux\jobname.aux \immediate\write\@mainaux{\relax}% \process@table \let\glb@currsize\@empty %% Force math initialisation. \normalsize \everypar{}% \@noskipsecfalse \let \@refundefined \relax \let\AtBeginDocument\@firstofone \@begindocumenthook \ifdim\topskip<1sp\global\topskip 1sp\relax\fi \global\@maxdepth\maxdepth \global\let\@begindocumenthook\@undefined \global\let\@filelist\relax \global\let\@addtofilelist\@gobble \gdef\do##1{\global\let ##1\@notprerr}% \@preamblecmds \global\let \@nodocument \relax \global\let\do\noexpand \ignorespaces } \def\SpS#1{% \DoFOBSettrue \SetupICs{#1}% % \end{macrocode} % The basic page setup needs to be delayed to this point, otherwise % the first page will be `frozen' in the format file. So check % here whether we are at the start of the document, and if so trigger % \LaTeX's |\begin{document}|. This is a pain, delaying the start of % the document. It means that documents which don't have a simple-page- % sequence at the start will fail. % \begin{macrocode} \JadeSetPage \ifx \@nodocument\relax \else \JadeBeginDocument \fi % \end{macrocode} % Grouping is turned on now we are inside a simple page sequence. % but is itself inside a group of the page sequence. % The problem is that if we start a Sequence, then start a % PageSequence, the |\begin{document}| occurs inside a group, % and so gets in a mess. If we turn off grouping % outside simple page sequences, any changes become global! % Does it make sense to have material not in a page % sequence, in TeX? Sadly, yes. The % document will still \emph{start} in non-group mode. % \begin{macrocode} \DisplayNIC \GroupModetrue \ifnum\PageNColumns>1 \columnsep\PageColumnSep \begin{multicols}{\PageNColumns} \fi } \def\endSpS{% \DoFOBSetfalse \ifnum\col@number>1 \end{multicols} \fi \newpage \endDisplayNIC \let\FancyHook\@empty \let\FancyFirstHook\@empty \fancyhead{} } % \end{macrocode} % \subsection{Headers and footers} % \begin{macrocode} \def\SpSCenterFooter#1{\Setfoot[C]{#1}{CenterFooter}} \def\SpSCenterHeader#1{\Sethead[C]{#1}{CenterHeader}} \def\SpSLeftFooter#1{\Setfoot[L]{#1}{LeftFooter}} \def\SpSLeftHeader#1{\Sethead[L]{#1}{LeftHeader}} \def\SpSRightFooter#1{\Setfoot[R]{#1}{RightFooter}} \def\SpSRightHeader#1{\Sethead[R]{#1}{RightHeader}} % \def\SpSOtherBackCenterFooter#1{\Setfoot[CE]{#1}{OtherBackCenterFooter}} \def\SpSOtherBackLeftFooter#1{\Setfoot[LE]{#1}{OtherBackLeftFooter}} \def\SpSOtherBackRightFooter#1{\Setfoot[RE]{#1}{OtherBackRightFooter}} \def\SpSOtherBackRightHeader#1{\Sethead[RE]{#1}{OtherBackRightHeader}} \def\SpSOtherBackCenterHeader#1{\Sethead[CE]{#1}{OtherBackCenterHeader}} \def\SpSOtherBackLeftHeader#1{\Sethead[LE]{#1}{OtherBackLeftHeader}} % \def\SpSOtherFrontCenterFooter#1{\Setfoot[CO]{#1}{OtherFrontCenterFooter}} \def\SpSOtherFrontLeftFooter#1{\Setfoot[LO]{#1}{OtherFrontLeftFooter}} \def\SpSOtherFrontRightFooter#1{\Setfoot[RO]{#1}{OtherFrontRightFooter}} \def\SpSOtherFrontRightHeader#1{\Sethead[RO]{#1}{OtherFrontRightHeader}} \def\SpSOtherFrontCenterHeader#1{\Sethead[CO]{#1}{OtherFrontCenterHeader}} \def\SpSOtherFrontLeftHeader#1{\Sethead[LO]{#1}{OtherFrontLeftHeader}} % \def\SpSFirstBackCenterFooter#1{\SetFirstfoot[CE]{#1}{FirstBackCenterFooter}} \def\SpSFirstBackLeftFooter#1{\SetFirstfoot[LE]{#1}{FirstBackLeftFooter}} \def\SpSFirstBackRightFooter#1{\SetFirstfoot[RE]{#1}{FirstBackRightFooter}} \def\SpSFirstBackCenterHeader#1{\SetFirsthead[CE]{#1}{FirstBackCenterHeader}} \def\SpSFirstBackLeftHeader#1{\SetFirsthead[LE]{#1}{FirstBackLeftHeader}} \def\SpSFirstBackRightHeader#1{\SetFirsthead[RE]{#1}{FirstBackRightHeader}} \def\SpSFirstFrontCenterFooter#1{\SetFirstfoot[CO]{#1}{FirstFrontCenterFooter}} \def\SpSFirstFrontLeftFooter#1{\SetFirstfoot[LO]{#1}{FirstFrontLeftFooter}} \def\SpSFirstFrontRightFooter#1{\SetFirstfoot[RO]{#1}{FirstFrontRightFooter}} \def\SpSFirstFrontCenterHeader#1{\SetFirsthead[CO]{#1}{FirstFrontCenterHeader}} \def\SpSFirstFrontLeftHeader#1{\SetFirsthead[LO]{#1}{FirstFrontLeftHeader}} \def\SpSFirstFrontRightHeader#1{% \SetFirsthead[RO]{#1}{FirstFrontRightHeader}% % \end{macrocode} % This one comes last, so now set up page styles. YUCK! % \begin{macrocode} \pagestyle{jadeother}% \thispagestyle{jadefirst}% } \fancypagestyle{jadeother}{\fancyhf{}\FancyHook}% \fancypagestyle{jadefirst}{\fancyhf{}\FancyFirstHook}% % \def\Sethead[#1]#2#3{% \ifx\\#2\\\relax\else \g@addto@macro\FancyHook{\fancyhead[#1]{\setnormal#2}}% \fi } \def\Setfoot[#1]#2#3{% \ifx\\#2\\\relax\else \g@addto@macro\FancyHook{\fancyfoot[#1]{\setnormal#2}}% \fi } \def\SetFirsthead[#1]#2#3{% \ifx\\#2\\\relax\else \g@addto@macro\FancyFirstHook{\fancyhead[#1]{\setnormal#2}}% \fi } \def\SetFirstfoot[#1]#2#3{% \ifx\\#2\\\relax\else \g@addto@macro\FancyFirstHook{\fancyfoot[#1]{\setnormal#2}}% \fi } \def\FancyHook{} \def\FancyFirstHook{} \pagestyle{jadeother} % \end{macrocode} % \subsection{Table flow object class} % \begin{macrocode} \def\Table#1{#1} \def\endTable{} \def\@full{full} \newenvironment{TeXTable}[3]{% width, ncolumns, template \ifx\TableWidth\@full\def\TableWidth{\hsize}\fi \TableNIC \FlowObjectSetup{0}% \TableModetrue % \GroupModefalse \setlength\LTleft\StartIndent \setlength\LTright\fill \ifnum\PageNColumns>1 \tabular{#3}% \else \longtable{#3}% \fi }{% \ifnum\PageNColumns>1 \endtabular \else \endlongtable \fi \TableModefalse \GroupModetrue \endTableNIC } % \end{macrocode} % \subsection{Table Cell flow object class} % \begin{macrocode} \def\Hline{\hline} \def\Cline{\cline} \newif\inCell \newdimen\FinalCellAfterRowMargin \def\MultiPar{0} \def\TableCell#1{% #1\ifdim\CellAfterRowMargin>\FinalCellAfterRowMargin \global\FinalCellAfterRowMargin\CellAfterRowMargin \fi \TableCellNIC \FlowObjectSetup{0}% \global\@TablePars0 \let\@action\relax \ifnum\MultiPar>0\def\@action{\begin{tabular}[t]{@{}l@{}}}\fi \@action } \def\endTableCell#1{% \let\@action\relax \ifnum\MultiPar>0\def\@action{\end{tabular}}\fi \@action \endTableCellNIC } % \end{macrocode} % \subsection{Table Part flow object class} % \begin{macrocode} \def\TablePart#1{#1\FlowObjectSetup{0}} \def\TablePartHeader#1{} \def\TablePartFooter#1{} \def\endTablePartFooter#1{} \def\endTablePartHeader#1{} \def\endTablePart{} % \end{macrocode} % \subsection{Table Row flow object class} % \begin{macrocode} \def\TableRow#1{#1} \def\endTableRow#1{\\[\FinalCellAfterRowMargin]} % \end{macrocode} % % \subsection{Character mapping} % \begin{macrocode} %\def\insertCharacter#1{#1% % \expandafter\ifx\csname Ch@\Ch\endcsname\relax % <\Ch>\typeout{Warning: Unknown character \Ch, at \the\inputlineno}% % \else\csname Ch@\Ch\endcsname\fi %} \def\Character#1{% \SetupICs{}% \ifnum#1<255\char#1\else \expandafter\ifx\csname Ch@#1\endcsname\relax <#1>\typeout{Warning: Unknown character #1, at \the\inputlineno}% \else\csname Ch@#1\endcsname\fi \fi \ifdim\EscapementSpaceAfterNom=\z@ \else \@tempdima\EscapementSpaceAfterNom \advance\@tempdima by -\EscapementSpaceAfterMin \@tempdimb\EscapementSpaceAfterNom \advance\@tempdimb by -\EscapementSpaceAfterMax \hskip\EscapementSpaceAfterNom plus \@tempdimb minus \@tempdima% \fi \endSetupICs{}% } % \end{macrocode} %\subsection{DisplayNIC} % \begin{macrocode} \def\@force{force} \newdimen\LastDisplaySpace \newcount\DisplayStack \newcount\LastDisplayStack \let\@sBeforeMin\sbMin \let\@sBeforeMax\sbMax \let\@sBeforeNom\sbNom \let\@sBeforePriority\sbPriority \DisplayStack0 \LastDisplayStack-1 \def\DisplayNIC{% \advance\DisplayStack by 1 %\message{DEBUG: \the\inputlineno: contrast \the\lastskip, \the\LastDisplaySpace}% \QueryPageBreak \ifdim\LastDisplaySpace>\lastskip %\message{DEBUG: \the\inputlineno: UP \the\LastDisplaySpace}% \vskip-\LastDisplaySpace \global\LastDisplaySpace\z@ \else %\message{DEBUG: \the\inputlineno: UP \the\lastskip}% \vskip-\lastskip \fi %\message{DEBUG: \the\inputlineno: DisplayNic depth \the\DisplayStack, \the\LastDisplayStack}% % \end{macrocode} % What we are trying to identify is a display which starts % inside another display. % \begin{macrocode} \ifnum\DisplayStack>\LastDisplayStack \def\sbPriority{force}% \def\LastSpaceBeforePriority{0}% % \LastDisplaySpace\z@ \fi \let\@sAfterMin\saMin \let\@sAfterMax\saMax \let\@sAfterNom\saNom \let\@sAfterPriority\saPriority % \begingroup \ifx\BreakBefore\relax\else \csname Break@\BreakBefore\endcsname \fi \CurrentSpaceMin=\sbMin \CurrentSpaceNom=\sbNom \CurrentSpaceMax=\sbMax % \edef\CurrentSpacePriority{\sbPriority}% % \end{macrocode} % See if either display space priority is set to `force'; % if so, use that set of values; % if both priorities are `force', add values together % \begin{macrocode} \ifx\sbPriority\@force \ifx\LastSpacePriority\@force \advance\CurrentSpaceMin by \LastSpaceMin \advance\CurrentSpaceNom by \LastSpaceNom \advance\CurrentSpaceMin by \LastSpaceMax \fi \else \ifx\LastSpacePriority\@force \CurrentSpaceMin=\LastSpaceMin \CurrentSpaceNom=\LastSpaceNom \CurrentSpaceMax=\LastSpaceMax % \end{macrocode} % See if the priority of either set is higher, if so use that % \begin{macrocode} \else \ifnum\CurrentSpacePriority>\LastSpacePriority \relax \else \ifnum\LastSpacePriority>\CurrentSpacePriority \CurrentSpaceMin=\LastSpaceMin \CurrentSpaceNom=\LastSpaceNom \CurrentSpaceMax=\LastSpaceMax \else % \end{macrocode} % So the priorities are equal; take the one with the larger Nom % \begin{macrocode} \ifdim\CurrentSpaceNom>\LastSpaceNom \relax \else \ifdim\LastSpaceNom>\CurrentSpaceNom \CurrentSpaceMin=\LastSpaceMin \CurrentSpaceNom=\LastSpaceNom \CurrentSpaceMax=\LastSpaceMax \else % \end{macrocode} % Dang, the Noms are equal. Take the larger minimum, and smaller % maximum % \begin{macrocode} \ifdim\LastSpaceMax<\CurrentSpaceMax \CurrentSpaceMax\LastSpaceMax \fi \ifdim\LastSpaceMin>\CurrentSpaceMin \CurrentSpaceMin\LastSpaceMin \fi \fi \fi \fi \fi \fi \fi \@tempdima\CurrentSpaceNom \advance\@tempdima by -\CurrentSpaceMin \@tempdimb\CurrentSpaceNom \advance\@tempdimb by -\CurrentSpaceMax %\message{DEBUG: \the\inputlineno: DOWN (start) \the\CurrentSpaceNom}% \QueryPageBreak \vskip \CurrentSpaceNom plus \@tempdimb minus \@tempdima \paraSetup \let\Keep\relax \let\BreakBefore\relax \let\BreakAfter\relax \let\KeepWithPrevious\relax \let\MayViolateKeepBefore\relax \let\MayViolateKeepAfter\relax \def\sbMin{\z@}% \def\sbMax{\z@}% \def\sbNom{\z@}% \def\sbPriority{0}% \def\saMin{\z@}% \def\saMax{\z@}% \def\saNom{\z@}% \def\saPriority{0}% } \def\paraSetup{% \rightskip\EndIndent \leftskip\StartIndent \csname Q@\Quadding\endcsname \csname L@\Language\endcsname \ifx\FirstLineStartIndent\@empty\relax \else\parindent\FirstLineStartIndent \fi \ifx\InputWhitespaceTreatment\@empty\relax \else\csname White@\InputWhitespaceTreatment\endcsname \fi \ifx\Lines\@empty\relax \else\csname Lines@\Lines\endcsname \fi } \newif\ifBreakMe \BreakMefalse \def\QueryPageBreak{% \ifBreakMe \ifvmode \penalty \@M \else \@bsphack \vadjust{\penalty \@M}% \@esphack \fi \else \penalty \z@ \fi } \def\endDisplayNIC{% % \end{macrocode} % If the last thing on the current list was a skip, throw it away. % \begin{macrocode} % \message{DEBUG: \the\inputlineno: UP (end) \the\lastskip}% \ifnum\KeepWithNext=1 \penalty\@M\global\BreakMetrue\else\global\BreakMefalse \fi \vskip-\lastskip \endgroup \global\LastSpaceNom=\@sAfterNom \global\LastSpaceMax=\@sAfterMax \global\LastSpaceMin=\@sAfterMin \global\edef\LastSpacePriority{\@sAfterPriority}% \@tempdima\@sAfterNom \advance\@tempdima by -\@sAfterMin \@tempdimb\@sAfterNom \advance\@tempdimb by -\@sAfterMax %\message{DEBUG: \the\inputlineno: DOWN (end) \@sAfterNom}% \vskip \@sAfterNom plus \@tempdimb minus \@tempdima \global\LastDisplaySpace=\lastskip \global\LastDisplayStack=\DisplayStack \advance\DisplayStack by -1 } % \end{macrocode} %\section{Setup of non-inherited characteristics} %\subsection{Inline} % \begin{macrocode} \def\InlineNIC{% \begingroup } \def\endInlineNIC{% \let\BreakBeforePriority\relax \let\BreakAfterPriority\relax \endgroup } % \end{macrocode} %\subsection{Display} % \begin{macrocode} \def\DisplayGroupNIC{% \DisplayNIC } \def\endDisplayGroupNIC{% \endDisplayNIC } % \end{macrocode} %\subsection{Graphics, boxes, leaders} % \begin{macrocode} \def\ExternalGraphicNIC{% \InlineNIC } \def\endExternalGraphicNIC{% \endInlineNIC } \def\BoxNIC{% \DisplayNIC \InlineNIC } \def\endBoxNIC{% \endInlineNIC \endDisplayNIC } \def\RuleNIC{% \DisplayNIC \InlineNIC } \def\endRuleNIC{% \endInlineNIC \endDisplayNIC } \def\LeaderNIC{% \InlineNIC } \def\LeaderNIC{% \InlineNIC } % \end{macrocode} %\subsection{Tables} % \begin{macrocode} \def\TableNIC{% \DisplayNIC } \def\endTableNIC{% \endDisplayNIC } \def\TableColumnNIC{} \def\endTableColumnNIC{} \def\TableCellNIC{} \def\endTableCellNIC{} \def\GridNIC{} \def\endGridNIC{} \def\GridCellNIC{} \def\endGridCellNIC{} \let\ParagraphNIC\DisplayNIC \let\LineFieldNIC\InlineNIC \let\endParagraphNIC\endDisplayNIC \let\endLineFieldNIC\endInlineNIC % \end{macrocode} %\section{Setup of inherited characteristics} % A problem arises here is `whitespacetreatment' is set to % `preserve', as this makes spaces active. If then a font name % like `Times Roman' is processed, the space in the middle % is processed! We replace spaces in font family names with `-' % in TeXFOTBuilder.cxx % \begin{macrocode} \newif\ifNeedsSelect \chardef\nonactive=10 \def\SetupICs#1{#1% \let\current@f@series\f@series \let\current@f@shape\f@shape \let\current@f@family\f@family \let\current@f@size\f@size \edef\LaTeXshape{\csname Width@\fProportionateWidth\endcsname \csname Weight@\fWeight\endcsname}% \ifx\LaTeXshape\@empty\def\LaTeXshape{m}\fi \edef\f@series{\LaTeXshape}% \edef\f@shape{\csname Posture@\fPosture\endcsname}% \IfFileExists{t1\fFamName.fd} {\def\f@family{\fFamName}} {\edef\f@family{% \expandafter\ifx\csname Family@\fFamName\endcsname\relax \csname Family@\DefaultfFamName\endcsname \else \csname Family@\fFamName\endcsname \fi}}% \set@fontsize\baselinestretch{\fSize}{\LineSpacing}% %\NeedsSelecttrue %\ifx\f@size\current@f@size\relax\NeedsSelectfalse\fi %\ifx\f@family\current@f@family\relax\NeedsSelectfalse\fi %\ifx\f@shape\current@f@shape\relax\NeedsSelectfalse\fi %\ifx\f@series\current@f@series\relax\NeedsSelectfalse\fi %\ifNeedsSelect \selectfont %\fi \ifx\ColorRed\@empty\relax\else \RGBColor{\ColorRed}{\ColorGreen}{\ColorBlue}% \fi } \def\endSetupICs{} % \end{macrocode} % |\FlowObjectSetup| should be called at the beginning of every object % that can be meaningfully labelled. It is this that creates an anchor, % not the |\Node|, to avoid duplicates and wastage. % % Because labelling writes to an external file, or does a |\special|, % it adds a whatsit to the main vertical list. This wrecks the % |\vskip-\lastskip| which every paragraph or display does. Bad news! % Labelling when we are in a Link element is not a good thing. % It messes up the references. % \begin{macrocode} \def\@madelink{ } \newif\ifDoFOBSet \DoFOBSettrue \def\FlowObjectSetup#1{% \ifDoFOBSet \ifLabelElements \ifx\Label\@empty\let\Label\Element\fi \fi \ifx\Label\@empty\else \expandafter\ifx\csname x@\Label\endcsname\@madelink \else \bgroup % \typeout{Node <\Label> defined at line \the\inputlineno}% \ifNestedLink \else \hyper@anchorstart{\Label}\hyper@anchorend \PageLabel{\Label}% \expandafter\gdef\csname x@\Label\endcsname{ }% \fi \egroup \let\Label\@empty \let\Element\@empty \fi \fi \fi } % \end{macrocode} % \section{Non-standard flow objects} % \begin{macrocode} \def\fps@figure{htbp} % prefer figures to be placed here \def\ftype@figure{1} \def\PageFloat#1{\SetupICs{#1}% \ifnum\Span>0 \def\Span{0}% \typeout{JadeTeX WARNING: specifying column spans for floats not supported}% \fi \FlowObjectSetup{0}% \@dblfloat{figure}[\placement]% } \def\endPageFloat{\end@dblfloat} \def\Footnotesize{\@setfontsize\small\@ixpt{11}} \long\def\PageFootnote#1#2{#1\insert\footins{% \reset@font\Footnotesize \interlinepenalty\interfootnotelinepenalty \splittopskip\footnotesep \splitmaxdepth \dp\strutbox \floatingpenalty \@MM \hsize\columnwidth \@parboxrestore \color@begingroup \@makefntext{% \rule\z@\footnotesep\ignorespaces#2\@finalstrut\strutbox} \color@endgroup}} \def\@makefntext#1{% \parindent 1em% \noindent #1} % \end{macrocode} % \section{Color} % Only RGB color working at present. Sorry. % \begin{macrocode} \def\RGBColor#1#2#3{% \c@lor@RGB@rgb{#1}\@tempa \c@lor@RGB@rgb{#2}\@tempb \c@lor@RGB@rgb{#3}\@tempc % \typeout{Set Color \@tempa, \@tempb, \@tempc}% \color[rgb]{\@tempa, \@tempb, \@tempc}% } \def\c@lor@RGB@rgb#1#2{% \dimen@#1\p@ \divide\dimen@\@cclv \edef#2{\strip@pt\dimen@}} \def\EndSetFont{% \ifx\csname\fPosture Over\endcsname\relax \relax\else\csname\fPosture Over\endcsname\fi } % \end{macrocode} % \section{Expansion of DSSSL names} % \subsection{Fonts} % \begin{macrocode} % \DeclareFontFamily{T1}{pzd}{} \DeclareFontShape{T1}{pzd}{m}{n}{<->pzdr}{} % \def\DefaultfFamName{unknown} \def\Family@unknown{} \def\Family@Arial{phv} \def\Family@Helvetica{phv} \def\Family@Palatino{ppl} \def\Family@Bookman{pbk} \def\Family@Courier{pcr} \def\Family@Symbol{psy} \def\Family@Wingdings{pzd} \def\Family@WingDings{pzd} \def\Family@LucidaSans{hls} \def\Family@LucidaBright{hlc} \def\Family@Savoy{usb} \def\Family@ACaslon{pca} \def\Family@Caslon{uca} \def\Family@Formata{pfa} \def\Family@FranklinGothic{pfg} \def\Family@OCRAbyBT{boa} \def\Family@AGaramond{pad} \expandafter\def\csname Family@Avant-Garde\endcsname{pag} \expandafter\def\csname Family@Courier New\endcsname{pcr} \expandafter\def\csname Family@New-Century-Schoolbook\endcsname{pnc} \expandafter\def\csname Family@Times-Roman\endcsname{ptm} \expandafter\def\csname Family@Trade-Gothic\endcsname{ptg} \expandafter\def\csname Family@Times-New-Roman\endcsname{ptm} \expandafter\def\csname Family@Times-NR-MT\endcsname{mnt} \expandafter\def\csname Family@Courier-New\endcsname{pcr} \expandafter\def\csname Family@Zapf-Dingbats\endcsname{pzd} \expandafter\def\csname Family@Gill-Sans\endcsname{pgs} \expandafter\def\csname Family@iso-serif\endcsname{ptm} \expandafter\def\csname Family@iso-sanserif\endcsname{phv} \expandafter\def\csname Family@iso-monocase\endcsname{pcr} \expandafter\def\csname Family@LetterGothic12PitchBT\endcsname{blg} \expandafter\def\csname Family@Monospace821\endcsname{bhv} \expandafter\def\csname Family@OCRB10PitchBT\endcsname{bob} \expandafter\def\csname Family@OCR-A\endcsname{boa} \expandafter\def\csname Family@OCR-B-10PitchBT\endcsname{bob} % \end{macrocode} % Matthias Clasen asked for the special code to be able % to access Computer Modern caps and small caps as a font family. % \begin{macrocode} \expandafter\def\csname Family@Computer-Modern-Typewriter\endcsname{cmtt} \expandafter\def\csname Family@Computer-Modern-Sans\endcsname{cmss} \expandafter\def\csname Family@Computer-Modern\endcsname{cmr} \providecommand{\EC@family}[5]{% \DeclareFontShape{#1}{#2}{#3}{#4}% {<5><6><7><8><9><10><10.95><12><14.4>% <17.28><20.74><24.88>genb*#5}{}} \DeclareFontFamily{T1}{cmcsc}{} \EC@family{T1}{cmcsc}{m}{n}{eccc} \EC@family{T1}{cmcsc}{bx}{n}{ecxc} \EC@family{T1}{cmcsc}{m}{sl}{ecsc} \EC@family{T1}{cmcsc}{bx}{sl}{ecoc} \expandafter\def\csname Family@Computer-Modern-Caps-And-Small-Caps\endcsname{cmcsc} \def\Family@cmr{cmr} \def\Family@cmss{cmss} \def\Family@cmtt{cmtt} \def\Family@cmcsc{cmcsc} \def\Family@ectt{ectt} % \def\Posture@upright{n} \def\Posture@normal{n} \def\Posture@math{it} \def\Posture@oblique{sl} \def\Posture@backslantedoblique{ui} \def\Posture@italic{it} \def\Posture@backslanteditalic{ui} % \def\Weight@ultralight{ul} \def\Weight@extralight{el} \def\Weight@light{l} \def\Weight@semilight{sl} \def\Weight@medium{} \def\Weight@semibold{sb} \def\Weight@bold{b} \def\Weight@extrabold{eb} \def\Weight@ultrabold{ub} \def\Weight@false{} % \def\Width@ultracondensed{uc} \def\Width@extracondensed{ec} \def\Width@condensed{c} \def\Width@semicondensed{sc} \def\Width@medium{} \def\Width@semiexpanded{sx} \def\Width@expanded{x} \def\Width@extraexpanded{ex} \def\Width@ultraexpanded{ux} % % \end{macrocode} % \subsection{Languages} % This needs the JadeTeX format to have these languages selected, of course. % That is up to the users. % \begin{macrocode} \def\L@{} \def\L@US{\selectlanguage{english}} \def\L@FR{\selectlanguage{francais}} \def\L@DE{\selectlanguage{german}} \def\L@CA{\selectlanguage{catalan}} \def\L@HR{\selectlanguage{croatian}} \def\L@CZ{\selectlanguage{czech}} \def\L@DK{\selectlanguage{danish}} \def\L@NE{\selectlanguage{dutch}} \def\L@ET{\selectlanguage{estonian}} \def\L@FI{\selectlanguage{finnish}} \def\L@EL{\selectlanguage{greek}} \def\L@HU{\selectlanguage{hungarian}} \def\L@IT{\selectlanguage{italian}} \def\L@NO{\selectlanguage{norwegian}} \def\L@PL{\selectlanguage{polish}} \def\L@PT{\selectlanguage{portuges}} \def\L@RO{\selectlanguage{romanian}} \def\L@SI{\selectlanguage{slovene}} \def\L@SK{\selectlanguage{slovak}} \def\L@SH{\selectlanguage{serbocroat}} \def\L@ES{\selectlanguage{spanish}} \def\L@GB{\selectlanguage{ukenglish}} \def\L@CY{\selectlanguage{welsh}} % % \end{macrocode} % \subsection{Paragraphs} % \begin{macrocode} \def\italicOver{\ifhmode\@@italiccorr\fi} % \def\startQ@justify{} \def\endQ@justify{} % \def\startQ@center{\hskip0pt plus 1filll} \def\endQ@center{\hskip0pt plus 1filll} % \def\startQ@pageoutside{\hfill} \def\endQ@pageoutside{} % \def\startQ@pageinside{} \def\endQ@pageinside{\hfill} % \def\startQ@start{} \def\endQ@start{\hfill} % \def\startQ@end{\hfill} \def\endQ@end{} \def\Q@justify{% \let\\\@normalcr \parfillskip\@flushglue \parindent\z@ } \def\Q@start{% raggedright, I hope \let\\\@centercr \rightskip\EndIndent plus 1fil \parfillskip\z@skip \parindent\z@ } \def\Q@end{% raggedleft, I hope \let\\\@centercr \leftskip\StartIndent plus 1fil% \parfillskip\z@skip } \def\Q@center{% \let\\\@centercr \rightskip\EndIndent plus 1fil% \leftskip\StartIndent plus 1fil% \parfillskip\z@skip\parindent\z@ } \def\Q@pageoutside{% \let\\\@centercr \leftskip\StartIndent plus 1fil% \parfillskip\z@skip } \def\Q@pageinside{% \let\\\@centercr \rightskip\EndIndent plus 1fil% \parfillskip\z@skip } \def\JObeylines{% \@tempswafalse \def\par{% \if@tempswa \leavevmode \null \@@par\penalty\interlinepenalty \else \@tempswatrue \ifhmode\@@par\penalty\interlinepenalty\fi \fi}% \obeylines\everypar \expandafter{\the\everypar \unpenalty}% } \newif\if@obeylines \@obeylinesfalse \def\Lines@asis{\JObeylines\@obeylinestrue} \def\Lines@wrap{\@obeylinesfalse} \expandafter\def\csname Lines@asis-truncate\endcsname{% \JObeylines\@obeylinestrue} \expandafter\def\csname Lines@asis-wrap\endcsname{\@obeylinesfalse} % \def\Fld@start{l} \def\Fld@center{c} \def\Fld@end{r} % \def\White@preserve{\catcode`\ =\active\@vobeyspaces} % \def\Break@page{\newpage} \def\Break@{} % \def\DefineCharacter#1#2#3{\expandafter\def\csname Ch@#1\endcsname{#3}} % \end{macrocode} % \section{Unicode Characters} % Here are some characters we have encountered for which % we know the mappings. Some of these need the Elsevier font % packages, so unclean at present. % \begin{macrocode} \def\Entity#1{% \expandafter\ifx\csname Ent#1\endcsname\relax \\typeout{Warning: Undefined entity #1 at \the\inputlineno}% \else\csname Ent#1\endcsname\fi } % \end{macrocode} % Some common entities % \begin{macrocode} \DeclareFontFamily{OT1}{wncyr}{} \DeclareFontShape{OT1}{wncyr}{m}{n}{ <5> wncyr5 <6> wncyr6 <7> wncyr7 <8> wncyr8 <9> wncyr9 <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88> wncyr10 }{} \DeclareFontShape{OT1}{wncyr}{bx}{n}{ <5> wncyb5 <6> wncyb6 <7> wncyb7 <8> wncyb8 <9> wncyb9 <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88> wncyb10 }{} \DeclareFontShape{OT1}{wncyr}{m}{it}{ <5> wncyi5 <6> wncyi6 <7> wncyi7 <8> wncyi8 <9> wncyi9 <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88> wncyi10 }{} \DeclareFontShape{OT1}{wncyr}{m}{sl}{ <-> sub * wncyr/m/it }{} \gdef\cyr{\fontfamily{wncyr}\fontencoding{OT1}\selectfont} \DeclareMathSymbol{\Alpha}{\mathalpha}{operators}{`A} \DeclareMathSymbol{\Beta}{\mathalpha}{operators}{`B} \DeclareMathSymbol{\Epsilon}{\mathalpha}{operators}{`E} \DeclareMathSymbol{\Zeta}{\mathalpha}{operators}{`Z} \DeclareMathSymbol{\Iota}{\mathalpha}{operators}{`I} \DeclareMathSymbol{\Kappa}{\mathalpha}{operators}{`K} \DeclareMathSymbol{\Rho}{\mathalpha}{operators}{`R} \DeclareMathSymbol{\Chi}{\mathalpha}{operators}{`C} \DeclareMathSymbol{\Tau}{\mathalpha}{operators}{`T} \def\Elzsimne{\stackrel\sim\neq} \def\ElmDDot{\mathbin{{:}\!\!{-}\!\!{:}}} \def\Entamp{\&} \def\Entnbsp{~} \def\Entlsqb{[} \def\Entmdash{---} \def\Entndash{--} \def\Entemdash{---} \def\Entendash{--} \def\Entcheck{\ensuremath{\checkmark}} \def\Entrsqb{]} % \DefineCharacter{33}{0021}{!}% \DefineCharacter{34}{0022}{"}% \DefineCharacter{35}{0023}{\#}% \DefineCharacter{36}{0024}{\ifmmode \$\else \textdollar\fi}% \DefineCharacter{37}{0025}{\%}% \DefineCharacter{38}{0026}{\&}% \DefineCharacter{39}{0027}{'}% \DefineCharacter{40}{0028}{(}% \DefineCharacter{41}{0029}{)}% \DefineCharacter{42}{002A}{\ensuremath{\ast}}% \DefineCharacter{43}{002B}{\ensuremath{+}}% \DefineCharacter{44}{002C}{,}% \DefineCharacter{46}{002E}{.}% \DefineCharacter{47}{002F}{/}% \DefineCharacter{58}{003A}{:}% \DefineCharacter{59}{003B}{\ensuremath{;}}% \DefineCharacter{60}{003C}{\ensuremath{<}}% \DefineCharacter{61}{003D}{=}% \DefineCharacter{62}{003E}{\ensuremath{>}}% \DefineCharacter{63}{003F}{?}% \DefineCharacter{64}{0040}{@}% \DefineCharacter{91}{005B}{[}% \DefineCharacter{92}{005C}{\ifmmode \backslash\else \textbackslash\fi}% \DefineCharacter{93}{005D}{]}% \DefineCharacter{95}{005F}{\ensuremath{\_}}% \DefineCharacter{96}{0060}{\ifmmode \grave{}\else \`{}\fi}% \DefineCharacter{123}{007B}{\ensuremath{\lbrace}}% \DefineCharacter{124}{007C}{\ensuremath{\vert}}% \DefineCharacter{125}{007D}{\ensuremath{\rbrace}}% \DefineCharacter{126}{007E}{\ifmmode \tilde{}\else \~{}\fi}% \DefineCharacter{160}{00A0}{\ensuremath{~}}% \DefineCharacter{161}{00A1}{!`}% \DefineCharacter{162}{00A2}{\ifmmode \mbox{\textcent}\else \textcent\fi}% \DefineCharacter{163}{00A3}{\ifmmode \pounds\else \textsterling\fi}% \DefineCharacter{164}{00A4}{\ifmmode \mbox{\textcurrency}\else \textcurrency\fi}% \DefineCharacter{165}{00A5}{\ifmmode \yen\else \textyen\fi}% \DefineCharacter{166}{00A6}{\ifmmode \textbrokenbar\else \textbrokenbar\fi}% \DefineCharacter{167}{00A7}{\ifmmode \S\else \textsection\fi}% \DefineCharacter{168}{00A8}{\ifmmode \ddot{}\else \"{}\fi}% \DefineCharacter{169}{00A9}{\ifmmode \copyright\else \textcopyright\fi}% \DefineCharacter{170}{00AA}{\ensuremath{{{}^{\underline{a}}}}}% \DefineCharacter{171}{00AB}{\ifmmode \mbox{\guillemotleft}\else \guillemotleft\fi}% \DefineCharacter{172}{00AC}{\ensuremath{\lnot}}% \DefineCharacter{173}{00AD}{\ensuremath{\-}}% \DefineCharacter{174}{00AE}{\ifmmode \circledR\else \textregistered\fi}% \DefineCharacter{175}{00AF}{\ifmmode \bar{}\else \={}\fi}% \DefineCharacter{176}{00B0}{\ifmmode \mbox{\textdegree}\else \textdegree\fi}% \DefineCharacter{177}{00B1}{\ensuremath{\pm}}% \DefineCharacter{178}{00B2}{\ensuremath{{^2}}}% \DefineCharacter{179}{00B3}{\ensuremath{{^3}}}% \DefineCharacter{180}{00B4}{\ifmmode \acute{}\else \'{}\fi}% \DefineCharacter{181}{00B5}{\ensuremath{\mathrm{\mu}}}% \DefineCharacter{182}{00B6}{\ifmmode \P\else \textparagraph\fi}% \DefineCharacter{183}{00B7}{\ensuremath{\cdot}}% \DefineCharacter{184}{00B8}{\ifmmode \mbox{\c{}}\else \c{}\fi}% \DefineCharacter{185}{00B9}{\ensuremath{{^1}}}% \DefineCharacter{186}{00BA}{\ensuremath{{{}^{\underline{o}}}}}% \DefineCharacter{187}{00BB}{\ifmmode \mbox{\guillemotright}\else \guillemotright\fi}% \DefineCharacter{188}{00BC}{\ensuremath{\frac{1}{4}}}% \DefineCharacter{189}{00BD}{\ensuremath{\frac{1}{2}}}% \DefineCharacter{190}{00BE}{\ensuremath{\frac{3}{4}}}% \DefineCharacter{191}{00BF}{\ensuremath{?`}}% \DefineCharacter{192}{00C0}{\ifmmode \grave{A}\else \`{A}\fi}% \DefineCharacter{193}{00C1}{\ifmmode \acute{A}\else \'{A}\fi}% \DefineCharacter{194}{00C2}{\ifmmode \hat{A}\else \^{A}\fi}% \DefineCharacter{195}{00C3}{\ifmmode \tilde{A}\else \~{A}\fi}% \DefineCharacter{196}{00C4}{\ifmmode \ddot{A}\else \"{A}\fi}% \DefineCharacter{197}{00C5}{\AA}% \DefineCharacter{198}{00C6}{\AE}% \DefineCharacter{199}{00C7}{\ifmmode \mbox{\c{C}}\else \c{C}\fi}% \DefineCharacter{200}{00C8}{\ifmmode \grave{E}\else \`{E}\fi}% \DefineCharacter{201}{00C9}{\ifmmode \acute{E}\else \'{E}\fi}% \DefineCharacter{202}{00CA}{\ifmmode \hat{E}\else \^{E}\fi}% \DefineCharacter{203}{00CB}{\ifmmode \ddot{E}\else \"{E}\fi}% \DefineCharacter{204}{00CC}{\ifmmode \grave{I}\else \`{I}\fi}% \DefineCharacter{205}{00CD}{\ifmmode \acute{I}\else \'{I}\fi}% \DefineCharacter{206}{00CE}{\ifmmode \hat{I}\else \^{I}\fi}% \DefineCharacter{207}{00CF}{\ifmmode \ddot{I}\else \"{I}\fi}% \DefineCharacter{208}{00D0}{\dh}% \DefineCharacter{209}{00D1}{\ifmmode \tilde{N}\else \~{N}\fi}% \DefineCharacter{210}{00D2}{\ifmmode \grave{O}\else \`{O}\fi}% \DefineCharacter{211}{00D3}{\ifmmode \acute{O}\else \'{O}\fi}% \DefineCharacter{212}{00D4}{\ifmmode \hat{O}\else \^{O}\fi}% \DefineCharacter{213}{00D5}{\ifmmode \tilde{O}\else \~{O}\fi}% \DefineCharacter{214}{00D6}{\ifmmode \ddot{O}\else \"{O}\fi}% \DefineCharacter{215}{00D7}{\ifmmode \times\else \texttimes\fi}% \DefineCharacter{216}{00D8}{\O}% \DefineCharacter{217}{00D9}{\ifmmode \grave{U}\else \`{U}\fi}% \DefineCharacter{218}{00DA}{\ifmmode \acute{U}\else \'{U}\fi}% \DefineCharacter{219}{00DB}{\ifmmode \hat{u}\else \^{u}\fi}% \DefineCharacter{220}{00DC}{\ifmmode \ddot{U}\else \"{U}\fi}% \DefineCharacter{221}{00DD}{\ifmmode \acute{Y}\else \'{Y}\fi}% \DefineCharacter{222}{00DE}{\TH}% \DefineCharacter{223}{00DF}{\ss}% \DefineCharacter{224}{00E0}{\ifmmode \grave{a}\else \`{a}\fi}% \DefineCharacter{225}{00E1}{\ifmmode \acute{a}\else \'{a}\fi}% \DefineCharacter{226}{00E2}{\ifmmode \hat{a}\else \^{a}\fi}% \DefineCharacter{227}{00E3}{\ifmmode \tilde{a}\else \~{a}\fi}% \DefineCharacter{228}{00E4}{\ifmmode \ddot{a}\else \"{a}\fi}% \DefineCharacter{229}{00E5}{\aa}% \DefineCharacter{230}{00E6}{\ae}% \DefineCharacter{231}{00E7}{\ifmmode \mbox{\c{c}}\else \c{c}\fi}% \DefineCharacter{232}{00E8}{\ifmmode \grave{e}\else \`{e}\fi}% \DefineCharacter{233}{00E9}{\ifmmode \acute{e}\else \'{e}\fi}% \DefineCharacter{234}{00EA}{\ifmmode \hat{e}\else \^{e}\fi}% \DefineCharacter{235}{00EB}{\ifmmode \ddot{e}\else \"{e}\fi}% \DefineCharacter{236}{00EC}{\ifmmode \grave{\imath}\else \`{\i}\fi}% \DefineCharacter{237}{00ED}{\ifmmode \acute{\imath}\else \'{\i}\fi}% \DefineCharacter{238}{00EE}{\ifmmode \hat{\imath}\else \^{\i}\fi}% \DefineCharacter{239}{00EF}{\ifmmode \ddot{\imath}\else \"{\i}\fi}% \DefineCharacter{240}{00F0}{\DH}% \DefineCharacter{241}{00F1}{\ifmmode \tilde{n}\else \~{n}\fi}% \DefineCharacter{242}{00F2}{\ifmmode \grave{o}\else \`{o}\fi}% \DefineCharacter{243}{00F3}{\ifmmode \acute{o}\else \'{o}\fi}% \DefineCharacter{244}{00F4}{\ifmmode \hat{o}\else \^{o}\fi}% \DefineCharacter{245}{00F5}{\ifmmode \tilde{o}\else \~{o}\fi}% \DefineCharacter{246}{00F6}{\ifmmode \ddot{o}\else \"{o}\fi}% \DefineCharacter{247}{00F7}{\ensuremath{\div}}% \DefineCharacter{249}{00F9}{\ifmmode \grave{u}\else \`{u}\fi}% \DefineCharacter{250}{00FA}{\ifmmode \acute{u}\else \'{u}\fi}% \DefineCharacter{251}{00FB}{\ifmmode \hat{U}\else \^{U}\fi}% \DefineCharacter{252}{00FC}{\ifmmode \ddot{u}\else \"{u}\fi}% \DefineCharacter{253}{00FD}{\ifmmode \acute{y}\else \'{y}\fi}% \DefineCharacter{254}{00FE}{\th}% \DefineCharacter{255}{00FF}{\ifmmode \ddot{y}\else \"{y}\fi}% \DefineCharacter{256}{0100}{\ifmmode \bar{A}\else \={A}\fi}% \DefineCharacter{257}{0101}{\ifmmode \bar{a}\else \={a}\fi}% \DefineCharacter{258}{0102}{\ifmmode \breve{A}\else \u{A}\fi}% \DefineCharacter{259}{0103}{\ifmmode \u{a}\else \u{a}\fi}% \DefineCharacter{260}{0104}{\k{A}}% \DefineCharacter{261}{0105}{\k{a}}% \DefineCharacter{262}{0106}{\ifmmode \acute{C}\else \'{C}\fi}% \DefineCharacter{263}{0107}{\ifmmode \acute{c}\else \'{c}\fi}% \DefineCharacter{264}{0108}{\ifmmode \hat{C}\else \^{C}\fi}% \DefineCharacter{265}{0109}{\ifmmode \hat{c}\else \^{c}\fi}% \DefineCharacter{266}{010A}{\ifmmode \dot{C}\else \.{C}\fi}% \DefineCharacter{267}{010B}{\ifmmode \dot{c}\else \.{c}\fi}% \DefineCharacter{268}{010C}{\ifmmode \check{C}\else \v{C}\fi}% \DefineCharacter{269}{010D}{\ifmmode \check{c}\else \v{c}\fi}% \DefineCharacter{270}{010E}{\ifmmode \check{D}\else \v{D}\fi}% \DefineCharacter{271}{010F}{\ifmmode \check{d}\else \v{d}\fi}% \DefineCharacter{272}{0110}{\DJ}% \DefineCharacter{273}{0111}{\dj}% \DefineCharacter{274}{0112}{\ifmmode \bar{E}\else \={E}\fi}% \DefineCharacter{275}{0113}{\ifmmode \bar{e}\else \={e}\fi}% \DefineCharacter{278}{0116}{\ifmmode \dot{E}\else \.{E}\fi}% \DefineCharacter{279}{0117}{\ifmmode \dot{e}\else \.{e}\fi}% \DefineCharacter{280}{0118}{\ifmmode \k{E}\else \k{E}\fi}% \DefineCharacter{281}{0119}{\k{e}}% \DefineCharacter{282}{011A}{\ifmmode \check{E}\else \v{E}\fi}% \DefineCharacter{283}{011B}{\ifmmode \check{e}\else \v{e}\fi}% \DefineCharacter{284}{011C}{\ifmmode \hat{G}\else \^{G}\fi}% \DefineCharacter{285}{011D}{\ifmmode \hat{g}\else \^{g}\fi}% \DefineCharacter{286}{011E}{\ifmmode \breve{G}\else \u{G}\fi}% \DefineCharacter{287}{011F}{\ifmmode \breve{g}\else \u{g}\fi}% \DefineCharacter{288}{0120}{\ifmmode \dot{G}\else \.{G}\fi}% \DefineCharacter{289}{0121}{\ifmmode \dot{g}\else \.{g}\fi}% \DefineCharacter{290}{0122}{\ifmmode \mbox{\c{G}}\else \c{G}\fi}% \DefineCharacter{292}{0124}{\ifmmode \hat{H}\else \^{H}\fi}% \DefineCharacter{293}{0125}{\ifmmode \hat{h}\else \^{h}\fi}% \DefineCharacter{294}{0126}{\MISSING{Hstrok}}% \DefineCharacter{295}{0127}{\ensuremath{\hbar}}% \DefineCharacter{296}{0128}{\ifmmode \tilde{I}\else \~{I}\fi}% \DefineCharacter{297}{0129}{\ifmmode \tilde{\imath}\else \~{\i}\fi}% \DefineCharacter{298}{012A}{\ifmmode \bar{I}\else \={I}\fi}% \DefineCharacter{299}{012B}{\ifmmode \bar{\imath}\else \={\i}\fi}% \DefineCharacter{302}{012E}{\k{I}}% \DefineCharacter{303}{012F}{\k{i}}% \DefineCharacter{304}{0130}{\ifmmode \dot{I}\else \.{I}\fi}% \DefineCharacter{305}{0131}{\ifmmode \imath\else \i\fi}% \DefineCharacter{306}{0132}{IJ}% \DefineCharacter{307}{0133}{ij}% \DefineCharacter{308}{0134}{\ifmmode \hat{J}\else \^{J}\fi}% \DefineCharacter{309}{0135}{\ifmmode \hat{\jmath}\else \^{\j}\fi}% \DefineCharacter{310}{0136}{\ifmmode \mbox{\c{K}}\else \c{K}\fi}% \DefineCharacter{311}{0137}{\ifmmode \mbox{\c{k}}\else \c{k}\fi}% \DefineCharacter{312}{0138}{\MISSING{kgreen}}% \DefineCharacter{313}{0139}{\ifmmode \acute{L}\else \'{L}\fi}% \DefineCharacter{314}{013A}{\ifmmode \acute{l}\else \'{l}\fi}% \DefineCharacter{315}{013B}{\ifmmode \mbox{\c{L}}\else \c{L}\fi}% \DefineCharacter{316}{013C}{\ifmmode \mbox{\c{l}}\else \c{l}\fi}% \DefineCharacter{317}{013D}{\ifmmode \check{L}\else \v{L}\fi}% \DefineCharacter{318}{013E}{\ifmmode \check{l}\else \v{l}\fi}% \DefineCharacter{319}{013F}{\MISSING{Lmidot}}% \DefineCharacter{320}{0140}{\MISSING{lmidot}}% \DefineCharacter{321}{0141}{\L}% \DefineCharacter{322}{0142}{\l}% \DefineCharacter{323}{0143}{\ifmmode \acute{N}\else \'{N}\fi}% \DefineCharacter{324}{0144}{\ifmmode \acute{n}\else \'{n}\fi}% \DefineCharacter{325}{0145}{\ifmmode \mbox{\c{N}}\else \c{N}\fi}% \DefineCharacter{326}{0146}{\ifmmode \mbox{\c{n}}\else \c{n}\fi}% \DefineCharacter{327}{0147}{\ifmmode \check{N}\else \v{N}\fi}% \DefineCharacter{328}{0148}{\ifmmode \check{n}\else \v{n}\fi}% \DefineCharacter{329}{0149}{\ifmmode n\acute{}\else n\'{}\fi}% \DefineCharacter{330}{014A}{\NG}% \DefineCharacter{331}{014B}{\ng}% \DefineCharacter{332}{014C}{\ifmmode \bar{O}\else \={O}\fi}% \DefineCharacter{333}{014D}{\ifmmode \bar{o}\else \={o}\fi}% \DefineCharacter{336}{0150}{\ifmmode \mbox{\H{O}}\else \H{O}\fi}% \DefineCharacter{337}{0151}{\ifmmode \mbox{\H{o}}\else \H{o}\fi}% \DefineCharacter{338}{0152}{\OE}% \DefineCharacter{339}{0153}{\oe}% \DefineCharacter{340}{0154}{\ifmmode \acute{R}\else \'{R}\fi}% \DefineCharacter{341}{0155}{\ifmmode \acute{r}\else \'{r}\fi}% \DefineCharacter{342}{0156}{\ifmmode \mbox{\c{R}}\else \c{R}\fi}% \DefineCharacter{343}{0157}{\ifmmode \mbox{\c{r}}\else \c{r}\fi}% \DefineCharacter{344}{0158}{\ifmmode \check{R}\else \v{R}\fi}% \DefineCharacter{345}{0159}{\ifmmode \check{r}\else \v{r}\fi}% \DefineCharacter{346}{015A}{\ifmmode \acute{S}\else \'{S}\fi}% \DefineCharacter{347}{015B}{\ifmmode \acute{s}\else \'{s}\fi}% \DefineCharacter{348}{015C}{\ifmmode \hat{S}\else \^{S}\fi}% \DefineCharacter{349}{015D}{\ifmmode \hat{s}\else \^{s}\fi}% \DefineCharacter{350}{015E}{\ifmmode \mbox{\c{S}}\else \c{S}\fi}% \DefineCharacter{351}{015F}{\ifmmode \mbox{\c{s}}\else \c{s}\fi}% \DefineCharacter{352}{0160}{\ifmmode \check{S}\else \v{S}\fi}% \DefineCharacter{353}{0161}{\ifmmode \check{s}\else \v{s}\fi}% \DefineCharacter{354}{0162}{\ifmmode \mbox{\c{T}}\else \c{T}\fi}% \DefineCharacter{355}{0163}{\ifmmode \mbox{\c{t}}\else \c{t}\fi}% \DefineCharacter{356}{0164}{\ifmmode \check{T}\else \v{T}\fi}% \DefineCharacter{357}{0165}{\ifmmode \check{t}\else \v{t}\fi}% \DefineCharacter{358}{0166}{\MISSING{Tstrok}}% \DefineCharacter{359}{0167}{\MISSING{tstrok}}% \DefineCharacter{360}{0168}{\ifmmode \tilde{U}\else \~{U}\fi}% \DefineCharacter{361}{0169}{\ifmmode \tilde{u}\else \~{u}\fi}% \DefineCharacter{362}{016A}{\ifmmode \bar{U}\else \={U}\fi}% \DefineCharacter{363}{016B}{\ifmmode \bar{u}\else \={u}\fi}% \DefineCharacter{364}{016C}{\ifmmode \breve{U}\else \u{U}\fi}% \DefineCharacter{365}{016D}{\ifmmode \breve{u}\else \u{u}\fi}% \DefineCharacter{366}{016E}{\ifmmode \mathring{U}\else \r{U}\fi}% \DefineCharacter{367}{016F}{\ifmmode \mathring{u}\else \r{u}\fi}% \DefineCharacter{368}{0170}{\ifmmode \mbox{\H{U}}\else \H{U}\fi}% \DefineCharacter{369}{0171}{\ifmmode \mbox{\H{u}}\else \H{u}\fi}% \DefineCharacter{370}{0172}{\ifmmode \k{U}\else \k{U}\fi}% \DefineCharacter{371}{0173}{\k{u}}% \DefineCharacter{372}{0174}{\ifmmode \hat{W}\else \^{W}\fi}% \DefineCharacter{373}{0175}{\ifmmode \hat{w}\else \^{w}\fi}% \DefineCharacter{374}{0176}{\ifmmode \hat{Y}\else \^{Y}\fi}% \DefineCharacter{375}{0177}{\ifmmode \hat{y}\else \^{y}\fi}% \DefineCharacter{376}{0178}{\ifmmode \ddot{Y}\else \"{Y}\fi}% \DefineCharacter{377}{0179}{\ifmmode \acute{Z}\else \'{Z}\fi}% \DefineCharacter{378}{017A}{\ifmmode \acute{z}\else \'{z}\fi}% \DefineCharacter{379}{017B}{\ifmmode \dot{Z}\else \.{Z}\fi}% \DefineCharacter{380}{017C}{\ifmmode \dot{z}\else \.{z}\fi}% \DefineCharacter{381}{017D}{\ifmmode \check{Z}\else \v{Z}\fi}% \DefineCharacter{382}{017E}{\ifmmode \check{z}\else \v{z}\fi}% \DefineCharacter{402}{0192}{\ensuremath{f}}% \DefineCharacter{501}{01F5}{\ifmmode \acute{g}\else \'{g}\fi}% \DefineCharacter{603}{025B}{\ensuremath{\varepsilon}}% \DefineCharacter{711}{02C7}{\ifmmode \check{}\else \v{}\fi}% \DefineCharacter{728}{02D8}{\ifmmode \breve{}\else \u{}\fi}% \DefineCharacter{729}{02D9}{\ifmmode \dot{}\else \.{}\fi}% \DefineCharacter{730}{02DA}{\ifmmode \mathring{}\else \r{}\fi}% \DefineCharacter{731}{02DB}{\k{}}% \DefineCharacter{733}{02DD}{\ifmmode \mbox{\H{}}\else \H{}\fi}% \DefineCharacter{768}{0300}{\ifmmode \grave{}\else \`{}\fi}% \DefineCharacter{769}{0301}{\ifmmode \acute{}\else \'{}\fi}% \DefineCharacter{770}{0302}{\ifmmode \hat{}\else \^{}\fi}% \DefineCharacter{771}{0303}{\ifmmode \tilde{}\else \~{}\fi}% \DefineCharacter{774}{0306}{\ifmmode \breve{}\else \u{}\fi}% \DefineCharacter{775}{0307}{\ifmmode \dot{}\else \.{}\fi}% \DefineCharacter{776}{0308}{\ifmmode \ddot{}\else \"{}\fi}% \DefineCharacter{779}{030B}{\H{}}% \DefineCharacter{780}{030C}{\ifmmode \check{}\else \v{}\fi}% \DefineCharacter{807}{0327}{\ifmmode \mbox{\c{}}\else \c{}\fi}% \DefineCharacter{902}{0386}{\ifmmode \acute{A}\else \'{A}\fi}% \DefineCharacter{904}{0388}{\ifmmode \acute{E}\else \'{E}\fi}% \DefineCharacter{905}{0389}{\ifmmode \grave{H}\else \'{H}\fi}% \DefineCharacter{906}{038A}{\ifmmode \acute{I}\else \'{I}\fi}% \DefineCharacter{908}{038C}{\ifmmode \acute{O}\else \'{O}\fi}% \DefineCharacter{910}{038E}{\ensuremath{\acute{Y}}}% \DefineCharacter{911}{038F}{\ensuremath{\acute{\Omega}}}% \DefineCharacter{912}{0390}{\ensuremath{\acute{\ddot{\iota}}}}% \DefineCharacter{913}{0391}{\ensuremath{\Alpha}}% \DefineCharacter{914}{0392}{\ensuremath{\Beta}}% \DefineCharacter{915}{0393}{\ensuremath{\Gamma}}% \DefineCharacter{916}{0394}{\ensuremath{\Delta}}% \DefineCharacter{917}{0395}{\ensuremath{\Epsilon}}% \DefineCharacter{918}{0396}{\ensuremath{\Zeta}}% \DefineCharacter{919}{0397}{\ensuremath{\Eta}}% \DefineCharacter{920}{0398}{\ensuremath{\Theta}}% \DefineCharacter{921}{0399}{\ensuremath{\Iota}}% \DefineCharacter{922}{039A}{\ensuremath{\Kappa}}% \DefineCharacter{923}{039B}{\ensuremath{\Lambda}}% \DefineCharacter{924}{039C}{\ensuremath{M}}% \DefineCharacter{925}{039D}{\ensuremath{N}}% \DefineCharacter{926}{039E}{\ensuremath{\Xi}}% \DefineCharacter{927}{039F}{\ensuremath{O}}% \DefineCharacter{928}{03A0}{\ensuremath{\Pi}}% \DefineCharacter{929}{03A1}{\ensuremath{\Rho}}% \DefineCharacter{931}{03A3}{\ensuremath{\Sigma}}% \DefineCharacter{932}{03A4}{\ensuremath{\Tau}}% \DefineCharacter{933}{03A5}{\ensuremath{\Upsilon}}% \DefineCharacter{934}{03A6}{\ensuremath{\Phi}}% \DefineCharacter{935}{03A7}{\ensuremath{\Chi}}% \DefineCharacter{936}{03A8}{\ensuremath{\Psi}}% \DefineCharacter{937}{03A9}{\ensuremath{\Omega}}% \DefineCharacter{938}{03AA}{\ensuremath{\ddot{I}}}% \DefineCharacter{939}{03AB}{\ensuremath{\ddot{U}}}% \DefineCharacter{940}{03AC}{\ifmmode \acute{\alpha}\else \'{$\alpha$}\fi}% \DefineCharacter{941}{03AD}{\ensuremath{\acute{\epsilon}}}% \DefineCharacter{942}{03AE}{\ensuremath{\acute{\eta}}}% \DefineCharacter{943}{03AF}{\ensuremath{\acute{\iota}}}% \DefineCharacter{944}{03B0}{\ensuremath{\ddot{\acute{\upsilon}}}}% \DefineCharacter{945}{03B1}{\ensuremath{\alpha}}% \DefineCharacter{946}{03B2}{\ensuremath{\beta}}% \DefineCharacter{947}{03B3}{\ensuremath{\gamma}}% \DefineCharacter{948}{03B4}{\ensuremath{\delta}}% \DefineCharacter{949}{03B5}{\ensuremath{\epsilon}}% \DefineCharacter{950}{03B6}{\ensuremath{\zeta}}% \DefineCharacter{951}{03B7}{\ensuremath{\eta}}% \DefineCharacter{952}{03B8}{\ifmmode \theta\else \texttheta\fi}% \DefineCharacter{953}{03B9}{\ensuremath{\iota}}% \DefineCharacter{954}{03BA}{\ensuremath{\kappa}}% \DefineCharacter{955}{03BB}{\ensuremath{\lambda}}% \DefineCharacter{956}{03BC}{\ensuremath{\mu}}% \DefineCharacter{957}{03BD}{\ensuremath{\nu}}% \DefineCharacter{958}{03BE}{\ensuremath{\xi}}% \DefineCharacter{959}{03BF}{\ensuremath{o}}% \DefineCharacter{960}{03C0}{\ensuremath{\pi}}% \DefineCharacter{961}{03C1}{\ensuremath{\rho}}% \DefineCharacter{962}{03C2}{\ensuremath{\varsigma}}% \DefineCharacter{963}{03C3}{\ensuremath{\sigma}}% \DefineCharacter{964}{03C4}{\ensuremath{\tau}}% \DefineCharacter{965}{03C5}{\ensuremath{\upsilon}}% \DefineCharacter{966}{03C6}{\ensuremath{\phi}}% \DefineCharacter{967}{03C7}{\ensuremath{\chi}}% \DefineCharacter{968}{03C8}{\ensuremath{\psi}}% \DefineCharacter{969}{03C9}{\ensuremath{\omega}}% \DefineCharacter{970}{03CA}{\ensuremath{\ddot{\iota}}}% \DefineCharacter{971}{03CB}{\ensuremath{\ddot{\upsilon}}}% \DefineCharacter{972}{03CC}{\ifmmode \acute{o}\else \'{o}\fi}% \DefineCharacter{973}{03CD}{\ensuremath{\acute{\upsilon}}}% \DefineCharacter{974}{03CE}{\ensuremath{\acute{\omega}}}% \DefineCharacter{977}{03D1}{\ifmmode \vartheta\else \textvartheta\fi}% \DefineCharacter{978}{03D2}{\ensuremath{\Upsilon}}% \DefineCharacter{981}{03D5}{\ensuremath{\varphi}}% \DefineCharacter{982}{03D6}{\ensuremath{\varpi}}% \DefineCharacter{988}{03DC}{\ensuremath{\digamma}}% \DefineCharacter{1008}{03F0}{\ensuremath{\varkappa}}% \DefineCharacter{1009}{03F1}{\ensuremath{\varrho}}% \DefineCharacter{1025}{0401}{\cyr{\"E}}% \DefineCharacter{1026}{0402}{\DJ}% \DefineCharacter{1027}{0403}{\cyr{\'G}}% \DefineCharacter{1028}{0404}{\cyr{\=E}}% \DefineCharacter{1029}{0405}{\cyr{\Dz}}% \DefineCharacter{1030}{0406}{\cyr{\=I}}% \DefineCharacter{1031}{0407}{\cyr{\"I}}% \DefineCharacter{1032}{0408}{\cyr{J}}% \DefineCharacter{1033}{0409}{\cyr{Lj}}% \DefineCharacter{1034}{040A}{\cyr{Nj}}% \DefineCharacter{1035}{040B}{\cyr{\'C}}% \DefineCharacter{1036}{040C}{\cyr{\'K}}% \DefineCharacter{1038}{040E}{\cyr{\u{U}}}% \DefineCharacter{1039}{040F}{\cyr{\Dzh}}% \DefineCharacter{1040}{0410}{\cyr{A}}% \DefineCharacter{1041}{0411}{\cyr{B}}% \DefineCharacter{1042}{0412}{\cyr{V}}% \DefineCharacter{1043}{0413}{\cyr{G}}% \DefineCharacter{1044}{0414}{\cyr{D}}% \DefineCharacter{1045}{0415}{\cyr{E}}% \DefineCharacter{1046}{0416}{\cyr{Zh}}% \DefineCharacter{1047}{0417}{\cyr{Z}}% \DefineCharacter{1048}{0418}{\cyr{I}}% \DefineCharacter{1049}{0419}{\cyr{\u{I}}}% \DefineCharacter{1050}{041A}{\cyr{K}}% \DefineCharacter{1051}{041B}{\cyr{L}}% \DefineCharacter{1052}{041C}{\cyr{M}}% \DefineCharacter{1053}{041D}{\cyr{N}}% \DefineCharacter{1054}{041E}{\cyr{O}}% \DefineCharacter{1055}{041F}{\cyr{P}}% \DefineCharacter{1056}{0420}{\cyr{R}}% \DefineCharacter{1057}{0421}{\cyr{S}}% \DefineCharacter{1058}{0422}{\cyr{T}}% \DefineCharacter{1059}{0423}{\cyr{U}}% \DefineCharacter{1060}{0424}{\cyr{F}}% \DefineCharacter{1061}{0425}{\cyr{Kh}}% \DefineCharacter{1062}{0426}{\cyr{Ts}}% \DefineCharacter{1063}{0427}{\cyr{Ch}}% \DefineCharacter{1064}{0428}{\cyr{Sh}}% \DefineCharacter{1065}{0429}{\cyr{Shch}}% \DefineCharacter{1066}{042A}{\cyr{\Cdprime}}% \DefineCharacter{1067}{042B}{\cyr{Y}}% \DefineCharacter{1068}{042C}{\cyr{\Cprime}}% \DefineCharacter{1069}{042D}{\cyr{\'E}}% \DefineCharacter{1070}{042E}{\cyr{Yu}}% \DefineCharacter{1071}{042F}{\cyr{Ya}}% \DefineCharacter{1072}{0430}{\cyr{a}}% \DefineCharacter{1073}{0431}{\cyr{b}}% \DefineCharacter{1074}{0432}{\cyr{v}}% \DefineCharacter{1075}{0433}{\cyr{g}}% \DefineCharacter{1076}{0434}{\cyr{d}}% \DefineCharacter{1077}{0435}{e}% \DefineCharacter{1078}{0436}{\cyr{zh}}% \DefineCharacter{1079}{0437}{\cyr{z}}% \DefineCharacter{1080}{0438}{\ensuremath{i}}% \DefineCharacter{1081}{0439}{\cyr{\u\i}}% \DefineCharacter{1082}{043A}{\cyr{k}}% \DefineCharacter{1083}{043B}{\cyr{l}}% \DefineCharacter{1084}{043C}{\cyr{m}}% \DefineCharacter{1085}{043D}{\cyr{n}}% \DefineCharacter{1086}{043E}{\ensuremath{o}}% \DefineCharacter{1087}{043F}{\cyr{p}}% \DefineCharacter{1088}{0440}{\cyr{r}}% \DefineCharacter{1089}{0441}{\cyr{s}}% \DefineCharacter{1090}{0442}{\cyr{t}}% \DefineCharacter{1091}{0443}{\cyr{u}}% \DefineCharacter{1092}{0444}{\cyr{f}}% \DefineCharacter{1093}{0445}{\cyr{kh}}% \DefineCharacter{1094}{0446}{\cyr{ts}}% \DefineCharacter{1095}{0447}{\cyr{ch}}% \DefineCharacter{1096}{0448}{\ensuremath{sh}}% \DefineCharacter{1097}{0449}{\cyr{shch}}% \DefineCharacter{1098}{044A}{\cyr{\cdprime}}% \DefineCharacter{1099}{044B}{\cyr{y}}% \DefineCharacter{1100}{044C}{\cyr{\cprime}}% \DefineCharacter{1101}{044D}{\cyr{\'e}}% \DefineCharacter{1102}{044E}{\cyr{yu}}% \DefineCharacter{1103}{044F}{\cyr{ya}}% \DefineCharacter{1105}{0451}{\cyr{\"e}}% \DefineCharacter{1106}{0452}{\cyr{dj}}% \DefineCharacter{1107}{0453}{\cyr{\'g}}% \DefineCharacter{1108}{0454}{\cyr{\=e}}% \DefineCharacter{1109}{0455}{\cyr{\dz}}% \DefineCharacter{1110}{0456}{\cyr{\=\i}}% \DefineCharacter{1111}{0457}{\cyr{\"\i}}% \DefineCharacter{1112}{0458}{\cyr{j}}% \DefineCharacter{1113}{0459}{\cyr{lj}}% \DefineCharacter{1114}{045A}{\cyr{nj}}% \DefineCharacter{1115}{045B}{\cyr{\'c}}% \DefineCharacter{1116}{045C}{\cyr{\'k}}% \DefineCharacter{1118}{045E}{\cyr{\u{u}}}% \DefineCharacter{1119}{045F}{\cyr{\dzh}}% \DefineCharacter{8194}{2002}{\ensuremath{\hspace{0.6em}}}% \DefineCharacter{8195}{2003}{\hspace{1em}}% \DefineCharacter{8196}{2004}{\hspace{0.33em}}% \DefineCharacter{8197}{2005}{\hspace{0.25em}}% \DefineCharacter{8199}{2007}{\ensuremath{\hphantom{0}}}% \DefineCharacter{8200}{2008}{\hphantom{,}}% \DefineCharacter{8201}{2009}{\hspace{0.167em}}% \DefineCharacter{8202}{200A}{\ensuremath{\hspace{1pt}}}% \DefineCharacter{8208}{2010}{\ensuremath{--}}% \DefineCharacter{8211}{2013}{--}% \DefineCharacter{8212}{2014}{---}% \DefineCharacter{8213}{2015}{\ensuremath{---}}% \DefineCharacter{8214}{2016}{\ensuremath{\Vert}}% \DefineCharacter{8216}{2018}{`}% \DefineCharacter{8217}{2019}{'}% \DefineCharacter{8218}{201A}{,}% \DefineCharacter{8220}{201C}{\textquotedblleft}% \DefineCharacter{8221}{201D}{\textquotedblright}% \DefineCharacter{8222}{201E}{,,}% \DefineCharacter{8224}{2020}{\ifmmode \ddag\else \textdagger\fi}% \DefineCharacter{8225}{2021}{\ifmmode \ddag\else \textdaggerdbl\fi}% \DefineCharacter{8226}{2022}{\ensuremath{\textbullet}}% \DefineCharacter{8229}{2025}{\MISSING{nldr}}% \DefineCharacter{8230}{2026}{\ensuremath{\ldots}}% \DefineCharacter{8240}{2030}{\textperthousand}% \DefineCharacter{8241}{2031}{\ensuremath{\mbox{\textpertenthousand}}}% \DefineCharacter{8242}{2032}{\ensuremath{{'}}}% \DefineCharacter{8243}{2033}{\ensuremath{{''}}}% \DefineCharacter{8244}{2034}{\ensuremath{{'''}}}% \DefineCharacter{8245}{2035}{\ensuremath{\backprime}}% \DefineCharacter{8257}{2041}{\ensuremath{\mathchar"1356}}% \DefineCharacter{8259}{2043}{\MISSING{hybull}}% \DefineCharacter{8411}{20DB}{\ensuremath{\dddot{}}}% \DefineCharacter{8412}{20DC}{\ensuremath{\ddddot{}}}% \DefineCharacter{8450}{2102}{\ensuremath{\mathbb{C}}}% \DefineCharacter{8453}{2105}{\MISSING{incare}}% \DefineCharacter{8459}{210B}{\ensuremath{\mathcal{H}}}% \DefineCharacter{8463}{210F}{\ensuremath{\hslash}}% \DefineCharacter{8465}{2111}{\ensuremath{\Im}}% \DefineCharacter{8466}{2112}{\ensuremath{\mathcal{L}}}% \DefineCharacter{8467}{2113}{\ensuremath{\ell}}% \DefineCharacter{8470}{2116}{\cyr{N0}}% \DefineCharacter{8471}{2117}{\MISSING{copysr}}% \DefineCharacter{8472}{2118}{\ensuremath{\wp}}% \DefineCharacter{8473}{2119}{\ensuremath{\mathbb{P}}}% \DefineCharacter{8474}{211A}{\ensuremath{\mathbb{Q}}}% \DefineCharacter{8475}{211B}{\ensuremath{\mathcal{r}}}% \DefineCharacter{8476}{211C}{\ensuremath{\Re}}% \DefineCharacter{8477}{211D}{\ensuremath{\mathbb{R}}}% \DefineCharacter{8478}{211E}{\MISSING{rx}}% \DefineCharacter{8482}{2122}{\ifmmode \mbox{\texttrademark}\else \texttrademark\fi}% \DefineCharacter{8484}{2124}{\ensuremath{\mathfrak{Z}}}% \DefineCharacter{8486}{2126}{\ensuremath{\Omega}}% \DefineCharacter{8487}{2127}{\ensuremath{\mho}}% \DefineCharacter{8489}{2129}{\ensuremath{\Eliiota}}% \DefineCharacter{8491}{212B}{\ifmmode \AA\else \AA\fi}% \DefineCharacter{8492}{212C}{\ensuremath{\mathcal{B}}}% \DefineCharacter{8499}{2133}{\ensuremath{\mathcal{M}}}% \DefineCharacter{8500}{2134}{\ensuremath{\mathcal{o}}}% \DefineCharacter{8501}{2135}{\ensuremath{\aleph}}% \DefineCharacter{8502}{2136}{\ensuremath{\beth}}% \DefineCharacter{8503}{2137}{\ensuremath{\gimel}}% \DefineCharacter{8504}{2138}{\ensuremath{\daleth}}% \DefineCharacter{8531}{2153}{\ensuremath{\frac{1}{3}}}% \DefineCharacter{8532}{2154}{\ensuremath{\frac{2}{3}}}% \DefineCharacter{8533}{2155}{\ensuremath{\frac{1}{5}}}% \DefineCharacter{8534}{2156}{\ensuremath{\frac{2}{5}}}% \DefineCharacter{8535}{2157}{\ensuremath{\frac{3}{5}}}% \DefineCharacter{8536}{2158}{\ensuremath{\frac{4}{5}}}% \DefineCharacter{8537}{2159}{\ensuremath{\frac{1}{6}}}% \DefineCharacter{8538}{215A}{\ensuremath{\frac{5}{6}}}% \DefineCharacter{8539}{215B}{\ensuremath{\frac{1}{8}}}% \DefineCharacter{8540}{215C}{\ensuremath{\frac{3}{8}}}% \DefineCharacter{8541}{215D}{\ensuremath{\frac{5}{8}}}% \DefineCharacter{8542}{215E}{\ensuremath{\frac{7}{8}}}% \DefineCharacter{8592}{2190}{\ensuremath{\leftarrow}}% \DefineCharacter{8593}{2191}{\ensuremath{\uparrow}}% \DefineCharacter{8594}{2192}{\ensuremath{\rightarrow}}% \DefineCharacter{8595}{2193}{\ensuremath{\downarrow}}% \DefineCharacter{8596}{2194}{\ensuremath{\leftrightarrow}}% \DefineCharacter{8597}{2195}{\ensuremath{\updownarrow}}% \DefineCharacter{8598}{2196}{\ensuremath{\nwarrow}}% \DefineCharacter{8599}{2197}{\ensuremath{\nearrow}}% \DefineCharacter{8600}{2198}{\ensuremath{\searrow}}% \DefineCharacter{8601}{2199}{\ensuremath{\swarrow}}% \DefineCharacter{8602}{219A}{\ensuremath{\nleftarrow}}% \DefineCharacter{8603}{219B}{\ensuremath{\nrightarrow}}% \DefineCharacter{8605}{219D}{\ensuremath{\rightsquigarrow}}% \DefineCharacter{8606}{219E}{\ensuremath{\twoheadleftarrow}}% \DefineCharacter{8608}{21A0}{\ensuremath{\twoheadrightarrow}}% \DefineCharacter{8610}{21A2}{\ensuremath{\leftarrowtail}}% \DefineCharacter{8611}{21A3}{\ensuremath{\rightarrowtail}}% \DefineCharacter{8614}{21A6}{\ensuremath{\mapsto}}% \DefineCharacter{8617}{21A9}{\ensuremath{\hookleftarrow}}% \DefineCharacter{8618}{21AA}{\ensuremath{\hookrightarrow}}% \DefineCharacter{8619}{21AB}{\ensuremath{\looparrowleft}}% \DefineCharacter{8620}{21AC}{\ensuremath{\looparrowright}}% \DefineCharacter{8621}{21AD}{\ensuremath{\leftrightsquigarrow}}% \DefineCharacter{8622}{21AE}{\ensuremath{\nleftrightarrow}}% \DefineCharacter{8624}{21B0}{\ensuremath{\Lsh}}% \DefineCharacter{8625}{21B1}{\ensuremath{\Rsh}}% \DefineCharacter{8627}{21B3}{\ensuremath{\Elzrhkd}}% \DefineCharacter{8630}{21B6}{\ensuremath{\curvearrowleft}}% \DefineCharacter{8631}{21B7}{\ensuremath{\curvearrowright}}% \DefineCharacter{8634}{21BA}{\ensuremath{\circlearrowleft}}% \DefineCharacter{8635}{21BB}{\ensuremath{\circlearrowright}}% \DefineCharacter{8636}{21BC}{\ensuremath{\leftharpoonup}}% \DefineCharacter{8637}{21BD}{\ensuremath{\leftharpoondown}}% \DefineCharacter{8638}{21BE}{\ensuremath{\upharpoonright}}% \DefineCharacter{8639}{21BF}{\ensuremath{\upharpoonleft}}% \DefineCharacter{8640}{21C0}{\ensuremath{\rightharpoonup}}% \DefineCharacter{8641}{21C1}{\ensuremath{\rightharpoondown}}% \DefineCharacter{8642}{21C2}{\ensuremath{\downharpoonright}}% \DefineCharacter{8643}{21C3}{\ensuremath{\downharpoonleft}}% \DefineCharacter{8644}{21C4}{\ensuremath{\rightleftarrows}}% \DefineCharacter{8645}{21C5}{\ensuremath{\zudarr}}% \DefineCharacter{8646}{21C6}{\ensuremath{\leftrightarrows}}% \DefineCharacter{8647}{21C7}{\ensuremath{\leftleftarrows}}% \DefineCharacter{8648}{21C8}{\ensuremath{\upuparrows}}% \DefineCharacter{8649}{21C9}{\ensuremath{\rightrightarrows}}% \DefineCharacter{8650}{21CA}{\ensuremath{\downdownarrows}}% \DefineCharacter{8651}{21CB}{\ensuremath{\leftrightharpoons}}% \DefineCharacter{8652}{21CC}{\ensuremath{\rightleftharpoons}}% \DefineCharacter{8653}{21CD}{\ensuremath{\nLeftarrow}}% \DefineCharacter{8654}{21CE}{\ensuremath{\nLeftrightarrow}}% \DefineCharacter{8655}{21CF}{\ensuremath{\nRightarrow}}% \DefineCharacter{8656}{21D0}{\ensuremath{\Leftarrow}}% \DefineCharacter{8657}{21D1}{\ensuremath{\Uparrow}}% \DefineCharacter{8658}{21D2}{\ensuremath{\Rightarrow}}% \DefineCharacter{8659}{21D3}{\ensuremath{\Downarrow}}% \DefineCharacter{8660}{21D4}{\ensuremath{\Leftrightarrow}}% \DefineCharacter{8661}{21D5}{\ensuremath{\Updownarrow}}% \DefineCharacter{8666}{21DA}{\ensuremath{\Lleftarrow}}% \DefineCharacter{8667}{21DB}{\ensuremath{\Rrightarrow}}% \DefineCharacter{8704}{2200}{\ensuremath{\forall}}% \DefineCharacter{8705}{2201}{\ensuremath{\complement}}% \DefineCharacter{8706}{2202}{\ensuremath{\partial}}% \DefineCharacter{8707}{2203}{\ensuremath{\exists}}% \DefineCharacter{8708}{2204}{\ensuremath{\nexists}}% \DefineCharacter{8711}{2207}{\ensuremath{\nabla}}% \DefineCharacter{8713}{2209}{\ensuremath{\not\in}}% \DefineCharacter{8714}{220A}{\ensuremath{\in}}% \DefineCharacter{8716}{220C}{\ensuremath{\not\ni}}% \DefineCharacter{8717}{220D}{\ensuremath{\ni}}% \DefineCharacter{8719}{220F}{\ensuremath{\prod}}% \DefineCharacter{8720}{2210}{\ensuremath{\coprod}}% \DefineCharacter{8721}{2211}{\ensuremath{\sum}}% \DefineCharacter{8722}{2212}{-}% \DefineCharacter{8723}{2213}{\ensuremath{\mp}}% \DefineCharacter{8724}{2214}{\ensuremath{\dotplus}}% \DefineCharacter{8726}{2216}{\ensuremath{\setminus}}% \DefineCharacter{8727}{2217}{\ensuremath{{_\ast}}}% \DefineCharacter{8728}{2218}{\ensuremath{\circ}}% \DefineCharacter{8730}{221A}{\ensuremath{\surd}}% \DefineCharacter{8733}{221D}{\ensuremath{\propto}}% \DefineCharacter{8734}{221E}{\ensuremath{\infty}}% \DefineCharacter{8735}{221F}{\ensuremath{\ElangNINETY}}% \DefineCharacter{8736}{2220}{\ensuremath{\angle}}% \DefineCharacter{8737}{2221}{\ensuremath{\measuredangle}}% \DefineCharacter{8738}{2222}{\ensuremath{\sphericalangle}}% \DefineCharacter{8739}{2223}{\ensuremath{\mid}}% \DefineCharacter{8740}{2224}{\ensuremath{\nmid}}% \DefineCharacter{8741}{2225}{\ensuremath{\parallel}}% \DefineCharacter{8742}{2226}{\ensuremath{\nparallel}}% \DefineCharacter{8743}{2227}{\ensuremath{\wedge}}% \DefineCharacter{8744}{2228}{\ensuremath{\vee}}% \DefineCharacter{8745}{2229}{\ensuremath{\cap}}% \DefineCharacter{8746}{222A}{\ensuremath{\cup}}% \DefineCharacter{8747}{222B}{\ensuremath{\int}}% \DefineCharacter{8750}{222E}{\ensuremath{\oint}}% \DefineCharacter{8751}{222F}{\ensuremath{\zsint}}% \DefineCharacter{8752}{2230}{\ensuremath{\zvint}}% \DefineCharacter{8753}{2231}{\ensuremath{\Elcwint}}% \DefineCharacter{8754}{2232}{\ensuremath{\Elccoint}}% \DefineCharacter{8755}{2233}{\ensuremath{\Elacoint}}% \DefineCharacter{8756}{2234}{\ensuremath{\therefore}}% \DefineCharacter{8757}{2235}{\ensuremath{\because}}% \DefineCharacter{8759}{2237}{\ensuremath{\Colon}}% \DefineCharacter{8760}{2238}{\ensuremath{\Elminusd}}% \DefineCharacter{8762}{223A}{\ensuremath{\ElmDDot}}% \DefineCharacter{8763}{223B}{\ensuremath{\Elhomthr}}% \DefineCharacter{8764}{223C}{\ensuremath{\sim}}% \DefineCharacter{8765}{223D}{\ensuremath{\backsim}}% \DefineCharacter{8766}{223E}{\ensuremath{\sim}}% \DefineCharacter{8768}{2240}{\ensuremath{\wr}}% \DefineCharacter{8769}{2241}{\ensuremath{\not\sim}}% \DefineCharacter{8770}{2242}{\ensuremath{\Elesim}}% \DefineCharacter{8771}{2243}{\ensuremath{\simeq}}% \DefineCharacter{8772}{2244}{\ensuremath{\not\simeq}}% \DefineCharacter{8773}{2245}{\ensuremath{\cong}}% \DefineCharacter{8774}{2246}{\ensuremath{\Elzsimne}}% \DefineCharacter{8775}{2247}{\ensuremath{\not\cong}}% \DefineCharacter{8776}{2248}{\ensuremath{\approx}}% \DefineCharacter{8777}{2249}{\ensuremath{\not\approx}}% \DefineCharacter{8778}{224A}{\ensuremath{\approxeq}}% \DefineCharacter{8779}{224B}{\ensuremath{\apid}}% \DefineCharacter{8780}{224C}{\ensuremath{\backepsilon}}% \DefineCharacter{8781}{224D}{\ensuremath{\asymp}}% \DefineCharacter{8782}{224E}{\ensuremath{\Bumpeq}}% \DefineCharacter{8783}{224F}{\ensuremath{\bumpeq}}% \DefineCharacter{8784}{2250}{\ensuremath{\doteq}}% \DefineCharacter{8785}{2251}{\ensuremath{\doteqdot}}% \DefineCharacter{8786}{2252}{\ensuremath{\fallingdotseq}}% \DefineCharacter{8787}{2253}{\ensuremath{\risingdotseq}}% \DefineCharacter{8788}{2254}{: =}% \DefineCharacter{8789}{2255}{\ensuremath{=:}}% \DefineCharacter{8790}{2256}{\ensuremath{\eqcirc}}% \DefineCharacter{8791}{2257}{\ensuremath{\circeq}}% \DefineCharacter{8793}{2259}{\ensuremath{\Longleftrightarrow}}% \DefineCharacter{8794}{225A}{\ensuremath{\ElzveeBar}}% \DefineCharacter{8795}{225B}{\ensuremath{\stackrel*=}}% \DefineCharacter{8796}{225C}{\ensuremath{\triangleq}}% \DefineCharacter{8799}{225F}{\ensuremath{\Elequest}}% \DefineCharacter{8800}{2260}{\ensuremath{\not =}}% \DefineCharacter{8801}{2261}{\ensuremath{\equiv}}% \DefineCharacter{8802}{2262}{\ensuremath{\not\equiv}}% \DefineCharacter{8804}{2264}{\ensuremath{\leq}}% \DefineCharacter{8805}{2265}{\ensuremath{\geq}}% \DefineCharacter{8806}{2266}{\ensuremath{\leqq}}% \DefineCharacter{8807}{2267}{\ensuremath{\geqq}}% \DefineCharacter{8808}{2268}{\ensuremath{\lneqq}}% \DefineCharacter{8809}{2269}{\ensuremath{\gneqq}}% \DefineCharacter{8810}{226A}{\ensuremath{\ll}}% \DefineCharacter{8811}{226B}{\ensuremath{\gg}}% \DefineCharacter{8812}{226C}{\ensuremath{\between}}% \DefineCharacter{8814}{226E}{\ensuremath{\not<}}% \DefineCharacter{8815}{226F}{\ensuremath{\not>}}% \DefineCharacter{8816}{2270}{\ensuremath{\nleqslant}}% \DefineCharacter{8817}{2271}{\ensuremath{\ngeqslant}}% \DefineCharacter{8818}{2272}{\ensuremath{\lessapprox}}% \DefineCharacter{8819}{2273}{\ensuremath{\gtrapprox}}% \DefineCharacter{8820}{2274}{\ensuremath{\Elznltneq}}% \DefineCharacter{8821}{2275}{\ensuremath{\Elzngtneq}}% \DefineCharacter{8822}{2276}{\ensuremath{\lessgtr}}% \DefineCharacter{8823}{2277}{\ensuremath{\gtrless}}% \DefineCharacter{8824}{2278}{\ensuremath{\Elznltngt}}% \DefineCharacter{8825}{2279}{\ensuremath{\Elzngtnlt}}% \DefineCharacter{8826}{227A}{\ensuremath{\prec}}% \DefineCharacter{8827}{227B}{\ensuremath{\succ}}% \DefineCharacter{8828}{227C}{\ensuremath{\preccurlyeq}}% \DefineCharacter{8829}{227D}{\ensuremath{\succcurlyeq}}% \DefineCharacter{8830}{227E}{\ensuremath{\precapprox}}% \DefineCharacter{8831}{227F}{\ensuremath{\succapprox}}% \DefineCharacter{8832}{2280}{\ensuremath{\not\prec}}% \DefineCharacter{8833}{2281}{\ensuremath{\not\succ}}% \DefineCharacter{8834}{2282}{\ensuremath{\subset}}% \DefineCharacter{8835}{2283}{\ensuremath{\supset}}% \DefineCharacter{8836}{2284}{\ensuremath{\not\subset}}% \DefineCharacter{8837}{2285}{\ensuremath{\not\supset}}% \DefineCharacter{8838}{2286}{\ensuremath{\subseteq}}% \DefineCharacter{8839}{2287}{\ensuremath{\supseteq}}% \DefineCharacter{8840}{2288}{\ensuremath{\not\subseteq}}% \DefineCharacter{8841}{2289}{\ensuremath{\not\supseteq}}% \DefineCharacter{8842}{228A}{\ensuremath{\subsetneq}}% \DefineCharacter{8843}{228B}{\ensuremath{\supsetneq}}% \DefineCharacter{8846}{228E}{\ensuremath{\uplus}}% \DefineCharacter{8847}{228F}{\ensuremath{\sqsubset}}% \DefineCharacter{8848}{2290}{\ensuremath{\sqsupset}}% \DefineCharacter{8849}{2291}{\ensuremath{\sqsubseteq}}% \DefineCharacter{8850}{2292}{\ensuremath{\sqsupseteq}}% \DefineCharacter{8851}{2293}{\ensuremath{\sqcap}}% \DefineCharacter{8852}{2294}{\ensuremath{\sqcup}}% \DefineCharacter{8853}{2295}{\ensuremath{\oplus}}% \DefineCharacter{8854}{2296}{\ensuremath{\ominus}}% \DefineCharacter{8855}{2297}{\ensuremath{\otimes}}% \DefineCharacter{8856}{2298}{\ifmmode \oslash\else \o\fi}% \DefineCharacter{8857}{2299}{\ensuremath{\odot}}% \DefineCharacter{8858}{229A}{\ensuremath{\circledcirc}}% \DefineCharacter{8859}{229B}{\ensuremath{\circledast}}% \DefineCharacter{8861}{229D}{\ensuremath{\circleddash}}% \DefineCharacter{8862}{229E}{\ensuremath{\boxplus}}% \DefineCharacter{8863}{229F}{\ensuremath{\boxminus}}% \DefineCharacter{8864}{22A0}{\ensuremath{\boxtimes}}% \DefineCharacter{8865}{22A1}{\ensuremath{\boxdot}}% \DefineCharacter{8866}{22A2}{\ensuremath{\vdash}}% \DefineCharacter{8867}{22A3}{\ensuremath{\dashv}}% \DefineCharacter{8868}{22A4}{\ensuremath{\top}}% \DefineCharacter{8869}{22A5}{\ensuremath{\perp}}% \DefineCharacter{8871}{22A7}{\ensuremath{\models}}% \DefineCharacter{8872}{22A8}{\ensuremath{\vDash}}% \DefineCharacter{8873}{22A9}{\ensuremath{\Vdash}}% \DefineCharacter{8874}{22AA}{\ensuremath{\Vvdash}}% \DefineCharacter{8875}{22AB}{\ensuremath{\VDash}}% \DefineCharacter{8876}{22AC}{\ensuremath{\nvdash}}% \DefineCharacter{8877}{22AD}{\ensuremath{\nvDash}}% \DefineCharacter{8878}{22AE}{\ensuremath{\nVdash}}% \DefineCharacter{8879}{22AF}{\ensuremath{\nVDash}}% \DefineCharacter{8882}{22B2}{\ensuremath{\vartriangleleft}}% \DefineCharacter{8883}{22B3}{\ensuremath{\vartriangleright}}% \DefineCharacter{8884}{22B4}{\ensuremath{\trianglelefteq}}% \DefineCharacter{8885}{22B5}{\ensuremath{\trianglerighteq}}% \DefineCharacter{8886}{22B6}{\ensuremath{\origof}}% \DefineCharacter{8887}{22B7}{\ensuremath{\imof}}% \DefineCharacter{8888}{22B8}{\ensuremath{\multimap}}% \DefineCharacter{8889}{22B9}{\ensuremath{\Elhercon}}% \DefineCharacter{8890}{22BA}{\ensuremath{\intercal}}% \DefineCharacter{8891}{22BB}{\ensuremath{\veebar}}% \DefineCharacter{8892}{22BC}{\ensuremath{\barwedge}}% \DefineCharacter{8894}{22BE}{\ensuremath{\ElangNINETY}}% \DefineCharacter{8896}{22C0}{\ensuremath{\Elxwedge}}% \DefineCharacter{8897}{22C1}{\ensuremath{\Elxvee}}% \DefineCharacter{8898}{22C2}{\ensuremath{\bigcap}}% \DefineCharacter{8899}{22C3}{\ensuremath{\bigcup}}% \DefineCharacter{8900}{22C4}{\ensuremath{\diamond}}% \DefineCharacter{8901}{22C5}{\ensuremath{\cdot}}% \DefineCharacter{8902}{22C6}{\ensuremath{\star}}% \DefineCharacter{8903}{22C7}{\ensuremath{\divideontimes}}% \DefineCharacter{8904}{22C8}{\ensuremath{\bowtie}}% \DefineCharacter{8905}{22C9}{\ensuremath{\ltimes}}% \DefineCharacter{8906}{22CA}{\ensuremath{\rtimes}}% \DefineCharacter{8907}{22CB}{\ensuremath{\leftthreetimes}}% \DefineCharacter{8908}{22CC}{\ensuremath{\rightthreetimes}}% \DefineCharacter{8909}{22CD}{\ensuremath{\backsimeq}}% \DefineCharacter{8910}{22CE}{\ensuremath{\curlyvee}}% \DefineCharacter{8911}{22CF}{\ensuremath{\curlywedge}}% \DefineCharacter{8912}{22D0}{\ensuremath{\Subset}}% \DefineCharacter{8913}{22D1}{\ensuremath{\Supset}}% \DefineCharacter{8914}{22D2}{\ensuremath{\Cap}}% \DefineCharacter{8915}{22D3}{\ensuremath{\Cup}}% \DefineCharacter{8916}{22D4}{\ensuremath{\pitchfork}}% \DefineCharacter{8918}{22D6}{\ensuremath{\lessdot}}% \DefineCharacter{8919}{22D7}{\ensuremath{\gtrdot}}% \DefineCharacter{8920}{22D8}{\ensuremath{\lll}}% \DefineCharacter{8921}{22D9}{\ensuremath{\ggg}}% \DefineCharacter{8922}{22DA}{\ensuremath{\lesseqgtr}}% \DefineCharacter{8923}{22DB}{\ensuremath{\gtreqless}}% \DefineCharacter{8924}{22DC}{\ensuremath{\eqslantless}}% \DefineCharacter{8925}{22DD}{\ensuremath{\eqslantgtr}}% \DefineCharacter{8926}{22DE}{\ensuremath{\curlyeqprec}}% \DefineCharacter{8927}{22DF}{\ensuremath{\curlyeqsucc}}% \DefineCharacter{8930}{22E2}{\ensuremath{\not\sqsubseteq}}% \DefineCharacter{8931}{22E3}{\ensuremath{\not\sqsupseteq}}% \DefineCharacter{8934}{22E6}{\ensuremath{\lnsim}}% \DefineCharacter{8935}{22E7}{\ensuremath{\gnsim}}% \DefineCharacter{8936}{22E8}{\ensuremath{\precnapprox}}% \DefineCharacter{8937}{22E9}{\ensuremath{\succnsim}}% \DefineCharacter{8938}{22EA}{\ensuremath{\ntriangleleft}}% \DefineCharacter{8939}{22EB}{\ensuremath{\ntriangleright}}% \DefineCharacter{8940}{22EC}{\ensuremath{\ntrianglelefteq}}% \DefineCharacter{8941}{22ED}{\ensuremath{\ntrianglerighteq}}% \DefineCharacter{8942}{22EE}{\ensuremath{\vdots}}% \DefineCharacter{8943}{22EF}{\ensuremath{\cdots}}% \DefineCharacter{8944}{22F0}{\ensuremath{\zutdot}}% \DefineCharacter{8945}{22F1}{\ensuremath{\ddots}}% \DefineCharacter{8966}{2306}{\ensuremath{\doublebarwedge}}% \DefineCharacter{8968}{2308}{\ensuremath{\lceil}}% \DefineCharacter{8969}{2309}{\ensuremath{\rceil}}% \DefineCharacter{8970}{230A}{\ensuremath{\lfloor}}% \DefineCharacter{8971}{230B}{\ensuremath{\rfloor}}% \DefineCharacter{8972}{230C}{\MISSING{drcrop}}% \DefineCharacter{8973}{230D}{\MISSING{dlcrop}}% \DefineCharacter{8974}{230E}{\MISSING{urcrop}}% \DefineCharacter{8975}{230F}{\MISSING{ulcrop}}% \DefineCharacter{8981}{2315}{\ensuremath{\MISSING{telrec}}}% \DefineCharacter{8982}{2316}{\ensuremath{\mathchar"2208}}% \DefineCharacter{8988}{231C}{\ensuremath{\ulcorner}}% \DefineCharacter{8989}{231D}{\ensuremath{\urcorner}}% \DefineCharacter{8990}{231E}{\ensuremath{\llcorner}}% \DefineCharacter{8991}{231F}{\ensuremath{\lrcorner}}% \DefineCharacter{8994}{2322}{\ensuremath{\frown}}% \DefineCharacter{8995}{2323}{\ensuremath{\smile}}% \DefineCharacter{9251}{2423}{\textvisiblespace}% \DefineCharacter{9472}{2500}{\MISSING{boxh}}% \DefineCharacter{9474}{2502}{\MISSING{boxv}}% \DefineCharacter{9484}{250C}{\MISSING{boxdr}}% \DefineCharacter{9488}{2510}{\MISSING{boxdl}}% \DefineCharacter{9492}{2514}{\MISSING{boxur}}% \DefineCharacter{9496}{2518}{\MISSING{boxul}}% \DefineCharacter{9500}{251C}{\MISSING{boxvr}}% \DefineCharacter{9508}{2524}{\MISSING{boxvl}}% \DefineCharacter{9516}{252C}{\MISSING{boxhd}}% \DefineCharacter{9524}{2534}{\MISSING{boxhu}}% \DefineCharacter{9532}{253C}{\MISSING{boxvh}}% \DefineCharacter{9552}{2550}{\MISSING{boxH}}% \DefineCharacter{9553}{2551}{\MISSING{boxV}}% \DefineCharacter{9554}{2552}{\MISSING{boxDR}}% \DefineCharacter{9555}{2553}{\MISSING{boxDr}}% \DefineCharacter{9556}{2554}{\MISSING{boxdR}}% \DefineCharacter{9557}{2555}{\MISSING{boxDL}}% \DefineCharacter{9558}{2556}{\MISSING{boxdL}}% \DefineCharacter{9559}{2557}{\MISSING{boxDl}}% \DefineCharacter{9560}{2558}{\MISSING{boxUR}}% \DefineCharacter{9561}{2559}{\MISSING{boxuR}}% \DefineCharacter{9562}{255A}{\MISSING{boxUr}}% \DefineCharacter{9563}{255B}{\MISSING{boxUL}}% \DefineCharacter{9564}{255C}{\MISSING{boxUl}}% \DefineCharacter{9565}{255D}{\MISSING{boxuL}}% \DefineCharacter{9566}{255E}{\MISSING{boxvR}}% \DefineCharacter{9567}{255F}{\MISSING{boxVR}}% \DefineCharacter{9568}{2560}{\MISSING{boxVr}}% \DefineCharacter{9569}{2561}{\MISSING{boxvL}}% \DefineCharacter{9570}{2562}{\MISSING{boxVL}}% \DefineCharacter{9571}{2563}{\MISSING{boxVl}}% \DefineCharacter{9572}{2564}{\MISSING{boxhD}}% \DefineCharacter{9573}{2565}{\MISSING{boxHD}}% \DefineCharacter{9574}{2566}{\MISSING{boxHd}}% \DefineCharacter{9575}{2567}{\MISSING{boxhU}}% \DefineCharacter{9576}{2568}{\MISSING{boxHU}}% \DefineCharacter{9577}{2569}{\MISSING{boxHu}}% \DefineCharacter{9578}{256A}{\MISSING{boxvH}}% \DefineCharacter{9579}{256B}{\MISSING{boxVH}}% \DefineCharacter{9580}{256C}{\MISSING{boxVh}}% \DefineCharacter{9600}{2580}{\MISSING{uhblk}}% \DefineCharacter{9604}{2584}{\MISSING{lhblk}}% \DefineCharacter{9608}{2588}{\MISSING{block}}% \DefineCharacter{9617}{2591}{\MISSING{blk14}}% \DefineCharacter{9618}{2592}{\MISSING{blk12}}% \DefineCharacter{9619}{2593}{\MISSING{blk34}}% \DefineCharacter{9632}{25A0}{\ensuremath{\blacksquare}}% \DefineCharacter{9633}{25A1}{\ensuremath{\square}}% \DefineCharacter{9642}{25AA}{\ensuremath{\blacksquare}}% \DefineCharacter{9645}{25AD}{\ensuremath{\fbox{~~}}}% \DefineCharacter{9646}{25AE}{\MISSING{marker}}% \DefineCharacter{9651}{25B3}{\ensuremath{\bigtriangleup}}% \DefineCharacter{9652}{25B4}{\ensuremath{\blacktriangle}}% \DefineCharacter{9653}{25B5}{\ensuremath{\vartriangle}}% \DefineCharacter{9656}{25B8}{\ensuremath{\blacktriangleright}}% \DefineCharacter{9657}{25B9}{\ensuremath{\triangleright}}% \DefineCharacter{9661}{25BD}{\ensuremath{\bigtriangledown}}% \DefineCharacter{9662}{25BE}{\ensuremath{\blacktriangledown}}% \DefineCharacter{9663}{25BF}{\ensuremath{\triangledown}}% \DefineCharacter{9666}{25C2}{\ensuremath{\blacktriangleleft}}% \DefineCharacter{9667}{25C3}{\ensuremath{\triangleleft}}% \DefineCharacter{9674}{25CA}{\ensuremath{\lozenge}}% \DefineCharacter{9675}{25CB}{\ensuremath{\circ}}% \DefineCharacter{9711}{25EF}{\ensuremath{\bigcirc}}% \DefineCharacter{9733}{2605}{\ensuremath{\bigstar}}% \DefineCharacter{9742}{260E}{\ding{37}}% \DefineCharacter{9792}{2640}{\MISSING{female}}% \DefineCharacter{9794}{2642}{\MISSING{male}}% \DefineCharacter{9824}{2660}{\ensuremath{\spadesuit}}% \DefineCharacter{9827}{2663}{\ensuremath{\clubsuit}}% \DefineCharacter{9829}{2665}{\ensuremath{\heartsuit}}% \DefineCharacter{9830}{2666}{\ensuremath{\diamondsuit}}% \DefineCharacter{9833}{2669}{\textmusicalnote}% \DefineCharacter{9837}{266D}{\ensuremath{\flat}}% \DefineCharacter{9838}{266E}{\ensuremath{\natural}}% \DefineCharacter{9839}{266F}{\ensuremath{\sharp}}% \DefineCharacter{10003}{2713}{\ensuremath{\checkmark}}% \DefineCharacter{10007}{2717}{\MISSING{ballotcross}}% \DefineCharacter{10016}{2720}{\ensuremath{\maltese}}% \DefineCharacter{10022}{2726}{\ensuremath{\blacklozenge}}% \DefineCharacter{10038}{2736}{\MISSING{sext}}% \DefineCharacter{12296}{3008}{\ensuremath{\langle}}% \DefineCharacter{12297}{3009}{\ensuremath{\rangle}}% \DefineCharacter{12298}{300A}{\ensuremath{\Elzldang}}% \DefineCharacter{12299}{300B}{\ensuremath{\Elzrdang}}% \DefineCharacter{12312}{3018}{\ensuremath{\Elloang}}% \DefineCharacter{12313}{3019}{\ensuremath{\Elroang}}% \DefineCharacter{12314}{301A}{\ensuremath{\lobrk}}% \DefineCharacter{12315}{301B}{\ensuremath{\robrk}}% \DefineCharacter{0}{???1}{\MISSING{leftparengtr}}% \DefineCharacter{0}{???2}{\ifmmode \jmath\else \j\fi}% \DefineCharacter{0}{???3}{fj}% \DefineCharacter{0}{???4}{\ensuremath{\preceq}}% \DefineCharacter{57856}{E200}{\ensuremath{\Longleftarrow}}% \DefineCharacter{57857}{E201}{\ensuremath{\longleftarrow}}% \DefineCharacter{57858}{E202}{\ensuremath{\Longleftrightarrow}}% \DefineCharacter{57859}{E203}{\ensuremath{\longleftrightarrow}}% \DefineCharacter{57860}{E204}{\ensuremath{\Longrightarrow}}% \DefineCharacter{57861}{E205}{\ensuremath{\longrightarrow}}% \DefineCharacter{57864}{E208}{\ensuremath{\longmapsto}}% \DefineCharacter{57866}{E20A}{\ensuremath{\Elswarhk}}% \DefineCharacter{57867}{E20B}{\ensuremath{\Elsearhk}}% \DefineCharacter{57868}{E20C}{\ensuremath{\Elnwarhk}}% \DefineCharacter{57869}{E20D}{\ensuremath{\Elnearhk}}% \DefineCharacter{57870}{E20E}{\ensuremath{\Elnesear}}% \DefineCharacter{57872}{E210}{\ensuremath{\Elswnwar}}% \DefineCharacter{57873}{E211}{\ensuremath{\Elnwnear}}% \DefineCharacter{57874}{E212}{\ensuremath{\ElMap}}% \DefineCharacter{57876}{E214}{\ensuremath{\Ellfisht}}% \DefineCharacter{57877}{E215}{\ensuremath{\Elrfisht}}% \DefineCharacter{57878}{E216}{\ensuremath{\zduarr}}% \DefineCharacter{57879}{E217}{\ensuremath{\ElzduharTWO}}% \DefineCharacter{57880}{E218}{\ensuremath{\ElzudharTWO}}% \DefineCharacter{57881}{E219}{\ensuremath{\Elzarrdr}}% \DefineCharacter{57882}{E21A}{\ensuremath{\Elzarrdl}}% \DefineCharacter{57884}{E21C}{\ensuremath{\Elzrarrc}}% \DefineCharacter{57885}{E21D}{\ensuremath{\Elznrarrc}}% \DefineCharacter{57937}{E251}{\ensuremath{\amalg}}% \DefineCharacter{57945}{E259}{\ensuremath{\Eliprod}}% \DefineCharacter{57946}{E25A}{\ensuremath{\Eldoplus}}% \DefineCharacter{57947}{E25B}{\ensuremath{\Eldminus}}% \DefineCharacter{57948}{E25C}{\ensuremath{\Elzoplusl}}% \DefineCharacter{57949}{E25D}{\ensuremath{\Elzoplusr}}% \DefineCharacter{57950}{E25E}{\ensuremath{\Elzotimsl}}% \DefineCharacter{57952}{E260}{\ensuremath{\Elzplims}}% \DefineCharacter{57989}{E285}{\ensuremath{\Elzodiv}}% \DefineCharacter{58001}{E291}{\ensuremath{\Elrpargt}}% \DefineCharacter{58002}{E292}{\ensuremath{<\kern-0.58em(}}% \DefineCharacter{58003}{E293}{\ensuremath{\rmoustache}}% \DefineCharacter{58004}{E294}{\ensuremath{\lmoustache}}% \DefineCharacter{58017}{E2A1}{\ensuremath{\gvertneqq}}% \DefineCharacter{58018}{E2A2}{\ensuremath{\lnapprox}}% \DefineCharacter{58020}{E2A4}{\ensuremath{\lvertneqq}}% \DefineCharacter{58022}{E2A6}{\ensuremath{\not\geq}}% \DefineCharacter{58023}{E2A7}{\ensuremath{\not\leq}}% \DefineCharacter{58026}{E2AA}{\ensuremath{\nshortmid}}% \DefineCharacter{58027}{E2AB}{\ensuremath{\nshortparallel}}% \DefineCharacter{58035}{E2B3}{\ensuremath{\precneqq}}% \DefineCharacter{58037}{E2B5}{\ensuremath{\succneqq}}% \DefineCharacter{58040}{E2B8}{\ensuremath{\varsubsetneqq}}% \DefineCharacter{58041}{E2B9}{\ensuremath{\varsubsetneq}}% \DefineCharacter{58042}{E2BA}{\ensuremath{\varsupsetneq}}% \DefineCharacter{58043}{E2BB}{\ensuremath{\varsupsetneqq}}% \DefineCharacter{58044}{E2BC}{\ensuremath{\not\apid}}% \DefineCharacter{58067}{E2D3}{\ensuremath{\emptyset}}% \DefineCharacter{58068}{E2D4}{\ensuremath{\jmath}}% \DefineCharacter{58069}{E2D5}{\ensuremath{\hslash}}% \DefineCharacter{58113}{E301}{\ensuremath{\shortmid}}% \DefineCharacter{58114}{E302}{\ensuremath{\shortparallel}}% \DefineCharacter{58115}{E303}{\ensuremath{\smallsmile}}% \DefineCharacter{58118}{E306}{\ensuremath{\thickapprox}}% \DefineCharacter{58121}{E309}{\ensuremath{\EleDDot}}% \DefineCharacter{58123}{E30B}{\ensuremath{\Elsiml}}% \DefineCharacter{58124}{E30C}{\ensuremath{\Elsimg}}% \DefineCharacter{58125}{E30D}{\ensuremath{\ElVbar}}% \DefineCharacter{58126}{E30E}{\ensuremath{\Colon}}% \DefineCharacter{58213}{E365}{\ensuremath{\Leftrightarrow}}% \DefineCharacter{58222}{E36E}{\ensuremath{\ElAnd}}% \DefineCharacter{58225}{E371}{\ensuremath{''''}}% \DefineCharacter{58226}{E372}{\ensuremath{\Elzmstpos}}% \DefineCharacter{58228}{E374}{\ensuremath{\ElAnd}}% \DefineCharacter{58229}{E375}{\ensuremath{\ElOr}}% \DefineCharacter{58231}{E377}{\ensuremath{\Elzsqint}}% \DefineCharacter{58233}{E379}{\ensuremath{\Elloang}}% \DefineCharacter{58234}{E37A}{\ensuremath{\Elroang}}% \DefineCharacter{58241}{E381}{\ensuremath{\Elzparl}}% \DefineCharacter{58261}{E395}{\ensuremath{\Elzeint}}% \DefineCharacter{58374}{E406}{\ensuremath{\Elseswar}}% \DefineCharacter{58379}{E40B}{\ensuremath{\Elovbar}}% \DefineCharacter{58381}{E40D}{\ensuremath{\Elzotimsr}}% \DefineCharacter{58385}{E411}{\ensuremath{\gnapprox}}% \DefineCharacter{58386}{E412}{\ensuremath{\not\preceq}}% \DefineCharacter{58387}{E413}{\ensuremath{\not\succeq}}% \DefineCharacter{58397}{E41D}{\ensuremath{\circledS}}% \DefineCharacter{58400}{E420}{\ensuremath{\backepsilon}}% \DefineCharacter{58401}{E421}{\ensuremath{\geqslant}}% \DefineCharacter{58405}{E425}{\ensuremath{\leqslant}}% \DefineCharacter{58406}{E426}{\ensuremath{\smallfrown}}% \DefineCharacter{58409}{E429}{\ensuremath{\thicksim}}% \DefineCharacter{58492}{E47C}{\ensuremath{\mathfrak{A}}}% \DefineCharacter{58493}{E47D}{\ensuremath{\mathfrak{B}}}% \DefineCharacter{58494}{E47E}{\ensuremath{\mathfrak{C}}}% \DefineCharacter{58495}{E47F}{\ensuremath{\mathfrak{D}}}% \DefineCharacter{58496}{E480}{\ensuremath{\mathfrak{E}}}% \DefineCharacter{58497}{E481}{\ensuremath{\mathfrak{F}}}% \DefineCharacter{58498}{E482}{\ensuremath{\mathfrak{G}}}% \DefineCharacter{58499}{E483}{\ensuremath{\mathfrak{H}}}% \DefineCharacter{58500}{E484}{\ensuremath{\mathfrak{I}}}% \DefineCharacter{58501}{E485}{\ensuremath{\mathfrak{J}}}% \DefineCharacter{58502}{E486}{\ensuremath{\mathfrak{K}}}% \DefineCharacter{58503}{E487}{\ensuremath{\mathfrak{L}}}% \DefineCharacter{58504}{E488}{\ensuremath{\mathfrak{M}}}% \DefineCharacter{58505}{E489}{\ensuremath{\mathfrak{N}}}% \DefineCharacter{58506}{E48A}{\ensuremath{\mathfrak{O}}}% \DefineCharacter{58507}{E48B}{\ensuremath{\mathfrak{P}}}% \DefineCharacter{58508}{E48C}{\ensuremath{\mathfrak{Q}}}% \DefineCharacter{58509}{E48D}{\ensuremath{\mathfrak{R}}}% \DefineCharacter{58510}{E48E}{\ensuremath{\mathfrak{S}}}% \DefineCharacter{58511}{E48F}{\ensuremath{\mathfrak{T}}}% \DefineCharacter{58512}{E490}{\ensuremath{\mathfrak{U}}}% \DefineCharacter{58513}{E491}{\ensuremath{\mathfrak{V}}}% \DefineCharacter{58514}{E492}{\ensuremath{\mathfrak{W}}}% \DefineCharacter{58515}{E493}{\ensuremath{\mathfrak{X}}}% \DefineCharacter{58516}{E494}{\ensuremath{\mathfrak{Y}}}% \DefineCharacter{58517}{E495}{\ensuremath{\mathfrak{a}}}% \DefineCharacter{58518}{E496}{\ensuremath{\mathfrak{b}}}% \DefineCharacter{58519}{E497}{\ensuremath{\mathfrak{c}}}% \DefineCharacter{58520}{E498}{\ensuremath{\mathfrak{d}}}% \DefineCharacter{58521}{E499}{\ensuremath{\mathfrak{e}}}% \DefineCharacter{58522}{E49A}{\ensuremath{\mathfrak{f}}}% \DefineCharacter{58523}{E49B}{\ensuremath{\mathfrak{g}}}% \DefineCharacter{58524}{E49C}{\ensuremath{\mathfrak{h}}}% \DefineCharacter{58525}{E49D}{\ensuremath{\mathfrak{i}}}% \DefineCharacter{58526}{E49E}{\ensuremath{\mathfrak{j}}}% \DefineCharacter{58527}{E49F}{\ensuremath{\mathfrak{k}}}% \DefineCharacter{58528}{E4A0}{\ensuremath{\mathfrak{l}}}% \DefineCharacter{58529}{E4A1}{\ensuremath{\mathfrak{m}}}% \DefineCharacter{58530}{E4A2}{\ensuremath{\mathfrak{n}}}% \DefineCharacter{58531}{E4A3}{\ensuremath{\mathfrak{o}}}% \DefineCharacter{58532}{E4A4}{\ensuremath{\mathfrak{p}}}% \DefineCharacter{58533}{E4A5}{\ensuremath{\mathfrak{q}}}% \DefineCharacter{58534}{E4A6}{\ensuremath{\mathfrak{r}}}% \DefineCharacter{58535}{E4A7}{\ensuremath{\mathfrak{s}}}% \DefineCharacter{58536}{E4A8}{\ensuremath{\mathfrak{t}}}% \DefineCharacter{58537}{E4A9}{\ensuremath{\mathfrak{u}}}% \DefineCharacter{58538}{E4AA}{\ensuremath{\mathfrak{v}}}% \DefineCharacter{58539}{E4AB}{\ensuremath{\mathfrak{w}}}% \DefineCharacter{58540}{E4AC}{\ensuremath{\mathfrak{x}}}% \DefineCharacter{58541}{E4AD}{\ensuremath{\mathfrak{y}}}% \DefineCharacter{58542}{E4AE}{\ensuremath{\mathfrak{z}}}% \DefineCharacter{58543}{E4AF}{\ensuremath{\mathbb{A}}}% \DefineCharacter{58544}{E4B0}{\ensuremath{\mathbb{B}}}% \DefineCharacter{58545}{E4B1}{\ensuremath{\mathbb{D}}}% \DefineCharacter{58546}{E4B2}{\ensuremath{\mathbb{E}}}% \DefineCharacter{58547}{E4B3}{\ensuremath{\mathbb{F}}}% \DefineCharacter{58548}{E4B4}{\ensuremath{\mathbb{G}}}% \DefineCharacter{58549}{E4B5}{\ensuremath{\mathbb{H}}}% \DefineCharacter{58550}{E4B6}{\ensuremath{\mathbb{I}}}% \DefineCharacter{58551}{E4B7}{\ensuremath{\mathbb{J}}}% \DefineCharacter{58552}{E4B8}{\ensuremath{\mathbb{K}}}% \DefineCharacter{58553}{E4B9}{\ensuremath{\mathbb{L}}}% \DefineCharacter{58554}{E4BA}{\ensuremath{\mathbb{M}}}% \DefineCharacter{58555}{E4BB}{\ensuremath{\mathbb{N}}}% \DefineCharacter{58556}{E4BC}{\ensuremath{\mathbb{O}}}% \DefineCharacter{58557}{E4BD}{\ensuremath{\mathbb{S}}}% \DefineCharacter{58558}{E4BE}{\ensuremath{\mathbb{T}}}% \DefineCharacter{58559}{E4BF}{\ensuremath{\mathbb{U}}}% \DefineCharacter{58560}{E4C0}{\ensuremath{\mathbb{V}}}% \DefineCharacter{58561}{E4C1}{\ensuremath{\mathbb{W}}}% \DefineCharacter{58562}{E4C2}{\ensuremath{\mathbb{X}}}% \DefineCharacter{58563}{E4C3}{\ensuremath{\mathbb{Y}}}% \DefineCharacter{58564}{E4C4}{\ensuremath{\mathbb{Z}}}% \DefineCharacter{58565}{E4C5}{\ensuremath{\mathcal{A}}}% \DefineCharacter{58566}{E4C6}{\ensuremath{\mathcal{B}}}% \DefineCharacter{58567}{E4C7}{\ensuremath{\mathcal{C}}}% \DefineCharacter{58568}{E4C8}{\ensuremath{\mathcal{D}}}% \DefineCharacter{58569}{E4C9}{\ensuremath{\mathcal{E}}}% \DefineCharacter{58570}{E4CA}{\ensuremath{\mathcal{F}}}% \DefineCharacter{58571}{E4CB}{\ensuremath{\mathcal{G}}}% \DefineCharacter{58572}{E4CC}{\ensuremath{\mathcal{H}}}% \DefineCharacter{58573}{E4CD}{\ensuremath{\mathcal{I}}}% \DefineCharacter{58574}{E4CE}{\ensuremath{\mathcal{J}}}% \DefineCharacter{58575}{E4CF}{\ensuremath{\mathcal{K}}}% \DefineCharacter{58576}{E4D0}{\ensuremath{\mathcal{L}}}% \DefineCharacter{58577}{E4D1}{\ensuremath{\mathcal{M}}}% \DefineCharacter{58578}{E4D2}{\ensuremath{\mathcal{N}}}% \DefineCharacter{58579}{E4D3}{\ensuremath{\mathcal{O}}}% \DefineCharacter{58580}{E4D4}{\ensuremath{\mathcal{P}}}% \DefineCharacter{58581}{E4D5}{\ensuremath{\mathcal{Q}}}% \DefineCharacter{58582}{E4D6}{\ensuremath{\mathcal{R}}}% \DefineCharacter{58583}{E4D7}{\ensuremath{\mathcal{S}}}% \DefineCharacter{58584}{E4D8}{\ensuremath{\mathcal{T}}}% \DefineCharacter{58585}{E4D9}{\ensuremath{\mathcal{U}}}% \DefineCharacter{58586}{E4DA}{\ensuremath{\mathcal{V}}}% \DefineCharacter{58587}{E4DB}{\ensuremath{\mathcal{W}}}% \DefineCharacter{58588}{E4DC}{\ensuremath{\mathcal{X}}}% \DefineCharacter{58589}{E4DD}{\ensuremath{\mathcal{Y}}}% \DefineCharacter{58590}{E4DE}{\ensuremath{\mathcal{Z}}}% \DefineCharacter{58591}{E4DF}{\ensuremath{\mathcal{a}}}% \DefineCharacter{58592}{E4E0}{\ensuremath{\mathcal{b}}}% \DefineCharacter{58593}{E4E1}{\ensuremath{\mathcal{c}}}% \DefineCharacter{58594}{E4E2}{\ensuremath{\mathcal{d}}}% \DefineCharacter{58595}{E4E3}{\ensuremath{\mathcal{e}}}% \DefineCharacter{58596}{E4E4}{\ensuremath{\mathcal{f}}}% \DefineCharacter{58597}{E4E5}{\ensuremath{\mathcal{g}}}% \DefineCharacter{58598}{E4E6}{\ensuremath{\mathcal{h}}}% \DefineCharacter{58599}{E4E7}{\ensuremath{\mathcal{i}}}% \DefineCharacter{58600}{E4E8}{\ensuremath{\mathcal{j}}}% \DefineCharacter{58601}{E4E9}{\ensuremath{\mathcal{k}}}% \DefineCharacter{58602}{E4EA}{\ensuremath{\mathcal{l}}}% \DefineCharacter{58603}{E4EB}{\ensuremath{\mathcal{m}}}% \DefineCharacter{58604}{E4EC}{\ensuremath{\mathcal{n}}}% \DefineCharacter{58605}{E4ED}{\ensuremath{\mathcal{o}}}% \DefineCharacter{58606}{E4EE}{\ensuremath{\mathcal{p}}}% \DefineCharacter{58607}{E4EF}{\ensuremath{\mathcal{q}}}% \DefineCharacter{58608}{E4F0}{\ensuremath{\mathcal{s}}}% \DefineCharacter{58609}{E4F1}{\ensuremath{\mathcal{t}}}% \DefineCharacter{58610}{E4F2}{\ensuremath{\mathcal{u}}}% \DefineCharacter{58611}{E4F3}{\ensuremath{\mathcal{v}}}% \DefineCharacter{58612}{E4F4}{\ensuremath{\mathcal{w}}}% \DefineCharacter{58613}{E4F5}{\ensuremath{\mathcal{x}}}% \DefineCharacter{58614}{E4F6}{\ensuremath{\mathcal{y}}}% \DefineCharacter{58615}{E4F7}{\ensuremath{\mathcal{z}}}% \DefineCharacter{58616}{E4F8}{-}% \DefineCharacter{58625}{E501}{\ensuremath{\blacklozenge}}% \DefineCharacter{58638}{E50E}{\ensuremath{\ElOr}}% \DefineCharacter{59460}{E844}{\ensuremath{\smallsetminus}}% \DefineCharacter{64256}{FB00}{ff}% \DefineCharacter{64257}{FB01}{fi}% \DefineCharacter{64258}{FB02}{fl}% \DefineCharacter{64259}{FB03}{ffi}% \DefineCharacter{64260}{FB04}{ffl}% \DefineCharacter{65128}{FE68}{\ensuremath{\smallsetminus}}% \let\DEBUG\@gobble % \end{macrocode} % \section{Startup} % \begin{macrocode} \def\endFOT{%\let\normalcolor\relax \ifnum\col@number>1 \end{multicols} \fi \enddocument} \def\FOT#1{% \checkFOTversion{#1}% \@twosidetrue \hoffset-1in\voffset-1in \def\setnormal{% \let\fSize\pageFontSize \let\LineSpacing\pageLineSpacing \let\fPosture\pageFontPosture \let\fProportionateWidth\pageFontProportionateWidth \let\fWeight\pageFontWeight \let\fFamName\pagefFamName } \def\headrulewidth{0\p@} \def\footrulewidth{0\p@} \raggedbottom \clubpenalty=4000 \widowpenalty=2000 \fancyhf{} \def\familydefault{ptm} \fontfamily{\familydefault}\selectfont \pagenumbering{arabic} \input{isoents.tex} % \end{macrocode} % Individual users or projects can override anything in this % setup with a configuration file, loaded here, called % \texttt{jadetex.cfg}. % \begin{macrocode} \ifLabelElements\typeout{Elements will be labelled}\else \typeout{Elements will NOT be labelled}\fi \nonstopmode \Mathcount0 % \end{macrocode} % We do not put out a |\begin{document}|, as that would fix % the page size in advance; we delay that for the first % page sequence. % \begin{macrocode} \let\default@color\current@color } \everyjob{% \typeout{JadeTeX \JadeTeXDate: \JadeTeXMajorVersion.\JadeTeXMinorVersion}% \InputIfFileExists{jadetex.cfg}{}{}% } \catcode`\^^M=10% % %<*dsssldef> \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}} \ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}} \ProvideTextCommandDefault{\textthreequarters}{\ensuremath{\frac34}} \ProvideTextCommandDefault{\textcent} {\TextSymbolUnavailable\textcent} \ProvideTextCommandDefault{\textyen} {\TextSymbolUnavailable\textyen} \ProvideTextCommandDefault{\textcurrency} {\TextSymbolUnavailable\textcurrency} \ProvideTextCommandDefault{\textbrokenbar} {\TextSymbolUnavailable\textbrokenbar} \providecommand{\mathdegree}{{\ensuremath{^\circ}} } \providecommand{\mathonesuperior}{{^1}} \providecommand{\mathtwosuperior}{{^2}} \providecommand{\maththreesuperior}{{^3}} \providecommand{\mathordmasculine}{\mathrm{^{\underline{o}}}} \providecommand{\mathordfeminine}{\mathrm{^{\underline{a}}}} \DeclareInputText{"0A0}{\nobreakspace} \DeclareInputMath{"0B0}{\mathdegree} \DeclareInputText{"0A1}{\textexclamdown} \DeclareInputMath{"0B1}{\ensuremath{\pm}} \DeclareInputText{"0A2}{\textcent} \DeclareInputMath{"0B2}{\mathtwosuperior} \DeclareInputText{"0B2}{\ensuremath{\mathtwosuperior}} \DeclareInputText{"0A3}{\pounds} \DeclareInputMath{"0B3}{\maththreesuperior} \DeclareInputText{"0B3}{\ensuremath{\maththreesuperior}} \DeclareInputText{"0A4}{\textcurrency} \DeclareInputText{"0B4}{\@tabacckludge'{}} \DeclareInputText{"0A5}{\textyen} \DeclareInputMath{"0B5}{\mu} \DeclareInputText{"0B5}{\textmu} \DeclareInputText{"0A6}{\textbrokenbar} \DeclareInputText{"0B6}{\P} \DeclareInputText{"0A7}{\S} \DeclareInputText{"0B7}{\textperiodcentered} \DeclareInputText{"0A8}{\"{}} \DeclareInputText{"0B8}{\c{}} \DeclareInputText{"0A9}{\copyright} \DeclareInputMath{"0B9}{\mathonesuperior} \DeclareInputMath{"0AA}{\mathordfeminine} \DeclareInputMath{"0BA}{\mathordmasculine} \DeclareInputText{"0B9}{\ensuremath{\mathonesuperior}} \DeclareInputText{"0AA}{\ensuremath{\mathordfeminine}} \DeclareInputText{"0BA}{\ensuremath{\mathordmasculine}} \DeclareInputText{"0AB}{\guillemotleft} \DeclareInputText{"0BB}{\guillemotright} \DeclareInputMath{"0AC}{\lnot} \DeclareInputText{"0AC}{\ensuremath{\lnot}} \DeclareInputText{"0BC}{\textonequarter} \DeclareInputText{"0AD}{\-} \DeclareInputText{"0BD}{\textonehalf} \DeclareInputText{"0AE}{\textregistered} \DeclareInputText{"0BE}{\textthreequarters} \DeclareInputText{"0AF}{\ifmmode\else\@tabacckludge={}\fi} \DeclareInputText{"0BF}{\textquestiondown} \DeclareInputText{"0C0}{\@tabacckludge`A} \DeclareInputText{"0D0}{\DH} \DeclareInputText{"0C1}{\@tabacckludge'A} \DeclareInputText{"0D1}{\~N} \DeclareInputText{"0C2}{\^A} \DeclareInputText{"0D2}{\@tabacckludge`O} \DeclareInputText{"0C3}{\~A} \DeclareInputText{"0D3}{\@tabacckludge'O} \DeclareInputText{"0C4}{\"A} \DeclareInputText{"0D4}{\^O} \DeclareInputText{"0C5}{\AA} \DeclareInputText{"0D5}{\~O} \DeclareInputText{"0C6}{\AE} \DeclareInputText{"0D6}{\"O} \DeclareInputText{"0C7}{\c C} \DeclareInputMath{"0D7}{\ensuremath{\times}} \DeclareInputText{"0C8}{\@tabacckludge`E} \DeclareInputText{"0D8}{\O} \DeclareInputText{"0C9}{\@tabacckludge'E} \DeclareInputText{"0D9}{\@tabacckludge`U} \DeclareInputText{"0CA}{\^E} \DeclareInputText{"0DA}{\@tabacckludge'U} \DeclareInputText{"0CB}{\"E} \DeclareInputText{"0DB}{\^U} \DeclareInputText{"0CC}{\@tabacckludge`I} \DeclareInputText{"0DC}{\"U} \DeclareInputText{"0CD}{\@tabacckludge'I} \DeclareInputText{"0DD}{\@tabacckludge'Y} \DeclareInputText{"0CE}{\^I} \DeclareInputText{"0DE}{\TH} \DeclareInputText{"0CF}{\"I} \DeclareInputText{"0DF}{\ss} \DeclareInputText{"0E0}{\@tabacckludge`a} \DeclareInputText{"0F0}{\dh} \DeclareInputText{"0E1}{\@tabacckludge'a} \DeclareInputText{"0F1}{\~n} \DeclareInputText{"0E2}{\^a} \DeclareInputText{"0F2}{\@tabacckludge`o} \DeclareInputText{"0E3}{\~a} \DeclareInputText{"0F3}{\@tabacckludge'o} \DeclareInputText{"0E4}{\"a} \DeclareInputText{"0F4}{\^o} \DeclareInputText{"0E5}{\aa} \DeclareInputText{"0F5}{\~o} \DeclareInputText{"0E6}{\ae} \DeclareInputText{"0F6}{\"o} \DeclareInputText{"0E7}{\c c} \DeclareInputMath{"0F7}{\ensuremath{\div}} \DeclareInputText{"0E8}{\@tabacckludge`e} \DeclareInputText{"0F8}{\o} \DeclareInputText{"0E9}{\@tabacckludge'e} \DeclareInputText{"0F9}{\@tabacckludge`u} \DeclareInputText{"0EA}{\^e} \DeclareInputText{"0FA}{\@tabacckludge'u} \DeclareInputText{"0EB}{\"e} \DeclareInputText{"0FB}{\^u} \DeclareInputText{"0EC}{\@tabacckludge`\i} \DeclareInputText{"0FC}{\"u} \DeclareInputText{"0ED}{\@tabacckludge'\i} \DeclareInputText{"0FD}{\@tabacckludge'y} \DeclareInputText{"0EE}{\^\i} \DeclareInputText{"0FE}{\th} \DeclareInputText{"0EF}{\"\i} \DeclareInputText{"0FF}{\"y} % %<*isoent> \expandafter\def\csname Entb.epsiv\endcsname{\ensuremath{\varepsilon}}% 025B% \expandafter\def\csname Entb.Delta\endcsname{\ensuremath{\Delta}}% 0394% \expandafter\def\csname Entb.Gamma\endcsname{\ensuremath{\Gamma}}% 0393% \expandafter\def\csname Entb.Theta\endcsname{\ensuremath{\Theta}}% 0398% \expandafter\def\csname Entb.Lambda\endcsname{\ensuremath{\Lambda}}% 039B% \expandafter\def\csname Entb.Xi\endcsname{\ensuremath{\Xi}}% 039E% \expandafter\def\csname Entb.Pi\endcsname{\ensuremath{\Pi}}% 03A0% \expandafter\def\csname Entb.Sigma\endcsname{\ensuremath{\Sigma}}% 03A3% \expandafter\def\csname Entb.Phi\endcsname{\ensuremath{\Phi}}% 03A6% \expandafter\def\csname Entb.Psi\endcsname{\ensuremath{\Psi}}% 03A8% \expandafter\def\csname Entb.Omega\endcsname{\ensuremath{\Omega}}% 03A9% \expandafter\def\csname Entb.alpha\endcsname{\ensuremath{\alpha}}% 03B1% \expandafter\def\csname Entb.beta\endcsname{\ensuremath{\beta}}% 03B2% \expandafter\def\csname Entb.gamma\endcsname{\ensuremath{\gamma}}% 03B3% \expandafter\def\csname Entb.delta\endcsname{\ensuremath{\delta}}% 03B4% \expandafter\def\csname Entb.epsi\endcsname{\ensuremath{\epsilon}}% 03B5% \expandafter\def\csname Entb.epsis\endcsname{\ensuremath{\epsilon}}% 03B5% \expandafter\def\csname Entb.zeta\endcsname{\ensuremath{\zeta}}% 03B6% \expandafter\def\csname Entb.eta\endcsname{\ensuremath{\eta}}% 03B7% \expandafter\def\csname Entb.thetas\endcsname{\ifmmode \theta\else \texttheta\fi}% 03B8% \expandafter\def\csname Entb.iota\endcsname{\ensuremath{\iota}}% 03B9% \expandafter\def\csname Entb.kappa\endcsname{\ensuremath{\kappa}}% 03BA% \expandafter\def\csname Entb.lambda\endcsname{\ensuremath{\lambda}}% 03BB% \expandafter\def\csname Entb.mu\endcsname{\ensuremath{\mu}}% 03BC% \expandafter\def\csname Entb.nu\endcsname{\ensuremath{\nu}}% 03BD% \expandafter\def\csname Entb.xi\endcsname{\ensuremath{\xi}}% 03BE% \expandafter\def\csname Entb.pi\endcsname{\ensuremath{\pi}}% 03C0% \expandafter\def\csname Entb.rho\endcsname{\ensuremath{\rho}}% 03C1% \expandafter\def\csname Entb.sigmav\endcsname{\ensuremath{\varsigma}}% 03C2% \expandafter\def\csname Entb.sigma\endcsname{\ensuremath{\sigma}}% 03C3% \expandafter\def\csname Entb.tau\endcsname{\ensuremath{\tau}}% 03C4% \expandafter\def\csname Entb.upsi\endcsname{\ensuremath{\upsilon}}% 03C5% \expandafter\def\csname Entb.phis\endcsname{\ensuremath{\phi}}% 03C6% \expandafter\def\csname Entb.chi\endcsname{\ensuremath{\chi}}% 03C7% \expandafter\def\csname Entb.psi\endcsname{\ensuremath{\psi}}% 03C8% \expandafter\def\csname Entb.omega\endcsname{\ensuremath{\omega}}% 03C9% \expandafter\def\csname Entb.thetav\endcsname{\ifmmode \vartheta\else \textvartheta\fi}% 03D1% \expandafter\def\csname Entb.Upsi\endcsname{\ensuremath{\Upsilon}}% 03D2% \expandafter\def\csname Entb.phiv\endcsname{\ensuremath{\varphi}}% 03D5% \expandafter\def\csname Entb.piv\endcsname{\ensuremath{\varpi}}% 03D6% \expandafter\def\csname Entb.gammad\endcsname{\ensuremath{\digamma}}% 03DC% \expandafter\def\csname Entb.kappav\endcsname{\ensuremath{\varkappa}}% 03F0% \expandafter\def\csname Entb.rhov\endcsname{\ensuremath{\varrho}}% 03F1% \def\EntYcirc{\ifmmode \hat{Y}\else \^{Y}\fi}% 0176% \def\Entycirc{\ifmmode \hat{y}\else \^{y}\fi}% 0177% \def\EntYuml{\ifmmode \ddot{Y}\else \"{Y}\fi}% 0178% \def\EntZacute{\ifmmode \acute{Z}\else \'{Z}\fi}% 0179% \def\Entzacute{\ifmmode \acute{z}\else \'{z}\fi}% 017A% \def\EntZdot{\ifmmode \dot{Z}\else \.{Z}\fi}% 017B% \def\Entzdot{\ifmmode \dot{z}\else \.{z}\fi}% 017C% \def\EntZcaron{\ifmmode \check{Z}\else \v{Z}\fi}% 017D% \def\Entzcaron{\ifmmode \check{z}\else \v{z}\fi}% 017E% \def\Entfnof{\ensuremath{f}}% 0192% \def\Entgacute{\ifmmode \acute{g}\else \'{g}\fi}% 01F5% \def\Entepsiv{\ensuremath{\varepsilon}}% 025B% \def\Entcaron{\ifmmode \check{}\else \v{}\fi}% 02C7% \def\Entbreve{\ifmmode \breve{}\else \u{}\fi}% 02D8% \def\Entdot{\ifmmode \dot{}\else \.{}\fi}% 02D9% \def\Entring{\ifmmode \mathring{}\else \r{}\fi}% 02DA% \def\Entogon{\k{}}% 02DB% \def\Entdblac{\ifmmode \mbox{\H{}}\else \H{}\fi}% 02DD% \def\Entdblac{\ifmmode \mbox{\H{}}\else \H{}\fi}% 02DD% \def\EntDiacriticalGrave{\ifmmode \grave{}\else \`{}\fi}% 0300% \def\EntDiacriticalAcute{\ifmmode \acute{}\else \'{}\fi}% 0301% \def\EntHat{\ifmmode \hat{}\else \^{}\fi}% 0302% \def\EntDiacriticalTilde{\ifmmode \tilde{}\else \~{}\fi}% 0303% \def\EntBreve{\ifmmode \breve{}\else \u{}\fi}% 0306% \def\EntDiacriticalDot{\ifmmode \dot{}\else \.{}\fi}% 0307% \def\EntDot{\ifmmode \ddot{}\else \"{}\fi}% 0308% \def\EntDoubleDot{\ifmmode \ddot{}\else \"{}\fi}% 0308% \def\EntDiacriticalDoubleAcute{\H{}}% 030B% \def\EntHacek{\ifmmode \check{}\else \v{}\fi}% 030C% \def\EntCedilla{\ifmmode \mbox{\c{}}\else \c{}\fi}% 0327% \def\EntAacgr{\ifmmode \acute{A}\else \'{A}\fi}% 0386% \def\EntEacgr{\ifmmode \acute{E}\else \'{E}\fi}% 0388% \def\EntEEacgr{\ifmmode \grave{H}\else \'{H}\fi}% 0389% \def\EntIacgr{\ifmmode \acute{I}\else \'{I}\fi}% 038A% \def\EntOacgr{\ifmmode \acute{O}\else \'{O}\fi}% 038C% \def\EntUacgr{\ensuremath{\acute{Y}}}% 038E% \def\EntOHacgr{\ensuremath{\acute{\Omega}}}% 038F% \def\Entidiagr{\ensuremath{\acute{\ddot{\iota}}}}% 0390% \def\EntAgr{\ensuremath{\Alpha}}% 0391% \def\EntBgr{\ensuremath{\Beta}}% 0392% \def\EntGamma{\ensuremath{\Gamma}}% 0393% \def\EntGgr{\ensuremath{\Gamma}}% 0393% \def\EntDelta{\ensuremath{\Delta}}% 0394% \def\EntDgr{\ensuremath{\Delta}}% 0394% \def\EntEgr{\ensuremath{\Epsilon}}% 0395% \def\EntZgr{\ensuremath{\Zeta}}% 0396% \def\EntEEgr{\ensuremath{\Eta}}% 0397% \def\EntTHgr{\ensuremath{\Theta}}% 0398% \def\EntTheta{\ensuremath{\Theta}}% 0398% \def\EntIgr{\ensuremath{\Iota}}% 0399% \def\EntKgr{\ensuremath{\Kappa}}% 039A% \def\EntLambda{\ensuremath{\Lambda}}% 039B% \def\EntLgr{\ensuremath{\Lambda}}% 039B% \def\EntMgr{\ensuremath{M}}% 039C% \def\EntNgr{\ensuremath{N}}% 039D% \def\EntXgr{\ensuremath{\Xi}}% 039E% \def\EntXi{\ensuremath{\Xi}}% 039E% \def\EntOgr{\ensuremath{O}}% 039F% \def\EntPgr{\ensuremath{\Pi}}% 03A0% \def\EntPi{\ensuremath{\Pi}}% 03A0% \def\EntRgr{\ensuremath{\Rho}}% 03A1% \def\EntSgr{\ensuremath{\Sigma}}% 03A3% \def\EntSigma{\ensuremath{\Sigma}}% 03A3% \def\EntTgr{\ensuremath{\Tau}}% 03A4% \def\EntUgr{\ensuremath{\Upsilon}}% 03A5% \def\EntPHgr{\ensuremath{\Phi}}% 03A6% \def\EntPhi{\ensuremath{\Phi}}% 03A6% \def\EntKHgr{\ensuremath{\Chi}}% 03A7% \def\EntPSgr{\ensuremath{\Psi}}% 03A8% \def\EntPsi{\ensuremath{\Psi}}% 03A8% \def\EntOHgr{\ensuremath{\Omega}}% 03A9% \def\EntOmega{\ensuremath{\Omega}}% 03A9% \def\EntIdigr{\ensuremath{\ddot{I}}}% 03AA% \def\EntUdigr{\ensuremath{\ddot{U}}}% 03AB% \def\Entaacgr{\ifmmode \acute{\alpha}\else \'{$\alpha$}\fi}% 03AC% \def\Enteacgr{\ensuremath{\acute{\epsilon}}}% 03AD% \def\Enteeacgr{\ensuremath{\acute{\eta}}}% 03AE% \def\Entiacgr{\ensuremath{\acute{\iota}}}% 03AF% \def\Entudiagr{\ensuremath{\ddot{\acute{\upsilon}}}}% 03B0% \def\Entagr{\ensuremath{\alpha}}% 03B1% \def\Entalpha{\ensuremath{\alpha}}% 03B1% \def\Entbeta{\ensuremath{\beta}}% 03B2% \def\Entbgr{\ensuremath{\beta}}% 03B2% \def\Entgamma{\ensuremath{\gamma}}% 03B3% \def\Entggr{\ensuremath{\gamma}}% 03B3% \def\Entdelta{\ensuremath{\delta}}% 03B4% \def\Entdgr{\ensuremath{\delta}}% 03B4% \def\Entepsi{\ensuremath{\epsilon}}% 03B5% \def\Entepsis{\ensuremath{\epsilon}}% 03B5% \def\Entegr{\ensuremath{\epsilon}}% 03B5% \def\Entzeta{\ensuremath{\zeta}}% 03B6% \def\Entzgr{\ensuremath{\zeta}}% 03B6% \def\Enteegr{\ensuremath{\eta}}% 03B7% \def\Enteta{\ensuremath{\eta}}% 03B7% \def\Enttheta{\ifmmode \theta\else \texttheta\fi}% 03B8% \def\Entthetas{\ifmmode \theta\else \texttheta\fi}% 03B8% \def\Entthgr{\ifmmode \theta\else \texttheta\fi}% 03B8% \def\Entigr{\ensuremath{\iota}}% 03B9% \def\Entiota{\ensuremath{\iota}}% 03B9% \def\Entkappa{\ensuremath{\kappa}}% 03BA% \def\Entkgr{\ensuremath{\kappa}}% 03BA% \def\Entlambda{\ensuremath{\lambda}}% 03BB% \def\Entlgr{\ensuremath{\lambda}}% 03BB% \def\Entmgr{\ensuremath{\mu}}% 03BC% \def\Entmu{\ensuremath{\mu}}% 03BC% \def\Entngr{\ensuremath{\nu}}% 03BD% \def\Entnu{\ensuremath{\nu}}% 03BD% \def\Entxgr{\ensuremath{\xi}}% 03BE% \def\Entxi{\ensuremath{\xi}}% 03BE% \def\Entogr{\ensuremath{o}}% 03BF% \def\Entomicron{\ensuremath{o}}% 03BF% \def\Entpgr{\ensuremath{\pi}}% 03C0% \def\Entpi{\ensuremath{\pi}}% 03C0% \def\Entrgr{\ensuremath{\rho}}% 03C1% \def\Entrho{\ensuremath{\rho}}% 03C1% \def\Entsfgr{\ensuremath{\varsigma}}% 03C2% \def\Entsigmav{\ensuremath{\varsigma}}% 03C2% \def\Entsgr{\ensuremath{\sigma}}% 03C3% \def\Entsigma{\ensuremath{\sigma}}% 03C3% \def\Enttau{\ensuremath{\tau}}% 03C4% \def\Enttgr{\ensuremath{\tau}}% 03C4% \def\Entugr{\ensuremath{\upsilon}}% 03C5% \def\Entupsi{\ensuremath{\upsilon}}% 03C5% \def\Entphgr{\ensuremath{\phi}}% 03C6% \def\Entphi{\ensuremath{\phi}}% 03C6% \def\Entphis{\ensuremath{\phi}}% 03C6% \def\Entchi{\ensuremath{\chi}}% 03C7% \def\Entkhgr{\ensuremath{\chi}}% 03C7% \def\Entpsgr{\ensuremath{\psi}}% 03C8% \def\Entpsi{\ensuremath{\psi}}% 03C8% \def\Entohgr{\ensuremath{\omega}}% 03C9% \def\Entomega{\ensuremath{\omega}}% 03C9% \def\Entidigr{\ensuremath{\ddot{\iota}}}% 03CA% \def\Entudigr{\ensuremath{\ddot{\upsilon}}}% 03CB% \def\Entoacgr{\ifmmode \acute{o}\else \'{o}\fi}% 03CC% \def\Entuacgr{\ensuremath{\acute{\upsilon}}}% 03CD% \def\Entohacgr{\ensuremath{\acute{\omega}}}% 03CE% \def\Entthetav{\ifmmode \vartheta\else \textvartheta\fi}% 03D1% \def\EntUpsi{\ensuremath{\Upsilon}}% 03D2% \def\Entphiv{\ensuremath{\varphi}}% 03D5% \def\Entpiv{\ensuremath{\varpi}}% 03D6% \def\EntGammad{\ensuremath{\digamma}}% 03DC% \def\Entgammad{\ensuremath{\digamma}}% 03DC% \def\Entkappav{\ensuremath{\varkappa}}% 03F0% \def\Entrhov{\ensuremath{\varrho}}% 03F1% \def\EntIOcy{\cyr{\"E}}% 0401% \def\EntDJcy{\DJ}% 0402% \def\EntGJcy{\cyr{\'G}}% 0403% \def\EntJukcy{\cyr{\=E}}% 0404% \def\EntDScy{\cyr{\Dz}}% 0405% \def\EntIukcy{\cyr{\=I}}% 0406% \def\EntYIcy{\cyr{\"I}}% 0407% \def\EntJsercy{\cyr{J}}% 0408% \def\EntLJcy{\cyr{Lj}}% 0409% \def\EntNJcy{\cyr{Nj}}% 040A% \def\EntTSHcy{\cyr{\'C}}% 040B% \def\EntKJcy{\cyr{\'K}}% 040C% \def\EntUbrcy{\cyr{\u{U}}}% 040E% \def\EntDZcy{\cyr{\Dzh}}% 040F% \def\EntAcy{\cyr{A}}% 0410% \def\EntBcy{\cyr{B}}% 0411% \def\EntVcy{\cyr{V}}% 0412% \def\EntGcy{\cyr{G}}% 0413% \def\EntDcy{\cyr{D}}% 0414% \def\EntIEcy{\cyr{E}}% 0415% \def\EntZHcy{\cyr{Zh}}% 0416% \def\EntZcy{\cyr{Z}}% 0417% \def\EntIcy{\cyr{I}}% 0418% \def\EntJcy{\cyr{\u{I}}}% 0419% \def\EntKcy{\cyr{K}}% 041A% \def\EntLcy{\cyr{L}}% 041B% \def\EntMcy{\cyr{M}}% 041C% \def\EntNcy{\cyr{N}}% 041D% \def\EntOcy{\cyr{O}}% 041E% \def\EntPcy{\cyr{P}}% 041F% \def\EntRcy{\cyr{R}}% 0420% \def\EntScy{\cyr{S}}% 0421% \def\EntTcy{\cyr{T}}% 0422% \def\EntUcy{\cyr{U}}% 0423% \def\EntFcy{\cyr{F}}% 0424% \def\EntKHcy{\cyr{Kh}}% 0425% \def\EntTScy{\cyr{Ts}}% 0426% \def\EntCHcy{\cyr{Ch}}% 0427% \def\EntSHcy{\cyr{Sh}}% 0428% \def\EntSHCHcy{\cyr{Shch}}% 0429% \def\EntHARDcy{\cyr{\Cdprime}}% 042A% \def\EntYcy{\cyr{Y}}% 042B% \def\EntSOFTcy{\cyr{\Cprime}}% 042C% \def\EntEcy{\cyr{\'E}}% 042D% \def\EntYUcy{\cyr{Yu}}% 042E% \def\EntYAcy{\cyr{Ya}}% 042F% \def\Entacy{\cyr{a}}% 0430% \def\Entbcy{\cyr{b}}% 0431% \def\Entvcy{\cyr{v}}% 0432% \def\Entgcy{\cyr{g}}% 0433% \def\Entdcy{\cyr{d}}% 0434% \def\Entiecy{e}% 0435% \def\Entzhcy{\cyr{zh}}% 0436% \def\Entzcy{\cyr{z}}% 0437% \def\Enticy{\ensuremath{i}}% 0438% \def\Entjcy{\cyr{\u\i}}% 0439% \def\Entkcy{\cyr{k}}% 043A% \def\Entlcy{\cyr{l}}% 043B% \def\Entmcy{\cyr{m}}% 043C% \def\Entncy{\cyr{n}}% 043D% \def\Entocy{\ensuremath{o}}% 043E% \def\Entpcy{\cyr{p}}% 043F% \def\Entrcy{\cyr{r}}% 0440% \def\Entscy{\cyr{s}}% 0441% \def\Enttcy{\cyr{t}}% 0442% \def\Entucy{\cyr{u}}% 0443% \def\Entfcy{\cyr{f}}% 0444% \def\Entkhcy{\cyr{kh}}% 0445% \def\Enttscy{\cyr{ts}}% 0446% \def\Entchcy{\cyr{ch}}% 0447% \def\Entshcy{\ensuremath{sh}}% 0448% \def\Entshchcy{\cyr{shch}}% 0449% \def\Enthardcy{\cyr{\cdprime}}% 044A% \def\Entycy{\cyr{y}}% 044B% \def\Entsoftcy{\cyr{\cprime}}% 044C% \def\Entecy{\cyr{\'e}}% 044D% \def\Entyucy{\cyr{yu}}% 044E% \def\Entyacy{\cyr{ya}}% 044F% \def\Entiocy{\cyr{\"e}}% 0451% \def\Entdjcy{\cyr{dj}}% 0452% \def\Entgjcy{\cyr{\'g}}% 0453% \def\Entjukcy{\cyr{\=e}}% 0454% \def\Entdscy{\cyr{\dz}}% 0455% \def\Entiukcy{\cyr{\=\i}}% 0456% \def\Entyicy{\cyr{\"\i}}% 0457% \def\Entjsercy{\cyr{j}}% 0458% \def\Entljcy{\cyr{lj}}% 0459% \def\Entnjcy{\cyr{nj}}% 045A% \def\Enttshcy{\cyr{\'c}}% 045B% \def\Entkjcy{\cyr{\'k}}% 045C% \def\Entubrcy{\cyr{\u{u}}}% 045E% \def\Entdzcy{\cyr{\dzh}}% 045F% \def\Entensp{\ensuremath{\hspace{0.6em}}}% 2002% \def\Entemsp{\hspace{1em}}% 2003% \def\Entemsp13{\hspace{0.33em}}% 2004% \def\Entemsp14{\hspace{0.25em}}% 2005% \def\Entnumsp{\ensuremath{\hphantom{0}}}% 2007% \def\Entpuncsp{\hphantom{,}}% 2008% \def\Entthinsp{\hspace{0.167em}}% 2009% \def\Enthairsp{\ensuremath{\hspace{1pt}}}% 200A% \def\Entdash{\ensuremath{--}}% 2010% \def\Entndash{--}% 2013% \def\Entmdash{---}% 2014% \def\Enthorbar{\ensuremath{---}}% 2015% \def\EntVerbar{\ensuremath{\Vert}}% 2016% \def\EntVert{\ensuremath{\Vert}}% 2016% \def\EntOpenCurlyQuote{`}% 2018% \def\Entlsquo{`}% 2018% \def\Entrsquor{`}% 2018% \def\EntCloseCurlyQuote{'}% 2019% \def\Entrsquo{'}% 2019% \def\Entlsquor{,}% 201A% \def\EntOpenCurlyDoubleQuote{\textquotedblleft}% 201C% \def\Entldquo{\textquotedblleft}% 201C% \def\Entrdquor{\textquotedblleft}% 201C% \def\EntCloseCurlyDoubleQuote{\textquotedblright}% 201D% \def\Entrdquo{\textquotedblright}% 201D% \def\Entldquor{,,}% 201E% \def\Entdagger{\ifmmode \ddag\else \textdagger\fi}% 2020% \def\EntDagger{\ifmmode \ddag\else \textdaggerdbl\fi}% 2021% \def\Entddagger{\ifmmode \ddag\else \textdaggerdbl\fi}% 2021% \def\Entbull{\ensuremath{\bullet}}% 2022% \def\Entbullet{\ensuremath{\bullet}}% 2022% \def\Entnldr{\MISSING{nldr}}% 2025% \def\Enthellip{\ensuremath{\ldots}}% 2026% \def\Entmldr{\ensuremath{\ldots}}% 2026% \def\Entpermil{\textperthousand}% 2030% \def\Entpertenk{\ensuremath{\mbox{\textpertenthousand}}}% 2031% \def\Entprime{\ensuremath{{'}}}% 2032% \def\Entvprime{\ensuremath{{'}}}% 2032% \def\EntPrime{\ensuremath{{''}}}% 2033% \def\Enttprime{\ensuremath{{'''}}}% 2034% \def\Entbackprime{\ensuremath{\backprime}}% 2035% \def\Entbprime{\ensuremath{\backprime}}% 2035% \def\Entcaret{\ensuremath{\mathchar"1356}}% 2041% \def\Enthybull{\MISSING{hybull}}% 2043% \def\EntTripleDot{\ensuremath{\dddot{}}}% 20DB% \def\Enttdot{\ensuremath{\dddot{}}}% 20DB% \def\EntDotDot{\ensuremath{\ddddot{}}}% 20DC% \def\EntCopf{\ensuremath{\mathbb{C}}}% 2102% \def\Entincare{\MISSING{incare}}% 2105% \def\Enthamilt{\ensuremath{\mathcal{H}}}% 210B% \def\Enthslash{\ensuremath{\hslash}}% 210F% \def\Entplankv{\ensuremath{\hslash}}% 210F% \def\EntIm{\ensuremath{\Im}}% 2111% \def\Entimage{\ensuremath{\Im}}% 2111% \def\Entlagran{\ensuremath{\mathcal{L}}}% 2112% \def\Entell{\ensuremath{\ell}}% 2113% \def\Entnumero{\cyr{N0}}% 2116% \def\Entcopysr{\MISSING{copysr}}% 2117% \def\Entweierp{\ensuremath{\wp}}% 2118% \def\Entwp{\ensuremath{\wp}}% 2118% \def\EntPopf{\ensuremath{\mathbb{P}}}% 2119% \def\EntQopf{\ensuremath{\mathbb{Q}}}% 211A% \def\Entrscr{\ensuremath{\mathcal{r}}}% 211B% \def\EntRe{\ensuremath{\Re}}% 211C% \def\Entreal{\ensuremath{\Re}}% 211C% \def\EntRopf{\ensuremath{\mathbb{R}}}% 211D% \def\Entrx{\MISSING{rx}}% 211E% \def\Enttrade{\ifmmode \mbox{\texttrademark}\else \texttrademark\fi}% 2122% \def\EntZfr{\ensuremath{\mathfrak{Z}}}% 2124% \def\Entohm{\ensuremath{\Omega}}% 2126% \def\Entmho{\ensuremath{\mho}}% 2127% \def\Entiiota{\ensuremath{\Eliiota}}% 2129% \def\Entangst{\ifmmode \AA\else \AA\fi}% 212B% \def\Entbernou{\ensuremath{\mathcal{B}}}% 212C% \def\Entphmmat{\ensuremath{\mathcal{M}}}% 2133% \def\Entorder{\ensuremath{\mathcal{o}}}% 2134% \def\Entaleph{\ensuremath{\aleph}}% 2135% \def\Entbeth{\ensuremath{\beth}}% 2136% \def\Entgimel{\ensuremath{\gimel}}% 2137% \def\Entdaleth{\ensuremath{\daleth}}% 2138% \def\Entfrac13{\ensuremath{\frac{1}{3}}}% 2153% \def\Entfrac23{\ensuremath{\frac{2}{3}}}% 2154% \def\Entfrac15{\ensuremath{\frac{1}{5}}}% 2155% \def\Entfrac25{\ensuremath{\frac{2}{5}}}% 2156% \def\Entfrac35{\ensuremath{\frac{3}{5}}}% 2157% \def\Entfrac45{\ensuremath{\frac{4}{5}}}% 2158% \def\Entfrac16{\ensuremath{\frac{1}{6}}}% 2159% \def\Entfrac56{\ensuremath{\frac{5}{6}}}% 215A% \def\Entfrac18{\ensuremath{\frac{1}{8}}}% 215B% \def\Entfrac38{\ensuremath{\frac{3}{8}}}% 215C% \def\Entfrac58{\ensuremath{\frac{5}{8}}}% 215D% \def\Entfrac78{\ensuremath{\frac{7}{8}}}% 215E% \def\EntLeftArrow{\ensuremath{\leftarrow}}% 2190% \def\Entlarr{\ensuremath{\leftarrow}}% 2190% \def\Entleftarrow{\ensuremath{\leftarrow}}% 2190% \def\EntUpArrow{\ensuremath{\uparrow}}% 2191% \def\Entuarr{\ensuremath{\uparrow}}% 2191% \def\Entuparrow{\ensuremath{\uparrow}}% 2191% \def\EntRightArrow{\ensuremath{\rightarrow}}% 2192% \def\Entrarr{\ensuremath{\rightarrow}}% 2192% \def\Entrightarrow{\ensuremath{\rightarrow}}% 2192% \def\EntDownArrow{\ensuremath{\downarrow}}% 2193% \def\Entdarr{\ensuremath{\downarrow}}% 2193% \def\Entdownarrow{\ensuremath{\downarrow}}% 2193% \def\EntLeftRightArrow{\ensuremath{\leftrightarrow}}% 2194% \def\Entharr{\ensuremath{\leftrightarrow}}% 2194% \def\Entleftrightarrow{\ensuremath{\leftrightarrow}}% 2194% \def\EntUpDownArrow{\ensuremath{\updownarrow}}% 2195% \def\Entupdownarrow{\ensuremath{\updownarrow}}% 2195% \def\Entvarr{\ensuremath{\updownarrow}}% 2195% \def\EntUpperLeftArrow{\ensuremath{\nwarrow}}% 2196% \def\Entnwarr{\ensuremath{\nwarrow}}% 2196% \def\Entnwarrow{\ensuremath{\nwarrow}}% 2196% \def\EntUpperRightArrow{\ensuremath{\nearrow}}% 2197% \def\Entnearr{\ensuremath{\nearrow}}% 2197% \def\Entnearrow{\ensuremath{\nearrow}}% 2197% \def\EntLowerRightArrow{\ensuremath{\searrow}}% 2198% \def\Entdrarr{\ensuremath{\searrow}}% 2198% \def\Entsearr{\ensuremath{\searrow}}% 2198% \def\Entsearrow{\ensuremath{\searrow}}% 2198% \def\EntLowerLeftArrow{\ensuremath{\swarrow}}% 2199% \def\Entdlarr{\ensuremath{\swarrow}}% 2199% \def\Entswarr{\ensuremath{\swarrow}}% 2199% \def\Entswarrow{\ensuremath{\swarrow}}% 2199% \def\Entnlarr{\ensuremath{\nleftarrow}}% 219A% \def\Entnleftarrow{\ensuremath{\nleftarrow}}% 219A% \def\Entnrarr{\ensuremath{\nrightarrow}}% 219B% \def\Entnrightarrow{\ensuremath{\nrightarrow}}% 219B% \def\Entrarrw{\ensuremath{\rightsquigarrow}}% 219D% \def\Entrightsquigarrow{\ensuremath{\rightsquigarrow}}% 219D% \def\EntLarr{\ensuremath{\twoheadleftarrow}}% 219E% \def\Enttwoheadleftarrow{\ensuremath{\twoheadleftarrow}}% 219E% \def\EntRarr{\ensuremath{\twoheadrightarrow}}% 21A0% \def\Enttwoheadrightarrow{\ensuremath{\twoheadrightarrow}}% 21A0% \def\Entlarrtl{\ensuremath{\leftarrowtail}}% 21A2% \def\Entleftarrowtail{\ensuremath{\leftarrowtail}}% 21A2% \def\Entrarrtl{\ensuremath{\rightarrowtail}}% 21A3% \def\Entratail{\ensuremath{\rightarrowtail}}% 21A3% \def\Entrightarrowtail{\ensuremath{\rightarrowtail}}% 21A3% \def\EntRightTeeArrow{\ensuremath{\mapsto}}% 21A6% \def\Entmap{\ensuremath{\mapsto}}% 21A6% \def\Entmapsto{\ensuremath{\mapsto}}% 21A6% \def\Enthookleftarrow{\ensuremath{\hookleftarrow}}% 21A9% \def\Entlarrhk{\ensuremath{\hookleftarrow}}% 21A9% \def\Enthookrightarrow{\ensuremath{\hookrightarrow}}% 21AA% \def\Entrarrhk{\ensuremath{\hookrightarrow}}% 21AA% \def\Entlarrlp{\ensuremath{\looparrowleft}}% 21AB% \def\Entlooparrowleft{\ensuremath{\looparrowleft}}% 21AB% \def\Entlooparrowright{\ensuremath{\looparrowright}}% 21AC% \def\Entrarrlp{\ensuremath{\looparrowright}}% 21AC% \def\Entharrw{\ensuremath{\leftrightsquigarrow}}% 21AD% \def\Entleftrightsquigarrow{\ensuremath{\leftrightsquigarrow}}% 21AD% \def\Entnharr{\ensuremath{\nleftrightarrow}}% 21AE% \def\Entnleftrightarrow{\ensuremath{\nleftrightarrow}}% 21AE% \def\EntLsh{\ensuremath{\Lsh}}% 21B0% \def\Entlsh{\ensuremath{\Lsh}}% 21B0% \def\EntRsh{\ensuremath{\Rsh}}% 21B1% \def\Entrsh{\ensuremath{\Rsh}}% 21B1% \def\Entrdsh{\ensuremath{\Elzrhkd}}% 21B3% \def\Entcularr{\ensuremath{\curvearrowleft}}% 21B6% \def\Entcurvearrowleft{\ensuremath{\curvearrowleft}}% 21B6% \def\Entcurarr{\ensuremath{\curvearrowright}}% 21B7% \def\Entcurvearrowright{\ensuremath{\curvearrowright}}% 21B7% \def\Entcirclearrowleft{\ensuremath{\circlearrowleft}}% 21BA% \def\Entolarr{\ensuremath{\circlearrowleft}}% 21BA% \def\Entcirclearrowright{\ensuremath{\circlearrowright}}% 21BB% \def\Entorarr{\ensuremath{\circlearrowright}}% 21BB% \def\EntLeftVector{\ensuremath{\leftharpoonup}}% 21BC% \def\Entleftharpoonup{\ensuremath{\leftharpoonup}}% 21BC% \def\Entlharu{\ensuremath{\leftharpoonup}}% 21BC% \def\EntDownLeftVector{\ensuremath{\leftharpoondown}}% 21BD% \def\Entleftharpoondown{\ensuremath{\leftharpoondown}}% 21BD% \def\Entlhard{\ensuremath{\leftharpoondown}}% 21BD% \def\EntRightUpVector{\ensuremath{\upharpoonright}}% 21BE% \def\Entuharr{\ensuremath{\upharpoonright}}% 21BE% \def\Entupharpoonright{\ensuremath{\upharpoonright}}% 21BE% \def\EntLeftUpVector{\ensuremath{\upharpoonleft}}% 21BF% \def\Entuharl{\ensuremath{\upharpoonleft}}% 21BF% \def\Entupharpoonleft{\ensuremath{\upharpoonleft}}% 21BF% \def\EntRightVector{\ensuremath{\rightharpoonup}}% 21C0% \def\Entrharu{\ensuremath{\rightharpoonup}}% 21C0% \def\Entrightharpoonup{\ensuremath{\rightharpoonup}}% 21C0% \def\EntDownRightVector{\ensuremath{\rightharpoondown}}% 21C1% \def\Entrhard{\ensuremath{\rightharpoondown}}% 21C1% \def\Entrightharpoondown{\ensuremath{\rightharpoondown}}% 21C1% \def\EntRightDownVector{\ensuremath{\downharpoonright}}% 21C2% \def\Entdharr{\ensuremath{\downharpoonright}}% 21C2% \def\Entdownharpoonright{\ensuremath{\downharpoonright}}% 21C2% \def\EntLeftDownVector{\ensuremath{\downharpoonleft}}% 21C3% \def\Entdharl{\ensuremath{\downharpoonleft}}% 21C3% \def\Entdownharpoonleft{\ensuremath{\downharpoonleft}}% 21C3% \def\EntRightArrowLeftArrow{\ensuremath{\rightleftarrows}}% 21C4% \def\Entrightleftarrows{\ensuremath{\rightleftarrows}}% 21C4% \def\Entrlarr{\ensuremath{\rightleftarrows}}% 21C4% \def\Entrlarr2{\ensuremath{\rightleftarrows}}% 21C4% \def\EntUpArrowDownArrow{\ensuremath{\zudarr}}% 21C5% \def\Entudarr{\ensuremath{\zudarr}}% 21C5% \def\EntLeftArrowRightArrow{\ensuremath{\leftrightarrows}}% 21C6% \def\Entleftrightarrows{\ensuremath{\leftrightarrows}}% 21C6% \def\Entlrarr{\ensuremath{\leftrightarrows}}% 21C6% \def\Entlrarr2{\ensuremath{\leftrightarrows}}% 21C6% \def\Entlarr2{\ensuremath{\leftleftarrows}}% 21C7% \def\Entleftleftarrows{\ensuremath{\leftleftarrows}}% 21C7% \def\Entllarr{\ensuremath{\leftleftarrows}}% 21C7% \def\Entuarr2{\ensuremath{\upuparrows}}% 21C8% \def\Entupuparrows{\ensuremath{\upuparrows}}% 21C8% \def\Entuuarr{\ensuremath{\upuparrows}}% 21C8% \def\Entrarr2{\ensuremath{\rightrightarrows}}% 21C9% \def\Entrightrightarrows{\ensuremath{\rightrightarrows}}% 21C9% \def\Entrrarr{\ensuremath{\rightrightarrows}}% 21C9% \def\Entdarr2{\ensuremath{\downdownarrows}}% 21CA% \def\Entddarr{\ensuremath{\downdownarrows}}% 21CA% \def\Entdowndownarrows{\ensuremath{\downdownarrows}}% 21CA% \def\EntReverseEquilibrium{\ensuremath{\leftrightharpoons}}% 21CB% \def\Entleftrightharpoons{\ensuremath{\leftrightharpoons}}% 21CB% \def\Entlrhar{\ensuremath{\leftrightharpoons}}% 21CB% \def\Entlrhar2{\ensuremath{\leftrightharpoons}}% 21CB% \def\EntEquilibrium{\ensuremath{\rightleftharpoons}}% 21CC% \def\Entrightleftharpoons{\ensuremath{\rightleftharpoons}}% 21CC% \def\Entrlhar{\ensuremath{\rightleftharpoons}}% 21CC% \def\Entrlhar2{\ensuremath{\rightleftharpoons}}% 21CC% \def\EntnLeftarrow{\ensuremath{\nLeftarrow}}% 21CD% \def\EntnlArr{\ensuremath{\nLeftarrow}}% 21CD% \def\EntnvlArr{\ensuremath{\nLeftarrow}}% 21CD% \def\EntnLeftrightarrow{\ensuremath{\nLeftrightarrow}}% 21CE% \def\EntnhArr{\ensuremath{\nLeftrightarrow}}% 21CE% \def\EntnvhArr{\ensuremath{\nLeftrightarrow}}% 21CE% \def\EntnRightarrow{\ensuremath{\nRightarrow}}% 21CF% \def\EntnrArr{\ensuremath{\nRightarrow}}% 21CF% \def\EntnvrArr{\ensuremath{\nRightarrow}}% 21CF% \def\EntDoubleLeftArrow{\ensuremath{\Leftarrow}}% 21D0% \def\EntLeftarrow{\ensuremath{\Leftarrow}}% 21D0% \def\EntlArr{\ensuremath{\Leftarrow}}% 21D0% \def\EntDoubleUpArrow{\ensuremath{\Uparrow}}% 21D1% \def\EntUparrow{\ensuremath{\Uparrow}}% 21D1% \def\EntuArr{\ensuremath{\Uparrow}}% 21D1% \def\EntDoubleRightArrow{\ensuremath{\Rightarrow}}% 21D2% \def\EntImplies{\ensuremath{\Rightarrow}}% 21D2% \def\EntRightarrow{\ensuremath{\Rightarrow}}% 21D2% \def\EntrArr{\ensuremath{\Rightarrow}}% 21D2% \def\EntDoubleDownArrow{\ensuremath{\Downarrow}}% 21D3% \def\EntDownarrow{\ensuremath{\Downarrow}}% 21D3% \def\EntdArr{\ensuremath{\Downarrow}}% 21D3% \def\EntDoubleLeftRightArrow{\ensuremath{\Leftrightarrow}}% 21D4% \def\EntLeftrightarrow{\ensuremath{\Leftrightarrow}}% 21D4% \def\EnthArr{\ensuremath{\Leftrightarrow}}% 21D4% \def\EntDoubleUpDownArrow{\ensuremath{\Updownarrow}}% 21D5% \def\EntUpdownarrow{\ensuremath{\Updownarrow}}% 21D5% \def\EntvArr{\ensuremath{\Updownarrow}}% 21D5% \def\EntLleftarrow{\ensuremath{\Lleftarrow}}% 21DA% \def\EntlAarr{\ensuremath{\Lleftarrow}}% 21DA% \def\EntRrightarrow{\ensuremath{\Rrightarrow}}% 21DB% \def\EntrAarr{\ensuremath{\Rrightarrow}}% 21DB% \def\EntForAll{\ensuremath{\forall}}% 2200% \def\Entforall{\ensuremath{\forall}}% 2200% \def\Entcomp{\ensuremath{\complement}}% 2201% \def\Entcomplement{\ensuremath{\complement}}% 2201% \def\EntPartialD{\ensuremath{\partial}}% 2202% \def\Entpart{\ensuremath{\partial}}% 2202% \def\EntExists{\ensuremath{\exists}}% 2203% \def\Entexist{\ensuremath{\exists}}% 2203% \def\EntNotExists{\ensuremath{\nexists}}% 2204% \def\Entnexist{\ensuremath{\nexists}}% 2204% \def\Entnexists{\ensuremath{\nexists}}% 2204% \def\EntDel{\ensuremath{\nabla}}% 2207% \def\Entnabla{\ensuremath{\nabla}}% 2207% \def\EntNotElement{\ensuremath{\not\in}}% 2209% \def\Entnotin{\ensuremath{\not\in}}% 2209% \def\Entin{\ensuremath{\in}}% 220A% \def\Entisin{\ensuremath{\in}}% 220A% \def\EntNotReverseElement{\ensuremath{\not\ni}}% 220C% \def\Entnotni{\ensuremath{\not\ni}}% 220C% \def\Entnotniva{\ensuremath{\not\ni}}% 220C% \def\EntSuchThat{\ensuremath{\ni}}% 220D% \def\Entni{\ensuremath{\ni}}% 220D% \def\Entprod{\ensuremath{\prod}}% 220F% \def\EntCoproduct{\ensuremath{\coprod}}% 2210% \def\Entcoprod{\ensuremath{\coprod}}% 2210% \def\Entsamalg{\ensuremath{\coprod}}% 2210% \def\EntSum{\ensuremath{\sum}}% 2211% \def\Entsum{\ensuremath{\sum}}% 2211% \def\Entminus{-}% 2212% \def\EntMinusPlus{\ensuremath{\mp}}% 2213% \def\Entmnplus{\ensuremath{\mp}}% 2213% \def\Entmp{\ensuremath{\mp}}% 2213% \def\Entdotplus{\ensuremath{\dotplus}}% 2214% \def\Entplusdo{\ensuremath{\dotplus}}% 2214% \def\EntBackslash{\ensuremath{\setminus}}% 2216% \def\Entsetminus{\ensuremath{\setminus}}% 2216% \def\Entsetmn{\ensuremath{\setminus}}% 2216% \def\Entlowast{\ensuremath{{_\ast}}}% 2217% \def\EntSmallCircle{\ensuremath{\circ}}% 2218% \def\Entcirc{\ensuremath{\circ}}% 2218% \def\Entcompfn{\ensuremath{\circ}}% 2218% \def\EntSqrt{\ensuremath{\surd}}% 221A% \def\Entradic{\ensuremath{\surd}}% 221A% \def\EntProportional{\ensuremath{\propto}}% 221D% \def\Entprop{\ensuremath{\propto}}% 221D% \def\Entpropto{\ensuremath{\propto}}% 221D% \def\Entvarpropto{\ensuremath{\propto}}% 221D% \def\Entvprop{\ensuremath{\propto}}% 221D% \def\Entinfin{\ensuremath{\infty}}% 221E% \def\Entang90{\ensuremath{\ElangNINETY}}% 221F% \def\Entangrt{\ensuremath{\ElsevierangNINETY}}% 221F% \def\Entang{\ensuremath{\angle}}% 2220% \def\Entangle{\ensuremath{\angle}}% 2220% \def\Entangmsd{\ensuremath{\measuredangle}}% 2221% \def\Entmeasuredangle{\ensuremath{\measuredangle}}% 2221% \def\Entangsph{\ensuremath{\sphericalangle}}% 2222% \def\EntVerticalBar{\ensuremath{\mid}}% 2223% \def\Entmid{\ensuremath{\mid}}% 2223% \def\EntNotVerticalBar{\ensuremath{\nmid}}% 2224% \def\Entnmid{\ensuremath{\nmid}}% 2224% \def\EntDoubleVerticalBar{\ensuremath{\parallel}}% 2225% \def\Entpar{\ensuremath{\parallel}}% 2225% \def\Entparallel{\ensuremath{\parallel}}% 2225% \def\EntNotDoubleVerticalBar{\ensuremath{\nparallel}}% 2226% \def\Entnpar{\ensuremath{\nparallel}}% 2226% \def\Entnparallel{\ensuremath{\nparallel}}% 2226% \def\Entand{\ensuremath{\wedge}}% 2227% \def\Entwedge{\ensuremath{\wedge}}% 2227% \def\Entor{\ensuremath{\vee}}% 2228% \def\Entvee{\ensuremath{\vee}}% 2228% \def\Entcap{\ensuremath{\cap}}% 2229% \def\Entcup{\ensuremath{\cup}}% 222A% \def\EntIntegral{\ensuremath{\int}}% 222B% \def\Entint{\ensuremath{\int}}% 222B% \def\EntContourIntegral{\ensuremath{\oint}}% 222E% \def\Entconint{\ensuremath{\oint}}% 222E% \def\Entoint{\ensuremath{\oint}}% 222E% \def\EntConint{\ensuremath{\zsint}}% 222F% \def\EntDoubleContourIntegral{\ensuremath{\zsint}}% 222F% \def\EntCconint{\ensuremath{\zvint}}% 2230% \def\Entcwint{\ensuremath{\Elcwint}}% 2231% \def\EntClockwiseContourIntegral{\ensuremath{\Elccoint}}% 2232% \def\Entcwconint{\ensuremath{\Elsevierccoint}}% 2232% \def\EntCounterClockwiseContourIntegral{\ensuremath{\Elacoint}}% 2233% \def\Entawconint{\ensuremath{\Elsevieracoint}}% 2233% \def\EntTherefore{\ensuremath{\therefore}}% 2234% \def\Entthere4{\ensuremath{\therefore}}% 2234% \def\Enttherefore{\ensuremath{\therefore}}% 2234% \def\EntBecause{\ensuremath{\because}}% 2235% \def\Entbecaus{\ensuremath{\because}}% 2235% \def\Entbecause{\ensuremath{\because}}% 2235% \def\EntColon{\ensuremath{\Colon}}% 2237% \def\EntProportion{\ensuremath{\Colon}}% 2237% \def\Entdotminus{\ensuremath{\Elminusd}}% 2238% \def\Entminusd{\ensuremath{\Elsevierminusd}}% 2238% \def\EntmDDot{\ensuremath{\ElmDDot}}% 223A% \def\Enthomtht{\ensuremath{\Elhomthr}}% 223B% \def\EntTilde{\ensuremath{\sim}}% 223C% \def\Entsim{\ensuremath{\sim}}% 223C% \def\Entbacksim{\ensuremath{\backsim}}% 223D% \def\Entbsim{\ensuremath{\backsim}}% 223D% \def\Entmstpos{\ensuremath{\sim}}% 223E% \def\EntVerticalTilde{\ensuremath{\wr}}% 2240% \def\Entwr{\ensuremath{\wr}}% 2240% \def\Entwreath{\ensuremath{\wr}}% 2240% \def\EntNotTilde{\ensuremath{\not\sim}}% 2241% \def\Entnsim{\ensuremath{\not\sim}}% 2241% \def\EntEqualTilde{\ensuremath{\Elesim}}% 2242% \def\Enteqsim{\ensuremath{\Elsevieresim}}% 2242% \def\Entesim{\ensuremath{\Elsevieresim}}% 2242% \def\EntTildeEqual{\ensuremath{\simeq}}% 2243% \def\Entsime{\ensuremath{\simeq}}% 2243% \def\Entsimeq{\ensuremath{\simeq}}% 2243% \def\EntNotTildeEqual{\ensuremath{\not\simeq}}% 2244% \def\Entnsime{\ensuremath{\not\simeq}}% 2244% \def\Entnsimeq{\ensuremath{\not\simeq}}% 2244% \def\EntTildeFullEqual{\ensuremath{\cong}}% 2245% \def\Entcong{\ensuremath{\cong}}% 2245% \def\Entsimne{\ensuremath{\Elzsimne}}% 2246% \def\EntNotTildeFullEqual{\ensuremath{\not\cong}}% 2247% \def\Entncong{\ensuremath{\not\cong}}% 2247% \def\EntTildeTilde{\ensuremath{\approx}}% 2248% \def\Entap{\ensuremath{\approx}}% 2248% \def\Entapprox{\ensuremath{\approx}}% 2248% \def\EntNotTildeTilde{\ensuremath{\not\approx}}% 2249% \def\Entnap{\ensuremath{\not\approx}}% 2249% \def\Entnapprox{\ensuremath{\not\approx}}% 2249% \def\Entape{\ensuremath{\approxeq}}% 224A% \def\Entapproxeq{\ensuremath{\approxeq}}% 224A% \def\Entapid{\ensuremath{\apid}}% 224B% \def\Entbackcong{\ensuremath{\backepsilon}}% 224C% \def\Entbcong{\ensuremath{\backepsilon}}% 224C% \def\EntCupCap{\ensuremath{\asymp}}% 224D% \def\Entasymp{\ensuremath{\asymp}}% 224D% \def\EntBumpeq{\ensuremath{\Bumpeq}}% 224E% \def\EntHumpDownHump{\ensuremath{\Bumpeq}}% 224E% \def\Entbump{\ensuremath{\Bumpeq}}% 224E% \def\EntHumpEqual{\ensuremath{\bumpeq}}% 224F% \def\Entbumpe{\ensuremath{\bumpeq}}% 224F% \def\Entbumpeq{\ensuremath{\bumpeq}}% 224F% \def\EntDotEqual{\ensuremath{\doteq}}% 2250% \def\Entdoteq{\ensuremath{\doteq}}% 2250% \def\Entesdot{\ensuremath{\doteq}}% 2250% \def\Entdoteqdot{\ensuremath{\doteqdot}}% 2251% \def\EnteDot{\ensuremath{\doteqdot}}% 2251% \def\EntefDot{\ensuremath{\fallingdotseq}}% 2252% \def\Entfallingdotseq{\ensuremath{\fallingdotseq}}% 2252% \def\EnterDot{\ensuremath{\risingdotseq}}% 2253% \def\Entrisingdotseq{\ensuremath{\risingdotseq}}% 2253% \def\Entcolone{: =}% 2254% \def\Entcoloneq{: =}% 2254% \def\Entecolon{\ensuremath{=:}}% 2255% \def\Enteqcolon{\ensuremath{=:}}% 2255% \def\Entecir{\ensuremath{\eqcirc}}% 2256% \def\Enteqcirc{\ensuremath{\eqcirc}}% 2256% \def\Entcirceq{\ensuremath{\circeq}}% 2257% \def\Entcire{\ensuremath{\circeq}}% 2257% \def\Entwedgeq{\ensuremath{\Longleftrightarrow}}% 2259% \def\Entveeeq{\ensuremath{\ElzveeBar}}% 225A% \def\Enteaster{\ensuremath{\stackrel*=}}% 225B% \def\Enttriangleq{\ensuremath{\triangleq}}% 225C% \def\Enttrie{\ensuremath{\triangleq}}% 225C% \def\Entequest{\ensuremath{\Elequest}}% 225F% \def\Entquesteq{\ensuremath{\Elsevierequest}}% 225F% \def\EntNotEqual{\ensuremath{\not =}}% 2260% \def\Entne{\ensuremath{\not =}}% 2260% \def\EntCongruent{\ensuremath{\equiv}}% 2261% \def\Entequiv{\ensuremath{\equiv}}% 2261% \def\EntNotCongruent{\ensuremath{\not\equiv}}% 2262% \def\Entnequiv{\ensuremath{\not\equiv}}% 2262% \def\Entle{\ensuremath{\leq}}% 2264% \def\Entleq{\ensuremath{\leq}}% 2264% \def\EntGreaterEqual{\ensuremath{\geq}}% 2265% \def\Entge{\ensuremath{\geq}}% 2265% \def\Entgeq{\ensuremath{\geq}}% 2265% \def\EntLessFullEqual{\ensuremath{\leqq}}% 2266% \def\EntlE{\ensuremath{\leqq}}% 2266% \def\Entleqq{\ensuremath{\leqq}}% 2266% \def\EntGreaterFullEqual{\ensuremath{\geqq}}% 2267% \def\EntgE{\ensuremath{\geqq}}% 2267% \def\Entgeqq{\ensuremath{\geqq}}% 2267% \def\EntlnE{\ensuremath{\lneqq}}% 2268% \def\Entlne{\ensuremath{\lneqq}}% 2268% \def\Entlneq{\ensuremath{\lneqq}}% 2268% \def\Entlneqq{\ensuremath{\lneqq}}% 2268% \def\EntgnE{\ensuremath{\gneqq}}% 2269% \def\Entgne{\ensuremath{\gneqq}}% 2269% \def\Entgneq{\ensuremath{\gneqq}}% 2269% \def\Entgneqq{\ensuremath{\gneqq}}% 2269% \def\EntLt{\ensuremath{\ll}}% 226A% \def\EntNestedLessLess{\ensuremath{\ll}}% 226A% \def\Entll{\ensuremath{\ll}}% 226A% \def\EntGt{\ensuremath{\gg}}% 226B% \def\EntNestedGreaterGreater{\ensuremath{\gg}}% 226B% \def\Entgg{\ensuremath{\gg}}% 226B% \def\Entbetween{\ensuremath{\between}}% 226C% \def\Enttwixt{\ensuremath{\between}}% 226C% \def\EntNotLess{\ensuremath{\not<}}% 226E% \def\Entnless{\ensuremath{\not<}}% 226E% \def\Entnlt{\ensuremath{\not<}}% 226E% \def\Entnvlt{\ensuremath{\not<}}% 226E% \def\EntNotGreater{\ensuremath{\not>}}% 226F% \def\Entngt{\ensuremath{\not>}}% 226F% \def\Entngtr{\ensuremath{\not>}}% 226F% \def\Entnvgt{\ensuremath{\not>}}% 226F% \def\EntNotLessFullEqual{\ensuremath{\nleqslant}}% 2270% \def\EntNotLessSlantEqual{\ensuremath{\nleqslant}}% 2270% \def\EntnlE{\ensuremath{\nleqslant}}% 2270% \def\Entnleqq{\ensuremath{\nleqslant}}% 2270% \def\Entnleqslant{\ensuremath{\nleqslant}}% 2270% \def\Entnles{\ensuremath{\nleqslant}}% 2270% \def\Entnvle{\ensuremath{\nleqslant}}% 2270% \def\EntNotGreaterFullEqual{\ensuremath{\ngeqslant}}% 2271% \def\EntNotGreaterSlantEqual{\ensuremath{\ngeqslant}}% 2271% \def\EntngE{\ensuremath{\ngeqslant}}% 2271% \def\Entngeqq{\ensuremath{\ngeqslant}}% 2271% \def\Entngeqslant{\ensuremath{\ngeqslant}}% 2271% \def\Entnges{\ensuremath{\ngeqslant}}% 2271% \def\Entnvge{\ensuremath{\ngeqslant}}% 2271% \def\EntLessTilde{\ensuremath{\lessapprox}}% 2272% \def\Entlap{\ensuremath{\lessapprox}}% 2272% \def\Entlessapprox{\ensuremath{\lessapprox}}% 2272% \def\Entlesssim{\ensuremath{\lessapprox}}% 2272% \def\Entlsim{\ensuremath{\lessapprox}}% 2272% \def\EntGreaterTilde{\ensuremath{\gtrapprox}}% 2273% \def\Entgap{\ensuremath{\gtrapprox}}% 2273% \def\Entgsim{\ensuremath{\gtrapprox}}% 2273% \def\Entgtrapprox{\ensuremath{\gtrapprox}}% 2273% \def\Entgtrsim{\ensuremath{\gtrapprox}}% 2273% \def\EntNotLessTilde{\ensuremath{\Elznltneq}}% 2274% \def\Entnlsim{\ensuremath{\Elsevierznltneq}}% 2274% \def\EntNotGreaterTilde{\ensuremath{\Elzngtneq}}% 2275% \def\Entngsim{\ensuremath{\Elsevierzngtneq}}% 2275% \def\EntLessGreater{\ensuremath{\lessgtr}}% 2276% \def\Entlessgtr{\ensuremath{\lessgtr}}% 2276% \def\Entlg{\ensuremath{\lessgtr}}% 2276% \def\EntGreaterLess{\ensuremath{\gtrless}}% 2277% \def\Entgl{\ensuremath{\gtrless}}% 2277% \def\Entgtrless{\ensuremath{\gtrless}}% 2277% \def\EntNotLessGreater{\ensuremath{\Elznltngt}}% 2278% \def\Entntlg{\ensuremath{\Elsevierznltngt}}% 2278% \def\Entntvlg{\ensuremath{\Elsevierznltngt}}% 2278% \def\EntNotGreaterLess{\ensuremath{\Elzngtnlt}}% 2279% \def\Entntgl{\ensuremath{\Elsevierzngtnlt}}% 2279% \def\Entntvgl{\ensuremath{\Elsevierzngtnlt}}% 2279% \def\EntPrecedes{\ensuremath{\prec}}% 227A% \def\Entpr{\ensuremath{\prec}}% 227A% \def\Entprec{\ensuremath{\prec}}% 227A% \def\EntSucceeds{\ensuremath{\succ}}% 227B% \def\Entsc{\ensuremath{\succ}}% 227B% \def\Entsucc{\ensuremath{\succ}}% 227B% \def\EntPrecedesSlantEqual{\ensuremath{\preccurlyeq}}% 227C% \def\Entcupre{\ensuremath{\preccurlyeq}}% 227C% \def\Entprcue{\ensuremath{\preccurlyeq}}% 227C% \def\Entpreccurlyeq{\ensuremath{\preccurlyeq}}% 227C% \def\EntSucceedsEqual{\ensuremath{\succcurlyeq}}% 227D% \def\EntSucceedsSlantEqual{\ensuremath{\succcurlyeq}}% 227D% \def\Entsccue{\ensuremath{\succcurlyeq}}% 227D% \def\Entsce{\ensuremath{\succcurlyeq}}% 227D% \def\Entsucccurlyeq{\ensuremath{\succcurlyeq}}% 227D% \def\Entsucceq{\ensuremath{\succcurlyeq}}% 227D% \def\EntPrecedesTilde{\ensuremath{\precapprox}}% 227E% \def\Entprap{\ensuremath{\precapprox}}% 227E% \def\Entprecapprox{\ensuremath{\precapprox}}% 227E% \def\Entprecsim{\ensuremath{\precapprox}}% 227E% \def\Entprsim{\ensuremath{\precapprox}}% 227E% \def\EntscE{\ensuremath{\precapprox}}% 227E% \def\EntSucceedsTilde{\ensuremath{\succapprox}}% 227F% \def\Entscap{\ensuremath{\succapprox}}% 227F% \def\Entscsim{\ensuremath{\succapprox}}% 227F% \def\Entsuccapprox{\ensuremath{\succapprox}}% 227F% \def\Entsuccsim{\ensuremath{\succapprox}}% 227F% \def\EntNotPrecedes{\ensuremath{\not\prec}}% 2280% \def\Entnpr{\ensuremath{\not\prec}}% 2280% \def\Entnprec{\ensuremath{\not\prec}}% 2280% \def\EntNotSucceeds{\ensuremath{\not\succ}}% 2281% \def\Entnsc{\ensuremath{\not\succ}}% 2281% \def\Entnsucc{\ensuremath{\not\succ}}% 2281% \def\EntSubset{\ensuremath{\subset}}% 2282% \def\Entsub{\ensuremath{\subset}}% 2282% \def\Entsubset{\ensuremath{\subset}}% 2282% \def\EntSuperset{\ensuremath{\supset}}% 2283% \def\Entsup{\ensuremath{\supset}}% 2283% \def\Entsupset{\ensuremath{\supset}}% 2283% \def\EntNotSubset{\ensuremath{\not\subset}}% 2284% \def\Entnsub{\ensuremath{\not\subset}}% 2284% \def\Entnsubset{\ensuremath{\not\subset}}% 2284% \def\Entvnsub{\ensuremath{\not\subset}}% 2284% \def\EntNotSuperset{\ensuremath{\not\supset}}% 2285% \def\Entnsup{\ensuremath{\not\supset}}% 2285% \def\Entnsupset{\ensuremath{\not\supset}}% 2285% \def\Entvnsup{\ensuremath{\not\supset}}% 2285% \def\EntSubsetEqual{\ensuremath{\subseteq}}% 2286% \def\EntsubE{\ensuremath{\subseteq}}% 2286% \def\Entsube{\ensuremath{\subseteq}}% 2286% \def\Entsubseteq{\ensuremath{\subseteq}}% 2286% \def\Entsubseteqq{\ensuremath{\subseteq}}% 2286% \def\EntSupersetEqual{\ensuremath{\supseteq}}% 2287% \def\EntsupE{\ensuremath{\supseteq}}% 2287% \def\Entsupe{\ensuremath{\supseteq}}% 2287% \def\Entsupseteq{\ensuremath{\supseteq}}% 2287% \def\Entsupseteqq{\ensuremath{\supseteq}}% 2287% \def\EntnsubE{\ensuremath{\not\subseteq}}% 2288% \def\Entnsube{\ensuremath{\not\subseteq}}% 2288% \def\Entnsubseteq{\ensuremath{\not\subseteq}}% 2288% \def\Entnsubseteqq{\ensuremath{\not\subseteq}}% 2288% \def\EntnsupE{\ensuremath{\not\supseteq}}% 2289% \def\Entnsupe{\ensuremath{\not\supseteq}}% 2289% \def\Entnsupseteq{\ensuremath{\not\supseteq}}% 2289% \def\Entnsupseteqq{\ensuremath{\not\supseteq}}% 2289% \def\EntsubnE{\ensuremath{\subsetneq}}% 228A% \def\Entsubne{\ensuremath{\subsetneq}}% 228A% \def\Entsubsetneq{\ensuremath{\subsetneq}}% 228A% \def\Entsubsetneqq{\ensuremath{\subsetneq}}% 228A% \def\EntsupnE{\ensuremath{\supsetneq}}% 228B% \def\Entsupne{\ensuremath{\supsetneq}}% 228B% \def\Entsupsetneq{\ensuremath{\supsetneq}}% 228B% \def\Entsupsetneqq{\ensuremath{\supsetneq}}% 228B% \def\EntUnionPlus{\ensuremath{\uplus}}% 228E% \def\Entbiguplus{\ensuremath{\uplus}}% 228E% \def\Entuplus{\ensuremath{\uplus}}% 228E% \def\Entxuplus{\ensuremath{\uplus}}% 228E% \def\EntSquareSubset{\ensuremath{\sqsubset}}% 228F% \def\Entsqsub{\ensuremath{\sqsubset}}% 228F% \def\Entsqsubset{\ensuremath{\sqsubset}}% 228F% \def\EntSquareSuperset{\ensuremath{\sqsupset}}% 2290% \def\Entsqsup{\ensuremath{\sqsupset}}% 2290% \def\Entsqsupset{\ensuremath{\sqsupset}}% 2290% \def\EntSquareSubsetEqual{\ensuremath{\sqsubseteq}}% 2291% \def\Entsqsube{\ensuremath{\sqsubseteq}}% 2291% \def\Entsqsubseteq{\ensuremath{\sqsubseteq}}% 2291% \def\EntSquareSupersetEqual{\ensuremath{\sqsupseteq}}% 2292% \def\Entsqsupe{\ensuremath{\sqsupseteq}}% 2292% \def\Entsqsupseteq{\ensuremath{\sqsupseteq}}% 2292% \def\EntSquareIntersection{\ensuremath{\sqcap}}% 2293% \def\Entsqcap{\ensuremath{\sqcap}}% 2293% \def\EntSquareUnion{\ensuremath{\sqcup}}% 2294% \def\Entbigsqcup{\ensuremath{\sqcup}}% 2294% \def\Entsqcup{\ensuremath{\sqcup}}% 2294% \def\Entxsqcup{\ensuremath{\sqcup}}% 2294% \def\EntCirclePlus{\ensuremath{\oplus}}% 2295% \def\Entbigoplus{\ensuremath{\oplus}}% 2295% \def\Entoplus{\ensuremath{\oplus}}% 2295% \def\Entxoplus{\ensuremath{\oplus}}% 2295% \def\EntCircleMinus{\ensuremath{\ominus}}% 2296% \def\Entominus{\ensuremath{\ominus}}% 2296% \def\EntCircleTimes{\ensuremath{\otimes}}% 2297% \def\Entbigotimes{\ensuremath{\otimes}}% 2297% \def\Entotimes{\ensuremath{\otimes}}% 2297% \def\Entxotime{\ensuremath{\otimes}}% 2297% \def\Entoslash{\ifmmode \oslash\else \o\fi}% 2298% \def\Entosol{\ifmmode \oslash\else \o\fi}% 2298% \def\EntCircleDot{\ensuremath{\odot}}% 2299% \def\Entbigodot{\ensuremath{\odot}}% 2299% \def\Entodot{\ensuremath{\odot}}% 2299% \def\Entxodot{\ensuremath{\odot}}% 2299% \def\Entcircledcirc{\ensuremath{\circledcirc}}% 229A% \def\Entocir{\ensuremath{\circledcirc}}% 229A% \def\Entcircledast{\ensuremath{\circledast}}% 229B% \def\Entoast{\ensuremath{\circledast}}% 229B% \def\Entcircleddash{\ensuremath{\circleddash}}% 229D% \def\Entodash{\ensuremath{\circleddash}}% 229D% \def\Entboxplus{\ensuremath{\boxplus}}% 229E% \def\Entplusb{\ensuremath{\boxplus}}% 229E% \def\Entboxminus{\ensuremath{\boxminus}}% 229F% \def\Entminusb{\ensuremath{\boxminus}}% 229F% \def\Entboxtimes{\ensuremath{\boxtimes}}% 22A0% \def\Enttimesb{\ensuremath{\boxtimes}}% 22A0% \def\Entdotsquare{\ensuremath{\boxdot}}% 22A1% \def\Entsdotb{\ensuremath{\boxdot}}% 22A1% \def\EntRightTee{\ensuremath{\vdash}}% 22A2% \def\Entvdash{\ensuremath{\vdash}}% 22A2% \def\EntLeftTee{\ensuremath{\dashv}}% 22A3% \def\Entdashv{\ensuremath{\dashv}}% 22A3% \def\EntDownTee{\ensuremath{\top}}% 22A4% \def\Enttop{\ensuremath{\top}}% 22A4% \def\EntUpTee{\ensuremath{\perp}}% 22A5% \def\Entbot{\ensuremath{\perp}}% 22A5% \def\Entbottom{\ensuremath{\perp}}% 22A5% \def\Entperp{\ensuremath{\perp}}% 22A5% \def\Entmodels{\ensuremath{\models}}% 22A7% \def\EntDoubleRightTee{\ensuremath{\vDash}}% 22A8% \def\EntvDash{\ensuremath{\vDash}}% 22A8% \def\EntVdash{\ensuremath{\Vdash}}% 22A9% \def\EntVvdash{\ensuremath{\Vvdash}}% 22AA% \def\EntVDash{\ensuremath{\VDash}}% 22AB% \def\Entnvdash{\ensuremath{\nvdash}}% 22AC% \def\EntnvDash{\ensuremath{\nvDash}}% 22AD% \def\EntnVdash{\ensuremath{\nVdash}}% 22AE% \def\EntnVDash{\ensuremath{\nVDash}}% 22AF% \def\EntLeftTriangle{\ensuremath{\vartriangleleft}}% 22B2% \def\Entvartriangleleft{\ensuremath{\vartriangleleft}}% 22B2% \def\Entvltri{\ensuremath{\vartriangleleft}}% 22B2% \def\EntRightTriangle{\ensuremath{\vartriangleright}}% 22B3% \def\Entvartriangleright{\ensuremath{\vartriangleright}}% 22B3% \def\Entvrtri{\ensuremath{\vartriangleright}}% 22B3% \def\EntLeftTriangleEqual{\ensuremath{\trianglelefteq}}% 22B4% \def\Entltrie{\ensuremath{\trianglelefteq}}% 22B4% \def\Enttrianglelefteq{\ensuremath{\trianglelefteq}}% 22B4% \def\EntRightTriangleEqual{\ensuremath{\trianglerighteq}}% 22B5% \def\Entrtrie{\ensuremath{\trianglerighteq}}% 22B5% \def\Enttrianglerighteq{\ensuremath{\trianglerighteq}}% 22B5% \def\Entorigof{\ensuremath{\origof}}% 22B6% \def\Entimof{\ensuremath{\imof}}% 22B7% \def\Entmultimap{\ensuremath{\multimap}}% 22B8% \def\Entmumap{\ensuremath{\multimap}}% 22B8% \def\Enthercon{\ensuremath{\Elhercon}}% 22B9% \def\Entintcal{\ensuremath{\intercal}}% 22BA% \def\Entintercal{\ensuremath{\intercal}}% 22BA% \def\Entveebar{\ensuremath{\veebar}}% 22BB% \def\Entbarwed{\ensuremath{\barwedge}}% 22BC% \def\Entbarwedge{\ensuremath{\barwedge}}% 22BC% \def\Entvangrt{\ensuremath{\ElangNINETY}}% 22BE% \def\EntWedge{\ensuremath{\Elxwedge}}% 22C0% \def\Entbigwedge{\ensuremath{\Elsevierxwedge}}% 22C0% \def\Entxwedge{\ensuremath{\Elsevierxwedge}}% 22C0% \def\EntVee{\ensuremath{\Elxvee}}% 22C1% \def\Entbigvee{\ensuremath{\Elsevierxvee}}% 22C1% \def\Entxvee{\ensuremath{\Elsevierxvee}}% 22C1% \def\EntIntersection{\ensuremath{\bigcap}}% 22C2% \def\Entbigcap{\ensuremath{\bigcap}}% 22C2% \def\Entxcap{\ensuremath{\bigcap}}% 22C2% \def\EntUnion{\ensuremath{\bigcup}}% 22C3% \def\Entbigcup{\ensuremath{\bigcup}}% 22C3% \def\Entxcup{\ensuremath{\bigcup}}% 22C3% \def\Entdiam{\ensuremath{\diamond}}% 22C4% \def\Entdiamond{\ensuremath{\diamond}}% 22C4% \def\Entsdot{\ensuremath{\cdot}}% 22C5% \def\EntStar{\ensuremath{\star}}% 22C6% \def\Entsstarf{\ensuremath{\star}}% 22C6% \def\Entstar{\ensuremath{\star}}% 22C6% \def\Entdivideontimes{\ensuremath{\divideontimes}}% 22C7% \def\Entdivonx{\ensuremath{\divideontimes}}% 22C7% \def\Entbowtie{\ensuremath{\bowtie}}% 22C8% \def\Entltimes{\ensuremath{\ltimes}}% 22C9% \def\Entrtimes{\ensuremath{\rtimes}}% 22CA% \def\Entleftthreetimes{\ensuremath{\leftthreetimes}}% 22CB% \def\Entlthree{\ensuremath{\leftthreetimes}}% 22CB% \def\Entrightthreetimes{\ensuremath{\rightthreetimes}}% 22CC% \def\Entrthree{\ensuremath{\rightthreetimes}}% 22CC% \def\Entbacksimeq{\ensuremath{\backsimeq}}% 22CD% \def\Entbsime{\ensuremath{\backsimeq}}% 22CD% \def\Entcurlyvee{\ensuremath{\curlyvee}}% 22CE% \def\Entcuvee{\ensuremath{\curlyvee}}% 22CE% \def\Entcurlywedge{\ensuremath{\curlywedge}}% 22CF% \def\Entcuwed{\ensuremath{\curlywedge}}% 22CF% \def\EntSub{\ensuremath{\Subset}}% 22D0% \def\EntSup{\ensuremath{\Supset}}% 22D1% \def\EntSupset{\ensuremath{\Supset}}% 22D1% \def\EntCap{\ensuremath{\Cap}}% 22D2% \def\EntCup{\ensuremath{\Cup}}% 22D3% \def\Entfork{\ensuremath{\pitchfork}}% 22D4% \def\Entpitchfork{\ensuremath{\pitchfork}}% 22D4% \def\Entldot{\ensuremath{\lessdot}}% 22D6% \def\Entlessdot{\ensuremath{\lessdot}}% 22D6% \def\Entltdot{\ensuremath{\lessdot}}% 22D6% \def\Entgsdot{\ensuremath{\gtrdot}}% 22D7% \def\Entgtdot{\ensuremath{\gtrdot}}% 22D7% \def\Entgtrdot{\ensuremath{\gtrdot}}% 22D7% \def\EntLl{\ensuremath{\lll}}% 22D8% \def\EntGg{\ensuremath{\ggg}}% 22D9% \def\Entggg{\ensuremath{\ggg}}% 22D9% \def\EntLessEqualGreater{\ensuremath{\lesseqgtr}}% 22DA% \def\EntlEg{\ensuremath{\lesseqgtr}}% 22DA% \def\Entleg{\ensuremath{\lesseqgtr}}% 22DA% \def\Entlesseqgtr{\ensuremath{\lesseqgtr}}% 22DA% \def\Entlesseqqgtr{\ensuremath{\lesseqgtr}}% 22DA% \def\EntGreaterEqualLess{\ensuremath{\gtreqless}}% 22DB% \def\EntgEl{\ensuremath{\gtreqless}}% 22DB% \def\Entgel{\ensuremath{\gtreqless}}% 22DB% \def\Entgtreqless{\ensuremath{\gtreqless}}% 22DB% \def\Entgtreqqless{\ensuremath{\gtreqless}}% 22DB% \def\Entels{\ensuremath{\eqslantless}}% 22DC% \def\Enteqslantless{\ensuremath{\eqslantless}}% 22DC% \def\Entegs{\ensuremath{\eqslantgtr}}% 22DD% \def\Enteqslantgtr{\ensuremath{\eqslantgtr}}% 22DD% \def\Entcuepr{\ensuremath{\curlyeqprec}}% 22DE% \def\Entcurlyeqprec{\ensuremath{\curlyeqprec}}% 22DE% \def\Entcuesc{\ensuremath{\curlyeqsucc}}% 22DF% \def\Entcurlyeqsucc{\ensuremath{\curlyeqsucc}}% 22DF% \def\EntNotSquareSubsetEqual{\ensuremath{\not\sqsubseteq}}% 22E2% \def\Entnsqsube{\ensuremath{\not\sqsubseteq}}% 22E2% \def\EntNotSquareSupersetEqual{\ensuremath{\not\sqsupseteq}}% 22E3% \def\Entnsqsupe{\ensuremath{\not\sqsupseteq}}% 22E3% \def\Entlnsim{\ensuremath{\lnsim}}% 22E6% \def\Entgnsim{\ensuremath{\gnsim}}% 22E7% \def\Entprecnapprox{\ensuremath{\precnapprox}}% 22E8% \def\Entprecnsim{\ensuremath{\precnapprox}}% 22E8% \def\Entprnap{\ensuremath{\precnapprox}}% 22E8% \def\Entprnsim{\ensuremath{\precnapprox}}% 22E8% \def\Entscnap{\ensuremath{\succnsim}}% 22E9% \def\Entscnsim{\ensuremath{\succnsim}}% 22E9% \def\Entsuccnapprox{\ensuremath{\succnsim}}% 22E9% \def\Entsuccnsim{\ensuremath{\succnsim}}% 22E9% \def\EntNotLeftTriangle{\ensuremath{\ntriangleleft}}% 22EA% \def\Entnltri{\ensuremath{\ntriangleleft}}% 22EA% \def\Entntriangleleft{\ensuremath{\ntriangleleft}}% 22EA% \def\EntNotRightTriangle{\ensuremath{\ntriangleright}}% 22EB% \def\Entnrtri{\ensuremath{\ntriangleright}}% 22EB% \def\Entntriangleright{\ensuremath{\ntriangleright}}% 22EB% \def\EntNotLeftTriangleEqual{\ensuremath{\ntrianglelefteq}}% 22EC% \def\Entnltrie{\ensuremath{\ntrianglelefteq}}% 22EC% \def\Entntrianglelefteq{\ensuremath{\ntrianglelefteq}}% 22EC% \def\EntNotRightTriangleEqual{\ensuremath{\ntrianglerighteq}}% 22ED% \def\Entnrtrie{\ensuremath{\ntrianglerighteq}}% 22ED% \def\Entntrianglerighteq{\ensuremath{\ntrianglerighteq}}% 22ED% \def\Entvellip{\ensuremath{\vdots}}% 22EE% \def\Entctdot{\ensuremath{\cdots}}% 22EF% \def\Entutdot{\ensuremath{\zutdot}}% 22F0% \def\Entdtdot{\ensuremath{\ddots}}% 22F1% \def\EntBarwed{\ensuremath{\doublebarwedge}}% 2306% \def\Entdoublebarwedge{\ensuremath{\doublebarwedge}}% 2306% \def\EntLeftCeiling{\ensuremath{\lceil}}% 2308% \def\Entlceil{\ensuremath{\lceil}}% 2308% \def\EntRightCeiling{\ensuremath{\rceil}}% 2309% \def\Entrceil{\ensuremath{\rceil}}% 2309% \def\EntLeftFloor{\ensuremath{\lfloor}}% 230A% \def\Entlfloor{\ensuremath{\lfloor}}% 230A% \def\EntRightFloor{\ensuremath{\rfloor}}% 230B% \def\Entrfloor{\ensuremath{\rfloor}}% 230B% \def\Entdrcrop{\MISSING{drcrop}}% 230C% \def\Entdlcrop{\MISSING{dlcrop}}% 230D% \def\Enturcrop{\MISSING{urcrop}}% 230E% \def\Entulcrop{\MISSING{ulcrop}}% 230F% \def\Enttelrec{\ensuremath{\MISSING{telrec}}}% 2315% \def\Enttarget{\ensuremath{\mathchar"2208}}% 2316% \def\Entulcorn{\ensuremath{\ulcorner}}% 231C% \def\Entulcorner{\ensuremath{\ulcorner}}% 231C% \def\Enturcorn{\ensuremath{\urcorner}}% 231D% \def\Enturcorner{\ensuremath{\urcorner}}% 231D% \def\Entdlcorn{\ensuremath{\llcorner}}% 231E% \def\Entllcorner{\ensuremath{\llcorner}}% 231E% \def\Entdrcorn{\ensuremath{\lrcorner}}% 231F% \def\Entlrcorner{\ensuremath{\lrcorner}}% 231F% \def\Entfrown{\ensuremath{\frown}}% 2322% \def\Entsmile{\ensuremath{\smile}}% 2323% \def\Entblank{\textvisiblespace}% 2423% \def\Entboxh{\MISSING{boxh}}% 2500% \def\Entboxv{\MISSING{boxv}}% 2502% \def\Entboxdr{\MISSING{boxdr}}% 250C% \def\Entboxdl{\MISSING{boxdl}}% 2510% \def\Entboxur{\MISSING{boxur}}% 2514% \def\Entboxul{\MISSING{boxul}}% 2518% \def\Entboxvr{\MISSING{boxvr}}% 251C% \def\Entboxvl{\MISSING{boxvl}}% 2524% \def\Entboxhd{\MISSING{boxhd}}% 252C% \def\Entboxhu{\MISSING{boxhu}}% 2534% \def\Entboxvh{\MISSING{boxvh}}% 253C% \def\EntboxH{\MISSING{boxH}}% 2550% \def\EntboxV{\MISSING{boxV}}% 2551% \def\EntboxDR{\MISSING{boxDR}}% 2552% \def\EntboxDr{\MISSING{boxDr}}% 2553% \def\EntboxdR{\MISSING{boxdR}}% 2554% \def\EntboxDL{\MISSING{boxDL}}% 2555% \def\EntboxdL{\MISSING{boxdL}}% 2556% \def\EntboxDl{\MISSING{boxDl}}% 2557% \def\EntboxUR{\MISSING{boxUR}}% 2558% \def\EntboxuR{\MISSING{boxuR}}% 2559% \def\EntboxUr{\MISSING{boxUr}}% 255A% \def\EntboxUL{\MISSING{boxUL}}% 255B% \def\EntboxUl{\MISSING{boxUl}}% 255C% \def\EntboxuL{\MISSING{boxuL}}% 255D% \def\EntboxvR{\MISSING{boxvR}}% 255E% \def\EntboxVR{\MISSING{boxVR}}% 255F% \def\EntboxVr{\MISSING{boxVr}}% 2560% \def\EntboxvL{\MISSING{boxvL}}% 2561% \def\EntboxVL{\MISSING{boxVL}}% 2562% \def\EntboxVl{\MISSING{boxVl}}% 2563% \def\EntboxhD{\MISSING{boxhD}}% 2564% \def\EntboxHD{\MISSING{boxHD}}% 2565% \def\EntboxHd{\MISSING{boxHd}}% 2566% \def\EntboxhU{\MISSING{boxhU}}% 2567% \def\EntboxHU{\MISSING{boxHU}}% 2568% \def\EntboxHu{\MISSING{boxHu}}% 2569% \def\EntboxvH{\MISSING{boxvH}}% 256A% \def\EntboxVH{\MISSING{boxVH}}% 256B% \def\EntboxVh{\MISSING{boxVh}}% 256C% \def\Entuhblk{\MISSING{uhblk}}% 2580% \def\Entlhblk{\MISSING{lhblk}}% 2584% \def\Entblock{\MISSING{block}}% 2588% \def\Entblk14{\MISSING{blk14}}% 2591% \def\Entblk12{\MISSING{blk12}}% 2592% \def\Entblk34{\MISSING{blk34}}% 2593% \def\Entblacksquare{\ensuremath{\blacksquare}}% 25A0% \def\Entsquarf{\ensuremath{\blacksquare}}% 25A0% \def\Entsqu{\ensuremath{\square}}% 25A1% \def\Entsquare{\ensuremath{\square}}% 25A1% \def\Entsquf{\ensuremath{\blacksquare}}% 25AA% \def\Entrect{\ensuremath{\fbox{~~}}}% 25AD% \def\Entmarker{\MISSING{marker}}% 25AE% \def\Entbigtriangleup{\ensuremath{\bigtriangleup}}% 25B3% \def\Entxutri{\ensuremath{\bigtriangleup}}% 25B3% \def\Entblacktriangle{\ensuremath{\blacktriangle}}% 25B4% \def\Entutrif{\ensuremath{\blacktriangle}}% 25B4% \def\Enttriangle{\ensuremath{\vartriangle}}% 25B5% \def\Entutri{\ensuremath{\vartriangle}}% 25B5% \def\Entblacktriangleright{\ensuremath{\blacktriangleright}}% 25B8% \def\Entrtrif{\ensuremath{\blacktriangleright}}% 25B8% \def\Entrtri{\ensuremath{\triangleright}}% 25B9% \def\Enttriangleright{\ensuremath{\triangleright}}% 25B9% \def\Entbigtriangledown{\ensuremath{\bigtriangledown}}% 25BD% \def\Entxdtri{\ensuremath{\bigtriangledown}}% 25BD% \def\Entblacktriangledown{\ensuremath{\blacktriangledown}}% 25BE% \def\Entdtrif{\ensuremath{\blacktriangledown}}% 25BE% \def\Entdtri{\ensuremath{\triangledown}}% 25BF% \def\Enttriangledown{\ensuremath{\triangledown}}% 25BF% \def\Entblacktriangleleft{\ensuremath{\blacktriangleleft}}% 25C2% \def\Entltrif{\ensuremath{\blacktriangleleft}}% 25C2% \def\Entltri{\ensuremath{\triangleleft}}% 25C3% \def\Enttriangleleft{\ensuremath{\triangleleft}}% 25C3% \def\Entloz{\ensuremath{\lozenge}}% 25CA% \def\Entlozenge{\ensuremath{\lozenge}}% 25CA% \def\Entcir{\ensuremath{\circ}}% 25CB% \def\Entbigcirc{\ensuremath{\bigcirc}}% 25EF% \def\Entxcirc{\ensuremath{\bigcirc}}% 25EF% \def\Entbigstar{\ensuremath{\bigstar}}% 2605% \def\Entstarf{\ensuremath{\bigstar}}% 2605% \def\Entphone{\ding{37}}% 260E% \def\Entfemale{\MISSING{female}}% 2640% \def\Entmale{\MISSING{male}}% 2642% \def\Entspades{\ensuremath{\spadesuit}}% 2660% \def\Entspadesuit{\ensuremath{\spadesuit}}% 2660% \def\Entclubs{\ensuremath{\clubsuit}}% 2663% \def\Entclubsuit{\ensuremath{\clubsuit}}% 2663% \def\Enthearts{\ensuremath{\heartsuit}}% 2665% \def\Entdiams{\ensuremath{\diamondsuit}}% 2666% \def\Entsung{\textmusicalnote}% 2669% \def\Entflat{\ensuremath{\flat}}% 266D% \def\Entnatur{\ensuremath{\natural}}% 266E% \def\Entnatural{\ensuremath{\natural}}% 266E% \def\Entsharp{\ensuremath{\sharp}}% 266F% \def\Entcheck{\ensuremath{\checkmark}}% 2713% \def\Entcheckmark{\ensuremath{\checkmark}}% 2713% \def\Entcross{\MISSING{ballotcross}}% 2717% \def\Entmalt{\ensuremath{\maltese}}% 2720% \def\Entmaltese{\ensuremath{\maltese}}% 2720% \def\Entlozf{\ensuremath{\blacklozenge}}% 2726% \def\Entsext{\MISSING{sext}}% 2736% \def\EntLeftAngleBracket{\ensuremath{\langle}}% 3008% \def\Entlang{\ensuremath{\langle}}% 3008% \def\Entlangle{\ensuremath{\langle}}% 3008% \def\EntRightAngleBracket{\ensuremath{\rangle}}% 3009% \def\Entrang{\ensuremath{\rangle}}% 3009% \def\Entrangle{\ensuremath{\rangle}}% 3009% \def\EntLang{\ensuremath{\Elzldang}}% 300A% \def\EntRang{\ensuremath{\Elzrdang}}% 300B% \def\Entloang{\ensuremath{\Elloang}}% 3018% \def\Entroang{\ensuremath{\Elroang}}% 3019% \def\Entlobrk{\ensuremath{\lobrk}}% 301A% \def\Entrobrk{\ensuremath{\robrk}}% 301B% \def\Entlpargt{\MISSING{leftparengtr}}% ???1% \def\Entjnodot{\ifmmode \jmath\else \j\fi}% ???2% \def\Entfjlig{fj}% ???3% \def\EntPrecedesEqual{\ensuremath{\preceq}}% ???4% \def\EntprE{\ensuremath{\preceq}}% ???4% \def\Entpre{\ensuremath{\preceq}}% ???4% \def\Entpreceq{\ensuremath{\preceq}}% ???4% \def\EntDoubleLongLeftArrow{\ensuremath{\Longleftarrow}}% E200% \def\EntLongleftarrow{\ensuremath{\Longleftarrow}}% E200% \def\EntxlArr{\ensuremath{\Longleftarrow}}% E200% \def\EntLongLeftArrow{\ensuremath{\longleftarrow}}% E201% \def\Entlongleftarrow{\ensuremath{\longleftarrow}}% E201% \def\Entxlarr{\ensuremath{\longleftarrow}}% E201% \def\EntDoubleLongLeftRightArrow{\ensuremath{\Longleftrightarrow}}% E202% \def\EntLongleftrightarrow{\ensuremath{\Longleftrightarrow}}% E202% \def\EntxhArr{\ensuremath{\Longleftrightarrow}}% E202% \def\EntLongLeftRightArrow{\ensuremath{\longleftrightarrow}}% E203% \def\Entlongleftrightarrow{\ensuremath{\longleftrightarrow}}% E203% \def\Entxharr{\ensuremath{\longleftrightarrow}}% E203% \def\EntDoubleLongRightArrow{\ensuremath{\Longrightarrow}}% E204% \def\EntLongrightarrow{\ensuremath{\Longrightarrow}}% E204% \def\EntxrArr{\ensuremath{\Longrightarrow}}% E204% \def\EntLongRightArrow{\ensuremath{\longrightarrow}}% E205% \def\Entlongrightarrow{\ensuremath{\longrightarrow}}% E205% \def\Entxrarr{\ensuremath{\longrightarrow}}% E205% \def\Entlongmapsto{\ensuremath{\longmapsto}}% E208% \def\Entxmap{\ensuremath{\longmapsto}}% E208% \def\Enthkswarow{\ensuremath{\Elswarhk}}% E20A% \def\Entswarhk{\ensuremath{\Elsevierswarhk}}% E20A% \def\Enthksearow{\ensuremath{\Elsearhk}}% E20B% \def\Entsearhk{\ensuremath{\Elseviersearhk}}% E20B% \def\Entnwarhk{\ensuremath{\Elnwarhk}}% E20C% \def\Entnearhk{\ensuremath{\Elnearhk}}% E20D% \def\Entnesear{\ensuremath{\Elnesear}}% E20E% \def\Enttoea{\ensuremath{\Elseviernesear}}% E20E% \def\Entswnwar{\ensuremath{\Elswnwar}}% E210% \def\Entnwnear{\ensuremath{\Elnwnear}}% E211% \def\EntMap{\ensuremath{\ElMap}}% E212% \def\Entlfisht{\ensuremath{\Ellfisht}}% E214% \def\Entrfisht{\ensuremath{\Elrfisht}}% E215% \def\EntDownArrowUpArrow{\ensuremath{\zduarr}}% E216% \def\Entduarr{\ensuremath{\zduarr}}% E216% \def\EntReverseUpEquilibrium{\ensuremath{\ElzduharTWO}}% E217% \def\Entduhar{\ensuremath{\ElsevierzduharTWO}}% E217% \def\EntUpEquilibrium{\ensuremath{\ElzudharTWO}}% E218% \def\Entudhar{\ensuremath{\ElsevierzudharTWO}}% E218% \def\Entrdca{\ensuremath{\Elzarrdr}}% E219% \def\Entldca{\ensuremath{\Elzarrdl}}% E21A% \def\Entrarrc{\ensuremath{\Elzrarrc}}% E21C% \def\Entnrarrc{\ensuremath{\Elznrarrc}}% E21D% \def\Entamalg{\ensuremath{\amalg}}% E251% \def\Entintprod{\ensuremath{\Eliprod}}% E259% \def\Entiprod{\ensuremath{\Elsevieriprod}}% E259% \def\Entplusdu{\ensuremath{\Eldoplus}}% E25A% \def\Entminusdu{\ensuremath{\Eldminus}}% E25B% \def\Entloplus{\ensuremath{\Elzoplusl}}% E25C% \def\Entroplus{\ensuremath{\Elzoplusr}}% E25D% \def\Entlotimes{\ensuremath{\Elzotimsl}}% E25E% \def\Entohbar{\ensuremath{\Elzplims}}% E260% \def\Entodiv{\ensuremath{\Elzodiv}}% E285% \def\Entrpargt{\ensuremath{\Elrpargt}}% E291% \def\Entlparlt{\ensuremath{<\kern-0.58em(}}% E292% \def\Entrmoust{\ensuremath{\rmoustache}}% E293% \def\Entrmoustache{\ensuremath{\rmoustache}}% E293% \def\Entlmoust{\ensuremath{\lmoustache}}% E294% \def\Entlmoustache{\ensuremath{\lmoustache}}% E294% \def\Entgvertneqq{\ensuremath{\gvertneqq}}% E2A1% \def\EntgvnE{\ensuremath{\gvertneqq}}% E2A1% \def\Entlnap{\ensuremath{\lnapprox}}% E2A2% \def\Entlnapprox{\ensuremath{\lnapprox}}% E2A2% \def\Entlvertneqq{\ensuremath{\lvertneqq}}% E2A4% \def\EntlvnE{\ensuremath{\lvertneqq}}% E2A4% \def\EntNotGreaterEqual{\ensuremath{\not\geq}}% E2A6% \def\Entnge{\ensuremath{\not\geq}}% E2A6% \def\Entngeq{\ensuremath{\not\geq}}% E2A6% \def\EntNotLessEqual{\ensuremath{\not\leq}}% E2A7% \def\Entnle{\ensuremath{\not\leq}}% E2A7% \def\Entnleq{\ensuremath{\not\leq}}% E2A7% \def\Entnshortmid{\ensuremath{\nshortmid}}% E2AA% \def\Entnsmid{\ensuremath{\nshortmid}}% E2AA% \def\Entnshortparallel{\ensuremath{\nshortparallel}}% E2AB% \def\Entnspar{\ensuremath{\nshortparallel}}% E2AB% \def\Entprecneqq{\ensuremath{\precneqq}}% E2B3% \def\EntprnE{\ensuremath{\precneqq}}% E2B3% \def\EntscnE{\ensuremath{\succneqq}}% E2B5% \def\Entsuccneqq{\ensuremath{\succneqq}}% E2B5% \def\Entvarsubsetneqq{\ensuremath{\varsubsetneqq}}% E2B8% \def\EntvsubnE{\ensuremath{\varsubsetneqq}}% E2B8% \def\Entvarsubsetneq{\ensuremath{\varsubsetneq}}% E2B9% \def\Entvsubne{\ensuremath{\varsubsetneq}}% E2B9% \def\Entvarsupsetneq{\ensuremath{\varsupsetneq}}% E2BA% \def\Entvsupne{\ensuremath{\varsupsetneq}}% E2BA% \def\Entvarsupsetneqq{\ensuremath{\varsupsetneqq}}% E2BB% \def\EntvsupnE{\ensuremath{\varsupsetneqq}}% E2BB% \def\Entnapid{\ensuremath{\not\apid}}% E2BC% \def\Entempty{\ensuremath{\emptyset}}% E2D3% \def\Entemptyset{\ensuremath{\emptyset}}% E2D3% \def\Entjmath{\ensuremath{\jmath}}% E2D4% \def\Enthbar{\ensuremath{\hslash}}% E2D5% \def\Entplank{\ensuremath{\hslash}}% E2D5% \def\Entshortmid{\ensuremath{\shortmid}}% E301% \def\Entsmid{\ensuremath{\shortmid}}% E301% \def\Entshortparallel{\ensuremath{\shortparallel}}% E302% \def\Entspar{\ensuremath{\shortparallel}}% E302% \def\Entsmallsmile{\ensuremath{\smallsmile}}% E303% \def\Entssmile{\ensuremath{\smallsmile}}% E303% \def\Entthickapprox{\ensuremath{\thickapprox}}% E306% \def\Entthkap{\ensuremath{\thickapprox}}% E306% \def\Entddotseq{\ensuremath{\EleDDot}}% E309% \def\EnteDDot{\ensuremath{\ElseviereDDot}}% E309% \def\Entsiml{\ensuremath{\Elsiml}}% E30B% \def\Entsimg{\ensuremath{\Elsimg}}% E30C% \def\EntVbar{\ensuremath{\ElVbar}}% E30D% \def\EntColone{\ensuremath{\Colon}}% E30E% \def\Entiff{\ensuremath{\Leftrightarrow}}% E365% \def\Entandand{\ensuremath{\ElAnd}}% E36E% \def\Entqprime{\ensuremath{''''}}% E371% \def\Entiinfin{\ensuremath{\Elzmstpos}}% E372% \def\EntAnd{\ensuremath{\ElAnd}}% E374% \def\EntOr{\ensuremath{\ElOr}}% E375% \def\Entquatint{\ensuremath{\Elzsqint}}% E377% \def\Entlopar{\ensuremath{\Elloang}}% E379% \def\Entropar{\ensuremath{\Elroang}}% E37A% \def\Entfltns{\ensuremath{\Elzparl}}% E381% \def\Entcirfnint{\ensuremath{\Elzeint}}% E395% \def\Entseswar{\ensuremath{\Elseswar}}% E406% \def\Enttosa{\ensuremath{\Elsevierseswar}}% E406% \def\Entovbar{\ensuremath{\Elovbar}}% E40B% \def\Entrotimes{\ensuremath{\Elzotimsr}}% E40D% \def\Entgnap{\ensuremath{\gnapprox}}% E411% \def\Entgnapprox{\ensuremath{\gnapprox}}% E411% \def\EntNotPrecedesEqual{\ensuremath{\not\preceq}}% E412% \def\Entnpre{\ensuremath{\not\preceq}}% E412% \def\Entnpreceq{\ensuremath{\not\preceq}}% E412% \def\EntNotSucceedsEqual{\ensuremath{\not\succeq}}% E413% \def\Entnsce{\ensuremath{\not\succeq}}% E413% \def\Entnsucceq{\ensuremath{\not\succeq}}% E413% \def\EntcircledS{\ensuremath{\circledS}}% E41D% \def\EntoS{\ensuremath{\circledS}}% E41D% \def\Entbackepsilon{\ensuremath{\backepsilon}}% E420% \def\Entbepsi{\ensuremath{\backepsilon}}% E420% \def\EntGreaterSlantEqual{\ensuremath{\geqslant}}% E421% \def\Entgeqslant{\ensuremath{\geqslant}}% E421% \def\Entges{\ensuremath{\geqslant}}% E421% \def\EntLessSlantEqual{\ensuremath{\leqslant}}% E425% \def\Entleqslant{\ensuremath{\leqslant}}% E425% \def\Entles{\ensuremath{\leqslant}}% E425% \def\Entsfrown{\ensuremath{\smallfrown}}% E426% \def\Entsmallfrown{\ensuremath{\smallfrown}}% E426% \def\Entthicksim{\ensuremath{\thicksim}}% E429% \def\Entthksim{\ensuremath{\thicksim}}% E429% \def\EntAfr{\ensuremath{\mathfrak{A}}}% E47C% \def\EntBfr{\ensuremath{\mathfrak{B}}}% E47D% \def\EntCfr{\ensuremath{\mathfrak{C}}}% E47E% \def\EntDfr{\ensuremath{\mathfrak{D}}}% E47F% \def\EntEfr{\ensuremath{\mathfrak{E}}}% E480% \def\EntFfr{\ensuremath{\mathfrak{F}}}% E481% \def\EntGfr{\ensuremath{\mathfrak{G}}}% E482% \def\EntHfr{\ensuremath{\mathfrak{H}}}% E483% \def\EntIfr{\ensuremath{\mathfrak{I}}}% E484% \def\EntJfr{\ensuremath{\mathfrak{J}}}% E485% \def\EntKfr{\ensuremath{\mathfrak{K}}}% E486% \def\EntLfr{\ensuremath{\mathfrak{L}}}% E487% \def\EntMfr{\ensuremath{\mathfrak{M}}}% E488% \def\EntNfr{\ensuremath{\mathfrak{N}}}% E489% \def\EntOfr{\ensuremath{\mathfrak{O}}}% E48A% \def\EntPfr{\ensuremath{\mathfrak{P}}}% E48B% \def\EntQfr{\ensuremath{\mathfrak{Q}}}% E48C% \def\EntRfr{\ensuremath{\mathfrak{R}}}% E48D% \def\EntSfr{\ensuremath{\mathfrak{S}}}% E48E% \def\EntTfr{\ensuremath{\mathfrak{T}}}% E48F% \def\EntUfr{\ensuremath{\mathfrak{U}}}% E490% \def\EntVfr{\ensuremath{\mathfrak{V}}}% E491% \def\EntWfr{\ensuremath{\mathfrak{W}}}% E492% \def\EntXfr{\ensuremath{\mathfrak{X}}}% E493% \def\EntYfr{\ensuremath{\mathfrak{Y}}}% E494% \def\Entafr{\ensuremath{\mathfrak{a}}}% E495% \def\Entbfr{\ensuremath{\mathfrak{b}}}% E496% \def\Entcfr{\ensuremath{\mathfrak{c}}}% E497% \def\Entdfr{\ensuremath{\mathfrak{d}}}% E498% \def\Entefr{\ensuremath{\mathfrak{e}}}% E499% \def\Entffr{\ensuremath{\mathfrak{f}}}% E49A% \def\Entgfr{\ensuremath{\mathfrak{g}}}% E49B% \def\Enthfr{\ensuremath{\mathfrak{h}}}% E49C% \def\Entifr{\ensuremath{\mathfrak{i}}}% E49D% \def\Entjfr{\ensuremath{\mathfrak{j}}}% E49E% \def\Entkfr{\ensuremath{\mathfrak{k}}}% E49F% \def\Entlfr{\ensuremath{\mathfrak{l}}}% E4A0% \def\Entmfr{\ensuremath{\mathfrak{m}}}% E4A1% \def\Entnfr{\ensuremath{\mathfrak{n}}}% E4A2% \def\Entofr{\ensuremath{\mathfrak{o}}}% E4A3% \def\Entpfr{\ensuremath{\mathfrak{p}}}% E4A4% \def\Entqfr{\ensuremath{\mathfrak{q}}}% E4A5% \def\Entrfr{\ensuremath{\mathfrak{r}}}% E4A6% \def\Entsfr{\ensuremath{\mathfrak{s}}}% E4A7% \def\Enttfr{\ensuremath{\mathfrak{t}}}% E4A8% \def\Entufr{\ensuremath{\mathfrak{u}}}% E4A9% \def\Entvfr{\ensuremath{\mathfrak{v}}}% E4AA% \def\Entwfr{\ensuremath{\mathfrak{w}}}% E4AB% \def\Entxfr{\ensuremath{\mathfrak{x}}}% E4AC% \def\Entyfr{\ensuremath{\mathfrak{y}}}% E4AD% \def\Entzfr{\ensuremath{\mathfrak{z}}}% E4AE% \def\EntAopf{\ensuremath{\mathbb{A}}}% E4AF% \def\EntBopf{\ensuremath{\mathbb{B}}}% E4B0% \def\EntDopf{\ensuremath{\mathbb{D}}}% E4B1% \def\EntEopf{\ensuremath{\mathbb{E}}}% E4B2% \def\EntFopf{\ensuremath{\mathbb{F}}}% E4B3% \def\EntGopf{\ensuremath{\mathbb{G}}}% E4B4% \def\EntHopf{\ensuremath{\mathbb{H}}}% E4B5% \def\EntIopf{\ensuremath{\mathbb{I}}}% E4B6% \def\EntJopf{\ensuremath{\mathbb{J}}}% E4B7% \def\EntKopf{\ensuremath{\mathbb{K}}}% E4B8% \def\EntLopf{\ensuremath{\mathbb{L}}}% E4B9% \def\EntMopf{\ensuremath{\mathbb{M}}}% E4BA% \def\EntNopf{\ensuremath{\mathbb{N}}}% E4BB% \def\EntOopf{\ensuremath{\mathbb{O}}}% E4BC% \def\EntSopf{\ensuremath{\mathbb{S}}}% E4BD% \def\EntTopf{\ensuremath{\mathbb{T}}}% E4BE% \def\EntUopf{\ensuremath{\mathbb{U}}}% E4BF% \def\EntVopf{\ensuremath{\mathbb{V}}}% E4C0% \def\EntWopf{\ensuremath{\mathbb{W}}}% E4C1% \def\EntXopf{\ensuremath{\mathbb{X}}}% E4C2% \def\EntYopf{\ensuremath{\mathbb{Y}}}% E4C3% \def\EntZopf{\ensuremath{\mathbb{Z}}}% E4C4% \def\EntAscr{\ensuremath{\mathcal{A}}}% E4C5% \def\EntBscr{\ensuremath{\mathcal{B}}}% E4C6% \def\EntCscr{\ensuremath{\mathcal{C}}}% E4C7% \def\EntDscr{\ensuremath{\mathcal{D}}}% E4C8% \def\EntEscr{\ensuremath{\mathcal{E}}}% E4C9% \def\EntFscr{\ensuremath{\mathcal{F}}}% E4CA% \def\EntGscr{\ensuremath{\mathcal{G}}}% E4CB% \def\EntHscr{\ensuremath{\mathcal{H}}}% E4CC% \def\EntIscr{\ensuremath{\mathcal{I}}}% E4CD% \def\EntJscr{\ensuremath{\mathcal{J}}}% E4CE% \def\EntKscr{\ensuremath{\mathcal{K}}}% E4CF% \def\EntLscr{\ensuremath{\mathcal{L}}}% E4D0% \def\EntMscr{\ensuremath{\mathcal{M}}}% E4D1% \def\EntNscr{\ensuremath{\mathcal{N}}}% E4D2% \def\EntOscr{\ensuremath{\mathcal{O}}}% E4D3% \def\EntPscr{\ensuremath{\mathcal{P}}}% E4D4% \def\EntQscr{\ensuremath{\mathcal{Q}}}% E4D5% \def\EntRscr{\ensuremath{\mathcal{R}}}% E4D6% \def\EntSscr{\ensuremath{\mathcal{S}}}% E4D7% \def\EntTscr{\ensuremath{\mathcal{T}}}% E4D8% \def\EntUscr{\ensuremath{\mathcal{U}}}% E4D9% \def\EntVscr{\ensuremath{\mathcal{V}}}% E4DA% \def\EntWscr{\ensuremath{\mathcal{W}}}% E4DB% \def\EntXscr{\ensuremath{\mathcal{X}}}% E4DC% \def\EntYscr{\ensuremath{\mathcal{Y}}}% E4DD% \def\EntZscr{\ensuremath{\mathcal{Z}}}% E4DE% \def\Entascr{\ensuremath{\mathcal{a}}}% E4DF% \def\Entbscr{\ensuremath{\mathcal{b}}}% E4E0% \def\Entcscr{\ensuremath{\mathcal{c}}}% E4E1% \def\Entdscr{\ensuremath{\mathcal{d}}}% E4E2% \def\Entescr{\ensuremath{\mathcal{e}}}% E4E3% \def\Entfscr{\ensuremath{\mathcal{f}}}% E4E4% \def\Entgscr{\ensuremath{\mathcal{g}}}% E4E5% \def\Enthscr{\ensuremath{\mathcal{h}}}% E4E6% \def\Entiscr{\ensuremath{\mathcal{i}}}% E4E7% \def\Entjscr{\ensuremath{\mathcal{j}}}% E4E8% \def\Entkscr{\ensuremath{\mathcal{k}}}% E4E9% \def\Entlscr{\ensuremath{\mathcal{l}}}% E4EA% \def\Entmscr{\ensuremath{\mathcal{m}}}% E4EB% \def\Entnscr{\ensuremath{\mathcal{n}}}% E4EC% \def\Entoscr{\ensuremath{\mathcal{o}}}% E4ED% \def\Entpscr{\ensuremath{\mathcal{p}}}% E4EE% \def\Entqscr{\ensuremath{\mathcal{q}}}% E4EF% \def\Entsscr{\ensuremath{\mathcal{s}}}% E4F0% \def\Enttscr{\ensuremath{\mathcal{t}}}% E4F1% \def\Entuscr{\ensuremath{\mathcal{u}}}% E4F2% \def\Entvscr{\ensuremath{\mathcal{v}}}% E4F3% \def\Entwscr{\ensuremath{\mathcal{w}}}% E4F4% \def\Entxscr{\ensuremath{\mathcal{x}}}% E4F5% \def\Entyscr{\ensuremath{\mathcal{y}}}% E4F6% \def\Entzscr{\ensuremath{\mathcal{z}}}% E4F7% \def\Enthyphen{-}% E4F8% \def\Entblacklozenge{\ensuremath{\blacklozenge}}% E501% \def\Entoror{\ensuremath{\ElOr}}% E50E% \def\Entsmallsetminus{\ensuremath{\smallsetminus}}% E844% \def\Entssetmn{\ensuremath{\smallsetminus}}% E844% \def\Entfflig{ff}% FB00% \def\Entfilig{fi}% FB01% \def\Entfllig{fl}% FB02% \def\Entffilig{ffi}% FB03% \def\Entffllig{ffl}% FB04% \def\Entsbsol{\ensuremath{\smallsetminus}}% FE68% % % \end{macrocode} % \Finale % \endinput jade-1.2.1/dsssl/jadetex.ini100444 764 764 42 6604607710 13422 0ustar jjcjjc\input jadetex.ltx \dump \endinputjade-1.2.1/dsssl/jadetex.ins100444 764 764 524 6604607710 13461 0ustar jjcjjc\def\batchfile{jadetex.ins} \input docstrip.tex \keepsilent \preamble \endpreamble \generateFile{jadetex.ltx}{f}{\from{jadetex.dtx}{package}} \generateFile{dsssl.def} {f}{\from{jadetex.dtx}{dsssldef}} \generateFile{isoents.tex}{f}{\from{jadetex.dtx}{isoent}} \Msg{***************************************************************} \endinput jade-1.2.1/dsssl/pdfjadetex.ini100444 764 764 43 6604607710 14115 0ustar jjcjjc\input jadetex.ltx \dump \endinput jade-1.2.1/dsssl/Makefile.jadetex100444 764 764 1450 6604607710 14424 0ustar jjcjjcdefault: jadetex.fmt pdfjadetex.fmt basic: jadetex.ltx tex jadetex.ins jadetex.fmt: basic tex -ini "&hugelatex" jadetex.ini pdfjadetex.fmt: basic pdftex -ini "&pdflatex" -progname=pdfjadetex pdfjadetex.ini install: jadetex.fmt pdfjadetex.fmt (TT=`kpsewhich -expand-var '$$TEXMFMAIN'`;cp pdfjadetex.fmt $$TT/web2c) (TT=`kpsewhich -expand-var '$$TEXMFMAIN'`;cp jadetex.fmt $$TT/web2c) -(TT=`kpsewhich -expand-var '$$TEXMFMAIN'`;\ mkdir $$TT/tex/jadetex ; \ cp dsssl.def isoents.tex jadetex.ltx $$TT/tex/jadetex) clean: -rm jade*.fmt *.log *.aux *.idx dsssl.def isoents.tex jadetex.ltx -rm *.toc test: ./jade -t tex -d ../docbook/print/docbook.dsl tex.sgm distrib: (cd ..; zip -r jadetex jadetex/cooked jadetex/*.dtx jadetex/*.ins \ jadetex/makefile jadetex/*ini) jadetex.ltx: jadetex.dtx jade-1.2.1/jadedoc/ 40775 764 764 0 6610553416 11511 5ustar jjcjjcjade-1.2.1/jadedoc/autoconf.htm100444 764 764 7133 6610550314 14130 0ustar jjcjjc Jade autoconf support

Jade autoconf support

Cees de Groot (cg@sgmltools.org)

With ./configure, you'll have an alternate method to prepare the source distribution for building. This support is experimental, and I'd like to receive feedback and patches for your operating system. If a build with autoconf doesn't work, you can always revert to the original Makefile which is saved by configure to Makefile.dist. make mrproper will undo everything that has been modified by ./configure.

Please note that the autoconf support is not James', but my responsibility: bother me with flames and patches, and I'll try tomake sure that the next release gets fixed where necessary. James cannot do more than forward everything to me, so please save his precious time.

Check http://www.sgmltools.org/jade.html for updates to the Jade autoconf support.

Usage

% ./configure; make; make install

configure options

--help
Print a full list of options. This document only deals with the non-standard options.
--enable-http
This enables the built-in HTTP client so that you can use HTTP as a method for getting to system identifiers.
--enable-default-catalog=pathlist
Provide the built-in definition for SGML_CATALOG_FILES.

Local defines

If you have some extra additions to Jade, you can set CFLAGS/CXXFLAGS and/or LDFLAGS/LIBS at configure time:

CXXFLAGS=-Dmyhacks LDFLAGS=-L/opt/myhacks LIBS=-lmyhacks ./configure

Check the invocation of ld in Makefile.comm for the exact semantics of LDFLAGS and LIBS.

Tested platforms

  • SuSE Linux 5.3 (gcc 2.7.2.1, libc 5.5.46)
  • Solaris 2.6 (gcc 2.8.1)

Shared library support

By default, ./configure attempts to build shared libraries and link against them. This is done via the libtool utility, a utility that knows how to build shared libraries on a number of platforms.

By default, only shared libraries are built. If you have difficulties building shared libraries, or you want to build static versions, you can use the --{enable,disable}{shared,static} options to configure libtool to your likings.

According to the libtool 1.2 docs, shared libraries work on:

  • AIX 3.x (*-*-aix3*)
  • AIX 4.x (*-*-aix4*)
  • AmigaOS (*-*-amigaos*)
  • Digital/UNIX 3.x, 4.x, a.k.a. OSF/1 (*-*-osf3*, *-*-osf4*)
  • FreeBSD 2.x, 3.x (*-*-freebsd2*, *-*-freebsd3*)
  • GNU/Linux ELF (*-*-linux-gnu*, except aout, coff, and oldld)
  • HP-UX 9.x, 10.x (*-*-hpux9*, *-*-hpux10*) [see note]
  • IRIX 5.x, 6.x (*-*-irix5*, *-*-irix6*)
  • NetBSD 1.x (*-*-netbsd*)
  • OpenBSD 2.x (*-*-openbsd*)
  • OS/2 using EMX (*-*-os2*)
  • SCO OpenServer 5.x (*-*-sco3.2v5*)
  • Solaris 2.x (*-*-solaris2*)
  • SunOS 4.x, a.k.a. Solaris 1.x (*-*-sunos4*)
  • UnixWare 2.x (*-*-sysv4.2uw2*)
  • UTS 4.x (*-*-uts4*)
  • All ELF targets that use both the GNU C compiler (gcc) and GNU ld

One more note from the libtool documentation: the HP/UX sed seems to be badly broken, install GNU sed before attempting to build - libtool depends on a working sed.

jade-1.2.1/jadedoc/copying.txt100444 764 764 2367 6606574462 14034 0ustar jjcjjcCopyright (c) 1994, 1995, 1996 James Clark Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ``Software''), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL JAMES CLARK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of James Clark shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from James Clark. jade-1.2.1/jadedoc/dsssl2.htm100444 764 764 25174 6606574462 13570 0ustar jjcjjc Experimental DSSSL extensions for XSL

Experimental DSSSL extensions

This document descibes some experimental extensions to DSSSL that I have implemented in Jade. These are designed so that, with these extensions, DSSSL provides a superset of the semantics XSL for flow object tree construction. Jade has a -2 option that enables these extensions.

These extensions do not include the additional flow object classes and characteristics that will be needed for XSL; in particular they do not include the HTML/CSS flow object classes.

Imperative programming

The following features come from R4RS:

  • assignment (set!) expressions (with restrictions)
  • vectors (with restrictions)
  • call-with-current-continuation (with restrictions)
  • begin expressions
  • multiple expressions in procedure bodies, cond clauses
  • alternate in if expression optional
  • it is not an error when nothing matches in cond or case expression
  • eqv? and memv procedures; these behave as specified in R4RS for vectors but behave the same as equal? for strings and lists

    This is so that case expressions can use eqv? as required by R4RS without breaking compatibility with existing DSSSL code which assumes case expressions with strings and lists will use equal?. R4RS specifies that eqv? should return #t when its arguments "should normally be regarded as the same object". R4RS treats strings and lists as mutable and its specification of eqv? for strings and lists is consistent with this. So long as DSSSL keeps strings and lists as immutable data-types with value semantics, it is more consistent to define eqv? to behave like equal? for them.

The use of side-effects is restricted. Assignment to top-level variables is not allowed. There is also the concept that a memory location can be read-only. When a memory location is read-only, it is an error to change that location. An memory location can be recursively marked as read-only; this means that the memory location along with all memory locations reachable from that memory location become read-only. A memory location is recursively marked as read-only when:

  • an object stored in that memory location is bound to a top-level variable
  • an expression specifying a characteristic is evaluated and a variable that names that memory location occurs free in that expression; for example, this would be an error:
    (let ((x 10pt))
      (make paragraph
        font-size: (begin (set! x 12pt) x)))
    
  • an object stored in that memory location is returned by a (inherited-C) or (actual-C) procedure
  • an object stored in that memory location is passed as the first argument to the node-list-map procedure

A continuation created with call-with-current-continuation cannot be called if it is read-only, and can only be used to return to a stack frame in the current call chain (sometimes referred to as upwards only).

There's a void data type with a single value which can be written as #v. This is returned by cond, case and if expressions which don't match.

Style rules

When a construction rule has a keyword argument list instead of a construct expression it is treated as a style rule. For example,

(element H1
  font-size: 14pt
  font-weight: 'bold)

The keyword argument list can include a use: keyword just as with style expressions. See the XSL proposal for the semantics of style rules.

Extended patterns

The syntax for element patterns is extended. These provide provide a superset of the semantics of XSL patterns. They are allowed both in element construction rules and in contexts where a match-element? pattern is currently allowed (eg select-elements, process-matching-children, process-first-descendant).

A pattern is either a single gi or a list. A list consists of a sequence of gis, where each gi can be followed by one or more keyword/value pairs (where the value is always a single datum). A gi can be #t, a string or a symbol. The following keywords are allowed:

id:
followed by a string or symbol
class:
followed by a string or symbol
repeat:
followed by one of the symbols *, +, ?
only:
followed by one of the symbols of-type, of-any
position:
followed by one of the symbols first-of-type, first-of-any, last-of-type, last-of-any
attributes:
followed by a list of name/value pairs; for backward compatibility with match-element? patterns in the current DSSSL standard the attributes: keyword can be omitted; #t and #f can be used as a value to test for presence or absence of attributes.
children:
followed by a pattern; each of the elements in the pattern must occur as child; repeat: is not allowed in children patterns; the children: qualifier is allowed on any gi in a pattern not just the last element
priority:
followed by an integer; multiple priority: qualifiers are allowed in a pattern and will be added together
importance:
followed by an integer; multiple importance: qualifiers are allowed and will be added together

Class attribute names are declared using

(declare-class-attribute "class")

or

(declare-class-attribute class)

Id attribute names can be declared similarily using declare-id-attribute.

Some examples:

(element (E importance: 42) ...)

(element (E attributes: (A1 V1)) ...)

(element (P E children: C) ...)

(element (P children: C priority: -11
          E children: C attributes: (A1 V1 A2 V2))
 ...)

(element (P E children: (A children: C B children: C)) ...)

The last is equivalent to the following in XSL syntax:

<element type="P">
  <target-element type="E">
     <element type="A">
       <element type="C"/>
     </element>
     <element type="B">
       <element type="C"/>
     </element>
  </target-element>
</element>

Multiple patterns per rule

An or-element construction rule has the syntax

(or-element (pattern+) expression)

where pattern is any pattern that could be allowed in an element construction rule. It is equivalent to a sequence of element construction rules.

For example,

(or-element (H1 H2 H3)
  font-weight: 'bold)

(or-element ((H1 TITLE) (H2 TITLE) (H3 TITLE))
  font-weight: 'bold)
is equivalent to
(element H1
  font-weight: 'bold)

(element H2
  font-weight: 'bold)

(element H3
  font-weight: 'bold)

(element (H1 TITLE)
  font-weight: 'bold)

(element (H2 TITLE)
  font-weight: 'bold)

(element (H3 TITLE)
  font-weight: 'bold)

Flow object macros

A flow object macro can be defined like this:

(declare-flow-object-macro list-item ((indent 1in)
                                      (marker "\bullet")
                                      #!contents contents)
  (make paragraph
    first-line-start-indent: (- indent)
    start-indent: (+ indent (inherited-start-indent))
    (make line-field
          field-width: indent
          (literal marker))
    contents))

 (root
  (make simple-page-sequence
        (make paragraph
              (literal "Para 1"))
        (make list-item
              (literal "Item 1")
              (make list-item
                    indent: .5in
                    marker: "\black-circle"
                    (literal "Sub item 1.1")))
        (make list-item
              font-weight: 'bold
              (literal "Item 2")
              (make list-item
                    (literal "Sub item 2.1")))
        (make paragraph
              (literal "Para 2"))))

If the formal argument list includes #!contents the flow object behaves like a compound flow object, otherwise like an atomic flow object. Inherited characteristics can be specified; these are applied to a sequence flow object which is automatically wrapped around what is returned by the body of the flow object macro. The preceding formal arguments are the non-inherited characteristics; like keyword arguments they can be specified either as id (in which case they default to #f), or as (id init-expression).

Note that flow object macros are quite different from ordinary procedures in that the macro body is not evaluated when the make expression is evaluated, but rather when the flow object is to be added to the tree; this allows (inherited-c) and (actual-c) procedures to be used in flow object macro characteristics, non-inherited as well as inherited, just as with normal flow objects. It is also possible to use (inherited-c) and (actual-c) procedures in the body of the flow object macro; they will return the same result as if they were used in the specification of a characteristic on the invocation of the flow object macro.

Characteristic value conversion

Most characteristic values can now be specified as strings and will be converted appropriately. For boolean valued characteristics any of the strings "true", "false", "yes" and "no" are acceptable.

Characteristic names

The question mark that can be omitted from those DSSSL characteristic names that end with a question mark. This is because the question mark is not (and cannot resonably be made) a legal XML name character.

James Clark
jade-1.2.1/jadedoc/jade.htm100444 764 764 63473 6610550216 13247 0ustar jjcjjc Jade - James' DSSSL Engine

Jade - James' DSSSL Engine

Contents

What is Jade?

Jade is an implementation of the DSSSL style language. The current version is 1.2.1.

For general information about DSSSL, see my DSSSL page.

You can discuss Jade and get help from other users on DSSSList, the DSSSL Users' Mailing List. I will announce new versions of Jade on DSSSList. To subscribe send mail to majordomo@mulberrytech.com with "subscribe dssslist" as the body of your message. To subscribe to the digest instead, the body should be "subscribe dssslist-digest". The list is archived.

Jade includes the following components:

  • An abstract interface to groves. This is designed to be implementable on top of a database, in addition to simple in-memory implementations.

    The source is in the grove directory.

  • An in-memory implementation of this interface built with SP.

    This is multi-threaded (on Win32 only at the moment): the grove can be accessed before it is complete and access to a property of a node will block until that property becomes available. This allows the style engine to produce output before it has read all the document.

    The source is in the spgrove directory.

  • A style engine that implements the DSSSL style language. This depends on the grove interface, but not the spgrove implementation of that interface. It depends on SP for the parsing of DSSSL specifications. The style engine relies on a backend to actually do the formatting. The backend interface is designed to accomodate browsers as well as command-line applications, but it does not currently provide interfaces that would allow for editing either of SGML documents or DSSSL specs.

    The source is in the style directory.

  • A command-line application, jade, that combines the style engine with the spgrove grove interface and five backends:
    • A backend that generates an XML representation of the flow object tree.
    • A backend that generates RTF. This has been tested with Microsoft Word 97 and Microsoft's free Word Viewer 97. Previous versions were tested with Word 95 and Word Viewer 7.1.
    • A backend that generates TeX.
    • A backend that generates MIF.
    • A backend that generates SGML. This is used in conjunction with non-standard flow object classes to generate SGML, thus allowing Jade to be used for SGML transformations.

    The source is in the jade directory.

Jade Copyright

Jade is licensed under the same terms as SP. This imposes almost no restrictions even for commercial use.

If you do use Jade in a commercial product, I would ask you, as a courtesy, to let me know about it and acknowledge the use of Jade.

Getting Jade

If you're using Windows 95 or Windows NT, then you all you need is in the binary distribution.

Otherwise you will need to build it yourself from source. The Jade sources are available in two forms:

Windows distribution
This is a ZIP file. The sources use CR/LF delimited lines. After getting this create a new directory and then unpack the sources file in this directory. You must use an unzip that preserves long filenames, such as WinZip 6.1. You should also make sure that your unzip preserves the case of filenames; this requires using a -U option with some versions of unzip. You should also ensure that the unzip preserves the directories. If you want to use this on Unix, you must unpack using unzip -a since the sources in the Windows distribution use CR/LF delimited lines.
Unix distribution
This is a gzipped, tar file. The sources use LF delimited lines. Unpack this using gunzip and tar.

The distributions include the sources for a compatible version of SP (which may be different from the latest released version of SP).

Building Jade

Win32

Only Microsoft Visual C++ 6.0 is supported. To build using the Visual Studio GUI, open the workspace jade.dsw and build the Win32 Release configuration of the all project. To build on the command line, ensure that the directory containing msdev is in your path, typically by executing the command:

path C:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin;%path%

then run the command:

msdev jade.dsw /make "all - Win32 Release"

Unix

The following compilers should work:

  • egcs 1.0.2
  • gcc 2.8.1
  • gcc 2.7.2

Only the first has been tested by me.

If you use gcc 2.7.2 with -O on an x86 processor you must use -fno-strength-reduce. gcc 2.7.2.1 fixes this problem.

Edit Makefile, then build with make. Note that you must use -DSP_MULTI_BYTE. If you plan to do any development, also do make depend.

Alternatively you can build using the experimental autoconf support.

Using Jade

Add the directory containing the jade binary to your path, change directory to the dsssl directory, and do

jade demo.sgm

If everything is working, there should be a well-formed XML file demo.fot created.

The system identifier of the document to be processed is specified as an argument to Jade. If this is omitted, standard input will be read.

Jade determines the system identifier for the DSSSL specification as follows:

  1. If the -d option is specified, it will use the argument as the system identifier.
  2. Otherwise, it will look for processing instructions in the prolog of the document. Two kinds of processing instruction are recognized:
    <?stylesheet href="sysid" type="text/dsssl">
    The system data of the processing instruction is parsed like an SGML start-tag. It will be parsed using the reference concrete syntax whatever the actual concrete syntax of the document. The name that starts the processing instruction can be either stylesheet, xml-stylesheet or xml:stylesheet. The processing instruction will be ignored unless the value of the type attribute is one of text/dsssl, text/x-dsssl, application/dsssl, or application/x-dsssl. The value of href attribute is the system identifier of the DSSSL specification.
    <?dsssl sysid>
    The system identifier is the portion of the system data of the processing instruction following the initial name and any whitespace.

    Although the processing instruction is only recognized in the prolog, it need not occur in the document entity. For example, it could occur in a DTD. The system identifier will be interpreted relative to where the the processing instruction occurs.

  3. Otherwise, it will use the system identifier of the document with any extension changed to .dsl.

A DSSSL specification document can contain more than one style-specification. If the system identifier of the DSSSL specification is followed by #id, then jade will use the style-specification whose unique identifier is id. This is allowed both with the -d option and with the processing instructions.

The DSSSL specification must be an SGML document conforming to the DSSSL architecture. For an example, see dsssl/demo.dsl.

Jade supports the following options in addition to the normal SP options:

-d dsssl_spec
This specifies that dsssl_spec is the system identifier of the DSSSL specification to be used.
-G
Debug mode. When an error occurs in the evaluation of an expression, Jade will display a stack trace. Note that this disables tail-call optimization.
-t output_type
output_type specifies the type of output as follows:
fot
An XML representation of the flow object tree
rtf rtf-95
Microsoft's Rich Text Format. rtf-95 produces output optimized for Word 95 rather than Word 97.
tex
TeX
sgml
SGML (used for SGML-to-SGML transformations)
xml
XML (used for SGML-to-XML transformations)
-o output_file
Write output to output_file instead of the default. The default filename is the name of the last input file with its extension replaced by the name of the type of output. If there is no input filename, then the extension is added onto jade-out.
-V variable
This is equivalent to doing
(define variable #t)
except that this definition will take priority over any definition of variable in a style-sheet.

Jade ignores the SP_CHARSET_FIXED and SP_SYSTEM_CHARSET environment variables and always uses Unicode as its internal character set, as if SP_CHARSET_FIXED was 1 and SP_SYSTEM_CHARSET was unset. Thus only the SP_ENCODING environment variable is relevant to Jade's handling of character sets.

Jade Extensions

The following external procedures are available. These external procedures are defined by a prototype in the same manner as in the standard. To use one of these external procedures, you must make use of the standard external-procedure procedure, using a public identifier of "UNREGISTERED::James Clark//Procedure::name" where name is the name given here, typically by including the following in the DSSSL specification:

(define name
  (external-procedure "UNREGISTERED::James Clark//Procedure::name"))

Note that external-procedure returns #f if it doesn't know about the specified public identifier. You can use this to enable your DSSSL specifications to work gracefully with other implementations which do not support these extensions.

Debugging

(debug obj)

Generates a message including the value of obj and then returns obj.

Simple-page-sequence header/footer control

(if-first-page sosofo1 sosofo2)

This can be used only in the specification of the value of one of the header/footer characteristics of simple-page-sequence. It returns a sosofo that will display as sosofo1 if the page is the first page of the simple-page-sequence and as sosofo2 otherwise.

(if-front-page sosofo1 sosofo2)

This can be used only in the specification of the value of one of the header/footer characteristics of simple-page-sequence. It returns a sosofo that will display as sosofo1 if the page is a front (ie recto, odd-numbered) page and as sosofo2 if it is a back (ie verso, even-numbered) page

Numbering

(all-element-number)
(all-element-number osnl)

This is the same as element-number except it counts elements with any generic identifier. If osnl is not an element returns #f, otherwise returns 1 plus the number of elements that started before osnl. This provides an efficient way of creating a unique identifier for any element in a document.

External entity access

(read-entity string)

This returns a string containing the contents of the external entity with system identifier string. This should be used only for textual entities (CDATA and SDATA), and not for binary entities (NDATA).

Current Jade Limitations

This section describes the limitations of the front-end (the general-purpose DSSSL engine): each backend also has its own limitations.

Only the DSSSL Online subset of DSSSL is implemented with the following additions (all part of full DSSSL)

  • the math flow objects
  • lambda (including #!key)
  • let, letrec, let* and named let
  • quasiquotation
  • node-list-first
  • node-list-rest
  • node-property
  • sgml-parse
  • children
  • descendants
  • attributes
  • follow
  • preced
  • data
  • select-elements
  • select-by-class
  • node-list-no-order
  • node-list=?
  • node-list?
  • node-list
  • node-list-map
  • node-list-length
  • node-list-ref
  • node-list-reverse
  • named-node-list?
  • named-node
  • named-node-list-names
  • named-node-list-normalize
  • process-node-list
  • node-list-address (argument restricted to a singletion node-list)
  • element-with-id
  • empty-node-list

Note that only inherited characteristics that are applicable to some supported flow object can be specified.

Jade supports only a single, fixed grove plan which comprises the following modules:

  • baseabs
  • prlgabs0
  • instabs
  • basesds0
  • instsds0
  • subdcabs

Character/glyph handling

It only supports a single pre-defined character repertoire. A character name of the form U-XXXX where XXXX are four upper-case hexadecimal digits, is recognized as referring to the Unicode character with that code. For many characters, it is also possible to use the ISO/IEC 10646 name in lower-case with words separated by hyphens.

Some common SDATA entity names from the ISO entity sets are recognized and mapped to characters. In addition an SDATA entity name of the form U-XXXX, where XXXX are four upper-case hexadecimal digits, is mapped to the Unicode character with that code.

Jade does not make use of any of the declaration architectural forms related to characters and glyphs.

The following style language declarations (as well as the non-DSSSL Online declarations) are ignored:

declare-char-characteristic+property
declare-char-property
add-char-properties
define-language
declare-default-language

Validation

Several things that it would be desirable to have checked aren't checked:

  • When the allowed value of an inherited characteristic is a symbol, jade checks only that the value is a symbol that is allowed as the value of some characteristic; #t and #f are treated as a special kind of symbol in this case.
  • Jade doesn't check whether a flow object is occurring in a context where it is allowed.
  • Jade does not prevent flow objects being attached to the principal port of a flow object when the flow object shouldn't have a principal port.
  • Most type-checking is done at run-time not compile-time.
  • Jade does not check for non-inherited characteristics that are required to be specified.
  • It doesn't check that optional features that have been used were declared in the features form.

Other limitations

The following primitives are just stubs:

char-script-case
Always returns last argument.
char-property
Always returns #f or specified default value.
address-visited?
Always returns #f.

Backends

RTF backend

Only the following flow object classes are implemented:

sequence
character
paragraph
paragraph-break
line-field
Only at the beginning of a paragraph.
display-group
simple-page-sequence
score
Only type after and through
rule
Only horizontal orientation. Rules only show up in Page Layout View.
box
Changing indentation inside a box will not work.
leader
The content of the flow object is ignored: a dotted leader will always be used. The specified length is ignored: it always fills out the line.
external-graphic
On Windows platforms, this can be used to embed OLE objects, by making the the value of the notation-system-id: a formal system identifier whose storage manager is CLSID and whose storage object identifier is the COM CLSID (including surrounding braces). The system identifier may also be just <CLSID> (that is, the storage object identifier may be empty); in this case, the OLE default CLSID for the file (usually chosen based on the file's extension) will be used.
link
Only destinations that are single elements in the same RTF output file.
table
table-part
table-column
The table-auto-width feature isn't properly supported: it's not really possible in RTF.
table-row
table-cell
table-border
math flow objects
These are converted into Word EQ fields. The Word EQ feature is not powerful enough to do a really good job. The mark flow object class is particularily problematic, because there is no way automatically to compute an appropriate position for the contents of the over-mark and under-mark areas; however, some additional characteristics are provided that allow the positioning to be explicitly specified.

Many DSSSL characteristics cannot be implemented in RTF. The backend does the best it can.

In order to get correct page numbers in Microsoft Word, type the following after opening the document:

  1. CTRL+END
  2. CTRL+A
  3. F9

In Word Viewer 97, you must instead do:

  1. CTRL+END
  2. ALT
  3. V
  4. N
  5. ALT
  6. V
  7. P
Page numbers also get updated automatically when you print.

The RTF backend supports some additional characteristics. To use a characteristic named here as C, declare it using declare-characteristic with the public identifier:

"UNREGISTERED::James Clark//Characteristic::C"
heading-level
Value is an integer. It applies to paragraph flow objects. If the value is between 1 and 9, then the paragraph is output as a header of this level, otherwise it is output as body text. Using this characteristic allows Word to provide useful outline views and a document map. (Note that Word's handling of document maps for RTF documents is buggy: if you load an RTF document, and the previous document was using the Online Layout view, then RTF will attempt to guess what paragraphs are headings, which it will almost always do wrong. To avoid this, switch to the Normal view before loading an RTF document.) The initial value is 0
page-number-format
Value is a string as for format-number procedure. This controls the format of the number used by page-number-sosofo and current-page-number-sosofo for references to pages in the simple-page-sequence. The initial value is "1". It applies to simple-page-sequence flow objects.
page-number-restart?
Value is a boolean. If true, then for the purposes of page-number-sosofo and current-page-number-sosofo, the page numbers for this simple-page-sequence will restart from 1. The initial value is #f. It applies to simple-page-sequence flow objects.
page-n-columns
Value is a strictly positive integer, specifying the number of columns. The initial value is 1. It applies to simple-page-sequence flow objects.
page-column-sep
Value is a length, specifying the separation between columns. The initial value is .5in. It applies to simple-page-sequence flow objects.
page-balance-columns?
Value is a boolean. If true, the columns on the final page of the page-sequence should be balanced. The initial value is #f. It applies to simple-page-sequence flow objects.
superscript-height
Value is a length. Specifies the height of the baseline of a superscript above its parent's baseline. It applies to superscript and script flow objects.
subscript-depth
Value is a length. Specifies the depth of the baseline of a subscript below its parent's baseline. It applies to subscript and script flow objects.
over-mark-height
Value is a length. Specifies the height of the baseline of the contents of the over-mark area of a mark flow object above the baseline of the contents of the main area. It also controls the height of the contents of the mid-sup area of the script flow object. It applies to mark and script flow objects.
under-mark-depth
Value is a length. Specifies the depth of the baseline of the contents of the under-mark area of a mark flow object below the baseline of the contents of the main area. It also controls the depth of the contents of the mid-sub area of the script flow object. It applies to mark and script flow objects.
grid-row-sep
Value is a length. Specifies the separation between rows of a grid flow object.
grid-column-sep
Value is a length. Specifies the separation between columns of a grid flow object.

XML Flow Object Tree backend

The DTD for the XML generated is in dsssl/fot.dtd.

Characteristics declared with declare-characteristic are not reported.

Flow objects of classes declared with declare-flow-object are not reported.

Reading the Jade Sources

Start with the following headers:

grove/Node.h
style/FOTBuilder.h
style/StyleEngine.h

Reporting Bugs in Jade

If you find a bug in Jade, please take the time to report it. If Jade crashes on any input whatever, that's a bug and I want to hear about it. If Jade fails to process a specification that conforms to the DSSSL standard in the manner required by the DSSSL standard in a way that is not documented here as a current limitation nor is documented as an error in the proposed Technical Corrigendum to the DSSSL standard, that's a bug and I want to hear about it.

Please report bugs by email to me, jjc@jclark.com. Do not post them to comp.text.sgml nor to the sp-prog mailing list nor to the DSSSList mailing list.

I do not want to get bug reports about documented limitations, so please read the list of limitations carefully. However, feel free to let me know which of the current limitations you would most like to see addressed.

I also at this stage do not want to hear about bugs in your C++ compiler that prevent it from compiling Jade: if your compiler refuses to compile Jade, I want to hear about it only if

  • it is because the Jade source code fails to conform to the current ANSI C++ draft in some way, or
  • you have a clean, simple and portable workaround for your compiler's bug.

Before reporting a bug, please check that your version is current.

The most important thing in reporting a bug is to include a complete set of files on which I can run jade and reproduce the problem. Include all DTDs that you use, whether or not they are standard. Also tell me what command line I should use, and what is incorrect about the behaviour of jade. If the files are large package them up as a tar or zip file and upload them to ftp://ftp.jclark.com/incoming.

It is useful if you have a fix for a bug, but please don't delay sending in the bug while you work on a fix and don't send in a fix without giving me the files to reproduce the bug it fixes.

Contributing to Jade

Here are some ways you can contribute to Jade:

  • Send in good bug reports.
  • Write another backend. I would like to see the following backends:
    • groff/troff
    • a formatter that can produce output using
      • PDF
      • Windows GDI
      • Plain text
  • Write some more documentation.
  • Create a test suite.

James Clark
jade-1.2.1/jadedoc/TeX.htm100444 764 764 55317 6606574462 13060 0ustar jjcjjc TeXFOTBuilder

TeXFOTBuilder: a Generic TeX backend for Jade

By David Megginson, Sebastian Rahtz and Kathleen Marszalek

Introduction

The TeXFOTBuilder was initially written by David Megginson, but is now maintained by Sebastian Rahtz. In a development sponsored by Novare International (to whom many thanks!), Kathleen Marszalek drastically improved the table support.

The job of the backend is to map DSSSL flow-objects into generic TeX macro calls. Atomic flow objects appear as single \insertOBJECT{} macro calls, while non-atomic flow objects appear as nested pairs of \OBJECT{}..\endOBJECT{} macro calls.

The \insertOBJECT and \OBJECT calls receive a single argument, which is a list of definitions for inherited and non-inherited characteristics (see below). For example, the following DSSSL handler:

(element P
  (make paragraph
	start-indent: 6pt))

would generate the following TeX calls:

\startPar{\def\StartIndent{6pt}}%
CONTENTS
\endPar{}

It is important to note that any characters with values >255 will appear as \Character{value} macro calls ie.

\Character{1024}

In addition to nearly all of the flow-object classes currently supported by Jade, the TeXFOTBuilder generates two pseudo flow-object macro calls:

  • \FOT{version}
  • \endFOT{}

These are guaranteed to appear at the very beginning and very end of the .tex output file, and give your macros a chance to grab control at both points. The argument to \FOT is the version of the TeX markup generated by the Jade backend (currently 2). Macro packages should check this for compatibility.

The output .tex file is not ready to be passed directly through TeX or LaTeX -- instead, it is necessary to have TeX macro definitions for all of the flow-object macros, and to set default values for the characteristics. The macros can use of TeX primitives, plain TeX, LaTeX, or any other format which is convenient.

A LaTeX macro package for use with the output of this backend has been developed by Sebastian Rahtz. The current stable release can be found on CTAN in macros/jadetex; experimental releases will be placed at http://www.tug.org/applications/jadetex/ at intervals.

Characteristics

The SETTINGS argument to the flow-object macros will contain a series of \def statements for both inherited and non-inherited characteristics. These will appear only when the characteristic's value differs from the standard default (in the case of non-inherited characteristics) or from the current value (in the case of inherited characteristics). Since these statements appear as an argument, they will not take effect until you reference the parameter explicitly.

Inherited Characteristics

The characteristics in the following table are inherited -- you should set these to their default values only once, at the beginning of the parse (but they should always revert to their previous values after a flow-object has finished):

Characteristic Default Value DSSSL Equivalent Used By
\AsisWrapIndent 0 [#f]
\BackgroundColor 0 [#f]
\BackgroundLayer -1
\BackgroundTile 0 [#f]
\BorderAlignment center
\BorderOmitAtBreak 0 [#f]
\BorderPresent 1 [true]
\BorderPriority 0
\BottomMargin 0pt
\BoxBorderAlignment outside
\BoxCornerRadius 0pt [note]
\BoxOpenEnd 0 [#f]
\BoxSizeAfter 4pt
\BoxSizeBefore 8pt
\BoxType border
\CellAfterColumnMargin 0pt
\CellAfterRowMargin 0pt
\CellBackground 0 [#f]
\CellBeforeColumnMargin 0pt
\CellBeforeRowMargin 0pt
\CellCrossed 0 [#f]
\CellRowAlignment start
\Color current gray
\Country 0 [#f]
\DisplayAlignment start
\EndIndent 0pt
\EndMargin 0pt
\ExpandTabs 8
\FieldAlign start
\FieldWidth 0pt
\FillingDirection top-to-bottom
\FirstLineStartIndent 0pt
\FloatOutLineNumbers 0 [#f]
\FloatOutMarginalia 0 [#f]
\FloatOutSidelines 0 [#f]
\FontFamilyName iso-serif
\FontName 0 [#f]
\FontPosture upright
\FontProportionateWidth medium
\FontSize 10pt
\FontStructure solid
\FontWeight medium
\FooterMargin 0pt
\GlyphAlignmentMode font
\GlyphReorderMethod ??
\GlyphSubstMethod ??
\HangingPunct 0 [#f]
\HeaderMargin 0pt
\Hyphenate ??
\HyphenationKeep 0 [#f]
\HyphenationLadderCount 0 [#f]
\HyphenationMethod ??
\HyphenationPushCharCount 2
\HyphenationRemainCharCount 2
\IgnoreRecordEnd 0 [#f]
\ImplicitBidiMethod 0 [#f]
\InhibitLineBreaks 0 [#f]
\InputWhitespaceTreatment ??
\JustifyGlyphSpaceMaxAdd 0pt
\JustifyGlyphSpaceMaxRemove 0pt
\Kern ??
\KernMode ??
\Language 0 [#f]
\LastLineEndIndent 0pt
\LastLineJustifyLimit 0pt
\LastLineQuadding relative
\Layer 0
\LeftMargin 0pt
\Ligature ??
\LineBreakingMethod 0 [#f]
\LineCap butt
\LineCompositionMethod 0 [#f]
\LineJoin miter
\LineNumberSep ??
\LineNumberSide ??
\LineRepeat 1
\LineSep 1pt
\LineSpacing 12pt
\LineThickness 1pt
\Lines wrap
\MarginaliaKeepWithPrevious 0 [#f]
\MarginaliaSep 0pt
\MarginaliaSide start
\MathDisplayMode ??
\MinLeaderRepeat 1
\NColumnsSpanned 1
\NRowsSpanned 1
\NumberedLines 1 [true]
\OrphanCount 2
\PageHeight sysdep
\PageWidth sysdep
\PositionPointShift 0pt
\PrincipalModeSimultaneous 0 [#f]
\Quadding start
\RightMargin 0pt
\ScoreSpaces 1 [true]
\SidelineSep required
\SidelineSide required
\Span 1
\SpanWeak 0 [#f]
\StartIndent 0pt
\StartMargin 0pt
\TableAutoWidthMethod 0 [#f]
\TableCornerRadius 0pt [note]
\TablePartOmitMiddleFooter 0 [#f]
\TablePartOmitMiddleHeader 0 [#f]
\TopMargin 0pt
\WidowCount 2
\WritingMode left-to-right

Notes

  1. \BoxCornerRadius combines the box-corner-rounded and box-corner-radius characteristics (its value is 0pt if box-corner-rounded is #f).
  2. \TableCornerRadius combines the table-corner-rounded and table-corner-radius characteristics (its value is 0pt if table-corner-rounded is #f).

Non-Inherited Characteristics

The characteristics in the following table are not inherited -- you should set these to their default values at the beginning of every relevant flow-object, before evaluating the SETTINGS argument:

Characteristic Default Value DSSSL Equivalent Used By
\AlignLeader 1 [true]
\BreakAfter 0 [#f]
\BreakAfterPriority 0
\BreakBefore 0 [#f]
\BreakBeforePriority 0
\Ch no default
\CoalesceId 0 [#f]
\ColumnIndex contextual column-number [??]
\EntitySystemId required
\EscapementDirection writing-mode
\GlyphId no default
\IdrefAddress ??
\IsDisplay 0 [#f]
\IsDropAfterLineBreak unspecified
\IsDropUnlessBeforeLineBreak unspecified
\IsPunct unspecified
\IsInputTab unspecified
\IsInputWhiteSpace unspecified
\IsRecordEnd unspecified
\IsSpace unspecified
\Keep 0 [#f]
\KeepWithNext 0 [#f]
\KeepWithPrevious 0 [#f]
\Length context
\MathClass unspecified
\MathFontPosture unspecified
\MaxHeight contextual
\MaxWidth contextual
\MayViolateKeepAfter 0 [#f]
\MayViolateKeepBefore 0 [#f]
\NotationSystemId required
\Orientation required
\PositionPointX ??
\PositionPointY ??
\PositionPreference 0 [#f] position-preference
\ScaleType maxuniform scale [note]
\ScaleX n/a scale [note]
\ScaleY n/a scale [note]
\ScoreLength ??
\ScoreType required type
\Script unspecified
\SpaceAfterConditional 0 [#f] space-after
\SpaceAfterForce 0 [#f] space-after
\SpaceAfterMax 0pt space-after
\SpaceAfterMaxFactor 0 space-after
\SpaceAfterMin 0pt space-after
\SpaceAfterMinFactor 0 space-after
\SpaceAfterNominal 0pt space-after
\SpaceAfterNominalFactor 0 space-after
\SpaceAfterPriority 0 space-after
\SpaceBeforeConditional 0 [#f] space-before
\SpaceBeforeForce 0 [#f] space-before
\SpaceBeforeMax 0pt space-before
\SpaceBeforeMaxFactor 0 space-before
\SpaceBeforeMin 0pt space-before
\SpaceBeforeMinFactor 0 space-before
\SpaceBeforeNominal 0pt space-before
\SpaceBeforeNominalFactor 0 space-before
\SpaceBeforePriority 0 space-before
\StretchFactor 0
\TableWidth contextual
\TruncateLeader 0 [#f]
\Width required [note]

Notes

  1. ScaleType, ScaleX, and ScaleY are all the equivalent of the scale characteristic: if ScaleType is 0 [#f], then ScaleX and ScaleY become relevant.
  2. The Width characteristic is not required if table-auto-width feature is present.
Sebastian Rahtz, s.rahtz@elsevier.co.uk
jade-1.2.1/jadedoc/mif.htm100444 764 764 50776 6606574462 13137 0ustar jjcjjc Jade MIF backend

Jade MIF Backend

Created by Kathleen Marszalek and Paul Prescod.
Sponsored by ISOGEN International Corp.

Contents

Supported Flow Objects

character
Inherited characteristics Non-inherited characteristics
  • font-weight
  • font-posture
  • font-name
  • font-size
  • input-whitespace-treatment
  • position-point-shift
  • language
  • country
  • color 1
1Currently jade supports (color-space "ISO/IEC 10179:1996//Color-Space Family::Device RGB")

display-group
Inherited characteristics Non-inherited characteristics
  • space-before
  • space-after
  • keep-with-previous?
  • keep-with-next?
  • break-before (#f, page)
  • break-after (#f, page)
  • keep (#f, page)
  • may-violate-keep-before?
  • may-violate-keep-after?
rule
Inherited characteristics Non-inherited characteristics
  • line-cap
  • line-thickness
  • line-repeat
  • line-sep
  • position-point-shift
  • display-alignment (start, end, center)
  • start-indent
  • end-indent
  • span (spans all columns if > 1)
  • color 1
  • orientation (horizontal, escapement)
  • length
  • space-before
  • space-after
  • keep-with-previous?
  • keep-with-next?
  • break-before (#f, page)
  • break-after (#f, page)
  • keep (#f, page)
  • may-violate-keep-before?
  • may-violate-keep-after?
1 Currently jade supports (color-space "ISO/IEC 10179:1996//Color-Space Family::Device RGB")
score
Inherited characteristics Non-inherited characteristics
  • line-repeat (1 for type of before and through, 1 or 2 for after)
  • type (before, through, after)
line-field*
Inherited characteristics Non-inherited characteristics
  • field-width
  • field-align
* At the beginning of paragraph only.
leader*
Inherited characteristics Non-inherited characteristics
* On the last line of paragraph only. The principial port (the leader string itself) can contain characters only.
link
Inherited characteristics Non-inherited characteristics
  • destination [#f, objects returned by (idref-address ...) and (current-node-address ...)]
index-entry
Inherited characteristics Non-inherited characteristics
  • components
  • page-number?
  • sort-string
  • starts-page-range?
  • ends-page-range?
components
is a list of strings that represent index entry levels. This characterisitc is not inherited and shall be specified.
page-number?
is a boolean specifying whether this index entry should contain page number information. This characterisitc is not inherited. The default is #t.
sort-string
is either #f, specifying that this index entry's components should be used for sorting th index, or a string that should be used for sorting. This characterisitc is not inherited. The default is #f.
starts-page-range?
is a boolean specifying whether the index entry starts a page range. This characterisitc is not inherited. The default is #f.
ends-page-range?
is a boolean specifying whether the index entry starts a page range. This characterisitc is not inherited. The default is #f.

Here's how to enable the above extension:

(declare-flow-object-class index-entry
    "UNREGISTERED::ISOGEN//Flow Object Class::index-entry")
    
external-graphic
Inherited characteristics Non-inherited characteristics
  • space-before
  • space-after
  • display?
  • scale (max)
  • max-width
  • max-height
  • entity-system-id
  • display-alignment
  • start-indent
  • end-indent
  • span (spans all columns if > 1)
  • space-before
  • space-after
  • keep-with-previous?
  • keep-with-next?
  • break-before (#f, page)
  • break-after (#f, page)
  • keep (#f, page)
  • may-violate-keep-before?
  • may-violate-keep-after?
paragraph
Inherited characteristics Non-inherited characteristics
  • lines (wrap, asis-wrap)
  • hyphenation-ladder-count
  • hyphenation-remain-char-count
  • hyphenation-push-char-count
  • font-weight
  • font-posture
  • font-name
  • font-size
  • quadding
  • widow-count
  • orphan-count
  • language
  • country
  • span (spans all columns if > 1)
  • space-before
  • space-after
  • keep-with-previous?
  • keep-with-next?
  • break-before (#f, page)
  • break-after (#f, page)
  • keep (#f, page)
  • may-violate-keep-before?
  • may-violate-keep-after?
  • line-spacing
  • min-leading (#f or 0 for proportional line spacing)
  • first-line-start-indent
paragraph-break
Inherited characteristics Non-inherited characteristics
Same as for paragraph Same as for paragraph
simple-page-sequence
Inherited characteristics Non-inherited characteristics
  • page-width
  • page-height
  • left-margin
  • right-margin
  • top-margin
  • bottom-margin
  • header-margin
  • footer-margin
  • left-header
  • center-header
  • right-header
  • left-footer
  • center-footer
  • right-footer
(page-number-sosofo)
(current-node-page-number-sosofo)
"UNREGISTERED::James Clark//Procedure::if-first-page"
This can be used only in the specification of the value of one of the header/footer characteristics of simple-page-sequence. It returns a sosofo that will display as sosofo1 if the page is the first page of the simple-page-sequence and as sosofo2 otherwise.
"UNREGISTERED::James Clark//Procedure::if-front-page"
This can be used only in the specification of the value of one of the header/footer characteristics of simple-page-sequence. It returns a sosofo that will display as sosofo1 if the page is a front (ie recto, odd-numbered) page and as sosofo2 if it is a back (ie verso, even-numbered) page.
"UNREGISTERED::James Clark//Characteristic::page-n-columns"
Value is a strictly positive integer, specifying the number of columns. The initial value is 1.
"UNREGISTERED::James Clark//Characteristic::page-column-sep"
Value is a length, specifying the separation between columns. The initial value is .5in.
"UNREGISTERED::James Clark//Characteristic::page-balance-columns?"
Value is a boolean. If true, the columns on the final page of the page-sequence should be balanced. The initial value is #f.

Here's how to enable the above extensions:

(define if-first-page (external-procedure
    "UNREGISTERED::James Clark//Procedure::if-first-page"))
(define if-front-page (external-procedure   
    "UNREGISTERED::James Clark//Procedure::if-front-page"))

(declare-characteristic page-n-columns
    "UNREGISTERED::James Clark//Characteristic::page-n-columns" 1)
(declare-characteristic page-n-columns
    "UNREGISTERED::James Clark//Characteristic::page-column-gap" (* 36 1pt))
(declare-characteristic page-balance-columns?
    "UNREGISTERED::James Clark//Characteristic::page-balance-columns?" #f)
    
table
Inherited characteristics Non-inherited characteristics
  • table-border
  • display-alignment
  • start-indent
  • end-indent
  • table-width
  • before-row-border
  • after-row-border
  • before-column-border
  • after-column-border
  • span (spans all columns if > 1)
  • space-before
  • space-after
  • keep-with-previous?
  • keep-with-next?
  • break-before (#f, page)
  • break-after (#f, page)
  • keep (#f, page)
  • may-violate-keep-before?
  • may-violate-keep-after?
table-part
Inherited characteristics Non-inherited characteristics
  • space-before
  • space-after
  • keep-with-previous?
  • keep-with-next?
  • break-before (#f, page)
  • break-after (#f, page)
  • keep (#f, page)
  • may-violate-keep-before?
  • may-violate-keep-after?
  • header
  • footer
table-column
Inherited characteristics Non-inherited characteristics
  • start-indent
  • end-indent
  • column-number
  • n-columns-spanned
  • width
  • (table-unit k)
table-cell
Inherited characteristics Non-inherited characteristics
  • cell-before-row-margin
  • cell-after-row-margin
  • cell-before-column-margin
  • cell-after-column-margin
  • cell-row-alignment
  • cell-before-row-border
  • cell-after-row-border
  • cell-before-column-border
  • cell-after-column-border
  • cell-background?
  • background-color 1
  • column-number
  • n-columns-spanned
  • n-rows-spanned
  • starts-row?
  • ends-row?
1 Currently jade supports (color-space "ISO/IEC 10179:1996//Color-Space Family::Device RGB")
table-border
Inherited characteristics Non-inherited characteristics
  • border-present?
  • line-thickness
  • line-repeat (0, 1, or 2)
  • line-sep
  • color 1
1 Currently jade supports (color-space "ISO/IEC 10179:1996//Color-Space Family::Device RGB")

Problems & Limitations

Table border resolution

It's not clear how to predictably enforce cell borders that have mixed line styles. I've posted a question about this to comp.text.frame, but there were no responses so far.

External graphic width and height

In order to place external graphics inside a text flow one must use an anchored frame containing the <ImportObject...> statement. The ImportObject within the frame can shrink-wrap the referenced graphics, however the anchored frame itself cannot - in general the size of an anchored frame has to be specified explicitly. I've asked about this in comp.text.frame, but the only solutions involved using external programs to read the graphic size from graphic files.

Space before non-paragraph displayed objects

Flow objects like external-graphic need to be anchored to empty paragraphs so that that frame can determine their position on the page automatically. Since the smallest paragraph height is 2pt (smallest font size that can be used), the total space before such objects should be larger than that. This does not apply to the paragraph flow objects themselves, and to the rule flow object. The rule flow object has the placement direction display size of 0 and it's possible to use negative PgfLeading to let the next paragraph move up if necessary.

The vertical positioning of the displayed rule flow object

Since the rule is position using inlined anchored frame, the placement is relative to the font baseline. It's assumend that the baseline is 1/3 the font size from the bottom.

The box flow object

Not sure how to implement it since anchored frames must have fixed height. Maybe using tables would work here(?)

Tips

Creating hypertext documents

You must decide on the filename extension you'll use at the stage when you run jade. If you don't want the .mif extension for your final document, feel free to use other extension when specifying the file name using the -o option.

  1. Open the book file.
  2. While holding SHIFT, select File->Open All Files in Book from the menu.
  3. Save each file using View Only format - nake sure you use original filenames.

Updating page numbering

  1. Open the book file.
  2. While holding SHIFT, select File->Open All Files in Book from the menu.
  3. Select File->Generate/Update... and then press Update.

Specifying colors

Currently jade supports only RGB color space. Here's an example of a red rule:

(make rule
    color: (color (color-space "ISO/IEC 10179:1996//Color-Space Family::Device RGB")
                   1 0 0)
    ...
)

jade-1.2.1/jadedoc/transform.htm100444 764 764 14573 6606574462 14372 0ustar jjcjjc Using Jade for SGML transformations

Using Jade for SGML transformations

Jade does not support the DSSSL Transformation Language. However, it provides some simple, non-standardized extensions to the DSSSL Style Language that allow it to be used for SGML transformations.

These extensions are used in conjunction with the SGML backend which is selected with the -t sgml or -t xml options. Unlike other backends, the SGML backend writes its output to the standard output.

The -t xml option makes empty elements and processing instructions use the XML syntax. Note that the XML declaration is not automatically emitted.

The extensions consist of a collection of flow object classes that are used instead of the standard DSSSL-defined flow object classes:

element
empty-element
Each of these flow objects results in an element in the output. The element flow object is a compound flow object (one that can have child flow objects). Both a start-tag and an end-tag are generated for this flow object. The empty-element is an atomic flow object (one that cannot have child flow objects). Only a start-tag is output for this. It should should be used for elements with a declared content of EMPTY or with a content reference attribute. Both of these flow objects support the following non-inherited characteristics:
gi
This is a string-valued characteristic that specifies the element's generic identifier. It defaults to the generic identifier of the current node.
attributes
This specifies the element's attributes as a list of lists each of which consists of exactly two strings, the first specifying the attribute name and the second the attribute value. It defaults to the empty list.
processing-instruction
This is an atomic flow object that results in a processing instruction. It supports the following non-inherited characteristics:
data
This is a string-valued characteristic that specifies the content of the processing instruction. It defaults to the empty string.
document-type
This is an atomic flow object that results in a DOCTYPE declaration. It supports the following non-inherited characteristics:
name
This is a string-valued characteristic that specifies the name of the document type (which must be the same as the name of the document element). It must not be omitted.
system-id
This is a string-valued characteristic that specifies the system identifier of the document type. If non-empty, this will be used as the system identifier in the doctype declaration. The default value is the empty string.
public-id
This is a string-valued characteristic that specifies the public identifier of the document type. If non-empty, this will be used as the public identifier in the doctype declaration. The default value is the empty string.
entity
This is an compound flow object that stores its content in a separate entity. It supports the following non-inherited characteristic:
system-id
The system identifier of the entity. For now this is treated as a filename not as an FSI.

Note that no entity reference or declaration is emitted.

entity-ref
This is an atomic flow object that results in an entity reference. It supports the following non-inherited characteristic:
name
The name of the entity.
formatting-instruction
This is an atomic flow object that inserts characters into the output without change. It supports the following non-inherited characteristic:
data
This is the string to be inserted.

It differs from normal data characters in the &, < and > will not be escaped.

There is also the following characteristic:

preserve-sdata?
This is an inherited boolean characteristic that applies to character flow objects. When true, if the current-node for the character flow object was an sdata node, then the character will be output as a reference to an entity with the same name. The initial value is #f.

Each of these flow object classes must be declared using declare-flow-object-class in any DSSSL specification that makes use of it. A suitable set of declarations is:

(declare-flow-object-class element
  "UNREGISTERED::James Clark//Flow Object Class::element")
(declare-flow-object-class empty-element
  "UNREGISTERED::James Clark//Flow Object Class::empty-element")
(declare-flow-object-class document-type
  "UNREGISTERED::James Clark//Flow Object Class::document-type")
(declare-flow-object-class processing-instruction
  "UNREGISTERED::James Clark//Flow Object Class::processing-instruction")
(declare-flow-object-class entity
  "UNREGISTERED::James Clark//Flow Object Class::entity")
(declare-flow-object-class entity-ref
  "UNREGISTERED::James Clark//Flow Object Class::entity-ref")
(declare-flow-object-class formatting-instruction
  "UNREGISTERED::James Clark//Flow Object Class::formatting-instruction")
(declare-characteristic preserve-sdata?
  "UNREGISTERED::James Clark//Characteristic::preserve-sdata?"
  #f)

Here's a simple example that does the identity transformation:

<!doctype style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN">

(declare-flow-object-class element
  "UNREGISTERED::James Clark//Flow Object Class::element")

(define (copy-attributes #!optional (nd (current-node)))
  (let loop ((atts (named-node-list-names (attributes nd))))
    (if (null? atts)
        '()
        (let* ((name (car atts))
               (value (attribute-string name nd)))
          (if value
              (cons (list name value)
                    (loop (cdr atts)))
              (loop (cdr atts)))))))

(default (make element
               attributes: (copy-attributes)))

Note that this does not deal with empty elements nor processing instructions, nor does it include a doctype declaration.

James Clark
jade-1.2.1/jadedist/ 40775 764 764 0 6610553420 11702 5ustar jjcjjcjade-1.2.1/jadedist/bin-files.txt100444 764 764 2200 6607564210 14403 0ustar jjcjjcdoc\archform.htm doc\build.htm doc\catalog.htm doc\charset.htm doc\features.htm doc\generic.htm doc\ideas.htm doc\index.htm doc\new.htm doc\nsgmls.htm doc\sgmldecl.htm doc\sgmlnorm.htm doc\sgmlsout.htm doc\spam.htm doc\spent.htm doc\sx.htm doc\sysdecl.htm doc\sysid.htm doc\xml.htm dsssl\style-sheet.dtd dsssl\fot.dtd dsssl\dsssl.dtd dsssl\demo.sgm dsssl\demo.dsl dsssl\catalog dsssl\jadetex.dtx dsssl\jadetex.ini dsssl\jadetex.ins dsssl\pdfjadetex.ini dsssl\Makefile.jadetex bin\sp133.dll bin\style.dll bin\spgrove.dll bin\grove.dll bin\groveoa.dll bin\jade.exe bin\nsgmls.exe bin\spam.exe bin\sgmlnorm.exe bin\spent.exe bin\sx.exe bin\MSVCRT.DLL jadedoc\copying.txt jadedoc\dsssl2.htm jadedoc\jade.htm jadedoc\TeX.htm jadedoc\mif.htm jadedoc\transform.htm pubtext\ISOlat1.ent pubtext\ISOlat1.sgm pubtext\html.soc pubtext\html-1.dtd pubtext\html-1s.dtd pubtext\html-s.dtd pubtext\html.dcl pubtext\html.dtd pubtext\HTML32.dcl pubtext\HTML32.dtd pubtext\HTML32.soc pubtext\HTML4.dcl pubtext\HTML4-s.dtd pubtext\HTML4.dtd pubtext\HTML4-f.dtd pubtext\HTML4.soc pubtext\HTMLlat1.ent pubtext\HTMLspec.ent pubtext\HTMLsym.ent pubtext\xml.dcl pubtext\xml.soc jade-1.2.1/jadedist/files.txt100444 764 764 7113 6610550450 13640 0ustar jjcjjcgrove/LocNode.h grove/LocNode.cxx grove/Node.h grove/Node.cxx groveoa/CGroveBuilder.cxx groveoa/CGroveBuilder.h groveoa/GroveBuilder.rgs groveoa/GroveNode.cxx groveoa/GroveNode.h groveoa/StdAfx.cxx groveoa/StdAfx.h groveoa/groveoa.cxx groveoa/groveoa.def groveoa/groveoa.dsp groveoa/groveoa.idl groveoa/groveoa.rc groveoa/resource.h spgrove/GroveApp.h spgrove/GroveBuilder.h spgrove/SdNode.cxx spgrove/SdNode.h spgrove/threads.h style/charNames.h style/Collector.h style/DssslApp.h style/DssslSpecEventHandler.h style/dsssl_ns.h style/ELObj.h style/ELObjMessageArg.h style/EvalContext.h style/Expression.h style/FOTBuilder.h style/GroveManager.h style/Insn.h style/Insn2.h style/Interpreter.h style/InterpreterMessages.h style/jade_version.h style/MacroFlowObj.h style/NumberCache.h style/primitive.h style/Pattern.h style/ProcessContext.h style/ProcessingMode.h style/SchemeParser.h style/sdata.h style/SosofoObj.h style/Style.h style/StyleEngine.h style/stylelib.h style/style_pch.h style/VM.h style/Collector.cxx style/DssslApp.cxx style/DssslSpecEventHandler.cxx style/ELObj.cxx style/ELObjMessageArg.cxx style/Expression.cxx style/FOTBuilder.cxx style/GroveManager.cxx style/Insn.cxx style/Interpreter.cxx style/InterpreterMessages.cxx style/MacroFlowObj.cxx style/NumberCache.cxx style/primitive.cxx style/primitive_inst.cxx style/primitive_inst.m4 style/Pattern.cxx style/ProcessContext.cxx style/ProcessingMode.cxx style/SchemeParser.cxx style/Style.cxx style/StyleEngine.cxx style/stylelib.cxx style/style_inst.cxx spgrove/GroveApp.cxx spgrove/GroveBuilder.cxx spgrove/grove_inst.cxx spgrove/grove_inst.m4 style/style_inst.m4 style/DssslAppMessages.h style/DssslAppMessages.msg style/DssslAppMessages.rc style/InterpreterMessages.msg style/InterpreterMessages.rc style/FlowObj.cxx style/InheritedC.cxx style/FlowObj_inst.m4 style/FlowObj_inst.cxx style/common_inst.m4 style/common_inst.cxx grove/Makefile.sub grove/grove.dsp spgrove/Makefile.sub spgrove/spgrove.dsp style/Makefile.sub style/style.dsp jade/jade.cxx jade/Makefile.sub jade/jade.dsp all/all.dsp jade/RtfFOTBuilder.cxx jade/RtfFOTBuilder.h jade/SgmlFOTBuilder.cxx jade/SgmlFOTBuilder.h jade/TransformFOTBuilder.cxx jade/TransformFOTBuilder.h jade/TransformFOTBuilder_inst.cxx jade/TransformFOTBuilder_inst.m4 jade.mak jade.dsw dsssl/demo.dsl dsssl/demo.sgm dsssl/style-sheet.dtd dsssl/dsssl.dtd dsssl/fot.dtd dsssl/catalog dsssl/jadetex.dtx dsssl/jadetex.ini dsssl/jadetex.ins dsssl/pdfjadetex.ini dsssl/Makefile.jadetex jade/HtmlFOTBuilder.cxx jade/HtmlFOTBuilder.h jade/HtmlFOTBuilder_inst.cxx jade/HtmlFOTBuilder_inst.m4 jade/JadeMessages.msg jade/JadeMessages.h jade/JadeMessages.rc jade/jade.rc jade/HtmlMessages.h jade/HtmlMessages.msg jade/HtmlMessages.rc jade/RtfFOTBuilder_inst.cxx jade/RtfFOTBuilder_inst.m4 jade/RtfMessages.h jade/RtfMessages.msg jade/RtfMessages.rc jade/RtfOle.cxx jade/RtfOle.h jade/TeXFOTBuilder.cxx jade/TeXFOTBuilder.h jade/TeXFOTBuilder_inst.cxx jade/TeXFOTBuilder_inst.m4 jade/TeXMessages.h jade/TeXMessages.msg jade/TeXMessages.rc jade/TmpOutputByteStream.h jade/MifFOTBuilder.cxx jade/MifFOTBuilder.h jade/MifFOTBuilder_inst.cxx jade/MifFOTBuilder_inst.m4 jade/MifMessages.h jade/MifMessages.msg jade/MifMessages.rc jadedoc/autoconf.htm jadedoc/copying.txt jadedoc/dsssl2.htm jadedoc/jade.htm jadedoc/TeX.htm jadedoc/mif.htm jadedoc/transform.htm jadedist/bin-files.txt jadedist/files.txt jadedist/makedist.bat jadedist/jadedist.dsp jade-generate.mak Makefile.comm.in Makefile.in Makefile.lib.in Makefile.prog.in config/configure.in config/config.guess config/config.sub config/ltconfig config/ltmain.sh config/aclocal.m4 config/install.sh configure jade-1.2.1/jadedist/makedist.bat100444 764 764 305 6606574462 14260 0ustar jjcjjccopy files.txt+..\FILES all-files.txt cd .. del jadedist\jade.zip del jadedist\jadew.zip zip -q -@ # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) External Target" 0x0106 CFG=jadedist - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "jadedist.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "jadedist.mak" CFG="jadedist - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "jadedist - Win32 Release" (based on "Win32 (x86) External Target") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Cmd_Line "NMAKE /f jadedist.mak" # PROP BASE Rebuild_Opt "/a" # PROP BASE Target_File "jadedist\jadedist.exe" # PROP BASE Bsc_Name "jadedist\jadedist.bsc" # PROP BASE Target_Dir "." # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Cmd_Line "makedist" # PROP Rebuild_Opt "" # PROP Target_File "jadedist\jade.zip" # PROP Bsc_Name "" # PROP Target_Dir "." # Begin Target # Name "jadedist - Win32 Release" !IF "$(CFG)" == "jadedist - Win32 Release" !ENDIF # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # Begin Source File SOURCE=".\jadedist\bin-files.txt" # End Source File # Begin Source File SOURCE=.\jadedist\files.txt # End Source File # Begin Source File SOURCE=.\jadedist\makedist.bat # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # End Group # End Target # End Project jade-1.2.1/jade-generate.mak100444 764 764 1450 6606574460 13405 0ustar jjcjjc# This is a Makefile for nmake that makes all the .cxx and .h files that # are automatically generated. It's too painful to do in the IDE. # You'll need m4 and perl to use this. M4=m4 PERL=perl GENSRCS=\ style/style_inst.cxx \ style/FlowObj_inst.cxx \ style/primitive_inst.cxx \ style/common_inst.cxx \ spgrove/grove_inst.cxx \ jade/HtmlFOTBuilder_inst.cxx \ jade/RtfFOTBuilder_inst.cxx \ jade/TeXFOTBuilder_inst.cxx \ jade/MifFOTBuilder_inst.cxx \ jade/TransformFOTBuilder_inst.cxx \ jade/JadeMessages.h \ jade/HtmlMessages.h \ jade/RtfMessages.h \ jade/TeXMessages.h \ jade/MifMessages.h \ style/DssslAppMessages.h \ style/InterpreterMessages.h .SUFFIXES: .m4 .msg all: $(GENSRCS) .m4.cxx: rm -f $@ $(M4) lib\instmac.m4 $< >$@ chmod -w $@ .msg.h: rm -f $@ $(PERL) -w msggen.pl $< chmod -w $@ jade-1.2.1/Makefile.comm.in100444 764 764 2270 6610533272 13207 0ustar jjcjjc# # Makefile.sub.in - Common rules and definitions # # $Id: Makefile.comm.in 1.2 1998/10/11 11:06:49 jjc Exp $ # # Copyright (C) 1998 Cees de Groot # TOP=@TOP@ prefix=@prefix@ exec_prefix=@exec_prefix@ srcdir=@srcdir@ bindir=@bindir@ libdir=@libdir@ CXX=@CXX@ CC=@CC@ M4=@M4@ PERL=@PERL@ LIBTOOL=@LIBTOOL@ INSTALL=@INSTALL@ LIBOBJS=@LIBOBJS@ LIBS=@LIBS@ DEFS=@DEFS@ INCS=-I$(srcdir) -I$(srcdir)/../include $(INCLUDE) CXXFLAGS=@CXXFLAGS@ $(INCS) $(DEBUG) $(DEFS) CFLAGS=@CFLAGS@ $(DEBUG) $(DEFS) LDFLAGS=@LDFLAGS@ MSGGENFLAGS= CXXDEPGENFLAGS=-MM .SUFFIXES: .cxx .c .o .m4 .msg .lo .cxx.o: $(CXX) $(CXXFLAGS) -c $< .cxx.lo: @$(LIBTOOL) --mode=compile $(CXX) $(CXXFLAGS) -c $< .c.o: $(CC) $(CFLAGS) -c $< .c.lo: @$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c $< .m4.cxx: rm -f $@ $(M4) $(srcdir)/../lib/instmac.m4 $< >$@ chmod -w $@ .msg.h: $(PERL) -w $(srcdir)/../msggen.pl $(MSGGENFLAGS) $< depend_src: depend.temp mv depend.temp Makefile.dep depend.temp: FORCE $(CXX) -MM $(CXXFLAGS) $(CXXDEPGENFLAGS) $(OBJS:.o=.cxx) \ | sed -e 's; \([^/ ][^/ ]*\)/; $$(srcdir)/\1/;g' >depend.temp clean: FORCE -rm -f $(CLEANFILES) FORCE: %: RCS/%,v test -w $@ || co -u $@ jade-1.2.1/Makefile.in100444 764 764 5633 6610533272 12263 0ustar jjcjjc# # Makefile.in - Makefile template for Jade # # $Id: Makefile.in 1.5 1998/10/12 01:52:09 jjc Exp $ # # Copyright (C) 1998 Cees A. de Groot # # Original SP Makefile.in Copyright (C) 1996 Henry S. Thompson # Original SP Makefile Copyright (c) 1994, 1995, 1996 James Clark TOP=@TOP@ prefix=@prefix@ exec_prefix=@exec_prefix@ srcdir=@srcdir@ bindir=@bindir@ LIBTOOL=@LIBTOOL@ LIBDIRS=lib grove spgrove style PROGDIRS=nsgmls spam sgmlnorm spent jade sx dodirs=$(LIBDIRS) $(PROGDIRS) # Automatic template instantiation can cause compilers to generate # various extra files; the clean target won't delete these. TARGETS=all install depend gen clean pure do=all $(TARGETS): FORCE @$(MAKE) -f Makefile do=$@ $(dodirs) if test $@ = 'install'; then $(LIBTOOL) --finish $(libdir); fi $(LIBDIRS): FORCE @if test $(srcdir) = .; \ then srcdir=.; \ else srcdir=`cd $(srcdir); pwd`/$@; \ fi; \ test -d $@ || mkdir $@; \ cd $@; \ test -f $$srcdir/Makefile.dep || touch $$srcdir/Makefile.dep; \ test -f $$srcdir/Makefile.lt || \ $(MAKE) srcdir=$$srcdir VPATH=$$srcdir \ -f $$srcdir/../Makefile.comm -f $$srcdir/Makefile.sub \ -f $$srcdir/../Makefile.lib -f $$srcdir/Makefile.dep \ Makefile.lt; \ $(MAKE) srcdir=$$srcdir VPATH=$$srcdir \ -f $$srcdir/../Makefile.comm -f $$srcdir/Makefile.sub \ -f $$srcdir/Makefile.lt -f $$srcdir/../Makefile.lib \ -f $$srcdir/Makefile.dep $(do) $(PROGDIRS): FORCE @if test $(srcdir) = .; \ then srcdir=.; \ else srcdir=`cd $(srcdir); pwd`/$@; \ fi; \ test -d $@ || mkdir $@; \ cd $@; \ test -f $$srcdir/Makefile.dep || touch $$srcdir/Makefile.dep; \ test -f $$srcdir/Makefile.lt || \ $(MAKE) srcdir=$$srcdir VPATH=$$srcdir \ -f $$srcdir/../Makefile.comm -f $$srcdir/Makefile.sub \ -f $$srcdir/../Makefile.prog -f $$srcdir/Makefile.dep \ Makefile.lt; \ $(MAKE) srcdir=$$srcdir VPATH=$$srcdir \ -f $$srcdir/../Makefile.comm -f $$srcdir/Makefile.sub \ -f $$srcdir/Makefile.lt -f $$srcdir/../Makefile.prog \ -f $$srcdir/Makefile.dep $(do) $(PROGDIRS): lib # GNU tar TAR=tar dist: FORCE cd test; ./CLEAN version=`cat VERSION`; \ rm -fr sp-$$version; \ mkdir sp-$$version; \ cd sp-$$version; \ ln -s ../* .; \ rm sp-$$version; \ rm SP.mak ; \ sed -e '/^ CD /s/[A-Z]:\\.*\\//' -e "s/$$/`echo @ | tr @ \\\\015`/" \ ../SP.mak >SP.mak; \ cd ..; \ ln -s `pwd` sp-$$version; \ $(TAR) -c -f sp-$$version.tar.gz -h -z \ --exclude sp-$$version/test/cap \ --exclude sp-$$version/test/out \ --exclude sp-$$version/test/err \ `sed -e "s|.*|sp-$$version/&|" FILES`; \ rm -fr sp-$$version mrproper: -rm -f Makefile Makefile.comm Makefile.lib Makefile.prog \ config.cache config.log config.status -test -f Makefile.dist && mv Makefile.dist Makefile -test -f Makefile.comm.dist && mv Makefile.comm.dist Makefile.comm -test -f Makefile.prog.dist && mv Makefile.prog.dist Makefile.prog -test -f Makefile.lib.dist && mv Makefile.lib.dist Makefile.lib FORCE: jade-1.2.1/Makefile.lib.in100444 764 764 1203 6610110532 13003 0ustar jjcjjc# # Makefile.lib.in - Makerules for building libraries # # $Id: Makefile.lib.in 1.3 1998/10/11 11:07:03 jjc Exp $ # # Copyright (C) 1998 Cees A. de Groot # LTVERSION=@LTVERSION@ CLEANFILES=-r lib$(LIB).la $(OBJS) $(COBJS) $(LT_OBJS) core .libs Makefile.lt all: lib$(LIB).la pure: all Makefile.lt: echo 'LT_OBJS='`echo $(OBJS)|sed 's/\.o/.lo/g'` >Makefile.lt lib$(LIB).la: $(LT_OBJS) $(LIBTOOL) --mode=link $(CC) -o lib$(LIB).la $(LT_OBJS) \ -rpath $(libdir) -version-info $(LTVERSION) install: $(LIBTOOL) --mode=install $(INSTALL) lib$(LIB).la $(libdir) install-man: depend: depend_src depend.temp: $(GENSRCS) gen: $(GENSRCS) jade-1.2.1/Makefile.prog.in100444 764 764 1252 6610256424 13223 0ustar jjcjjc# # Makefile.prog.in - Makerules for bilding programs # # $Id: Makefile.prog.in 1.3 1998/10/12 01:36:20 jjc Exp $ # # Copyright (C) 1998 Cees A. de Groot # CLEANFILES=-r $(PROG) $(OBJS) core .libs Makefile.lt ALL_LIBS = $(XLIBS) $(LIBS) Makefile.lt: echo 'LT_LIBS='`echo $(ALL_LIBS)|sed 's/\.a/.la/g'` >Makefile.lt all: $(PROG) $(PROG): $(OBJS) $(COBJS) $(LT_LIBS) $(LIBTOOL) --mode=link $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(COBJS) $(LT_LIBS) install: $(PROG) -test -d $(bindir) || (mkdir $(bindir); chmod 755 $(bindir)) -rm -f $(bindir)/$(PROG) $(LIBTOOL) --mode=install $(INSTALL) $(PROG) $(bindir) depend: depend_src depend.temp: $(GENSRCS) gen: $(GENSRCS) jade-1.2.1/config/ 40775 764 764 0 6610553416 11365 5ustar jjcjjcjade-1.2.1/config/configure.in100555 764 764 10517 6610110546 14007 0ustar jjcjjcdnl dnl configure.in dnl AC_REVISION($Id: configure.in 1.2 1998/10/11 11:07:16 jjc Exp $) dnl dnl Process this file with autoconf to produce a configure script. dnl dnl Copyright (C) 1998 Cees A. de Groot dnl dnl dnl Credits: this autoconf script was largely "inspired" by the dnl autoconf script around SP made by Henry Thompson. dnl AC_INIT(dsssl) AC_CONFIG_AUX_DIR(config) TOP=`pwd` AC_SUBST(TOP) if test "$CXXFLAGS" = ""; then CXXFLAGS="-O2" fi LTVERSION=`cat VERSION | cut -d'.' -f1,2 | sed 's/\./:/g'` AC_SUBST(LTVERSION) dnl dnl Backup original Makefiles, people may want to revert to it if dnl configure doesn't work. dnl echo 'saving distribution makefiles...' test ! -f Makefile.dist && cp Makefile Makefile.dist test ! -f Makefile.lib.dist && cp Makefile.lib Makefile.lib.dist test ! -f Makefile.prog.dist && cp Makefile.prog Makefile.prog.dist test ! -f Makefile.comm.dist && cp Makefile.comm Makefile.comm.dist dnl dnl Check for programs dnl AC_PROG_CC AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_CXX AC_PATH_PROGS(M4, gm4 gnum4 m4, m4) AC_PATH_PROGS(PERL, perl, perl) test "$INSTALL" = "./config/install.sh -c" && INSTALL=`pwd`"/config/install.sh -c" dnl dnl Stuff special to GNU C++ dnl if test "$GXX" then CXXFLAGS="$CXXFLAGS -fno-implicit-templates" fi AC_LANG_CPLUSPLUS CXsave="$CXXFLAGS" CXXFLAGS=-ansi AC_CACHE_CHECK(for -ansi support, ac_cv_c_cmdline_ansi, AC_TRY_LINK([],[],ac_cv_c_cmdline_ansi=yes, ac_cv_c_cmdline_ansi=no)) if test "$ac_cv_c_cmdline_ansi" = "yes" then CXXFLAGS="$CXXFLAGS $CXsave" else CXXFLAGS="$CXsave" fi dnl dnl Checks for header files. dnl AC_HEADER_STDC AC_CHECK_HEADERS(limits.h) dnl dnl Checks for typedefs, structures, and compiler characteristics. dnl AC_C_CONST AC_C_INLINE AC_TYPE_SIZE_T AC_STRUCT_ST_BLKSIZE AC_CACHE_CHECK(for sig_atomic_t in signal.h, ac_cv_have_sig_atomic_t, AC_TRY_LINK([#include ],sig_atomic_t x;, ac_cv_have_sig_atomic_t=yes, ac_cv_have_sig_atomic_t=no)) if test "$ac_cv_have_sig_atomic_t" = "no" then AC_CHECK_TYPE(sig_atomic_t,int) fi AC_CACHE_CHECK(support for bool, ac_cv_typedef_bool, AC_TRY_LINK(,bool x; x=(false | true);, ac_cv_typedef_bool=yes, ac_cv_typedef_bool=no)) if test "$ac_cv_typedef_bool" = "yes" then AC_DEFINE(SP_HAVE_BOOL) fi dnl dnl Checks for library functions. dnl AC_CHECK_FUNC(memmove,,LIBOBJS="$LIBOBJS memmove.o") AC_CHECK_FUNC(strerror,,LIBOBJS="$LIBOBJS strerror.o") AC_CHECK_FUNC(strtoul,,LIBOBJS="$LIBOBJS strtoul.o") AC_CHECK_FUNC(setlocale,AC_DEFINE(SP_HAVE_LOCALE)) AC_CHECK_LIB(intl,gettext,AC_DEFINE(SP_HAVE_GETTEXT) LIBS="$LIBS -lintl") dnl dnl ANSI templates dnl AC_CACHE_CHECK(for ANSI template instantiation, ac_cv_c_template_ansi, AC_TRY_LINK([ class foo { }; template class test { public: T *data();}; template class test; ],,ac_cv_c_template_ansi=yes, ac_cv_c_template_ansi=no)) if test "$ac_cv_c_template_ansi" = "yes" then AC_DEFINE(SP_ANSI_CLASS_INST) fi dnl dnl HTTP support dnl AC_ARG_ENABLE(http, [ --enable-http bind in support for http], if test $enableval then AC_DEFINE(SP_HAVE_SOCKET) AC_CHECK_LIB(nsl,main,LIBS="$LIBS -lnsl") AC_CHECK_LIB(socket,main,LIBS="$LIBS -lsocket") AC_MSG_CHECKING(h_errno in netdb.h) AC_EGREP_HEADER(h_errno,netdb.h, AC_MSG_RESULT(yes), AC_DEFINE(SP_DECLARE_H_ERRNO) AC_MSG_RESULT(no)) fi) dnl dnl Framemaker support dnl AC_ARG_ENABLE(mif, [ --enable-mif bind in support for FrameMaker MIF output], if test $enableval then AC_DEFINE(JADE_MIF) fi) dnl dnl Other options dnl AC_DEFINE(SP_MULTI_BYTE) AC_ARG_ENABLE(default-catalog, [ --enable-default-catalog=pathlist provide one or more default catalog files or sysids, e.g. /usr/local/lib/sgml/catalog], if test $enableval then AC_DEFINE_UNQUOTED(SGML_CATALOG_FILES_DEFAULT,"$enableval") fi) AC_ARG_ENABLE(default-search-path, [ --enable-default-search-path=pathlist provide a default value for SGML_SEARCH_PATH], if test $enableval then AC_DEFINE_UNQUOTED(SGML_SEARCH_PATH_DEFAULT,"$enableval") fi) AC_SUBST(LIBOBJS) AM_PROG_LIBTOOL AC_OUTPUT(Makefile Makefile.lib Makefile.prog Makefile.comm) jade-1.2.1/config/config.guess100555 764 764 57330 6606574460 14035 0ustar jjcjjc#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Written by Per Bothner . # The master version of this file is at the FSF in /home/gd/gnu/lib. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit system type (host/target name). # # Only a few systems have been added to this list; please add others # (but try to keep the structure clean). # # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 8/24/94.) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. cat <dummy.s .globl main .ent main main: .frame \$30,0,\$26,0 .prologue 0 .long 0x47e03d80 # implver $0 lda \$2,259 .long 0x47e20c21 # amask $2,$1 srl \$1,8,\$2 sll \$2,2,\$2 sll \$0,3,\$0 addl \$1,\$0,\$0 addl \$2,\$0,\$0 ret \$31,(\$26),1 .end main EOF ${CC-cc} dummy.s -o dummy 2>/dev/null if test "$?" = 0 ; then ./dummy case "$?" in 7) UNAME_MACHINE="alpha" ;; 15) UNAME_MACHINE="alphaev5" ;; 14) UNAME_MACHINE="alphaev56" ;; 10) UNAME_MACHINE="alphapca56" ;; 16) UNAME_MACHINE="alphaev6" ;; esac fi rm -f dummy.s dummy echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]` exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-cbm-sysv4 exit 0;; amiga:NetBSD:*:*) echo m68k-cbm-netbsd${UNAME_RELEASE} exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc64:OpenBSD:*:*) echo mips64el-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hkmips:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; arm32:NetBSD:*:*) echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; SR2?01:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:*|MIS*:OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; atari*:NetBSD:*:*) echo m68k-atari-netbsd${UNAME_RELEASE} exit 0 ;; atari*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3*:NetBSD:*:*) echo m68k-sun-netbsd${UNAME_RELEASE} exit 0 ;; sun3*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:NetBSD:*:*) echo m68k-apple-netbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) sed 's/^ //' << EOF >dummy.c int main (argc, argv) int argc; char **argv; { #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF ${CC-cc} dummy.c -o dummy \ && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && rm dummy.c dummy && exit 0 rm -f dummy.c dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ -o ${TARGET_BINARY_INTERFACE}x = x ] ; then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i?86:AIX:*:*) echo i386-ibm-aix exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then sed 's/^ //' << EOF >dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 rm -f dummy.c dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:4) if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=4.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[3478]??:HP-UX:*:*) case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;; 9000/8?? ) HP_ARCH=hppa1.0 ;; esac HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) sed 's/^ //' << EOF >dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 rm -f dummy.c dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i?86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*X-MP:*:*:*) echo xmp-cray-unicos exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; F300:UNIX_System_V:*:*) FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; F301:UNIX_System_V:*:*) echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` exit 0 ;; hp3[0-9][05]:NetBSD:*:*) echo m68k-hp-netbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; i?86:BSD/386:*:* | *:BSD/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; *:NetBSD:*:*) echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; i*:CYGWIN*:*) echo i386-pc-cygwin32 exit 0 ;; i*:MINGW*:*) echo i386-pc-mingw32 exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin32 exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; *:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. ld_help_string=`ld --help 2>&1` ld_supported_emulations=`echo $ld_help_string \ | sed -ne '/supported emulations:/!d s/[ ][ ]*/ /g s/.*supported emulations: *// s/ .*// p'` case "$ld_supported_emulations" in i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;; i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;; sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;; esac if test "${UNAME_MACHINE}" = "alpha" ; then sed 's/^ //' <dummy.s .globl main .ent main main: .frame \$30,0,\$26,0 .prologue 0 .long 0x47e03d80 # implver $0 lda \$2,259 .long 0x47e20c21 # amask $2,$1 srl \$1,8,\$2 sll \$2,2,\$2 sll \$0,3,\$0 addl \$1,\$0,\$0 addl \$2,\$0,\$0 ret \$31,(\$26),1 .end main EOF LIBC="" ${CC-cc} dummy.s -o dummy 2>/dev/null if test "$?" = 0 ; then ./dummy case "$?" in 7) UNAME_MACHINE="alpha" ;; 15) UNAME_MACHINE="alphaev5" ;; 14) UNAME_MACHINE="alphaev56" ;; 10) UNAME_MACHINE="alphapca56" ;; 16) UNAME_MACHINE="alphaev6" ;; esac objdump --private-headers dummy | \ grep ld.so.1 > /dev/null if test "$?" = 0 ; then LIBC="libc1" fi fi rm -f dummy.s dummy echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 elif test "${UNAME_MACHINE}" = "mips" ; then cat >dummy.c </dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 rm -f dummy.c dummy else # Either a pre-BFD a.out linker (linux-gnuoldld) # or one that does not give us useful --help. # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. # If ld does not provide *any* "supported emulations:" # that means it is gnuoldld. echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 case "${UNAME_MACHINE}" in i?86) VENDOR=pc; ;; *) VENDOR=unknown; ;; esac # Determine whether the default compiler is a.out or elf cat >dummy.c < main(argc, argv) int argc; char *argv[]; { #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); # else printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); # endif # else printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); # endif #else printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); #endif return 0; } EOF ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 rm -f dummy.c dummy fi ;; # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions # are messed up and put the nodename in both sysname and nodename. i?86:DYNIX/ptx:4*:*) echo i386-sequent-sysv4 exit 0 ;; i?86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} fi exit 0 ;; i?86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; i?86:LynxOS:2.*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:*:6*) echo mips-sony-newsos6 exit 0 ;; R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 cat >dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) printf ("vax-dec-bsd\n"); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 rm -f dummy.c dummy # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi #echo '(Unable to guess system type)' 1>&2 exit 1 jade-1.2.1/config/config.sub100555 764 764 46532 6606574460 13502 0ustar jjcjjc#! /bin/sh # Configuration validation subroutine script, version 1.1. # Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. if [ x$1 = x ] then echo Configuration name missing. 1>&2 echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 echo "or $0 ALIAS" 1>&2 echo where ALIAS is a recognized configuration type. 1>&2 exit 1 fi # First pass through any local machine types. case $1 in *local*) echo $1 exit 0 ;; *) ;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in linux-gnu*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple) os= basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ | arme[lb] | pyramid | mn10200 | mn10300 \ | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \ | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \ | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \ | mips64 | mipsel | mips64el | mips64orion | mips64orionel \ | mipstx39 | mipstx39el \ | sparc | sparclet | sparclite | sparc64 | v850) basic_machine=$basic_machine-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i[3456]86) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. vax-* | tahoe-* | i[3456]86-* | i860-* | m32r-* | m68k-* | m68000-* \ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \ | xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* \ | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \ | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \ | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ | sparc64-* | mips64-* | mipsel-* \ | mips64el-* | mips64orion-* | mips64orionel-* \ | mipstx39-* | mipstx39el-* \ | f301-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-cbm ;; amigaos | amigados) basic_machine=m68k-cbm os=-amigaos ;; amigaunix | amix) basic_machine=m68k-cbm os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | ymp) basic_machine=ymp-cray os=-unicos ;; cray2) basic_machine=cray2-cray os=-unicos ;; [ctj]90-cray) basic_machine=c90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; i370-ibm* | ibm*) basic_machine=i370-ibm os=-mvs ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i[3456]86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i[3456]86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i[3456]86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i[3456]86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; miniframe) basic_machine=m68000-convergent ;; mipsel*-linux*) basic_machine=mipsel-unknown os=-linux-gnu ;; mips*-linux*) basic_machine=mips-unknown os=-linux-gnu ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; np1) basic_machine=np1-gould ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5) basic_machine=i586-intel ;; pentiumpro | p6) basic_machine=i686-intel ;; pentium-* | p5-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; k5) # We don't have specific support for AMD's K5 yet, so just call it a Pentium basic_machine=i586-amd ;; nexen) # We don't have specific support for Nexgen yet, so just call it a Pentium basic_machine=i586-nexgen ;; pn) basic_machine=pn-gould ;; power) basic_machine=rs6000-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; symmetry) basic_machine=i386-sequent os=-dynix ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; xmp) basic_machine=xmp-cray os=-unicos ;; xps | xps100) basic_machine=xps100-honeywell ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. mips) if [ x$os = x-linux-gnu ]; then basic_machine=mips-unknown else basic_machine=mips-mips fi ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sparc) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv*) # Remember, each alternative MUST END IN *, to match a version number. ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -ctix* | -uts*) os=-sysv ;; -ns2 ) os=-nextstep2 ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -xenix) os=-xenix ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-semi) os=-aout ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-ibm) os=-aix ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f301-fujitsu) os=-uxpv ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -hpux*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks*) vendor=wrs ;; -aux*) vendor=apple ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os jade-1.2.1/config/ltconfig100555 764 764 124131 6606574462 13264 0ustar jjcjjc#! /bin/sh # ltconfig - Create a system-specific libtool. # Copyright (C) 1996-1998 Free Software Foundation, Inc. # Gordon Matzigkeit , 1996 # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A lot of this script is taken from autoconf-2.10. # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi echo=echo if test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then : else # The Solaris and AIX default echo program unquotes backslashes. # This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # So, we emulate echo with printf '%s\n' echo="printf %s\\n" if test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then : else # Oops. We have no working printf. Try to find a not-so-buggy echo. echo=echo IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" for dir in $PATH /usr/ucb; do if test -f $dir/echo && test "X`$dir/echo '\t'`" = 'X\t'; then echo="$dir/echo" break fi done IFS="$save_ifs" fi fi # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # The name of this program. progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` # Constants: PROGRAM=ltconfig PACKAGE=libtool VERSION=1.2 ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5' ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS 1>&5' rm="rm -f" help="Try \`$progname --help' for more information." # Global variables: can_build_shared=yes enable_shared=yes # All known linkers require a `.a' archive for static linking. enable_static=yes ltmain= silent= srcdir= ac_config_guess= ac_config_sub= host= nonopt= verify_host=yes with_gcc=no with_gnu_ld=no old_AR="$AR" old_CC="$CC" old_CFLAGS="$CFLAGS" old_CPPFLAGS="$CPPFLAGS" old_LD="$LD" old_LN_S="$LN_S" old_NM="$NM" old_RANLIB="$RANLIB" # Parse the command line options. args= prev= for option do case "$option" in -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then eval "$prev=\$option" prev= continue fi case "$option" in --help) cat <&2 echo "$help" 1>&2 exit 1 ;; *) if test -z "$ltmain"; then ltmain="$option" elif test -z "$host"; then # This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 # if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then # echo "$progname: warning \`$option' is not a valid host type" 1>&2 # fi host="$option" else echo "$progname: too many arguments" 1>&2 echo "$help" 1>&2 exit 1 fi ;; esac done if test -z "$ltmain"; then echo "$progname: you must specify a LTMAIN file" 1>&2 echo "$help" 1>&2 exit 1 fi if test -f "$ltmain"; then : else echo "$progname: \`$ltmain' does not exist" 1>&2 echo "$help" 1>&2 exit 1 fi # Quote any args containing shell metacharacters. ltconfig_args= for arg do case "$arg" in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ltconfig_args="$ltconfig_args '$arg'" ;; *) ltconfig_args="$ltconfig_args $arg" ;; esac done # A relevant subset of AC_INIT. # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 5 compiler messages saved in config.log # 6 checking for... messages and results if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>>./config.log # NLS nuisances. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LANG+set}" = set; then LANG=C; export LANG; fi if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi if test -z "$srcdir"; then # Assume the source directory is the same one as the path to ltmain.sh. srcdir=`$echo "$ltmain" | $Xsed -e 's%/[^/]*$%%'` test "$srcdir" = "$ltmain" && srcdir=. fi trap "$rm conftest*; exit 1" 1 2 15 if test "$verify_host" = yes; then # Check for config.guess and config.sub. ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/config.guess; then ac_aux_dir=$ac_dir break fi done if test -z "$ac_aux_dir"; then echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 echo "$help" 1>&2 exit 1 fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub # Make sure we can run config.sub. if $ac_config_sub sun4 >/dev/null 2>&1; then : else echo "$progname: cannot run $ac_config_sub" 1>&2 echo "$help" 1>&2 exit 1 fi echo $ac_n "checking host system type""... $ac_c" 1>&6 host_alias=$host case "$host_alias" in "") if host_alias=`$ac_config_guess`; then : else echo "$progname: cannot guess host type; you must specify one" 1>&2 echo "$help" 1>&2 exit 1 fi ;; esac host=`$ac_config_sub $host_alias` echo "$ac_t$host" 1>&6 # Make sure the host verified. test -z "$host" && exit 1 elif test -z "$host"; then echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 echo "$help" 1>&2 exit 1 else host_alias=$host fi # Transform linux* to *-*-linux-gnu*, to support old configure scripts. case "$host_os" in linux-gnu*) ;; linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` esac host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` case "$host_os" in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "${COLLECT_NAMES+set}" != set; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Determine commands to create old-style static archives. old_archive_cmds='$AR cru $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= # Set a sane default for `AR'. test -z "$AR" && AR=ar # If RANLIB is not set, then run the test. if test "${RANLIB+set}" != "set"; then result=no echo $ac_n "checking for ranlib... $ac_c" 1>&6 IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" for dir in $PATH; do test -z "$dir" && dir=. if test -f $dir/ranlib; then RANLIB="ranlib" result="ranlib" break fi done IFS="$save_ifs" echo "$ac_t$result" 1>&6 fi if test -n "$RANLIB"; then old_archive_cmds="$old_archive_cmds;\$RANLIB \$oldlib" old_postinstall_cmds="\$RANLIB \$oldlib;$old_postinstall_cmds" fi # Check to see if we are using GCC. if test "$with_gcc" != yes || test -z "$CC"; then # If CC is not set, then try to find GCC or a usable CC. if test -z "$CC"; then echo $ac_n "checking for gcc... $ac_c" 1>&6 IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" for dir in $PATH; do IFS="$save_ifs" test -z "$dir" && dir=. if test -f $dir/gcc; then CC="gcc" break fi done IFS="$save_ifs" if test -n "$CC"; then echo "$ac_t$CC" 1>&6 else echo "$ac_t"no 1>&6 fi fi # Not "gcc", so try "cc", rejecting "/usr/ucb/cc". if test -z "$CC"; then echo $ac_n "checking for cc... $ac_c" 1>&6 IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" cc_rejected=no for dir in $PATH; do test -z "$dir" && dir=. if test -f $dir/cc; then if test "$dir/cc" = "/usr/ucb/cc"; then cc_rejected=yes continue fi CC="cc" break fi done IFS="$save_ifs" if test $cc_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same name, so the bogon will be chosen # first if we set CC to just the name; use the full file name. shift set dummy "$dir/cc" "$@" shift CC="$@" fi fi if test -n "$CC"; then echo "$ac_t$CC" 1>&6 else echo "$ac_t"no 1>&6 fi if test -z "$CC"; then echo "$progname: error: no acceptable cc found in \$PATH" 1>&2 exit 1 fi fi # Now see if the compiler is really GCC. with_gcc=no echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6 echo "$progname:424: checking whether we are using GNU C" >&5 $rm conftest.c cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then with_gcc=yes fi $rm conftest.c echo "$ac_t$with_gcc" 1>&6 fi # Allow CC to be a program name with arguments. set dummy $CC compiler="$2" echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 pic_flag= special_shlib_compile_flags= wl= link_static_flag= no_builtin_flag= if test "$with_gcc" = yes; then wl='-Wl,' link_static_flag='-static' no_builtin_flag=' -fno-builtin' case "$host_os" in aix3* | aix4* | irix5* | irix6* | osf3* | osf4*) # PIC is the default for these OSes. ;; os2*) # We can build DLLs from non-PIC. ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. pic_flag='-m68020 -resident32 -malways-restore-a4' ;; *) pic_flag='-fPIC' ;; esac else # PORTME Check for PIC flags for the system compiler. case "$host_os" in aix3* | aix4*) # All AIX code is PIC. link_static_flag='-bnso -bI:/lib/syscalls.exp' ;; hpux9* | hpux10*) # Is there a better link_static_flag that works with the bundled CC? wl='-Wl,' link_static_flag="${wl}-a ${wl}archive" pic_flag='+Z' ;; irix5* | irix6*) wl='-Wl,' link_static_flag='-non_shared' # PIC (with -KPIC) is the default. ;; os2*) # We can build DLLs from non-PIC. ;; osf3* | osf4*) # All OSF/1 code is PIC. wl='-Wl,' link_static_flag='-non_shared' ;; sco3.2v5*) pic_flag='-Kpic' link_static_flag='-dn' special_shlib_compile_flags='-belf' ;; solaris2*) pic_flag='-KPIC' link_static_flag='-Bstatic' wl='-Wl,' ;; sunos4*) pic_flag='-PIC' link_static_flag='-Bstatic' wl='-Qoption ld ' ;; sysv4.2uw2*) pic_flag='-KPIC' link_static_flag='-Bstatic' wl='-Wl,' ;; uts4*) pic_flag='-pic' link_static_flag='-Bstatic' ;; *) can_build_shared=no ;; esac fi if test -n "$pic_flag"; then echo "$ac_t$pic_flag" 1>&6 # Check to make sure the pic_flag actually works. echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6 $rm conftest* echo > conftest.c save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $pic_flag -DPIC" echo "$progname:547: checking if $compiler PIC flag $pic_flag works" >&5 if { (eval echo $progname:548: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then # Append any warnings to the config.log. cat conftest.err 1>&5 # On HP-UX, both CC and GCC only warn that PIC is supported... then they # create non-PIC objects. So, if there were any warnings, we assume that # PIC is not supported. if test -s conftest.err; then echo "$ac_t"no 1>&6 can_build_shared=no pic_flag= else echo "$ac_t"yes 1>&6 pic_flag=" $pic_flag" fi else # Append any errors to the config.log. cat conftest.err 1>&5 can_build_shared=no pic_flag= echo "$ac_t"no 1>&6 fi CFLAGS="$save_CFLAGS" $rm conftest* else echo "$ac_t"none 1>&6 fi # Check for any special shared library compilation flags. if test -n "$special_shlib_compile_flags"; then echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then : else echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2 can_build_shared=no fi fi echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6 $rm conftest* echo 'main(){return(0);}' > conftest.c save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $link_static_flag" echo "$progname:591: checking if $compiler static flag $link_static_flag works" >&5 if { (eval echo $progname:592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then echo "$ac_t$link_static_flag" 1>&6 else echo "$ac_t"none 1>&6 link_static_flag= fi LDFLAGS="$save_LDFLAGS" $rm conftest* if test -z "$LN_S"; then # Check to see if we can use ln -s, or we need hard links. echo $ac_n "checking whether ln -s works... $ac_c" 1>&6 $rm conftestdata if ln -s X conftestdata 2>/dev/null; then $rm conftestdata LN_S="ln -s" else LN_S=ln fi if test "$LN_S" = "ln -s"; then echo "$ac_t"yes 1>&6 else echo "$ac_t"no 1>&6 fi fi # Make sure LD is an absolute path. if test -z "$LD"; then ac_prog=ld if test "$with_gcc" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6 echo "$progname:624: checking for ld used by GCC" >&5 ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. /* | [A-Za-z]:\\*) test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we are not using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld... $ac_c" 1>&6 echo "$progname:642: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 echo "$progname:645: checking for non-GNU ld" >&5 fi if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog"; then LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" fi if test -n "$LD"; then echo "$ac_t$LD" 1>&6 else echo "$ac_t"no 1>&6 fi if test -z "$LD"; then echo "$progname: error: no acceptable ld found in \$PATH" 1>&2 exit 1 fi fi # Check to see if it really is or is not GNU ld. echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6 # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then with_gnu_ld=yes else with_gnu_ld=no fi echo "$ac_t$with_gnu_ld" 1>&6 # See if the linker supports building shared libraries. echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 allow_undefined_flag= no_undefined_flag= archive_cmds= old_archive_from_new_cmds= export_dynamic_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported runpath_var= case "$host_os" in amigaos* | sunos4*) # On these operating systems, we should treat GNU ld like the system ld. gnu_ld_acts_native=yes ;; *) gnu_ld_acts_native=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes && test "$gnu_ld_acts_native" != yes; then # See if GNU ld supports shared libraries. if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared ${wl}-soname $wl$soname -o $lib$libobjs' runpath_var=LD_RUN_PATH ld_shlibs=yes else ld_shlibs=no fi if test "$ld_shlibs" = yes; then hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' fi else # PORTME fill in a description of your system's linker (not GNU ld) case "$host_os" in aix3*) allow_undefined_flag=unsupported archive_cmds='$NM$libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' > $lib.exp;$LD -o $objdir/$soname$libobjs -bE:$lib.exp -T512 -H512 -bM:SRE;$AR cru $lib $objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$with_gcc" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4*) allow_undefined_flag=unsupported archive_cmds='$NM$libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' > $lib.exp;$CC -o $objdir/$soname$libobjs ${wl}-bE:$lib.exp ${wl}-bM:SRE ${wl}-bnoentry;$AR cru $lib $objdir/$soname' hardcode_direct=yes hardcode_minus_L=yes ;; amigaos*) archive_cmds='$rm $objdir/a2ixlibrary.data;$echo "#define NAME $libname" > $objdir/a2ixlibrary.data;$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data;$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data;$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data;$AR cru $lib$libobjs;$RANLIB $lib;(cd $objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib$libobjs /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib$libobjs' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3, at last, uses gcc -shared to do shared libraries. freebsd3*) archive_cmds='$CC -shared -o $lib$libobjs' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; hpux9*) archive_cmds='$rm $objdir/$soname;$LD -b +s +b $install_libdir -o $objdir/$soname$libobjs;mv $objdir/$soname $lib' hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_direct=yes hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) archive_cmds='$LD -b +h $soname +s +b $install_libdir -o $lib$libobjs' hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_direct=yes hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; irix5* | irix6*) archive_cmds='$LD -shared -o $lib -soname $soname -set_version $verstring$libobjs' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' ;; netbsd*) # Tested with NetBSD 1.2 ld archive_cmds='$LD -Bshareable -o $lib$libobjs' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; openbsd*) archive_cmds='$LD -Bshareable -o $lib$libobjs' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def;$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def;$echo DATA >> $objdir/$libname.def;$echo " SINGLE NONSHARED" >> $objdir/$libname.def;$echo EXPORTS >> $objdir/$libname.def;emxexp$libobjs >> $objdir/$libname.def;$CC -Zdll -Zcrtdll -o $lib$libobjs $objdir/$libname.def' old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def' ;; osf3* | osf4*) allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} -o $lib -soname $soname -set_version $verstring$libobjs$deplibs' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; sco3.2v5*) archive_cmds='$LD -G -o $lib$libobjs' hardcode_direct=yes ;; solaris2*) no_undefined_flag=' -z text' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib$libobjs' hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no # Solaris 2 before 2.5 hardcodes -L paths. case "$host_os" in solaris2.[0-4]*) hardcode_minus_L=yes ;; esac ;; sunos4*) if test "$with_gcc" = yes; then archive_cmds='$CC -shared -o $lib$libobjs' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib$libobjs' fi if test "$with_gnu_ld" = yes; then export_dynamic_flag_spec='${wl}-export-dynamic' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib$libobjs' hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=no ;; *) ld_shlibs=no can_build_shared=no ;; esac fi echo "$ac_t$ld_shlibs" 1>&6 if test -z "$NM"; then echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6 case "$NM" in /* | [A-Za-z]:\\*) ;; # Let the user override the test with a path. *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/nm; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then NM="$ac_dir/nm -B" elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then NM="$ac_dir/nm -p" else NM="$ac_dir/nm" fi break fi done IFS="$ac_save_ifs" test -z "$NM" && NM=nm ;; esac echo "$ac_t$NM" 1>&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6 # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRSTU]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \1' # Define system-specific variables. case "$host_os" in aix*) symcode='[BCDTU]' ;; irix*) # Cannot use undefined symbols on IRIX because inlined functions mess us up. symcode='[BCDEGRST]' ;; solaris2*) symcode='[BDTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then symcode='[ABCDGISTUW]' fi # Write the raw and C identifiers. global_symbol_pipe="sed -n -e 's/^.* $symcode $sympat$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no $rm conftest* cat > conftest.c <&5 if { (eval echo $progname:972: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.o; then # Now try to grab the symbols. nlist=conftest.nm if { echo "$progname:975: eval \"$NM conftest.o | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.o | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" wcout=`wc "$nlist" 2>/dev/null` count=`$echo "X$wcout" | $Xsed -e 's/^[ ]*\([0-9][0-9]*\).*$/\1/'` (test "$count" -ge 0) 2>/dev/null || count=-1 else rm -f "$nlist"T count=-1 fi # Make sure that we snagged all the symbols we need. if egrep ' nm_test_var$' "$nlist" >/dev/null; then if egrep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.c #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. sed 's/^.* \(.*\)$/extern char \1;/' < "$nlist" >> conftest.c cat <> conftest.c #if defined (__STDC__) && __STDC__ # define __ptr_t void * #else # define __ptr_t char * #endif /* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */ int dld_preloaded_symbol_count = $count; /* The mapping between symbol names and symbols. */ struct { char *name; __ptr_t address; } dld_preloaded_symbols[] = { EOF sed 's/^\(.*\) \(.*\)$/ {"\1", (__ptr_t) \&\2},/' < "$nlist" >> conftest.c cat <<\EOF >> conftest.c {0, (__ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.o conftestm.o save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS='conftestm.o' CFLAGS="$CFLAGS$no_builtin_flag" if { (eval echo $progname:1033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then pipe_works=yes else echo "$progname: failed program was:" >&5 cat conftest.c >&5 fi LIBS="$save_LIBS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.c >&5 fi $rm conftest* # Do not use the global_symbol_pipe unless it works. echo "$ac_t$pipe_works" 1>&6 test "$pipe_works" = yes || global_symbol_pipe= # Check hardcoding attributes. echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var"; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && \ test "$hardcode_minus_L" != no && \ test "$hardcode_shlibpath_var" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi elif test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" != yes; then # We cannot hardcode anything. hardcode_action=unsupported else # We can only hardcode existing directories. hardcode_action=relink fi echo "$ac_t$hardcode_action" 1>&6 test "$hardcode_action" = unsupported && can_build_shared=no reload_flag= reload_cmds='$LD$reload_flag -o $output$reload_objs' echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6 # PORTME Some linker may need a different reload flag. reload_flag='-r' echo "$ac_t$reload_flag" test -n "$reload_flag" && reload_flag=" $reload_flag" # PORTME Fill in your ld.so characteristics library_names_spec= libname_spec='lib$name' soname_spec= postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= version_type=none dynamic_linker="$host_os ld.so" echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 case "$host_os" in aix3* | aix4*) version_type=linux library_names_spec='${libname}${release}.so.$versuffix $libname.a' shlibpath_var=LIBPATH # AIX has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}.so.$major' ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; freebsd2* | freebsd3*) version_type=sunos library_names_spec='${libname}${release}.so.$versuffix $libname.so' finish_cmds='PATH="$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH ;; gnu*) version_type=sunos library_names_spec='${libname}${release}.so.$versuffix' shlibpath_var=LD_LIBRARY_PATH ;; hpux9* | hpux10*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. dynamic_linker="$host_os dld.sl" version_type=sunos shlibpath_var=SHLIB_PATH library_names_spec='${libname}${release}.sl.$versuffix ${libname}${release}.sl.$major $libname.sl' soname_spec='${libname}${release}.sl.$major' # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6*) version_type=osf soname_spec='${libname}${release}.so' library_names_spec='${libname}${release}.so.$versuffix $libname.so' shlibpath_var=LD_LIBRARY_PATH ;; # No shared lib support for Linux oldld, aout, or coff. linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) dynamic_linker=no ;; # This must be Linux ELF. linux-gnu*) version_type=linux library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' soname_spec='${libname}${release}.so.$major' finish_cmds='PATH="$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH if test -f /lib/ld.so.1; then dynamic_linker='GNU ld.so' else # Only the GNU ld.so supports shared libraries on MkLinux. case "$host_cpu" in powerpc*) dynamic_linker=no ;; *) dynamic_linker='Linux ld.so' ;; esac fi ;; netbsd* | openbsd*) version_type=sunos library_names_spec='${libname}${release}.so.$versuffix' finish_cmds='PATH="$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH ;; os2*) libname_spec='$name' library_names_spec='$libname.dll $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4*) version_type=osf soname_spec='${libname}${release}.so' library_names_spec='${libname}${release}.so.$versuffix $libname.so' shlibpath_var=LD_LIBRARY_PATH ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}.so.$major' library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' shlibpath_var=LD_LIBRARY_PATH ;; solaris2*) version_type=linux library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' soname_spec='${libname}${release}.so.$major' shlibpath_var=LD_LIBRARY_PATH ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}.so.$versuffix' finish_cmds='PATH="$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH ;; sysv4.2uw2*) version_type=linux library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' soname_spec='${libname}${release}.so.$major' shlibpath_var=LD_LIBRARY_PATH ;; uts4*) version_type=linux library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' soname_spec='${libname}${release}.so.$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$ac_t$dynamic_linker" test "$dynamic_linker" = no && can_build_shared=no # Report the final consequences. echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds;\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; esac echo "$ac_t$enable_shared" 1>&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "checking whether to build static libraries... $enable_static" 1>&6 echo $ac_n "checking for objdir... $ac_c" 1>&6 rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. objdir=_libs fi rmdir .libs 2>/dev/null echo "$ac_t$objdir" 1>&6 # Copy echo and quote the copy, instead of the original, because it is # used later. ltecho="$echo" # Now quote all the things that may contain metacharacters. for var in ltecho old_CC old_CFLAGS old_CPPFLAGS old_LD old_NM old_RANLIB \ old_LN_S AR CC LD LN_S NM reload_flag reload_cmds wl pic_flag \ link_static_flag no_builtin_flag export_dynamic_flag_spec \ libname_spec library_names_spec soname_spec RANLIB \ old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ old_postuninstall_cmds archive_cmds postinstall_cmds postuninstall_cmds \ allow_undefined_flag no_undefined_flag \ finish_cmds finish_eval global_symbol_pipe \ hardcode_libdir_flag_spec hardcode_libdir_separator; do case "$var" in reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | archive_cmds | \ postinstall_cmds | postuninstall_cmds | finish_cmds) # Double-quote double-evaled strings. eval "$var=\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\"\`" ;; *) eval "$var=\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`" ;; esac done ofile=libtool trap "$rm $ofile; exit 1" 1 2 15 echo creating $ofile $rm $ofile cat < $ofile #! /bin/sh # libtool - Provide generalized library-building support services. # Generated automatically by $PROGRAM - GNU $PACKAGE $VERSION # NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. # # Copyright (C) 1996-1998 Free Software Foundation, Inc. # Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This program was configured as follows, # on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # # CC="$old_CC" CFLAGS="$old_CFLAGS" CPPFLAGS="$old_CPPFLAGS" \\ # LD="$old_LD" NM="$old_NM" RANLIB="$old_RANLIB" LN_S="$old_LN_S" \\ # $0$ltconfig_args # # Compiler and other test output produced by $progname, useful for # debugging $progname, is in ./config.log if it exists. # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="sed -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "\${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi # An echo program that does not interpret backslashes. echo="$ltecho" # The version of $progname that generated this script. LTCONFIG_VERSION="$VERSION" # Shell to use when invoking shell scripts. SHELL=${CONFIG_SHELL-/bin/sh} # Whether or not to build libtool libraries. build_libtool_libs=$enable_shared # Whether or not to build old-style libraries. build_old_libs=$enable_static # The host system. host_alias="$host_alias" host="$host" # The archiver. AR="$AR" # The default C compiler. CC="$CC" # The linker used to build libraries. LD="$LD" # Whether we need hard or soft links. LN_S="$LN_S" # A BSD-compatible nm program. NM="$NM" # The name of the directory that contains temporary libtool files. objdir="$objdir" # How to create reloadable object files. reload_flag="$reload_flag" reload_cmds="$reload_cmds" # How to pass a linker flag through the compiler. wl="$wl" # Additional compiler flags for building library objects. pic_flag="$pic_flag" # Compiler flag to prevent dynamic linking. link_static_flag="$link_static_flag" # Compiler flag to turn off builtin functions. no_builtin_flag="$no_builtin_flag" # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec="$export_dynamic_flag_spec" # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec="$libname_spec" # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec="$library_names_spec" # The coded name of the library, if different from the real name. soname_spec="$soname_spec" # Commands used to build and install an old-style archive. RANLIB="$RANLIB" old_archive_cmds="$old_archive_cmds" old_postinstall_cmds="$old_postinstall_cmds" old_postuninstall_cmds="$old_postuninstall_cmds" # Create an old-style archive from a shared archive. old_archive_from_new_cmds="$old_archive_from_new_cmds" # Commands used to build and install a shared archive. archive_cmds="$archive_cmds" postinstall_cmds="$postinstall_cmds" postuninstall_cmds="$postuninstall_cmds" # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag="$allow_undefined_flag" # Flag that forces no undefined symbols. no_undefined_flag="$no_undefined_flag" # Commands used to finish a libtool library installation in a directory. finish_cmds="$finish_cmds" # Same as above, but a single script fragment to be evaled but not shown. finish_eval="$finish_eval" # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe="$global_symbol_pipe" # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec="$hardcode_libdir_flag_spec" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="$hardcode_libdir_separator" # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var EOF case "$host_os" in aix3*) cat <<\EOF >> $ofile # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "${COLLECT_NAMES+set}" != set; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # Append the ltmain.sh script. cat "$ltmain" >> $ofile || (rm -f $ofile; exit 1) chmod +x $ofile exit 0 # Local Variables: # mode:shell-script # sh-indentation:2 # End: jade-1.2.1/config/ltmain.sh100555 764 764 212503 6606574462 13355 0ustar jjcjjc# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun ltconfig. # # Copyright (C) 1996-1998 Free Software Foundation, Inc. # Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # The name of this program. progname=`$echo "$0" | sed 's%^.*/%%'` modename="$progname" # Constants. PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.2 default_mode= help="Try \`$progname --help' for more information." magic="%%%MAGIC variable%%%" mkdir="mkdir" mv="mv -f" rm="rm -f" # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' # NLS nuisances. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "$LTCONFIG_VERSION" != "$VERSION"; then echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 fi if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then echo "$modename: not configured to build any kind of library" 1>&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= # Parse our command line options once, thoroughly. while test $# -gt 0 do arg="$1" shift case "$arg" in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case "$prev" in execute_dlfiles) eval "$prev=\"\$$prev \$arg\"" ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case "$arg" in --help) show_help=yes ;; --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION" exit 0 ;; --dry-run | -n) run=: ;; --features) echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit 0 ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --quiet | --silent) show=: ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit 1 ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then case "$nonopt" in *cc | *++ | gcc* | *-gcc*) mode=link for arg do case "$arg" in -c) mode=compile break ;; esac done ;; *db | *dbx) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit 1 fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case "$mode" in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= lastarg= srcfile="$nonopt" suppress_output= for arg do # Accept any command-line options. case "$arg" in -o) $echo "$modename: you cannot specify the output filename with \`-o'" 1>&2 $echo "$help" 1>&2 exit 1 ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; esac # Accept the current argument as the source file. lastarg="$srcfile" srcfile="$arg" # Aesthetically quote the previous argument. # Backslashify any backslashes, double quotes, and dollar signs. # These are the only characters that are still specially # interpreted inside of double-quoted scrings. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly in scan # sets, so we specify it separately. case "$lastarg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) lastarg="\"$lastarg\"" ;; esac # Add the previous argument to base_compile. if test -z "$base_compile"; then base_compile="$lastarg" else base_compile="$base_compile $lastarg" fi done # Get the name of the library object. libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` # Recognize several different file suffixes. xform='[cCFSfms]' case "$libobj" in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case "$libobj" in *.lo) obj=`$echo "X$libobj" | $Xsed -e 's/\.lo$/.o/'` ;; *) $echo "$modename: cannot determine name of library object from \`$srcfile'" 1>&2 exit 1 ;; esac if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit 1 fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then $run $rm $obj $libobj trap "$run $rm $obj $libobj; exit 1" 1 2 15 else $run $rm $libobj trap "$run $rm $libobj; exit 1" 1 2 15 fi # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile # All platforms use -DPIC, to notify preprocessed assembler code. $show "$base_compile$pic_flag -DPIC $srcfile" if $run eval "$base_compile\$pic_flag -DPIC \$srcfile"; then : else test -n "$obj" && $run $rm $obj exit 1 fi # If we have no pic_flag, then copy the object into place and finish. if test -z "$pic_flag"; then $show "$LN_S $obj $libobj" $run $LN_S $obj $libobj exit $? fi # Just move the object, then go on to compile the next one $show "$mv $obj $libobj" $run $mv $obj $libobj || exit 1 # Allow error messages only from the first compilation. suppress_output=' >/dev/null 2>&1' fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then # Suppress compiler output if we already did a PIC compilation. $show "$base_compile $srcfile$suppress_output" if $run eval "$base_compile \$srcfile$suppress_output"; then : else $run $rm $obj $libobj exit 1 fi fi # Create an invalid libtool object if no PIC, so that we do not # accidentally link it into a program. if test "$build_libtool_libs" != yes; then $show "echo timestamp > $libobj" $run eval "echo timestamp > \$libobj" || exit $? fi exit 0 ;; # libtool link mode link) modename="$modename: link" CC="$nonopt" allow_undefined=yes compile_command="$CC" finalize_command="$CC" compile_shlibpath= finalize_shlibpath= deplibs= dlfiles= dlprefiles= export_dynamic=no hardcode_libdirs= libobjs= link_against_libtool_libs= ltlibs= objs= prev= prevarg= release= rpath= perm_rpath= temp_rpath= vinfo= # We need to know -static, to get the right output filenames. for arg do case "$arg" in -all-static | -static) if test "X$arg" = "X-all-static" && test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 fi build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. for arg do # If the previous option needs an argument, assign it. if test -n "$prev"; then case "$prev" in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case "$prev" in dlfiles|dlprefiles) case "$arg" in *.la | *.lo) ;; # We handle these cases below. *) dlprefiles="$dlprefiles $arg" test "$prev" = dlfiles && dlfiles="$dlfiles $arg" prev= ;; esac ;; release) release="-$arg" prev= continue ;; rpath) rpath="$rpath $arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi prevarg="$arg" case "$arg" in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) if test "$export_dynamic" != yes; then export_dynamic=yes if test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" else arg= fi # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" fi ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's%^-L\(.*\)$%\1%'` case "$dir" in /* | [A-Za-z]:\\*) # Add the corresponding hardcode_libdir_flag, if it is not identical. ;; *) $echo "$modename: \`-L$dir' cannot specify a relative directory" 1>&2 exit 1 ;; esac deplibs="$deplibs $arg" ;; -l*) deplibs="$deplibs $arg" ;; -no-undefined) allow_undefined=no continue ;; -o) prev=output ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -static) # If we have no pic_flag, then this is the same as -all-static. if test -z "$pic_flag" && test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -version-info) prev=vinfo continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac ;; *.o | *.a) # A standard object. objs="$objs $arg" ;; *.lo) # A library object. if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" if test "$build_libtool_libs" = yes; then prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e 's/\.lo$/\.o/'` prev= fi libobjs="$libobjs $arg" ;; *.la) # A libtool-controlled library. dlname= libdir= library_names= old_library= # Check to see that this really is a libtool archive. if (sed -e '2q' $arg | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : else $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2 exit 1 fi # If there is no directory component, then add one. case "$arg" in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$libdir"; then $echo "$modename: \`$arg' contains no -rpath information" 1>&2 exit 1 fi # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$arg'" 1>&2 exit 1 fi # Find the relevant object directory and library name. name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'` dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$arg"; then dir="$objdir" else dir="$dir/$objdir" fi # This library was specified with -dlopen. if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" if test -z "$dlname"; then # If there is no dlname, we need to preload. prev=dlprefiles else # We should not create a dependency on this library, but we # may need any libraries it requires. compile_command="$compile_command$dependency_libs" finalize_command="$finalize_command$dependency_libs" prev= continue fi fi # The library was specified with -dlpreopen. if test "$prev" = dlprefiles; then # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then dlprefiles="$dlprefiles $dir/$old_library" else dlprefiles="$dlprefiles $dir/$linklib" fi prev= fi if test "$build_libtool_libs" = yes && test -n "$library_names"; then link_against_libtool_libs="$link_against_libtool_libs $arg" if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *) temp_rpath="$temp_rpath $dir" ;; esac fi # This is the magic to use -rpath. if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then # Put the magic libdir with the hardcode flag. hardcode_libdirs="$libdir" libdir="@HARDCODE_LIBDIRS@" else # Just accumulate the unique libdirs. case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac libdir= fi fi if test -n "$libdir"; then eval flag=\"$hardcode_libdir_flag_spec\" compile_command="$compile_command $flag" finalize_command="$finalize_command $flag" fi elif test -n "$runpath_var"; then # Do the same for the permanent run path. case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case "$hardcode_action" in immediate) if test "$hardcode_direct" = no; then compile_command="$compile_command $dir/$linklib" elif test "$hardcode_minus_L" = no; then compile_command="$compile_command -L$dir -l$name" elif test "$hardcode_shlibpath_var" = no; then compile_shlibpath="$compile_shlibpath$dir:" compile_command="$compile_command -l$name" fi ;; relink) # We need an absolute path. case "$dir" in /* | [A-Za-z]:\\*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 exit 1 fi dir="$absdir" ;; esac if test "$hardcode_direct" = yes; then compile_command="$compile_command $dir/$linklib" elif test "$hardcode_minus_L" = yes; then compile_command="$compile_command -L$dir -l$name" elif test "$hardcode_shlibpath_var" = yes; then compile_shlibpath="$compile_shlibpath$dir:" compile_command="$compile_command -l$name" fi ;; *) $echo "$modename: \`$hardcode_action' is an unknown hardcode action" 1>&2 exit 1 ;; esac # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then finalize_command="$finalize_command $libdir/$linklib" elif test "$hardcode_minus_L" = yes; then finalize_command="$finalize_command -L$libdir -l$name" elif test "$hardcode_shlibpath_var" = yes; then finalize_shlibpath="$finalize_shlibpath$libdir:" finalize_command="$finalize_command -l$name" else # We cannot seem to hardcode it, guess we'll fake it. finalize_command="$finalize_command -L$libdir -l$name" fi else # Transform directly to old archives if we don't build new libraries. if test -n "$pic_flag" && test -z "$old_library"; then $echo "$modename: cannot find static library for \`$arg'" 1>&2 exit 1 fi # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_command="$compile_command $dir/$linklib" finalize_command="$finalize_command $dir/$linklib" else compile_command="$compile_command -L$dir -l$name" finalize_command="$finalize_command -L$dir -l$name" fi fi # Add in any libraries that this one depends upon. compile_command="$compile_command$dependency_libs" finalize_command="$finalize_command$dependency_libs" continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac ;; esac # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -n "$vinfo" && test -n "$release"; then $echo "$modename: you cannot specify both \`-version-info' and \`-release'" 1>&2 $echo "$help" 1>&2 exit 1 fi oldlib= oldobjs= case "$output" in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit 1 ;; */* | *\\*) $echo "$modename: output file \`$output' must have no directory components" 1>&2 exit 1 ;; *.a) # Now set the variables for building old libraries. build_libtool_libs=no build_old_libs=yes oldlib="$output" $show "$rm $oldlib" $run $rm $oldlib ;; *.la) # Make sure we only generate libraries of the form `libNAME.la'. case "$output" in lib*) ;; *) $echo "$modename: libtool library \`$arg' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac name=`$echo "X$output" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval libname=\"$libname_spec\" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= current=0 revision=0 age=0 if test -n "$objs"; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 exit 1 fi # How the heck are we supposed to write a wrapper for a shared library? if test -n "$link_against_libtool_libs"; then $echo "$modename: libtool library \`$output' may not depend on uninstalled libraries:$link_against_libtool_libs" 1>&2 exit 1 fi if test -n "$dlfiles$dlprefiles"; then $echo "$modename: warning: \`-dlopen' is ignored while creating libtool libraries" 1>&2 # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test -z "$rpath"; then $echo "$modename: you must specify an installation directory with \`-rpath'" 1>&2 $echo "$help" 1>&2 exit 1 fi set dummy $rpath if test $# -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" # Parse the version information argument. IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' set dummy $vinfo IFS="$save_ifs" if test -n "$5"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit 1 fi test -n "$2" && current="$2" test -n "$3" && revision="$3" test -n "$4" && age="$4" # Check that each of the things are valid numbers. case "$current" in 0 | [1-9] | [1-9][0-9]*) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case "$revision" in 0 | [1-9] | [1-9][0-9]*) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case "$age" in 0 | [1-9] | [1-9][0-9]*) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac if test $age -gt $current; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 fi # Calculate the version variables. version_vars="version_type current age revision" case "$version_type" in none) ;; linux) version_vars="$version_vars major versuffix" major=`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) version_vars="$version_vars versuffix verstring" major=`expr $current - $age` versuffix="$current.$age.$revision" verstring="$versuffix" # Add in all the interfaces that we are compatible with. loop=$age while test $loop != 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) version_vars="$version_vars major versuffix" major="$current" versuffix="$current.$revision" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 ;; esac # Create the output directory, or remove our outputs if we need to. if test -d $objdir; then $show "$rm $objdir/$output $objdir/$libname.* $objdir/${libname}${release}.*" $run $rm $objdir/$output $objdir/$libname.* $objdir/${libname}${release}.* else $show "$mkdir $objdir" $run $mkdir $objdir status=$? if test $status -eq 0 || test -d $objdir; then : else exit $status fi fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi # Add libc to deplibs on all systems. dependency_libs="$deplibs" deplibs="$deplibs -lc" if test "$build_libtool_libs" = yes; then # Get the real and link names of the library. eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi lib="$objdir/$realname" for link do linknames="$linknames $link" done # Use standard objects if they are PIC. test -z "$pic_flag" && libobjs=`$echo "X$libobjs " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//g'` # Do each of the archive commands. eval cmds=\"$archive_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Create links to the real library. for linkname in $linknames; do $show "(cd $objdir && $LN_S $realname $linkname)" $run eval '(cd $objdir && $LN_S $realname $linkname)' || exit $? done # If -export-dynamic was specified, set the dlname. if test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi # Now set the variables for building old libraries. oldlib="$objdir/$libname.a" ;; *.lo | *.o) if test -n "$link_against_libtool_libs"; then $echo "$modename: error: cannot link libtool libraries into reloadable objects" 1>&2 exit 1 fi if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored while creating objects" 1>&2 fi if test -n "$dlfiles$dlprefiles"; then $echo "$modename: warning: \`-dlopen' is ignored while creating objects" 1>&2 # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored while creating objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored while creating objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored while creating objects" 1>&2 fi case "$output" in *.lo) if test -n "$objs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit 1 fi libobj="$output" obj=`$echo "X$output" | $Xsed -e 's/\.lo$/.o/'` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Create the old-style object. reload_objs="$objs"`$echo "X$libobjs " | $Xsed -e 's/[^ ]*\.a //g' -e 's/\.lo /.o /g' -e 's/ $//g'` output="$obj" eval cmds=\"$reload_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. test -z "$libobj" && exit 0 if test "$build_libtool_libs" != yes; then # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. $show "echo timestamp > $libobj" $run eval "echo timestamp > $libobj" || exit $? exit 0 fi if test -n "$pic_flag"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs" output="$libobj" eval cmds=\"$reload_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" else # Just create a symlink. $show "$LN_S $obj $libobj" $run $LN_S $obj $libobj || exit 1 fi exit 0 ;; *) if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored while linking programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored while creating objects" 1>&2 fi if test -n "$rpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then # Put the magic libdir with the hardcode flag. hardcode_libdirs="$libdir" libdir="@HARDCODE_LIBDIRS@" else # Just accumulate the unique libdirs. case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac libdir= fi fi if test -n "$libdir"; then eval flag=\"$hardcode_libdir_flag_spec\" compile_command="$compile_command $flag" finalize_command="$finalize_command $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done fi # Substitute the hardcoded libdirs into the compile commands. if test -n "$hardcode_libdir_separator"; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` fi if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` finalize_command=`$echo "X$finalize_command " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` fi if test "$export_dynamic" = yes && test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${output}S.c" else dlsyms= fi if test -n "$dlsyms"; then # Add our own program objects to the preloaded list. dlprefiles=`$echo "X$objs$dlprefiles " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` # Discover the nlist of each of the dlfiles. nlist="$objdir/${output}.nm" if test -d $objdir; then $show "$rm $nlist ${nlist}T" $run $rm "$nlist" "${nlist}T" else $show "$mkdir $objdir" $run $mkdir $objdir status=$? if test $status -eq 0 || test -d $objdir; then : else exit $status fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done # Parse the name list into a source file. $show "creating $objdir/$dlsyms" if test -z "$run"; then # Make sure we at least have an empty file. test -f "$nlist" || : > "$nlist" # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" wcout=`wc "$nlist" 2>/dev/null` count=`echo "X$wcout" | $Xsed -e 's/^[ ]*\([0-9][0-9]*\).*$/\1/'` (test "$count" -ge 0) 2>/dev/null || count=-1 else $rm "$nlist"T count=-1 fi case "$dlsyms" in "") ;; *.c) $echo > "$objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$output' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define dld_preloaded_symbol_count some_other_symbol #define dld_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test -f "$nlist"; then sed -e 's/^.* \(.*\)$/extern char \1;/' < "$nlist" >> "$objdir/$dlsyms" else echo '/* NONE */' >> "$objdir/$dlsyms" fi $echo >> "$objdir/$dlsyms" "\ #undef dld_preloaded_symbol_count #undef dld_preloaded_symbols #if defined (__STDC__) && __STDC__ # define __ptr_t void * #else # define __ptr_t char * #endif /* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */ int dld_preloaded_symbol_count = $count; /* The mapping between symbol names and symbols. */ struct { char *name; __ptr_t address; } dld_preloaded_symbols[] = {\ " if test -f "$nlist"; then sed 's/^\(.*\) \(.*\)$/ {"\1", (__ptr_t) \&\2},/' < "$nlist" >> "$objdir/$dlsyms" fi $echo >> "$objdir/$dlsyms" "\ {0, (__ptr_t) 0} }; #ifdef __cplusplus } #endif\ " ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit 1 ;; esac fi # Now compile the dynamic symbol file. $show "(cd $objdir && $CC -c$no_builtin_flag \"$dlsyms\")" $run eval '(cd $objdir && $CC -c$no_builtin_flag "$dlsyms")' || exit $? # Transform the symbol file into the correct name. compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$objdir/${output}S.o%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$objdir/${output}S.o%"` elif test "$export_dynamic" != yes; then test -n "$dlfiles$dlprefiles" && $echo "$modename: warning: \`-dlopen' and \`-dlpreopen' are ignored without \`-export-dynamic'" 1>&2 else # We keep going just in case the user didn't refer to # dld_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` finalize_command=`$echo "X$finalize_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # We have no uninstalled library dependencies, so finalize right now. $show "$compile_command" $run eval "$compile_command" exit $? fi # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$output"'%g'` finalize_command=`$echo "X$finalize_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$output"'T%g'` # Create the binary in the object directory, then wrap it. if test -d $objdir; then : else $show "$mkdir $objdir" $run $mkdir $objdir status=$? if test $status -eq 0 || test -d $objdir; then : else exit $status fi fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case "$dir" in /* | [A-Za-z]:\\*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi # Delete the old output file. $run $rm $output if test -n "$compile_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_command="$runpath_var=\"$rpath\$$runpath_var\" $compile_command" finalize_command="$runpath_var=\"$rpath\$$runpath_var\" $finalize_command" fi case "$hardcode_action" in relink) # AGH! Flame the AIX and HP-UX people for me, will ya? $echo "$modename: warning: using a buggy system linker" 1>&2 $echo "$modename: relinking will be required before \`$output' can be installed" 1>&2 ;; esac $show "$compile_command" $run eval "$compile_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the finalize command for shipping. finalize_command=`$echo "X$finalize_command" | $Xsed -e "$sed_quote_subst"` # Quote $echo for shipping. qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` # Only actually do things if our run command is non-null. if test -z "$run"; then $rm $output trap "$rm $output; exit 1" 1 2 15 $echo > $output "\ #! /bin/sh # $output - temporary wrapper script for $objdir/$output # Generated by ltmain.sh - GNU $PACKAGE $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of \``pwd`'. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test \"\${CDPATH+set}\" = set; then CDPATH=; export CDPATH; fi # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: link_against_libtool_libs='$link_against_libtool_libs' finalize_command=\"$finalize_command\" else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" = \"$magic\"; then : else echo=\"$qecho\" file=\"\$0\" fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in /* | [A-Za-z]:\\*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" progdir=\"\$thisdir/$objdir\" program='$output' if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/:*\$//'\` export $shlibpath_var " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. # Export the path to the program. PATH=\"\$progdir:\$PATH\" export PATH exec \$program \${1+\"\$@\"} \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit 1 fi else # The program doesn't exist. \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " chmod +x $output fi exit 0 ;; esac # See if we need to build an old-fashioned archive. if test "$build_old_libs" = "yes"; then # Transform .lo files to .o files. oldobjs="$objs"`$echo "X$libobjs " | $Xsed -e 's/[^ ]*\.a //g' -e 's/\.lo /.o /g' -e 's/ $//g'` # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then eval cmds=\"$old_archive_from_new_cmds\" else eval cmds=\"$old_archive_cmds\" fi IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Now create the libtool archive. case "$output" in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.a" $show "creating $output" # Only create the output if not a dry run. if test -z "$run"; then $echo > $output "\ # $output - a libtool library file # Generated by ltmain.sh - GNU $PACKAGE $VERSION # The name that we can dlopen(3). dlname='$dlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Directory that this library needs to be installed in: libdir='$install_libdir'\ " fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $objdir && $LN_S ../$output $output)" $run eval "(cd $objdir && $LN_S ../$output $output)" || exit 1 ;; esac exit 0 ;; # libtool install mode install) modename="$modename: install" # There may be an optional /bin/sh argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL"; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg="$nonopt" fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir= stripme= for arg do if test -n "$dest"; then files="$files $dest" dest="$arg" continue fi case "$arg" in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; -m) prev="-m" ;; -o) prev="-o" ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest="$arg" continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case "$arg" in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit 1 fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test -n "$isdir"; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test $# -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit 1 fi fi case "$destdir" in /* | [A-Za-z]:\\*) ;; *) for file in $files; do case "$file" in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case "$file" in *.a) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi library_names= old_library= # If there is no directory component, then add one. case "$file" in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/" test "X$dir" = "X$file/" && dir= dir="$dir$objdir" # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift # Install the shared library and build the symlinks. $show "$install_prog $dir/$realname $destdir/$realname" $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? test "X$dlname" = "X$realname" && dlname= if test $# -gt 0; then # Delete the old symlinks. rmcmd="$rm" for linkname do rmcmd="$rmcmd $destdir/$linkname" done $show "$rmcmd" $run $rmcmd # ... and create new ones. for linkname do test "X$dlname" = "X$linkname" && dlname= $show "(cd $destdir && $LN_S $realname $linkname)" $run eval "(cd $destdir && $LN_S $realname $linkname)" done fi if test -n "$dlname"; then # Install the dynamically-loadable library. $show "$install_prog $dir/$dlname $destdir/$dlname" $run eval "$install_prog $dir/$dlname $destdir/$dlname" || exit $? fi # Do each command in the postinstall commands. lib="$destdir/$realname" eval cmds=\"$postinstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` $show "$install_prog $file $destdir/$name" $run eval "$install_prog $file $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case "$destfile" in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e 's/\.lo$/\.o/'` ;; *.o) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e 's/\.lo$/\.o/'` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit 0 ;; *) # Do a test to see if this is really a libtool program. if (sed -e '4q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then link_against_libtool_libs= finalize_command= # If there is no directory component, then add one. case "$file" in */* | *\\*) . $file ;; *) . ./$file ;; esac # Check the variables that should have been set. if test -z "$link_against_libtool_libs" || test -z "$finalize_command"; then $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 exit 1 fi finalize=yes for lib in $link_against_libtool_libs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case "$lib" in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`" if test -z "$libdir"; then $echo "$modename: warning: \`$lib' contains no -rpath information" 1>&2 elif test -f "$libfile"; then : else $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done if test "$hardcode_action" = relink; then if test "$finalize" = yes; then $echo "$modename: warning: relinking \`$file' on behalf of your buggy system linker" 1>&2 $show "$finalize_command" if $run eval "$finalize_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 continue fi file="$objdir/$file"T else $echo "$modename: warning: cannot relink \`$file' on behalf of your buggy system linker" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi $show "$install_prog$stripme $file $dest" $run eval "$install_prog\$stripme \$file \$dest" || exit $? ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? # Do each command in the postinstall commands. eval cmds=\"$old_postinstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec $SHELL $0 --finish$current_libdirs exit 1 fi exit 0 ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. eval cmds=\"$finish_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" fi done fi echo "------------------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do echo " $libdir" done echo echo "To link against installed libraries in a given directory, LIBDIR," echo "you must use the \`-LLIBDIR' flag during linking." echo echo " You will also need to do one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" echo " - use the \`$flag' linker flag" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" echo "more information, such as the ld(1) and ld.so(8) manual pages." echo "------------------------------------------------------------------------------" exit 0 ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit 1 fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test -f "$file"; then : else $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit 1 fi dir= case "$file" in *.la) # Check to see that this really is a libtool archive. if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case "$file" in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit 1 fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case "$file" in -*) ;; *) # Do a test to see if this is really a libtool program. if (sed -e '4q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then # If there is no directory component, then add one. case "$file" in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then # Export the shlibpath_var. eval "export $shlibpath_var" # Now actually exec the command. eval "exec \$cmd$args" $echo "$modename: cannot exec \$cmd$args" exit 1 else # Display what would be done. eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" $echo "$cmd$args" exit 0 fi ;; # libtool uninstall mode uninstall) modename="$modename: uninstall" rm="$nonopt" files= for arg do case "$arg" in -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit 1 fi for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` rmfiles="$file" case "$name" in *.la) # Possibly a libtool archive, so verify it. if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $dir/$n" test "X$n" = "X$dlname" && dlname= done test -n "$dlname" && rmfiles="$rmfiles $dir/$dlname" test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" $show "$rm $rmfiles" $run $rm $rmfiles if test -n "$library_names"; then # Do each command in the postuninstall commands. eval cmds=\"$postuninstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. eval cmds=\"$old_postuninstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. fi ;; *.lo) if test "$build_old_libs" = yes; then oldobj=`$echo "X$name" | $Xsed -e 's/\.lo$/\.o/'` rmfiles="$rmfiles $dir/$oldobj" fi $show "$rm $rmfiles" $run $rm $rmfiles ;; *) $show "$rm $rmfiles" $run $rm $rmfiles ;; esac done exit 0 ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit 1 ;; esac $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit 1 fi # test -z "$show_help" # We need to display help for each of the modes. case "$mode" in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. -n, --dry-run display commands without modifying any files --features display configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --version print version information MODE must be one of the following: compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE." exit 0 ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to dld_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required. If OUTPUT-FILE ends in \`.a', then a standard library is created using \`ar' and \`ranlib'. If OUTPUT-FILE ends in \`.lo' or \`.o', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac echo $echo "Try \`$modename --help' for more information about other modes." exit 0 # Local Variables: # mode:shell-script # sh-indentation:2 # End: jade-1.2.1/config/aclocal.m4100444 764 764 20157 6606574460 13352 0ustar jjcjjc## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*- ## Copyright (C) 1996-1998 Free Software Foundation, Inc. ## Gordon Matzigkeit , 1996 ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ## ## As a special exception to the GNU General Public License, if you ## distribute this file as part of a program that contains a ## configuration script generated by Autoconf, you may include it under ## the same distribution terms that you use for the rest of that program. # serial 24 AM_PROG_LIBTOOL AC_DEFUN(AM_PROG_LIBTOOL, [AC_REQUIRE([AM_ENABLE_SHARED])dnl AC_REQUIRE([AM_DISABLE_STATIC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AM_PROG_LD])dnl AC_REQUIRE([AM_PROG_NM])dnl AC_REQUIRE([AC_PROG_LN_S])dnl dnl # Always use our own libtool. LIBTOOL='$(TOP)/libtool' AC_SUBST(LIBTOOL)dnl # Check for any special flags to pass to ltconfig. libtool_flags= test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" test "$silent" = yes && libtool_flags="$libtool_flags --silent" test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" # Some flags need to be propagated to the compiler or linker for good # libtool support. case "$host" in *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case "`/usr/bin/file conftest.o`" in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. CFLAGS="$CFLAGS -belf" ;; esac # Actually configure libtool. ac_aux_dir is where install-sh is found. CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \ ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \ $libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ || AC_MSG_ERROR([libtool configure failed]) ]) # AM_ENABLE_SHARED - implement the --enable-shared flag # Usage: AM_ENABLE_SHARED[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. AC_DEFUN(AM_ENABLE_SHARED, [define([AM_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(shared, changequote(<<, >>)dnl << --enable-shared build shared libraries [default=>>AM_ENABLE_SHARED_DEFAULT] changequote([, ])dnl [ --enable-shared=PKGS only build shared libraries if the current package appears as an element in the PKGS list], [p=${PACKAGE-default} case "$enableval" in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$ac_save_ifs" ;; esac], enable_shared=AM_ENABLE_SHARED_DEFAULT)dnl ]) # AM_DISABLE_SHARED - set the default shared flag to --disable-shared AC_DEFUN(AM_DISABLE_SHARED, [AM_ENABLE_SHARED(no)]) # AM_DISABLE_STATIC - set the default static flag to --disable-static AC_DEFUN(AM_DISABLE_STATIC, [AM_ENABLE_STATIC(no)]) # AM_ENABLE_STATIC - implement the --enable-static flag # Usage: AM_ENABLE_STATIC[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. AC_DEFUN(AM_ENABLE_STATIC, [define([AM_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(static, changequote(<<, >>)dnl << --enable-static build static libraries [default=>>AM_ENABLE_STATIC_DEFAULT] changequote([, ])dnl [ --enable-static=PKGS only build shared libraries if the current package appears as an element in the PKGS list], [p=${PACKAGE-default} case "$enableval" in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$ac_save_ifs" ;; esac], enable_static=AM_ENABLE_STATIC_DEFAULT)dnl ]) # AM_PROG_LD - find the path to the GNU or non-GNU linker AC_DEFUN(AM_PROG_LD, [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC]) ac_prog=ld if test "$ac_cv_prog_gcc" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. /* | [A-Za-z]:\\*) test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(ac_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog"; then ac_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else ac_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$ac_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_SUBST(LD) AM_PROG_LD_GNU ]) AC_DEFUN(AM_PROG_LD_GNU, [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then ac_cv_prog_gnu_ld=yes else ac_cv_prog_gnu_ld=no fi]) ]) # AM_PROG_NM - find the path to a BSD-compatible name lister AC_DEFUN(AM_PROG_NM, [AC_MSG_CHECKING([for BSD-compatible nm]) AC_CACHE_VAL(ac_cv_path_NM, [case "$NM" in /* | [A-Za-z]:\\*) ac_cv_path_NM="$NM" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/nm; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then ac_cv_path_NM="$ac_dir/nm -B" elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then ac_cv_path_NM="$ac_dir/nm -p" else ac_cv_path_NM="$ac_dir/nm" fi break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm ;; esac]) NM="$ac_cv_path_NM" AC_MSG_RESULT([$NM]) AC_SUBST(NM) ]) jade-1.2.1/config/install.sh100555 764 764 11065 6606574460 13515 0ustar jjcjjc#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5. # # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" tranformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 jade-1.2.1/configure100555 764 764 225502 6610550554 12166 0ustar jjcjjc#! /bin/sh # From configure.in Id: configure.in 1.2 1998/10/11 11:07:16 jjc Exp ## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*- ## Copyright (C) 1996-1998 Free Software Foundation, Inc. ## Gordon Matzigkeit , 1996 ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ## ## As a special exception to the GNU General Public License, if you ## distribute this file as part of a program that contains a ## configuration script generated by Autoconf, you may include it under ## the same distribution terms that you use for the rest of that program. # serial 24 AM_PROG_LIBTOOL # AM_ENABLE_SHARED - implement the --enable-shared flag # Usage: AM_ENABLE_SHARED[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. # AM_DISABLE_SHARED - set the default shared flag to --disable-shared # AM_DISABLE_STATIC - set the default static flag to --disable-static # AM_ENABLE_STATIC - implement the --enable-static flag # Usage: AM_ENABLE_STATIC[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. # AM_PROG_LD - find the path to the GNU or non-GNU linker # AM_PROG_NM - find the path to a BSD-compatible name lister # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.12 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Defaults: ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: ac_help="$ac_help --enable-http bind in support for http" ac_help="$ac_help --enable-mif bind in support for FrameMaker MIF output" ac_help="$ac_help --enable-default-catalog=pathlist provide one or more default catalog files or sysids, e.g. /usr/local/lib/sgml/catalog" ac_help="$ac_help --enable-default-search-path=pathlist provide a default value for SGML_SEARCH_PATH" ac_help="$ac_help --enable-shared build shared libraries [default=yes] --enable-shared=PKGS only build shared libraries if the current package appears as an element in the PKGS list" ac_help="$ac_help --enable-static build static libraries [default=no] --enable-static=PKGS only build shared libraries if the current package appears as an element in the PKGS list" ac_help="$ac_help --with-gnu-ld assume the C compiler uses GNU ld [default=no]" # Initialize some variables set by options. # The variables have the same names as the options, with # dashes changed to underlines. build=NONE cache_file=./config.cache exec_prefix=NONE host=NONE no_create= nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= target=NONE verbose= x_includes=NONE x_libraries=NONE bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' # Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= # Maximum number of lines to put in a shell here document. ac_max_here_lines=12 ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi case "$ac_option" in -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) ac_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case "$ac_option" in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir="$ac_optarg" ;; -build | --build | --buil | --bui | --bu) ac_prev=build ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build="$ac_optarg" ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file="$ac_optarg" ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir="$ac_optarg" ;; -disable-* | --disable-*) ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` eval "enable_${ac_feature}=no" ;; -enable-* | --enable-*) ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "enable_${ac_feature}='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix="$ac_optarg" ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he) # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat << EOF Usage: configure [options] [host] Options: [defaults in brackets after descriptions] Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] --bindir=DIR user executables in DIR [EPREFIX/bin] --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] --libexecdir=DIR program executables in DIR [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data in DIR [PREFIX/share] --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com] --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] --libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include] --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] --infodir=DIR info documentation in DIR [PREFIX/info] --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names EOF cat << EOF Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] --target=TARGET configure for TARGET [TARGET=HOST] Features and packages: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR EOF if test -n "$ac_help"; then echo "--enable and --with options recognized:$ac_help" fi exit 0 ;; -host | --host | --hos | --ho) ac_prev=host ;; -host=* | --host=* | --hos=* | --ho=*) host="$ac_optarg" ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir="$ac_optarg" ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir="$ac_optarg" ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir="$ac_optarg" ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir="$ac_optarg" ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir="$ac_optarg" ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir="$ac_optarg" ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir="$ac_optarg" ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix="$ac_optarg" ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix="$ac_optarg" ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix="$ac_optarg" ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name="$ac_optarg" ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir="$ac_optarg" ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir="$ac_optarg" ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site="$ac_optarg" ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir="$ac_optarg" ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir="$ac_optarg" ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target="$ac_optarg" ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers) echo "configure generated by autoconf version 2.12" exit 0 ;; -with-* | --with-*) ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "with_${ac_package}='$ac_optarg'" ;; -without-* | --without-*) ac_package=`echo $ac_option|sed -e 's/-*without-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` eval "with_${ac_package}=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes="$ac_optarg" ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries="$ac_optarg" ;; -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ;; *) if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then echo "configure: warning: $ac_option: invalid host type" 1>&2 fi if test "x$nonopt" != xNONE; then { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } fi nonopt="$ac_option" ;; esac done if test -n "$ac_prev"; then { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } fi trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 6 checking for... messages and results # 5 compiler messages saved in config.log if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>./config.log echo "\ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. " 1>&5 # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell metacharacters. ac_configure_args= for ac_arg do case "$ac_arg" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_arg" ;; esac done # NLS nuisances. # Only set these to C if already set. These must not be set unconditionally # because not all systems understand e.g. LANG=C (notably SCO). # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! # Non-C LC_CTYPE values break the ctype check. if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo > confdefs.h # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. ac_unique_file=dsssl # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi fi srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then echo "loading site script $ac_site_file" . "$ac_site_file" fi done if test -r "$cache_file"; then echo "loading cache $cache_file" . $cache_file else echo "creating cache $cache_file" > $cache_file fi ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi ac_aux_dir= for ac_dir in config $srcdir/config; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break fi done if test -z "$ac_aux_dir"; then { echo "configure: error: can not find install-sh or install.sh in config $srcdir/config" 1>&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. TOP=`pwd` if test "$CXXFLAGS" = ""; then CXXFLAGS="-O2" fi LTVERSION=`cat VERSION | cut -d'.' -f1,2 | sed 's/\./:/g'` echo 'saving distribution makefiles...' test ! -f Makefile.dist && cp Makefile Makefile.dist test ! -f Makefile.lib.dist && cp Makefile.lib Makefile.lib.dist test ! -f Makefile.prog.dist && cp Makefile.prog Makefile.prog.dist test ! -f Makefile.comm.dist && cp Makefile.comm Makefile.comm.dist # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:635: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="gcc" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:664: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" ac_prog_rejected=no for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" break fi done IFS="$ac_save_ifs" if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" "$@" shift ac_cv_prog_CC="$@" fi fi fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:712: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cc_cross=no else ac_cv_prog_cc_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_works=no fi rm -fr conftest* echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:746: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo "configure:751: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no fi fi echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo "configure:775: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ac_cv_prog_cc_g=yes else ac_cv_prog_cc_g=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 if test "$ac_test_CFLAGS" = set; then CFLAGS="$ac_save_CFLAGS" elif test $ac_cv_prog_cc_g = yes; then CFLAGS="-g -O2" else CFLAGS="-O2" fi else GCC= test "${CFLAGS+set}" = set || CFLAGS="-g" fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:813: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. for ac_prog in ginstall installbsd scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. # OSF/1 installbsd also uses dspmsg, but is usable. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 echo "configure:863: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftestdata if ln -s X conftestdata 2>/dev/null then rm -f conftestdata ac_cv_prog_LN_S="ln -s" else ac_cv_prog_LN_S=ln fi fi LN_S="$ac_cv_prog_LN_S" if test "$ac_cv_prog_LN_S" = "ln -s"; then echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi for ac_prog in $CCC c++ g++ gcc CC cxx cc++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:888: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CXX="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi CXX="$ac_cv_prog_CXX" if test -n "$CXX"; then echo "$ac_t""$CXX" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$CXX" && break done test -n "$CXX" || CXX="gcc" echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:919: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 ac_ext=C # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cxx_cross cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then ac_cv_prog_cxx_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cxx_cross=no else ac_cv_prog_cxx_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cxx_works=no fi rm -fr conftest* ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6 if test $ac_cv_prog_cxx_works = no; then { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:959: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 cross_compiling=$ac_cv_prog_cxx_cross echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 echo "configure:964: checking whether we are using GNU C++" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.C <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gxx=yes else ac_cv_prog_gxx=no fi fi echo "$ac_t""$ac_cv_prog_gxx" 1>&6 if test $ac_cv_prog_gxx = yes; then GXX=yes ac_test_CXXFLAGS="${CXXFLAGS+set}" ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS= echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 echo "configure:988: checking whether ${CXX-g++} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void f(){}' > conftest.cc if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then ac_cv_prog_cxx_g=yes else ac_cv_prog_cxx_g=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS="$ac_save_CXXFLAGS" elif test $ac_cv_prog_cxx_g = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-O2" fi else GXX= test "${CXXFLAGS+set}" = set || CXXFLAGS="-g" fi for ac_prog in gm4 gnum4 m4 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1020: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_M4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$M4" in /*) ac_cv_path_M4="$M4" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_M4="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi M4="$ac_cv_path_M4" if test -n "$M4"; then echo "$ac_t""$M4" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$M4" && break done test -n "$M4" || M4="m4" for ac_prog in perl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1057: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$PERL" in /*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_PERL="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi PERL="$ac_cv_path_PERL" if test -n "$PERL"; then echo "$ac_t""$PERL" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$PERL" && break done test -n "$PERL" || PERL="perl" test "$INSTALL" = "./config/install.sh -c" && INSTALL=`pwd`"/config/install.sh -c" if test "$GXX" then CXXFLAGS="$CXXFLAGS -fno-implicit-templates" fi ac_ext=C # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cxx_cross CXsave="$CXXFLAGS" CXXFLAGS=-ansi echo $ac_n "checking for -ansi support""... $ac_c" 1>&6 echo "configure:1106: checking for -ansi support" >&5 if eval "test \"`echo '$''{'ac_cv_c_cmdline_ansi'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_cv_c_cmdline_ansi=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_cmdline_ansi=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_c_cmdline_ansi" 1>&6 if test "$ac_cv_c_cmdline_ansi" = "yes" then CXXFLAGS="$CXXFLAGS $CXsave" else CXXFLAGS="$CXsave" fi echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6 echo "configure:1139: checking how to run the C++ preprocessor" >&5 if test -z "$CXXCPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_ext=C # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cxx_cross CXXCPP="${CXX-g++} -E" cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1157: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CXXCPP=/lib/cpp fi rm -f conftest* ac_cv_prog_CXXCPP="$CXXCPP" fi fi CXXCPP="$ac_cv_prog_CXXCPP" echo "$ac_t""$CXXCPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:1176: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF if { (eval echo configure:1259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_header_stdc=no fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_header_stdc" 1>&6 if test $ac_cv_header_stdc = yes; then cat >> confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi for ac_hdr in limits.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:1286: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1296: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done echo $ac_n "checking for working const""... $ac_c" 1>&6 echo "configure:1324: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } ; return 0; } EOF if { (eval echo configure:1378: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_const=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_c_const" 1>&6 if test $ac_cv_c_const = no; then cat >> confdefs.h <<\EOF #define const EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 echo "configure:1399: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* done fi echo "$ac_t""$ac_cv_c_inline" 1>&6 case "$ac_cv_c_inline" in inline | yes) ;; no) cat >> confdefs.h <<\EOF #define inline EOF ;; *) cat >> confdefs.h <&6 echo "configure:1439: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_size_t=yes else rm -rf conftest* ac_cv_type_size_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_size_t" 1>&6 if test $ac_cv_type_size_t = no; then cat >> confdefs.h <<\EOF #define size_t unsigned EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 echo "configure:1472: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { struct stat s; s.st_blksize; ; return 0; } EOF if { (eval echo configure:1485: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blksize=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_st_blksize=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_st_blksize" 1>&6 if test $ac_cv_struct_st_blksize = yes; then cat >> confdefs.h <<\EOF #define HAVE_ST_BLKSIZE 1 EOF fi echo $ac_n "checking for sig_atomic_t in signal.h""... $ac_c" 1>&6 echo "configure:1506: checking for sig_atomic_t in signal.h" >&5 if eval "test \"`echo '$''{'ac_cv_have_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { sig_atomic_t x; ; return 0; } EOF if { (eval echo configure:1518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_cv_have_sig_atomic_t=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_have_sig_atomic_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_have_sig_atomic_t" 1>&6 if test "$ac_cv_have_sig_atomic_t" = "no" then echo $ac_n "checking for sig_atomic_t""... $ac_c" 1>&6 echo "configure:1534: checking for sig_atomic_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "sig_atomic_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_sig_atomic_t=yes else rm -rf conftest* ac_cv_type_sig_atomic_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_sig_atomic_t" 1>&6 if test $ac_cv_type_sig_atomic_t = no; then cat >> confdefs.h <<\EOF #define sig_atomic_t int EOF fi fi echo $ac_n "checking support for bool""... $ac_c" 1>&6 echo "configure:1569: checking support for bool" >&5 if eval "test \"`echo '$''{'ac_cv_typedef_bool'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_cv_typedef_bool=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_typedef_bool=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_typedef_bool" 1>&6 if test "$ac_cv_typedef_bool" = "yes" then cat >> confdefs.h <<\EOF #define SP_HAVE_BOOL 1 EOF fi echo $ac_n "checking for memmove""... $ac_c" 1>&6 echo "configure:1603: checking for memmove" >&5 if eval "test \"`echo '$''{'ac_cv_func_memmove'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char memmove(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_memmove) || defined (__stub___memmove) choke me #else memmove(); #endif ; return 0; } EOF if { (eval echo configure:1634: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_memmove=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_memmove=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'memmove`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 LIBOBJS="$LIBOBJS memmove.o" fi echo $ac_n "checking for strerror""... $ac_c" 1>&6 echo "configure:1655: checking for strerror" >&5 if eval "test \"`echo '$''{'ac_cv_func_strerror'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char strerror(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_strerror) || defined (__stub___strerror) choke me #else strerror(); #endif ; return 0; } EOF if { (eval echo configure:1686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_strerror=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_strerror=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'strerror`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 LIBOBJS="$LIBOBJS strerror.o" fi echo $ac_n "checking for strtoul""... $ac_c" 1>&6 echo "configure:1707: checking for strtoul" >&5 if eval "test \"`echo '$''{'ac_cv_func_strtoul'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char strtoul(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_strtoul) || defined (__stub___strtoul) choke me #else strtoul(); #endif ; return 0; } EOF if { (eval echo configure:1738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_strtoul=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_strtoul=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'strtoul`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 LIBOBJS="$LIBOBJS strtoul.o" fi echo $ac_n "checking for setlocale""... $ac_c" 1>&6 echo "configure:1760: checking for setlocale" >&5 if eval "test \"`echo '$''{'ac_cv_func_setlocale'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char setlocale(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_setlocale) || defined (__stub___setlocale) choke me #else setlocale(); #endif ; return 0; } EOF if { (eval echo configure:1791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_setlocale=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_setlocale=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'setlocale`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define SP_HAVE_LOCALE 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6 echo "configure:1814: checking for gettext in -lintl" >&5 ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lintl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define SP_HAVE_GETTEXT 1 EOF LIBS="$LIBS -lintl" else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for ANSI template instantiation""... $ac_c" 1>&6 echo "configure:1861: checking for ANSI template instantiation" >&5 if eval "test \"`echo '$''{'ac_cv_c_template_ansi'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < class test { public: T *data();}; template class test; int main() { ; return 0; } EOF if { (eval echo configure:1881: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_cv_c_template_ansi=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_template_ansi=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_c_template_ansi" 1>&6 if test "$ac_cv_c_template_ansi" = "yes" then cat >> confdefs.h <<\EOF #define SP_ANSI_CLASS_INST 1 EOF fi # Check whether --enable-http or --disable-http was given. if test "${enable_http+set}" = set; then enableval="$enable_http" if test $enableval then cat >> confdefs.h <<\EOF #define SP_HAVE_SOCKET 1 EOF echo $ac_n "checking for main in -lnsl""... $ac_c" 1>&6 echo "configure:1912: checking for main in -lnsl" >&5 ac_lib_var=`echo nsl'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -lnsl" else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for main in -lsocket""... $ac_c" 1>&6 echo "configure:1948: checking for main in -lsocket" >&5 ac_lib_var=`echo socket'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -lsocket" else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking h_errno in netdb.h""... $ac_c" 1>&6 echo "configure:1984: checking h_errno in netdb.h" >&5 cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "h_errno" >/dev/null 2>&1; then rm -rf conftest* echo "$ac_t""yes" 1>&6 else rm -rf conftest* cat >> confdefs.h <<\EOF #define SP_DECLARE_H_ERRNO 1 EOF echo "$ac_t""no" 1>&6 fi rm -f conftest* fi fi # Check whether --enable-mif or --disable-mif was given. if test "${enable_mif+set}" = set; then enableval="$enable_mif" if test $enableval then cat >> confdefs.h <<\EOF #define JADE_MIF 1 EOF fi fi cat >> confdefs.h <<\EOF #define SP_MULTI_BYTE 1 EOF # Check whether --enable-default-catalog or --disable-default-catalog was given. if test "${enable_default_catalog+set}" = set; then enableval="$enable_default_catalog" if test $enableval then cat >> confdefs.h <> confdefs.h </dev/null 2>&1; then : else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 echo "configure:2106: checking host system type" >&5 host_alias=$host case "$host_alias" in NONE) case $nonopt in NONE) if host_alias=`$ac_config_guess`; then : else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } fi ;; *) host_alias=$nonopt ;; esac ;; esac host=`$ac_config_sub $host_alias` host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2129: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_RANLIB="ranlib" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" fi fi RANLIB="$ac_cv_prog_RANLIB" if test -n "$RANLIB"; then echo "$ac_t""$RANLIB" 1>&6 else echo "$ac_t""no" 1>&6 fi # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$ac_cv_prog_gcc" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 echo "configure:2168: checking for ld used by GCC" >&5 ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. /* | A-Za-z:\\*) test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 echo "configure:2186: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 echo "configure:2189: checking for non-GNU ld" >&5 fi if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog"; then ac_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else ac_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$ac_cv_path_LD" if test -n "$LD"; then echo "$ac_t""$LD" 1>&6 else echo "$ac_t""no" 1>&6 fi test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 echo "configure:2225: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then ac_cv_prog_gnu_ld=yes else ac_cv_prog_gnu_ld=no fi fi echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 echo "configure:2241: checking for BSD-compatible nm" >&5 if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$NM" in /* | A-Za-z:\\*) ac_cv_path_NM="$NM" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/nm; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then ac_cv_path_NM="$ac_dir/nm -B" elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then ac_cv_path_NM="$ac_dir/nm -p" else ac_cv_path_NM="$ac_dir/nm" fi break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm ;; esac fi NM="$ac_cv_path_NM" echo "$ac_t""$NM" 1>&6 # Always use our own libtool. LIBTOOL='$(TOP)/libtool' # Check for any special flags to pass to ltconfig. libtool_flags= test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" test "$silent" = yes && libtool_flags="$libtool_flags --silent" test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" # Some flags need to be propagated to the compiler or linker for good # libtool support. case "$host" in *-*-irix6*) # Find out which ABI we are using. echo '#line 2293 "configure"' > conftest.$ac_ext if { (eval echo configure:2294: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then case "`/usr/bin/file conftest.o`" in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. CFLAGS="$CFLAGS -belf" ;; esac # Actually configure libtool. ac_aux_dir is where install-sh is found. CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \ ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \ $libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ || { echo "configure: error: libtool configure failed" 1>&2; exit 1; } trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Any assignment to VPATH causes Sun make to only execute # the first set of double-colon rules, so remove it if not needed. # If there is a colon in the path, we need to keep it. if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' fi trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. cat > conftest.defs <<\EOF s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g s%\[%\\&%g s%\]%\\&%g s%\$%$$%g EOF DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` rm -f conftest.defs # Without the "./", some shells look in PATH for config.status. : ${CONFIG_STATUS=./config.status} echo creating $CONFIG_STATUS rm -f $CONFIG_STATUS cat > $CONFIG_STATUS </dev/null | sed 1q`: # # $0 $ac_configure_args # # Compiler output produced by configure, useful for debugging # configure, is in ./config.log if it exists. ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" for ac_option do case "\$ac_option" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) echo "$CONFIG_STATUS generated by autoconf version 2.12" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; *) echo "\$ac_cs_usage"; exit 1 ;; esac done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" trap 'rm -fr `echo "Makefile Makefile.lib Makefile.prog Makefile.comm" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF $ac_vpsub $extrasub s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g s%@DEFS@%$DEFS%g s%@LDFLAGS@%$LDFLAGS%g s%@LIBS@%$LIBS%g s%@exec_prefix@%$exec_prefix%g s%@prefix@%$prefix%g s%@program_transform_name@%$program_transform_name%g s%@bindir@%$bindir%g s%@sbindir@%$sbindir%g s%@libexecdir@%$libexecdir%g s%@datadir@%$datadir%g s%@sysconfdir@%$sysconfdir%g s%@sharedstatedir@%$sharedstatedir%g s%@localstatedir@%$localstatedir%g s%@libdir@%$libdir%g s%@includedir@%$includedir%g s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@TOP@%$TOP%g s%@LTVERSION@%$LTVERSION%g s%@CC@%$CC%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@LN_S@%$LN_S%g s%@CXX@%$CXX%g s%@M4@%$M4%g s%@PERL@%$PERL%g s%@CXXCPP@%$CXXCPP%g s%@LIBOBJS@%$LIBOBJS%g s%@host@%$host%g s%@host_alias@%$host_alias%g s%@host_cpu@%$host_cpu%g s%@host_vendor@%$host_vendor%g s%@host_os@%$host_os%g s%@RANLIB@%$RANLIB%g s%@LD@%$LD%g s%@NM@%$NM%g s%@LIBTOOL@%$LIBTOOL%g CEOF EOF cat >> $CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. ac_more_lines=: ac_sed_cmds="" while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file else sed "${ac_end}q" conftest.subs > conftest.s$ac_file fi if test ! -s conftest.s$ac_file; then ac_more_lines=false rm -f conftest.s$ac_file else if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f conftest.s$ac_file" else ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" fi ac_file=`expr $ac_file + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_cmds` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` else ac_dir_suffix= ac_dots= fi case "$ac_given_srcdir" in .) srcdir=. if test -z "$ac_dots"; then top_srcdir=. else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; *) # Relative path. srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" top_srcdir="$ac_dots$ac_given_srcdir" ;; esac case "$ac_given_INSTALL" in [/$]*) INSTALL="$ac_given_INSTALL" ;; *) INSTALL="$ac_dots$ac_given_INSTALL" ;; esac echo creating "$ac_file" rm -f "$ac_file" configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." case "$ac_file" in *Makefile*) ac_comsub="1i\\ # $configure_input" ;; *) ac_comsub= ;; esac ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` sed -e "$ac_comsub s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g s%@top_srcdir@%$top_srcdir%g s%@INSTALL@%$INSTALL%g " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file fi; done rm -f conftest.s* EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF exit 0 EOF chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 jade-1.2.1/COPYING100444 764 764 2403 6604607546 11252 0ustar jjcjjcCopyright (c) 1994, 1995, 1996, 1997, 1998 James Clark Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ``Software''), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL JAMES CLARK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of James Clark shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from James Clark. jade-1.2.1/FILES100444 764 764 22234 6604674162 11026 0ustar jjcjjcCOPYING FILES Makefile Makefile.comm Makefile.lib Makefile.lib.CC Makefile.lib.sun Makefile.prog Makefile.wat README SP.dsw SP.mak VERSION all/README doc/Makefile doc/archform.htm doc/build.htm doc/catalog doc/catalog.htm doc/charset.htm doc/features.htm doc/generic.htm doc/ideas.htm doc/index.htm doc/new.htm doc/nsgmls.htm doc/sgmldecl.htm doc/sgmlnorm.htm doc/sgmlsout.htm doc/spam.htm doc/spent.htm doc/sx.htm doc/sysdecl.htm doc/sysid.htm doc/xml.htm generic/EventGenerator.h generic/ParserEventGeneratorKit.h generic/SGMLApplication.h pubtext/ISOlat1.ent pubtext/ISOlat1.sgm pubtext/html.soc pubtext/html-1.dtd pubtext/html-1s.dtd pubtext/html-s.dtd pubtext/html.dcl pubtext/html.dtd pubtext/HTML32.dcl pubtext/HTML32.dtd pubtext/HTML32.soc pubtext/HTML4.dcl pubtext/HTML4-s.dtd pubtext/HTML4.dtd pubtext/HTML4.soc pubtext/HTML4-f.dtd pubtext/HTMLlat1.ent pubtext/HTMLspec.ent pubtext/HTMLsym.ent pubtext/xml.dcl pubtext/xml.soc include/Allocator.h include/ArcEngine.h include/Attribute.h include/Attributed.h include/Big5CodingSystem.h include/Boolean.h include/CharMap.cxx include/CharMap.h include/CharsetDecl.h include/CharsetInfo.h include/CharsetRegistry.h include/CmdLineApp.h include/CodingSystem.h include/CodingSystemKit.h include/ConsoleOutput.h include/ContentState.h include/ContentToken.h include/CopyOwner.cxx include/CopyOwner.h include/DescriptorManager.h include/Dtd.h include/EUCJPCodingSystem.h include/ElementType.h include/Entity.h include/EntityApp.h include/EntityCatalog.h include/EntityDecl.h include/EntityManager.h include/ErrnoMessageArg.h include/ErrorCountEventHandler.h include/Event.h include/EventsWanted.h include/ExtendEntityManager.h include/ExternalId.h include/Fixed2CodingSystem.h include/GenericEventHandler.h include/Hash.h include/HashTable.cxx include/HashTable.h include/HashTableItemBase.cxx include/HashTableItemBase.h include/IList.h include/IListBase.h include/IListIter.h include/IListIterBase.h include/IQueue.cxx include/IQueue.h include/ISet.cxx include/ISet.h include/ISetIter.h include/IdentityCodingSystem.h include/InputSource.h include/InternalInputSource.h include/Link.h include/LinkProcess.h include/List.cxx include/List.h include/ListIter.h include/LiteralStorage.h include/Location.h include/Lpd.h include/Markup.h include/Message.h include/MessageArg.h include/MessageBuilder.h include/MessageEventHandler.h include/MessageFormatter.h include/MessageReporter.h include/MessageTable.h include/Mode.h include/NCVector.h include/NCVector.sed include/Named.h include/NamedResource.h include/NamedResourceTable.h include/NamedTable.h include/Notation.h include/NotationStorage.h include/OpenElement.h include/Options.cxx include/Options.h include/OutputByteStream.h include/OutputCharStream.h include/Owner.cxx include/Owner.h include/OwnerTable.cxx include/OwnerTable.h include/ParserApp.h include/ParserOptions.h include/PointerTable.cxx include/PointerTable.h include/PosixStorage.h include/Ptr.cxx include/Ptr.h include/RangeMap.cxx include/RangeMap.h include/Resource.h include/RewindStorageObject.h include/SJISCodingSystem.h include/SOEntityCatalog.h include/Sd.h include/SdText.h include/SearchResultMessageArg.h include/SgmlParser.h include/ShortReferenceMap.h include/StdioStorage.h include/StorageManager.h include/StringC.h include/StringOf.cxx include/StringOf.h include/StringResource.h include/SubstTable.cxx include/SubstTable.h include/Syntax.h include/Text.h include/TranslateCodingSystem.h include/TypeId.h include/URLStorage.h include/UTF8CodingSystem.h include/UnicodeCodingSystem.h include/UnivCharsetDesc.h include/Vector.cxx include/Vector.h include/Win32CodingSystem.h include/WinApp.h include/WinInetStorage.h include/XMLCodingSystem.h include/XcharMap.cxx include/XcharMap.h include/config.h include/constant.h include/macros.h include/rtti.h include/sptchar.h include/types.h include/xnew.h japan.sgmldecl lib/Allocator.cxx lib/ArcEngine.cxx lib/ArcEngineMessages.h lib/ArcEngineMessages.msg lib/ArcEngineMessages.rc lib/ArcProcessor.h lib/Attribute.cxx lib/Big5CodingSystem.cxx lib/CatalogEntry.h lib/CatalogMessages.msg lib/CatalogMessages.rc lib/CatalogMessages.h lib/CharsetDecl.cxx lib/CharsetInfo.cxx lib/CharsetRegistry.cxx lib/CmdLineApp.cxx lib/CmdLineAppMessages.h lib/CmdLineAppMessages.msg lib/CmdLineAppMessages.rc lib/CodingSystem.cxx lib/CodingSystemKit.cxx lib/ConsoleOutput.cxx lib/ContentState.cxx lib/ContentToken.cxx lib/DescriptorManager.cxx lib/Dtd.cxx lib/EUCJPCodingSystem.cxx lib/ElementType.cxx lib/Entity.cxx lib/EntityApp.cxx lib/EntityCatalog.cxx lib/EntityDecl.cxx lib/EntityManager.cxx lib/EntityManagerMessages.msg lib/EntityManagerMessages.rc lib/EntityManagerMessages.h lib/EquivClass.h lib/ErrnoMessageArg.cxx lib/ErrorCountEventHandler.cxx lib/Event.cxx lib/EventGenerator.cxx lib/EventQueue.h lib/ExtendEntityManager.cxx lib/ExternalId.cxx lib/Fixed2CodingSystem.cxx lib/GenericEventHandler.cxx lib/Group.cxx lib/Group.h lib/Hash.cxx lib/IListBase.cxx lib/Id.cxx lib/Id.h lib/IdentityCodingSystem.cxx lib/InputSource.cxx lib/InternalInputSource.cxx lib/Link.cxx lib/LinkProcess.cxx lib/LiteralStorage.cxx lib/Location.cxx lib/Lpd.cxx lib/LpdEntityRef.h lib/Makefile.sub lib/Markup.cxx lib/MarkupScan.h lib/Message.cxx lib/MessageArg.cxx lib/MessageEventHandler.cxx lib/MessageFormatter.cxx lib/MessageFormatterMessages.h lib/MessageFormatterMessages.msg lib/MessageFormatterMessages.rc lib/MessageReporter.cxx lib/MessageReporterMessages.h lib/MessageReporterMessages.msg lib/MessageReporterMessages.rc lib/MessageTable.cxx lib/ModeInfo.cxx lib/ModeInfo.h lib/Mutex.h lib/NameToken.h lib/Notation.cxx lib/NotationStorage.cxx lib/NumericCharRefOrigin.cxx lib/NumericCharRefOrigin.h lib/OffsetOrderedList.cxx lib/OffsetOrderedList.h lib/OpenElement.cxx lib/OutputByteStream.cxx lib/OutputCharStream.cxx lib/OutputState.cxx lib/OutputState.h lib/Param.cxx lib/Param.h lib/Parser.cxx lib/Parser.h lib/ParserApp.cxx lib/ParserAppMessages.h lib/ParserAppMessages.msg lib/ParserAppMessages.rc lib/ParserEventGeneratorKit.cxx lib/ParserMessages.cxx lib/ParserMessages.msg lib/ParserMessages.rc lib/ParserMessages.h lib/ParserOptions.cxx lib/ParserState.cxx lib/ParserState.h lib/Partition.cxx lib/Partition.h lib/PosixStorage.cxx lib/PosixStorageMessages.msg lib/PosixStorageMessages.rc lib/PosixStorageMessages.h lib/Priority.h lib/Recognizer.cxx lib/Recognizer.h lib/RewindStorageObject.cxx lib/SJISCodingSystem.cxx lib/SOEntityCatalog.cxx lib/Sd.cxx lib/SdFormalError.h lib/SdText.cxx lib/SearchResultMessageArg.cxx lib/SgmlParser.cxx lib/SGMLApplication.cxx lib/ShortReferenceMap.cxx lib/SrInfo.h lib/StdioStorage.cxx lib/StdioStorageMessages.msg lib/StdioStorageMessages.rc lib/StdioStorageMessages.h lib/StorageManager.cxx lib/StorageObjectPosition.h lib/StringVectorMessageArg.cxx lib/StringVectorMessageArg.h lib/Syntax.cxx lib/Text.cxx lib/TokenMessageArg.cxx lib/TokenMessageArg.h lib/TranslateCodingSystem.cxx lib/Trie.h lib/TrieBuilder.cxx lib/TrieBuilder.h lib/TypeId.cxx lib/URLStorage.cxx lib/URLStorageMessages.msg lib/URLStorageMessages.rc lib/URLStorageMessages.h lib/UTF8CodingSystem.cxx lib/Undo.cxx lib/Undo.h lib/UnicodeCodingSystem.cxx lib/UnivCharsetDesc.cxx lib/Win32CodingSystem.cxx lib/WinApp.cxx lib/WinInetStorage.cxx lib/WinInetStorageMessages.msg lib/WinInetStorageMessages.rc lib/WinInetStorageMessages.h lib/XMLCodingSystem.cxx lib/app_inst.cxx lib/app_inst.m4 lib/arc_inst.cxx lib/arc_inst.m4 lib/assert.cxx lib/big5.h lib/entmgr_inst.cxx lib/entmgr_inst.m4 lib/events.h lib/instmac.m4 lib/gb2312.h lib/iso646-jis.h lib/iso8859-2.h lib/iso8859-3.h lib/iso8859-4.h lib/iso8859-5.h lib/iso8859-6.h lib/iso8859-7.h lib/iso8859-8.h lib/iso8859-9.h lib/jis0201.h lib/jis0208.h lib/jis0212.h lib/ksc5601.h lib/lib.dsp lib/lib.rc lib/memmove.c lib/mkversion.pl lib/parseAttribute.cxx lib/parseCommon.cxx lib/parseDecl.cxx lib/parseInstance.cxx lib/parseMode.cxx lib/parseParam.cxx lib/parseSd.cxx lib/parser_inst.cxx lib/parser_inst.m4 lib/splib.cxx lib/splib.h lib/splibpch.h lib/strerror.c lib/token.h lib/version.h lib/xentmgr_inst.cxx lib/xentmgr_inst.m4 msggen.pl nsgmls/Makefile.sub nsgmls/NsgmlsMessages.h nsgmls/NsgmlsMessages.msg nsgmls/NsgmlsMessages.rc nsgmls/RastEventHandler.cxx nsgmls/RastEventHandler.h nsgmls/RastEventHandlerMessages.h nsgmls/RastEventHandlerMessages.msg nsgmls/RastEventHandlerMessages.rc nsgmls/SgmlsEventHandler.cxx nsgmls/SgmlsEventHandler.h nsgmls/StringSet.cxx nsgmls/StringSet.h nsgmls/nsgmls.cxx nsgmls/nsgmls.dsp nsgmls/nsgmls.rc nsgmls/nsgmls_inst.cxx nsgmls/nsgmls_inst.m4 sgmlnorm/Makefile.sub sgmlnorm/SGMLGenerator.cxx sgmlnorm/SGMLGenerator.h sgmlnorm/sgmlnorm.cxx sgmlnorm/sgmlnorm.dsp spam/CopyEventHandler.cxx spam/CopyEventHandler.h spam/MarkupEventHandler.cxx spam/MarkupEventHandler.h spam/SpamMessages.h spam/SpamMessages.msg spam/SpamMessages.rc spam/Makefile.sub spam/spam.cxx spam/spam.dsp spam/spam.rc spam/spam_inst.cxx spam/spam_inst.m4 spent/Makefile.sub spent/spent.cxx spent/spent.dsp sp-generate.mak sunfix.sh sx/Makefile.sub sx/SxMessages.h sx/SxMessages.msg sx/SxMessages.rc sx/XmlOutputEventHandler.cxx sx/XmlOutputEventHandler.h sx/XmlOutputMessages.h sx/XmlOutputMessages.msg sx/XmlOutputMessages.rc sx/sx.cxx sx/sx.dsp sx/sx.rc sx/sx_inst.cxx sx/sx_inst.m4 unicode/catalog unicode/demo.sgm unicode/gensyntax.pl unicode/unicode.sd unicode/unicode.syn jade-1.2.1/Makefile100444 764 764 12134 6607557506 11704 0ustar jjcjjc# Copyright (c) 1994, 1995 James Clark # See the file COPYING for copying permission. prefix=/opt/local exec_prefix=$(prefix) # Where to install the binaries bindir=$(exec_prefix)/bin INSTALL=cp # You might want to uncomment this on BSD systems #INSTALL=install # If you use gcc, then you must have at least version 2.6.1 and # you must use -fno-implicit-templates # and -O (or any optimization level >= 1). # c++ is a front-end for gcc which takes care of linking with -lstdc++ CXX=c++ -fno-implicit-templates -O2 WARN=#-Wall -Wno-reorder -Wwrite-strings -Wpointer-arith -Wnested-externs -Woverloaded-virtual -Wbad-function-cast # Executables will be *very* large if you use -g. DEBUG= # Add -DSP_HAVE_BOOL if you have the bool type. # Add -DSP_ANSI_CLASS_INST for ANSI style explicit class template instantiation. # Add -DSP_MULTI_BYTE for multi-byte support. # Add -DSP_HAVE_LOCALE if you have setlocale(). # Add -DSP_HAVE_GETTEXT if you gettext() and friends (eg Solaris 2.3). # Add -DSP_HAVE_SOCKET if you have sockets and you want support for HTTP # Add -DSP_MUTEX_PTHREADS if you want to use pthreads for mutexes # Add -DSP_DECLARE_H_ERRNO if you have sockets, but netdb.h doesn't declare h_errno # (reportedly HPUX, Ultrix and Solaris 5.4) # Add -DSGML_CATALOG_FILES_DEFAULT=\"/usr/local/lib/sgml/catalog\" # (for example) to change the value used if the SGML_CATALOG_FILES # environment variable is unset. SP now automatically searches for a file # called "catalog" in the same directory as the document entity. # Add -Dsig_atomic_t=int on SunOS 4.1.x with g++ (or any other platform # which doesn't appropriately define sig_atomic_t). # Add -DJADE_MIF to include the Jade MIF backend XDEFINES= DEFINES=-DSP_HAVE_BOOL -DSP_ANSI_CLASS_INST -DSP_MULTI_BYTE $(XDEFINES) CXXFLAGS=-ansi $(DEBUG) $(WARN) # Flag to pass to CXX to make it output list of dependencies as a Makefile. CXXDEPGENFLAGS=-MM LDFLAGS= CC=gcc CFLAGS=-O $(DEBUG) # Missing library functions # Uncomment these if your C++ system doesn't provide them. LIBOBJS=#strerror.o memmove.o # iostreams are required # If you defined SP_HAVE_SOCKET, add any libraries that are needed for sockets # -lsocket -lnsl needed on Solaris 2.x # -lnsl on SunOS 4.1.3 XLIBS=#-lsocket -lnsl # -L/usr/local/lib may be needed on the RS/6000 LIBS=-lm $(XLIBS) # If you're building in another directory, copy or link this Makefile # to the build directory, and set srcdir to point to the source directory. srcdir=. AR=ar RANLIB=: # Uncomment this for SunOS 4.1.3 or FreeBSD # (and probably other BSD flavor systems as well) #RANLIB=ranlib M4=m4 # perl is needed if you change or add messages PERL=perl # Suffix for executables. EXE= # Uncomment this for OS/2. #EXE=.exe SP_LIBDIRS=lib $(XLIBDIRS) SP_PROGDIRS=nsgmls spam sgmlnorm spent sx $(XPROGDIRS) JADE_LIBDIRS=grove spgrove style JADE_PROGDIRS=jade LIBDIRS=$(SP_LIBDIRS) $(JADE_LIBDIRS) PROGDIRS=$(SP_PROGDIRS) $(JADE_PROGDIRS) sp_dodirs=$(SP_LIBDIRS) $(SP_PROGDIRS) jade_dodirs=$(LIBDIRS) $(PROGDIRS) PURIFYFLAGS= PURIFY=purify $(PURIFYFLAGS) -g++=yes -collector=`dirname \`gcc -print-libgcc-file-name\``/ld MDEFINES='CXX=$(CXX)' 'CC=$(CC)' 'LIBOBJS=$(LIBOBJS)' 'CXXFLAGS=$(CXXFLAGS)' \ 'CFLAGS=$(CFLAGS)' 'LDFLAGS=$(LDFLAGS)' 'DEFINES=$(DEFINES)' \ 'srcdir=$(srcdir)' 'AR=$(AR)' 'RANLIB=$(RANLIB)' \ 'M4=$(M4)' 'PERL=$(PERL)' 'LIBS=$(LIBS)' 'PURIFY=$(PURIFY)' \ 'PIC_FLAG=$(PIC_FLAG)' 'XPROGDIRS=$(XPROGDIRS)' 'XLIBDIRS=$(XLIBDIRS)' \ 'libMakefile=$(libMakefile)' 'EXE=$(EXE)' 'bindir=$(bindir)' \ 'INSTALL=$(INSTALL)' CXXDEPGENFLAGS='$(CXXDEPGENFLAGS)' # Automatic template instantiation can cause compilers to generate # various extra files; the clean target won't delete these. TARGETS=all install depend gen clean pure libMakefile=Makefile.lib do=all $(TARGETS): FORCE @if test -d $(srcdir)/jade; \ then $(MAKE) -f $(srcdir)/Makefile $(MDEFINES) do=$@ $(jade_dodirs); \ else $(MAKE) -f $(srcdir)/Makefile $(MDEFINES) do=$@ $(sp_dodirs); \ fi $(LIBDIRS): FORCE @if test $(srcdir) = .; \ then srcdir=.; \ else srcdir=`cd $(srcdir); pwd`/$@; \ fi; \ test -d $@ || mkdir $@; \ cd $@; \ test -f $$srcdir/Makefile.dep || touch $$srcdir/Makefile.dep; \ $(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \ -f $$srcdir/../Makefile.comm -f $$srcdir/Makefile.sub \ -f $$srcdir/../$(libMakefile) -f $$srcdir/Makefile.dep $(do) $(PROGDIRS): FORCE @if test $(srcdir) = .; \ then srcdir=.; \ else srcdir=`cd $(srcdir); pwd`/$@; \ fi; \ test -d $@ || mkdir $@; \ cd $@; \ test -f $$srcdir/Makefile.dep || touch $$srcdir/Makefile.dep; \ $(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \ -f $$srcdir/../Makefile.comm -f $$srcdir/Makefile.sub \ -f $$srcdir/../Makefile.prog -f $$srcdir/Makefile.dep $(do) $(PROGDIRS): lib # GNU tar TAR=tar dist: FORCE version=`cat VERSION`; \ rm -fr sp-$$version; \ mkdir sp-$$version; \ cd sp-$$version; \ ln -s ../* .; \ rm sp-$$version; \ rm SP.mak ; \ sed -e '/^ CD /s/[A-Z]:\\.*\\//' -e "s/$$/`echo @ | tr @ \\\\015`/" \ ../SP.mak >SP.mak; \ cd ..; \ ln -s `pwd` sp-$$version; \ $(TAR) -c -f sp-$$version.tar.gz -h -z \ `sed -e "s|.*|sp-$$version/&|" FILES`; \ rm -fr sp-$$version FORCE: jade-1.2.1/Makefile.comm100444 764 764 1443 6604607546 12614 0ustar jjcjjcCXXFLAGS=$(DEBUG) $(OPTIMIZE) $(WARN) ALL_CXXFLAGS=$(CXXFLAGS) -I$(srcdir) -I$(srcdir)/../include $(INCLUDE) \ $(DEFINES) ALL_CFLAGS=$(CFLAGS) $(DEBUG) $(OPTIMIZE) $(INCLUDE) $(DEFINES) MSGGENFLAGS= CXXDEPGENFLAGS=-MM AR=ar RANLIB=: M4=m4 GENSRCS= OBJS= COBJS= PROG= PERL=perl .SUFFIXES: .cxx .c .o .m4 .msg .cxx.o: $(CXX) $(ALL_CXXFLAGS) -c $< .c.o: $(CC) $(ALL_CFLAGS) -c $< .m4.cxx: rm -f $@ $(M4) $(srcdir)/../lib/instmac.m4 $< >$@ chmod -w $@ .msg.h: $(PERL) -w $(srcdir)/../msggen.pl $(MSGGENFLAGS) $< depend_src: depend.temp mv depend.temp Makefile.dep depend.temp: FORCE $(CXX) -MM $(ALL_CXXFLAGS) $(CXXDEPGENFLAGS) $(OBJS:.o=.cxx) \ | sed -e 's; \([^/ ][^/ ]*\)/; $$(srcdir)/\1/;g' >depend.temp clean: FORCE -rm -f $(CLEANFILES) FORCE: %: RCS/%,v test -w $@ || co -u $@ jade-1.2.1/Makefile.lib100444 764 764 605 6604607546 12406 0ustar jjcjjcCLEANFILES=lib$(LIB).a $(OBJS) $(COBJS) core ALL_CXXFLAGS=$(CXXFLAGS) -I$(srcdir) -I$(srcdir)/../include $(INCLUDE) \ $(DEFINES) $(PIC_FLAG) ALL_CFLAGS=$(CFLAGS) $(DEBUG) $(OPTIMIZE) $(INCLUDE) $(DEFINES) $(PIC_FLAG) all: lib$(LIB).a pure: all lib$(LIB).a: $(OBJS) $(COBJS) $(AR) r $@ $? $(RANLIB) $@ install: install-man: depend: depend_src depend.temp: $(GENSRCS) gen: $(GENSRCS) jade-1.2.1/Makefile.lib.CC100444 764 764 1022 6604607546 12704 0ustar jjcjjcall pure: lib$(LIB).a # FIXME needs also to depend on template files REPOSITORY=ptrepository lib$(LIB).a: $(OBJS) $(COBJS) $(DEPLIBS) - $(CXX) $(ALL_CXXFLAGS) $(OBJS) $(COBJS) $(DEPLIBS) -rm -f a.out if test -d $(REPOSITORY); then \ i=1; \ tmpdir=/tmp/ar.$$$$; \ rm -fr $$tmpdir; \ mkdir $$tmpdir; \ for o in $(REPOSITORY)/*.o; do \ cp $$o $$tmpdir/$$i.o; \ i=`expr $$i + 1`; \ done ; \ $(AR) r $@ $$tmpdir/*.o ; \ fi $(AR) r $@ $? depend: depend_src depend.temp: $(GENSRCS) gen: $(GENSRCS) jade-1.2.1/Makefile.lib.sun100444 764 764 372 6604607546 13213 0ustar jjcjjcCLEANFILES=lib$(LIB).a $(OBJS) $(COBJS) core all: lib$(LIB).a lib$(LIB).a: $(OBJS) $(COBJS) $(DEPLIBS) $(CXX) $(ALL_CXXFLAGS) -xar -o $@ $(OBJS) $(COBJS) $(DEPLIBS) install: install-man: depend: depend_src depend.temp: $(GENSRCS) gen: $(GENSRCS) jade-1.2.1/Makefile.prog100444 764 764 1016 6604607546 12624 0ustar jjcjjcCLEANFILES=$(PROG)$(EXE) $(OBJS) core all: $(PROG)$(EXE) pure: $(PROG).pure $(PROG)$(EXE): $(OBJS) $(COBJS) $(XLIBS) $(CXX) $(ALL_CXXFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(COBJS) $(XLIBS) $(LIBS) $(PROG).pure: $(OBJS) $(COBJS) $(XLIBS) $(PURIFY) $(CXX) $(ALL_CXXFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(COBJS) $(XLIBS) $(LIBS) install: $(PROG)$(EXE) -test -d $(bindir) || mkdir $(bindir) -rm -f $(bindir)/$(PROG)$(EXE) $(INSTALL) $(PROG)$(EXE) $(bindir)/$(PROG)$(EXE) depend: depend_src depend.temp: $(GENSRCS) gen: $(GENSRCS) jade-1.2.1/Makefile.wat100444 764 764 6576 6604607546 12470 0ustar jjcjjc# Copyright (c) 1994, 1995 James Clark # See the file COPYING for copying permission. # Makefile for Watcom C/C++ 10.5a CXX=wcl386 srcdir=.. TARGET=dos LINK_SYSTEM=dos4g STACK_SIZE=128k OPTIMIZE=/otx /zp4 /4 SEARCHPATH=$(srcdir)\include;$(srcdir)\lib;$(srcdir)\generic;$(srcdir)\nsgmls;$(srcdir)\spam;$(srcdir)\sgmlnorm;$(srcdir)\spent CXXFLAGS=/bt=$(TARGET) /zq $(OPTIMIZE) /i=$(SEARCHPATH) LIBFLAGS=-p=32 LDFLAGS=/l=$(LINK_SYSTEM) /k$(STACK_SIZE) NSGMLS_OBJS=nsgmls.obj SgmlsEventHandler.obj RastEventHandler.obj & StringSet.obj nsgmls_inst.obj SPAM_OBJS=spam.obj CopyEventHandler.obj MarkupEventHandler.obj spam_inst.obj SGMLNORM_OBJS=sgmlnorm.obj SGMLGenerator.obj SPENT_OBJS=spent.obj LIB_OBJS=Allocator.obj & ArcEngine.obj & Attribute.obj & Big5CodingSystem.obj & CharsetDecl.obj & CharsetInfo.obj & CharsetRegistry.obj & CmdLineApp.obj & CodingSystem.obj & CodingSystemKit.obj & ConsoleOutput.obj & ContentState.obj & ContentToken.obj & DescriptorManager.obj & Dtd.obj & EUCJPCodingSystem.obj & ElementType.obj & Entity.obj & EntityApp.obj & EntityCatalog.obj & EntityDecl.obj & EntityManager.obj & ErrnoMessageArg.obj & ErrorCountEventHandler.obj & Event.obj & EventGenerator.obj & ExtendEntityManager.obj & ExternalId.obj & Fixed2CodingSystem.obj & GenericEventHandler.obj & Group.obj & Hash.obj & IListBase.obj & Id.obj & IdentityCodingSystem.obj & InputSource.obj & InternalInputSource.obj & Link.obj & LinkProcess.obj & LiteralStorage.obj & Location.obj & Lpd.obj & Markup.obj & Message.obj & MessageArg.obj & MessageEventHandler.obj & MessageFormatter.obj & MessageReporter.obj & MessageTable.obj & ModeInfo.obj & Notation.obj & NotationStorage.obj & NumericCharRefOrigin.obj & OffsetOrderedList.obj & OpenElement.obj & OutputByteStream.obj & OutputCharStream.obj & OutputState.obj & Param.obj & Parser.obj & ParserApp.obj & ParserEventGeneratorKit.obj & ParserMessages.obj & ParserOptions.obj & ParserState.obj & Partition.obj & PosixStorage.obj & Recognizer.obj & RewindStorageObject.obj & SJISCodingSystem.obj & SOEntityCatalog.obj & Sd.obj & SdText.obj & SearchResultMessageArg.obj & SgmlParser.obj & SGMLApplication.obj & ShortReferenceMap.obj & StdioStorage.obj & StorageManager.obj & StringVectorMessageArg.obj & Syntax.obj & Text.obj & TokenMessageArg.obj & TranslateCodingSystem.obj & TrieBuilder.obj & TypeId.obj & URLStorage.obj & UTF8CodingSystem.obj & Undo.obj & UnicodeCodingSystem.obj & UnivCharsetDesc.obj & Win32CodingSystem.obj & app_inst.obj & arc_inst.obj & assert.obj & entmgr_inst.obj & parseAttribute.obj & parseCommon.obj & parseDecl.obj & parseInstance.obj & parseMode.obj & parseParam.obj & parseSd.obj & parser_inst.obj & xentmgr_inst.obj & LIB=libsp.lib all: nsgmls.exe spam.exe sgmlnorm.exe spent.exe nsgmls.exe: $(NSGMLS_OBJS) $(LIB) $(CXX) $(NSGMLS_OBJS) $(LIB) /fe=$@ $(CXXFLAGS) $(LDFLAGS) spam.exe: $(SPAM_OBJS) $(LIB) $(CXX) $(SPAM_OBJS) $(LIB) /fe=$@ $(CXXFLAGS) $(LDFLAGS) sgmlnorm.exe: $(SGMLNORM_OBJS) $(LIB) $(CXX) $(SGMLNORM_OBJS) $(LIB) /fe=$@ $(CXXFLAGS) $(LDFLAGS) spent.exe: $(SPENT_OBJS) $(LIB) $(CXX) $(SPENT_OBJS) $(LIB) /fe=$@ $(CXXFLAGS) $(LDFLAGS) $(LIB): $(LIB_OBJS) wlib $(LIBFLAGS) $(LIB) $? .cxx.obj: .AUTODEPEND $(CXX) $[@ /c $(CXXFLAGS) .cxx: $(SEARCHPATH) jade-1.2.1/README100444 764 764 772 6610550130 11045 0ustar jjcjjcCopyright (c) 1994, 1995, 1996 James Clark This directory contains an SGML parser called SP. If you got this file as part of a Jade distribution, then you can find information about Jade in HTML format in jadedoc/jade.htm. See the file COPYING for copying permission. This is a production release. The version number of SP is given in the file VERSION. All documentation is in HTML format in the doc directory. Start with doc/index.htm. Please report any bugs you find. James Clark jjc@jclark.com jade-1.2.1/SP.dsw100444 764 764 4315 6606574404 11262 0ustar jjcjjcMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "lib"=".\lib\lib.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "nsgmls"=".\nsgmls\nsgmls.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Project: "sgmlnorm"=".\sgmlnorm\sgmlnorm.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Project: "spam"=".\spam\spam.dsp" - Package Owner=<4> Package=<5> {{{ begin source code control c:\home\work\jade-vc6\spam\spam.pj .\spam end source code control }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Project: "spent"=".\spent\spent.dsp" - Package Owner=<4> Package=<5> {{{ begin source code control c:\home\work\jade-vc6\spent\spent.pj .\spent end source code control }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Project: "sx"=".\sx\sx.dsp" - Package Owner=<4> Package=<5> {{{ begin source code control c:\home\work\jade-vc6\sx\sx.pj .\sx end source code control }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name lib End Project Dependency }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### jade-1.2.1/SP.mak100444 764 764 2315571 6610365436 11326 0ustar jjcjjc# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 # TARGTYPE "Win32 (x86) External Target" 0x0106 # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 !IF "$(CFG)" == "" CFG=sx - Win32 Debug !MESSAGE No configuration specified. Defaulting to sx - Win32 Debug. !ENDIF !IF "$(CFG)" != "lib - Win32 Release" && "$(CFG)" != "lib - Win32 Debug" &&\ "$(CFG)" != "nsgmls - Win32 Release" && "$(CFG)" != "nsgmls - Win32 Debug" &&\ "$(CFG)" != "spam - Win32 Release" && "$(CFG)" != "spam - Win32 Debug" &&\ "$(CFG)" != "spent - Win32 Release" && "$(CFG)" != "spent - Win32 Debug" &&\ "$(CFG)" != "sgmlnorm - Win32 Release" && "$(CFG)" != "sgmlnorm - Win32 Debug"\ && "$(CFG)" != "all - Win32 Release" && "$(CFG)" != "all - Win32 Debug" &&\ "$(CFG)" != "sx - Win32 Release" && "$(CFG)" != "sx - Win32 Debug" !MESSAGE Invalid configuration "$(CFG)" specified. !MESSAGE You can specify a configuration when running NMAKE on this makefile !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "SP.mak" CFG="sx - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "lib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "lib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "nsgmls - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "nsgmls - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE "spam - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "spam - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE "spent - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "spent - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE "sgmlnorm - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "sgmlnorm - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE "all - Win32 Release" (based on "Win32 (x86) External Target") !MESSAGE "all - Win32 Debug" (based on "Win32 (x86) External Target") !MESSAGE "sx - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "sx - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE !ERROR An invalid configuration is specified. !ENDIF !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF ################################################################################ # Begin Project # PROP Target_Last_Scanned "lib - Win32 Debug" !IF "$(CFG)" == "lib - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "lib\Release" # PROP BASE Intermediate_Dir "lib\Release" # PROP BASE Target_Dir "lib" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "lib\Release" # PROP Intermediate_Dir "lib\Release" # PROP Target_Dir "lib" OUTDIR=.\lib\Release INTDIR=.\lib\Release ALL : ".\bin\sp133.dll" CLEAN : -@erase "$(INTDIR)\Allocator.obj" -@erase "$(INTDIR)\app_inst.obj" -@erase "$(INTDIR)\arc_inst.obj" -@erase "$(INTDIR)\ArcEngine.obj" -@erase "$(INTDIR)\assert.obj" -@erase "$(INTDIR)\Attribute.obj" -@erase "$(INTDIR)\Big5CodingSystem.obj" -@erase "$(INTDIR)\CharsetDecl.obj" -@erase "$(INTDIR)\CharsetInfo.obj" -@erase "$(INTDIR)\CharsetRegistry.obj" -@erase "$(INTDIR)\CmdLineApp.obj" -@erase "$(INTDIR)\CodingSystem.obj" -@erase "$(INTDIR)\CodingSystemKit.obj" -@erase "$(INTDIR)\ConsoleOutput.obj" -@erase "$(INTDIR)\ContentState.obj" -@erase "$(INTDIR)\ContentToken.obj" -@erase "$(INTDIR)\DescriptorManager.obj" -@erase "$(INTDIR)\Dtd.obj" -@erase "$(INTDIR)\ElementType.obj" -@erase "$(INTDIR)\Entity.obj" -@erase "$(INTDIR)\EntityApp.obj" -@erase "$(INTDIR)\EntityCatalog.obj" -@erase "$(INTDIR)\EntityDecl.obj" -@erase "$(INTDIR)\EntityManager.obj" -@erase "$(INTDIR)\entmgr_inst.obj" -@erase "$(INTDIR)\ErrnoMessageArg.obj" -@erase "$(INTDIR)\ErrorCountEventHandler.obj" -@erase "$(INTDIR)\EUCJPCodingSystem.obj" -@erase "$(INTDIR)\Event.obj" -@erase "$(INTDIR)\EventGenerator.obj" -@erase "$(INTDIR)\ExtendEntityManager.obj" -@erase "$(INTDIR)\ExternalId.obj" -@erase "$(INTDIR)\Fixed2CodingSystem.obj" -@erase "$(INTDIR)\GenericEventHandler.obj" -@erase "$(INTDIR)\Group.obj" -@erase "$(INTDIR)\Hash.obj" -@erase "$(INTDIR)\Id.obj" -@erase "$(INTDIR)\IdentityCodingSystem.obj" -@erase "$(INTDIR)\IListBase.obj" -@erase "$(INTDIR)\InputSource.obj" -@erase "$(INTDIR)\InternalInputSource.obj" -@erase "$(INTDIR)\lib.pch" -@erase "$(INTDIR)\lib.res" -@erase "$(INTDIR)\Link.obj" -@erase "$(INTDIR)\LinkProcess.obj" -@erase "$(INTDIR)\LiteralStorage.obj" -@erase "$(INTDIR)\Location.obj" -@erase "$(INTDIR)\Lpd.obj" -@erase "$(INTDIR)\Markup.obj" -@erase "$(INTDIR)\Message.obj" -@erase "$(INTDIR)\MessageArg.obj" -@erase "$(INTDIR)\MessageEventHandler.obj" -@erase "$(INTDIR)\MessageFormatter.obj" -@erase "$(INTDIR)\MessageReporter.obj" -@erase "$(INTDIR)\MessageTable.obj" -@erase "$(INTDIR)\ModeInfo.obj" -@erase "$(INTDIR)\Notation.obj" -@erase "$(INTDIR)\NotationStorage.obj" -@erase "$(INTDIR)\NumericCharRefOrigin.obj" -@erase "$(INTDIR)\OffsetOrderedList.obj" -@erase "$(INTDIR)\OpenElement.obj" -@erase "$(INTDIR)\OutputByteStream.obj" -@erase "$(INTDIR)\OutputCharStream.obj" -@erase "$(INTDIR)\OutputState.obj" -@erase "$(INTDIR)\Param.obj" -@erase "$(INTDIR)\parseAttribute.obj" -@erase "$(INTDIR)\parseCommon.obj" -@erase "$(INTDIR)\parseDecl.obj" -@erase "$(INTDIR)\parseInstance.obj" -@erase "$(INTDIR)\parseMode.obj" -@erase "$(INTDIR)\parseParam.obj" -@erase "$(INTDIR)\Parser.obj" -@erase "$(INTDIR)\parser_inst.obj" -@erase "$(INTDIR)\ParserApp.obj" -@erase "$(INTDIR)\ParserEventGeneratorKit.obj" -@erase "$(INTDIR)\ParserMessages.obj" -@erase "$(INTDIR)\ParserOptions.obj" -@erase "$(INTDIR)\ParserState.obj" -@erase "$(INTDIR)\parseSd.obj" -@erase "$(INTDIR)\Partition.obj" -@erase "$(INTDIR)\PosixStorage.obj" -@erase "$(INTDIR)\Recognizer.obj" -@erase "$(INTDIR)\RewindStorageObject.obj" -@erase "$(INTDIR)\Sd.obj" -@erase "$(INTDIR)\SdText.obj" -@erase "$(INTDIR)\SearchResultMessageArg.obj" -@erase "$(INTDIR)\SGMLApplication.obj" -@erase "$(INTDIR)\SgmlParser.obj" -@erase "$(INTDIR)\ShortReferenceMap.obj" -@erase "$(INTDIR)\SJISCodingSystem.obj" -@erase "$(INTDIR)\SOEntityCatalog.obj" -@erase "$(INTDIR)\splib.obj" -@erase "$(INTDIR)\StdioStorage.obj" -@erase "$(INTDIR)\StorageManager.obj" -@erase "$(INTDIR)\StringVectorMessageArg.obj" -@erase "$(INTDIR)\Syntax.obj" -@erase "$(INTDIR)\Text.obj" -@erase "$(INTDIR)\TokenMessageArg.obj" -@erase "$(INTDIR)\TranslateCodingSystem.obj" -@erase "$(INTDIR)\TrieBuilder.obj" -@erase "$(INTDIR)\TypeId.obj" -@erase "$(INTDIR)\Undo.obj" -@erase "$(INTDIR)\UnicodeCodingSystem.obj" -@erase "$(INTDIR)\UnivCharsetDesc.obj" -@erase "$(INTDIR)\URLStorage.obj" -@erase "$(INTDIR)\UTF8CodingSystem.obj" -@erase "$(INTDIR)\Win32CodingSystem.obj" -@erase "$(INTDIR)\WinApp.obj" -@erase "$(INTDIR)\WinInetStorage.obj" -@erase "$(INTDIR)\xentmgr_inst.obj" -@erase "$(INTDIR)\XMLCodingSystem.obj" -@erase "$(OUTDIR)\sp133.exp" -@erase "$(OUTDIR)\sp133.lib" -@erase ".\bin\sp133.dll" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "include" /I "generic" /D "NDEBUG" /D "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /Yu"splib.h" /c CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "include" /I "generic" /D "NDEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yu"splib.h" /Fo"$(INTDIR)/" /c CPP_OBJS=.\lib\Release/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< MTL=mktyplib.exe # ADD BASE MTL /nologo /D "NDEBUG" /win32 # ADD MTL /nologo /D "NDEBUG" /win32 MTL_PROJ=/nologo /D "NDEBUG" /win32 RSC=rc.exe # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" RSC_PROJ=/l 0x809 /fo"$(INTDIR)/lib.res" /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/lib.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 wininet.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386 /out:"bin/sp133.dll" # SUBTRACT LINK32 /profile LINK32_FLAGS=wininet.lib wsock32.lib kernel32.lib user32.lib gdi32.lib\ winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib\ uuid.lib /nologo /subsystem:windows /dll /incremental:no\ /pdb:"$(OUTDIR)/sp133.pdb" /machine:I386 /out:"bin/sp133.dll"\ /implib:"$(OUTDIR)/sp133.lib" LINK32_OBJS= \ "$(INTDIR)\Allocator.obj" \ "$(INTDIR)\app_inst.obj" \ "$(INTDIR)\arc_inst.obj" \ "$(INTDIR)\ArcEngine.obj" \ "$(INTDIR)\assert.obj" \ "$(INTDIR)\Attribute.obj" \ "$(INTDIR)\Big5CodingSystem.obj" \ "$(INTDIR)\CharsetDecl.obj" \ "$(INTDIR)\CharsetInfo.obj" \ "$(INTDIR)\CharsetRegistry.obj" \ "$(INTDIR)\CmdLineApp.obj" \ "$(INTDIR)\CodingSystem.obj" \ "$(INTDIR)\CodingSystemKit.obj" \ "$(INTDIR)\ConsoleOutput.obj" \ "$(INTDIR)\ContentState.obj" \ "$(INTDIR)\ContentToken.obj" \ "$(INTDIR)\DescriptorManager.obj" \ "$(INTDIR)\Dtd.obj" \ "$(INTDIR)\ElementType.obj" \ "$(INTDIR)\Entity.obj" \ "$(INTDIR)\EntityApp.obj" \ "$(INTDIR)\EntityCatalog.obj" \ "$(INTDIR)\EntityDecl.obj" \ "$(INTDIR)\EntityManager.obj" \ "$(INTDIR)\entmgr_inst.obj" \ "$(INTDIR)\ErrnoMessageArg.obj" \ "$(INTDIR)\ErrorCountEventHandler.obj" \ "$(INTDIR)\EUCJPCodingSystem.obj" \ "$(INTDIR)\Event.obj" \ "$(INTDIR)\EventGenerator.obj" \ "$(INTDIR)\ExtendEntityManager.obj" \ "$(INTDIR)\ExternalId.obj" \ "$(INTDIR)\Fixed2CodingSystem.obj" \ "$(INTDIR)\GenericEventHandler.obj" \ "$(INTDIR)\Group.obj" \ "$(INTDIR)\Hash.obj" \ "$(INTDIR)\Id.obj" \ "$(INTDIR)\IdentityCodingSystem.obj" \ "$(INTDIR)\IListBase.obj" \ "$(INTDIR)\InputSource.obj" \ "$(INTDIR)\InternalInputSource.obj" \ "$(INTDIR)\lib.res" \ "$(INTDIR)\Link.obj" \ "$(INTDIR)\LinkProcess.obj" \ "$(INTDIR)\LiteralStorage.obj" \ "$(INTDIR)\Location.obj" \ "$(INTDIR)\Lpd.obj" \ "$(INTDIR)\Markup.obj" \ "$(INTDIR)\Message.obj" \ "$(INTDIR)\MessageArg.obj" \ "$(INTDIR)\MessageEventHandler.obj" \ "$(INTDIR)\MessageFormatter.obj" \ "$(INTDIR)\MessageReporter.obj" \ "$(INTDIR)\MessageTable.obj" \ "$(INTDIR)\ModeInfo.obj" \ "$(INTDIR)\Notation.obj" \ "$(INTDIR)\NotationStorage.obj" \ "$(INTDIR)\NumericCharRefOrigin.obj" \ "$(INTDIR)\OffsetOrderedList.obj" \ "$(INTDIR)\OpenElement.obj" \ "$(INTDIR)\OutputByteStream.obj" \ "$(INTDIR)\OutputCharStream.obj" \ "$(INTDIR)\OutputState.obj" \ "$(INTDIR)\Param.obj" \ "$(INTDIR)\parseAttribute.obj" \ "$(INTDIR)\parseCommon.obj" \ "$(INTDIR)\parseDecl.obj" \ "$(INTDIR)\parseInstance.obj" \ "$(INTDIR)\parseMode.obj" \ "$(INTDIR)\parseParam.obj" \ "$(INTDIR)\Parser.obj" \ "$(INTDIR)\parser_inst.obj" \ "$(INTDIR)\ParserApp.obj" \ "$(INTDIR)\ParserEventGeneratorKit.obj" \ "$(INTDIR)\ParserMessages.obj" \ "$(INTDIR)\ParserOptions.obj" \ "$(INTDIR)\ParserState.obj" \ "$(INTDIR)\parseSd.obj" \ "$(INTDIR)\Partition.obj" \ "$(INTDIR)\PosixStorage.obj" \ "$(INTDIR)\Recognizer.obj" \ "$(INTDIR)\RewindStorageObject.obj" \ "$(INTDIR)\Sd.obj" \ "$(INTDIR)\SdText.obj" \ "$(INTDIR)\SearchResultMessageArg.obj" \ "$(INTDIR)\SGMLApplication.obj" \ "$(INTDIR)\SgmlParser.obj" \ "$(INTDIR)\ShortReferenceMap.obj" \ "$(INTDIR)\SJISCodingSystem.obj" \ "$(INTDIR)\SOEntityCatalog.obj" \ "$(INTDIR)\splib.obj" \ "$(INTDIR)\StdioStorage.obj" \ "$(INTDIR)\StorageManager.obj" \ "$(INTDIR)\StringVectorMessageArg.obj" \ "$(INTDIR)\Syntax.obj" \ "$(INTDIR)\Text.obj" \ "$(INTDIR)\TokenMessageArg.obj" \ "$(INTDIR)\TranslateCodingSystem.obj" \ "$(INTDIR)\TrieBuilder.obj" \ "$(INTDIR)\TypeId.obj" \ "$(INTDIR)\Undo.obj" \ "$(INTDIR)\UnicodeCodingSystem.obj" \ "$(INTDIR)\UnivCharsetDesc.obj" \ "$(INTDIR)\URLStorage.obj" \ "$(INTDIR)\UTF8CodingSystem.obj" \ "$(INTDIR)\Win32CodingSystem.obj" \ "$(INTDIR)\WinApp.obj" \ "$(INTDIR)\WinInetStorage.obj" \ "$(INTDIR)\xentmgr_inst.obj" \ "$(INTDIR)\XMLCodingSystem.obj" ".\bin\sp133.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "lib - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "lib\Debug" # PROP BASE Intermediate_Dir "lib\Debug" # PROP BASE Target_Dir "lib" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "lib\Debug" # PROP Intermediate_Dir "lib\Debug" # PROP Target_Dir "lib" OUTDIR=.\lib\Debug INTDIR=.\lib\Debug ALL : ".\dbgbin\sp133d.dll" CLEAN : -@erase "$(INTDIR)\Allocator.obj" -@erase "$(INTDIR)\app_inst.obj" -@erase "$(INTDIR)\arc_inst.obj" -@erase "$(INTDIR)\ArcEngine.obj" -@erase "$(INTDIR)\assert.obj" -@erase "$(INTDIR)\Attribute.obj" -@erase "$(INTDIR)\Big5CodingSystem.obj" -@erase "$(INTDIR)\CharsetDecl.obj" -@erase "$(INTDIR)\CharsetInfo.obj" -@erase "$(INTDIR)\CharsetRegistry.obj" -@erase "$(INTDIR)\CmdLineApp.obj" -@erase "$(INTDIR)\CodingSystem.obj" -@erase "$(INTDIR)\CodingSystemKit.obj" -@erase "$(INTDIR)\ConsoleOutput.obj" -@erase "$(INTDIR)\ContentState.obj" -@erase "$(INTDIR)\ContentToken.obj" -@erase "$(INTDIR)\DescriptorManager.obj" -@erase "$(INTDIR)\Dtd.obj" -@erase "$(INTDIR)\ElementType.obj" -@erase "$(INTDIR)\Entity.obj" -@erase "$(INTDIR)\EntityApp.obj" -@erase "$(INTDIR)\EntityCatalog.obj" -@erase "$(INTDIR)\EntityDecl.obj" -@erase "$(INTDIR)\EntityManager.obj" -@erase "$(INTDIR)\entmgr_inst.obj" -@erase "$(INTDIR)\ErrnoMessageArg.obj" -@erase "$(INTDIR)\ErrorCountEventHandler.obj" -@erase "$(INTDIR)\EUCJPCodingSystem.obj" -@erase "$(INTDIR)\Event.obj" -@erase "$(INTDIR)\EventGenerator.obj" -@erase "$(INTDIR)\ExtendEntityManager.obj" -@erase "$(INTDIR)\ExternalId.obj" -@erase "$(INTDIR)\Fixed2CodingSystem.obj" -@erase "$(INTDIR)\GenericEventHandler.obj" -@erase "$(INTDIR)\Group.obj" -@erase "$(INTDIR)\Hash.obj" -@erase "$(INTDIR)\Id.obj" -@erase "$(INTDIR)\IdentityCodingSystem.obj" -@erase "$(INTDIR)\IListBase.obj" -@erase "$(INTDIR)\InputSource.obj" -@erase "$(INTDIR)\InternalInputSource.obj" -@erase "$(INTDIR)\lib.pch" -@erase "$(INTDIR)\lib.res" -@erase "$(INTDIR)\Link.obj" -@erase "$(INTDIR)\LinkProcess.obj" -@erase "$(INTDIR)\LiteralStorage.obj" -@erase "$(INTDIR)\Location.obj" -@erase "$(INTDIR)\Lpd.obj" -@erase "$(INTDIR)\Markup.obj" -@erase "$(INTDIR)\Message.obj" -@erase "$(INTDIR)\MessageArg.obj" -@erase "$(INTDIR)\MessageEventHandler.obj" -@erase "$(INTDIR)\MessageFormatter.obj" -@erase "$(INTDIR)\MessageReporter.obj" -@erase "$(INTDIR)\MessageTable.obj" -@erase "$(INTDIR)\ModeInfo.obj" -@erase "$(INTDIR)\Notation.obj" -@erase "$(INTDIR)\NotationStorage.obj" -@erase "$(INTDIR)\NumericCharRefOrigin.obj" -@erase "$(INTDIR)\OffsetOrderedList.obj" -@erase "$(INTDIR)\OpenElement.obj" -@erase "$(INTDIR)\OutputByteStream.obj" -@erase "$(INTDIR)\OutputCharStream.obj" -@erase "$(INTDIR)\OutputState.obj" -@erase "$(INTDIR)\Param.obj" -@erase "$(INTDIR)\parseAttribute.obj" -@erase "$(INTDIR)\parseCommon.obj" -@erase "$(INTDIR)\parseDecl.obj" -@erase "$(INTDIR)\parseInstance.obj" -@erase "$(INTDIR)\parseMode.obj" -@erase "$(INTDIR)\parseParam.obj" -@erase "$(INTDIR)\Parser.obj" -@erase "$(INTDIR)\parser_inst.obj" -@erase "$(INTDIR)\ParserApp.obj" -@erase "$(INTDIR)\ParserEventGeneratorKit.obj" -@erase "$(INTDIR)\ParserMessages.obj" -@erase "$(INTDIR)\ParserOptions.obj" -@erase "$(INTDIR)\ParserState.obj" -@erase "$(INTDIR)\parseSd.obj" -@erase "$(INTDIR)\Partition.obj" -@erase "$(INTDIR)\PosixStorage.obj" -@erase "$(INTDIR)\Recognizer.obj" -@erase "$(INTDIR)\RewindStorageObject.obj" -@erase "$(INTDIR)\Sd.obj" -@erase "$(INTDIR)\SdText.obj" -@erase "$(INTDIR)\SearchResultMessageArg.obj" -@erase "$(INTDIR)\SGMLApplication.obj" -@erase "$(INTDIR)\SgmlParser.obj" -@erase "$(INTDIR)\ShortReferenceMap.obj" -@erase "$(INTDIR)\SJISCodingSystem.obj" -@erase "$(INTDIR)\SOEntityCatalog.obj" -@erase "$(INTDIR)\splib.obj" -@erase "$(INTDIR)\StdioStorage.obj" -@erase "$(INTDIR)\StorageManager.obj" -@erase "$(INTDIR)\StringVectorMessageArg.obj" -@erase "$(INTDIR)\Syntax.obj" -@erase "$(INTDIR)\Text.obj" -@erase "$(INTDIR)\TokenMessageArg.obj" -@erase "$(INTDIR)\TranslateCodingSystem.obj" -@erase "$(INTDIR)\TrieBuilder.obj" -@erase "$(INTDIR)\TypeId.obj" -@erase "$(INTDIR)\Undo.obj" -@erase "$(INTDIR)\UnicodeCodingSystem.obj" -@erase "$(INTDIR)\UnivCharsetDesc.obj" -@erase "$(INTDIR)\URLStorage.obj" -@erase "$(INTDIR)\UTF8CodingSystem.obj" -@erase "$(INTDIR)\vc40.pdb" -@erase "$(INTDIR)\Win32CodingSystem.obj" -@erase "$(INTDIR)\WinApp.obj" -@erase "$(INTDIR)\WinInetStorage.obj" -@erase "$(INTDIR)\xentmgr_inst.obj" -@erase "$(INTDIR)\XMLCodingSystem.obj" -@erase "$(OUTDIR)\sp133d.exp" -@erase "$(OUTDIR)\sp133d.lib" -@erase "$(OUTDIR)\sp133d.pdb" -@erase ".\dbgbin\sp133d.dll" -@erase ".\dbgbin\sp133d.ilk" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "include" /I "generic" /D "_DEBUG" /D "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /Yu"splib.h" /c CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "include" /I "generic" /D "_DEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yu"splib.h" /Fo"$(INTDIR)/"\ /Fd"$(INTDIR)/" /c CPP_OBJS=.\lib\Debug/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< MTL=mktyplib.exe # ADD BASE MTL /nologo /D "_DEBUG" /win32 # ADD MTL /nologo /D "_DEBUG" /win32 MTL_PROJ=/nologo /D "_DEBUG" /win32 RSC=rc.exe # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" RSC_PROJ=/l 0x809 /fo"$(INTDIR)/lib.res" /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/lib.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 # ADD LINK32 wininet.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"dbgbin/sp133d.dll" LINK32_FLAGS=wininet.lib wsock32.lib kernel32.lib user32.lib gdi32.lib\ winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib\ uuid.lib /nologo /subsystem:windows /dll /incremental:yes\ /pdb:"$(OUTDIR)/sp133d.pdb" /debug /machine:I386 /out:"dbgbin/sp133d.dll"\ /implib:"$(OUTDIR)/sp133d.lib" LINK32_OBJS= \ "$(INTDIR)\Allocator.obj" \ "$(INTDIR)\app_inst.obj" \ "$(INTDIR)\arc_inst.obj" \ "$(INTDIR)\ArcEngine.obj" \ "$(INTDIR)\assert.obj" \ "$(INTDIR)\Attribute.obj" \ "$(INTDIR)\Big5CodingSystem.obj" \ "$(INTDIR)\CharsetDecl.obj" \ "$(INTDIR)\CharsetInfo.obj" \ "$(INTDIR)\CharsetRegistry.obj" \ "$(INTDIR)\CmdLineApp.obj" \ "$(INTDIR)\CodingSystem.obj" \ "$(INTDIR)\CodingSystemKit.obj" \ "$(INTDIR)\ConsoleOutput.obj" \ "$(INTDIR)\ContentState.obj" \ "$(INTDIR)\ContentToken.obj" \ "$(INTDIR)\DescriptorManager.obj" \ "$(INTDIR)\Dtd.obj" \ "$(INTDIR)\ElementType.obj" \ "$(INTDIR)\Entity.obj" \ "$(INTDIR)\EntityApp.obj" \ "$(INTDIR)\EntityCatalog.obj" \ "$(INTDIR)\EntityDecl.obj" \ "$(INTDIR)\EntityManager.obj" \ "$(INTDIR)\entmgr_inst.obj" \ "$(INTDIR)\ErrnoMessageArg.obj" \ "$(INTDIR)\ErrorCountEventHandler.obj" \ "$(INTDIR)\EUCJPCodingSystem.obj" \ "$(INTDIR)\Event.obj" \ "$(INTDIR)\EventGenerator.obj" \ "$(INTDIR)\ExtendEntityManager.obj" \ "$(INTDIR)\ExternalId.obj" \ "$(INTDIR)\Fixed2CodingSystem.obj" \ "$(INTDIR)\GenericEventHandler.obj" \ "$(INTDIR)\Group.obj" \ "$(INTDIR)\Hash.obj" \ "$(INTDIR)\Id.obj" \ "$(INTDIR)\IdentityCodingSystem.obj" \ "$(INTDIR)\IListBase.obj" \ "$(INTDIR)\InputSource.obj" \ "$(INTDIR)\InternalInputSource.obj" \ "$(INTDIR)\lib.res" \ "$(INTDIR)\Link.obj" \ "$(INTDIR)\LinkProcess.obj" \ "$(INTDIR)\LiteralStorage.obj" \ "$(INTDIR)\Location.obj" \ "$(INTDIR)\Lpd.obj" \ "$(INTDIR)\Markup.obj" \ "$(INTDIR)\Message.obj" \ "$(INTDIR)\MessageArg.obj" \ "$(INTDIR)\MessageEventHandler.obj" \ "$(INTDIR)\MessageFormatter.obj" \ "$(INTDIR)\MessageReporter.obj" \ "$(INTDIR)\MessageTable.obj" \ "$(INTDIR)\ModeInfo.obj" \ "$(INTDIR)\Notation.obj" \ "$(INTDIR)\NotationStorage.obj" \ "$(INTDIR)\NumericCharRefOrigin.obj" \ "$(INTDIR)\OffsetOrderedList.obj" \ "$(INTDIR)\OpenElement.obj" \ "$(INTDIR)\OutputByteStream.obj" \ "$(INTDIR)\OutputCharStream.obj" \ "$(INTDIR)\OutputState.obj" \ "$(INTDIR)\Param.obj" \ "$(INTDIR)\parseAttribute.obj" \ "$(INTDIR)\parseCommon.obj" \ "$(INTDIR)\parseDecl.obj" \ "$(INTDIR)\parseInstance.obj" \ "$(INTDIR)\parseMode.obj" \ "$(INTDIR)\parseParam.obj" \ "$(INTDIR)\Parser.obj" \ "$(INTDIR)\parser_inst.obj" \ "$(INTDIR)\ParserApp.obj" \ "$(INTDIR)\ParserEventGeneratorKit.obj" \ "$(INTDIR)\ParserMessages.obj" \ "$(INTDIR)\ParserOptions.obj" \ "$(INTDIR)\ParserState.obj" \ "$(INTDIR)\parseSd.obj" \ "$(INTDIR)\Partition.obj" \ "$(INTDIR)\PosixStorage.obj" \ "$(INTDIR)\Recognizer.obj" \ "$(INTDIR)\RewindStorageObject.obj" \ "$(INTDIR)\Sd.obj" \ "$(INTDIR)\SdText.obj" \ "$(INTDIR)\SearchResultMessageArg.obj" \ "$(INTDIR)\SGMLApplication.obj" \ "$(INTDIR)\SgmlParser.obj" \ "$(INTDIR)\ShortReferenceMap.obj" \ "$(INTDIR)\SJISCodingSystem.obj" \ "$(INTDIR)\SOEntityCatalog.obj" \ "$(INTDIR)\splib.obj" \ "$(INTDIR)\StdioStorage.obj" \ "$(INTDIR)\StorageManager.obj" \ "$(INTDIR)\StringVectorMessageArg.obj" \ "$(INTDIR)\Syntax.obj" \ "$(INTDIR)\Text.obj" \ "$(INTDIR)\TokenMessageArg.obj" \ "$(INTDIR)\TranslateCodingSystem.obj" \ "$(INTDIR)\TrieBuilder.obj" \ "$(INTDIR)\TypeId.obj" \ "$(INTDIR)\Undo.obj" \ "$(INTDIR)\UnicodeCodingSystem.obj" \ "$(INTDIR)\UnivCharsetDesc.obj" \ "$(INTDIR)\URLStorage.obj" \ "$(INTDIR)\UTF8CodingSystem.obj" \ "$(INTDIR)\Win32CodingSystem.obj" \ "$(INTDIR)\WinApp.obj" \ "$(INTDIR)\WinInetStorage.obj" \ "$(INTDIR)\xentmgr_inst.obj" \ "$(INTDIR)\XMLCodingSystem.obj" ".\dbgbin\sp133d.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "nsgmls - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "nsgmls\Release" # PROP BASE Intermediate_Dir "nsgmls\Release" # PROP BASE Target_Dir "nsgmls" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "nsgmls\Release" # PROP Intermediate_Dir "nsgmls\Release" # PROP Target_Dir "nsgmls" OUTDIR=.\nsgmls\Release INTDIR=.\nsgmls\Release ALL : "lib - Win32 Release" ".\bin\nsgmls.exe" CLEAN : -@erase "$(INTDIR)\nsgmls.obj" -@erase "$(INTDIR)\nsgmls.res" -@erase "$(INTDIR)\nsgmls_inst.obj" -@erase "$(INTDIR)\RastEventHandler.obj" -@erase "$(INTDIR)\SgmlsEventHandler.obj" -@erase "$(INTDIR)\StringSet.obj" -@erase ".\bin\nsgmls.exe" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "include" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /c CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "include" /D "NDEBUG" /D "_CONSOLE" /D\ "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE"\ /Fp"$(INTDIR)/nsgmls.pch" /YX /Fo"$(INTDIR)/" /c CPP_OBJS=.\nsgmls\Release/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< RSC=rc.exe # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" RSC_PROJ=/l 0x809 /fo"$(INTDIR)/nsgmls.res" /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/nsgmls.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 /out:"bin/nsgmls.exe" # SUBTRACT LINK32 /profile LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\ /subsystem:console /incremental:no /pdb:"$(OUTDIR)/nsgmls.pdb" /machine:I386\ /out:"bin/nsgmls.exe" LINK32_OBJS= \ "$(INTDIR)\nsgmls.obj" \ "$(INTDIR)\nsgmls.res" \ "$(INTDIR)\nsgmls_inst.obj" \ "$(INTDIR)\RastEventHandler.obj" \ "$(INTDIR)\SgmlsEventHandler.obj" \ "$(INTDIR)\StringSet.obj" \ ".\lib\Release\sp133.lib" ".\bin\nsgmls.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "nsgmls - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "nsgmls\Debug" # PROP BASE Intermediate_Dir "nsgmls\Debug" # PROP BASE Target_Dir "nsgmls" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "nsgmls\Debug" # PROP Intermediate_Dir "nsgmls\Debug" # PROP Target_Dir "nsgmls" OUTDIR=.\nsgmls\Debug INTDIR=.\nsgmls\Debug ALL : "lib - Win32 Debug" ".\dbgbin\nsgmls.exe" CLEAN : -@erase "$(INTDIR)\nsgmls.obj" -@erase "$(INTDIR)\nsgmls.res" -@erase "$(INTDIR)\nsgmls_inst.obj" -@erase "$(INTDIR)\RastEventHandler.obj" -@erase "$(INTDIR)\SgmlsEventHandler.obj" -@erase "$(INTDIR)\StringSet.obj" -@erase "$(INTDIR)\vc40.idb" -@erase "$(INTDIR)\vc40.pdb" -@erase "$(OUTDIR)\nsgmls.pdb" -@erase ".\dbgbin\nsgmls.exe" -@erase ".\dbgbin\nsgmls.ilk" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /c CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /D "_DEBUG" /D\ "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE"\ /Fp"$(INTDIR)/nsgmls.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c CPP_OBJS=.\nsgmls\Debug/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< RSC=rc.exe # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" RSC_PROJ=/l 0x809 /fo"$(INTDIR)/nsgmls.res" /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/nsgmls.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"dbgbin/nsgmls.exe" LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\ /subsystem:console /incremental:yes /pdb:"$(OUTDIR)/nsgmls.pdb" /debug\ /machine:I386 /out:"dbgbin/nsgmls.exe" LINK32_OBJS= \ "$(INTDIR)\nsgmls.obj" \ "$(INTDIR)\nsgmls.res" \ "$(INTDIR)\nsgmls_inst.obj" \ "$(INTDIR)\RastEventHandler.obj" \ "$(INTDIR)\SgmlsEventHandler.obj" \ "$(INTDIR)\StringSet.obj" \ ".\lib\Debug\sp133d.lib" ".\dbgbin\nsgmls.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "spam - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "spam\Release" # PROP BASE Intermediate_Dir "spam\Release" # PROP BASE Target_Dir "spam" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "spam\Release" # PROP Intermediate_Dir "spam\Release" # PROP Target_Dir "spam" OUTDIR=.\spam\Release INTDIR=.\spam\Release ALL : "lib - Win32 Release" ".\bin\spam.exe" CLEAN : -@erase "$(INTDIR)\CopyEventHandler.obj" -@erase "$(INTDIR)\MarkupEventHandler.obj" -@erase "$(INTDIR)\spam.obj" -@erase "$(INTDIR)\spam.res" -@erase "$(INTDIR)\spam_inst.obj" -@erase ".\bin\spam.exe" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "include" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /c CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "include" /D "NDEBUG" /D "_CONSOLE" /D\ "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE"\ /Fp"$(INTDIR)/spam.pch" /YX /Fo"$(INTDIR)/" /c CPP_OBJS=.\spam\Release/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< RSC=rc.exe # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" RSC_PROJ=/l 0x809 /fo"$(INTDIR)/spam.res" /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/spam.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 /out:"bin/spam.exe" # SUBTRACT LINK32 /profile LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\ /subsystem:console /incremental:no /pdb:"$(OUTDIR)/spam.pdb" /machine:I386\ /out:"bin/spam.exe" LINK32_OBJS= \ "$(INTDIR)\CopyEventHandler.obj" \ "$(INTDIR)\MarkupEventHandler.obj" \ "$(INTDIR)\spam.obj" \ "$(INTDIR)\spam.res" \ "$(INTDIR)\spam_inst.obj" \ ".\lib\Release\sp133.lib" ".\bin\spam.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "spam - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "spam\Debug" # PROP BASE Intermediate_Dir "spam\Debug" # PROP BASE Target_Dir "spam" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "spam\Debug" # PROP Intermediate_Dir "spam\Debug" # PROP Target_Dir "spam" OUTDIR=.\spam\Debug INTDIR=.\spam\Debug ALL : "lib - Win32 Debug" ".\dbgbin\spam.exe" CLEAN : -@erase "$(INTDIR)\CopyEventHandler.obj" -@erase "$(INTDIR)\MarkupEventHandler.obj" -@erase "$(INTDIR)\spam.obj" -@erase "$(INTDIR)\spam.res" -@erase "$(INTDIR)\spam_inst.obj" -@erase "$(INTDIR)\vc40.idb" -@erase "$(INTDIR)\vc40.pdb" -@erase "$(OUTDIR)\spam.pdb" -@erase ".\dbgbin\spam.exe" -@erase ".\dbgbin\spam.ilk" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /c CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /D "_DEBUG" /D\ "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE"\ /Fp"$(INTDIR)/spam.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c CPP_OBJS=.\spam\Debug/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< RSC=rc.exe # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" RSC_PROJ=/l 0x809 /fo"$(INTDIR)/spam.res" /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/spam.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"dbgbin/spam.exe" LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\ /subsystem:console /incremental:yes /pdb:"$(OUTDIR)/spam.pdb" /debug\ /machine:I386 /out:"dbgbin/spam.exe" LINK32_OBJS= \ "$(INTDIR)\CopyEventHandler.obj" \ "$(INTDIR)\MarkupEventHandler.obj" \ "$(INTDIR)\spam.obj" \ "$(INTDIR)\spam.res" \ "$(INTDIR)\spam_inst.obj" \ ".\lib\Debug\sp133d.lib" ".\dbgbin\spam.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "spent - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "spent\Release" # PROP BASE Intermediate_Dir "spent\Release" # PROP BASE Target_Dir "spent" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "spent\Release" # PROP Intermediate_Dir "spent\Release" # PROP Target_Dir "spent" OUTDIR=.\spent\Release INTDIR=.\spent\Release ALL : "lib - Win32 Release" ".\bin\spent.exe" CLEAN : -@erase "$(INTDIR)\spent.obj" -@erase ".\bin\spent.exe" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "include" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /c CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "include" /D "NDEBUG" /D "_CONSOLE" /D\ "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE"\ /Fp"$(INTDIR)/spent.pch" /YX /Fo"$(INTDIR)/" /c CPP_OBJS=.\spent\Release/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< RSC=rc.exe # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/spent.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 /out:"bin/spent.exe" # SUBTRACT LINK32 /profile LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\ /subsystem:console /incremental:no /pdb:"$(OUTDIR)/spent.pdb" /machine:I386\ /out:"bin/spent.exe" LINK32_OBJS= \ "$(INTDIR)\spent.obj" \ ".\lib\Release\sp133.lib" ".\bin\spent.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "spent - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "spent\Debug" # PROP BASE Intermediate_Dir "spent\Debug" # PROP BASE Target_Dir "spent" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "spent\Debug" # PROP Intermediate_Dir "spent\Debug" # PROP Target_Dir "spent" OUTDIR=.\spent\Debug INTDIR=.\spent\Debug ALL : "lib - Win32 Debug" ".\dbgbin\spent.exe" CLEAN : -@erase "$(INTDIR)\spent.obj" -@erase "$(INTDIR)\vc40.idb" -@erase "$(INTDIR)\vc40.pdb" -@erase "$(OUTDIR)\spent.pdb" -@erase ".\dbgbin\spent.exe" -@erase ".\dbgbin\spent.ilk" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /c CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /D "_DEBUG" /D\ "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE"\ /Fp"$(INTDIR)/spent.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c CPP_OBJS=.\spent\Debug/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< RSC=rc.exe # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/spent.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"dbgbin/spent.exe" LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\ /subsystem:console /incremental:yes /pdb:"$(OUTDIR)/spent.pdb" /debug\ /machine:I386 /out:"dbgbin/spent.exe" LINK32_OBJS= \ "$(INTDIR)\spent.obj" \ ".\lib\Debug\sp133d.lib" ".\dbgbin\spent.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "sgmlnorm - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "sgmlnorm\Release" # PROP BASE Intermediate_Dir "sgmlnorm\Release" # PROP BASE Target_Dir "sgmlnorm" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "sgmlnorm\Release" # PROP Intermediate_Dir "sgmlnorm\Release" # PROP Target_Dir "sgmlnorm" OUTDIR=.\sgmlnorm\Release INTDIR=.\sgmlnorm\Release ALL : "lib - Win32 Release" ".\bin\sgmlnorm.exe" CLEAN : -@erase "$(INTDIR)\SGMLGenerator.obj" -@erase "$(INTDIR)\sgmlnorm.obj" -@erase ".\bin\sgmlnorm.exe" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "include" /I "generic" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /c CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "include" /I "generic" /D "NDEBUG" /D\ "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE"\ /Fp"$(INTDIR)/sgmlnorm.pch" /YX /Fo"$(INTDIR)/" /c CPP_OBJS=.\sgmlnorm\Release/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< RSC=rc.exe # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/sgmlnorm.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 /out:"bin/sgmlnorm.exe" # SUBTRACT LINK32 /profile LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\ /subsystem:console /incremental:no /pdb:"$(OUTDIR)/sgmlnorm.pdb" /machine:I386\ /out:"bin/sgmlnorm.exe" LINK32_OBJS= \ "$(INTDIR)\SGMLGenerator.obj" \ "$(INTDIR)\sgmlnorm.obj" \ ".\lib\Release\sp133.lib" ".\bin\sgmlnorm.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "sgmlnorm - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "sgmlnorm\Debug" # PROP BASE Intermediate_Dir "sgmlnorm\Debug" # PROP BASE Target_Dir "sgmlnorm" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "sgmlnorm\Debug" # PROP Intermediate_Dir "sgmlnorm\Debug" # PROP Target_Dir "sgmlnorm" OUTDIR=.\sgmlnorm\Debug INTDIR=.\sgmlnorm\Debug ALL : "lib - Win32 Debug" ".\dbgbin\sgmlnorm.exe" CLEAN : -@erase "$(INTDIR)\SGMLGenerator.obj" -@erase "$(INTDIR)\sgmlnorm.obj" -@erase "$(INTDIR)\vc40.idb" -@erase "$(INTDIR)\vc40.pdb" -@erase "$(OUTDIR)\sgmlnorm.pdb" -@erase ".\dbgbin\sgmlnorm.exe" -@erase ".\dbgbin\sgmlnorm.ilk" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /I "generic" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /c CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /I "generic" /D "_DEBUG"\ /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE"\ /Fp"$(INTDIR)/sgmlnorm.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c CPP_OBJS=.\sgmlnorm\Debug/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< RSC=rc.exe # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/sgmlnorm.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"dbgbin/sgmlnorm.exe" LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\ /subsystem:console /incremental:yes /pdb:"$(OUTDIR)/sgmlnorm.pdb" /debug\ /machine:I386 /out:"dbgbin/sgmlnorm.exe" LINK32_OBJS= \ "$(INTDIR)\SGMLGenerator.obj" \ "$(INTDIR)\sgmlnorm.obj" \ ".\lib\Debug\sp133d.lib" ".\dbgbin\sgmlnorm.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "all - Win32 Release" # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "all\Release" # PROP BASE Intermediate_Dir "all\Release" # PROP BASE Target_Dir "all" # PROP BASE Cmd_Line "NMAKE /f all.mak" # PROP BASE Rebuild_Opt "/a" # PROP BASE Target_File "all\all.exe" # PROP BASE Bsc_Name "all\all.bsc" # PROP Use_Debug_Libraries 0 # PROP Output_Dir "all\Release" # PROP Intermediate_Dir "all\Release" # PROP Target_Dir "all" # PROP Cmd_Line "" # PROP Rebuild_Opt "" # PROP Target_File "all" # PROP Bsc_Name "" OUTDIR=.\all\Release INTDIR=.\all\Release ALL : "sx - Win32 Release" "spent - Win32 Release" "spam - Win32 Release"\ "sgmlnorm - Win32 Release" "nsgmls - Win32 Release" "lib - Win32 Release" CLEAN : -@erase "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" !ELSEIF "$(CFG)" == "all - Win32 Debug" # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "all\Debug" # PROP BASE Intermediate_Dir "all\Debug" # PROP BASE Target_Dir "all" # PROP BASE Cmd_Line "NMAKE /f all.mak" # PROP BASE Rebuild_Opt "/a" # PROP BASE Target_File "all\all.exe" # PROP BASE Bsc_Name "all\all.bsc" # PROP Use_Debug_Libraries 1 # PROP Output_Dir "all\Debug" # PROP Intermediate_Dir "all\Debug" # PROP Target_Dir "all" # PROP Cmd_Line "" # PROP Rebuild_Opt "" # PROP Target_File "all" # PROP Bsc_Name "" OUTDIR=.\all\Debug INTDIR=.\all\Debug ALL : "sx - Win32 Debug" "spent - Win32 Debug" "spam - Win32 Debug"\ "sgmlnorm - Win32 Debug" "nsgmls - Win32 Debug" "lib - Win32 Debug" CLEAN : -@erase "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" !ELSEIF "$(CFG)" == "sx - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "sx\Release" # PROP BASE Intermediate_Dir "sx\Release" # PROP BASE Target_Dir "sx" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "sx\Release" # PROP Intermediate_Dir "sx\Release" # PROP Target_Dir "sx" OUTDIR=.\sx\Release INTDIR=.\sx\Release ALL : "lib - Win32 Release" ".\bin\sx.exe" CLEAN : -@erase "$(INTDIR)\sx.obj" -@erase "$(INTDIR)\sx.res" -@erase "$(INTDIR)\sx_inst.obj" -@erase "$(INTDIR)\XmlOutputEventHandler.obj" -@erase ".\bin\sx.exe" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /c CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "include" /D "NDEBUG" /D "WIN32" /D\ "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE"\ /Fp"$(INTDIR)/sx.pch" /YX /Fo"$(INTDIR)/" /c CPP_OBJS=.\sx\Release/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< RSC=rc.exe # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" RSC_PROJ=/l 0x809 /fo"$(INTDIR)/sx.res" /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/sx.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 /out:"bin/sx.exe" LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\ /subsystem:console /incremental:no /pdb:"$(OUTDIR)/sx.pdb" /machine:I386\ /out:"bin/sx.exe" LINK32_OBJS= \ "$(INTDIR)\sx.obj" \ "$(INTDIR)\sx.res" \ "$(INTDIR)\sx_inst.obj" \ "$(INTDIR)\XmlOutputEventHandler.obj" \ ".\lib\Release\sp133.lib" ".\bin\sx.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "sx - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "sx\Debug" # PROP BASE Intermediate_Dir "sx\Debug" # PROP BASE Target_Dir "sx" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "sx\Debug" # PROP Intermediate_Dir "sx\Debug" # PROP Target_Dir "sx" OUTDIR=.\sx\Debug INTDIR=.\sx\Debug ALL : "lib - Win32 Debug" ".\dbgbin\sx.exe" CLEAN : -@erase "$(INTDIR)\sx.obj" -@erase "$(INTDIR)\sx.res" -@erase "$(INTDIR)\sx_inst.obj" -@erase "$(INTDIR)\vc40.idb" -@erase "$(INTDIR)\vc40.pdb" -@erase "$(INTDIR)\XmlOutputEventHandler.obj" -@erase "$(OUTDIR)\sx.pdb" -@erase ".\dbgbin\sx.exe" -@erase ".\dbgbin\sx.ilk" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /c CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I "include" /D "_DEBUG" /D "WIN32"\ /D "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE"\ /Fp"$(INTDIR)/sx.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c CPP_OBJS=.\sx\Debug/ CPP_SBRS=.\. .c{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_OBJS)}.obj: $(CPP) $(CPP_PROJ) $< .c{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cpp{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< .cxx{$(CPP_SBRS)}.sbr: $(CPP) $(CPP_PROJ) $< RSC=rc.exe # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" RSC_PROJ=/l 0x809 /fo"$(INTDIR)/sx.res" /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo BSC32_FLAGS=/nologo /o"$(OUTDIR)/sx.bsc" BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"dbgbin/sx.exe" LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\ /subsystem:console /incremental:yes /pdb:"$(OUTDIR)/sx.pdb" /debug\ /machine:I386 /out:"dbgbin/sx.exe" LINK32_OBJS= \ "$(INTDIR)\sx.obj" \ "$(INTDIR)\sx.res" \ "$(INTDIR)\sx_inst.obj" \ "$(INTDIR)\XmlOutputEventHandler.obj" \ ".\lib\Debug\sp133d.lib" ".\dbgbin\sx.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ENDIF ################################################################################ # Begin Target # Name "lib - Win32 Release" # Name "lib - Win32 Debug" !IF "$(CFG)" == "lib - Win32 Release" !ELSEIF "$(CFG)" == "lib - Win32 Debug" !ENDIF ################################################################################ # Begin Source File SOURCE=.\lib\xentmgr_inst.cxx DEP_CPP_XENTM=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\Mutex.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OffsetOrderedList.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ !IF "$(CFG)" == "lib - Win32 Release" # ADD CPP /Yu"splib.h" "$(INTDIR)\xentmgr_inst.obj" : $(SOURCE) $(DEP_CPP_XENTM) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "include" /I "generic" /D "NDEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yu"splib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "lib - Win32 Debug" # ADD CPP /Yu"splib.h" "$(INTDIR)\xentmgr_inst.obj" : $(SOURCE) $(DEP_CPP_XENTM) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "include" /I "generic" /D "_DEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yu"splib.h" /Fo"$(INTDIR)/"\ /Fd"$(INTDIR)/" /c $(SOURCE) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\URLStorage.cxx DEP_CPP_URLST=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ ".\lib\URLStorageMessages.h"\ {$(INCLUDE)}"\sys\TYPES.H"\ "$(INTDIR)\URLStorage.obj" : $(SOURCE) $(DEP_CPP_URLST) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\UnivCharsetDesc.cxx DEP_CPP_UNIVC=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\UnivCharsetDesc.obj" : $(SOURCE) $(DEP_CPP_UNIVC) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\UnicodeCodingSystem.cxx DEP_CPP_UNICO=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\UnicodeCodingSystem.obj" : $(SOURCE) $(DEP_CPP_UNICO) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Undo.cxx DEP_CPP_UNDO_=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Undo.obj" : $(SOURCE) $(DEP_CPP_UNDO_) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\TypeId.cxx DEP_CPP_TYPEI=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\TypeId.obj" : $(SOURCE) $(DEP_CPP_TYPEI) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\TrieBuilder.cxx DEP_CPP_TRIEB=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\TrieBuilder.obj" : $(SOURCE) $(DEP_CPP_TRIEB) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\TokenMessageArg.h !IF "$(CFG)" == "lib - Win32 Release" !ELSEIF "$(CFG)" == "lib - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\TokenMessageArg.cxx DEP_CPP_TOKEN=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\TokenMessageArg.obj" : $(SOURCE) $(DEP_CPP_TOKEN) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\token.h !IF "$(CFG)" == "lib - Win32 Release" !ELSEIF "$(CFG)" == "lib - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Text.cxx DEP_CPP_TEXT_=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Text.obj" : $(SOURCE) $(DEP_CPP_TEXT_) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Syntax.cxx DEP_CPP_SYNTA=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Syntax.obj" : $(SOURCE) $(DEP_CPP_SYNTA) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\StorageManager.cxx DEP_CPP_STORA=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\StorageManager.obj" : $(SOURCE) $(DEP_CPP_STORA) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\StdioStorage.cxx DEP_CPP_STDIO=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StdioStorageMessages.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\StdioStorage.obj" : $(SOURCE) $(DEP_CPP_STDIO) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\SOEntityCatalog.cxx DEP_CPP_SOENT=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\CatalogMessages.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\SOEntityCatalog.obj" : $(SOURCE) $(DEP_CPP_SOENT) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\SJISCodingSystem.cxx DEP_CPP_SJISC=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\SJISCodingSystem.obj" : $(SOURCE) $(DEP_CPP_SJISC) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ShortReferenceMap.cxx DEP_CPP_SHORT=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ShortReferenceMap.obj" : $(SOURCE) $(DEP_CPP_SHORT) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\SgmlParser.cxx DEP_CPP_SGMLP=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\SgmlParser.obj" : $(SOURCE) $(DEP_CPP_SGMLP) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\SearchResultMessageArg.cxx DEP_CPP_SEARC=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\SearchResultMessageArg.obj" : $(SOURCE) $(DEP_CPP_SEARC) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\SdText.cxx DEP_CPP_SDTEX=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\SdText.obj" : $(SOURCE) $(DEP_CPP_SDTEX) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Sd.cxx DEP_CPP_SD_CX=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Sd.obj" : $(SOURCE) $(DEP_CPP_SD_CX) "$(INTDIR)" "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\RewindStorageObject.cxx DEP_CPP_REWIN=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\RewindStorageObject.obj" : $(SOURCE) $(DEP_CPP_REWIN) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Recognizer.cxx DEP_CPP_RECOG=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Recognizer.obj" : $(SOURCE) $(DEP_CPP_RECOG) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\PosixStorage.cxx DEP_CPP_POSIX=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\PosixStorageMessages.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ {$(INCLUDE)}"\sys\STAT.H"\ {$(INCLUDE)}"\sys\TYPES.H"\ "$(INTDIR)\PosixStorage.obj" : $(SOURCE) $(DEP_CPP_POSIX) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Partition.cxx DEP_CPP_PARTI=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Partition.obj" : $(SOURCE) $(DEP_CPP_PARTI) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\parseSd.cxx DEP_CPP_PARSE=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\parseSd.obj" : $(SOURCE) $(DEP_CPP_PARSE) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ParserState.cxx DEP_CPP_PARSER=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ParserState.obj" : $(SOURCE) $(DEP_CPP_PARSER) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ParserOptions.cxx DEP_CPP_PARSERO=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ParserOptions.obj" : $(SOURCE) $(DEP_CPP_PARSERO) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ParserMessages.cxx DEP_CPP_PARSERM=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ParserMessages.obj" : $(SOURCE) $(DEP_CPP_PARSERM) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\parser_inst.cxx DEP_CPP_PARSER_=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ !IF "$(CFG)" == "lib - Win32 Release" # ADD CPP /Yu"splib.h" "$(INTDIR)\parser_inst.obj" : $(SOURCE) $(DEP_CPP_PARSER_) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "include" /I "generic" /D "NDEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yu"splib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "lib - Win32 Debug" # ADD CPP /Yu"splib.h" "$(INTDIR)\parser_inst.obj" : $(SOURCE) $(DEP_CPP_PARSER_) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "include" /I "generic" /D "_DEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yu"splib.h" /Fo"$(INTDIR)/"\ /Fd"$(INTDIR)/" /c $(SOURCE) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Parser.cxx DEP_CPP_PARSER_C=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Parser.obj" : $(SOURCE) $(DEP_CPP_PARSER_C) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\parseParam.cxx DEP_CPP_PARSEP=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\parseParam.obj" : $(SOURCE) $(DEP_CPP_PARSEP) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\parseMode.cxx DEP_CPP_PARSEM=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\parseMode.obj" : $(SOURCE) $(DEP_CPP_PARSEM) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\parseInstance.cxx DEP_CPP_PARSEI=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\parseInstance.obj" : $(SOURCE) $(DEP_CPP_PARSEI) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\parseDecl.cxx DEP_CPP_PARSED=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\parseDecl.obj" : $(SOURCE) $(DEP_CPP_PARSED) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\parseCommon.cxx DEP_CPP_PARSEC=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\parseCommon.obj" : $(SOURCE) $(DEP_CPP_PARSEC) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\parseAttribute.cxx DEP_CPP_PARSEA=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\parseAttribute.obj" : $(SOURCE) $(DEP_CPP_PARSEA) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Param.cxx DEP_CPP_PARAM=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Param.obj" : $(SOURCE) $(DEP_CPP_PARAM) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\OutputState.cxx DEP_CPP_OUTPU=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\OutputState.obj" : $(SOURCE) $(DEP_CPP_OUTPU) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\OutputCharStream.cxx DEP_CPP_OUTPUT=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\OutputCharStream.obj" : $(SOURCE) $(DEP_CPP_OUTPUT) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\OpenElement.cxx DEP_CPP_OPENE=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\OpenElement.obj" : $(SOURCE) $(DEP_CPP_OPENE) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\OffsetOrderedList.h !IF "$(CFG)" == "lib - Win32 Release" !ELSEIF "$(CFG)" == "lib - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\OffsetOrderedList.cxx DEP_CPP_OFFSE=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\Mutex.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OffsetOrderedList.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\OffsetOrderedList.obj" : $(SOURCE) $(DEP_CPP_OFFSE) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\NumericCharRefOrigin.cxx DEP_CPP_NUMER=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\NumericCharRefOrigin.obj" : $(SOURCE) $(DEP_CPP_NUMER) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Notation.cxx DEP_CPP_NOTAT=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Notation.obj" : $(SOURCE) $(DEP_CPP_NOTAT) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ModeInfo.cxx DEP_CPP_MODEI=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ModeInfo.obj" : $(SOURCE) $(DEP_CPP_MODEI) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\MessageReporter.cxx DEP_CPP_MESSA=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\MessageReporterMessages.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\MessageReporter.obj" : $(SOURCE) $(DEP_CPP_MESSA) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\MessageEventHandler.cxx DEP_CPP_MESSAG=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\MessageEventHandler.obj" : $(SOURCE) $(DEP_CPP_MESSAG) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\MessageArg.cxx DEP_CPP_MESSAGE=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\MessageArg.obj" : $(SOURCE) $(DEP_CPP_MESSAGE) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Message.cxx DEP_CPP_MESSAGE_=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Message.obj" : $(SOURCE) $(DEP_CPP_MESSAGE_) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Markup.cxx DEP_CPP_MARKU=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Markup.obj" : $(SOURCE) $(DEP_CPP_MARKU) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Lpd.cxx DEP_CPP_LPD_C=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Lpd.obj" : $(SOURCE) $(DEP_CPP_LPD_C) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Location.cxx DEP_CPP_LOCAT=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\Mutex.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Location.obj" : $(SOURCE) $(DEP_CPP_LOCAT) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\LiteralStorage.cxx DEP_CPP_LITER=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\LiteralStorage.obj" : $(SOURCE) $(DEP_CPP_LITER) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\LinkProcess.cxx DEP_CPP_LINKP=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\LinkProcess.obj" : $(SOURCE) $(DEP_CPP_LINKP) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Link.cxx DEP_CPP_LINK_=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Link.obj" : $(SOURCE) $(DEP_CPP_LINK_) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\InternalInputSource.cxx DEP_CPP_INTER=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\InternalInputSource.obj" : $(SOURCE) $(DEP_CPP_INTER) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\InputSource.cxx DEP_CPP_INPUT=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\InputSource.obj" : $(SOURCE) $(DEP_CPP_INPUT) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\IListBase.cxx DEP_CPP_ILIST=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\IListBase.obj" : $(SOURCE) $(DEP_CPP_ILIST) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\IdentityCodingSystem.cxx DEP_CPP_IDENT=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\IdentityCodingSystem.obj" : $(SOURCE) $(DEP_CPP_IDENT) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Id.cxx DEP_CPP_ID_CX=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Id.obj" : $(SOURCE) $(DEP_CPP_ID_CX) "$(INTDIR)" "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Hash.cxx DEP_CPP_HASH_=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Hash.obj" : $(SOURCE) $(DEP_CPP_HASH_) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Group.cxx DEP_CPP_GROUP=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Group.obj" : $(SOURCE) $(DEP_CPP_GROUP) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Fixed2CodingSystem.cxx DEP_CPP_FIXED=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Fixed2CodingSystem.obj" : $(SOURCE) $(DEP_CPP_FIXED) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ExternalId.cxx DEP_CPP_EXTER=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ExternalId.obj" : $(SOURCE) $(DEP_CPP_EXTER) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ExtendEntityManager.cxx DEP_CPP_EXTEN=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EntityManagerMessages.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\Mutex.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OffsetOrderedList.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ExtendEntityManager.obj" : $(SOURCE) $(DEP_CPP_EXTEN) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Event.cxx DEP_CPP_EVENT=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Event.obj" : $(SOURCE) $(DEP_CPP_EVENT) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\EUCJPCodingSystem.cxx DEP_CPP_EUCJP=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\EUCJPCodingSystem.obj" : $(SOURCE) $(DEP_CPP_EUCJP) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ErrnoMessageArg.cxx DEP_CPP_ERRNO=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ErrnoMessageArg.obj" : $(SOURCE) $(DEP_CPP_ERRNO) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\entmgr_inst.cxx DEP_CPP_ENTMG=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ !IF "$(CFG)" == "lib - Win32 Release" # ADD CPP /Yu"splib.h" "$(INTDIR)\entmgr_inst.obj" : $(SOURCE) $(DEP_CPP_ENTMG) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "include" /I "generic" /D "NDEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yu"splib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "lib - Win32 Debug" # ADD CPP /Yu"splib.h" "$(INTDIR)\entmgr_inst.obj" : $(SOURCE) $(DEP_CPP_ENTMG) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "include" /I "generic" /D "_DEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yu"splib.h" /Fo"$(INTDIR)/"\ /Fd"$(INTDIR)/" /c $(SOURCE) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\EntityManager.cxx DEP_CPP_ENTIT=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\EntityManager.obj" : $(SOURCE) $(DEP_CPP_ENTIT) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\EntityDecl.cxx DEP_CPP_ENTITY=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\EntityDecl.obj" : $(SOURCE) $(DEP_CPP_ENTITY) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\EntityCatalog.cxx DEP_CPP_ENTITYC=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\EntityCatalog.obj" : $(SOURCE) $(DEP_CPP_ENTITYC) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Entity.cxx DEP_CPP_ENTITY_=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Entity.obj" : $(SOURCE) $(DEP_CPP_ENTITY_) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ElementType.cxx DEP_CPP_ELEME=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ElementType.obj" : $(SOURCE) $(DEP_CPP_ELEME) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Dtd.cxx DEP_CPP_DTD_C=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Dtd.obj" : $(SOURCE) $(DEP_CPP_DTD_C) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\DescriptorManager.cxx DEP_CPP_DESCR=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\DescriptorManager.obj" : $(SOURCE) $(DEP_CPP_DESCR) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ContentToken.cxx DEP_CPP_CONTE=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ContentToken.obj" : $(SOURCE) $(DEP_CPP_CONTE) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\CharsetRegistry.cxx DEP_CPP_CHARS=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\big5.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\gb2312.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\iso646-jis.h"\ ".\lib\iso8859-2.h"\ ".\lib\iso8859-3.h"\ ".\lib\iso8859-4.h"\ ".\lib\iso8859-5.h"\ ".\lib\iso8859-6.h"\ ".\lib\iso8859-7.h"\ ".\lib\iso8859-8.h"\ ".\lib\iso8859-9.h"\ ".\lib\jis0201.h"\ ".\lib\jis0208.h"\ ".\lib\jis0212.h"\ ".\lib\ksc5601.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\CharsetRegistry.obj" : $(SOURCE) $(DEP_CPP_CHARS) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\CharsetInfo.cxx DEP_CPP_CHARSE=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\CharsetInfo.obj" : $(SOURCE) $(DEP_CPP_CHARSE) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\CharsetDecl.cxx DEP_CPP_CHARSET=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\CharsetDecl.obj" : $(SOURCE) $(DEP_CPP_CHARSET) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Attribute.cxx DEP_CPP_ATTRI=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Attribute.obj" : $(SOURCE) $(DEP_CPP_ATTRI) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\assert.cxx DEP_CPP_ASSER=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\assert.obj" : $(SOURCE) $(DEP_CPP_ASSER) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\app_inst.cxx DEP_CPP_APP_I=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ !IF "$(CFG)" == "lib - Win32 Release" # ADD CPP /Yu"splib.h" "$(INTDIR)\app_inst.obj" : $(SOURCE) $(DEP_CPP_APP_I) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "include" /I "generic" /D "NDEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yu"splib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "lib - Win32 Debug" # ADD CPP /Yu"splib.h" "$(INTDIR)\app_inst.obj" : $(SOURCE) $(DEP_CPP_APP_I) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "include" /I "generic" /D "_DEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yu"splib.h" /Fo"$(INTDIR)/"\ /Fd"$(INTDIR)/" /c $(SOURCE) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Allocator.cxx DEP_CPP_ALLOC=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Allocator.obj" : $(SOURCE) $(DEP_CPP_ALLOC) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ErrorCountEventHandler.cxx DEP_CPP_ERROR=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ErrorCountEventHandler.obj" : $(SOURCE) $(DEP_CPP_ERROR) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Win32CodingSystem.cxx DEP_CPP_WIN32=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Win32CodingSystem.obj" : $(SOURCE) $(DEP_CPP_WIN32) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\UTF8CodingSystem.cxx DEP_CPP_UTF8C=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\UTF8CodingSystem.obj" : $(SOURCE) $(DEP_CPP_UTF8C) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\StringVectorMessageArg.cxx DEP_CPP_STRIN=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\StringVectorMessageArg.obj" : $(SOURCE) $(DEP_CPP_STRIN) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ParserApp.cxx DEP_CPP_PARSERA=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserAppMessages.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ParserApp.obj" : $(SOURCE) $(DEP_CPP_PARSERA) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\EntityApp.cxx DEP_CPP_ENTITYA=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\WinInetStorage.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\EntityApp.obj" : $(SOURCE) $(DEP_CPP_ENTITYA) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\CmdLineApp.cxx DEP_CPP_CMDLI=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\MessageTable.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\CmdLineAppMessages.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ ".\lib\version.h"\ {$(INCLUDE)}"\sys\TYPES.H"\ "$(INTDIR)\CmdLineApp.obj" : $(SOURCE) $(DEP_CPP_CMDLI) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ConsoleOutput.cxx DEP_CPP_CONSO=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ConsoleOutput.obj" : $(SOURCE) $(DEP_CPP_CONSO) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ContentState.cxx DEP_CPP_CONTEN=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ContentState.obj" : $(SOURCE) $(DEP_CPP_CONTEN) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ArcEngine.cxx DEP_CPP_ARCEN=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcEngineMessages.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ArcEngine.obj" : $(SOURCE) $(DEP_CPP_ARCEN) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\arc_inst.cxx DEP_CPP_ARC_I=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ !IF "$(CFG)" == "lib - Win32 Release" # ADD CPP /Yu"splib.h" "$(INTDIR)\arc_inst.obj" : $(SOURCE) $(DEP_CPP_ARC_I) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) /nologo /MD /W3 /GX /O2 /I "include" /I "generic" /D "NDEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yu"splib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) !ELSEIF "$(CFG)" == "lib - Win32 Debug" # ADD CPP /Yu"splib.h" "$(INTDIR)\arc_inst.obj" : $(SOURCE) $(DEP_CPP_ARC_I) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "include" /I "generic" /D "_DEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yu"splib.h" /Fo"$(INTDIR)/"\ /Fd"$(INTDIR)/" /c $(SOURCE) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\splib.cxx DEP_CPP_SPLIB=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ !IF "$(CFG)" == "lib - Win32 Release" # ADD CPP /Yc"splib.h" BuildCmds= \ $(CPP) /nologo /MD /W3 /GX /O2 /I "include" /I "generic" /D "NDEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yc"splib.h" /Fo"$(INTDIR)/" /c\ $(SOURCE) \ "$(INTDIR)\splib.obj" : $(SOURCE) $(DEP_CPP_SPLIB) "$(INTDIR)" $(BuildCmds) "$(INTDIR)\lib.pch" : $(SOURCE) $(DEP_CPP_SPLIB) "$(INTDIR)" $(BuildCmds) !ELSEIF "$(CFG)" == "lib - Win32 Debug" # ADD CPP /Yc"splib.h" BuildCmds= \ $(CPP) /nologo /MDd /W3 /GX /Zi /Od /I "include" /I "generic" /D "_DEBUG" /D\ "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D\ "SP_MULTI_BYTE" /Fp"$(INTDIR)/lib.pch" /Yc"splib.h" /Fo"$(INTDIR)/"\ /Fd"$(INTDIR)/" /c $(SOURCE) \ "$(INTDIR)\splib.obj" : $(SOURCE) $(DEP_CPP_SPLIB) "$(INTDIR)" $(BuildCmds) "$(INTDIR)\lib.pch" : $(SOURCE) $(DEP_CPP_SPLIB) "$(INTDIR)" $(BuildCmds) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\SGMLApplication.cxx DEP_CPP_SGMLA=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\SGMLApplication.obj" : $(SOURCE) $(DEP_CPP_SGMLA) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ParserEventGeneratorKit.cxx DEP_CPP_PARSERE=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\ParserEventGeneratorKit.obj" : $(SOURCE) $(DEP_CPP_PARSERE)\ "$(INTDIR)" "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\GenericEventHandler.cxx DEP_CPP_GENER=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\GenericEventHandler.obj" : $(SOURCE) $(DEP_CPP_GENER) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\EventGenerator.cxx DEP_CPP_EVENTG=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\EventGenerator.obj" : $(SOURCE) $(DEP_CPP_EVENTG) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\lib.rc DEP_RSC_LIB_R=\ ".\lib\ArcEngineMessages.rc"\ ".\lib\CatalogMessages.rc"\ ".\lib\CmdLineAppMessages.rc"\ ".\lib\EntityManagerMessages.rc"\ ".\lib\MessageFormatterMessages.rc"\ ".\lib\MessageReporterMessages.rc"\ ".\lib\ParserAppMessages.rc"\ ".\lib\ParserMessages.rc"\ ".\lib\PosixStorageMessages.rc"\ ".\lib\StdioStorageMessages.rc"\ ".\lib\URLStorageMessages.rc"\ !IF "$(CFG)" == "lib - Win32 Release" "$(INTDIR)\lib.res" : $(SOURCE) $(DEP_RSC_LIB_R) "$(INTDIR)" $(RSC) /l 0x809 /fo"$(INTDIR)/lib.res" /i "lib" /d "NDEBUG" $(SOURCE) !ELSEIF "$(CFG)" == "lib - Win32 Debug" "$(INTDIR)\lib.res" : $(SOURCE) $(DEP_RSC_LIB_R) "$(INTDIR)" $(RSC) /l 0x809 /fo"$(INTDIR)/lib.res" /i "lib" /d "_DEBUG" $(SOURCE) !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\MessageTable.cxx DEP_CPP_MESSAGET=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\MessageTable.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\MessageTable.obj" : $(SOURCE) $(DEP_CPP_MESSAGET) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\WinInetStorage.cxx DEP_CPP_WININ=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\WinInetStorage.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ ".\lib\WinInetStorageMessages.h"\ "$(INTDIR)\WinInetStorage.obj" : $(SOURCE) $(DEP_CPP_WININ) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\ParserMessages.msg !IF "$(CFG)" == "lib - Win32 Release" !ELSEIF "$(CFG)" == "lib - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\arc_inst.m4 !IF "$(CFG)" == "lib - Win32 Release" !ELSEIF "$(CFG)" == "lib - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\app_inst.m4 !IF "$(CFG)" == "lib - Win32 Release" !ELSEIF "$(CFG)" == "lib - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\entmgr_inst.m4 !IF "$(CFG)" == "lib - Win32 Release" !ELSEIF "$(CFG)" == "lib - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\instmac.m4 !IF "$(CFG)" == "lib - Win32 Release" !ELSEIF "$(CFG)" == "lib - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\parser_inst.m4 !IF "$(CFG)" == "lib - Win32 Release" !ELSEIF "$(CFG)" == "lib - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\xentmgr_inst.m4 !IF "$(CFG)" == "lib - Win32 Release" !ELSEIF "$(CFG)" == "lib - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\TranslateCodingSystem.cxx DEP_CPP_TRANS=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TranslateCodingSystem.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\TranslateCodingSystem.obj" : $(SOURCE) $(DEP_CPP_TRANS) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\CodingSystemKit.cxx DEP_CPP_CODIN=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Big5CodingSystem.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TranslateCodingSystem.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\XMLCodingSystem.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\CodingSystemKit.obj" : $(SOURCE) $(DEP_CPP_CODIN) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\CmdLineAppMessages.msg !IF "$(CFG)" == "lib - Win32 Release" !ELSEIF "$(CFG)" == "lib - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\EntityManagerMessages.msg !IF "$(CFG)" == "lib - Win32 Release" !ELSEIF "$(CFG)" == "lib - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\CodingSystem.cxx DEP_CPP_CODING=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\CodingSystem.obj" : $(SOURCE) $(DEP_CPP_CODING) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\Big5CodingSystem.cxx DEP_CPP_BIG5C=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Big5CodingSystem.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\Big5CodingSystem.obj" : $(SOURCE) $(DEP_CPP_BIG5C) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\OutputByteStream.cxx DEP_CPP_OUTPUTB=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ {$(INCLUDE)}"\sys\STAT.H"\ {$(INCLUDE)}"\sys\TYPES.H"\ "$(INTDIR)\OutputByteStream.obj" : $(SOURCE) $(DEP_CPP_OUTPUTB) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\MessageFormatter.cxx DEP_CPP_MESSAGEF=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\MessageFormatterMessages.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\MessageFormatter.obj" : $(SOURCE) $(DEP_CPP_MESSAGEF) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\WinApp.cxx DEP_CPP_WINAP=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\WinApp.h"\ ".\include\WinInetStorage.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ # PROP Exclude_From_Build 0 "$(INTDIR)\WinApp.obj" : $(SOURCE) $(DEP_CPP_WINAP) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\NotationStorage.cxx DEP_CPP_NOTATI=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\NotationStorage.obj" : $(SOURCE) $(DEP_CPP_NOTATI) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\lib\XMLCodingSystem.cxx DEP_CPP_XMLCO=\ ".\generic\EventGenerator.h"\ ".\generic\ParserEventGeneratorKit.h"\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\ArcEngine.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CharsetRegistry.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\ConsoleOutput.h"\ ".\include\constant.h"\ ".\include\ContentState.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\DescriptorManager.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\EUCJPCodingSystem.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Fixed2CodingSystem.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IdentityCodingSystem.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IListIter.h"\ ".\include\IListIterBase.h"\ ".\include\InputSource.h"\ ".\include\InternalInputSource.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\ISetIter.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\List.cxx"\ ".\include\List.h"\ ".\include\ListIter.h"\ ".\include\LiteralStorage.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\NotationStorage.h"\ ".\include\OpenElement.h"\ ".\include\Options.cxx"\ ".\include\Options.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\PosixStorage.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\RewindStorageObject.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SearchResultMessageArg.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\SJISCodingSystem.h"\ ".\include\SOEntityCatalog.h"\ ".\include\sptchar.h"\ ".\include\StdioStorage.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnicodeCodingSystem.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\URLStorage.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\Win32CodingSystem.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\XMLCodingSystem.h"\ ".\include\xnew.h"\ ".\lib\ArcProcessor.h"\ ".\lib\CatalogEntry.h"\ ".\lib\EquivClass.h"\ ".\lib\EventQueue.h"\ ".\lib\events.h"\ ".\lib\Group.h"\ ".\lib\Id.h"\ ".\lib\LpdEntityRef.h"\ ".\lib\MarkupScan.h"\ ".\lib\ModeInfo.h"\ ".\lib\NameToken.h"\ ".\lib\NumericCharRefOrigin.h"\ ".\lib\OutputState.h"\ ".\lib\Param.h"\ ".\lib\Parser.h"\ ".\lib\ParserMessages.h"\ ".\lib\ParserState.h"\ ".\lib\Partition.h"\ ".\lib\Priority.h"\ ".\lib\Recognizer.h"\ ".\lib\SdFormalError.h"\ ".\lib\splib.h"\ ".\lib\splibpch.h"\ ".\lib\SrInfo.h"\ ".\lib\StorageObjectPosition.h"\ ".\lib\StringVectorMessageArg.h"\ ".\lib\token.h"\ ".\lib\TokenMessageArg.h"\ ".\lib\Trie.h"\ ".\lib\TrieBuilder.h"\ ".\lib\Undo.h"\ "$(INTDIR)\XMLCodingSystem.obj" : $(SOURCE) $(DEP_CPP_XMLCO) "$(INTDIR)"\ "$(INTDIR)\lib.pch" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File # End Target ################################################################################ # Begin Target # Name "nsgmls - Win32 Release" # Name "nsgmls - Win32 Debug" !IF "$(CFG)" == "nsgmls - Win32 Release" !ELSEIF "$(CFG)" == "nsgmls - Win32 Debug" !ENDIF ################################################################################ # Begin Project Dependency # Project_Dep_Name "lib" !IF "$(CFG)" == "nsgmls - Win32 Release" "lib - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="lib - Win32 Release" !ELSEIF "$(CFG)" == "nsgmls - Win32 Debug" "lib - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="lib - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Source File SOURCE=.\nsgmls\StringSet.cxx DEP_CPP_STRING=\ ".\include\Boolean.h"\ ".\include\config.h"\ ".\include\Hash.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\xnew.h"\ ".\nsgmls\StringSet.h"\ "$(INTDIR)\StringSet.obj" : $(SOURCE) $(DEP_CPP_STRING) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\nsgmls\SgmlsEventHandler.cxx DEP_CPP_SGMLS=\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\nsgmls\SgmlsEventHandler.h"\ ".\nsgmls\StringSet.h"\ "$(INTDIR)\SgmlsEventHandler.obj" : $(SOURCE) $(DEP_CPP_SGMLS) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\nsgmls\RastEventHandler.cxx DEP_CPP_RASTE=\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CodingSystem.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\nsgmls\RastEventHandler.h"\ ".\nsgmls\RastEventHandlerMessages.h"\ "$(INTDIR)\RastEventHandler.obj" : $(SOURCE) $(DEP_CPP_RASTE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\nsgmls\nsgmls_inst.cxx DEP_CPP_NSGML=\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CodingSystem.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\nsgmls\RastEventHandler.h"\ ".\nsgmls\StringSet.h"\ "$(INTDIR)\nsgmls_inst.obj" : $(SOURCE) $(DEP_CPP_NSGML) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\nsgmls\nsgmls.cxx DEP_CPP_NSGMLS=\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrnoMessageArg.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\IList.h"\ ".\include\IListBase.h"\ ".\include\IQueue.cxx"\ ".\include\IQueue.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\LinkProcess.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageEventHandler.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\sptchar.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\nsgmls\NsgmlsMessages.h"\ ".\nsgmls\RastEventHandler.h"\ ".\nsgmls\SgmlsEventHandler.h"\ ".\nsgmls\StringSet.h"\ "$(INTDIR)\nsgmls.obj" : $(SOURCE) $(DEP_CPP_NSGMLS) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\nsgmls\nsgmls.rc DEP_RSC_NSGMLS_=\ ".\nsgmls\NsgmlsMessages.rc"\ ".\nsgmls\RastEventHandlerMessages.rc"\ !IF "$(CFG)" == "nsgmls - Win32 Release" "$(INTDIR)\nsgmls.res" : $(SOURCE) $(DEP_RSC_NSGMLS_) "$(INTDIR)" $(RSC) /l 0x809 /fo"$(INTDIR)/nsgmls.res" /i "nsgmls" /d "NDEBUG" $(SOURCE) !ELSEIF "$(CFG)" == "nsgmls - Win32 Debug" "$(INTDIR)\nsgmls.res" : $(SOURCE) $(DEP_RSC_NSGMLS_) "$(INTDIR)" $(RSC) /l 0x809 /fo"$(INTDIR)/nsgmls.res" /i "nsgmls" /d "_DEBUG" $(SOURCE) !ENDIF # End Source File # End Target ################################################################################ # Begin Target # Name "spam - Win32 Release" # Name "spam - Win32 Debug" !IF "$(CFG)" == "spam - Win32 Release" !ELSEIF "$(CFG)" == "spam - Win32 Debug" !ENDIF ################################################################################ # Begin Project Dependency # Project_Dep_Name "lib" !IF "$(CFG)" == "spam - Win32 Release" "lib - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="lib - Win32 Release" !ELSEIF "$(CFG)" == "spam - Win32 Debug" "lib - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="lib - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Source File SOURCE=.\spam\spam_inst.cxx DEP_CPP_SPAM_=\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CodingSystem.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spam\CopyEventHandler.h"\ ".\spam\MarkupEventHandler.h"\ "$(INTDIR)\spam_inst.obj" : $(SOURCE) $(DEP_CPP_SPAM_) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\spam\spam.cxx DEP_CPP_SPAM_C=\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\InputSource.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\sptchar.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spam\CopyEventHandler.h"\ ".\spam\MarkupEventHandler.h"\ ".\spam\SpamMessages.h"\ "$(INTDIR)\spam.obj" : $(SOURCE) $(DEP_CPP_SPAM_C) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\spam\MarkupEventHandler.cxx DEP_CPP_MARKUP=\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spam\MarkupEventHandler.h"\ "$(INTDIR)\MarkupEventHandler.obj" : $(SOURCE) $(DEP_CPP_MARKUP) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\spam\CopyEventHandler.cxx DEP_CPP_COPYE=\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CodingSystem.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\spam\CopyEventHandler.h"\ ".\spam\MarkupEventHandler.h"\ "$(INTDIR)\CopyEventHandler.obj" : $(SOURCE) $(DEP_CPP_COPYE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\spam\SpamMessages.msg !IF "$(CFG)" == "spam - Win32 Release" !ELSEIF "$(CFG)" == "spam - Win32 Debug" !ENDIF # End Source File ################################################################################ # Begin Source File SOURCE=.\spam\spam.rc DEP_RSC_SPAM_R=\ ".\spam\SpamMessages.rc"\ !IF "$(CFG)" == "spam - Win32 Release" "$(INTDIR)\spam.res" : $(SOURCE) $(DEP_RSC_SPAM_R) "$(INTDIR)" $(RSC) /l 0x809 /fo"$(INTDIR)/spam.res" /i "spam" /d "NDEBUG" $(SOURCE) !ELSEIF "$(CFG)" == "spam - Win32 Debug" "$(INTDIR)\spam.res" : $(SOURCE) $(DEP_RSC_SPAM_R) "$(INTDIR)" $(RSC) /l 0x809 /fo"$(INTDIR)/spam.res" /i "spam" /d "_DEBUG" $(SOURCE) !ENDIF # End Source File # End Target ################################################################################ # Begin Target # Name "spent - Win32 Release" # Name "spent - Win32 Debug" !IF "$(CFG)" == "spent - Win32 Release" !ELSEIF "$(CFG)" == "spent - Win32 Debug" !ENDIF ################################################################################ # Begin Project Dependency # Project_Dep_Name "lib" !IF "$(CFG)" == "spent - Win32 Release" "lib - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="lib - Win32 Release" !ELSEIF "$(CFG)" == "spent - Win32 Debug" "lib - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="lib - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Source File SOURCE=.\spent\spent.cxx DEP_CPP_SPENT=\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityManager.h"\ ".\include\ExtendEntityManager.h"\ ".\include\InputSource.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ "$(INTDIR)\spent.obj" : $(SOURCE) $(DEP_CPP_SPENT) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\spent\SpentMessages.msg !IF "$(CFG)" == "spent - Win32 Release" !ELSEIF "$(CFG)" == "spent - Win32 Debug" !ENDIF # End Source File # End Target ################################################################################ # Begin Target # Name "sgmlnorm - Win32 Release" # Name "sgmlnorm - Win32 Debug" !IF "$(CFG)" == "sgmlnorm - Win32 Release" !ELSEIF "$(CFG)" == "sgmlnorm - Win32 Debug" !ENDIF ################################################################################ # Begin Project Dependency # Project_Dep_Name "lib" !IF "$(CFG)" == "sgmlnorm - Win32 Release" "lib - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="lib - Win32 Release" !ELSEIF "$(CFG)" == "sgmlnorm - Win32 Debug" "lib - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="lib - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Source File SOURCE=.\sgmlnorm\sgmlnorm.cxx DEP_CPP_SGMLN=\ ".\generic\SGMLApplication.h"\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\GenericEventHandler.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\sgmlnorm\SGMLGenerator.h"\ "$(INTDIR)\sgmlnorm.obj" : $(SOURCE) $(DEP_CPP_SGMLN) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\sgmlnorm\SGMLGenerator.cxx DEP_CPP_SGMLG=\ ".\generic\SGMLApplication.h"\ ".\include\Boolean.h"\ ".\include\CodingSystem.h"\ ".\include\config.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\sgmlnorm\SGMLGenerator.h"\ "$(INTDIR)\SGMLGenerator.obj" : $(SOURCE) $(DEP_CPP_SGMLG) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File # End Target ################################################################################ # Begin Target # Name "all - Win32 Release" # Name "all - Win32 Debug" !IF "$(CFG)" == "all - Win32 Release" ".\all" : CD all !ELSEIF "$(CFG)" == "all - Win32 Debug" ".\all" : CD all !ENDIF ################################################################################ # Begin Project Dependency # Project_Dep_Name "lib" !IF "$(CFG)" == "all - Win32 Release" "lib - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="lib - Win32 Release" !ELSEIF "$(CFG)" == "all - Win32 Debug" "lib - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="lib - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Project Dependency # Project_Dep_Name "nsgmls" !IF "$(CFG)" == "all - Win32 Release" "nsgmls - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="nsgmls - Win32 Release" !ELSEIF "$(CFG)" == "all - Win32 Debug" "nsgmls - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="nsgmls - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Project Dependency # Project_Dep_Name "sgmlnorm" !IF "$(CFG)" == "all - Win32 Release" "sgmlnorm - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="sgmlnorm - Win32 Release" !ELSEIF "$(CFG)" == "all - Win32 Debug" "sgmlnorm - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="sgmlnorm - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Project Dependency # Project_Dep_Name "spam" !IF "$(CFG)" == "all - Win32 Release" "spam - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="spam - Win32 Release" !ELSEIF "$(CFG)" == "all - Win32 Debug" "spam - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="spam - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Project Dependency # Project_Dep_Name "spent" !IF "$(CFG)" == "all - Win32 Release" "spent - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="spent - Win32 Release" !ELSEIF "$(CFG)" == "all - Win32 Debug" "spent - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="spent - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Project Dependency # Project_Dep_Name "sx" !IF "$(CFG)" == "all - Win32 Release" "sx - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="sx - Win32 Release" !ELSEIF "$(CFG)" == "all - Win32 Debug" "sx - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="sx - Win32 Debug" !ENDIF # End Project Dependency # End Target ################################################################################ # Begin Target # Name "sx - Win32 Release" # Name "sx - Win32 Debug" !IF "$(CFG)" == "sx - Win32 Release" !ELSEIF "$(CFG)" == "sx - Win32 Debug" !ENDIF ################################################################################ # Begin Project Dependency # Project_Dep_Name "lib" !IF "$(CFG)" == "sx - Win32 Release" "lib - Win32 Release" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="lib - Win32 Release" !ELSEIF "$(CFG)" == "sx - Win32 Debug" "lib - Win32 Debug" : $(MAKE) /$(MAKEFLAGS) /F ".\SP.mak" CFG="lib - Win32 Debug" !ENDIF # End Project Dependency ################################################################################ # Begin Source File SOURCE=.\sx\sx.cxx DEP_CPP_SX_CX=\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CmdLineApp.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityApp.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\EventsWanted.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\MessageBuilder.h"\ ".\include\MessageFormatter.h"\ ".\include\MessageReporter.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\ParserApp.h"\ ".\include\ParserOptions.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\SgmlParser.h"\ ".\include\ShortReferenceMap.h"\ ".\include\sptchar.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\sx\SxMessages.h"\ ".\sx\XmlOutputEventHandler.h"\ "$(INTDIR)\sx.obj" : $(SOURCE) $(DEP_CPP_SX_CX) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\sx\sx_inst.cxx DEP_CPP_SX_IN=\ ".\include\Boolean.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\InputSource.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\TypeId.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ "$(INTDIR)\sx_inst.obj" : $(SOURCE) $(DEP_CPP_SX_IN) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\sx\XmlOutputEventHandler.cxx DEP_CPP_XMLOU=\ ".\include\Allocator.h"\ ".\include\Attribute.h"\ ".\include\Attributed.h"\ ".\include\Boolean.h"\ ".\include\CharMap.cxx"\ ".\include\CharMap.h"\ ".\include\CharsetDecl.h"\ ".\include\CharsetInfo.h"\ ".\include\CodingSystem.h"\ ".\include\CodingSystemKit.h"\ ".\include\config.h"\ ".\include\constant.h"\ ".\include\ContentToken.h"\ ".\include\CopyOwner.cxx"\ ".\include\CopyOwner.h"\ ".\include\Dtd.h"\ ".\include\ElementType.h"\ ".\include\Entity.h"\ ".\include\EntityCatalog.h"\ ".\include\EntityDecl.h"\ ".\include\EntityManager.h"\ ".\include\ErrorCountEventHandler.h"\ ".\include\Event.h"\ ".\include\ExtendEntityManager.h"\ ".\include\ExternalId.h"\ ".\include\Hash.h"\ ".\include\HashTable.cxx"\ ".\include\HashTable.h"\ ".\include\HashTableItemBase.cxx"\ ".\include\HashTableItemBase.h"\ ".\include\InputSource.h"\ ".\include\ISet.cxx"\ ".\include\ISet.h"\ ".\include\Link.h"\ ".\include\Location.h"\ ".\include\Lpd.h"\ ".\include\macros.h"\ ".\include\Markup.h"\ ".\include\Message.h"\ ".\include\MessageArg.h"\ ".\include\Mode.h"\ ".\include\Named.h"\ ".\include\NamedResource.h"\ ".\include\NamedResourceTable.h"\ ".\include\NamedTable.h"\ ".\include\NCVector.h"\ ".\include\Notation.h"\ ".\include\OutputByteStream.h"\ ".\include\OutputCharStream.h"\ ".\include\Owner.cxx"\ ".\include\Owner.h"\ ".\include\OwnerTable.cxx"\ ".\include\OwnerTable.h"\ ".\include\PointerTable.cxx"\ ".\include\PointerTable.h"\ ".\include\Ptr.cxx"\ ".\include\Ptr.h"\ ".\include\RangeMap.cxx"\ ".\include\RangeMap.h"\ ".\include\Resource.h"\ ".\include\rtti.h"\ ".\include\Sd.h"\ ".\include\SdText.h"\ ".\include\ShortReferenceMap.h"\ ".\include\StorageManager.h"\ ".\include\StringC.h"\ ".\include\StringOf.cxx"\ ".\include\StringOf.h"\ ".\include\StringResource.h"\ ".\include\SubstTable.cxx"\ ".\include\SubstTable.h"\ ".\include\Syntax.h"\ ".\include\Text.h"\ ".\include\TypeId.h"\ ".\include\UnivCharsetDesc.h"\ ".\include\UTF8CodingSystem.h"\ ".\include\Vector.cxx"\ ".\include\Vector.h"\ ".\include\XcharMap.cxx"\ ".\include\XcharMap.h"\ ".\include\xnew.h"\ ".\sx\XmlOutputEventHandler.h"\ ".\sx\XmlOutputMessages.h"\ "$(INTDIR)\XmlOutputEventHandler.obj" : $(SOURCE) $(DEP_CPP_XMLOU) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) # End Source File ################################################################################ # Begin Source File SOURCE=.\sx\sx.rc DEP_RSC_SX_RC=\ ".\sx\SxMessages.rc"\ ".\sx\XmlOutputMessages.rc"\ !IF "$(CFG)" == "sx - Win32 Release" "$(INTDIR)\sx.res" : $(SOURCE) $(DEP_RSC_SX_RC) "$(INTDIR)" $(RSC) /l 0x809 /fo"$(INTDIR)/sx.res" /i "sx" /d "NDEBUG" $(SOURCE) !ELSEIF "$(CFG)" == "sx - Win32 Debug" "$(INTDIR)\sx.res" : $(SOURCE) $(DEP_RSC_SX_RC) "$(INTDIR)" $(RSC) /l 0x809 /fo"$(INTDIR)/sx.res" /i "sx" /d "_DEBUG" $(SOURCE) !ENDIF # End Source File # End Target # End Project ################################################################################ jade-1.2.1/VERSION100444 764 764 6 6606574404 11202 0ustar jjcjjc1.3.3 jade-1.2.1/doc/ 40775 764 764 0 6610553416 10665 5ustar jjcjjcjade-1.2.1/doc/Makefile100444 764 764 514 6604607552 12402 0ustar jjcjjcNSGMLS=nsgmls DOCS=archform.htm \ build.htm \ catalog.htm \ charset.htm \ features.htm \ generic.htm \ ideas.htm \ index.htm \ new.htm \ nsgmls.htm \ sgmldecl.htm \ sgmlnorm.htm \ sgmlsout.htm \ spam.htm \ spent.htm \ sysdecl.htm \ sysid.htm validate: $(DOCS) $(NSGMLS) -sB $(DOCS) touch validate jade-1.2.1/doc/archform.htm100444 764 764 33267 6604607552 13330 0ustar jjcjjc Architectural Form Processing

Architectural Form Processing

The Hytime standard (ISO/IEC 10744) introduced the concept of architectural forms. This document assumes you are already familiar with this concept. HyTime 2nd Edition generalizes this, and makes it possible to have an architecture engine which can perform architectural form processing for arbitrary architectures. SP includes such an architecture engine.

Non-markup sensitive applications built using SP now support architectural form processing using the -A archname option. When this option is specified, the document will be validated against all declared base architectures, and the output will be for the architectural document for that architecture: the element types, notations and attributes will be those defined in the meta-DTD.

Although spam does not support the -A option because it works with the markup of your document, sgmlnorm does.

Architectural Support Attributes

To use the -A option with a document, you must add

  • an architecture base declaration for archname,
  • a notation declaration and associated attribute definition list declaration for archname; this is called the architecture notation declaration.

An architecture base declaration is a processing instruction of the form:

<?IS10744 ArcBase archname>

The processing instruction is recognized either in the DTD or in an active LPD.

The architecture notation declaration and associated attribute definition list declaration serve to declare a number of architectural support attributes which control the architecture engine. The value for each architecture support attribute is taken from the default value, if any, specified for that attribute in the attribute definition list declaration. It is an error to declare an architecture support attribute as #REQUIRED.

The following architectural support attributes are recognized:

ArcDTD
The name of an external entity that contains the meta-DTD. This attribute is required. If the name starts with the PERO delimiter %, the entity is a parameter entity, otherwise it is a general entity.
ArcQuant
A list of tokens that looks like what follows QUANTITY SGMLREF in the quantity set section of an SGML declaration. The quantities used for parsing the meta-DTD and validating the architectural document will be the maximum of the quantities in the document's concrete syntax and the quantities specified here.
ArcDocF
The name of the document element type in the meta-DTD. This would be HyDoc for HyTime. This defaults to archname.
ArcFormA
The name of the attribute that elements use to specify the corresponding element type, if any, in the meta-DTD. Data entities also use this attribute to specify the corresponding notation in the meta-DTD. This would be HyTime for HyTime. This defaults to archname.
ArcNamrA
The name of the attribute that elements use to specify substitutes for the names of attributes in the meta-DTD. A value of #DEFAULT is allowed for a substitute name; this inhibits mapping of an attribute to an architectural attribute, but specifies that the value of the architectural attribute should be defaulted rather than taken from the value of another attribute in the document. For HyTime the value of this attribute would be HyNames. By default no attribute name substitutition is done.
ArcSuprA
The name of an attribute that elements may use to suppress processing of their descendants. This attribute is not recognized for data entities. The value of the attribute must be one of the following tokens:
sArcAll
Completely suppress all architectural processing of descendants. It is not possible to restore architectural processing for a descendant.
sArcForm
Suppress processing of the ArcFormA attribute of all descendants of this element, except for those elements that have a non-implied ArcSuprA attribute.
sArcNone
Don't suppress architectural processing for the descendants of this element.

The value may also be implied, in which case the state of architectural processing is inherited.

If an element has an ArcSuprA attribute that was processed, its ArcFormA attribute will always be processed. Otherwise its ArcFormA attribute will be processed unless its closest ancestor that has a non-implied value for the ArcSuprA attribute suppressed processing of the ArcFormA attribute. An element whose ArcFormA attribute is processed will not be treated as architectural if it has an implied value for the ArcFormA attribute.

ArcSuprF
The name of the element type in the meta-DTD that suppresses architectural processing in the same manner as does the sHyTime form in HyTime. By default, no element type does. This behaves like an element with an ArcSuprA attribute of sArcForm. The element type should be declared in the meta-DTD. You should not specify a value for this attribute if you specified a value for the ArcSuprA attribute.

This is a non-standardized extension.

ArcIgnDA
The name of an attribute that elements may use to control whether data is ignored. The value of the attribute must be one of the following values:
nArcIgnD
Data is not ignored. It is an error if data occurs where not allowed by the meta-DTD.
cArcIgnD
Data is conditionally ignored. Data will be ignored only when it occurs where the meta-DTD does not allow it.
ArcIgnD
Data is always ignored.

The value may also be implied, in which case the state of architectural processing is inherited. If no the document element has no value specified, cArcIgnD will be used.

ArcBridF
The name of a default element type declared in a meta-DTD, to which elements in the document should be automatically mapped if they have an ID and would not otherwise be considered architectural. This would be HyBrid for HyTime. If your meta-DTD declares IDREF attributes, it will usually be appropriate to specify a value for ArcBridF, and to declare an ID attribute for that form in your meta-DTD.
ArcDataF
The name of a default notation declared in the meta-DTD, to which the external data entities in the document should be automatically mapped if they would not otherwise be considered architectural. If this attribute is defined, then general entities will be automatically architectural: any external data entity whose notation cannot otherwise be mapped into a notation in the meta-DTD will be automatically treated as an instance of the ArcDataF notation. This would be data for HyTime. If your meta-DTD declares entity attributes, it will usually be appropriate to specify a value for ArcDataF even if your meta-DTD declares no data attributes for the notation.
ArcAuto
This must have one of the following values:
ArcAuto
If an element does not have an ArcFormA attribute and the meta-DTD defines an element type with the same name as the element's type, the element will be automatically treated as being an instance of the meta-type. This rule does not apply to the document element type; this is automatically treated as being an instance of the meta-DTD's document element type. Note that this automatic mapping is prevented if the element has an ArcFormA attribute with an implied value. It is also prevented if processing of the ArcFormA attribute is suppressed. This applies equally to the notations of external data entities. The default element or notation specified with the ArcBridF or ArcDfltN attribute is only considered after the mapping specified by ArcAuto.
nArcAuto
Automatic mapping is not performed.

The default value is ArcAuto.

ArcOptSA
A list of names of architectural support attributes, each of which is interpreted as a list of parameter entities to be defined with a replacement text of INCLUDE when parsing the meta-DTD. The default value is ArcOpt.

Meta-DTDs

A meta-DTD is allowed to use the following extensions:

  • a single element type or notation is allowed to be an associated element type or associated notation name for multiple attribute definition lists.
  • #ALL can be used as an associated element type or associated notation name in an attribute definition list to define attributes for all element types or notations in the meta-DTD

Before any of these extensions can be used, the meta-DTD must include a declaration

<!AFDR "ISO/IEC 10744:1997">

This declaration should only be included if the extensions are used.

In all other respects a meta-DTD must be a valid SGML DTD.

A declared value of ENTITY for an attribute in a meta-DTD means that the value of the attribute must be an entity declared in the (non-meta) DTD that is architectural. An external data entity is architectural only if its notation can be mapped into a notation in the meta-DTD. All other kinds of data entities and subdoc entities are automatically architectural.

An IDREF attribute in the meta-document must have a corresponding ID in the meta-document. An attribute with a declared value of ID in the document will be automatically mapped to an attribute with a declared value of ID in the meta-DTD.

A declared value of NOTATION in the meta-DTD means that the value of the attribute must have one the values specified in the name group and that it must be a notation in the meta-DTD. (Perhaps if the attribute also has a declared value of NOTATION in the non-meta-DTD, the value should be mapped in a similar way to the notation of an external data entity.)

Differences from HyTime

There are a number of differences from how architectural processing is defined in the pre-Corringendum version of the HyTime standard.

  • The ArcNamrA and ArcFormA attributes are not part of the meta-DTD. Rather they are used by the architecture engine in deriving the meta-document that is validated against the meta-DTD.
  • The use: conventional comment is not recognized. Instead a single element type is allowed to be an associated element type for multiple attribute definition lists.
  • The notation and data attributes of an external data entity are treated just like the element type and attributes of an element. The notation of an external data entity is mapped into a notation in the meta-DTD and the data attributes of the entity are mapped onto attributes defined for the meta-DTD notation.
  • #FIXED has the same meaning in a meta-DTD that it does in a regular DTD: the value of the attribute must be the same as the default value of the attribute specified in the meta-DTD.

Specifying architectural processing with an LPD

Link attributes defined by an implicit link process are treated in the same way as non-link attributes. The only complication is that SGML allows link attributes to have the same name as non-link attributes. If there is a link attribute and a non-link attribute with the same name, the architecture engine will only look at the link attribute, even if the value of the link attribute is implied. The only exception is the ArcNamrA attribute: the architecture engine will use both the link attribute and the non-link attribute, but the substitute names in the value of the non-link attribute cannot refer to link attribute names.

The -A archname option automatically activates any link type archname.

The architecture notation declaration and associated attribute definition list declaration are allowed in the LPD. Although the productions of ISO 8879 do not allow a notation declaration in a link type declaration subset, it is clearly the intent of the standard that they be allowed. You can use a -wlpd-notation option to disallow them.

Derived architectures

A meta-DTD can have one or more base architectures in the same way as a normal DTD. Multiple -A options can be used to exploit this. For example,

-A arch1 -A arch2

will perform architectural processing on the source document to produce an architectural document conforming to the architecture arch1 declared in the source document, and will then perform architectural processing on this architectural document to produce an architectural document conforming to the arch2 architecture declared in arch1's meta-DTD.

A document that is validated against a meta-DTD will automatically be validated against any base architectures of that meta-DTD.

Unimplemented features

The following features from the AFDR specification in HyTime 2nd edition are not yet implemented:

  • use of #MAPTOKEN in the architectural attribute renamer.

James Clark
jjc@jclark.com
jade-1.2.1/doc/build.htm100444 764 764 7171 6604607552 12601 0ustar jjcjjc Building SP

Building SP

You will need a C++ compiler with good template support to build this. Support for exceptions is not required.

In most cases you should be able to port to a new compiler just by editing include/config.h.

Unix

To build on Unix, edit the Makefile, and do a make. You can also build in a different directory. This requires GNU make or another make that implements VPATH. Copy or link the top-level Makefile to the build directory, change srcdir in the Makefile to point to the original directory, and do a make in the build directory.

make install installs the programs.

You can use the following compilers:

gcc
gcc 2.7.2 works (gcc 2.7.0 won't work at least on the sparc). You will also an iostream library (eg as provided by libg++ 2.7). This distribution builds on Solaris 2.3 and on Linux 1.2. I expect it will build on SunOS 4 as well with little difficulty.

With gcc 2.6.3/SunOS 4, you'll need to compile with -Dsig_atomic_t=int, and, if you want to compile with -DSP_HAVE_SOCKET, you'll need to make netdb.h and arpa/inet.h C++ compatible.

Sun C++
To compile with Sun C++ 4.0.1, run first sunfix.sh. Also in the top-level Makefile, change set libMakefile to Makefile.lib.sun. This makes the library build use the -xar option.

Nelson Beebe has ported SP to a variety of other Unix systems and has produced some notes about his experiences.

DOS/Windows

You must use a compiler that generates 32-bit code.

The following compilers have been tested:

Visual C++ 4.2
Open SP.mak as a Makefile in the Developer Studio and build whatever you want. Don't use Batch Build or Rebuild All: these rebuild the library repeatedly. You can build all the targets in a particular configuration by building the all target. The sp-generate.mak makefile can be used to make all the .cxx and .h files that are automatically generated. (These are included in the distribution, so you don't need to do this unless you want to modify SP.)

To create a new program, make a new project in the SP project workspace using the Build>Subprojects command, and include lib and maybe generic as subprojects. You may also want to add your project as a subproject to all. Then, in Build>Settings under the C/C++ tab in the Preprocessor category, copy the Preprocessor definitions and Additional include directories entries from the nsgmls subproject. In the Code Generation category make sure you've selected the same run-time library as that used by the corresponding configuration of lib.

Visual C++ 5.0
Use SP.mak as with Visual C++ 4.2. Visual C++ 5.0 has a bug which will cause it to crash when converting the makefile. To work around this, rename the lib directory to x, say, before converting the makefile and then, after conversion but before building, rename it back to lib. Then proceed as with Visual C++ 4.2.

You should be aware that Visual C++ 5.0 also has some optimization bugs. There are workarounds for those I've discovered, but it would be safer to use Visual C++ 4.2.

Watcom C++ 11.0
Use Makefile.wat.

You must compile on a platform that supports long filenames.

James Clark
jjc@jclark.com
jade-1.2.1/doc/catalog100444 764 764 34 6604607552 12254 0ustar jjcjjcCATALOG ../pubtext/html.soc jade-1.2.1/doc/catalog.htm100444 764 764 15105 6604607552 13130 0ustar jjcjjc SP - Catalogs

Catalogs

The entity manager generates a system identifier for every external entity using catalog entry files in the format defined by SGML Open Technical Resolution TR9401:1997. The entity manager will give an error if it is unable to generate a system identifier for an external entity. Normally if the external identifier for an entity includes a system identifier then the entity manager will use that as the effective system identifier for the entity; this behaviour can be changed using OVERRIDE or SYSTEM entries in a catalog entry file.

A catalog entry file contains a sequence of entries in one of the following forms:

PUBLIC pubid sysid
This specifies that sysid should be used as the effective system identifier if the public identifier is pubid. Sysid is a system identifier as defined in ISO 8879 and pubid is a public identifier as defined in ISO 8879.
ENTITY name sysid
This specifies that sysid should be used as the effective system identifier if the entity is a general entity whose name is name.
ENTITY %name sysid
This specifies that sysid should be used as the effective system identifier if the entity is a parameter entity whose name is name. Note that there is no space between the % and the name.
DOCTYPE name sysid
This specifies that sysid should be used as the effective system identifier if the entity is an entity declared in a document type declaration whose document type name is name.
LINKTYPE name sysid
This specifies that sysid should be used as the effective system identifier if the entity is an entity declared in a link type declaration whose link type name is name.
NOTATION name sysid
This specifies that sysid should be used as the effective system identifier for a notation whose name is name. This is relevant only with the -n option.
OVERRIDE bool
bool may be YES or NO. This sets the overriding mode for entries up to the next occurrence of OVERRIDE or the end of the catalog entry file. At the beginning of a catalog entry file the overriding mode will be NO. A PUBLIC, ENTITY, DOCTYPE, LINKTYPE or NOTATION entry with an overriding mode of YES will be used whether or not the external identifier has an explicit system identifier; those with an overriding mode of NO will be ignored if external identifier has an explicit system identifier.
SYSTEM sysid1 sysid2
This specifies that sysid2 should be used as the effective system identifier if the system identifier specified in the external identifier was sysid1. sysid2 should always be quoted to ensure that it is not misinterpreted when parsed by a system that does not support this extension.
SGMLDECL sysid
This specifies that if the document does not contain an SGML declaration, the SGML declaration in sysid should be implied.
DOCUMENT sysid
This specifies that the document entity is sysid. This entry is used only with the -C option.
CATALOG sysid
This specifies that sysid is the system identifier of an additional catalog entry file to be read after this one. Multiple CATALOG entries are allowed and will be read in order.
BASE sysid
This specifies that relative storage object identifiers in system identifiers in the catalog entry file following this entry should be resolved using first storage object identifier in sysid as the base, instead of the storage object identifiers of the storage objects comprising the catalog entry file. Note that the sysid must exist.
DELEGATE pubid-prefix sysid
This specifies that entities with a public identifier that has pubid-prefix as a prefix should be resolved using a catalog whose system identfier is sysid. For more details, see A Proposal for Delegating SGML Open Catalogs.

The delimiters can be omitted from the sysid provided it does not contain any white space. Comments are allowed between parameters delimited by -- as in SGML.

The entity manager will look for catalog entry files as follows:

  1. a file called catalog in the same directory as the document entity, unless the environment variable SP_USE_DOCUMENT_CATALOG has the value NO or 0;
  2. any catalog entry files specified using the -c option;
  3. a list of files specified by the environment variable SGML_CATALOG_FILES; the list is separated by colons under Unix and by semi-colons under MS-DOS and Windows; if this environment variable is not set, then a system dependent list of catalog entry files will be used.

In fact catalog entry files are not restricted to being files: the name of a catalog entry file is interpreted as a system identifier.

A match in one catalog entry file will take precedence over any match in a later catalog entry file. A more specific matching entry in one catalog entry file will take priority over a less specific matching entry in the same catalog entry file. For this purpose, the order of specificity is (most specific first):

  • SYSTEM entries;
  • PUBLIC entries;
  • DELEGATE entries ordered by the length of the prefix, longest first;
  • ENTITY, DOCTYPE, LINKTYPE and NOTATION entries.

James Clark
jjc@jclark.com
jade-1.2.1/doc/charset.htm100444 764 764 21766 6604607552 13161 0ustar jjcjjc SP - Character sets

Handling of character sets in SP

The following description applies only to the multi-byte version of SP. In the single-byte version of SP, each character is represented both internally and in storage objects by a single byte equal to the number of the character in the document character set.

SP's entity manager converts the bytes comprising a storage object into a sequence of characters. This conversion is determined by the encoding associated with the storage object.

An encoding may be specified using the name of a mapping from sequences of characters to sequences of bytes.

An encoding can also be specified relative to the document character set. This kind of an encoding maps a sequence of characters in the repertoire of the document character set into a sequence of bytes by

  1. mapping each character to its bit combination in the document character set, and then
  2. applying a transformation that maps sequences of bit combinations to sequences of bytes.

The transformation applied in the second step is called a bit combination transformation format (BCTF). A document character set relative encoding is specified by giving the name of a BCTF.

An application receives characters from SP represented as non-negative integers. The mapping from characters to integers is determined by SP's internal character set. SP can operate in a mode in which the internal character set is the same as the document character set. (Versions of SP up to 1.1.1 always operated in this mode.) The multibyte version of SP can also operate in a mode in which the internal character set does not vary with the document character set, but is always a fixed character set, known as the system character set; this mode of operation is called fixed character set mode.

Environment

SP's character set handling is controlled by the following environment variables:

SP_CHARSET_FIXED
If this variable is 1 or YES, then SP will operate in fixed character set mode.
SP_SYSTEM_CHARSET
This identifies the system character set. When in fixed character set mode, this character set is used as the internal character set. When not in fixed character set mode this character set is used as the internal character set until the document character set has been read, at which point the document character set is used as the internal character set.

The only currently recognized value for this is JIS. This refers to a character set which combines JIS X 0201, JIS X 0208 and JIS X 0212 by adding 0x8080 to the codes of characters in JIS X 0208 and 0x8000 to the codes of characters in JIS X 0212.

The default system character set is Unicode 2.0.

SP_ENCODING
This specifies the default encoding when operating in fixed character set mode. The value must be the name of an available encoding. The default encoding cannot be document character set relative when operating in fixed character set mode.
SP_BCTF
This specifies the default encoding when not operating in fixed character set mode. The value must be the name of an available BCTF. When not operating in fixed character set mode, the default encoding is the document character set relative encoding with this BCTF. The default encoding is required to be document character set relative when not operating in fixed character set mode.

The default encoding is used for file input and output, and, except under Windows 95 and Windows NT, for all other interfaces with the operating system including filenames, environment varable names, environment variable values and command line arguments.

Under Windows 95 and Windows NT there are no restrictions on the default encoding. Note that in order for non-ASCII characters to be correctly displayed on your console you must select a TrueType font, such as Lucida Console, as your console font. (This seems to work only on Windows NT.)

Under other operating systems, the default encoding must be one in which ASCII characters are represented by a single byte.

Applications built with SP may require fixed character set mode and a particular system character set; such applications will ignore the SP_SYSTEM_CHARSET and SP_CHARSET_FIXED environment variables.

Available encodings

Encoding names are case insensitive. The following named encodings are available:

utf-8
Each character is represented by a variable number of bytes according to UCS Transformation Format 8 defined in Annex P to be added by the first proposed drafted amendment (PDAM 1) to ISO/IEC 10646-1:1993.
ucs-2
iso-10646-ucs-2
This is ISO/IEC 10646 with the UCS-2 transformation format. Each character is represented by 2 bytes. No special treatment is given to the byte order mark character.
unicode
Each character is represented by 2 bytes. The bytes representing the entire storage object may be preceded by a pair of bytes representing the byte order mark character (0xFEFF). The bytes representing each character are in the system byte order, unless the byte order mark character is present, in which case the order of its bytes determines the byte order. When the storage object is read, any byte order mark character is discarded.
euc-jp
This is equivalent to the Extended_UNIX_Code_Packed_Format_for_Japanese Internet charset. Each character is encoded by a variable length sequence of octets.
euc-kr
This is ASCII and KSC 5601 encoded with the EUC encoding as defined by KS C 5861-1992.
euc-cn
cn-gb
gb2312
This is ASCII and GB 2312-80 encoded with the EUC encoding. It is equivalent to the CN-GB MIME charset defined in RFC 1922.
sjis
shift_jis
This is equivalent to the Shift_JIS Internet charset. Each character is encoded by a variable length sequence of octets. This is Microsoft's standard encoding for Japanese.
big5
cn-big5
This is equivalent to the CN-Big5 MIME charset defined in RFC 1922.
is8859-n
iso-8859-n
n can be any single digit other than 0. Each character in the repertoire of ISO 8859-n is represented by a single byte.
xml
On input, this uses XML's rules to determine the encoding. On output, this uses UTF-8.

The following additional encodings are supported under Windows 95 and Windows NT:

windows
Specify this encoding when a storage object is encoded using your system's default Windows character set. This uses the so-called ANSI code page.
wunicode
This uses the unicode encoding if the storage object starts with a byte order mark and otherwise the windows encoding. If you are working with Unicode, this is probably the best value for SP_ENCODING.
ms-dos
Specify this encoding when a storage object (file) uses the OEM code page. The OEM code-page for a particular machine is the code-page used by FAT file-systems on that machine and is the default code-page for MS-DOS consoles.

Available BCTFs

The following BCTFs are available:

identity
Each bit combination is represented by a single byte.
fixed-2
Each bit combination is represented by exactly 2 bytes, with the more significant byte first.
euc
Each bit combination is represented by a variable number of bytes depending on the values of the 0x80 and 0x8000 bits:
  • if neither bits are set, then the bit combination is represented by a single byte equal to the bit combination;
  • bit combinations with both bits set, are represented by the MSB of the bit combination followed by the LSB of the bit combination;
  • bit combinations with just the 0x80 bit set are represented by 0x8E followed by a byte equal to the bit combination;
  • bit combinations with just the 0x8000 bit set are represented by 0x8F followed by the MSB of the bit combination followed by the LSB of the bit combination.
sjis
A bit combination between 0 and 127 or between 161 and 223 is encoded as a single byte with the same value as the bit combination. A bit combination with the 0x8000 and 0x80 bits set is encoded by the sequence of bytes with which the SJIS encoding encodes the character whose number in JIS X 0208 added to 0x8080 is equal to the bit combination.
big5
A bit combination less than 0x80 is encoded as a single byte. A bit combination with the 0x8000 bit set is encoded as two bytes, the MSB of the bit combination followed by the LSB of the bit combination.

James Clark
jjc@jclark.com
jade-1.2.1/doc/features.htm100444 764 764 4266 6604607552 13322 0ustar jjcjjc SP - Features Summary

SP

A free, object-oriented toolkit for SGML parsing and entity management

Features summary

  • Includes nsgmls
    • Compatible with sgmls
    • Also generates RAST (ISO/IEC 13673)
  • Provides access to all information about SGML document
    • Access to DTD and SGML declaration as well as document instance
    • Access to markup as well as abstract document
    • Sufficient to recreate character-for-character identical copy of any SGML document
  • Supports almost all optional SGML features
    • Arbitrary concrete syntaxes
    • SHORTTAG, OMITTAG, RANK
    • SUBDOC
    • LINK (SIMPLE, IMPLICIT and EXPLICIT)
    • Only DATATAG and CONCUR not supported
  • Sophisticated entity manager
    • Supports ISO/IEC 10744 Formal System Identifiers
    • Supports SGML Open catalogs
    • Supports WWW
    • Can be used independently of parser
  • Supports multi-byte character sets
    • Parser can use 16-bit characters internally
    • 16-bit characters can be used in tag names and other markup
    • Supports ISO/IEC 10646 (Unicode) using both UCS-2 and UTF-8
    • Supports Japanese character sets (Shift-JIS, EUC)
  • Object-oriented
  • Written in C++ from scratch
    • Not a modified version of a parser originally written in C
    • Reentrant
    • Sophisticated architecture
  • Fast
    • Up to twice as fast as sgmls on large documents
  • Portable
    • All major Unix variants
    • MS-DOS
    • Win32: Windows 95/Windows NT
    • OS/2
  • Production quality
    • Version 1.0 recently released, after a year of test releases
    • Tested using several SGML test suites
    • Already used in several new commercial products
    • Written by James Clark, previously responsible for turning arcsgml into sgmls
  • Free
    • Includes source code
    • No restrictions on commercial use
  • Disadvantages
    • Programmer-level documentation only for generic API and not for native API.

James Clark
jjc@jclark.com
jade-1.2.1/doc/generic.htm100444 764 764 71667 6604607552 13151 0ustar jjcjjc The generic API to SP

The generic API to SP

SP provides a generic API in addition to its native API. The generic interface is much simpler than the native interface. It is generic in the sense that it could be easily implemented using parsers other than SP. It provides all ESIS information as well as some other information about the instance that is commonly needed by applications. However, it doesn't provide access to all information available from SP; in particular, it doesn't provide information about the DTD. It is also slightly less efficient than the native interface.

The interface uses two related abstract classes. An SGMLApplication is an object that can handle a number of different kinds of event which correspond to information in an SGML document. An EventGenerator is an object that can generate a sequence of events of the kinds handled by an SGMLApplication. The ParserEventGeneratorKit class makes an EventGenerator that generates events using SP.

Types

SGMLApplication has a number of local types that are used in several contexts:

Char
This typedef is an unsigned integral type that represents a single bit combination (character). It is unsigned short if SP_MULTI_BYTE is defined and unsigned char otherwise.
CharString
This struct represents a string of Char. It has the following members:
const Char *ptr
A pointer to the Chars of the string.
size_t len
The number of Chars in the string.
Location
This struct holds information about a location in the entity structure of a document. It is constucted using an OpenEntityPtr and a Position. The CharStrings in it will remain valid as long as the OpenEntity that is pointed to by the OpenEntityPtr that was used to construct it remains valid.

It has the following members:

unsigned long lineNumber
The line number. (unsigned long)-1 if invalid.
unsigned long columnNumber
The column number. Note that tabs are not treated specially. (unsigned long)-1 if invalid.
unsigned long byteOffset
The number of bytes in the storage object preceding the location. (unsigned long)-1 if invalid.
unsigned long entityOffset
The number of bit combinations in the entity preceding the location. (unsigned long)-1 if invalid.
CharString entityName
The name of the external entity containing the location. An empty string if invalid.
CharString filename
The name of the file containing the location. An empty string if invalid.
const void *other
Other implementation-dependent information about the location. In the SP implementation it will be a pointer to a StorageObjectSpec. 0 if invalid.

When a location is in an internal entity, the location of the reference to the entity will be used instead.

OpenEntity
This class represents a currently open entity. The only use for an OpenEntity is, in conjunction with a Position, to create a Location. An OpenEntity is accessed using an OpenEntityPtr.
OpenEntityPtr
This class is a reference-counted pointer to an OpenEntity.
Position
This is an integral type that represents a position in an open entity. The meaning of a Position is completely determined by the OpenEntity object with which it is associated. The only use for an Position is, in conjunction with an OpenEntity, to create a Location.
ExternalId
This struct represents an external identifier. It has the following members:
bool haveSystemId
True iff the external identifier included an explicit system identifier.
CharString systemId
The system identifier included in the external identifier. Valid only if havePublicId is true.
bool havePublicId
True iff the external identifier included an explicit public identifier.
CharString publicId
The public identifier included in the external identifier. Valid only if havePublicId is true.
bool haveGeneratedSystemId
True iff a system identifier was generated for the external identifier.
CharString generatedSystemId
The system identifier generated for the external identifier. Valid only if haveGeneratedSystemId is true.
Notation
This struct represents a notation. It has the following members:
CharString name
The name of the notation.
ExternalId externalId
The external identifier of the notation.
Entity
This struct represents an entity. It has the following members.
CharString name
The name of the entity.
Entity::DataType dataType
The type of the data of the entity.

Entity::DataType is a local enum with the following possible values:

Entity::sgml
Entity::cdata
Entity::sdata
Entity::ndata
Entity::subdoc
Entity::pi
Entity::DeclType declType
The type of the declaration of the entity.

Entity::DeclType is a local enum with the following possible values:

Entity::general
The entity is a general entity.
Entity::parameter
The entity is a parameter entity.
Entity::doctype
The entity was declared in a doctype declaration.
Entity::linktype
The entity was declared in a linktype declaration.
bool isInternal
True iff the entity is internal rather than external.
CharString text
The replacement text of the entity. Valid only if isInternal is true.
ExternalId externalId
The external identifier of the entity. Valid only if isInternal is false.
const Attribute *attributes
Pointer to the data attributes of the entity. Valid only if isInternal is false.
size_t nAttributes
The number of data attributes of the entity. Valid only if isInternal is false.
Notation notation
The entity's notation. An empty string if the entity has no notation. Valid only if isInternal is false.
Attribute
This struct represents an attribute. More precisely it represents the assignment of an attribute value to an attribute name. It has the following members:
CharString name
The attribute name.
Attribute::Type type
An enumeration describing the type of the attribute.

Attribute::Type is a local type with the following possible values:

Attribute::invalid
The attribute is invalid.
Attribute::implied
The attribute is an impliable attribute for which no value was specified.
Attribute::cdata
The attribute is a CDATA attribute.
Attribute::tokenized
The attribute is a tokenized attribute.
Attribute::Defaulted defaulted
An enumeration specifying whether the entity was defaulted, and, if so, how. This is non-ESIS information.

Attribute::Defaulted is a local enum with the following possible values:

Attribute::specified
The value was explicitly specified.
Attribute::definition
The value was defaulted from the attribute definition.
Attribute::current
The value was defaulted using the CURRENT value of the attribute.
size_t nCdataChunks
The number of Attribute::CdataChunks comprising the value of the attribute. Valid only if type is cdata.
const Attribute::CdataChunk *cdataChunks
The Attribute::CdataChunks comprising the value of this attribute. Valid only if type is cdata.

Attribute::CdataChunk is a local struct with the following members:

bool isSdata
True iff this chunk is the replacement text of an internal SDATA entity.
CharString data
The data of this chunk.
CharString entityName
The name of the internal SDATA entity that this chunk is the replacement text of. Valid only if isSdata is true. This is non-ESIS information.
CharString tokens
Valid only if type is Attribute::tokenized.
bool isId
True iff the declared value is ID. This is non-ESIS information.
size_t nEntities
The number of entities associated with this attribute. This will be zero unless the declared value is ENTITY or ENTITIES.
const Entity *entities
The entities associated with this attribute.
Notation notation
The notation associated with this attribute. If the declared value of the attribute is not NOTATION, then the name member will be an empty string.

Events

For each event xyzEvent handled by SGMLApplication, there is a virtual function of SGMLApplication named xyz to handle the event, and a local struct of SGMLApplication named XyzEvent.

Pointers within an event xyzEvent are valid only during the call to xyz. None of the structs in events have copy constructors or assignment operators defined. It is up to the event handling function to make a copy of any data that it needs to preserve after the function returns.

Except as otherwise stated, the information in events is ESIS information. All position information is non-ESIS information.

There are the following types of event:

AppinfoEvent
Generated for the APPINFO section of the SGML declaration. The event has the following members:
Position pos
The position of APPINFO parameter of the SGML declaration.
bool none
True iff APPINFO NONE was specified.
CharString string
The interpreted value of the minimum literal specified in the appinfo parameter of the SGML declaration. Valid only if none is false.
PiEvent
Generated for a processing instruction. The event has the following members:
Position pos
The position of the processing instruction.
CharString data
The system data of the processing instuction.
CharString entityName
If the processing instruction was the result of the reference to a PI entity, the name of the entity. If not, an empty string. This is non-ESIS information.
StartElementEvent
Generated for the start of an element. The event has the following members:
Position pos
The position of the start of the element.
CharString gi
The generic identifier of the element.
Element::ContentType contentType
The type of the element's content. This is non-ESIS information.

Element::ContentType is an enum with the following possible values:

Element::empty
The element has empty content, either because it was declared as EMPTY or because there was a #CONREF attribute.
Element::cdata
The element has CDATA content.
Element::rcdata
The element has RCDATA content.
Element::mixed
The element has mixed content.
Element::element
The element has element content.
bool included
True iff the element was an included subelement (rather than a proper subelement). This is non-ESIS information.
size_t nAttributes
The number of attributes of this element.
const Attribute *attributes
A pointer to the attributes for this element.
EndElementEvent
Generated for the end of an elemenet. The event has the following members:
Position pos
The position of the end of the element.
CharString gi
The generic identifier of the element.
DataEvent
Generated for character data. Separate data events may be generated for consecutive data characters. Applications should make no assumptions about how character data is split into DataEvents. The event has the following members:
Position pos
The position of the first character of the data.
CharString data
The data.
SdataEvent
Generated for a reference to an internal sdata entity in content. The event has the following members:
Position pos
The position of the entity reference.
CharString text
The replacement text of the entity.
CharString entityName
The entity name. This is non-ESIS information.
ExternalDataEntityRefEvent
Generated for a reference to an external data entity. The event has the following members:
Position pos
The position of the entity reference.
Entity entity
The referenced entity.
SubdocEntityRefEvent
Generated for a reference to a subdoc entity. The event has the following members:
Position pos
The position of the entity reference.
Entity entity
The referenced entity.
StartDtdEvent
Generated at the start of a document type declaration. This is non-ESIS information. The event has the following members:
Position pos
The position of the start of the document type declaration.
CharString name
The document type name.
bool haveExternalId
The external identifier for the entity declared in the document type declaration.
ExternalId externalId
Valid iff haveExternalId is true.
EndDtdEvent
Generated at the end of a document type declaration. This is non-ESIS information. The event has the following members:
Position pos
The position of the end of the DTD.
CharString name
EndPrologEvent
Generated at the end of the prolog. The event has the following members:
Position pos
The position of the start of the instance.
GeneralEntityEvent
Generated for each general entity in the name space of the governing doctype, but only if the ParserEventGeneratorKit::outputGeneralEntities option is enabled. This is non-ESIS information. The event has the following members:
Entity entity
The entity.

No event will be generated for the declaration of the #default entity; instead an event will be generated when an entity reference uses the #default entity if that is the first time on which an entity with that name is used. This means that GeneralEntityEvent can occur after the end of the prolog.

CommentDeclEvent
Generated for each comment declaration in the instance, but only if ParserEventGeneratorKit::outputCommentDecls option is enabled. This is non-ESIS information. The event has the following members:
Position pos
The position of the start of the comment declaration.
size_t nComments
The number of comments in the comment declaration.
const CharString *comments
The content of each comment in the declaration. This excludes the com delimiters.
const CharString *seps
The separator following each comment in the declaration.
MarkedSectionStartEvent
Generated for the start of a marked section in the instance, but only if the ParserEventGeneratorKit::outputMarkedSections option is enabled. This is non-ESIS information. The event has the following members:
Position pos
The position of the start of the marked section declaration.
MarkedSectionStartEvent::Status status
The effective status of the marked section.

MarkedSectionStartEvent::Status is a local enum with the following possible values:

  • MarkedSectionStartEvent::include
  • MarkedSectionStartEvent::rcdata
  • MarkedSectionStartEvent::cdata
  • MarkedSectionStartEvent::ignore
size_t nParams
The number of top-level parameters in the status keyword specification.
const MarkedSectionStartEvent::Param *params
The top-level parameters in the status keyword specification.

Param is a local struct with the following members:

MarkedSectionStartEvent::Param::Type type
The type of top-level parameter:

MarkedSectionStartEvent::Param::Type is a local enum with the following possible values:

MarkedSectionStartEvent::Param::temp
MarkedSectionStartEvent::Param::include
MarkedSectionStartEvent::Param::rcdata
MarkedSectionStartEvent::Param::cdata
MarkedSectionStartEvent::Param::ignore
The parameter is the corresponding keyword.
MarkedSectionStartEvent::Param::entityRef
The parameter is an entity reference.
CharString entityName
Valid when type is MarkedSectionStartEvent::Param::entityRef.
MarkedSectionEndEvent
Generated for the end of a marked section in the instance, but only if the ParserEventGeneratorKit::outputMarkedSections option is enabled. This is non-ESIS information. The event has the following members:
Position pos
The position of the end of the marked section declaration.
MarkedSectionEndEvent::Status status
The effective status of the marked section.

MarkedSectionEndEvent::Status is a local enum with the following possible values:

  • MarkedSectionEndEvent::include
  • MarkedSectionEndEvent::rcdata
  • MarkedSectionEndEvent::cdata
  • MarkedSectionEndEvent::ignore
IgnoredCharsEvent
Generated for a sequence of characters in an ignored marked section in the instance, but only if the ParserEventGeneratorKit::outputMarkedSections option is enabled. This is non-ESIS information. The event has the following members:
Position pos
The position of the first of the ignored characters.
CharString data
The ignored characters.
ErrorEvent
Generated for each error detected by the parser, and also for any other cases where the parser produces a message. This is non-ESIS information. It has the following members:
Position pos
The position at which the error was detected.
ErrorEvent::Type type
The type of error.

ErrorEvent::Type is a local enum with the following possible values:

ErrorEvent::quantity
Exceeding a quantity limit.
ErrorEvent::idref
An IDREF to a non-existent ID.
ErrorEvent::capacity
Exceeding a capacity limit.
ErrorEvent::otherError
Any other kind of error.
ErrorEvent::warning
A warning. Not actually an error.
ErrorEvent::info
An informational message. Not actually an error.
CharString message
The message produced by the parser. If messages are not disabled, this will be the same as the message printed to standard error.

SGMLApplication also has a virtual function

void openEntityChange(const OpenEntityPtr &);

which is similar to an event. An application that wishes to makes use of position information must maintain a variable of type OpenEntityPtr representing the current open entity, and must provide an implementation of the openEntityChange function that updates this variable. It can then use the value of this variable in conjunction with a Position to obtain a Location; this can be relatively slow. Unlike events, an OpenEntityPtr has copy constructors and assignment operators defined.

EventGenerator

The EventGenerator interface provides the following functions:

unsigned run(SGMLApplication &app)
Generate the sequence of events, calling the corresponding member of app for each event. Returns the number of errors. This must not be called more than once for any EventGeneratorobject.
EventGenerator *makeSubdocEventGenerator(const SGMLApplication::Char *s, size_t n)
Makes a new EventGenerator for a subdocument of the current document. s and n together specify the system identifier of the subdocument entity. These should usually be obtained from the generatedSystemId member of the externalId member of the Entity object for the subdocument entity. This function can only be called after run has been called; the call to run need not have returned, but the SGMLApplication must have been passed events from the prolog or instance (ie the SGML declaration must have been parsed).
void inhibitMessages(bool b)
If b is true, disables error and warning messages, otherwise enables them. Initially errors and warnings are enabled. This function may be called at any time, including while run() is executing.
void halt()
Halt the generation of events by run(). This can be at any point during the execution of run(). It is safe to call this function from a different thread from that which called run().

ParserEventGeneratorKit

The ParserEventGeneratorKit class is used to create an EventGenerator that generate events using SP. It provides the following members:

EventGenerator *makeEventGenerator(int nFiles, char *const *files)
This returns a new EventGenerator that will generate events for the SGML document whose document entity is contained in the files. The returned EventGenerator should be deleted when it is no longer needed. makeEventGenerator may be called more than once.
void setOption(ParserEventGeneratorKit::Option opt)
This can be called any time before makeEventGenerator() is called.

ParserEventGeneratorKit::Option is a local enum with the following possible values:

ParserEventGeneratorKit::showOpenEntities
This corresponds to the -e option of nsgmls.
ParserEventGeneratorKit::showOpenElements
This corresponds to the -g option of nsgmls.
ParserEventGeneratorKit::outputCommentDecls
This will cause CommentDeclEvents to be generated.
ParserEventGeneratorKit::outputMarkedSections
This will cause MarkedSectionStartEvents, MarkedSectionStartEvents and IgnoredCharsEvents to be generated.
ParserEventGeneratorKit::outputGeneralEntities
This will cause GeneralEntityEvents to be generated.
void setOption(ParserEventGeneratorKit::OptionWithArg opt, const char *arg)
This can be called any time before makeEventGenerator() is called.

ParserEventGeneratorKit::OptionWithArg is a local enum with the following possible values:

ParserEventGeneratorKit::addCatalog
This corresponds to the -m option of nsgmls.
ParserEventGeneratorKit::includeParam
This corresponds to the -i option of nsgmls.
ParserEventGeneratorKit::enableWarning
This corresponds to the -w option of nsgmls.
ParserEventGeneratorKit::addSearchDir
This corresponds to the -D option of nsgmls.

Using the interface

Creating an application with this interface involves the following steps:

  • Derive a class from SGMLApplication, called, say, MyApplication.
  • For each kind of event FooEvent that the application needs information from, define a member of MyApplication void MyApplication::foo(const FooEvent &).
  • Declare an object of type ParserEventGeneratorKit.
  • Optionally set options for the ParserEventGeneratorKit using ParserEventGeneratorKit::setOption.
  • Create an EventGenerator using ParserEventGeneratorKit::makeEventGenerator.
  • Create an instance of MyApplication (usually on the stack).
  • Call EventGenerator::run passing it a reference to the instance of MyApplication.
  • Delete the EventGenerator.

The application must include the ParserEventGeneratorKit.h file (which in turn includes EventGenerator.h and SGMLApplication.h), which is in the generic directory. If your compiler does not support the standard C++ bool type, you must ensure that bool is defined as a typedef for int, before including this. One way to do this is to include config.h and then Boolean.h from the lib subdirectory of the SP distribution.

On Unix, the application must be linked with the lib/libsp.a library.

Example

Here's a simple example of an application that uses this interface. The application prints an outline of the element structure of a document, using indentation to represent nesting.

// The next two lines are only to ensure bool gets defined appropriately.
#include "config.h"
#include "Boolean.h"

#include "ParserEventGeneratorKit.h"
#include <iostream.h>

ostream &operator<<(ostream &os, SGMLApplication::CharString s)
{
  for (size_t i = 0; i < s.len; i++)
    os << char(s.ptr[i]);
  return os;
}

class OutlineApplication : public SGMLApplication {
public:
  OutlineApplication() : depth_(0) { }
  void startElement(const StartElementEvent &event) {
    for (unsigned i = 0; i < depth_; i++)
      cout << "    ";
    cout << event.gi << '\n';
    depth_++;
  }
  void endElement(const EndElementEvent &) { depth_--; }
private:
  unsigned depth_;
};

int main(int argc, char **argv)
{
  ParserEventGeneratorKit parserKit;
  // Use all the arguments after argv[0] as filenames.
  EventGenerator *egp = parserKit.makeEventGenerator(argc - 1, argv + 1);
  OutlineApplication app;
  unsigned nErrors = egp->run(app);
  delete egp;
  return nErrors > 0;
}

This example will only work for the non-multibyte version of SP; for the multibyte version you will need to use the standard C++ library's facilities for wide character output, or roll your own equivalents (like the OutputCharStream used by SP applications).

There's a bigger example in the sgmlnorm directory in the SP distribution. This uses the SGMLApplication interface, but it doesn't use the ParserEventGeneratorKit interface.

James Clark
jjc@jclark.com
jade-1.2.1/doc/ideas.htm100444 764 764 37034 6604607552 12610 0ustar jjcjjc Ideas for improving SP

Ideas for improving SP

Parser

When !internalCharsetIsDocCharset, need to check that every significant character is an SGML character.

Treat "ISO Registration Number NNN//" public ids specially. Warn if they use designating sequence inconsistently.

Pass non-declared attributes through to application.

Avoid expensive overflow test in stringToNumber when length of number is less then something guaranteed not to overflow.

Allow external character set to be complete character set description.

Maybe distinguish non-SGML characters as separate event even when internalCharsetIsDocCharset.

Supporting caching across multiple runs of parser in single process.

Make Dtd copiable.

?Subdoc parser needs character set for system id (should be system character set).

Recover better from non-existent documents or subdocuments.

Think about entity declarations/references in inactive LPDs.

Don't allow name groups in parameter entity references in document type specifications in start-/end-tags.

With link, don't do a pass 2 unless we replace a referenced entity (what about default entity?).

Options to warn about things that HTML disallows: marked sections in instance, explicit subsets.

Option to warn about MDCs in comments in comment declarations.

Option to warn about omitted REFC.

Check that names of added functions are valid names in concrete syntax (both characters and lengths). Also need to do upper-case substitution on them?

Recover from nested doctype declaration intelligently.

Recover from missing doctype declaration intelligently.

Could optimize parsing of attribute literals using technique similar to extendData().

attributeValueLength error should give actual length of value.

Recover better from entity reference with name group in literal.

At start of pass 2 clear everything in pass1LPDs except entity sets.

Give an error if EXPLICIT > 1 and LPDs don't chain as required by 436:5-7 and 436:18-20.

Handle quantity errors by reporting at the end of the prolog and the end of the instance any quantities that need to be increased.

Make noSuchReservedName error more helpful.

Function characters should perform their function even when markup recognition is suppressed. (I think I've handled this.)

Give a warning for notation attribute that is #CONREF.

Try to separate out Parser::compileModes().

In CompiledModelGroup have vector that gives an index for each element type that occurs in the model group. Then in each leaf content token have a vector that maps this index to a LeafContentToken *, if there is a simple transition (no and groups involved) to that element type.

MatchState::minAndDepth and MatchState::AndInfo should be separated off info object pointed to from MatchState; pointer would be null for elements with no AND groups.

What to do if we encounter USELINK or USEMAP declaration after DTD in prolog? Should stop prolog and start DTD. If we have SCOPE INSTANCE then if we get an unknown declaration type in prolog, don't give error, but unget token and start instance.

?Have separate version of reportNonSgml() for case where datachar is allowed.

Implement CONCUR.

AttributeDefinition constructors should have Owner<DeclaredValue> &, arguments to avoid storage leaks when exceptions are thrown.

Create a list like IList but which keeps track of length. Then combine tagLevel into openElement stack, and inputLevel into inputStack.

AttributeDefinition::makeValue should return ConstResourcePointer<AttributeValue>.

Syntax member functions should use reference for result.

Have a LocationKey data structure that can be used to determine the relative order of locations in possibly different concurrent instances. Contains: offset in document instance; is it a replacement of named character reference; for each entity and numeric character reference: location in entity and index of dtd in which instance is declared.

On systems with fixed stacks, avoid unlimited stack growth: hard limits on number of SUBDOCS and GRPLVL.

With extendData and extendS don't extend more than some fixed amount (eg 1024), otherwise could overrun InputSource buffer on 16-bit system.

Have a location in ElementType saying where the first mention of the element name was. Useful for giving warnings about undefined elements.

How to detect 310:8-10?

AttributeSemantics should return const pointers rather than ResourcePointer's

Rename Parser -> ParserImpl SgmlParser -> Parser Syntax::isB -> Syntax::isBlank

What mode should be used for parsing other prolog after document element?

Flag out of context data.

Provide mechanism to allow character names to be mapped onto universal character numbers.

Provide mechanism to allow specification of wbat characters are control characters (for the purposes of SHUNCHAR controls).

With SCOPE INSTANCE, which syntax should be used for delimiters in bracketed text entities?

Better error messages for ambiguous delimiters.

Do we need both EndLpd and ComplexLink/SimpleLink events?

What to do about 457:19-21?

Rename lpd_ to activeLpd_; allLpd_ to lpd_.

Test for validity of character numbers in syn ref charset (perhaps unnecessary, because bad numbers won't be translateable into doc charset).

Option to read bootstrap character set from entity.

In AttributeDefinitionList have a flag that is true if any checking of unspecified values in attribute list is needed (ie CURRENT, REQUIRED, non-implied ENTITY, non-implied NOTATION). In this case can avoid running over attributes in AttributeList::finish, by computing value only when user calls Attribute::value().

Construct link attributes from definition if no applicable link rule. (RAST maybe doesn't want this. Make it a separate method in LinkProcess and use in SgmlsEventHandler. Very useful with ArcEngine.)

Shouldn't have OpenElementInfo in Message. Instead use RTTI.

noSuchAttribute: include gi in message; if element is undefined, don't give error at all

noSuchAttributeToken: say what element or entity

nonExistentEntityRef should say document/link type

Distinguish errors that are totally recoverable.

Find better way to unpack entity information in entity attribute.

Entity Manager

Build document<->internal translation tables once per document not once per entity.

Avoid document<->internal translations when one is the subset of the other (or something like that).

In cases where it won't cause problems, don't translate non-SGML/unrepresentable characters when doing document<->internal translations, so that user gets better error message.

Recover better from unknown document character sets (shouldn't report them as non-SGML characters).

Maybe need to keep track of set of SGML characters as numbers in document character set.

Optimize TranslateDecoder where underlying codingSystem is identity by using simple lookup table.

Make use of charset parameter in MIME header for HTTP. Also generate AcceptCharsets line in request.

Implement .mim files (if extension of file is same as environment variable SP_MIME_EXT assume it has a MIME header).

Avoid using TranslateCodingSystem when translation is a no-op.

Make SP_CONVERT when !SP_MULTI_BYTE.

Avoid requiring that BASE sysid exist.

When FSI has only a single storage manager and that is a literal, return an InternalInputSource.

Allow user of InputSource to specify what bit combinations they want to see for RS and RE.

Have environment variable SP_INPUT_BCTF that overrides SP_BCTF for input.

Avoid using numeric character references for all characters in storage object identifier of literal storage manager in effective system identifier.

Instead of registering coding system pass CodingSystemKit that can create that can create coding systems.

Need BCTF entry in catalog that specifies default BCTF.

Allow encodings to be externally specified (eg in a catalog) as a combination of a BCTF and a character set.

An SOEntityCatalog should consist of a Vector<ConstPtr<EntityCatalog> > which can be shared between several catalogs. This would facilitate > caching.

Maybe need to be able to specify two types of catalog entry file: one used for all documents; one used for this document alone.

Allow end-tags in FSIs. Support alternative SOSs.

Character sets in the catalog need rethinking. Also character set of ParsedSystemId::Map::publicId.

Allow for HTTP proxy.

Cache catalogs.

Use Microsoft ActiveX (formerly Sweeper) DLL on Win95 or NT.

Implement DTDDECL catalog entry.

Support FILE URLs.

Perhaps don't want to do searching for catalog files (and perhaps command line files).

Provide mechanism for specifying when (if at all) base dir is searched relative to other dirs.

Provide extension to catalog format to distinguish entities declared in non-base DTDs. Perhaps precede entity name by document type name surrounded by GRPO/GRPC delimiters.

URLStorageManager should use a DescriptorManager shared with PosixStorageManager.

URLStorageManager::resolveRelative should delete "xxx/../" and "./" components. Might also be a good idea to resolve host names.

Implement JIS encoding system (what should be done with half-width yen and overbar in JIS-Roman? translate to Unicode).

ExternalInfoImpl::convertOffset: when the position is the character past the last character and the last character was a newline, line number should be number of lines + 1.

Try harder to rewind in StdioStorageObject.

Generic

Provide mechanism to access data entities using generated system id.

Support IMPLICIT/SIMPLE LINK.

Character set information.

Need to know space character that separates token. Alternatively provide broken down view of tokens.

Need to know IDREF (and other declared values)?

nsgmls

Problem with "\#n;" escape sequence is that it might get used other than in data. Probably should get rid of this feature, and give a warning when there's an unencodable character.

Internal

Make sure all files use #pragma i/i.

Get rid of assumption that Vector<T>::size_type, String<T>::size_type is size_t.

Maybe align Owner with auto_ptr.

Get rid of uses of string as identifier.

?Maybe support non-const copy constructors for NCVector/Owner.

Get rid of asEntityOrigin (as far as possible). Make InputSourceOrigin::defLocation virtual on origin. Avoid excessive use of asInputSourceOrigin.

Hash should define Hash(String<unsigned char>), Hash(String<unsigned short>) etc.

Invert sense of SP_HAVE_BOOL define.

Get rid of OutputCharStream::open. Instead have OutputCharStream::setEncoding. (Perhaps make a friend so we can use ostream if we're not interested in encodings.) Allow use of ostream instead of OutputCharStream. Change ParserToolkit::errorStream_'s coding system when we change the coding system.

Support 32-bit Char. Need to fix XcharMap and SubstTable. Detemplatize SubstTable. Then support UTF-16.

Have a common version of Ptr for things that have a virtual destructor.

Have a common version of Owner for all things that have a virtual destructor.

Inheritance in AttributeSemantics unnecesary.

Rename ISet -> RangeSet.

ISet and RangeMap should use binary search.

Better hash function for wide characters.

OutputCharStream should canonically use RS/RE and translate to system newline char with raw option that prevents this.

Avoid having Entity.h depend on ParserState, perhaps by double dispatching.

Add uses of explicit keyword.

When generating message.h file; if we don't have .cxx file and namespaces are supported, use anonymous namespace.

Application framework

Only use static programName for outOfMemory message.

Need to use AppChar *const * not AppChar ** in CmdLineApp.

When reporting message with MessageEventHandler need to be able to update error count.

Option argument names need to be internationalized.

Support response files for DOS.

Sort options in usage message.

StringMessageArg should be associated with a character set (in particular, need to distinguish parser character sets from StorageManager character sets).

Should translate StringMessageArg from document character set to system character set. Have MessageReporter::setDocumentCharacter function.

In MessageReporter, maybe distinguish messages coming from the parser.

Don't ever give a non-existent file as a location in a error message.

Text of messages should be able to specify that an open quote or close quote should be inserted at a particular point.

When outputting a StringMessageArg translate \r to \n.

Make sure wild cards work in VC++ and MS-DOS.

Win32

Remove path and extension from program name in error messages.

Compilers can typically eliminate unused templates. Reengineer Vector to reduce code size with such compilers.

Store messages in resources; requires numeric tags for messages.

Should automatically register all available code pages.

Make use of IsTextUnicode() API.

Have StorageManager that uses Win32 API directly. Would avoid limits on number of open files. Also use flag that says file is being accessed sequentially.

Allow DTDs to be compiled into binary by having storage manager that uses resource ids.

Architecture engine

Should give an error with -A if the specified arch does not exist.

Interpret APPINFO parameter, and automatically enable architectural processing based on this.

Handle derived architecture support attributes.

When doing architectural processing in link type, not possible to have notation declaration, so need some other way to specify public identifier for architecture.

Allow DOCTYPE to be declared inline (as with CONCUR or EXPLICIT LINK).

Grok conventional comments.

Make work automatically with EventHandlers that process subdoc. Make references to subdocs architectural.

Support different SGML declaration for meta-DTD.

Maybe should map internal sdata/cdata entities to copies in meta-DTD.

Perhaps when getting open element info should indicate that gis are architectural.

Think about references to SDATA entities in default values in meta-DTD.

Add default entity from real DTD to meta-DTD.

Tokenize ArcForm attribute appropriately.

Make special case for parsing DTD when entity can't be accessed.

Try to provide extension that would allow architecture elements be asynchronous with actual elements? This would provide CONCUR functionality.

sgmlnorm

Avoid bogus newline from invalid empty document.

Avoid always escaping >.

Option to say whether to use character references for 8-bit characters.

Option to output implied attributes.

Option to output all non-implied attributes.

Option to omit attribute name with name tokens.

Protect against recognition of short references.

Option to preserve CDATA entity references.

Option to output general entity declarations in DTD subset (but what about data attributes)?

spam

Option to normalize names.

Add comments round expanded entities to prevent false delimiter recognition.

Add newline at the end if last thing was omitted tag.

Option to warn about changes in internal entities when not expanding.

Documentation

Error message format.

<catalog> FSI tag.

James Clark
jjc@jclark.com
jade-1.2.1/doc/index.htm100444 764 764 4676 6604607552 12620 0ustar jjcjjc SP

SP

An SGML System Conforming to International Standard ISO 8879 -- Standard Generalized Markup Language

The following documents are available:

There is a mailing list for programmer-level discussions of SP. Mail subscription requests sp-prog-request@jclark.com. Messages for the list should go to sp-prog@jclark.com.

For information about SGML, see

I would like to hear about any bugs you find in SP. When reporting a bug, please always include a complete self-contained file that will enable me to reproduce the bug. I am also interested in receiving suggestions for improvements to SP no matter how small.

James Clark
jjc@jclark.com
jade-1.2.1/doc/new.htm100444 764 764 17060 6604607552 12311 0ustar jjcjjc What's new in SP?

What's new?

This document describes recent user-visible changes in SP. Bug fixes are not described.

Version 1.3

Better support for XML based on the Web SGML Adaptations Annex to ISO 8879.

New SX application that converts SGML to XML.

The architecture engine has been updated to match HyTime 2nd Edition (This means that you must use <?IS10744 ArcBase arch> rather than <?ArcBase arch>.)

Version 1.2

The Extended Naming Rules TC is supported. The extensions supported in external concrete syntaxes have been changed for compatibility with this.

The handling of character sets in the multi-byte version is more sophisticated. The character sets HTML page gives more information.

SP has built-in knowledge of many more base character sets.

nsgmls will report empty elements if the -oempty option is used.

DTD-less parsing is possible, by using the -wno-valid option to allow undefined elements and attributes. This allows parsing of well-formed XML documents, whether or not valid.

Version 1.1

There is now generalized support for architectural form processing.

Documentation is now in HTML format.

A BASE catalog entry can be used to specify a base system identifier for resolving relative storage object identifiers occurring in the catalog.

A LITERAL storage manager is now provided.

Programs have a -E option that sets the maximum number of errors.

A DELEGATE catalog entry allows distributed resolution of public identifiers.

nsgmls has a -B (batch mode) option that allows you to parse multiple documents with a single invocation of nsgmls.

In nsgmls the -c option now specifies a catalog as it does in spam and sgmlnorm, in addition to the -m option that previously did this.

The -n option has been replaced by a -onotation-sysid which applies to nsgmls only, and a -wnotation-sysid which applies generally.

SP can be built as a DLL under Win32.

Version 1.0

The syntax of system identifiers has completely changed. The new syntax is based on the syntax of formal system identifiers defined in ISO/IEC 10744 (HyTime) Technical Corrigendum 1, Annex D.

The NSGMLS_CODE environment variable has been renamed to SP_BCTF. nsgmls has a -b option to specify the bit combination transformation format to be used for output.

A list of directories in which files specified in system identifiers should be searched for can be specified using the environment variable SGML_SEARCH_PATH or the option -D.

Individual SYSTEM identifiers in external identifiers can be overridden using SYSTEM entries in the catalog.

The OVERRIDE catalog entry now takes a YES/NO argument. (This change was required for conformance to the SGML Open TR.) It applies to each entry individually rather than to the entire catalog.

The -w options of nsgmls and spam have been enhanced. In spam, the -w option takes an argument as with nsgmls. There are new warnings for minimized start and end tags (-wunclosed, -wempty, -wnet and -wmin-tag); for unused short reference maps (-wunused-maps); for unused parameter entities (-wunused-param). -wall now doesn't include those warnings that are about conditions that, in the opinion of the author, there is no reason to avoid. A warning can be turned off by using its name prefixed by no-; thus -wmin-tag -wno-net is equivalent to -wunclosed -wempty. The -w option is also used to turn off errors: -wno-idref replaces the -x option; -wno-significant replaces the -X option.

In the output of nsgmls, characters that cannot be represented in the encoding translation specified by the NSGMLS_BCTF environment variable are represented using an escape sequence of the form \#N; when N is a decimal integer.

In the multi-byte versions of nsgmls there are new BCTFs is8859-N for N = 1,...,9.

There is a -o option to nsgmls which makes it output additional information: -oentity outputs information about all entities; -oid distinguish attributes with a declared value of id; -oincluded distinguishes included subelements.

nsgmls now automatically searches for a catalog entry file called "catalog" in the same place as the document entity. Note that when the document entity is specified with a URL, this matches the behaviour of Panorama.

A catalog entry file can contain CATALOG entries specifying additional catalog entry files. This matches the behaviour of Panorama.

The parser can now make available to an application complete information about the markup of prologs and SGML declarations. It would now be possible, for example, to use SP to write a DTD editor. spam exploits this to a limited extent: if the -p option is specified twice, then parameter entity references between declarations will be expanded; the -mreserved option puts all reserved names in upper-case; with the -mshortref option short reference use declarations and short reference mapping declarations will be removed; attribute specification lists in data attribute specifications in entity declarations can be normalized like attribute specification lists in start-tags; with -mms it resolves IGNORE/INCLUDE marked sections.

nsgmls has a -C option which causes the command line filenames to be treated as a catalog whose DOCUMENT entry specifies the document entity.

nsgmls has a -n option which causes it to generate system identifiers for notations in the same way as it does for entities.

spam now has a -f option like nsgmls.

The interface between the parser and entity manager has been redesigned so that the entity manager can be used independently of the parser. This is exploited by a new program called spent that prints an entity with a specified system identifier on the standard output.

In most cases, a Control-Z occurring as the last byte in a file will be stripped. This is controlled by the zapeof attribute in formal system identifiers.

Version 0.4

External concrete syntaxes, character sets and capacity sets are supported using PUBLIC entries in catalog files. The multicode code core and reference syntaxes are no longer built-in. Only a few character sets are now built-in.

Within external concrete syntaxes, various useful extensions are permitted. In particular, an ellipsis syntax is allowed for the specification of name characters and single character short references. It is now practical to specify tens of thousands of additional name characters.

The default SGML declaration is more permissive.

nsgmls has a -x option that inhibits checking of idrefs.

nsgmls has a -w option that can enable additional warnings. In particular, -wmixed will warn about mixed content models that do not allow #pcdata everywhere.

The meaning of the f command in the output of nsgmls has changed slightly. It now gives the effective system identifier of the entity.

The functionality of the rast program has been merged into the nsgmls program and the rast program has been removed. The -t option makes nsgmls generate a RAST result.

spam has a -l option that uses lower-case for added names that were subject to upper-case substitution.

spam has a -mcurrent option that adds omitted attribute specifications for current attributes.

James Clark
jjc@jclark.com
jade-1.2.1/doc/nsgmls.htm100444 764 764 26110 6604607552 13017 0ustar jjcjjc NSGMLS

NSGMLS

An SGML System Conforming to International Standard ISO 8879 --
Standard Generalized Markup Language

SYNOPSIS

nsgmls [ -BCdeglprsuv ] [ -alinktype ] [ -bbctf ] [ -csysid ] [ -Ddirectory ] [ -Emax_errors ] [ -ffile ] [ -iname ] [ -ooutput_option ] [ -tfile ] [ -wwarning_type ] [ sysid... ]

DESCRIPTION

Nsgmls parses and validates the SGML document whose document entity is specified by the system identifiers sysid... and prints on the standard output a simple text representation of its Element Structure Information Set. (This is the information set which a structure-controlled conforming SGML application should act upon.) If more than one system identifier is specified, then the corresponding entities will be concatenated to form the document entity. Thus the document entity may be spread amongst several files; for example, the SGML declaration, prolog and document instance set could each be in a separate file. If no system identifiers are specified, then nsgmls will read the document entity from the standard input. A command line system identifier of - can be used to refer to the standard input. (Normally in a system identifier, <osfd>0 is used to refer to standard input.)

OPTIONS

The following options are available:

-alinktype
Make link type linktype active. Not all ESIS information is output in this case: the active LPDs are not explicitly reported, although each link attribute is qualified with its link type name; there is no information about result elements; when there are multiple link rules applicable to the current element, nsgmls always chooses the first.
-bbctf
-bencoding
This determines the encoding used for output. If in fixed character set mode it specifies the name of an encoding; if not, it specifies the name of a BCTF.
-B
Batch mode. Parse each sysid... specified on the command line separately, rather than concatenating them. This is useful mainly with -s.

If -tfilename is also specified, then the specified filename will be prefixed to the sysid to make the filename for the RAST result for each sysid.

-csysid
Map public identifiers and entity names to system identifiers using the catalog entry file whose system identifier is sysid. Multiple -c options are allowed. If there is a catalog entry file called catalog in the same place as the document entity, it will be searched for immediately after those specified by -c.
-C
The filename... arguments specify catalog files rather than the document entity. The document entity is specified by the first DOCUMENT entry in the catalog files.
-Ddirectory
Search directory for files specified in system identifiers. Multiple -D options are allowed. See the description of the osfile storage manager for more information about file searching.
-e
Describe open entities in error messages. Error messages always include the position of the most recently opened external entity.
-Emax_errors
Nsgmls will exit after max_errors errors. If max_errors is 0, there is no limit on the number of errors. The default is 200.
-ffile
Redirect errors to file. This is useful mainly with shells that do not support redirection of stderr.
-g
Show the generic identifiers of open elements in error messages.
-iname
Pretend that
<!ENTITY % name "INCLUDE">

occurs at the start of the document type declaration subset in the SGML document entity. Since repeated definitions of an entity are ignored, this definition will take precedence over any other definitions of this entity in the document type declaration. Multiple -i options are allowed. If the SGML declaration replaces the reserved name INCLUDE then the new reserved name will be the replacement text of the entity. Typically the document type declaration will contain

<!ENTITY % name "IGNORE">

and will use %name; in the status keyword specification of a marked section declaration. In this case the effect of the option will be to cause the marked section not to be ignored.

-ooutput_option
Output additional information accordig to output_option:
entity
Output definitions of all general entities not just for data or subdoc entities that are referenced or named in an ENTITY or ENTITIES attribute.
id
Distinguish attributes whose declared value is ID.
line
Output L commands giving the current line number and filename.
included
Output an i command for included subelements.
empty
Output an e command for elements which are not allowed to have an end-tag, that is those with a declared content of empty or with a content reference attribute.
notation-sysid
Output an f command before an N command, if a system identifier could be generated for that notation.
nonsgml
In fixed character set mode, output \% escape sequences for non-SGML data characters. Non-SGML data characters can result from numeric character references.

Multiple -o options are allowed.

-p
Parse only the prolog. Nsgmls will exit after parsing the document type declaration. Implies -s.
-s
Suppress output. Error messages will still be printed.
-tfile
Output to file the RAST result as defined by ISO/IEC 13673:1995 (actually this isn't quite an IS yet; this implements the Intermediate Editor's Draft of 1994/08/29, with changes to implement ISO/IEC JTC1/SC18/WG8 N1777). The normal output is not produced.
-v
Print the version number.
-wtype
Control warnings and errors. Multiple -w options are allowed. The following values of type enable warnings:
xml
Warn about constructs that are not allowed by XML.
mixed
Warn about mixed content models that do not allow #pcdata anywhere.
sgmldecl
Warn about various dubious constructions in the SGML declaration.
should
Warn about various recommendations made in ISO 8879 that the document does not comply with. (Recommendations are expressed with ``should'', as distinct from requirements which are usually expressed with ``shall''.)
default
Warn about defaulted references.
duplicate
Warn about duplicate entity declarations.
undefined
Warn about undefined elements: elements used in the DTD but not defined.
unclosed
Warn about unclosed start and end-tags.
empty
Warn about empty start and end-tags.
net
Warn about net-enabling start-tags and null end-tags.
min-tag
Warn about minimized start and end-tags. Equivalent to combination of unclosed, empty and net warnings.
unused-map
Warn about unused short reference maps: maps that are declared with a short reference mapping declaration but never used in a short reference use declaration in the DTD.
unused-param
Warn about parameter entities that are defined but not used in a DTD. Unused internal parameter entities whose text is INCLUDE or IGNORE won't get the warning.
notation-sysid
Warn about notations for which no system identifier could be generated.
all
Warn about conditions that should usually be avoided (in the opinion of the author). Equivalent to: mixed, should, default, undefined, sgmldecl, unused-map, unused-param, empty and unclosed.

A warning can be disabled by using its name prefixed with no-. Thus -wall -wno-duplicate will enable all warnings except those about duplicate entity declarations.

The following values for warning_type disable errors:

no-idref
Do not give an error for an ID reference value which no element has as its ID. The effect will be as if each attribute declared as an ID reference value had been declared as a name.
no-significant
Do not give an error when a character that is not a significant character in the reference concrete syntax occurs in a literal in the SGML declaration. This may be useful in conjunction with certain buggy test suites.
no-valid
Do not require the document to be type-valid. This has the effect of changing the SGML declaration to specify VALIDITY NOASSERT and IMPLYDEF ATTLIST YES ELEMENT YES. An option of -wvalid has the effect of changing the SGML declaration to specify VALIDITY TYPE and IMPLYDEF ATTLIST NO ELEMENT NO. If neither -wvalid nor -wno-valid are specified, then the VALIDITY and IMPLYDEF specified in the SGML declaration will be used.

The following options are also supported for backwards compatibility with sgmls:

-d
Same as -wduplicate.
-l
Same as -oline.
-msysid
Same as -c.
-r
Same as -wdefault.
-u
Same as -wundef.

James Clark
jjc@jclark.com
jade-1.2.1/doc/sgmldecl.htm100444 764 764 16264 6604607552 13317 0ustar jjcjjc SP - SGML declaration

Handling of the SGML declaration in SP

Extended Naming Rules

SP supports the Extended Naming Rules as specified in Annex J of ISO 8879:1986 (added by the 1996 technical corrigendum).

Default SGML declaration

If the SGML declaration is omitted and there is no applicable SGMLDECL entry in a catalog, the following declaration will be implied:

		    <!SGML "ISO 8879:1986"
			    CHARSET
BASESET  "ISO 646-1983//CHARSET
	  International Reference Version (IRV)//ESC 2/5 4/0"
DESCSET    0  9 UNUSED
	   9  2  9
	  11  2 UNUSED
	  13  1 13
	  14 18 UNUSED
	  32 95 32
	 127  1 UNUSED
CAPACITY PUBLIC    "ISO 8879:1986//CAPACITY Reference//EN"
SCOPE    DOCUMENT
SYNTAX
SHUNCHAR CONTROLS 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
	 18 19 20 21 22 23 24 25 26 27 28 29 30 31 127 255
BASESET  "ISO 646-1983//CHARSET International Reference Version
	  (IRV)//ESC 2/5 4/0"
DESCSET  0 128 0
FUNCTION RE                    13
	 RS                    10
	 SPACE                 32
	 TAB       SEPCHAR     9
NAMING   LCNMSTRT  ""
	 UCNMSTRT  ""
	 LCNMCHAR  "-."
	 UCNMCHAR  "-."
	 NAMECASE  GENERAL     YES
		   ENTITY      NO
DELIM    GENERAL   SGMLREF
	 SHORTREF  SGMLREF
NAMES    SGMLREF
QUANTITY SGMLREF
	 ATTCNT    99999999
	 ATTSPLEN  99999999
	 DTEMPLEN  24000
	 ENTLVL    99999999
	 GRPCNT    99999999
	 GRPGTCNT  99999999
	 GRPLVL    99999999
	 LITLEN    24000
	 NAMELEN   99999999
	 PILEN     24000
	 TAGLEN    99999999
	 TAGLVL    99999999
			   FEATURES
MINIMIZE DATATAG   NO
	 OMITTAG   YES
	 RANK      YES
	 SHORTTAG  YES
LINK     SIMPLE    YES 1000
	 IMPLICIT  YES
	 EXPLICIT  YES 1
OTHER    CONCUR    NO
	 SUBDOC    YES 99999999
	 FORMAL    YES
			  APPINFO NONE>

with the exception that all characters that are neither significant nor shunned will be assigned to DATACHAR.

Character sets

A character in a base character set is described either by giving its number in a universal character set, or by specifying a minimum literal. The first 65536 character numbers in the universal character set are assumed to be the same as in Unicode 2.0 (ISO/IEC 10646). The remaining character numbers can be assigned in any way convenient.

The public identifier of a base character set can be associated with an entity that describes it by using a PUBLIC entry in the catalog entry file. The entity must be a fragment of an SGML declaration consisting of the portion of a character set description, following the DESCSET keyword, that is, it must be a sequence of character descriptions, where each character description specifies a described character number, the number of characters and either a character number in the universal character set, a minimum literal or the keyword UNUSED. Character numbers in the universal character set can be as big as 99999999.

In addition SP has built in knowledge of many character sets. These are identified using the designating sequence in the public identifier. The following designating sequences are recognized:

ESC 2/5 4/0
The full set of ISO 646 IRV. This is not a registered character set, but is recommended by ISO 8879 (clause 10.2.2.4).
ESC 2/8 4/0
G0 set of ISO 646 IRV, ISO Registration Number 2.
ESC 2/8 4/2
G0 set of ASCII, ISO Registration Number 6.
ESC 2/1 4/0
C0 set of ISO 646, ISO Registration Number 1.
ESC 2/13 4/1
G1 set of ISO 8859-1
ESC 2/13 4/2
G1 set of ISO 8859-2
ESC 2/13 4/3
G1 set of ISO 8859-3
ESC 2/13 4/4
G1 set of ISO 8859-4
ESC 2/13 4/12
G1 set of ISO 8859-5
ESC 2/13 4/7
G1 set of ISO 8859-6
ESC 2/13 4/6
G1 set of ISO 8859-7
ESC 2/13 4/8
G1 set of ISO 8859-8
ESC 2/13 4/13
G1 set of ISO 8859-9
ESC 2/8 4/10
Roman set from JIS-X-0202. JIS version of ISO 646. ISO Registration Number 14.
ESC 2/8 4/9
Katakana set from JIS X 0201. ISO Registration Number 13.
ESC 2/4 4/2
ESC 2/6 4/0 ESC 2/4 4/2
JIS X 0208-1990. ISO Registration Numbers 87 and 168.
ESC 2/4 2/8 4/4
JIS X 0212-1990. ISO Registration Number 159.
ESC 2/4 4/1
GB 2312-80. ISO Registration Number 58.
ESC 2/4 2/8 4/3
KS C 5601-1992. ISO Registration Number 149.
ESC 2/5 2/15 4/0
ESC 2/5 2/15 4/3
ESC 2/5 2/15 4/5
ISO/IEC 10646 UCS-2
ESC 2/5 2/15 4/1
ESC 2/5 2/15 4/4
ESC 2/5 2/15 4/6
ISO/IEC 10646 UCS-4

Concrete syntaxes

The public identifier for a public concrete syntax can be associated with an entity that describes using a PUBLIC entry in the catalog entry file. The entity must be a fragment of an SGML declaration consisting of a concrete syntax description starting with the SHUNCHAR keyword as in an SGML declaration. The entity can also make use of the following extensions:

  • The Extended Naming Rules extensions can be used regardless of the minimum literal used in the SGML declaration.
  • An added function can be expressed as a parameter literal instead of a name.
  • The replacement for a reference reserved name can be expressed as a parameter literal instead of a name.
  • The total number of characters specified for UCNMCHAR or UCNMSTRT may exceed the total number of characters specified for LCNMCHAR or LCNMSTRT respectively. Each character in UCNMCHAR or UCNMSTRT which does not have a corresponding character in the same position in LCNMCHAR or LCNMSTRT is simply assigned to UCNMCHAR or UCNMSTRT without making it the upper-case form of any character.
  • Within the specification of the short reference delimiters, a parameter literal containing exactly one character may be followed by the delimiter - and another parameter literal containing exactly one character. This has the same meaning as a sequence of parameter literals one for each character number that is greater than or equal to the number of the character in the first parameter literal and less than or equal to the number of the character in the second parameter literal.
  • A number may be used as a delimiter in the DELIM section with the same meaning as a parameter literal containing just a numeric character reference with that number.

Capacity sets

The public identifier for a public capacity set can be associated with an entity that describes using a PUBLIC entry in the catalog entry file. The entity must be a fragment of an SGML declaration consisting of a sequence of capacity names and numbers.

James Clark
jjc@jclark.com
jade-1.2.1/doc/sgmlnorm.htm100444 764 764 7276 6604607552 13346 0ustar jjcjjc SGMLNORM

SGMLNORM

An SGML System Conforming to International Standard ISO 8879 --
Standard Generalized Markup Language

SYNOPSIS

sgmlnorm [ -Cdemnv ] [ -bbctf ] [ -ccatalog ] [ -Ddir ] [ -iname ] [ -wwarning ] sysid...

DESCRIPTION

Sgmlnorm prints on the standard output a normalized document instance for the SGML document contained in the concatenation of the entities with system identifiers sysid....

When the normalized instance is prefixed with the original SGML declaration and prolog, it will have the same ESIS as the original SGML document, with the following exceptions:

  • The output of sgmlnorm does not protect against the recognition of short reference delimiters, so any USEMAP declarations must be removed from the DTD.
  • The normalized instance will use the reference delimiters, even if the original instance did not.
  • If marked sections are included in the output using the -m option, the reference reserved names will be used for the status keywords even if the original instance did not.
  • Any ESIS information relating to the SGML LINK feature will be lost.

The normalized instance will not use any markup minimization features except that:

  • Any attributes that were not specified in the original instance will not be included in the normalized instance. (Current attributes will be included.)
  • If the declared value of an attribute was a name token group, and a value was specified that was the same as the name of the attribute, then the attribute name and value indicator will be omitted. For example, with HTML sgmlnorm would output <DL COMPACT> rather than <DL COMPACT="COMPACT">

The following options are available:

-bbctf
Use the BCTF with name bctf for output.
-cfile
Use the catalog entry file file.
-C
This has the same effect as in nsgmls.
-d
Output a document type declaration with the same external identifier as the input document, and with no internal declaration subset. No check is performed that the document instance is valid with respect to this DTD.
-Ddirectory
Search directory for files specified in system identifiers. This has the same effect as in nsgmls.
-e
Describe open entities in error messages.
-iname
This has the same effect as in nsgmls.
-m
Output any marked sections that were in the input document instance.
-n
Output any comments that were in the input document instance.
-r
Raw output. Don't perform any conversion on RSs and REs when printing the entity. The entity would typically have the storage manager attribute records=asis.
-v
Print the version number.
-wtype
Control warnings and errors according to type. This has the same effect as in nsgmls.

James Clark
jjc@jclark.com
jade-1.2.1/doc/sgmlsout.htm100444 764 764 24631 6604607552 13377 0ustar jjcjjc Nsgmls Output Format

Nsgmls Output Format

The output is a series of lines. Lines can be arbitrarily long. Each line consists of an initial command character and one or more arguments. Arguments are separated by a single space, but when a command takes a fixed number of arguments the last argument can contain spaces. There is no space between the command character and the first argument. Arguments can contain the following escape sequences:

\\
A \.
\n
A record end character.
\|
Internal SDATA entities are bracketed by these.
\nnn
The character whose code is nnn octal.

A record start character will be represented by \012. Most applications will need to ignore \012 and translate \n into newline.

\#n;
The character whose number is n decimal in the internal character set. n can have any number of digits. This is used for characters that are not representable by the encoding used for output. This will only occur with the multibyte version of nsgmls.
\%n;
The character whose number is n decimal in the document character set. n can have any number of digits. This is used for data characters resulting from numeric character references to non-SGML characters in fixed character set mode.

The possible command characters and arguments are as follows:

(gi
The start of an element whose generic identifier is gi. Any attributes for this element will have been specified with A commands.
)gi
The end of an element whose generic identifier is gi.
-data
Data.
&name
A reference to an external data entity name; name will have been defined using an E command.
?pi
A processing instruction with data pi.
Aname val
The next element to start has an attribute name with value val which takes one of the following forms:
IMPLIED
The value of the attribute is implied.
CDATA data
The attribute is character data. This is used for attributes whose declared value is CDATA.
NOTATION nname
The attribute is a notation name; nname will have been defined using a N command. This is used for attributes whose declared value is NOTATION.
ENTITY name...
The attribute is a list of general entity names. Each entity name will have been defined using an I, E or S command. This is used for attributes whose declared value is ENTITY or ENTITIES.
TOKEN token...
The attribute is a list of tokens. This is used for attributes whose declared value is anything else.
ID token
The attribute is an ID value. This will be output only if the -oid option is specified. Otherwise TOKEN will be used for ID values.
Dename name val
This is the same as the A command, except that it specifies a data attribute for an external entity named ename. Any D commands will come after the E command that defines the entity to which they apply, but before any & or A commands that reference the entity.
atype name val
The next element to start has a link attribute with link type type, name name, and value val, which takes the same form as with the A command.
Nnname
Define a notation nname. This command will be preceded by a p command if the notation was declared with a public identifier, and by a s command if the notation was declared with a system identifier. If the -onotation-sysid option was specified, this command will also be preceded by an f command giving the system identifier generated by the entity manager (unless it was unable to generate one). A notation will only be defined if it is to be referenced in an E command or in an A command for an attribute with a declared value of NOTATION.
Eename typ nname
Define an external data entity named ename with type typ (CDATA, NDATA or SDATA) and notation not. Thiscommand will be preceded by an f command giving the system identifier generated by the entity manager (unless it was unable to generate one), by a p command if a public identifier was declared for the entity, and by a s command if a system identifier was declared for the entity. not will have been defined using a N command. Data attributes may be specified for the entity using D commands. If the -oentity option is not specified, an external data entity will only be defined if it is to be referenced in a & command or in an A command for an attribute whose declared value is ENTITY or ENTITIES.
Iename typ text
Define an internal data entity named ename with type typ and entity text text. The typ will be CDATA or SDATA unless the -oentity option was specified, in which case it can also be PI or TEXT (for an SGML text entity). If the -oentity option is not specified, an internal data entity will only be defined if it is referenced in an A command for an attribute whose declared value is ENTITY or ENTITIES.
Sename
Define a subdocument entity named ename. This command will be preceded by an f command giving the system identifier generated by the entity manager (unless it was unable to generate one), by a p command if a public identifier was declared for the entity, and by a s command if a system identifier was declared for the entity. If the -oentity option is not specified, a subdocument entity will only be defined if it is referenced in a { command or in an A command for an attribute whose declared value is ENTITY or ENTITIES.
Tename
Define an external SGML text entity named ename. This command will be preceded by an f command giving the system identifier generated by the entity manager (unless it was unable to generate one), by a p command if a public identifier was declared for the entity, and by a s command if a system identifier was declared for the entity. This command will be output only if the -oentity option is specified.
ssysid
This command applies to the next E, S, T or N command and specifies the associated system identifier.
ppubid
This command applies to the next E, S, T or N command and specifies the associated public identifier.
fsysid
This command applies to the next E, S, T or, if the -onotation-sysid option was specified, N command and specifies the system identifier generated by the entity manager from the specified external identifier and other information about the entity or notation.
{ename
The start of the SGML subdocument entity ename; ename will have been defined using a S command.
}ename
The end of the SGML subdocument entity ename.
Llineno file
Llineno
Set the current line number and filename. The file argument will be omitted if only the line number has changed. This will be output only if the -l option has been given.
#text
An APPINFO parameter of text was specified in the SGML declaration. This is not strictly part of the ESIS, but a structure-controlled application is permitted to act on it. No # command will be output if APPINFO NONE was specified. A # command will occur at most once, and may be preceded only by a single L command.
C
This command indicates that the document was a conforming SGML document. If this command is output, it will be the last command. An SGML document is not conforming if it references a subdocument entity that is not conforming.
i
The next element to start is an included subelement. This will be output only if the -oincluded option is specified.
e
The next element to start has a declared content of EMPTY or a content reference attribute, and so its end-tag must be omitted. This will be output only if the -oempty option is specified.

James Clark
jjc@jclark.com
jade-1.2.1/doc/spam.htm100444 764 764 14752 6606574404 12466 0ustar jjcjjc SPAM

SPAM

An SGML System Conforming to International Standard ISO 8879 --
Standard Generalized Markup Language

SYNOPSIS

spam [ -Cehilprvx ] [ -ccatalog_file ] [ -Ddirectory ] [ -ffile ] [ -mmarkup_option ] [ -oentity_name ] [ -wwarning_type ] sysid...

DESCRIPTION

Spam (SP Add Markup) is an SGML markup stream editor implemented using the SP parser. Spam parses the SGML document contained in sysid... and copies to the standard output the portion of the document entity containing the document instance, adding or changing markup as specified by the -m options. The -p option can be used to include the SGML declaration and prolog in the output. The -o option can be used to output other entities. The -x option can be used to expand entity references.

The following options are available:

-cfile
Use the catalog entry file file.
-C
This has the same effect as in nsgmls.
-Ddirectory
Search directory for files specified in system identifiers. This has the same effect as in nsgmls.
-e
Describe open entities in error messages.
-ffile
Redirect errors to file. This is useful mainly with shells that do not support redirection of stderr.
-h
Hoist omitted tags out from the start of internal entities. If the text at the beginning of an internal entity causes a tag to be implied, the tag will usually be treated as being in that internal entity; this option will instead cause it to be treated as being in the entity that referenced the internal entity. This option makes a difference in conjunction with -momittag or -x -x.
-iname
This has the same effect as in nsgmls.
-l
Prefer lower-case. Added names that were subject to upper-case substitution will be converted to lower-case.
-mmarkup_option
Change the markup in the output according to the value of markup_option as follows:
omittag
Add tags that were omitted using omitted tag minimization. End tags that were omitted because the element has a declared content of EMPTY or an explicit content reference will not be added.
shortref
Replace short references by named entity references.
net
Change null end-tags into unminimized end-tags, and change net-enabling start-tags into unminimized start-tags.
emptytag
Change empty tags into unminimized tags.
unclosed
Change unclosed tags into unminimized tags.
attname
Add omitted attribute names and vis.
attvalue
Add literal delimiters omitted from attribute values.
attspec
Add omitted attribute specifications.
current
Add omitted attribute specifications for current attributes. This option is implied by the attspec option.
shorttag
Equivalent to combination of net, emptytag, unclosed, attname, attvalue and attspec options.
rank
Add omitted rank suffixes.
reserved
Put reserved names in upper-case.
ms
Remove marked section declarations whose effective status is IGNORE, and replace each marked section declaration whose effective status is INCLUDE by its marked section. In the document instance, empty comments will be added before or after the marked section declaration to ensure that ignored record ends remain ignored.

Multiple -m options are allowed.

-oname
Output the general entity name instead of the document entity. The output will correspond to the first time that the entity is referenced in content.
-p
Output the part of the document entity containing the SGML declaration (if it was explicitly present in the document entity) and the prolog before anything else. If this option is specified two or more times, then all entity references occurring between declarations in the prolog will be expanded; this includes the implicit reference to the entity containing the external subset of the DTD, if there is one. Note that the SGML declaration will not be included if it was specified by an SGMLDECL entry in a catalog.
-r
Don't perform any conversion on RSs and REs when outputting the entity. The entity would typically have the storage manager attribute records=asis.
-v
Print the version number.
-wtype
Control warnings and errors according to type. This has the same effect as in nsgmls.
-x
Expand references to entities that are changed. If this option is specified two or more times, then all references to entities that contain tags will be expanded.

BUGS

Omitted tags are added at the point where they are implied by the SGML parser (except as modified by the -h option); this is often not quite where they are wanted.

The case of general delimiters is not preserved.

Incorrect results may be produced if a variant concrete syntax is used which is such that there are delimiters in markup to be added that have a prefix that is a proper suffix of some other delimiter.

If an entity reference in a default value uses the default entity and an entity with that name is subsequently defined and that default value is added to the document instance, then the resulting document may not be equivalent to the original document. Spam will give a warning when the first two conditions are met.

James Clark
jjc@jclark.com
jade-1.2.1/doc/spent.htm100444 764 764 2773 6606574404 12637 0ustar jjcjjc SPENT

SPENT

SYNOPSIS

spent [ -Cnrv ] [ -bbctf ] [ -Ddirectory ] sysid...

DESCRIPTION

Spent (SGML print entity) prints the concatenation of the entities with system identifiers sysid... on the standard output.

The following options are available:

-bbctf
Use the BCTF with name bctf for output.
-C
This has the same effect as in nsgmls.
-Ddirectory
Search directory for files specified in system identifiers. This has the same effect as in nsgmls.
-n
The entity is a non-SGML data entity. This option forces the octets in the storage objects comprising the entity to be copied exactly without any of the conversions that are done for text entities. Implies -r.
-r
Raw output. Don't perform any conversion on RSs and REs when printing the entity. The entity would typically have the storage manager attribute records=asis.
-v
Print the version number.

James Clark
jjc@jclark.com
jade-1.2.1/doc/sx.htm100444 764 764 7512 6606574404 12134 0ustar jjcjjc SX

SX

An SGML System Conforming to International Standard ISO 8879 --
Standard Generalized Markup Language

SYNOPSIS

sx [ -Cehilprvx ] [ -bencoding ] [ -ccatalog_file ] [ -Ddirectory ] [ -ffile ] [ -wwarning_type ] [ -xxml_output_option ] sysid...

DESCRIPTION

SX converts SGML to XML. SX parses and validates the SGML document contained in sysid... and writes an equivalent XML document to the standard output. SX will warn about SGML constructs which have no XML equivalent.

The following options are available:

-bencoding
Use encoding for output. By default SX uses UTF-8.
-cfile
Use the catalog entry file file.
-C
This has the same effect as in nsgmls.
-Ddirectory
Search directory for files specified in system identifiers. This has the same effect as in nsgmls.
-e
Describe open entities in error messages.
-ffile
Redirect errors to file. This is useful mainly with shells that do not support redirection of stderr.
-iname
This has the same effect as in nsgmls.
-v
Print the version number.
-wtype
Control warnings and errors according to type. This has the same effect as in nsgmls.
-xxml_output_option
Control the XML output according to the value of xml_output_option as follows:
no-nl-in-tag
Don't use newlines inside start-tags. Usually SX uses newlines inside start-tags so as to reduce the probability of excessively long lines.
id
Output attribute declarations for ID attributes.
notation
Output declarations for notations.
ndata
Output declarations for external data entities. XML requires these to be NDATA. SX will warn about CDATA and SDATA external data entities and output them as NDATA entities.
cdata
Use XML CDATA sections for CDATA marked sections and for elements with a declared content of CDATA.
comment
Output comment declarations. Comment declarations in the DTD will not be output.
lower
Prefer lower case. Names that were subjected to upper-case substitution by SGML will be folded to lower case. This does not include reserved names; XML requires these to be in upper-case.
pi-escape
Escape &<> in the contents of processing instructions using the amp, lt and gt entities. This allows processing instructions to contain the string >?, but requires that applications handle the escapes.
empty
Use the <e/> syntax for element types e declared as EMPTY.
attlist
Output a ATTLIST declaration for every element specifying the type of all attributes. The default will always be #IMPLIED.

Multiple -x options are allowed.

James Clark
jjc@jclark.com
jade-1.2.1/doc/sysdecl.htm100444 764 764 2117 6606574404 13144 0ustar jjcjjc SP - System declaration

SP System Declaration

The system declaration for SP is as follows:

			<!SYSTEM "ISO 8879:1986"
				CHARSET
BASESET  "ISO 646-1983//CHARSET
	  International Reference Version (IRV)//ESC 2/5 4/0"
DESCSET  0 128 0
CAPACITY PUBLIC  "ISO 8879:1986//CAPACITY Reference//EN"
			       FEATURES
MINIMIZE DATATAG NO        OMITTAG  YES     RANK     YES   SHORTTAG YES
LINK     SIMPLE  YES 65535 IMPLICIT YES     EXPLICIT YES 1
OTHER    CONCUR  NO        SUBDOC   YES 100 FORMAL   YES
SCOPE    DOCUMENT
SYNTAX   PUBLIC  "ISO 8879:1986//SYNTAX Reference//EN"
SYNTAX   PUBLIC  "ISO 8879:1986//SYNTAX Core//EN"
			       VALIDATE
	 GENERAL YES       MODEL    YES     EXCLUDE  YES   CAPACITY NO
	 NONSGML YES       SGML     YES     FORMAL   YES
				 SDIF
	 PACK    NO        UNPACK   NO>

The limit for the SUBDOC parameter is memory dependent.

Any legal concrete syntax may be used.

James Clark
jjc@jclark.com
jade-1.2.1/doc/sysid.htm100444 764 764 23202 6606574404 12647 0ustar jjcjjc SP - System identifiers

System identifiers

There are two kinds of system identifier: formal system identifiers and simple system identifiers. A system identifier that does not start with < will always be interpreted as a simple system identifier. A simple system identifier will always be interpreted either as a filename or as a URL.

Formal system identifiers

Formal system identifiers are based on the System Identifier facility defined in ISO/IEC 10744 (HyTime) Technical Corrigendum 1, Annex D. A system identifier that is a formal system identifier consists of a sequence of one or more storage object specifications. The objects specified by the storage object specifications are concatenated to form the entity. A storage object specification consists of an SGML start-tag in the reference concrete syntax followed by character data content. The generic identifier of the start-tag is the name of a storage manager. The content is a storage object identifier which identifies the storage object in a manner dependent on the storage manager. The start-tag can also specify attributes giving additional information about the storage object. Numeric character references are recognized in storage object identifiers and attribute value literals in the start-tag. Record ends are ignored in the storage object identifier as with SGML. A system identifier will be interpreted as a formal system identifier if it starts with a < followed by a storage manager name, followed by either > or white-space; otherwise it will be interpreted as a simple system identifier. A storage object identifier extends until the end of the system identifier or until the first occurrence of < followed by a storage manager name, followed by either > or white-space.

The following storage managers are available:

osfile
The storage object identifier is a filename. If the filename is relative it is resolved using a base filename. Normally the base filename is the name of the file in which the storage object identifier was specified, but this can be changed using the base attribute. The filename will be searched for first in the directory of the base filename. If it is not found there, then it will be searched for in directories specified with the -D option in the order in which they were specified on the command line, and then in the list of directories specified by the environment variable SGML_SEARCH_PATH. The list is separated by colons under Unix and by semi-colons under MSDOS.
osfd
The storage object identifier is an integer specifying a file descriptor. Thus a system identifier of <osfd>0 will refer to the standard input.
url
The storage object identifier is a URL. Only the http scheme is currently supported and not on all systems.
neutral
The storage manager is the storage manager of storage object in which the system identifier was specified (the underlying storage manager). However if the underlying storage manager does not support named storage objects (ie it is osfd), then the storage manager will be osfile. The storage object identifier is treated as a relative, hierarchical name separated by slashes (/) and will be transformed as appropriate for the underlying storage manager.
literal
The bit combinations of the storage object identifier are the contents of the storage object.

The following attributes are supported:

records
This describes how records are delimited in the storage object:
cr
Records are terminated by a carriage return.
lf
Records are terminated by a line feed.
crlf
Records are terminated by a carriage return followed by a line feed.
find
Records are terminated by whichever of cr, lf or crlf is first encountered in the storage object.
asis
No recognition of records is performed.

The default is find except for NDATA entities for which the default is asis. This attribute is not applicable to the literal storage manager.

When records are recognized in a storage object, a record start is inserted at the beginning of each record, and a record end at the end of each record. If there is a partial record (a record that doesn't end with the record terminator) at the end of the entity, then a record start will be inserted before it but no record end will be inserted after it.

The attribute name and = can be omitted for this attribute.

zapeof
This specifies whether a Control-Z character that occurs as the final byte in the storage object should be stripped. The following values are allowed:
zapeof
A final Control-Z should be stripped.
nozapeof
A final Control-Z should not be stripped.

The default is zapeof except for NDATA entities, entities declared in storage objects with zapeof=nozapeof and storage objects with records=asis. This attribute is not applicable to the literal storage manager.

The attribute name and = can be omitted for this attribute.

encoding
The encoding attribute specifies the encoding of the storage object. This attribute is used when the encoding is independent of the document character set. The value must be the name of an encoding. This attribute is not applicable to the literal storage manager.
bctf
The BCTF attribute specifies that the encoding of the storage object. This attribute is used when the encoding is document character set dependent. The value must be the name of a BCTF. This attribute is not applicable to the literal storage manager.
tracking
This specifies whether line boundaries should be tracked for this object: a value of track specifies that they should; a value of notrack specifies that they should not. The default value is track. Keeping track of where line boundaries occur in a storage object requires approximately one byte of storage per line and it may be desirable to disable this for very large storage objects.

The attribute name and = can be omitted for this attribute.

base
When the storage object identifier specified in the content of the storage object specification is relative, this specifies the base storage object identifier relative to which that storage object identifier should be resolved. When not specified a storage object identifier is interpreted relative to the storage object in which it is specified, provided that this has the same storage manager. This applies both to system identifiers specified in SGML documents and to system identifiers specified in the catalog entry files.
smcrd
The value is a single character that will be recognized in storage object identifiers (both in the content of storage object specifications and in the value of base attributes) as a storage manager character reference delimiter when followed by a digit. A storage manager character reference is like an SGML numeric character reference except that the number is interpreted as a character number in the inherent character set of the storage manager rather than the document character set. The default is for no character to be recognized as a storage manager character reference delimiter. Numeric character references cannot be used to prevent recognition of storage manager character reference delimiters.
fold
This applies only to the neutral storage manager. It specifies whether the storage object identifier should be folded to the customary case of the underlying storage manager if storage object identifiers for the underlying storage manager are case sensitive. The following values are allowed:
fold
The storage object identifier will be folded.
nofold
The storage object identifier will not be folded.

The default value is fold. The attribute name and = can be omitted for this attribute.

For example, on Unix filenames are case-sensitive and the customary case is lower-case. So if the underlying storage manager were osfile and the system was a Unix system, then <neutral>FOO.SGM would be equivalent to <osfile>foo.sgm.

Simple system identfiers

A simple system identifier is interpreted as a storage object identifier with a storage manager that depends on where the system identifier was specified: if it was specified in a storage object whose storage manager was url or if the system identifier looks like an absolute URL in a supported scheme, the storage manager will be url; otherwise the storage manager will be osfile. The storage manager attributes are defaulted as for a formal system identifier. Numeric character references are not recognized in simple system identifiers.

James Clark
jjc@jclark.com
jade-1.2.1/doc/xml.htm100444 764 764 4433 6606574404 12301 0ustar jjcjjc SP - XML support

XML support

Using SP to parse XML

To enable SP's support for XML 1.0:

  • Set the SP_CHARSET_FIXED environment variable to YES.
  • Set the SP_ENCODING environment variable to XML.
  • Set the SGML_CATALOG_FILES environment variable to point to the file pubtext/xml.soc.
  • Use the -wxml option.
  • If the document is not supposed to be valid, use -wno-valid option.

Limitations

SP does not enforce the following XML constraints:

  • XML constrains processing instructions with a target matching [Xx][Mm][Ll], both in terms of where they can occur and their content.
  • XML does not allow a parameter separator that is adjacent to a delimiter to be omitted.
  • XML has constraints on the use of & in parameter literals. In SGML terms, XML says that the ero delimiter is recognized in a parameter literal, and that it must be followed by an entity reference, but the entity reference is not expanded.

Line ends are normalized using SGML conventions to a CR/LF character pair rather than using the XML convention of a single LF character.

There is no support for characters outside the basic multilingual plane (ie those with scalar values greater than U+FFFF).

SP does not enforce XML's rules on not continuing normal processing after an error. Applications can enforce these if they choose.

Web SGML Adaptations Annex

SP's support for SGML is based on Annex K of ISO 8879 (the Web SGML Adaptations Annex). The following features of Annex K are not yet implemented:

  • Checking of ENTITIES REF assertions
  • #IMPLIED document type name
  • Implying definitions of notations and entities (IMPLYDEF ENTITY YES and NOTATION YES)
  • SGML declarations on subdocuments
  • DATA declared value
  • URN feature

James Clark
jjc@jclark.com
jade-1.2.1/generic/ 40775 764 764 0 6610553416 11534 5ustar jjcjjcjade-1.2.1/generic/EventGenerator.h100444 764 764 1372 6606574404 14736 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef EventGenerator_INCLUDED #define EventGenerator_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "SGMLApplication.h" class SP_API EventGenerator { public: virtual ~EventGenerator(); // Can be called at most once for any object. // Returns number of errors. virtual unsigned run(SGMLApplication &) = 0; // may be called at any time virtual void inhibitMessages(bool); // may be called at any time, even from another thread virtual void halt() = 0; // called after run virtual EventGenerator * makeSubdocEventGenerator(const SGMLApplication::Char *systemId, size_t systemIdLength); }; #endif /* not EventGenerator_INCLUDED */ jade-1.2.1/generic/ParserEventGeneratorKit.h100444 764 764 2451 6606574404 16562 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifndef ParserEventGeneratorKit_INCLUDED #define ParserEventGeneratorKit_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "EventGenerator.h" class ParserEventGeneratorKitImpl; class SP_API ParserEventGeneratorKit { public: ParserEventGeneratorKit(); ~ParserEventGeneratorKit(); enum Option { showOpenEntities, showOpenElements, outputCommentDecls, outputMarkedSections, outputGeneralEntities, mapCatalogDocument }; enum OptionWithArg { addCatalog, includeParam, enableWarning, addSearchDir, activateLink, architecture // not implemented }; void setOption(Option); #ifdef SP_WIDE_SYSTEM void setProgramName(const wchar_t *); void setOption(OptionWithArg, const wchar_t *); EventGenerator *makeEventGenerator(int nFiles, wchar_t *const *files); #else void setProgramName(const char *); void setOption(OptionWithArg, const char *); EventGenerator *makeEventGenerator(int nFiles, char *const *files); #endif private: ParserEventGeneratorKit(const ParserEventGeneratorKit &); // undefined void operator=(const ParserEventGeneratorKit &); // undefined ParserEventGeneratorKitImpl *impl_; }; #endif /* not ParserEventGeneratorKit_INCLUDED */ jade-1.2.1/generic/SGMLApplication.h100444 764 764 16730 6606574404 14760 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifndef SGMLApplication_INCLUDED #define SGMLApplication_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include #ifndef SP_API #define SP_API /* as nothing */ #endif class SP_API SGMLApplication { public: #ifdef SP_MULTI_BYTE #ifdef SP_WCHAR_T_USHORT typedef wchar_t Char; #else typedef unsigned short Char; #endif #else typedef unsigned char Char; #endif // A Position represents a position in an OpenEntity. // The meaning of a Position depends on the // particular implementation of OpenEntity. // It might be a line number or it might be // an offset in the entity. The only thing // that can be done with Position is to use // it with an OpenEntityPtr to get a Location. typedef unsigned long Position; struct CharString { const Char *ptr; size_t len; }; struct ExternalId { bool haveSystemId; bool havePublicId; bool haveGeneratedSystemId; CharString systemId; // valid only if haveSystemId is true CharString publicId; // valid only if havePublicId is true CharString generatedSystemId; // valid if haveGeneratedSystemId is true }; struct Notation { CharString name; ExternalId externalId; }; struct Attribute; struct Entity { CharString name; enum DataType { sgml, cdata, sdata, ndata, subdoc, pi }; enum DeclType { general, parameter, doctype, linktype }; DataType dataType; DeclType declType; bool isInternal; // Following valid if isInternal is true CharString text; // Following valid if isInternal is false ExternalId externalId; size_t nAttributes; const Attribute *attributes; Notation notation; }; struct Attribute { CharString name; enum Type { invalid, implied, cdata, tokenized }; Type type; enum Defaulted { specified, // not defaulted definition, // defaulted from definition current // defaulted from current value }; Defaulted defaulted; // non-ESIS; valid only if type != implied struct CdataChunk { bool isSdata; // This rather awkward representation of non-SGML characters was chosen // for backwards compatibility. bool isNonSgml; // valid only if !isSdata Char nonSgmlChar; // valid only if isNonSgml CharString data; // always valid; empty if isNonSgml CharString entityName; // non-ESIS; optional for SDATA chunks }; // Following valid if type == cdata size_t nCdataChunks; const CdataChunk *cdataChunks; // valid if type == cdata // Following valid if type == tokenized CharString tokens; // separated by spaces bool isId; // non-ESIS (probably) bool isGroup; // non-ESIS size_t nEntities; const Entity *entities; // length of notation.name will be 0 if no notation Notation notation; }; struct PiEvent { Position pos; CharString data; CharString entityName; // non-ESIS; optional for PI entities }; struct StartElementEvent { Position pos; enum ContentType { empty, // declared EMPTY or with CONREF attribute cdata, rcdata, mixed, element }; CharString gi; ContentType contentType; // non-ESIS bool included; // non-ESIS size_t nAttributes; const Attribute *attributes; }; struct EndElementEvent { Position pos; CharString gi; }; struct DataEvent { Position pos; CharString data; }; struct SdataEvent { Position pos; CharString text; CharString entityName; // non-ESIS; optional }; struct ExternalDataEntityRefEvent { Position pos; Entity entity; }; struct SubdocEntityRefEvent { Position pos; Entity entity; }; struct NonSgmlCharEvent { Position pos; Char c; }; struct ErrorEvent { Position pos; enum Type { info, // not an error warning, // not an error quantity, idref, capacity, otherError }; Type type; CharString message; }; struct AppinfoEvent { Position pos; bool none; CharString string; }; struct StartDtdEvent { Position pos; CharString name; bool haveExternalId; ExternalId externalId; }; struct EndDtdEvent { Position pos; CharString name; }; struct EndPrologEvent { Position pos; }; // non-ESIS struct GeneralEntityEvent { // no position Entity entity; }; // non-ESIS struct CommentDeclEvent { Position pos; size_t nComments; const CharString *comments; const CharString *seps; }; // non-ESIS struct MarkedSectionStartEvent { Position pos; enum Status { include, rcdata, cdata, ignore }; Status status; struct Param { enum Type { temp, include, rcdata, cdata, ignore, entityRef }; Type type; CharString entityName; }; size_t nParams; const Param *params; }; // non-ESIS struct MarkedSectionEndEvent { Position pos; enum Status { include, rcdata, cdata, ignore }; Status status; }; struct IgnoredCharsEvent { Position pos; CharString data; }; class OpenEntityPtr; struct SP_API Location { Location(); Location(const OpenEntityPtr &, Position); void init(); unsigned long lineNumber; unsigned long columnNumber; unsigned long byteOffset; unsigned long entityOffset; CharString entityName; CharString filename; const void *other; }; class OpenEntity; class SP_API OpenEntityPtr { public: OpenEntityPtr(); OpenEntityPtr(const OpenEntityPtr &); void operator=(const OpenEntityPtr &); void operator=(OpenEntity *); ~OpenEntityPtr(); const OpenEntity *operator->() const; operator int() const; private: OpenEntity *ptr_; }; class SP_API OpenEntity { public: OpenEntity(); virtual ~OpenEntity(); virtual Location location(Position) const = 0; private: OpenEntity(const OpenEntity &); // undefined void operator=(const OpenEntity &); // undefined unsigned count_; friend class OpenEntityPtr; }; virtual ~SGMLApplication(); virtual void appinfo(const AppinfoEvent &); virtual void startDtd(const StartDtdEvent &); virtual void endDtd(const EndDtdEvent &); virtual void endProlog(const EndPrologEvent &); virtual void startElement(const StartElementEvent &); virtual void endElement(const EndElementEvent &); virtual void data(const DataEvent &); virtual void sdata(const SdataEvent &); virtual void pi(const PiEvent &); virtual void externalDataEntityRef(const ExternalDataEntityRefEvent &); virtual void subdocEntityRef(const SubdocEntityRefEvent &); virtual void nonSgmlChar(const NonSgmlCharEvent &); virtual void commentDecl(const CommentDeclEvent &); virtual void markedSectionStart(const MarkedSectionStartEvent &); virtual void markedSectionEnd(const MarkedSectionEndEvent &); virtual void ignoredChars(const IgnoredCharsEvent &); virtual void generalEntity(const GeneralEntityEvent &); virtual void error(const ErrorEvent &); virtual void openEntityChange(const OpenEntityPtr &); }; inline const SGMLApplication::OpenEntity * SGMLApplication::OpenEntityPtr::operator->() const { return ptr_; } inline void SGMLApplication::OpenEntityPtr::operator=(const OpenEntityPtr &ptr) { *this = ptr.ptr_; } inline SGMLApplication::OpenEntityPtr::operator int() const { return ptr_ != 0; } #endif /* not SGMLApplication_INCLUDED */ jade-1.2.1/pubtext/ 40775 764 764 0 6610553416 11613 5ustar jjcjjcjade-1.2.1/pubtext/ISOlat1.ent100444 764 764 14225 6610277066 13660 0ustar jjcjjc jade-1.2.1/pubtext/ISOlat1.sgm100444 764 764 10454 6610277066 13660 0ustar jjcjjc jade-1.2.1/pubtext/html.soc100444 764 764 2263 6610277066 13365 0ustar jjcjjc -- catalog: SGML Open style entity catalog for HTML -- -- $Id: catalog,v 1.3 1995/09/21 23:30:23 connolly Exp $ -- -- Hacked by jjc -- -- Ways to refer to Level 2: most general to most specific -- PUBLIC "-//IETF//DTD HTML//EN" html.dtd PUBLIC "-//IETF//DTD HTML 2.0//EN" html.dtd PUBLIC "-//IETF//DTD HTML Level 2//EN" html.dtd PUBLIC "-//IETF//DTD HTML 2.0 Level 2//EN" html.dtd -- Ways to refer to Level 1: most general to most specific -- PUBLIC "-//IETF//DTD HTML Level 1//EN" html-1.dtd PUBLIC "-//IETF//DTD HTML 2.0 Level 1//EN" html-1.dtd -- Ways to refer to Strict Level 2: most general to most specific -- PUBLIC "-//IETF//DTD HTML Strict//EN" html-s.dtd PUBLIC "-//IETF//DTD HTML 2.0 Strict//EN" html-s.dtd PUBLIC "-//IETF//DTD HTML Strict Level 2//EN" html-s.dtd PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//EN" html-s.dtd -- Ways to refer to Strict Level 1: most general to most specific -- PUBLIC "-//IETF//DTD HTML Strict Level 1//EN" html-1s.dtd PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 1//EN" html-1s.dtd -- ISO latin 1 entity set for HTML -- PUBLIC "ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML" ISOlat1.sgm SGMLDECL html.dcl DOCTYPE html html.dtd jade-1.2.1/pubtext/html-1.dtd100444 764 764 1163 6610277066 13510 0ustar jjcjjc ... -- > %html; jade-1.2.1/pubtext/html-1s.dtd100444 764 764 1167 6610277066 13677 0ustar jjcjjc ... -- > %html-1; jade-1.2.1/pubtext/html-s.dtd100444 764 764 1164 6610277066 13613 0ustar jjcjjc ... -- > %html; jade-1.2.1/pubtext/html.dcl100444 764 764 4510 6610277066 13340 0ustar jjcjjc jade-1.2.1/pubtext/html.dtd100444 764 764 40407 6610277066 13376 0ustar jjcjjc ... -- > ]]> %ISOlat1; ]]> Heading is preferred to

Heading

--> ]]> " > #AttVal(Alt)" > ]]> ]]> ]]> Directory" > Menu" > Heading

Text ... is preferred to

Heading

Text ... --> ]]> Form:" %SDASUFF; "Form End." > Select #AttVal(Multiple)" > ]]> ]]> " > [Document is indexed/searchable.]"> ]]> jade-1.2.1/pubtext/HTML32.dcl100444 764 764 4151 6610277066 13306 0ustar jjcjjc jade-1.2.1/pubtext/HTML32.dtd100444 764 764 47577 6610277066 13362 0ustar jjcjjc ... -- > ]]> %ISOlat1; ]]> ]]> jade-1.2.1/pubtext/HTML32.soc100444 764 764 522 6610277066 13306 0ustar jjcjjc-- html32.soc: catalog for parsing HTML 3.2 documents -- SGMLDECL "HTML32.dcl" PUBLIC "-//W3C//DTD HTML 3.2 Final//EN" HTML32.dtd PUBLIC "-//W3C//DTD HTML 3.2 Draft//EN" HTML32.dtd PUBLIC "-//W3C//DTD HTML 3.2//EN" HTML32.dtd PUBLIC "ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML" ISOlat1.ent -- added by jjc -- DOCTYPE html HTML32.dtd jade-1.2.1/pubtext/HTML4.dcl100444 764 764 5476 6610277066 13240 0ustar jjcjjcjade-1.2.1/pubtext/HTML4-s.dtd100444 764 764 104225 6610277066 13541 0ustar jjcjjc %HTMLlat1; %HTMLsymbol; %HTMLspecial; ]]> jade-1.2.1/pubtext/HTML4.dtd100444 764 764 131141 6610277066 13276 0ustar jjcjjc ... ... The URI used as a system identifier with the public identifier allows the user agent to download the DTD and entity sets as needed. The FPI for the Strict HTML 4.0 DTD is: "-//W3C//DTD HTML 4.0//EN" and its URI is: http://www.w3.org/TR/REC-html40/strict.dtd Authors should use the Strict DTD unless they need the presentation control for user agents that don't (adequately) support style sheets. If you are writing a document that includes frames, use the following FPI: "-//W3C//DTD HTML 4.0 Frameset//EN" with the URI: http://www.w3.org/TR/REC-html40/frameset.dtd The following URIs are supported in relation to HTML 4.0 "http://www.w3.org/TR/REC-html40/strict.dtd" (Strict DTD) "http://www.w3.org/TR/REC-html40/loose.dtd" (Loose DTD) "http://www.w3.org/TR/REC-html40/frameset.dtd" (Frameset DTD) "http://www.w3.org/TR/REC-html40/HTMLlat1.ent" (Latin-1 entities) "http://www.w3.org/TR/REC-html40/HTMLsymbol.ent" (Symbol entities) "http://www.w3.org/TR/REC-html40/HTMLspecial.ent" (Special entities) These URIs point to the latest version of each file. To reference this specific revision use the following URIs: "http://www.w3.org/TR/REC-html40-971218/strict.dtd" "http://www.w3.org/TR/REC-html40-971218/loose.dtd" "http://www.w3.org/TR/REC-html40-971218/frameset.dtd" "http://www.w3.org/TR/REC-html40-971218/HTMLlat1.ent" "http://www.w3.org/TR/REC-html40-971218/HTMLsymbol.ent" "http://www.w3.org/TR/REC-html40-971218/HTMLspecial.ent" --> %HTMLlat1; %HTMLsymbol; %HTMLspecial; ]]> ]]> ]]> ]]> ]]> jade-1.2.1/pubtext/HTML4.soc100444 764 764 576 6610277066 13236 0ustar jjcjjcOVERRIDE YES SGMLDECL HTML4.dcl DOCTYPE HTML HTML4.dtd PUBLIC "-//W3C//DTD HTML 4.0//EN" HTML4-s.dtd PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" HTML4.dtd PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" HTML4-f.dtd PUBLIC "-//W3C//ENTITIES Latin1//EN//HTML" HTMLlat1.ent PUBLIC "-//W3C//ENTITIES Special//EN//HTML" HTMLspec.ent PUBLIC "-//W3C//ENTITIES Symbols//EN//HTML" HTMLsym.ent jade-1.2.1/pubtext/HTML4-f.dtd100444 764 764 1757 6610277066 13472 0ustar jjcjjc ... ... --> %HTML4.dtd;jade-1.2.1/pubtext/HTMLlat1.ent100444 764 764 27367 6610277066 14005 0ustar jjcjjc jade-1.2.1/pubtext/HTMLspec.ent100444 764 764 10024 6610277066 14054 0ustar jjcjjc jade-1.2.1/pubtext/HTMLsym.ent100444 764 764 34156 6610277066 13746 0ustar jjcjjc jade-1.2.1/pubtext/xml.dcl100444 764 764 15221 6610277066 13215 0ustar jjcjjc" PIC "?>" SHORTREF NONE NAMES SGMLREF QUANTITY NONE ENTITIES "amp" 38 "lt" 60 "gt" 62 "quot" 34 "apos" 39 FEATURES MINIMIZE DATATAG NO OMITTAG NO RANK NO SHORTTAG STARTTAG EMPTY NO UNCLOSED NO NETENABL IMMEDNET ENDTAG EMPTY NO UNCLOSED NO ATTRIB DEFAULT YES OMITNAME NO VALUE NO EMPTYNRM YES IMPLYDEF ATTLIST NO DOCTYPE NO ELEMENT NO ENTITY NO NOTATION NO LINK SIMPLE NO IMPLICIT NO EXPLICIT NO OTHER CONCUR NO SUBDOC NO FORMAL NO URN NO KEEPRSRE YES VALIDITY TYPE ENTITIES REF ANY INTEGRAL YES APPINFO NONE SEEALSO "ISO 8879:1986//NOTATION Extensible Markup Language (XML) 1.0//EN" > jade-1.2.1/pubtext/xml.soc100444 764 764 23 6610277066 13151 0ustar jjcjjcSGMLDECL "xml.dcl" jade-1.2.1/include/ 40775 764 764 0 6610553417 11544 5ustar jjcjjcjade-1.2.1/include/Allocator.h100444 764 764 2524 6606574404 13735 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Allocator_INCLUDED #define Allocator_INCLUDED 1 #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API Allocator { public: Allocator(size_t maxSize, unsigned blocksPerSegment); ~Allocator(); void *alloc(size_t); static void *allocSimple(size_t); static void free(void *); // It would be nice to make these private, but some compilers have problems. union ForceAlign { unsigned long n; struct SP_API { char c; } s; char *cp; long *lp; }; struct SegmentHeader; union BlockHeader; friend union BlockHeader; union BlockHeader { SegmentHeader *seg; ForceAlign align; }; struct Block; friend struct Block; struct SP_API Block { BlockHeader header; Block *next; }; friend struct SegmentHeader; struct SP_API SegmentHeader { union { Block **freeList; ForceAlign align; }; unsigned liveCount; SegmentHeader *next; }; private: Allocator(const Allocator &); // undefined Allocator &operator=(const Allocator &); // undefined Block *freeList_; size_t objectSize_; unsigned blocksPerSegment_; SegmentHeader *segments_; void *alloc1(); void tooBig(size_t); }; #ifdef SP_NAMESPACE } #endif #endif /* not Allocator_INCLUDED */ jade-1.2.1/include/ArcEngine.h100444 764 764 2240 6606574404 13643 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef ArcEngine_INCLUDED #define ArcEngine_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Event.h" #include "Vector.h" #include "SgmlParser.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API ArcDirector { public: virtual EventHandler *arcEventHandler(const Notation *, const Vector &, const SubstTable *) = 0; }; class SP_API SelectOneArcDirector : public ArcDirector, public Messenger { public: SelectOneArcDirector(const Vector &select, EventHandler &eh) : select_(select), eh_(&eh) { } EventHandler *arcEventHandler(const Notation *, const Vector &, const SubstTable *); void dispatchMessage(const Message &); void dispatchMessage(Message &); private: Vector select_; EventHandler *eh_; }; class SP_API ArcEngine { public: static void parseAll(SgmlParser &, Messenger &, ArcDirector &, const volatile sig_atomic_t *cancelPtr = 0); private: ArcEngine(); }; #ifdef SP_NAMESPACE } #endif #endif /* not ArcEngine_INCLUDED */ jade-1.2.1/include/Attribute.h100444 764 764 56515 6606574404 14011 0ustar jjcjjc// 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 #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_NAMESPACE namespace SP_NAMESPACE { #endif class 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 defaultValue; Vector 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 *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 &); Boolean containsToken(const StringC &) const; AttributeValue *makeValue(Text &, AttributeContext &, const StringC &, unsigned &) const; AttributeValue *makeValueFromToken(Text &, AttributeContext &, const StringC &name, unsigned &) const; const Vector *getTokens() const; void buildDesc(AttributeDefinitionDesc &) const; DeclaredValue *copy() const; private: Vector allowedValues_; }; class NameTokenGroupDeclaredValue : public GroupDeclaredValue { public: NameTokenGroupDeclaredValue(Vector &); void buildDesc(AttributeDefinitionDesc &) const; DeclaredValue *copy() const; }; class NotationDeclaredValue : public GroupDeclaredValue { public: NotationDeclaredValue(Vector &); 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 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 *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_; }; class RequiredAttributeDefinition : public AttributeDefinition { public: RequiredAttributeDefinition(const StringC &, DeclaredValue *); ConstPtr makeMissingValue(AttributeContext &) const; void buildDesc(AttributeDefinitionDesc &) const; AttributeDefinition *copy() const; }; class CurrentAttributeDefinition : public AttributeDefinition { public: CurrentAttributeDefinition(const StringC &, DeclaredValue *, size_t index); ConstPtr 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 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 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 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 > &, size_t listIndex, Boolean anyCurrent = 0, size_t idIndex = size_t(-1), size_t notationIndex = size_t(-1)); AttributeDefinitionList(const ConstPtr &); 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 > defs_; size_t index_; size_t idIndex_; // -1 if no ID attribute size_t notationIndex_; // -1 if no notation attribute Boolean anyCurrent_; ConstPtr prev_; }; class AttributeSemantics { public: AttributeSemantics(); virtual ~AttributeSemantics(); virtual size_t nEntities() const; virtual ConstPtr entity(size_t) const; virtual ConstPtr notation() const; virtual AttributeSemantics *copy() const = 0; }; class EntityAttributeSemantics : public AttributeSemantics { public: EntityAttributeSemantics(Vector > &); size_t nEntities() const; ConstPtr entity(size_t) const; AttributeSemantics *copy() const; private: Vector > entity_; }; class NotationAttributeSemantics : public AttributeSemantics { public: NotationAttributeSemantics(const ConstPtr &); ConstPtr notation() const; AttributeSemantics *copy() const; private: ConstPtr 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 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 *&, 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 spaceIndex_; }; class SP_API Attribute { public: Attribute(); Boolean specified() const; size_t specIndex() const; const AttributeValue *value() const; const ConstPtr &valuePointer() const; const AttributeSemantics *semantics() const; void setSpec(size_t); void setValue(const ConstPtr &); void setSemantics(AttributeSemantics *); void clear(); private: size_t specIndexPlus_; ConstPtr value_; CopyOwner semantics_; }; class SP_API AttributeList { public: AttributeList(); AttributeList(const ConstPtr &); void init(const ConstPtr &); // was a conref attribute specified? Boolean conref() const; size_t size() const; const StringC &name(unsigned) const; const AttributeValue *value(unsigned) const; size_t specIndex(size_t) const; const ConstPtr &valuePointer(unsigned) const; const AttributeSemantics *semantics(unsigned) const; Boolean tokenized(unsigned index) const; Boolean tokenIndex(const StringC &, unsigned &) const; Boolean tokenIndexUnique(const StringC &, unsigned) const; Boolean attributeIndex(const StringC &, unsigned &) const; void finish(AttributeContext &); Boolean setValue(unsigned index, Text &, AttributeContext &, unsigned &specLength); void setValueToken(unsigned index, Text &, AttributeContext &, unsigned &specLength); void setSpec(unsigned index, AttributeContext &); Boolean recoverUnquoted(const StringC &, const Location &, AttributeContext &); Boolean handleAsUnterminated(AttributeContext &context); void swap(AttributeList &); size_t nSpec() const; size_t defIndex() const; // is the attribute #current Boolean current(unsigned) const; Boolean anyCurrent() const; Boolean specified(unsigned) const; Boolean id(unsigned) const; Boolean idref(unsigned) const; const Vector *getAllowedTokens(unsigned) const; const StringC *getId() const; // null if none Boolean idIndex(unsigned &) const; void noteInvalidSpec(); void changeDef(const ConstPtr &); const ConstPtr &def() const; private: const AttributeDefinition *def(size_t) const; PackedBoolean conref_; unsigned nIdrefs_; unsigned nEntityNames_; size_t nSpec_; Vector vec_; ConstPtr def_; }; class SP_API AttributeContext : public Messenger { public: AttributeContext(); virtual ~AttributeContext(); virtual Boolean defineId(const StringC &, const Location &, Location &); virtual void noteIdref(const StringC &, const Location &); virtual void noteCurrentAttribute(size_t, AttributeValue *); virtual ConstPtr getCurrentAttribute(size_t) const; virtual ConstPtr getAttributeEntity(const StringC &, const Location &); virtual ConstPtr getAttributeNotation(const StringC &, const Location &); virtual const Syntax &attributeSyntax() const = 0; ConstPtr makeImpliedAttributeValue(); Boolean mayDefaultAttribute() const; Boolean validate() const; protected: Boolean mayDefaultAttribute_; Boolean validate_; private: ConstPtr impliedAttributeValue_; }; inline Boolean AttributeDefinition::tokenized() const { return declaredValue_->tokenized(); } inline Boolean AttributeDefinition::isNotation() const { return declaredValue_->isNotation(); } inline Boolean AttributeDefinition::isEntity() const { return declaredValue_->isEntity(); } inline Boolean AttributeDefinition::isId() const { return declaredValue_->isId(); } inline Boolean AttributeDefinition::isIdref() const { return declaredValue_->isIdref(); } inline const Vector *AttributeDefinition::getTokens() const { return declaredValue_->getTokens(); } inline AttributeSemantics * AttributeDefinition::makeSemantics(const AttributeValue *value, AttributeContext &context, unsigned &nIdrefs, unsigned &nEntityNames) const { return value->makeSemantics(declaredValue_.pointer(), context, name_, nIdrefs, nEntityNames); } inline AttributeValue *AttributeDefinition::makeValue(Text &text, AttributeContext &context, unsigned &specLength) const { return checkValue(declaredValue_->makeValue(text, context, name_, specLength), context); } inline AttributeValue * AttributeDefinition::makeValueFromToken(Text &text, AttributeContext &context, unsigned &specLength) const { return checkValue(declaredValue_->makeValueFromToken(text, context, name_, specLength), context); } inline Boolean AttributeDefinition::containsToken(const StringC &token) const { return declaredValue_->containsToken(token); } inline const StringC &AttributeDefinition::name() const { return name_; } inline void AttributeDefinition::setDeclaredValue(DeclaredValue *declaredValue) { declaredValue_ = declaredValue; } inline size_t AttributeDefinitionList::size() const { return defs_.size(); } inline size_t AttributeDefinitionList::index() const { return index_; } inline void AttributeDefinitionList::setIndex(size_t index) { index_ = index; } inline size_t AttributeDefinitionList::idIndex() const { return idIndex_; } inline size_t AttributeDefinitionList::notationIndex() const { return notationIndex_; } inline Boolean AttributeDefinitionList::anyCurrent() const { return anyCurrent_; } inline AttributeDefinition *AttributeDefinitionList::def(size_t i) { return defs_[i].pointer(); } inline const AttributeDefinition *AttributeDefinitionList::def(size_t i) const { return defs_[i].pointer(); } inline size_t TokenizedAttributeValue::nTokens() const { return spaceIndex_.size() + 1; } inline const StringC &TokenizedAttributeValue::string() const { return text_.string(); } inline void TokenizedAttributeValue::token(size_t i, const Char *&ptr, size_t &len) const { size_t startIndex = i == 0 ? 0 : spaceIndex_[i - 1] + 1; ptr = text_.string().data() + startIndex; len = (i == spaceIndex_.size() ? text_.size() : spaceIndex_[i]) - startIndex; } inline StringC TokenizedAttributeValue::token(size_t i) const { const Char *ptr; size_t len; token(i, ptr, len); return StringC(ptr, len); } inline Location TokenizedAttributeValue::tokenLocation(size_t i) const { return text_.charLocation(i == 0 ? 0 : spaceIndex_[i - 1] + 1); } inline Boolean TokenizedAttributeValue::tokenLocation(size_t i, const ConstPtr *&origin, Index &index) const { return text_.charLocation(i == 0 ? 0 : spaceIndex_[i - 1] + 1, origin, index); } inline size_t Attribute::specIndex() const { return specIndexPlus_ - 1; } inline Boolean Attribute::specified() const { return specIndexPlus_ != 0; } inline const AttributeValue *Attribute::value() const { return value_.pointer(); } inline const ConstPtr &Attribute::valuePointer() const { return value_; } inline const AttributeSemantics *Attribute::semantics() const { return semantics_.pointer(); } inline void Attribute::setSpec(size_t index) { specIndexPlus_ = index + 1; } inline void Attribute::setValue(const ConstPtr &value) { value_ = value; } inline void Attribute::setSemantics(AttributeSemantics *semantics) { semantics_ = semantics; } inline size_t AttributeList::size() const { return vec_.size(); } inline const AttributeDefinition *AttributeList::def(size_t i) const { return def_->def(i); } inline const ConstPtr &AttributeList::def() const { return def_; } inline Boolean AttributeList::tokenized(unsigned i) const { return def(i)->tokenized(); } inline Boolean AttributeList::tokenIndex(const StringC &name, unsigned &index) const { return !def_.isNull() && def_->tokenIndex(name, index); } inline Boolean AttributeList::tokenIndexUnique(const StringC &name, unsigned index) const { return def_->tokenIndexUnique(name, index); } inline Boolean AttributeList::attributeIndex(const StringC &name, unsigned &index) const { return !def_.isNull() && def_->attributeIndex(name, index); } inline const StringC &AttributeList::name(unsigned i) const { return def(i)->name(); } inline const Vector *AttributeList::getAllowedTokens(unsigned i) const { return def(i)->getTokens(); } inline const AttributeValue *AttributeList::value(unsigned i) const { return vec_[i].value(); } inline const ConstPtr &AttributeList::valuePointer(unsigned i) const { return vec_[i].valuePointer(); } inline const AttributeSemantics *AttributeList::semantics(unsigned i) const { return vec_[i].semantics(); } inline size_t AttributeList::specIndex(size_t i) const { return vec_[i].specIndex(); } inline size_t AttributeList::nSpec() const { return nSpec_; } inline Boolean AttributeList::conref() const { return conref_; } inline size_t AttributeList::defIndex() const { return def_.isNull() ? size_t(-1) : def_->index(); } inline Boolean AttributeList::current(unsigned i) const { return def(i)->isCurrent(); } inline Boolean AttributeList::anyCurrent() const { return !def_.isNull() && def_->anyCurrent(); } inline const AttributeValue * DefaultAttributeDefinition::defaultValue(const AttributeValue *) const { return value_.pointer(); } inline Boolean AttributeList::idIndex(unsigned &ind) const { if (def_.isNull() || def_->idIndex() == size_t(-1)) return 0; else { ind = def_->idIndex(); return 1; } } inline Boolean AttributeList::id(unsigned i) const { return def(i)->isId(); } inline Boolean AttributeList::idref(unsigned i) const { return def(i)->isIdref(); } inline Boolean AttributeList::specified(unsigned i) const { return vec_[i].specified(); } inline Boolean AttributeContext::mayDefaultAttribute() const { return mayDefaultAttribute_; } inline Boolean AttributeContext::validate() const { return validate_; } #ifdef SP_NAMESPACE } #endif #endif /* not Attribute_INCLUDED */ jade-1.2.1/include/Attributed.h100444 764 764 2200 6606574404 14113 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Attributed_INCLUDED #define Attributed_INCLUDED 1 #include "Ptr.h" #include "Attribute.h" // This is used for things that have attribute definitions // that notations and elements. #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API Attributed { public: Attributed() { } ConstPtr attributeDef() const; const AttributeDefinitionList *attributeDefTemp() const; Ptr attributeDef(); void setAttributeDef(const Ptr &); private: Ptr attributeDef_; }; inline ConstPtr Attributed::attributeDef() const { return attributeDef_; } inline const AttributeDefinitionList *Attributed::attributeDefTemp() const { return attributeDef_.pointer(); } inline Ptr Attributed::attributeDef() { return attributeDef_; } inline void Attributed::setAttributeDef(const Ptr &def) { attributeDef_ = def; } #ifdef SP_NAMESPACE } #endif #endif /* not Attributed_INCLUDED */ jade-1.2.1/include/Big5CodingSystem.h100444 764 764 665 6606574404 15120 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifndef Big5CodingSystem_INCLUDED #define Big5CodingSystem_INCLUDED 1 #include "CodingSystem.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API Big5CodingSystem : public CodingSystem { public: Decoder *makeDecoder() const; Encoder *makeEncoder() const; }; #ifdef SP_NAMESPACE } #endif #endif /* not Big5CodingSystem_INCLUDED */ jade-1.2.1/include/Boolean.h100444 764 764 1147 6606574404 13374 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Boolean_INCLUDED #define Boolean_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_HAVE_BOOL typedef bool Boolean; #ifdef SP_SIZEOF_BOOL_1 typedef bool PackedBoolean; #else typedef char PackedBoolean; #endif #else /* not SP_HAVE_BOOL */ typedef int Boolean; typedef char PackedBoolean; #endif /* not SP_HAVE_BOOL */ #ifdef SP_NAMESPACE } #endif #ifndef SP_HAVE_BOOL typedef int bool; const int true = 1; const int false = 0; #endif /* not SP_HAVE_BOOL */ #endif /* not Boolean_INCLUDED */ jade-1.2.1/include/CharMap.cxx100444 764 764 13314 6607316236 13720 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifndef CharMap_DEF_INCLUDED #define CharMap_DEF_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_MULTI_BYTE template CharMap::CharMap() { } template CharMap::CharMap(T dflt) { for (size_t i = 0; i < (1 << CharMapBits::level1); i++) pages_[i].value = dflt; } template void CharMap::setAll(T val) { for (size_t i = 0; i < (1 << CharMapBits::level1); i++) { pages_[i].value = val; delete [] pages_[i].values; pages_[i].values = 0; } } template void CharMap::swap(CharMap &map) { for (size_t i = 0; i < (1 << CharMapBits::level1); i++) pages_[i].swap(map.pages_[i]); } template void CharMap::setChar(Char c, T val) { CharMapPage &pg = pages_[c >> (CharMapBits::level2 + CharMapBits::level3)]; if (pg.values) { CharMapColumn &column = pg.values[(c >> CharMapBits::level3) & ((1 << CharMapBits::level2) - 1)]; if (column.values) column.values[c & ((1 << CharMapBits::level3) - 1)] = val; else if (val != column.value) { column.values = new T[1 << CharMapBits::level3]; for (size_t i = 0; i < (1 << CharMapBits::level3); i++) column.values[i] = column.value; column.values[c & ((1 << CharMapBits::level3) - 1)] = val; } } else if (val != pg.value) { pg.values = new CharMapColumn[1 << CharMapBits::level2]; for (size_t i = 0; i < (1 << CharMapBits::level2); i++) pg.values[i].value = pg.value; CharMapColumn &column = pg.values[(c >> CharMapBits::level3) & ((1 << CharMapBits::level2) - 1)]; column.values = new T[1 << CharMapBits::level3]; for (size_t i = 0; i < (1 << CharMapBits::level3); i++) column.values[i] = column.value; column.values[c & ((1 << CharMapBits::level3) - 1)] = val; } } template void CharMap::setRange(Char from, Char to, T val) { do { if ((from & ((1 << CharMapBits::level3) - 1)) == 0 && to - from >= (1 << CharMapBits::level3) - 1) { if ((from & ((1 << (CharMapBits::level2 + CharMapBits::level3)) - 1)) == 0 && to - from >= (1 << (CharMapBits::level2 + CharMapBits::level3)) - 1) { // Set a complete page. CharMapPage &pg = pages_[from >> (CharMapBits::level2 + CharMapBits::level3)]; pg.value = val; delete pg.values; pg.values = 0; from += (1 << (CharMapBits::level2 + CharMapBits::level3)) - 1; } else { // Set a complete column. CharMapPage &pg = pages_[from >> (CharMapBits::level2 + CharMapBits::level3)]; if (pg.values) { CharMapColumn &column = pg.values[(from >> CharMapBits::level3) & ((1 << CharMapBits::level2) - 1)]; column.value = val; delete column.values; column.values = 0; } else if (val != pg.value) { // split the page pg.values = new CharMapColumn[1 << CharMapBits::level2]; for (size_t i = 0; i < (1 << CharMapBits::level2); i++) pg.values[i].value = pg.value; CharMapColumn &column = pg.values[(from >> CharMapBits::level3) & ((1 << CharMapBits::level2) - 1)]; column.value = val; } from += (1 << CharMapBits::level2) - 1; } } else setChar(from, val); } while (from++ != to); } template CharMapPage::CharMapPage() : values(0) { } template CharMapPage::CharMapPage(const CharMapPage &pg) { if (pg.values) { values = new CharMapColumn[1 << CharMapBits::level2]; for (size_t i = 0; i < (1 << CharMapBits::level2); i++) values[i] = pg.values[i]; } else { value = pg.value; values = 0; } } template void CharMapPage::operator=(const CharMapPage &pg) { if (pg.values) { if (!values) values = new CharMapColumn[1 << CharMapBits::level2]; for (size_t i = 0; i < (1 << CharMapBits::level2); i++) values[i] = pg.values[i]; } else { if (values) { delete [] values; values = 0; } value = pg.value; } } template CharMapPage::~CharMapPage() { delete [] values; } template void CharMapPage::swap(CharMapPage &pg) { { CharMapColumn *tem = values; values = pg.values; pg.values = tem; } { T tem(value); value = pg.value; pg.value = tem; } } template CharMapColumn::CharMapColumn() : values(0) { } template CharMapColumn::CharMapColumn(const CharMapColumn &col) { if (col.values) { values = new T[1 << CharMapBits::level3]; for (size_t i = 0; i < (1 << CharMapBits::level3); i++) values[i] = col.values[i]; } else { values = 0; value = col.value; } } template void CharMapColumn::operator=(const CharMapColumn &col) { if (col.values) { if (!values) values = new T[1 << CharMapBits::level3]; for (size_t i = 0; i < (1 << CharMapBits::level3); i++) values[i] = col.values[i]; } else { if (values) { delete [] values; values = 0; } value = col.value; } } template CharMapColumn::~CharMapColumn() { delete [] values; } #else /* not SP_MULTI_BYTE */ template CharMap::CharMap() { } template CharMap::CharMap(T dflt) { for (int i = 0; i < 256; i++) values_[i] = dflt; } template void CharMap::setAll(T val) { for (size_t i = 0; i < 256; i++) values_[i] = val; } template void CharMap::setRange(Char from, Char to, T val) { do { values_[from] = val; } while (from++ != to); } template void CharMap::swap(CharMap &map) { for (size_t i = 0; i < 256; i++) { T tem(values_[i]); values_[i] = map.values_[i]; map.values_[i] = tem; } } #endif /* not SP_MULTI_BYTE */ #ifdef SP_NAMESPACE } #endif #endif /* not CharMap_DEF_INCLUDED */ jade-1.2.1/include/CharMap.h100444 764 764 5556 6607316236 13336 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifndef CharMap_INCLUDED #define CharMap_INCLUDED 1 #include "types.h" #include "Resource.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_MULTI_BYTE class CharMapBits { public: enum { level1 = 8, level2 = 4, level3 = 4 }; }; template class CharMapColumn { public: CharMapColumn(); CharMapColumn(const CharMapColumn &); void operator=(const CharMapColumn &); ~CharMapColumn(); T *values; T value; }; template class CharMapPage { public: CharMapPage(); CharMapPage(const CharMapPage &); void operator=(const CharMapPage &); ~CharMapPage(); void swap(CharMapPage &); CharMapColumn *values; T value; }; #endif /* SP_MULTI_BYTE */ template class CharMap { public: CharMap(); CharMap(T); T operator[](Char) const; T getRange(Char from, Char &to) const; void swap(CharMap &); void setChar(Char, T); void setRange(Char from, Char to, T val); void setAll(T); private: #ifdef SP_MULTI_BYTE CharMapPage pages_[1 << CharMapBits::level1]; #else T values_[256]; #endif }; template class CharMapResource : public CharMap, public Resource { public: CharMapResource() { } CharMapResource(T t) : CharMap(t) { } }; #ifdef SP_MULTI_BYTE template inline T CharMap::operator[](Char c) const { const CharMapPage &pg = pages_[c >> (CharMapBits::level2 + CharMapBits::level3)]; if (pg.values) { const CharMapColumn &column = pg.values[(c >> CharMapBits::level3) & ((1 << CharMapBits::level2) - 1)]; if (column.values) return column.values[c & ((1 << CharMapBits::level3) - 1)]; else return column.value; } else return pg.value; } template inline T CharMap::getRange(Char c, Char &max) const { const CharMapPage &pg = pages_[c >> (CharMapBits::level2 + CharMapBits::level3)]; if (pg.values) { const CharMapColumn &column = pg.values[(c >> CharMapBits::level3) & ((1 << CharMapBits::level2) - 1)]; if (column.values) { max = c; return column.values[c & ((1 << CharMapBits::level3) - 1)]; } else { max = (c & ~((1 << CharMapBits::level3) - 1)) + ((1 << CharMapBits::level3) - 1); return column.value; } } else { max = (c & ~((1 << (CharMapBits::level2 + CharMapBits::level3)) - 1)) + ((1 << (CharMapBits::level2 + CharMapBits::level2)) - 1); return pg.value; } } #else template inline T CharMap::operator[](Char c) const { return values_[c]; } template inline T CharMap::getRange(Char c, Char &max) const { max = c; return values_[c]; } template inline void CharMap::setChar(Char c, T val) { values_[c] = val; } #endif #ifdef SP_NAMESPACE } #endif #endif /* not CharMap_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "CharMap.cxx" #endif jade-1.2.1/include/CharsetDecl.h100444 764 764 7003 6606574406 14175 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef CharsetDecl_INCLUDED #define CharsetDecl_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "Vector.h" #include "ExternalId.h" #include "ISet.h" #include "Boolean.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API CharsetDeclRange { public: enum Type { number, string, unused }; CharsetDeclRange(); CharsetDeclRange(WideChar, Number, WideChar); CharsetDeclRange(WideChar, Number); CharsetDeclRange(WideChar, Number, const StringC &); void rangeDeclared(WideChar min, Number count, ISet &declared) const; void usedSet(ISet &) const; Boolean getCharInfo(WideChar fromChar, CharsetDeclRange::Type &type, Number &n, StringC &str, Number &count) const; void stringToChar(const StringC &str, ISet &to) const; void numberToChar(Number n, ISet &to, Number &count) const; private: WideChar descMin_; Number count_; WideChar baseMin_; Type type_; StringC str_; }; class SP_API CharsetDeclSection { public: CharsetDeclSection(); void setPublicId(const PublicId &); void addRange(const CharsetDeclRange &); void rangeDeclared(WideChar min, Number count, ISet &declared) const; void usedSet(ISet &) const; Boolean getCharInfo(WideChar fromChar, const PublicId *&id, CharsetDeclRange::Type &type, Number &n, StringC &str, Number &cout) const; void stringToChar(const StringC &str, ISet &to) const; void numberToChar(const PublicId *id, Number n, ISet &to, Number &count) const; private: PublicId baseset_; Vector ranges_; }; class SP_API CharsetDecl { public: CharsetDecl(); void addSection(const PublicId &); void swap(CharsetDecl &); void clear(); void usedSet(ISet &) const; void declaredSet(ISet &set) const; Boolean charDeclared(WideChar) const; void rangeDeclared(WideChar min, Number count, ISet &declared) const; void addRange(WideChar, Number, WideChar); void addRange(WideChar, Number); void addRange(WideChar, Number, const StringC &); Boolean getCharInfo(WideChar fromChar, const PublicId *&id, CharsetDeclRange::Type &type, Number &n, StringC &str) const; Boolean getCharInfo(WideChar fromChar, const PublicId *&id, CharsetDeclRange::Type &type, Number &n, StringC &str, Number &count) const; void stringToChar(const StringC &str, ISet &to) const; void numberToChar(const PublicId *id, Number n, ISet &to, Number &count) const; void numberToChar(const PublicId *id, Number n, ISet &to) const; private: Vector sections_; ISet declaredSet_; }; inline Boolean CharsetDecl::getCharInfo(WideChar fromChar, const PublicId *&id, CharsetDeclRange::Type &type, Number &n, StringC &str) const { Number tem; return getCharInfo(fromChar, id, type, n, str, tem); } inline void CharsetDecl::numberToChar(const PublicId *id, Number n, ISet &to) const { Number tem; numberToChar(id, n, to, tem); } inline void CharsetDecl::declaredSet(ISet &set) const { set = declaredSet_; } inline Boolean CharsetDecl::charDeclared(WideChar c) const { return declaredSet_.contains(c); } #ifdef SP_NAMESPACE } #endif #endif /* not CharsetDecl_INCLUDED */ jade-1.2.1/include/CharsetInfo.h100444 764 764 5513 6606574406 14225 0ustar jjcjjc// Copyright (c) 1994, 1997 James Clark // See the file COPYING for copying permission. #ifndef CharsetInfo_INCLUDED #define CharsetInfo_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include #include "UnivCharsetDesc.h" #include "Boolean.h" #include "types.h" #include "StringC.h" #include "ISet.h" #include "CharMap.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API CharsetInfo { public: CharsetInfo(); CharsetInfo(const UnivCharsetDesc &); void set(const UnivCharsetDesc &); // Use only for characters guaranteed to me in the C basic execution // character set and which have been verified to be in this // character set. Char execToDesc(char) const; StringC execToDesc(const char *s) const; Boolean descToUniv(WideChar from, UnivChar &to) const; Boolean descToUniv(WideChar from, UnivChar &to, WideChar &alsoMax) const; // Return 0 for no matches, 1 for 1, 2 for more than 1 // to gets the first character; toSet gets all the characters // if there's more than 1. unsigned univToDesc(UnivChar from, WideChar &to, ISet &toSet) const; unsigned univToDesc(UnivChar from, WideChar &to, ISet &toSet, WideChar &count) const; void getDescSet(ISet &) const; int digitWeight(Char) const; int hexDigitWeight(Char) const; const UnivCharsetDesc &desc() const; private: void init(); UnivCharsetDesc desc_; CharMap inverse_; Char execToDesc_[UCHAR_MAX + 1]; }; inline unsigned CharsetInfo::univToDesc(UnivChar from, WideChar &to, ISet &toSet) const { if (from <= Char(-1)) { Unsigned32 n = inverse_[from]; if (n == Unsigned32(-1)) return 0; if (n != Unsigned32(-2)) { to = ((n + from) & ((Unsigned32(1) << 31) - 1)); return 1; } } return desc_.univToDesc(from, to, toSet); } inline unsigned CharsetInfo::univToDesc(UnivChar from, WideChar &to, ISet &toSet, WideChar &count) const { if (from <= Char(-1)) { Char fromMax; Unsigned32 n = inverse_.getRange(from, fromMax); if (n == Unsigned32(-1)) { count = (fromMax - from) + 1; return 0; } if (n != Unsigned32(-2)) { to = ((n + from) & ((Unsigned32(1) << 31) - 1)); count = (fromMax - from) + 1; return 1; } } return desc_.univToDesc(from, to, toSet, count); } inline Boolean CharsetInfo::descToUniv(UnivChar from, WideChar &to) const { return desc_.descToUniv(from, to); } inline Char CharsetInfo::execToDesc(char c) const { return execToDesc_[(unsigned char)c]; } inline Boolean CharsetInfo::descToUniv(WideChar from, UnivChar &to, WideChar &alsoMax) const { return desc_.descToUniv(from, to, alsoMax); } inline const UnivCharsetDesc &CharsetInfo::desc() const { return desc_; } #ifdef SP_NAMESPACE } #endif #endif /* not CharsetInfo_INCLUDED */ jade-1.2.1/include/CharsetRegistry.h100444 764 764 2334 6606574406 15140 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifndef CharsetRegistry_INCLUDED #define CharsetRegistry_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Boolean.h" #include "types.h" #include "StringC.h" #include "CharsetInfo.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API CharsetRegistry { public: class SP_API Iter { public: virtual ~Iter(); virtual Boolean next(WideChar &min, WideChar &max, UnivChar &) = 0; }; enum ISORegistrationNumber { UNREGISTERED = 0, ISO646_ASCII_G0 = 6, ISO646_C0 = 1, ISO6429 = 77, ISO8859_1 = 100, ISO8859_2 = 101, ISO8859_3 = 109, ISO8859_4 = 110, ISO8859_5 = 144, ISO8859_6 = 127, ISO8859_7 = 126, ISO8859_8 = 138, ISO8859_9 = 148, ISO646_JIS_G0 = 14, JIS0201 = 13, JIS0208 = 168, JIS0212 = 159, KSC5601 = 149, GB2312 = 58, ISO10646_UCS2 = 176, ISO10646_UCS4 = 177, BIG5 = 65535 // not registered }; static ISORegistrationNumber getRegistrationNumber(const StringC &desig, const CharsetInfo &); static Iter *makeIter(ISORegistrationNumber); }; #ifdef SP_NAMESPACE } #endif #endif /* not CharsetRegistry_INCLUDED */ jade-1.2.1/include/CmdLineApp.h100444 764 764 5326 6606574406 13776 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef CmdLineApp_INCLUDED #define CmdLineApp_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "MessageReporter.h" #include "Vector.h" #include "StringOf.h" #include "Boolean.h" #include "CodingSystem.h" #include "OutputByteStream.h" #include "OutputCharStream.h" #include "CodingSystemKit.h" #ifdef SP_WIDE_SYSTEM // for wchar_t #include #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API CmdLineApp : public MessageReporter { public: #ifdef SP_WIDE_SYSTEM typedef wchar_t AppChar; #else typedef char AppChar; #endif CmdLineApp(const char *requiredInternalCode = 0); int run(int argc, AppChar **argv); virtual int processOptions(int argc, AppChar **argv, int &nextArg); virtual void processOption(AppChar opt, const AppChar *arg); virtual int processArguments(int argc, AppChar **files) = 0; static const MessageType2 &openFileErrorMessage(); static const MessageType2 &closeFileErrorMessage(); StringC usageString(); const CodingSystem *codingSystem(); const CodingSystem *outputCodingSystem(); const CharsetInfo &systemCharset(); ConstPtr inputCodingSystemKit(); StringC convertInput(const AppChar *s); OutputCharStream *makeStdOut(); OutputCharStream *makeStdErr(); protected: virtual void registerOption(AppChar c, const AppChar *argName = 0); virtual int init(int argc, AppChar **argv); void resetCodingSystemKit(); static Boolean stringMatches(const AppChar *s, const char *key); const AppChar *errorFile_; const CodingSystem *outputCodingSystem_; String optstr_; Vector optArgNames_; Boolean internalCharsetIsDocCharset_; Ptr codingSystemKit_; private: Boolean getMessageText(const MessageFragment &, StringC &); void initCodingSystem(const char *requiredInternalCode); const CodingSystem *lookupCodingSystem(const AppChar *codingName); const CodingSystem *codingSystem_; }; #ifdef SP_WIDE_SYSTEM #define SP_DEFINE_APP(CLASS) \ extern "C" \ wmain(int argc, wchar_t **argv) { CLASS app; return app.run(argc, argv); } #else #define SP_DEFINE_APP(CLASS) \ int main(int argc, char **argv) { CLASS app; return app.run(argc, argv); } #endif inline const CodingSystem *CmdLineApp::codingSystem() { return codingSystem_; } inline const CodingSystem *CmdLineApp::outputCodingSystem() { return outputCodingSystem_; } inline ConstPtr CmdLineApp::inputCodingSystemKit() { return codingSystemKit_.pointer(); } inline const CharsetInfo &CmdLineApp::systemCharset() { return codingSystemKit_->systemCharset(); } #ifdef SP_NAMESPACE } #endif #endif /* not CmdLineApp_INCLUDED */ jade-1.2.1/include/CodingSystem.h100444 764 764 4144 6606574406 14427 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef CodingSystem_INCLUDED #define CodingSystem_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "Boolean.h" #include "StringC.h" #include "OutputByteStream.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API Decoder { public: Decoder(unsigned minBytesPerChar = 1); virtual ~Decoder(); virtual size_t decode(Char *, const char *, size_t, const char **) = 0; virtual Boolean convertOffset(unsigned long &offset) const; // Decoder assumes that for every decoded Char there must be at least // minBytesPerChar bytes unsigned minBytesPerChar() const; protected: unsigned minBytesPerChar_; }; class SP_API Encoder { public: class SP_API Handler { public: virtual void handleUnencodable(Char, OutputByteStream *) = 0; }; Encoder(); virtual ~Encoder(); virtual void output(const Char *, size_t, OutputByteStream *) = 0; // This outputs a byte order mark with Unicode. virtual void startFile(OutputByteStream *); virtual void output(Char *, size_t, OutputByteStream *); virtual void setUnencodableHandler(Handler *); virtual void handleUnencodable(Char, OutputByteStream *); }; class SP_API RecoveringEncoder : public Encoder { public: RecoveringEncoder(); void setUnencodableHandler(Handler *); void handleUnencodable(Char, OutputByteStream *); private: Handler *unencodableHandler_; }; class SP_API InputCodingSystem { public: virtual ~InputCodingSystem(); virtual Decoder *makeDecoder() const = 0; StringC convertIn(const char *) const; virtual Boolean isIdentity() const; }; class SP_API OutputCodingSystem { public: virtual ~OutputCodingSystem(); virtual Encoder *makeEncoder() const = 0; virtual unsigned fixedBytesPerChar() const; String convertOut(const StringC &) const; }; class SP_API CodingSystem : public InputCodingSystem, public OutputCodingSystem { }; inline unsigned Decoder::minBytesPerChar() const { return minBytesPerChar_; } #ifdef SP_NAMESPACE } #endif #endif /* not CodingSystem_INCLUDED */ jade-1.2.1/include/CodingSystemKit.h100444 764 764 2574 6606574406 15104 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifndef CodingSystemKit_INCLUDED #define CodingSystemKit_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Boolean.h" #include "StringC.h" #include "CodingSystem.h" #include "Resource.h" #include "CharsetInfo.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API InputCodingSystemKit : public Resource { public: virtual ~InputCodingSystemKit(); // Returned InputCodingSystem lives at least as long as the Kit. virtual const InputCodingSystem * identityInputCodingSystem() const = 0; virtual const InputCodingSystem * makeInputCodingSystem(const StringC &, const CharsetInfo &, Boolean isBctf, const char *&staticName) const = 0; virtual Char replacementChar() const = 0; const CharsetInfo &systemCharset() const; protected: CharsetInfo systemCharset_; }; class SP_API CodingSystemKit : public InputCodingSystemKit { public: virtual CodingSystemKit *copy() const = 0; virtual const CodingSystem * identityCodingSystem() const = 0; virtual const CodingSystem * makeCodingSystem(const char *, Boolean isBctf) const = 0; static CodingSystemKit *make(const char *); }; inline const CharsetInfo &InputCodingSystemKit::systemCharset() const { return systemCharset_; } #ifdef SP_NAMESPACE } #endif #endif /* not CodingSystemKit_INCLUDED */ jade-1.2.1/include/ConsoleOutput.h100444 764 764 744 6606574406 14624 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef ConsoleOutput_INCLUDED #define ConsoleOutput_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "OutputCharStream.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API ConsoleOutput { public: // Returns null if fd is not a console. static OutputCharStream *makeOutputCharStream(int fd); }; #ifdef SP_NAMESPACE } #endif #endif /* not ConsoleOutput_INCLUDED */ jade-1.2.1/include/ContentState.h100444 764 764 5156 6604607554 14435 0ustar jjcjjc// Copyright (c) 1994, 1996 James Clark // See the file COPYING for copying permission. #ifndef ContentState_INCLUDED #define ContentState_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include #include "OpenElement.h" #include "IList.h" #include "Vector.h" #include "Message.h" #include "Dtd.h" #include "Mode.h" #include "Boolean.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API ContentState { public: ContentState(); void startContent(const Dtd &); void pushElement(OpenElement *); OpenElement *popSaveElement(); void popElement(); OpenElement ¤tElement(); const OpenElement ¤tElement() const; void getOpenElementInfo(Vector &, const StringC &rniPcdata) const; unsigned tagLevel() const; Boolean elementIsIncluded(const ElementType *) const; Boolean elementIsExcluded(const ElementType *) const; Boolean elementIsOpen(const ElementType *) const; Boolean afterDocumentElement() const; const ElementType *lastEndedElementType() const; Mode contentMode() const; ElementType *lookupCreateUndefinedElement(const StringC &, const Location &, Dtd &); Boolean checkImplyLoop(unsigned); static const ShortReferenceMap theEmptyMap; private: IList openElements_; Vector openElementCount_; Vector includeCount_; Vector excludeCount_; unsigned totalExcludeCount_; unsigned tagLevel_; unsigned netEnablingCount_; unsigned long nextIndex_; const ElementType *lastEndedElementType_; ElementType documentElementContainer_; }; inline OpenElement &ContentState::currentElement() { return *openElements_.head(); } inline const OpenElement &ContentState::currentElement() const { return *openElements_.head(); } inline Boolean ContentState::elementIsOpen(const ElementType *e) const { return openElementCount_[e->index()] != 0; } inline Boolean ContentState::elementIsIncluded(const ElementType *e) const { return includeCount_[e->index()] != 0 && excludeCount_[e->index()] == 0; } inline Boolean ContentState::elementIsExcluded(const ElementType *e) const { return excludeCount_[e->index()] != 0; } inline const ElementType *ContentState::lastEndedElementType() const { return lastEndedElementType_; } inline unsigned ContentState::tagLevel() const { return tagLevel_; } inline Boolean ContentState::afterDocumentElement() const { return tagLevel() == 0 && currentElement().isFinished(); } inline Mode ContentState::contentMode() const { return openElements_.head()->mode(netEnablingCount_ > 0); } #ifdef SP_NAMESPACE } #endif #endif /* not ContentState_INCLUDED */ jade-1.2.1/include/ContentToken.h100444 764 764 37153 6604607554 14457 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef ContentToken_INCLUDED #define ContentToken_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Owner.h" #include "Text.h" #include "Vector.h" #include "NCVector.h" #include "Boolean.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class LeafContentToken; struct SP_API Transition { enum { invalidIndex = -1 }; // When performing this transition, reset all andState with index >= this. unsigned clearAndStateStartIndex; // This transition is possible only if all AND groups whose AND depth // is >= this (and contains the LeafContentToken that this transition is // from) have had all their non-nullable members matched. unsigned andDepth; // If this is 1, then this transition requires that the AND group // whose AND depth is andDepth - 1 have a non-nullable member unmatched, // and thus this transition is not ambiguous with a transition whose // AND depth is < andDepth. PackedBoolean isolated; // Index in andState that must be clear for this transition to be // allowed. unsigned requireClear; // Index in andState that is to be set after performing this transition. unsigned toSet; }; class SP_API FirstSet { public: FirstSet(); void init(LeafContentToken *); void append(const FirstSet &); size_t size() const; LeafContentToken *token(size_t i) const; size_t requiredIndex() const; void setNotRequired(); private: Vector v_; // index of contextually required token or -1 if none size_t requiredIndex_; }; class SP_API LastSet : public Vector { public: LastSet() { } LastSet(size_t n) : Vector(n) { } void append(const LastSet &); }; class ElementType; class AndModelGroup; struct GroupInfo; struct SP_API ContentModelAmbiguity { const LeafContentToken *from; const LeafContentToken *to1; const LeafContentToken *to2; unsigned andDepth; }; class ModelGroup; class SP_API ContentToken { public: enum OccurrenceIndicator { none = 0, opt = 01, plus = 02, rep = 03 }; ContentToken(OccurrenceIndicator); virtual ~ContentToken(); OccurrenceIndicator occurrenceIndicator() const; Boolean inherentlyOptional() const; static unsigned andDepth(const AndModelGroup *); static unsigned andIndex(const AndModelGroup *); void analyze(GroupInfo &, const AndModelGroup *, unsigned, FirstSet &, LastSet &); static void addTransitions(const LastSet &from, const FirstSet &to, Boolean maybeRequired, unsigned andClearIndex, unsigned andDepth, Boolean isolated = 0, unsigned requireClear = (unsigned)Transition::invalidIndex, unsigned toSet = (unsigned)Transition::invalidIndex); virtual void finish(Vector &minAndDepth, Vector &elementTransition, Vector &, Boolean &pcdataUnreachable) = 0; virtual unsigned long grpgtcnt() const; virtual void setOrGroupMember(); unsigned andGroupIndex() const; virtual const ModelGroup *asModelGroup() const; virtual const LeafContentToken *asLeafContentToken() const; protected: PackedBoolean inherentlyOptional_; private: ContentToken(const ContentToken &); // undefined void operator=(const ContentToken &); // undefined virtual void analyze1(GroupInfo &, const AndModelGroup *, unsigned, FirstSet &, LastSet &) = 0; OccurrenceIndicator occurrenceIndicator_; }; class SP_API ModelGroup : public ContentToken { public: enum Connector { andConnector, orConnector, seqConnector }; ModelGroup(NCVector > &, OccurrenceIndicator); virtual Connector connector() const = 0; unsigned nMembers() const; void finish(Vector &minAndDepth, Vector &elementTransition, Vector &, Boolean &pcdataUnreachable); ContentToken &member(unsigned i); const ContentToken &member(unsigned i) const; unsigned long grpgtcnt() const; const ModelGroup *asModelGroup() const; protected: void setOrGroup(); private: ModelGroup(const ModelGroup &); // undefined void operator=(const ModelGroup &); // undefined NCVector > members_; }; class AndModelGroup : public ModelGroup { public: AndModelGroup(NCVector > &, OccurrenceIndicator); Connector connector() const; unsigned andDepth() const; unsigned andIndex() const; unsigned andGroupIndex() const; const AndModelGroup *andAncestor() const; private: AndModelGroup(const AndModelGroup &); // undefined void operator=(const AndModelGroup &); // undefined unsigned andDepth_; // number of and groups that contain this unsigned andIndex_; unsigned andGroupIndex_; const AndModelGroup *andAncestor_; void analyze1(GroupInfo &, const AndModelGroup *, unsigned, FirstSet &, LastSet &); }; class OrModelGroup : public ModelGroup { public: OrModelGroup(NCVector > &, OccurrenceIndicator); Connector connector() const; private: OrModelGroup(const OrModelGroup &); // undefined void operator=(const OrModelGroup &); // undefined void analyze1(GroupInfo &, const AndModelGroup *, unsigned, FirstSet &, LastSet &); }; class SeqModelGroup : public ModelGroup { public: SeqModelGroup(NCVector > &, OccurrenceIndicator); Connector connector() const; private: SeqModelGroup(const SeqModelGroup &); // undefined void operator=(const SeqModelGroup &); // undefined void analyze1(GroupInfo &, const AndModelGroup *, unsigned, FirstSet &, LastSet &); }; class AndState; class SP_API AndInfo { public: AndInfo() { } const AndModelGroup *andAncestor; unsigned andGroupIndex; Vector follow; private: AndInfo(const AndInfo &); // undefined void operator=(const AndInfo &); // undefined }; // A LeafContentToken is not quite the same as a primitive content token. // A data tag group is a primitive content token but not a LeafContentToken. class SP_API LeafContentToken : public ContentToken { public: LeafContentToken(const ElementType *, OccurrenceIndicator); unsigned index() const; unsigned typeIndex() const; const ElementType *elementType() const; virtual Boolean isInitial() const; void addTransitions(const FirstSet &to, Boolean maybeRequired, unsigned andClearIndex, unsigned andDepth, Boolean isolated, unsigned requireClear, unsigned toSet); void setFinal(); void finish(Vector &minAndDepth, Vector &elementTransition, Vector &, Boolean &pcdataUnreachable); Boolean isFinal() const; Boolean tryTransition(const ElementType *, AndState &, unsigned &minAndDepth, const LeafContentToken *&newpos) const; Boolean tryTransitionPcdata(AndState &, unsigned &minAndDepth, const LeafContentToken *&newpos) const; void possibleTransitions(const AndState &, unsigned minAndDepth, Vector &) const; const LeafContentToken *impliedStartTag(const AndState &andpos, unsigned minAndDepth) const; const LeafContentToken *transitionToken(const ElementType *to, const AndState &andState, unsigned minAndDepth) const; void doRequiredTransition(AndState &andState, unsigned &minAndDepth, const LeafContentToken *&newpos) const; unsigned computeMinAndDepth(const AndState&) const; Boolean orGroupMember() const; void setOrGroupMember(); const AndModelGroup *andAncestor() const; unsigned andDepth() const; const LeafContentToken *asLeafContentToken() const; protected: void analyze1(GroupInfo &, const AndModelGroup *, unsigned, FirstSet &, LastSet &); const ElementType *element_; private: LeafContentToken(const LeafContentToken &); // undefined void operator=(const LeafContentToken &); // undefined void andFinish(Vector &minAndDepth, Vector &elementTransition, Vector &, Boolean &pcdataUnreachable); unsigned computeMinAndDepth1(const AndState&) const; unsigned leafIndex_; unsigned typeIndex_; Vector follow_; PackedBoolean isFinal_; PackedBoolean orGroupMember_; // 0 none, 1 yes - simple, 2 - compled char pcdataTransitionType_; const LeafContentToken *simplePcdataTransition_; size_t requiredIndex_; Owner andInfo_; }; class PcdataToken : public LeafContentToken { public: PcdataToken(); void analyze1(GroupInfo &, const AndModelGroup *, unsigned, FirstSet &, LastSet &); private: PcdataToken(const PcdataToken &); // undefined void operator=(const PcdataToken &); // undefined }; class InitialPseudoToken : public LeafContentToken { public: InitialPseudoToken(); Boolean isInitial() const; private: InitialPseudoToken(const InitialPseudoToken &); // undefined void operator=(const InitialPseudoToken &); // undefined }; class ElementToken : public LeafContentToken { public: ElementToken(const ElementType *, OccurrenceIndicator); private: ElementToken(const ElementToken &); // undefined void operator=(const ElementToken &); // undefined }; class DataTagGroup : public SeqModelGroup { public: // first content token is a DataTagElementToken, second is PcdataToken DataTagGroup(NCVector > &, OccurrenceIndicator); private: DataTagGroup(const DataTagGroup &); // undefined void operator=(const DataTagGroup &); // undefined }; class DataTagElementToken : public ElementToken { public: DataTagElementToken(const ElementType *, Vector &templates); DataTagElementToken(const ElementType *, Vector &templates, Text &paddingTemplate); private: DataTagElementToken(const DataTagElementToken &); // undefined void operator=(const DataTagElementToken &); // undefined Vector templates_; Boolean havePaddingTemplate_; Text paddingTemplate_; }; class SP_API CompiledModelGroup { public: CompiledModelGroup(Owner &); void compile(size_t nElementTypeIndex, Vector &, Boolean &pcdataUnreachable); CompiledModelGroup *copy() const; const LeafContentToken *initial() const; unsigned andStateSize() const; Boolean containsPcdata() const; const ModelGroup *modelGroup() const; private: CompiledModelGroup(const CompiledModelGroup &); // undefined void operator=(const CompiledModelGroup &); // undefined Owner modelGroup_; Owner initial_; unsigned andStateSize_; Boolean containsPcdata_; }; class SP_API AndState { public: AndState(unsigned); Boolean isClear(unsigned) const; void clearFrom(unsigned); void set(unsigned); Boolean operator==(const AndState &) const; Boolean operator!=(const AndState &) const; private: void clearFrom1(unsigned); unsigned clearFrom_; Vector v_; }; class SP_API MatchState { public: MatchState(); MatchState(const CompiledModelGroup *); // may be 0 Boolean tryTransition(const ElementType *); Boolean tryTransitionPcdata(); void possibleTransitions(Vector &) const; Boolean isFinished() const; const LeafContentToken *impliedStartTag() const; const LeafContentToken *invalidExclusion(const ElementType *) const; void doRequiredTransition(); const LeafContentToken *currentPosition() const; Boolean operator==(const MatchState &) const; Boolean operator!=(const MatchState &) const; private: const LeafContentToken *pos_; AndState andState_; unsigned minAndDepth_; }; inline ContentToken::OccurrenceIndicator ContentToken::occurrenceIndicator() const { return occurrenceIndicator_; } inline unsigned LeafContentToken::index() const { return leafIndex_; } inline unsigned LeafContentToken::typeIndex() const { return typeIndex_; } inline Boolean ContentToken::inherentlyOptional() const { return inherentlyOptional_; } inline const ElementType *LeafContentToken::elementType() const { return element_; } inline unsigned AndModelGroup::andDepth() const { return andDepth_; } inline unsigned AndModelGroup::andIndex() const { return andIndex_; } inline unsigned ModelGroup::nMembers() const { return members_.size(); } inline unsigned ContentToken::andDepth(const AndModelGroup *andAncestor) { return andAncestor ? andAncestor->andDepth() + 1 : 0; } inline unsigned ContentToken::andIndex(const AndModelGroup *andAncestor) { return (andAncestor ? andAncestor->andIndex() + andAncestor->nMembers() : 0); } inline ContentToken &ModelGroup::member(unsigned i) { return *members_[i]; } inline const ContentToken &ModelGroup::member(unsigned i) const { return *members_[i]; } inline void LeafContentToken::setFinal() { isFinal_ = 1; } inline Boolean LeafContentToken::isFinal() const { return isFinal_; } inline Boolean LeafContentToken::orGroupMember() const { return orGroupMember_; } inline unsigned CompiledModelGroup::andStateSize() const { return andStateSize_; } inline Boolean CompiledModelGroup::containsPcdata() const { return containsPcdata_; } inline const AndModelGroup *AndModelGroup::andAncestor() const { return andAncestor_; } inline unsigned AndModelGroup::andGroupIndex() const { return andGroupIndex_; } inline const LeafContentToken *CompiledModelGroup::initial() const { return initial_.pointer(); } inline const ModelGroup *CompiledModelGroup::modelGroup() const { return modelGroup_.pointer(); } inline const AndModelGroup *LeafContentToken::andAncestor() const { return andInfo_ ? andInfo_->andAncestor : 0; } inline unsigned LeafContentToken::andDepth() const { return andInfo_ ? ContentToken::andDepth(andInfo_->andAncestor) : 0; } inline unsigned LeafContentToken::computeMinAndDepth(const AndState &andState) const { return andInfo_ ? computeMinAndDepth1(andState) : 0; } inline Boolean LeafContentToken::tryTransitionPcdata(AndState &andState, unsigned &minAndDepth, const LeafContentToken *&newpos) const { if (pcdataTransitionType_ == 1) { newpos = simplePcdataTransition_; return 1; } else if (pcdataTransitionType_ == 0) return 0; else return tryTransition(0, andState, minAndDepth, newpos); } inline Boolean MatchState::tryTransition(const ElementType *to) { return pos_->tryTransition(to, andState_, minAndDepth_, pos_); } inline Boolean MatchState::tryTransitionPcdata() { return pos_->tryTransitionPcdata(andState_, minAndDepth_, pos_); } inline void MatchState::possibleTransitions(Vector &v) const { pos_->possibleTransitions(andState_, minAndDepth_, v); } inline Boolean MatchState::isFinished() const { return pos_->isFinal() && minAndDepth_ == 0; } inline const LeafContentToken * MatchState::impliedStartTag() const { return pos_->impliedStartTag(andState_, minAndDepth_); } inline void MatchState::doRequiredTransition() { pos_->doRequiredTransition(andState_, minAndDepth_, pos_); } inline const LeafContentToken *MatchState::currentPosition() const { return pos_; } inline Boolean MatchState::operator!=(const MatchState &state) const { return !(*this == state); } inline Boolean AndState::isClear(unsigned i) const { return v_[i] == 0; } inline void AndState::set(unsigned i) { v_[i] = 1; if (i >= clearFrom_) clearFrom_ = i + 1; } inline void AndState::clearFrom(unsigned i) { if (i < clearFrom_) clearFrom1(i); } inline Boolean AndState::operator!=(const AndState &state) const { return !(*this == state); } inline size_t FirstSet::size() const { return v_.size(); } inline LeafContentToken *FirstSet::token(size_t i) const { return v_[i]; } inline size_t FirstSet::requiredIndex() const { return requiredIndex_; } inline void FirstSet::setNotRequired() { requiredIndex_ = size_t(-1); } #ifdef SP_NAMESPACE } #endif #endif /* not ContentToken_INCLUDED */ jade-1.2.1/include/CopyOwner.cxx100444 764 764 1021 6604607554 14305 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef CopyOwner_DEF_INCLUDED #define CopyOwner_DEF_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template CopyOwner::CopyOwner(const CopyOwner &o) : Owner(o.pointer() ? o.pointer()->copy() : 0) { } template void CopyOwner::operator=(const CopyOwner &o) { Owner::operator=(o.pointer() ? o.pointer()->copy() : 0); } #ifdef SP_NAMESPACE } #endif #endif /* not CopyOwner_DEF_INCLUDED */ jade-1.2.1/include/CopyOwner.h100444 764 764 1112 6604607554 13733 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef CopyOwner_INCLUDED #define CopyOwner_INCLUDED 1 #include "Owner.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class CopyOwner : public Owner { public: CopyOwner() { } CopyOwner(T *p) : Owner(p) { } CopyOwner(const CopyOwner &); void operator=(const CopyOwner &o); void operator=(T *p) { Owner::operator=(p); } }; #ifdef SP_NAMESPACE } #endif #endif /* not CopyOwner_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "CopyOwner.cxx" #endif jade-1.2.1/include/DescriptorManager.h100444 764 764 2003 6604607554 15417 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef DescriptorManager_INCLUDED #define DescriptorManager_INCLUDED 1 #include "Boolean.h" #include "List.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class DescriptorManager; class SP_API DescriptorUser { public: DescriptorUser(DescriptorManager *); virtual ~DescriptorUser(); virtual Boolean suspend(); void managerDeleted(); void acquireD(); void releaseD(); DescriptorManager *manager() const; private: DescriptorManager *manager_; }; class SP_API DescriptorManager { public: DescriptorManager(int maxD); ~DescriptorManager(); void acquireD(); void releaseD(); void addUser(DescriptorUser *); void removeUser(DescriptorUser *); private: DescriptorManager(const DescriptorManager &); // undefined void operator=(const DescriptorManager &); // undefined int usedD_; int maxD_; List users_; }; #ifdef SP_NAMESPACE } #endif #endif /* not DescriptorManager_INCLUDED */ jade-1.2.1/include/Dtd.h100444 764 764 25772 6604607554 12563 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Dtd_INCLUDED #define Dtd_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "NamedTable.h" #include "NamedResourceTable.h" #include "ElementType.h" #include "Notation.h" #include "Entity.h" #include "ShortReferenceMap.h" #include "Resource.h" #include "StringC.h" #include "StringResource.h" #include "Boolean.h" #include "Vector.h" #include "HashTable.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Syntax; class ParserState; class SP_API Dtd : public Resource { public: typedef NamedTableIter ElementTypeIter; typedef ConstNamedTableIter ConstElementTypeIter; typedef NamedTableIter ShortReferenceMapIter; typedef ConstNamedResourceTableIter ConstNotationIter; typedef NamedResourceTableIter NotationIter; typedef ConstNamedResourceTableIter ConstEntityIter; typedef NamedResourceTableIter EntityIter; Dtd(const StringC &name, Boolean isBase); ConstPtr lookupEntity(Boolean isParameter, const StringC &) const; const Entity *lookupEntityTemp(Boolean isParameter, const StringC &) const; Ptr lookupEntity(Boolean isParameter, const StringC &); Ptr insertEntity(const Ptr &, Boolean replace = 0); Ptr removeEntity(Boolean isParameter, const StringC &); ConstEntityIter generalEntityIter() const; EntityIter generalEntityIter(); ConstEntityIter parameterEntityIter() const; EntityIter parameterEntityIter(); ConstPtr defaultEntity() const; const Entity *defaultEntityTemp() const; void setDefaultEntity(const Ptr &, ParserState &); const ConstPtr > &namePointer() const; const StringC &name() const; const ElementType *lookupElementType(const StringC &) const; ElementType *lookupElementType(const StringC &); ElementType *removeElementType(const StringC &); ElementType *insertElementType(ElementType *); ElementType *insertUndefinedElementType(ElementType *); size_t nElementTypeIndex() const; size_t allocElementTypeIndex(); ConstElementTypeIter elementTypeIter() const; ElementTypeIter elementTypeIter(); const RankStem *lookupRankStem(const StringC &) const; RankStem *lookupRankStem(const StringC &); RankStem *insertRankStem(RankStem *); size_t nRankStem() const; const ShortReferenceMap *lookupShortReferenceMap(const StringC &) const; ShortReferenceMap *lookupShortReferenceMap(const StringC &); ShortReferenceMap *insertShortReferenceMap(ShortReferenceMap *); ShortReferenceMapIter shortReferenceMapIter(); Boolean shortrefIndex(const StringC &, const Syntax &, size_t &index); size_t nShortref() const; const StringC &shortref(size_t i) const; void addNeededShortref(const StringC &); ConstPtr lookupNotation(const StringC &) const; const Notation *lookupNotationTemp(const StringC &) const; Ptr lookupNotation(const StringC &); Ptr insertNotation(const Ptr &); Ptr removeNotation(const StringC &); ConstNotationIter notationIter() const; NotationIter notationIter(); size_t allocCurrentAttributeIndex(); size_t nCurrentAttribute() const; size_t allocElementDefinitionIndex(); size_t nElementDefinition() const; size_t allocAttributeDefinitionListIndex(); size_t nAttributeDefinitionList() const; const ElementType *documentElementType() const; Boolean isBase() const; Ptr &implicitElementAttributeDef(); void setImplicitElementAttributeDef(const Ptr &); Ptr &implicitNotationAttributeDef(); void setImplicitNotationAttributeDef(const Ptr &); private: Dtd(const Dtd &); // undefined void operator=(const Dtd &); // undefined NamedResourceTable generalEntityTable_; NamedResourceTable parameterEntityTable_; ConstPtr defaultEntity_; ConstPtr > name_; NamedTable elementTypeTable_; NamedTable undefinedElementTypeTable_; NamedTable rankStemTable_; NamedTable shortReferenceMapTable_; NamedResourceTable notationTable_; size_t nCurrentAttribute_; size_t nElementDefinition_; size_t nAttributeDefinitionList_; size_t nElementType_; ElementType *documentElementType_; Vector shortrefs_; HashTable shortrefTable_; Boolean isBase_; Ptr implicitElementAttributeDef_; Ptr implicitNotationAttributeDef_; }; inline ConstPtr Dtd::lookupEntity(Boolean isParameter, const StringC &name) const { return (isParameter ? ¶meterEntityTable_ : &generalEntityTable_)->lookupConst(name); } inline const Entity *Dtd::lookupEntityTemp(Boolean isParameter, const StringC &name) const { return (isParameter ? ¶meterEntityTable_ : &generalEntityTable_)->lookupTemp(name); } inline Ptr Dtd::lookupEntity(Boolean isParameter, const StringC &name) { return (isParameter ? ¶meterEntityTable_ : &generalEntityTable_)->lookup(name); } inline Ptr Dtd::insertEntity(const Ptr &entity, Boolean replace) { return (entity->declType() == Entity::parameterEntity ? ¶meterEntityTable_ : &generalEntityTable_)->insert(entity, replace); } inline Ptr Dtd::removeEntity(Boolean isParameter, const StringC &name) { return (isParameter ? ¶meterEntityTable_ : &generalEntityTable_)->remove(name); } inline Dtd::ConstEntityIter Dtd::generalEntityIter() const { // Avoid use of typedef to work around MSVC 2.0 bug. return ConstNamedResourceTableIter(generalEntityTable_); } inline Dtd::EntityIter Dtd::generalEntityIter() { // Avoid use of typedef to work around MSVC 2.0 bug. return NamedResourceTableIter(generalEntityTable_); } inline Dtd::ConstEntityIter Dtd::parameterEntityIter() const { // Avoid use of typedef to work around MSVC 2.0 bug. return ConstNamedResourceTableIter(parameterEntityTable_); } inline Dtd::EntityIter Dtd::parameterEntityIter() { // Avoid use of typedef to work around MSVC 2.0 bug. return NamedResourceTableIter(parameterEntityTable_); } inline ConstPtr Dtd::defaultEntity() const { return defaultEntity_; } inline const Entity *Dtd::defaultEntityTemp() const { return defaultEntity_.pointer(); } inline const ConstPtr > &Dtd::namePointer() const { return name_; } inline const StringC &Dtd::name() const { return *name_; } inline size_t Dtd::allocCurrentAttributeIndex() { return nCurrentAttribute_++; } inline size_t Dtd::nCurrentAttribute() const { return nCurrentAttribute_; } inline size_t Dtd::allocElementDefinitionIndex() { return nElementDefinition_++; } inline size_t Dtd::nElementDefinition() const { return nElementDefinition_; } inline size_t Dtd::allocAttributeDefinitionListIndex() { return nAttributeDefinitionList_++; } inline size_t Dtd::nAttributeDefinitionList() const { return nAttributeDefinitionList_; } inline const ElementType *Dtd::lookupElementType(const StringC &name) const { const ElementType *e = elementTypeTable_.lookup(name); if (e) return e; else return undefinedElementTypeTable_.lookup(name); } inline ElementType *Dtd::lookupElementType(const StringC &name) { ElementType *e = elementTypeTable_.lookup(name); if (e) return e; else return undefinedElementTypeTable_.lookup(name); } inline ElementType *Dtd::insertElementType(ElementType *e) { return elementTypeTable_.insert(e); } inline ElementType *Dtd::insertUndefinedElementType(ElementType *e) { return undefinedElementTypeTable_.insert(e); } inline Dtd::ElementTypeIter Dtd::elementTypeIter() { // Avoid use of typedef to work around MSVC 2.0 bug. return NamedTableIter(elementTypeTable_); } inline Dtd::ConstElementTypeIter Dtd::elementTypeIter() const { // Avoid use of typedef to work around MSVC 2.0 bug. return ConstNamedTableIter(elementTypeTable_); } inline ElementType *Dtd::removeElementType(const StringC &name) { return elementTypeTable_.remove(name); } inline size_t Dtd::nElementTypeIndex() const { // index 0 is reserved for #pcdata return 1 + nElementType_; } inline size_t Dtd::allocElementTypeIndex() { return 1 + nElementType_++; } inline const RankStem *Dtd::lookupRankStem(const StringC &name) const { return rankStemTable_.lookup(name); } inline RankStem *Dtd::lookupRankStem(const StringC &name) { return rankStemTable_.lookup(name); } inline RankStem *Dtd::insertRankStem(RankStem *e) { return rankStemTable_.insert(e); } inline size_t Dtd::nRankStem() const { return rankStemTable_.count(); } inline ConstPtr Dtd::lookupNotation(const StringC &name) const { return notationTable_.lookupConst(name); } inline const Notation *Dtd::lookupNotationTemp(const StringC &name) const { return notationTable_.lookupTemp(name); } inline Ptr Dtd::lookupNotation(const StringC &name) { return notationTable_.lookup(name); } inline Ptr Dtd::insertNotation(const Ptr &nt) { return notationTable_.insert(nt); } inline Dtd::ConstNotationIter Dtd::notationIter() const { // Avoid use of typedef to work around MSVC 2.0 bug. return ConstNamedResourceTableIter(notationTable_); } inline Dtd::NotationIter Dtd::notationIter() { // Avoid use of typedef to work around MSVC 2.0 bug. return NamedResourceTableIter(notationTable_); } inline Ptr Dtd::removeNotation(const StringC &name) { return notationTable_.remove(name); } inline const ElementType *Dtd::documentElementType() const { return documentElementType_; } inline const ShortReferenceMap *Dtd::lookupShortReferenceMap(const StringC &name) const { return shortReferenceMapTable_.lookup(name); } inline ShortReferenceMap *Dtd::lookupShortReferenceMap(const StringC &name) { return shortReferenceMapTable_.lookup(name); } inline ShortReferenceMap *Dtd::insertShortReferenceMap(ShortReferenceMap *map) { return shortReferenceMapTable_.insert(map); } inline Dtd::ShortReferenceMapIter Dtd::shortReferenceMapIter() { // Avoid use of typedef to work around MSVC 2.0 bug. return NamedTableIter(shortReferenceMapTable_); } inline Boolean Dtd::isBase() const { return isBase_; } inline size_t Dtd::nShortref() const { return shortrefs_.size(); } inline const StringC &Dtd::shortref(size_t i) const { return shortrefs_[i]; } inline Ptr &Dtd::implicitElementAttributeDef() { return implicitElementAttributeDef_; } inline void Dtd::setImplicitElementAttributeDef(const Ptr &def) { implicitElementAttributeDef_ = def; } inline Ptr &Dtd::implicitNotationAttributeDef() { return implicitNotationAttributeDef_; } inline void Dtd::setImplicitNotationAttributeDef(const Ptr &def) { implicitNotationAttributeDef_ = def; } #ifdef SP_NAMESPACE } #endif #endif /* not Dtd_INCLUDED */ jade-1.2.1/include/EUCJPCodingSystem.h100444 764 764 671 6604607554 15176 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef EUCJPCodingSystem_INCLUDED #define EUCJPCodingSystem_INCLUDED 1 #include "CodingSystem.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API EUCJPCodingSystem : public CodingSystem { public: Decoder *makeDecoder() const; Encoder *makeEncoder() const; }; #ifdef SP_NAMESPACE } #endif #endif /* not EUCJPCodingSystem_INCLUDED */ jade-1.2.1/include/ElementType.h100444 764 764 14700 6604607554 14270 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef ElementType_INCLUDED #define ElementType_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include #include "Boolean.h" #include "Vector.h" #include "Owner.h" #include "Location.h" #include "Ptr.h" #include "Named.h" #include "Vector.h" #include "Attributed.h" #include "Mode.h" #include "ContentToken.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class ElementType; class ShortReferenceMap; class RankStem; class SP_API ElementDefinition : public Resource { public: enum DeclaredContent { modelGroup, any, cdata, rcdata, empty }; enum OmitFlags { omitStart = 01, omitEnd = 02, omitSpec = 04 }; enum { undefinedIndex = -1 }; ElementDefinition(const Location &location, size_t index, unsigned char omitFlags, DeclaredContent declaredContent); ElementDefinition(const Location &location, size_t index, unsigned char omitFlags, DeclaredContent declaredContent, Owner &modelGroup); const CompiledModelGroup *compiledModelGroup() const; DeclaredContent declaredContent() const; // Was the omitted tag minimization specified? Boolean omittedTagSpec() const; Boolean canOmitStartTag() const; Boolean canOmitEndTag() const; size_t nRankStems() const; const RankStem *rankStem(size_t i) const; const StringC &rankSuffix() const; size_t nInclusions() const; const ElementType *inclusion(size_t) const; size_t nExclusions() const; const ElementType *exclusion(size_t) const; Boolean undefined() const; void setInclusions(Vector &inclusions); void setExclusions(Vector &exclusions); void setRank(StringC &suffix, Vector &rankStems); Mode mode(Boolean netEnabled) const; const Location &location() const; private: ElementDefinition(const ElementDefinition &); // undefined void operator=(const ElementDefinition &); // undefined void computeMode(); Location location_; size_t index_; unsigned char omitFlags_; DeclaredContent declaredContent_; Owner modelGroup_; Vector inclusions_; Vector exclusions_; // rankStems_ contains all the rank stems in the ranked group in this // definition. Vector rankStems_; StringC rankSuffix_; Mode mode_; Mode netMode_; }; class SP_API RankStem : public Named { public: RankStem(const StringC &, size_t); size_t index() const; void addDefinition(const ConstPtr &); size_t nDefinitions() const; const ElementDefinition *definition(size_t) const; private: RankStem(const RankStem &); // undefined void operator=(const RankStem &); // undefined size_t index_; Vector > def_; }; class SP_API ElementType : public Named, public Attributed { public: ElementType(const StringC &, size_t); void setElementDefinition(const ConstPtr &, size_t defIndex); void setMap(const ShortReferenceMap *); void setRankStem(RankStem *); Boolean undefined() const; const ElementDefinition *definition() const; Boolean isRankedElement() const; const RankStem *rankedElementRankStem() const; size_t index() const; const ShortReferenceMap *map() const; void swap(ElementType &); private: ElementType(const ElementType &); // undefined void operator=(const ElementType &); // undefined size_t index_; size_t defIndex_; // index in the group having same definition ConstPtr def_; const ShortReferenceMap *map_; }; inline const CompiledModelGroup *ElementDefinition::compiledModelGroup() const { return modelGroup_.pointer(); } inline ElementDefinition::DeclaredContent ElementDefinition::declaredContent() const { return declaredContent_; } inline Boolean ElementDefinition::canOmitStartTag() const { return (omitFlags_ & omitStart) != 0; } inline Boolean ElementDefinition::canOmitEndTag() const { return (omitFlags_ & omitEnd) != 0; } inline Boolean ElementDefinition::omittedTagSpec() const { return (omitFlags_ & omitSpec) != 0; } inline size_t ElementDefinition::nRankStems() const { return rankStems_.size(); } inline const StringC &ElementDefinition::rankSuffix() const { return rankSuffix_; } inline const RankStem *ElementDefinition::rankStem(size_t i) const { return rankStems_[i]; } inline const ElementType *ElementDefinition::inclusion(size_t i) const { return inclusions_[i]; } inline size_t ElementDefinition::nInclusions() const { return inclusions_.size(); } inline const ElementType *ElementDefinition::exclusion(size_t i) const { return exclusions_[i]; } inline size_t ElementDefinition::nExclusions() const { return exclusions_.size(); } inline Boolean ElementDefinition::undefined() const { return index_ == size_t(undefinedIndex); } inline const Location &ElementDefinition::location() const { return location_; } inline void ElementDefinition::setInclusions(Vector &inclusions) { inclusions.swap(inclusions_); } inline void ElementDefinition::setExclusions(Vector &exclusions) { exclusions.swap(exclusions_); } inline void ElementDefinition::setRank(StringC &rankSuffix, Vector &rankStems) { rankStems.swap(rankStems_); rankSuffix.swap(rankSuffix_); } inline Boolean ElementType::undefined() const { return def_->undefined(); } inline Boolean ElementType::isRankedElement() const { return def_->nRankStems() > 0; } inline const ElementDefinition *ElementType::definition() const { return def_.pointer(); } inline void ElementType::setElementDefinition(const ConstPtr &def, size_t defIndex) { def_ = def; defIndex_ = defIndex; } inline size_t ElementType::index() const { return index_; } inline const RankStem *ElementType::rankedElementRankStem() const { return def_->rankStem(defIndex_); } inline void ElementType::setMap(const ShortReferenceMap *map) { map_ = map; } inline const ShortReferenceMap *ElementType::map() const { return map_; } inline size_t RankStem::index() const { return index_; } inline size_t RankStem::nDefinitions() const { return def_.size(); } inline const ElementDefinition *RankStem::definition(size_t i) const { return def_[i].pointer(); } inline Mode ElementDefinition::mode(Boolean netEnabled) const { return netEnabled ? netMode_ : mode_; } #ifdef SP_NAMESPACE } #endif #endif /* not ElementType_INCLUDED */ jade-1.2.1/include/Entity.h100444 764 764 21077 6604607554 13316 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Entity_INCLUDED #define Entity_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "StringC.h" #include "NamedResource.h" #include "Location.h" #include "Owner.h" #include "Attribute.h" #include "ExternalId.h" #include "Text.h" #include "SubstTable.h" #include "StringResource.h" #include "Allocator.h" #include "EntityDecl.h" #include "Markup.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Messenger; class InputSource; class EntityOrigin; class ParserState; class ExternalEntity; class ExternalDataEntity; class SubdocEntity; class InternalEntity; class Notation; class Entity : public EntityDecl { public: Entity(const StringC &name, DeclType declType, DataType dataType, const Location &defLocation); // reference in a literal virtual void litReference(Text &, ParserState &, const Ptr &, Boolean squeezeSpaces) const; // reference in a declaration virtual void declReference(ParserState &, const Ptr &) const; // reference in a declaration subset virtual void dsReference(ParserState &, const Ptr &) const; // reference in content virtual void contentReference(ParserState &, const Ptr &) const; // reference in rcdata virtual void rcdataReference(ParserState &, const Ptr &) const; // for entity name attribute checking virtual Boolean isDataOrSubdoc() const; // for determining whether we need to validate as character data virtual Boolean isCharacterData() const; virtual const ExternalDataEntity *asExternalDataEntity() const; virtual const SubdocEntity *asSubdocEntity() const; virtual const InternalEntity *asInternalEntity() const; virtual const ExternalEntity *asExternalEntity() const; // needed for default entity virtual Entity *copy() const = 0; virtual void generateSystemId(ParserState &); void setUsed(); Boolean used() const; void setDefaulted(); Boolean defaulted() const; protected: static void checkEntlvl(ParserState &); Boolean checkNotOpen(ParserState &) const; private: virtual void normalReference(ParserState &, const Ptr &, Boolean generateEvent) const = 0; PackedBoolean used_; PackedBoolean defaulted_; }; class InternalEntity : public Entity { public: InternalEntity(const StringC &, DeclType declType, DataType dataType, const Location &, Text &); const StringC &string() const; const Text &text() const; const InternalEntity *asInternalEntity() const; protected: Text text_; }; class PiEntity : public InternalEntity { public: PiEntity(const StringC &, DeclType, const Location &, Text &); void litReference(Text &, ParserState &, const Ptr &, Boolean) const; void normalReference(ParserState &, const Ptr &, Boolean) const; void declReference(ParserState &, const Ptr &) const; void rcdataReference(ParserState &, const Ptr &) const; Entity *copy() const; }; class InternalDataEntity : public InternalEntity { public: InternalDataEntity(const StringC &, DataType, const Location &, Text &); void declReference(ParserState &, const Ptr &) const; Boolean isDataOrSubdoc() const; }; class InternalCdataEntity : public InternalDataEntity { public: InternalCdataEntity(const StringC &, const Location &, Text &); void normalReference(ParserState &, const Ptr &, Boolean) const; void litReference(Text &, ParserState &, const Ptr &, Boolean) const; Entity *copy() const; Boolean isCharacterData() const; }; class InternalSdataEntity : public InternalDataEntity { public: InternalSdataEntity(const StringC &, const Location &, Text &); void normalReference(ParserState &, const Ptr &, Boolean) const; void litReference(Text &, ParserState &, const Ptr &, Boolean) const; Entity *copy() const; Boolean isCharacterData() const; }; class InternalTextEntity : public InternalEntity { public: enum Bracketed { none, starttag, endtag, ms, md }; InternalTextEntity(const StringC &, DeclType, const Location &, Text &, Bracketed); Entity *copy() const; private: void normalReference(ParserState &, const Ptr &, Boolean) const; void litReference(Text &, ParserState &, const Ptr &, Boolean) const; Bracketed bracketed_; }; class ExternalEntity : public Entity { public: ExternalEntity(const StringC &, DeclType, DataType, const Location &, const ExternalId &); const ExternalId &externalId() const; const ExternalEntity *asExternalEntity() const; void generateSystemId(ParserState &); const StringC *systemIdPointer() const; const StringC *effectiveSystemIdPointer() const; const StringC *publicIdPointer() const; private: ExternalId externalId_; }; class ExternalTextEntity : public ExternalEntity { public: ExternalTextEntity(const StringC &, DeclType, const Location &, const ExternalId &); Entity *copy() const; private: void normalReference(ParserState &, const Ptr &, Boolean) const; void litReference(Text &, ParserState &, const Ptr &, Boolean) const; }; class ExternalNonTextEntity : public ExternalEntity { public: ExternalNonTextEntity(const StringC &, DataType, const Location &, const ExternalId &); Boolean isDataOrSubdoc() const; void litReference(Text &, ParserState &, const Ptr &, Boolean) const; void rcdataReference(ParserState &, const Ptr &) const; void normalReference(ParserState &, const Ptr &, Boolean) const; Boolean isCharacterData() const; }; class ExternalDataEntity : public ExternalNonTextEntity { public: ExternalDataEntity(const StringC &, DataType, const Location &, const ExternalId &, const ConstPtr &, AttributeList &); const AttributeList &attributes() const; const Notation *notation() const; const ExternalDataEntity *asExternalDataEntity() const; Entity *copy() const; void contentReference(ParserState &, const Ptr &) const; void setNotation(const ConstPtr &, AttributeList &); private: ConstPtr notation_; AttributeList attributes_; }; class SubdocEntity : public ExternalNonTextEntity { public: SubdocEntity(const StringC &, const Location &, const ExternalId &); const SubdocEntity *asSubdocEntity() const; Entity *copy() const; void contentReference(ParserState &, const Ptr &) const; private: }; class IgnoredEntity : public Entity { public: IgnoredEntity(const StringC &, DeclType declType); Entity *copy() const; void litReference(Text &, ParserState &, const Ptr &, Boolean squeezeSpaces) const; void declReference(ParserState &, const Ptr &) const; private: void normalReference(ParserState &, const Ptr &, Boolean generateEvent) const; }; class SP_API EntityOrigin : public InputSourceOrigin { public: static EntityOrigin *make(Allocator &, const ConstPtr &); static EntityOrigin *make(Allocator &, const ConstPtr &, const Location &refLocation); static EntityOrigin *make(Allocator &, const ConstPtr &, const Location &refLocation, Index refLength, Owner &markup); static EntityOrigin *make(const ConstPtr &, const Location &refLocation, Index refLength, Owner &markup); static EntityOrigin *make(const ConstPtr &, const Location &refLocation); static const size_t allocSize; }; inline Boolean Entity::used() const { return used_; } inline void Entity::setUsed() { used_ = 1; } inline Boolean Entity::defaulted() const { return defaulted_; } inline void Entity::setDefaulted() { defaulted_ = 1; } inline const StringC &InternalEntity::string() const { return text_.string(); } inline const Text &InternalEntity::text() const { return text_; } inline const ExternalId &ExternalEntity::externalId() const { return externalId_; } inline const AttributeList &ExternalDataEntity::attributes() const { return attributes_; } inline const Notation *ExternalDataEntity::notation() const { return notation_.pointer(); } #ifdef SP_NAMESPACE } #endif #endif /* not Entity_INCLUDED */ jade-1.2.1/include/EntityApp.h100444 764 764 2112 6604607554 13724 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef EntityApp_INCLUDED #define EntityApp_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "CmdLineApp.h" #include "CharsetInfo.h" #include "Boolean.h" #include "ExtendEntityManager.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API EntityApp : public CmdLineApp { public: EntityApp(const char *requiredInternalCode = 0); void processOption(AppChar opt, const AppChar *arg); virtual int processSysid(const StringC &) = 0; int processArguments(int argc, AppChar **files); Boolean makeSystemId(int nFiles, AppChar *const *files, StringC &result); Ptr &entityManager(); protected: void clearEntityManager(); private: Vector searchDirs_; Vector catalogSysids_; Boolean mapCatalogDocument_; Ptr entityManager_; }; inline void EntityApp::clearEntityManager() { resetCodingSystemKit(); entityManager_.clear(); } #ifdef SP_NAMESPACE } #endif #endif /* not EntityApp_INCLUDED */ jade-1.2.1/include/EntityCatalog.h100444 764 764 2416 6604607554 14565 0ustar jjcjjc#ifndef EntityCatalog_INCLUDED #define EntityCatalog_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "StringC.h" #include "Resource.h" #include "SubstTable.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Messenger; class CharsetInfo; class EntityDecl; class SP_API EntityCatalog : public Resource { public: class SP_API Syntax { public: virtual Boolean namecaseGeneral() const = 0; virtual Boolean namecaseEntity() const = 0; virtual const SubstTable &upperSubstTable() const = 0; virtual const StringC &peroDelim() const = 0; }; virtual ~EntityCatalog(); virtual Boolean sgmlDecl(const CharsetInfo &, Messenger &, StringC &) const; virtual Boolean lookup(const EntityDecl &, const Syntax &, const CharsetInfo &, Messenger &, StringC &) const; virtual Boolean lookupPublic(const StringC &, const CharsetInfo &, Messenger &, StringC &) const; // This is for a character described by a minimum literal // in the SGML declaration. virtual Boolean lookupChar(const StringC &, const CharsetInfo &, Messenger &, UnivChar &) const; }; #ifdef SP_NAMESPACE } #endif #endif /* not EntityCatalog_INCLUDED */ jade-1.2.1/include/EntityDecl.h100444 764 764 4465 6604607554 14070 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifndef EntityDecl_INCLUDED #define EntityDecl_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "NamedResource.h" #include "Ptr.h" #include "StringResource.h" #include "Location.h" #include "types.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API EntityDecl : public NamedResource { public: enum DeclType { generalEntity, parameterEntity, doctype, linktype, notation, sgml }; enum DataType { sgmlText, pi, cdata, sdata, ndata, subdoc }; EntityDecl(const StringC &, DeclType declType, DataType dataType, const Location &defLocation); DataType dataType() const; DeclType declType() const; const Location &defLocation() const; Boolean declInDtdIsBase() const; Boolean declInActiveLpd() const; const StringC *declInDtdNamePointer() const; const StringC *declInLpdNamePointer() const; void setDeclIn(const ConstPtr > &dtdName, Boolean dtdIsBase, const ConstPtr > &lpdName, Boolean lpdIsActive); void setDeclIn(const ConstPtr > &dtdName, Boolean dtdIsBase); void setDefLocation(const Location &); virtual const StringC *systemIdPointer() const; virtual const StringC *publicIdPointer() const; virtual const StringC *effectiveSystemIdPointer() const; private: DeclType declType_; DataType dataType_; PackedBoolean dtdIsBase_; PackedBoolean lpdIsActive_; Location defLocation_; ConstPtr > dtdName_; ConstPtr > lpdName_; }; inline const Location &EntityDecl::defLocation() const { return defLocation_; } inline EntityDecl::DeclType EntityDecl::declType() const { return declType_; } inline EntityDecl::DataType EntityDecl::dataType() const { return dataType_; } inline const StringC *EntityDecl::declInDtdNamePointer() const { return dtdName_.pointer(); } inline const StringC *EntityDecl::declInLpdNamePointer() const { return lpdName_.pointer(); } inline Boolean EntityDecl::declInDtdIsBase() const { return dtdIsBase_; } inline Boolean EntityDecl::declInActiveLpd() const { return lpdIsActive_; } inline void EntityDecl::setDefLocation(const Location &loc) { defLocation_ = loc; } #ifdef SP_NAMESPACE } #endif #endif /* not EntityDecl_INCLUDED */ jade-1.2.1/include/EntityManager.h100444 764 764 2252 6604607554 14563 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifndef EntityManager_INCLUDED #define EntityManager_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "StringC.h" #include "Resource.h" #include "EntityCatalog.h" #include "Ptr.h" #include "Boolean.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Messenger; class InputSourceOrigin; class CharsetInfo; class InputSource; class SP_API EntityManager : public Resource { public: enum { mayRewind = 01, maySetDocCharset = 02 }; virtual ~EntityManager(); virtual Boolean internalCharsetIsDocCharset() const = 0; virtual const CharsetInfo &charset() const = 0; virtual InputSource *open(const StringC &sysid, const CharsetInfo &docCharset, InputSourceOrigin *, unsigned flags, Messenger &) = 0; // Make a catalog for a document or subdocument with specified // system identifier. // The catalog can cause the system identifier to be replaced. virtual ConstPtr makeCatalog(StringC &systemId, const CharsetInfo &, Messenger &) = 0; }; #ifdef SP_NAMESPACE } #endif #endif /* not EntityManager_INCLUDED */ jade-1.2.1/include/ErrnoMessageArg.h100444 764 764 1212 6604607554 15033 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef ErrnoMessageArg_INCLUDED #define ErrnoMessageArg_INCLUDED 1 #include "MessageArg.h" #include "rtti.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API ErrnoMessageArg : public OtherMessageArg { RTTI_CLASS public: ErrnoMessageArg(int errnum) : errno_(errnum) { } MessageArg *copy() const; // errno might be a macro so we must use a different name int errnum() const; private: int errno_; }; inline int ErrnoMessageArg::errnum() const { return errno_; } #ifdef SP_NAMESPACE } #endif #endif /* not ErrnoMessageArg_INCLUDED */ jade-1.2.1/include/ErrorCountEventHandler.h100444 764 764 2332 6604607554 16415 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef ErrorCountEventHandler_INCLUDED #define ErrorCountEventHandler_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include #include "Event.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API ErrorCountEventHandler : public EventHandler { public: ErrorCountEventHandler(unsigned errorLimit = 0); void setErrorLimit(unsigned maxErrors); const sig_atomic_t *cancelPtr() const; void cancel(); Boolean cancelled() const; unsigned errorCount() const; void message(MessageEvent *); void noteMessage(const Message &); private: unsigned maxErrors_; unsigned errorCount_; sig_atomic_t cancel_; }; inline unsigned ErrorCountEventHandler::errorCount() const { return errorCount_; } inline const sig_atomic_t *ErrorCountEventHandler::cancelPtr() const { return &cancel_; } inline void ErrorCountEventHandler::cancel() { cancel_ = 1; } inline void ErrorCountEventHandler::setErrorLimit(unsigned maxErrors) { maxErrors_ = maxErrors; } inline Boolean ErrorCountEventHandler::cancelled() const { return cancel_ != 0; } #ifdef SP_NAMESPACE } #endif #endif /* not ErrorCountEventHandler_INCLUDED */ jade-1.2.1/include/Event.h100444 764 764 76200 6604607554 13121 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Event_INCLUDED #define Event_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Link.h" #include "Allocator.h" #include "Location.h" #include "Vector.h" #include "Owner.h" #include "Boolean.h" #include "types.h" #include "Ptr.h" #include "StringC.h" #include "Notation.h" #include "Sd.h" #include "Syntax.h" #include "Dtd.h" #include "ElementType.h" #include "Text.h" #include "Lpd.h" #include "Message.h" #include "Markup.h" #include "ShortReferenceMap.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class EventHandler; class SP_API Event : public Link { public: enum Type { message, characterData, startElement, endElement, pi, sdataEntity, externalDataEntity, subdocEntity, nonSgmlChar, appinfo, startDtd, endDtd, startLpd, endLpd, endProlog, sgmlDecl, uselink, usemap, commentDecl, sSep, ignoredRs, ignoredRe, reOrigin, ignoredChars, markedSectionStart, markedSectionEnd, entityStart, entityEnd, notationDecl, entityDecl, elementDecl, attlistDecl, // not #NOTATION and not in LPD attlistNotationDecl, linkAttlistDecl, linkDecl, idLinkDecl, shortrefDecl, ignoredMarkup, entityDefaulted, sgmlDeclEntity }; Event(Type); virtual void handle(EventHandler &) = 0; virtual void copyData(); void *operator new(size_t sz, Allocator &alloc) { return alloc.alloc(sz); } void *operator new(size_t sz) { return Allocator::allocSimple(sz); } void operator delete(void *p) { Allocator::free(p); } #ifdef SP_HAVE_PLACEMENT_OPERATOR_DELETE void operator delete(void *p, Allocator &) { Allocator::free(p); } #endif Type type() const; private: Event(const Event &); // undefined void operator=(const Event &); // undefined Type type_; }; class LocatedEvent : public Event { public: LocatedEvent(Type type, const Location &); const Location &location() const; private: LocatedEvent(const LocatedEvent &); // undefined void operator=(const LocatedEvent &); // undefined Location location_; }; class MarkupEvent : public LocatedEvent { public: MarkupEvent(Type type); MarkupEvent(Type type, const Location &, Markup *); const Markup &markup() const; private: MarkupEvent(const MarkupEvent &); // undefined void operator=(const MarkupEvent &); // undefined Markup markup_; }; class SP_API MessageEvent : public Event { public: MessageEvent(Message &); MessageEvent(const Message &); const Message &message() const; void handle(EventHandler &); private: MessageEvent(const MessageEvent &); // undefined void operator=(const MessageEvent &); // undefined Message message_; }; class AttributeList; class StartElementEvent : public LocatedEvent { public: StartElementEvent(const ElementType *, const ConstPtr &, AttributeList *, const Location &, Markup *); ~StartElementEvent(); void handle(EventHandler &); Boolean mustOmitEnd() const; void setIncluded(); Boolean included() const; const StringC &name() const; const ElementType *elementType() const; const Markup *markupPtr() const; const AttributeList &attributes() const; void copyData(); private: StartElementEvent(const StartElementEvent &); // undefined void operator=(const StartElementEvent &); // undefined const ElementType *elementType_; ConstPtr dtd_; PackedBoolean included_; PackedBoolean copied_; // has copyData() been called Markup *markup_; AttributeList *attributes_; }; class EndElementEvent : public LocatedEvent { public: EndElementEvent(const ElementType *, const ConstPtr &, const Location &, Markup *); ~EndElementEvent(); void handle(EventHandler &); void setIncluded(); Boolean included() const; const StringC &name() const; const ElementType *elementType() const; const Markup *markupPtr() const; void copyData(); private: EndElementEvent(const EndElementEvent &); // undefined void operator=(const EndElementEvent &); // undefined const ElementType *elementType_; ConstPtr dtd_; PackedBoolean included_; PackedBoolean copied_; // has copyData() been called Markup *markup_; }; class DataEvent : public LocatedEvent { public: DataEvent(Type, const Char *, size_t, const Location &); void handle(EventHandler &); const Char *data() const; size_t dataLength() const; virtual Boolean isRe(unsigned long &serial) const; virtual const Entity *entity() const; protected: const Char *p_; size_t length_; private: DataEvent(const DataEvent &); // undefined void operator=(const DataEvent &); // undefined }; class ImmediateDataEvent : public DataEvent { public: ImmediateDataEvent(Type type, const Char *, size_t, const Location &, Boolean copy); ~ImmediateDataEvent(); void copyData(); private: ImmediateDataEvent(const ImmediateDataEvent &); // undefined void operator=(const ImmediateDataEvent &); // undefined Char *alloc_; }; class InternalDataEntity; class DataEntityEvent : public DataEvent { public: DataEntityEvent(Type type, const InternalEntity *, const ConstPtr &); const Entity *entity() const; private: DataEntityEvent(const DataEntityEvent &); // undefined void operator=(const DataEntityEvent &); // undefined }; class InternalCdataEntity; class CdataEntityEvent : public DataEntityEvent { public: CdataEntityEvent(const InternalEntity *, const ConstPtr &); private: CdataEntityEvent(const CdataEntityEvent &); // undefined void operator=(const CdataEntityEvent &); // undefined }; class InternalSdataEntity; class SdataEntityEvent : public DataEntityEvent { public: SdataEntityEvent(const InternalEntity *, const ConstPtr &); void handle(EventHandler &); private: SdataEntityEvent(const SdataEntityEvent &); // undefined void operator=(const SdataEntityEvent &); // undefined }; class PiEntity; class PiEvent : public LocatedEvent { public: PiEvent(const Char *, size_t, const Location &); const Char *data() const; size_t dataLength() const; virtual const Entity *entity() const; void handle(EventHandler &); private: PiEvent(const PiEvent &); // undefined void operator=(const PiEvent &); // undefined const Char *data_; size_t dataLength_; }; class ImmediatePiEvent : public PiEvent { public: ImmediatePiEvent(StringC &, const Location &); private: ImmediatePiEvent(const ImmediatePiEvent &); // undefined void operator=(const ImmediatePiEvent &); // undefined StringC string_; }; class PiEntityEvent : public PiEvent { public: PiEntityEvent(const PiEntity *entity, const ConstPtr &origin); const Entity *entity() const; private: PiEntityEvent(const PiEntityEvent &); // undefined void operator=(const PiEntityEvent &); // undefined }; class ExternalNonTextEntity; class ExternalDataEntity; class SubdocEntity; class ExternalEntityEvent : public Event { public: ExternalEntityEvent(Type type, const ConstPtr &); const ConstPtr &entityOrigin() const; const Location &location() const; private: ExternalEntityEvent(const ExternalEntityEvent &); // undefined void operator=(const ExternalEntityEvent &); // undefined ConstPtr origin_; }; class ExternalDataEntityEvent : public ExternalEntityEvent { public: ExternalDataEntityEvent(const ExternalDataEntity *, const ConstPtr &); void handle(EventHandler &); const ExternalDataEntity *entity() const; private: ExternalDataEntityEvent(const ExternalDataEntityEvent &); // undefined void operator=(const ExternalDataEntityEvent &); // undefined const ExternalDataEntity *dataEntity_; }; class SubdocEntityEvent : public ExternalEntityEvent { public: SubdocEntityEvent(const SubdocEntity *, const ConstPtr &); void handle(EventHandler &); const SubdocEntity *entity() const; private: SubdocEntityEvent(const SubdocEntityEvent &); // undefined void operator=(const SubdocEntityEvent &); // undefined const SubdocEntity *subdocEntity_; }; class NonSgmlCharEvent : public LocatedEvent { public: NonSgmlCharEvent(Char c, const Location &); Char character() const; void handle(EventHandler &); private: NonSgmlCharEvent(const NonSgmlCharEvent &); // undefined void operator=(const NonSgmlCharEvent &); // undefined Char c_; }; class AppinfoEvent : public LocatedEvent { public: AppinfoEvent(const Location &); AppinfoEvent(const Text &, const Location &); void handle(EventHandler &); Boolean literal(const StringC *&) const; private: AppinfoEvent(const AppinfoEvent &); // undefined void operator=(const AppinfoEvent &); // undefined Boolean appinfoNone_; Text appinfo_; }; class UselinkEvent : public MarkupEvent { public: UselinkEvent(const ConstPtr &, const LinkSet *, Boolean restore, const Location &, Markup *); void handle(EventHandler &); const ConstPtr &lpd() const; const LinkSet *linkSet() const; Boolean restore() const; private: UselinkEvent(const UselinkEvent &); // undefined void operator=(const UselinkEvent &); // undefined ConstPtr lpd_; const LinkSet *linkSet_; Boolean restore_; }; class UsemapEvent : public MarkupEvent { public: UsemapEvent(const ShortReferenceMap *, Vector &, const ConstPtr &, const Location &, Markup *); void handle(EventHandler &); const ShortReferenceMap *map() const; const Vector &elements() const; private: UsemapEvent(const UsemapEvent &); // undefined void operator=(const UsemapEvent &); // undefined ConstPtr dtd_; Vector elements_; const ShortReferenceMap *map_; }; class StartSubsetEvent : public MarkupEvent { public: StartSubsetEvent(Type, const StringC &, const ConstPtr &entity, Boolean hasInternalSubset, const Location &, Markup *); const StringC &name() const; const ConstPtr &entity() const; Boolean hasInternalSubset() const; private: StartSubsetEvent(const StartSubsetEvent &); // undefined void operator=(const StartSubsetEvent &); // undefined StringC name_; ConstPtr entity_; Boolean hasInternalSubset_; }; class StartDtdEvent : public StartSubsetEvent { public: StartDtdEvent(const StringC &, const ConstPtr &entity, Boolean hasInternalSubset, const Location &, Markup *); void handle(EventHandler &); private: StartDtdEvent(const StartDtdEvent &); // undefined void operator=(const StartDtdEvent &); // undefined }; class StartLpdEvent : public StartSubsetEvent { public: StartLpdEvent(Boolean active, const StringC &, const ConstPtr &entity, Boolean hasInternalSubset, const Location &, Markup *); void handle(EventHandler &); Boolean active() const; private: StartLpdEvent(const StartLpdEvent &); // undefined void operator=(const StartLpdEvent &); // undefined Boolean active_; }; class EndDtdEvent : public MarkupEvent { public: EndDtdEvent(const ConstPtr &, const Location &, Markup *); void handle(EventHandler &); const Dtd &dtd() const; const ConstPtr &dtdPointer() const; private: EndDtdEvent(const EndDtdEvent &); // undefined void operator=(const EndDtdEvent &); // undefined ConstPtr dtd_; }; class EndLpdEvent : public MarkupEvent { public: EndLpdEvent(const ConstPtr &, const Location &, Markup *); void handle(EventHandler &); const Lpd &lpd() const; const ConstPtr &lpdPointer() const; private: EndLpdEvent(const EndLpdEvent &); // undefined void operator=(const EndLpdEvent &); // undefined ConstPtr lpd_; }; class EndPrologEvent : public LocatedEvent { public: EndPrologEvent(const ConstPtr &dtd, const ConstPtr &lpd, Vector &simpleLinkNames, Vector &simpleLinkAttributes, const Location &); EndPrologEvent(const ConstPtr &dtd, const Location &); void handle(EventHandler &); const Dtd &dtd() const; const ConstPtr &dtdPointer() const; const ConstPtr &lpdPointer() const; const Vector &simpleLinkNames() const; const Vector &simpleLinkAttributes() const; private: EndPrologEvent(const EndPrologEvent &); // undefined void operator=(const EndPrologEvent &); // undefined ConstPtr dtd_; ConstPtr lpd_; Vector simpleLinkNames_; Vector simpleLinkAttributes_; }; class SgmlDeclEvent : public MarkupEvent { public: // for an implied SGML declaration SgmlDeclEvent(const ConstPtr &, const ConstPtr &syntax); // for an explicit SGML declaration SgmlDeclEvent(const ConstPtr &, const ConstPtr &syntax, const ConstPtr &instanceSyntax, const ConstPtr &refSd, const ConstPtr &refSyntax, Index nextIndex, const StringC &implySystemId, const Location &, Markup *); void handle(EventHandler &); const Sd &sd() const; const ConstPtr &sdPointer() const; const Syntax &prologSyntax() const; const ConstPtr &prologSyntaxPointer() const; const Syntax &instanceSyntax() const; const ConstPtr &instanceSyntaxPointer() const; const ConstPtr &refSdPointer() const; const ConstPtr &refSyntaxPointer() const; const StringC &implySystemId() const; private: SgmlDeclEvent(const SgmlDeclEvent &); // undefined void operator=(const SgmlDeclEvent &); // undefined ConstPtr sd_; ConstPtr prologSyntax_; ConstPtr instanceSyntax_; ConstPtr refSd_; ConstPtr refSyntax_; Index nextIndex_; StringC implySystemId_; }; class CommentDeclEvent : public MarkupEvent { public: CommentDeclEvent(const Location &, Markup *); void handle(EventHandler &); private: CommentDeclEvent(const CommentDeclEvent &); // undefined void operator=(const CommentDeclEvent &); // undefined }; class SSepEvent : public ImmediateDataEvent { public: SSepEvent(const Char *, size_t, const Location &, Boolean copy); void handle(EventHandler &); private: SSepEvent(const SSepEvent &); // undefined void operator=(const SSepEvent &); // undefined }; class IgnoredRsEvent : public LocatedEvent { public: IgnoredRsEvent(Char c, const Location &); void handle(EventHandler &); Char rs() const; private: IgnoredRsEvent(const IgnoredRsEvent &); // undefined void operator=(const IgnoredRsEvent &); // undefined Char c_; }; class IgnoredReEvent : public LocatedEvent { public: IgnoredReEvent(Char c, const Location &, unsigned long serial); void handle(EventHandler &); Char re() const; unsigned long serial() const; private: IgnoredReEvent(const IgnoredReEvent &); // undefined void operator=(const IgnoredReEvent &); // undefined unsigned long serial_; Char c_; }; class ReEvent : public ImmediateDataEvent { public: ReEvent(const Char *, const Location &, unsigned long serial); Boolean isRe(unsigned long &serial) const; private: ReEvent(const ReEvent &); // undefined void operator=(const ReEvent &); // undefined unsigned long serial_; }; class ReOriginEvent : public LocatedEvent { public: ReOriginEvent(Char c, const Location &, unsigned long serial); void handle(EventHandler &); Char re() const; unsigned long serial() const; private: ReOriginEvent(const ReOriginEvent &); // undefined void operator=(const ReOriginEvent &); // undefined unsigned long serial_; Char c_; }; class IgnoredCharsEvent : public ImmediateDataEvent { public: IgnoredCharsEvent(const Char *, size_t, const Location &, Boolean copy); void handle(EventHandler &); private: IgnoredCharsEvent(const IgnoredCharsEvent &); // undefined void operator=(const IgnoredCharsEvent &); // undefined }; class MarkedSectionEvent : public MarkupEvent { public: enum Status { include, rcdata, cdata, ignore }; // in priority order MarkedSectionEvent(Type, Status, const Location &, Markup *); Status status() const; private: MarkedSectionEvent(const MarkedSectionEvent &); // undefined void operator=(const MarkedSectionEvent &); // undefined Status status_; }; class MarkedSectionStartEvent : public MarkedSectionEvent { public: MarkedSectionStartEvent(Status, const Location &, Markup *); void handle(EventHandler &); private: MarkedSectionStartEvent(const MarkedSectionStartEvent &); // undefined void operator=(const MarkedSectionStartEvent &); // undefined }; class MarkedSectionEndEvent : public MarkedSectionEvent { public: MarkedSectionEndEvent(Status, const Location &, Markup *); void handle(EventHandler &); private: MarkedSectionEndEvent(const MarkedSectionEndEvent &); // undefined void operator=(const MarkedSectionEndEvent &); // undefined }; class EntityStartEvent : public Event { public: EntityStartEvent(const ConstPtr &origin); void handle(EventHandler &); const Entity *entity() const; const ConstPtr &entityOrigin() const; private: EntityStartEvent(const EntityStartEvent &); // undefined void operator=(const EntityStartEvent &); // undefined ConstPtr origin_; }; class EntityEndEvent : public LocatedEvent { public: EntityEndEvent(const Location &); void handle(EventHandler &); private: EntityEndEvent(const EntityEndEvent &); // undefined void operator=(const EntityEndEvent &); // undefined }; class EntityDeclEvent : public MarkupEvent { public: EntityDeclEvent(const ConstPtr &, Boolean ignored, const Location &, Markup *); void handle(EventHandler &); const Entity &entity() const; const ConstPtr &entityPointer() const; Boolean ignored() const; // The name of the entity will be empty if this is the default entity. private: Boolean ignored_; // This will actually point to an external entity. ConstPtr entity_; }; class NotationDeclEvent : public MarkupEvent { public: NotationDeclEvent(const ConstPtr &, const Location &, Markup *); void handle(EventHandler &); const Notation ¬ation() const; const ConstPtr ¬ationPointer() const; private: NotationDeclEvent(const NotationDeclEvent &); // undefined void operator=(const NotationDeclEvent &); // undefined ConstPtr notation_; }; class ElementDeclEvent : public MarkupEvent { public: ElementDeclEvent(Vector &elements, const ConstPtr &, const Location &, Markup *); void handle(EventHandler &); const Vector &elements() const; private: ElementDeclEvent(const ElementDeclEvent &); // undefined void operator=(const ElementDeclEvent &); // undefined Vector elements_; ConstPtr dtd_; }; class AttlistDeclEvent : public MarkupEvent { public: AttlistDeclEvent(Vector &elements, const ConstPtr &, const Location &, Markup *); void handle(EventHandler &); const Vector &elements() const; private: AttlistDeclEvent(const AttlistDeclEvent &); // undefined void operator=(const AttlistDeclEvent &); // undefined Vector elements_; ConstPtr dtd_; }; class AttlistNotationDeclEvent : public MarkupEvent { public: AttlistNotationDeclEvent(Vector > ¬ations, const Location &, Markup *); void handle(EventHandler &); const Vector > ¬ations() const; private: AttlistNotationDeclEvent(const AttlistNotationDeclEvent &); // undefined void operator=(const AttlistDeclEvent &); // undefined Vector > notations_; }; class LinkAttlistDeclEvent : public MarkupEvent { public: LinkAttlistDeclEvent(Vector &elements, const ConstPtr &, const Location &, Markup *); void handle(EventHandler &); const Vector &elements() const; const Lpd &lpd() const; private: LinkAttlistDeclEvent(const LinkAttlistDeclEvent &); // undefined void operator=(const LinkAttlistDeclEvent &); // undefined Vector elements_; ConstPtr lpd_; }; class LinkDeclEvent : public MarkupEvent { public: LinkDeclEvent(const LinkSet *linkSet, const ConstPtr &, const Location &, Markup *); void handle(EventHandler &); const LinkSet *linkSet() const; const ComplexLpd &lpd() const; private: LinkDeclEvent(const LinkDeclEvent &); // undefined void operator=(const LinkDeclEvent &); // undefined const LinkSet *linkSet_; ConstPtr lpd_; }; class IdLinkDeclEvent : public MarkupEvent { public: IdLinkDeclEvent(const ConstPtr &, const Location &, Markup *); void handle(EventHandler &); const ComplexLpd &lpd() const; private: IdLinkDeclEvent(const IdLinkDeclEvent &); // undefined void operator=(const IdLinkDeclEvent &); // undefined ConstPtr lpd_; }; class ShortrefDeclEvent : public MarkupEvent { public: ShortrefDeclEvent(const ShortReferenceMap *, const ConstPtr &, const Location &, Markup *); void handle(EventHandler &); const ShortReferenceMap *map() const; private: ShortrefDeclEvent(const ShortrefDeclEvent &); // undefined void operator=(const ShortrefDeclEvent &); // undefined const ShortReferenceMap *map_; ConstPtr dtd_; }; class IgnoredMarkupEvent : public MarkupEvent { public: IgnoredMarkupEvent(const Location &, Markup *); void handle(EventHandler &); private: IgnoredMarkupEvent(const IgnoredMarkupEvent &); // undefined void operator=(const IgnoredMarkupEvent &); // undefined }; // This is for an undeclared entity whose first occurrence // is in the instance, when there is a default entity: // ie it extends the namespace of general entities after // the end of the prolog. class EntityDefaultedEvent : public LocatedEvent { public: EntityDefaultedEvent(const ConstPtr &, const Location &); void handle(EventHandler &); const Entity &entity() const; const ConstPtr &entityPointer() const; private: EntityDefaultedEvent(const EntityDefaultedEvent &); // undefined void operator=(const EntityDefaultedEvent &); // undefined ConstPtr entity_; }; class SgmlDeclEntityEvent : public LocatedEvent { public: SgmlDeclEntityEvent(const PublicId &publicId, PublicId::TextClass entityType, const StringC &effectiveSystemId, const Location &); void handle(EventHandler &); const PublicId &publicId() const; PublicId::TextClass entityType() const; const StringC &effectiveSystemId() const; private: SgmlDeclEntityEvent(const SgmlDeclEntityEvent &); // undefined void operator=(const SgmlDeclEntityEvent &); // undefined PublicId publicId_; PublicId::TextClass entityType_; StringC effectiveSystemId_; }; class SP_API EventHandler { public: virtual ~EventHandler(); virtual void message(MessageEvent *) = 0; virtual void data(DataEvent *); virtual void startElement(StartElementEvent *); virtual void endElement(EndElementEvent *); virtual void pi(PiEvent *); virtual void sdataEntity(SdataEntityEvent *); virtual void externalDataEntity(ExternalDataEntityEvent *); virtual void subdocEntity(SubdocEntityEvent *); virtual void nonSgmlChar(NonSgmlCharEvent *); virtual void appinfo(AppinfoEvent *); virtual void uselink(UselinkEvent *); virtual void usemap(UsemapEvent *); virtual void startDtd(StartDtdEvent *); virtual void endDtd(EndDtdEvent *); virtual void startLpd(StartLpdEvent *); virtual void endLpd(EndLpdEvent *); virtual void endProlog(EndPrologEvent *); virtual void sgmlDecl(SgmlDeclEvent *); virtual void commentDecl(CommentDeclEvent *); virtual void sSep(SSepEvent *); virtual void ignoredRs(IgnoredRsEvent *); virtual void ignoredRe(IgnoredReEvent *); virtual void reOrigin(ReOriginEvent *); virtual void ignoredChars(IgnoredCharsEvent *); virtual void markedSectionStart(MarkedSectionStartEvent *); virtual void markedSectionEnd(MarkedSectionEndEvent *); virtual void entityStart(EntityStartEvent *); virtual void entityEnd(EntityEndEvent *); virtual void notationDecl(NotationDeclEvent *); virtual void entityDecl(EntityDeclEvent *); virtual void elementDecl(ElementDeclEvent *); virtual void attlistDecl(AttlistDeclEvent *); virtual void linkAttlistDecl(LinkAttlistDeclEvent *); virtual void attlistNotationDecl(AttlistNotationDeclEvent *); virtual void linkDecl(LinkDeclEvent *); virtual void idLinkDecl(IdLinkDeclEvent *); virtual void shortrefDecl(ShortrefDeclEvent *); virtual void ignoredMarkup(IgnoredMarkupEvent *); virtual void entityDefaulted(EntityDefaultedEvent *); virtual void sgmlDeclEntity(SgmlDeclEntityEvent *); }; inline Event::Event(Type type) : type_(type) { } inline Event::Type Event::type() const { return type_; } inline const Location &LocatedEvent::location() const { return location_; } inline const Markup &MarkupEvent::markup() const { return markup_; } inline const Message &MessageEvent::message() const { return message_; } inline const ElementType *StartElementEvent::elementType() const { return elementType_; } inline const StringC &StartElementEvent::name() const { return elementType_->name(); } inline void StartElementEvent::setIncluded() { included_ = 1; } inline Boolean StartElementEvent::included() const { return included_; } inline const Markup *StartElementEvent::markupPtr() const { return markup_; } inline const AttributeList &StartElementEvent::attributes() const { return *attributes_; } inline Boolean StartElementEvent::mustOmitEnd() const { return ((elementType()->definition()->declaredContent() == ElementDefinition::empty) || attributes_->conref()); } inline const ElementType *EndElementEvent::elementType() const { return elementType_; } inline const StringC &EndElementEvent::name() const { return elementType_->name(); } inline void EndElementEvent::setIncluded() { included_ = 1; } inline Boolean EndElementEvent::included() const { return included_; } inline const Markup *EndElementEvent::markupPtr() const { return markup_; } inline const Char *DataEvent::data() const { return p_; } inline size_t DataEvent::dataLength() const { return length_; } inline const Char *PiEvent::data() const { return data_; } inline size_t PiEvent::dataLength() const { return dataLength_; } inline const ConstPtr & ExternalEntityEvent::entityOrigin() const { return origin_; } inline const Location &ExternalEntityEvent::location() const { return origin_->parent(); } inline const ExternalDataEntity *ExternalDataEntityEvent::entity() const { return dataEntity_; } inline const SubdocEntity *SubdocEntityEvent::entity() const { return subdocEntity_; } inline Char NonSgmlCharEvent::character() const { return c_; } inline Boolean AppinfoEvent::literal(const StringC *&p) const { if (appinfoNone_) return 0; p = &appinfo_.string(); return 1; } inline const ConstPtr &UselinkEvent::lpd() const { return lpd_; } inline const LinkSet *UselinkEvent::linkSet() const { return linkSet_; } inline Boolean UselinkEvent::restore() const { return restore_; } inline const ShortReferenceMap *UsemapEvent::map() const { return map_; } inline const StringC &StartSubsetEvent::name() const { return name_; } inline const ConstPtr &StartSubsetEvent::entity() const { return entity_; } inline Boolean StartSubsetEvent::hasInternalSubset() const { return hasInternalSubset_; } inline Boolean StartLpdEvent::active() const { return active_; } inline const Dtd &EndDtdEvent::dtd() const { return *dtd_; } inline const ConstPtr &EndDtdEvent::dtdPointer() const { return dtd_; } inline const Lpd &EndLpdEvent::lpd() const { return *lpd_; } inline const ConstPtr &EndLpdEvent::lpdPointer() const { return lpd_; } inline const Dtd &EndPrologEvent::dtd() const { return *dtd_; } inline const ConstPtr &EndPrologEvent::dtdPointer() const { return dtd_; } inline const ConstPtr &EndPrologEvent::lpdPointer() const { return lpd_; } inline const Vector &EndPrologEvent::simpleLinkNames() const { return simpleLinkNames_; } inline const Vector &EndPrologEvent::simpleLinkAttributes() const { return simpleLinkAttributes_; } inline const Sd &SgmlDeclEvent::sd() const { return *sd_; } inline const ConstPtr &SgmlDeclEvent::sdPointer() const { return sd_; } inline const ConstPtr &SgmlDeclEvent::refSdPointer() const { return refSd_; } inline const Syntax &SgmlDeclEvent::prologSyntax() const { return *prologSyntax_; } inline const ConstPtr &SgmlDeclEvent::prologSyntaxPointer() const { return prologSyntax_; } inline const Syntax &SgmlDeclEvent::instanceSyntax() const { return *instanceSyntax_; } inline const ConstPtr &SgmlDeclEvent::instanceSyntaxPointer() const { return instanceSyntax_; } inline const ConstPtr &SgmlDeclEvent::refSyntaxPointer() const { return refSyntax_; } inline const StringC &SgmlDeclEvent::implySystemId() const { return implySystemId_; } inline Char IgnoredRsEvent::rs() const { return c_; } inline Char IgnoredReEvent::re() const { return c_; } inline unsigned long IgnoredReEvent::serial() const { return serial_; } inline Char ReOriginEvent::re() const { return c_; } inline unsigned long ReOriginEvent::serial() const { return serial_; } inline MarkedSectionEvent::Status MarkedSectionEvent::status() const { return status_; } inline const Entity *EntityStartEvent::entity() const { return origin_->entity(); } inline const ConstPtr & EntityStartEvent::entityOrigin() const { return origin_; } inline const ConstPtr &EntityDeclEvent::entityPointer() const { return entity_; } inline const Entity &EntityDeclEvent::entity() const { return *entity_; } inline Boolean EntityDeclEvent::ignored() const { return ignored_; } inline const Notation &NotationDeclEvent::notation() const { return *notation_; } inline const ConstPtr &NotationDeclEvent::notationPointer() const { return notation_; } inline const Vector &ElementDeclEvent::elements() const { return elements_; } inline const Vector &AttlistDeclEvent::elements() const { return elements_; } inline const Vector &LinkAttlistDeclEvent::elements() const { return elements_; } inline const Lpd &LinkAttlistDeclEvent::lpd() const { return *lpd_; } inline const LinkSet *LinkDeclEvent::linkSet() const { return linkSet_; } inline const ComplexLpd &LinkDeclEvent::lpd() const { return *lpd_; } inline const ComplexLpd &IdLinkDeclEvent::lpd() const { return *lpd_; } inline const Vector > & AttlistNotationDeclEvent::notations() const { return notations_; } inline const ShortReferenceMap *ShortrefDeclEvent::map() const { return map_; } inline const Entity &EntityDefaultedEvent::entity() const { return *entity_; } inline const ConstPtr &EntityDefaultedEvent::entityPointer() const { return entity_; } inline const PublicId &SgmlDeclEntityEvent::publicId() const { return publicId_; } inline PublicId::TextClass SgmlDeclEntityEvent::entityType() const { return entityType_; } inline const StringC &SgmlDeclEntityEvent::effectiveSystemId() const { return effectiveSystemId_; } #ifdef SP_NAMESPACE } #endif #endif /* not Event_INCLUDED */ jade-1.2.1/include/EventsWanted.h100444 764 764 3031 6604607554 14417 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef EventsWanted_INCLUDED #define EventsWanted_INCLUDED 1 #include "Boolean.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API EventsWanted { public: EventsWanted(); Boolean wantInstanceMarkup() const; Boolean wantCommentDecls() const; // in instance Boolean wantMarkedSections() const; // in instance Boolean wantPrologMarkup() const; void addInstanceMarkup(); void addCommentDecls(); void addMarkedSections(); void addPrologMarkup(); private: PackedBoolean instanceMarkup_; PackedBoolean commentDecls_; PackedBoolean markedSections_; PackedBoolean prologMarkup_; }; inline EventsWanted::EventsWanted() : instanceMarkup_(0), commentDecls_(0), markedSections_(0), prologMarkup_(0) { } inline Boolean EventsWanted::wantInstanceMarkup() const { return instanceMarkup_; } inline void EventsWanted::addInstanceMarkup() { instanceMarkup_ = 1; commentDecls_ = 1; markedSections_ = 1; } inline Boolean EventsWanted::wantCommentDecls() const { return commentDecls_; } inline void EventsWanted::addCommentDecls() { commentDecls_ = 1; } inline Boolean EventsWanted::wantMarkedSections() const { return markedSections_; } inline void EventsWanted::addMarkedSections() { markedSections_ = 1; } inline Boolean EventsWanted::wantPrologMarkup() const { return prologMarkup_; } inline void EventsWanted::addPrologMarkup() { prologMarkup_ = 1; } #ifdef SP_NAMESPACE } #endif #endif /* not EventsWanted_INCLUDED */ jade-1.2.1/include/ExtendEntityManager.h100444 764 764 6311 6604607554 15733 0ustar jjcjjc// Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. #ifndef ExtendEntityManager_INCLUDED #define ExtendEntityManager_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "EntityManager.h" #include "CharsetInfo.h" #include "types.h" #include "Boolean.h" #include "StringC.h" #include "types.h" #include "Vector.h" #include "Location.h" #include "CodingSystemKit.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class StorageManager; class InputCodingSystem; class Messenger; struct SP_API StorageObjectSpec { StorageObjectSpec(); StorageManager *storageManager; const char *codingSystemName; const InputCodingSystem *codingSystem; StringC specId; // specified id StringC baseId; // id that specified id is relative to enum Records { find, cr, lf, crlf, asis }; Records records; PackedBoolean notrack; PackedBoolean zapEof; // zap a final Ctrl-Z PackedBoolean search; enum { encoding, bctf, special }; char codingSystemType; }; struct SP_API ParsedSystemId : public Vector { ParsedSystemId(); void unparse(const CharsetInfo &resultCharset, Boolean isNdata, StringC &result) const; struct SP_API Map { enum Type { catalogDocument, catalogPublic }; Type type; StringC publicId; }; Vector maps; }; struct SP_API StorageObjectLocation { const StorageObjectSpec *storageObjectSpec; StringC actualStorageId; unsigned long lineNumber; unsigned long columnNumber; unsigned long byteIndex; unsigned long storageObjectOffset; }; class SP_API ExtendEntityManager : public EntityManager { public: class SP_API CatalogManager { public: virtual ~CatalogManager(); virtual ConstPtr makeCatalog(StringC &systemId, const CharsetInfo &docCharset, ExtendEntityManager *, Messenger &) const = 0; virtual Boolean mapCatalog(ParsedSystemId &systemId, ExtendEntityManager *em, Messenger &mgr) const = 0; }; // Additional flags for open. enum { mayNotExist = 0100, isNdata = 0200 }; virtual void registerStorageManager(StorageManager *) = 0; virtual void setCatalogManager(CatalogManager *) = 0; virtual Boolean expandSystemId(const StringC &, const Location &, Boolean isNdata, const CharsetInfo &, const StringC *mapCatalogPublic, Messenger &, StringC &) = 0; virtual Boolean mergeSystemIds(const Vector &sysids, Boolean mapCatalogDocument, const CharsetInfo &, Messenger &mgr, StringC &) const = 0; virtual Boolean parseSystemId(const StringC &str, const CharsetInfo &docCharset, Boolean isNdata, const StorageObjectLocation *defLoc, Messenger &mgr, ParsedSystemId &parsedSysid) const = 0; static const ParsedSystemId *externalInfoParsedSystemId(const ExternalInfo *); static Boolean externalize(const ExternalInfo *, Offset, StorageObjectLocation &); static ExtendEntityManager *make(StorageManager *, const InputCodingSystem *, const ConstPtr &, Boolean internalCharsetIsDocCharset); }; #ifdef SP_NAMESPACE } #endif #endif /* not ExtendEntityManager_INCLUDED */ jade-1.2.1/include/ExternalId.h100444 764 764 7225 6604607554 14060 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef ExternalId_INCLUDED #define ExternalId_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Boolean.h" #include "StringC.h" #include "Text.h" #include "types.h" #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class CharsetInfo; class SP_API PublicId { public: enum TextClass { CAPACITY, CHARSET, DOCUMENT, DTD, ELEMENTS, ENTITIES, LPD, NONSGML, NOTATION, SD, SHORTREF, SUBDOC, SYNTAX, TEXT }; enum OwnerType { ISO, registered, unregistered }; PublicId(); Boolean getOwnerType(OwnerType &) const; Boolean getOwner(StringC &) const; Boolean getTextClass(TextClass &) const; Boolean getUnavailable(Boolean &) const; Boolean getDescription(StringC &) const; Boolean getLanguage(StringC &) const; Boolean getDesignatingSequence(StringC &) const; Boolean getDisplayVersion(StringC &) const; // If it's not a valid formal public identifier, return 0 // and set error, otherwise return 1. // charset describes the character set to use for parsing the // id. Boolean init(Text &, const CharsetInfo &, Char space, const MessageType1 *&error); const StringC &string() const; const Text &text() const; private: static Boolean nextField(Char solidus, const Char *&next, const Char *lim, const Char *&fieldStart, size_t &fieldLength); static Boolean lookupTextClass(const StringC &, const CharsetInfo &, TextClass &); static const char *const textClasses[]; PackedBoolean formal_; OwnerType ownerType_; StringC owner_; TextClass textClass_; PackedBoolean unavailable_; StringC description_; StringC languageOrDesignatingSequence_; PackedBoolean haveDisplayVersion_; StringC displayVersion_; Text text_; }; class SP_API ExternalId { public: ExternalId(); const StringC *systemIdString() const; const StringC *publicIdString() const; const StringC &effectiveSystemId() const; const Text *systemIdText() const; const Text *publicIdText() const; const PublicId *publicId() const; void setSystem(Text &); void setEffectiveSystem(StringC &); // If it's not a valid formal public identifier, return 0 // and set error, otherwise return 1. // charset describes the character set to use for parsing the // id. Boolean setPublic(Text &, const CharsetInfo &, Char space, const MessageType1 *&error); void setLocation(const Location &); // location of keyword const Location &location() const; private: PackedBoolean haveSystem_; PackedBoolean havePublic_; Text system_; PublicId public_; Location loc_; StringC effectiveSystem_; }; inline const StringC &PublicId::string() const { return text_.string(); } inline const Text &PublicId::text() const { return text_; } inline const StringC *ExternalId::systemIdString() const { return haveSystem_ ? &system_.string() : 0; } inline const StringC *ExternalId::publicIdString() const { return havePublic_ ? &public_.string() : 0; } inline const Text *ExternalId::systemIdText() const { return haveSystem_ ? &system_ : 0; } inline const Text *ExternalId::publicIdText() const { return havePublic_ ? &public_.text() : 0; } inline const PublicId *ExternalId::publicId() const { return havePublic_ ? &public_ : 0; } inline const Location &ExternalId::location() const { return loc_; } inline const StringC &ExternalId::effectiveSystemId() const { return effectiveSystem_; } inline void ExternalId::setEffectiveSystem(StringC &str) { str.swap(effectiveSystem_); } #ifdef SP_NAMESPACE } #endif #endif /* not ExternalId_INCLUDED */ jade-1.2.1/include/Fixed2CodingSystem.h100444 764 764 743 6604607554 15451 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Fixed2CodingSystem_INCLUDED #define Fixed2CodingSystem_INCLUDED 1 #include "CodingSystem.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API Fixed2CodingSystem : public CodingSystem { public: Decoder *makeDecoder() const; Encoder *makeEncoder() const; unsigned fixedBytesPerChar() const; }; #ifdef SP_NAMESPACE } #endif #endif /* not Fixed2CodingSystem_INCLUDED */ jade-1.2.1/include/GenericEventHandler.h100444 764 764 7425 6604607554 15677 0ustar jjcjjc// Copyright (c) 1995, 1996 James Clark // See the file COPYING for copying permission. #ifndef GenericEventHandler_INCLUDED #define GenericEventHandler_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif // Must include Boolean.h before SGMLApplication.h. #include "Boolean.h" #include "SGMLApplication.h" #include "Event.h" #include "MessageReporter.h" #include "ErrorCountEventHandler.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API GenericEventHandler : public ErrorCountEventHandler { public: GenericEventHandler(SGMLApplication &, bool generalEntities); ~GenericEventHandler(); void message(MessageEvent *); void appinfo(AppinfoEvent *); void startDtd(StartDtdEvent *); void endDtd(EndDtdEvent *); void endProlog(EndPrologEvent *); void entityDefaulted(EntityDefaultedEvent *); void startElement(StartElementEvent *); void endElement(EndElementEvent *); void data(DataEvent *); void pi(PiEvent *); void sdataEntity(SdataEntityEvent *); void externalDataEntity(ExternalDataEntityEvent *); void subdocEntity(SubdocEntityEvent *); void nonSgmlChar(NonSgmlCharEvent *); void commentDecl(CommentDeclEvent *); void ignoredChars(IgnoredCharsEvent *); void markedSectionStart(MarkedSectionStartEvent *); void markedSectionEnd(MarkedSectionEndEvent *); void *allocate(size_t); void freeAll(); void freeAll1(); struct Block { Block *next; char *mem; size_t size; }; static void setString(SGMLApplication::CharString &, const StringC &); static void clearString(SGMLApplication::CharString &); virtual void reportMessage(const Message &msg, StringC &) = 0; private: GenericEventHandler(const GenericEventHandler &); // undefined void operator=(const GenericEventHandler &); // undefined void setLocation(SGMLApplication::Position &, const Location &); void setLocation1(SGMLApplication::Position &, const Location &); void setAttributes(const SGMLApplication::Attribute *&attributes, const AttributeList &attributeList); void setExternalId(SGMLApplication::ExternalId &to, const ExternalId &from); void setEntity(SGMLApplication::Entity &to, const Entity &from); void setNotation(SGMLApplication::Notation &, const Notation ¬ation); static void clearNotation(SGMLApplication::Notation &); static void clearExternalId(SGMLApplication::ExternalId &); ConstPtr lastOrigin_; SGMLApplication::OpenEntityPtr openEntityPtr_; size_t firstBlockUsed_; size_t firstBlockSpare_; Block *freeBlocks_; Block *allocBlocks_; bool generalEntities_; SGMLApplication *app_; }; class SP_API MsgGenericEventHandler : public GenericEventHandler { public: MsgGenericEventHandler(SGMLApplication &, bool generalEntities, MessageReporter &reporter, const bool *messagesInhibitedPtr); void reportMessage(const Message &msg, StringC &); private: MsgGenericEventHandler(const MsgGenericEventHandler &); // undefined void operator=(const MsgGenericEventHandler &); // undefined struct WrapReporter { WrapReporter(MessageReporter *r) : reporter(r), origStream(0) { origStream = reporter->releaseMessageStream(); reporter->setMessageStream(&strStream); } ~WrapReporter() { if (origStream) { reporter->releaseMessageStream(); reporter->setMessageStream(origStream); } } MessageReporter *reporter; OutputCharStream *origStream; StrOutputCharStream strStream; }; const bool *messagesInhibitedPtr_; MessageReporter *reporter_; }; inline void GenericEventHandler::setString(SGMLApplication::CharString &to, const StringC &from) { to.ptr = from.data(); to.len = from.size(); } inline void GenericEventHandler::clearString(SGMLApplication::CharString &to) { to.len = 0; } #ifdef SP_NAMESPACE } #endif #endif /* not GenericEventHandler_INCLUDED */ jade-1.2.1/include/Hash.h100444 764 764 601 6604607554 12653 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Hash_INCLUDED #define Hash_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "StringC.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API Hash { public: static unsigned long hash(const StringC &); }; #ifdef SP_NAMESPACE } #endif #endif /* not Hash_INCLUDED */ jade-1.2.1/include/HashTable.cxx100444 764 764 1570 6606574406 14225 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef HashTable_DEF_INCLUDED #define HashTable_DEF_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template void HashTable::insert(const K &key, const V &value, Boolean replace) { HashTableItem *newItem = new HashTableItem(key, value); HashTableItem *tem = (HashTableItem *)table_.insert(newItem); if (tem) { delete newItem; if (replace) { tem->key = key; tem->value = value; } } } template HashTableItem::HashTableItem(const K &k, const V &v) : HashTableItemBase(k), value(v) { } template HashTableItemBase *HashTableItem::copy() const { return new HashTableItem(*this); } #ifdef SP_NAMESPACE } #endif #endif /* not HashTable_DEF_INCLUDED */ jade-1.2.1/include/HashTable.h100444 764 764 3053 6606574406 13650 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef HashTable_INCLUDED #define HashTable_INCLUDED 1 #include #include "OwnerTable.h" #include "Hash.h" #include "Boolean.h" #include "HashTableItemBase.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class HashTableItem : public HashTableItemBase { public: HashTableItem(const K &k, const V &v); HashTableItemBase *copy() const; V value; }; template class HashTableIter; template class HashTable { public: HashTable() { } void insert(const K &key, const V &value, Boolean replace = 1); const V *lookup(const K &key) const { HashTableItem *tem = (HashTableItem *)table_.lookup(key); return tem ? &tem->value : 0; } size_t count() const { return table_.count(); } private: CopyOwnerTable, K, Hash, HashTableKeyFunction > table_; friend class HashTableIter; }; template class HashTableIter { public: HashTableIter(const HashTable &table) : iter_(table.table_) { } Boolean next(const K *&key, const V *&value) { HashTableItem *p = (HashTableItem *)iter_.next(); if (p) { key = &p->key; value = &p->value; return 1; } else return 0; } private: OwnerTableIter, K, Hash, HashTableKeyFunction > iter_; }; #ifdef SP_NAMESPACE } #endif #endif /* not HashTable_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "HashTable.cxx" #endif jade-1.2.1/include/HashTableItemBase.cxx100444 764 764 676 6606574406 15625 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef HashTableItemBase_DEF_INCLUDED #define HashTableItemBase_DEF_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template HashTableItemBase::~HashTableItemBase() { } template HashTableItemBase::HashTableItemBase(const K &k) : key(k) { } #ifdef SP_NAMESPACE } #endif #endif /* not HashTableItemBase_DEF_INCLUDED */ jade-1.2.1/include/HashTableItemBase.h100444 764 764 1434 6606574406 15263 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef HashTableItemBase_INCLUDED #define HashTableItemBase_INCLUDED 1 // All hash tables with the same type of key share object code. // The cost of this is a virtual dtor in HashTableItemBase. #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class HashTableItemBase { public: HashTableItemBase(const K &k); virtual ~HashTableItemBase(); virtual HashTableItemBase *copy() const = 0; K key; }; template struct HashTableKeyFunction { static inline const K &key(const HashTableItemBase &obj) { return obj.key; } }; #ifdef SP_NAMESPACE } #endif #endif /* not HashTableItemBase_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "HashTableItemBase.cxx" #endif jade-1.2.1/include/IList.h100444 764 764 1665 6606574406 13050 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef IList_INCLUDED #define IList_INCLUDED 1 #include "IListBase.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class IListIter; // This owns the objects that are put in it. template class IList : private IListBase { public: IList() { } IList(T *p) : IListBase(p) { } ~IList() { clear(); } void append(T *p) { IListBase::append(p); } void insert(T *p) { IListBase::insert(p); } void remove(T *p) { IListBase::remove(p); } void swap(IList &list) { IListBase::swap(list); } T *head() const { return (T *)IListBase::head(); } T *get() { return (T *)IListBase::get(); } IListBase::clear; IListBase::empty; friend class IListIter; private: IList(const IList &); // undefined IList &operator=(const IList &); // undefined }; #ifdef SP_NAMESPACE } #endif #endif /* not IList_INCLUDED */ jade-1.2.1/include/IListBase.h100444 764 764 2127 6606574406 13635 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef IListBase_INCLUDED #define IListBase_INCLUDED 1 #include "Link.h" #include "Boolean.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API IListBase { public: IListBase(); IListBase(Link *); void append(Link *); void insert(Link *); Link *head() const; Boolean empty() const; Link *get(); void remove(Link *); void swap(IListBase &); void clear(); private: Link *head_; friend class IListIterBase; }; inline IListBase::IListBase() : head_(0) { } inline IListBase::IListBase(Link *head) : head_(head) { } inline void IListBase::insert(Link *p) { p->next_ = head_; head_ = p; } inline Link *IListBase::head() const { return head_; } inline Boolean IListBase::empty() const { return head_ == 0; } inline Link *IListBase::get() { Link *tem = head_; head_ = head_->next_; return tem; } inline void IListBase::swap(IListBase &list) { Link *tem = head_; head_ = list.head_; list.head_ = tem; } #ifdef SP_NAMESPACE } #endif #endif /* not IListBase_INCLUDED */ jade-1.2.1/include/IListIter.h100444 764 764 1036 6606574406 13664 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef IListIter_INCLUDED #define IListIter_INCLUDED 1 #include "IListIterBase.h" #include "IList.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class IListIter : private IListIterBase { public: IListIter(const IList &list) : IListIterBase(list) { } T *cur() const { return (T *)IListIterBase::cur(); } IListIterBase::next; IListIterBase::done; }; #ifdef SP_NAMESPACE } #endif #endif /* not IListIter_INCLUDED */ jade-1.2.1/include/IListIterBase.h100444 764 764 1325 6606574406 14460 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef IListIterBase_INCLUDED #define IListIterBase_INCLUDED 1 #include "Link.h" #include "IListBase.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API IListIterBase { public: IListIterBase(const IListBase &); int done() const; Link *cur() const; void next(); private: Link *p_; }; inline IListIterBase::IListIterBase(const IListBase &list) : p_(list.head_) { } inline int IListIterBase::done() const { return p_ == 0; } inline Link *IListIterBase::cur() const { return p_; } inline void IListIterBase::next() { p_ = p_->next_; } #ifdef SP_NAMESPACE } #endif #endif /* not IListIterBase_INCLUDED */ jade-1.2.1/include/IQueue.cxx100444 764 764 532 6606574406 13544 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef IQueue_DEF_INCLUDED #define IQueue_DEF_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template void IQueue::clear() { while (!empty()) delete get(); } #ifdef SP_NAMESPACE } #endif #endif /* not IQueue_DEF_INCLUDED */ jade-1.2.1/include/IQueue.h100444 764 764 2314 6606574406 13211 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef IQueue_INCLUDED #define IQueue_INCLUDED 1 #include "Boolean.h" #include "Link.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class IQueueBase { public: IQueueBase() : last_(0) { } ~IQueueBase() { } Boolean empty() const { return last_ == 0; } Link *get() { Link *tem = last_->next_; if (tem == last_) last_ = 0; else last_->next_ = tem->next_; return tem; } void append(Link *p) { if (last_) { p->next_ = last_->next_; last_ = last_->next_ = p; } else last_ = p->next_ = p; } void swap(IQueueBase &with) { Link *tem = last_; last_ = with.last_; with.last_ = tem; } private: Link *last_; }; template class IQueue : private IQueueBase { public: IQueue() { } ~IQueue() { clear(); } void clear(); T *get() { return (T *)IQueueBase::get(); } void append(T *p) { IQueueBase::append(p); } Boolean empty() const { return IQueueBase::empty(); } void swap(IQueue &to) { IQueueBase::swap(to); } }; #ifdef SP_NAMESPACE } #endif #endif /* not IQueue_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "IQueue.cxx" #endif jade-1.2.1/include/ISet.cxx100444 764 764 4730 6606574406 13237 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef ISet_DEF_INCLUDED #define ISet_DEF_INCLUDED 1 #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template ISet::ISet() { } template ISet::~ISet() { } template ISet::ISet(const T *v, size_t n) { for (size_t i = 0; i < n; i++) add(v[i]); } template Boolean ISet::contains(T x) const { for (size_t i = 0; i < r_.size(); i++) if (r_[i].max >= x) return r_[i].min <= x ? 1 : 0; return 0; } template void ISet::addRange(T min, T max) { size_t i; if (min == 0) i = 0; else { for (i = r_.size(); i > 0 && min - 1 <= r_[i - 1].max; i--) ; } // r_[i - 1].max < min - 1 <= r_[i].max if (i < r_.size() && (r_[i].min == 0 || max >= r_[i].min - 1)) { // we can coelesce if (min < r_[i].min) r_[i].min = min; if (max > r_[i].max) { r_[i].max = max; size_t j; for (j = i + 1; j < r_.size() && r_[i].max >= r_[j].min - 1; j++) r_[i].max = r_[j].max; // get rid of i + 1 ... j - 1 if (j > i + 1) { for (size_t k = j; k < r_.size(); k++) r_[k - (j - i - 1)] = r_[k]; r_.resize(r_.size() - (j - i - 1)); } } } else { // r_[i - 1].max < min - 1 // max + 1 < r_[i].min r_.resize(r_.size() + 1); for (size_t j = r_.size() - 1; j > i; j--) r_[j] = r_[j - 1]; r_[i].max = max; r_[i].min = min; } } template void ISet::remove(T c) { for (size_t i = 0; i < r_.size(); i++) if (r_[i].max >= c) { if (r_[i].min <= c) { if (r_[i].min == r_[i].max) { while (++i < r_.size()) r_[i - 1] = r_[i]; r_.resize(r_.size() - 1); } else if (c == r_[i].min) r_[i].min += 1; else if (c == r_[i].max) r_[i].max -= 1; else { r_.resize(r_.size() + 1); // split the range // subtracting 2 is safe since we know that the length is >= 2 for (size_t j = r_.size() - 2; j > i; j--) r_[j + 1] = r_[j]; r_[i + 1].max = r_[i].max; r_[i + 1].min = c + 1; r_[i].max = c - 1; } } break; } } template void ISet::check() { for (size_t i = 0; i < r_.size(); i++) { if (r_[i].min > r_[i].max) abort(); // adjacent ranges must be coalesced if (i > 0 && r_[i].min - 1 <= r_[i - 1].max) abort(); } } template void ISet::clear() { r_.resize(0); } #ifdef SP_NAMESPACE } #endif #endif /* not ISet_DEF_INCLUDED */ jade-1.2.1/include/ISet.h100444 764 764 1772 6606574406 12667 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef ISet_INCLUDED #define ISet_INCLUDED #include #include "Vector.h" #include "Boolean.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class ISetIter; template struct ISetRange { T min; T max; }; template class ISet { public: ISet(); ISet(const T *, size_t); ~ISet(); Boolean contains(T) const; void remove(T); void add(T x) { addRange(x, x); } void addRange(T, T); #if 0 void add(const ISet &); #endif void check(); void operator+=(T x) { addRange(x, x); } void clear(); Boolean isSingleton() const { return r_.size() == 1 && r_[0].min == r_[0].max; } Boolean isEmpty() const { return r_.size() == 0; } void swap(ISet &x) { r_.swap(x.r_); } friend class ISetIter; private: Vector > r_; }; #ifdef SP_NAMESPACE } #endif #endif /* not ISet_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "ISet.cxx" #endif jade-1.2.1/include/ISetIter.h100444 764 764 1233 6606574406 13503 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef ISetIter_INCLUDED #define ISetIter_INCLUDED #include #include "ISet.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class ISetIter { public: ISetIter(const ISet &s) : p_(&s), i_(0) { } // min and max are not changed if 0 is returned. int next(T &min, T &max) { if (i_ < p_->r_.size()) { min = p_->r_[i_].min; max = p_->r_[i_].max; i_++; return 1; } else return 0; } private: const ISet *p_; size_t i_; }; #ifdef SP_NAMESPACE } #endif #endif /* ISetIter_INCLUDED */ jade-1.2.1/include/IdentityCodingSystem.h100444 764 764 1007 6606574406 16134 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef IdentityCodingSystem_INCLUDED #define IdentityCodingSystem_INCLUDED 1 #include "CodingSystem.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API IdentityCodingSystem : public CodingSystem { public: IdentityCodingSystem(); Decoder *makeDecoder() const; Encoder *makeEncoder() const; Boolean isIdentity() const; }; #ifdef SP_NAMESPACE } #endif #endif /* not IdentityCodingSystem_INCLUDED */ jade-1.2.1/include/InputSource.h100444 764 764 12475 6606574406 14325 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef InputSource_INCLUDED #define InputSource_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "Link.h" #include "Ptr.h" #include "Location.h" #include "XcharMap.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Messenger; class NamedCharRef; class CharsetInfo; class SP_API InputSource : public Link { public: enum { eE = -1 }; // end of entity signal virtual ~InputSource(); Xchar get(Messenger &); virtual void pushCharRef(Char ch, const NamedCharRef &) = 0; const Location ¤tLocation() const; const Char *currentTokenStart() const; size_t currentTokenLength() const; const Char *currentTokenEnd() const; Index nextIndex() const; // Discard all but the last character of the current token. void discardInitial(); void startToken(); void startTokenNoMulticode(); void endToken(size_t length); Xchar tokenChar(Messenger &); Xchar tokenCharInBuffer(Messenger &); void ungetToken(); void setMarkupScanTable(const XcharMap &); Boolean scanSuppress() const; void extendToBufferEnd(); virtual void willNotRewind(); virtual Boolean rewind(Messenger &) = 0; Boolean accessError() const; virtual void setDocCharset(const CharsetInfo &docCharset, const CharsetInfo &emCharset); virtual void willNotSetDocCharset(); protected: InputSource(InputSourceOrigin *origin, const Char *start, const Char *end); void reset(const Char *start, const Char *end); InputSourceOrigin *inputSourceOrigin(); void noteCharRef(Index replacementIndex, const NamedCharRef &); const Char *cur(); const Char *start(); const Char *end(); Index startIndex(); void changeBuffer(const Char *newBase, const Char *oldBase); void advanceEnd(const Char *newEnd); void moveLeft(); void moveStart(const Char *newStart); Char nextChar(); void setAccessError(); private: InputSource(const InputSource &); // undefined void operator=(const InputSource &); // undefined virtual Xchar fill(Messenger &) = 0; void advanceStart(const Char *to); void advanceStartMulticode(const Char *to); const Char *cur_; const Char *start_; const Char *end_; Location startLocation_; Ptr origin_; Boolean accessError_; Boolean scanSuppress_; Boolean scanSuppressSingle_; Index scanSuppressIndex_; Boolean multicode_; XcharMap markupScanTable_; }; inline void InputSource::advanceStart(const Char *to) { if (multicode_) advanceStartMulticode(to); else { startLocation_ += to - start_; start_ = to; } } inline Xchar InputSource::get(Messenger &mgr) { advanceStart(cur_); return cur_ < end_ ? *cur_++ : fill(mgr); } inline void InputSource::startTokenNoMulticode() { startLocation_ += cur_ - start_; start_ = cur_; } inline void InputSource::startToken() { advanceStart(cur_); } inline void InputSource::endToken(size_t length) { cur_ = start_ + length; } inline Xchar InputSource::tokenChar(Messenger &mgr) { return cur_ < end_ ? *cur_++ : fill(mgr); } inline Xchar InputSource::tokenCharInBuffer(Messenger &mgr) { return cur_ < end_ ? (Xchar)*cur_++ : eE; } inline void InputSource::extendToBufferEnd() { cur_ = end_; } inline const Char *InputSource::cur() { return cur_; } inline const Char *InputSource::start() { return start_; } inline const Char *InputSource::end() { return end_; } inline void InputSource::changeBuffer(const Char *newBase, const Char *oldBase) { cur_ = newBase + (cur_ - oldBase); start_ = newBase + (start_ - oldBase); end_ = newBase + (end_ - oldBase); } inline void InputSource::moveStart(const Char *newStart) { cur_ = newStart + (cur_ - start_); end_ = newStart + (end_ - start_); start_ = newStart; } inline void InputSource::advanceEnd(const Char *newEnd) { end_ = newEnd; } inline Char InputSource::nextChar() { return *cur_++; } inline Index InputSource::startIndex() { return startLocation_.index(); } inline void InputSource::moveLeft() { start_--; cur_--; } inline void InputSource::noteCharRef(Index replacementIndex, const NamedCharRef &ref) { origin_->noteCharRef(replacementIndex, ref); } inline const Location &InputSource::currentLocation() const { return startLocation_; } inline const Char *InputSource::currentTokenStart() const { return start_; } inline size_t InputSource::currentTokenLength() const { return cur_ - start_; } inline Index InputSource::nextIndex() const { return startLocation_.index() + (cur_ - start_); } inline const Char *InputSource::currentTokenEnd() const { return cur_; } inline void InputSource::discardInitial() { advanceStart(cur_ - 1); } inline void InputSource::ungetToken() { cur_ = start_; } inline void InputSource::setMarkupScanTable(const XcharMap &table) { markupScanTable_ = table; multicode_ = 1; } inline Boolean InputSource::scanSuppress() const { return scanSuppress_ && (!scanSuppressSingle_ || startLocation_.index() == scanSuppressIndex_); } inline InputSourceOrigin *InputSource::inputSourceOrigin() { return origin_.pointer(); } inline void InputSource::setAccessError() { accessError_ = 1; } inline Boolean InputSource::accessError() const { return accessError_; } #ifdef SP_NAMESPACE } #endif #endif /* not InputSource_INCLUDED */ jade-1.2.1/include/InternalInputSource.h100444 764 764 2364 6606574406 15776 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef InternalInputSource_INCLUDED #define InternalInputSource_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include #include "InputSource.h" #include "Allocator.h" #include "StringC.h" #include "types.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class InputSourceOrigin; class Messenger; class NamedCharRef; class SP_API InternalInputSource : public InputSource { public: void *operator new(size_t sz, Allocator &alloc) { return alloc.alloc(sz); } void *operator new(size_t sz) { return Allocator::allocSimple(sz); } void operator delete(void *p) { Allocator::free(p); } #ifdef SP_HAVE_PLACEMENT_OPERATOR_DELETE void operator delete(void *p, Allocator &) { Allocator::free(p); } #endif InternalInputSource(const StringC &, InputSourceOrigin *); Xchar fill(Messenger &); void pushCharRef(Char ch, const NamedCharRef &); Boolean rewind(Messenger &); ~InternalInputSource(); private: InternalInputSource(const InternalInputSource &); // undefined void operator=(const InternalInputSource &); // undefined Char *buf_; const StringC *contents_; }; #ifdef SP_NAMESPACE } #endif #endif /* not InternalInputSource_INCLUDED */ jade-1.2.1/include/Link.h100444 764 764 774 6606574406 12701 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Link_INCLUDED #define Link_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API Link { public: Link(); Link(Link *); virtual ~Link(); private: Link *next_; friend class IListBase; friend class IListIterBase; friend class IQueueBase; }; inline Link::Link() : next_(0) { } inline Link::Link(Link *next) : next_(next) { } #ifdef SP_NAMESPACE } #endif #endif /* not Link_INCLUDED */ jade-1.2.1/include/LinkProcess.h100444 764 764 3615 6606574406 14255 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef LinkProcess_INCLUDED #define LinkProcess_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Lpd.h" #include "IList.h" #include "Link.h" #include "Vector.h" #include "Vector.h" #include "Ptr.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Messenger; struct SP_API LinkProcessOpenElement : public Link { LinkProcessOpenElement(const LinkSet *current, const SourceLinkRule &); LinkProcessOpenElement(const LinkSet *current); const LinkSet *current; const LinkSet *restore; const LinkSet *post; Boolean postRestore; }; class SP_API LinkProcess { public: LinkProcess(); void init(const ConstPtr &lpd); Boolean startElement(const ElementType *, const AttributeList &attributes, const Location &location, Messenger &, const AttributeList *&linkAttributes, const ResultElementSpec *&resultElementSpec); void endElement(); void uselink(const LinkSet *linkSet, Boolean restore, const Lpd *); virtual Boolean selectLinkRule(const Vector &, const Location &location, size_t &selected); size_t nImpliedLinkRules() const; const ResultElementSpec &impliedLinkRule(size_t) const; const StringC &name() const; Boolean isExplicit() const; void clear(); void swap(LinkProcess &); private: LinkProcess(const LinkProcess &); // undefined void operator=(const LinkProcess &); // undefined IList open_; ConstPtr lpd_; Vector > activeLpds_; Vector linkAttributes_; }; inline const StringC &LinkProcess::name() const { return lpd_->name(); } inline Boolean LinkProcess::isExplicit() const { return lpd_->type() == Lpd::explicitLink; } #ifdef SP_NAMESPACE } #endif #endif /* not LinkProcess_INCLUDED */ jade-1.2.1/include/List.cxx100444 764 764 1204 6606574406 13277 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef List_DEF_INCLUDED #define List_DEF_INCLUDED 1 #include "IListIter.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template void List::remove(const T &value) { for (IListIter > iter(list_); !iter.done(); iter.next()) if (iter.cur()->value == value) { list_.remove(iter.cur()); delete iter.cur(); break; } } template T List::get() { ListItem *p = list_.get(); T temp(p->value); delete p; return temp; } #ifdef SP_NAMESPACE } #endif #endif /* not List_DEF_INCLUDED */ jade-1.2.1/include/List.h100444 764 764 1712 6606574406 12730 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef List_INCLUDED #define List_INCLUDED 1 #include "IList.h" #include "Link.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class ListItem : public Link { public: ListItem(const T &v) : value(v) { } T value; }; template class ListIter; template class List { public: List() { } void append(const T &item) { list_.append(new ListItem(item)); } void insert(const T &item) { list_.insert(new ListItem(item)); } const T &head() const { return list_.head()->value; } void remove(const T &); T get(); int empty() const { return list_.empty(); } friend class ListIter; private: List(const List &); // undefined void operator=(const List &); // undefined IList > list_; }; #ifdef SP_NAMESPACE } #endif #endif /* not List_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "List.cxx" #endif jade-1.2.1/include/ListIter.h100444 764 764 1075 6606574406 13556 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef ListIter_INCLUDED #define ListIter_INCLUDED 1 #include "List.h" #include "IListIter.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class ListIter { public: ListIter(const List &list) : iter_(list.list_) { } const T &cur() const { return iter_.cur()->value; } int done() const { return iter_.done(); } void next() { iter_.next(); } private: IListIter > iter_; }; #ifdef SP_NAMESPACE } #endif #endif /* not ListIter_INCLUDED */ jade-1.2.1/include/LiteralStorage.h100444 764 764 1645 6606574406 14743 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef LiteralStorage_INCLUDED #define LiteralStorage_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "StorageManager.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API LiteralStorageManager : public StorageManager { public: LiteralStorageManager(const char *type); StorageObject *makeStorageObject(const StringC &id, const StringC &, Boolean, Boolean mayRewind, Messenger &, StringC &found); const InputCodingSystem *requiredCodingSystem() const; Boolean requiresCr() const; const char *type() const; Boolean inheritable() const; private: LiteralStorageManager(const LiteralStorageManager &); // undefined void operator=(const LiteralStorageManager &); // undefined const char *type_; }; #ifdef SP_NAMESPACE } #endif #endif /* not LiteralStorage_INCLUDED */ jade-1.2.1/include/Location.h100444 764 764 11477 6606574406 13616 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Location_INCLUDED #define Location_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "Boolean.h" #include "Ptr.h" #include "Resource.h" #include "Boolean.h" #include "Vector.h" #include "Owner.h" #include "StringC.h" #include "rtti.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class ExternalInfo; class EntityOrigin; class InputSourceOrigin; class Entity; class EntityDecl; class Location; class Markup; class Text; class NamedCharRef; class SP_API Origin : public Resource { public: virtual ~Origin(); virtual const EntityOrigin *asEntityOrigin() const; virtual const InputSourceOrigin *asInputSourceOrigin() const; virtual const Location &parent() const = 0; virtual Index refLength() const; virtual Boolean origChars(const Char *&) const; virtual Boolean inBracketedTextOpenDelim() const; virtual Boolean inBracketedTextCloseDelim() const; virtual Boolean isNumericCharRef(const Markup *&markup) const; virtual Boolean isNamedCharRef(Index ind, NamedCharRef &ref) const; virtual const EntityDecl *entityDecl() const; virtual Boolean defLocation(Offset off, const Origin *&, Index &) const; virtual const Markup *markup() const; virtual const Entity *entity() const; virtual const ExternalInfo *externalInfo() const; virtual Offset startOffset(Index ind) const; const StringC *entityName() const; }; class SP_API ProxyOrigin : public Origin { public: ProxyOrigin(const Origin *origin); const EntityOrigin *asEntityOrigin() const; const InputSourceOrigin *asInputSourceOrigin() const; const Location &parent() const; Index refLength() const; Boolean origChars(const Char *&) const; Boolean inBracketedTextOpenDelim() const; Boolean inBracketedTextCloseDelim() const; Boolean isNumericCharRef(const Markup *&markup) const; Boolean isNamedCharRef(Index ind, NamedCharRef &ref) const; const EntityDecl *entityDecl() const; Boolean defLocation(Offset off, const Origin *&, Index &) const; const Markup *markup() const; const Entity *entity() const; const ExternalInfo *externalInfo() const; Offset startOffset(Index ind) const; private: const Origin *origin_; }; class SP_API Location { public: Location(); Location(Origin *, Index); Location(ConstPtr, Index); void operator+=(Index i) { index_ += i; } void operator-=(Index i) { index_ -= i; } Index index() const { return index_; } const ConstPtr &origin() const { return origin_; } void clear() { origin_.clear(); } void swap(Location &to) { origin_.swap(to.origin_); Index tem = to.index_; to.index_ = index_; index_ = tem; } private: ConstPtr origin_; Index index_; }; class SP_API ExternalInfo { RTTI_CLASS public: virtual ~ExternalInfo(); }; class SP_API NamedCharRef { public: enum RefEndType { endOmitted, endRE, endRefc }; NamedCharRef(); NamedCharRef(Index, RefEndType, const StringC &); Index refStartIndex() const; RefEndType refEndType() const; const StringC &origName() const; void set(Index, RefEndType, const Char *, size_t); private: Index refStartIndex_; RefEndType refEndType_; StringC origName_; }; struct SP_API InputSourceOriginNamedCharRef { Index replacementIndex; size_t origNameOffset; Index refStartIndex; NamedCharRef::RefEndType refEndType; }; class SP_API InputSourceOrigin : public Origin { public: virtual void noteCharRef(Index replacementIndex, const NamedCharRef &) = 0; virtual void setExternalInfo(ExternalInfo *) = 0; virtual InputSourceOrigin *copy() const = 0; static InputSourceOrigin *make(); static InputSourceOrigin *make(const Location &refLocation); }; // a delimiter specified in bracketed text class SP_API BracketOrigin : public Origin { public: enum Position { open, close }; BracketOrigin(const Location &, Position); const Location &parent() const; Boolean inBracketedTextOpenDelim() const; Boolean inBracketedTextCloseDelim() const; private: Position pos_; Location loc_; }; class SP_API ReplacementOrigin : public Origin { public: ReplacementOrigin(const Location &, Char origChar); const Location &parent() const; Boolean origChars(const Char *&) const; private: Location loc_; Char origChar_; }; class SP_API MultiReplacementOrigin : public Origin { public: MultiReplacementOrigin(const Location &, StringC &origChars); const Location &parent() const; Boolean origChars(const Char *&) const; private: Location loc_; StringC origChars_; }; inline Index NamedCharRef::refStartIndex() const { return refStartIndex_; } inline NamedCharRef::RefEndType NamedCharRef::refEndType() const { return refEndType_; } inline const StringC &NamedCharRef::origName() const { return origName_; } #ifdef SP_NAMESPACE } #endif #endif /* not Location_INCLUDED */ jade-1.2.1/include/Lpd.h100444 764 764 22361 6606574406 12557 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Lpd_INCLUDED #define Lpd_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Attribute.h" #include "StringC.h" #include "Ptr.h" #include "Resource.h" #include "Boolean.h" #include "Named.h" #include "NamedTable.h" #include "Syntax.h" #include "Location.h" #include "Dtd.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class ElementType; struct SP_API ResultElementSpec { ResultElementSpec(); const ElementType *elementType; AttributeList attributeList; void swap(ResultElementSpec &); }; class SP_API Lpd : public Resource { public: enum Type { simpleLink, implicitLink, explicitLink }; Lpd(const StringC &, Type, const Location &, const Ptr &sourceDtd); virtual ~Lpd(); Type type() const; const Location &location() const; const Ptr &sourceDtd(); ConstPtr sourceDtd() const; Boolean active() const; void activate(); const ConstPtr > &namePointer() const; const StringC &name() const; private: Lpd(const Lpd &); // undefined void operator=(const Lpd &); // undefined Type type_; Location location_; Boolean active_; Ptr sourceDtd_; ConstPtr > name_; }; class SP_API SimpleLpd : public Lpd, public Attributed { public: SimpleLpd(const StringC &, const Location &, const Ptr &sourceDtd); private: SimpleLpd(const SimpleLpd &); // undefined void operator=(const SimpleLpd &); // undefined }; class LinkSet; // A link rule whose source element specification is not implied. class SP_API SourceLinkRule { public: SourceLinkRule(); void setLinkAttributes(AttributeList &); void setResult(const ElementType *, AttributeList &); void setUselink(const LinkSet *); void setPostlink(const LinkSet *); void setPostlinkRestore(); void swap(SourceLinkRule &); const AttributeList &attributes() const; const ResultElementSpec &resultElementSpec() const; const LinkSet *uselink() const; const LinkSet *postlink() const; Boolean postlinkRestore() const; private: const LinkSet *uselink_; const LinkSet *postlink_; Boolean postlinkRestore_; AttributeList linkAttributes_; ResultElementSpec resultElementSpec_; }; class SP_API SourceLinkRuleResource : public Resource, public SourceLinkRule { public: SourceLinkRuleResource(); }; class SP_API LinkSet : public Named { public: LinkSet(const StringC &, const Dtd *); void setDefined(); Boolean defined() const; void addImplied(const ElementType *, AttributeList &); size_t nLinkRules(const ElementType *) const; const SourceLinkRule &linkRule(const ElementType *, size_t) const; void addLinkRule(const ElementType *, const ConstPtr &); size_t nImpliedLinkRules() const; const ResultElementSpec &impliedLinkRule(size_t) const; Boolean impliedResultAttributes(const ElementType *, const AttributeList *&); private: LinkSet(const LinkSet &); // undefined void operator=(const LinkSet &); // undefined Boolean defined_; // indexed by typeIndex of source elements Vector > > linkRules_; Vector impliedSourceLinkRules_; }; class SP_API IdLinkRule : public SourceLinkRule { public: IdLinkRule(); Boolean isAssociatedWith(const ElementType *) const; void setAssocElementTypes(Vector &); void swap(IdLinkRule &); private: Vector assocElementTypes_; }; // A collection of link rules in a ID link set that are // assocated with the same name (unique identifier). class SP_API IdLinkRuleGroup : public Named { public: IdLinkRuleGroup(const StringC &); size_t nLinkRules() const; const IdLinkRule &linkRule(size_t) const; void addLinkRule(IdLinkRule &); private: IdLinkRuleGroup(const IdLinkRuleGroup &); // undefined void operator=(const IdLinkRuleGroup &); // undefined Vector linkRules_; }; // An implicit or explicit LPD. class SP_API ComplexLpd : public Lpd { public: typedef ConstNamedTableIter ConstLinkSetIter; ComplexLpd(const StringC &, Type, const Location &, const Syntax &syntax, const Ptr &sourceDtd, const Ptr &resultDtd); size_t allocAttributeDefinitionListIndex(); size_t nAttributeDefinitionList() const; LinkSet *initialLinkSet(); const LinkSet *initialLinkSet() const; const LinkSet *emptyLinkSet() const; const LinkSet *lookupLinkSet(const StringC &) const; const IdLinkRuleGroup *lookupIdLink(const StringC &) const; IdLinkRuleGroup *lookupCreateIdLink(const StringC &); void insertIdLink(IdLinkRuleGroup *); ConstLinkSetIter linkSetIter() const; Boolean hadIdLinkSet() const; void setHadIdLinkSet(); LinkSet *lookupLinkSet(const StringC &); LinkSet *insertLinkSet(LinkSet *); const Ptr &resultDtd(); ConstPtr resultDtd() const; const ConstPtr & attributeDef(const ElementType *) const; void setAttributeDef(const ElementType *, const ConstPtr &); private: ComplexLpd(const ComplexLpd &); // undefined void operator=(const ComplexLpd &); // undefined Ptr resultDtd_; Vector > linkAttributeDefs_; NamedTable linkSetTable_; LinkSet initialLinkSet_; LinkSet emptyLinkSet_; Boolean hadIdLinkSet_; NamedTable idLinkTable_; size_t nAttributeDefinitionList_; }; inline Lpd::Type Lpd::type() const { return type_; } inline const Location &Lpd::location() const { return location_; } inline Boolean Lpd::active() const { return active_; } inline void Lpd::activate() { active_ = 1; } inline ConstPtr Lpd::sourceDtd() const { return sourceDtd_; } inline const Ptr &Lpd::sourceDtd() { return sourceDtd_; } inline const ConstPtr > &Lpd::namePointer() const { return name_; } inline const StringC &Lpd::name() const { return *name_; } inline void SourceLinkRule::setLinkAttributes(AttributeList &attributes) { attributes.swap(linkAttributes_); } inline const AttributeList &SourceLinkRule::attributes() const { return linkAttributes_; } inline void SourceLinkRule::setResult(const ElementType *element, AttributeList &attributes) { resultElementSpec_.elementType = element; attributes.swap(resultElementSpec_.attributeList); } inline const ResultElementSpec &SourceLinkRule::resultElementSpec() const { return resultElementSpec_; } inline void SourceLinkRule::setUselink(const LinkSet *linkSet) { uselink_ = linkSet; } inline void SourceLinkRule::setPostlink(const LinkSet *linkSet) { postlink_ = linkSet; } inline void SourceLinkRule::setPostlinkRestore() { postlinkRestore_ = 1; } inline const LinkSet *SourceLinkRule::uselink() const { return uselink_; } inline const LinkSet *SourceLinkRule::postlink() const { return postlink_; } inline Boolean SourceLinkRule::postlinkRestore() const { return postlinkRestore_; } inline Boolean LinkSet::defined() const { return defined_; } inline void LinkSet::setDefined() { defined_ = 1; } inline const SourceLinkRule &LinkSet::linkRule(const ElementType *e, size_t i) const { return *linkRules_[e->index()][i]; } inline size_t LinkSet::nImpliedLinkRules() const { return impliedSourceLinkRules_.size(); } inline const ResultElementSpec &LinkSet::impliedLinkRule(size_t i) const { return impliedSourceLinkRules_[i]; } inline const Ptr &ComplexLpd::resultDtd() { return resultDtd_; } inline ConstPtr ComplexLpd::resultDtd() const { return resultDtd_; } inline LinkSet *ComplexLpd::initialLinkSet() { return &initialLinkSet_; } inline const LinkSet *ComplexLpd::initialLinkSet() const { return &initialLinkSet_; } inline const LinkSet *ComplexLpd::emptyLinkSet() const { return &emptyLinkSet_; } inline const LinkSet *ComplexLpd::lookupLinkSet(const StringC &name) const { return linkSetTable_.lookup(name); } inline LinkSet *ComplexLpd::lookupLinkSet(const StringC &name) { return linkSetTable_.lookup(name); } inline LinkSet *ComplexLpd::insertLinkSet(LinkSet *e) { return linkSetTable_.insert(e); } inline size_t ComplexLpd::nAttributeDefinitionList() const { return nAttributeDefinitionList_; } inline size_t ComplexLpd::allocAttributeDefinitionListIndex() { return nAttributeDefinitionList_++; } inline ComplexLpd::ConstLinkSetIter ComplexLpd::linkSetIter() const { // Avoid use of typedef to work around MSVC 2.0 bug. return ConstNamedTableIter(linkSetTable_); } inline const ConstPtr & ComplexLpd::attributeDef(const ElementType *e) const { return linkAttributeDefs_[e->index()]; } inline void ComplexLpd::setAttributeDef(const ElementType *e, const ConstPtr &attdef) { linkAttributeDefs_[e->index()] = attdef; } inline Boolean ComplexLpd::hadIdLinkSet() const { return hadIdLinkSet_; } inline void ComplexLpd::setHadIdLinkSet() { hadIdLinkSet_ = 1; } inline const IdLinkRuleGroup *ComplexLpd::lookupIdLink(const StringC &id) const { return idLinkTable_.lookup(id); } inline size_t IdLinkRuleGroup::nLinkRules() const { return linkRules_.size(); } inline const IdLinkRule &IdLinkRuleGroup::linkRule(size_t i) const { return linkRules_[i]; } #ifdef SP_NAMESPACE } #endif #endif /* not Lpd_INCLUDED */ jade-1.2.1/include/Markup.h100444 764 764 7761 6606574406 13266 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifndef Markup_INCLUDED #define Markup_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "StringC.h" #include "Syntax.h" #include "Sd.h" #include "Vector.h" #include "Text.h" #include "SdText.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class EntityOrigin; struct SP_API MarkupItem { MarkupItem(); MarkupItem(const MarkupItem &); ~MarkupItem(); void operator=(const MarkupItem &); unsigned char type; unsigned char index; union { size_t nChars; ConstPtr *origin; // type == entityStart Text *text; // type == literal SdText *sdText; // type == sdLiteral }; }; class InputSource; class SP_API Markup { public: enum Type { reservedName, sdReservedName, name, nameToken, attributeValue, number, comment, s, shortref, delimiter, refEndRe, entityStart, entityEnd, literal, sdLiteral }; Markup(); size_t size() const; void clear(); void resize(size_t); void addDelim(Syntax::DelimGeneral); void addReservedName(Syntax::ReservedName, const InputSource *); void addReservedName(Syntax::ReservedName, const StringC &); void addSdReservedName(Sd::ReservedName, const InputSource *); void addSdReservedName(Sd::ReservedName, const Char *, size_t); void addS(Char); void addS(const InputSource *); void addRefEndRe(); void addShortref(const InputSource *); void addCommentStart(); void addCommentChar(Char); void addName(const InputSource *); void addName(const Char *, size_t); void addNameToken(const InputSource *); void addNumber(const InputSource *); void addAttributeValue(const InputSource *); void addEntityStart(const Ptr &); void addEntityEnd(); void addLiteral(const Text &); void addSdLiteral(const SdText &); void changeToAttributeValue(size_t index); void changeToSdReservedName(size_t index, Sd::ReservedName); void swap(Markup &); private: StringC chars_; Vector items_; friend class MarkupIter; }; class Location; class SP_API MarkupIter { public: MarkupIter(const Markup &); Markup::Type type() const; Boolean valid() const; void advance(); // This updates a Location. void advance(Location &, const ConstPtr &); size_t index() const; const Char *charsPointer() const; size_t charsLength() const; const Text &text() const; const EntityOrigin *entityOrigin() const; // valid for type == entityStart const SdText &sdText() const; Syntax::DelimGeneral delimGeneral() const; Syntax::ReservedName reservedName() const; Sd::ReservedName sdReservedName() const; private: const Char *chars_; Vector::const_iterator items_; size_t nItems_; size_t index_; size_t charIndex_; }; inline void Markup::clear() { chars_.resize(0); items_.resize(0); } inline size_t Markup::size() const { return items_.size(); } inline Boolean MarkupIter::valid() const { return index_ < nItems_; } inline size_t MarkupIter::index() const { return index_; } inline Markup::Type MarkupIter::type() const { return Markup::Type(items_[index_].type); } inline const EntityOrigin *MarkupIter::entityOrigin() const { return (*items_[index_].origin)->asEntityOrigin(); } inline const Char *MarkupIter::charsPointer() const { return chars_ + charIndex_; } inline size_t MarkupIter::charsLength() const { return items_[index_].nChars; } inline const Text &MarkupIter::text() const { return *items_[index_].text; } inline const SdText &MarkupIter::sdText() const { return *items_[index_].sdText; } inline Syntax::DelimGeneral MarkupIter::delimGeneral() const { return Syntax::DelimGeneral(items_[index_].index); } inline Syntax::ReservedName MarkupIter::reservedName() const { return Syntax::ReservedName(items_[index_].index); } inline Sd::ReservedName MarkupIter::sdReservedName() const { return Sd::ReservedName(items_[index_].index); } #ifdef SP_NAMESPACE } #endif #endif /* not Markup_INCLUDED */ jade-1.2.1/include/Message.h100444 764 764 12732 6606574406 13425 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Message_INCLUDED #define Message_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include #include "Location.h" #include "Vector.h" #include "CopyOwner.h" #include "Boolean.h" #include "StringC.h" #include "MessageArg.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API MessageFragment { public: enum { libModule = 0, appModule = 1 }; MessageFragment(unsigned module, unsigned number, const char *text = 0); unsigned module() const; unsigned number() const; const char *text() const; private: unsigned short number_; unsigned char module_; protected: unsigned char spare_; private: #ifndef SP_NO_MESSAGE_TEXT const char *text_; #endif }; class SP_API MessageType : public MessageFragment { public: enum Severity { info, warning, quantityError, idrefError, error }; MessageType(Severity, unsigned module, unsigned number, const char *text = 0, const char *auxText = 0); Severity severity() const; MessageFragment auxFragment() const; Boolean isError() const; private: #ifndef SP_NO_MESSAGE_TEXT const char *auxText_; #endif }; class SP_API MessageType0 : public MessageType { public: MessageType0(Severity, unsigned module, unsigned number, const char *text = 0); }; class SP_API MessageType1 : public MessageType { public: MessageType1(Severity, unsigned module, unsigned number, const char *text = 0); }; class SP_API MessageType2 : public MessageType { public: MessageType2(Severity, unsigned module, unsigned number, const char *text = 0); }; class SP_API MessageType3 : public MessageType { public: MessageType3(Severity, unsigned module, unsigned number, const char *text = 0); }; class SP_API MessageType4 : public MessageType { public: MessageType4(Severity, unsigned module, unsigned number, const char *text = 0); }; class SP_API MessageType5 : public MessageType { public: MessageType5(Severity, unsigned module, unsigned number, const char *text = 0); }; class SP_API MessageType6 : public MessageType { public: MessageType6(Severity, unsigned module, unsigned number, const char *text = 0); }; class SP_API MessageType0L : public MessageType { public: MessageType0L(Severity, unsigned module, unsigned number, const char *text = 0, const char *auxText = 0); }; class SP_API MessageType1L : public MessageType { public: MessageType1L(Severity, unsigned module, unsigned number, const char *text = 0, const char *auxText = 0); }; class SP_API OpenElementInfo { public: OpenElementInfo(); PackedBoolean included; StringC gi; StringC matchType; unsigned matchIndex; }; class SP_API Message { public: Message(); Message(int nArgs); const MessageType *type; Location loc; Location auxLoc; Vector > args; Vector openElementInfo; void swap(Message &); Boolean isError() const; }; class SP_API Messenger { public: Messenger(); virtual ~Messenger(); void message(const MessageType0 &); void message(const MessageType1 &, const MessageArg &); void message(const MessageType2 &, const MessageArg &, const MessageArg &); void message(const MessageType3 &, const MessageArg &, const MessageArg &, const MessageArg &); void message(const MessageType4 &, const MessageArg &, const MessageArg &, const MessageArg &, const MessageArg &); void message(const MessageType5 &, const MessageArg &, const MessageArg &, const MessageArg &, const MessageArg &, const MessageArg &); void message(const MessageType6 &, const MessageArg &, const MessageArg &, const MessageArg &, const MessageArg &, const MessageArg &, const MessageArg &); void message(const MessageType0L &, const Location &); void message(const MessageType1L &, const MessageArg &, const Location &); void setNextLocation(const Location &); virtual void initMessage(Message &); virtual void dispatchMessage(const Message &) = 0; virtual void dispatchMessage(Message &); private: void doInitMessage(Message &); Boolean haveNextLocation_; Location nextLocation_; }; class SP_API ForwardingMessenger : public Messenger { public: ForwardingMessenger(Messenger &); void dispatchMessage(const Message &); void dispatchMessage(Message &); void initMessage(Message &); private: Messenger *to_; }; class SP_API ParentLocationMessenger : public ForwardingMessenger { public: ParentLocationMessenger(Messenger &); void initMessage(Message &); }; class SP_API NullMessenger : public Messenger { public: NullMessenger(); void dispatchMessage(const Message &); }; inline unsigned MessageFragment::module() const { return module_; } inline unsigned MessageFragment::number() const { return number_; } inline const char *MessageFragment::text() const { #ifdef SP_NO_MESSAGE_TEXT return 0; #else return text_; #endif } inline MessageType::Severity MessageType::severity() const { return Severity(spare_); } inline MessageFragment MessageType::auxFragment() const { return MessageFragment(module(), number() + 1, #ifdef SP_NO_MESSAGE_TEXT 0 #else auxText_ #endif ); } inline Boolean MessageType::isError() const { return severity() != info && severity() != warning; } inline Boolean Message::isError() const { return type->isError(); } #ifdef SP_NAMESPACE } #endif #endif /* not Message_INCLUDED */ jade-1.2.1/include/MessageArg.h100444 764 764 2347 6606574406 14040 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef MessageArg_INCLUDED #define MessageArg_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "StringC.h" #include "rtti.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class MessageBuilder; class SP_API MessageArg { public: MessageArg(); virtual ~MessageArg(); virtual MessageArg *copy() const = 0; virtual void append(MessageBuilder &) const = 0; }; class SP_API StringMessageArg : public MessageArg { public: StringMessageArg(const StringC &); MessageArg *copy() const; void append(MessageBuilder &) const; private: StringC s_; }; class SP_API NumberMessageArg : public MessageArg { public: NumberMessageArg(unsigned long); MessageArg *copy() const; void append(MessageBuilder &) const; private: unsigned long n_; }; class SP_API OrdinalMessageArg : public MessageArg { public: OrdinalMessageArg(unsigned long); MessageArg *copy() const; void append(MessageBuilder &) const; private: unsigned long n_; }; class SP_API OtherMessageArg : public MessageArg { RTTI_CLASS public: OtherMessageArg(); void append(MessageBuilder &) const; }; #ifdef SP_NAMESPACE } #endif #endif /* not MessageArg_INCLUDED */ jade-1.2.1/include/MessageBuilder.h100444 764 764 1237 6606574406 14712 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef MessageBuilder_INCLUDED #define MessageBuilder_INCLUDED 1 #include #include "types.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class OtherMessageArg; class MessageFragment; class SP_API MessageBuilder { public: virtual void appendNumber(unsigned long) = 0; virtual void appendOrdinal(unsigned long) = 0; virtual void appendChars(const Char *, size_t) = 0; virtual void appendOther(const OtherMessageArg *) = 0; virtual void appendFragment(const MessageFragment &) = 0; }; #ifdef SP_NAMESPACE } #endif #endif /* not MessageBuilder_INCLUDED */ jade-1.2.1/include/MessageEventHandler.h100444 764 764 1537 6604607556 15707 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef MessageEventHandler_INCLUDED #define MessageEventHandler_INCLUDED 1 #include "Event.h" #include "ErrorCountEventHandler.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class OutputCharStream; class SgmlParser; class SP_API MessageEventHandler : public ErrorCountEventHandler { public: // if parser is non-null then subdocs will be parsed automatically MessageEventHandler(Messenger *messenger, const SgmlParser *parser = 0); void message(MessageEvent *); void subdocEntity(SubdocEntityEvent *); Messenger *messenger() const; private: Messenger *messenger_; const SgmlParser *parser_; }; inline Messenger *MessageEventHandler::messenger() const { return messenger_; } #ifdef SP_NAMESPACE } #endif #endif /* not MessageEventHandler_INCLUDED */ jade-1.2.1/include/MessageFormatter.h100444 764 764 3124 6604607556 15265 0ustar jjcjjc// Copyright (c) 1994, 1997 James Clark // See the file COPYING for copying permission. #ifndef MessageFormatter_INCLUDED #define MessageFormatter_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "MessageBuilder.h" #include "Boolean.h" #include "Message.h" #include "Location.h" #include "StringC.h" #include "OutputCharStream.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API MessageFormatter { public: MessageFormatter(); void formatMessage(const MessageFragment &, const Vector > &args, OutputCharStream &); void formatOpenElements(const Vector &openElementInfo, OutputCharStream &os); virtual Boolean getMessageText(const MessageFragment &, StringC &) = 0; Boolean formatFragment(const MessageFragment &, OutputCharStream &); private: MessageFormatter(const MessageFormatter &); // undefined void operator=(const MessageFormatter &); // undefined class Builder : public MessageBuilder { public: Builder(MessageFormatter *formatter, OutputCharStream &os, bool b) : formatter_(formatter), os_(&os), argIsCompleteMessage_(b) { } void appendNumber(unsigned long); void appendOrdinal(unsigned long); void appendChars(const Char *, size_t); void appendOther(const OtherMessageArg *); void appendFragment(const MessageFragment &); private: OutputCharStream &os() { return *os_; } OutputCharStream *os_; MessageFormatter *formatter_; bool argIsCompleteMessage_; }; }; #ifdef SP_NAMESPACE } #endif #endif /* not MessageFormatter_INCLUDED */ jade-1.2.1/include/MessageReporter.h100444 764 764 3366 6604607556 15134 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef MessageReporter_INCLUDED #define MessageReporter_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "MessageFormatter.h" #include "Boolean.h" #include "OutputCharStream.h" #include "Message.h" #include "Location.h" #include "StringC.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API MessageReporter : public MessageFormatter, public Messenger { public: enum Option { openElements = 01, openEntities = 02, messageNumbers = 04 }; // The OutputCharStream will be deleted by the MessageReporter MessageReporter(OutputCharStream *); ~MessageReporter(); void setMessageStream(OutputCharStream *); OutputCharStream *releaseMessageStream(); void dispatchMessage(const Message &); virtual Boolean getMessageText(const MessageFragment &, StringC &); void addOption(Option); void setProgramName(const StringC &); private: MessageReporter(const MessageReporter &); // undefined void operator=(const MessageReporter &); // undefined const ExternalInfo *locationHeader(const Location &, Offset &off); const ExternalInfo *locationHeader(const Origin *, Index, Offset &off); void printLocation(const ExternalInfo *info, Offset off); OutputCharStream &os(); OutputCharStream *os_; unsigned options_; StringC programName_; }; inline OutputCharStream &MessageReporter::os() { return *os_; } inline void MessageReporter::setProgramName(const StringC &programName) { programName_ = programName; } inline OutputCharStream *MessageReporter::releaseMessageStream() { OutputCharStream *tem = os_; os_ = 0; return tem; } #ifdef SP_NAMESPACE } #endif #endif /* not MessageReporter_INCLUDED */ jade-1.2.1/include/MessageTable.h100444 764 764 1063 6604607556 14351 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef MessageTable_INCLUDED #define MessageTable_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Message.h" #include "Boolean.h" #include "StringC.h" #include "sptchar.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API MessageTable { public: static const MessageTable *instance(); virtual Boolean getText(const MessageFragment &, String &) const = 0; }; #ifdef SP_NAMESPACE } #endif #endif /* not MessageTable_INCLUDED */ jade-1.2.1/include/Mode.h100444 764 764 5112 6607321240 12662 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Mode_INCLUDED #define Mode_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif enum Mode { grpMode, // group alitMode, // attribute value literals starting with LIT alitaMode, // attribute value literals starting with LITA aliteMode, // attribute value literals inside entity talitMode, // tokenized attribute value literal talitaMode, taliteMode, mdMode, // markup declaration mdMinusMode, // markup declaration, also recognize minus mdPeroMode, // markup declaration, also recognize pero sdMode, comMode, // comment sdcomMode, // comment in an SGML declaration piMode, // processing instruction refMode, // reference imsMode, // ignored marked section cmsMode, // cdata marked section rcmsMode, // rcdata marked section // These modes are needed only for the prologue. proMode, // prologue dsMode, // declaration subset not in marked section // nor in entity dsiMode, // declaration subset in marked section or // in entity plitMode, // parameter literal starting with LIT plitaMode, // paramater literal starting with LITA pliteMode, // parameter literal inside entity sdplitMode, // parameter literal starting with LIT // in an SGML declaration sdplitaMode, // parameter literal starting with LIT // in an SGML declaration grpsufMode, // group suffix mlitMode, // minimum literal starting with LIT mlitaMode, // minimum literal starting with LITA asMode, // data/link/result attribute specification slitMode, // system id literal starting with LIT slitaMode, // system id literal starting with LITA sdslitMode, // system id literal starting with LIT // in an SGML declaration sdslitaMode, // system id literal starting with LITA // in an SGML declaration // These modes are needed only for the instance. cconMode, // CDATA content rcconMode, // RCDATA content cconnetMode, // CDATA content, recognize NET rcconnetMode, // RCDATA content, recognize NET rcconeMode, // RCDATA content inside entity tagMode, // start- or end-tag econMode, // element content mconMode, // mixed content econnetMode, // element content, recognize NET mconnetMode // mixed content, recognize NET }; const int nModes = mconnetMode + 1; const int minShortrefMode = econMode; #ifdef SP_NAMESPACE } #endif #endif /* not Mode_INCLUDED */ jade-1.2.1/include/NCVector.h100444 764 764 1754 6604607556 13507 0ustar jjcjjc#ifndef NCVector_INCLUDED #define NCVector_INCLUDED 1 #define Vector NCVector #define NC #ifdef SP_DEFINE_TEMPLATES #undef SP_DEFINE_TEMPLATES #ifdef Vector_INCLUDED #undef Vector_INCLUDED #include "Vector.h" #define Vector_INCLUDED 1 #else #include "Vector.h" #undef Vector_INCLUDED #endif #define SP_DEFINE_TEMPLATES 1 #else /* not SP_DEFINE_TEMPLATES */ #ifdef Vector_INCLUDED #undef Vector_INCLUDED #include "Vector.h" #define Vector_INCLUDED 1 #else #include "Vector.h" #undef Vector_INCLUDED #endif #endif /* not SP_DEFINE_TEMPLATES */ #undef Vector #undef NC #endif /* not NCVector_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #ifndef NCVector_DEF_INCLUDED #define NCVector_DEF_INCLUDED 1 #define Vector NCVector #define NC #ifdef Vector_DEF_INCLUDED #undef Vector_DEF_INCLUDED #include "Vector.cxx" #define Vector_DEF_INCLUDED 1 #else #include "Vector.cxx" #undef Vector_DEF_INCLUDED #endif #undef Vector #undef NC #endif /* not NCVector_DEF_INCLUDED */ #endif /* SP_DEFINE_TEMPLATES */ jade-1.2.1/include/NCVector.sed100444 764 764 171 6604607556 14003 0ustar jjcjjc1i\ // This file is automatically generated. Do not edit! s/Vector/NCVector/g s/^#ifdef NC$/#if 1/ s/^#ifndef NC$/#if 0/ jade-1.2.1/include/Named.h100444 764 764 1135 6604607556 13041 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Named_INCLUDED #define Named_INCLUDED 1 #include "StringC.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API Named { public: Named(const StringC &name) : name_(name) { } virtual ~Named() { } const StringC &name() const { return name_; } const StringC *namePointer() const { return &name_; } void setName(const StringC &name) { name_ = name; } void swap(Named &to) { name_.swap(to.name_); } private: StringC name_; }; #ifdef SP_NAMESPACE } #endif #endif /* not Named_INCLUDED */ jade-1.2.1/include/NamedResource.h100444 764 764 667 6604607556 14542 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef NamedResource_INCLUDED #define NamedResource_INCLUDED 1 #include "Named.h" #include "Resource.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API NamedResource : public Named, public Resource { public: NamedResource(const StringC &str) : Named(str) { } }; #ifdef SP_NAMESPACE } #endif #endif /* not NamedResource_INCLUDED */ jade-1.2.1/include/NamedResourceTable.h100444 764 764 4553 6604607556 15530 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef NamedResourceTable_INCLUDED #define NamedResourceTable_INCLUDED 1 #include "NamedResource.h" #include "PointerTable.h" #include "StringC.h" #include "Hash.h" #include "Ptr.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct NamedResourceKeyFunction { static inline const StringC &key(const NamedResource &p) { return p.name(); } }; template class NamedResourceTableIter; template class ConstNamedResourceTableIter; template class NamedResourceTable { #ifdef __lucid struct X { Ptr _X; // work around lcc bug }; #endif public: NamedResourceTable() { } Ptr insert(const Ptr &p, Boolean replace = 0) { return (T *)table_.insert((NamedResource *)p.pointer(), replace).pointer(); } Ptr lookup(const StringC &str) const { return (T *)table_.lookup(str).pointer(); } ConstPtr lookupConst(const StringC &str) const { return (T *)table_.lookup(str).pointer(); } const T *lookupTemp(const StringC &str) const { return (const T *)table_.lookup(str).pointer(); } Ptr remove(const StringC &str) { return (T *)table_.remove(str).pointer(); } size_t count() const { return table_.count(); } void clear() { table_.clear(); } void swap(NamedResourceTable &to) { table_.swap(to.table_); } private: PointerTable, StringC, Hash, NamedResourceKeyFunction> table_; friend class NamedResourceTableIter; friend class ConstNamedResourceTableIter; }; template class NamedResourceTableIter { public: NamedResourceTableIter(const NamedResourceTable &table) : iter_(table.table_) { } Ptr next() { return (T *)iter_.next().pointer(); } private: PointerTableIter, StringC, Hash, NamedResourceKeyFunction> iter_; }; template class ConstNamedResourceTableIter { public: ConstNamedResourceTableIter(const NamedResourceTable &table) : iter_(table.table_) { } ConstPtr next() { return (T *)iter_.next().pointer(); } const T *nextTemp() { return (const T *)iter_.next().pointer(); } private: PointerTableIter, StringC, Hash, NamedResourceKeyFunction> iter_; }; #ifdef SP_NAMESPACE } #endif #endif /* not NamedResourceTable_INCLUDED */ jade-1.2.1/include/NamedTable.h100444 764 764 3263 6604607556 14015 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef NamedTable_INCLUDED #define NamedTable_INCLUDED 1 #include "Hash.h" #include "StringC.h" #include "Named.h" #include "OwnerTable.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class NamedTableKeyFunction { public: static inline const StringC &key(const Named &obj) { return obj.name(); } }; template class NamedTableIter; template class ConstNamedTableIter; template class NamedTable { public: NamedTable() { } T *insert(T *p) { return (T *)table_.insert(p); } T *lookup(const StringC &str) const { return (T *)table_.lookup(str); } T *remove(const StringC &str) { return (T *)table_.remove(str); } size_t count() const { return table_.count(); } void clear() { table_.clear(); } void swap(NamedTable &to) { table_.swap(to.table_); } private: NamedTable(const NamedTable &); // undefined void operator=(const NamedTable &); // undefined OwnerTable table_; friend class NamedTableIter; friend class ConstNamedTableIter; }; template class NamedTableIter { public: NamedTableIter(const NamedTable &table) : iter_(table.table_) { } T *next() { return (T *)iter_.next(); } private: OwnerTableIter iter_; }; template class ConstNamedTableIter { public: ConstNamedTableIter(const NamedTable &table) : iter_(table.table_) { } const T *next() { return (T *)iter_.next(); } private: OwnerTableIter iter_; }; #ifdef SP_NAMESPACE } #endif #endif /* not NamedTable_INCLUDED */ jade-1.2.1/include/Notation.h100444 764 764 2367 6604607556 13620 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Notation_INCLUDED #define Notation_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Owner.h" #include "StringC.h" #include "NamedResource.h" #include "types.h" #include "Ptr.h" #include "ExternalId.h" #include "Boolean.h" #include "Attributed.h" #include "StringResource.h" #include "EntityDecl.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class ParserState; class SP_API Notation : public EntityDecl, public Attributed { public: Notation(const StringC &, const ConstPtr > &dtdName, Boolean dtdIsBase); void setExternalId(const ExternalId &, const Location &); const ExternalId &externalId() const; Boolean defined() const; void generateSystemId(ParserState &); const StringC *systemIdPointer() const; const StringC *publicIdPointer() const; private: Notation(const Notation &); // undefined void operator=(const Notation &); // undefined PackedBoolean defined_; ExternalId externalId_; }; inline const ExternalId &Notation::externalId() const { return externalId_; } inline Boolean Notation::defined() const { return defined_; } #ifdef SP_NAMESPACE } #endif #endif /* not Notation_INCLUDED */ jade-1.2.1/include/NotationStorage.h100444 764 764 1576 6604607556 15146 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifndef NotationStorage_INCLUDED #define NotationStorage_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "StorageManager.h" #include "CharsetInfo.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API NotationStorageManager : public StorageManager { public: NotationStorageManager(const char *type); StorageObject *makeStorageObject(const StringC &id, const StringC &baseId, Boolean search, Boolean mayRewind, Messenger &, StringC &foundId); const char *type() const; Boolean inheritable() const; private: NotationStorageManager(const NotationStorageManager &); // undefined void operator=(const NotationStorageManager &); // undefined const char *type_; }; #ifdef SP_NAMESPACE } #endif #endif /* not NotationStorage_INCLUDED */ jade-1.2.1/include/OpenElement.h100444 764 764 11265 6604607556 14255 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef OpenElement_INCLUDED #define OpenElement_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Boolean.h" #include "ContentToken.h" #include "ElementType.h" #include "Link.h" #include "Mode.h" #include "Allocator.h" #include "Location.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API OpenElement : public Link { public: void *operator new(size_t sz, Allocator &alloc) { return alloc.alloc(sz); } void *operator new(size_t sz) { return Allocator::allocSimple(sz); } void operator delete(void *p) { Allocator::free(p); } #ifdef SP_HAVE_PLACEMENT_OPERATOR_DELETE void operator delete(void *p, Allocator &) { Allocator::free(p); } #endif OpenElement(const ElementType *, Boolean net, Boolean included, const ShortReferenceMap *currentMap, const Location &startLocation); Boolean isFinished() const; Boolean tryTransition(const ElementType *); const LeafContentToken *invalidExclusion(const ElementType *) const; // This doesn't handle declared content of EMPTY. // If this situation can arise must use declaredEmpty(). Boolean tryTransitionPcdata(); const LeafContentToken *impliedStartTag() const; void doRequiredTransition(); const ElementType *type() const; Boolean netEnabling() const; Boolean included() const; const MatchState &matchState() const; void setMatchState(const MatchState &); Mode mode(Boolean netEnabled) const; const ShortReferenceMap *map() const; void setMap(const ShortReferenceMap *); Boolean requiresSpecialParse() const; const Location &startLocation() const; const LeafContentToken *currentPosition() const; Boolean declaredEmpty() const; void setConref(); unsigned long index() const; void setIndex(unsigned long); private: OpenElement(const OpenElement &); // undefined void operator=(const OpenElement &); // undefined const ElementType *elementType_; PackedBoolean netEnabling_; // start-tag was net-enabling PackedBoolean included_; MatchState matchState_; ElementDefinition::DeclaredContent declaredContent_; const ShortReferenceMap *map_; Location startLocation_; unsigned long index_; }; inline const ElementType *OpenElement::type() const { return elementType_; } inline Boolean OpenElement::netEnabling() const { return netEnabling_; } inline Boolean OpenElement::included() const { return included_; } inline const MatchState &OpenElement::matchState() const { return matchState_; } inline void OpenElement::setMatchState(const MatchState &state) { matchState_ = state; } inline Boolean OpenElement::isFinished() const { return (declaredContent_ != ElementDefinition::modelGroup || matchState_.isFinished()); } inline Boolean OpenElement::tryTransition(const ElementType *e) { return (declaredContent_ == ElementDefinition::modelGroup ? matchState_.tryTransition(e) : (declaredContent_ == ElementDefinition::any)); } inline Boolean OpenElement::tryTransitionPcdata() { return (declaredContent_ == ElementDefinition::modelGroup ? matchState_.tryTransitionPcdata() : 1); // CDATA, RCDATA, ANY all ok } inline const LeafContentToken *OpenElement::invalidExclusion(const ElementType *e) const { return (declaredContent_ == ElementDefinition::modelGroup ? matchState_.invalidExclusion(e) : 0); } inline void OpenElement::doRequiredTransition() { matchState_.doRequiredTransition(); } inline const LeafContentToken *OpenElement::impliedStartTag() const { return (declaredContent_ == ElementDefinition::modelGroup ? matchState_.impliedStartTag() : 0); } inline const ShortReferenceMap *OpenElement::map() const { return map_; } inline void OpenElement::setMap(const ShortReferenceMap *map) { map_ = map; } inline Boolean OpenElement::requiresSpecialParse() const { return (declaredContent_ == ElementDefinition::cdata || declaredContent_ == ElementDefinition::rcdata); } inline Mode OpenElement::mode(Boolean netEnabled) const { return elementType_->definition()->mode(netEnabled); } inline const Location &OpenElement::startLocation() const { return startLocation_; } inline const LeafContentToken *OpenElement::currentPosition() const { return (declaredContent_ == ElementDefinition::modelGroup ? matchState_.currentPosition() : 0); } inline Boolean OpenElement::declaredEmpty() const { return declaredContent_ == ElementDefinition::empty; } inline void OpenElement::setConref() { declaredContent_ = ElementDefinition::empty; } inline unsigned long OpenElement::index() const { return index_; } inline void OpenElement::setIndex(unsigned long index) { index_ = index; } #ifdef SP_NAMESPACE } #endif #endif /* not OpenElement_INCLUDED */ jade-1.2.1/include/Options.cxx100444 764 764 4623 6604607556 14030 0ustar jjcjjc// Derived from comp.sources.unix/volume3/att_getopt. #ifndef Options_DEF_INCLUDED #define Options_DEF_INCLUDED 1 #ifndef OPTION_CHAR #define OPTION_CHAR T('-') #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template Options::Options(int argc, T *const *argv, const T *opts) : argc_(argc), argv_(argv), opts_(opts), ind_(1), sp_(1) { } template const T *Options::search(T c) const { for (const T *s = opts_; *s; s++) if (*s == c) return s; return 0; } template bool Options::get(T &c) { const T *cp; if (sp_ == 1) { if (ind_ >= argc_) return false; if (( #ifdef OTHER_OPTION_CHAR argv_[ind_][0] != OTHER_OPTION_CHAR && #endif argv_[ind_][0] != OPTION_CHAR) || argv_[ind_][1] == 0) { #ifdef REORDER_ARGS int i; for (i = ind_; i < argc_; i++) if (( #ifdef OTHER_OPTION_CHAR argv_[i][0] == OTHER_OPTION_CHAR || #endif argv_[i][0] == OPTION_CHAR) && argv_[i][1] != 0) break; if (i < argc_) { c = argv_[i][1]; if (c != T(':') && c != OPTION_CHAR && (cp = search(c)) != 0 && cp[1] == T(':') && argv_[i][2] == 0 && i < argc_ - 1) { int j; T *temp1 = argv_[i]; T *temp2 = argv_[i + 1]; for (j = i - 1; j >= ind_; j--) argv_[j+2] = argv_[j]; argv_[ind_] = temp1; argv_[ind_ + 1] = temp2; } else { int j; T *temp = argv_[i]; for (j = i - 1; j >= ind_; j--) argv_[j+1] = argv_[j]; argv_[ind_] = temp; } } else #endif return false; } if ((argv_[ind_][0] == OPTION_CHAR && argv_[ind_][1] == OPTION_CHAR && argv_[ind_][2] == 0) #ifdef OTHER_OPTION_CHAR || (argv_[ind_][0] == OTHER_OPTION_CHAR && argv_[ind_][1] == OTHER_OPTION_CHAR && argv_[ind_][2] == 0) #endif ) { ind_++; return false; } } opt_ = c = argv_[ind_][sp_]; if (c == T(':') || (cp = search(c)) == 0) { if (argv_[ind_][++sp_] == 0) { ind_++; sp_ = 1; } c = T('?'); return true; } if (*++cp == T(':')) { if (argv_[ind_][sp_ + 1] != 0) arg_ = &argv_[ind_++][sp_ + 1]; else if (++ind_ >= argc_) { sp_ = 1; c = (*opts_ == T(':') ? T(':') : T('?')); return true; } else arg_ = argv_[ind_++]; sp_ = 1; } else { if (argv_[ind_][++sp_] == 0) { sp_ = 1; ind_++; } arg_ = 0; } return true; } #ifdef SP_NAMESPACE } #endif #endif /* not Options_DEF_INCLUDED */ jade-1.2.1/include/Options.h100444 764 764 1504 6604607556 13450 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef Options_INCLUDED #define Options_INCLUDED 1 #include "Boolean.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif // This is a mildly C++ified version of getopt(). // It never prints any message. template class Options { public: Options(int argc, T *const *, const T *); // Returns false if there are no more options. bool get(T &); T *arg() const { return arg_; } // optarg T opt() const { return opt_; } // optopt int ind() const { return ind_; } // optind private: const T *search(T) const; const T *opts_; T *const *argv_; int argc_; int ind_; T opt_; T *arg_; int sp_; }; #ifdef SP_NAMESPACE } #endif #endif /* not Options_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "Options.cxx" #endif jade-1.2.1/include/OutputByteStream.h100444 764 764 5342 6604607556 15321 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifndef OutputByteStream_INCLUDED #define OutputByteStream_INCLUDED 1 #include "StringOf.h" #include "Boolean.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API OutputByteStream { public: OutputByteStream(); virtual ~OutputByteStream(); virtual void flush() = 0; void sputc(char c); void sputn(const char *, size_t); OutputByteStream &operator<<(char); OutputByteStream &operator<<(unsigned char); OutputByteStream &operator<<(const char *); OutputByteStream &operator<<(int); OutputByteStream &operator<<(unsigned); OutputByteStream &operator<<(long); OutputByteStream &operator<<(unsigned long); OutputByteStream &operator<<(const String &); char *getBufferPtr() const; size_t getBufferSize() const; void usedBuffer(size_t); virtual void flushBuf(char) = 0; protected: char *ptr_; char *end_; }; inline char *OutputByteStream::getBufferPtr() const { return ptr_; } inline size_t OutputByteStream::getBufferSize() const { return end_ - ptr_; } inline void OutputByteStream::usedBuffer(size_t n) { ptr_ += n; } inline void OutputByteStream::sputc(char c) { if (ptr_ < end_) *ptr_++ = c; else flushBuf(c); } inline OutputByteStream &OutputByteStream::operator<<(char c) { sputc(c); return *this; } inline OutputByteStream &OutputByteStream::operator<<(unsigned char c) { sputc(char(c)); return *this; } inline OutputByteStream &OutputByteStream::operator<<(int n) { return *this << long(n); } inline OutputByteStream &OutputByteStream::operator<<(unsigned n) { return *this << (unsigned long)n; } inline OutputByteStream &OutputByteStream::operator<<(const String &s) { sputn(s.data(), s.size()); return *this; } class SP_API StrOutputByteStream : public OutputByteStream { public: StrOutputByteStream(); void extractString(String &); protected: StrOutputByteStream(const StrOutputByteStream &); // undefined void operator=(const StrOutputByteStream &); // undefined void flush(); void flushBuf(char); String buf_; }; class SP_API FileOutputByteStream : public OutputByteStream { public: FileOutputByteStream(); FileOutputByteStream(int fd, Boolean closeFd = 1); ~FileOutputByteStream(); #ifdef SP_WIDE_SYSTEM Boolean open(const wchar_t *); #else Boolean open(const char *); #endif Boolean attach(int fd, Boolean closeFd = 1); Boolean close(); private: FileOutputByteStream(const FileOutputByteStream &); // undefined void operator=(const FileOutputByteStream &); // undefined void flush(); void flushBuf(char); String buf_; int fd_; Boolean closeFd_; }; #ifdef SP_NAMESPACE } #endif #endif /* not OutputByteStream_INCLUDED */ jade-1.2.1/include/OutputCharStream.h100444 764 764 6516 6604607556 15277 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef OutputCharStream_INCLUDED #define OutputCharStream_INCLUDED 1 #include "types.h" #include #include "StringC.h" #include "Owner.h" #include "CodingSystem.h" #include "OutputByteStream.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API OutputCharStream { public: enum Newline { newline }; typedef void (*Escaper)(OutputCharStream &, Char); OutputCharStream(); virtual ~OutputCharStream(); OutputCharStream &put(Char); OutputCharStream &write(const Char *, size_t); virtual void flush() = 0; virtual void setEscaper(Escaper); OutputCharStream &operator<<(char); OutputCharStream &operator<<(const char *); OutputCharStream &operator<<(const StringC &); OutputCharStream &operator<<(unsigned long); OutputCharStream &operator<<(int); OutputCharStream &operator<<(Newline); private: OutputCharStream(const OutputCharStream &); // undefined void operator=(const OutputCharStream &); // undefined virtual void flushBuf(Char) = 0; protected: Char *ptr_; Char *end_; }; class SP_API EncodeOutputCharStream : public OutputCharStream, private Encoder::Handler { public: EncodeOutputCharStream(); // the OutputByteStream will not be deleted EncodeOutputCharStream(OutputByteStream *, const OutputCodingSystem *); ~EncodeOutputCharStream(); void open(OutputByteStream *, const OutputCodingSystem *); void flush(); void setEscaper(Escaper); private: EncodeOutputCharStream(const EncodeOutputCharStream &); // undefined void operator=(const EncodeOutputCharStream &); // undefined EncodeOutputCharStream(OutputByteStream *, Encoder *); void allocBuf(int bytesPerChar); void flushBuf(Char); void handleUnencodable(Char c, OutputByteStream *); Char *buf_; OutputByteStream *byteStream_; Encoder *encoder_; Owner ownedEncoder_; Escaper escaper_; }; class SP_API StrOutputCharStream : public OutputCharStream { public: StrOutputCharStream(); ~StrOutputCharStream(); void extractString(StringC &); void flush(); private: void flushBuf(Char); void sync(size_t); StrOutputCharStream(const StrOutputCharStream &); // undefined void operator=(const StrOutputCharStream &); // undefined Char *buf_; size_t bufSize_; }; class SP_API RecordOutputCharStream : public OutputCharStream { public: RecordOutputCharStream(OutputCharStream *); ~RecordOutputCharStream(); void flush(); void setEscaper(Escaper); private: RecordOutputCharStream(const RecordOutputCharStream &); // undefined void operator=(const RecordOutputCharStream &); // undefined void flushBuf(Char); void outputBuf(); OutputCharStream *os_; enum { bufSize_ = 1024 }; Char buf_[bufSize_]; }; inline OutputCharStream &OutputCharStream::put(Char c) { if (ptr_ < end_) *ptr_++ = c; else flushBuf(c); return *this; } inline OutputCharStream &OutputCharStream::operator<<(char c) { return put(Char(c)); } inline OutputCharStream &OutputCharStream::operator<<(Newline) { put(Char(SP_LINE_TERM1)); #ifdef SP_LINE_TERM2 put(Char(SP_LINE_TERM2)); #endif return *this; } inline OutputCharStream &OutputCharStream::operator<<(const StringC &str) { return write(str.data(), str.size()); } #ifdef SP_NAMESPACE } #endif #endif /* not OutputCharStream_INCLUDED */ jade-1.2.1/include/Owner.cxx100444 764 764 577 6604607556 13453 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Owner_DEF_INCLUDED #define Owner_DEF_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template Owner::~Owner() { if (p_) delete p_; } template void Owner::del() { delete p_; } #ifdef SP_NAMESPACE } #endif #endif /* not Owner_DEF_INCLUDED */ jade-1.2.1/include/Owner.h100444 764 764 2105 6604607556 13105 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Owner_INCLUDED #define Owner_INCLUDED 1 // A pointer that owns the object pointed to. // T must be of class type. // This is coded so that T need not yet have been defined. #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class Owner { public: Owner() : p_(0) { } Owner(T *p) : p_(p) { } ~Owner(); void operator=(T *p) { if (p_) del(); p_ = p; } operator int() const { return p_ != 0; } T *pointer() const { return p_; } T *operator->() const { return p_; } T &operator*() const { return *p_; } void swap(Owner &x) { T *tem = p_; p_ = x.p_; x.p_ = tem; } T *extract() { T *tem = p_; p_ = 0; return tem; } void clear() { if (p_) { del(); p_ = 0; } } private: Owner(const Owner &); // undefined void operator=(const Owner &o); // undefined void del(); T *p_; }; #ifdef SP_NAMESPACE } #endif #endif /* not Owner_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "Owner.cxx" #endif jade-1.2.1/include/OwnerTable.cxx100444 764 764 2032 6607317302 14415 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef OwnerTable_DEF_INCLUDED #define OwnerTable_DEF_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif // The uses of "this->" are for HP's compiler. template OwnerTable::~OwnerTable() { for (size_t i = 0; i < this->vec_.size(); i++) delete this->vec_[i]; } template void OwnerTable::clear() { for (size_t i = 0; i < this->vec_.size(); i++) delete this->vec_[i]; PointerTable::clear(); } template void CopyOwnerTable::operator=(const CopyOwnerTable &t) { this->clear(); PointerTable::operator=(t); // FIXME This isn't exception safe. for (size_t i = 0; i < this->vec_.size(); i++) if (this->vec_[i]) this->vec_[i] = this->vec_[i]->copy(); } #ifdef SP_NAMESPACE } #endif #endif /* not OwnerTable_DEF_INCLUDED */ jade-1.2.1/include/OwnerTable.h100444 764 764 2304 6604607556 14056 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef OwnerTable_INCLUDED #define OwnerTable_INCLUDED 1 #include "PointerTable.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class OwnerTable : public PointerTable { public: OwnerTable() { } ~OwnerTable(); void clear(); void swap(OwnerTable &x) { PointerTable::swap(x); } private: OwnerTable(const OwnerTable &); void operator=(const OwnerTable &); }; template class OwnerTableIter : public PointerTableIter { public: OwnerTableIter(const OwnerTable &table) : PointerTableIter(table) { } }; template class CopyOwnerTable : public OwnerTable { public: CopyOwnerTable() { } CopyOwnerTable(const CopyOwnerTable &tab) { *this = tab; } void operator=(const CopyOwnerTable &tab); }; #ifdef SP_NAMESPACE } #endif #endif /* not OwnerTable_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "OwnerTable.cxx" #endif jade-1.2.1/include/ParserApp.h100444 764 764 2361 6604607556 13714 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef ParserApp_INCLUDED #define ParserApp_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "SgmlParser.h" #include "ParserOptions.h" #include "EntityApp.h" #include "StringC.h" #include "ErrorCountEventHandler.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API ParserApp : public EntityApp { public: ParserApp(const char *requiredInternalCode = 0); void processOption(AppChar opt, const AppChar *arg); int processSysid(const StringC &); virtual ErrorCountEventHandler *makeEventHandler() = 0; Boolean enableWarning(const AppChar *s); void initParser(const StringC &sysid); SgmlParser &parser(); // This calls the ArcEngine if the options have enabled that. void parseAll(SgmlParser &, EventHandler &, const volatile sig_atomic_t *cancelPtr); virtual void allLinkTypesActivated(); protected: virtual int generateEvents(ErrorCountEventHandler *); ParserOptions options_; SgmlParser parser_; unsigned errorLimit_; Vector arcNames_; Vector activeLinkTypes_; }; inline SgmlParser &ParserApp::parser() { return parser_; } #ifdef SP_NAMESPACE } #endif #endif /* not ParserApp_INCLUDED */ jade-1.2.1/include/ParserOptions.h100444 764 764 7256 6604607556 14637 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef ParserOptions_INCLUDED #define ParserOptions_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "EventsWanted.h" #include "Vector.h" #include "StringC.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct Warnings { Warnings(); PackedBoolean warnSgmlDecl; PackedBoolean warnDuplicateEntity; PackedBoolean warnShould; PackedBoolean warnUndefinedElement; PackedBoolean warnDefaultEntityReference; PackedBoolean warnMixedContent; PackedBoolean warnEmptyTag; PackedBoolean warnUnusedMap; PackedBoolean warnUnusedParam; PackedBoolean warnNotationSystemId; PackedBoolean warnInclusion; PackedBoolean warnExclusion; PackedBoolean warnRcdataContent; PackedBoolean warnCdataContent; PackedBoolean warnPsComment; PackedBoolean warnElementGroupDecl; PackedBoolean warnAttlistGroupDecl; PackedBoolean warnPiEntity; PackedBoolean warnInternalSdataEntity; PackedBoolean warnInternalCdataEntity; PackedBoolean warnExternalSdataEntity; PackedBoolean warnExternalCdataEntity; PackedBoolean warnBracketEntity; PackedBoolean warnDataAttributes; PackedBoolean warnMissingSystemId; PackedBoolean warnConref; PackedBoolean warnCurrent; PackedBoolean warnNutokenDeclaredValue; PackedBoolean warnNumberDeclaredValue; PackedBoolean warnNameDeclaredValue; PackedBoolean warnNamedCharRef; PackedBoolean warnRefc; PackedBoolean warnTempMarkedSection; PackedBoolean warnRcdataMarkedSection; PackedBoolean warnInstanceIncludeMarkedSection; PackedBoolean warnInstanceIgnoreMarkedSection; PackedBoolean warnAndGroup; PackedBoolean warnRank; PackedBoolean warnEmptyCommentDecl; PackedBoolean warnAttributeValueNotLiteral; PackedBoolean warnMissingAttributeName; PackedBoolean warnCommentDeclS; PackedBoolean warnCommentDeclMultiple; PackedBoolean warnMissingStatusKeyword; PackedBoolean warnMultipleStatusKeyword; PackedBoolean warnInstanceParamEntityRef; PackedBoolean warnMinimizationParam; PackedBoolean warnMixedContentRepOrGroup; PackedBoolean warnNameGroupNotOr; PackedBoolean warnPiMissingName; PackedBoolean warnInstanceStatusKeywordSpecS; PackedBoolean warnExternalDataEntityRef; PackedBoolean warnAttributeValueExternalEntityRef; PackedBoolean warnDataDelim; PackedBoolean warnExplicitSgmlDecl; PackedBoolean warnInternalSubsetMarkedSection; PackedBoolean warnDefaultEntityDecl; PackedBoolean warnNonSgmlCharRef; PackedBoolean warnInternalSubsetPsParamEntityRef; PackedBoolean warnInternalSubsetTsParamEntityRef; PackedBoolean warnInternalSubsetLiteralParamEntityRef; }; struct SP_API ParserOptions : public Warnings { ParserOptions(); EventsWanted eventsWanted; PackedBoolean datatag; PackedBoolean omittag; PackedBoolean rank; PackedBoolean shorttag; PackedBoolean emptynrm; Number linkSimple; PackedBoolean linkImplicit; Number linkExplicit; Number concur; Number subdoc; PackedBoolean formal; PackedBoolean shortref; enum { sgmlDeclTypeValid = -1 }; short typeValid; enum Quantity { ATTCNT, ATTSPLEN, BSEQLEN, DTAGLEN, DTEMPLEN, ENTLVL, GRPCNT, GRPGTCNT, GRPLVL, LITLEN, NAMELEN, NORMSEP, PILEN, TAGLEN, TAGLVL }; enum { nQuantity = TAGLVL + 1 }; Number quantity[nQuantity]; PackedBoolean errorIdref; PackedBoolean errorSignificant; PackedBoolean errorAfdr; // error if AFDR extensions are used // These override what was specified in the SGML declaration. PackedBoolean noUnclosedTag; PackedBoolean noNet; Vector includes; }; #ifdef SP_NAMESPACE } #endif #endif /* not ParserOptions_INCLUDED */ jade-1.2.1/include/PointerTable.cxx100444 764 764 6204 6604607556 14762 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef PointerTable_DEF_INCLUDED #define PointerTable_DEF_INCLUDED 1 #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template PointerTable::PointerTable() : used_(0), usedLimit_(0), null_(0) { } template void PointerTable::clear() { vec_.clear(); used_ = 0; usedLimit_ = 0; } template P PointerTable::insert(P p, Boolean replace) { size_t h; if (vec_.size() == 0) { vec_.assign(8, P(0)); usedLimit_ = 4; h = startIndex(KF::key(*p)); } else { for (h = startIndex(KF::key(*p)); vec_[h] != 0 ; h = nextIndex(h)) if (KF::key(*vec_[h]) == KF::key(*p)) { if (replace) { P tem(vec_[h]); vec_[h] = p; return tem; } else return vec_[h]; } if (used_ >= usedLimit_) { if (vec_.size() > size_t(-1)/2) { if (usedLimit_ == vec_.size() - 1) abort(); // FIXME throw an exception else usedLimit_ = vec_.size() - 1; } else { // rehash Vector

oldVec(vec_.size()*2, P(0)); vec_.swap(oldVec); usedLimit_ = vec_.size() / 2; for (size_t i = 0; i < oldVec.size(); i++) if (oldVec[i] != 0) { size_t j; for (j = startIndex(KF::key(*oldVec[i])); vec_[j] != 0; j = nextIndex(j)) ; vec_[j] = oldVec[i]; } for (h = startIndex(KF::key(*p)); vec_[h] != 0; h = nextIndex(h)) ; } } } used_++; vec_[h] = p; return 0; } template const P &PointerTable::lookup(const K &k) const { if (used_ > 0) { for (size_t i = startIndex(k); vec_[i] != 0; i = nextIndex(i)) if (KF::key(*vec_[i]) == k) return vec_[i]; } return null_; } template P PointerTable::remove(const K &k) { if (used_ > 0) { for (size_t i = startIndex(k); vec_[i] != 0; i = nextIndex(i)) if (KF::key(*vec_[i]) == k) { P p = vec_[i]; do { vec_[i] = P(0); size_t j = i; size_t r; do { i = nextIndex(i); if (vec_[i] == 0) break; r = startIndex(KF::key(*vec_[i])); } while ((i <= r && r < j) || (r < j && j < i) || (j < i && i <= r)); vec_[j] = vec_[i]; } while (vec_[i] != 0); --used_; return p; } } return 0; } template void PointerTable::swap(PointerTable &to) { vec_.swap(to.vec_); size_t tem = to.used_; to.used_ = used_; used_ = tem; tem = to.usedLimit_; to.usedLimit_ = usedLimit_; usedLimit_ = tem; } template PointerTableIter::PointerTableIter(const PointerTable &table) : tablePtr_(&table), i_(0) { } template const P &PointerTableIter::next() { for (; i_ < tablePtr_->vec_.size(); i_++) if (tablePtr_->vec_[i_] != 0) return tablePtr_->vec_[i_++]; return tablePtr_->null_; } #ifdef SP_NAMESPACE } #endif #endif /* not PointerTable_DEF_INCLUDED */ jade-1.2.1/include/PointerTable.h100444 764 764 3021 6604607556 14401 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef PointerTable_INCLUDED #define PointerTable_INCLUDED 1 #include "Vector.h" #include "Boolean.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class PointerTableIter; template class PointerTable { void constraints() { P p(0); const K &key = KF::key(*p); unsigned long n = HF::hash(key); n = 0; // prevent warning } public: PointerTable(); P insert(P, Boolean replace = 0); // Return a reference so that it is possible to do // lookups into a table of smart-pointers from multiple threads. const P &lookup(const K &) const; P remove(const K &); size_t count() const { return used_; } void clear(); void swap(PointerTable &); protected: size_t used_; size_t usedLimit_; Vector

vec_; P null_; size_t startIndex(const K &k) const { return size_t(HF::hash(k) & (vec_.size() - 1)); } size_t nextIndex(size_t i) const { return i == 0 ? vec_.size() - 1 : i - 1; } friend class PointerTableIter; }; template class PointerTableIter { public: PointerTableIter(const PointerTable &); const P &next(); private: const PointerTable *tablePtr_; size_t i_; }; #ifdef SP_NAMESPACE } #endif #endif /* not PointerTable_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "PointerTable.cxx" #endif jade-1.2.1/include/PosixStorage.h100444 764 764 4270 6604607556 14447 0ustar jjcjjc// Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. #ifndef PosixStorage_INCLUDED #define PosixStorage_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "StorageManager.h" #include "DescriptorManager.h" #include "Vector.h" #include "StringC.h" #include "CharsetInfo.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Messenger; class CharsetInfo; class UnivCharsetDesc; class Filename; class OutputCodingSystem; class SP_API PosixStorageManager : public IdStorageManager { public: PosixStorageManager(const char *type, const CharsetInfo *filenameCharset, #ifndef SP_WIDE_SYSTEM const OutputCodingSystem *filenameCodingSystem, #endif int maxFDs); StorageObject *makeStorageObject(const StringC &id, const StringC &baseId, Boolean search, Boolean mayRewind, Messenger &, StringC &foundId); Boolean resolveRelative(const StringC &, StringC &, Boolean syntactic = 0) const; const char *type() const; void addSearchDir(const StringC &); Boolean transformNeutral(StringC &, Boolean fold, Messenger &) const; private: Boolean isAbsolute(const StringC &) const; StringC extractDir(const StringC &) const; StringC combineDir(const StringC &, const StringC &) const; PosixStorageManager(const PosixStorageManager &); // undefined void operator=(const PosixStorageManager &); // undefined DescriptorManager descriptorManager_; #ifndef SP_WIDE_SYSTEM const OutputCodingSystem *filenameCodingSystem_; #endif const char *type_; Vector searchDirs_; }; class SP_API PosixFdStorageManager : public IdStorageManager { public: PosixFdStorageManager(const char *type, const CharsetInfo *filenameCharset); StorageObject *makeStorageObject(const StringC &id, const StringC &baseId, Boolean, Boolean mayRewind, Messenger &mgr, StringC &foundId); const char *type() const; Boolean inheritable() const; private: PosixFdStorageManager(const PosixFdStorageManager &); // undefined void operator=(const PosixFdStorageManager &); // undefined const char *type_; }; #ifdef SP_NAMESPACE } #endif #endif /* not PosixStorage_INCLUDED */ jade-1.2.1/include/Ptr.cxx100444 764 764 1745 6606574406 13143 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Ptr_DEF_INCLUDED #define Ptr_DEF_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template Ptr::Ptr(T *ptr) : ptr_(ptr) { if (ptr_) ptr_->ref(); } template Ptr::~Ptr() { if (ptr_) { if (ptr_->unref()) delete ptr_; ptr_ = 0; } } template Ptr::Ptr(const Ptr &p) : ptr_(p.ptr_) { if (p.ptr_) p.ptr_->ref(); } template Ptr &Ptr::operator=(const Ptr &p) { if (p.ptr_) p.ptr_->ref(); if (ptr_ && ptr_->unref()) delete ptr_; ptr_ = p.ptr_; return *this; } template Ptr &Ptr::operator=(T *p) { if (p) p->ref(); if (ptr_ && ptr_->unref()) delete ptr_; ptr_ = p; return *this; } template void Ptr::clear() { if (ptr_) { if (ptr_->unref()) delete ptr_; ptr_ = 0; } } #ifdef SP_NAMESPACE } #endif #endif /* not Ptr_DEF_INCLUDED */ jade-1.2.1/include/Ptr.h100444 764 764 4327 6606574406 12567 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Ptr_INCLUDED #define Ptr_INCLUDED 1 #include "Boolean.h" // T must have Resource as a public base class // T may be an incomplete type #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class Ptr { public: Ptr() : ptr_(0) { } Ptr(T *ptr); ~Ptr(); Ptr(const Ptr &); Ptr &operator=(const Ptr &); Ptr &operator=(T *); T *pointer() const { return ptr_; } T *operator->() const { return ptr_; } T &operator*() const { return *ptr_; } void swap(Ptr &p) { T *tem = p.ptr_; p.ptr_ = ptr_; ptr_ = tem; } Boolean isNull() const { return ptr_ == 0; } // operator const void *() const { return ptr_; } void clear(); Boolean operator==(const Ptr &p) const { return ptr_ == p.ptr_; } Boolean operator!=(const Ptr &p) const { return ptr_ != p.ptr_; } Boolean operator==(const T *p) const { return ptr_ == p; } Boolean operator!=(const T *p) const { return ptr_ != p; } private: T *ptr_; }; template class ConstPtr : private Ptr { public: ConstPtr() { } ConstPtr(T *ptr) : Ptr(ptr) { } ConstPtr(const Ptr &p) : Ptr(p) { } ConstPtr(const ConstPtr &p) : Ptr(p) { } ConstPtr &operator=(const Ptr &p) { Ptr::operator=(p); return *this; } ConstPtr &operator=(const ConstPtr &p) { Ptr::operator=(p); return *this; } ConstPtr &operator=(T *p) { Ptr::operator=(p); return *this; } const T *pointer() const { return Ptr::pointer(); } const T *operator->() const { return Ptr::pointer(); } const T &operator*() const { return *Ptr::pointer(); } void swap(ConstPtr &p) { Ptr::swap(p); } Ptr::isNull; Ptr::clear; Boolean operator==(const Ptr &p) const { return Ptr::operator==(p); } Boolean operator!=(const Ptr &p) const { return Ptr::operator!=(p); } Boolean operator==(const ConstPtr &p) const { return Ptr::operator==(p); } Boolean operator!=(const ConstPtr &p) const { return Ptr::operator!=(p); } }; #ifdef SP_NAMESPACE } #endif #endif /* not Ptr_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "Ptr.cxx" #endif jade-1.2.1/include/RangeMap.cxx100444 764 764 7546 6606574406 14075 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef RangeMap_DEF_INCLUDED #define RangeMap_DEF_INCLUDED 1 #include "RangeMap.h" #include "ISet.h" #include "types.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template RangeMap::RangeMap() { } template Boolean RangeMap::map(From from, To &to, From &alsoMax) const { // FIXME use binary search for (size_t i = 0; i < ranges_.size(); i++) { const RangeMapRange &r = ranges_[i]; if (r.fromMin <= from && from <= r.fromMax) { to = r.toMin + (from - r.fromMin); alsoMax = r.fromMax; return 1; } if (r.fromMin > from) { alsoMax = r.fromMin - 1; return 0; } } alsoMax = From(-1); return 0; } typedef ISet RangeMap_dummy; template unsigned RangeMap::inverseMap(To to, From &from, ISet &fromSet, WideChar &count) const { // FIXME use binary search unsigned ret = 0; count = WideChar(-1); for (size_t i = 0; i < ranges_.size(); i++) { const RangeMapRange &r = ranges_[i]; if (r.toMin <= to && to <= r.toMin + (r.fromMax - r.fromMin)) { From n = r.fromMin + (to - r.toMin); WideChar thisCount = r.fromMax - n + 1; if (ret > 1) { fromSet.add(n); if (thisCount < count) count = thisCount; } else if (ret == 1) { fromSet.add(from); fromSet.add(n); ret = 2; if (thisCount < count) count = thisCount; } else { count = thisCount; from = n; ret = 1; } } else if (ret == 0 && r.toMin > to && (r.toMin - to < count)) count = r.toMin - to; } return ret; } template RangeMapIter::RangeMapIter(const RangeMap &map) : count_(map.ranges_.size()), ptr_(map.ranges_.begin()) { } // If the new range overlaps an existing one, the new // one takes precedence. template void RangeMap::addRange(From fromMin, From fromMax, To toMin) { // FIXME use binary search size_t i; for (i = ranges_.size(); i > 0; i--) if (fromMin > ranges_[i - 1].fromMax) break; // fromMin <= ranges[i].fromMax Boolean coalesced = 0; if (i > 0 && ranges_[i - 1].fromMax + 1 == fromMin && ranges_[i - 1].toMin + (fromMin - ranges_[i - 1].fromMin) == toMin) { // coalesce with previous ranges_[i - 1].fromMax = fromMax; i--; coalesced = 1; } else if (i < ranges_.size() && fromMax >= ranges_[i].fromMin - 1) { // overlap if (fromMin <= ranges_[i].fromMin) { if (toMin + (ranges_[i].fromMin - fromMin) == ranges_[i].toMin) { ranges_[i].fromMin = fromMin; if (fromMax <= ranges_[i].fromMax) return; ranges_[i].fromMax = fromMax; coalesced = 1; } } else { // fromMin > ranges_[i].fromMin if (ranges_[i].toMin + (fromMin - ranges_[i].fromMin) == toMin) { if (fromMax < ranges_[i].fromMax) return; ranges_[i].fromMax = fromMax; coalesced = 1; } } } if (!coalesced) { // insert ranges_.resize(ranges_.size() + 1); for (size_t j = ranges_.size() - 1; j > i; j--) ranges_[j] = ranges_[j - 1]; ranges_[i].fromMin = fromMin; ranges_[i].fromMax = fromMax; ranges_[i].toMin = toMin; } // Delete overlapping ranges starting at i + 1. size_t j; for (j = i + 1; j < ranges_.size(); j++) { if (fromMax < ranges_[j].fromMax) { if (fromMax >= ranges_[j].fromMin) ranges_[j].fromMin = fromMax + 1; break; } } if (j > i + 1) { // delete i + 1 ... j - 1 // j -> i + 1 // j - 1 -> i + 2 size_t count = ranges_.size() - j; for (size_t k = 0; k < count; k++) ranges_[i + 1 + count] = ranges_[j + count]; ranges_.resize(ranges_.size() - (j - (i + 1))); } } #ifdef SP_NAMESPACE } #endif #endif /* not RangeMap_DEF_INCLUDED */ jade-1.2.1/include/RangeMap.h100444 764 764 2563 6607315154 13506 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef RangeMap_INCLUDED #define RangeMap_INCLUDED 1 #include "Vector.h" #include "Boolean.h" #include "ISet.h" #include "types.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template struct RangeMapRange { From fromMin; From fromMax; To toMin; }; template class RangeMapIter; template class RangeMap { public: RangeMap(); Boolean map(From, To &, From &alsoMax) const; // Return 0 for no matches, 1 for 1, 2 for more than 1. unsigned inverseMap(To, From &, ISet &, WideChar &count) const; void addRange(From, From, To); private: Vector > ranges_; friend class RangeMapIter; }; template class RangeMapIter { public: RangeMapIter(const RangeMap &map); Boolean next(From &fromMin, From &fromMax, To &toMin) { if (!count_) return 0; else { fromMin = ptr_->fromMin; fromMax = ptr_->fromMax; toMin = ptr_->toMin; ptr_++; count_--; return 1; } } private: size_t count_; typename Vector >::const_iterator ptr_; }; #ifdef SP_NAMESPACE } #endif #endif /* not RangeMap_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "RangeMap.cxx" #endif jade-1.2.1/include/Resource.h100444 764 764 1311 6606574406 13577 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Resource_INCLUDED #define Resource_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API Resource { public: Resource(); Resource(const Resource &); int unref(); // return 1 if it should be deleted void ref(); int count() const; private: int count_; }; inline Resource::Resource() : count_(0) { } inline Resource::Resource(const Resource &) : count_(0) { } inline int Resource::count() const { return count_; } inline int Resource::unref() { return --count_ <= 0; } inline void Resource::ref() { ++count_; } #ifdef SP_NAMESPACE } #endif #endif /* not Resource_INCLUDED */ jade-1.2.1/include/RewindStorageObject.h100444 764 764 1704 6606574406 15722 0ustar jjcjjc#ifndef RewindStorageObject_INCLUDED #define RewindStorageObject_INCLUDED 1 #include "StorageManager.h" #include "Boolean.h" #include "StringOf.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Messenger; class SP_API RewindStorageObject : public StorageObject { public: RewindStorageObject(Boolean mayRewind, Boolean canSeek); protected: PackedBoolean mayRewind_; void saveBytes(const char *, size_t); Boolean readSaved(char *, size_t, size_t &); Boolean rewind(Messenger &); void willNotRewind(); void unread(const char *s, size_t n); virtual Boolean seekToStart(Messenger &) = 0; private: PackedBoolean savingBytes_; PackedBoolean readingSaved_; PackedBoolean canSeek_; String savedBytes_; size_t nBytesRead_; }; inline void RewindStorageObject::saveBytes(const char *s, size_t n) { if (savingBytes_) savedBytes_.append(s, n); } #ifdef SP_NAMESPACE } #endif #endif /* not RewindStorageObject_INCLUDED */ jade-1.2.1/include/SJISCodingSystem.h100444 764 764 665 6606574406 15104 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef SJISCodingSystem_INCLUDED #define SJISCodingSystem_INCLUDED 1 #include "CodingSystem.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API SJISCodingSystem : public CodingSystem { public: Decoder *makeDecoder() const; Encoder *makeEncoder() const; }; #ifdef SP_NAMESPACE } #endif #endif /* not SJISCodingSystem_INCLUDED */ jade-1.2.1/include/SOEntityCatalog.h100444 764 764 1224 6606574406 15024 0ustar jjcjjc// Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. #ifndef SOEntityCatalog_INCLUDED #define SOEntityCatalog_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "ExtendEntityManager.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API SOCatalogManager : public ExtendEntityManager::CatalogManager { public: static ExtendEntityManager::CatalogManager * make(const Vector &sysids, size_t nSysidsMustExist, const CharsetInfo *sysidCharset, const CharsetInfo *catalogCharset, Boolean useDocCatalog); }; #ifdef SP_NAMESPACE } #endif #endif /* not SOEntityCatalog_INCLUDED */ jade-1.2.1/include/Sd.h100444 764 764 24125 6606574406 12406 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Sd_INCLUDED #define Sd_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "Boolean.h" #include "Resource.h" #include "CharsetInfo.h" #include "ExternalId.h" #include "ISet.h" #include "Syntax.h" #include "CharsetDecl.h" #include "HashTable.h" #include "EntityManager.h" #include "Ptr.h" // Information about the SGML declaration that is not syntax specific. #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API Sd : public Resource { public: // These must be in the same order as in the SGML declaration. enum BooleanFeature { fDATATAG, fOMITTAG, fRANK, fSTARTTAGEMPTY, fSTARTTAGUNCLOSED, fENDTAGEMPTY, fENDTAGUNCLOSED, fATTRIBDEFAULT, fATTRIBOMITNAME, fATTRIBVALUE, fEMPTYNRM, fIMPLYDEFATTLIST, fIMPLYDEFDOCTYPE, fIMPLYDEFELEMENT, fIMPLYDEFENTITY, fIMPLYDEFNOTATION, fIMPLICIT, fFORMAL, fURN, fKEEPRSRE }; enum { nBooleanFeature = fKEEPRSRE + 1, fSHORTTAG_FIRST = fSTARTTAGEMPTY, fSHORTTAG_LAST = fATTRIBVALUE }; // These must be in the same order as in the SGML declaration. enum NumberFeature { fSIMPLE, fEXPLICIT, fCONCUR, fSUBDOC }; enum { nNumberFeature = fSUBDOC + 1 }; enum NetEnable { netEnableNo, netEnableImmednet, netEnableAll }; enum EntityRef { entityRefAny, entityRefInternal, entityRefNone }; // These are names used in the SGML declaration. enum ReservedName { rALL, rANY, rAPPINFO, rATTLIST, rATTRIB, rBASESET, rCAPACITY, rCHARSET, rCONCUR, rCONTROLS, rDATATAG, rDEFAULT, rDELIM, rDESCSET, rDOCTYPE, rDOCUMENT, rELEMENT, rEMPTY, rEMPTYNRM, rENDTAG, rENTITIES, rENTITY, rEXPLICIT, rFEATURES, rFORMAL, rFUNCHAR, rFUNCTION, rGENERAL, rIMMEDNET, rIMPLICIT, rIMPLYDEF, rINSTANCE, rINTEGRAL, rINTERNAL, rKEEPRSRE, rLCNMCHAR, rLCNMSTRT, rLINK, rMINIMIZE, rMSICHAR, rMSOCHAR, rMSSCHAR, rNAMECASE, rNAMECHAR, rNAMES, rNAMESTRT, rNAMING, rNETENABL, rNO, rNOASSERT, rNONE, rNOTATION, rOMITNAME, rOMITTAG, rOTHER, rPUBLIC, rQUANTITY, rRANK, rRE, rREF, rRS, rSCOPE, rSEEALSO, rSEPCHAR, rSGML, rSGMLREF, rSHORTREF, rSHORTTAG, rSHUNCHAR, rSIMPLE, rSPACE, rSTARTTAG, rSUBDOC, rSWITCHES, rSYNTAX, rSYSTEM, rTYPE, rUCNMCHAR, rUCNMSTRT, rUNCLOSED, rUNUSED, rURN, rVALIDITY, rVALUE, rYES }; enum Capacity { TOTALCAP, ENTCAP, ENTCHCAP, ELEMCAP, GRPCAP, EXGRPCAP, EXNMCAP, ATTCAP, ATTCHCAP, AVGRPCAP, NOTCAP, NOTCHCAP, IDCAP, IDREFCAP, MAPCAP, LKSETCAP, LKNMCAP }; enum { nCapacity = LKNMCAP + 1 }; Sd(const Ptr &); void setDocCharsetDesc(const UnivCharsetDesc &); Boolean matchesReservedName(const StringC &, ReservedName) const; int digitWeight(Char) const; int hexDigitWeight(Char) const; Boolean link() const; Number simpleLink() const; Boolean implicitLink() const; Number explicitLink() const; Boolean startTagEmpty() const; Boolean startTagUnclosed() const; NetEnable startTagNetEnable() const; void setStartTagNetEnable(NetEnable); Boolean endTagEmpty() const; Boolean endTagUnclosed() const; Boolean attributeDefault() const; Boolean attributeValueNotLiteral() const; Boolean attributeOmitName() const; Boolean emptyElementNormal() const; Boolean implydefAttlist() const; Boolean implydefDoctype() const; Boolean implydefElement() const; Boolean implydefEntity() const; Boolean implydefNotation() const; Number concur() const; Boolean omittag() const; Boolean rank() const; Boolean datatag() const; Boolean formal() const; Boolean keeprsre() const; Number subdoc() const; StringC reservedName(int) const; Boolean lookupQuantityName(const StringC &, Syntax::Quantity &) const; Boolean lookupGeneralDelimiterName(const StringC &, Syntax::DelimGeneral &) const; Boolean lookupCapacityName(const StringC &, Sd::Capacity &) const; StringC quantityName(Syntax::Quantity) const; Boolean internalCharsetIsDocCharset() const; const CharsetInfo &internalCharset() const; const CharsetInfo &docCharset() const; Char execToInternal(char) const; StringC execToInternal(const char *) const; Number capacity(int) const; void setCapacity(int, Number); StringC capacityName(int) const; Boolean scopeInstance() const; void setScopeInstance(); void setDocCharsetDecl(CharsetDecl &); const CharsetDecl &docCharsetDecl() const; void setBooleanFeature(BooleanFeature, Boolean); void setShorttag(Boolean); void setNumberFeature(NumberFeature, Number); StringC generalDelimiterName(Syntax::DelimGeneral) const; UnivChar nameToUniv(const StringC &); Boolean www() const; void setWww(Boolean); EntityRef entityRef() const; void setEntityRef(EntityRef); Boolean typeValid() const; void setTypeValid(Boolean); Boolean integrallyStored() const; void setIntegrallyStored(Boolean); private: PackedBoolean booleanFeature_[nBooleanFeature]; Number numberFeature_[nNumberFeature]; Number capacity_[nCapacity]; PackedBoolean internalCharsetIsDocCharset_; // if null, use docCharset_ const CharsetInfo *internalCharsetPtr_; CharsetInfo docCharset_; CharsetDecl docCharsetDecl_; Boolean scopeInstance_; Boolean www_; NetEnable netEnable_; EntityRef entityRef_; Boolean typeValid_; Boolean integrallyStored_; HashTable namedCharTable_; Ptr entityManager_; static const char *const reservedName_[]; static const char *const generalDelimiterName_[]; static const char *const capacityName_[]; static const char *const quantityName_[]; }; inline Boolean Sd::link() const { return (numberFeature_[fSIMPLE] || booleanFeature_[fIMPLICIT] || numberFeature_[fEXPLICIT]); } inline Number Sd::explicitLink() const { return numberFeature_[fEXPLICIT]; } inline Boolean Sd::implicitLink() const { return booleanFeature_[fIMPLICIT]; } inline Number Sd::simpleLink() const { return numberFeature_[fSIMPLE]; } inline Boolean Sd::startTagEmpty() const { return booleanFeature_[fSTARTTAGEMPTY]; } inline Boolean Sd::startTagUnclosed() const { return booleanFeature_[fSTARTTAGUNCLOSED]; } inline Sd::NetEnable Sd::startTagNetEnable() const { return netEnable_; } inline void Sd::setStartTagNetEnable(NetEnable e) { netEnable_ = e; } inline Boolean Sd::endTagEmpty() const { return booleanFeature_[fENDTAGEMPTY]; } inline Boolean Sd::endTagUnclosed() const { return booleanFeature_[fENDTAGUNCLOSED]; } inline Boolean Sd::attributeDefault() const { return booleanFeature_[fATTRIBDEFAULT]; } inline Boolean Sd::attributeValueNotLiteral() const { return booleanFeature_[fATTRIBVALUE]; } inline Boolean Sd::attributeOmitName() const { return booleanFeature_[fATTRIBOMITNAME]; } inline Boolean Sd::emptyElementNormal() const { return booleanFeature_[fEMPTYNRM]; } inline Boolean Sd::implydefAttlist() const { return booleanFeature_[fIMPLYDEFATTLIST]; } inline Boolean Sd::implydefDoctype() const { return booleanFeature_[fIMPLYDEFDOCTYPE]; } inline Boolean Sd::implydefElement() const { return booleanFeature_[fIMPLYDEFELEMENT]; } inline Boolean Sd::implydefEntity() const { return booleanFeature_[fIMPLYDEFENTITY]; } inline Boolean Sd::implydefNotation() const { return booleanFeature_[fIMPLYDEFNOTATION]; } inline Number Sd::concur() const { return numberFeature_[fCONCUR]; } inline Number Sd::subdoc() const { return numberFeature_[fSUBDOC]; } inline Boolean Sd::omittag() const { return booleanFeature_[fOMITTAG]; } inline Boolean Sd::rank() const { return booleanFeature_[fRANK]; } inline Boolean Sd::datatag() const { return booleanFeature_[fDATATAG]; } inline Boolean Sd::formal() const { return booleanFeature_[fFORMAL]; } inline Boolean Sd::keeprsre() const { return booleanFeature_[fKEEPRSRE]; } inline const CharsetInfo &Sd::internalCharset() const { return internalCharsetPtr_ ? *internalCharsetPtr_ : docCharset_; } inline Char Sd::execToInternal(char c) const { return internalCharset().execToDesc(c); } inline StringC Sd::execToInternal(const char *s) const { return internalCharset().execToDesc(s); } inline StringC Sd::reservedName(int i) const { return execToInternal(reservedName_[i]); } inline Boolean Sd::internalCharsetIsDocCharset() const { return internalCharsetIsDocCharset_; } inline const CharsetInfo &Sd::docCharset() const { return docCharset_; } inline int Sd::digitWeight(Char c) const { return internalCharset().digitWeight(c); } inline int Sd::hexDigitWeight(Char c) const { return internalCharset().hexDigitWeight(c); } inline Number Sd::capacity(int i) const { return capacity_[i]; } inline void Sd::setCapacity(int i, Number n) { capacity_[i] = n; } inline StringC Sd::capacityName(int i) const { return execToInternal(capacityName_[i]); } inline Boolean Sd::scopeInstance() const { return scopeInstance_; } inline void Sd::setScopeInstance() { scopeInstance_ = 1; } inline void Sd::setDocCharsetDecl(CharsetDecl &decl) { decl.swap(docCharsetDecl_); } inline const CharsetDecl &Sd::docCharsetDecl() const { return docCharsetDecl_; } inline void Sd::setBooleanFeature(BooleanFeature i, Boolean b) { booleanFeature_[i] = b; } inline void Sd::setNumberFeature(NumberFeature i, Number n) { numberFeature_[i] = n; } inline Boolean Sd::www() const { return www_; } inline void Sd::setWww(Boolean b) { www_ = b; } inline Sd::EntityRef Sd::entityRef() const { return entityRef_; } inline void Sd::setEntityRef(EntityRef r) { entityRef_ = r; } inline Boolean Sd::typeValid() const { return typeValid_; } inline void Sd::setTypeValid(Boolean b) { typeValid_ = b; } inline Boolean Sd::integrallyStored() const { return integrallyStored_; } inline void Sd::setIntegrallyStored(Boolean b) { integrallyStored_ = b; } #ifdef SP_NAMESPACE } #endif #endif /* Sd_INCLUDED */ jade-1.2.1/include/SdText.h100444 764 764 2215 6606574406 13227 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifndef SdText_INCLUDED #define SdText_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "StringOf.h" #include "Vector.h" #include "Location.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct SP_API SdTextItem { SdTextItem(); Location loc; size_t index; }; class SP_API SdText { public: SdText(); SdText(const Location &loc, Boolean lita); void swap(SdText &); void addChar(SyntaxChar, const Location &); const String &string() const; Boolean lita() const; Location endDelimLocation() const; private: Boolean lita_; String chars_; Vector items_; friend class SdTextIter; }; class SP_API SdTextIter { public: SdTextIter(const SdText &); Boolean next(const SyntaxChar *&, size_t &, Location &); private: const SdText *ptr_; size_t itemIndex_; }; inline Boolean SdText::lita() const { return lita_; } inline const String &SdText::string() const { return chars_; } #ifdef SP_NAMESPACE } #endif #endif /* not SdText_INCLUDED */ jade-1.2.1/include/SearchResultMessageArg.h100444 764 764 2026 6606574406 16357 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifndef SearchResultMessageArg_INCLUDED #define SearchResultMessageArg_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "MessageArg.h" #include "StringC.h" #include "Vector.h" #include "Vector.h" #include "rtti.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API SearchResultMessageArg : public OtherMessageArg { RTTI_CLASS public: SearchResultMessageArg(); void add(StringC &, int); MessageArg *copy() const; size_t nTried() const; const StringC &filename(size_t) const; int errnum(size_t) const; private: Vector filename_; Vector errno_; }; inline size_t SearchResultMessageArg::nTried() const { return filename_.size(); } inline const StringC &SearchResultMessageArg::filename(size_t i) const { return filename_[i]; } inline int SearchResultMessageArg::errnum(size_t i) const { return errno_[i]; } #ifdef SP_NAMESPACE } #endif #endif /* not SearchResultMessageArg_INCLUDED */ jade-1.2.1/include/SgmlParser.h100444 764 764 4022 6606574406 14071 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef SgmlParser_INCLUDED #define SgmlParser_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "StringC.h" #include "Ptr.h" #include "Location.h" #include "EntityManager.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Event; class Parser; class UnivCharsetDesc; class EventHandler; struct ParserOptions; template class Ptr; template class ConstPtr; class InputSourceOrigin; class Sd; class Syntax; class Dtd; class SP_API SgmlParser { public: struct SP_API Params { enum EntityType { document, subdoc, dtd }; Params(); EntityType entityType; // defaults to document StringC sysid; // must be specified Ptr origin; Ptr entityManager; const SgmlParser *parent; ConstPtr sd; ConstPtr prologSyntax; ConstPtr instanceSyntax; unsigned subdocLevel; const ParserOptions *options; PackedBoolean subdocInheritActiveLinkTypes; // referenced subdocs count against SUBDOC limit in SGML declaration PackedBoolean subdocReferenced; StringC doctypeName; }; SgmlParser(); // must call init SgmlParser(const Params ¶ms); void init(const Params ¶ms); ~SgmlParser(); Event *nextEvent(); void parseAll(EventHandler &, const volatile sig_atomic_t *cancelPtr = 0); ConstPtr sd() const; ConstPtr instanceSyntax() const; ConstPtr prologSyntax() const; EntityManager &entityManager() const; const EntityCatalog &entityCatalog() const; const ParserOptions &options() const; // Only to be called after the parse has ended. Ptr baseDtd(); void activateLinkType(const StringC &); void allLinkTypesActivated(); void swap(SgmlParser &); friend class Parser; private: SgmlParser(const SgmlParser &); void operator=(const SgmlParser &); Parser *parser_; }; #ifdef SP_NAMESPACE } #endif #endif /* not SgmlParser_INCLUDED */ jade-1.2.1/include/ShortReferenceMap.h100444 764 764 4037 6606574406 15374 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef ShortReferenceMap_INCLUDED #define ShortReferenceMap_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Vector.h" #include "Vector.h" #include "StringC.h" #include "Named.h" #include "Boolean.h" #include "Entity.h" #include "Ptr.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API ShortReferenceMap : public Named { public: ShortReferenceMap(); ShortReferenceMap(const StringC &); Boolean defined() const; void setNameMap(Vector &map); void setEntityMap(Vector > &map); Boolean lookup(int i, const StringC *&) const; const StringC *entityName(size_t i) const; const ConstPtr &entity(size_t i) const; Boolean used() const; void setUsed(); const Location &defLocation() const; void setDefLocation(const Location &); private: ShortReferenceMap(const ShortReferenceMap &); // undefined void operator=(const ShortReferenceMap &); // undefined Vector nameMap_; Vector > entityMap_; ConstPtr nullEntity_; Boolean used_; Location defLocation_; }; inline Boolean ShortReferenceMap::defined() const { return nameMap_.size() > 0; } inline const StringC *ShortReferenceMap::entityName(size_t i) const { if (i < nameMap_.size() && nameMap_[i].size() != 0) return &nameMap_[i]; else return 0; } inline const ConstPtr &ShortReferenceMap::entity(size_t i) const { if (i < entityMap_.size()) return entityMap_[i]; else return nullEntity_; } inline void ShortReferenceMap::setEntityMap(Vector > &map) { map.swap(entityMap_); } inline Boolean ShortReferenceMap::used() const { return used_; } inline void ShortReferenceMap::setUsed() { used_ = 1; } inline void ShortReferenceMap::setDefLocation(const Location &loc) { defLocation_ = loc; } inline const Location &ShortReferenceMap::defLocation() const { return defLocation_; } #ifdef SP_NAMESPACE } #endif #endif /* not ShortReferenceMap_INCLUDED */ jade-1.2.1/include/StdioStorage.h100444 764 764 2153 6606574406 14424 0ustar jjcjjc// Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. #ifndef StdioStorage_INCLUDED #define StdioStorage_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "StorageManager.h" #include "DescriptorManager.h" #include "StringC.h" #include "CharsetInfo.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Messenger; class CharsetInfo; class UnivCharsetDesc; class OutputCodingSystem; class SP_API StdioStorageManager : public IdStorageManager { public: StdioStorageManager(const char *type, const CharsetInfo *filenameCharset, const OutputCodingSystem *filenameCodingSystem); StorageObject *makeStorageObject(const StringC &id, const StringC &baseId, Boolean, Boolean mayRewind, Messenger &, StringC &foundId); const char *type() const; private: StdioStorageManager(const StdioStorageManager &); // undefined void operator=(const StdioStorageManager &); // undefined const OutputCodingSystem *filenameCodingSystem_; const char *type_; }; #ifdef SP_NAMESPACE } #endif #endif /* not StdioStorage_INCLUDED */ jade-1.2.1/include/StorageManager.h100444 764 764 5202 6606574406 14712 0ustar jjcjjc// Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. #ifndef StorageManager_INCLUDED #define StorageManager_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "StringC.h" #include "types.h" #include "CharsetInfo.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class StorageManager; class CharsetInfo; class Messenger; class InputCodingSystem; class SP_API StorageObject { public: StorageObject(); virtual ~StorageObject(); virtual Boolean read(char *buf, size_t bufSize, Messenger &, size_t &nread) = 0; virtual Boolean rewind(Messenger &) = 0; virtual void willNotRewind(); virtual size_t getBlockSize() const; private: StorageObject(const StorageObject &); // undefined void operator=(const StorageObject &); // undefined }; class SP_API StorageManager { public: StorageManager(); virtual StorageObject *makeStorageObject(const StringC &specId, const StringC &baseId, Boolean search, Boolean mayRewind, Messenger &mgr, StringC &actualId) = 0; virtual const char *type() const = 0; virtual Boolean inheritable() const; virtual Boolean transformNeutral(StringC &, Boolean fold, Messenger &) const; // Resolve a possibly relative ID by examining the base and specified IDs. // Put the resolved ID in specID. // Return 0 if it cannot be resolved yet becase the specified ID is relative // and physical searching is required to resolve it and search is true; // in this case the base will be passed to makeStorageObject. // Otherwise return 1; in this case the base will be discarded, and the // resolved ID will be passed to makeStorageObject. virtual Boolean resolveRelative(const StringC &base, StringC &specId, Boolean search) const; virtual Boolean guessIsId(const StringC &, const CharsetInfo &) const; virtual const InputCodingSystem *requiredCodingSystem() const; virtual Boolean requiresCr() const; virtual ~StorageManager(); virtual const CharsetInfo *idCharset() const; virtual const StringC *reString() const; private: StorageManager(const StorageManager &); // undefined void operator=(const StorageManager &); // undefined }; class SP_API IdStorageManager : public StorageManager { public: IdStorageManager(const CharsetInfo *idCharset); const CharsetInfo *idCharset() const; const StringC *reString() const; protected: StringC reString_; private: IdStorageManager(const IdStorageManager &); // undefined void operator=(const IdStorageManager &); // undefined const CharsetInfo *idCharset_; }; #ifdef SP_NAMESPACE } #endif #endif /* not StorageManager_INCLUDED */ jade-1.2.1/include/StringC.h100444 764 764 506 6606574406 13346 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef StringC_INCLUDED #define StringC_INCLUDED 1 #include "types.h" #include "StringOf.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif typedef String StringC; #ifdef SP_NAMESPACE } #endif #endif /* not StringC_INCLUDED */ jade-1.2.1/include/StringOf.cxx100444 764 764 5324 6606574406 14126 0ustar jjcjjc// Copyright (c) 1994, 1996 James Clark // See the file COPYING for copying permission. #ifndef StringOf_DEF_INCLUDED #define StringOf_DEF_INCLUDED 1 #include #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template String::String(const T *ptr, size_t length) : length_(length), alloc_(length) { if (length) { ptr_ = new T[length]; memcpy(ptr_, ptr, length*sizeof(T)); } else ptr_ = 0; } template String::String() : ptr_(0), length_(0), alloc_(0) { } template String::String(const String &s) : length_(s.length_), alloc_(s.length_) { if (length_) { ptr_ = new T[length_]; memcpy(ptr_, s.ptr_, length_*sizeof(T)); } else ptr_ = 0; } template String &String::operator=(const String &s) { if (&s != this) { if (s.length_ > alloc_) { T *oldPtr = ptr_; ptr_ = new T[alloc_ = s.length_]; if (oldPtr) delete [] oldPtr; } memcpy(ptr_, s.ptr_, s.length_*sizeof(T)); length_ = s.length_; } return *this; } template String &String::insert(size_t i, const String &s) { if (length_ + s.length_ > alloc_) grow(s.length_); for (size_t n = length_ - i; n > 0; n--) ptr_[i + n - 1 + s.length_] = ptr_[i + n - 1]; length_ += s.length_; memcpy(ptr_ + i, s.ptr_, s.length_*sizeof(T)); return *this; } template String &String::append(const T *p, size_t length) { if (length_ + length > alloc_) grow(length); memcpy(ptr_ + length_, p, length*sizeof(T)); length_ += length; return *this; } template void String::grow(size_t n) { size_t newAlloc = alloc_; if (alloc_ < n) newAlloc += n + 16; else newAlloc += alloc_; T *s = new T[newAlloc]; memcpy(s, ptr_, length_*sizeof(T)); delete [] ptr_; ptr_ = s; alloc_ = newAlloc; } template void String::swap(String &to) { { T *tem = to.ptr_; to.ptr_ = ptr_; ptr_ = tem; } { size_t tem = to.length_; to.length_ = length_; length_ = tem; } { size_t tem = to.alloc_; to.alloc_ = alloc_; alloc_ = tem; } } template String &String::assign(const T *p, size_t n) { if (alloc_ < n) { T *oldPtr = ptr_; ptr_ = new T[n]; alloc_ = n; if (oldPtr) delete [] oldPtr; } length_ = n; for(T *to = ptr_; n > 0; n--, to++, p++) *to = *p; return *this; } template void String::resize(size_t n) { if (alloc_ < n) { T *oldPtr = ptr_; ptr_ = new T[n]; alloc_ = n; if (length_ > 0) { memcpy(ptr_, oldPtr, length_*sizeof(T)); delete [] oldPtr; } } length_ = n; } #ifdef SP_NAMESPACE } #endif #endif /* not StringOf_DEF_INCLUDED */ jade-1.2.1/include/StringOf.h100444 764 764 3700 6606574406 13547 0ustar jjcjjc// Copyright (c) 1994, 1996 James Clark // See the file COPYING for copying permission. #ifndef StringOf_INCLUDED #define StringOf_INCLUDED 1 // The file is called StringOf to distinguish it from string.h on // case-insensitive file systems. // This offers a subset of the interface offered by the standard C++ // basic_string class as defined in the Jan 96 WP. // Code in SP currently assumes that size_type is size_t. #include #include #include "Boolean.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class String { public: typedef size_t size_type; typedef T *iterator; typedef const T *const_iterator; String(); ~String() { if (ptr_) delete [] ptr_; } String(const T *, size_t); String(const String &); String &operator=(const String &); size_t size() const { return length_; } String &assign(const T *, size_t); String &insert(size_t i, const String &s); void swap(String &str); T operator[](size_t i) const { return ptr_[i]; } T &operator[](size_t i) { return ptr_[i]; } iterator begin() { return ptr_; } const_iterator begin() const { return ptr_; } const T *data() const { return ptr_; } String &operator+=(T c) { if (length_ >= alloc_) grow(1); ptr_[length_++] = c; return *this; } String &operator+=(const String &s) { append(s.ptr_, s.length_); return *this; } String &append(const T *, size_t); Boolean operator==(const String &s) const { return (length_ == s.length_ && (length_ == 0 || (*ptr_ == *s.ptr_ && (memcmp(ptr_ + 1, s.ptr_ + 1, (length_ - 1)*sizeof(T)) == 0)))); } Boolean operator!=(const String &str) const { return !(*this == str); } void resize(size_t n); private: void grow(size_t); T *ptr_; size_t length_; size_t alloc_; }; #ifdef SP_NAMESPACE } #endif #endif /* not StringOf_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "StringOf.cxx" #endif jade-1.2.1/include/StringResource.h100444 764 764 720 6606574406 14751 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef StringResource_INCLUDED #define StringResource_INCLUDED 1 #include "StringOf.h" #include "Resource.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class StringResource : public String, public Resource { public: StringResource(const String &s) : String(s) { } }; #ifdef SP_NAMESPACE } #endif #endif /* not StringResource_INCLUDED */ jade-1.2.1/include/SubstTable.cxx100444 764 764 3737 6606574406 14451 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef SubstTable_DEF_INCLUDED #define SubstTable_DEF_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template SubstTable::SubstTable() : pairsValid_(1) { } template void SubstTable::addSubst(T from, T to) { if (table_.size() == 0) { table_.resize(T(-1) + 1); #if _MSC_VER == 1100 // Workaround for Visual C++ 5.0 bug. T n = 0; int i = 0; while (i < T(-1) + 1) table_[i++] = n++; #else for (int i = 0; i < T(-1) + 1; i++) table_[i] = i; #endif } if (table_[from] != to) pairsValid_ = 0; table_[from] = to; } template String SubstTable::inverse(T ch) const { if (!pairsValid_) { const T *p = table_.data(); size_t length = table_.size(); for (size_t i = 0; i < length; i++) if (p[i] != i) { // FIXME use mutable if available ((SubstTable *)this)->pairs_ += T(i); ((SubstTable *)this)->pairs_ += p[i]; } ((SubstTable *)this)->pairsValid_ = 1; } const T *p = pairs_.data(); if (!p) return String(&ch, 1); String result; if (table_[ch] == ch) result += ch; for (size_t n = pairs_.size(); n > 0; n -= 2, p += 2) if (p[1] == ch) result += p[0]; return result; } template void SubstTable::inverseTable(SubstTable &inv) const { if (table_.size() == 0) { inv.table_.resize(0); inv.pairs_.resize(0); inv.pairsValid_ = 1; } else { if (inv.table_.size() == 0) inv.table_.resize(T(-1) + 1); int i; for (i = 0; i < T(-1) + 1; i++) inv.table_[i] = i; inv.pairs_.resize(0); inv.pairsValid_ = 0; for (i = 0; i < T(-1) + 1; i++) if (table_[i] != i) inv.table_[table_[i]] = i; } } template void SubstTable::subst(String &str) const { for (size_t i = 0; i < str.size(); i++) subst(str[i]); } #ifdef SP_NAMESPACE } #endif #endif /* not SubstTable_DEF_INCLUDED */ jade-1.2.1/include/SubstTable.h100444 764 764 1463 6606574406 14070 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef SubstTable_INCLUDED #define SubstTable_INCLUDED #include #include "StringOf.h" #include "Boolean.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class SubstTable { public: SubstTable(); void addSubst(T from, T to); void subst(T &c) const { if (table_.size() > 0) c = table_[c]; } void subst(String &) const; T operator[](T c) const { return table_.size() > 0 ? table_[c] : c; } String inverse(T) const; void inverseTable(SubstTable &) const; private: String table_; String pairs_; // mutable Boolean pairsValid_; // mutable }; #ifdef SP_NAMESPACE } #endif #endif /* SubstTable_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "SubstTable.cxx" #endif jade-1.2.1/include/Syntax.h100444 764 764 25132 6604607560 13321 0ustar jjcjjc// 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_NAMESPACE namespace SP_NAMESPACE { #endif class 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 *charSet(int i) const; const SubstTable *generalSubstTable() const; const SubstTable *entitySubstTable() const; const SubstTable &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 &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 &shortrefChars, const CharsetInfo &charset); void addNameCharacters(const ISet &); void addNameStartCharacters(const ISet &); void addSubst(Char lc, Char uc); void addShunchar(Char); void setShuncharControls(); void setQuantity(int, Number); void setName(int, const StringC &); void setSgmlChar(const ISet &); void implySgmlChar(const Sd &); // :: is for Watcom 10.0a void checkSgmlChar(const Sd &, const ::SP_NAMESPACE_SCOPE Syntax *otherSyntax, Boolean invalidUseDocumentCharset, ISet &invalid) const; static int referenceQuantity(Quantity); const XcharMap &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 &invalid) const; ISet shunchar_; PackedBoolean shuncharControls_; ISet set_[nSet]; Char standardFunction_[3]; PackedBoolean standardFunctionValid_[3]; Boolean namecaseGeneral_; Boolean namecaseEntity_; StringC delimGeneral_[nDelimGeneral]; Vector delimShortrefComplex_; ISet delimShortrefSimple_; StringC names_[nNames]; Number quantity_[nQuantity]; HashTable nameTable_; HashTable functionTable_; SubstTable upperSubst_; SubstTable identitySubst_; const SubstTable *generalSubst_; const SubstTable *entitySubst_; XcharMap categoryTable_; Boolean multicode_; XcharMap markupScanTable_; Vector 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 *Syntax::generalSubstTable() const { return generalSubst_; } inline const SubstTable *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 &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 *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 &set) { set_[sgmlChar] = set; } inline int Syntax::referenceQuantity(Quantity i) { return referenceQuantity_[i]; } inline void Syntax::setShuncharControls() { shuncharControls_ = 1; } inline const XcharMap &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 */ jade-1.2.1/include/Text.h100444 764 764 11564 6606574406 12767 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Text_INCLUDED #define Text_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "StringC.h" #include "Vector.h" #include "Location.h" #include "SubstTable.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct SP_API TextItem { TextItem(); enum Type { data, cdata, sdata, nonSgml, entityStart, entityEnd, startDelim, endDelim, endDelimA, ignore }; Type type; // char that was ignored Char c; // location of this item // data - location of first char // (c/sdata)entityStart - location of first char of entity // (c/sdata)entityEnd - location of entity end in entity // ignore - location of ignored character // startDelim - location of first char of delimiter // endDelim(A) - location of first char of delimiter Location loc; // index of character in chars_ to which this applies size_t index; }; // This is used to represent literals and attribute values. class SP_API Text { public: Text(); void clear(); void swap(Text &to); void addChar(Char c, const Location &); void addChars(const StringC &, const Location &); void addChars(const Char *, size_t, const Location &); void insertChars(const StringC &, const Location &); void ignoreChar(Char, const Location &); void ignoreLastChar(); void addNonSgmlChar(Char c, const Location &); void addEntityStart(const Location &); void addEntityEnd(const Location &); void addCdata(const StringC &, const ConstPtr &); void addSdata(const StringC &, const ConstPtr &); void addStartDelim(const Location &loc); void addEndDelim(const Location &loc, Boolean lita); void subst(const SubstTable &, Char space); void addCharsTokenize(const Char *, size_t, const Location &loc, Char space); void addCharsTokenize(const StringC &, const Location &loc, Char space); void tokenize(Char space, Text &text) const; Location charLocation(size_t i) const; Boolean charLocation(size_t, const Origin *&, Index &) const; Boolean charLocation(size_t i, const ConstPtr *&, Index &) const; size_t size() const; Char lastChar() const; const StringC &string() const; size_t normalizedLength(size_t normsep) const; Boolean fixedEqual(const Text &) const; // Location of first char of start delimiter. Boolean startDelimLocation(Location &) const; // Location of first char of end delimiter Boolean endDelimLocation(Location &) const; // Is delimiter a lit or lita? Boolean delimType(Boolean &lita) const; private: void addSimple(TextItem::Type, const Location &); StringC chars_; Vector items_; friend class TextIter; }; class SP_API TextIter { public: TextIter(const Text &); void rewind(); Boolean next(TextItem::Type &, const Char *&, size_t &, const Location *&); // Alternative interface to next() Boolean valid() const; void advance(); TextItem::Type type() const; const Location &location() const; const Char *chars(size_t &length) const; private: const TextItem *ptr_; const Text *text_; }; inline size_t Text::size() const { return chars_.size(); } inline Char Text::lastChar() const { return chars_[chars_.size() - 1]; } inline const StringC &Text::string() const { return chars_; } inline void Text::addEntityStart(const Location &loc) { addSimple(TextItem::entityStart, loc); } inline void Text::addEntityEnd(const Location &loc) { addSimple(TextItem::entityEnd, loc); } inline void Text::addChars(const StringC &s, const Location &loc) { addChars(s.data(), s.size(), loc); } inline void Text::addStartDelim(const Location &loc) { addSimple(TextItem::startDelim, loc); } inline void Text::addEndDelim(const Location &loc, Boolean lita) { addSimple(lita ? TextItem::endDelimA : TextItem::endDelim, loc); } inline void Text::addCharsTokenize(const StringC &str, const Location &loc, Char space) { addCharsTokenize(str.data(), str.size(), loc, space); } inline Location Text::charLocation(size_t i) const { const ConstPtr *originP; Index index; if (charLocation(i, originP, index)) return Location(*originP, index); else return Location(); } inline Boolean Text::charLocation(size_t i, const Origin *&origin, Index &index) const { const ConstPtr *originP; if (charLocation(i, originP, index)) { origin = originP->pointer(); return 1; } else return 0; } inline void TextIter::rewind() { ptr_ = text_->items_.begin(); } inline void TextIter::advance() { ptr_++; } inline Boolean TextIter::valid() const { return ptr_ != (text_->items_.begin() + text_->items_.size()); } inline const Location &TextIter::location() const { return ptr_->loc; } inline TextItem::Type TextIter::type() const { return ptr_->type; } #ifdef SP_NAMESPACE } #endif #endif /* not Text_INCLUDED */ jade-1.2.1/include/TranslateCodingSystem.h100444 764 764 2715 6604607560 16303 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifndef TranslateCodingSystem_INCLUDED #define TranslateCodingSystem_INCLUDED 1 #include "CodingSystem.h" #include "Ptr.h" #include "CharMap.h" #include "CharsetRegistry.h" #include "types.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API TranslateCodingSystem : public CodingSystem { public: struct Desc { CharsetRegistry::ISORegistrationNumber number; // How much to add to the values in the base set. Char add; }; // codingSystem is the underlying BCTF // desc describes the meaning of the bit combinations produced by that BCTF // charset is the system character set // replacementChar is character in systemCharset that should be used to represent // characters that do not exist in the systemCharset. // illegalChar is a code that can never be produced by the underlying BCTF. TranslateCodingSystem(const CodingSystem *codingSystem, const Desc *desc, const CharsetInfo *charset, Char illegalChar, Char replacementChar); Decoder *makeDecoder() const; Encoder *makeEncoder() const; unsigned fixedBytesPerChar() const; private: ConstPtr > decodeMap_; ConstPtr > encodeMap_; const CodingSystem *sub_; const Desc *desc_; const CharsetInfo *charset_; Char illegalChar_; Char replacementChar_; }; #ifdef SP_NAMESPACE } #endif #endif /* not TranslateCodingSystem_INCLUDED */ jade-1.2.1/include/TypeId.h100444 764 764 1312 6604607560 13203 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef TypeId_INCLUDED #define TypeId_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API TypeId { public: TypeId(const void *const *bases) : bases_(bases) { } // Is this object of type ti? int isA(TypeId ti) const; // Can an object with this dynamic type be cast from a static type FROM // to a static type TO? int canCast(TypeId to, TypeId from) const; int operator==(TypeId ti) const { return bases_ == ti.bases_; } int operator!=(TypeId ti) const { return bases_ != ti.bases_; } private: const void *const *bases_; }; #ifdef SP_NAMESPACE } #endif #endif /* not TypeId_INCLUDED */ jade-1.2.1/include/URLStorage.h100444 764 764 1766 6604607560 14011 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifndef URLStorage_INCLUDED #define URLStorage_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "StorageManager.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API URLStorageManager : public IdStorageManager { public: URLStorageManager(const char *type); StorageObject *makeStorageObject(const StringC &id, const StringC &baseId, Boolean search, Boolean mayRewind, Messenger &, StringC &found); const char *type() const; Boolean guessIsId(const StringC &, const CharsetInfo &) const; Boolean transformNeutral(StringC &, Boolean fold, Messenger &) const; private: Boolean resolveRelative(const StringC &base, StringC &specId, Boolean) const; URLStorageManager(const URLStorageManager &); // undefined void operator=(const URLStorageManager &); // undefined const char *type_; }; #ifdef SP_NAMESPACE } #endif #endif /* not URLStorage_INCLUDED */ jade-1.2.1/include/UTF8CodingSystem.h100444 764 764 665 6604607560 15056 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef UTF8CodingSystem_INCLUDED #define UTF8CodingSystem_INCLUDED 1 #include "CodingSystem.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API UTF8CodingSystem : public CodingSystem { public: Decoder *makeDecoder() const; Encoder *makeEncoder() const; }; #ifdef SP_NAMESPACE } #endif #endif /* not UTF8CodingSystem_INCLUDED */ jade-1.2.1/include/UnicodeCodingSystem.h100444 764 764 1112 6604607560 15722 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef UnicodeCodingSystem_INCLUDED #define UnicodeCodingSystem_INCLUDED 1 #include "CodingSystem.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API UnicodeCodingSystem : public CodingSystem { public: UnicodeCodingSystem(const InputCodingSystem *sub = 0); Decoder *makeDecoder() const; Encoder *makeEncoder() const; unsigned fixedBytesPerChar() const; private: const InputCodingSystem *sub_; }; #ifdef SP_NAMESPACE } #endif #endif /* not UnicodeCodingSystem_INCLUDED */ jade-1.2.1/include/UnivCharsetDesc.h100444 764 764 6555 6604607560 15055 0ustar jjcjjc// Copyright (c) 1994, 1997 James Clark // See the file COPYING for copying permission. #ifndef UnivCharsetDesc_INCLUDED #define UnivCharsetDesc_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include #include "types.h" #include "CharMap.h" #include "RangeMap.h" #include "Boolean.h" #include "ISet.h" #include "constant.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API UnivCharsetDesc { public: struct SP_API Range { WideChar descMin; // Note that this is a count, as in the SGML declaration, // rather than a maximum. unsigned long count; UnivChar univMin; }; enum { zero = 48, A = 65, a = 97, tab = 9, rs = 10, re = 13, space = 32, exclamation = 33, lessThan = 60, greaterThan = 62 }; UnivCharsetDesc(); UnivCharsetDesc(const Range *, size_t); void set(const Range *, size_t); Boolean descToUniv(WideChar from, UnivChar &to) const; Boolean descToUniv(WideChar from, UnivChar &to, WideChar &alsoMax) const; // Return 0 for no matches, 1 for 1, 2 for more than 1 unsigned univToDesc(UnivChar from, WideChar &to, ISet &toSet) const; unsigned univToDesc(UnivChar from, WideChar &to, ISet &toSet, WideChar &count) const; void addRange(WideChar descMin, WideChar descMax, UnivChar univMin); void addBaseRange(const UnivCharsetDesc &baseSet, WideChar descMin, WideChar descMax, WideChar baseMin, ISet &baseMissing); private: static Boolean noDesc(Unsigned32 n) { return (n & (unsigned(1) << 31)); } static UnivChar extractChar(Unsigned32 n, Char ch) { return UnivChar((n + ch) & ((unsigned(1) << 31) - 1)); } static Unsigned32 wrapChar(UnivChar univ, Char ch) { return Unsigned32((univ - ch) & ((unsigned(1) << 31) - 1)); } // For characters <= charMax.< CharMap charMap_; // For characters > charMax. RangeMap rangeMap_; friend class UnivCharsetDescIter; }; class SP_API UnivCharsetDescIter { public: UnivCharsetDescIter(const UnivCharsetDesc &); Boolean next(WideChar &descMin, WideChar &descMax, UnivChar &univMin); void skipTo(WideChar); private: const CharMap *charMap_; Char nextChar_; Boolean doneCharMap_; RangeMapIter rangeMapIter_; }; inline Boolean UnivCharsetDesc::descToUniv(WideChar from, UnivChar &to) const { if (from > charMax) { WideChar tem; return rangeMap_.map(from, to, tem); } else { Unsigned32 tem = charMap_[from]; if (noDesc(tem)) return 0; else { to = extractChar(tem, from); return 1; } } } inline Boolean UnivCharsetDesc::descToUniv(WideChar from, UnivChar &to, WideChar &alsoMax) const { if (from > charMax) return rangeMap_.map(from, to, alsoMax); else { Char max; Unsigned32 tem = charMap_.getRange(from, max); alsoMax = max; if (noDesc(tem)) return 0; else { to = extractChar(tem, from); return 1; } } } inline unsigned UnivCharsetDesc::univToDesc(UnivChar from, WideChar &to, ISet &toSet) const { WideChar tem; return univToDesc(from, to, toSet, tem); } inline void UnivCharsetDescIter::skipTo(WideChar ch) { if (ch > charMax) doneCharMap_ = 1; else nextChar_ = ch; } #ifdef SP_NAMESPACE } #endif #endif /* not UnivCharsetDesc_INCLUDED */ jade-1.2.1/include/Vector.cxx100444 764 764 6056 6604607560 13634 0ustar jjcjjc// Copyright (c) 1994, 1996 James Clark // See the file COPYING for copying permission. #ifndef Vector_DEF_INCLUDED #define Vector_DEF_INCLUDED 1 #include #include #ifdef SP_QUAL_TEMPLATE_DTOR_BROKEN #define DTOR(T) ~T #else #define DTOR(T) T::~T #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template Vector::~Vector() { if (ptr_) { erase(ptr_, ptr_ + size_); ::operator delete((void *)ptr_); } } #ifndef NC template Vector::Vector(const Vector &v) : ptr_(0), size_(0), alloc_(0) { insert(ptr_ + size_, v.ptr_, v.ptr_ + v.size_); } template Vector::Vector(size_t n, const T &t) : ptr_(0), size_(0), alloc_(0) { insert(ptr_ + size_, n, t); } template Vector &Vector::operator=(const Vector &v) { if (&v != this) { size_t n = v.size_; if (n > size_) { n = size_; insert(ptr_ + size_, v.ptr_ + size_, v.ptr_ + v.size_); } else if (n < size_) erase(ptr_ + n, ptr_ + size_); while (n-- > 0) ptr_[n] = v.ptr_[n]; } return *this; } template void Vector::assign(size_t n, const T &t) { size_t sz = n; if (n > size_) { sz = size_; insert(ptr_ + size_, n - size_, t); } else if (n < size_) erase(ptr_ + n, ptr_ + size_); while (sz-- > 0) ptr_[sz] = t; } template void Vector::insert(const T *p, size_t n, const T &t) { size_t i = p - ptr_; reserve(size_ + n); if (i != size_) memmove(ptr_ + i + n, ptr_ + i, (size_ - i)*sizeof(T)); for (T *pp = ptr_ + i; n-- > 0; pp++) { (void)new (pp) T(t); size_++; } } template void Vector::insert(const T *p, const T *q1, const T *q2) { size_t i = p - ptr_; size_t n = q2 - q1; reserve(size_ + n); if (i != size_) memmove(ptr_ + i + n, ptr_ + i, (size_ - i)*sizeof(T)); for (T *pp = ptr_ + i; q1 != q2; q1++, pp++) { (void)new (pp) T(*q1); size_++; } } #endif template void Vector::swap(Vector &v) { { T *tem = ptr_; ptr_ = v.ptr_; v.ptr_ = tem; } { size_t tem = size_; size_ = v.size_; v.size_ = tem; } { size_t tem = alloc_; alloc_ = v.alloc_; v.alloc_ = tem; } } template void Vector::append(size_t n) { reserve(size_ + n); while (n-- > 0) (void)new (ptr_ + size_++) T; } template T *Vector::erase(const T *p1, const T *p2) { typedef T X; for (const T *p = p1; p != p2; p++) ((X *)p)->~X(); if (p2 != ptr_ + size_) memmove((T *)p1, p2, ((const T *)(ptr_ + size_) - p2)*sizeof(T)); size_ -= p2 - p1; return (T *)p1; } template void Vector::reserve1(size_t size) { // Try to preserve a consistent start in the // event of an out of memory exception. size_t newAlloc = alloc_*2; if (size > newAlloc) newAlloc += size; void *p = ::operator new(newAlloc * sizeof(T)); alloc_ = newAlloc; if (ptr_) { memcpy(p, ptr_, size_*sizeof(T)); ::operator delete((void *)ptr_); } ptr_ = (T *)p; } #ifdef SP_NAMESPACE } #endif #endif /* not Vector_DEF_INCLUDED */ jade-1.2.1/include/Vector.h100444 764 764 3730 6604607560 13255 0ustar jjcjjc// Copyright (c) 1994, 1996 James Clark // See the file COPYING for copying permission. #ifndef Vector_INCLUDED #define Vector_INCLUDED 1 #include #include "xnew.h" // This offers a subset of the interface offered by the standard C++ // vector class as defined in the Jan 96 WP. // Code in SP currently assumes that size_type is size_t. #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class Vector { public: typedef size_t size_type; typedef T *iterator; typedef const T *const_iterator; Vector() : ptr_(0), size_(0), alloc_(0) { } Vector(size_t n) : ptr_(0), size_(0), alloc_(0) { append(n); } ~Vector(); void resize(size_t n) { if (n < size_) erase(ptr_ + n, ptr_ + size_); else if (n > size_) append(n - size_); } #ifndef NC Vector(size_t, const T &); Vector(const Vector &); Vector &operator=(const Vector &); void assign(size_t, const T &); void push_back(const T &t) { reserve(size_ + 1); (void)new (ptr_ + size_) T(t); size_++; } void insert(const_iterator p, size_t n, const T &t); void insert(const_iterator p, const_iterator q1, const_iterator q2); #endif void swap(Vector &); void clear() { erase(ptr_, ptr_ + size_); } size_t size() const { return size_; } T &operator[](size_t i) { return ptr_[i]; } const T &operator[](size_t i) const { return ptr_[i]; } iterator begin() { return ptr_; } const_iterator begin() const { return ptr_; } T &back() { return ptr_[size_ - 1]; } const T &back() const { return ptr_[size_ - 1]; } void reserve(size_t n) { if (n > alloc_) reserve1(n); } iterator erase(const_iterator, const_iterator); private: #ifdef NC Vector(const Vector &); void operator=(const Vector &); #endif void append(size_t); void reserve1(size_t); size_t size_; T *ptr_; size_t alloc_; // allocated size }; #ifdef SP_NAMESPACE } #endif #endif /* not Vector_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "Vector.cxx" #endif jade-1.2.1/include/Win32CodingSystem.h100444 764 764 1425 6604607560 15245 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef Win32CodingSystem_INCLUDED #define Win32CodingSystem_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "CodingSystem.h" #include "Boolean.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API Win32CodingSystem : public CodingSystem { public: enum SpecialCodePage { codePageOEM, codePageAnsi }; Win32CodingSystem(unsigned int codePage, Char defaultChar = 0xfffd); Win32CodingSystem(SpecialCodePage, Char defaultChar = 0xfffd); Boolean isValid() const; Decoder *makeDecoder() const; Encoder *makeEncoder() const; private: unsigned int codePage_; Char defaultChar_; }; #ifdef SP_NAMESPACE } #endif #endif /* not Win32CodingSystem_INCLUDED */ jade-1.2.1/include/WinApp.h100444 764 764 4362 6604607560 13213 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifndef WinApp_INCLUDED #define WinApp_INCLUDED 1 #include "Event.h" #include "Vector.h" #include "StringC.h" #include "CharsetInfo.h" #include "ParserOptions.h" #include "SgmlParser.h" #include "Ptr.h" #include "CodingSystemKit.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API WinApp { public: WinApp(); ParserOptions options; Boolean setEncoding(StringC &tem); const StringC &encoding() const; Boolean setDefaultEncoding(StringC &tem); const StringC &defaultEncoding() const; // These are semi-colon delimited lists of system identifiers. void setExtraCatalogs(StringC &tem); const StringC &extraCatalogs() const; void setDefaultCatalogs(StringC &tem); const StringC &defaultCatalogs() const; void setExtraDirectories(StringC &tem); const StringC &extraDirectories() const; void setDefaultDirectories(StringC &tem); const StringC &defaultDirectories() const; void initParser(const StringC &, SgmlParser &); void initParser(const StringC &sysid, SgmlParser &, Ptr &); private: static void setRegistry(const char *name, const StringC &value); static Boolean getRegistry(const char *name, StringC &value); const InputCodingSystem *getCodingSystem(const StringC &name); StringC extraCatalogs_; StringC defaultCatalogs_; StringC extraDirectories_; StringC defaultDirectories_; StringC encoding_; StringC defaultEncoding_; ConstPtr codingSystemKit_; }; inline const StringC &WinApp::encoding() const { return encoding_; } inline const StringC &WinApp::defaultEncoding() const { return defaultEncoding_; } inline const StringC &WinApp::extraCatalogs() const { return extraCatalogs_; } inline void WinApp::setExtraCatalogs(StringC &str) { str.swap(extraCatalogs_); } inline const StringC &WinApp::defaultCatalogs() const { return defaultCatalogs_; } inline const StringC &WinApp::extraDirectories() const { return extraDirectories_; } inline void WinApp::setExtraDirectories(StringC &str) { str.swap(extraDirectories_); } inline const StringC &WinApp::defaultDirectories() const { return defaultDirectories_; } #ifdef SP_NAMESPACE } #endif #endif /* not WinApp_INCLUDED */ jade-1.2.1/include/WinInetStorage.h100444 764 764 2064 6604607560 14714 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef WinInetStorage_INCLUDED #define WinInetStorage_INCLUDED 1 #include "StorageManager.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SP_API WinInetStorageManager : public IdStorageManager { public: WinInetStorageManager(const char *type); ~WinInetStorageManager(); StorageObject *makeStorageObject(const StringC &id, const StringC &baseId, Boolean search, Boolean mayRewind, Messenger &, StringC &found); const char *type() const; Boolean guessIsId(const StringC &, const CharsetInfo &) const; Boolean transformNeutral(StringC &, Boolean fold, Messenger &) const; private: Boolean resolveRelative(const StringC &base, StringC &specId, Boolean) const; WinInetStorageManager(const WinInetStorageManager &); // undefined void operator=(const WinInetStorageManager &); // undefined Boolean initSession(); const char *type_; void *session_; }; #ifdef SP_NAMESPACE } #endif #endif /* not WinInetStorage_INCLUDED */ jade-1.2.1/include/XMLCodingSystem.h100444 764 764 1054 6604607560 15001 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifndef XMLCodingSystem_INCLUDED #define XMLCodingSystem_INCLUDED 1 #include "CodingSystem.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class InputCodingSystemKit; class SP_API XMLCodingSystem : public CodingSystem { public: XMLCodingSystem(const InputCodingSystemKit *); Decoder *makeDecoder() const; Encoder *makeEncoder() const; private: const InputCodingSystemKit *kit_; }; #ifdef SP_NAMESPACE } #endif #endif /* not XMLCodingSystem_INCLUDED */ jade-1.2.1/include/XcharMap.cxx100444 764 764 1531 6604607560 14066 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef XcharMap_DEF_INCLUDED #define XcharMap_DEF_INCLUDED 1 #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template SharedXcharMap::SharedXcharMap() { } template SharedXcharMap::SharedXcharMap(T defaultValue) { for (size_t i = 0; i < sizeof(v)/sizeof(v[0]); i++) v[i] = defaultValue; } template XcharMap::XcharMap() : ptr_(0) { } template XcharMap::XcharMap(T defaultValue) : sharedMap_(new SharedXcharMap(defaultValue)) { ptr_ = sharedMap_->ptr(); } template void XcharMap::setRange(Char min, Char max, T val) { if (min <= max) { do { ptr_[min] = val; } while (min++ != max); } } #ifdef SP_NAMESPACE } #endif #endif /* not XcharMap_DEF_INCLUDED */ jade-1.2.1/include/XcharMap.h100444 764 764 1676 6604607560 13525 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef XcharMap_INCLUDED #define XcharMap_INCLUDED 1 #include "types.h" #include "Resource.h" #include "Ptr.h" #include "constant.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template class SharedXcharMap : public Resource { public: SharedXcharMap(); SharedXcharMap(T defaultValue); T *ptr() { return v + 1; } private: T v[2 + charMax]; }; template class XcharMap { public: XcharMap(); XcharMap(T defaultValue); T operator[](Xchar c) const { return ptr_[c]; } void setRange(Char min, Char max, T val); void setChar(Char c, T val) { ptr_[c] = val; } void setEe(T val) { ptr_[-1] = val; } void clear() { ptr_ = 0; sharedMap_.clear(); } private: T *ptr_; Ptr > sharedMap_; }; #ifdef SP_NAMESPACE } #endif #endif /* not XcharMap_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "XcharMap.cxx" #endif jade-1.2.1/include/config.h100444 764 764 15721 6607315146 13302 0ustar jjcjjc// Copyright (c) 1994, 1995, 1996 James Clark // See the file COPYING for copying permission. #ifndef config_INCLUDED #define config_INCLUDED 1 #define SP_INCLUDE_UNISTD_H #define SP_POSIX_FILENAMES #ifdef __GNUG__ // It's not missing, but it pulls in libg++ #define SP_NEW_H_MISSING // set_new_handler() has to be declared extern "C" #define SP_SET_NEW_HANDLER_EXTERN_C #ifndef SP_MANUAL_INST #define SP_MANUAL_INST #endif #ifndef SP_ANSI_CLASS_INST #define SP_ANSI_CLASS_INST #endif #ifndef SP_HAVE_BOOL #define SP_HAVE_BOOL #endif #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) #define SP_ANSI_FOR_SCOPE #endif #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8) #define SP_ANSI_LIB #define SP_NO_STD_NAMESPACE #undef SP_NEW_H_MISSING #endif #endif /* __GNUG__ */ #if defined(sun) || defined(__sun) // struct stat has st_blksize member #define SP_STAT_BLKSIZE #endif #ifdef __MACH__ #define SP_MUTEX_MACH #endif #ifdef __EMX__ // EMX 0.9a for OS/2 #undef SP_POSIX_FILENAMES #define SP_MSDOS_FILENAMES #endif #ifdef _MSC_VER // Microsoft Visual C++ 4.0 #undef SP_INCLUDE_UNISTD_H #define SP_INCLUDE_IO_H #ifndef SP_ANSI_CLASS_INST #define SP_ANSI_CLASS_INST #endif #undef SP_POSIX_FILENAMES #define SP_MSDOS_FILENAMES #define SP_SHORT_HEADERS #pragma warning ( disable : 4660 ) // already instantiated #pragma warning ( disable : 4661 ) // missing def for decl member #pragma warning ( disable : 4786 ) // debug symbol truncated (>255 chars) #pragma warning ( disable : 4018 ) // signed/unsigned mismatch #pragma warning ( disable : 4251 ) // __declspec(dllexport) #pragma warning ( disable : 4275 ) #pragma warning ( disable : 4237 ) // future reserved keyword #define huge verybig #if _MSC_VER == 900 #define SP_DECLARE_PLACEMENT_OPERATOR_NEW #endif #define set_new_handler _set_new_handler // Function passed to set_new_handler() returns int and takes size_t argument. #define SP_FANCY_NEW_HANDLER #if _MSC_VER >= 1100 // Visual C++ 5.0 #define SP_HAVE_BOOL #define SP_SIZEOF_BOOL_1 #pragma warning ( disable : 4800 ) // forcing value to bool 'true' or // 'false' (performance warning) #endif #if _MSC_VER >= 1200 // Visual C++ 6.0 #define SP_HAVE_PLACEMENT_OPERATOR_DELETE #define SP_HAVE_TYPENAME #endif #define SP_HAVE_SETMODE #define SP_DLLEXPORT __declspec(dllexport) #define SP_DLLIMPORT __declspec(dllimport) #ifdef _DLL #define SP_USE_DLL #endif #ifdef SP_USE_DLL #ifndef BUILD_LIBSP // It's not possible to export templates using __declspec(dllexport), // so instead we include the template definitions in the headers, // which allows Visual C++ to instantiate any needed templates // in the client. #define SP_DEFINE_TEMPLATES #endif #endif /* SP_USE_DLL */ #ifndef SP_MANUAL_INST #ifndef SP_DEFINE_TEMPLATES #define SP_MANUAL_INST #endif #endif /* not SP_MANUAL_INST */ #ifdef SP_MULTI_BYTE #define SP_WIDE_SYSTEM #endif // wchar_t's base type is an unsigned short #define SP_WCHAR_T_USHORT // Enable precompiled header support. #define SP_PCH // Don't compile in message text. #define SP_NO_MESSAGE_TEXT #ifdef _MT // Use Win32 critical section facilities #define SP_MUTEX_WIN32 // Use the new Standard C++ library #define SP_ANSI_LIB #if _MSC_VER < 1100 // Versions prior to 5.0 don't use the std namespace #define SP_NO_STD_NAMESPACE #endif #endif /* _MT */ #endif /* _MSC_VER */ #ifdef __WATCOMC__ // Watcom C++ 10.0a #define SP_MANUAL_INST #undef SP_POSIX_FILENAMES #define SP_MSDOS_FILENAMES #undef SP_INCLUDE_UNISTD_H #define SP_INCLUDE_IO_H #pragma warning 004 9 #undef huge // Cannot handle T::~T in template. #define SP_QUAL_TEMPLATE_DTOR_BROKEN #define SP_HAVE_SETMODE #define _setmode setmode #if __WATCOMC__ < 1050 #define _O_BINARY O_BINARY #endif #define SP_WCHAR_T_USHORT #if __WATCOMC__ >= 1100 #define SP_HAVE_BOOL // #define SP_SIZEOF_BOOL_1 #endif #endif /* __WATCOMC__ */ #ifdef __BORLANDC__ // Borland C++ 5.0 #define SP_ANSI_FOR_SCOPE #define SP_HAVE_RTTI #define SP_HAVE_SETMODE #undef SP_INCLUDE_UNISTD_H #define SP_INCLUDE_IO_H #undef SP_POSIX_FILENAMES #define SP_MSDOS_FILENAMES #define SP_HAVE_BOOL #define SP_SHORT_HEADERS #define _O_BINARY O_BINARY #define _setmode setmode #define SP_ANSI_CLASS_INST #define SP_MANUAL_INST // Building as a DLL doesn't work with Borland C++ yet. #define SP_DLLEXPORT __declspec(dllexport) #define SP_DLLIMPORT __declspec(dllimport) #ifdef SP_USE_DLL #ifndef BUILD_LIBSP #define SP_DEFINE_TEMPLATES #endif #endif /* SP_USE_DLL */ #define SP_WCHAR_T_USHORT #endif /* __BORLANDC__ */ #ifdef __IBMCPP__ // IBM CSet++ 2.1 from Horst Szillat . #undef SP_POSIX_FILENAMES #define SP_MANUAL_INST #define SP_SHORT_HEADERS #define SP_MSDOS_FILENAMES #undef SP_INCLUDE_UNISTD_H #define SP_INCLUDE_IO_H #define S_IFMT (S_IFDIR|S_IFCHR|S_IFREG) #endif #ifdef __xlC__ // IBM CSet++ 3.1 on AIX 4.1. // Use CXX=xlC and CC=xlC in the Makefile. // Note that -g creates massive executables and that -O // takes ages to compile and creates core dumping executables! // I havn't tried the socket stuff. // #define SP_MANUAL_INST #define SP_HAVE_LOCALE #define SP_STAT_BLKSIZE #endif /* __xlC__ */ #ifdef macintosh // Apple MacOS. Tested only with Metrowerks CW10. // From Ashley Colin Yakeley #undef SP_POSIX_FILENAMES #define SP_MAC_FILENAMES #define SP_LINE_TERM1 '\r' #ifdef __MWERKS__ // Metrowerks for some platform (MacOS in this case) #pragma mpwc_newline off #define SP_DEFINE_TEMPLATES // #define SP_USE_DLL -- __declspec doesn't work with classes (yet) #ifdef SP_USE_DLL #define SP_DLLEXPORT __declspec(export) #define SP_DLLIMPORT __declspec(import) #endif // SP_USE_DLL #if __MWERKS__ >= 0x1000 // bool option only defined for CW10 and later (note __MWERKS__ is BCD) #if __option(bool) #define SP_HAVE_BOOL #endif // __option(bool) #endif // __MWERKS__ >= 0x1000 #endif // __MWERKS__ #if ('\n' != 10) || ('\r' != 13) #error "newlines incorrect" #endif #endif /* macintosh */ #ifdef SP_HAVE_SETMODE #ifndef SP_LINE_TERM1 #define SP_LINE_TERM1 '\r' #define SP_LINE_TERM2 '\n' #endif #endif /* not SP_HAVE_SETMODE */ #ifndef SP_LINE_TERM1 #define SP_LINE_TERM1 '\n' #endif #ifndef SP_ANSI_FOR_SCOPE // This simulates the new ANSI "for" scope rules #define for if (0); else for #endif #ifndef SP_HAVE_TYPENAME #define typename /* as nothing */ #endif #ifndef SP_DLLEXPORT #define SP_DLLEXPORT /* as nothing */ #endif #ifndef SP_DLLIMPORT #define SP_DLLIMPORT /* as nothing */ #endif #ifdef SP_USE_DLL #ifdef BUILD_LIBSP #define SP_API SP_DLLEXPORT #else #define SP_API SP_DLLIMPORT #endif #else /* not SP_USE_DLL */ #define SP_API /* as nothing */ #endif /* not SP_USE_DLL */ // SP_WIDE_SYSTEM says that your OS provides wide character interfaces // SP_WIDE_SYSTEM currently works only with Visual C++ and Windows NT/95 // SP_WIDE_SYSTEM implies SP_MULTI_BYTE #ifdef SP_WIDE_SYSTEM #ifndef SP_MULTI_BYTE #define SP_MULTI_BYTE #endif #endif #ifdef SP_NAMESPACE #define SP_NAMESPACE_SCOPE SP_NAMESPACE:: #else #define SP_NAMESPACE_SCOPE #endif #endif /* not config_INCLUDED */ jade-1.2.1/include/constant.h100444 764 764 524 6606574406 13626 0ustar jjcjjc#ifndef constant_INCLUDED #define constant_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const Char charMax = Char(-1); const WideChar wideCharMax = WideChar(-1); const UnivChar univCharMax = UnivChar(-1); const SyntaxChar syntaxCharMax = SyntaxChar(-1); #ifdef SP_NAMESPACE } #endif #endif /* not constant_INCLUDED */ jade-1.2.1/include/macros.h100444 764 764 1405 6606574406 13300 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef macros_INCLUDED #define macros_INCLUDED 1 #ifndef __GNUG__ #define __attribute__(args) /* as nothing */ #endif #ifdef NDEBUG #include #define ASSERT(expr) ((void)0) #define CANNOT_HAPPEN() ((void)abort()) #else /* not NDEBUG */ #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif extern SP_API void assertionFailed(const char *, const char *, int) __attribute__((noreturn)); #ifdef SP_NAMESPACE } #endif #define ASSERT(expr) \ ((void)((expr) || \ (::SP_NAMESPACE_SCOPE assertionFailed(# expr, __FILE__, __LINE__), 0))) #define CANNOT_HAPPEN() ASSERT(0) #endif /* not NDEBUG */ #define SIZEOF(v) (sizeof(v)/sizeof(v[0])) #endif /* not macros_INCLUDED */ jade-1.2.1/include/rtti.h100444 764 764 3077 6606574406 13005 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef rtti_INCLUDED #define rtti_INCLUDED 1 #ifdef SP_HAVE_RTTI #define DYNAMIC_CAST_PTR(T, p) dynamic_cast(p) #define DYNAMIC_CAST_CONST_PTR(T, p) dynamic_cast(p) #define RTTI_CLASS #define RTTI_DEF0(T) #define RTTI_DEF1(T, B1) #define RTTI_DEF2(T, B1, B2) #define RTTI_DEF3(T, B1, B2, B3) #else /* not SP_HAVE_RTTI */ #include "TypeId.h" #define RTTI_CLASS \ public: \ virtual TypeId dynamicType() const; \ static inline TypeId staticType() { return TypeId(RTTI_bases_); } \ protected: \ static const void *RTTI_bases_[]; \ private: #define RTTI_DEF0(T) \ const void *T::RTTI_bases_[] = { 0 }; \ TypeId T::dynamicType() const { return staticType(); } #define RTTI_DEF1(T, B1) \ const void *T::RTTI_bases_[] = { B1::RTTI_bases_, 0 }; \ TypeId T::dynamicType() const { return staticType(); } #define RTTI_DEF2(T, B1, B2) \ const void *T::RTTI_bases_[] = { B1::RTTI_bases_, B2::RTTI_bases_, 0 }; \ TypeId T::dynamicType() const { return staticType(); } #define RTTI_DEF3(T, B1, B2, B3) \ const void *T::RTTI_bases_[] = { \ B1::RTTI_bases_, B2::RTTI_bases_, B3::RTTI_bases_, 0 }; \ TypeId T::dynamicType() const { return staticType(); } #define DYNAMIC_CAST_PTR(T, p) \ ((p) && (p)->dynamicType().canCast(T::staticType(), (p)->staticType()) \ ? (T *)(p) \ : 0) #define DYNAMIC_CAST_CONST_PTR(T, p) \ ((p) && (p)->dynamicType().canCast(T::staticType(), (p)->staticType()) \ ? (const T *)p \ : 0) #endif /* not SP_HAVE_RTTI */ #endif /* not rtti_INCLUDED */ jade-1.2.1/include/sptchar.h100444 764 764 4231 6606574406 13460 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef sptchar_INCLUDED #define sptchar_INCLUDED 1 #include #include #include #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_WIDE_SYSTEM typedef wchar_t SP_TCHAR; typedef wchar_t SP_TUCHAR; #define SP_T(x) L ## x inline wchar_t *tgetenv(const wchar_t *s) { return _wgetenv(s); } inline int tcscmp(const wchar_t *s1, const wchar_t *s2) { return wcscmp(s1, s2); } inline int tcsncmp(const wchar_t *s1, const wchar_t *s2, size_t n) { return wcsncmp(s1, s2, n); } inline unsigned long tcstoul(const wchar_t *s, const wchar_t **sp, int base) { return wcstoul((wchar_t *)s, (wchar_t **)sp, base); } inline unsigned long tcstoul(wchar_t *s, wchar_t **sp, int base) { return wcstoul(s, sp, base); } inline const wchar_t *tcschr(const wchar_t *s, wint_t c) { return wcschr(s, c); } inline wchar_t *tcschr(wchar_t *s, wint_t c) { return wcschr(s, c); } inline size_t tcslen(const wchar_t *s) { return wcslen(s); } inline int fputts(const wchar_t *s, FILE *fp) { return fputws(s, fp); } inline int totupper(wint_t c) { return towupper(c); } #else /* not SP_WIDE_SYSTEM */ typedef char SP_TCHAR; typedef unsigned char SP_TUCHAR; #define SP_T(x) x inline char *tgetenv(const char *s) { return getenv(s); } inline int tcscmp(const char *s1, const char *s2) { return strcmp(s1, s2); } inline int tcsncmp(const char *s1, const char *s2, size_t n) { return strncmp(s1, s2, n); } inline unsigned long tcstoul(const char *s, const char **sp, int base) { return strtoul((char *)s, (char **)sp, base); } inline unsigned long tcstoul(char *s, char **sp, int base) { return strtoul(s, sp, base); } inline const char *tcschr(const char *s, int c) { return strchr(s, c); } inline char *tcschr(char *s, int c) { return strchr(s, c); } inline size_t tcslen(const char *s) { return strlen(s); } inline int fputts(const char *s, FILE *fp) { return fputs(s, fp); } inline int totupper(int c) { return toupper(c); } #endif /* not SP_WIDE_SYSTEM */ #ifdef SP_NAMESPACE } #endif #endif /* not sptchar_INCLUDED */ jade-1.2.1/include/types.h100444 764 764 2574 6604607560 13164 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef types_INCLUDED #define types_INCLUDED 1 #include #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #if UINT_MAX >= 0xffffffffL /* 2^32 - 1 */ typedef unsigned int Unsigned32; #else typedef unsigned long Unsigned32; #endif // Number holds values between 0 and 99999999 (eight nines). typedef Unsigned32 Number; typedef Unsigned32 Offset; typedef Unsigned32 Index; #ifdef SP_MULTI_BYTE #ifdef SP_WCHAR_T_USHORT typedef wchar_t Char; #else typedef unsigned short Char; #endif #if INT_MAX > 65535L typedef int Xchar; #else /* INT_MAX <= 65535L */ typedef long Xchar; #endif /* INT_MAX <= 65535L */ #else /* not SP_MULTI_BYTE */ typedef unsigned char Char; // This holds any value of type Char plus InputSource:eE (= -1). typedef int Xchar; #endif /* not SP_MULTI_BYTE */ typedef Unsigned32 UnivChar; typedef Unsigned32 WideChar; // A character in a syntax reference character set. // We might want to compile with wide syntax reference characters // (since they're cheap) but not with wide document characters. typedef Unsigned32 SyntaxChar; typedef unsigned short CharClassIndex; typedef unsigned Token; #ifdef SP_MULTI_BYTE typedef unsigned short EquivCode; #else typedef unsigned char EquivCode; #endif #ifdef SP_NAMESPACE } #endif #endif /* not types_INCLUDED */ jade-1.2.1/include/xnew.h100444 764 764 1113 6604607560 12765 0ustar jjcjjc#ifndef xnew_INCLUDED #define xnew_INCLUDED 1 #ifdef SP_NEW_H_MISSING typedef void (*VFP)(); #ifdef SP_SET_NEW_HANDLER_EXTERN_C extern "C" #endif void set_new_handler(VFP); #ifndef SP_DECLARE_PLACEMENT_OPERATOR_NEW #define SP_DECLARE_PLACEMENT_OPERATOR_NEW #endif #else /* not SP_NEW_H_MISSING */ #ifdef SP_ANSI_LIB #include #else #include #endif #endif /* not SP_NEW_H_MISSING */ #ifdef SP_DECLARE_PLACEMENT_OPERATOR_NEW inline void *operator new(size_t, void *p) { return p; } #endif /* SP_DECLARE_PLACEMENT_OPERATOR_NEW */ #endif /* not xnew_INCLUDED */ jade-1.2.1/japan.sgmldecl100444 764 764 24516 6604607546 13055 0ustar jjcjjc jade-1.2.1/lib/ 40775 764 764 0 6610553420 10661 5ustar jjcjjcjade-1.2.1/lib/Allocator.cxx100444 764 764 4021 6604607560 13423 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "Allocator.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Allocator::Allocator(size_t maxSize, unsigned blocksPerSegment) : objectSize_(maxSize), blocksPerSegment_(blocksPerSegment), freeList_(0), segments_(0) { } Allocator::~Allocator() { SegmentHeader *p = segments_; while (p) { SegmentHeader *tem = p->next; if (p->liveCount == 0) ::operator delete(p); else p->freeList = 0; p = tem; } } void *Allocator::alloc(size_t sz) { if (sz > objectSize_) tooBig(sz); Block *tem = freeList_; if (tem) { tem->header.seg->liveCount += 1; freeList_ = tem->next; return &(tem->next); } else return alloc1(); } void *Allocator::allocSimple(size_t sz) { BlockHeader *p = (BlockHeader *)::operator new(sz + sizeof(BlockHeader)); p->seg = 0; return p + 1; } void Allocator::free(void *p) { BlockHeader *b = ((BlockHeader *)p) - 1; SegmentHeader *seg = b->seg; if (seg == 0) ::operator delete(b); else { Block **freeList = seg->freeList; if (freeList == 0) { seg->liveCount -= 1; if (seg->liveCount == 0) ::operator delete(seg); } else { ((Block *)b)->next = *freeList; *freeList = (Block *)b; seg->liveCount -= 1; } } } void *Allocator::alloc1() { SegmentHeader *seg = (SegmentHeader *)::operator new(sizeof(SegmentHeader) + ((objectSize_ + sizeof(BlockHeader)) * blocksPerSegment_)); seg->next = segments_; segments_ = seg; seg->liveCount = 1; seg->freeList = &freeList_; char *p = (char *)(seg + 1); Block *head = 0; for (size_t n = blocksPerSegment_; n > 0; n--) { ((Block *)p)->next = head; ((Block *)p)->header.seg = seg; head = (Block *)p; p += sizeof(BlockHeader) + objectSize_; } freeList_ = head->next; return &(head->next); } void Allocator::tooBig(size_t sz) { ASSERT(sz <= objectSize_); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ArcEngine.cxx100444 764 764 142135 6606574406 13413 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "ArcEngine.h" #include "ArcProcessor.h" #include "Vector.h" #include "NCVector.h" #include "IQueue.h" #include "ArcEngineMessages.h" #include "MessageArg.h" #include "ParserOptions.h" #include "SgmlParser.h" #include "Allocator.h" #include "LinkProcess.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif static const size_t sizes[] = { sizeof(StartElementEvent), sizeof(EndElementEvent), sizeof(ImmediateDataEvent), sizeof(SdataEntityEvent), sizeof(EndPrologEvent), sizeof(CdataEntityEvent), sizeof(SdataEntityEvent), sizeof(ExternalDataEntityEvent), sizeof(OpenElement) }; static size_t maxSize(const size_t *v, size_t n) { size_t max = 0; for (size_t i = 0; i < n; i++) { if (v[i] > max) max = v[i]; } return max; } const unsigned invalidAtt = unsigned(-1); const unsigned contentPseudoAtt = unsigned(-2); class DelegateEventHandler : public EventHandler { public: #define EVENT(C, f) void f(C *ev) { delegateTo_->f(ev); } #include "events.h" #undef EVENT protected: EventHandler *delegateTo_; }; class QueueEventHandler : public EventHandler, public IQueue { public: #define EVENT(C, f) void f(C *ev) { ev->copyData(); append(ev); } #include "events.h" #undef EVENT }; // This just passes through messages. class NullEventHandler : public EventHandler { public: NullEventHandler(Messenger &mgr) : mgr_(&mgr) { } void message(MessageEvent *event) { mgr_->dispatchMessage(event->message()); delete event; } private: Messenger *mgr_; }; class ArcEngineImpl : public DelegateEventHandler, private Messenger { public: ArcEngineImpl(Messenger &mgr, const SgmlParser *parser, ArcDirector &director, const volatile sig_atomic_t *cancelPtr, const Notation *, const Vector &name, const SubstTable *table); ~ArcEngineImpl(); void sgmlDecl(SgmlDeclEvent *); void appinfo(AppinfoEvent *); void startElement(StartElementEvent *); void endElement(EndElementEvent *); void data(DataEvent *); void sdataEntity(SdataEntityEvent *); void externalDataEntity(ExternalDataEntityEvent *); void pi(PiEvent *); void endProlog(EndPrologEvent *); void startDtd(StartDtdEvent *); void endDtd(EndDtdEvent *); void startLpd(StartLpdEvent *); void endLpd(EndLpdEvent *); void uselink(UselinkEvent *); size_t nBases() const { return arcProcessors_.size(); } EventHandler *delegateHandler() { return eventHandler_; } private: void dispatchMessage(const Message &); void dispatchMessage(Message &); void initMessage(Message &); EventHandler *eventHandler_; NCVector arcProcessors_; ConstPtr sd_; ConstPtr syntax_; StringC arcBase_; StringC is10744_; int stage_; QueueEventHandler eventQueue_; NullEventHandler nullHandler_; const SgmlParser *parser_; Location currentLocation_; unsigned gatheringContent_; Text content_; unsigned startAgain_; Allocator alloc_; StringC appinfo_; const AttributeList *linkAttributes_; LinkProcess linkProcess_; Boolean haveLinkProcess_; Vector docName_; ArcDirector *director_; Messenger *mgr_; const volatile sig_atomic_t *cancelPtr_; }; void ArcEngine::parseAll(SgmlParser &parser, Messenger &mgr, ArcDirector &director, const volatile sig_atomic_t *cancelPtr) { ArcEngineImpl wrap(mgr, &parser, director, cancelPtr, 0, Vector(), 0); parser.parseAll(wrap, cancelPtr); } EventHandler * SelectOneArcDirector::arcEventHandler(const Notation *, const Vector &name, const SubstTable *table) { if (name.size() != select_.size()) return 0; for (size_t i = 0; i < name.size(); i++) { StringC tem(select_[i]); table->subst(tem); if (name[i] != tem) return 0; } return eh_; } void SelectOneArcDirector::dispatchMessage(const Message &msg) { eh_->message(new MessageEvent(msg)); } void SelectOneArcDirector::dispatchMessage(Message &msg) { eh_->message(new MessageEvent(msg)); } ArcEngineImpl::ArcEngineImpl(Messenger &mgr, const SgmlParser *parser, ArcDirector &director, const volatile sig_atomic_t *cancelPtr, const Notation *notation, const Vector &docName, const SubstTable *table) : director_(&director), mgr_(&mgr), cancelPtr_(cancelPtr), parser_(parser), stage_(0), gatheringContent_(0), startAgain_(0), haveLinkProcess_(0), alloc_(maxSize(sizes, SIZEOF(sizes)), 50), nullHandler_(mgr), docName_(docName) { eventHandler_ = director.arcEventHandler(notation, docName, table); if (!eventHandler_) eventHandler_ = &nullHandler_; delegateTo_ = eventHandler_; } ArcEngineImpl::~ArcEngineImpl() { for (size_t i = 0; i < arcProcessors_.size(); i++) if (arcProcessors_[i].valid()) arcProcessors_[i].checkIdrefs(); } void ArcEngineImpl::appinfo(AppinfoEvent *event) { const StringC *str; if (event->literal(str)) appinfo_ = *str; DelegateEventHandler::appinfo(event); } void ArcEngineImpl::pi(PiEvent *event) { currentLocation_ = event->location(); if (stage_ == 1 && arcBase_.size() && event->dataLength() > is10744_.size() + 1) { Boolean match = 1; size_t i = 0; for (size_t j = 0; j < is10744_.size() && match; i++, j++) if ((*syntax_->generalSubstTable())[event->data()[i]] != is10744_[j]) match = 0; if (!syntax_->isS(event->data()[i])) match = 0; do { i++; } while (i < event->dataLength() && syntax_->isS(event->data()[i])); for (size_t j = 0; j < arcBase_.size() && match; i++, j++) if (i >= event->dataLength() || (*syntax_->generalSubstTable())[event->data()[i]] != arcBase_[j]) match = 0; if (i >= event->dataLength() || !syntax_->isS(event->data()[i])) match = 0; if (match) { size_t dataLength = event->dataLength(); const Char *data = event->data(); for (;;) { while (i < dataLength && syntax_->isS(data[i])) i++; if (i >= dataLength) break; size_t start = i++; while (i < dataLength && !syntax_->isS(data[i])) i++; StringC name(data + start, i - start); syntax_->generalSubstTable()->subst(name); arcProcessors_.resize(arcProcessors_.size() + 1); arcProcessors_.back().setName(name); } } } DelegateEventHandler::pi(event); } void ArcEngineImpl::endProlog(EndPrologEvent *event) { currentLocation_ = event->location(); for (size_t i = 0; i < arcProcessors_.size(); i++) arcProcessors_[i].init(*event, sd_, syntax_, parser_, this, docName_, *director_, cancelPtr_); if (!event->lpdPointer().isNull()) { haveLinkProcess_ = 1; linkProcess_.init(event->lpdPointer()); } DelegateEventHandler::endProlog(event); } void ArcEngineImpl::startDtd(StartDtdEvent *event) { stage_++; DelegateEventHandler::startDtd(event); } void ArcEngineImpl::endDtd(EndDtdEvent *event) { stage_++; DelegateEventHandler::endDtd(event); } void ArcEngineImpl::startLpd(StartLpdEvent *event) { if (event->active()) stage_ = 1; DelegateEventHandler::startLpd(event); } void ArcEngineImpl::endLpd(EndLpdEvent *event) { stage_++; DelegateEventHandler::endLpd(event); } void ArcEngineImpl::sgmlDecl(SgmlDeclEvent *event) { currentLocation_ = event->location(); sd_ = event->sdPointer(); syntax_ = event->instanceSyntaxPointer(); arcBase_ = sd_->execToInternal("ArcBase"); syntax_->generalSubstTable()->subst(arcBase_); is10744_ = sd_->execToInternal("IS10744"); Boolean atStart = 1; for (size_t i = 0; i < appinfo_.size(); i++) if (syntax_->isS(appinfo_[i])) atStart = 1; else if (atStart) { if (i + 7 > appinfo_.size()) break; StringC tem(appinfo_.data() + i, 7); syntax_->generalSubstTable()->subst(tem); if (tem == arcBase_) { if (i + 7 == appinfo_.size() || syntax_->isS(appinfo_[i + 7])) break; if (appinfo_[i + 7] == sd_->execToInternal('=')) { arcBase_.resize(0); for (size_t j = i + 7; j < appinfo_.size(); j++) { if (syntax_->isS(appinfo_[j])) break; arcBase_ += appinfo_[j]; } // Allow quotes around replacement name. if (arcBase_.size() > 2 && (arcBase_[0] == sd_->execToInternal('"') || arcBase_[0] == sd_->execToInternal('\'')) && arcBase_[arcBase_.size() - 1] == arcBase_[0]) { for (size_t j = 0; j < arcBase_.size() - 2; j++) arcBase_[j] = arcBase_[j + 1]; arcBase_.resize(arcBase_.size() - 2); } syntax_->generalSubstTable()->subst(arcBase_); break; } } atStart = 0; } DelegateEventHandler::sgmlDecl(event); } void ArcEngineImpl::startElement(StartElementEvent *event) { if (gatheringContent_) { gatheringContent_++; DelegateEventHandler::startElement(event); return; } currentLocation_ = event->location(); const Text *contentP; size_t start; if (startAgain_) { start = startAgain_ - 1; contentP = &content_; startAgain_ = 0; } else { contentP = 0; start = 0; if (haveLinkProcess_) { const ResultElementSpec *resultElementSpec; linkProcess_.startElement(event->elementType(), event->attributes(), event->location(), *this, // Messenger & linkAttributes_, resultElementSpec); } else linkAttributes_ = 0; } for (size_t i = start; i < arcProcessors_.size(); i++) { if (arcProcessors_[i].valid()) { if (!arcProcessors_[i].processStartElement(*event, linkAttributes_, contentP, alloc_)) { ASSERT(contentP == 0); startAgain_ = i + 1; gatheringContent_ = 1; delegateTo_ = &eventQueue_; DelegateEventHandler::startElement(event); return; } } } content_.clear(); DelegateEventHandler::startElement(event); } void ArcEngineImpl::data(DataEvent *event) { const Entity *entity = event->entity(); if (gatheringContent_) { if (entity) content_.addCdata(entity->asInternalEntity()->string(), event->location().origin()); else { // Do attribute value literal interpretation. Location loc(event->location()); for (size_t i = 0; i < event->dataLength(); i++, loc += 1) { Char ch = event->data()[i]; if (syntax_->isS(ch) && ch != syntax_->space()) { if (ch == syntax_->standardFunction(Syntax::fRS)) content_.ignoreChar(ch, loc); else content_.addChar(syntax_->space(), Location(new ReplacementOrigin(loc, ch), 0)); } else content_.addChar(ch, loc); } } } else { currentLocation_ = event->location(); for (size_t i = 0; i < arcProcessors_.size(); i++) { if (arcProcessors_[i].valid() && arcProcessors_[i].processData()) { if (entity) arcProcessors_[i].docHandler() .data(new (alloc_) CdataEntityEvent(entity->asInternalEntity(), event->location().origin())); else arcProcessors_[i].docHandler() .data(new (alloc_) ImmediateDataEvent(event->type(), event->data(), event->dataLength(), event->location(), 0)); } } } DelegateEventHandler::data(event); } void ArcEngineImpl::sdataEntity(SdataEntityEvent *event) { if (gatheringContent_) { content_.addSdata(event->entity()->asInternalEntity()->string(), event->location().origin()); return; } else { currentLocation_ = event->location(); for (size_t i = 0; i < arcProcessors_.size(); i++) { if (arcProcessors_[i].valid() && arcProcessors_[i].processData()) { const Entity *entity = event->entity(); arcProcessors_[i].docHandler() .sdataEntity(new (alloc_) SdataEntityEvent(entity->asInternalEntity(), event->location().origin())); } } } DelegateEventHandler::sdataEntity(event); } void ArcEngineImpl::externalDataEntity(ExternalDataEntityEvent *event) { if (!gatheringContent_) { currentLocation_ = event->location(); for (size_t i = 0; i < arcProcessors_.size(); i++) { if (arcProcessors_[i].valid() && arcProcessors_[i].processData()) { ConstPtr entity = arcProcessors_[i].dtdPointer() ->lookupEntity(0, event->entity()->name()); if (!entity.isNull()) { ConstPtr oldOrigin = event->entityOrigin(); Owner markup; if (oldOrigin->markup()) markup = new Markup(*oldOrigin->markup()); ConstPtr newOrigin = EntityOrigin::make(entity, oldOrigin->parent(), oldOrigin->refLength(), markup); arcProcessors_[i].docHandler() .externalDataEntity(new (alloc_) ExternalDataEntityEvent(entity->asExternalDataEntity(), newOrigin)); } // otherwise entity is not architectural } } } DelegateEventHandler::externalDataEntity(event); } void ArcEngineImpl::endElement(EndElementEvent *event) { while (gatheringContent_) { if (--gatheringContent_ > 0) { DelegateEventHandler::endElement(event); return; } delegateTo_ = delegateHandler(); // Clear out eventQueue_ in case handling the events // causes events to be queued again. IQueue tem; tem.swap(eventQueue_); while (!tem.empty()) tem.get()->handle(*this); } currentLocation_ = event->location(); for (size_t i = 0; i < arcProcessors_.size(); i++) if (arcProcessors_[i].valid()) arcProcessors_[i].processEndElement(*event, alloc_); DelegateEventHandler::endElement(event); if (haveLinkProcess_) linkProcess_.endElement(); } void ArcEngineImpl::uselink(UselinkEvent *event) { if (!gatheringContent_) linkProcess_.uselink(event->linkSet(), event->restore(), event->lpd().pointer()); DelegateEventHandler::uselink(event); } void ArcEngineImpl::dispatchMessage(const Message &msg) { mgr_->dispatchMessage(msg); } void ArcEngineImpl::dispatchMessage(Message &msg) { mgr_->dispatchMessage(msg); } void ArcEngineImpl::initMessage(Message &msg) { mgr_->initMessage(msg); msg.loc = currentLocation_; } ArcProcessor::ArcProcessor() : errorIdref_(1), docHandler_(0), arcAuto_(1), arcDtdIsParam_(0) { } void ArcProcessor::setName(const StringC &name) { name_ = name; } const Syntax &ArcProcessor::attributeSyntax() const { return *docSyntax_; } ConstPtr ArcProcessor::getAttributeNotation(const StringC &name, const Location &) { if (!metaDtd_.isNull()) return metaDtd_->lookupNotation(name); return 0; } ConstPtr ArcProcessor::getAttributeEntity(const StringC &name, const Location &) { // FIXME What about default entity if (!metaDtd_.isNull()) return metaDtd_->lookupEntity(0, name); return 0; } void ArcProcessor::noteCurrentAttribute(size_t i, AttributeValue *value) { if (valid_) currentAttributes_[i] = value; } ConstPtr ArcProcessor::getCurrentAttribute(size_t i) const { return currentAttributes_[i]; } // This code is the same as in the main parser. // Once handling of ID/IDREF in architectures has been clarified. // Maybe factor out into AttributeContext. Boolean ArcProcessor::defineId(const StringC &str, const Location &loc, Location &prevLoc) { if (!valid_) return 1; Id *id = lookupCreateId(str); if (id->defined()) { prevLoc = id->defLocation(); return 0; } id->define(loc); return 1; } void ArcProcessor::noteIdref(const StringC &str, const Location &loc) { if (!valid_ || !errorIdref_) return; Id *id = lookupCreateId(str); if (!id->defined()) id->addPendingRef(loc); } Id *ArcProcessor::lookupCreateId(const StringC &name) { Id *id = idTable_.lookup(name); if (!id) { id = new Id(name); idTable_.insert(id); } return id; } void ArcProcessor::checkIdrefs() { NamedTableIter iter(idTable_); Id *id; while ((id = iter.next()) != 0) { for (size_t i = 0; i < id->pendingRefs().size(); i++) { Messenger::setNextLocation(id->pendingRefs()[i]); message(ArcEngineMessages::missingId, StringMessageArg(id->name())); } } } void ArcProcessor::init(const EndPrologEvent &event, const ConstPtr &sd, const ConstPtr &syntax, const SgmlParser *parentParser, Messenger *mgr, const Vector &superName, ArcDirector &director, const volatile sig_atomic_t *cancelPtr) { director_ = &director; mgr_ = mgr; docSyntax_ = syntax; docSd_ = sd; mgr_ = mgr; valid_ = 0; docDtd_ = event.dtdPointer(); metaSyntax_ = docSyntax_; mayDefaultAttribute_ = 1; docSyntax_->generalSubstTable()->subst(name_); Vector docName(superName); docName.push_back(name_); ConstPtr notation; notation = docDtd_->lookupNotation(name_); if (!notation.isNull()) { ConstPtr notAttDef = notation->attributeDef(); attributeList_.init(notAttDef); attributeList_.finish(*this); supportAttributes(attributeList_); } else message(ArcEngineMessages::noArcNotation, StringMessageArg(name_)); ArcEngineImpl *engine = new ArcEngineImpl(*mgr, parentParser, director, cancelPtr, notation.pointer(), docName, docSyntax_->generalSubstTable()); docHandler_ = engine; ownEventHandler_ = engine; if (supportAtts_[rArcDocF].size() == 0) supportAtts_[rArcDocF] = name_; if (supportAtts_[rArcFormA].size() == 0) supportAtts_[rArcFormA] = name_; rniContent_ = docSyntax_->delimGeneral(Syntax::dRNI); rniContent_ += sd->execToInternal("CONTENT"); rniDefault_ = docSyntax_->delimGeneral(Syntax::dRNI); rniDefault_ += docSyntax_->reservedName(Syntax::rDEFAULT); rniArcCont_ = metaSyntax_->delimGeneral(Syntax::dRNI); rniArcCont_ += sd->execToInternal("ARCCONT"); ConstPtr dtdent = makeDtdEntity(notation.pointer()); if (dtdent.isNull()) return; StringC sysid = dtdent->asExternalEntity()->externalId().effectiveSystemId(); if (sysid.size() == 0 && !parentParser->entityCatalog().lookup(*dtdent, *docSyntax_, sd->internalCharset(), *mgr_, sysid)) { message(ArcEngineMessages::arcGenerateSystemId, StringMessageArg(name_)); return; } docHandler_->sgmlDecl(new SgmlDeclEvent(sd, syntax)); docHandler_->startDtd(new StartDtdEvent(dtdent->name(), dtdent, 0, event.location(), 0)); SgmlParser::Params params; params.entityType = SgmlParser::Params::dtd; params.sysid = sysid; params.parent = parentParser; ParserOptions options = parentParser->options(); errorIdref_ = options.errorIdref; options.errorAfdr = 0; options.includes = arcOpts_; params.options = &options; params.sd = docSd_; if (metaSyntax_->reservedName(Syntax::rALL).size() == 0) { Ptr tem(new Syntax(*metaSyntax_)); tem->setName(Syntax::rALL, docSd_->execToInternal("ALL")); metaSyntax_ = tem; } params.prologSyntax = metaSyntax_; params.instanceSyntax = metaSyntax_; params.doctypeName = dtdent->name(); SgmlParser parser(params); parser.parseAll(*docHandler_, cancelPtr); Ptr baseDtd = parser.baseDtd(); if (baseDtd.isNull() || baseDtd->documentElementType()->definition()->undefined()) return; metaDtd_ = baseDtd; metaMapCache_.resize(docDtd_->nElementTypeIndex()); mungeMetaDtd(*baseDtd, *docDtd_); docHandler_->endDtd(new EndDtdEvent(metaDtd_, event.location(), 0)); startContent(*metaDtd_); currentAttributes_.resize(metaDtd_->nCurrentAttribute()); valid_ = 1; docHandler_->endProlog(new EndPrologEvent(metaDtd_, event.location())); if (engine->nBases() == 0) docHandler_ = engine->delegateHandler(); } void ArcProcessor::mungeMetaDtd(Dtd &metaDtd, const Dtd &docDtd) { if (supportAtts_[rArcDataF].size() > 0 && metaDtd.lookupNotation(supportAtts_[rArcDataF]).isNull()) { Messenger::message(ArcEngineMessages::noArcDataF, StringMessageArg(supportAtts_[rArcDataF])); metaDtd.insertNotation(new Notation(supportAtts_[rArcDataF], metaDtd.namePointer(), metaDtd.isBase())); } // FIXME check for ArcAutoF Dtd::ConstEntityIter iter(docDtd.generalEntityIter()); for (;;) { ConstPtr ent = iter.next(); if (ent.isNull()) break; Ptr copy(ent->copy()); if (!copy->asExternalDataEntity() || mungeDataEntity(*(ExternalDataEntity *)copy.pointer())) metaDtd.insertEntity(copy, 1); } } Boolean ArcProcessor::mungeDataEntity(ExternalDataEntity &entity) { const MetaMap &map = buildMetaMap(0, entity.notation(), entity.attributes(), 0, 0); if (!map.attributed) return 0; AttributeList atts; const Notation *notation = (const Notation *)map.attributed; ConstPtr arcContent; if (mapAttributes(entity.attributes(), 0, 0, atts, arcContent, map)) { // FIXME check arcContent entity.setNotation((Notation *)notation, atts); return 1; } // FIXME error tried to use #CONTENT return 0; } ConstPtr ArcProcessor::makeDtdEntity(const Notation *) { if (!supportAtts_[rArcDTD].size()) { mgr_->message(ArcEngineMessages::noArcDTDAtt); return 0; } ConstPtr entity = docDtd_->lookupEntity(arcDtdIsParam_, supportAtts_[rArcDTD]); if (entity.isNull()) { mgr_->message(arcDtdIsParam_ ? ArcEngineMessages::arcDtdNotDeclaredParameter : ArcEngineMessages::arcDtdNotDeclaredParameter, StringMessageArg(supportAtts_[rArcDTD])); return 0; } if (!entity->asExternalEntity()) { mgr_->message(ArcEngineMessages::arcDtdNotExternal, StringMessageArg(supportAtts_[rArcDTD])); return 0; } ExternalId externalId(entity->asExternalEntity()->externalId()); #if 0 // Use the public identifier of the notation to find the meta-DTD. if (externalId.effectiveSystemId().size() == 0 && notation) { if (notation->externalId().effectiveSystemId().size()) { StringC tem(notation->externalId().effectiveSystemId()); externalId.setEffectiveSystem(tem); } else if (!externalId.publicId()) { const PublicId *pubid = notation->externalId().publicId(); PublicId::OwnerType ownerType; if (pubid && pubid->getOwnerType(ownerType)) { Text pubidText; unsigned textClassPos = 2; if (ownerType != PublicId::ISO) textClassPos += 3; StringC owner; pubid->getOwner(owner); textClassPos += owner.size(); pubidText.addChars(pubid->string().data(), textClassPos, pubid->text().charLocation(0)); pubidText.addChars(docSd_->execToInternal("DTD"), pubid->text().charLocation(textClassPos)); for (; textClassPos < pubid->string().size(); textClassPos++) if (pubid->string()[textClassPos] == docSyntax_->space()) break; pubidText.addChars(pubid->string().data() + textClassPos, pubid->string().size() - textClassPos, pubid->text().charLocation(textClassPos)); const MessageType1 *msg; externalId.setPublic(pubidText, docSd_->internalCharset(), docSyntax_->space(), msg); } } } #endif return new ExternalTextEntity(supportAtts_[rArcDocF], Entity::doctype, entity->defLocation(), externalId); } void ArcProcessor::supportAttributes(const AttributeList &atts) { static const char *const s[] = { "ArcFormA", "ArcNamrA", "ArcSuprA", "ArcIgnDA", "ArcDocF", "ArcSuprF", "ArcBridF", "ArcDataF", "ArcAuto", "ArcIndr", "ArcDTD", "ArcQuant", }; for (size_t i = 0; i < SIZEOF(s); i++) { StringC attName(docSd_->execToInternal(s[i])); docSyntax_->generalSubstTable()->subst(attName); unsigned ind; if (atts.attributeIndex(attName, ind)) { const AttributeValue *value = atts.value(ind); if (value) { const Text *textP = value->text(); // FIXME check for empty value if (textP) { supportAtts_[i] = textP->string(); switch (i) { case rArcQuant: processArcQuant(*textP); break; case rArcAuto: docSyntax_->generalSubstTable()->subst(supportAtts_[i]); if (supportAtts_[i] == docSd_->execToInternal("ARCAUTO")) arcAuto_ = 1; else if (supportAtts_[i] == docSd_->execToInternal("NARCAUTO")) arcAuto_ = 0; else Messenger::message(ArcEngineMessages::invalidArcAuto, StringMessageArg(supportAtts_[i])); break; case rArcIndr: docSyntax_->generalSubstTable()->subst(supportAtts_[i]); if (supportAtts_[i] == docSd_->execToInternal("ARCINDR")) { Messenger::setNextLocation(textP->charLocation(0)); Messenger::message(ArcEngineMessages::arcIndrNotSupported); } else if (supportAtts_[i] != docSd_->execToInternal("NARCINDR")) { Messenger::setNextLocation(textP->charLocation(0)); Messenger::message(ArcEngineMessages::invalidArcIndr, StringMessageArg(supportAtts_[i])); } break; case rArcFormA: case rArcNamrA: case rArcSuprA: case rArcIgnDA: docSyntax_->generalSubstTable()->subst(supportAtts_[i]); break; case rArcDocF: case rArcSuprF: case rArcBridF: case rArcDataF: metaSyntax_->generalSubstTable()->subst(supportAtts_[i]); break; case rArcDTD: { const StringC &pero = docSyntax_->delimGeneral(Syntax::dPERO); if (supportAtts_[i].size() >= pero.size()) { StringC tem(supportAtts_[i].data(), pero.size()); docSyntax_->generalSubstTable()->subst(tem); if (tem == pero) { arcDtdIsParam_ = 1; tem.assign(supportAtts_[i].data() + pero.size(), supportAtts_[i].size() - pero.size()); tem.swap(supportAtts_[i]); } } docSyntax_->entitySubstTable()->subst(supportAtts_[i]); } break; } } } } } processArcOpts(atts); } void ArcProcessor::processArcOpts(const AttributeList &atts) { StringC attName(docSd_->execToInternal("ArcOptSA")); docSyntax_->generalSubstTable()->subst(attName); unsigned ind; Vector arcOptA; Vector arcOptAPos; const Text *arcOptAText = 0; if (atts.attributeIndex(attName, ind)) { const AttributeValue *value = atts.value(ind); if (value) { arcOptAText = value->text(); if (arcOptAText) split(*arcOptAText, docSyntax_->space(), arcOptA, arcOptAPos); } } if (!arcOptAText) arcOptA.push_back(docSd_->execToInternal("ArcOpt")); for (size_t i = 0; i < arcOptA.size(); i++) { docSyntax_->generalSubstTable()->subst(arcOptA[i]); if (atts.attributeIndex(arcOptA[i], ind)) { const AttributeValue *value = atts.value(ind); if (value) { const Text *textP = value->text(); if (textP) { Vector opts; Vector optsPos; split(*textP, docSyntax_->space(), opts, optsPos); arcOpts_.insert(arcOpts_.begin(), opts.begin(), opts.begin() + opts.size()); } } } } } void ArcProcessor::processArcQuant(const Text &text) { Ptr newMetaSyntax; Vector tokens; Vector tokensPos; split(text, docSyntax_->space(), tokens, tokensPos); for (size_t i = 0; i < tokens.size(); i++) { docSyntax_->generalSubstTable()->subst(tokens[i]); Syntax::Quantity quantityName; if (!docSd_->lookupQuantityName(tokens[i], quantityName)) { setNextLocation(text.charLocation(tokensPos[i])); Messenger::message(ArcEngineMessages::invalidQuantity, StringMessageArg(tokens[i])); } else if (i + 1 >= tokens.size()) { setNextLocation(text.charLocation(tokensPos[i])); Messenger::message(ArcEngineMessages::missingQuantityValue, StringMessageArg(tokens[i])); } else { i++; unsigned long val = 0; if (tokens[i].size() > 8) { setNextLocation(text.charLocation(tokensPos[i] + 8)); Messenger::message(ArcEngineMessages::quantityValueTooLong, StringMessageArg(tokens[i])); tokens[i].resize(8); } for (size_t j = 0; j < tokens[i].size(); j++) { int weight = docSd_->digitWeight(tokens[i][j]); if (weight < 0) { setNextLocation(text.charLocation(tokensPos[i] + j)); Char c = tokens[i][j]; Messenger::message(ArcEngineMessages::invalidDigit, StringMessageArg(StringC(&c, 1))); val = 0; break; } else { val *= 10; val += weight; } } if (val > docSyntax_->quantity(quantityName)) { if (newMetaSyntax.isNull()) newMetaSyntax = new Syntax(*docSyntax_); newMetaSyntax->setQuantity(quantityName, val); } } } if (!newMetaSyntax.isNull()) metaSyntax_ = newMetaSyntax; } Boolean ArcProcessor::processStartElement(const StartElementEvent &event, const AttributeList *linkAttributes, const Text *content, Allocator &alloc) { unsigned suppressFlags = (openElementFlags_.size() > 0 ? (openElementFlags_.back() & ~isArc) : (unsigned)condIgnoreData); if ((suppressFlags & suppressForm) && (suppressFlags & suppressSupr)) { // Make this case efficient. openElementFlags_.push_back(suppressFlags); return 1; } const AttributeList &atts = event.attributes(); const MetaMap &map = buildMetaMap(event.elementType(), 0, atts, linkAttributes, suppressFlags); const ElementType *metaType; ConstPtr arcContent; if (map.attributed == 0) { if (!(tagLevel() == 0 && !currentElement().isFinished())) { if (!arcContent.isNull() && (currentElement().declaredEmpty() || !currentElement().tryTransitionPcdata())) Messenger::message(ArcEngineMessages::invalidArcContent); openElementFlags_.push_back(map.suppressFlags); return 1; } metaType = metaDtd_->documentElementType(); mgr_->message(ArcEngineMessages::documentElementNotArc, StringMessageArg(metaType->name())); attributeList_.init(metaType->attributeDef()); attributeList_.finish(*this); } else { if (!mapAttributes(atts, linkAttributes, content, attributeList_, arcContent, map)) return 0; metaType = (const ElementType *)map.attributed; suppressFlags = map.suppressFlags; } StartElementEvent *genEvent = new (alloc) StartElementEvent(metaType, metaDtd_, &attributeList_, event.location(), 0); if (metaType->definition()->undefined()) Messenger::message(ArcEngineMessages::undefinedElement, StringMessageArg(metaType->name())); else if (elementIsExcluded(metaType)) Messenger::message(ArcEngineMessages::elementExcluded, StringMessageArg(metaType->name())); else if (elementIsIncluded(metaType)) genEvent->setIncluded(); else if (!currentElement().tryTransition(metaType)) Messenger::message(ArcEngineMessages::invalidElement, StringMessageArg(metaType->name())); pushElement(new (alloc) OpenElement(metaType, 0, genEvent->included(), 0, event.location())); docHandler_->startElement(genEvent); if (attributeList_.conref()) currentElement().setConref(); if (!arcContent.isNull() && arcContent->text() != 0) { if (currentElement().declaredEmpty() || !currentElement().tryTransitionPcdata()) Messenger::message(ArcEngineMessages::invalidArcContent); else emitArcContent(*arcContent->text(), docHandler(), alloc); suppressFlags |= (suppressForm|suppressSupr|ignoreData); } suppressFlags &= ~recoverData; openElementFlags_.push_back(suppressFlags | isArc); return 1; } void ArcProcessor::emitArcContent(const Text &text, EventHandler &handler, Allocator &alloc) { TextIter iter(text); TextItem::Type type; const Char *s; size_t n; const Location *loc; while (iter.next(type, s, n, loc)) switch (type) { case TextItem::data: case TextItem::cdata: // +1 because first dataEvent is the non-architectural data. if (type == TextItem::data) handler.data(new (alloc) ImmediateDataEvent(Event::characterData, s, n, *loc, 0)); else handler.data(new (alloc) CdataEntityEvent(loc->origin()->asEntityOrigin() ->entity()->asInternalEntity(), loc->origin())); break; case TextItem::sdata: handler.sdataEntity(new (alloc) SdataEntityEvent(loc->origin()->asEntityOrigin() ->entity()->asInternalEntity(), loc->origin())); break; default: break; } } Boolean ArcProcessor::processData() { if (openElementFlags_.size() > 0 && (openElementFlags_.back() & ignoreData)) return 0; if (!currentElement().declaredEmpty() && currentElement().tryTransitionPcdata()) return 1; else if (openElementFlags_.size() > 0 && (openElementFlags_.back() & condIgnoreData)) return 0; else { // Only give this error once per element if (openElementFlags_.size() > 0) { if (openElementFlags_.back() & recoverData) return 1; openElementFlags_.back() |= recoverData; } Messenger::message(ArcEngineMessages::invalidData); return 1; } } Boolean ArcProcessor::mapAttributes(const AttributeList &from, const AttributeList *fromLink, const Text *content, AttributeList &to, ConstPtr &arcContent, const MetaMap &map) { if (map.attributed) to.init(map.attributed->attributeDef()); for (size_t i = 0; i < map.attMapFrom.size(); i++) { unsigned fromIndex = map.attMapFrom[i]; const AttributeList *fromList = &from; if (fromIndex != contentPseudoAtt && fromIndex >= fromList->size()) { fromList = fromLink; fromIndex -= from.size(); } if (map.attMapTo[i] == contentPseudoAtt) { if (fromIndex != contentPseudoAtt) arcContent = fromList->valuePointer(fromIndex); } else { const Text *fromText = 0; Boolean fromTextTokenized = 0; if (map.attMapFrom[i] == contentPseudoAtt) { if (!content) return 0; fromText = content; } else { const AttributeValue *value = fromList->value(fromIndex); if (value) { fromText = value->text(); fromTextTokenized = fromList->tokenized(fromIndex); if (fromText && fromList == &from && !from.specified(fromIndex) && (map.attributed->attributeDef()->def(map.attMapTo[i]) ->missingValueWouldMatch(*fromText, *this))) fromText = 0; } } if (fromText) { unsigned specLength = 0; Text tem; if (!fromTextTokenized && to.tokenized(map.attMapTo[i])) fromText->tokenize(docSyntax_->space(), tem); else tem = *fromText; to.setSpec(map.attMapTo[i], *this); to.setValue(map.attMapTo[i], tem, *this, specLength); } } } if (map.attributed) to.finish(*this); return 1; } const ArcProcessor::MetaMap & ArcProcessor::buildMetaMap(const ElementType *docElementType, const Notation *notation, const AttributeList &atts, const AttributeList *linkAtts, unsigned suppressFlags) { Boolean isNotation; const Attributed *attributed = docElementType; const StringC *nameP; if (!attributed) { attributed = notation; isNotation = 1; nameP = ¬ation->name(); } else { isNotation = 0; nameP = &docElementType->name(); } // Try to use cached entry. Boolean inhibitCache = 0; size_t cacheIndex; if (isNotation || docElementType->definition()->undefined()) { inhibitCache = 1; cacheIndex = (unsigned)-1; } else { cacheIndex = docElementType->index(); const MetaMapCache *cache = metaMapCache_[cacheIndex].pointer(); if (cache && cache->suppressFlags == suppressFlags && cache->linkAtts == linkAtts) { for (int i = 0;; i++) { if (i == MetaMapCache::nNoSpec) return cache->map; unsigned attIndex = cache->noSpec[i]; if (attIndex != invalidAtt && atts.specified(attIndex)) break; } } } // no valid cached MetaMap // Handle suppression. unsigned oldSuppressFlags = suppressFlags; unsigned newSuppressFlags = suppressFlags; unsigned arcSuprIndex; if (!isNotation) considerSupr(atts, linkAtts, suppressFlags, newSuppressFlags, inhibitCache, arcSuprIndex); else arcSuprIndex = invalidAtt; // Handle ArcIgnD unsigned arcIgnDIndex; if (!isNotation) considerIgnD(atts, linkAtts, suppressFlags, newSuppressFlags, inhibitCache, arcIgnDIndex); else arcIgnDIndex = invalidAtt; // Handle ArcForm. unsigned arcFormIndex; const Attributed *metaAttributed = considerForm(atts, linkAtts, *nameP, isNotation, suppressFlags, newSuppressFlags, inhibitCache, arcFormIndex); // See if there's a renamer that will inhibit cacheing. unsigned arcNamerIndex; const Text *namerText; if (metaAttributed) namerText = considerNamer(atts, inhibitCache, arcNamerIndex); else { arcNamerIndex = invalidAtt; namerText = 0; } MetaMap *mapP; if (inhibitCache) { noCacheMetaMap_.clear(); mapP = &noCacheMetaMap_; } else { MetaMapCache *cache = metaMapCache_[cacheIndex].pointer(); if (cache) cache->clear(); else { cache = new MetaMapCache; metaMapCache_[cacheIndex] = cache; } cache->noSpec[0] = arcFormIndex; cache->noSpec[1] = arcNamerIndex; cache->noSpec[2] = arcSuprIndex; cache->noSpec[3] = arcIgnDIndex; cache->suppressFlags = oldSuppressFlags; cache->linkAtts = linkAtts; mapP = &cache->map; } mapP->attributed = metaAttributed; mapP->suppressFlags = newSuppressFlags; // Build the attribute map. if (metaAttributed) { Vector renamed; ConstPtr metaAttDef = metaAttributed->attributeDef(); if (!metaAttDef.isNull()) renamed.assign(metaAttDef->size(), PackedBoolean(0)); if (linkAtts) { Boolean specified; unsigned index; const Text *linkNamerText = considerNamer(*linkAtts, specified, index); if (linkNamerText) buildAttributeMapRename(*mapP, *linkNamerText, atts, linkAtts, renamed); } if (namerText) buildAttributeMapRename(*mapP, *namerText, atts, 0, renamed); buildAttributeMapRest(*mapP, atts, linkAtts, renamed); } return *mapP; } void ArcProcessor::considerSupr(const AttributeList &atts, const AttributeList *linkAtts, unsigned &thisSuppressFlags, unsigned &newSuppressFlags, Boolean &inhibitCache, unsigned &arcSuprIndex) { arcSuprIndex = invalidAtt; if (thisSuppressFlags & suppressSupr) return; if (!supportAtts_[rArcSuprA].size()) return; const AttributeValue *val; unsigned tem; if (linkAtts && linkAtts->attributeIndex(supportAtts_[rArcSuprA], tem)) val = linkAtts->value(tem); else if (atts.attributeIndex(supportAtts_[rArcSuprA], arcSuprIndex)) { if (atts.current(arcSuprIndex) || atts.specified(arcSuprIndex)) inhibitCache = 1; val = atts.value(arcSuprIndex); } else return; if (!val) return; const Text *textP = val->text(); if (!textP) return; StringC token = textP->string(); // FIXME trim spaces docSyntax_->generalSubstTable()->subst(token); // sArcForm suppress processing for all elements except // those that have a non-implied ArcSupr attribute. thisSuppressFlags &= ~suppressForm; newSuppressFlags &= ~(suppressForm|suppressSupr); if (matchName(token, "sArcForm")) newSuppressFlags |= suppressForm; #if 0 // I don't think this is useful else if (matchName(token, "sArcSupr")) newSuppressFlags |= suppressSupr; #endif else if (matchName(token, "sArcAll")) newSuppressFlags |= (suppressSupr|suppressForm); else if (!matchName(token, "sArcNone")) { Messenger::setNextLocation(textP->charLocation(0)); Messenger::message(ArcEngineMessages::invalidSuppress, StringMessageArg(token)); } } void ArcProcessor::considerIgnD(const AttributeList &atts, const AttributeList *linkAtts, unsigned thisSuppressFlags, unsigned &newSuppressFlags, Boolean &inhibitCache, unsigned &arcIgnDIndex) { arcIgnDIndex = invalidAtt; if (thisSuppressFlags & suppressSupr) return; if (!supportAtts_[rArcIgnDA].size()) return; const AttributeValue *val; unsigned tem; if (linkAtts && linkAtts->attributeIndex(supportAtts_[rArcIgnDA], tem)) val = linkAtts->value(tem); else if (atts.attributeIndex(supportAtts_[rArcIgnDA], arcIgnDIndex)) { if (atts.current(arcIgnDIndex) || atts.specified(arcIgnDIndex)) inhibitCache = 1; val = atts.value(arcIgnDIndex); } else return; if (!val) return; const Text *textP = val->text(); if (!textP) return; StringC token = textP->string(); // FIXME trim spaces docSyntax_->generalSubstTable()->subst(token); newSuppressFlags &= ~(ignoreData|condIgnoreData); if (matchName(token, "ArcIgnD")) newSuppressFlags |= ignoreData; else if (matchName(token, "cArcIgnD")) newSuppressFlags |= condIgnoreData; else if (!matchName(token, "nArcIgnD")) { Messenger::setNextLocation(textP->charLocation(0)); Messenger::message(ArcEngineMessages::invalidIgnD, StringMessageArg(token)); } } const Attributed * ArcProcessor::considerForm(const AttributeList &atts, const AttributeList *linkAtts, const StringC &name, Boolean isNotation, unsigned thisSuppressFlags, unsigned &newSuppressFlags, Boolean &inhibitCache, unsigned &arcFormIndex) { arcFormIndex = invalidAtt; if ((thisSuppressFlags & suppressForm) && (supportAtts_[rArcSuprF].size() == 0 || (thisSuppressFlags & suppressSupr) || isNotation)) return 0; unsigned tem; const AttributeValue *val; if (linkAtts && linkAtts->attributeIndex(supportAtts_[rArcFormA], tem)) val = linkAtts->value(tem); else if (atts.attributeIndex(supportAtts_[rArcFormA], arcFormIndex)) { if (atts.current(arcFormIndex) || atts.specified(arcFormIndex)) inhibitCache = 1; val = atts.value(arcFormIndex); } else return autoForm(atts, name, isNotation, thisSuppressFlags, newSuppressFlags, inhibitCache, arcFormIndex); if (!val) return 0; const Text *textP = val->text(); if (!textP) return 0; StringC metaName; metaName = textP->string(); // FIXME should trim leading and trailing spaces metaSyntax_->generalSubstTable()->subst(metaName); if (!isNotation) { const Attributed *metaAttributed = metaDtd_->lookupElementType(metaName); if (!metaAttributed) // CONSTDTD metaAttributed = lookupCreateUndefinedElement(metaName, Location(), *metaDtd_); if (metaName == supportAtts_[rArcSuprF]) { newSuppressFlags |= suppressForm; return metaAttributed; } if (thisSuppressFlags & suppressForm) return 0; return metaAttributed; } else return metaDtd_->lookupNotation(metaName).pointer(); } const Attributed * ArcProcessor::autoForm(const AttributeList &atts, const StringC &name, Boolean isNotation, unsigned thisSuppressFlags, unsigned &newSuppressFlags, Boolean &inhibitCache, unsigned &idIndex) { if (!isNotation) { const Attributed *metaAttributed; if (openElementFlags_.size() == 0) { metaAttributed = metaDtd_->documentElementType(); inhibitCache = 1; } else { metaAttributed = 0; if (arcAuto_) metaAttributed = metaDtd_->lookupElementType(name); if (!metaAttributed && supportAtts_[rArcBridF].size() > 0 && atts.idIndex(idIndex) && atts.specified(idIndex)) { inhibitCache = 1; metaAttributed = metaDtd_->lookupElementType(supportAtts_[rArcBridF]); } } if (metaAttributed && name == supportAtts_[rArcSuprF]) { newSuppressFlags = suppressForm|ignoreData; } else if (thisSuppressFlags & suppressForm) return 0; return metaAttributed; } else if (thisSuppressFlags & suppressForm) return 0; else { const Attributed *metaAttributed = 0; if (arcAuto_) metaAttributed = metaDtd_->lookupNotation(name).pointer(); if (!metaAttributed && supportAtts_[rArcDataF].size() > 0) metaAttributed = metaDtd_->lookupNotation(supportAtts_[rArcDataF]).pointer(); return metaAttributed; } } const Text * ArcProcessor::considerNamer(const AttributeList &atts, Boolean &inhibitCache, unsigned &arcNamerIndex) { arcNamerIndex = invalidAtt; if (supportAtts_[rArcNamrA].size() == 0 || !atts.attributeIndex(supportAtts_[rArcNamrA], arcNamerIndex)) return 0; if (atts.current(arcNamerIndex) || atts.specified(arcNamerIndex)) inhibitCache = 1; const AttributeValue *val = atts.value(arcNamerIndex); if (!val) return 0; return val->text(); } void ArcProcessor::buildAttributeMapRename(MetaMap &map, const Text &rename, const AttributeList &atts, const AttributeList *linkAtts, Vector &attRenamed) { Vector tokens; Vector tokensPos; split(rename, docSyntax_->space(), tokens, tokensPos); ConstPtr metaAttDef; if (map.attributed) metaAttDef = map.attributed->attributeDef(); // FIXME Should check that ARCCONT doesn't appear more than once. for (size_t i = 0; i < tokens.size(); i += 2) { unsigned fromIndex = invalidAtt; unsigned toIndex = invalidAtt; metaSyntax_->generalSubstTable()->subst(tokens[i]); if (tokens[i] == rniArcCont_) toIndex = contentPseudoAtt; else if (metaAttDef.isNull() || !metaAttDef->attributeIndex(tokens[i], toIndex)) { setNextLocation(rename.charLocation(tokensPos[i])); Messenger::message(ArcEngineMessages::renameToInvalid, StringMessageArg(tokens[i])); } else if (attRenamed[toIndex]) { toIndex = invalidAtt; setNextLocation(rename.charLocation(tokensPos[i])); Messenger::message(ArcEngineMessages::renameToDuplicate, StringMessageArg(tokens[i])); } if (i + 1 >= tokens.size()) { setNextLocation(rename.charLocation(tokensPos[i])); Messenger::message(ArcEngineMessages::renameMissingAttName); } else { docSyntax_->generalSubstTable()->subst(tokens[i + 1]); if (tokens[i + 1] == rniContent_) { fromIndex = contentPseudoAtt; } else if (tokens[i + 1] == rniDefault_) { if (toIndex != contentPseudoAtt) attRenamed[toIndex] = 1; } else if (linkAtts && linkAtts->attributeIndex(tokens[i + 1], fromIndex)) fromIndex += atts.size(); else if (!atts.attributeIndex(tokens[i + 1], fromIndex)) { setNextLocation(rename.charLocation(tokensPos[i + 1])); Messenger::message(ArcEngineMessages::renameFromInvalid, StringMessageArg(tokens[i + 1])); } } if (fromIndex != invalidAtt && toIndex != invalidAtt) { map.attMapFrom.push_back(fromIndex); map.attMapTo.push_back(toIndex); if (toIndex != contentPseudoAtt) { attRenamed[toIndex] = 1; if (metaAttDef->def(toIndex)->isId() && (fromIndex >= atts.size() || !atts.id(fromIndex))) Messenger::message(ArcEngineMessages::idMismatch, StringMessageArg(metaAttDef->def(toIndex) ->name())); } } } } void ArcProcessor::buildAttributeMapRest(MetaMap &map, const AttributeList &atts, const AttributeList *linkAtts, const Vector &attRenamed) { ConstPtr metaAttDef = map.attributed->attributeDef(); if (metaAttDef.isNull()) return; for (unsigned i = 0; i < metaAttDef->size(); i++) if (!attRenamed[i]) { unsigned fromIndex; if (metaAttDef->def(i)->isId()) { for (unsigned j = 0; j < atts.size(); j++) if (atts.id(j)) { map.attMapFrom.push_back(j); map.attMapTo.push_back(i); break; } } else if (linkAtts && linkAtts->attributeIndex(metaAttDef->def(i)->name(), fromIndex)) { map.attMapFrom.push_back(fromIndex + atts.size()); map.attMapTo.push_back(i); } else if (atts.attributeIndex(metaAttDef->def(i)->name(), fromIndex)) { map.attMapFrom.push_back(fromIndex); map.attMapTo.push_back(i); } } } Boolean ArcProcessor::matchName(const StringC &name, const char *key) { if (name.size() != strlen(key)) return 0; StringC tem(docSd_->execToInternal(key)); docSyntax_->generalSubstTable()->subst(tem); return name == tem; } void ArcProcessor::split(const Text &text, Char space, Vector &tokens, Vector &tokensPos) { const StringC &str = text.string(); for (size_t i = 0;;) { for (; i < str.size() && str[i] == space; i++) ; if (i >= str.size()) break; size_t start = i; for (; i < str.size() && str[i] != space; i++) ; tokens.push_back(StringC(str.data() + start, i - start)); tokensPos.push_back(start); } } void ArcProcessor::processEndElement(const EndElementEvent &event, Allocator &alloc) { Boolean wasArc = (openElementFlags_.back() & isArc); openElementFlags_.resize(openElementFlags_.size() - 1); if (wasArc) { EndElementEvent *genEvent = new (alloc) EndElementEvent(currentElement().type(), metaDtd_, event.location(), 0); if (currentElement().included()) genEvent->setIncluded(); docHandler_->endElement(genEvent); if (!currentElement().isFinished()) Messenger::message(ArcEngineMessages::unfinishedElement, StringMessageArg(currentElement().type()->name())); popElement(); } } void ArcProcessor::dispatchMessage(Message &msg) { mgr_->dispatchMessage(msg); } void ArcProcessor::dispatchMessage(const Message &msg) { mgr_->dispatchMessage(msg); } void ArcProcessor::initMessage(Message &msg) { mgr_->initMessage(msg); if (valid_) { StringC rniPcdata = metaSyntax_->delimGeneral(Syntax::dRNI); rniPcdata += metaSyntax_->reservedName(Syntax::rPCDATA); getOpenElementInfo(msg.openElementInfo, rniPcdata); } } ArcProcessor::MetaMapCache::MetaMapCache() { for (int i = 0; i < nNoSpec; i++) noSpec[i] = invalidAtt; linkAtts = 0; } void ArcProcessor::MetaMapCache::clear() { for (int i = 0; i < nNoSpec; i++) noSpec[i] = invalidAtt; linkAtts = 0; map.clear(); } ArcProcessor::MetaMap::MetaMap() : attributed(0) { } void ArcProcessor::MetaMap::clear() { attMapFrom.clear(); attMapTo.clear(); attributed = 0; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ArcEngineMessages.h100444 764 764 22027 6606636234 14503 0ustar jjcjjc// This file was automatically generated from .\ArcEngineMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct ArcEngineMessages { // 3000 static const MessageType1 arcGenerateSystemId; // 3001 static const MessageType1 undefinedElement; // 3002 static const MessageType1 elementExcluded; // 3003 static const MessageType1 invalidElement; // 3004 static const MessageType1 documentElementNotArc; // 3005 static const MessageType1 unfinishedElement; // 3006 static const MessageType0 renameMissingAttName; // 3007 static const MessageType1 renameToInvalid; // 3008 static const MessageType1 renameToDuplicate; // 3009 static const MessageType1 renameFromInvalid; // 3010 static const MessageType1 missingId; // 3011 static const MessageType0 invalidArcContent; // 3012 static const MessageType1 invalidSuppress; // 3013 static const MessageType1 arcDtdNotDeclaredParameter; // 3014 static const MessageType1 arcDtdNotDeclaredGeneral; // 3015 static const MessageType1 arcDtdNotExternal; // 3016 static const MessageType0 noArcDTDAtt; // 3017 static const MessageType1 noArcDataF; // 3018 static const MessageType1 idMismatch; // 3019 static const MessageType1 invalidArcAuto; // 3020 static const MessageType1 noArcNotation; // 3021 static const MessageType0 invalidData; // 3022 static const MessageType1 invalidIgnD; // 3023 static const MessageType1 invalidArcIndr; // 3024 static const MessageType1 invalidQuantity; // 3025 static const MessageType1 missingQuantityValue; // 3026 static const MessageType1 quantityValueTooLong; // 3027 static const MessageType1 invalidDigit; // 3028 static const MessageType0 arcIndrNotSupported; }; const MessageType1 ArcEngineMessages::arcGenerateSystemId( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3000 #ifndef SP_NO_MESSAGE_TEXT ,"no system identifier could be generated for meta-DTD for architecture %1" #endif ); const MessageType1 ArcEngineMessages::undefinedElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3001 #ifndef SP_NO_MESSAGE_TEXT ,"element type %1 not defined in meta-DTD" #endif ); const MessageType1 ArcEngineMessages::elementExcluded( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3002 #ifndef SP_NO_MESSAGE_TEXT ,"element %1 invalid in meta-DTD because excluded" #endif ); const MessageType1 ArcEngineMessages::invalidElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3003 #ifndef SP_NO_MESSAGE_TEXT ,"meta-DTD does not allow element %1 at this point" #endif ); const MessageType1 ArcEngineMessages::documentElementNotArc( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3004 #ifndef SP_NO_MESSAGE_TEXT ,"document element must be instance of %1 element type form" #endif ); const MessageType1 ArcEngineMessages::unfinishedElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3005 #ifndef SP_NO_MESSAGE_TEXT ,"element %1 unfinished in meta-DTD" #endif ); const MessageType0 ArcEngineMessages::renameMissingAttName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3006 #ifndef SP_NO_MESSAGE_TEXT ,"missing substitute name" #endif ); const MessageType1 ArcEngineMessages::renameToInvalid( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3007 #ifndef SP_NO_MESSAGE_TEXT ,"substitute for non-existent architecture attribute %1" #endif ); const MessageType1 ArcEngineMessages::renameToDuplicate( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3008 #ifndef SP_NO_MESSAGE_TEXT ,"substitute name for %1 already defined" #endif ); const MessageType1 ArcEngineMessages::renameFromInvalid( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3009 #ifndef SP_NO_MESSAGE_TEXT ,"substitute name %1 is not the name of an attribute" #endif ); const MessageType1 ArcEngineMessages::missingId( MessageType::idrefError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3010 #ifndef SP_NO_MESSAGE_TEXT ,"reference in architecture to non-existent ID %1" #endif ); const MessageType0 ArcEngineMessages::invalidArcContent( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3011 #ifndef SP_NO_MESSAGE_TEXT ,"architectural content specified with #ARCCONT not allowed by meta-DTD" #endif ); const MessageType1 ArcEngineMessages::invalidSuppress( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3012 #ifndef SP_NO_MESSAGE_TEXT ,"invalid value %1 for ArcSupr attribute" #endif ); const MessageType1 ArcEngineMessages::arcDtdNotDeclaredParameter( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3013 #ifndef SP_NO_MESSAGE_TEXT ,"no declaration for meta-DTD parameter entity %1" #endif ); const MessageType1 ArcEngineMessages::arcDtdNotDeclaredGeneral( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3014 #ifndef SP_NO_MESSAGE_TEXT ,"no declaration for meta-DTD general entity %1" #endif ); const MessageType1 ArcEngineMessages::arcDtdNotExternal( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3015 #ifndef SP_NO_MESSAGE_TEXT ,"meta-DTD entity %1 must be external" #endif ); const MessageType0 ArcEngineMessages::noArcDTDAtt( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3016 #ifndef SP_NO_MESSAGE_TEXT ,"no ArcDTD architecture support attribute specified" #endif ); const MessageType1 ArcEngineMessages::noArcDataF( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3017 #ifndef SP_NO_MESSAGE_TEXT ,"ArcDataF notation %1 not defined in meta-DTD" #endif ); const MessageType1 ArcEngineMessages::idMismatch( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3018 #ifndef SP_NO_MESSAGE_TEXT ,"ID attribute %1 in meta-DTD not declared as ID in DTD" #endif ); const MessageType1 ArcEngineMessages::invalidArcAuto( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3019 #ifndef SP_NO_MESSAGE_TEXT ,"invalid value %1 for ArcAuto architectural support attribute" #endif ); const MessageType1 ArcEngineMessages::noArcNotation( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3020 #ifndef SP_NO_MESSAGE_TEXT ,"no notation declaration for architecture %1" #endif ); const MessageType0 ArcEngineMessages::invalidData( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3021 #ifndef SP_NO_MESSAGE_TEXT ,"meta-DTD does not allow data at this point" #endif ); const MessageType1 ArcEngineMessages::invalidIgnD( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3022 #ifndef SP_NO_MESSAGE_TEXT ,"invalid value %1 for ArcIgnD attribute" #endif ); const MessageType1 ArcEngineMessages::invalidArcIndr( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3023 #ifndef SP_NO_MESSAGE_TEXT ,"invalid value %1 for ArcIndr architectural support attribute" #endif ); const MessageType1 ArcEngineMessages::invalidQuantity( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3024 #ifndef SP_NO_MESSAGE_TEXT ,"unrecognized quantity name %1" #endif ); const MessageType1 ArcEngineMessages::missingQuantityValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3025 #ifndef SP_NO_MESSAGE_TEXT ,"no value specified for quantity %1" #endif ); const MessageType1 ArcEngineMessages::quantityValueTooLong( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3026 #ifndef SP_NO_MESSAGE_TEXT ,"length of value %1 for quantity is too long" #endif ); const MessageType1 ArcEngineMessages::invalidDigit( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3027 #ifndef SP_NO_MESSAGE_TEXT ,"invalid digit %1" #endif ); const MessageType0 ArcEngineMessages::arcIndrNotSupported( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3028 #ifndef SP_NO_MESSAGE_TEXT ,"only value of nArcIndr for ArcIndr attribute supported" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ArcEngineMessages.msg100444 764 764 4147 6606574406 15027 0ustar jjcjjc# Copyright (c) 1996 James Clark # See the file COPYING for copying permission. # Format is+ # TN+tag+relevant clauses+message # where T is a letter indicating the type, and N is the number of arguments. =3000 E1+arcGenerateSystemId++no system identifier could be generated for meta-DTD for architecture %1 E1+undefinedElement++element type %1 not defined in meta-DTD E1+elementExcluded++element %1 invalid in meta-DTD because excluded E1+invalidElement++meta-DTD does not allow element %1 at this point E1+documentElementNotArc++document element must be instance of %1 element type form E1+unfinishedElement++element %1 unfinished in meta-DTD E0+renameMissingAttName++missing substitute name E1+renameToInvalid++substitute for non-existent architecture attribute %1 E1+renameToDuplicate++substitute name for %1 already defined E1+renameFromInvalid++substitute name %1 is not the name of an attribute X1+missingId++reference in architecture to non-existent ID %1 E0+invalidArcContent++architectural content specified with #ARCCONT not allowed by meta-DTD E1+invalidSuppress++invalid value %1 for ArcSupr attribute E1+arcDtdNotDeclaredParameter++no declaration for meta-DTD parameter entity %1 E1+arcDtdNotDeclaredGeneral++no declaration for meta-DTD general entity %1 E1+arcDtdNotExternal++meta-DTD entity %1 must be external W0+noArcDTDAtt++no ArcDTD architecture support attribute specified E1+noArcDataF++ArcDataF notation %1 not defined in meta-DTD E1+idMismatch++ID attribute %1 in meta-DTD not declared as ID in DTD E1+invalidArcAuto++invalid value %1 for ArcAuto architectural support attribute E1+noArcNotation++no notation declaration for architecture %1 E0+invalidData++meta-DTD does not allow data at this point E1+invalidIgnD++invalid value %1 for ArcIgnD attribute E1+invalidArcIndr++invalid value %1 for ArcIndr architectural support attribute E1+invalidQuantity++unrecognized quantity name %1 E1+missingQuantityValue++no value specified for quantity %1 E1+quantityValueTooLong++length of value %1 for quantity is too long E1+invalidDigit++invalid digit %1 E0+arcIndrNotSupported++only value of nArcIndr for ArcIndr attribute supported jade-1.2.1/lib/ArcEngineMessages.rc100444 764 764 3160 6606636234 14635 0ustar jjcjjcSTRINGTABLE BEGIN 3000, "no system identifier could be generated for meta-DTD for architecture %1" 3001, "element type %1 not defined in meta-DTD" 3002, "element %1 invalid in meta-DTD because excluded" 3003, "meta-DTD does not allow element %1 at this point" 3004, "document element must be instance of %1 element type form" 3005, "element %1 unfinished in meta-DTD" 3006, "missing substitute name" 3007, "substitute for non-existent architecture attribute %1" 3008, "substitute name for %1 already defined" 3009, "substitute name %1 is not the name of an attribute" 3010, "reference in architecture to non-existent ID %1" 3011, "architectural content specified with #ARCCONT not allowed by meta-DTD" 3012, "invalid value %1 for ArcSupr attribute" 3013, "no declaration for meta-DTD parameter entity %1" 3014, "no declaration for meta-DTD general entity %1" 3015, "meta-DTD entity %1 must be external" 3016, "no ArcDTD architecture support attribute specified" 3017, "ArcDataF notation %1 not defined in meta-DTD" 3018, "ID attribute %1 in meta-DTD not declared as ID in DTD" 3019, "invalid value %1 for ArcAuto architectural support attribute" 3020, "no notation declaration for architecture %1" 3021, "meta-DTD does not allow data at this point" 3022, "invalid value %1 for ArcIgnD attribute" 3023, "invalid value %1 for ArcIndr architectural support attribute" 3024, "unrecognized quantity name %1" 3025, "no value specified for quantity %1" 3026, "length of value %1 for quantity is too long" 3027, "invalid digit %1" 3028, "only value of nArcIndr for ArcIndr attribute supported" END jade-1.2.1/lib/ArcProcessor.h100444 764 764 14525 6606574406 13573 0ustar jjcjjc// 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 attMapFrom; // corresponding list of indexes in form's attlist Vector 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 &, const ConstPtr &, const SgmlParser *parser, Messenger *, const Vector &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(); ConstPtr 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 getAttributeNotation(const StringC &, const Location &); ConstPtr getAttributeEntity(const StringC &, const Location &); void noteCurrentAttribute(size_t, AttributeValue *); ConstPtr 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 &attRenamed); void buildAttributeMapRest(MetaMap &map, const AttributeList &atts, const AttributeList *linkAtts, const Vector &attRenamed); Boolean matchName(const StringC &name, const char *key); void split(const Text &text, Char space, Vector &tokens, Vector &tokenPos); Boolean mapAttributes(const AttributeList &from, const AttributeList *fromLink, const Text *content, AttributeList &to, ConstPtr &arcContent, const MetaMap &map); void supportAttributes(const AttributeList &); void processArcOpts(const AttributeList &atts); void processArcQuant(const Text &); ConstPtr 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 docDtd_; Ptr metaDtd_; ConstPtr docSyntax_; ConstPtr metaSyntax_; ConstPtr 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 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 openElementFlags_; AttributeList attributeList_; NCVector > metaMapCache_; MetaMap noCacheMetaMap_; NamedTable idTable_; Vector > currentAttributes_; ConstPtr defaultNotation_; Boolean errorIdref_; ArcDirector *director_; EventHandler *docHandler_; Owner ownEventHandler_; size_t docIndex_; }; #ifdef SP_NAMESPACE } #endif #endif /* not ArcProcessor_INCLUDED */ jade-1.2.1/lib/Attribute.cxx100444 764 764 102043 6606574410 13510 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Attribute.h" #include "MessageArg.h" #include "macros.h" #include "ParserMessages.h" #include "StringVectorMessageArg.h" #include "Syntax.h" #include "Entity.h" #include "Notation.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif DeclaredValue::DeclaredValue() { } DeclaredValue::~DeclaredValue() { } AttributeValue *DeclaredValue::makeValueFromToken(Text &text, AttributeContext &context, const StringC &name, unsigned &specLength) const { return makeValue(text, context, name, specLength); } AttributeSemantics *DeclaredValue::makeSemantics(const TokenizedAttributeValue &, AttributeContext &, const StringC &, unsigned &, unsigned &) const { return 0; } Boolean DeclaredValue::containsToken(const StringC &) const { return 0; } Boolean DeclaredValue::isNotation() const { return 0; } Boolean DeclaredValue::isEntity() const { return 0; } Boolean DeclaredValue::isId() const { return 0; } Boolean DeclaredValue::isIdref() const { return 0; } const Vector *DeclaredValue::getTokens() const { return 0; } CdataDeclaredValue::CdataDeclaredValue() { } Boolean CdataDeclaredValue::tokenized() const { return 0; } AttributeValue *CdataDeclaredValue::makeValue(Text &text, AttributeContext &context, const StringC &, unsigned &specLength) const { const Syntax &syntax = context.attributeSyntax(); size_t normsep = syntax.normsep(); size_t normalizedLength = text.normalizedLength(normsep); specLength += normalizedLength; size_t litlen = syntax.litlen(); // A length error will already have been given if // length > litlen - normsep. if (litlen >= normsep && text.size() <= litlen - normsep && normalizedLength > litlen) context.message(ParserMessages::normalizedAttributeValueLength, NumberMessageArg(litlen), NumberMessageArg(normalizedLength)); return new CdataAttributeValue(text); } void CdataDeclaredValue::buildDesc(AttributeDefinitionDesc &desc) const { desc.declaredValue = AttributeDefinitionDesc::cdata; } DeclaredValue *CdataDeclaredValue::copy() const { return new CdataDeclaredValue(*this); } TokenizedDeclaredValue::TokenizedDeclaredValue(TokenType type, Boolean isList) : type_(type), isList_(isList) { switch (type) { case name: case entityName: initialCategories_ = Syntax::nameStartCategory; subsequentCategories_ = (Syntax::nameStartCategory|Syntax::digitCategory | Syntax::otherNameCategory); break; case number: initialCategories_ = Syntax::digitCategory; subsequentCategories_ = Syntax::digitCategory; break; case nameToken: initialCategories_ = (Syntax::nameStartCategory|Syntax::digitCategory | Syntax::otherNameCategory); subsequentCategories_ = initialCategories_; break; case numberToken: initialCategories_ = Syntax::digitCategory; subsequentCategories_ = (Syntax::nameStartCategory|Syntax::digitCategory | Syntax::otherNameCategory); break; } } Boolean TokenizedDeclaredValue::tokenized() const { return 1; } AttributeValue *TokenizedDeclaredValue::makeValue(Text &text, AttributeContext &context, const StringC &str, unsigned &specLength) const { return makeTokenizedValue(text, context, str, specLength); } TokenizedAttributeValue * TokenizedDeclaredValue::makeTokenizedValue(Text &text, AttributeContext &context, const StringC &name, unsigned &specLength) const { Vector spaceIndex; const Syntax &syntax = context.attributeSyntax(); Char space = syntax.space(); text.subst(*(type_ == entityName ? syntax.entitySubstTable() : syntax.generalSubstTable()), space); const StringC &value = text.string(); size_t i = 0; size_t length = value.size(); for (;;) { if (i >= length) { // ends with a space (which would have to have been entered // via a numeric character reference) if (context.validate()) context.message(ParserMessages::attributeValueSyntax); break; } size_t startIndex = i; if (context.validate()) { if (!(syntax.charCategory(value[i]) & initialCategories_)) { context.Messenger::setNextLocation(text.charLocation(i)); Char c = value[i]; if (!(syntax.charCategory(value[i]) & subsequentCategories_)) context.message(ParserMessages::attributeValueChar, StringMessageArg(StringC(&c, 1)), StringMessageArg(name)); else if (initialCategories_ == Syntax::digitCategory) context.message(ParserMessages::attributeValueNumberToken, StringMessageArg(StringC(&c, 1)), StringMessageArg(name)); else context.message(ParserMessages::attributeValueName, StringMessageArg(StringC(&c, 1)), StringMessageArg(name)); } else { for (++i; i < length && (syntax.charCategory(value[i]) & subsequentCategories_); i++) ; if (i < length && value[i] != space) { Char c = value[i]; // character value[i] is not allowed anywhere in the value context.Messenger::setNextLocation(text.charLocation(i)); context.message(ParserMessages::attributeValueChar, StringMessageArg(StringC(&c, 1)), StringMessageArg(name)); } } } while (i < length && value[i] != space) i++; if (i - startIndex > syntax.namelen()) { context.Messenger::setNextLocation(text.charLocation(i)); context.message(ParserMessages::nameTokenLength, NumberMessageArg(syntax.namelen())); } if (i == length) break; if (!isList_ && context.validate() && spaceIndex.size() == 0) { context.Messenger::setNextLocation(text.charLocation(i)); context.message(ParserMessages::attributeValueMultiple, StringMessageArg(name)); } spaceIndex.push_back(i); i++; } size_t normsep = syntax.normsep(); size_t litlen = syntax.litlen(); size_t normalizedLength = normsep + length; // should we count CDATA and SDATA entities here? if (isList_) { normalizedLength += 1; // length is now the number of characters in each token in the list // + 1 for each token in the list; so add normsep - 1 for each // token in the list. if (normsep > 0) normalizedLength += (normsep - 1)*(spaceIndex.size() + 1); else normalizedLength -= spaceIndex.size() + 1; } specLength += normalizedLength; // A length error will already have been given if // length > litlen - normsep. if (litlen >= normsep && length <= litlen - normsep && normalizedLength > litlen) context.message(ParserMessages::normalizedAttributeValueLength, NumberMessageArg(litlen), NumberMessageArg(normalizedLength)); return new TokenizedAttributeValue(text, spaceIndex); } Boolean TokenizedAttributeValue::recoverUnquoted(const StringC &str, const Location &strLoc, AttributeContext &context, const StringC &name) { TextIter iter(text_); TextItem::Type type; const Char *s; size_t len; const Location *loc; if (iter.next(type, s, len, loc) && type == TextItem::data && len == text_.size() && loc->origin().pointer() == strLoc.origin().pointer() && loc->index() + len == strLoc.index() && !iter.next(type, s, len, loc)) { context.Messenger::setNextLocation(strLoc); context.message(ParserMessages::attributeValueChar, StringMessageArg(StringC(str.data(), 1)), StringMessageArg(name)); return 1; } return 0; } void TokenizedDeclaredValue::buildDesc(AttributeDefinitionDesc &desc) const { desc.declaredValue = AttributeDefinitionDesc::DeclaredValue( type_ - name + (isList_ ? AttributeDefinitionDesc::names : AttributeDefinitionDesc::name)); } DeclaredValue *TokenizedDeclaredValue::copy() const { return new TokenizedDeclaredValue(*this); } GroupDeclaredValue::GroupDeclaredValue(TokenType type, Vector &vec) : TokenizedDeclaredValue(type, 0) { vec.swap(allowedValues_); } void GroupDeclaredValue::buildDesc(AttributeDefinitionDesc &desc) const { desc.allowedValues = allowedValues_; } DeclaredValue *GroupDeclaredValue::copy() const { return new GroupDeclaredValue(*this); } AttributeValue *GroupDeclaredValue::makeValue(Text &text, AttributeContext &context, const StringC &name, unsigned &specLength) const { TokenizedAttributeValue *val = makeTokenizedValue(text, context, name, specLength); if (!val || !context.validate()) return val; for (size_t i = 0; i < allowedValues_.size(); i++) if (val->string() == allowedValues_[i]) return val; context.message(ParserMessages::attributeValueNotInGroup, StringMessageArg(val->string()), StringMessageArg(name), StringVectorMessageArg(allowedValues_)); return val; } AttributeValue *GroupDeclaredValue::makeValueFromToken(Text &text, AttributeContext &context, const StringC &, unsigned &specLength) const { const Syntax &syntax = context.attributeSyntax(); size_t litlen = syntax.litlen(); size_t normsep = syntax.normsep(); if (normsep > litlen || text.size() > litlen - normsep) context.message(ParserMessages::normalizedAttributeValueLength, NumberMessageArg(litlen), NumberMessageArg(text.size() + normsep)); specLength += text.size() + normsep; return new TokenizedAttributeValue(text, Vector()); } Boolean GroupDeclaredValue::containsToken(const StringC &token) const { for (size_t i = 0; i < allowedValues_.size(); i++) if (allowedValues_[i] == token) return 1; return 0; } const Vector *GroupDeclaredValue::getTokens() const { return &allowedValues_; } NameTokenGroupDeclaredValue::NameTokenGroupDeclaredValue(Vector &vec) : GroupDeclaredValue(nameToken, vec) { } void NameTokenGroupDeclaredValue::buildDesc(AttributeDefinitionDesc &desc) const { GroupDeclaredValue::buildDesc(desc); desc.declaredValue = AttributeDefinitionDesc::nameTokenGroup; } DeclaredValue *NameTokenGroupDeclaredValue::copy() const { return new NameTokenGroupDeclaredValue(*this); } NotationDeclaredValue::NotationDeclaredValue(Vector &vec) : GroupDeclaredValue(name, vec) { } Boolean NotationDeclaredValue::isNotation() const { return 1; } AttributeSemantics * NotationDeclaredValue::makeSemantics(const TokenizedAttributeValue &value, AttributeContext &context, const StringC &, unsigned &, unsigned &) const { ConstPtr notation = context.getAttributeNotation(value.string(), value.tokenLocation(0)); if (notation.isNull()) { if (context.validate()) { context.setNextLocation(value.tokenLocation(0)); context.message(ParserMessages::invalidNotationAttribute, StringMessageArg(value.string())); } return 0; } return new NotationAttributeSemantics(notation); } void NotationDeclaredValue::buildDesc(AttributeDefinitionDesc &desc) const { GroupDeclaredValue::buildDesc(desc); desc.declaredValue = AttributeDefinitionDesc::notation; } DeclaredValue *NotationDeclaredValue::copy() const { return new NotationDeclaredValue(*this); } EntityDeclaredValue::EntityDeclaredValue(Boolean isList) : TokenizedDeclaredValue(entityName, isList) { } Boolean EntityDeclaredValue::isEntity() const { return 1; } AttributeSemantics * EntityDeclaredValue::makeSemantics(const TokenizedAttributeValue &value, AttributeContext &context, const StringC &, unsigned &, unsigned &nEntityNames) const { Boolean valid = 1; size_t nTokens = value.nTokens(); nEntityNames += nTokens; Vector > entities(nTokens); for (size_t i = 0; i < nTokens; i++) { entities[i] = context.getAttributeEntity(value.token(i), value.tokenLocation(i)); if (entities[i].isNull()) { if (context.validate()) { context.setNextLocation(value.tokenLocation(i)); context.message(ParserMessages::invalidEntityAttribute, StringMessageArg(value.token(i))); } valid = 0; } else if (!entities[i]->isDataOrSubdoc()) { if (context.validate()) { context.Messenger::setNextLocation(value.tokenLocation(i)); context.message(ParserMessages::notDataOrSubdocEntity, StringMessageArg(value.token(i))); } valid = 0; } } if (valid) return new EntityAttributeSemantics(entities); else return 0; } DeclaredValue *EntityDeclaredValue::copy() const { return new EntityDeclaredValue(*this); } IdDeclaredValue::IdDeclaredValue() : TokenizedDeclaredValue(name, 0) { } Boolean IdDeclaredValue::isId() const { return 1; } AttributeSemantics * IdDeclaredValue::makeSemantics(const TokenizedAttributeValue &value, AttributeContext &context, const StringC &, unsigned &, unsigned &) const { Location prevLoc; if (!context.defineId(value.string(), value.tokenLocation(0), prevLoc)) { context.setNextLocation(value.tokenLocation(0)); context.message(ParserMessages::duplicateId, StringMessageArg(value.string()), prevLoc); } return 0; } void IdDeclaredValue::buildDesc(AttributeDefinitionDesc &desc) const { desc.declaredValue = AttributeDefinitionDesc::id; } DeclaredValue *IdDeclaredValue::copy() const { return new IdDeclaredValue(*this); } IdrefDeclaredValue::IdrefDeclaredValue(Boolean isList) : TokenizedDeclaredValue(name, isList) { } AttributeSemantics * IdrefDeclaredValue::makeSemantics(const TokenizedAttributeValue &value, AttributeContext &context, const StringC &, unsigned &nIdrefs, unsigned &) const { size_t nTokens = value.nTokens(); nIdrefs += nTokens; for (size_t i = 0; i < nTokens; i++) context.noteIdref(value.token(i), value.tokenLocation(i)); return 0; } Boolean IdrefDeclaredValue::isIdref() const { return 1; } void IdrefDeclaredValue::buildDesc(AttributeDefinitionDesc &desc) const { TokenizedDeclaredValue::buildDesc(desc); if (desc.declaredValue == AttributeDefinitionDesc::name) desc.declaredValue = AttributeDefinitionDesc::idref; else desc.declaredValue = AttributeDefinitionDesc::idrefs; } DeclaredValue *IdrefDeclaredValue::copy() const { return new IdrefDeclaredValue(*this); } AttributeDefinition::AttributeDefinition(const StringC &name, DeclaredValue *value) : name_(name), declaredValue_(value) { } AttributeDefinition::~AttributeDefinition() { } AttributeValue *AttributeDefinition::checkValue(AttributeValue *p, AttributeContext &) const { return p; } Boolean AttributeDefinition::missingValueWouldMatch(const Text &, const AttributeContext &) const { return 0; } const AttributeValue * AttributeDefinition::defaultValue(const AttributeValue *) const { return 0; } void AttributeDefinition::getDesc(AttributeDefinitionDesc &desc) const { desc.allowedValues.clear(); desc.defaultValue.clear(); desc.currentIndex = 0; buildDesc(desc); declaredValue_->buildDesc(desc); } Boolean AttributeDefinition::isConref() const { return 0; } Boolean AttributeDefinition::isCurrent() const { return 0; } Boolean AttributeDefinition::isFixed() const { return 0; } RequiredAttributeDefinition::RequiredAttributeDefinition(const StringC &name, DeclaredValue *value) : AttributeDefinition(name, value) { } ConstPtr RequiredAttributeDefinition::makeMissingValue(AttributeContext &context) const { if (context.validate()) context.message(ParserMessages::requiredAttributeMissing, StringMessageArg(name())); return 0; } void RequiredAttributeDefinition::buildDesc(AttributeDefinitionDesc &desc) const { desc.defaultValueType = AttributeDefinitionDesc::required; } AttributeDefinition *RequiredAttributeDefinition::copy() const { return new RequiredAttributeDefinition(*this); } CurrentAttributeDefinition::CurrentAttributeDefinition(const StringC &name, DeclaredValue *value, size_t index) : AttributeDefinition(name, value), currentIndex_(index) { } ConstPtr CurrentAttributeDefinition::makeMissingValue(AttributeContext &context) const { if (context.mayDefaultAttribute()) { ConstPtr currentValue = context.getCurrentAttribute(currentIndex_); if (currentValue.isNull() && context.validate()) context.message(ParserMessages::currentAttributeMissing, StringMessageArg(name())); return currentValue; } if (context.validate()) context.message(ParserMessages::attributeMissing, StringMessageArg(name())); return 0; } Boolean CurrentAttributeDefinition::missingValueWouldMatch(const Text &text, const AttributeContext &context) const { if (!context.mayDefaultAttribute()) return 0; ConstPtr currentValue = context.getCurrentAttribute(currentIndex_); if (currentValue.isNull()) return 0; return text.fixedEqual(*currentValue->text()); } AttributeValue * CurrentAttributeDefinition::checkValue(AttributeValue *value, AttributeContext &context) const { context.noteCurrentAttribute(currentIndex_, value); return value; } void CurrentAttributeDefinition::buildDesc(AttributeDefinitionDesc &desc) const { desc.defaultValueType = AttributeDefinitionDesc::current; desc.currentIndex = currentIndex_; } AttributeDefinition *CurrentAttributeDefinition::copy() const { return new CurrentAttributeDefinition(*this); } Boolean CurrentAttributeDefinition::isCurrent() const { return 1; } ImpliedAttributeDefinition::ImpliedAttributeDefinition(const StringC &name, DeclaredValue *value) : AttributeDefinition(name, value) { } ConstPtr ImpliedAttributeDefinition::makeMissingValue(AttributeContext &context) const { return context.makeImpliedAttributeValue(); } void ImpliedAttributeDefinition::buildDesc(AttributeDefinitionDesc &desc) const { desc.defaultValueType = AttributeDefinitionDesc::implied; } AttributeDefinition *ImpliedAttributeDefinition::copy() const { return new ImpliedAttributeDefinition(*this); } const AttributeValue * ImpliedAttributeDefinition::defaultValue(const AttributeValue *impliedValue) const { return impliedValue; } ConrefAttributeDefinition::ConrefAttributeDefinition(const StringC &name, DeclaredValue *value) : ImpliedAttributeDefinition(name, value) { } Boolean ConrefAttributeDefinition::isConref() const { return 1; } void ConrefAttributeDefinition::buildDesc(AttributeDefinitionDesc &desc) const { desc.defaultValueType = AttributeDefinitionDesc::conref; } AttributeDefinition *ConrefAttributeDefinition::copy() const { return new ConrefAttributeDefinition(*this); } DefaultAttributeDefinition::DefaultAttributeDefinition(const StringC &name, DeclaredValue *declaredValue, AttributeValue *defaultValue) : AttributeDefinition(name, declaredValue), value_(defaultValue) { } ConstPtr DefaultAttributeDefinition::makeMissingValue(AttributeContext &context) const { if (context.mayDefaultAttribute()) return value_; if (context.validate()) context.message(ParserMessages::attributeMissing, StringMessageArg(name())); return 0; } Boolean DefaultAttributeDefinition::missingValueWouldMatch(const Text &text, const AttributeContext &context) const { return context.mayDefaultAttribute() && text.fixedEqual(*value_->text()); } void DefaultAttributeDefinition::buildDesc(AttributeDefinitionDesc &desc) const { desc.defaultValueType = AttributeDefinitionDesc::defaulted; desc.defaultValue = value_; } AttributeDefinition *DefaultAttributeDefinition::copy() const { return new DefaultAttributeDefinition(*this); } FixedAttributeDefinition:: FixedAttributeDefinition(const StringC &name, DeclaredValue *declaredValue, AttributeValue *defaultValue) : DefaultAttributeDefinition(name, declaredValue, defaultValue) { } Boolean FixedAttributeDefinition::isFixed() const { return 1; } AttributeValue *FixedAttributeDefinition::checkValue(AttributeValue *value, AttributeContext &context) const { const AttributeValue *fixedValue = DefaultAttributeDefinition::defaultValue(0); if (value && fixedValue && context.validate()) { const Text *text; const StringC *str; const Text *fixedText; const StringC *fixedStr; switch (value->info(text, str)) { case AttributeValue::implied: CANNOT_HAPPEN(); case AttributeValue::cdata: if (fixedValue->info(fixedText, fixedStr) == AttributeValue::cdata) { if (!text->fixedEqual(*fixedText)) context.message(ParserMessages::notFixedValue, StringMessageArg(name())); } break; case AttributeValue::tokenized: if (fixedValue->info(fixedText, fixedStr) == AttributeValue::tokenized) { if (*str != *fixedStr) context.message(ParserMessages::notFixedValue, StringMessageArg(name())); } break; } } return value; } void FixedAttributeDefinition::buildDesc(AttributeDefinitionDesc &desc) const { // get the fixed value DefaultAttributeDefinition::buildDesc(desc); desc.defaultValueType = AttributeDefinitionDesc::fixed; } AttributeDefinition *FixedAttributeDefinition::copy() const { return new FixedAttributeDefinition(*this); } AttributeDefinitionList ::AttributeDefinitionList(Vector > &vec, size_t index, Boolean anyCurrent, size_t idIndex, size_t notationIndex) : index_(index), anyCurrent_(anyCurrent), idIndex_(idIndex), notationIndex_(notationIndex) { defs_.swap(vec); } AttributeDefinitionList:: AttributeDefinitionList(const ConstPtr &def) : prev_(def), index_(size_t(-1)) { if (def.isNull()) { anyCurrent_ = 0; notationIndex_ = size_t(-1); idIndex_ = size_t(-1); } else { anyCurrent_ = def->anyCurrent_; notationIndex_ = def->notationIndex_; idIndex_ = def->idIndex_; defs_ = def->defs_; } } Boolean AttributeDefinitionList::tokenIndex(const StringC &token, unsigned &index) const { for (size_t i = 0; i < defs_.size(); i++) if (defs_[i]->containsToken(token)) { index = i; return 1; } return 0; } Boolean AttributeDefinitionList::tokenIndexUnique(const StringC &token, unsigned i) const { for (++i; i < defs_.size(); i++) if (defs_[i]->containsToken(token)) return 0; return 1; } Boolean AttributeDefinitionList::attributeIndex(const StringC &name, unsigned &index) const { for (size_t i = 0; i < defs_.size(); i++) if (defs_[i]->name() == name) { index = i; return 1; } return 0; } void AttributeDefinitionList::append(AttributeDefinition *def) { if (def->isId() && idIndex_ == size_t(-1)) idIndex_ = defs_.size(); if (def->isNotation() && notationIndex_ == size_t(-1)) notationIndex_ = defs_.size(); if (def->isCurrent()) anyCurrent_ = 1; defs_.resize(defs_.size() + 1); defs_.back() = def; } AttributeSemantics::AttributeSemantics() { } AttributeSemantics::~AttributeSemantics() { } size_t AttributeSemantics::nEntities() const { return 0; } ConstPtr AttributeSemantics::entity(size_t) const { return 0; } ConstPtr AttributeSemantics::notation() const { return 0; } NotationAttributeSemantics::NotationAttributeSemantics(const ConstPtr ¬ation) : notation_(notation) { } ConstPtr NotationAttributeSemantics::notation() const { return notation_; } AttributeSemantics *NotationAttributeSemantics::copy() const { return new NotationAttributeSemantics(*this); } EntityAttributeSemantics::EntityAttributeSemantics(Vector > &entity) { entity.swap(entity_); } size_t EntityAttributeSemantics::nEntities() const { return entity_.size(); } ConstPtr EntityAttributeSemantics::entity(size_t i) const { return entity_[i]; } AttributeSemantics *EntityAttributeSemantics::copy() const { return new EntityAttributeSemantics(*this); } AttributeValue::AttributeValue() { } AttributeValue::~AttributeValue() { } AttributeSemantics *AttributeValue::makeSemantics(const DeclaredValue *, AttributeContext &, const StringC &, unsigned &, unsigned &) const { return 0; } const Text *AttributeValue::text() const { return 0; } Boolean AttributeValue::recoverUnquoted(const StringC &, const Location &, AttributeContext &, const StringC &) { return 0; } ImpliedAttributeValue::ImpliedAttributeValue() { } AttributeValue::Type ImpliedAttributeValue::info(const Text *&, const StringC *&) const { return implied; } TokenizedAttributeValue::TokenizedAttributeValue(Text &text, const Vector &spaceIndex) : spaceIndex_(spaceIndex) { text.swap(text_); } AttributeValue::Type TokenizedAttributeValue::info(const Text *&, const StringC *&string) const { string = &text_.string(); return tokenized; } const Text *TokenizedAttributeValue::text() const { return &text_; } AttributeSemantics * TokenizedAttributeValue::makeSemantics(const DeclaredValue *value, AttributeContext &context, const StringC &name, unsigned &nIdrefs, unsigned &nEntityNames) const { if (text_.size() == 0) return 0; return value->makeSemantics(*this, context, name, nIdrefs, nEntityNames); } CdataAttributeValue::CdataAttributeValue(Text &text) { text.swap(text_); } AttributeValue::Type CdataAttributeValue::info(const Text *&text, const StringC *&) const { text = &text_; return cdata; } const Text *CdataAttributeValue::text() const { return &text_; } Boolean CdataAttributeValue::recoverUnquoted(const StringC &str, const Location &strLoc, AttributeContext &context, const StringC &) { TextIter iter(text_); TextItem::Type type; const Char *s; size_t len; const Location *loc; if (iter.next(type, s, len, loc) && type == TextItem::data && len == text_.size() && loc->origin().pointer() == strLoc.origin().pointer() && loc->index() + len == strLoc.index() && !iter.next(type, s, len, loc)) { text_.addChars(str, strLoc); context.Messenger::setNextLocation(strLoc); context.message(ParserMessages::unquotedAttributeValue); return 1; } return 0; } Attribute::Attribute() : specIndexPlus_(0) { } void Attribute::clear() { specIndexPlus_ = 0; value_.clear(); semantics_.clear(); } AttributeList::AttributeList(const ConstPtr &def) : def_(def), vec_(def.isNull() ? 0 : def->size()), nSpec_(0), conref_(0), nIdrefs_(0), nEntityNames_(0) { } AttributeList::AttributeList() : nSpec_(0), conref_(0) { } void AttributeList::init(const ConstPtr &def) { def_ = def; nSpec_ = 0; conref_ = 0; nIdrefs_ = 0; nEntityNames_ = 0; if (def_.isNull()) vec_.resize(0); else { size_t newLength = def_->size(); size_t clearLim = vec_.size(); if (clearLim > newLength) clearLim = newLength; vec_.resize(newLength); for (size_t i = 0; i < clearLim; i++) vec_[i].clear(); } } void AttributeList::changeDef(const ConstPtr &def) { vec_.resize(def.isNull() ? 0 : def->size()); def_ = def; } void AttributeList::swap(AttributeList &to) { vec_.swap(to.vec_); def_.swap(to.def_); { unsigned tem = to.nIdrefs_; to.nIdrefs_ = nIdrefs_; nIdrefs_ = tem; } { unsigned tem = to.nEntityNames_; to.nEntityNames_ = nEntityNames_; nEntityNames_ = tem; } { size_t tem = to.nSpec_; to.nSpec_ = nSpec_; nSpec_ = tem; } { PackedBoolean tem = to.conref_; to.conref_ = conref_; conref_ = tem; } } void AttributeList::finish(AttributeContext &context) { for (size_t i = 0; i < vec_.size(); i++) if (!vec_[i].specified()) { ConstPtr value = def(i)->makeMissingValue(context); vec_[i].setValue(value); if (!value.isNull()) vec_[i].setSemantics(def(i)->makeSemantics(value.pointer(), context, nIdrefs_, nEntityNames_)); } const Syntax &syntax = context.attributeSyntax(); if (nIdrefs_ > syntax.grpcnt()) context.message(ParserMessages::idrefGrpcnt, NumberMessageArg(syntax.grpcnt())); if (nEntityNames_ > syntax.grpcnt()) context.message(ParserMessages::entityNameGrpcnt, NumberMessageArg(syntax.grpcnt())); if (context.validate() && conref_ && def_->notationIndex() != size_t(-1) && specified(def_->notationIndex())) context.message(ParserMessages::conrefNotation); } void AttributeList::setSpec(unsigned i, AttributeContext &context) { if (vec_[i].specified()) context.message(ParserMessages::duplicateAttributeSpec, StringMessageArg(def(i)->name())); else vec_[i].setSpec(nSpec_++); } void AttributeList::noteInvalidSpec() { // This is needed for error recovery. // We don't want nSpec_ to be > 0, if there is no attribute definition. if (nSpec_) nSpec_++; } Boolean AttributeList::setValue(unsigned i, Text &text, AttributeContext &context, unsigned &specLength) { AttributeValue *value = def(i)->makeValue(text, context, specLength); if (def(i)->isConref()) conref_ = 1; vec_[i].setValue(value); if (value) vec_[i].setSemantics(def(i)->makeSemantics(value, context, nIdrefs_, nEntityNames_)); else if (AttributeValue::handleAsUnterminated(text, context)) return 0; return 1; } void AttributeList::setValueToken(unsigned i, Text &text, AttributeContext &context, unsigned &specLength) { AttributeValue *value = def(i)->makeValueFromToken(text, context, specLength); if (def(i)->isConref()) conref_ = 1; vec_[i].setValue(value); if (value) vec_[i].setSemantics(def(i)->makeSemantics(value, context, nIdrefs_, nEntityNames_)); } const StringC *AttributeList::getId() const { // Check for no attributes if (def_.isNull()) return 0; // Check for no ID declared size_t i = def_->idIndex(); if (i == size_t(-1)) return 0; // Check for invalid value const AttributeValue *v = value(i); if (!v) return 0; // Check for implied value const Text *t = v->text(); if (!t) return 0; return &t->string(); } Boolean AttributeList::recoverUnquoted(const StringC &str, const Location &strLoc, AttributeContext &context) { if (nSpec_ > 0) { for (size_t i = 0; i < vec_.size(); i++) if (vec_[i].specified() && vec_[i].specIndex() == nSpec_ - 1) { const AttributeValue *val = vec_[i].value(); if (val) // I wish I could avoid casting away const here. return ((AttributeValue *)val)->recoverUnquoted(str, strLoc, context, name(i)); break; } return 1; } return 0; } Boolean AttributeList::handleAsUnterminated(AttributeContext &context) { if (nSpec_ > 0) { for (size_t i = 0; i < vec_.size(); i++) { if (vec_[i].specified() && vec_[i].specIndex() == nSpec_ - 1) { const AttributeValue *val = vec_[i].value(); const Text *ptr; if (val && (ptr = val->text()) != 0 && AttributeValue::handleAsUnterminated(*ptr, context)) return 1; break; } } } return 0; } // This tries to guess this attribute value looks like if it had // a missing ending quote. Boolean AttributeValue::handleAsUnterminated(const Text &text, AttributeContext &context) { TextIter iter(text); const Char *lastStr = 0; size_t lastLen; Location startLoc; const Location *loc; TextItem::Type type; const Char *str; size_t len; while (iter.next(type, str, len, loc)) { if (startLoc.origin().isNull() && !loc->origin().isNull()) startLoc = *loc; switch (type) { case TextItem::data: if (len != 1 || *str != context.attributeSyntax().space()) { lastStr = str; lastLen = len; } break; case TextItem::endDelim: case TextItem::endDelimA: case TextItem::ignore: break; default: lastStr = 0; break; } } if (lastStr) { while (lastLen > 0 && lastStr[lastLen - 1] == context.attributeSyntax().space()) lastLen--; const StringC &vi = context.attributeSyntax().delimGeneral(Syntax::dVI); if (lastLen >= vi.size() && (vi == StringC(lastStr + (lastLen - vi.size()), vi.size()))) { context.Messenger::setNextLocation(startLoc); context.message(ParserMessages::literalClosingDelimiter); return 1; } } return 0; } AttributeContext::AttributeContext() : mayDefaultAttribute_(0), validate_(1) { } AttributeContext::~AttributeContext() { } Boolean AttributeContext::defineId(const StringC &, const Location &, Location &) { return 1; } void AttributeContext::noteIdref(const StringC &, const Location &) { } void AttributeContext::noteCurrentAttribute(size_t, AttributeValue *) { } ConstPtr AttributeContext::getCurrentAttribute(size_t) const { return 0; } ConstPtr AttributeContext::getAttributeEntity(const StringC &, const Location &) { return 0; } ConstPtr AttributeContext::getAttributeNotation(const StringC &, const Location &) { return 0; } ConstPtr AttributeContext::makeImpliedAttributeValue() { if (impliedAttributeValue_.isNull()) impliedAttributeValue_ = new ImpliedAttributeValue; return impliedAttributeValue_; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Big5CodingSystem.cxx100444 764 764 3052 6604607562 14627 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MULTI_BYTE #include "Big5CodingSystem.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Big5Decoder : public Decoder { public: Big5Decoder() { } size_t decode(Char *, const char *, size_t, const char **); private: }; class Big5Encoder : public Encoder { public: Big5Encoder() { } void output(const Char *, size_t, OutputByteStream *); }; Decoder *Big5CodingSystem::makeDecoder() const { return new Big5Decoder; } Encoder *Big5CodingSystem::makeEncoder() const { return new Big5Encoder; } size_t Big5Decoder::decode(Char *to, const char *s, size_t slen, const char **rest) { Char *start = to; const unsigned char *us = (const unsigned char *)s; while (slen > 0) { if (!(*us & 0x80)) { *to++ = *us++; slen--; } else { if (slen < 2) break; slen -= 2; unsigned short n = *us++ << 8; n |= *us++; *to++ = n; } } *rest = (const char *)us; return to - start; } void Big5Encoder::output(const Char *s, size_t n, OutputByteStream *sb) { for (; n > 0; s++, n--) { Char c = *s; if (c < 0x80) sb->sputc((unsigned char)c); else if (c & 0x8000) { sb->sputc((unsigned char)(c >> 8)); sb->sputc((unsigned char)(c & 0xff)); } else handleUnencodable(c, sb); } } #ifdef SP_NAMESPACE } #endif #else /* not SP_MULTI_BYTE */ #ifndef __GNUG__ static char non_empty_translation_unit; // sigh #endif #endif /* not SP_MULTI_BYTE */ jade-1.2.1/lib/CatalogEntry.h100444 764 764 710 6604607562 13507 0ustar jjcjjc// Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. #ifndef CatalogEntry_INCLUDED #define CatalogEntry_INCLUDED 1 #include "Location.h" #include "StringC.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct CatalogEntry { StringC to; Location loc; size_t catalogNumber; size_t baseNumber; size_t serial; }; #ifdef SP_NAMESPACE } #endif #endif /* not CatalogEntry_INCLUDED */ jade-1.2.1/lib/CatalogMessages.msg100444 764 764 1401 6604607562 14532 0ustar jjcjjc# Copyright (c) 1994, 1995 James Clark # See the file COPYING for copying permission. # Catalog message definitions =2100 E0+nameExpected++name expected E0+literalExpected++literal expected E0+nameOrLiteralExpected++name or literal expected E0+nulChar++nul character E0+minimumData++not a minimum data character E0+eofInComment++end of entity in comment E0+eofInLiteral++end of entity in literal E0+overrideYesOrNo++OVERRIDE requires argument of YES or NO E0+inLoop++CATALOG entries cause loop W0+systemShouldQuote++second argument for SYSTEM entry should be quoted to avoid ambiguity E1+noDocumentEntry++no DOCUMENT entry in catalog %1 E2+noPublicEntry++no entry for public identifier %1 in catalog %2 W0+dtddeclNotSupported++DTDDECL catalog entries are not supported jade-1.2.1/lib/CatalogMessages.rc100444 764 764 1057 6604610576 14356 0ustar jjcjjcSTRINGTABLE BEGIN 2100, "name expected" 2101, "literal expected" 2102, "name or literal expected" 2103, "nul character" 2104, "not a minimum data character" 2105, "end of entity in comment" 2106, "end of entity in literal" 2107, "OVERRIDE requires argument of YES or NO" 2108, "CATALOG entries cause loop" 2109, "second argument for SYSTEM entry should be quoted to avoid ambiguity" 2110, "no DOCUMENT entry in catalog %1" 2111, "no entry for public identifier %1 in catalog %2" 2112, "DTDDECL catalog entries are not supported" END jade-1.2.1/lib/CatalogMessages.h100444 764 764 7614 6604610576 14206 0ustar jjcjjc// This file was automatically generated from lib\CatalogMessages.msg by msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct CatalogMessages { // 2100 static const MessageType0 nameExpected; // 2101 static const MessageType0 literalExpected; // 2102 static const MessageType0 nameOrLiteralExpected; // 2103 static const MessageType0 nulChar; // 2104 static const MessageType0 minimumData; // 2105 static const MessageType0 eofInComment; // 2106 static const MessageType0 eofInLiteral; // 2107 static const MessageType0 overrideYesOrNo; // 2108 static const MessageType0 inLoop; // 2109 static const MessageType0 systemShouldQuote; // 2110 static const MessageType1 noDocumentEntry; // 2111 static const MessageType2 noPublicEntry; // 2112 static const MessageType0 dtddeclNotSupported; }; const MessageType0 CatalogMessages::nameExpected( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2100 #ifndef SP_NO_MESSAGE_TEXT ,"name expected" #endif ); const MessageType0 CatalogMessages::literalExpected( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2101 #ifndef SP_NO_MESSAGE_TEXT ,"literal expected" #endif ); const MessageType0 CatalogMessages::nameOrLiteralExpected( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2102 #ifndef SP_NO_MESSAGE_TEXT ,"name or literal expected" #endif ); const MessageType0 CatalogMessages::nulChar( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2103 #ifndef SP_NO_MESSAGE_TEXT ,"nul character" #endif ); const MessageType0 CatalogMessages::minimumData( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2104 #ifndef SP_NO_MESSAGE_TEXT ,"not a minimum data character" #endif ); const MessageType0 CatalogMessages::eofInComment( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2105 #ifndef SP_NO_MESSAGE_TEXT ,"end of entity in comment" #endif ); const MessageType0 CatalogMessages::eofInLiteral( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2106 #ifndef SP_NO_MESSAGE_TEXT ,"end of entity in literal" #endif ); const MessageType0 CatalogMessages::overrideYesOrNo( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2107 #ifndef SP_NO_MESSAGE_TEXT ,"OVERRIDE requires argument of YES or NO" #endif ); const MessageType0 CatalogMessages::inLoop( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2108 #ifndef SP_NO_MESSAGE_TEXT ,"CATALOG entries cause loop" #endif ); const MessageType0 CatalogMessages::systemShouldQuote( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2109 #ifndef SP_NO_MESSAGE_TEXT ,"second argument for SYSTEM entry should be quoted to avoid ambiguity" #endif ); const MessageType1 CatalogMessages::noDocumentEntry( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2110 #ifndef SP_NO_MESSAGE_TEXT ,"no DOCUMENT entry in catalog %1" #endif ); const MessageType2 CatalogMessages::noPublicEntry( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2111 #ifndef SP_NO_MESSAGE_TEXT ,"no entry for public identifier %1 in catalog %2" #endif ); const MessageType0 CatalogMessages::dtddeclNotSupported( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2112 #ifndef SP_NO_MESSAGE_TEXT ,"DTDDECL catalog entries are not supported" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/CharsetDecl.cxx100444 764 764 14323 6604607562 13714 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "CharsetDecl.h" #include "macros.h" #include "ISet.h" #include "constant.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif CharsetDeclRange::CharsetDeclRange() { } CharsetDeclRange::CharsetDeclRange(WideChar descMin, Number count, WideChar baseMin) : descMin_(descMin), count_(count), type_(number), baseMin_(baseMin) { } CharsetDeclRange::CharsetDeclRange(WideChar descMin, Number count) : descMin_(descMin), count_(count), type_(unused) { } CharsetDeclRange::CharsetDeclRange(WideChar descMin, Number count, const StringC &str) : descMin_(descMin), count_(count), type_(string), str_(str) { } void CharsetDeclRange::rangeDeclared(WideChar min, Number count, ISet &declared) const { if (count > 0 && min + count > descMin_ && min < descMin_ + count_) { WideChar commMin = (descMin_ > min) ? descMin_ : min; WideChar commMax = min + ((min + count < descMin_ + count_ ? count : descMin_ + count_ - min) - 1); ASSERT(commMin <= commMax); declared.addRange(commMin, commMax); } } void CharsetDeclRange::usedSet(ISet &set) const { if (type_ != unused && count_ > 0 && descMin_ <= charMax) { Char max; if (charMax - descMin_ < count_ - 1) max = charMax; else max = Char(descMin_ + (count_ - 1)); set.addRange(Char(descMin_), max); } } void CharsetDeclRange::stringToChar(const StringC &str, ISet &to) const { if (type_ == string && str_ == str && count_ > 0) to.addRange(descMin_, descMin_ + (count_ - 1)); } void CharsetDeclRange::numberToChar(Number n, ISet &to, Number &count) const { if (type_ == number && n >= baseMin_ && n - baseMin_ < count_) { Number thisCount = count_ - (n - baseMin_); if (to.isEmpty() || thisCount < count) count = thisCount; to.add(descMin_ + (n - baseMin_)); } } Boolean CharsetDeclRange::getCharInfo(WideChar fromChar, CharsetDeclRange::Type &type, Number &n, StringC &str, Number &count) const { if (fromChar >= descMin_ && fromChar - descMin_ < count_) { type = type_; if (type == number) n = baseMin_ + (fromChar - descMin_); else if (type == string) str = str_; count = count_ - (fromChar - descMin_); return 1; } else return 0; } CharsetDeclSection::CharsetDeclSection() { } void CharsetDeclSection::setPublicId(const PublicId &id) { baseset_ = id; } void CharsetDeclSection::addRange(const CharsetDeclRange &range) { ranges_.push_back(range); } void CharsetDeclSection::rangeDeclared(WideChar min, Number count, ISet &declared) const { for (size_t i = 0; i < ranges_.size(); i++) ranges_[i].rangeDeclared(min, count, declared); } void CharsetDeclSection::usedSet(ISet &set) const { for (size_t i = 0; i < ranges_.size(); i++) ranges_[i].usedSet(set); } void CharsetDeclSection::stringToChar(const StringC &str, ISet &to) const { for (size_t i = 0; i < ranges_.size(); i++) ranges_[i].stringToChar(str, to); } void CharsetDeclSection::numberToChar(const PublicId *id, Number n, ISet &to, Number &count) const { PublicId::OwnerType ownerType; StringC seq1, seq2; if (id->string() == baseset_.string() // Assume that 2 ISO character sets are the same if // their designating sequences are the same. || (id->getOwnerType(ownerType) && ownerType == PublicId::ISO && baseset_.getOwnerType(ownerType) && ownerType == PublicId::ISO && id->getDesignatingSequence(seq1) && baseset_.getDesignatingSequence(seq2) && seq1 == seq2)) { for (size_t i = 0; i < ranges_.size(); i++) ranges_[i].numberToChar(n, to, count); } } Boolean CharsetDeclSection::getCharInfo(WideChar fromChar, const PublicId *&id, CharsetDeclRange::Type &type, Number &n, StringC &str, Number &count) const { for (size_t i = 0; i < ranges_.size(); i++) if (ranges_[i].getCharInfo(fromChar, type, n, str, count)) { id = &baseset_; return 1; } return 0; } CharsetDecl::CharsetDecl() { } void CharsetDecl::addSection(const PublicId &id) { sections_.resize(sections_.size() + 1); sections_.back().setPublicId(id); } void CharsetDecl::swap(CharsetDecl &to) { sections_.swap(to.sections_); declaredSet_.swap(to.declaredSet_); } void CharsetDecl::clear() { sections_.clear(); } void CharsetDecl::addRange(WideChar min, Number count, WideChar baseMin) { if (count > 0) declaredSet_.addRange(min, min + (count - 1)); CharsetDeclRange range(min, count, baseMin); sections_.back().addRange(range); } void CharsetDecl::addRange(WideChar min, Number count) { if (count > 0) declaredSet_.addRange(min, min + (count - 1)); CharsetDeclRange range(min, count); sections_.back().addRange(range); } void CharsetDecl::addRange(WideChar min, Number count, const StringC &str) { if (count > 0) declaredSet_.addRange(min, min + (count - 1)); CharsetDeclRange range(min, count, str); sections_.back().addRange(range); } void CharsetDecl::rangeDeclared(WideChar min, Number count, ISet &declared) const { for (size_t i = 0; i < sections_.size(); i++) sections_[i].rangeDeclared(min, count, declared); } void CharsetDecl::usedSet(ISet &set) const { for (size_t i = 0; i < sections_.size(); i++) sections_[i].usedSet(set); } Boolean CharsetDecl::getCharInfo(WideChar fromChar, const PublicId *&id, CharsetDeclRange::Type &type, Number &n, StringC &str, Number &count) const { for (size_t i = 0; i < sections_.size(); i++) if (sections_[i].getCharInfo(fromChar, id, type, n, str, count)) return 1; return 0; } void CharsetDecl::stringToChar(const StringC &str, ISet &to) const { for (size_t i = 0; i < sections_.size(); i++) sections_[i].stringToChar(str, to); } void CharsetDecl::numberToChar(const PublicId *id, Number n, ISet &to, Number &count) const { for (size_t i = 0; i < sections_.size(); i++) sections_[i].numberToChar(id, n, to, count); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/CharsetInfo.cxx100444 764 764 6340 6604607562 13720 0ustar jjcjjc// Copyright (c) 1994, 1997 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "CharsetInfo.h" #include "ISet.h" #include "constant.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif CharsetInfo::CharsetInfo(const UnivCharsetDesc &desc) : desc_(desc) { // FIXME remove mappings from desc for characters greater charMax init(); } CharsetInfo::CharsetInfo() { inverse_.setAll(unsigned(-1)); } void CharsetInfo::set(const UnivCharsetDesc &desc) { desc_ = desc; init(); } void CharsetInfo::init() { inverse_.setAll(Unsigned32(-1)); UnivCharsetDescIter iter(desc_); WideChar descMin, descMax; UnivChar univMin; while (iter.next(descMin, descMax, univMin)) { if (univMin <= charMax) { Char univMax; if (charMax - univMin < descMax - descMin) univMax = charMax; else univMax = univMin + (descMax - descMin); Unsigned32 diff = ((descMin - univMin) & ((Unsigned32(1) << 31) - 1)); for (;;) { Char max; Unsigned32 n = inverse_.getRange(univMin, max); if (max > univMax) max = univMax; if (n == Unsigned32(-1)) inverse_.setRange(univMin, max, diff); else if (n != Unsigned32(-2)) inverse_.setRange(univMin, max, Unsigned32(-2)); if (max == univMax) break; univMin = max + 1; } } } // These are the characters that the ANSI C // standard guarantees will be in the basic execution // character set. static char execChars[] = "\t\n\r " "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789" "!\"#%&'()*+,-./:" ";<=>?[\\]^_{|}~"; // These are the corresponding ISO 646 codes. static char univCodes[] = { 9, 10, 13, 32, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 58, 59, 60, 61, 62, 63, 91, 92, 93, 94, 95, 123, 124, 125, 126, }; for (size_t i = 0; execChars[i] != '\0'; i++) { WideChar c; ISet set; if (univToDesc(univCodes[i], c, set) > 0 && c <= Char(-1)) execToDesc_[(unsigned char)execChars[i]] = Char(c); } } void CharsetInfo::getDescSet(ISet &set) const { UnivCharsetDescIter iter(desc_); WideChar descMin, descMax; UnivChar univMin; while (iter.next(descMin, descMax, univMin)) { if (descMin > charMax) break; if (descMax > charMax) descMax = charMax; set.addRange(Char(descMin), Char(descMax)); } } int CharsetInfo::digitWeight(Char c) const { for (int i = 0; i < 10; i++) if (c == execToDesc('0' + i)) return i; return -1; } int CharsetInfo::hexDigitWeight(Char c) const { for (int i = 0; i < 10; i++) if (c == execToDesc('0' + i)) return i; for (int i = 0; i < 6; i++) if (c == execToDesc('a' + i) || c == execToDesc('A' + i)) return i + 10; return -1; } StringC CharsetInfo::execToDesc(const char *s) const { StringC result; while (*s != '\0') result += execToDesc(*s++); return result; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/CharsetRegistry.cxx100444 764 764 17241 6606574410 14654 0ustar jjcjjc// Copyright (c) 1994, 1997 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "CharsetRegistry.h" #include "CharsetInfo.h" #include "StringC.h" #include "types.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif CharsetRegistry::Iter::~Iter() { } class CharsetRegistryRangeIter : public CharsetRegistry::Iter { public: CharsetRegistryRangeIter(const UnivCharsetDesc::Range *p, size_t n) : p_(p), n_(n) { } Boolean next(WideChar &min, WideChar &max, UnivChar &univ) { if (n_) { min = p_->descMin; max = p_->descMin + (p_->count - 1); univ = p_->univMin; p_++; n_--; return 1; } else return 0; } private: const UnivCharsetDesc::Range *p_; size_t n_; }; class CharsetRegistryDescIter : public CharsetRegistry::Iter { public: CharsetRegistryDescIter(const unsigned short *p) : p_(p + 2), n_(p[0]), c_(p[1]) { } Boolean next(WideChar &min, WideChar &max, UnivChar &univ) { if (n_ == 0) { n_ = *p_; if (n_ == 0) return 0; p_++; c_ = *p_++; } int i = 1; for (; i < n_; i++) if (p_[i] != p_[i - 1] + 1) break; min = c_; max = min + (i - 1); univ = p_[0]; p_ += i; c_ += i; n_ -= i; return 1; } private: const unsigned short *p_; size_t n_; WideChar c_; }; static struct { const char *esc; CharsetRegistry::ISORegistrationNumber number; } escTable[] = { { "\x1B\x25\x40", CharsetRegistry::ISO646_ASCII_G0 }, { "\x1B\x28\x40", CharsetRegistry::ISO646_ASCII_G0 }, { "\x1B\x28\x42", CharsetRegistry::ISO646_ASCII_G0 }, // ASCII { "\x1B\x21\x40", CharsetRegistry::ISO646_C0 }, { "\x1B\x2D\x41", CharsetRegistry::ISO8859_1 }, { "\x1B\x2D\x42", CharsetRegistry::ISO8859_2 }, { "\x1B\x2D\x43", CharsetRegistry::ISO8859_3 }, { "\x1B\x2D\x44", CharsetRegistry::ISO8859_4 }, { "\x1B\x2D\x4C", CharsetRegistry::ISO8859_5 }, { "\x1B\x2D\x47", CharsetRegistry::ISO8859_6 }, { "\x1B\x2D\x46", CharsetRegistry::ISO8859_7 }, { "\x1B\x2D\x48", CharsetRegistry::ISO8859_8 }, { "\x1B\x2D\x4D", CharsetRegistry::ISO8859_9 }, { "\x1B\x28\x4A", CharsetRegistry::ISO646_JIS_G0 }, { "\x1B\x28\x49", CharsetRegistry::JIS0201 }, { "\x1B\x24\x42", CharsetRegistry::JIS0208 }, { "\x1B\x26\x40\x1B\x24\x42", CharsetRegistry::JIS0208 }, { "\x1B\x24\x28\x44", CharsetRegistry::JIS0212 }, { "\x1B\x24\x41", CharsetRegistry::GB2312 }, { "\x1B\x24\x28\x43", CharsetRegistry::KSC5601 }, { "\x1B\x25\x2F\x40", CharsetRegistry::ISO10646_UCS2 }, { "\x1B\x25\x2F\x41", CharsetRegistry::ISO10646_UCS4 }, { "\x1B\x25\x2F\x43", CharsetRegistry::ISO10646_UCS2 }, { "\x1B\x25\x2F\x44", CharsetRegistry::ISO10646_UCS4 }, { "\x1B\x25\x2F\x45", CharsetRegistry::ISO10646_UCS2 }, { "\x1B\x25\x2F\x46", CharsetRegistry::ISO10646_UCS4 }, }; static const UnivCharsetDesc::Range iso646_ascii[] = { { 0, 128, 0 }, }; static const UnivCharsetDesc::Range iso646_C0[] = { { 0, 32, 0 }, { 127, 1, 127 }, }; static const UnivCharsetDesc::Range iso6429[] = { { 0, 32, 128 }, }; static const UnivCharsetDesc::Range iso8859_1[] = { { 32, 96, 160 }, }; static const UnivCharsetDesc::Range iso10646_ucs2[] = { { 0, 65536, 0 }, }; static const UnivCharsetDesc::Range iso10646_ucs4[] = { { 0, 0x80000000, 0 }, }; static struct { CharsetRegistry::ISORegistrationNumber number; const UnivCharsetDesc::Range *ranges; size_t nRanges; } rangeTable[] = { { CharsetRegistry::ISO646_ASCII_G0, iso646_ascii, SIZEOF(iso646_ascii) }, { CharsetRegistry::ISO646_C0, iso646_C0, SIZEOF(iso646_C0) }, { CharsetRegistry::ISO6429, iso6429, SIZEOF(iso6429) }, { CharsetRegistry::ISO8859_1, iso8859_1, SIZEOF(iso8859_1) }, { CharsetRegistry::ISO10646_UCS2, iso10646_ucs2, SIZEOF(iso10646_ucs2) }, { CharsetRegistry::ISO10646_UCS4, iso10646_ucs4, SIZEOF(iso10646_ucs4) }, }; static const unsigned short iso8859_2[] = { #include "iso8859-2.h" }; static const unsigned short iso8859_3[] = { #include "iso8859-3.h" }; static const unsigned short iso8859_4[] = { #include "iso8859-4.h" }; static const unsigned short iso8859_5[] = { #include "iso8859-5.h" }; static const unsigned short iso8859_6[] = { #include "iso8859-6.h" }; static const unsigned short iso8859_7[] = { #include "iso8859-7.h" }; static const unsigned short iso8859_8[] = { #include "iso8859-8.h" }; static const unsigned short iso8859_9[] = { #include "iso8859-9.h" }; static const unsigned short iso646_jis_G0[] = { #include "iso646-jis.h" }; static const unsigned short jis0201[] = { #include "jis0201.h" }; #ifdef SP_MULTI_BYTE static const unsigned short jis0208[] = { #include "jis0208.h" }; static const unsigned short jis0212[] = { #include "jis0212.h" }; static const unsigned short gb2312[] = { #include "gb2312.h" }; static const unsigned short ksc5601[] = { #include "ksc5601.h" }; static const unsigned short big5[] = { #include "big5.h" }; #endif /* SP_MULTI_BYTE */ static const struct { CharsetRegistry::ISORegistrationNumber number; const unsigned short *desc; } descTable[] = { { CharsetRegistry::ISO8859_2, iso8859_2 }, { CharsetRegistry::ISO8859_3, iso8859_3 }, { CharsetRegistry::ISO8859_4, iso8859_4 }, { CharsetRegistry::ISO8859_5, iso8859_5 }, { CharsetRegistry::ISO8859_6, iso8859_6 }, { CharsetRegistry::ISO8859_7, iso8859_7 }, { CharsetRegistry::ISO8859_8, iso8859_8 }, { CharsetRegistry::ISO8859_9, iso8859_9 }, { CharsetRegistry::ISO646_JIS_G0, iso646_jis_G0 }, { CharsetRegistry::JIS0201, jis0201 }, #ifdef SP_MULTI_BYTE { CharsetRegistry::JIS0208, jis0208 }, { CharsetRegistry::JIS0212, jis0212 }, { CharsetRegistry::GB2312, gb2312 }, { CharsetRegistry::KSC5601, ksc5601 }, { CharsetRegistry::BIG5, big5 }, #endif }; CharsetRegistry::ISORegistrationNumber CharsetRegistry::getRegistrationNumber(const StringC &sequence, const CharsetInfo &charset) { // Canonicalize the escape sequence by mapping esc -> ESC, // removing leading zeros from escape sequences, and removing // initial spaces. StringC s; for (size_t i = 0; i < sequence.size(); i++) { Char c = sequence[i]; if (c == charset.execToDesc('e')) s += charset.execToDesc('E'); else if (c == charset.execToDesc('s')) s += charset.execToDesc('S'); else if (c == charset.execToDesc('c')) s += charset.execToDesc('C'); else if (charset.digitWeight(c) >= 0 && s.size() > 0 && s[s.size() - 1] == charset.execToDesc('0') && (s.size() == 1 || charset.digitWeight(s[s.size() - 2]) >= 0)) s[s.size() - 1] = c; else if (c != charset.execToDesc(' ') || s.size() > 0) s += c; } for (size_t i = 0; i < SIZEOF(escTable); i++) { StringC esc; for (const char *p = escTable[i].esc; *p; p++) { if (*p == 0x1B) esc += charset.execToDesc("ESC"); else { static const char digits[] = "0123456789"; int c = (unsigned char)*p >> 4; if (c >= 10) esc += charset.execToDesc('1'); esc += charset.execToDesc(digits[c % 10]); esc += charset.execToDesc('/'); c = (*p & 0xf); if (c >= 10) esc += charset.execToDesc('1'); esc += charset.execToDesc(digits[c % 10]); } if (p[1]) esc += charset.execToDesc(' '); } if (s == esc) return escTable[i].number; } return UNREGISTERED; } CharsetRegistry::Iter *CharsetRegistry::makeIter(ISORegistrationNumber number) { for (size_t i = 0; i < SIZEOF(rangeTable); i++) { if (number == rangeTable[i].number) return new CharsetRegistryRangeIter(rangeTable[i].ranges, rangeTable[i].nRanges); } for (size_t i = 0; i < SIZEOF(descTable); i++) { if (number == descTable[i].number) return new CharsetRegistryDescIter(descTable[i].desc); } return 0; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/CmdLineApp.cxx100444 764 764 23115 6604607562 13506 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. // Need option registration method that allows derived class to change // option names. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "CmdLineApp.h" #include "CmdLineAppMessages.h" #include "MessageArg.h" #include "ErrnoMessageArg.h" #include "Options.h" #include "version.h" #include "xnew.h" #include "macros.h" #include "sptchar.h" #include "MessageTable.h" #include "CodingSystemKit.h" #include "ConsoleOutput.h" #include #include #include #include #ifdef SP_HAVE_LOCALE #include #endif #ifdef SP_HAVE_SETMODE #include #include #endif #include #ifdef SP_INCLUDE_UNISTD_H #include #endif #ifdef SP_INCLUDE_IO_H #include #endif #ifdef _MSC_VER #include #endif #ifndef SP_DEFAULT_ENCODING #ifdef WIN32 #define SP_DEFAULT_ENCODING SP_T("WINDOWS") #else #define SP_DEFAULT_ENCODING SP_T("IS8859-1") #endif #endif /* not SP_DEFAULT_ENCODING */ #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif static const SP_TCHAR *progName = 0; static const SP_TCHAR versionString[] = SP_VERSION; static FileOutputByteStream standardOutput(1, 0); static FileOutputByteStream standardError(2, 0); CmdLineApp::CmdLineApp(const char *requiredInternalCode) : errorFile_(0), outputCodingSystem_(0), // Colon at beginning is Posix.2ism that says to return : rather than ? for // missing option argument. optstr_(SP_T(":"), 1), MessageReporter(0), internalCharsetIsDocCharset_(1), codingSystem_(0) { initCodingSystem(requiredInternalCode); setMessageStream(makeStdErr()); registerOption('b', internalCharsetIsDocCharset_ ? SP_T("bctf") : SP_T("encoding")); registerOption('f', SP_T("error_file")); registerOption('v'); } void CmdLineApp::resetCodingSystemKit() { codingSystemKit_ = codingSystemKit_->copy(); } void CmdLineApp::registerOption(AppChar c, const AppChar *argName) { optstr_ += c; if (argName) { optstr_ += SP_T(':'); optArgNames_.push_back(argName); } } StringC CmdLineApp::usageString() { String result; if (progName) result.assign(progName, tcslen(progName)); PackedBoolean hadOption[128]; for (int i = 0; i < 128; i++) hadOption[i] = 0; Boolean hadNoArgOption = 0; for (size_t i = 1; i < optstr_.size(); i++) { if (optstr_[i] == 0) break; if (i + 1 < optstr_.size() && optstr_[i + 1] == ':') i++; else if (!hadOption[optstr_[i]]) { hadOption[optstr_[i]] = 1; if (!hadNoArgOption) { hadNoArgOption = 1; result.append(SP_T(" [-"), 3); } result += optstr_[i]; } } if (hadNoArgOption) result += SP_T(']'); size_t j = 0; for (size_t i = 1; i < optstr_.size(); i++) { if (i + 1 < optstr_.size() && optstr_[i + 1] == ':') { if (!hadOption[optstr_[i]]) { hadOption[optstr_[i]] = 1; result += SP_T(' '); result += SP_T('['); result += SP_T('-'); result += optstr_[i]; result += SP_T(' '); result.append(optArgNames_[j], tcslen(optArgNames_[j])); result += SP_T(']'); } i++; j++; } } result.append(SP_T(" sysid..."), tcslen(SP_T(" sysid..."))); result += 0; return convertInput(result.data()); } static void ewrite(const char *s) { int n = (int)strlen(s); while (n > 0) { int nw = write(2, s, n); if (nw < 0) break; n -= nw; s += nw; } } static #ifdef SP_FANCY_NEW_HANDLER int outOfMemory(size_t) #else void outOfMemory() #endif { ewrite("SP library: out of memory\n"); exit(1); #ifdef SP_FANCY_NEW_HANDLER return 0; #endif } int CmdLineApp::init(int, AppChar **argv) { #ifndef SP_ANSI_LIB set_new_handler(outOfMemory); #endif #ifdef SP_HAVE_LOCALE setlocale(LC_ALL, ""); #endif #ifdef SP_HAVE_SETMODE _setmode(1, _O_BINARY); _setmode(2, _O_BINARY); #endif progName = argv[0]; if (progName) setProgramName(convertInput(progName)); return 0; } int CmdLineApp::run(int argc, AppChar **argv) { #ifdef _MSC_VER _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF); #endif #ifdef SP_ANSI_LIB try { #endif int ret = init(argc, argv); if (ret) return ret; int firstArg; ret = processOptions(argc, argv, firstArg); if (ret) return ret; ret = processArguments(argc - firstArg, argv + firstArg); progName = 0; return ret; #ifdef SP_ANSI_LIB } catch ( #ifndef SP_NO_STD_NAMESPACE std:: #endif bad_alloc) { #ifdef SP_FANCY_NEW_HANDLER outOfMemory(0); #else outOfMemory(); #endif } return 1; #endif /* SP_ANSI_LIB */ } int CmdLineApp::processOptions(int argc, AppChar **argv, int &nextArg) { AppChar ostr[2]; optstr_ += SP_T('\0'); Options options(argc, argv, optstr_.data()); AppChar opt; while (options.get(opt)) { switch (opt) { case ':': ostr[0] = options.opt(); ostr[1] = SP_T('\0'); message(CmdLineAppMessages::missingOptionArgError, StringMessageArg(convertInput(ostr))); message(CmdLineAppMessages::usage, StringMessageArg(usageString())); return 1; case '?': ostr[0] = options.opt(); ostr[1] = SP_T('\0'); message(CmdLineAppMessages::invalidOptionError, StringMessageArg(convertInput(ostr))); message(CmdLineAppMessages::usage, StringMessageArg(usageString())); return 1; default: processOption(opt, options.arg()); break; } } nextArg = options.ind(); if (errorFile_) { static FileOutputByteStream file; if (!file.open(errorFile_)) { message(CmdLineAppMessages::openFileError, StringMessageArg(convertInput(errorFile_)), ErrnoMessageArg(errno)); return 1; } setMessageStream(new EncodeOutputCharStream(&file, codingSystem())); } if (!outputCodingSystem_) outputCodingSystem_ = codingSystem(); return 0; } void CmdLineApp::processOption(AppChar opt, const AppChar *arg) { switch (opt) { case 'b': outputCodingSystem_ = lookupCodingSystem(arg); if (!outputCodingSystem_) message(internalCharsetIsDocCharset_ ? CmdLineAppMessages::unknownBctf : CmdLineAppMessages::unknownEncoding, StringMessageArg(convertInput(arg))); break; case 'f': errorFile_ = arg; break; case 'v': // print the version number message(CmdLineAppMessages::versionInfo, StringMessageArg(convertInput(versionString))); break; default: CANNOT_HAPPEN(); } } Boolean CmdLineApp::getMessageText(const MessageFragment &frag, StringC &text) { String str; if (!MessageTable::instance()->getText(frag, str)) return 0; #ifdef SP_WIDE_SYSTEM text.assign((const Char *)str.data(), str.size()); #else str += 0; text = codingSystem()->convertIn(str.data()); #endif return 1; } Boolean CmdLineApp::stringMatches(const SP_TCHAR *s, const char *key) { for (; *key != '\0'; s++, key++) { if (*s != tolower(*key) && *s != toupper(*key)) return 0; } return *s == '\0'; } void CmdLineApp::initCodingSystem(const char *requiredInternalCode) { const char *name = requiredInternalCode; #ifdef SP_MULTI_BYTE char buf[256]; if (!name) { const SP_TCHAR *internalCode = tgetenv(SP_T("SP_SYSTEM_CHARSET")); if (internalCode) { buf[255] = '\0'; for (size_t i = 0; i < 255; i++) { buf[i] = internalCode[i]; if (buf[i] == '\0') break; } name = buf; } } if (requiredInternalCode) internalCharsetIsDocCharset_ = 0; else { const SP_TCHAR *useInternal = tgetenv(SP_T("SP_CHARSET_FIXED")); if (useInternal && (stringMatches(useInternal, "YES") || stringMatches(useInternal, "1"))) internalCharsetIsDocCharset_ = 0; } #endif /* SP_MULTI_BYTE */ codingSystemKit_ = CodingSystemKit::make(name); const SP_TCHAR *codingName = tgetenv(internalCharsetIsDocCharset_ ? SP_T("SP_BCTF") : SP_T("SP_ENCODING")); if (codingName) codingSystem_ = lookupCodingSystem(codingName); #ifdef SP_MULTI_BYTE if (!codingSystem_ && !internalCharsetIsDocCharset_) codingSystem_ = lookupCodingSystem(SP_DEFAULT_ENCODING); #endif if (!codingSystem_ #ifndef SP_WIDE_SYSTEM || codingSystem_->fixedBytesPerChar() > 1 #endif ) codingSystem_ = codingSystemKit_->identityCodingSystem(); } const CodingSystem * CmdLineApp::lookupCodingSystem(const AppChar *codingName) { #define MAX_CS_NAME 50 if (tcslen(codingName) < MAX_CS_NAME) { char buf[MAX_CS_NAME]; int i; for (i = 0; codingName[i] != SP_T('\0'); i++) { SP_TUCHAR c = codingName[i]; #ifdef SP_WIDE_SYSTEM if (c > (unsigned char)-1) return 0; #endif buf[i] = char(c); } buf[i] = '\0'; return codingSystemKit_->makeCodingSystem(buf, internalCharsetIsDocCharset_); } return 0; } StringC CmdLineApp::convertInput(const SP_TCHAR *s) { #ifdef SP_WIDE_SYSTEM StringC str(s, wcslen(s)); #else StringC str(codingSystem()->convertIn(s)); #endif for (size_t i = 0; i < str.size(); i++) if (str[i] == '\n') str[i] = '\r'; return str; } OutputCharStream *CmdLineApp::makeStdErr() { OutputCharStream *os = ConsoleOutput::makeOutputCharStream(2); if (os) return os; return new EncodeOutputCharStream(&standardError, codingSystem()); } OutputCharStream *CmdLineApp::makeStdOut() { OutputCharStream *os = ConsoleOutput::makeOutputCharStream(1); if (os) return os; return new EncodeOutputCharStream(&standardOutput, outputCodingSystem_); } const MessageType2 &CmdLineApp::openFileErrorMessage() { return CmdLineAppMessages::openFileError; } const MessageType2 &CmdLineApp::closeFileErrorMessage() { return CmdLineAppMessages::closeFileError; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/CmdLineAppMessages.h100444 764 764 4664 6604610610 14577 0ustar jjcjjc// This file was automatically generated from lib\CmdLineAppMessages.msg by msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct CmdLineAppMessages { // 4000 static const MessageType1 invalidOptionError; // 4001 static const MessageType1 missingOptionArgError; // 4002 static const MessageType1 usage; // 4003 static const MessageType1 versionInfo; // 4004 static const MessageType1 unknownBctf; // 4005 static const MessageType1 unknownEncoding; // 4006 static const MessageType2 openFileError; // 4007 static const MessageType2 closeFileError; }; const MessageType1 CmdLineAppMessages::invalidOptionError( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4000 #ifndef SP_NO_MESSAGE_TEXT ,"invalid option %1" #endif ); const MessageType1 CmdLineAppMessages::missingOptionArgError( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4001 #ifndef SP_NO_MESSAGE_TEXT ,"missing argument for option %1" #endif ); const MessageType1 CmdLineAppMessages::usage( MessageType::info, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4002 #ifndef SP_NO_MESSAGE_TEXT ,"usage is %1" #endif ); const MessageType1 CmdLineAppMessages::versionInfo( MessageType::info, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4003 #ifndef SP_NO_MESSAGE_TEXT ,"SP version %1" #endif ); const MessageType1 CmdLineAppMessages::unknownBctf( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4004 #ifndef SP_NO_MESSAGE_TEXT ,"unknown BCTF %1" #endif ); const MessageType1 CmdLineAppMessages::unknownEncoding( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4005 #ifndef SP_NO_MESSAGE_TEXT ,"unknown encoding %1" #endif ); const MessageType2 CmdLineAppMessages::openFileError( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4006 #ifndef SP_NO_MESSAGE_TEXT ,"cannot open output file %1 (%2)" #endif ); const MessageType2 CmdLineAppMessages::closeFileError( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4007 #ifndef SP_NO_MESSAGE_TEXT ,"cannot close output file %1 (%2)" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/CmdLineAppMessages.msg100444 764 764 675 6604607562 15130 0ustar jjcjjc# Copyright (c) 1996 James Clark # See the file COPYING for copying permission. # CmdLineApp message definitions =4000 E1+invalidOptionError++invalid option %1 E1+missingOptionArgError++missing argument for option %1 I1+usage++usage is %1 I1+versionInfo++SP version %1 E1+unknownBctf++unknown BCTF %1 E1+unknownEncoding++unknown encoding %1 E2+openFileError++cannot open output file %1 (%2) E2+closeFileError++cannot close output file %1 (%2) jade-1.2.1/lib/CmdLineAppMessages.rc100444 764 764 426 6604610610 14724 0ustar jjcjjcSTRINGTABLE BEGIN 4000, "invalid option %1" 4001, "missing argument for option %1" 4002, "usage is %1" 4003, "SP version %1" 4004, "unknown BCTF %1" 4005, "unknown encoding %1" 4006, "cannot open output file %1 (%2)" 4007, "cannot close output file %1 (%2)" END jade-1.2.1/lib/CodingSystem.cxx100444 764 764 3512 6604607562 14121 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "CodingSystem.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif InputCodingSystem::~InputCodingSystem() { } StringC InputCodingSystem::convertIn(const char *s) const { Decoder *decoder = makeDecoder(); StringC str; str.resize(strlen(s)); str.resize(decoder->decode(&str[0], s, strlen(s), &s)); delete decoder; return str; } Boolean InputCodingSystem::isIdentity() const { return 0; } OutputCodingSystem::~OutputCodingSystem() { } unsigned OutputCodingSystem::fixedBytesPerChar() const { return 0; } String OutputCodingSystem::convertOut(const StringC &str) const { Encoder *encoder = makeEncoder(); StrOutputByteStream stream; encoder->output(str.data(), str.size(), &stream); delete encoder; String result; stream.extractString(result); result += '\0'; return result; } Decoder::Decoder(unsigned minBytesPerChar) : minBytesPerChar_(minBytesPerChar) { } Decoder::~Decoder() { } Boolean Decoder::convertOffset(unsigned long &) const { return false; } Encoder::Encoder() { } Encoder::~Encoder() { } void Encoder::output(Char *s, size_t n, OutputByteStream *sp) { output((const Char *)s, n, sp); } void Encoder::startFile(OutputByteStream *) { } void Encoder::handleUnencodable(Char, OutputByteStream *) { } void Encoder::setUnencodableHandler(Handler *) { } RecoveringEncoder::RecoveringEncoder() : unencodableHandler_(0) { } void RecoveringEncoder::handleUnencodable(Char c, OutputByteStream *sbufp) { if (unencodableHandler_) unencodableHandler_->handleUnencodable(c, sbufp); } void RecoveringEncoder::setUnencodableHandler(Handler *handler) { unencodableHandler_ = handler; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/CodingSystemKit.cxx100444 764 764 35255 6604607562 14622 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "CodingSystemKit.h" #include "TranslateCodingSystem.h" #ifdef SP_MULTI_BYTE #include "UTF8CodingSystem.h" #include "Fixed2CodingSystem.h" #include "UnicodeCodingSystem.h" #include "XMLCodingSystem.h" #include "EUCJPCodingSystem.h" #include "SJISCodingSystem.h" #include "Big5CodingSystem.h" #ifdef WIN32 #include "Win32CodingSystem.h" #endif #endif /* SP_MULTI_BYTE */ #include "IdentityCodingSystem.h" #include "Owner.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_MULTI_BYTE const Char unicodeReplaceChar = 0xfffd; #endif class CodingSystemKitImpl : public CodingSystemKit { public: CodingSystemKitImpl(const TranslateCodingSystem::Desc *); CodingSystemKit *copy() const; Char replacementChar() const; const CodingSystem * identityCodingSystem() const; const InputCodingSystem * identityInputCodingSystem() const; const InputCodingSystem * makeInputCodingSystem(const StringC &, const CharsetInfo &, Boolean isBctf, const char *&) const; const CodingSystem * makeCodingSystem(const char *, Boolean isBctf) const; enum CodingSystemId { identity, fixed2, utf8, unicode, eucjp, euccn, euckr, sjisBctf, eucBctf, sjis, big5, big5Bctf, ansi, oem, maybeUnicode, xml, iso8859_1, iso8859_2, iso8859_3, iso8859_4, iso8859_5, iso8859_6, iso8859_7, iso8859_8, iso8859_9 }; struct Entry { const char *name; CodingSystemId id; }; static Boolean match(const StringC &s, const CharsetInfo &charset, const char *key); static Boolean match(const char *s, const char *key); private: const CodingSystem * makeCodingSystem(CodingSystemId) const; const Entry *firstEntry(Boolean isBctf) const; #ifdef SP_MULTI_BYTE UTF8CodingSystem utf8CodingSystem_; Fixed2CodingSystem fixed2CodingSystem_; UnicodeCodingSystem unicodeCodingSystem_; XMLCodingSystem xmlCodingSystem_; EUCJPCodingSystem eucBctf_; SJISCodingSystem sjisBctf_; Big5CodingSystem big5Bctf_; TranslateCodingSystem eucjpCodingSystem_; TranslateCodingSystem euccnCodingSystem_; TranslateCodingSystem euckrCodingSystem_; TranslateCodingSystem sjisCodingSystem_; TranslateCodingSystem big5CodingSystem_; TranslateCodingSystem iso8859_1CodingSystem_; TranslateCodingSystem iso8859_2CodingSystem_; TranslateCodingSystem iso8859_3CodingSystem_; TranslateCodingSystem iso8859_4CodingSystem_; TranslateCodingSystem iso8859_5CodingSystem_; TranslateCodingSystem iso8859_6CodingSystem_; TranslateCodingSystem iso8859_7CodingSystem_; TranslateCodingSystem iso8859_8CodingSystem_; TranslateCodingSystem iso8859_9CodingSystem_; #ifdef WIN32 Win32CodingSystem ansiCodingSystem_; Win32CodingSystem oemCodingSystem_; UnicodeCodingSystem maybeUnicodeCodingSystem_; #endif #endif /* SP_MULTI_BYTE */ IdentityCodingSystem identityCodingSystem_; const TranslateCodingSystem::Desc *systemCharsetDesc_; static const Entry bctfTable_[]; enum { nEncodingsRequireUnicode = 8 }; static const Entry encodingTable_[]; }; static const TranslateCodingSystem::Desc iso10646Desc[] = { { CharsetRegistry::ISO10646_UCS2, 0x0 }, { CharsetRegistry::UNREGISTERED, 0x0 }, }; #ifdef SP_MULTI_BYTE static const TranslateCodingSystem::Desc jisDesc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_JIS_G0, 0x0 }, { CharsetRegistry::ISO6429, 0x80 }, { CharsetRegistry::JIS0201, 0x80 }, { CharsetRegistry::JIS0208, 0x8080 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; static const TranslateCodingSystem::Desc jis2Desc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_JIS_G0, 0x0 }, { CharsetRegistry::ISO6429, 0x80 }, { CharsetRegistry::JIS0201, 0x80 }, { CharsetRegistry::JIS0208, 0x8080 }, { CharsetRegistry::JIS0212, 0x8000 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; static const TranslateCodingSystem::Desc gbDesc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_ASCII_G0, 0x0 }, { CharsetRegistry::ISO6429, 0x80 }, { CharsetRegistry::GB2312, 0x8080 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; static const TranslateCodingSystem::Desc big5Desc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_ASCII_G0, 0x0 }, { CharsetRegistry::BIG5, 0x0 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; static const TranslateCodingSystem::Desc kscDesc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_ASCII_G0, 0x0 }, { CharsetRegistry::ISO6429, 0x80 }, { CharsetRegistry::KSC5601, 0x8080 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; static const TranslateCodingSystem::Desc iso8859_1Desc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_ASCII_G0, 0x0 }, { CharsetRegistry::ISO6429, 0x80 }, { CharsetRegistry::ISO8859_1, 0x80 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; static const TranslateCodingSystem::Desc iso8859_2Desc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_ASCII_G0, 0x0 }, { CharsetRegistry::ISO6429, 0x80 }, { CharsetRegistry::ISO8859_2, 0x80 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; static const TranslateCodingSystem::Desc iso8859_3Desc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_ASCII_G0, 0x0 }, { CharsetRegistry::ISO6429, 0x80 }, { CharsetRegistry::ISO8859_3, 0x80 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; static const TranslateCodingSystem::Desc iso8859_4Desc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_ASCII_G0, 0x0 }, { CharsetRegistry::ISO6429, 0x80 }, { CharsetRegistry::ISO8859_4, 0x80 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; static const TranslateCodingSystem::Desc iso8859_5Desc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_ASCII_G0, 0x0 }, { CharsetRegistry::ISO6429, 0x80 }, { CharsetRegistry::ISO8859_5, 0x80 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; static const TranslateCodingSystem::Desc iso8859_6Desc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_ASCII_G0, 0x0 }, { CharsetRegistry::ISO6429, 0x80 }, { CharsetRegistry::ISO8859_6, 0x80 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; static const TranslateCodingSystem::Desc iso8859_7Desc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_ASCII_G0, 0x0 }, { CharsetRegistry::ISO6429, 0x80 }, { CharsetRegistry::ISO8859_7, 0x80 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; static const TranslateCodingSystem::Desc iso8859_8Desc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_ASCII_G0, 0x0 }, { CharsetRegistry::ISO6429, 0x80 }, { CharsetRegistry::ISO8859_8, 0x80 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; static const TranslateCodingSystem::Desc iso8859_9Desc[] = { { CharsetRegistry::ISO646_C0, 0x0 }, { CharsetRegistry::ISO646_ASCII_G0, 0x0 }, { CharsetRegistry::ISO6429, 0x80 }, { CharsetRegistry::ISO8859_9, 0x80 }, { CharsetRegistry::UNREGISTERED, 0x0 } }; #endif /* SP_MULTI_BYTE */ const CodingSystemKitImpl::Entry CodingSystemKitImpl::bctfTable_[] = { { "IDENTITY", identity }, #ifdef SP_MULTI_BYTE { "FIXED-2", fixed2 }, { "UTF-8", utf8 }, { "EUC", eucBctf }, { "SJIS", sjisBctf }, { "BIG5", big5Bctf }, #endif /* SP_MULTI_BYTE */ { 0, identity }, }; const CodingSystemKitImpl::Entry CodingSystemKitImpl::encodingTable_[] = { #ifdef SP_MULTI_BYTE { "UTF-8", utf8 }, { "UCS-2", fixed2 }, { "ISO-10646-UCS-2", fixed2 }, { "UNICODE", unicode }, // We don't really support UTF-16, but treating it // as Unicode should work for the most part. { "UTF-16", unicode }, { "WINDOWS", ansi }, { "MS-DOS", oem }, { "WUNICODE", maybeUnicode }, { "XML", xml }, // nEncodingsRequireUnicode = 8 { "IS8859-1", iso8859_1 }, { "ISO-8859-1", iso8859_1 }, { "IS8859-2", iso8859_2 }, { "ISO-8859-2", iso8859_2 }, { "IS8859-3", iso8859_3 }, { "ISO-8859-3", iso8859_3 }, { "IS8859-4", iso8859_4 }, { "ISO-8859-4", iso8859_4 }, { "IS8859-5", iso8859_5 }, { "ISO-8859-5", iso8859_5 }, { "IS8859-6", iso8859_6 }, { "ISO-8859-6", iso8859_6 }, { "IS8859-7", iso8859_7 }, { "ISO-8859-7", iso8859_7 }, { "IS8859-8", iso8859_8 }, { "ISO-8859-8", iso8859_8 }, { "IS8859-9", iso8859_9 }, { "ISO-8859-9", iso8859_9 }, { "EUC-JP", eucjp }, { "EUC-CN", euccn }, { "GB2312", euccn }, { "CN-GB", euccn }, // RFC 1922 { "EUC-KR", euckr }, { "SJIS", sjis }, { "SHIFT_JIS", sjis }, { "BIG5", big5 }, { "CN-BIG5", big5 }, // RFC 1922 #endif /* SP_MULTI_BYTE */ { 0, identity }, }; CodingSystemKitImpl::CodingSystemKitImpl(const TranslateCodingSystem::Desc *systemCharsetDesc) : systemCharsetDesc_(systemCharsetDesc) #ifdef SP_MULTI_BYTE , #ifdef WIN32 ansiCodingSystem_(Win32CodingSystem::codePageAnsi), oemCodingSystem_(Win32CodingSystem::codePageOEM), maybeUnicodeCodingSystem_(&ansiCodingSystem_), #endif xmlCodingSystem_(this), iso8859_1CodingSystem_(&identityCodingSystem_, iso8859_1Desc, &systemCharset_, 0x100, unicodeReplaceChar), iso8859_2CodingSystem_(&identityCodingSystem_, iso8859_2Desc, &systemCharset_, 0x100, unicodeReplaceChar), iso8859_3CodingSystem_(&identityCodingSystem_, iso8859_3Desc, &systemCharset_, 0x100, unicodeReplaceChar), iso8859_4CodingSystem_(&identityCodingSystem_, iso8859_4Desc, &systemCharset_, 0x100, unicodeReplaceChar), iso8859_5CodingSystem_(&identityCodingSystem_, iso8859_5Desc, &systemCharset_, 0x100, unicodeReplaceChar), iso8859_6CodingSystem_(&identityCodingSystem_, iso8859_6Desc, &systemCharset_, 0x100, unicodeReplaceChar), iso8859_7CodingSystem_(&identityCodingSystem_, iso8859_7Desc, &systemCharset_, 0x100, unicodeReplaceChar), iso8859_8CodingSystem_(&identityCodingSystem_, iso8859_8Desc, &systemCharset_, 0x100, unicodeReplaceChar), iso8859_9CodingSystem_(&identityCodingSystem_, iso8859_9Desc, &systemCharset_, 0x100, unicodeReplaceChar), eucjpCodingSystem_(&eucBctf_, jis2Desc, &systemCharset_, 0x8000, unicodeReplaceChar), euccnCodingSystem_(&eucBctf_, gbDesc, &systemCharset_, 0x8000, unicodeReplaceChar), euckrCodingSystem_(&eucBctf_, kscDesc, &systemCharset_, 0x8000, unicodeReplaceChar), sjisCodingSystem_(&sjisBctf_, jisDesc, &systemCharset_, 0x8000, unicodeReplaceChar), big5CodingSystem_(&big5Bctf_, big5Desc, &systemCharset_, 0x0080, unicodeReplaceChar) #endif /* SP_MULTI_BYTE */ { UnivCharsetDesc desc; for (const TranslateCodingSystem::Desc *p = systemCharsetDesc_; p->number != CharsetRegistry::UNREGISTERED; p++) { Owner iter(CharsetRegistry::makeIter(p->number)); if (iter) { WideChar min; WideChar max; UnivChar univ; while (iter->next(min, max, univ)) { min += p->add; max += p->add; if (min <= charMax) { if (max > charMax) max = charMax; desc.addRange(min, max, univ); } } } } systemCharset_.set(desc); } CodingSystemKit *CodingSystemKitImpl::copy() const { return new CodingSystemKitImpl(systemCharsetDesc_); } const CodingSystemKitImpl::Entry *CodingSystemKitImpl::firstEntry(Boolean isBctf) const { if (isBctf) return bctfTable_; #ifdef SP_MULTI_BYTE else if (systemCharsetDesc_ != iso10646Desc) return encodingTable_ + nEncodingsRequireUnicode; #endif else return encodingTable_; } const InputCodingSystem * CodingSystemKitImpl::makeInputCodingSystem(const StringC &s, const CharsetInfo &charset, Boolean isBctf, const char *&key) const { for (const Entry *p = firstEntry(isBctf); p->name; p++) if (match(s, charset, p->name)) { key = p->name; return makeCodingSystem(p->id); } return 0; } Boolean CodingSystemKitImpl::match(const StringC &s, const CharsetInfo &charset, const char *key) { for (size_t i = 0; i < s.size(); i++) { if (key[i] == '\0') return 0; if (charset.execToDesc(toupper(key[i])) != s[i] && charset.execToDesc(tolower(key[i])) != s[i]) return 0; } return key[s.size()] == '\0'; } const CodingSystem * CodingSystemKitImpl::makeCodingSystem(const char *s, Boolean isBctf) const { for (const Entry *p = firstEntry(isBctf); p->name; p++) if (match(s, p->name)) return makeCodingSystem(p->id); return 0; } Boolean CodingSystemKitImpl::match(const char *s, const char *key) { for (; toupper(*key) == *s || tolower(*key) == *s; s++, key++) { if (*s == '\0') return 1; } return 0; } const CodingSystem * CodingSystemKitImpl::makeCodingSystem(CodingSystemId id) const { switch (id) { case identity: return &identityCodingSystem_; #ifdef SP_MULTI_BYTE case fixed2: return &fixed2CodingSystem_; case utf8: return &utf8CodingSystem_; case unicode: return &unicodeCodingSystem_; case eucBctf: return &eucBctf_; case sjisBctf: return &sjisBctf_; case big5Bctf: return &big5Bctf_; case eucjp: return &eucjpCodingSystem_; case euccn: return &euccnCodingSystem_; case euckr: return &euckrCodingSystem_; case sjis: return &sjisCodingSystem_; case big5: return &big5CodingSystem_; case iso8859_1: if (systemCharsetDesc_ == iso10646Desc) return &identityCodingSystem_; else return &iso8859_1CodingSystem_; case iso8859_2: return &iso8859_2CodingSystem_; case iso8859_3: return &iso8859_3CodingSystem_; case iso8859_4: return &iso8859_4CodingSystem_; case iso8859_5: return &iso8859_5CodingSystem_; case iso8859_6: return &iso8859_6CodingSystem_; case iso8859_7: return &iso8859_7CodingSystem_; case iso8859_8: return &iso8859_8CodingSystem_; case iso8859_9: return &iso8859_9CodingSystem_; case xml: return &xmlCodingSystem_; #ifdef WIN32 case ansi: return &ansiCodingSystem_; case oem: return &oemCodingSystem_; case maybeUnicode: return &maybeUnicodeCodingSystem_; #endif /* WIN32 */ #endif /* SP_MULTI_BYTE */ default: break; } return 0; } const InputCodingSystem * CodingSystemKitImpl::identityInputCodingSystem() const { return &identityCodingSystem_; } const CodingSystem * CodingSystemKitImpl::identityCodingSystem() const { return &identityCodingSystem_; } Char CodingSystemKitImpl::replacementChar() const { // FIXME should vary with systemCharset #ifdef SP_MULTI_BYTE return unicodeReplaceChar; #else return 0; #endif } CodingSystemKit * CodingSystemKit::make(const char *systemCharsetName) { #ifdef SP_MULTI_BYTE if (systemCharsetName && CodingSystemKitImpl::match(systemCharsetName, "JIS")) return new CodingSystemKitImpl(jis2Desc); #endif return new CodingSystemKitImpl(iso10646Desc); } InputCodingSystemKit::~InputCodingSystemKit() { } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ConsoleOutput.cxx100444 764 764 2422 6604607562 14333 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "ConsoleOutput.h" #ifdef SP_WIDE_SYSTEM #include #include #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_WIDE_SYSTEM class ConsoleOutputCharStream : public OutputCharStream { public: ConsoleOutputCharStream(HANDLE h); void flush(); void flushBuf(Char); private: HANDLE h_; }; OutputCharStream *ConsoleOutput::makeOutputCharStream(int fd) { HANDLE h = (HANDLE)_get_osfhandle(fd); DWORD flags; if (GetConsoleMode(h, &flags)) return new ConsoleOutputCharStream(h); else return 0; } ConsoleOutputCharStream::ConsoleOutputCharStream(HANDLE h) : h_(h) { } void ConsoleOutputCharStream::flush() { } void ConsoleOutputCharStream::flushBuf(Char c) { DWORD nWritten; unsigned short ch = c; if (WriteConsoleW(h_, &ch, 1, &nWritten, 0)) return; char buf[2]; int nBytes = WideCharToMultiByte(CP_OEMCP, 0, &ch, 1, buf, 2, 0, 0); if (nBytes) WriteConsoleA(h_, buf, nBytes, &nWritten, 0); } #else /* not SP_WIDE_SYSTEM */ OutputCharStream *ConsoleOutput::makeOutputCharStream(int) { return 0; } #endif /* not SP_WIDE_SYSTEM */ #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ContentState.cxx100444 764 764 10702 6604607562 14143 0ustar jjcjjc// Copyright (c) 1994, 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "ContentState.h" #include "IListIter.h" #include "NCVector.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const ShortReferenceMap ContentState::theEmptyMap; #ifdef __GNUG__ typedef IListIter Dummy_IListIter_OpenElement; #endif ContentState::ContentState() : documentElementContainer_(StringC(), size_t(-1)) { } void ContentState::startContent(const Dtd &dtd) { NCVector > tokens(1); tokens[0] = new ElementToken(dtd.documentElementType(), ContentToken::none); Owner model(new SeqModelGroup(tokens, ContentToken::none)); Owner compiledModel(new CompiledModelGroup(model)); Vector ambiguities; Boolean pcdataUnreachable; compiledModel->compile(dtd.nElementTypeIndex(), ambiguities, pcdataUnreachable); ASSERT(ambiguities.size() == 0); ConstPtr def = new ElementDefinition(Location(), 0, 0, ElementDefinition::modelGroup, compiledModel); documentElementContainer_.setElementDefinition(def, 0); tagLevel_ = 0; while (!openElements_.empty()) delete openElements_.get(); openElements_.insert(new OpenElement(&documentElementContainer_, 0, 0, &theEmptyMap, Location())); includeCount_.assign(dtd.nElementTypeIndex(), 0); excludeCount_.assign(dtd.nElementTypeIndex(), 0); openElementCount_.assign(dtd.nElementTypeIndex(), 0); netEnablingCount_ = 0; totalExcludeCount_ = 0; lastEndedElementType_ = 0; nextIndex_ = 0; } void ContentState::pushElement(OpenElement *e) { tagLevel_++; openElementCount_[e->type()->index()]++; const ElementDefinition *def = e->type()->definition(); if (def) { size_t i; for (i = 0; i < def->nInclusions(); i++) includeCount_[def->inclusion(i)->index()]++; for (i = 0; i < def->nExclusions(); i++) { excludeCount_[def->exclusion(i)->index()]++; totalExcludeCount_++; } } if (e->netEnabling()) netEnablingCount_++; e->setIndex(nextIndex_++); openElements_.insert(e); } OpenElement *ContentState::popSaveElement() { ASSERT(tagLevel_ > 0); OpenElement *e = openElements_.get(); tagLevel_--; openElementCount_[e->type()->index()]--; const ElementDefinition *def = e->type()->definition(); if (def) { size_t i; for (i = 0; i < def->nInclusions(); i++) includeCount_[def->inclusion(i)->index()]--; for (i = 0; i < def->nExclusions(); i++) { excludeCount_[def->exclusion(i)->index()]--; totalExcludeCount_--; } } if (e->netEnabling()) netEnablingCount_--; lastEndedElementType_ = e->type(); return e; } void ContentState::popElement() { delete popSaveElement(); } Boolean ContentState::checkImplyLoop(unsigned count) { for (IListIter iter(openElements_); count > 0; iter.next(), count--) if (iter.cur()->type() == openElements_.head()->type() // I'm not sure whether this is necessary. && iter.cur()->matchState() == openElements_.head()->matchState()) return 0; return 1; } void ContentState::getOpenElementInfo(Vector &v, const StringC &rniPcdata) const { v.clear(); v.resize(tagLevel_); unsigned i = tagLevel_; for (IListIter iter(openElements_); !iter.done() && i > 0; iter.next()) { OpenElementInfo &e = v[--i]; e.gi = iter.cur()->type()->name(); const LeafContentToken *token = iter.cur()->currentPosition(); if (token && !token->isInitial()) { e.matchIndex = token->typeIndex() + 1; const ElementType *type = token->elementType(); e.matchType = type ? type->name() : rniPcdata; } e.included = iter.cur()->included(); } } ElementType * ContentState::lookupCreateUndefinedElement(const StringC &name, const Location &loc, Dtd &dtd) { ElementType *p = new ElementType(name, dtd.allocElementTypeIndex()); dtd.insertUndefinedElementType(p); p->setElementDefinition(new ElementDefinition(loc, size_t(ElementDefinition::undefinedIndex), 0, ElementDefinition::any), 0); p->setAttributeDef(dtd.implicitElementAttributeDef()); includeCount_.push_back(0); excludeCount_.push_back(0); openElementCount_.push_back(0); return p; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ContentToken.cxx100444 764 764 51545 6606574410 14152 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include #include "ContentToken.h" #include "macros.h" #include "ElementType.h" #include "Vector.h" #include "Dtd.h" #include "MessageArg.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif AndModelGroup::AndModelGroup(NCVector > &v, ContentToken::OccurrenceIndicator oi) : ModelGroup(v, oi) { } ModelGroup::Connector AndModelGroup::connector() const { return andConnector; } OrModelGroup::OrModelGroup(NCVector > &v, ContentToken::OccurrenceIndicator oi) : ModelGroup(v, oi) { setOrGroup(); } ModelGroup::Connector OrModelGroup::connector() const { return orConnector; } SeqModelGroup::SeqModelGroup(NCVector > &v, ContentToken::OccurrenceIndicator oi) : ModelGroup(v, oi) { } ModelGroup::Connector SeqModelGroup::connector() const { return seqConnector; } ModelGroup::ModelGroup(NCVector > &v, OccurrenceIndicator oi) : ContentToken(oi) { members_.swap(v); } unsigned long ModelGroup::grpgtcnt() const { unsigned long cnt = 1; for (size_t i = 0; i < members_.size(); i++) cnt += members_[i]->grpgtcnt(); return cnt; } void ModelGroup::setOrGroup() { for (size_t i = 0; i < members_.size(); i++) members_[i]->setOrGroupMember(); } const ModelGroup *ModelGroup::asModelGroup() const { return this; } ElementToken::ElementToken(const ElementType *element, OccurrenceIndicator oi) : LeafContentToken(element, oi) { } ContentToken::ContentToken(OccurrenceIndicator oi) : occurrenceIndicator_(oi) { } unsigned long ContentToken::grpgtcnt() const { return 1; } void ContentToken::setOrGroupMember() { } const ModelGroup *ContentToken::asModelGroup() const { return 0; } const LeafContentToken *ContentToken::asLeafContentToken() const { return 0; } LeafContentToken::LeafContentToken(const ElementType *element, OccurrenceIndicator oi) : element_(element), ContentToken(oi), isFinal_(0), orGroupMember_(0), requiredIndex_(size_t(-1)) { } Boolean LeafContentToken::isInitial() const { return 0; } void LeafContentToken::setOrGroupMember() { orGroupMember_ = 1; } const LeafContentToken *LeafContentToken::asLeafContentToken() const { return this; } PcdataToken::PcdataToken() : LeafContentToken(0, rep) { } InitialPseudoToken::InitialPseudoToken() : LeafContentToken(0, none) { } Boolean InitialPseudoToken::isInitial() const { return 1; } DataTagGroup::DataTagGroup(NCVector > &vec, OccurrenceIndicator oi) : SeqModelGroup(vec, oi) { } DataTagElementToken::DataTagElementToken(const ElementType *element, Vector &templates, Text &paddingTemplate) : ElementToken(element, ContentToken::none), havePaddingTemplate_(1) { templates.swap(templates_); paddingTemplate.swap(paddingTemplate_); } DataTagElementToken::DataTagElementToken(const ElementType *element, Vector &templates) : ElementToken(element, ContentToken::none), havePaddingTemplate_(0) { templates.swap(templates_); } ContentToken::~ContentToken() { } struct GroupInfo { unsigned nextLeafIndex; PackedBoolean containsPcdata; unsigned andStateSize; Vector nextTypeIndex; GroupInfo(size_t); }; GroupInfo::GroupInfo(size_t nType) : nextTypeIndex(nType, 0), nextLeafIndex(0), containsPcdata(0), andStateSize(0) { } CompiledModelGroup::CompiledModelGroup(Owner &modelGroup) : modelGroup_(modelGroup.extract()) { } void CompiledModelGroup::compile(size_t nElementTypeIndex, Vector &ambiguities, Boolean &pcdataUnreachable) { FirstSet first; LastSet last; GroupInfo info(nElementTypeIndex); modelGroup_->analyze(info, 0, 0, first, last); for (unsigned i = 0; i < last.size(); i++) last[i]->setFinal(); andStateSize_ = info.andStateSize; containsPcdata_ = info.containsPcdata; initial_ = new InitialPseudoToken; LastSet initialSet(1); initialSet[0] = initial_.pointer(); ContentToken::addTransitions(initialSet, first, 1, 0, 0); if (modelGroup_->inherentlyOptional()) initial_->setFinal(); pcdataUnreachable = 0; Vector minAndDepth(info.nextLeafIndex); Vector elementTransition(nElementTypeIndex); initial_->finish(minAndDepth, elementTransition, ambiguities, pcdataUnreachable); modelGroup_->finish(minAndDepth, elementTransition, ambiguities, pcdataUnreachable); if (!containsPcdata_) pcdataUnreachable = 0; } void ModelGroup::finish(Vector &minAndDepth, Vector &elementTransition, Vector &ambiguities, Boolean &pcdataUnreachable) { for (unsigned i = 0; i < nMembers(); i++) member(i).finish(minAndDepth, elementTransition, ambiguities, pcdataUnreachable); } void LeafContentToken::finish(Vector &minAndDepthVec, Vector &elementTransitionVec, Vector &ambiguities, Boolean &pcdataUnreachable) { if (andInfo_) { andFinish(minAndDepthVec, elementTransitionVec, ambiguities, pcdataUnreachable); return; } Vector::iterator elementTransition = elementTransitionVec.begin(); Vector::iterator minAndDepth = minAndDepthVec.begin(); minAndDepthVec.assign(minAndDepthVec.size(), unsigned(-1)); elementTransitionVec.assign(elementTransitionVec.size(), size_t(-1)); pcdataTransitionType_ = 0; simplePcdataTransition_ = 0; // follow_ is in decreasing order of andDepth because of how it's // constructed. size_t n = follow_.size(); Vector::iterator follow = follow_.begin(); size_t j = 0; for (size_t i = 0; i < n; i++) { unsigned &minDepth = minAndDepth[follow[i]->index()]; if (minDepth) { minDepth = 0; if (j != i) follow[j] = follow[i]; if (i == requiredIndex_) requiredIndex_ = j; const ElementType *e = follow[i]->elementType(); unsigned ei; if (e == 0) { if (follow[i]->andInfo_ == 0) { simplePcdataTransition_ = follow[i]; pcdataTransitionType_ = 1; } else pcdataTransitionType_ = 2; ei = 0; } else ei = e->index(); if (elementTransition[ei] != size_t(-1)) { const LeafContentToken *prev = follow[elementTransition[ei]]; // This might not be true: consider (a & b?)*; after the // a there are two different ways to get to the same b, // with the same and depth. if (follow[i] != prev) { ambiguities.resize(ambiguities.size() + 1); ContentModelAmbiguity &a = ambiguities.back(); a.from = this; a.to1 = prev; a.to2 = follow[i]; a.andDepth = 0; } } elementTransition[ei] = j; j++; } } if (pcdataTransitionType_ == 0) pcdataUnreachable = 1; follow_.resize(j); } void LeafContentToken::andFinish(Vector &minAndDepthVec, Vector &elementTransitionVec, Vector &ambiguities, Boolean &pcdataUnreachable) { // Vector mapping element type index to index of leaf content token // of that type to which there is a transition, which is the "worst" // from the point of view of ambiguity. Vector::iterator elementTransition = elementTransitionVec.begin(); // Vector mapping index of leaf content token // to minimum AND depth of transition to that token. Vector::iterator minAndDepth = minAndDepthVec.begin(); minAndDepthVec.assign(minAndDepthVec.size(), unsigned(-1)); elementTransitionVec.assign(elementTransitionVec.size(), size_t(-1)); pcdataTransitionType_ = 0; simplePcdataTransition_ = 0; unsigned pcdataMinCovered = 0; // follow_ is in decreasing order of andDepth because of how it's // constructed. size_t n = follow_.size(); size_t j = 0; Vector::iterator andFollow = andInfo_->follow.begin(); for (size_t i = 0; i < n; i++) { unsigned &minDepth = minAndDepth[follow_[i]->index()]; // ignore transitions to the same token with the same and depth. if (andFollow[i].andDepth < minDepth) { minDepth = andFollow[i].andDepth; if (j != i) { follow_[j] = follow_[i]; andFollow[j] = andFollow[i]; } if (i == requiredIndex_) requiredIndex_ = j; const ElementType *e = follow_[i]->elementType(); unsigned ei; if (e == 0) { if (pcdataTransitionType_ == 0) { const AndModelGroup *andAncestor = andInfo_->andAncestor; unsigned groupIndex = andInfo_->andGroupIndex; do { Boolean hasNonNull = 0; for (unsigned k = 0; k < andAncestor->nMembers(); k++) if (k != groupIndex && !andAncestor->member(k).inherentlyOptional()) { hasNonNull = 1; break; } if (hasNonNull) { if (minDepth <= andAncestor->andDepth()) pcdataUnreachable = 1; break; } groupIndex = andAncestor->andGroupIndex(); andAncestor = andAncestor->andAncestor(); } while (andAncestor); if (andFollow[i].isolated) pcdataMinCovered = minDepth; pcdataTransitionType_ = 2; } else { if (pcdataMinCovered > minDepth + 1) pcdataUnreachable = 1; pcdataMinCovered = andFollow[i].isolated ? minDepth : 0; } ei = 0; } else ei = e->index(); // If we have transitions t1, t2, ... tN to tokens having // the same element type, with // and-depths d1, d2, ... dN, where d1 >= d2 >= ... >= dN, // then there is an ambiguity unless // d1 > d2 > ... > dN and t1, t2, ... , tN-1 are all isolated. size_t previ = elementTransition[ei]; if (previ != size_t(-1)) { const LeafContentToken *prev = follow_[previ]; // This might not be true: consider (a & b?)*; after the // a there are two different ways to get to the same b, // with the same and depth. if (follow_[i] != prev && (andFollow[previ].andDepth == andFollow[i].andDepth || !andFollow[previ].isolated)) { ambiguities.resize(ambiguities.size() + 1); ContentModelAmbiguity &a = ambiguities.back(); a.from = this; a.to1 = prev; a.to2 = follow_[i]; a.andDepth = andFollow[i].andDepth; } if (andFollow[previ].isolated) elementTransition[ei] = j; } else elementTransition[ei] = j; j++; } } if (pcdataMinCovered > 0 || pcdataTransitionType_ == 0) pcdataUnreachable = 1; follow_.resize(j); andInfo_->follow.resize(j); } void ContentToken::analyze(GroupInfo &info, const AndModelGroup *andAncestor, unsigned andGroupIndex, FirstSet &first, LastSet &last) { analyze1(info, andAncestor, andGroupIndex, first, last); if (occurrenceIndicator_ & opt) inherentlyOptional_ = 1; if (inherentlyOptional_) first.setNotRequired(); if (occurrenceIndicator_ & plus) addTransitions(last, first, 0, andIndex(andAncestor), andDepth(andAncestor)); } void LeafContentToken::analyze1(GroupInfo &info, const AndModelGroup *andAncestor, unsigned andGroupIndex, FirstSet &first, LastSet &last) { leafIndex_ = info.nextLeafIndex++; typeIndex_ = info.nextTypeIndex[element_ ? element_->index() : 0]++; if (andAncestor) { andInfo_ = new AndInfo; andInfo_->andAncestor = andAncestor; andInfo_->andGroupIndex = andGroupIndex; } first.init(this); last.assign(1, this); inherentlyOptional_ = 0; } void PcdataToken::analyze1(GroupInfo &info, const AndModelGroup *andAncestor, unsigned andGroupIndex, FirstSet &first, LastSet &last) { info.containsPcdata = 1; LeafContentToken::analyze1(info, andAncestor, andGroupIndex, first, last); } void OrModelGroup::analyze1(GroupInfo &info, const AndModelGroup *andAncestor, unsigned andGroupIndex, FirstSet &first, LastSet &last) { member(0).analyze(info, andAncestor, andGroupIndex, first, last); first.setNotRequired(); inherentlyOptional_ = member(0).inherentlyOptional(); for (unsigned i = 1; i < nMembers(); i++) { FirstSet tempFirst; LastSet tempLast; member(i).analyze(info, andAncestor, andGroupIndex, tempFirst, tempLast); first.append(tempFirst); first.setNotRequired(); last.append(tempLast); inherentlyOptional_ |= member(i).inherentlyOptional(); } } void SeqModelGroup::analyze1(GroupInfo &info, const AndModelGroup *andAncestor, unsigned andGroupIndex, FirstSet &first, LastSet &last) { member(0).analyze(info, andAncestor, andGroupIndex, first, last); inherentlyOptional_ = member(0).inherentlyOptional(); for (unsigned i = 1; i < nMembers(); i++) { FirstSet tempFirst; LastSet tempLast; member(i).analyze(info, andAncestor, andGroupIndex, tempFirst, tempLast); addTransitions(last, tempFirst, 1, andIndex(andAncestor), andDepth(andAncestor)); if (inherentlyOptional_) first.append(tempFirst); if (member(i).inherentlyOptional()) last.append(tempLast); else tempLast.swap(last); inherentlyOptional_ &= member(i).inherentlyOptional(); } } void AndModelGroup::analyze1(GroupInfo &info, const AndModelGroup *andAncestor, unsigned andGroupIndex, FirstSet &first, LastSet &last) { andDepth_ = ContentToken::andDepth(andAncestor); andIndex_ = ContentToken::andIndex(andAncestor); andAncestor_ = andAncestor; andGroupIndex_ = andGroupIndex; if (andIndex_ + nMembers() > info.andStateSize) info.andStateSize = andIndex_ + nMembers(); Vector firstVec(nMembers()); Vector lastVec(nMembers()); member(0).analyze(info, this, 0, firstVec[0], lastVec[0]); first = firstVec[0]; first.setNotRequired(); last = lastVec[0]; inherentlyOptional_ = member(0).inherentlyOptional(); unsigned i; for (i = 1; i < nMembers(); i++) { member(i).analyze(info, this, i, firstVec[i], lastVec[i]); first.append(firstVec[i]); first.setNotRequired(); last.append(lastVec[i]); inherentlyOptional_ &= member(i).inherentlyOptional(); } for (i = 0; i < nMembers(); i++) { for (unsigned j = 0; j < nMembers(); j++) if (j != i) addTransitions(lastVec[i], firstVec[j], 0, andIndex() + nMembers(), andDepth() + 1, !member(j).inherentlyOptional(), andIndex() + j, andIndex() + i); } } void ContentToken::addTransitions(const LastSet &from, const FirstSet &to, Boolean maybeRequired, unsigned andClearIndex, unsigned andDepth, Boolean isolated, unsigned requireClear, unsigned toSet) { size_t length = from.size(); for (unsigned i = 0; i < length; i++) from[i]->addTransitions(to, maybeRequired, andClearIndex, andDepth, isolated, requireClear, toSet); } void LeafContentToken::addTransitions(const FirstSet &to, Boolean maybeRequired, unsigned andClearIndex, unsigned andDepth, Boolean isolated, unsigned requireClear, unsigned toSet) { if (maybeRequired && to.requiredIndex() != size_t(-1)) { ASSERT(requiredIndex_ == size_t(-1)); requiredIndex_ = to.requiredIndex() + follow_.size(); } size_t length = follow_.size(); size_t n = to.size(); follow_.resize(length + n); for (size_t i = 0; i < n; i++) follow_[length + i] = to.token(i); if (andInfo_) { andInfo_->follow.resize(length + n); for (size_t i = 0; i < n; i++) { Transition &t = andInfo_->follow[length + i]; t.clearAndStateStartIndex = andClearIndex; t.andDepth = andDepth; t.isolated = isolated; t.requireClear = requireClear; t.toSet = toSet; } } } AndState::AndState(unsigned n) : v_(n, PackedBoolean(0)), clearFrom_(0) { } void AndState::clearFrom1(unsigned i) { while (clearFrom_ > i) v_[--clearFrom_] = 0; } MatchState::MatchState() : andState_(0) { } MatchState::MatchState(const CompiledModelGroup *model) : pos_(model ? model->initial() : 0), andState_(model ? model->andStateSize() : 0), minAndDepth_(0) { } const LeafContentToken *MatchState::invalidExclusion(const ElementType *e) const { const LeafContentToken *token = pos_->transitionToken(e, andState_, minAndDepth_); if (token && !token->inherentlyOptional() && !token->orGroupMember()) return token; else return 0; } Boolean MatchState::operator==(const MatchState &state) const { return (pos_ == state.pos_ && andState_ == state.andState_ && minAndDepth_ == state.minAndDepth_); } Boolean AndState::operator==(const AndState &state) const { ASSERT(v_.size() == state.v_.size()); for (size_t i = 0; i < v_.size(); i++) { if (i >= clearFrom_ && i >= state.clearFrom_) break; if (v_[i] != state.v_[i]) return 0; } return 1; } const LeafContentToken * LeafContentToken::transitionToken(const ElementType *to, const AndState &andState, unsigned minAndDepth) const { Vector::const_iterator p = follow_.begin(); if (!andInfo_) { for (size_t n = follow_.size(); n > 0; n--, p++) if ((*p)->elementType() == to) return *p; } else { Vector::const_iterator q = andInfo_->follow.begin(); for (size_t n = follow_.size(); n > 0; n--, p++, q++) if ((*p)->elementType() == to && ((q->requireClear == unsigned(Transition::invalidIndex) || andState.isClear(q->requireClear)) && q->andDepth >= minAndDepth)) return (*p); } return 0; } Boolean LeafContentToken::tryTransition(const ElementType *to, AndState &andState, unsigned &minAndDepth, const LeafContentToken *&newpos) const { Vector::const_iterator p = follow_.begin(); if (!andInfo_) { for (size_t n = follow_.size(); n > 0; n--, p++) { if ((*p)->elementType() == to) { newpos = *p; minAndDepth = newpos->computeMinAndDepth(andState); return 1; } } } else { Vector::const_iterator q = andInfo_->follow.begin(); for (size_t n = follow_.size(); n > 0; n--, p++, q++) { if ((*p)->elementType() == to && ((q->requireClear == unsigned(Transition::invalidIndex) || andState.isClear(q->requireClear)) && q->andDepth >= minAndDepth)) { if (q->toSet != unsigned(Transition::invalidIndex)) andState.set(q->toSet); andState.clearFrom(q->clearAndStateStartIndex); newpos = *p; minAndDepth = newpos->computeMinAndDepth(andState); return 1; } } } return 0; } void LeafContentToken::possibleTransitions(const AndState &andState, unsigned minAndDepth, Vector &v) const { Vector::const_iterator p = follow_.begin(); if (!andInfo_) { for (size_t n = follow_.size(); n > 0; n--, p++) v.push_back((*p)->elementType()); } else { Vector::const_iterator q = andInfo_->follow.begin(); for (size_t n = follow_.size(); n > 0; n--, p++, q++) if ((q->requireClear == unsigned(Transition::invalidIndex) || andState.isClear(q->requireClear)) && q->andDepth >= minAndDepth) v.push_back((*p)->elementType()); } } unsigned LeafContentToken::computeMinAndDepth1(const AndState &andState) const { ASSERT(andInfo_ != 0); unsigned groupIndex = andInfo_->andGroupIndex; for (const AndModelGroup *group = andInfo_->andAncestor; group; groupIndex = group->andGroupIndex(), group = group->andAncestor()) for (unsigned i = 0; i < group->nMembers(); i++) if (i != groupIndex && !group->member(i).inherentlyOptional() && andState.isClear(group->andIndex() + i)) return group->andDepth() + 1; return 0; } const LeafContentToken * LeafContentToken::impliedStartTag(const AndState &andState, unsigned minAndDepth) const { if (requiredIndex_ != size_t(-1)) { if (!andInfo_) return follow_[requiredIndex_]; const Transition &t = andInfo_->follow[requiredIndex_]; if ((t.requireClear == unsigned(Transition::invalidIndex) || andState.isClear(t.requireClear)) && t.andDepth >= minAndDepth) return follow_[requiredIndex_]; } return 0; } void LeafContentToken::doRequiredTransition(AndState &andState, unsigned &minAndDepth, const LeafContentToken *&newpos) const { ASSERT(requiredIndex_ != size_t(-1)); if (andInfo_) { const Transition &t = andInfo_->follow[requiredIndex_]; if (t.toSet != unsigned(Transition::invalidIndex)) andState.set(t.toSet); andState.clearFrom(t.clearAndStateStartIndex); } newpos = follow_[requiredIndex_]; minAndDepth = newpos->computeMinAndDepth(andState); } FirstSet::FirstSet() : requiredIndex_(size_t(-1)) { } void FirstSet::init(LeafContentToken *p) { v_.assign(1, p); v_.reserve(256); requiredIndex_ = 0; } void FirstSet::append(const FirstSet &set) { if (set.requiredIndex_ != size_t(-1)) { ASSERT(requiredIndex_ == size_t(-1)); requiredIndex_ = set.requiredIndex_ + v_.size(); } size_t oldSize = v_.size(); v_.resize(v_.size() + set.v_.size()); for (size_t i = 0; i < set.v_.size(); i++) v_[oldSize + i] = set.v_[i]; } void LastSet::append(const LastSet &set) { size_t oldSize = size(); resize(size() + set.size()); for (size_t i = 0; i < set.size(); i++) (*this)[oldSize + i] = set[i]; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/DescriptorManager.cxx100444 764 764 2551 6606574410 15121 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "DescriptorManager.h" #include "ListIter.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif DescriptorUser::DescriptorUser(DescriptorManager *manager) : manager_(manager) { if (manager_) manager_->addUser(this); } DescriptorUser::~DescriptorUser() { if (manager_) manager_->removeUser(this); } void DescriptorUser::managerDeleted() { manager_ = 0; } Boolean DescriptorUser::suspend() { return 0; } void DescriptorUser::acquireD() { if (manager_) manager_->acquireD(); } void DescriptorUser::releaseD() { if (manager_) manager_->releaseD(); } DescriptorManager::DescriptorManager(int maxD) : maxD_(maxD), usedD_(0) { } DescriptorManager::~DescriptorManager() { for (ListIter iter(users_); !iter.done(); iter.next()) iter.cur()->managerDeleted(); } void DescriptorManager::addUser(DescriptorUser *p) { users_.insert(p); } void DescriptorManager::removeUser(DescriptorUser *p) { users_.remove(p); } void DescriptorManager::acquireD() { if (usedD_ >= maxD_) { for (ListIter iter(users_); !iter.done(); iter.next()) { if (iter.cur()->suspend()) break; } } usedD_++; } void DescriptorManager::releaseD() { usedD_--; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Dtd.cxx100444 764 764 3775 6606574410 12234 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Dtd.h" #include "Syntax.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Dtd::Dtd(const StringC &name, Boolean isBase) : name_(new StringResource(name)), nCurrentAttribute_(0), nElementDefinition_(0), nAttributeDefinitionList_(0), nElementType_(0), isBase_(isBase) { documentElementType_ = new ElementType(name, allocElementTypeIndex()); insertElementType(documentElementType_); } Boolean Dtd::shortrefIndex(const StringC &str, const Syntax &syntax, size_t &index) { const int *indexP = shortrefTable_.lookup(str); if (indexP) { index = *indexP; return 1; } if (!syntax.isValidShortref(str)) return 0; shortrefTable_.insert(str, int(shortrefs_.size())); index = shortrefs_.size(); shortrefs_.push_back(str); return 1; } void Dtd::addNeededShortref(const StringC &str) { if (!shortrefTable_.lookup(str)) { shortrefTable_.insert(str, shortrefs_.size()); shortrefs_.push_back(str); } } void Dtd::setDefaultEntity(const Ptr &entity, ParserState &parser) { defaultEntity_ = entity; // If the new default entity was defined in a DTD, then // any defaulted entities must have come from an LPD // on the first pass, in which case we shouldn't replace them. // Otherwise we need to replace all the defaulted entities. if (entity->declInActiveLpd()) { NamedResourceTable tem; { EntityIter iter(generalEntityTable_); for (;;) { Ptr old(iter.next()); if (old.isNull()) break; if (old->defaulted()) { Ptr e(defaultEntity_->copy()); e->setDefaulted(); e->setName(old->name()); e->generateSystemId(parser); tem.insert(e); } } } { EntityIter iter(tem); for (;;) { Ptr e(iter.next()); if (e.isNull()) break; generalEntityTable_.insert(e, 1); } } } } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/EUCJPCodingSystem.cxx100444 764 764 4350 6606574410 14706 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MULTI_BYTE #include "EUCJPCodingSystem.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class EUCJPDecoder : public Decoder { public: EUCJPDecoder() { } size_t decode(Char *, const char *, size_t, const char **); private: }; class EUCJPEncoder : public Encoder { public: EUCJPEncoder() { } void output(const Char *, size_t, OutputByteStream *); }; Decoder *EUCJPCodingSystem::makeDecoder() const { return new EUCJPDecoder; } Encoder *EUCJPCodingSystem::makeEncoder() const { return new EUCJPEncoder; } size_t EUCJPDecoder::decode(Char *to, const char *s, size_t slen, const char **rest) { Char *start = to; const unsigned char *us = (const unsigned char *)s; while (slen > 0) { if (!(*us & 0x80)) { // G0 *to++ = *us++; slen--; } else if (*us == 0x8e) { // G2 if (slen < 2) break; slen -= 2; ++us; *to++ = *us++ | 0x80; } else if (*us == 0x8f) { // G3 if (slen < 3) break; slen -= 3; ++us; unsigned short n = (*us++ | 0x80) << 8; n |= (*us++ & ~0x80); *to++ = n; } else { // G1 if (slen < 2) break; slen -= 2; unsigned short n = *us++ << 8; n |= (*us++ | 0x80); *to++ = n; } } *rest = (const char *)us; return to - start; } void EUCJPEncoder::output(const Char *s, size_t n, OutputByteStream *sb) { for (; n > 0; s++, n--) { Char c = *s; unsigned short mask = (unsigned short)(c & 0x8080); if (mask == 0) sb->sputc((unsigned char)(c & 0xff)); else if (mask == 0x8080) { sb->sputc((unsigned char)((c >> 8) & 0xff)); sb->sputc((unsigned char)(c & 0xff)); } else if (mask == 0x0080) { sb->sputc((unsigned char)0x8e); sb->sputc((unsigned char)(c & 0xff)); } else { // mask == 0x8000 sb->sputc((unsigned char)0x8f); sb->sputc((unsigned char)((c >> 8) & 0xff)); sb->sputc((unsigned char)(c & 0x7f)); } } } #ifdef SP_NAMESPACE } #endif #else /* not SP_MULTI_BYTE */ #ifndef __GNUG__ static char non_empty_translation_unit; // sigh #endif #endif /* not SP_MULTI_BYTE */ jade-1.2.1/lib/ElementType.cxx100444 764 764 4100 6606574410 13733 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "ElementType.h" #include "ContentToken.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif ElementType::ElementType(const StringC &name, size_t index) : Named(name), index_(index), map_(0), defIndex_(0) { } ElementDefinition::ElementDefinition(const Location &location, size_t index, unsigned char omitFlags, DeclaredContent declaredContent) : location_(location), index_(index), omitFlags_(omitFlags), declaredContent_(declaredContent) { computeMode(); } ElementDefinition::ElementDefinition(const Location &location, size_t index, unsigned char omitFlags, DeclaredContent declaredContent, Owner &modelGroup) : location_(location), index_(index), omitFlags_(omitFlags), declaredContent_(declaredContent), modelGroup_(modelGroup.extract()) { computeMode(); } void ElementDefinition::computeMode() { switch (declaredContent_) { case modelGroup: if (!modelGroup_->containsPcdata()) { netMode_ = econnetMode; mode_ = econMode; break; } // fall through case any: netMode_ = mconnetMode; mode_ = mconMode; break; case cdata: netMode_ = cconnetMode; mode_ = cconMode; break; case rcdata: netMode_ = rcconnetMode; mode_ = rcconMode; break; case empty: break; default: CANNOT_HAPPEN(); } } void ElementType::swap(ElementType &to) { Named::swap(to); { size_t tem = to.index_; to.index_ = index_; index_ = tem; } { size_t tem = to.defIndex_; to.defIndex_ = defIndex_; defIndex_ = tem; } def_.swap(to.def_); { const ShortReferenceMap *tem = to.map_; to.map_ = map_; map_ = tem; } } RankStem::RankStem(const StringC &name, size_t index) : Named(name), index_(index) { } void RankStem::addDefinition(const ConstPtr &p) { def_.push_back(p); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Entity.cxx100444 764 764 34010 6605113630 12767 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Entity.h" #include "ParserState.h" #include "macros.h" #include "InternalInputSource.h" #include "MessageArg.h" #include "ParserMessages.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Entity::Entity(const StringC &name, DeclType declType, DataType dataType, const Location &defLocation) : EntityDecl(name, declType, dataType, defLocation), used_(0), defaulted_(0) { } void Entity::generateSystemId(ParserState &) { } InternalEntity::InternalEntity(const StringC &name, DeclType declType, DataType dataType, const Location &defLocation, Text &text) : Entity(name, declType, dataType, defLocation) { text.swap(text_); } PiEntity::PiEntity(const StringC &name, DeclType declType, const Location &defLocation, Text &text) : InternalEntity(name, declType, pi, defLocation, text) { } Entity *PiEntity::copy() const { return new PiEntity(*this); } InternalDataEntity::InternalDataEntity(const StringC &name, DataType dataType, const Location &defLocation, Text &text) : InternalEntity(name, generalEntity, dataType, defLocation, text) { } InternalCdataEntity::InternalCdataEntity(const StringC &name, const Location &defLocation, Text &text) : InternalDataEntity(name, cdata, defLocation, text) { } Entity *InternalCdataEntity::copy() const { return new InternalCdataEntity(*this); } InternalSdataEntity::InternalSdataEntity(const StringC &name, const Location &defLocation, Text &text) : InternalDataEntity(name, sdata, defLocation, text) { } Entity *InternalSdataEntity::copy() const { return new InternalSdataEntity(*this); } InternalTextEntity::InternalTextEntity(const StringC &name, DeclType declType, const Location &defLocation, Text &text, Bracketed bracketed) : InternalEntity(name, declType, sgmlText, defLocation, text), bracketed_(bracketed) { } Entity *InternalTextEntity::copy() const { return new InternalTextEntity(*this); } ExternalEntity::ExternalEntity(const StringC &name, DeclType declType, DataType dataType, const Location &defLocation, const ExternalId &id) : Entity(name, declType, dataType, defLocation), externalId_(id) { } const ExternalEntity *ExternalEntity::asExternalEntity() const { return this; } const StringC *ExternalEntity::systemIdPointer() const { return externalId_.systemIdString(); } const StringC *ExternalEntity::effectiveSystemIdPointer() const { if (externalId_.effectiveSystemId().size() > 0) return &externalId_.effectiveSystemId(); return 0; } const StringC *ExternalEntity::publicIdPointer() const { return externalId_.publicIdString(); } void ExternalEntity::generateSystemId(ParserState &parser) { StringC str; if (parser.entityCatalog().lookup(*this, parser.syntax(), parser.sd().docCharset(), parser.messenger(), str)) externalId_.setEffectiveSystem(str); // Don't generate warning when declType == sgml. else if (externalId_.publicIdString()) { if (declType() != sgml) parser.message(ParserMessages::cannotGenerateSystemIdPublic, StringMessageArg(*externalId_.publicIdString())); } else { switch (declType()) { case generalEntity: parser.message(ParserMessages::cannotGenerateSystemIdGeneral, StringMessageArg(name())); break; case parameterEntity: parser.message(ParserMessages::cannotGenerateSystemIdParameter, StringMessageArg(name())); break; case doctype: parser.message(ParserMessages::cannotGenerateSystemIdDoctype, StringMessageArg(name())); break; case linktype: parser.message(ParserMessages::cannotGenerateSystemIdLinktype, StringMessageArg(name())); break; case sgml: break; default: CANNOT_HAPPEN(); } } } ExternalTextEntity::ExternalTextEntity(const StringC &name, DeclType declType, const Location &defLocation, const ExternalId &id) : ExternalEntity(name, declType, sgmlText, defLocation, id) { } Entity *ExternalTextEntity::copy() const { return new ExternalTextEntity(*this); } ExternalNonTextEntity::ExternalNonTextEntity(const StringC &name, DataType dataType, const Location &defLocation, const ExternalId &id) : ExternalEntity(name, generalEntity, dataType, defLocation, id) { } ExternalDataEntity::ExternalDataEntity(const StringC &name, DataType dataType, const Location &defLocation, const ExternalId &id, const ConstPtr &nt, AttributeList &attributes) : ExternalNonTextEntity(name, dataType, defLocation, id), notation_(nt) { attributes.swap(attributes_); } void ExternalDataEntity::setNotation(const ConstPtr ¬ation, AttributeList &attributes) { notation_ = notation; attributes.swap(attributes_); } Entity *ExternalDataEntity::copy() const { return new ExternalDataEntity(*this); } SubdocEntity::SubdocEntity(const StringC &name, const Location &defLocation, const ExternalId &id) : ExternalNonTextEntity(name, subdoc, defLocation, id) { } Entity *SubdocEntity::copy() const { return new SubdocEntity(*this); } Boolean Entity::isDataOrSubdoc() const { return 0; } Boolean Entity::isCharacterData() const { return 0; } const ExternalEntity *Entity::asExternalEntity() const { return 0; } const ExternalDataEntity *Entity::asExternalDataEntity() const { return 0; } const SubdocEntity *Entity::asSubdocEntity() const { return 0; } const InternalEntity *Entity::asInternalEntity() const { return 0; } void Entity::dsReference(ParserState &parser, const Ptr &origin) const { normalReference(parser, origin, 1); } void Entity::declReference(ParserState &parser, const Ptr &origin) const { normalReference(parser, origin, 0); if (parser.currentMarkup()) parser.currentMarkup()->addEntityStart(origin); } void Entity::contentReference(ParserState &parser, const Ptr &origin) const { normalReference(parser, origin, 1); } void Entity::rcdataReference(ParserState &parser, const Ptr &origin) const { normalReference(parser, origin, 1); } void Entity::litReference(Text &, ParserState &parser, const Ptr &origin, Boolean) const { normalReference(parser, origin, 0); } const InternalEntity *InternalEntity::asInternalEntity() const { return this; } void PiEntity::litReference(Text &, ParserState &parser, const Ptr &, Boolean) const { parser.message(ParserMessages::piEntityReference); } void PiEntity::normalReference(ParserState &parser, const Ptr &origin, Boolean) const { parser.noteMarkup(); parser.eventHandler().pi(new (parser.eventAllocator()) PiEntityEvent(this, origin.pointer())); } void PiEntity::declReference(ParserState &parser, const Ptr &) const { parser.message(ParserMessages::piEntityReference); } void PiEntity::rcdataReference(ParserState &parser, const Ptr &) const { parser.message(ParserMessages::piEntityRcdata); } void InternalDataEntity::declReference(ParserState &parser, const Ptr &) const { parser.message(ParserMessages::internalDataEntityReference); } Boolean InternalDataEntity::isDataOrSubdoc() const { return 1; } void InternalCdataEntity::normalReference(ParserState &parser, const Ptr &origin, Boolean) const { checkEntlvl(parser); if (string().size() > 0) { parser.noteData(); parser.eventHandler().data(new (parser.eventAllocator()) CdataEntityEvent(this, origin.pointer())); } } Boolean InternalCdataEntity::isCharacterData() const { return string().size() > 0; } void InternalCdataEntity::litReference(Text &text, ParserState &parser, const Ptr &origin, Boolean squeeze) const { checkEntlvl(parser); if (squeeze) { Location loc(origin.pointer(), 0); text.addEntityStart(loc); text.addCharsTokenize(text_.string(), loc, parser.syntax().space()); loc += text_.size(); text.addEntityEnd(loc); } else text.addCdata(string(), origin.pointer()); } void InternalSdataEntity::normalReference(ParserState &parser, const Ptr &origin, Boolean) const { checkEntlvl(parser); parser.noteData(); parser.eventHandler().sdataEntity(new (parser.eventAllocator()) SdataEntityEvent(this, origin.pointer())); } Boolean InternalSdataEntity::isCharacterData() const { return 1; } void InternalSdataEntity::litReference(Text &text, ParserState &parser, const Ptr &origin, Boolean squeeze) const { checkEntlvl(parser); if (squeeze) { Location loc(origin.pointer(), 0); text.addEntityStart(loc); text.addCharsTokenize(text_.string(), loc, parser.syntax().space()); loc += text_.size(); text.addEntityEnd(loc); } else text.addSdata(string(), origin.pointer()); } void InternalTextEntity::normalReference(ParserState &parser, const Ptr &origin, Boolean generateEvent) const { checkEntlvl(parser); if (checkNotOpen(parser)) { if (generateEvent && parser.wantMarkup()) parser.eventHandler().entityStart(new (parser.eventAllocator()) EntityStartEvent(origin)); parser.pushInput(new (parser.internalAllocator()) InternalInputSource(text_.string(), origin.pointer())); } } void InternalTextEntity::litReference(Text &text, ParserState &parser, const Ptr &origin, Boolean) const { text.addEntityStart(Location(origin.pointer(), 0)); normalReference(parser, origin, 0); } void ExternalTextEntity::normalReference(ParserState &parser, const Ptr &origin, Boolean generateEvent) const { checkEntlvl(parser); if (checkNotOpen(parser)) { if (generateEvent && parser.wantMarkup()) parser.eventHandler().entityStart(new (parser.eventAllocator()) EntityStartEvent(origin)); if (externalId().effectiveSystemId().size()) parser.pushInput(parser.entityManager() .open(externalId().effectiveSystemId(), parser.sd().docCharset(), origin.pointer(), 0, parser.messenger())); else parser.message(ParserMessages::nonExistentEntityRef, StringMessageArg(name()), defLocation()); } } void ExternalTextEntity::litReference(Text &text, ParserState &parser, const Ptr &origin, Boolean) const { if (parser.options().warnAttributeValueExternalEntityRef && declType() == generalEntity) parser.message(ParserMessages::attributeValueExternalEntityRef); text.addEntityStart(Location(origin.pointer(), 0)); normalReference(parser, origin, 0); } const ExternalDataEntity *ExternalDataEntity::asExternalDataEntity() const { return this; } void ExternalDataEntity::contentReference(ParserState &parser, const Ptr &origin) const { if (parser.options().warnExternalDataEntityRef) parser.message(ParserMessages::externalDataEntityRef); checkEntlvl(parser); parser.noteData(); parser.eventHandler().externalDataEntity(new (parser.eventAllocator()) ExternalDataEntityEvent(this, origin.pointer())); } Boolean ExternalNonTextEntity::isDataOrSubdoc() const { return 1; } Boolean ExternalNonTextEntity::isCharacterData() const { return 1; } void ExternalNonTextEntity::normalReference(ParserState &parser, const Ptr &, Boolean) const { parser.message(ParserMessages::externalNonTextEntityReference); } void ExternalNonTextEntity::litReference(Text &, ParserState &parser, const Ptr &, Boolean) const { parser.message(ParserMessages::externalNonTextEntityRcdata); } void ExternalNonTextEntity::rcdataReference(ParserState &parser, const Ptr &) const { parser.message(ParserMessages::externalNonTextEntityRcdata); } void SubdocEntity::contentReference(ParserState &parser, const Ptr &origin) const { checkEntlvl(parser); parser.noteData(); parser.eventHandler().subdocEntity(new (parser.eventAllocator()) SubdocEntityEvent(this, origin.pointer())); } const SubdocEntity *SubdocEntity::asSubdocEntity() const { return this; } IgnoredEntity::IgnoredEntity(const StringC &name, DeclType declType) : Entity(name, declType, sgmlText, Location()) { } Entity *IgnoredEntity::copy() const { return new IgnoredEntity(*this); } void IgnoredEntity::declReference(ParserState &parser, const Ptr &origin) const { if (parser.currentMarkup()) { parser.currentMarkup()->addEntityStart(origin); parser.currentMarkup()->addEntityEnd(); } } void IgnoredEntity::litReference(Text &text, ParserState &, const Ptr &origin, Boolean) const { text.addEntityStart(Location(origin.pointer(), 0)); text.addEntityEnd(Location(origin.pointer(), 0)); } void IgnoredEntity::normalReference(ParserState &parser, const Ptr &origin, Boolean generateEvent) const { if (generateEvent && parser.wantMarkup()) { parser.eventHandler().entityStart(new (parser.eventAllocator()) EntityStartEvent(origin)); Location loc(origin.pointer(), 0); parser.eventHandler().entityEnd(new (parser.eventAllocator()) EntityEndEvent(loc)); } } void Entity::checkEntlvl(ParserState &parser) { // -1 because document entity isn't counted if (parser.inputLevel() - 1 == parser.syntax().entlvl()) parser.message(ParserMessages::entlvl); } Boolean Entity::checkNotOpen(ParserState &parser) const { if (parser.entityIsOpen(this)) { parser.message(ParserMessages::recursiveEntityReference, StringMessageArg(name())); return 0; } return 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/EntityApp.cxx100444 764 764 11012 6606574410 13435 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "EntityApp.h" #include "sptchar.h" #include #include "PosixStorage.h" #ifdef SP_WININET #include "WinInetStorage.h" #else #include "URLStorage.h" #endif #include "LiteralStorage.h" #include "NotationStorage.h" #include "ExtendEntityManager.h" #include "SOEntityCatalog.h" #include "CodingSystem.h" #include "macros.h" #ifndef SGML_SEARCH_PATH_DEFAULT #define SGML_SEARCH_PATH_DEFAULT SP_T("") #endif #ifndef SGML_CATALOG_FILES_DEFAULT #define SGML_CATALOG_FILES_DEFAULT SP_T("") #endif /* not SGML_CATALOG_FILES_DEFAULT */ #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_MSDOS_FILENAMES const Char FILE_SEP = ';'; #else const Char FILE_SEP = ':'; #endif EntityApp::EntityApp(const char *requiredInternalCode) : CmdLineApp(requiredInternalCode), mapCatalogDocument_(0) { registerOption('c', SP_T("catalog_sysid")); registerOption('C'); registerOption('D', SP_T("dir")); } void EntityApp::processOption(AppChar opt, const AppChar *arg) { switch (opt) { case 'c': catalogSysids_.push_back(arg); break; case 'C': mapCatalogDocument_ = 1; break; case 'D': searchDirs_.push_back(arg); break; default: CmdLineApp::processOption(opt, arg); break; } } int EntityApp::processArguments(int argc, AppChar **argv) { StringC sysid; if (!makeSystemId(argc, argv, sysid)) return 1; return processSysid(sysid); } Boolean EntityApp::makeSystemId(int nFiles, AppChar *const *files, StringC &result) { Vector filenames(nFiles == 0 ? 1 : nFiles); int i; for (i = 0; i < nFiles; i++) filenames[i] = convertInput(tcscmp(files[i], SP_T("-")) == 0 ? SP_T("0") : files[i]); if (nFiles == 0) filenames[0] = convertInput(SP_T("0")); return entityManager()->mergeSystemIds(filenames, mapCatalogDocument_, systemCharset(), *this, result); } Ptr &EntityApp::entityManager() { if (!entityManager_.isNull()) return entityManager_; PosixStorageManager *sm = new PosixStorageManager("OSFILE", &systemCharset(), #ifndef SP_WIDE_SYSTEM codingSystem(), #endif 5); size_t i; for (i = 0; i < searchDirs_.size(); i++) sm->addSearchDir(convertInput(searchDirs_[i])); { const AppChar *e = tgetenv(SP_T("SGML_SEARCH_PATH")); if (!e) e = SGML_SEARCH_PATH_DEFAULT; if (*e) { StringC str(convertInput(e)); size_t i = 0; size_t start = 0; for (;;) { if (i == str.size() || str[i] == FILE_SEP) { sm->addSearchDir(StringC(str.data() + start, i - start)); if (i == str.size()) break; start = ++i; } else i++; } } } entityManager_ = ExtendEntityManager::make(sm, codingSystem(), inputCodingSystemKit(), internalCharsetIsDocCharset_); entityManager_ ->registerStorageManager(new PosixFdStorageManager("OSFD", &systemCharset())); #ifdef SP_WININET entityManager_->registerStorageManager(new WinInetStorageManager("URL")); #else entityManager_->registerStorageManager(new URLStorageManager("URL")); #endif entityManager_->registerStorageManager(new LiteralStorageManager("LITERAL")); entityManager_->registerStorageManager(new NotationStorageManager("CLSID")); entityManager_->registerStorageManager(new NotationStorageManager("MIMETYPE")); Vector v; for (i = 0; i < catalogSysids_.size(); i++) // filenames specified on command-line must exist v.push_back(convertInput(catalogSysids_[i])); { const AppChar *e = tgetenv(SP_T("SGML_CATALOG_FILES")); if (!e) e = SGML_CATALOG_FILES_DEFAULT; if (*e) { StringC str(convertInput(e)); size_t i = 0; size_t start = 0; for (;;) { if (i == str.size() || str[i] == FILE_SEP) { v.push_back(StringC(str.data() + start, i - start)); if (i == str.size()) break; start = ++i; } else i++; } } } const SP_TCHAR *useDocCatalogStr = tgetenv(SP_T("SP_USE_DOCUMENT_CATALOG")); Boolean useDocCatalog = true; if (useDocCatalogStr && (stringMatches(useDocCatalogStr, "NO") || stringMatches(useDocCatalogStr, "0"))) useDocCatalog = false; entityManager_->setCatalogManager(SOCatalogManager::make(v, catalogSysids_.size(), &systemCharset(), &systemCharset(), useDocCatalog)); return entityManager_; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/EntityCatalog.cxx100444 764 764 1715 6606574410 14260 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "EntityCatalog.h" #include "EntityDecl.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif EntityCatalog::~EntityCatalog() { } Boolean EntityCatalog::sgmlDecl(const CharsetInfo &, Messenger &, StringC &) const { return 0; } Boolean EntityCatalog::lookup(const EntityDecl &decl, const Syntax &, const CharsetInfo &, Messenger &, StringC &str) const { const StringC *p = decl.systemIdPointer(); if (!p) return 0; str = *p; return 1; } Boolean EntityCatalog::lookupPublic(const StringC &, const CharsetInfo &, Messenger &, StringC &) const { return 0; } Boolean EntityCatalog::lookupChar(const StringC &, const CharsetInfo &, Messenger &, UnivChar &) const { return 0; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/EntityDecl.cxx100444 764 764 2230 6605102752 13541 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "EntityDecl.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif EntityDecl::EntityDecl(const StringC &str, DeclType declType, DataType dataType, const Location &defLocation) : NamedResource(str), declType_(declType), dataType_(dataType), defLocation_(defLocation), dtdIsBase_(0), lpdIsActive_(0) { } void EntityDecl::setDeclIn(const ConstPtr > &dtdName, Boolean dtdIsBase, const ConstPtr > &lpdName, Boolean lpdIsActive) { dtdName_ = dtdName; lpdName_ = lpdName; dtdIsBase_ = dtdIsBase; lpdIsActive_ = lpdIsActive; } void EntityDecl::setDeclIn(const ConstPtr > &dtdName, Boolean dtdIsBase) { dtdName_ = dtdName; lpdName_.clear(); dtdIsBase_ = dtdIsBase; } const StringC *EntityDecl::systemIdPointer() const { return 0; } const StringC *EntityDecl::publicIdPointer() const { return 0; } const StringC *EntityDecl::effectiveSystemIdPointer() const { return 0; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/EntityManager.cxx100444 764 764 450 6606574410 14233 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "EntityManager.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif EntityManager::~EntityManager() { } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/EntityManagerMessages.msg100444 764 764 3335 6606574410 15734 0ustar jjcjjc# Copyright (c) 1994, 1995, 1996, 1997 James Clark # See the file COPYING for copying permission. # EntityManager message definitions =2000 E1+fsiSyntax++bad formal system identifier syntax in %1 E1+fsiMissingValue++value for attribute %1 missing in formal system identifier E1+fsiValueAsName++%1 is a formal system identifier attribute value not an attribute name E1+fsiBadSmcrd++value of SMCRD attribute must be a single character not %1 E1+fsiUnknownBctf++unknown BCTF %1 E1+fsiUnknownEncoding++unknown encoding %1 E1+fsiUnsupportedRecords++unsupported record boundary indicator %1 W1+fsiUnsupportedAttribute++unsupported formal system identifier attribute %1 W1+fsiUnsupportedAttributeToken++unsupported formal system identifier attribute value %1 E1+fsiBadTracking++bad value %1 for formal system identifier tracking attribute E1+fsiDuplicateAttribute++duplicate specification for formal system identifier attribute %1 E1+fsiBadZapeof++bad value %1 for formal system identifier zapeof attribute E1+fsiBadSearch++bad value %1 for formal system identifier search attribute E1+fsiBadFold++bad value %1 for formal system identifier fold attribute E0+fsiFoldNotNeutral++fold attribute allowed only for neutral storage manager E0+fsiBctfEncodingNotApplicable++BCTF and encoding attributes not applicable to this storage manager E0+fsiBctfAndEncoding++cannot specify both BCTF and encoding attribute E0+fsiZapeofNotApplicable++ZAPEOF attribute not applicable to this storage manager E0+fsiRecordsNotApplicable++RECORDS attribute not applicable to this storage manager E1+fsiBadIndirect++bad value %1 for formal system identifier indirect attribute E1+fsiLookupChar++non-minimum data character (number %1) in value of formal system identifier lookup attribute jade-1.2.1/lib/EntityManagerMessages.rc100444 764 764 2553 6606636234 15556 0ustar jjcjjcSTRINGTABLE BEGIN 2000, "bad formal system identifier syntax in %1" 2001, "value for attribute %1 missing in formal system identifier" 2002, "%1 is a formal system identifier attribute value not an attribute name" 2003, "value of SMCRD attribute must be a single character not %1" 2004, "unknown BCTF %1" 2005, "unknown encoding %1" 2006, "unsupported record boundary indicator %1" 2007, "unsupported formal system identifier attribute %1" 2008, "unsupported formal system identifier attribute value %1" 2009, "bad value %1 for formal system identifier tracking attribute" 2010, "duplicate specification for formal system identifier attribute %1" 2011, "bad value %1 for formal system identifier zapeof attribute" 2012, "bad value %1 for formal system identifier search attribute" 2013, "bad value %1 for formal system identifier fold attribute" 2014, "fold attribute allowed only for neutral storage manager" 2015, "BCTF and encoding attributes not applicable to this storage manager" 2016, "cannot specify both BCTF and encoding attribute" 2017, "ZAPEOF attribute not applicable to this storage manager" 2018, "RECORDS attribute not applicable to this storage manager" 2019, "bad value %1 for formal system identifier indirect attribute" 2020, "non-minimum data character (number %1) in value of formal system identifier lookup attribute" END jade-1.2.1/lib/EntityManagerMessages.h100444 764 764 15647 6606636234 15431 0ustar jjcjjc// This file was automatically generated from .\EntityManagerMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct EntityManagerMessages { // 2000 static const MessageType1 fsiSyntax; // 2001 static const MessageType1 fsiMissingValue; // 2002 static const MessageType1 fsiValueAsName; // 2003 static const MessageType1 fsiBadSmcrd; // 2004 static const MessageType1 fsiUnknownBctf; // 2005 static const MessageType1 fsiUnknownEncoding; // 2006 static const MessageType1 fsiUnsupportedRecords; // 2007 static const MessageType1 fsiUnsupportedAttribute; // 2008 static const MessageType1 fsiUnsupportedAttributeToken; // 2009 static const MessageType1 fsiBadTracking; // 2010 static const MessageType1 fsiDuplicateAttribute; // 2011 static const MessageType1 fsiBadZapeof; // 2012 static const MessageType1 fsiBadSearch; // 2013 static const MessageType1 fsiBadFold; // 2014 static const MessageType0 fsiFoldNotNeutral; // 2015 static const MessageType0 fsiBctfEncodingNotApplicable; // 2016 static const MessageType0 fsiBctfAndEncoding; // 2017 static const MessageType0 fsiZapeofNotApplicable; // 2018 static const MessageType0 fsiRecordsNotApplicable; // 2019 static const MessageType1 fsiBadIndirect; // 2020 static const MessageType1 fsiLookupChar; }; const MessageType1 EntityManagerMessages::fsiSyntax( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2000 #ifndef SP_NO_MESSAGE_TEXT ,"bad formal system identifier syntax in %1" #endif ); const MessageType1 EntityManagerMessages::fsiMissingValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2001 #ifndef SP_NO_MESSAGE_TEXT ,"value for attribute %1 missing in formal system identifier" #endif ); const MessageType1 EntityManagerMessages::fsiValueAsName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2002 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is a formal system identifier attribute value not an attribute name" #endif ); const MessageType1 EntityManagerMessages::fsiBadSmcrd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2003 #ifndef SP_NO_MESSAGE_TEXT ,"value of SMCRD attribute must be a single character not %1" #endif ); const MessageType1 EntityManagerMessages::fsiUnknownBctf( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2004 #ifndef SP_NO_MESSAGE_TEXT ,"unknown BCTF %1" #endif ); const MessageType1 EntityManagerMessages::fsiUnknownEncoding( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2005 #ifndef SP_NO_MESSAGE_TEXT ,"unknown encoding %1" #endif ); const MessageType1 EntityManagerMessages::fsiUnsupportedRecords( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2006 #ifndef SP_NO_MESSAGE_TEXT ,"unsupported record boundary indicator %1" #endif ); const MessageType1 EntityManagerMessages::fsiUnsupportedAttribute( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2007 #ifndef SP_NO_MESSAGE_TEXT ,"unsupported formal system identifier attribute %1" #endif ); const MessageType1 EntityManagerMessages::fsiUnsupportedAttributeToken( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2008 #ifndef SP_NO_MESSAGE_TEXT ,"unsupported formal system identifier attribute value %1" #endif ); const MessageType1 EntityManagerMessages::fsiBadTracking( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2009 #ifndef SP_NO_MESSAGE_TEXT ,"bad value %1 for formal system identifier tracking attribute" #endif ); const MessageType1 EntityManagerMessages::fsiDuplicateAttribute( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2010 #ifndef SP_NO_MESSAGE_TEXT ,"duplicate specification for formal system identifier attribute %1" #endif ); const MessageType1 EntityManagerMessages::fsiBadZapeof( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2011 #ifndef SP_NO_MESSAGE_TEXT ,"bad value %1 for formal system identifier zapeof attribute" #endif ); const MessageType1 EntityManagerMessages::fsiBadSearch( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2012 #ifndef SP_NO_MESSAGE_TEXT ,"bad value %1 for formal system identifier search attribute" #endif ); const MessageType1 EntityManagerMessages::fsiBadFold( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2013 #ifndef SP_NO_MESSAGE_TEXT ,"bad value %1 for formal system identifier fold attribute" #endif ); const MessageType0 EntityManagerMessages::fsiFoldNotNeutral( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2014 #ifndef SP_NO_MESSAGE_TEXT ,"fold attribute allowed only for neutral storage manager" #endif ); const MessageType0 EntityManagerMessages::fsiBctfEncodingNotApplicable( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2015 #ifndef SP_NO_MESSAGE_TEXT ,"BCTF and encoding attributes not applicable to this storage manager" #endif ); const MessageType0 EntityManagerMessages::fsiBctfAndEncoding( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2016 #ifndef SP_NO_MESSAGE_TEXT ,"cannot specify both BCTF and encoding attribute" #endif ); const MessageType0 EntityManagerMessages::fsiZapeofNotApplicable( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2017 #ifndef SP_NO_MESSAGE_TEXT ,"ZAPEOF attribute not applicable to this storage manager" #endif ); const MessageType0 EntityManagerMessages::fsiRecordsNotApplicable( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2018 #ifndef SP_NO_MESSAGE_TEXT ,"RECORDS attribute not applicable to this storage manager" #endif ); const MessageType1 EntityManagerMessages::fsiBadIndirect( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2019 #ifndef SP_NO_MESSAGE_TEXT ,"bad value %1 for formal system identifier indirect attribute" #endif ); const MessageType1 EntityManagerMessages::fsiLookupChar( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2020 #ifndef SP_NO_MESSAGE_TEXT ,"non-minimum data character (number %1) in value of formal system identifier lookup attribute" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/EquivClass.h100444 764 764 670 6606574410 13174 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef EquivClass_INCLUDED #define EquivClass_INCLUDED 1 #include "Link.h" #include "types.h" #include "ISet.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct EquivClass : public Link { EquivClass(unsigned in = 0) : inSets(in) { } ISet set; unsigned inSets; }; #ifdef SP_NAMESPACE } #endif #endif /* not EquivClass_INCLUDED */ jade-1.2.1/lib/Id.h100444 764 764 1727 6604607564 11502 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Id_INCLUDED #define Id_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Named.h" #include "Location.h" #include "Vector.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Id : public Named { public: Id(const StringC &); void define(const Location &); void addPendingRef(const Location &); Boolean defined() const; const Location &defLocation() const; const Vector &pendingRefs() const; private: Location defLocation_; Vector pendingRefs_; }; inline Boolean Id::defined() const { return !defLocation_.origin().isNull(); } inline const Location &Id::defLocation() const { return defLocation_; } inline const Vector &Id::pendingRefs() const { return pendingRefs_; } inline void Id::addPendingRef(const Location &loc) { pendingRefs_.push_back(loc); } #ifdef SP_NAMESPACE } #endif #endif /* not Id_INCLUDED */ jade-1.2.1/lib/ErrnoMessageArg.cxx100444 764 764 636 6606574410 14516 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "ErrnoMessageArg.h" #include "StringOf.h" #include "MessageBuilder.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif RTTI_DEF1(ErrnoMessageArg, OtherMessageArg) MessageArg *ErrnoMessageArg::copy() const { return new ErrnoMessageArg(*this); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ErrorCountEventHandler.cxx100444 764 764 1210 6606574410 16101 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "ErrorCountEventHandler.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif ErrorCountEventHandler::ErrorCountEventHandler(unsigned errorLimit) : errorCount_(0), maxErrors_(errorLimit), cancel_(0) { } void ErrorCountEventHandler::message(MessageEvent *event) { noteMessage(event->message()); delete event; } void ErrorCountEventHandler::noteMessage(const Message &message) { if (message.isError() && ++errorCount_ == maxErrors_) cancel_ = 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Event.cxx100444 764 764 31636 6606574410 12617 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Event.h" #include "Entity.h" #include "Attribute.h" #include "EventQueue.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif void Event::copyData() { } LocatedEvent::LocatedEvent(Type type, const Location &location) : location_(location), Event(type) { } MarkupEvent::MarkupEvent(Type type) : LocatedEvent(type, Location()) { } MarkupEvent::MarkupEvent(Type type, const Location &loc, Markup *markup) : LocatedEvent(type, loc) { if (markup) markup->swap(markup_); } StartElementEvent::StartElementEvent(const ElementType *elementType, const ConstPtr &dtd, AttributeList *attributes, const Location &startLocation, Markup *markup) : LocatedEvent(startElement, startLocation), elementType_(elementType), dtd_(dtd), included_(0), copied_(0), markup_(markup), attributes_(attributes) { } StartElementEvent::~StartElementEvent() { if (copied_) { delete attributes_; delete markup_; } } void StartElementEvent::copyData() { if (!copied_) { { AttributeList *p = new AttributeList; attributes_->swap(*p); attributes_ = p; } if (markup_) { Markup *p = new Markup; markup_->swap(*p); markup_ = p; } copied_ = 1; } } EndElementEvent::EndElementEvent(const ElementType *elementType, const ConstPtr &dtd, const Location &startLocation, Markup *markup) : LocatedEvent(endElement, startLocation), elementType_(elementType), dtd_(dtd), included_(0), copied_(0), markup_(markup) { } EndElementEvent::~EndElementEvent() { if (copied_) delete markup_; } void EndElementEvent::copyData() { if (!copied_) { if (markup_) { Markup *p = new Markup; markup_->swap(*p); markup_ = p; } copied_ = 1; } } DataEvent::DataEvent(Type type, const Char *p, size_t length, const Location &location) : p_(p),length_(length), LocatedEvent(type, location) { } const Entity *DataEvent::entity() const { return 0; } Boolean DataEvent::isRe(unsigned long &) const { return 0; } ImmediateDataEvent::ImmediateDataEvent(Type type, const Char *p, size_t length, const Location &location, Boolean copy) : DataEvent(type, p, length, location), alloc_(0) { if (copy) ImmediateDataEvent::copyData(); } ImmediateDataEvent::~ImmediateDataEvent() { if (alloc_) delete [] alloc_; } void ImmediateDataEvent::copyData() { if (!alloc_) { alloc_ = new Char[length_]; memcpy(alloc_, p_, length_*sizeof(Char)); p_ = alloc_; } } ReEvent::ReEvent(const Char *p, const Location &location, unsigned long serial) : ImmediateDataEvent(characterData, p, 1, location, 0), serial_(serial) { } Boolean ReEvent::isRe(unsigned long &serial) const { serial = serial_; return 1; } DataEntityEvent::DataEntityEvent(Type type, const InternalEntity *entity, const ConstPtr &origin) : DataEvent(type, entity->string().data(), entity->string().size(), Location(origin, 0)) { } const Entity *DataEntityEvent::entity() const { return location().origin()->asEntityOrigin()->entity(); } CdataEntityEvent::CdataEntityEvent(const InternalEntity *entity, const ConstPtr &origin) : DataEntityEvent(characterData, entity, origin) { } SdataEntityEvent::SdataEntityEvent(const InternalEntity *entity, const ConstPtr &origin) : DataEntityEvent(sdataEntity, entity, origin) { } MessageEvent::MessageEvent(const Message &m) : Event(Event::message), message_(m) { } MessageEvent::MessageEvent(Message &m) : Event(Event::message) { m.swap(message_); } PiEvent::PiEvent(const Char *data, size_t dataLength, const Location &location) : data_(data), dataLength_(dataLength), LocatedEvent(pi, location) { } const Entity *PiEvent::entity() const { return 0; } PiEntityEvent::PiEntityEvent(const PiEntity *entity, const ConstPtr &origin) : PiEvent(entity->string().data(), entity->string().size(), Location(origin, 0)) { } const Entity *PiEntityEvent::entity() const { return location().origin()->asEntityOrigin()->entity(); } ImmediatePiEvent::ImmediatePiEvent(StringC &str, const Location &loc) : PiEvent(str.data(), str.size(), loc) { str.swap(string_); } ExternalEntityEvent::ExternalEntityEvent(Type type, const ConstPtr &origin) : origin_(origin), Event(type) { } ExternalDataEntityEvent::ExternalDataEntityEvent(const ExternalDataEntity *entity, const ConstPtr &origin) : dataEntity_(entity), ExternalEntityEvent(externalDataEntity, origin) { } SubdocEntityEvent::SubdocEntityEvent(const SubdocEntity *entity, const ConstPtr &origin) : subdocEntity_(entity), ExternalEntityEvent(subdocEntity, origin) { } NonSgmlCharEvent::NonSgmlCharEvent(Char c, const Location &location) : LocatedEvent(nonSgmlChar, location), c_(c) { } AppinfoEvent::AppinfoEvent(const Location &location) : LocatedEvent(appinfo, location), appinfoNone_(1) { } AppinfoEvent::AppinfoEvent(const Text &text, const Location &location) : LocatedEvent(appinfo, location), appinfoNone_(0), appinfo_(text) { } UselinkEvent::UselinkEvent(const ConstPtr &lpd, const LinkSet *linkSet, Boolean restore, const Location &loc, Markup *markup) : MarkupEvent(uselink, loc, markup), lpd_(lpd), linkSet_(linkSet), restore_(restore) { } UsemapEvent::UsemapEvent(const ShortReferenceMap *map, Vector &elements, const ConstPtr &dtd, const Location &loc, Markup *markup) : MarkupEvent(usemap, loc, markup), map_(map), dtd_(dtd) { elements.swap(elements_); } StartSubsetEvent::StartSubsetEvent(Type type, const StringC &name, const ConstPtr &entity, Boolean hasInternalSubset, const Location &loc, Markup *markup) : name_(name), entity_(entity), hasInternalSubset_(hasInternalSubset), MarkupEvent(type, loc, markup) { } StartDtdEvent::StartDtdEvent(const StringC &name, const ConstPtr &entity, Boolean hasInternalSubset, const Location &loc, Markup *markup) : StartSubsetEvent(startDtd, name, entity, hasInternalSubset, loc, markup) { } StartLpdEvent::StartLpdEvent(Boolean active, const StringC &name, const ConstPtr &entity, Boolean hasInternalSubset, const Location &loc, Markup *markup) : StartSubsetEvent(startLpd, name, entity, hasInternalSubset, loc, markup), active_(active) { } EndDtdEvent::EndDtdEvent(const ConstPtr &dtd, const Location &loc, Markup *markup) : MarkupEvent(endDtd, loc, markup), dtd_(dtd) { } EndLpdEvent::EndLpdEvent(const ConstPtr &lpd, const Location &loc, Markup *markup) : MarkupEvent(endLpd, loc, markup), lpd_(lpd) { } EndPrologEvent::EndPrologEvent(const ConstPtr &dtd, const ConstPtr &lpd, Vector &simpleLinkNames, Vector &simpleLinkAttributes, const Location &location) : LocatedEvent(endProlog, location), dtd_(dtd), lpd_(lpd) { simpleLinkAttributes.swap(simpleLinkAttributes_); simpleLinkNames.swap(simpleLinkNames_); } EndPrologEvent::EndPrologEvent(const ConstPtr &dtd, const Location &location) : LocatedEvent(endProlog, location), dtd_(dtd) { } SgmlDeclEvent::SgmlDeclEvent(const ConstPtr &sd, const ConstPtr &syntax) : sd_(sd), prologSyntax_(syntax), instanceSyntax_(syntax), nextIndex_(0), MarkupEvent(sgmlDecl) { } SgmlDeclEvent::SgmlDeclEvent(const ConstPtr &sd, const ConstPtr &prologSyntax, const ConstPtr &instanceSyntax, const ConstPtr &refSd, const ConstPtr &refSyntax, Index nextIndex, const StringC &implySystemId, const Location &loc, Markup *markup) : sd_(sd), prologSyntax_(prologSyntax), instanceSyntax_(instanceSyntax), refSd_(refSd), refSyntax_(refSyntax), nextIndex_(nextIndex), implySystemId_(implySystemId), MarkupEvent(sgmlDecl, loc, markup) { } CommentDeclEvent::CommentDeclEvent(const Location &loc, Markup *markup) : MarkupEvent(commentDecl, loc, markup) { } SSepEvent::SSepEvent(const Char *p, size_t length, const Location &location, Boolean copy) : ImmediateDataEvent(sSep, p, length, location, copy) { } IgnoredRsEvent::IgnoredRsEvent(Char c, const Location &location) : LocatedEvent(ignoredRs, location), c_(c) { } IgnoredReEvent::IgnoredReEvent(Char c, const Location &location, unsigned long serial) : LocatedEvent(ignoredRe, location), c_(c), serial_(serial) { } ReOriginEvent::ReOriginEvent(Char c, const Location &location, unsigned long serial) : LocatedEvent(reOrigin, location), c_(c), serial_(serial) { } IgnoredCharsEvent::IgnoredCharsEvent(const Char *p, size_t length, const Location &location, Boolean copy) : ImmediateDataEvent(ignoredChars, p, length, location, copy) { } MarkedSectionEvent::MarkedSectionEvent(Type type, Status status, const Location &loc, Markup *markup) : MarkupEvent(type, loc, markup), status_(status) { } MarkedSectionStartEvent::MarkedSectionStartEvent(Status status, const Location &loc, Markup *markup) : MarkedSectionEvent(markedSectionStart, status, loc, markup) { } MarkedSectionEndEvent::MarkedSectionEndEvent(Status status, const Location &loc, Markup *markup) : MarkedSectionEvent(markedSectionEnd, status, loc, markup) { } EntityStartEvent::EntityStartEvent(const ConstPtr &origin) : Event(entityStart), origin_(origin) { } EntityEndEvent::EntityEndEvent(const Location &location) : LocatedEvent(entityEnd, location) { } EntityDeclEvent:: EntityDeclEvent(const ConstPtr &entity, Boolean ignored, const Location &loc, Markup *markup) : MarkupEvent(entityDecl, loc, markup), entity_(entity), ignored_(ignored) { } NotationDeclEvent:: NotationDeclEvent(const ConstPtr ¬ation, const Location &loc, Markup *markup) : MarkupEvent(notationDecl, loc, markup), notation_(notation) { } ElementDeclEvent::ElementDeclEvent(Vector &elements, const ConstPtr &dtd, const Location &loc, Markup *markup) : MarkupEvent(elementDecl, loc, markup), dtd_(dtd) { elements.swap(elements_); } AttlistDeclEvent::AttlistDeclEvent(Vector &elements, const ConstPtr &dtd, const Location &loc, Markup *markup) : MarkupEvent(attlistDecl, loc, markup), dtd_(dtd) { elements.swap(elements_); } AttlistNotationDeclEvent::AttlistNotationDeclEvent( Vector > ¬ations, const Location &loc, Markup *markup) : MarkupEvent(attlistNotationDecl, loc, markup) { notations.swap(notations_); } LinkAttlistDeclEvent ::LinkAttlistDeclEvent(Vector &elements, const ConstPtr &lpd, const Location &loc, Markup *markup) : MarkupEvent(linkAttlistDecl, loc, markup), lpd_(lpd) { elements.swap(elements_); } LinkDeclEvent::LinkDeclEvent(const LinkSet *linkSet, const ConstPtr &lpd, const Location &loc, Markup *markup) : MarkupEvent(linkDecl, loc, markup), lpd_(lpd), linkSet_(linkSet) { } IdLinkDeclEvent::IdLinkDeclEvent(const ConstPtr &lpd, const Location &loc, Markup *markup) : MarkupEvent(linkDecl, loc, markup), lpd_(lpd) { } ShortrefDeclEvent::ShortrefDeclEvent(const ShortReferenceMap *map, const ConstPtr &dtd, const Location &loc, Markup *markup) : MarkupEvent(shortrefDecl, loc, markup), map_(map), dtd_(dtd) { } IgnoredMarkupEvent::IgnoredMarkupEvent(const Location &loc, Markup *markup) : MarkupEvent(ignoredMarkup, loc, markup) { } EntityDefaultedEvent::EntityDefaultedEvent(const ConstPtr &entity, const Location &loc) : LocatedEvent(entityDefaulted, loc), entity_(entity) { } SgmlDeclEntityEvent:: SgmlDeclEntityEvent(const PublicId &publicId, PublicId::TextClass entityType, const StringC &effectiveSystemId, const Location &loc) : LocatedEvent(sgmlDeclEntity, loc), publicId_(publicId), entityType_(entityType), effectiveSystemId_(effectiveSystemId) { } EventHandler::~EventHandler() { } EventQueue::EventQueue() { } #define EVENT(c, f) \ void EventHandler::f(c *event) { delete event; } \ void EventQueue::f(c *event) { append(event); } \ void c::handle(EventHandler &handler) { handler.f(this); } #include "events.h" #undef EVENT Pass1EventHandler::Pass1EventHandler() : hadError_(0), origHandler_(0) { } void Pass1EventHandler::init(EventHandler *origHandler) { hadError_ = 0; origHandler_ = origHandler; } void Pass1EventHandler::message(MessageEvent *event) { if (event->message().isError()) { hadError_ = 1; origHandler_->message(event); } else IQueue::append(event); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/EventGenerator.cxx100444 764 764 625 6606574410 14420 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Boolean.h" #include "EventGenerator.h" EventGenerator::~EventGenerator() { } void EventGenerator::inhibitMessages(bool) { } EventGenerator * EventGenerator::makeSubdocEventGenerator(const SGMLApplication::Char *, size_t) { return 0; } jade-1.2.1/lib/EventQueue.h100444 764 764 1770 6606574410 13225 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef EventQueue_INCLUDED #define EventQueue_INCLUDED 1 #include "IQueue.h" #include "Event.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class EventQueue : public EventHandler, public IQueue { public: EventQueue(); private: #define EVENT(c, f) void f(c *); #include "events.h" #undef EVENT void append(Event *); }; class Pass1EventHandler : public EventQueue { public: Pass1EventHandler(); void init(EventHandler *origHandler); void message(MessageEvent *); Boolean hadError() const; EventHandler *origHandler() const; private: Boolean hadError_; EventHandler *origHandler_; }; inline void EventQueue::append(Event *event) { IQueue::append(event); } inline Boolean Pass1EventHandler::hadError() const { return hadError_; } inline EventHandler *Pass1EventHandler::origHandler() const { return origHandler_; } #ifdef SP_NAMESPACE } #endif #endif /* not EventQueue_INCLUDED */ jade-1.2.1/lib/ExtendEntityManager.cxx100444 764 764 162153 6604607564 15501 0ustar jjcjjc// Copyright (c) 1994, 1995, 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "ExtendEntityManager.h" #include "Message.h" #include "MessageArg.h" #include "OffsetOrderedList.h" #include "rtti.h" #include "StorageManager.h" #include "Vector.h" #include "NCVector.h" #include "Owner.h" #include "constant.h" #include "EntityManagerMessages.h" #include "StorageObjectPosition.h" #include "Owner.h" #include "CodingSystem.h" #include "CodingSystemKit.h" #include "InputSource.h" #include "Mutex.h" #include "macros.h" #include "EntityCatalog.h" #include "CharMap.h" #include #include #include #include #include #ifdef DECLARE_MEMMOVE extern "C" { void *memmove(void *, const void *, size_t); } #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const char EOFCHAR = '\032'; // Control-Z class ExternalInputSource; class EntityManagerImpl : public ExtendEntityManager { public: EntityManagerImpl(StorageManager *defaultStorageManager, const InputCodingSystem *defaultCodingSystem, const ConstPtr &, Boolean internalCharsetIsDocCharset); void setCatalogManager(CatalogManager *catalogManager); void registerStorageManager(StorageManager *); InputSource *open(const StringC &sysid, const CharsetInfo &, InputSourceOrigin *, unsigned flags, Messenger &); const CharsetInfo &charset() const; Boolean internalCharsetIsDocCharset() const; ConstPtr makeCatalog(StringC &systemId, const CharsetInfo &charset, Messenger &mgr); Boolean expandSystemId(const StringC &, const Location &, Boolean isNdata, const CharsetInfo &, const StringC *, Messenger &, StringC &); Boolean mergeSystemIds(const Vector &, Boolean mapCatalogDocument, const CharsetInfo &, Messenger &mgr, StringC &) const; StorageManager *lookupStorageType(const StringC &, const CharsetInfo &) const; StorageManager *lookupStorageType(const char *) const; StorageManager *guessStorageType(const StringC &, const CharsetInfo &) const; const InputCodingSystem *lookupCodingSystem(const StringC &, const CharsetInfo &, Boolean isBctf, const char *&) const; Boolean resolveSystemId(const StringC &str, const CharsetInfo &idCharset, Messenger &mgr, const Location &defLocation, Boolean isNdata, ParsedSystemId &parsedSysid) const; Boolean parseSystemId(const StringC &str, const CharsetInfo &idCharset, Boolean isNdata, const StorageObjectLocation *def, Messenger &mgr, ParsedSystemId &parsedSysid) const; const CharsetInfo &internalCharset(const CharsetInfo &docCharset) const { if (internalCharsetIsDocCharset_) return docCharset; else return charset(); } private: EntityManagerImpl(const EntityManagerImpl &); // undefined void operator=(const EntityManagerImpl &); // undefined static Boolean defLocation(const Location &, StorageObjectLocation &); static Boolean matchKey(const StringC &type, const char *s, const CharsetInfo &internalCharset); NCVector > storageManagers_; Owner defaultStorageManager_; const InputCodingSystem *defaultCodingSystem_; Owner catalogManager_; Boolean internalCharsetIsDocCharset_; ConstPtr codingSystemKit_; friend class FSIParser; }; class ExternalInfoImpl : public ExternalInfo { RTTI_CLASS public: ExternalInfoImpl(ParsedSystemId &parsedSysid); const StorageObjectSpec &spec(size_t i) const; size_t nSpecs() const; const ParsedSystemId &parsedSystemId() const; void noteRS(Offset); void noteStorageObjectEnd(Offset); void noteInsertedRSs(); void setDecoder(size_t i, Decoder *); void setId(size_t i, StringC &); void getId(size_t i, StringC &) const; Boolean convertOffset(Offset, StorageObjectLocation &) const; private: ParsedSystemId parsedSysid_; NCVector position_; size_t currentIndex_; // list of inserted RSs OffsetOrderedList rsList_; Boolean notrack_; Mutex mutex_; }; class ExternalInputSource : public InputSource { public: ExternalInputSource(ParsedSystemId &parsedSysid, const CharsetInfo &internalCharset, const CharsetInfo &docCharset, Boolean internalCharsetIsDocCharset, Char replacementChar, InputSourceOrigin *origin, unsigned flags); void pushCharRef(Char, const NamedCharRef &); ~ExternalInputSource(); private: Xchar fill(Messenger &); Boolean rewind(Messenger &); void willNotRewind(); void setDocCharset(const CharsetInfo &, const CharsetInfo &); void willNotSetDocCharset(); void init(); void noteRS(); void noteRSAt(const Char *); void reallocateBuffer(size_t size); void insertChar(Char); void buildMap(const CharsetInfo &internalCharset, const CharsetInfo &docCharset); void buildMap1(const CharsetInfo &, const CharsetInfo &); static const Char *findNextCr(const Char *start, const Char *end); static const Char *findNextLf(const Char *start, const Char *end); static const Char *findNextCrOrLf(const Char *start, const Char *end); ExternalInfoImpl *info_; Char *buf_; const Char *bufLim_; Offset bufLimOffset_; size_t bufSize_; size_t readSize_; NCVector > sov_; StorageObject *so_; size_t soIndex_; Boolean insertRS_; Decoder *decoder_; const char *leftOver_; size_t nLeftOver_; Boolean mayRewind_; Boolean maySetDocCharset_; Boolean mayNotExist_; enum RecordType { unknown, crUnknown, crlf, lf, cr, asis }; RecordType recordType_; Boolean zapEof_; Boolean internalCharsetIsDocCharset_; Char replacementChar_; Ptr > map_; }; class FSIParser { public: FSIParser(const StringC &, const CharsetInfo &idCharset, Boolean isNdata, const StorageObjectLocation *defLoc, const EntityManagerImpl *em, Messenger &mgr); Boolean parse(ParsedSystemId &parsedSysid); static const char *recordsName(StorageObjectSpec::Records records); struct RecordType { const char *name; StorageObjectSpec::Records value; }; private: Boolean handleInformal(size_t startIndex, ParsedSystemId &parsedSysid); Boolean convertId(StringC &, Xchar smcrd, const StorageManager *); Xchar get(); void unget(); StorageManager *lookupStorageType(const StringC &key, Boolean &neutral); Boolean matchKey(const StringC &, const char *); Boolean matchChar(Xchar, char); Boolean isS(Xchar); Boolean convertDigit(Xchar c, int &weight); void uncharref(StringC &); Boolean setAttributes(StorageObjectSpec &sos, Boolean neutral, Xchar &smcrd, Boolean &fold); Boolean setCatalogAttributes(ParsedSystemId &parsedSysid); void setDefaults(StorageObjectSpec &sos); Boolean parseAttribute(StringC &token, Boolean &gotValue, StringC &value); Boolean lookupRecords(const StringC &token, StorageObjectSpec::Records &); void convertMinimumLiteral(const StringC &from, StringC &to); const StringC &str_; size_t strIndex_; Messenger &mgr_; const EntityManagerImpl *em_; const StorageObjectSpec *defSpec_; const StringC *defId_; const CharsetInfo &idCharset_; Boolean isNdata_; static RecordType recordTypeTable[]; }; const Char RS = '\n'; const Char RE = '\r'; ExtendEntityManager::CatalogManager::~CatalogManager() { } ExtendEntityManager *ExtendEntityManager::make(StorageManager *sm, const InputCodingSystem *cs, const ConstPtr &csKit, Boolean internalCharsetIsDocCharset) { return new EntityManagerImpl(sm, cs, csKit, internalCharsetIsDocCharset); } Boolean ExtendEntityManager::externalize(const ExternalInfo *info, Offset off, StorageObjectLocation &loc) { if (!info) return false; const ExternalInfoImpl *p = DYNAMIC_CAST_CONST_PTR(ExternalInfoImpl, info); if (!p) return false; return p->convertOffset(off, loc); } const ParsedSystemId * ExtendEntityManager::externalInfoParsedSystemId(const ExternalInfo *info) { if (!info) return 0; const ExternalInfoImpl *p = DYNAMIC_CAST_CONST_PTR(ExternalInfoImpl, info); if (!p) return 0; return &p->parsedSystemId(); } EntityManagerImpl::EntityManagerImpl(StorageManager *defaultStorageManager, const InputCodingSystem *defaultCodingSystem, const ConstPtr &codingSystemKit, Boolean internalCharsetIsDocCharset) : defaultStorageManager_(defaultStorageManager), defaultCodingSystem_(defaultCodingSystem), codingSystemKit_(codingSystemKit), internalCharsetIsDocCharset_(internalCharsetIsDocCharset) { } Boolean EntityManagerImpl::internalCharsetIsDocCharset() const { return internalCharsetIsDocCharset_; } const CharsetInfo &EntityManagerImpl::charset() const { return codingSystemKit_->systemCharset(); } InputSource *EntityManagerImpl::open(const StringC &sysid, const CharsetInfo &docCharset, InputSourceOrigin *origin, unsigned flags, Messenger &mgr) { ParsedSystemId parsedSysid; if (!parseSystemId(sysid, docCharset, (flags & ExtendEntityManager::isNdata) != 0, 0, mgr, parsedSysid) || !catalogManager_->mapCatalog(parsedSysid, this, mgr)) return 0; return new ExternalInputSource(parsedSysid, charset(), docCharset, internalCharsetIsDocCharset_, codingSystemKit_->replacementChar(), origin, flags); } ConstPtr EntityManagerImpl::makeCatalog(StringC &systemId, const CharsetInfo &docCharset, Messenger &mgr) { return catalogManager_->makeCatalog(systemId, docCharset, this, mgr); } Boolean EntityManagerImpl::mergeSystemIds(const Vector &sysids, Boolean mapCatalogDocument, const CharsetInfo &docCharset, Messenger &mgr, StringC &result) const { ParsedSystemId parsedSysid; if (mapCatalogDocument) { parsedSysid.maps.resize(parsedSysid.maps.size() + 1); parsedSysid.maps.back().type = ParsedSystemId::Map::catalogDocument; } for (size_t i = 0; i < sysids.size(); i++) if (!parseSystemId(sysids[i], docCharset, 0, 0, mgr, parsedSysid)) return 0; parsedSysid.unparse(internalCharset(docCharset), 0, result); return 1; } Boolean EntityManagerImpl::expandSystemId(const StringC &str, const Location &defLoc, Boolean isNdata, const CharsetInfo &docCharset, const StringC *mapCatalogPublic, Messenger &mgr, StringC &result) { ParsedSystemId parsedSysid; StorageObjectLocation defSoLoc; const StorageObjectLocation *defSoLocP; if (defLocation(defLoc, defSoLoc)) defSoLocP = &defSoLoc; else defSoLocP = 0; if (!parseSystemId(str, docCharset, isNdata, defSoLocP, mgr, parsedSysid)) return 0; if (mapCatalogPublic) { ParsedSystemId::Map map; map.type = ParsedSystemId::Map::catalogPublic; map.publicId = *mapCatalogPublic; parsedSysid.maps.insert(parsedSysid.maps.begin(), 1, map); } parsedSysid.unparse(internalCharset(docCharset), isNdata, result); return 1; } Boolean EntityManagerImpl::parseSystemId(const StringC &str, const CharsetInfo &docCharset, Boolean isNdata, const StorageObjectLocation *defLoc, Messenger &mgr, ParsedSystemId &parsedSysid) const { FSIParser fsiParser(str, internalCharset(docCharset), isNdata, defLoc, this, mgr); return fsiParser.parse(parsedSysid); } StorageManager * EntityManagerImpl::guessStorageType(const StringC &type, const CharsetInfo &internalCharset) const { for (size_t i = 0; i < storageManagers_.size(); i++) if (storageManagers_[i]->guessIsId(type, internalCharset)) return storageManagers_[i].pointer(); if (defaultStorageManager_->guessIsId(type, internalCharset)) return defaultStorageManager_.pointer(); return 0; } StorageManager * EntityManagerImpl::lookupStorageType(const StringC &type, const CharsetInfo &internalCharset) const { if (type.size() == 0) return 0; if (matchKey(type, defaultStorageManager_->type(), internalCharset)) return defaultStorageManager_.pointer(); for (size_t i = 0; i < storageManagers_.size(); i++) if (matchKey(type, storageManagers_[i]->type(), internalCharset)) return storageManagers_[i].pointer(); return 0; } StorageManager * EntityManagerImpl::lookupStorageType(const char *type) const { if (type == defaultStorageManager_->type()) return defaultStorageManager_.pointer(); for (size_t i = 0; i < storageManagers_.size(); i++) if (type == storageManagers_[i]->type()) return storageManagers_[i].pointer(); return 0; } const InputCodingSystem * EntityManagerImpl::lookupCodingSystem(const StringC &type, const CharsetInfo &internalCharset, Boolean isBctf, const char *&name) const { return codingSystemKit_->makeInputCodingSystem(type, internalCharset, isBctf, name); } Boolean EntityManagerImpl::matchKey(const StringC &type, const char *s, const CharsetInfo &internalCharset) { if (strlen(s) != type.size()) return false; for (size_t i = 0; i < type.size(); i++) if (internalCharset.execToDesc(toupper(s[i])) != type[i] && internalCharset.execToDesc(tolower(s[i])) != type[i]) return false; return true; } void EntityManagerImpl::registerStorageManager(StorageManager *sm) { storageManagers_.resize(storageManagers_.size() + 1); storageManagers_.back() = sm; } void EntityManagerImpl::setCatalogManager(CatalogManager *catalogManager) { catalogManager_ = catalogManager; } Boolean EntityManagerImpl::defLocation(const Location &defLocation, StorageObjectLocation &soLoc) { Offset off; const ExternalInfo *info; const Origin *origin = defLocation.origin().pointer(); Index index = defLocation.index(); for (;;) { if (!origin) return 0; const InputSourceOrigin *inputSourceOrigin = origin->asInputSourceOrigin(); if (inputSourceOrigin) { off = inputSourceOrigin->startOffset(index); info = inputSourceOrigin->externalInfo(); if (info) break; if (!inputSourceOrigin->defLocation(off, origin, index)) return 0; } else { const Location &parentLoc = origin->parent(); origin = parentLoc.origin().pointer(); index = parentLoc.index(); } } return ExtendEntityManager::externalize(info, off, soLoc); } class UnbufferingStorageObject : public StorageObject { public: UnbufferingStorageObject(StorageObject *sub, const Boolean *unbuffer) : sub_(sub), buf_(0), bufAvail_(0), bufNext_(0), unbuffer_(unbuffer) { } ~UnbufferingStorageObject() { delete [] buf_; } Boolean read(char *buf, size_t bufSize, Messenger &mgr, size_t &nread) { if (bufNext_ >= bufAvail_) { bufAvail_ = bufNext_ = 0; if (!*unbuffer_) return sub_->read(buf, bufSize, mgr, nread); if (buf_ == 0) buf_ = new char[bufSize_ = bufSize]; if (!sub_->read(buf_, bufSize_, mgr, bufAvail_)) return 0; } *buf = buf_[bufNext_++]; nread = 1; return 1; } Boolean rewind(Messenger &mgr) { bufAvail_ = bufNext_ = 0; return sub_->rewind(mgr); } void willNotRewind() { sub_->willNotRewind(); } size_t getBlockSize() const { return sub_->getBlockSize(); } private: Owner sub_; size_t bufSize_; size_t bufAvail_; size_t bufNext_; char *buf_; const Boolean *unbuffer_; }; class MappingDecoder : public Decoder { public: MappingDecoder(Decoder *, const ConstPtr > &); Boolean convertOffset(unsigned long &offset) const; size_t decode(Char *, const char *, size_t, const char **); private: Owner sub_; ConstPtr > map_; }; MappingDecoder::MappingDecoder(Decoder *sub, const ConstPtr > &map) : Decoder(sub->minBytesPerChar()), sub_(sub), map_(map) { } size_t MappingDecoder::decode(Char *to, const char *s, size_t slen, const char **rest) { size_t n = sub_->decode(to, s, slen, rest); const CharMap &map = *map_; for (size_t i = 0; i < n; i++) { Unsigned32 d = map[to[i]]; if (d & (unsigned(1) << 31)) to[i] = (d & ~(unsigned(1) << 31)); else to[i] += d; } return n; } Boolean MappingDecoder::convertOffset(unsigned long &offset) const { return sub_->convertOffset(offset); } ExternalInputSource::ExternalInputSource(ParsedSystemId &parsedSysid, const CharsetInfo &systemCharset, const CharsetInfo &docCharset, Boolean internalCharsetIsDocCharset, Char replacementChar, InputSourceOrigin *origin, unsigned flags) : InputSource(origin, 0, 0), mayRewind_((flags & EntityManager::mayRewind) != 0), mayNotExist_((flags & ExtendEntityManager::mayNotExist) != 0), sov_(parsedSysid.size()), internalCharsetIsDocCharset_(internalCharsetIsDocCharset), // hack maySetDocCharset_((flags & EntityManager::maySetDocCharset) != 0), replacementChar_(replacementChar) { for (size_t i = 0; i < parsedSysid.size(); i++) { if (parsedSysid[i].codingSystemType != (internalCharsetIsDocCharset ? StorageObjectSpec::bctf : StorageObjectSpec::encoding) && parsedSysid[i].codingSystemType != StorageObjectSpec::special) { map_ = new CharMapResource; buildMap(systemCharset, docCharset); break; } } for (size_t i = 0; i < sov_.size(); i++) sov_[i] = 0; init(); info_ = new ExternalInfoImpl(parsedSysid); origin->setExternalInfo(info_); } void ExternalInputSource::setDocCharset(const CharsetInfo &docCharset, const CharsetInfo &systemCharset) { if (!map_.isNull()) buildMap(systemCharset, docCharset); willNotSetDocCharset(); } void ExternalInputSource::willNotSetDocCharset() { maySetDocCharset_ = 0; } void ExternalInputSource::buildMap(const CharsetInfo &systemCharset, const CharsetInfo &docCharset) { CharMap &map = *map_; // FIXME How should invalidChar be chosen when internalCharsetIsDocCharset_? Char invalidChar = internalCharsetIsDocCharset_ ? 0 : replacementChar_; map.setAll((Unsigned32(1) << 31) | invalidChar); if (internalCharsetIsDocCharset_) buildMap1(systemCharset, docCharset); else buildMap1(docCharset, systemCharset); } void ExternalInputSource::buildMap1(const CharsetInfo &fromCharset, const CharsetInfo &toCharset) { UnivCharsetDescIter iter(fromCharset.desc()); for (;;) { WideChar descMin, descMax; UnivChar univMin; if (!iter.next(descMin, descMax, univMin)) break; if (descMin > charMax) break; if (descMax > charMax) descMax = charMax; WideChar totalCount = 1 + (descMax - descMin); do { WideChar count; WideChar toMin; ISet set; int nMap = toCharset.univToDesc(univMin, toMin, set, count); if (count > totalCount) count = totalCount; if (nMap && toMin <= charMax) { Char toMax; if (count - 1 > charMax - toMin) toMax = charMax; else toMax = toMin + (count - 1); map_->setRange(descMin, descMin + (toMax - toMin), Char(toMin - descMin)); } descMin += count; univMin += count; totalCount -= count; } while (totalCount > 0); } } void ExternalInputSource::init() { so_ = 0; buf_ = 0; bufSize_ = 0; bufLim_ = 0; bufLimOffset_ = 0; insertRS_ = true; soIndex_ = 0; leftOver_ = 0; nLeftOver_ = 0; } ExternalInputSource::~ExternalInputSource() { if (buf_) delete [] buf_; } Boolean ExternalInputSource::rewind(Messenger &mgr) { reset(0, 0); if (buf_) delete [] buf_; // reset makes a new EntityOrigin ParsedSystemId parsedSysid(info_->parsedSystemId()); ExternalInfoImpl *oldInfo = info_; info_ = new ExternalInfoImpl(parsedSysid); so_ = 0; for (size_t i = 0; i < soIndex_; i++) { if (sov_[i] && !sov_[i]->rewind(mgr)) return 0; StringC tem; oldInfo->getId(i, tem); info_->setId(i, tem); } inputSourceOrigin()->setExternalInfo(info_); init(); return 1; } void ExternalInputSource::willNotRewind() { for (size_t i = 0; i < sov_.size(); i++) if (sov_[i]) sov_[i]->willNotRewind(); mayRewind_ = 0; } // Round up N so that it is a power of TO. // TO must be a power of 2. inline size_t roundUp(size_t n, size_t to) { return (n + (to - 1)) & ~(to - 1); } inline void ExternalInputSource::noteRSAt(const Char *p) { info_->noteRS(bufLimOffset_ - (bufLim_ - p)); } inline void ExternalInputSource::noteRS() { noteRSAt(cur()); } Xchar ExternalInputSource::fill(Messenger &mgr) { ASSERT(cur() == end()); while (end() >= bufLim_) { // need more data while (so_ == 0) { if (soIndex_ >= sov_.size()) return eE; if (soIndex_ > 0) info_->noteStorageObjectEnd(bufLimOffset_ - (bufLim_ - end())); const StorageObjectSpec &spec = info_->spec(soIndex_); if (!sov_[soIndex_]) { StringC id; if (mayNotExist_) { NullMessenger nullMgr; sov_[soIndex_] = spec.storageManager->makeStorageObject(spec.specId, spec.baseId, spec.search, mayRewind_, nullMgr, id); } else sov_[soIndex_] = spec.storageManager->makeStorageObject(spec.specId, spec.baseId, spec.search, mayRewind_, mgr, id); info_->setId(soIndex_, id); } so_ = sov_[soIndex_].pointer(); if (so_) { decoder_ = spec.codingSystem->makeDecoder(); if (spec.codingSystemType != StorageObjectSpec::special && spec.codingSystemType != (internalCharsetIsDocCharset_ ? StorageObjectSpec::bctf : StorageObjectSpec::encoding)) { decoder_ = new MappingDecoder(decoder_, map_); if (maySetDocCharset_) { sov_[soIndex_] = new UnbufferingStorageObject(sov_[soIndex_].extract(), &maySetDocCharset_); so_ = sov_[soIndex_].pointer(); } } info_->setDecoder(soIndex_, decoder_); zapEof_ = spec.zapEof; switch (spec.records) { case StorageObjectSpec::asis: recordType_ = asis; insertRS_ = false; break; case StorageObjectSpec::cr: recordType_ = cr; break; case StorageObjectSpec::lf: recordType_ = lf; break; case StorageObjectSpec::crlf: recordType_ = crlf; break; case StorageObjectSpec::find: recordType_ = unknown; break; default: CANNOT_HAPPEN(); } soIndex_++; readSize_ = so_->getBlockSize(); nLeftOver_ = 0; break; } else setAccessError(); soIndex_++; } size_t keepSize = end() - start(); const size_t align = sizeof(int)/sizeof(Char); size_t readSizeChars = (readSize_ + (sizeof(Char) - 1))/sizeof(Char); readSizeChars = roundUp(readSizeChars, align); size_t neededSize; // in Chars size_t startOffset; // compute neededSize and readSize unsigned minBytesPerChar = decoder_->minBytesPerChar(); if (nLeftOver_ == 0 && minBytesPerChar >= sizeof(Char)) { // In this case we want to do decoding in place. // FIXME It might be a win on some systems (Irix?) to arrange that the // read buffer is on a page boundary. if (keepSize >= size_t(-1)/sizeof(Char) - (align - 1) - insertRS_) abort(); // FIXME throw an exception // Now size_t(-1)/sizeof(Char) - (align - 1) - insertRS_ - keepSize > 0 if (readSizeChars > size_t(-1)/sizeof(Char) - (align - 1) - insertRS_ - keepSize) abort(); neededSize = roundUp(readSizeChars + keepSize + insertRS_, align); startOffset = ((neededSize > bufSize_ ? neededSize : bufSize_) - readSizeChars - insertRS_ - keepSize); } else { // Needs to be room for everything before decoding. neededSize = (keepSize + insertRS_ + readSizeChars + (nLeftOver_ + sizeof(Char) - 1)/sizeof(Char)); // Also must be room for everything after decoding. size_t neededSize2 = (keepSize + insertRS_ // all the converted characters + (nLeftOver_ + readSize_)/minBytesPerChar // enough Chars to contain left over bytes + ((readSize_ % minBytesPerChar + sizeof(Char) - 1) / sizeof(Char))); if (neededSize2 > neededSize) neededSize = neededSize2; neededSize = roundUp(neededSize, align); if (neededSize > size_t(-1)/sizeof(Char)) abort(); startOffset = 0; } if (bufSize_ < neededSize) reallocateBuffer(neededSize); Char *newStart = buf_ + startOffset; if (newStart != start() && keepSize > 0) memmove(newStart, start(), keepSize*sizeof(Char)); char *bytesStart = (char *)(buf_ + bufSize_ - readSizeChars) - nLeftOver_; if (nLeftOver_ > 0 && leftOver_ != bytesStart) memmove(bytesStart, leftOver_, nLeftOver_); moveStart(newStart); bufLim_ = end(); size_t nread; if (so_->read((char *)(buf_ + bufSize_ - readSizeChars), readSize_, mgr, nread)) { if (nread > 0) { const char *bytesEnd = bytesStart + nLeftOver_ + nread; size_t nChars = decoder_->decode((Char *)end() + insertRS_, bytesStart, nLeftOver_ + nread - (zapEof_ && bytesEnd[-1] == EOFCHAR), &leftOver_); nLeftOver_ = bytesEnd - leftOver_; if (nChars > 0) { if (insertRS_) { noteRS(); *(Char *)end() = RS; advanceEnd(end() + 1); insertRS_ = false; bufLim_ += 1; bufLimOffset_ += 1; } bufLim_ += nChars; bufLimOffset_ += nChars; break; } } } else so_ = 0; } ASSERT(end() < bufLim_); if (insertRS_) { noteRS(); insertChar(RS); insertRS_ = false; bufLimOffset_ += 1; } switch (recordType_) { case unknown: { const Char *e = findNextCrOrLf(end(), bufLim_); if (e) { if (*e == '\n') { recordType_ = lf; info_->noteInsertedRSs(); *(Char *)e = RE; advanceEnd(e + 1); insertRS_ = true; } else { if (e + 1 < bufLim_) { if (e[1] == '\n') { recordType_ = crlf; advanceEnd(e + 1); if (e + 2 == bufLim_) { bufLim_--; bufLimOffset_--; insertRS_ = true; } } else { advanceEnd(e + 1); recordType_ = cr; info_->noteInsertedRSs(); insertRS_ = true; } } else { recordType_ = crUnknown; advanceEnd(e + 1); } } } else advanceEnd(bufLim_); } break; case crUnknown: { if (*cur() == '\n') { noteRS(); advanceEnd(cur() + 1); recordType_ = crlf; } else { advanceEnd(cur() + 1); insertRS_ = true; recordType_ = cr; info_->noteInsertedRSs(); } } break; case lf: { Char *e = (Char *)findNextLf(end(), bufLim_); if (e) { advanceEnd(e + 1); *e = RE; insertRS_ = true; } else advanceEnd(bufLim_); } break; case cr: { const Char *e = findNextCr(end(), bufLim_); if (e) { advanceEnd(e + 1); insertRS_ = true; } else advanceEnd(bufLim_); } break; case crlf: { const Char *e = end(); for (;;) { e = findNextLf(e, bufLim_); if (!e) { advanceEnd(bufLim_); break; } // Need to delete final RS if not followed by anything. if (e + 1 == bufLim_) { bufLim_--; bufLimOffset_--; advanceEnd(e); insertRS_ = true; if (cur() == end()) return fill(mgr); break; } noteRSAt(e); e++; } } break; case asis: advanceEnd(bufLim_); break; default: CANNOT_HAPPEN(); } ASSERT(cur() < end()); return nextChar(); } const Char *ExternalInputSource::findNextCr(const Char *start, const Char *end) { for (; start < end; start++) if (*start == '\r') return start; return 0; } const Char *ExternalInputSource::findNextLf(const Char *start, const Char *end) { for (; start < end; start++) if (*start == '\n') return start; return 0; } const Char *ExternalInputSource::findNextCrOrLf(const Char *start, const Char *end) { for (; start < end; start++) if (*start == '\n' || *start == '\r') return start; return 0; } void ExternalInputSource::pushCharRef(Char ch, const NamedCharRef &ref) { ASSERT(cur() == start()); noteCharRef(startIndex() + (cur() - start()), ref); insertChar(ch); } void ExternalInputSource::insertChar(Char ch) { if (start() > buf_) { if (cur() > start()) memmove((Char *)start() - 1, start(), (cur() - start())*sizeof(Char)); moveLeft(); *(Char *)cur() = ch; } else { // must have start == buf if (buf_ + (bufSize_ - (nLeftOver_ + sizeof(Char) - 1)/sizeof(Char)) == bufLim_) { if (bufSize_ == size_t(-1)) abort(); // FIXME throw an exception reallocateBuffer(bufSize_ + 1); } else if (nLeftOver_ > 0 && ((char *)(bufLim_ + 1) > leftOver_)) { char *s = (char *)(buf_ + bufSize_) - nLeftOver_; memmove(s, leftOver_, nLeftOver_); leftOver_ = s; } if (cur() < bufLim_) memmove((Char *)cur() + 1, cur(), (bufLim_ - cur())*sizeof(Char)); *(Char *)cur() = ch; advanceEnd(end() + 1); bufLim_ += 1; } } void ExternalInputSource::reallocateBuffer(size_t newSize) { Char *newBuf = new Char[newSize]; memcpy(newBuf, buf_, bufSize_*sizeof(Char)); bufSize_ = newSize; changeBuffer(newBuf, buf_); bufLim_ = newBuf + (bufLim_ - buf_); if (nLeftOver_ > 0) { char *s = (char *)(newBuf + bufSize_) - nLeftOver_; memmove(s, (char *)newBuf + (leftOver_ - (char *)buf_), nLeftOver_); leftOver_ = s; } delete [] buf_; buf_ = newBuf; } RTTI_DEF1(ExternalInfoImpl, ExternalInfo) ExternalInfoImpl::ExternalInfoImpl(ParsedSystemId &parsedSysid) : currentIndex_(0), position_(parsedSysid.size()) { parsedSysid.swap(parsedSysid_); if (parsedSysid_.size() > 0) notrack_ = parsedSysid_[0].notrack; } void ExternalInfoImpl::setId(size_t i, StringC &id) { Mutex::Lock lock(&mutex_); id.swap(position_[i].id); } void ExternalInfoImpl::getId(size_t i, StringC &id) const { Mutex::Lock lock(&((ExternalInfoImpl *)this)->mutex_); id = position_[i].id; } void ExternalInfoImpl::setDecoder(size_t i, Decoder *decoder) { Mutex::Lock lock(&mutex_); position_[i].decoder = decoder; } void ExternalInfoImpl::noteInsertedRSs() { position_[currentIndex_].insertedRSs = 1; } void ExternalInfoImpl::noteRS(Offset offset) { // We do the locking in OffsetOrderedList. if (!notrack_) rsList_.append(offset); if (offset == (currentIndex_ == 0 ? 0 : position_[currentIndex_- 1].endOffset)) position_[currentIndex_].startsWithRS = 1; } void ExternalInfoImpl::noteStorageObjectEnd(Offset offset) { Mutex::Lock lock(&mutex_); ASSERT(currentIndex_ < position_.size()); // The last endOffset_ must be -1. if (currentIndex_ < position_.size() - 1) { position_[currentIndex_++].endOffset = offset; position_[currentIndex_].line1RS = rsList_.size(); notrack_ = parsedSysid_[currentIndex_].notrack; } } Boolean ExternalInfoImpl::convertOffset(Offset off, StorageObjectLocation &ret) const { Mutex::Lock lock(&((ExternalInfoImpl *)this)->mutex_); if (off == Offset(-1) || position_.size() == 0) return false; // the last endOffset_ is Offset(-1), so this will // terminate int i; for (i = 0; off >= position_[i].endOffset; i++) ; for (; position_[i].id.size() == 0; i--) if (i == 0) return false; ret.storageObjectSpec = &parsedSysid_[i]; ret.actualStorageId = position_[i].id; Offset startOffset = i == 0 ? 0 : position_[i - 1].endOffset; ret.storageObjectOffset = off - startOffset; ret.byteIndex = ret.storageObjectOffset; if (parsedSysid_[i].notrack || parsedSysid_[i].records == StorageObjectSpec::asis) { ret.lineNumber = (unsigned long)-1; if (parsedSysid_[i].records != StorageObjectSpec::asis) { if (position_[i].insertedRSs) ret.byteIndex = (unsigned long)-1; else if (ret.byteIndex > 0 && position_[i].startsWithRS) ret.byteIndex--; // first RS is inserted } ret.columnNumber = (unsigned long)-1; return true; } else { size_t line1RS = position_[i].line1RS; // line1RS is now the number of RSs that are before or on the current line. size_t j; Offset colStart; if (rsList_.findPreceding(off, j, colStart)) { if (position_[i].insertedRSs) ret.byteIndex -= j + 1 - line1RS; else if (ret.byteIndex > 0 && position_[i].startsWithRS) ret.byteIndex--; // first RS is inserted j++; colStart++; } else { j = 0; colStart = 0; } // j is now the number of RSs that are before or on the current line // colStart is the offset of the first column ret.lineNumber = j - line1RS + 1 - position_[i].startsWithRS; // the offset of the first column if (colStart < startOffset) colStart = startOffset; // the RS that starts a line will be in column 0; // the first real character of a line will be column 1 ret.columnNumber = 1 + off - colStart; } if (!position_[i].decoder || !position_[i].decoder->convertOffset(ret.byteIndex)) ret.byteIndex = (unsigned long)-1; return true; } const StorageObjectSpec &ExternalInfoImpl::spec(size_t i) const { return parsedSysid_[i]; } size_t ExternalInfoImpl::nSpecs() const { return parsedSysid_.size(); } const ParsedSystemId &ExternalInfoImpl::parsedSystemId() const { return parsedSysid_; } StorageObjectSpec::StorageObjectSpec() : storageManager(0), codingSystem(0), codingSystemName(0), notrack(0), records(find), zapEof(1), search(1) { } StorageObjectPosition::StorageObjectPosition() : endOffset(Offset(-1)), line1RS(0), startsWithRS(0), insertedRSs(0) { } FSIParser::FSIParser(const StringC &str, const CharsetInfo &idCharset, Boolean isNdata, const StorageObjectLocation *defLoc, const EntityManagerImpl *em, Messenger &mgr) : str_(str), strIndex_(0), idCharset_(idCharset), isNdata_(isNdata), defSpec_(defLoc ? defLoc->storageObjectSpec : 0), defId_(defLoc ? &defLoc->actualStorageId : 0), em_(em), mgr_(mgr) { } Xchar FSIParser::get() { if (strIndex_ < str_.size()) return str_[strIndex_++]; else return -1; } void FSIParser::unget() { if (strIndex_ > 0) strIndex_ -= 1; } Boolean FSIParser::matchKey(const StringC &str, const char *s) { if (strlen(s) != str.size()) return false; for (size_t i = 0; i < str.size(); i++) if (idCharset_.execToDesc(toupper(s[i])) != str[i] && idCharset_.execToDesc(tolower(s[i])) != str[i]) return false; return true; } Boolean FSIParser::matchChar(Xchar ch, char execC) { return ch == idCharset_.execToDesc(execC); } Boolean FSIParser::isS(Xchar c) { return (matchChar(c, ' ') || matchChar(c, '\r') || matchChar(c, '\n') || matchChar(c, ' ')); } Boolean FSIParser::convertDigit(Xchar c, int &weight) { static const char digits[] = "0123456789"; for (int i = 0; digits[i] != '\0'; i++) if (matchChar(c, digits[i])) { weight = i; return 1; } return 0; } Boolean FSIParser::parse(ParsedSystemId &parsedSysid) { size_t startIndex = strIndex_; if (!matchChar(get(), '<')) return handleInformal(startIndex, parsedSysid); StringC key; for (;;) { Xchar c = get(); if (c == -1) return handleInformal(startIndex, parsedSysid); if (isS(c) || matchChar(c, '>')) break; key += Char(c); } unget(); if (matchKey(key, "CATALOG")) { if (!setCatalogAttributes(parsedSysid)) return 0; return parse(parsedSysid); } Boolean neutral; StorageManager *sm = lookupStorageType(key, neutral); if (!sm) return handleInformal(startIndex, parsedSysid); for (;;) { parsedSysid.resize(parsedSysid.size() + 1); StorageObjectSpec &sos = parsedSysid.back(); sos.storageManager = sm; Xchar smcrd; Boolean fold; if (!setAttributes(sos, neutral, smcrd, fold)) return 0; sm = 0; StringC id; Boolean hadData = 0; for (;;) { Xchar c = get(); if (c == -1) break; if (matchChar(c, '<')) { hadData = 1; Char stago = c; key.resize(0); for (;;) { c = get(); if (c == -1) { id += stago; id += key; break; } if (isS(c) || matchChar(c, '>')) { unget(); sm = lookupStorageType(key, neutral); if (!sm) { id += stago; id += key; } break; } key += c; } if (sm) break; } else if (!((!hadData && matchChar(c, '\r')) // ignored RE || matchChar(c, '\n') )) { // ignored RS hadData = 1; id += c; } } if (id.size() > 0 && matchChar(id[id.size() - 1], '\r')) id.resize(id.size() - 1); uncharref(id); id.swap(sos.specId); if (!convertId(sos.specId, smcrd, sos.storageManager)) return 0; if (neutral) { if (!sos.storageManager->transformNeutral(sos.specId, fold, mgr_)) return 0; } if (sos.storageManager->resolveRelative(sos.baseId, sos.specId, sos.search)) sos.baseId.resize(0); if (!sm) break; } return 1; } Boolean FSIParser::handleInformal(size_t index, ParsedSystemId &parsedSysid) { parsedSysid.resize(parsedSysid.size() + 1); StorageObjectSpec &sos = parsedSysid.back(); sos.specId.assign(str_.data() + index, str_.size() - index); sos.storageManager = em_->guessStorageType(sos.specId, idCharset_); if (!sos.storageManager) { if (defSpec_ && defSpec_->storageManager->inheritable()) sos.storageManager = defSpec_->storageManager; else sos.storageManager = em_->defaultStorageManager_.pointer(); } setDefaults(sos); if (!convertId(sos.specId, -1, sos.storageManager)) return 0; if (sos.storageManager->resolveRelative(sos.baseId, sos.specId, sos.search)) sos.baseId.resize(0); return 1; } StorageManager *FSIParser::lookupStorageType(const StringC &key, Boolean &neutral) { if (matchKey(key, "NEUTRAL")) { neutral = 1; if (defSpec_ && defSpec_->storageManager->inheritable()) return defSpec_->storageManager; else return em_->defaultStorageManager_.pointer(); } else { StorageManager *sm = em_->lookupStorageType(key, idCharset_); if (sm) neutral = 0; return sm; } } Boolean FSIParser::setCatalogAttributes(ParsedSystemId &parsedSysid) { Boolean hadPublic = 0; parsedSysid.maps.resize(parsedSysid.maps.size() + 1); parsedSysid.maps.back().type = ParsedSystemId::Map::catalogDocument; for (;;) { StringC token, value; Boolean gotValue; if (!parseAttribute(token, gotValue, value)) { mgr_.message(EntityManagerMessages::fsiSyntax, StringMessageArg(str_)); return 0; } if (token.size() == 0) break; if (matchKey(token, "PUBLIC")) { if (hadPublic) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(idCharset_.execToDesc("PUBLIC"))); else if (gotValue) { convertMinimumLiteral(value, parsedSysid.maps.back().publicId); parsedSysid.maps.back().type = ParsedSystemId::Map::catalogPublic; } else mgr_.message(EntityManagerMessages::fsiMissingValue, StringMessageArg(token)); hadPublic = 1; } else mgr_.message(gotValue ? EntityManagerMessages::fsiUnsupportedAttribute : EntityManagerMessages::fsiUnsupportedAttributeToken, StringMessageArg(token)); } return 1; } void FSIParser::convertMinimumLiteral(const StringC &from, StringC &to) { // Do just enough to ensure it can be reparsed. to.resize(0); for (size_t i = 0; i < from.size(); i++) { Char c = from[i]; if (matchChar(c, '"') || matchChar(c, '#')) mgr_.message(EntityManagerMessages::fsiLookupChar, NumberMessageArg(c)); else if (matchChar(c, ' ')) { if (to.size() && to[to.size() - 1] != c) to += c; } else to += c; } if (to.size() && matchChar(to[to.size() - 1], ' ')) to.resize(to.size() - 1); } // FIXME This should be table driven. Boolean FSIParser::setAttributes(StorageObjectSpec &sos, Boolean neutral, Xchar &smcrd, Boolean &fold) { Boolean hadBctf = 0; Boolean hadEncoding = 0; Boolean hadTracking = 0; Boolean hadSmcrd = 0; smcrd = -1; fold = 1; Boolean hadRecords = 0; Boolean hadBase = 0; Boolean hadZapeof = 0; Boolean hadSearch = 0; Boolean hadFold = 0; StorageObjectSpec::Records records; setDefaults(sos); for (;;) { StringC token, value; Boolean gotValue; if (!parseAttribute(token, gotValue, value)) { mgr_.message(EntityManagerMessages::fsiSyntax, StringMessageArg(str_)); return 0; } if (token.size() == 0) break; if (matchKey(token, "BCTF")) { if (sos.storageManager->requiredCodingSystem()) mgr_.message(EntityManagerMessages::fsiBctfEncodingNotApplicable); else if (hadBctf) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(token)); else if (hadEncoding) mgr_.message(EntityManagerMessages::fsiBctfAndEncoding); else if (gotValue) { const char *codingSystemName; const InputCodingSystem *codingSystem = em_->lookupCodingSystem(value, idCharset_, 1, codingSystemName); if (codingSystem) { sos.codingSystem = codingSystem; sos.codingSystemName = codingSystemName; sos.codingSystemType = StorageObjectSpec::bctf; } else if (matchKey(value, "SAME")) { if (!isNdata_) { if (defSpec_) { sos.codingSystem = defSpec_->codingSystem; sos.codingSystemName = defSpec_->codingSystemName; sos.codingSystemType = defSpec_->codingSystemType; } else { sos.codingSystem = em_->defaultCodingSystem_; sos.codingSystemName = 0; sos.codingSystemType = (em_->internalCharsetIsDocCharset_ ? StorageObjectSpec::bctf : StorageObjectSpec::encoding); } } } else mgr_.message(EntityManagerMessages::fsiUnknownBctf, StringMessageArg(value)); } else mgr_.message(EntityManagerMessages::fsiMissingValue, StringMessageArg(token)); hadBctf = 1; } else if (matchKey(token, "ENCODING")) { if (sos.storageManager->requiredCodingSystem()) mgr_.message(EntityManagerMessages::fsiBctfEncodingNotApplicable); else if (hadEncoding) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(token)); else if (hadBctf) mgr_.message(EntityManagerMessages::fsiBctfAndEncoding); else if (gotValue) { const char *codingSystemName; const InputCodingSystem *codingSystem = em_->lookupCodingSystem(value, idCharset_, 0, codingSystemName); if (codingSystem) { sos.codingSystem = codingSystem; sos.codingSystemName = codingSystemName; sos.codingSystemType = StorageObjectSpec::encoding; } else if (matchKey(value, "SAME")) { if (!isNdata_) { if (defSpec_) { sos.codingSystem = defSpec_->codingSystem; sos.codingSystemName = defSpec_->codingSystemName; sos.codingSystemType = defSpec_->codingSystemType; } else { sos.codingSystem = em_->defaultCodingSystem_; sos.codingSystemName = 0; sos.codingSystemType = (em_->internalCharsetIsDocCharset_ ? StorageObjectSpec::bctf : StorageObjectSpec::encoding); } } } else mgr_.message(EntityManagerMessages::fsiUnknownEncoding, StringMessageArg(value)); } else mgr_.message(EntityManagerMessages::fsiMissingValue, StringMessageArg(token)); hadEncoding = 1; } else if (matchKey(token, "TRACKING")) { if (hadTracking) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(token)); else if (gotValue) { if (matchKey(value, "NOTRACK")) sos.notrack = 1; else if (!matchKey(value, "TRACK")) mgr_.message(EntityManagerMessages::fsiBadTracking, StringMessageArg(value)); } else mgr_.message(EntityManagerMessages::fsiMissingValue, StringMessageArg(token)); hadTracking = 1; } else if (matchKey(token, "ZAPEOF")) { if (sos.storageManager->requiredCodingSystem()) mgr_.message(EntityManagerMessages::fsiZapeofNotApplicable); else if (hadZapeof) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(token)); else if (gotValue) { if (matchKey(value, "ZAPEOF")) sos.zapEof = 1; else if (matchKey(value, "NOZAPEOF")) sos.zapEof = 0; else mgr_.message(EntityManagerMessages::fsiBadZapeof, StringMessageArg(value)); } else sos.zapEof = 1; hadZapeof = 1; } else if (matchKey(token, "NOZAPEOF")) { if (sos.storageManager->requiredCodingSystem()) mgr_.message(EntityManagerMessages::fsiZapeofNotApplicable); else if (hadZapeof) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(idCharset_.execToDesc("ZAPEOF"))); else if (gotValue) mgr_.message(EntityManagerMessages::fsiValueAsName, StringMessageArg(token)); else sos.zapEof = 0; hadZapeof = 1; } else if (matchKey(token, "SEARCH")) { if (hadSearch) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(token)); else if (gotValue) { if (matchKey(value, "SEARCH")) sos.search = 1; else if (matchKey(value, "NOSEARCH")) sos.search = 0; else mgr_.message(EntityManagerMessages::fsiBadSearch, StringMessageArg(value)); } else sos.search = 1; hadSearch = 1; } else if (matchKey(token, "NOSEARCH")) { if (hadSearch) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(idCharset_.execToDesc("SEARCH"))); else if (gotValue) mgr_.message(EntityManagerMessages::fsiValueAsName, StringMessageArg(token)); else sos.search = 0; hadSearch = 1; } else if (matchKey(token, "FOLD")) { if (!neutral) mgr_.message(EntityManagerMessages::fsiFoldNotNeutral); else if (hadFold) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(token)); else if (gotValue) { if (matchKey(value, "FOLD")) fold = 1; else if (matchKey(value, "NOFOLD")) fold = 0; else mgr_.message(EntityManagerMessages::fsiBadFold, StringMessageArg(value)); } else fold = 1; hadFold = 1; } else if (matchKey(token, "NOFOLD")) { if (!neutral) mgr_.message(EntityManagerMessages::fsiFoldNotNeutral); else if (hadFold) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(idCharset_.execToDesc("FOLD"))); else if (gotValue) mgr_.message(EntityManagerMessages::fsiValueAsName, StringMessageArg(token)); else fold = 0; hadFold = 1; } else if (matchKey(token, "SMCRD")) { if (hadSmcrd) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(token)); else if (gotValue) { if (value.size() == 0) smcrd = -1; else if (value.size() == 1) smcrd = value[0]; else mgr_.message(EntityManagerMessages::fsiBadSmcrd, StringMessageArg(value)); } else mgr_.message(EntityManagerMessages::fsiMissingValue, StringMessageArg(token)); hadSmcrd = 1; } else if (matchKey(token, "RECORDS")) { if (sos.storageManager->requiresCr()) mgr_.message(EntityManagerMessages::fsiRecordsNotApplicable); else if (hadRecords) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(token)); else if (gotValue) { if (!lookupRecords(value, sos.records)) mgr_.message(EntityManagerMessages::fsiUnsupportedRecords, StringMessageArg(value)); } else mgr_.message(EntityManagerMessages::fsiMissingValue, StringMessageArg(token)); hadRecords = 1; } else if (matchKey(token, "SOIBASE")) { if (hadBase) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(token)); else if (gotValue) value.swap(sos.baseId); else { mgr_.message(EntityManagerMessages::fsiMissingValue, StringMessageArg(token)); sos.baseId.resize(0); } hadBase = 1; } else if (lookupRecords(token, records)) { if (sos.storageManager->requiresCr()) mgr_.message(EntityManagerMessages::fsiRecordsNotApplicable); else if (hadRecords) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(idCharset_.execToDesc("RECORDS"))); else if (!gotValue) sos.records = records; else mgr_.message(EntityManagerMessages::fsiValueAsName, StringMessageArg(token)); hadRecords = 1; } else if (matchKey(token, "NOTRACK")) { if (hadTracking) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(idCharset_.execToDesc("TRACKING"))); else if (!gotValue) sos.notrack = 1; else mgr_.message(EntityManagerMessages::fsiValueAsName, StringMessageArg(token)); hadTracking = 1; } else if (matchKey(token, "TRACK")) { if (hadTracking) mgr_.message(EntityManagerMessages::fsiDuplicateAttribute, StringMessageArg(idCharset_.execToDesc("TRACKING"))); else if (gotValue) mgr_.message(EntityManagerMessages::fsiValueAsName, StringMessageArg(token)); hadTracking = 1; } else mgr_.message(gotValue ? EntityManagerMessages::fsiUnsupportedAttribute : EntityManagerMessages::fsiUnsupportedAttributeToken, StringMessageArg(token)); } if (hadBase && sos.baseId.size() > 0) { convertId(sos.baseId, smcrd, sos.storageManager); if (neutral) { if (!sos.storageManager->transformNeutral(sos.baseId, fold, mgr_)) sos.baseId.resize(0); } } if (!hadZapeof && hadRecords && sos.records == StorageObjectSpec::asis) sos.zapEof = 0; return 1; } FSIParser::RecordType FSIParser::recordTypeTable[] = { { "FIND", StorageObjectSpec::find }, { "ASIS", StorageObjectSpec::asis }, { "CR", StorageObjectSpec::cr }, { "LF", StorageObjectSpec::lf }, { "CRLF", StorageObjectSpec::crlf } }; const char *FSIParser::recordsName(StorageObjectSpec::Records records) { for (size_t i = 0; i < SIZEOF(recordTypeTable); i++) if (records == recordTypeTable[i].value) return recordTypeTable[i].name; return 0; } Boolean FSIParser::lookupRecords(const StringC &token, StorageObjectSpec::Records &result) { for (size_t i = 0; i < SIZEOF(recordTypeTable); i++) if (matchKey(token, recordTypeTable[i].name)) { result = recordTypeTable[i].value; return 1; } return 0; } void FSIParser::setDefaults(StorageObjectSpec &sos) { if (sos.storageManager->requiresCr()) sos.records = StorageObjectSpec::cr; else if (isNdata_ || (defSpec_ && defSpec_->records == StorageObjectSpec::asis)) sos.records = StorageObjectSpec::asis; if (isNdata_ || (defSpec_ && !defSpec_->zapEof)) sos.zapEof = 0; if (defSpec_ && defSpec_->storageManager == sos.storageManager) { if (defId_) sos.baseId = *defId_; else { sos.baseId = defSpec_->specId; sos.storageManager->resolveRelative(defSpec_->baseId, sos.baseId, 0); } } sos.codingSystem = sos.storageManager->requiredCodingSystem(); if (sos.codingSystem) { sos.zapEof = 0; // hack sos.codingSystemType = StorageObjectSpec::special; } else { sos.codingSystem = em_->defaultCodingSystem_; sos.codingSystemType = (em_->internalCharsetIsDocCharset_ ? StorageObjectSpec::bctf : StorageObjectSpec::encoding); if (isNdata_) { sos.codingSystem = em_->codingSystemKit_->identityInputCodingSystem(); sos.codingSystemType = StorageObjectSpec::special; } else if (defSpec_) { sos.codingSystem = defSpec_->codingSystem; sos.codingSystemName = defSpec_->codingSystemName; sos.codingSystemType = defSpec_->codingSystemType; } } } Boolean FSIParser::parseAttribute(StringC &token, Boolean &gotValue, StringC &value) { Xchar c = get(); while (isS(c)) c = get(); if (c == -1) { return 0; } token.resize(0); if (matchChar(c, '>')) return 1; if (matchChar(c, '"') || matchChar(c, '\'') || matchChar(c, '=')) return 0; for (;;) { token += c; c = get(); if (c == -1) return 0; if (isS(c)) break; if (matchChar(c, '>') || matchChar(c, '=')) break; } while (isS(c)) c = get(); if (c == -1) return 0; if (!matchChar(c, '=')) { unget(); gotValue = 0; return 1; } gotValue = 1; value.resize(0); c = get(); while (isS(c)) c = get(); if (matchChar(c, '>') || matchChar(c, '=')) return 0; if (matchChar(c, '"') || matchChar(c, '\'')) { Char lit = c; for (;;) { Xchar c = get(); if (c == lit) break; if (c == -1) return 0; if (matchChar(c, '\n')) ; else if (matchChar(c, '\r') || matchChar(c, '\t')) value += idCharset_.execToDesc(' '); else value += c; } uncharref(value); } else { for (;;) { value += c; c = get(); if (c == -1) return 0; if (isS(c)) break; if (matchChar(c, '>') || matchChar(c, '=')) { unget(); break; } } } return 1; } void FSIParser::uncharref(StringC &str) { size_t j = 0; size_t i = 0; while (i < str.size()) { int digit; if (matchChar(str[i], '&') && i + 2 < str.size() && matchChar(str[i + 1], '#') && convertDigit(str[i + 2], digit)) { unsigned long val = digit; i += 3; while (i < str.size() && convertDigit(str[i], digit)) { val = val*10 + digit; i++; } str[j++] = val; if (i < str.size() && matchChar(str[i], ';')) i++; } else str[j++] = str[i++]; } str.resize(j); } Boolean FSIParser::convertId(StringC &id, Xchar smcrd, const StorageManager *sm) { const CharsetInfo *smCharset = sm->idCharset(); StringC newId; size_t i = 0; while (i < id.size()) { UnivChar univ; WideChar wide; ISet wideSet; int digit; if (Xchar(id[i]) == smcrd && i + 1 < id.size() && convertDigit(id[i + 1], digit)) { i += 2; Char val = digit; while (i < id.size() && convertDigit(id[i], digit)) { val = val*10 + digit; i++; } newId += val; if (i < id.size() && matchChar(id[i], ';')) i++; } else if (smCharset) { if (!idCharset_.descToUniv(id[i++], univ)) return 0; if (univ == UnivCharsetDesc::rs) ; else if (univ == UnivCharsetDesc::re && sm->reString()) newId += *sm->reString(); else if (smCharset->univToDesc(univ, wide, wideSet) != 1 || wide > charMax) return 0; // FIXME give error else newId += Char(wide); } else newId += id[i++]; } newId.swap(id); return 1; } ParsedSystemId:: ParsedSystemId() { } static void unparseSoi(const StringC &soi, const CharsetInfo *idCharset, const CharsetInfo &resultCharset, StringC &result, Boolean &needSmcrd); void ParsedSystemId::unparse(const CharsetInfo &resultCharset, Boolean isNdata, StringC &result) const { size_t len = size(); result.resize(0); size_t i; for (i = 0; i < maps.size(); i++) { if (maps[i].type == Map::catalogDocument) result += resultCharset.execToDesc(""); else if (maps[i].type == Map::catalogPublic) { result += resultCharset.execToDesc(""); } } for (i = 0; i < len; i++) { const StorageObjectSpec &sos = (*this)[i]; result += resultCharset.execToDesc('<'); result += resultCharset.execToDesc(sos.storageManager->type()); if (sos.notrack) result += resultCharset.execToDesc(" NOTRACK"); if (!sos.search) result += resultCharset.execToDesc(" NOSEARCH"); if (!sos.storageManager->requiresCr() && sos.records != (isNdata ? StorageObjectSpec::asis : StorageObjectSpec::find)) { result += resultCharset.execToDesc(' '); result += resultCharset.execToDesc(FSIParser::recordsName(sos.records)); } if (sos.codingSystemName && sos.codingSystemType != StorageObjectSpec::special) { if (!sos.zapEof) result += resultCharset.execToDesc(" NOZAPEOF"); result += resultCharset.execToDesc(sos.codingSystemType == StorageObjectSpec::bctf ? " BCTF=" : " ENCODING="); result += resultCharset.execToDesc(sos.codingSystemName); } Boolean needSmcrd = 0; if (sos.baseId.size() != 0) { result += resultCharset.execToDesc(" SOIBASE='"); unparseSoi(sos.baseId, sos.storageManager->idCharset(), resultCharset, result, needSmcrd); result += resultCharset.execToDesc('\''); } StringC tem; unparseSoi(sos.specId, sos.storageManager->idCharset(), resultCharset, tem, needSmcrd); if (needSmcrd) result += resultCharset.execToDesc(" SMCRD='^'"); result += resultCharset.execToDesc('>'); result += tem; } } void unparseSoi(const StringC &soi, const CharsetInfo *idCharset, const CharsetInfo &resultCharset, StringC &result, Boolean &needSmcrd) { if (!idCharset) { for (size_t i = 0; i < soi.size(); i++) { char buf[32]; sprintf(buf, "&#%lu;", (unsigned long)soi[i]); result += resultCharset.execToDesc(buf); } return; } for (size_t i = 0; i < soi.size(); i++) { UnivChar univ; WideChar to; ISet toSet; if (!idCharset->descToUniv(soi[i], univ) || univ >= 127 || univ < 32 || univ == 36 // $ || univ == 96 // ` #ifndef MSDOS_FILENAMES || univ == 92 // backslash #endif || univ == 94 // ^ || resultCharset.univToDesc(univ, to, toSet) != 1) { needSmcrd = 1; char buf[32]; sprintf(buf, "^%lu;", (unsigned long)soi[i]); result += resultCharset.execToDesc(buf); } else { switch (univ) { case 34: // double quote case 35: // # case 39: // apostrophe case 60: // < { char buf[32]; sprintf(buf, "&#%lu;", (unsigned long)to); result += resultCharset.execToDesc(buf); } break; default: result += Char(to); break; } } } } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ExternalId.cxx100444 764 764 13240 6604607564 13571 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "ExternalId.h" #include "CharsetInfo.h" #include "macros.h" #include "ParserMessages.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif ExternalId::ExternalId() : haveSystem_(0), havePublic_(0) { } void ExternalId::setSystem(Text &text) { text.swap(system_); haveSystem_ = 1; } Boolean ExternalId::setPublic(Text &text, const CharsetInfo &charset, Char space, const MessageType1 *&error) { havePublic_ = 1; return public_.init(text, charset, space, error); } void ExternalId::setLocation(const Location &loc) { loc_ = loc; } PublicId::PublicId() : formal_(0) { } Boolean PublicId::init(Text &text, const CharsetInfo &charset, Char space, const MessageType1 *&error) { text.swap(text_); const StringC &str = text_.string(); formal_ = 0; const Char *next = str.data(); const Char *lim = str.data() + str.size(); Char solidus = charset.execToDesc('/'); Char minus = charset.execToDesc('-'); Char plus = charset.execToDesc('+'); const Char *fieldStart; size_t fieldLength; if (!nextField(solidus, next, lim, fieldStart, fieldLength)) { error = &ParserMessages::fpiMissingField; return 0; } if (fieldLength == 1 && (*fieldStart == minus || *fieldStart == plus)) { ownerType_ = (*fieldStart == plus ? registered : unregistered); if (!nextField(solidus, next, lim, fieldStart, fieldLength)) { error = &ParserMessages::fpiMissingField; return 0; } } else ownerType_ = ISO; owner_.assign(fieldStart, fieldLength); if (!nextField(solidus, next, lim, fieldStart, fieldLength)) { error = &ParserMessages::fpiMissingField; return 0; } size_t i; for (i = 0; i < fieldLength; i++) if (fieldStart[i] == space) break; if (i >= fieldLength) { error = &ParserMessages::fpiMissingTextClassSpace; return 0; } StringC textClassString(fieldStart, i); if (!lookupTextClass(textClassString, charset, textClass_)) { error = &ParserMessages::fpiInvalidTextClass; return 0; } i++; // skip the space fieldStart += i; fieldLength -= i; if (fieldLength == 1 && *fieldStart == minus) { unavailable_ = 1; if (!nextField(solidus, next, lim, fieldStart, fieldLength)) { error = &ParserMessages::fpiMissingField; return 0; } } else unavailable_ = 0; description_.assign(fieldStart, fieldLength); if (!nextField(solidus, next, lim, fieldStart, fieldLength)) { error = &ParserMessages::fpiMissingField; return 0; } if (textClass_ != CHARSET) { for (i = 0; i < fieldLength; i++) { UnivChar c; if (!charset.descToUniv(fieldStart[i], c) || c < UnivCharsetDesc::A || c >= UnivCharsetDesc::A + 26) { error = &ParserMessages::fpiInvalidLanguage; return 0; } } // The public text language must be a name. // Names cannot be empty. if (fieldLength == 0) { error = &ParserMessages::fpiInvalidLanguage; return 0; } } languageOrDesignatingSequence_.assign(fieldStart, fieldLength); if (nextField(solidus, next, lim, fieldStart, fieldLength)) { switch (textClass_) { case CAPACITY: case CHARSET: case NOTATION: case SYNTAX: error = &ParserMessages::fpiIllegalDisplayVersion; return 0; default: break; } haveDisplayVersion_ = 1; displayVersion_.assign(fieldStart, fieldLength); } else haveDisplayVersion_ = 0; if (next != 0) { error = &ParserMessages::fpiExtraField; return 0; } formal_ = 1; return 1; } Boolean PublicId::nextField(Char solidus, const Char *&next, const Char *lim, const Char *&fieldStart, size_t &fieldLength) { if (next == 0) return 0; fieldStart = next; for (; next < lim; next++) { if (next[0] == solidus && next + 1 < lim && next[1] == solidus) { fieldLength = next - fieldStart; next += 2; return 1; } } fieldLength = lim - fieldStart; next = 0; return 1; } const char *const PublicId::textClasses[] = { "CAPACITY", "CHARSET", "DOCUMENT", "DTD", "ELEMENTS", "ENTITIES", "LPD", "NONSGML", "NOTATION", "SD", "SHORTREF", "SUBDOC", "SYNTAX", "TEXT", }; Boolean PublicId::lookupTextClass(const StringC &str, const CharsetInfo &charset, TextClass &textClass) { for (size_t i = 0; i < SIZEOF(textClasses); i++) if (str == charset.execToDesc(textClasses[i])) { textClass = TextClass(i); return 1; } return 0; } Boolean PublicId::getOwnerType(OwnerType &result) const { if (!formal_) return 0; result = ownerType_; return 1; } Boolean PublicId::getOwner(StringC &result) const { if (!formal_) return 0; result = owner_; return 1; } Boolean PublicId::getTextClass(TextClass &result) const { if (!formal_) return 0; result = textClass_; return 1; } Boolean PublicId::getUnavailable(Boolean &result) const { if (!formal_) return 0; result = unavailable_; return 1; } Boolean PublicId::getDescription(StringC &result) const { if (!formal_) return 0; result = description_; return 1; } Boolean PublicId::getLanguage(StringC &result) const { if (!formal_ || textClass_ == CHARSET) return 0; result = languageOrDesignatingSequence_; return 1; } Boolean PublicId::getDesignatingSequence(StringC &result) const { if (!formal_ || textClass_ != CHARSET) return 0; result = languageOrDesignatingSequence_; return 1; } Boolean PublicId::getDisplayVersion(StringC &result) const { if (!formal_) return 0; if (haveDisplayVersion_) result = displayVersion_; return 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Fixed2CodingSystem.cxx100444 764 764 5244 6604607564 15171 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. // This uses a big endian byte order irrespective of host byte order. // Nothing special is done with FEFF/FFFE. #include "splib.h" #ifdef SP_MULTI_BYTE #include "Fixed2CodingSystem.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Fixed2Decoder : public Decoder { public: Fixed2Decoder(); size_t decode(Char *to, const char *from, size_t fromLen, const char **rest); Boolean convertOffset(unsigned long &offset) const; }; class Fixed2Encoder : public Encoder { public: Fixed2Encoder(); ~Fixed2Encoder(); void output(Char *, size_t, OutputByteStream *); void output(const Char *, size_t, OutputByteStream *); private: void allocBuf(size_t); char *buf_; size_t bufSize_; }; Decoder *Fixed2CodingSystem::makeDecoder() const { return new Fixed2Decoder; } Encoder *Fixed2CodingSystem::makeEncoder() const { return new Fixed2Encoder; } unsigned Fixed2CodingSystem::fixedBytesPerChar() const { return 2; } Fixed2Decoder::Fixed2Decoder() : Decoder(2) { } size_t Fixed2Decoder::decode(Char *to, const char *from, size_t fromLen, const char **rest) { #ifdef SP_BIG_ENDIAN if (sizeof(Char) == 2 && from == (char *)to) { *rest = from + (fromLen & ~1); return fromLen/2; } #endif fromLen &= ~1; *rest = from + fromLen; for (size_t n = fromLen; n > 0; n -= 2) { *to++ = ((unsigned char)from[0] << 8) + (unsigned char)from[1]; from += 2; } return fromLen/2; } Boolean Fixed2Decoder::convertOffset(unsigned long &n) const { n *= 2; return true; } Fixed2Encoder::Fixed2Encoder() : buf_(0), bufSize_(0) { } Fixed2Encoder::~Fixed2Encoder() { delete [] buf_; } void Fixed2Encoder::allocBuf(size_t n) { if (bufSize_ < n) { delete [] buf_; buf_ = new char[bufSize_ = n]; } } void Fixed2Encoder::output(Char *s, size_t n, OutputByteStream *sb) { #ifdef SP_BIG_ENDIAN if (sizeof(Char) == 2) { sb->sputn((char *)s, n*2); return; } #endif ASSERT(sizeof(Char) >= 2); char *p = (char *)s; for (size_t i = 0; i < n; i++) { Char c = s[i]; *p++ = (c >> 8) & 0xff; *p++ = c & 0xff; } sb->sputn((char *)s, n*2); } void Fixed2Encoder::output(const Char *s, size_t n, OutputByteStream *sb) { #ifdef SP_BIG_ENDIAN if (sizeof(Char) == 2) { sb->sputn((char *)s, n*2); return; } #endif allocBuf(n*2); for (size_t i = 0; i < n; i++) { buf_[i*2] = (s[i] >> 8) & 0xff; buf_[i*2 + 1] = s[i] & 0xff; } sb->sputn(buf_, n*2); } #ifdef SP_NAMESPACE } #endif #else /* not SP_MULTI_BYTE */ #ifndef __GNUG__ static char non_empty_translation_unit; // sigh #endif #endif /* not SP_MULTI_BYTE */ jade-1.2.1/lib/GenericEventHandler.cxx100444 764 764 53367 6606574410 15417 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "GenericEventHandler.h" #include "macros.h" #include "ExtendEntityManager.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SpOpenEntity : public SGMLApplication::OpenEntity { public: SpOpenEntity(const ConstPtr &origin); SGMLApplication::Location location(SGMLApplication::Position) const; private: ConstPtr origin_; StorageObjectLocation soLoc_; }; inline void GenericEventHandler::freeAll() { if (allocBlocks_) freeAll1(); } inline void GenericEventHandler::clearNotation(SGMLApplication::Notation &to) { clearString(to.name); } inline void GenericEventHandler::setLocation(SGMLApplication::Position &pos, const Location &loc) { if (lastOrigin_ != loc.origin()) setLocation1(pos, loc); else pos = loc.index(); } GenericEventHandler::GenericEventHandler(SGMLApplication &app, bool generalEntities) : app_(&app), generalEntities_(generalEntities), freeBlocks_(0), allocBlocks_(0), firstBlockSpare_(0), firstBlockUsed_(0) { } GenericEventHandler::~GenericEventHandler() { freeAll(); while (freeBlocks_) { Block *tem = freeBlocks_; freeBlocks_ = freeBlocks_->next; delete [] tem->mem; delete tem; } } void GenericEventHandler::freeAll1() { Block **p; for (p = &allocBlocks_; *p; p = &(*p)->next) ; *p = freeBlocks_; freeBlocks_ = allocBlocks_; allocBlocks_ = 0; if (freeBlocks_) firstBlockSpare_ = freeBlocks_->size; else firstBlockSpare_ = 0; firstBlockUsed_ = 0; } void *GenericEventHandler::allocate(size_t n) { if (n == 0) return 0; // round up to avoid alignment problems n = (n + sizeof(char *) - 1) & ~(sizeof(char *) - 1); enum { BIG = 1024 }; if (n > firstBlockSpare_) { if (freeBlocks_ && firstBlockUsed_) { Block *tem = freeBlocks_; freeBlocks_ = freeBlocks_->next; tem->next = allocBlocks_; allocBlocks_ = tem; } if (!freeBlocks_ || freeBlocks_->size < n) { Block *tem = new Block; tem->size = n < BIG ? int(BIG) : n; tem->mem = new char[tem->size]; tem->next = freeBlocks_; freeBlocks_ = tem; } firstBlockUsed_ = 0; firstBlockSpare_ = freeBlocks_->size; } char *tem = freeBlocks_->mem + firstBlockUsed_; firstBlockUsed_ += n; firstBlockSpare_ -= n; return tem; } void GenericEventHandler::startElement(StartElementEvent *event) { SGMLApplication::StartElementEvent appEvent; setString(appEvent.gi, event->name()); const ElementDefinition *def = event->elementType()->definition(); switch (def->declaredContent()) { case ElementDefinition::modelGroup: appEvent.contentType = (def->compiledModelGroup()->containsPcdata() ? SGMLApplication::StartElementEvent::mixed : SGMLApplication::StartElementEvent::element); break; case ElementDefinition::any: appEvent.contentType = SGMLApplication::StartElementEvent::mixed; break; case ElementDefinition::cdata: appEvent.contentType = SGMLApplication::StartElementEvent::cdata; break; case ElementDefinition::rcdata: appEvent.contentType = SGMLApplication::StartElementEvent::rcdata; break; case ElementDefinition::empty: appEvent.contentType = SGMLApplication::StartElementEvent::empty; break; } appEvent.included = event->included(); appEvent.nAttributes = event->attributes().size(); if (appEvent.nAttributes != 0) { if (event->attributes().conref()) appEvent.contentType = SGMLApplication::StartElementEvent::empty; setAttributes(appEvent.attributes, event->attributes()); } setLocation(appEvent.pos, event->location()); app_->startElement(appEvent); freeAll(); delete event; } void GenericEventHandler::endElement(EndElementEvent *event) { SGMLApplication::EndElementEvent appEvent; setString(appEvent.gi, event->name()); setLocation(appEvent.pos, event->location()); app_->endElement(appEvent); delete event; } void GenericEventHandler::data(DataEvent *event) { SGMLApplication::DataEvent appEvent; appEvent.data.ptr = event->data(); appEvent.data.len = event->dataLength(); setLocation(appEvent.pos, event->location()); app_->data(appEvent); delete event; } void GenericEventHandler::pi(PiEvent *event) { SGMLApplication::PiEvent appEvent; appEvent.data.ptr = event->data(); appEvent.data.len = event->dataLength(); const Entity *entity = event->entity(); if (entity) setString(appEvent.entityName, entity->name()); else appEvent.entityName.len = 0; setLocation(appEvent.pos, event->location()); app_->pi(appEvent); delete event; } void GenericEventHandler::sdataEntity(SdataEntityEvent *event) { SGMLApplication::SdataEvent appEvent; appEvent.text.ptr = event->data(); appEvent.text.len = event->dataLength(); setString(appEvent.entityName, event->entity()->name()); // Don't want location of chars in entity. setLocation(appEvent.pos, event->location().origin()->parent()); app_->sdata(appEvent); delete event; } void GenericEventHandler::externalDataEntity(ExternalDataEntityEvent *event) { SGMLApplication::ExternalDataEntityRefEvent appEvent; setEntity(appEvent.entity, *event->entity()); setLocation(appEvent.pos, event->location()); app_->externalDataEntityRef(appEvent); freeAll(); delete event; } void GenericEventHandler::subdocEntity(SubdocEntityEvent *event) { SGMLApplication::SubdocEntityRefEvent appEvent; setEntity(appEvent.entity, *event->entity()); setLocation(appEvent.pos, event->location()); app_->subdocEntityRef(appEvent); freeAll(); delete event; } void GenericEventHandler::nonSgmlChar(NonSgmlCharEvent *event) { SGMLApplication::NonSgmlCharEvent appEvent; appEvent.c = event->character(); setLocation(appEvent.pos, event->location()); app_->nonSgmlChar(appEvent); delete event; } void GenericEventHandler::startDtd(StartDtdEvent *event) { SGMLApplication::StartDtdEvent appEvent; setString(appEvent.name, event->name()); const Entity *entity = event->entity().pointer(); if (entity) { appEvent.haveExternalId = 1; setExternalId(appEvent.externalId, entity->asExternalEntity()->externalId()); } else appEvent.haveExternalId = 0; setLocation(appEvent.pos, event->location()); app_->startDtd(appEvent); freeAll(); delete event; } void GenericEventHandler::endDtd(EndDtdEvent *event) { SGMLApplication::EndDtdEvent appEvent; setString(appEvent.name, event->dtd().name()); setLocation(appEvent.pos, event->location()); app_->endDtd(appEvent); delete event; } void GenericEventHandler::endProlog(EndPrologEvent *event) { if (generalEntities_) { SGMLApplication::GeneralEntityEvent entityEvent; const Dtd &dtd = event->dtd(); Dtd::ConstEntityIter iter(dtd.generalEntityIter()); for (;;) { const Entity *entity = iter.nextTemp(); if (!entity) break; setEntity(entityEvent.entity, *entity); app_->generalEntity(entityEvent); } freeAll(); } SGMLApplication::EndPrologEvent appEvent; setLocation(appEvent.pos, event->location()); app_->endProlog(appEvent); delete event; } void GenericEventHandler::entityDefaulted(EntityDefaultedEvent *event) { if (generalEntities_) { SGMLApplication::GeneralEntityEvent appEvent; setEntity(appEvent.entity, event->entity()); app_->generalEntity(appEvent); } delete event; } void GenericEventHandler::appinfo(AppinfoEvent *event) { SGMLApplication::AppinfoEvent appEvent; const StringC *str; if (event->literal(str)) { setString(appEvent.string, *str); appEvent.none = 0; } else appEvent.none = 1; setLocation(appEvent.pos, event->location()); app_->appinfo(appEvent); delete event; } void GenericEventHandler::commentDecl(CommentDeclEvent *event) { SGMLApplication::CommentDeclEvent appEvent; appEvent.nComments = 0; { for (MarkupIter iter(event->markup()); iter.valid(); iter.advance()) if (iter.type() == Markup::comment) appEvent.nComments++; } SGMLApplication::CharString *comments = (SGMLApplication::CharString *)allocate(appEvent.nComments * 2 * sizeof(SGMLApplication::CharString)); appEvent.comments = comments; appEvent.seps = appEvent.comments + appEvent.nComments; size_t i = 0; for (MarkupIter iter(event->markup()); iter.valid(); iter.advance()) switch (iter.type()) { case Markup::comment: comments[i].ptr = iter.charsPointer(); comments[i].len = iter.charsLength(); clearString(comments[appEvent.nComments + i]); i++; break; case Markup::s: comments[appEvent.nComments + i - 1].ptr = iter.charsPointer(); comments[appEvent.nComments + i - 1].len = iter.charsLength(); break; default: break; } setLocation(appEvent.pos, event->location()); app_->commentDecl(appEvent); freeAll(); delete event; } void GenericEventHandler::markedSectionStart(MarkedSectionStartEvent *event) { SGMLApplication::MarkedSectionStartEvent appEvent; unsigned depth = 0; appEvent.nParams = 0; { for (MarkupIter iter(event->markup()); iter.valid(); iter.advance()) switch (iter.type()) { case Markup::reservedName: if (!depth) appEvent.nParams++; break; case Markup::entityStart: if (!depth) appEvent.nParams++; depth++; break; case Markup::entityEnd: depth--; break; default: break; } } SGMLApplication::MarkedSectionStartEvent::Param *params = (SGMLApplication::MarkedSectionStartEvent::Param *) allocate(appEvent.nParams * sizeof(appEvent.params[0])); appEvent.params = params; size_t i = 0; for (MarkupIter iter(event->markup()); iter.valid(); iter.advance()) switch (iter.type()) { case Markup::reservedName: if (!depth) { switch (iter.reservedName()) { case Syntax::rTEMP: params[i].type = SGMLApplication::MarkedSectionStartEvent::Param::temp; break; case Syntax::rINCLUDE: params[i].type = SGMLApplication::MarkedSectionStartEvent::Param::include; break; case Syntax::rRCDATA: params[i].type = SGMLApplication::MarkedSectionStartEvent::Param::rcdata; break; case Syntax::rCDATA: params[i].type = SGMLApplication::MarkedSectionStartEvent::Param::cdata; break; case Syntax::rIGNORE: params[i].type = SGMLApplication::MarkedSectionStartEvent::Param::ignore; break; default: CANNOT_HAPPEN(); } clearString(params[i].entityName); i++; } break; case Markup::entityStart: if (!depth) { params[i].type = SGMLApplication::MarkedSectionStartEvent::Param::entityRef; setString(params[i].entityName, iter.entityOrigin()->entity()->name()); i++; } depth++; break; case Markup::entityEnd: depth--; break; default: break; } switch (event->status()) { case MarkedSectionEvent::include: appEvent.status = SGMLApplication::MarkedSectionStartEvent::include; break; case MarkedSectionEvent::rcdata: appEvent.status = SGMLApplication::MarkedSectionStartEvent::rcdata; break; case MarkedSectionEvent::cdata: appEvent.status = SGMLApplication::MarkedSectionStartEvent::cdata; break; case MarkedSectionEvent::ignore: appEvent.status = SGMLApplication::MarkedSectionStartEvent::ignore; break; } setLocation(appEvent.pos, event->location()); app_->markedSectionStart(appEvent); freeAll(); delete event; } void GenericEventHandler::ignoredChars(IgnoredCharsEvent *event) { SGMLApplication::IgnoredCharsEvent appEvent; appEvent.data.ptr = event->data(); appEvent.data.len = event->dataLength(); setLocation(appEvent.pos, event->location()); app_->ignoredChars(appEvent); delete event; } void GenericEventHandler::markedSectionEnd(MarkedSectionEndEvent *event) { SGMLApplication::MarkedSectionEndEvent appEvent; switch (event->status()) { case MarkedSectionEvent::include: appEvent.status = SGMLApplication::MarkedSectionEndEvent::include; break; case MarkedSectionEvent::rcdata: appEvent.status = SGMLApplication::MarkedSectionEndEvent::rcdata; break; case MarkedSectionEvent::cdata: appEvent.status = SGMLApplication::MarkedSectionEndEvent::cdata; break; case MarkedSectionEvent::ignore: appEvent.status = SGMLApplication::MarkedSectionEndEvent::ignore; break; } setLocation(appEvent.pos, event->location()); app_->markedSectionEnd(appEvent); delete event; } void GenericEventHandler::message(MessageEvent *event) { SGMLApplication::ErrorEvent appEvent; switch (event->message().type->severity()) { case MessageType::quantityError: appEvent.type = SGMLApplication::ErrorEvent::quantity; break; case MessageType::idrefError: appEvent.type = SGMLApplication::ErrorEvent::idref; break; case MessageType::error: appEvent.type = SGMLApplication::ErrorEvent::otherError; break; case MessageType::info: appEvent.type = SGMLApplication::ErrorEvent::info; break; case MessageType::warning: appEvent.type = SGMLApplication::ErrorEvent::warning; break; } setLocation(appEvent.pos, event->message().loc); StringC str; reportMessage(event->message(), str); setString(appEvent.message, str); app_->error(appEvent); ErrorCountEventHandler::message(event); } void GenericEventHandler::setLocation1(SGMLApplication::Position &pos, const Location &loc) { const Location *locp = &loc; for (;;) { if (locp->origin().isNull()) { lastOrigin_.clear(); openEntityPtr_ = (SpOpenEntity *)0; return; } const InputSourceOrigin *origin = locp->origin()->asInputSourceOrigin(); if (origin && origin->externalInfo()) break; locp = &locp->origin()->parent(); } lastOrigin_ = locp->origin(); pos = locp->index(); openEntityPtr_ = new SpOpenEntity(locp->origin()); app_->openEntityChange(openEntityPtr_); } void GenericEventHandler::setAttributes(const SGMLApplication::Attribute *&attributes, const AttributeList &attributeList) { size_t nAttributes = attributeList.size(); SGMLApplication::Attribute *to = (SGMLApplication::Attribute *)allocate(nAttributes * sizeof(*to)); attributes = to; for (size_t i = 0; i < nAttributes; i++) { SGMLApplication::Attribute *p = to + i; setString(p->name, attributeList.name(i)); const AttributeValue *value = attributeList.value(i); if (!value) p->type = SGMLApplication::Attribute::invalid; else { const Text *text; const StringC *string; switch (value->info(text, string)) { case AttributeValue::implied: p->type = SGMLApplication::Attribute::implied; break; case AttributeValue::tokenized: { if (attributeList.specified(i)) p->defaulted = SGMLApplication::Attribute::specified; else if (attributeList.current(i)) p->defaulted = SGMLApplication::Attribute::current; else p->defaulted = SGMLApplication::Attribute::definition; p->type = SGMLApplication::Attribute::tokenized; p->nEntities = 0; p->notation.name.len = 0; p->isId = attributeList.id(i); p->isGroup = (attributeList.getAllowedTokens(i) != 0); setString(p->tokens, *string); const AttributeSemantics *semantics = attributeList.semantics(i); if (semantics) { ConstPtr notation = semantics->notation(); if (!notation.isNull()) setNotation(p->notation, *notation); else { size_t nEntities = semantics->nEntities(); if (nEntities) { SGMLApplication::Entity *v = (SGMLApplication::Entity *)allocate(nEntities * sizeof(*v)); p->entities = v; p->nEntities = nEntities; for (size_t i = 0; i < nEntities; i++) setEntity(v[i], *semantics->entity(i)); } } } } break; case AttributeValue::cdata: { p->type = SGMLApplication::Attribute::cdata; if (attributeList.specified(i)) p->defaulted = SGMLApplication::Attribute::specified; else if (attributeList.current(i)) p->defaulted = SGMLApplication::Attribute::current; else p->defaulted = SGMLApplication::Attribute::definition; TextItem::Type type; const Char *s; size_t length; const Location *loc; size_t nChunks = 0; { TextIter iter(*text); while (iter.next(type, s, length, loc)) switch (type) { case TextItem::data: case TextItem::sdata: case TextItem::cdata: case TextItem::nonSgml: nChunks++; break; default: break; } } p->cdataChunks = (SGMLApplication::Attribute::CdataChunk *)allocate(nChunks * sizeof(SGMLApplication::Attribute::CdataChunk)); p->nCdataChunks = nChunks; { size_t i = 0; for (TextIter iter(*text); iter.next(type, s, length, loc);) { switch (type) { case TextItem::data: case TextItem::sdata: case TextItem::cdata: { SGMLApplication::Attribute::CdataChunk *chunk = (SGMLApplication::Attribute::CdataChunk *)(p->cdataChunks + i++); if (type != TextItem::sdata) { chunk->isSdata = 0; chunk->isNonSgml = 0; } else { chunk->isSdata = 1; setString(chunk->entityName, *loc->origin()->asInputSourceOrigin()->entityName()); } chunk->data.ptr = s; chunk->data.len = length; } break; case TextItem::nonSgml: { SGMLApplication::Attribute::CdataChunk *chunk = (SGMLApplication::Attribute::CdataChunk *)(p->cdataChunks + i++); chunk->isSdata = 0; chunk->isNonSgml = 1; chunk->nonSgmlChar = *s; chunk->data.len = 0; chunk->data.ptr = 0; } break; default: break; } } } } break; } } } } void GenericEventHandler::setEntity(SGMLApplication::Entity &to, const Entity &from) { setString(to.name, from.name()); switch (from.declType()) { case Entity::generalEntity: to.declType = SGMLApplication::Entity::general; break; case Entity::parameterEntity: to.declType = SGMLApplication::Entity::parameter; break; case Entity::doctype: to.declType = SGMLApplication::Entity::doctype; break; case Entity::linktype: to.declType = SGMLApplication::Entity::linktype; break; default: CANNOT_HAPPEN(); } switch (from.dataType()) { case Entity::sgmlText: to.dataType = SGMLApplication::Entity::sgml; break; case Entity::cdata: to.dataType = SGMLApplication::Entity::cdata; break; case Entity::sdata: to.dataType = SGMLApplication::Entity::sdata; break; case Entity::ndata: to.dataType = SGMLApplication::Entity::ndata; break; case Entity::subdoc: to.dataType = SGMLApplication::Entity::subdoc; break; case Entity::pi: to.dataType = SGMLApplication::Entity::pi; break; } const InternalEntity *internal = from.asInternalEntity(); if (internal) { to.isInternal = 1; setString(to.text, internal->string()); } else { const ExternalEntity *external = from.asExternalEntity(); to.isInternal = 0; setExternalId(to.externalId, external->externalId()); const ExternalDataEntity *externalData = from.asExternalDataEntity(); if (externalData) { setNotation(to.notation, *externalData->notation()); to.nAttributes = externalData->attributes().size(); if (to.nAttributes) setAttributes(to.attributes, externalData->attributes()); } else { to.notation.name.len = 0; to.nAttributes = 0; } } } void GenericEventHandler::setNotation(SGMLApplication::Notation &to, const Notation &from) { setString(to.name, from.name()); setExternalId(to.externalId, from.externalId()); } void GenericEventHandler::setExternalId(SGMLApplication::ExternalId &to, const ExternalId &from) { const StringC *str; str = from.systemIdString(); if (str) { to.haveSystemId = 1; setString(to.systemId, *str); } else to.haveSystemId = 0; str = from.publicIdString(); if (str) { to.havePublicId = 1; setString(to.publicId, *str); } else to.havePublicId = 0; str = &from.effectiveSystemId(); if (str->size()) { to.haveGeneratedSystemId = 1; setString(to.generatedSystemId, *str); } else to.haveGeneratedSystemId = 0; } MsgGenericEventHandler::MsgGenericEventHandler(SGMLApplication &app, bool generalEntities, MessageReporter &reporter, const bool *messagesInhibitedPtr) : GenericEventHandler(app, generalEntities), reporter_(&reporter), messagesInhibitedPtr_(messagesInhibitedPtr) { } void MsgGenericEventHandler::reportMessage(const Message &msg, StringC &str) { WrapReporter wrap(reporter_); reporter_->dispatchMessage(msg); wrap.strStream.extractString(str); if (!*messagesInhibitedPtr_) *wrap.origStream << str; } SpOpenEntity::SpOpenEntity(const ConstPtr &origin) : origin_(origin) { } SGMLApplication::Location SpOpenEntity::location(SGMLApplication::Position pos) const { SGMLApplication::Location loc; const Origin *origin = origin_.pointer(); const InputSourceOrigin *inputSourceOrigin; const ExternalInfo *externalInfo; Index index = Index(pos); for (;;) { if (!origin) return loc; inputSourceOrigin = origin->asInputSourceOrigin(); if (inputSourceOrigin) { externalInfo = inputSourceOrigin->externalInfo(); if (externalInfo) break; } // Qualifier is for CodeWarrior const ::SP_NAMESPACE_SCOPE Location &loc = origin->parent(); index = loc.index(); origin = loc.origin().pointer(); } const StringC *entityName = inputSourceOrigin->entityName(); if (entityName) GenericEventHandler::setString(loc.entityName, *entityName); Offset off = inputSourceOrigin->startOffset(index); loc.entityOffset = off; if (!ExtendEntityManager::externalize(externalInfo, off, ((SpOpenEntity *)this)->soLoc_)) return loc; loc.lineNumber = soLoc_.lineNumber; GenericEventHandler::setString(loc.filename, soLoc_.actualStorageId); loc.columnNumber = soLoc_.columnNumber; loc.byteOffset = soLoc_.byteIndex; loc.other = soLoc_.storageObjectSpec; return loc; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Group.cxx100444 764 764 10025 6604607564 12624 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Group.h" #include "MessageBuilder.h" #include "ParserMessages.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif AllowedGroupTokens::AllowedGroupTokens(GroupToken::Type t1, GroupToken::Type t2, GroupToken::Type t3, GroupToken::Type t4) : flags_(0) { allow(t1); allow(t2); allow(t3); allow(t4); } AllowedGroupConnectors::AllowedGroupConnectors(GroupConnector::Type c1) : flags_(0) { allow(c1); } AllowedGroupConnectors::AllowedGroupConnectors(GroupConnector::Type c1, GroupConnector::Type c2) : flags_(0) { allow(c1); allow(c2); } AllowedGroupConnectors::AllowedGroupConnectors(GroupConnector::Type c1, GroupConnector::Type c2, GroupConnector::Type c3) : flags_(0) { allow(c1); allow(c2); allow(c3); } AllowedGroupConnectors::AllowedGroupConnectors(GroupConnector::Type c1, GroupConnector::Type c2, GroupConnector::Type c3, GroupConnector::Type c4) : flags_(0) { allow(c1); allow(c2); allow(c3); allow(c4); } AllowedGroupConnectorsMessageArg::AllowedGroupConnectorsMessageArg( const AllowedGroupConnectors &allow, const ConstPtr &syntax) : allow_(allow), syntax_(syntax) { } MessageArg *AllowedGroupConnectorsMessageArg::copy() const { return new AllowedGroupConnectorsMessageArg(*this); } void AllowedGroupConnectorsMessageArg::append(MessageBuilder &builder) const { static GroupConnector::Type types[] = { GroupConnector::andGC, GroupConnector::orGC, GroupConnector::seqGC, GroupConnector::grpcGC, GroupConnector::dtgcGC }; static Syntax::DelimGeneral delims[] = { Syntax::dAND, Syntax::dOR, Syntax::dSEQ, Syntax::dGRPC, Syntax::dDTGC }; Boolean first = 1; for (size_t i = 0; i < SIZEOF(types); i++) if (allow_.groupConnector(types[i])) { if (!first) builder.appendFragment(ParserMessages::listSep); else first = 0; const StringC &delim = syntax_->delimGeneral(delims[i]); builder.appendFragment(ParserMessages::delimStart); builder.appendChars(delim.data(), delim.size()); builder.appendFragment(ParserMessages::delimEnd); } } AllowedGroupTokensMessageArg::AllowedGroupTokensMessageArg( const AllowedGroupTokens &allow, const ConstPtr &syntax) : allow_(allow), syntax_(syntax) { } MessageArg *AllowedGroupTokensMessageArg::copy() const { return new AllowedGroupTokensMessageArg(*this); } void AllowedGroupTokensMessageArg::append(MessageBuilder &builder) const { const MessageFragment *fragment[4]; int nFragments = 0; if (allow_.groupToken(GroupToken::dataTagLiteral)) fragment[nFragments++] = &ParserMessages::parameterLiteral; if (allow_.groupToken(GroupToken::dataTagGroup)) fragment[nFragments++] = &ParserMessages::dataTagGroup; switch (allow_.group()) { case GroupToken::modelGroup: fragment[nFragments++] = &ParserMessages::modelGroup; break; case GroupToken::dataTagTemplateGroup: fragment[nFragments++] = &ParserMessages::dataTagTemplateGroup; break; default: break; } switch (allow_.nameStart()) { case GroupToken::name: fragment[nFragments++] = &ParserMessages::name; break; case GroupToken::nameToken: fragment[nFragments++] = &ParserMessages::nameToken; break; case GroupToken::elementToken: fragment[nFragments++] = &ParserMessages::elementToken; break; default: break; } Boolean first = 1; for (int i = 0; i < nFragments; i++) { if (!first) builder.appendFragment(ParserMessages::listSep); else first = 0; builder.appendFragment(*fragment[i]); } if (allow_.groupToken(GroupToken::pcdata)) { if (!first) builder.appendFragment(ParserMessages::listSep); StringC pcdata(syntax_->delimGeneral(Syntax::dRNI)); pcdata += syntax_->reservedName(Syntax::rPCDATA); builder.appendChars(pcdata.data(), pcdata.size()); } } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Group.h100444 764 764 7177 6604607564 12247 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Group_INCLUDED #define Group_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Boolean.h" #include "ContentToken.h" #include "StringC.h" #include "MessageArg.h" #include "Owner.h" #include "Syntax.h" #include "Text.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class GroupToken { public: GroupToken() { } enum Type { invalid, nameToken, name, dataTagLiteral, // data tag (padding) template dataTagGroup, elementToken, modelGroup, pcdata, dataTagTemplateGroup }; Type type; StringC token; // name nameToken; with substitution Owner model; Owner contentToken; // elementToken pcdata dataTagGroup Text text; Vector textVector; private: GroupToken(const GroupToken &); // undefined void operator=(const GroupToken &); // undefined }; class AllowedGroupTokens { public: AllowedGroupTokens(GroupToken::Type, GroupToken::Type = GroupToken::invalid, GroupToken::Type = GroupToken::invalid, GroupToken::Type = GroupToken::invalid); Boolean groupToken(GroupToken::Type) const; // modelGroup, dataTagTemplateGroup GroupToken::Type group() const; GroupToken::Type nameStart() const; private: void allow(GroupToken::Type); unsigned flags_; }; struct GroupConnector { enum Type { andGC, orGC, seqGC, grpcGC, dtgcGC }; Type type; }; class AllowedGroupConnectors { public: AllowedGroupConnectors(GroupConnector::Type); AllowedGroupConnectors(GroupConnector::Type, GroupConnector::Type); AllowedGroupConnectors(GroupConnector::Type, GroupConnector::Type, GroupConnector::Type); AllowedGroupConnectors(GroupConnector::Type, GroupConnector::Type, GroupConnector::Type, GroupConnector::Type); Boolean groupConnector(GroupConnector::Type) const; private: void allow(GroupConnector::Type); unsigned flags_; }; class AllowedGroupTokensMessageArg : public MessageArg { public: AllowedGroupTokensMessageArg(const AllowedGroupTokens &allow, const ConstPtr &syntax); MessageArg *copy() const; void append(MessageBuilder &) const; private: AllowedGroupTokens allow_; ConstPtr syntax_; }; class AllowedGroupConnectorsMessageArg : public MessageArg { public: AllowedGroupConnectorsMessageArg(const AllowedGroupConnectors &allow, const ConstPtr &syntax); MessageArg *copy() const; void append(MessageBuilder &) const; private: AllowedGroupConnectors allow_; ConstPtr syntax_; }; inline Boolean AllowedGroupTokens::groupToken(GroupToken::Type i) const { return ((1 << i) & flags_) != 0; } inline GroupToken::Type AllowedGroupTokens::group() const { if (groupToken(GroupToken::modelGroup)) return GroupToken::modelGroup; else if (groupToken(GroupToken::dataTagTemplateGroup)) return GroupToken::dataTagTemplateGroup; else return GroupToken::invalid; } inline GroupToken::Type AllowedGroupTokens::nameStart() const { if (groupToken(GroupToken::elementToken)) return GroupToken::elementToken; else if (groupToken(GroupToken::nameToken)) return GroupToken::nameToken; else if (groupToken(GroupToken::name)) return GroupToken::name; else return GroupToken::invalid; } inline void AllowedGroupTokens::allow(GroupToken::Type t) { flags_ |= (1 << t); } inline Boolean AllowedGroupConnectors::groupConnector(GroupConnector::Type c) const { return (flags_ & (1 << c)) != 0; } inline void AllowedGroupConnectors::allow(GroupConnector::Type c) { flags_ |= (1 << c); } #ifdef SP_NAMESPACE } #endif #endif /* not Group_INCLUDED */ jade-1.2.1/lib/Hash.cxx100444 764 764 734 6604607564 12361 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Hash.h" #include "StringC.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif unsigned long Hash::hash(const StringC &str) { const Char *p = str.data(); unsigned long h = 0; for (size_t n = str.size(); n > 0; n--) h = (h << 5) + h + *p++; // from Chris Torek return h; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/IListBase.cxx100444 764 764 1030 6604607564 13323 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "IListBase.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif void IListBase::append(Link *p) { Link **pp; for (pp = &head_; *pp; pp = &(*pp)->next_) ; *pp = p; } void IListBase::remove(Link *p) { for (Link **pp = &head_; *pp; pp = &(*pp)->next_) if (*pp == p) { *pp = p->next_; break; } } void IListBase::clear() { while (!empty()) delete get(); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Id.cxx100444 764 764 676 6604607564 12037 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Id.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Id::Id(const StringC &name) : Named(name) { } void Id::define(const Location &loc) { defLocation_ = loc; // release memory for pendingRefs_ Vector tem; pendingRefs_.swap(tem); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/IdentityCodingSystem.cxx100444 764 764 3156 6604607564 15641 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "IdentityCodingSystem.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class IdentityDecoder : public Decoder { public: size_t decode(Char *to, const char *from, size_t fromLen, const char **rest); Boolean convertOffset(unsigned long &offset) const; }; class IdentityEncoder : public RecoveringEncoder { public: IdentityEncoder(); void output(const Char *, size_t, OutputByteStream *); }; IdentityCodingSystem::IdentityCodingSystem() { } Decoder *IdentityCodingSystem::makeDecoder() const { return new IdentityDecoder; } Encoder *IdentityCodingSystem::makeEncoder() const { return new IdentityEncoder; } Boolean IdentityCodingSystem::isIdentity() const { return 1; } size_t IdentityDecoder::decode(Char *to, const char *from, size_t fromLen, const char **rest) { if (sizeof(Char) == sizeof(char) && from == (char *)to) { *rest = from + fromLen; return fromLen; } for (size_t n = fromLen; n > 0; n--) *to++ = (unsigned char)*from++; // zero extend *rest = from; return fromLen; } Boolean IdentityDecoder::convertOffset(unsigned long &) const { return true; } IdentityEncoder::IdentityEncoder() { } void IdentityEncoder::output(const Char *s, size_t n, OutputByteStream *sb) { if (sizeof(Char) != sizeof(char)) { for (size_t i = 0; i < n; i++) { Char c = s[i]; if (c > UCHAR_MAX) handleUnencodable(c, sb); else sb->sputc((unsigned char)c); } } else sb->sputn((const char *)s, n); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/InputSource.cxx100444 764 764 3117 6604607564 13774 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "InputSource.h" #include "MarkupScan.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif InputSource::InputSource(InputSourceOrigin *origin, const Char *start, const Char *end) : origin_(origin), start_(start), end_(end), cur_(start), accessError_(0), startLocation_(origin, 0), multicode_(0), scanSuppress_(0) { } void InputSource::reset(const Char *start, const Char *end) { origin_ = origin_->copy(); start_ = start; end_ = end; cur_ = start_; startLocation_ = Location(origin_.pointer(), 0); multicode_ = 0; scanSuppress_ = 0; markupScanTable_.clear(); } InputSource::~InputSource() { } void InputSource::advanceStartMulticode(const Char *to) { while (start_ < to) { switch (markupScanTable_[*start_]) { case MarkupScan::normal: break; case MarkupScan::in: scanSuppress_ = 0; break; case MarkupScan::out: if (!scanSuppress()) { scanSuppress_ = 1; scanSuppressSingle_ = 0; } break; case MarkupScan::suppress: // what's the effect of MSSCHAR followed by MSSCHAR if (!scanSuppress()) { scanSuppress_ = 1; scanSuppressSingle_ = 1; scanSuppressIndex_ = startLocation_.index() + 1; } break; } start_++; startLocation_ += 1; } } void InputSource::willNotRewind() { } void InputSource::setDocCharset(const CharsetInfo &, const CharsetInfo &) { } void InputSource::willNotSetDocCharset() { } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/InternalInputSource.cxx100444 764 764 2231 6604607564 15465 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include #include "InternalInputSource.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif InternalInputSource::InternalInputSource(const StringC &str, InputSourceOrigin *origin) : InputSource(origin, str.data(), str.data() + str.size()), buf_(0), contents_(&str) { } InternalInputSource::~InternalInputSource() { if (buf_) delete [] buf_; } Xchar InternalInputSource::fill(Messenger &) { return eE; } void InternalInputSource::pushCharRef(Char c, const NamedCharRef &ref) { ASSERT(cur() == start()); noteCharRef(startIndex() + (cur() - start()), ref); if (buf_ == 0) { buf_ = new Char[end() - start() + 1]; memcpy(buf_ + 1, cur(), (end() - start())*sizeof(Char)); changeBuffer(buf_ + 1, cur()); } moveLeft(); *(Char *)cur() = c; } Boolean InternalInputSource::rewind(Messenger &) { reset(contents_->data(), contents_->data() + contents_->size()); if (buf_) { delete [] buf_; buf_ = 0; } return 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Link.cxx100444 764 764 336 6604607566 12373 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "Link.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Link::~Link() { } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/LinkProcess.cxx100444 764 764 10451 6604607566 13771 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "LinkProcess.h" // ParserState is used for access to parser messages #include "ParserState.h" #include "MessageArg.h" #include "ParserMessages.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif LinkProcess::LinkProcess() { } void LinkProcess::init(const ConstPtr &lpd) { lpd_ = lpd; open_.clear(); open_.insert(new LinkProcessOpenElement(lpd_->initialLinkSet())); } Boolean LinkProcess::startElement(const ElementType *element, const AttributeList &attributes, const Location &location, Messenger &mgr, const AttributeList *&linkAttributes, const ResultElementSpec *&resultElementSpec) { if (lpd_.isNull()) { linkAttributes = 0; resultElementSpec = 0; return 1; } const StringC *id = attributes.getId(); if (id) { const IdLinkRuleGroup *p = lpd_->lookupIdLink(*id); if (p) { size_t selected; if (p->nLinkRules() > 1) { linkAttributes_.resize(p->nLinkRules()); for (size_t i = 0; i < linkAttributes_.size(); i++) linkAttributes_[i] = &p->linkRule(i).attributes(); if (!selectLinkRule(linkAttributes_, location, selected)) return 0; } else selected = 0; const IdLinkRule &rule = p->linkRule(selected); open_.insert(new LinkProcessOpenElement(open_.head()->current, rule)); linkAttributes = &rule.attributes(); resultElementSpec = &rule.resultElementSpec(); if (!rule.isAssociatedWith(element)) { mgr.setNextLocation(location); mgr.message(ParserMessages::idlinkElementType, StringMessageArg(element->name()), StringMessageArg(*id)); } return 1; } } const LinkSet *currentLinkSet = open_.head()->current; size_t nRules = currentLinkSet->nLinkRules(element); if (nRules > 0) { size_t selected; if (nRules > 1) { linkAttributes_.resize(nRules); for (size_t i = 0; i < nRules; i++) linkAttributes_[i] = ¤tLinkSet->linkRule(element, i).attributes(); if (!selectLinkRule(linkAttributes_, location, selected)) return 0; } else selected = 0; const SourceLinkRule &rule = currentLinkSet->linkRule(element, selected); open_.insert(new LinkProcessOpenElement(open_.head()->current, rule)); linkAttributes = &rule.attributes(); resultElementSpec = &rule.resultElementSpec(); return 1; } // FIXME construct attributes from attribute definition list linkAttributes = 0; resultElementSpec = 0; open_.insert(new LinkProcessOpenElement(open_.head()->current)); return 1; } void LinkProcess::endElement() { if (lpd_.isNull()) return; LinkProcessOpenElement *top = open_.get(); if (top->post) open_.head()->current = top->post; else if (top->postRestore) open_.head()->current = open_.head()->restore; delete top; } void LinkProcess::uselink(const LinkSet *linkSet, Boolean restore, const Lpd *lpd) { if (lpd_.isNull()) return; if (lpd != lpd_.pointer()) return; if (restore) open_.head()->current = open_.head()->restore; else if (linkSet) open_.head()->current = linkSet; } size_t LinkProcess::nImpliedLinkRules() const { if (!open_.head()) return 0; return open_.head()->current->nImpliedLinkRules(); } const ResultElementSpec &LinkProcess::impliedLinkRule(size_t i) const { return open_.head()->current->impliedLinkRule(i); } // Usually redefined by application. Boolean LinkProcess::selectLinkRule(const Vector &, const Location &, size_t &selected) { selected = 0; return 1; } void LinkProcess::clear() { open_.clear(); lpd_.clear(); linkAttributes_.clear(); } void LinkProcess::swap(LinkProcess &to) { open_.swap(to.open_); lpd_.swap(to.lpd_); linkAttributes_.swap(to.linkAttributes_); } LinkProcessOpenElement::LinkProcessOpenElement(const LinkSet *cur, const SourceLinkRule &rule) { current = rule.uselink(); if (!current) current = cur; restore = cur; post = rule.postlink(); postRestore = rule.postlinkRestore(); } LinkProcessOpenElement::LinkProcessOpenElement(const LinkSet *cur) { restore = current = cur; post = 0; postRestore = 0; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/LiteralStorage.cxx100444 764 764 5075 6604607566 14444 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "LiteralStorage.h" #include "CodingSystem.h" #include #ifdef DECLARE_MEMMOVE extern "C" { void *memmove(void *, const void *, size_t); } #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class LiteralStorageObject : public StorageObject { public: LiteralStorageObject(const StringC &); Boolean read(char *buf, size_t bufSize, Messenger &, size_t &nread); Boolean rewind(Messenger &); private: LiteralStorageObject(const LiteralStorageObject &); // undefined void operator=(const LiteralStorageObject &); // undefined StringC str_; size_t nBytesRead_; }; class MemoryInputCodingSystem : public InputCodingSystem { public: Decoder *makeDecoder() const; }; class MemoryDecoder : public Decoder { public: MemoryDecoder(); size_t decode(Char *, const char *, size_t, const char **); }; LiteralStorageManager::LiteralStorageManager(const char *type) : type_(type) { } StorageObject *LiteralStorageManager::makeStorageObject(const StringC &id, const StringC &, Boolean, Boolean, Messenger &, StringC &foundId) { foundId = id; return new LiteralStorageObject(id); } const InputCodingSystem *LiteralStorageManager::requiredCodingSystem() const { static MemoryInputCodingSystem cs; return &cs; } Boolean LiteralStorageManager::requiresCr() const { return 1; } const char *LiteralStorageManager::type() const { return type_; } Boolean LiteralStorageManager::inheritable() const { return 0; } LiteralStorageObject::LiteralStorageObject(const StringC &str) : str_(str), nBytesRead_(0) { } Boolean LiteralStorageObject::rewind(Messenger &) { nBytesRead_ = 0; return 1; } Boolean LiteralStorageObject::read(char *buf, size_t bufSize, Messenger &, size_t &nread) { if (nBytesRead_ >= str_.size()*sizeof(Char)) return 0; nread = str_.size()*sizeof(Char) - nBytesRead_; if (nread > bufSize) nread = bufSize; memcpy(buf, (char *)str_.data() + nBytesRead_, nread); nBytesRead_ += nread; return 1; } Decoder *MemoryInputCodingSystem::makeDecoder() const { return new MemoryDecoder; } MemoryDecoder::MemoryDecoder() : Decoder(sizeof(Char)) { } size_t MemoryDecoder::decode(Char *to, const char *from, size_t fromLen, const char **rest) { size_t nChars = fromLen/sizeof(Char); *rest = from + nChars*sizeof(Char); if (from != (char *)to) memmove(to, from, nChars*sizeof(Char)); return nChars; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Location.cxx100444 764 764 30106 6604607566 13304 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Location.h" #include "Entity.h" #include "Mutex.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class InputSourceOriginImpl : public EntityOrigin { public: InputSourceOriginImpl(); InputSourceOriginImpl(const Location &refLocation); const Location &parent() const; const ExternalInfo *externalInfo() const; Offset startOffset(Index ind) const; void noteCharRef(Index replacementIndex, const NamedCharRef &); Boolean isNamedCharRef(Index ind, NamedCharRef &ref) const; void setExternalInfo(ExternalInfo *); virtual InputSourceOrigin *copy() const; const InputSourceOrigin *asInputSourceOrigin() const; private: InputSourceOriginImpl(const InputSourceOriginImpl &); // undefined void operator=(const InputSourceOriginImpl &); // undefined size_t nPrecedingCharRefs(Index ind) const; Vector charRefs_; StringC charRefOrigNames_; Owner externalInfo_; // 0 for internal entities Location refLocation_; // where referenced from Mutex mutex_; }; class EntityOriginImpl : public InputSourceOriginImpl { public: void *operator new(size_t sz, Allocator &alloc) { return alloc.alloc(sz); } void *operator new(size_t sz) { return Allocator::allocSimple(sz); } void operator delete(void *p) { Allocator::free(p); } #ifdef SP_HAVE_PLACEMENT_OPERATOR_DELETE void operator delete(void *p, Allocator &) { Allocator::free(p); } #endif EntityOriginImpl(const ConstPtr &); EntityOriginImpl(const ConstPtr &, const Location &refLocation); EntityOriginImpl(const ConstPtr &, const Location &refLocation, Index refLength, Owner &markup); ~EntityOriginImpl(); InputSourceOrigin *copy() const; const Entity *entity() const { return entity_.pointer(); } const EntityDecl *entityDecl() const; const EntityOrigin *asEntityOrigin() const; Boolean defLocation(Offset off, const Origin *&, Index &) const; Index refLength() const; const Markup *markup() const; private: EntityOriginImpl(const EntityOriginImpl &); // undefined void operator=(const EntityOriginImpl &); // undefined ConstPtr entity_; // 0 for document entity // total length of reference // (characters that were replaced by the entity) Index refLength_; Owner markup_; }; const size_t EntityOrigin::allocSize = sizeof(EntityOriginImpl); Location::Location() { } Location::Location(Origin *origin, Index i) : origin_(origin), index_(i) { } Location::Location(ConstPtr origin, Index i) : origin_(origin), index_(i) { } Origin::~Origin() { } const EntityOrigin *Origin::asEntityOrigin() const { return 0; } const InputSourceOrigin *Origin::asInputSourceOrigin() const { return 0; } Index Origin::refLength() const { return 0; } Boolean Origin::origChars(const Char *&) const { return 0; } Boolean Origin::inBracketedTextOpenDelim() const { return 0; } Boolean Origin::inBracketedTextCloseDelim() const { return 0; } Boolean Origin::isNumericCharRef(const Markup *&) const { return 0; } Boolean Origin::isNamedCharRef(Index, NamedCharRef &) const { return 0; } const EntityDecl *Origin::entityDecl() const { return 0; } const Markup *Origin::markup() const { return 0; } const Entity *Origin::entity() const { return 0; } Boolean Origin::defLocation(Offset, const Origin *&, Index &) const { return 0; } const ExternalInfo *Origin::externalInfo() const { return 0; } Offset Origin::startOffset(Index ind) const { return ind; } const StringC *Origin::entityName() const { const EntityDecl *ent = entityDecl(); if (ent) return &ent->name(); else return 0; } BracketOrigin::BracketOrigin(const Location &loc, Position pos) : loc_(loc), pos_(pos) { } const Location &BracketOrigin::parent() const { return loc_; } Boolean BracketOrigin::inBracketedTextOpenDelim() const { return pos_ == open; } Boolean BracketOrigin::inBracketedTextCloseDelim() const { return pos_ == close; } InputSourceOrigin *InputSourceOrigin::make() { return new InputSourceOriginImpl; } InputSourceOrigin *InputSourceOrigin::make(const Location &refLocation) { return new InputSourceOriginImpl(refLocation); } InputSourceOriginImpl::InputSourceOriginImpl() { } InputSourceOriginImpl::InputSourceOriginImpl(const Location &refLocation) : refLocation_(refLocation) { } const InputSourceOrigin *InputSourceOriginImpl::asInputSourceOrigin() const { return this; } const ExternalInfo *InputSourceOriginImpl::externalInfo() const { return externalInfo_.pointer(); } InputSourceOrigin *InputSourceOriginImpl::copy() const { return new InputSourceOriginImpl(refLocation_); } const Location &InputSourceOriginImpl::parent() const { return refLocation_; } void InputSourceOriginImpl::setExternalInfo(ExternalInfo *info) { externalInfo_ = info; } void InputSourceOriginImpl::noteCharRef(Index replacementIndex, const NamedCharRef &ref) { Mutex::Lock lock(&mutex_); charRefs_.resize(charRefs_.size() + 1); charRefs_.back().replacementIndex = replacementIndex; charRefs_.back().refStartIndex = ref.refStartIndex(); charRefs_.back().refEndType = ref.refEndType(); charRefs_.back().origNameOffset = charRefOrigNames_.size(); charRefOrigNames_ += ref.origName(); } // Number of character references whose replacement index < ind. size_t InputSourceOriginImpl::nPrecedingCharRefs(Index ind) const { size_t i; // Find i such that // charRefs_[I].replacementIndex >= ind // charRefs_[i - 1].replacementIndex < ind if (charRefs_.size() == 0 || ind > charRefs_.back().replacementIndex) // This will be a common case, so optimize it. i = charRefs_.size(); else { // Binary search // Invariant: // charRefs_ < i have replacementIndex < ind // charRefs_ >= lim have replacementIndex >= ind i = 0; size_t lim = charRefs_.size(); while (i < lim) { size_t mid = i + (lim - i)/2; if (charRefs_[mid].replacementIndex >= ind) lim = mid; else i = mid + 1; } } return i; } Offset InputSourceOriginImpl::startOffset(Index ind) const { Mutex::Lock lock(&((InputSourceOriginImpl *)this)->mutex_); size_t n = nPrecedingCharRefs(ind); if (n < charRefs_.size() && ind == charRefs_[n].replacementIndex) { for (;;) { ind = charRefs_[n].refStartIndex; if (n == 0 || charRefs_[n - 1].replacementIndex != ind) break; --n; } } // charRefs[n - 1].replacementIndex < ind return Offset(ind - n); } Boolean InputSourceOriginImpl::isNamedCharRef(Index ind, NamedCharRef &ref) const { Mutex::Lock lock(&((InputSourceOriginImpl *)this)->mutex_); size_t n = nPrecedingCharRefs(ind); if (n < charRefs_.size() && ind == charRefs_[n].replacementIndex) { ref.set(charRefs_[n].refStartIndex, charRefs_[n].refEndType, charRefOrigNames_.data() + charRefs_[n].origNameOffset, (n + 1 < charRefs_.size() ? charRefs_[n + 1].origNameOffset : charRefOrigNames_.size()) - charRefs_[n].origNameOffset); return 1; } return 0; } EntityOrigin *EntityOrigin::make(Allocator &alloc, const ConstPtr &entity) { return new (alloc) EntityOriginImpl(entity); } EntityOrigin *EntityOrigin::make(Allocator &alloc, const ConstPtr &entity, const Location &refLocation) { return new (alloc) EntityOriginImpl(entity, refLocation); } EntityOrigin *EntityOrigin::make(Allocator &alloc, const ConstPtr &entity, const Location &refLocation, Index refLength, Owner &markup) { return new (alloc) EntityOriginImpl(entity, refLocation, refLength, markup); } EntityOrigin *EntityOrigin::make(const ConstPtr &entity, const Location &refLocation, Index refLength, Owner &markup) { return new EntityOriginImpl(entity, refLocation, refLength, markup); } EntityOrigin *EntityOrigin::make(const ConstPtr &entity, const Location &refLocation) { return new EntityOriginImpl(entity, refLocation); } EntityOriginImpl::EntityOriginImpl(const ConstPtr &entity) : refLength_(0), entity_(entity) { } EntityOriginImpl::EntityOriginImpl(const ConstPtr &entity, const Location &refLocation) : InputSourceOriginImpl(refLocation), refLength_(0), entity_(entity) { } EntityOriginImpl::EntityOriginImpl(const ConstPtr &entity, const Location &refLocation, Index refLength, Owner &markup) : InputSourceOriginImpl(refLocation), refLength_(refLength), entity_(entity) { markup.swap(markup_); } EntityOriginImpl::~EntityOriginImpl() { } InputSourceOrigin *EntityOriginImpl::copy() const { Owner m; if (markup_) m = new Markup(*markup_); return new EntityOriginImpl(entity_, parent(), refLength_, m); } Index EntityOriginImpl::refLength() const { return refLength_; } const EntityOrigin *EntityOriginImpl::asEntityOrigin() const { return this; } Boolean EntityOriginImpl::defLocation(Offset off, const Origin *&origin, Index &index) const { if (entity_.isNull()) return 0; const InternalEntity *internal = entity_->asInternalEntity(); if (!internal) return 0; return internal->text().charLocation(off, origin, index); } const EntityDecl *EntityOriginImpl::entityDecl() const { return entity_.pointer(); } const Markup *EntityOriginImpl::markup() const { return markup_.pointer(); } ReplacementOrigin::ReplacementOrigin(const Location &loc, Char origChar) : loc_(loc), origChar_(origChar) { } const Location &ReplacementOrigin::parent() const { return loc_; } Boolean ReplacementOrigin::origChars(const Char *&s) const { if (loc_.origin().isNull() || !loc_.origin()->origChars(s)) s = &origChar_; return 1; } MultiReplacementOrigin::MultiReplacementOrigin(const Location &loc, StringC &origChars) : loc_(loc) { origChars.swap(origChars_); } const Location &MultiReplacementOrigin::parent() const { return loc_; } Boolean MultiReplacementOrigin::origChars(const Char *&s) const { if (loc_.origin().isNull() || !loc_.origin()->origChars(s)) s = origChars_.data(); return 1; } ProxyOrigin::ProxyOrigin(const Origin *origin) : origin_(origin) { } const EntityOrigin *ProxyOrigin::asEntityOrigin() const { return origin_->asEntityOrigin(); } const InputSourceOrigin *ProxyOrigin::asInputSourceOrigin() const { return origin_->asInputSourceOrigin(); } const Location &ProxyOrigin::parent() const { return origin_->parent(); } Index ProxyOrigin::refLength() const { return origin_->refLength(); } Boolean ProxyOrigin::origChars(const Char *&p) const { return origin_->origChars(p); } Boolean ProxyOrigin::inBracketedTextOpenDelim() const { return origin_->inBracketedTextOpenDelim(); } Boolean ProxyOrigin::inBracketedTextCloseDelim() const { return origin_->inBracketedTextCloseDelim(); } Boolean ProxyOrigin::isNumericCharRef(const Markup *&markup) const { return origin_->isNumericCharRef(markup); } Boolean ProxyOrigin::isNamedCharRef(Index ind, NamedCharRef &ref) const { return origin_->isNamedCharRef(ind, ref); } const EntityDecl *ProxyOrigin::entityDecl() const { return origin_->entityDecl(); } Boolean ProxyOrigin::defLocation(Offset off, const Origin *&origin, Index &index) const { return origin_->defLocation(off, origin, index); } const Markup *ProxyOrigin::markup() const { return origin_->markup(); } const Entity *ProxyOrigin::entity() const { return origin_->entity(); } const ExternalInfo *ProxyOrigin::externalInfo() const { return origin_->externalInfo(); } Offset ProxyOrigin::startOffset(Index ind) const { return origin_->startOffset(ind); } ExternalInfo::~ExternalInfo() { } RTTI_DEF0(ExternalInfo) NamedCharRef::NamedCharRef() { } NamedCharRef::NamedCharRef(Index refStartIndex, RefEndType refEndType, const StringC &origName) : refStartIndex_(refStartIndex), refEndType_(refEndType), origName_(origName) { } void NamedCharRef::set(Index refStartIndex, RefEndType refEndType, const Char *s, size_t n) { refStartIndex_ = refStartIndex; refEndType_ = refEndType; origName_.assign(s, n); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Lpd.cxx100444 764 764 7643 6604607566 12245 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Lpd.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Lpd::Lpd(const StringC &name, Type type, const Location &location, const Ptr &sourceDtd) : name_(new StringResource(name)), type_(type), location_(location), active_(0), sourceDtd_(sourceDtd) { } Lpd::~Lpd() { } SimpleLpd::SimpleLpd(const StringC &name, const Location &location, const Ptr &sourceDtd) : Lpd(name, simpleLink, location, sourceDtd) { } ResultElementSpec::ResultElementSpec() : elementType(0) { } void ResultElementSpec::swap(ResultElementSpec &to) { attributeList.swap(to.attributeList); { const ElementType *tem = to.elementType; to.elementType = elementType; elementType = tem; } } SourceLinkRule::SourceLinkRule() : uselink_(0), postlink_(0), postlinkRestore_(0) { } void SourceLinkRule::swap(SourceLinkRule &to) { linkAttributes_.swap(to.linkAttributes_); resultElementSpec_.swap(to.resultElementSpec_); { const LinkSet *tem = to.uselink_; to.uselink_ = uselink_; uselink_ = tem; } { const LinkSet *tem = to.postlink_; to.postlink_ = postlink_; postlink_ = tem; } { Boolean tem = to.postlinkRestore_; to.postlinkRestore_ = postlinkRestore_; postlinkRestore_ = tem; } } SourceLinkRuleResource::SourceLinkRuleResource() { } LinkSet::LinkSet(const StringC &name, const Dtd *dtd) : Named(name), defined_(0), linkRules_(dtd ? dtd->nElementTypeIndex() : 0) { } void LinkSet::addLinkRule(const ElementType *element, const ConstPtr &rule) { linkRules_[element->index()].push_back(rule); } void LinkSet::addImplied(const ElementType *element, AttributeList &attributes) { impliedSourceLinkRules_.resize(impliedSourceLinkRules_.size() + 1); ResultElementSpec &result = impliedSourceLinkRules_.back(); result.elementType = element; result.attributeList = attributes; } Boolean LinkSet::impliedResultAttributes(const ElementType *resultType, const AttributeList *&attributes) { for (size_t i = 0; i < impliedSourceLinkRules_.size(); i++) if (impliedSourceLinkRules_[i].elementType == resultType) { attributes = &impliedSourceLinkRules_[i].attributeList; return 1; } return 0; } size_t LinkSet::nLinkRules(const ElementType *e) const { if (e->index() >= linkRules_.size()) return 0; return linkRules_[e->index()].size(); } IdLinkRule::IdLinkRule() { } Boolean IdLinkRule::isAssociatedWith(const ElementType *e) const { for (size_t i = 0; i < assocElementTypes_.size(); i++) if (assocElementTypes_[i] == e) return 1; return 0; } void IdLinkRule::setAssocElementTypes(Vector &v) { v.swap(assocElementTypes_); } void IdLinkRule::swap(IdLinkRule &to) { SourceLinkRule::swap(to); assocElementTypes_.swap(to.assocElementTypes_); } IdLinkRuleGroup::IdLinkRuleGroup(const StringC &name) : Named(name) { } void IdLinkRuleGroup::addLinkRule(IdLinkRule &rule) { linkRules_.resize(linkRules_.size() + 1); rule.swap(linkRules_.back()); } ComplexLpd::ComplexLpd(const StringC &name, Type type, const Location &location, const Syntax &syntax, const Ptr &sourceDtd, const Ptr &resultDtd) : Lpd(name, type, location, sourceDtd), resultDtd_(resultDtd), hadIdLinkSet_(0), nAttributeDefinitionList_(0), initialLinkSet_(syntax.rniReservedName(Syntax::rINITIAL), sourceDtd.pointer()), emptyLinkSet_(syntax.rniReservedName(Syntax::rEMPTY), sourceDtd.pointer()), linkAttributeDefs_(sourceDtd.isNull() ? 0 : sourceDtd->nElementTypeIndex()) { } IdLinkRuleGroup *ComplexLpd::lookupCreateIdLink(const StringC &id) { IdLinkRuleGroup *group = idLinkTable_.lookup(id); if (!group) { group = new IdLinkRuleGroup(id); idLinkTable_.insert(group); } return group; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/LpdEntityRef.h100444 764 764 1775 6604607566 13524 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef LpdEntityRef_INCLUDED #define LpdEntityRef_INCLUDED 1 #include "Entity.h" #include "Boolean.h" #include "Ptr.h" // Information about a reference to an entity that // used a definition in an LPD. #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct LpdEntityRef { ConstPtr entity; PackedBoolean lookedAtDefault; PackedBoolean foundInPass1Dtd; static inline const LpdEntityRef &key(const LpdEntityRef &r) { return r; } static inline unsigned long hash(const LpdEntityRef &r) { return Hash::hash(r.entity->name()); } }; inline Boolean operator==(const LpdEntityRef &r1, const LpdEntityRef &r2) { return (r1.entity == r2.entity && r1.foundInPass1Dtd == r2.foundInPass1Dtd && r1.lookedAtDefault == r2.lookedAtDefault); } inline Boolean operator!=(const LpdEntityRef &r1, const LpdEntityRef &r2) { return !(r1 == r2); } #ifdef SP_NAMESPACE } #endif #endif /* not LpdEntityRef_INCLUDED */ jade-1.2.1/lib/Makefile.sub100444 764 764 4531 6604607566 13223 0ustar jjcjjcLIB=sp INCLUDE=-I$(srcdir)/../generic MSGGENFLAGS=-l COMMON_OBJS=Allocator.o Link.o IListBase.o TypeId.o assert.o ENTMGR_OBJS=CharsetInfo.o EntityCatalog.o EntityDecl.o EntityManager.o \ Hash.o InputSource.o Location.o Message.o MessageArg.o \ UnivCharsetDesc.o entmgr_inst.o XENTMGR_OBJS=LiteralStorage.o URLStorage.o RewindStorageObject.o \ ErrnoMessageArg.o OffsetOrderedList.o DescriptorManager.o \ ExtendEntityManager.o PosixStorage.o StdioStorage.o NotationStorage.o \ StorageManager.o CodingSystem.o IdentityCodingSystem.o \ UTF8CodingSystem.o Fixed2CodingSystem.o UnicodeCodingSystem.o \ EUCJPCodingSystem.o SJISCodingSystem.o TranslateCodingSystem.o \ Big5CodingSystem.o XMLCodingSystem.o CodingSystemKit.o \ SearchResultMessageArg.o SOEntityCatalog.o OutputByteStream.o \ xentmgr_inst.o PARSER_OBJS=ContentState.o ParserState.o parser_inst.o parseSd.o Parser.o \ parseInstance.o parseMode.o parseAttribute.o \ LinkProcess.o Lpd.o parseDecl.o ShortReferenceMap.o \ parseParam.o parseCommon.o SgmlParser.o \ Entity.o Attribute.o OpenElement.o Notation.o ParserOptions.o Dtd.o \ Undo.o Param.o TokenMessageArg.o Group.o \ CharsetDecl.o CharsetRegistry.o ExternalId.o \ TrieBuilder.o Sd.o Syntax.o Partition.o ModeInfo.o Recognizer.o \ Markup.o Text.o ContentToken.o ElementType.o Event.o \ InternalInputSource.o OutputState.o ParserMessages.o \ SdText.o NumericCharRefOrigin.o Id.o StringVectorMessageArg.o APP_OBJS=ErrorCountEventHandler.o MessageEventHandler.o MessageFormatter.o \ MessageReporter.o MessageTable.o OutputCharStream.o ConsoleOutput.o \ CmdLineApp.o EntityApp.o ParserApp.o app_inst.o \ ArcEngine.o arc_inst.o GENERIC_OBJS=ParserEventGeneratorKit.o SGMLApplication.o EventGenerator.o \ GenericEventHandler.o OBJS=$(COMMON_OBJS) $(ENTMGR_OBJS) $(XENTMGR_OBJS) $(PARSER_OBJS) $(APP_OBJS) \ $(GENERIC_OBJS) $(LIBOBJS) GENSRCS=version.h entmgr_inst.cxx \ xentmgr_inst.cxx EntityManagerMessages.h CatalogMessages.h \ PosixStorageMessages.h URLStorageMessages.h StdioStorageMessages.h \ ParserMessages.h parser_inst.cxx app_inst.cxx \ ParserAppMessages.h CmdLineAppMessages.h \ ArcEngineMessages.h arc_inst.cxx MessageReporterMessages.h \ MessageFormatterMessages.h $(srcdir)/version.h: $(srcdir)/../VERSION $(srcdir)/mkversion.pl rm -f $@ $(PERL) -w $(srcdir)/mkversion.pl $(srcdir)/../VERSION >$@ chmod -w $@ jade-1.2.1/lib/Markup.cxx100444 764 764 22333 6604607566 12776 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Markup.h" #include "InputSource.h" #include "Location.h" #include "macros.h" #include "Entity.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif MarkupItem::MarkupItem() : type(Markup::delimiter), index(0) { } MarkupItem::~MarkupItem() { switch (type) { case Markup::entityStart: delete origin; break; case Markup::literal: delete text; break; case Markup::sdLiteral: delete sdText; break; } } MarkupItem::MarkupItem(const MarkupItem &item) : type(item.type), index(item.index) { switch (item.type) { case Markup::entityStart: origin = new ConstPtr(*item.origin); break; case Markup::literal: text = new Text(*item.text); break; case Markup::sdLiteral: sdText = new SdText(*item.sdText); break; case Markup::delimiter: break; default: nChars = item.nChars; break; } } void MarkupItem::operator=(const MarkupItem &item) { switch (type) { case Markup::entityStart: if (item.type == Markup::entityStart) { *origin = *item.origin; return; } delete origin; break; case Markup::literal: if (item.type == Markup::literal) { *text = *item.text; return; } delete text; break; case Markup::sdLiteral: if (item.type == Markup::sdLiteral) { *sdText = *item.sdText; return; } delete sdText; break; } type = item.type; index = item.index; switch (item.type) { case Markup::entityStart: origin = new ConstPtr(*item.origin); break; case Markup::literal: text = new Text(*item.text); break; case Markup::sdLiteral: sdText = new SdText(*item.sdText); break; case Markup::delimiter: break; default: nChars = item.nChars; break; } } Markup::Markup() { } void Markup::resize(size_t n) { size_t chopChars = 0; for (size_t i = n; i < items_.size(); i++) switch (items_[i].type) { case Markup::reservedName: case Markup::sdReservedName: case Markup::name: case Markup::nameToken: case Markup::number: case Markup::attributeValue: case Markup::s: case Markup::comment: case Markup::shortref: chopChars += items_[i].nChars; break; } items_.resize(n); chars_.resize(chars_.size() - chopChars); } void Markup::addDelim(Syntax::DelimGeneral d) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); item.type = Markup::delimiter; item.index = d; } void Markup::addReservedName(Syntax::ReservedName rn, const InputSource *in) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); size_t length = in->currentTokenLength(); item.nChars = length; item.type = Markup::reservedName; item.index = rn; chars_.append(in->currentTokenStart(), length); } void Markup::addReservedName(Syntax::ReservedName rn, const StringC &str) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); item.nChars = str.size(); item.type = Markup::reservedName; item.index = rn; chars_.append(str.data(), str.size()); } void Markup::addSdReservedName(Sd::ReservedName rn, const InputSource *in) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); size_t length = in->currentTokenLength(); item.nChars = length; item.type = Markup::sdReservedName; item.index = rn; chars_.append(in->currentTokenStart(), length); } void Markup::addSdReservedName(Sd::ReservedName rn, const Char *str, size_t length) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); item.nChars = length; item.type = Markup::sdReservedName; item.index = rn; chars_.append(str, length); } void Markup::addS(Char c) { if (items_.size() > 0) { MarkupItem &item = items_.back(); if (item.type == Markup::s) { item.nChars += 1; chars_ += c; return; } } items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); item.type = Markup::s; item.nChars = 1; chars_ += c; } void Markup::addS(const InputSource *in) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); size_t length = in->currentTokenLength(); item.nChars = length; item.type = Markup::s; chars_.append(in->currentTokenStart(), length); } void Markup::addCommentStart() { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); item.type = Markup::comment; item.nChars = 0; } void Markup::addRefEndRe() { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); item.type = Markup::refEndRe; } void Markup::addCommentChar(Char c) { items_.back().nChars += 1; chars_ += c; } void Markup::addName(const InputSource *in) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); size_t length = in->currentTokenLength(); item.nChars = length; item.type = Markup::name; chars_.append(in->currentTokenStart(), length); } void Markup::addName(const Char *str, size_t length) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); item.nChars = length; item.type = Markup::name; chars_.append(str, length); } void Markup::addNumber(const InputSource *in) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); size_t length = in->currentTokenLength(); item.nChars = length; item.type = Markup::number; chars_.append(in->currentTokenStart(), length); } void Markup::addNameToken(const InputSource *in) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); size_t length = in->currentTokenLength(); item.nChars = length; item.type = Markup::nameToken; chars_.append(in->currentTokenStart(), length); } void Markup::addAttributeValue(const InputSource *in) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); size_t length = in->currentTokenLength(); item.nChars = length; item.type = Markup::attributeValue; chars_.append(in->currentTokenStart(), length); } void Markup::addShortref(const InputSource *in) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); size_t length = in->currentTokenLength(); item.nChars = length; item.type = Markup::shortref; chars_.append(in->currentTokenStart(), length); } void Markup::addEntityStart(const Ptr &origin) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); item.type = Markup::entityStart; item.origin = new ConstPtr(origin.pointer()); } void Markup::addEntityEnd() { items_.resize(items_.size() + 1); items_.back().type = Markup::entityEnd; } void Markup::addLiteral(const Text &text) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); item.type = Markup::literal; item.text = new Text(text); } void Markup::addSdLiteral(const SdText &sdText) { items_.resize(items_.size() + 1); MarkupItem &item = items_.back(); item.type = Markup::sdLiteral; item.sdText = new SdText(sdText); } void Markup::changeToAttributeValue(size_t i) { ASSERT(items_[i].type == Markup::name); items_[i].type = Markup::attributeValue; } void Markup::changeToSdReservedName(size_t i, Sd::ReservedName rn) { ASSERT(items_[i].type == Markup::name); items_[i].type = Markup::sdReservedName; items_[i].index = rn; } void Markup::swap(Markup &to) { chars_.swap(to.chars_); items_.swap(to.items_); } MarkupIter::MarkupIter(const Markup &m) : chars_(m.chars_.data()), items_(m.items_.begin()), nItems_(m.items_.size()), index_(0), charIndex_(0) { } void MarkupIter::advance(Location &loc, const ConstPtr &syntax) { switch (items_[index_].type) { case Markup::delimiter: loc += syntax->delimGeneral(delimGeneral()).size(); break; case Markup::refEndRe: loc += 1; break; case Markup::reservedName: case Markup::sdReservedName: case Markup::name: case Markup::nameToken: case Markup::number: case Markup::attributeValue: case Markup::s: case Markup::shortref: loc += items_[index_].nChars; charIndex_ += items_[index_].nChars; break; case Markup::comment: loc += items_[index_].nChars + (2 * syntax->delimGeneral(Syntax::dCOM).size()); charIndex_ += items_[index_].nChars; break; case Markup::entityStart: loc = Location(*items_[index_].origin, 0); break; case Markup::entityEnd: { ConstPtr origin(loc.origin()); loc = origin->parent(); loc += origin->refLength(); } break; case Markup::literal: { const Text &text = *items_[index_].text; text.endDelimLocation(loc); Boolean lita; text.delimType(lita); loc += syntax->delimGeneral(lita ? Syntax::dLITA : Syntax::dLIT).size(); } break; case Markup::sdLiteral: { const SdText &text = *items_[index_].sdText; loc = text.endDelimLocation(); loc += 1; } break; } index_++; } void MarkupIter::advance() { switch (items_[index_].type) { case Markup::reservedName: case Markup::sdReservedName: case Markup::name: case Markup::nameToken: case Markup::number: case Markup::attributeValue: case Markup::s: case Markup::comment: case Markup::shortref: charIndex_ += items_[index_].nChars; break; } index_++; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/MarkupScan.h100444 764 764 535 6604607566 13170 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef MarkupScan_INCLUDED #define MarkupScan_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct MarkupScan { enum Type { normal, in, out, suppress }; }; #ifdef SP_NAMESPACE } #endif #endif /* not MarkupScan_INCLUDED */ jade-1.2.1/lib/Message.cxx100444 764 764 14355 6604607566 13130 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Message.h" #include "MessageArg.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif MessageFragment::MessageFragment(unsigned module, unsigned number, const char * #ifndef SP_NO_MESSAGE_TEXT text #endif ) : module_(module), #ifndef SP_NO_MESSAGE_TEXT text_(text), #endif number_(number) { } MessageType::MessageType(Severity severity, unsigned module, unsigned number, const char *text, const char * #ifndef SP_NO_MESSAGE_TEXT auxText #endif ) : #ifndef SP_NO_MESSAGE_TEXT auxText_(auxText), #endif MessageFragment(module, number, text) { spare_ = severity; } MessageType0::MessageType0(Severity severity, unsigned module, unsigned number, const char *text) : MessageType(severity, module, number, text) { } MessageType1::MessageType1(Severity severity, unsigned module, unsigned number, const char *text) : MessageType(severity, module, number, text) { } MessageType2::MessageType2(Severity severity, unsigned module, unsigned number, const char *text) : MessageType(severity, module, number, text) { } MessageType3::MessageType3(Severity severity, unsigned module, unsigned number, const char *text) : MessageType(severity, module, number, text) { } MessageType4::MessageType4(Severity severity, unsigned module, unsigned number, const char *text) : MessageType(severity, module, number, text) { } MessageType5::MessageType5(Severity severity, unsigned module, unsigned number, const char *text) : MessageType(severity, module, number, text) { } MessageType6::MessageType6(Severity severity, unsigned module, unsigned number, const char *text) : MessageType(severity, module, number, text) { } MessageType0L::MessageType0L(Severity severity, unsigned module, unsigned number, const char *text, const char *auxText) : MessageType(severity, module, number, text, auxText) { } MessageType1L::MessageType1L(Severity severity, unsigned module, unsigned number, const char *text, const char *auxText) : MessageType(severity, module, number, text, auxText) { } OpenElementInfo::OpenElementInfo() : included(0), matchIndex(0) { } Message::Message() { } Message::Message(int nArgs) : args(nArgs) { } void Message::swap(Message &to) { const MessageType *tem = type; type = to.type; to.type = tem; to.loc.swap(loc); to.auxLoc.swap(auxLoc); args.swap(to.args); openElementInfo.swap(to.openElementInfo); } Messenger::Messenger() : haveNextLocation_(0) { } Messenger::~Messenger() { } void Messenger::dispatchMessage(Message &msg) { const Message &tem = msg; dispatchMessage(tem); } void Messenger::message(const MessageType0 &type) { Message msg(0); doInitMessage(msg); msg.type = &type; dispatchMessage(msg); } void Messenger::message(const MessageType1 &type, const MessageArg &arg0) { Message msg(1); doInitMessage(msg); msg.args[0] = arg0.copy(); msg.type = &type; dispatchMessage(msg); } void Messenger::message(const MessageType2 &type, const MessageArg &arg0, const MessageArg &arg1) { Message msg(2); doInitMessage(msg); msg.args[0] = arg0.copy(); msg.args[1] = arg1.copy(); msg.type = &type; dispatchMessage(msg); } void Messenger::message(const MessageType3 &type, const MessageArg &arg0, const MessageArg &arg1, const MessageArg &arg2) { Message msg(3); doInitMessage(msg); msg.args[0] = arg0.copy(); msg.args[1] = arg1.copy(); msg.args[2] = arg2.copy(); msg.type = &type; dispatchMessage(msg); } void Messenger::message(const MessageType4 &type, const MessageArg &arg0, const MessageArg &arg1, const MessageArg &arg2, const MessageArg &arg3) { Message msg(4); doInitMessage(msg); msg.args[0] = arg0.copy(); msg.args[1] = arg1.copy(); msg.args[2] = arg2.copy(); msg.args[3] = arg3.copy(); msg.type = &type; dispatchMessage(msg); } void Messenger::message(const MessageType5 &type, const MessageArg &arg0, const MessageArg &arg1, const MessageArg &arg2, const MessageArg &arg3, const MessageArg &arg4) { Message msg(5); doInitMessage(msg); msg.args[0] = arg0.copy(); msg.args[1] = arg1.copy(); msg.args[2] = arg2.copy(); msg.args[3] = arg3.copy(); msg.args[4] = arg4.copy(); msg.type = &type; dispatchMessage(msg); } void Messenger::message(const MessageType6 &type, const MessageArg &arg0, const MessageArg &arg1, const MessageArg &arg2, const MessageArg &arg3, const MessageArg &arg4, const MessageArg &arg5) { Message msg(6); doInitMessage(msg); msg.args[0] = arg0.copy(); msg.args[1] = arg1.copy(); msg.args[2] = arg2.copy(); msg.args[3] = arg3.copy(); msg.args[4] = arg4.copy(); msg.args[5] = arg5.copy(); msg.type = &type; dispatchMessage(msg); } void Messenger::message(const MessageType0L &type, const Location &loc) { Message msg(0); doInitMessage(msg); msg.type = &type; msg.auxLoc = loc; dispatchMessage(msg); } void Messenger::message(const MessageType1L &type, const MessageArg &arg0, const Location &loc) { Message msg(1); doInitMessage(msg); msg.args[0] = arg0.copy(); msg.type = &type; msg.auxLoc = loc; dispatchMessage(msg); } void Messenger::setNextLocation(const Location &loc) { haveNextLocation_ = 1; nextLocation_ = loc; } void Messenger::initMessage(Message &) { } void Messenger::doInitMessage(Message &msg) { initMessage(msg); if (haveNextLocation_) { msg.loc = nextLocation_; haveNextLocation_ = 0; } } ForwardingMessenger::ForwardingMessenger(Messenger &to) : to_(&to) { } void ForwardingMessenger::dispatchMessage(Message &msg) { to_->dispatchMessage(msg); } void ForwardingMessenger::dispatchMessage(const Message &msg) { to_->dispatchMessage(msg); } void ForwardingMessenger::initMessage(Message &msg) { to_->initMessage(msg); } ParentLocationMessenger::ParentLocationMessenger(Messenger &mgr) : ForwardingMessenger(mgr) { } void ParentLocationMessenger::initMessage(Message &msg) { ForwardingMessenger::initMessage(msg); if (!msg.loc.origin().isNull()) msg.loc = msg.loc.origin()->parent(); } NullMessenger::NullMessenger() { } void NullMessenger::dispatchMessage(const Message &) { } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/MessageArg.cxx100444 764 764 2362 6604607566 13535 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "MessageArg.h" #include "MessageBuilder.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif MessageArg::MessageArg() { } MessageArg::~MessageArg() { } StringMessageArg::StringMessageArg(const StringC &s) : s_(s) { } MessageArg *StringMessageArg::copy() const { return new StringMessageArg(*this); } void StringMessageArg::append(MessageBuilder &builder) const { builder.appendChars(s_.data(), s_.size()); } NumberMessageArg::NumberMessageArg(unsigned long n) : n_(n) { } MessageArg *NumberMessageArg::copy() const { return new NumberMessageArg(*this); } void NumberMessageArg::append(MessageBuilder &builder) const { builder.appendNumber(n_); } OrdinalMessageArg::OrdinalMessageArg(unsigned long n) : n_(n) { } MessageArg *OrdinalMessageArg::copy() const { return new OrdinalMessageArg(*this); } void OrdinalMessageArg::append(MessageBuilder &builder) const { builder.appendOrdinal(n_); } RTTI_DEF0(OtherMessageArg) OtherMessageArg::OtherMessageArg() { } void OtherMessageArg::append(MessageBuilder &builder) const { builder.appendOther(this); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/MessageEventHandler.cxx100444 764 764 2305 6604607566 15400 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "MessageEventHandler.h" #include "SgmlParser.h" #include "ParserOptions.h" #ifdef __GNUG__ #include "Entity.h" #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif MessageEventHandler::MessageEventHandler(Messenger *messenger, const SgmlParser *parser) : messenger_(messenger), parser_(parser) { } void MessageEventHandler::subdocEntity(SubdocEntityEvent *event) { const SubdocEntity *entity = event->entity(); if (entity && parser_) { SgmlParser::Params params; params.subdocReferenced = 1; params.subdocInheritActiveLinkTypes = 1; params.origin = event->entityOrigin()->copy(); params.parent = parser_; params.sysid = entity->externalId().effectiveSystemId(); params.entityType = SgmlParser::Params::subdoc; SgmlParser parser(params); const SgmlParser *oldParser = parser_; parser_ = &parser; parser.parseAll(*this); parser_ = oldParser; } delete event; } void MessageEventHandler::message(MessageEvent *event) { messenger_->dispatchMessage(event->message()); ErrorCountEventHandler::message(event); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/MessageFormatter.cxx100444 764 764 7433 6606574410 14764 0ustar jjcjjc// Copyright (c) 1994, 1995, 1997 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "MessageFormatter.h" #include "OutputCharStream.h" #include "rtti.h" #include "MessageArg.h" #include "ErrnoMessageArg.h" #include "SearchResultMessageArg.h" #include "MessageFormatterMessages.h" #include #include #ifdef DECLARE_STRERROR extern "C" { char *strerror(int); } #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif MessageFormatter::MessageFormatter() { } void MessageFormatter::formatOpenElements(const Vector &openElementInfo, OutputCharStream &os) { unsigned nOpenElements = openElementInfo.size(); for (unsigned i = 0;; i++) { if (i > 0 && (i == nOpenElements || openElementInfo[i].included)) { // describe last match in previous open element const OpenElementInfo &prevInfo = openElementInfo[i - 1]; if (prevInfo.matchType.size() != 0) { os << " (" << prevInfo.matchType; if (prevInfo.matchIndex != 0) os << '[' << (unsigned long)prevInfo.matchIndex << ']'; os << ')'; } } if (i == nOpenElements) break; const OpenElementInfo &e = openElementInfo[i]; os << ' ' << e.gi; if (i > 0 && !e.included) { unsigned long n = openElementInfo[i - 1].matchIndex; if (n != 0) os << '[' << n << ']'; } } } void MessageFormatter::formatMessage(const MessageFragment &frag, const Vector > &args, OutputCharStream &os) { StringC text; if (!getMessageText(frag, text)) { formatFragment(MessageFormatterMessages::invalidMessage, os); return; } Builder builder(this, os, text.size() == 2); size_t i = 0; while (i < text.size()) { if (text[i] == '%') { i++; if (i >= text.size()) break; if (text[i] >= '1' && text[i] <= '9') { if (unsigned(text[i] - '1') < args.size()) args[text[i] - '1']->append(builder); } else os.put(text[i]); i++; } else { os.put(text[i]); i++; } } } Boolean MessageFormatter::formatFragment(const MessageFragment &frag, OutputCharStream &os) { StringC text; if (!getMessageText(frag, text)) return 0; os << text; return 1; } void MessageFormatter::Builder::appendNumber(unsigned long n) { os() << n; } void MessageFormatter::Builder::appendOrdinal(unsigned long n) { os() << n; switch (n % 10) { case 1: appendFragment(MessageFormatterMessages::ordinal1); break; case 2: appendFragment(MessageFormatterMessages::ordinal2); break; case 3: appendFragment(MessageFormatterMessages::ordinal3); break; default: appendFragment(MessageFormatterMessages::ordinaln); break; } } void MessageFormatter::Builder::appendChars(const Char *p, size_t n) { if (argIsCompleteMessage_) os().write(p, n); else os().put('"').write(p, n).put('"'); } void MessageFormatter::Builder::appendOther(const OtherMessageArg *p) { const ErrnoMessageArg *ea = DYNAMIC_CAST_CONST_PTR(ErrnoMessageArg, p); if (ea) { os() << strerror(ea->errnum()); return; } const SearchResultMessageArg *sr = DYNAMIC_CAST_CONST_PTR(SearchResultMessageArg, p); if (sr) { for (size_t i = 0; i < sr->nTried(); i++) { if (i > 0) os() << ", "; const StringC &f = sr->filename(i); appendChars(f.data(), f.size()); switch (sr->errnum(i)) { default: os() << " ("; os() << strerror(sr->errnum(i)); os() << ")"; #ifdef ENOENT case ENOENT: #endif break; } } return; } appendFragment(MessageFormatterMessages::invalidArgumentType); } void MessageFormatter::Builder::appendFragment(const MessageFragment &frag) { formatter_->formatFragment(frag, os()); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/MessageFormatterMessages.h100444 764 764 3357 6606636234 16105 0ustar jjcjjc// This file was automatically generated from .\MessageFormatterMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct MessageFormatterMessages { // 5100 static const MessageFragment ordinal1; // 5101 static const MessageFragment ordinal2; // 5102 static const MessageFragment ordinal3; // 5103 static const MessageFragment ordinaln; // 5104 static const MessageFragment invalidArgumentType; // 5105 static const MessageFragment invalidMessage; }; const MessageFragment MessageFormatterMessages::ordinal1( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5100 #ifndef SP_NO_MESSAGE_TEXT ,"st" #endif ); const MessageFragment MessageFormatterMessages::ordinal2( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5101 #ifndef SP_NO_MESSAGE_TEXT ,"nd" #endif ); const MessageFragment MessageFormatterMessages::ordinal3( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5102 #ifndef SP_NO_MESSAGE_TEXT ,"rd" #endif ); const MessageFragment MessageFormatterMessages::ordinaln( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5103 #ifndef SP_NO_MESSAGE_TEXT ,"th" #endif ); const MessageFragment MessageFormatterMessages::invalidArgumentType( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5104 #ifndef SP_NO_MESSAGE_TEXT ,"(invalid argument type)" #endif ); const MessageFragment MessageFormatterMessages::invalidMessage( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5105 #ifndef SP_NO_MESSAGE_TEXT ,"(invalid message)" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/MessageFormatterMessages.msg100444 764 764 407 6606574410 16412 0ustar jjcjjc# Copyright (c) 1996 James Clark # See the file COPYING for copying permission. # MessageFormatter message definitions =5100 +ordinal1++st +ordinal2++nd +ordinal3++rd +ordinaln++th +invalidArgumentType++(invalid argument type) +invalidMessage++(invalid message) jade-1.2.1/lib/MessageFormatterMessages.rc100444 764 764 210 6606636234 16223 0ustar jjcjjcSTRINGTABLE BEGIN 5100, "st" 5101, "nd" 5102, "rd" 5103, "th" 5104, "(invalid argument type)" 5105, "(invalid message)" END jade-1.2.1/lib/MessageReporter.cxx100444 764 764 14051 6606574410 14635 0ustar jjcjjc// Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "MessageReporter.h" #include "MessageReporterMessages.h" #include "ExtendEntityManager.h" #include "StorageManager.h" #include "macros.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const OutputCharStream::Newline nl = OutputCharStream::newline; MessageReporter::MessageReporter(OutputCharStream *os) : os_(os), options_(0) { } MessageReporter::~MessageReporter() { delete os_; } void MessageReporter::setMessageStream(OutputCharStream *os) { if (os != os_) { delete os_; os_ = os; } } void MessageReporter::addOption(Option option) { options_ |= option; } void MessageReporter::dispatchMessage(const Message &message) { Offset off; const ExternalInfo *externalInfo = locationHeader(message.loc, off); if (programName_.size()) os() << programName_ << ':'; if (externalInfo) { printLocation(externalInfo, off); os() << ':'; } if (options_ & messageNumbers) os() << (unsigned long)message.type->module() << "." << (unsigned long)message.type->number() << ":"; switch (message.type->severity()) { case MessageType::info: formatFragment(MessageReporterMessages::infoTag, os()); break; case MessageType::warning: formatFragment(MessageReporterMessages::warningTag, os()); break; case MessageType::quantityError: formatFragment(MessageReporterMessages::quantityErrorTag, os()); break; case MessageType::idrefError: formatFragment(MessageReporterMessages::idrefErrorTag, os()); break; case MessageType::error: formatFragment(MessageReporterMessages::errorTag, os()); break; default: CANNOT_HAPPEN(); } os() << ": "; formatMessage(*message.type, message.args, os()); os() << nl; if (!message.auxLoc.origin().isNull()) { Offset off; const ExternalInfo *externalInfo = locationHeader(message.auxLoc, off); if (programName_.size()) os() << programName_ << ':'; if (externalInfo) { printLocation(externalInfo, off); os() << ": "; } formatMessage(message.type->auxFragment(), message.args, os()); os() << nl; } if ((options_ & openElements) && message.openElementInfo.size() > 0) { if (programName_.size()) os() << programName_ << ':'; if (externalInfo) { printLocation(externalInfo, off); os() << ": "; } formatFragment(MessageReporterMessages::openElements, os()); os() << ':'; formatOpenElements(message.openElementInfo, os()); os() << nl; } os().flush(); } // Note this is written so as not to change any reference counts. const ExternalInfo *MessageReporter::locationHeader(const Location &loc, Offset &off) { return locationHeader(loc.origin().pointer(), loc.index(), off); } const ExternalInfo *MessageReporter::locationHeader(const Origin *origin, Index index, Offset &off) { if (!(options_ & openEntities)) { while (origin) { const ExternalInfo *externalInfo = origin->externalInfo(); if (externalInfo) { off = origin->startOffset(index); return externalInfo; } const Location &loc = origin->parent(); if (loc.origin().isNull()) { if (!origin->defLocation(origin->startOffset(index), origin, index)) break; } else { index = loc.index() + origin->refLength(); origin = loc.origin().pointer(); } } } else { Boolean doneHeader = 0; while (origin) { if (origin->entityName() || origin->parent().origin().isNull()) { if (!doneHeader) { Offset parentOff; const Location &parentLoc = origin->parent(); const ExternalInfo *parentInfo = locationHeader(parentLoc.origin().pointer(), parentLoc.index() + origin->refLength(), parentOff); if (parentInfo) { StringC text; if (getMessageText(origin->entityName() ? MessageReporterMessages::inNamedEntity : MessageReporterMessages::inUnnamedEntity, text)) { for (size_t i = 0; i < text.size(); i++) { if (text[i] == '%') { if (i + 1 < text.size()) { i++; if (text[i] == '1') os() << *origin->entityName(); else if (text[i] == '2') printLocation(parentInfo, parentOff); else if (text[i] >= '3' && text[i] <= '9') ; else os().put(text[i]); } } else os().put(text[i]); } os() << nl; } } doneHeader = 1; } off = origin->startOffset(index); const ExternalInfo *externalInfo = origin->externalInfo(); if (externalInfo) return externalInfo; if (!origin->defLocation(off, origin, index)) break; } else { const Location &loc = origin->parent(); index = loc.index() + origin->refLength(); origin = loc.origin().pointer(); } } } return 0; } void MessageReporter::printLocation(const ExternalInfo *externalInfo, Offset off) { if (!externalInfo) { formatFragment(MessageReporterMessages::invalidLocation, os()); return; } StorageObjectLocation soLoc; if (!ExtendEntityManager::externalize(externalInfo, off, soLoc)) { formatFragment(MessageReporterMessages::invalidLocation, os()); return; } if (strcmp(soLoc.storageObjectSpec->storageManager->type(), "OSFILE") != 0) os() << '<' << soLoc.storageObjectSpec->storageManager->type() << '>'; os() << soLoc.actualStorageId; if (soLoc.lineNumber == (unsigned long)-1) { os() << ": "; formatFragment(MessageReporterMessages::offset, os()); os() << soLoc.storageObjectOffset; } else { os() << ':' << soLoc.lineNumber; if (soLoc.columnNumber != 0 && soLoc.columnNumber != (unsigned long)-1) os() << ':' << soLoc.columnNumber - 1; } #if 0 if (soLoc.byteIndex != (unsigned long)-1) os() << ':' << soLoc.byteIndex; #endif } Boolean MessageReporter::getMessageText(const MessageFragment &frag, StringC &str) { const char *p = frag.text(); if (!p) return 0; str.resize(0); for (; *p; p++) str += Char((unsigned char)*p); return 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/MessageReporterMessages.h100444 764 764 5405 6606636234 15740 0ustar jjcjjc// This file was automatically generated from .\MessageReporterMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct MessageReporterMessages { // 5000 static const MessageFragment infoTag; // 5001 static const MessageFragment warningTag; // 5002 static const MessageFragment quantityErrorTag; // 5003 static const MessageFragment idrefErrorTag; // 5004 static const MessageFragment errorTag; // 5005 static const MessageFragment openElements; // 5006 static const MessageFragment inNamedEntity; // 5007 static const MessageFragment inUnnamedEntity; // 5008 static const MessageFragment invalidLocation; // 5009 static const MessageFragment offset; }; const MessageFragment MessageReporterMessages::infoTag( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5000 #ifndef SP_NO_MESSAGE_TEXT ,"I" #endif ); const MessageFragment MessageReporterMessages::warningTag( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5001 #ifndef SP_NO_MESSAGE_TEXT ,"W" #endif ); const MessageFragment MessageReporterMessages::quantityErrorTag( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5002 #ifndef SP_NO_MESSAGE_TEXT ,"Q" #endif ); const MessageFragment MessageReporterMessages::idrefErrorTag( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5003 #ifndef SP_NO_MESSAGE_TEXT ,"X" #endif ); const MessageFragment MessageReporterMessages::errorTag( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5004 #ifndef SP_NO_MESSAGE_TEXT ,"E" #endif ); const MessageFragment MessageReporterMessages::openElements( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5005 #ifndef SP_NO_MESSAGE_TEXT ,"open elements" #endif ); const MessageFragment MessageReporterMessages::inNamedEntity( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5006 #ifndef SP_NO_MESSAGE_TEXT ,"In entity %1 included from %2" #endif ); const MessageFragment MessageReporterMessages::inUnnamedEntity( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5007 #ifndef SP_NO_MESSAGE_TEXT ,"In entity included from %2" #endif ); const MessageFragment MessageReporterMessages::invalidLocation( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5008 #ifndef SP_NO_MESSAGE_TEXT ,"(invalid location)" #endif ); const MessageFragment MessageReporterMessages::offset( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5009 #ifndef SP_NO_MESSAGE_TEXT ,"offset " #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/MessageReporterMessages.msg100444 764 764 572 6606574410 16254 0ustar jjcjjc# Copyright (c) 1996 James Clark # See the file COPYING for copying permission. # MessageReporter message definitions =5000 +infoTag++I +warningTag++W +quantityErrorTag++Q +idrefErrorTag++X +errorTag++E +openElements++open elements +inNamedEntity++In entity %1 included from %2 +inUnnamedEntity++In entity included from %2 +invalidLocation++(invalid location) +offset++offset jade-1.2.1/lib/MessageReporterMessages.rc100444 764 764 346 6606636234 16074 0ustar jjcjjcSTRINGTABLE BEGIN 5000, "I" 5001, "W" 5002, "Q" 5003, "X" 5004, "E" 5005, "open elements" 5006, "In entity %1 included from %2" 5007, "In entity included from %2" 5008, "(invalid location)" 5009, "offset " END jade-1.2.1/lib/MessageTable.cxx100444 764 764 7245 6606574410 14051 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "MessageTable.h" #ifdef SP_NO_MESSAGE_TEXT // Windows only #define WIN32_LEAN_AND_MEAN #define STRICT #include "windows.h" static HINSTANCE dllInstanceHandle = NULL; #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class WinMessageTable : public MessageTable { public: Boolean getText(const MessageFragment &, String &) const; }; Boolean WinMessageTable::getText(const MessageFragment &frag, String &str) const { static const int bufSize = 4096; SP_TCHAR buf[bufSize]; #ifdef SP_WIDE_SYSTEM int len = LoadStringW(frag.module() == MessageFragment::libModule ? dllInstanceHandle : 0, frag.number(), buf, bufSize); if (len == 0 && GetLastError() != 0) { char bufmb[bufSize*2]; len = LoadStringA(frag.module() == MessageFragment::libModule ? dllInstanceHandle : 0, frag.number(), bufmb, bufSize*2); if (len != 0) { len = MultiByteToWideChar(CP_ACP, 0, bufmb, len, buf, bufSize); if (len == 0 && GetLastError() != 0) return 0; } else if (GetLastError() != 0) return 0; } #else /* not SP_WIDE_SYSTEM */ int len = LoadStringA(frag.module() == MessageFragment::libModule ? dllInstanceHandle : 0, frag.number(), buf, bufSize); if (len == 0 && GetLastError() != 0) return 0; #endif /* not SP_WIDE_SYSTEM */ if (len == 0) { str.resize(0); return 1; } str.assign(buf, len); return 1; } static WinMessageTable theMessageTable; #ifdef SP_NAMESPACE } #endif #ifdef SP_USE_DLL extern "C" BOOL WINAPI DllMain(HINSTANCE inst, ULONG reason, LPVOID) { if (reason == DLL_PROCESS_ATTACH) dllInstanceHandle = inst; return TRUE; } #endif #else /* not SP_NO_MESSAGE_TEXT */ #ifdef SP_HAVE_GETTEXT extern "C" { extern char *dgettext(const char *, const char *); extern char *gettext(const char *); extern char *textdomain(const char *); extern char *bindtextdomain(const char *, const char *); } #include #ifndef MESSAGE_DOMAIN #define MESSAGE_DOMAIN "sp" #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class GettextMessageTable : public MessageTable { public: GettextMessageTable(); Boolean getText(const MessageFragment &, String &) const; }; GettextMessageTable::GettextMessageTable() { const char *dir = getenv("TEXTDOMAINDIR"); if (dir) bindtextdomain(MESSAGE_DOMAIN, dir); } Boolean GettextMessageTable::getText(const MessageFragment &frag, String &str) const { const char *s = frag.text(); if (!s) return 0; s = dgettext(MESSAGE_DOMAIN, s); if (!s) return 0; str.assign(s, strlen(s)); return 1; } static GettextMessageTable theMessageTable; #ifdef SP_NAMESPACE } #endif #else /* not SP_HAVE_GETTEXT */ #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class DefaultMessageTable : public MessageTable { public: Boolean getText(const MessageFragment &, String &) const; }; Boolean DefaultMessageTable::getText(const MessageFragment &frag, String &str) const { if (!frag.text()) return 0; str.resize(0); for (const char *s = frag.text(); *s; s++) str += SP_TCHAR((unsigned char)*s); return 1; } static DefaultMessageTable theMessageTable; #ifdef SP_NAMESPACE } #endif #endif /* not SP_HAVE_GETTEXT */ #endif /* not SP_NO_MESSAGE_TEXT */ #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const MessageTable *MessageTable::instance() { return &theMessageTable; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ModeInfo.cxx100444 764 764 27654 6606574410 13243 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include #include #include "macros.h" #include "types.h" #include "Syntax.h" #include "token.h" #include "Sd.h" #include "Mode.h" #include "ModeInfo.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const unsigned REQUIRE_EMPTY_STARTTAG = 01; const unsigned REQUIRE_EMPTY_ENDTAG = 02; const unsigned REQUIRE_CONCUR = 04; const unsigned REQUIRE_LINK_OR_CONCUR = 010; const unsigned REQUIRE_NOT_KEEPRSRE = 020; const unsigned REQUIRE_FLAGS = 037; #define ULONG_BIT (CHAR_BIT * sizeof(unsigned long)) struct PackedTokenInfo { Token token; // token to be returned unsigned flags; unsigned char contents[2]; // components of the delimiter or d-i-c unsigned char modes[25]; // list of modes in which it is recognized, // terminated by EOM // a bit vector computed from modes (lo to hi) unsigned long modeBits[(nModes + ULONG_BIT - 1)/ULONG_BIT]; void computeModeBits(); Boolean inMode(Mode mode) const; }; const unsigned char SET = Syntax::nDelimGeneral; const unsigned char FUNCTION = SET + Syntax::nSet; const unsigned char NOTHING = UCHAR_MAX; const unsigned char EOM = 255; // end of modes static PackedTokenInfo tokenTable[] = { // Delimiters and delimiters in context { tokenAnd, 0, { Syntax::dAND, NOTHING }, { grpMode, EOM }}, { tokenCom, 0, { Syntax::dCOM, NOTHING }, { mdMode, mdMinusMode, mdPeroMode, sdMode, comMode, sdcomMode, EOM }}, { tokenCroDigit, 0, { Syntax::dCRO, SET + Syntax::digit }, { econMode, mconMode, rcconMode, econnetMode, mconnetMode, rcconnetMode, rcconeMode, plitMode, plitaMode, pliteMode, sdplitMode, sdplitaMode, alitMode, alitaMode, aliteMode, talitMode, talitaMode, taliteMode, rcmsMode, EOM }}, { tokenCroNameStart, 0, { Syntax::dCRO, SET + Syntax::nameStart }, { econMode, mconMode, rcconMode, econnetMode, mconnetMode, rcconnetMode, rcconeMode, plitMode, plitaMode, pliteMode, sdplitMode, sdplitaMode, alitMode, alitaMode, aliteMode, talitMode, talitaMode, taliteMode, rcmsMode, EOM }}, { tokenDsc, 0, { Syntax::dDSC, NOTHING }, { /* mdMode, */ asMode, dsMode, EOM }}, { tokenDso, 0, { Syntax::dDSO, NOTHING }, { mdMode, EOM }}, { tokenDtgc, 0, { Syntax::dDTGC, NOTHING }, { grpMode, EOM }}, { tokenDtgo, 0, { Syntax::dDTGO, NOTHING }, { grpMode, EOM }}, { tokenEroNameStart, 0, { Syntax::dERO, SET + Syntax::nameStart }, { econMode, mconMode, rcconMode, econnetMode, mconnetMode, rcconnetMode, rcconeMode, alitMode, alitaMode, aliteMode, talitMode, talitaMode, taliteMode, rcmsMode, EOM }}, { tokenEroGrpo, REQUIRE_LINK_OR_CONCUR, { Syntax::dERO, Syntax::dGRPO }, { econMode, mconMode, rcconMode, econnetMode, mconnetMode, rcconnetMode, rcconeMode, alitMode, alitaMode, aliteMode, talitMode, talitaMode, taliteMode, rcmsMode, EOM }}, { tokenEtago, 0, { Syntax::dETAGO, NOTHING }, { tagMode, EOM }}, { tokenEtagoNameStart, 0, { Syntax::dETAGO, SET + Syntax::nameStart }, { econMode, mconMode, cconMode, rcconMode, econnetMode, mconnetMode, cconnetMode, rcconnetMode, EOM }}, { tokenEtagoTagc, REQUIRE_EMPTY_ENDTAG, { Syntax::dETAGO, Syntax::dTAGC }, { econMode, mconMode, cconMode, rcconMode, econnetMode, mconnetMode, cconnetMode, rcconnetMode, EOM }}, { tokenEtagoGrpo, REQUIRE_CONCUR, { Syntax::dETAGO, Syntax::dGRPO }, { econMode, mconMode, cconMode, rcconMode, econnetMode, mconnetMode, cconnetMode, rcconnetMode, EOM }}, { tokenGrpc, 0, { Syntax::dGRPC, NOTHING }, { grpMode, EOM }}, { tokenGrpo, 0, { Syntax::dGRPO, NOTHING }, { mdMode, mdMinusMode, grpMode, EOM }}, { tokenHcroHexDigit, 0, { Syntax::dHCRO, SET + Syntax::hexDigit }, { econMode, mconMode, rcconMode, econnetMode, mconnetMode, rcconnetMode, rcconeMode, plitMode, plitaMode, pliteMode, alitMode, alitaMode, aliteMode, talitMode, talitaMode, taliteMode, rcmsMode, EOM }}, { tokenLit, 0, { Syntax::dLIT, NOTHING }, { alitMode, talitMode, plitMode, sdplitMode, mlitMode, slitMode, sdslitMode, asMode, tagMode, mdMode, sdMode, grpMode, EOM }}, { tokenLita, 0, { Syntax::dLITA, NOTHING }, { alitaMode, talitaMode, plitaMode, sdplitaMode, mlitaMode, slitaMode, sdslitaMode, asMode, tagMode, mdMode, sdMode, grpMode, EOM }}, { tokenMdc, 0, { Syntax::dMDC, NOTHING }, { mdMode, sdMode, EOM }}, { tokenMdoNameStart, 0, { Syntax::dMDO, SET + Syntax::nameStart }, { econMode, mconMode, econnetMode, mconnetMode, proMode, dsMode, dsiMode, EOM }}, { tokenMdoMdc, 0, { Syntax::dMDO, Syntax::dMDC }, { econMode, mconMode, econnetMode, mconnetMode, proMode, dsMode, dsiMode, EOM }}, { tokenMdoCom, 0, { Syntax::dMDO, Syntax::dCOM }, { econMode, mconMode, econnetMode, mconnetMode, proMode, dsMode, dsiMode, EOM }}, { tokenMdoDso, 0, { Syntax::dMDO, Syntax::dDSO }, { econMode, mconMode, econnetMode, mconnetMode, dsMode, dsiMode, imsMode, EOM }}, { tokenMinus, 0, { Syntax::dMINUS, NOTHING }, { mdMinusMode, sdMode, EOM }}, { tokenMinusGrpo, 0, { Syntax::dMINUS, Syntax::dGRPO }, { mdMode, EOM }}, { tokenMscMdc, 0, { Syntax::dMSC, Syntax::dMDC}, { imsMode, cmsMode, rcmsMode, econMode, mconMode, econnetMode, mconnetMode, dsMode, dsiMode, EOM }}, { tokenNestc, 0, { Syntax::dNESTC, NOTHING }, { tagMode, EOM }}, { tokenNet, 0, { Syntax::dNET, NOTHING }, { econnetMode, mconnetMode, cconnetMode, rcconnetMode, EOM }}, { tokenOpt, 0, { Syntax::dOPT, NOTHING }, { grpMode, grpsufMode, EOM }}, { tokenOr, 0, { Syntax::dOR, NOTHING }, { grpMode, EOM }}, { tokenPero, 0, { Syntax::dPERO, NOTHING }, { mdPeroMode, EOM }}, { tokenPeroNameStart, 0, { Syntax::dPERO, SET + Syntax::nameStart }, { mdMode, mdMinusMode, mdPeroMode, dsMode, dsiMode, grpMode, plitMode, plitaMode, pliteMode, sdplitMode, sdplitaMode, EOM }}, { tokenPeroGrpo, REQUIRE_LINK_OR_CONCUR, { Syntax::dPERO, Syntax::dGRPO }, { mdMode, mdMinusMode, mdPeroMode, dsMode, dsiMode, grpMode, plitMode, plitaMode, pliteMode, sdplitMode, sdplitaMode, EOM }}, { tokenPic, 0, { Syntax::dPIC, NOTHING }, { piMode, EOM }}, { tokenPio, 0, { Syntax::dPIO, NOTHING }, { econMode, mconMode, econnetMode, mconnetMode, proMode, dsMode, dsiMode, EOM }}, { tokenPlus, 0, { Syntax::dPLUS, NOTHING }, { grpMode, grpsufMode, EOM }}, { tokenPlusGrpo, 0, { Syntax::dPLUS, Syntax::dGRPO }, { mdMode, EOM }}, { tokenRefc, 0, { Syntax::dREFC, NOTHING }, { refMode, EOM }}, { tokenRep, 0, { Syntax::dREP, NOTHING }, { grpMode, grpsufMode, EOM }}, { tokenRni, 0, { Syntax::dRNI, NOTHING }, { grpMode, mdMode, mdPeroMode, EOM }}, { tokenSeq, 0, { Syntax::dSEQ, NOTHING }, { grpMode, EOM }}, { tokenStago, 0, { Syntax::dSTAGO, NOTHING }, { tagMode, EOM }}, { tokenStagoNameStart, 0, { Syntax::dSTAGO, SET + Syntax::nameStart }, { econMode, mconMode, econnetMode, mconnetMode, EOM }}, { tokenStagoTagc, REQUIRE_EMPTY_STARTTAG, { Syntax::dSTAGO, Syntax::dTAGC }, { econMode, mconMode, econnetMode, mconnetMode, EOM }}, { tokenStagoGrpo, REQUIRE_CONCUR, { Syntax::dSTAGO, Syntax::dGRPO }, { econMode, mconMode, econnetMode, mconnetMode, EOM }}, { tokenTagc, 0, { Syntax::dTAGC, NOTHING }, { tagMode, EOM }}, { tokenVi, 0, { Syntax::dVI, NOTHING }, { tagMode, asMode, EOM }}, // Other tokens { tokenRe, REQUIRE_NOT_KEEPRSRE, { FUNCTION + Syntax::fRE, NOTHING }, { mconMode, cconMode, rcconMode, mconnetMode, cconnetMode, rcconnetMode, rcconeMode, cmsMode, rcmsMode, EOM }}, { tokenRe, 0, { FUNCTION + Syntax::fRE, NOTHING }, { refMode, mlitMode, mlitaMode, alitMode, alitaMode, aliteMode, talitMode, talitaMode, taliteMode, EOM }}, { tokenRs, REQUIRE_NOT_KEEPRSRE, { FUNCTION + Syntax::fRS, NOTHING }, { mconMode, cconMode, rcconMode, mconnetMode, cconnetMode, rcconnetMode, rcconeMode, cmsMode, rcmsMode, EOM }}, { tokenRs, 0, { FUNCTION + Syntax::fRS, NOTHING }, { mlitMode, mlitaMode, alitMode, alitaMode, aliteMode, talitMode, talitaMode, taliteMode, EOM }}, { tokenSpace, 0, { FUNCTION + Syntax::fSPACE, NOTHING }, { mlitMode, mlitaMode, talitMode, talitaMode, taliteMode, EOM }}, { tokenSepchar, 0, { SET + Syntax::sepchar, NOTHING }, { alitMode, alitaMode, aliteMode, talitMode, talitaMode, taliteMode, EOM }}, { tokenS, 0, { SET + Syntax::s, NOTHING }, { econMode, econnetMode, grpMode, mdMode, mdMinusMode, mdPeroMode, sdMode, proMode, dsMode, dsiMode, asMode, tagMode, EOM }}, { tokenNameStart, 0, { SET + Syntax::nameStart, NOTHING }, { grpMode, mdMode, mdMinusMode, mdPeroMode, sdMode, asMode, tagMode, EOM }}, { tokenDigit, 0, { SET + Syntax::digit, NOTHING }, { grpMode, mdMode, mdMinusMode, sdMode, asMode, tagMode, EOM }}, { tokenLcUcNmchar, 0, { SET + Syntax::nmchar, NOTHING }, { grpMode, mdMode, asMode, tagMode, EOM }}, { tokenIgnoredChar, 0, { SET + Syntax::sgmlChar, NOTHING }, { imsMode, EOM }}, { tokenChar, 0, { SET + Syntax::sgmlChar, NOTHING }, // Note that character data is recognized in element content, // and will cause #PCDATA to begin. { alitMode, alitaMode, aliteMode, talitMode, talitaMode, taliteMode, comMode, piMode, cmsMode, rcmsMode, plitMode, plitaMode, pliteMode, slitMode, slitaMode, econMode, mconMode, cconMode, rcconMode, econnetMode, mconnetMode, cconnetMode, rcconnetMode, rcconeMode, EOM }}, { tokenChar, 0, { SET + Syntax::minimumData, NOTHING }, { mlitMode, mlitaMode, EOM }}, { tokenChar, 0, { SET + Syntax::significant, NOTHING }, { sdplitMode, sdplitaMode, sdslitMode, sdslitaMode, sdcomMode, EOM }}, }; inline Boolean PackedTokenInfo::inMode(Mode mode) const { return ((modeBits[unsigned(mode) / ULONG_BIT] & ((unsigned long)1 << (unsigned(mode) % ULONG_BIT))) != 0); } void PackedTokenInfo::computeModeBits() { for (unsigned char *p = modes; *p != EOM; p++) modeBits[*p / ULONG_BIT] |= (unsigned long)1 << (*p % ULONG_BIT); } struct TokenTableIniter { TokenTableIniter(); }; static TokenTableIniter tokenTableIniter; TokenTableIniter::TokenTableIniter() { for (size_t i = 0; i < SIZEOF(tokenTable); i++) tokenTable[i].computeModeBits(); } ModeInfo::ModeInfo(Mode mode, const Sd &sd) : mode_(mode), p_(tokenTable), count_(SIZEOF(tokenTable)), missingRequirements_(REQUIRE_FLAGS) { if (sd.startTagEmpty()) missingRequirements_ &= ~REQUIRE_EMPTY_STARTTAG; if (sd.endTagEmpty()) missingRequirements_ &= ~REQUIRE_EMPTY_ENDTAG; if (sd.concur()) missingRequirements_ &= ~(REQUIRE_CONCUR|REQUIRE_LINK_OR_CONCUR); if (sd.link()) missingRequirements_ &= ~REQUIRE_LINK_OR_CONCUR; if (!sd.keeprsre()) missingRequirements_ &= ~REQUIRE_NOT_KEEPRSRE; } Boolean ModeInfo::nextToken(TokenInfo *t) { for (; count_ > 0; --count_, ++p_) if (p_->inMode(mode_) && (p_->flags & missingRequirements_) == 0) { t->token = p_->token; t->priority = Priority::delim; const unsigned char *contents = p_->contents; --count_; ++p_; unsigned char c = contents[0]; if (c < SET) t->delim1 = Syntax::DelimGeneral(c); else if (c < SET + Syntax::nSet) { t->set = Syntax::Set(c - SET); t->type = TokenInfo::setType; switch (t->set) { case Syntax::sepchar: case Syntax::s: case Syntax::blank: t->priority = Priority::function; break; default: t->priority = Priority::data; break; } return 1; } else { t->function = Syntax::StandardFunction(c - FUNCTION); t->priority = Priority::function; t->type = TokenInfo::functionType; return 1; } c = contents[1]; if (c == NOTHING) { t->type = TokenInfo::delimType; return 1; } if (c < SET) { t->delim2 = Syntax::DelimGeneral(c); t->type = TokenInfo::delimDelimType; return 1; } if (c < SET + Syntax::nSet) { t->set = Syntax::Set(c - SET); t->type = TokenInfo::delimSetType; return 1; } abort(); } return 0; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ModeInfo.h100444 764 764 2116 6606574410 12632 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef ModeInfo_INCLUDED #define ModeInfo_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include #include "Boolean.h" #include "Syntax.h" #include "Mode.h" #include "Priority.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct TokenInfo { enum Type { delimType, setType, functionType, delimDelimType, delimSetType }; Type type; Priority::Type priority; Token token; Syntax::DelimGeneral delim1; union { Syntax::DelimGeneral delim2; Syntax::Set set; Syntax::StandardFunction function; }; }; class Sd; struct PackedTokenInfo; class ModeInfo { public: ModeInfo(Mode mode, const Sd &sd); Boolean nextToken(TokenInfo *); Boolean includesShortref() const; private: Mode mode_; const PackedTokenInfo *p_; // points to next size_t count_; unsigned missingRequirements_; }; inline Boolean ModeInfo::includesShortref() const { return mode_ >= minShortrefMode; } #ifdef SP_NAMESPACE } #endif #endif /* not ModeInfo_INCLUDED */ jade-1.2.1/lib/Mutex.h100444 764 764 4134 6606574410 12236 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file copying.txt for copying permission. #ifndef Mutex_INCLUDED #define Mutex_INCLUDED 1 #ifdef SP_MUTEX_WIN32 #define SP_MUTEX #define STRICT 1 #include // appears to turn these warnings back on #ifdef _MSC_VER #pragma warning ( disable : 4237 ) #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Mutex { public: class Lock { public: Lock(Mutex *mp) : mp_(mp) { if (mp) ::EnterCriticalSection(&mp->cs_); } ~Lock() { if (mp_) ::LeaveCriticalSection(&mp_->cs_); } private: Mutex *mp_; }; Mutex() { ::InitializeCriticalSection(&cs_); } ~Mutex() { ::DeleteCriticalSection(&cs_); } friend class Lock; private: CRITICAL_SECTION cs_; }; #ifdef SP_NAMESPACE } #endif #endif /* SP_MUTEX_WIN32 */ #ifdef SP_MUTEX_MACH #define SP_MUTEX #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MUTEX_MACH */ #ifdef SP_MUTEX_PTHREADS // Support for pthreads on Linux. // Written by Matthias Clasen #define SP_MUTEX #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif extern "C" { #include } class Mutex { public: class Lock { // Lock serves to automatically unlock Mutex, however control leaves // a block. Don't let any "warning: unused variable `class Mutex::Lock lock'" // mislead you; hopefully your compiler won't optimise this away... public: Lock(Mutex *mp) : mp_(mp) { if (mp_) pthread_mutex_lock (&mp_->cs_); } ~Lock() { if (mp_) pthread_mutex_unlock(&mp_->cs_); } private: Mutex *mp_; }; Mutex() { pthread_mutex_init (&cs_, NULL); } ~Mutex() { pthread_mutex_destroy (&cs_); } friend class Lock; private: pthread_mutex_t cs_; }; #ifdef SP_NAMESPACE } #endif #endif /* SP_MUTEX_PTHREADS */ #ifndef SP_MUTEX #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Mutex { public: class Lock { public: Lock(Mutex *) { } }; Mutex() { } }; #ifdef SP_NAMESPACE } #endif #endif /* not SP_MUTEX */ #endif /* not Mutex_INCLUDED */ jade-1.2.1/lib/NameToken.h100444 764 764 572 6606574410 12777 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef NameToken_INCLUDED #define NameToken_INCLUDED 1 #include "Location.h" #include "StringC.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct NameToken { StringC name; StringC origName; Location loc; }; #ifdef SP_NAMESPACE } #endif #endif /* not NameToken_INCLUDED */ jade-1.2.1/lib/Notation.cxx100444 764 764 2460 6606574410 13302 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Notation.h" #include "ParserState.h" #include "Sd.h" #include "Syntax.h" #include "MessageArg.h" #include "ParserMessages.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Notation::Notation(const StringC &name, const ConstPtr > &dtdName, Boolean dtdIsBase) : EntityDecl(name, notation, ndata, Location()), defined_(0) { setDeclIn(dtdName, dtdIsBase); } void Notation::setExternalId(const ExternalId &id, const Location &defLocation) { externalId_ = id; defined_ = 1; setDefLocation(defLocation); } void Notation::generateSystemId(ParserState &parser) { StringC str; if (parser.entityCatalog().lookup(*this, parser.syntax(), parser.sd().docCharset(), parser.messenger(), str)) externalId_.setEffectiveSystem(str); else if (parser.options().warnNotationSystemId) parser.message(ParserMessages::cannotGenerateSystemIdNotation, StringMessageArg(name())); } const StringC *Notation::systemIdPointer() const { return externalId_.systemIdString(); } const StringC *Notation::publicIdPointer() const { return externalId_.publicIdString(); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/NotationStorage.cxx100444 764 764 1242 6606574410 14624 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "NotationStorage.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif NotationStorageManager::NotationStorageManager(const char *type) : type_(type) { } Boolean NotationStorageManager::inheritable() const { return 0; } const char *NotationStorageManager::type() const { return type_; } StorageObject *NotationStorageManager::makeStorageObject(const StringC &, const StringC &, Boolean, Boolean, Messenger &, StringC &) { return 0; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/NumericCharRefOrigin.cxx100444 764 764 1352 6606574410 15513 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "NumericCharRefOrigin.h" #include "Markup.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif NumericCharRefOrigin::NumericCharRefOrigin(const Location &start, Index refLength, Owner &markup) : start_(start), refLength_(refLength) { markup.swap(markup_); } const Location &NumericCharRefOrigin::parent() const { return start_; } Index NumericCharRefOrigin::refLength() const { return refLength_; } Boolean NumericCharRefOrigin::isNumericCharRef(const Markup *&markup) const { markup = markup_.pointer(); return 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/NumericCharRefOrigin.h100444 764 764 1420 6606574410 15134 0ustar jjcjjc#ifndef NumericCharRefOrigin_INCLUDED #define NumericCharRefOrigin_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Location.h" #include "Markup.h" #include "Owner.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class NumericCharRefOrigin : public Origin { public: NumericCharRefOrigin(const Location &start, Index endIndex, Owner &markup); const Location &parent() const; Index refLength() const; Boolean isNumericCharRef(const Markup *&) const; private: NumericCharRefOrigin(const NumericCharRefOrigin &); // undefined void operator=(const NumericCharRefOrigin &); // undefined Location start_; Index refLength_; Owner markup_; }; #ifdef SP_NAMESPACE } #endif #endif /* not NumericCharRefOrigin_INCLUDED */ jade-1.2.1/lib/OffsetOrderedList.cxx100444 764 764 6506 6606574410 15103 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "OffsetOrderedList.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif OffsetOrderedList::OffsetOrderedList() : blockUsed_(OffsetOrderedListBlock::size) { } void OffsetOrderedList::append(Offset offset) { // At any position in the list there's a current offset. // The offset is initially zero. // A byte of 255 says add 255 to the current offset. // A byte B < 255, says that there's an item in the list whose // offset is the current offset + B, and that B + 1 should be // added to the current offset. Offset curOffset = blocks_.size() > 0 ? blocks_.back()->offset : 0; ASSERT(offset >= curOffset); Offset count = offset - curOffset; while (count >= 255) { addByte(255); count -= 255; } addByte(count); } void OffsetOrderedList::addByte(unsigned char b) { if (blockUsed_ >= OffsetOrderedListBlock::size) { Mutex::Lock lock(&mutex_); blocks_.resize(blocks_.size() + 1); Owner &last = blocks_.back(); last = new OffsetOrderedListBlock; if (blocks_.size() == 1) { last->nextIndex = 0; last->offset = 0; } else { OffsetOrderedListBlock &lastButOne = *blocks_[blocks_.size() - 2]; last->nextIndex = lastButOne.nextIndex; last->offset = lastButOne.offset; } blockUsed_ = 0; } blocks_.back()->bytes[blockUsed_] = b; if (b == 255) blocks_.back()->offset += 255; else { blocks_.back()->offset += b + 1; blocks_.back()->nextIndex += 1; } blockUsed_++; } // Find the last offset <= off. Boolean OffsetOrderedList::findPreceding(Offset off, size_t &foundIndex, Offset &foundOffset) const { Mutex::Lock lock(&((OffsetOrderedList *)this)->mutex_); // Invariant: // blocks with index < i have offset <= off // blocks with index >= lim have offset > off size_t i = 0; size_t lim = blocks_.size(); // Most commonly we'll want to know the about positions near the end, // so optimize this case. if (lim > 0 && blocks_[lim - 1]->offset <= off) i = lim; else if (lim > 1 && blocks_[lim - 2]->offset <= off) i = lim - 1; else { // Do a binary search. while (i < lim) { size_t mid = i + (lim - i)/2; if (blocks_[mid]->offset > off) lim = mid; else i = mid + 1; } } if (i == blocks_.size()) { if (i == 0) return 0; foundIndex = blocks_.back()->nextIndex - 1; foundOffset = blocks_.back()->offset - 1; return 1; } // Note that an item with offset X can only occur in a block with offset > X // i is now the first block with offset > off Offset curOff = blocks_[i]->offset; size_t curIndex = blocks_[i]->nextIndex; const unsigned char *bytes = blocks_[i]->bytes; int j = (i == blocks_.size() - 1 ? blockUsed_ : int(OffsetOrderedListBlock::size)); for (;;) { j--; if (bytes[j] != 255) { curIndex -= 1; curOff -= 1; if (curOff <= off) break; } curOff -= bytes[j]; if (j == 0) { if (i == 0) return 0; i--; j = OffsetOrderedListBlock::size; curOff = blocks_[i]->offset; curIndex = blocks_[i]->nextIndex; bytes = blocks_[i]->bytes; } } foundIndex = curIndex; foundOffset = curOff; return 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/OffsetOrderedList.h100444 764 764 2426 6606574410 14525 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef OffsetOrderedList_INCLUDED #define OffsetOrderedList_INCLUDED 1 #include "types.h" #include "Owner.h" #include "NCVector.h" #include "Boolean.h" #include "Mutex.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct OffsetOrderedListBlock { Offset offset; // next Offset size_t nextIndex; // index of first item in next block enum { size = 200 }; unsigned char bytes[size]; }; // This is an ordered list of Offsets with no duplicates. class OffsetOrderedList { public: OffsetOrderedList(); // off must be > the last offset added. void append(Offset off); // Find the last offset in the list <= off. Boolean findPreceding(Offset off, size_t &foundIndex, Offset &foundOffset) const; size_t size() const; private: OffsetOrderedList(const OffsetOrderedList &); // undefined void operator=(const OffsetOrderedList &); // undefined void addByte(unsigned char b); // bytes used in current block int blockUsed_; NCVector > blocks_; Mutex mutex_; }; inline size_t OffsetOrderedList::size() const { return blocks_.size() == 0 ? 0 : blocks_.back()->nextIndex; } #ifdef SP_NAMESPACE } #endif #endif /* not OffsetOrderedList_INCLUDED */ jade-1.2.1/lib/OpenElement.cxx100444 764 764 1206 6606574410 13717 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "OpenElement.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif OpenElement::OpenElement(const ElementType *type, Boolean net, Boolean included, const ShortReferenceMap *map, const Location &startLocation) : elementType_(type), netEnabling_(net), included_(included), matchState_(type->definition()->compiledModelGroup()), map_(map), startLocation_(startLocation), declaredContent_(type->definition()->declaredContent()) { } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/OutputByteStream.cxx100444 764 764 11135 6606574410 15026 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "OutputByteStream.h" #include #ifdef SP_INCLUDE_IO_H #include // for open, fstat, lseek, read prototypes #endif #ifdef SP_INCLUDE_UNISTD_H #include #endif #ifdef SP_INCLUDE_OSFCN_H #include #endif #include #include #include #include #ifdef SP_WIDE_SYSTEM #define STRICT #include #endif #ifndef O_CREAT #ifdef _O_CREAT #define O_CREAT _O_CREAT #endif #endif #ifndef O_WRONLY #ifdef _O_WRONLY #define O_WRONLY _O_WRONLY #endif #endif #ifndef O_TRUNC #ifdef _O_TRUNC #define O_TRUNC _O_TRUNC #endif #endif #ifndef O_BINARY #ifdef _O_BINARY #define O_BINARY _O_BINARY #else #define O_BINARY 0 #endif #endif #ifndef S_IRUSR #if defined(S_IREAD) #define S_IRUSR S_IREAD #elif defined(_S_IREAD) #define S_IRUSR _S_IREAD #else #define S_IRUSR 0400 #endif #endif #ifndef S_IWUSR #if defined(S_IWRITE) #define S_IWUSR S_IWRITE #elif defined(_S_IWRITE) #define S_IWUSR _S_IWRITE #else #define S_IWUSR 0200 #endif #endif #ifndef S_IRGRP #if defined(S_IREAD) #define S_IRGRP S_IREAD #elif defined(_S_IREAD) #define S_IRGRP _S_IREAD #else #define S_IRGRP 0040 #endif #endif #ifndef S_IWGRP #if defined(S_IWRITE) #define S_IWGRP S_IWRITE #elif defined(_S_IWRITE) #define S_IWGRP _S_IWRITE #else #define S_IWGRP 0020 #endif #endif #ifndef S_IROTH #if defined(S_IREAD) #define S_IROTH S_IREAD #elif defined(_S_IREAD) #define S_IROTH _S_IREAD #else #define S_IROTH 0004 #endif #endif #ifndef S_IWOTH #if defined(S_IWRITE) #define S_IWOTH S_IWRITE #elif defined(_S_IWRITE) #define S_IWOTH _S_IWRITE #else #define S_IWOTH 0002 #endif #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const int openFlags = O_CREAT|O_WRONLY|O_TRUNC|O_BINARY; const int protMode = S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH; const int bufSize = 8192; OutputByteStream::OutputByteStream() : ptr_(0), end_(0) { } OutputByteStream::~OutputByteStream() { } void OutputByteStream::sputn(const char *s, size_t n) { for (; n > 0; n--, s++) sputc(*s); } OutputByteStream &OutputByteStream::operator<<(long n) { char buf[32]; sprintf(buf, "%ld", n); return *this << buf; } OutputByteStream &OutputByteStream::operator<<(unsigned long n) { char buf[32]; sprintf(buf, "%lu", n); return *this << buf; } OutputByteStream &OutputByteStream::operator<<(const char *s) { while (*s) sputc(*s++); return *this; } StrOutputByteStream::StrOutputByteStream() { } void StrOutputByteStream::extractString(String &str) { if (ptr_) buf_.resize(ptr_ - &buf_[0]); str.resize(0); buf_.swap(str); ptr_ = end_ = 0; } void StrOutputByteStream::flush() { } void StrOutputByteStream::flushBuf(char c) { if (!ptr_) { buf_.resize(16); ptr_ = &buf_[0]; } else { size_t i = ptr_ - &buf_[0]; buf_.resize(buf_.size()*2); ptr_ = &buf_[0] + i; } end_ = &buf_[0] + buf_.size(); *ptr_++ = c; } FileOutputByteStream::FileOutputByteStream() : fd_(-1) { } FileOutputByteStream::FileOutputByteStream(int fd, Boolean closeFd) : fd_(-1) { attach(fd, closeFd); } FileOutputByteStream::~FileOutputByteStream() { close(); } #ifdef SP_WIDE_SYSTEM Boolean FileOutputByteStream::open(const wchar_t *filename) { int fd = _wopen(filename, openFlags, protMode); if (fd >= 0) return attach(fd); // _wopen will always fail on Windows 95 String buf; int len = WideCharToMultiByte(CP_ACP, 0, filename, -1, 0, 0, 0, 0); buf.resize(len + 1); WideCharToMultiByte(CP_ACP, 0, filename, -1, buf.begin(), len, 0, 0); buf[len] = '\0'; return attach(::open(buf.data(), openFlags, protMode)); } #else /* not SP_WIDE_SYSTEM */ Boolean FileOutputByteStream::open(const char *filename) { return attach(::open(filename, openFlags, protMode)); } #endif /* not SP_WIDE_SYSTEM */ Boolean FileOutputByteStream::attach(int fd, Boolean closeFd) { close(); fd_ = fd; closeFd_ = closeFd; return fd_ >= 0; } Boolean FileOutputByteStream::close() { if (fd_ < 0) return 0; flush(); int fd = fd_; fd_ = -1; if (!closeFd_) return 1; return ::close(fd) == 0; } void FileOutputByteStream::flush() { if (!buf_.size()) { if (fd_ < 0) return; buf_.resize(bufSize); ptr_ = &buf_[0]; end_ = ptr_ + buf_.size(); } size_t n = ptr_ - &buf_[0]; const char *s = buf_.data(); while (n > 0) { int nw = ::write(fd_, s, n); if (nw < 0) break; n -= nw; s += nw; } ptr_ = &buf_[0]; } void FileOutputByteStream::flushBuf(char c) { flush(); *ptr_++ = c; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/OutputCharStream.cxx100444 764 764 11521 6606574410 14777 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "OutputCharStream.h" #include "CodingSystem.h" #include "macros.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif OutputCharStream::OutputCharStream() : ptr_(0), end_(0) { } OutputCharStream::~OutputCharStream() { } void OutputCharStream::setEscaper(Escaper) { } OutputCharStream &OutputCharStream::write(const Char *s, size_t n) { for (;;) { size_t spare = end_ - ptr_; if (n <= spare) { memcpy(ptr_, s, n*sizeof(Char)); ptr_ += n; break; } if (spare > 0) { memcpy(ptr_, s, spare*sizeof(Char)); ptr_ += spare; s += spare; n -= spare; } n--; flushBuf(*s++); } return *this; } OutputCharStream &OutputCharStream::operator<<(const char *s) { while (*s) put(*s++); return *this; } // FIXME Avoid stdio OutputCharStream &OutputCharStream::operator<<(unsigned long n) { char buf[sizeof(unsigned long)*3 + 1]; sprintf(buf, "%lu", n); return *this << buf; } OutputCharStream &OutputCharStream::operator<<(int n) { char buf[sizeof(int)*3 + 2]; sprintf(buf, "%d", n); return *this << buf; } EncodeOutputCharStream::EncodeOutputCharStream() : buf_(0), byteStream_(0), escaper_(0) { } EncodeOutputCharStream::EncodeOutputCharStream(OutputByteStream *byteStream, const OutputCodingSystem *codingSystem) : buf_(0), byteStream_(byteStream), escaper_(0), ownedEncoder_(codingSystem->makeEncoder()) { encoder_ = ownedEncoder_.pointer(); encoder_->setUnencodableHandler(this); allocBuf(codingSystem->fixedBytesPerChar()); encoder_->startFile(byteStream_); } EncodeOutputCharStream::EncodeOutputCharStream(OutputByteStream *byteStream, Encoder *encoder) : buf_(0), byteStream_(byteStream), escaper_(0), encoder_(encoder) { allocBuf(0); } EncodeOutputCharStream::~EncodeOutputCharStream() { if (byteStream_) flush(); delete [] buf_; } void EncodeOutputCharStream::open(OutputByteStream *byteStream, const OutputCodingSystem *codingSystem) { if (byteStream_) flush(); byteStream_ = byteStream; ownedEncoder_ = codingSystem->makeEncoder(); encoder_ = ownedEncoder_.pointer(); encoder_->setUnencodableHandler(this); delete [] buf_; buf_ = 0; ptr_ = end_ = buf_; allocBuf(codingSystem->fixedBytesPerChar()); encoder_->startFile(byteStream_); } void EncodeOutputCharStream::flush() { if (ptr_ > buf_) { encoder_->output(buf_, ptr_ - buf_, byteStream_); ptr_ = buf_; } byteStream_->flush(); } void EncodeOutputCharStream::flushBuf(Char c) { ASSERT(buf_ != 0); encoder_->output(buf_, ptr_ - buf_, byteStream_); ptr_ = buf_; *ptr_++ = c; } void EncodeOutputCharStream::allocBuf(int bytesPerChar) { const int blockSize = 1024; size_t bufSize = bytesPerChar ? blockSize/bytesPerChar : blockSize; ptr_ = buf_ = new Char[bufSize]; end_ = buf_ + bufSize; } void EncodeOutputCharStream::setEscaper(Escaper f) { escaper_ = f; } void EncodeOutputCharStream::handleUnencodable(Char c, OutputByteStream *) { EncodeOutputCharStream tem(byteStream_, encoder_); if (escaper_) (*escaper_)(tem, c); } StrOutputCharStream::StrOutputCharStream() : buf_(0), bufSize_(0) { sync(0); } StrOutputCharStream::~StrOutputCharStream() { delete [] buf_; } void StrOutputCharStream::extractString(StringC &str) { str.assign(buf_, ptr_ - buf_); sync(0); } void StrOutputCharStream::flushBuf(Char c) { size_t used = ptr_ - buf_; size_t oldSize = bufSize_; bufSize_ = oldSize ? 2*oldSize : 10; Char *oldBuf = buf_; buf_ = new Char[bufSize_]; if (oldSize) { memcpy(buf_, oldBuf, oldSize * sizeof(Char)); delete [] oldBuf; } sync(used); *ptr_++ = c; } void StrOutputCharStream::flush() { } void StrOutputCharStream::sync(size_t length) { ptr_ = buf_ + length; end_ = buf_ + bufSize_; } RecordOutputCharStream::RecordOutputCharStream(OutputCharStream *os) : os_(os) { ptr_ = buf_; end_ = buf_ + bufSize_; } RecordOutputCharStream::~RecordOutputCharStream() { outputBuf(); delete os_; } void RecordOutputCharStream::setEscaper(Escaper f) { os_->setEscaper(f); } void RecordOutputCharStream::flush() { outputBuf(); os_->flush(); } void RecordOutputCharStream::flushBuf(Char c) { outputBuf(); *ptr_++ = c; } void RecordOutputCharStream::outputBuf() { Char *start = buf_; Char *p = start; while (p < ptr_) { switch (*p) { case '\r': // translate RE to newline if (start < p) os_->write(start, p - start); start = ++p; *os_ << newline; break; case '\n': // ignore RS if (start < p) os_->write(start, p - start); start = ++p; break; default: ++p; break; } } if (start < p) os_->write(start, p - start); ptr_ = buf_; end_ = buf_ + bufSize_; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/OutputState.cxx100444 764 764 6451 6606574410 14014 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "OutputState.h" #include "Event.h" #include "Allocator.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif OutputState::OutputState() { init(); } void OutputState::init() { nextSerial_ = 0; stack_.clear(); stack_.insert(new OutputStateLevel); } OutputStateLevel::OutputStateLevel() : state(OutputState::afterStartTag) { } void OutputState::handleRe(EventHandler &handler, Allocator &alloc, const EventsWanted &eventsWanted, Char re, const Location &location) { re_ = re; if (eventsWanted.wantInstanceMarkup()) handler.reOrigin(new (alloc) ReOriginEvent(re_, location, nextSerial_)); switch (top().state) { case afterStartTag: // it's the first RE in the element if (eventsWanted.wantInstanceMarkup()) handler.ignoredRe(new (alloc) IgnoredReEvent(re_, location, nextSerial_++)); top().state = afterRsOrRe; break; case afterRsOrRe: case afterData: top().state = pendingAfterRsOrRe; top().reLocation = location; top().reSerial = nextSerial_++; break; case pendingAfterRsOrRe: // We now know that the pending RE won't be ignored as the last RE. handler.data(new (alloc) ReEvent(&re_, top().reLocation, top().reSerial)); top().state = pendingAfterRsOrRe; top().reLocation = location; top().reSerial = nextSerial_++; break; case pendingAfterMarkup: // We've had only markup since the last RS or RE, so this // RE is ignored. Note that it's this RE that's ignored, not // the pending one. if (eventsWanted.wantInstanceMarkup()) handler.ignoredRe(new (alloc) IgnoredReEvent(re_, location, nextSerial_++)); top().state = pendingAfterRsOrRe; break; } } void OutputState::noteRs(EventHandler &, Allocator &, const EventsWanted &) { if (top().hasPendingRe()) top().state = pendingAfterRsOrRe; else top().state = afterRsOrRe; } void OutputState::noteMarkup(EventHandler &, Allocator &, const EventsWanted &) { switch (top().state) { case afterRsOrRe: top().state = afterStartTag; break; case pendingAfterRsOrRe: top().state = pendingAfterMarkup; break; default: break; // avoid warning } } void OutputState::noteData(EventHandler &handler, Allocator &alloc, const EventsWanted &) { if (top().hasPendingRe()) handler.data(new (alloc) ReEvent(&re_, top().reLocation, top().reSerial)); top().state = afterData; } void OutputState::noteStartElement(Boolean included, EventHandler &handler, Allocator &alloc, const EventsWanted &) { if (included) stack_.insert(new OutputStateLevel); else { if (top().hasPendingRe()) handler.data(new (alloc) ReEvent(&re_, top().reLocation, top().reSerial)); top().state = afterStartTag; } } void OutputState::noteEndElement(Boolean included, EventHandler &handler, Allocator &alloc, const EventsWanted &eventsWanted) { if (eventsWanted.wantInstanceMarkup() && top().hasPendingRe()) handler.ignoredRe(new (alloc) IgnoredReEvent(re_, top().reLocation, top().reSerial)); if (included) { delete stack_.get(); noteMarkup(handler, alloc, eventsWanted); } else top().state = afterData; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/OutputState.h100444 764 764 3366 6606574410 13443 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef OutputState_INCLUDED #define OutputState_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Location.h" #include "IList.h" #include "Link.h" #include "Boolean.h" #include "types.h" #include "EventsWanted.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct OutputStateLevel : public Link { OutputStateLevel(); Boolean hasPendingRe() const; char state; // should be OutputState::State unsigned long reSerial; Location reLocation; }; class EventHandler; class Allocator; class OutputState { public: OutputState(); void init(); void handleRe(EventHandler &, Allocator &, const EventsWanted &, Char, const Location &); void noteRs(EventHandler &, Allocator &, const EventsWanted &); void noteMarkup(EventHandler &, Allocator &, const EventsWanted &); void noteData(EventHandler &, Allocator &, const EventsWanted &); void noteStartElement(Boolean included, EventHandler &, Allocator &, const EventsWanted &); void noteEndElement(Boolean included, EventHandler &, Allocator &, const EventsWanted &); private: OutputState(const OutputState &); // undefined void operator=(const OutputState &); // undefined enum State { afterStartTag, afterRsOrRe, afterData, pendingAfterRsOrRe, pendingAfterMarkup }; IList stack_; OutputStateLevel &top(); Char re_; unsigned long nextSerial_; friend struct OutputStateLevel; }; inline Boolean OutputStateLevel::hasPendingRe() const { return int(state) >= int(OutputState::pendingAfterRsOrRe); } inline OutputStateLevel &OutputState::top() { return *stack_.head(); } #ifdef SP_NAMESPACE } #endif #endif /* not OutputState_INCLUDED */ jade-1.2.1/lib/Param.cxx100444 764 764 13342 6606574410 12570 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Param.h" #include "MessageBuilder.h" #include "macros.h" #include "ParserMessages.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif AllowedParams::AllowedParams(Param::Type p1, Param::Type p2, Param::Type p3, Param::Type p4, Param::Type p5, Param::Type p6, Param::Type p7, Param::Type p8, Param::Type p9, Param::Type p10) { init(); allow(p1); allow(p2); allow(p3); allow(p4); allow(p5); allow(p6); allow(p7); allow(p8); allow(p9); allow(p10); } AllowedParams::AllowedParams(const Param::Type *v, int n) { init(); for (int i = 0; i < n; i++) allow(v[i]); } void AllowedParams::init() { for (int i = 0; i < Syntax::nNames; i++) reservedNames_[i] = 0; mainMode_ = mdMode; mdc_ = 0; rni_ = 0; dso_ = 0; inclusions_ = 0; exclusions_ = 0; extraDelimiter_ = Param::invalid; group_ = Param::invalid; nameStart_ = Param::invalid; digit_ = Param::invalid; nmchar_ = Param::invalid; literal_ = Param::invalid; } void AllowedParams::allow(Param::Type p) { switch (p) { case Param::invalid: break; case Param::dso: dso_ = 1; break; case Param::mdc: mdc_ = 1; break; case Param::minus: ASSERT(mainMode_ == mdMode); mainMode_ = mdMinusMode; extraDelimiter_ = p; break; case Param::pero: ASSERT(mainMode_ == mdMode); mainMode_ = mdPeroMode; extraDelimiter_ = p; break; case Param::inclusions: inclusions_ = 1; break; case Param::exclusions: exclusions_ = 1; break; case Param::nameGroup: case Param::nameTokenGroup: case Param::modelGroup: ASSERT(group_ == Param::invalid); group_ = p; break; case Param::number: ASSERT(digit_ == Param::invalid); digit_ = p; break; case Param::minimumLiteral: case Param::tokenizedAttributeValueLiteral: case Param::attributeValueLiteral: case Param::systemIdentifier: case Param::paramLiteral: ASSERT(literal_ == Param::invalid); literal_ = p; break; case Param::name: case Param::entityName: case Param::paramEntityName: ASSERT(nameStart_ == Param::invalid); nameStart_ = p; break; case Param::attributeValue: ASSERT(nameStart_ == Param::invalid); nameStart_ = p; ASSERT(digit_ == Param::invalid); digit_ = p; ASSERT(nmchar_ == Param::invalid); nmchar_ = p; break; default: if (p < Param::indicatedReservedName) { ASSERT(nameStart_ == Param::invalid || nameStart_ == Param::reservedName); ASSERT(rni_ == 0); nameStart_ = Param::reservedName; reservedNames_[p - Param::reservedName] = 1; } else { ASSERT(nameStart_ != Param::reservedName); rni_ = 1; reservedNames_[p - Param::indicatedReservedName] = 1; } break; } } AllowedParamsMessageArg::AllowedParamsMessageArg( const AllowedParams &allow, const ConstPtr &syntax) : allow_(allow), syntax_(syntax) { } MessageArg *AllowedParamsMessageArg::copy() const { return new AllowedParamsMessageArg(*this); } void AllowedParamsMessageArg::append(MessageBuilder &builder) const { Syntax::DelimGeneral delims[3]; int nDelims = 0; if (allow_.mdc()) delims[nDelims++] = Syntax::dMDC; if (allow_.dso()) delims[nDelims++] = Syntax::dDSO; switch (allow_.mainMode()) { case mdMinusMode: delims[nDelims++] = Syntax::dMINUS; break; case mdPeroMode: delims[nDelims++] = Syntax::dPERO; break; default: break; } Boolean first = 1; int i; for (i = 0; i < nDelims; i++) { if (!first) builder.appendFragment(ParserMessages::listSep); else first = 0; const StringC &delim = syntax_->delimGeneral(delims[i]); builder.appendFragment(ParserMessages::delimStart); builder.appendChars(delim.data(), delim.size()); builder.appendFragment(ParserMessages::delimEnd); } const MessageFragment *fragment[5]; int nFragments = 0; if (allow_.inclusions()) fragment[nFragments++] = &ParserMessages::inclusions; if (allow_.exclusions()) fragment[nFragments++] = &ParserMessages::exclusions; switch (allow_.literal()) { case Param::minimumLiteral: fragment[nFragments++] = &ParserMessages::minimumLiteral; break; case Param::attributeValueLiteral: case Param::tokenizedAttributeValueLiteral: fragment[nFragments++] = &ParserMessages::attributeValueLiteral; break; case Param::systemIdentifier: fragment[nFragments++] = &ParserMessages::systemIdentifier; break; case Param::paramLiteral: fragment[nFragments++] = &ParserMessages::parameterLiteral; break; } switch (allow_.nameStart()) { case Param::name: case Param::entityName: case Param::paramEntityName: fragment[nFragments++] = &ParserMessages::name; break; case Param::attributeValue: fragment[nFragments++] = &ParserMessages::attributeValue; break; } if (allow_.digit() == Param::number) fragment[nFragments++] = &ParserMessages::number; for (i = 0; i < nFragments; i++) { if (!first) builder.appendFragment(ParserMessages::listSep); else first = 0; builder.appendFragment(*fragment[i]); } if (allow_.rni() || allow_.nameStart() == Param::reservedName) { for (int i = 0; i < Syntax::nNames; i++) { if (allow_.reservedName(Syntax::ReservedName(i))) { if (!first) builder.appendFragment(ParserMessages::listSep); else first = 0; StringC str; if (allow_.rni()) str = syntax_->delimGeneral(Syntax::dRNI); str += syntax_->reservedName(Syntax::ReservedName(i)); builder.appendChars(str.data(), str.size()); } } } } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Param.h100444 764 764 10351 6606574410 12212 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Param_INCLUDED #define Param_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Boolean.h" #include "ContentToken.h" #include "StringC.h" #include "Location.h" #include "MessageArg.h" #include "Mode.h" #include "NameToken.h" #include "Owner.h" #include "Ptr.h" #include "Syntax.h" #include "Text.h" #include "Vector.h" // This describes a markup declaration parameter. #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class ElementType; class Param { public: Param() { } typedef unsigned char Type; enum { invalid, dso, mdc, minus, pero, inclusions, exclusions, nameGroup, nameTokenGroup, modelGroup, number, minimumLiteral, attributeValueLiteral, tokenizedAttributeValueLiteral, systemIdentifier, paramLiteral, name, entityName, paramEntityName, attributeValue, reservedName, // Syntax::ReservedName is added to this // this is a reserved name preceded by the RNI delimiter indicatedReservedName = reservedName + Syntax::nNames }; enum { nTypes = indicatedReservedName + Syntax::nNames }; Type type; Location startLocation; Text literalText; Boolean lita; Owner modelGroupPtr; Vector nameTokenVector; StringC token; // name nameToken; with substitution Vector elementVector; private: Param(const Param &); // undefined void operator=(const Param &); // undefined }; class AllowedParams { public: AllowedParams(Param::Type, Param::Type = Param::invalid, Param::Type = Param::invalid, Param::Type = Param::invalid, Param::Type = Param::invalid, Param::Type = Param::invalid, Param::Type = Param::invalid, Param::Type = Param::invalid, Param::Type = Param::invalid, Param::Type = Param::invalid); AllowedParams(const Param::Type *types, int nTypes); Mode mainMode() const; Boolean mdc() const; Boolean rni() const; Boolean dso() const; Boolean inclusions() const; Boolean exclusions() const; Boolean reservedName(Syntax::ReservedName) const; Param::Type group() const; Param::Type nameStart() const; Param::Type digit() const; Param::Type nmchar() const; Param::Type literal() const; private: void init(); void allow(Param::Type); PackedBoolean mdc_; PackedBoolean rni_; PackedBoolean dso_; PackedBoolean inclusions_; PackedBoolean exclusions_; // invalid, minus, pero Param::Type extraDelimiter_; // invalid, nameGroup, nameTokenGroup, modelGroup Param::Type group_; // invalid, reservedName, name, entityName, paramEntityName, attributeValue Param::Type nameStart_; // invalid, number, attributeValue Param::Type digit_; // invalid, attributeValue Param::Type nmchar_; // LCNMCHAR or UCNMCHAR // invalid, minimumLiteral, systemIdentifier, paramLiteral, // (tokenized)attributeValueLiteral Param::Type literal_; PackedBoolean reservedNames_[Syntax::nNames]; Mode mainMode_; // mdMode mdMinusMode mdPeroMode }; class MessageBuilder; class AllowedParamsMessageArg : public MessageArg { public: AllowedParamsMessageArg(const AllowedParams &allow, const ConstPtr &syntax); MessageArg *copy() const; void append(MessageBuilder &) const; private: AllowedParams allow_; ConstPtr syntax_; }; inline Mode AllowedParams::mainMode() const { return mainMode_; } inline Boolean AllowedParams::mdc() const { return mdc_; } inline Boolean AllowedParams::rni() const { return rni_; } inline Boolean AllowedParams::dso() const { return dso_; } inline Boolean AllowedParams::inclusions() const { return inclusions_; } inline Boolean AllowedParams::exclusions() const { return exclusions_; } inline Boolean AllowedParams::reservedName(Syntax::ReservedName i) const { return reservedNames_[i]; } inline Param::Type AllowedParams::group() const { return group_; } inline Param::Type AllowedParams::nameStart() const { return nameStart_; } inline Param::Type AllowedParams::digit() const { return digit_; } inline Param::Type AllowedParams::nmchar() const { return nmchar_; } inline Param::Type AllowedParams::literal() const { return literal_; } #ifdef SP_NAMESPACE } #endif #endif /* not Param_INCLUDED */ jade-1.2.1/lib/Parser.cxx100444 764 764 12362 6604607570 12767 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Parser.h" #include "ParserMessages.h" #include "constant.h" #include "Trie.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Parser::Parser(const SgmlParser::Params ¶ms) : ParserState(params.parent ? params.parent->parser_->entityManagerPtr() : params.entityManager, params.options ? *params.options : params.parent->parser_->options(), paramsSubdocLevel(params), params.entityType == SgmlParser::Params::dtd ? declSubsetPhase : contentPhase) { Parser *parent = 0; if (params.parent) parent = params.parent->parser_; if (params.entityType == SgmlParser::Params::document) { Sd *sd = new Sd(entityManagerPtr()); const ParserOptions &opt = options(); sd->setBooleanFeature(Sd::fDATATAG, opt.datatag); sd->setBooleanFeature(Sd::fOMITTAG, opt.omittag); sd->setBooleanFeature(Sd::fRANK, opt.rank); sd->setShorttag(opt.shorttag); sd->setBooleanFeature(Sd::fEMPTYNRM, opt.emptynrm); sd->setNumberFeature(Sd::fSIMPLE, opt.linkSimple); sd->setBooleanFeature(Sd::fIMPLICIT, opt.linkImplicit); sd->setNumberFeature(Sd::fEXPLICIT, opt.linkExplicit); sd->setNumberFeature(Sd::fCONCUR, opt.concur); sd->setNumberFeature(Sd::fSUBDOC, opt.subdoc); sd->setBooleanFeature(Sd::fFORMAL, opt.formal); setSdOverrides(*sd); PublicId publicId; CharsetDecl docCharsetDecl; docCharsetDecl.addSection(publicId); docCharsetDecl.addRange(0, charMax > 99999999 ? 99999999 : charMax + 1, 0); sd->setDocCharsetDecl(docCharsetDecl); setSd(sd); } else if (params.sd.isNull()) { setSd(parent->sdPointer()); setSyntaxes(parent->prologSyntaxPointer(), parent->instanceSyntaxPointer()); } else { setSd(params.sd); setSyntaxes(params.prologSyntax, params.instanceSyntax); } // Make catalog StringC sysid(params.sysid); ConstPtr catalog = entityManager().makeCatalog(sysid, sd().docCharset(), messenger()); if (!catalog.isNull()) setEntityCatalog(catalog); else if (parent) setEntityCatalog(parent->entityCatalogPtr()); else { allDone(); return; } // Set up the input stack. if (sysid.size() == 0) { allDone(); return; } Ptr origin; if (params.origin.isNull()) origin = InputSourceOrigin::make(); else origin = params.origin; pushInput(entityManager().open(sysid, sd().docCharset(), origin.pointer(), EntityManager::mayRewind|EntityManager::maySetDocCharset, messenger())); if (inputLevel() == 0) { allDone(); return; } switch (params.entityType) { case SgmlParser::Params::document: setPhase(initPhase); break; case SgmlParser::Params::subdoc: if (params.subdocInheritActiveLinkTypes && parent) inheritActiveLinkTypes(*parent); if (subdocLevel() == sd().subdoc() + 1) message(ParserMessages::subdocLevel, NumberMessageArg(sd().subdoc())); setPhase(prologPhase); compilePrologModes(); break; case SgmlParser::Params::dtd: compilePrologModes(); startDtd(params.doctypeName); setPhase(declSubsetPhase); break; } } void Parser::setSdOverrides(Sd &sd) { if (options().typeValid != ParserOptions::sgmlDeclTypeValid) { sd.setTypeValid(options().typeValid); sd.setBooleanFeature(Sd::fIMPLYDEFATTLIST, !options().typeValid); sd.setBooleanFeature(Sd::fIMPLYDEFELEMENT, !options().typeValid); } if (options().noUnclosedTag) { sd.setBooleanFeature(Sd::fSTARTTAGUNCLOSED, 0); sd.setBooleanFeature(Sd::fENDTAGUNCLOSED, 0); } if (options().noNet) sd.setStartTagNetEnable(Sd::netEnableNo); } void Parser::giveUp() { if (subdocLevel() > 0) // FIXME might be subdoc if level == 0 message(ParserMessages::subdocGiveUp); else message(ParserMessages::giveUp); allDone(); } unsigned Parser::paramsSubdocLevel(const SgmlParser::Params ¶ms) { if (!params.parent) return 0; unsigned n = params.parent->parser_->subdocLevel(); if (params.subdocReferenced) return n + 1; else return n; } Event *Parser::nextEvent() { while (eventQueueEmpty()) { switch (phase()) { case noPhase: return 0; case initPhase: doInit(); break; case prologPhase: doProlog(); break; case declSubsetPhase: doDeclSubset(); break; case instanceStartPhase: doInstanceStart(); break; case contentPhase: doContent(); break; } } return eventQueueGet(); } void Parser::parseAll(EventHandler &handler, const volatile sig_atomic_t *cancelPtr) { while (!eventQueueEmpty()) eventQueueGet()->handle(handler); // FIXME catch exceptions and reset handler. setHandler(&handler, cancelPtr); for (;;) { switch (phase()) { case noPhase: unsetHandler(); return; case initPhase: doInit(); break; case prologPhase: doProlog(); break; case declSubsetPhase: doDeclSubset(); break; case instanceStartPhase: doInstanceStart(); break; case contentPhase: doContent(); break; } } } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Parser.h100444 764 764 35421 6604607570 12415 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Parser_INCLUDED #define Parser_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "Attribute.h" #include "Attributed.h" #include "Boolean.h" #include "StringC.h" #include "ElementType.h" #include "Entity.h" #include "Event.h" #include "IList.h" #include "ISet.h" #include "Location.h" #include "Owner.h" #include "ParserState.h" #include "Ptr.h" #include "SgmlParser.h" #include "StringOf.h" #include "Undo.h" #include "Vector.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class AllowedParams; class Param; class ExternalId; class PublicId; class GroupToken; class AllowedGroupTokens; struct GroupConnector; class AllowedGroupConnectors; class AllowedSdParams; class Text; class AttributeList; class AttributeDefinition; class AttributeDefinitionList; class UnivCharsetDesc; class CharsetInfo; class CharsetDecl; class DeclaredValue; struct SdBuilder; struct SdParam; class Syntax; class ElementDefinition; class CharSwitcher; struct StandardSyntaxSpec; class Undo; class Decl; class Parser : private ParserState { public: Parser(const SgmlParser::Params &); Event *nextEvent(); void parseAll(EventHandler &, const volatile sig_atomic_t *cancelPtr); ParserState::sdPointer; ParserState::instanceSyntaxPointer; ParserState::prologSyntaxPointer; ParserState::activateLinkType; ParserState::allLinkTypesActivated; ParserState::entityManager; ParserState::entityCatalog; ParserState::baseDtd; ParserState::options; private: Parser(const Parser &); // undefined void operator=(const Parser &); // undefined Boolean setStandardSyntax(Syntax &syn, const StandardSyntaxSpec &, const CharsetInfo &docCharset, CharSwitcher &, Boolean www); Boolean addRefDelimShortref(Syntax &syntax, const CharsetInfo &syntaxCharset, const CharsetInfo &docCharset, CharSwitcher &switcher); Boolean setRefDelimGeneral(Syntax &syntax, const CharsetInfo &syntaxCharset, const CharsetInfo &docCharset, CharSwitcher &switcher); void setRefNames(Syntax &syntax, const CharsetInfo &docCharset, Boolean www); void giveUp(); void compileSdModes(); void compilePrologModes(); void compileInstanceModes(); void addNeededShortrefs(Dtd &, const Syntax &); Boolean shortrefCanPreemptDelim(const StringC &sr, const StringC &d, Boolean dIsSr, const Syntax &); void compileModes(const Mode *modes, int n, const Dtd *); void compileNormalMap(); void doInit(); void doProlog(); void doDeclSubset(); void doInstanceStart(); void doContent(); void extendNameToken(size_t, const MessageType1 &); void extendNumber(size_t, const MessageType1 &); void extendHexNumber(); void extendData(); void extendS(); void extendContentS(); void declSubsetRecover(unsigned startLevel); void prologRecover(); void skipDeclaration(unsigned startLevel); Boolean parseElementDecl(); Boolean parseAttlistDecl(); Boolean parseNotationDecl(); Boolean parseEntityDecl(); Boolean parseShortrefDecl(); Boolean parseUsemapDecl(); Boolean parseUselinkDecl(); Boolean parseDoctypeDeclStart(); Boolean parseDoctypeDeclEnd(Boolean fake = 0); Boolean parseMarkedSectionDeclStart(); void handleMarkedSectionEnd(); Boolean parseCommentDecl(); void emptyCommentDecl(); Boolean parseExternalId(const AllowedParams &, const AllowedParams &, Boolean, unsigned, Param &, ExternalId &); Boolean parseParam(const AllowedParams &, unsigned, Param &); Boolean parseMinimumLiteral(Boolean, Text &); Boolean parseAttributeValueLiteral(Boolean, Text &); Boolean parseTokenizedAttributeValueLiteral(Boolean, Text &); Boolean parseSystemIdentifier(Boolean, Text &); Boolean parseParameterLiteral(Boolean, Text &); Boolean parseDataTagParameterLiteral(Boolean, Text &); // flags for parseLiteral() enum { literalSingleSpace = 01, literalDataTag = 02, literalMinimumData = 04, // Keep info about delimiters literalDelimInfo = 010, // Ignore references in the literal literalNoProcess = 020, // Allow numeric character references to non-SGML characters literalNonSgml = 040 }; Boolean parseLiteral(Mode litMode, Mode liteMode, size_t maxLength, const MessageType1 &tooLongMessage, unsigned flags, Text &text); Boolean parseGroupToken(const AllowedGroupTokens &allow, unsigned nestingLevel, unsigned declInputLevel, unsigned groupInputLevel, GroupToken >); Boolean parseGroupConnector(const AllowedGroupConnectors &allow, unsigned declInputLevel, unsigned groupInputLevel, GroupConnector &gc); Boolean parseGroup(const AllowedGroupTokens &allowToken, unsigned declInputLevel, Param &parm); Boolean parseModelGroup(unsigned nestingLevel, unsigned declInputLevel, ModelGroup *&, Mode); Boolean parseNameGroup(unsigned declInputLevel, Param &); Boolean parseNameTokenGroup(unsigned declInputLevel, Param &); Boolean parseDataTagGroup(unsigned nestingLevel, unsigned declInputLevel, GroupToken &); Boolean parseDataTagTemplateGroup(unsigned nestingLevel, unsigned declInputLevel, GroupToken &); Boolean parseElementNameGroup(unsigned declInputLevel, Param &); Boolean parseReservedName(const AllowedParams &allow, Param &parm); Boolean parseIndicatedReservedName(const AllowedParams &allow, Param &parm); Boolean getReservedName(Syntax::ReservedName *); Boolean getIndicatedReservedName(Syntax::ReservedName *); Boolean parseAttributeValueParam(Param &parm); Boolean parseEntityReference(Boolean isParameter, int ignoreLevel, ConstPtr &entity, Ptr &origin); ContentToken::OccurrenceIndicator getOccurrenceIndicator(Mode); Boolean parseComment(Mode); Boolean parseNamedCharRef(); Boolean parseNumericCharRef(Boolean isHex, Char &, Location &); Boolean translateNumericCharRef(Char &ch, Boolean &isSgmlChar); Boolean parseDeclarationName(Syntax::ReservedName *, Boolean allowAfdr = 0); void paramInvalidToken(Token, const AllowedParams &); void groupTokenInvalidToken(Token, const AllowedGroupTokens &); void groupConnectorInvalidToken(Token, const AllowedGroupConnectors &); ElementType *lookupCreateElement(const StringC &); RankStem *lookupCreateRankStem(const StringC &); Boolean parseExceptions(unsigned declInputLevel, Ptr &def); void parsePcdata(); void parseStartTag(); ElementType *completeRankStem(const StringC &); void handleRankedElement(const ElementType *); void parseEmptyStartTag(); void acceptPcdata(const Location &); void acceptStartTag(const ElementType *, StartElementEvent *, Boolean netEnabling); void handleBadStartTag(const ElementType *, StartElementEvent *, Boolean netEnabling); void undo(IList &); Boolean tryStartTag(const ElementType *, StartElementEvent *, Boolean netEnabling, IList &); void checkExclusion(const ElementType *e); Boolean tryImplyTag(const Location &, unsigned &, unsigned &, IList &, IList &); void pushElementCheck(const ElementType *, StartElementEvent *, Boolean netEnabling); void pushElementCheck(const ElementType *, StartElementEvent *, IList &, IList &); void queueElementEvents(IList &); Boolean parseAttributeSpec(Boolean inDeclaration, AttributeList &, Boolean &netEnabling, Ptr &); Boolean handleAttributeNameToken(Text &text, AttributeList &, unsigned &specLength); struct AttributeParameter { enum Type { end, name, nameToken, vi, recoverUnquoted }; }; Boolean parseAttributeParameter(Boolean inDecl, Boolean allowVi, AttributeParameter::Type &result, Boolean &netEnabling); void extendUnquotedAttributeValue(); Boolean parseAttributeValueSpec(Boolean inDecl, const StringC &name, AttributeList &atts, unsigned &specLength, Ptr &newAttDefList); EndElementEvent *parseEndTag(); void parseEndTagClose(); void parseEmptyEndTag(); void parseNullEndTag(); void endAllElements(); void acceptEndTag(EndElementEvent *); void endTagEmptyElement(const ElementType *, Boolean netEnabling, Boolean included, const Location &startLoc); void implyCurrentElementEnd(const Location &); void implyEmptyElementEnd(const ElementType *, Boolean included, const Location &); void maybeDefineEntity(const Ptr &entity); Notation *lookupCreateNotation(const StringC &name); Boolean parseExternalEntity(StringC &name, Entity::DeclType declType, unsigned declInputLevel, Param &parm); ShortReferenceMap *lookupCreateMap(const StringC &); StringC prettifyDelim(const StringC &delim); void handleShortref(int index); Boolean parseProcessingInstruction(); Boolean parseAttributed(unsigned declInputLevel, Param &parm, Vector &attributed, Boolean &isNotation); Boolean parseDeclaredValue(unsigned declInputLevel, Boolean isNotation, Param &parm, Owner &value); Boolean parseDefaultValue(unsigned declInputLevel, Boolean isNotation, Param &parm, const StringC &attributeName, Owner &declaredValue, Owner &def, Boolean &anyCurrent); Boolean reportNonSgmlCharacter(); void endInstance(); Boolean implySgmlDecl(); Boolean scanForSgmlDecl(const CharsetInfo &initCharset); void findMissingMinimum(const CharsetInfo &charset, ISet &); Boolean parseSgmlDecl(); Boolean sdParseSgmlDeclRef(SdBuilder &, SdParam &, ExternalId &); Boolean sdParseDocumentCharset(SdBuilder &sdBuilder, SdParam &parm); Boolean sdParseCapacity(SdBuilder &sdBuilder, SdParam &parm); Boolean sdParseScope(SdBuilder &sdBuilder, SdParam &parm); Boolean sdParseSyntax(SdBuilder &sdBuilder, SdParam &parm); Boolean sdParseExplicitSyntax(SdBuilder &sdBuilder, SdParam &parm); Boolean sdParseSyntaxCharset(SdBuilder &sdBuilder, SdParam &parm); Boolean sdParseShunchar(SdBuilder &sdBuilder, SdParam &parm); Boolean sdParseFunction(SdBuilder &sdBuilder, SdParam &parm); Boolean sdParseNaming(SdBuilder &sdBuilder, SdParam &parm); Boolean sdParseDelim(SdBuilder &sdBuilder, SdParam &parm); Boolean sdParseNames(SdBuilder &sdBuilder, SdParam &parm); Boolean sdParseQuantity(SdBuilder &sdBuilder, SdParam &parm); Boolean sdParseEntities(SdBuilder &sdBuilder, SdParam &parm); Boolean sdParseFeatures(SdBuilder &sd, SdParam &parm); Boolean sdParseAppinfo(SdBuilder &sd, SdParam &parm); Boolean sdParseSeealso(SdBuilder &sd, SdParam &parm); void requireWWW(SdBuilder &sdBuilder); Boolean parseSdParam(const AllowedSdParams &allow, SdParam &); Boolean parseSdParamLiteral(Boolean lita, String &str); Boolean parseSdSystemIdentifier(Boolean lita, Text &); Boolean stringToNumber(const Char *s, size_t length, unsigned long &); void sdParamConvertToLiteral(SdParam &parm); void sdParamInvalidToken(Token token, const AllowedSdParams &); Boolean sdParseCharset(SdBuilder &sdBuilder, SdParam &parm, Boolean isDocument, CharsetDecl &, UnivCharsetDesc &); Boolean sdParseExternalCharset(Sd &, UnivCharsetDesc &desc); UnivChar charNameToUniv(Sd &sd, const StringC &name); Boolean translateSyntax(CharSwitcher &switcher, const CharsetInfo &syntaxCharset, const CharsetInfo &docCharset, WideChar syntaxChar, Char &docChar); Boolean translateSyntax(SdBuilder &sdBuilder, WideChar syntaxChar, Char &docChar); Boolean translateSyntax(SdBuilder &sdBuilder, const String &syntaxString, StringC &docString); Boolean translateSyntaxNoSwitch(SdBuilder &sdBuilder, WideChar syntaxChar, Char &docChar, Number &count); Boolean translateName(SdBuilder &sdBuilder, const StringC &name, StringC &str); void translateRange(SdBuilder &sdBuilder, SyntaxChar start, SyntaxChar end, ISet &chars); UnivChar translateUniv(UnivChar univChar, CharSwitcher &switcher, const CharsetInfo &syntaxCharset); Boolean univToDescCheck(const CharsetInfo &charset, UnivChar from, Char &to); Boolean univToDescCheck(const CharsetInfo &charset, UnivChar from, Char &to, WideChar &count); void translateDocSet(const CharsetInfo &fromCharset, const CharsetInfo &toCharset, const ISet &fromSet, ISet &toSet); Boolean checkNotFunction(const Syntax &syn, Char c); Boolean checkGeneralDelim(const Syntax &syn, const StringC &delim); Boolean checkShortrefDelim(const Syntax &syn, const CharsetInfo &charset, const StringC &delim); Boolean checkNmchars(const ISet &set, const Syntax &syntax); void intersectCharSets(const ISet &s1, const ISet &s2, ISet &inter); Boolean checkSwitches(CharSwitcher &switcher, const CharsetInfo &syntaxCharset); Boolean checkSwitchesMarkup(CharSwitcher &switcher); const StandardSyntaxSpec *lookupSyntax(const PublicId &id); Boolean referencePublic(const PublicId &id, PublicId::TextClass, Boolean &givenError); void checkIdrefs(); void checkTaglen(Index tagStartIndex); void checkSyntaxNamelen(const Syntax &syn); void checkElementAttribute(const ElementType *e, size_t checkFrom = 0); void checkDtd(Dtd &dtd); Boolean maybeStatusKeyword(const Entity &entity); void reportAmbiguity(const LeafContentToken *from, const LeafContentToken *to1, const LeafContentToken *to2, unsigned ambigAndDepth); Boolean parseLinktypeDeclStart(); Boolean parseLinktypeDeclEnd(); Boolean parseLinkDecl(); Boolean parseIdlinkDecl(); Boolean parseLinkSet(Boolean idlink); void addIdLinkRule(const StringC &id, IdLinkRule &rule); void addLinkRule(LinkSet *linkSet, const ElementType *sourceElement, const ConstPtr &linkRule); Boolean parseResultElementSpec(unsigned declInputLevel, Param &parm, Boolean idlink, Boolean &implied, const ElementType *&resultType, AttributeList &attributes); LinkSet *lookupCreateLinkSet(const StringC &name); ElementType *lookupResultElementType(const StringC &name); void endProlog(); Boolean parseEntityReferenceNameGroup(Boolean &ignore); Boolean parseTagNameGroup(Boolean &active); void parseGroupStartTag(); void parseGroupEndTag(); Boolean skipAttributeSpec(); Boolean lookingAtStartTag(StringC &gi); void implyDtd(const StringC &gi); void findMissingTag(const ElementType *e, Vector &); unsigned paramsSubdocLevel(const SgmlParser::Params &); void addCommonAttributes(Dtd &dtd); Boolean parseAfdrDecl(); void setSdOverrides(Sd &sd); }; #ifdef SP_NAMESPACE } #endif #endif /* not Parser_INCLUDED */ jade-1.2.1/lib/ParserApp.cxx100444 764 764 23273 6604607570 13433 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "ParserApp.h" #include "ParserAppMessages.h" #include "MessageArg.h" #include "Location.h" #include "macros.h" #include "sptchar.h" #include "ArcEngine.h" #include #include #include #ifndef DEFAULT_ERROR_LIMIT #define DEFAULT_ERROR_LIMIT 200 #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif ParserApp::ParserApp(const char *requiredInternalCode) : EntityApp(requiredInternalCode), errorLimit_(DEFAULT_ERROR_LIMIT) { registerOption('a', SP_T("link_type")); registerOption('A', SP_T("arch")); registerOption('e'); registerOption('E', SP_T("max_errors")); registerOption('g'); registerOption('i', SP_T("entity")); registerOption('w', SP_T("warning_type")); } void ParserApp::initParser(const StringC &sysid) { SgmlParser::Params params; params.sysid = sysid; params.entityManager = entityManager().pointer(); params.options = &options_; parser_.init(params); if (arcNames_.size() > 0) parser_.activateLinkType(arcNames_[0]); for (size_t i = 0; i < activeLinkTypes_.size(); i++) parser_.activateLinkType(convertInput(activeLinkTypes_[i])); allLinkTypesActivated(); } void ParserApp::allLinkTypesActivated() { parser_.allLinkTypesActivated(); } int ParserApp::processSysid(const StringC &sysid) { initParser(sysid); ErrorCountEventHandler *eceh = makeEventHandler(); if (errorLimit_) eceh->setErrorLimit(errorLimit_); return generateEvents(eceh); } int ParserApp::generateEvents(ErrorCountEventHandler *eceh) { Owner eh(eceh); parseAll(parser_, *eh, eceh->cancelPtr()); unsigned errorCount = eceh->errorCount(); if (errorLimit_ != 0 && errorCount >= errorLimit_) message(ParserAppMessages::errorLimitExceeded, NumberMessageArg(errorLimit_)); return errorCount > 0; } void ParserApp::parseAll(SgmlParser &parser, EventHandler &eh, const volatile sig_atomic_t *cancelPtr) { if (arcNames_.size() > 0) { SelectOneArcDirector director(arcNames_, eh); ArcEngine::parseAll(parser, director, director, cancelPtr); } else parser.parseAll(eh, cancelPtr); } void ParserApp::processOption(AppChar opt, const AppChar *arg) { switch (opt) { case 'a': // activate link activeLinkTypes_.push_back(arg); break; case 'A': arcNames_.push_back(convertInput(arg)); break; case 'E': { AppChar *end; unsigned long n = tcstoul((AppChar *)arg, &end, 10); if ((n == 0 && end == arg) || *end != SP_T('\0') || (n == ULONG_MAX && errno == ERANGE) || n > UINT_MAX) message(ParserAppMessages::badErrorLimit); else errorLimit_ = unsigned(n); } break; case 'e': // describe open entities in error messages addOption(MessageReporter::openEntities); break; case 'g': // show gis of open elements in error messages addOption(MessageReporter::openElements); break; case 'i': // pretend that arg is defined as INCLUDE options_.includes.push_back(convertInput(arg)); break; case 'w': if (!enableWarning(arg)) message(ParserAppMessages::unknownWarning, StringMessageArg(convertInput(arg))); break; default: EntityApp::processOption(opt, arg); break; } } Boolean ParserApp::enableWarning(const AppChar *s) { enum { groupAll = 01, groupMinTag = 02, groupXML = 04 }; static struct { // Explicit qualifier works around CodeWarrior bug const CmdLineApp::AppChar *name; PackedBoolean ParserOptions::*ptr; unsigned char groups; } table[] = { { SP_T("mixed"), &ParserOptions::warnMixedContent, groupAll }, { SP_T("should"), &ParserOptions::warnShould, groupAll }, { SP_T("duplicate"), &ParserOptions::warnDuplicateEntity, 0 }, { SP_T("default"), &ParserOptions::warnDefaultEntityReference, groupAll }, { SP_T("undefined"), &ParserOptions::warnUndefinedElement, groupAll }, { SP_T("sgmldecl"), &ParserOptions::warnSgmlDecl, groupAll }, { SP_T("unclosed"), &ParserOptions::noUnclosedTag, groupAll|groupMinTag }, { SP_T("net"), &ParserOptions::noNet, groupMinTag }, { SP_T("empty"), &ParserOptions::warnEmptyTag, groupAll|groupMinTag }, { SP_T("unused-map"), &ParserOptions::warnUnusedMap, groupAll }, { SP_T("unused-param"), &ParserOptions::warnUnusedParam, groupAll }, { SP_T("notation-sysid"), &ParserOptions::warnNotationSystemId, 0 }, { SP_T("inclusion"), &ParserOptions::warnInclusion, groupXML }, { SP_T("exclusion"), &ParserOptions::warnExclusion, groupXML }, { SP_T("rcdata-content"), &ParserOptions::warnRcdataContent, groupXML }, { SP_T("cdata-content"), &ParserOptions::warnCdataContent, groupXML }, { SP_T("ps-comment"), &ParserOptions::warnPsComment, groupXML }, { SP_T("attlist-group-decl"), &ParserOptions::warnAttlistGroupDecl, groupXML }, { SP_T("element-group-decl"), &ParserOptions::warnElementGroupDecl, groupXML }, { SP_T("pi-entity"), &ParserOptions::warnPiEntity, groupXML }, { SP_T("internal-sdata-entity"), &ParserOptions::warnInternalSdataEntity, groupXML }, { SP_T("internal-cdata-entity"), &ParserOptions::warnInternalCdataEntity, groupXML }, { SP_T("external-sdata-entity"), &ParserOptions::warnExternalSdataEntity, groupXML }, { SP_T("external-cdata-entity"), &ParserOptions::warnExternalCdataEntity, groupXML }, { SP_T("bracket-entity"), &ParserOptions::warnBracketEntity, groupXML }, { SP_T("data-atts"), &ParserOptions::warnDataAttributes, groupXML }, { SP_T("missing-system-id"), &ParserOptions::warnMissingSystemId, groupXML }, { SP_T("conref"), &ParserOptions::warnConref, groupXML }, { SP_T("current"), &ParserOptions::warnCurrent, groupXML }, { SP_T("nutoken-decl-value"), &ParserOptions::warnNutokenDeclaredValue, groupXML }, { SP_T("number-decl-value"), &ParserOptions::warnNumberDeclaredValue, groupXML }, { SP_T("name-decl-value"), &ParserOptions::warnNameDeclaredValue, groupXML }, { SP_T("named-char-ref"), &ParserOptions::warnNamedCharRef, groupXML }, { SP_T("refc"), &ParserOptions::warnRefc, groupXML }, { SP_T("temp-ms"), &ParserOptions::warnTempMarkedSection, groupXML }, { SP_T("rcdata-ms"), &ParserOptions::warnRcdataMarkedSection, groupXML }, { SP_T("instance-include-ms"), &ParserOptions::warnInstanceIncludeMarkedSection, groupXML }, { SP_T("instance-ignore-ms"), &ParserOptions::warnInstanceIgnoreMarkedSection, groupXML }, { SP_T("and-group"), &ParserOptions::warnAndGroup, groupXML }, { SP_T("rank"), &ParserOptions::warnRank, groupXML }, { SP_T("empty-comment-decl"), &ParserOptions::warnEmptyCommentDecl, groupXML }, { SP_T("att-value-not-literal"), &ParserOptions::warnAttributeValueNotLiteral, groupXML }, { SP_T("missing-att-name"), &ParserOptions::warnMissingAttributeName, groupXML }, { SP_T("comment-decl-s"), &ParserOptions::warnCommentDeclS, groupXML }, { SP_T("comment-decl-multiple"), &ParserOptions::warnCommentDeclMultiple, groupXML }, { SP_T("missing-status-keyword"), &ParserOptions::warnMissingStatusKeyword, groupXML }, { SP_T("multiple-status-keyword"), &ParserOptions::warnMultipleStatusKeyword, groupXML }, { SP_T("instance-param-entity"), &ParserOptions::warnInstanceParamEntityRef, groupXML }, { SP_T("min-param"), &ParserOptions::warnMinimizationParam, groupXML }, { SP_T("mixed-content-xml"), &ParserOptions::warnMixedContentRepOrGroup, groupXML }, { SP_T("name-group-not-or"), &ParserOptions::warnNameGroupNotOr, groupXML }, { SP_T("pi-missing-name"), &ParserOptions::warnPiMissingName, groupXML }, { SP_T("instance-status-keyword-s"), &ParserOptions::warnInstanceStatusKeywordSpecS, groupXML }, { SP_T("external-data-entity-ref"), &ParserOptions::warnExternalDataEntityRef, groupXML }, { SP_T("att-value-external-entity-ref"), &ParserOptions::warnAttributeValueExternalEntityRef, groupXML }, { SP_T("data-delim"), &ParserOptions::warnDataDelim, groupXML }, { SP_T("explicit-sgml-decl"), &ParserOptions::warnExplicitSgmlDecl, groupXML }, { SP_T("internal-subset-ms"), &ParserOptions::warnInternalSubsetMarkedSection, groupXML }, { SP_T("default-entity"), &ParserOptions::warnDefaultEntityDecl, groupXML }, { SP_T("non-sgml-char-ref"), &ParserOptions::warnNonSgmlCharRef, groupXML }, { SP_T("internal-subset-ps-param-entity"), &ParserOptions::warnInternalSubsetPsParamEntityRef, groupXML }, { SP_T("internal-subset-ts-param-entity"), &ParserOptions::warnInternalSubsetTsParamEntityRef, groupXML }, { SP_T("internal-subset-literal-param-entity"), &ParserOptions::warnInternalSubsetLiteralParamEntityRef, groupXML }, { SP_T("idref"), &ParserOptions::errorIdref, 0 }, { SP_T("significant"), &ParserOptions::errorSignificant, 0 }, { SP_T("afdr"), &ParserOptions::errorAfdr, 0 }, }; static struct { const CmdLineApp::AppChar *name; unsigned char flag; } groupTable[] = { { SP_T("all"), groupAll }, { SP_T("min-tag"), groupMinTag }, { SP_T("xml"), groupXML }, }; PackedBoolean val = 1; if (tcsncmp(s, SP_T("no-"), 3) == 0) { s += 3; val = 0; } for (size_t i = 0; i < SIZEOF(groupTable); i++) if (tcscmp(s, groupTable[i].name) == 0) { for (size_t j = 0; j < SIZEOF(table); j++) if (table[j].groups & groupTable[i].flag) { // Use parentheses to work around Watcom 10.0a bug. (options_.*(table[j].ptr)) = val; } return 1; } for (size_t i = 0; i < SIZEOF(table); i++) if (tcscmp(s, table[i].name) == 0) { // Use parentheses to work around Watcom 10.0a bug. (options_.*(table[i].ptr)) = val; return 1; } if (tcscmp(s, SP_T("valid")) == 0) { options_.typeValid = val; return 1; } return 0; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ParserAppMessages.h100444 764 764 2131 6604610610 14503 0ustar jjcjjc// This file was automatically generated from lib\ParserAppMessages.msg by msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct ParserAppMessages { // 4200 static const MessageType1 unknownWarning; // 4201 static const MessageType0 badErrorLimit; // 4202 static const MessageType1 errorLimitExceeded; }; const MessageType1 ParserAppMessages::unknownWarning( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4200 #ifndef SP_NO_MESSAGE_TEXT ,"unknown warning type %1" #endif ); const MessageType0 ParserAppMessages::badErrorLimit( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4201 #ifndef SP_NO_MESSAGE_TEXT ,"invalid error limit" #endif ); const MessageType1 ParserAppMessages::errorLimitExceeded( MessageType::info, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4202 #ifndef SP_NO_MESSAGE_TEXT ,"maximum number of errors (%1) reached; change with -E option" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ParserAppMessages.msg100444 764 764 443 6604607570 15041 0ustar jjcjjc# Copyright (c) 1994, 1995 James Clark # See the file COPYING for copying permission. # ParserApp message definitions =4200 E1+unknownWarning++unknown warning type %1 E0+badErrorLimit++invalid error limit I1+errorLimitExceeded++maximum number of errors (%1) reached; change with -E option jade-1.2.1/lib/ParserAppMessages.rc100444 764 764 235 6604610610 14643 0ustar jjcjjcSTRINGTABLE BEGIN 4200, "unknown warning type %1" 4201, "invalid error limit" 4202, "maximum number of errors (%1) reached; change with -E option" END jade-1.2.1/lib/ParserEventGeneratorKit.cxx100444 764 764 11522 6604607570 16305 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Boolean.h" #include "ParserApp.h" #include "macros.h" #include "SGMLApplication.h" #include "ParserEventGeneratorKit.h" #include "GenericEventHandler.h" class ParserEventGeneratorKitImpl : public SP_NAMESPACE_SCOPE ParserApp { public: SP_NAMESPACE_SCOPE ParserOptions &options() { return options_; } bool generalEntities; unsigned refCount; private: SP_NAMESPACE_SCOPE ErrorCountEventHandler *makeEventHandler() { return 0; } }; #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class ParserEventGenerator : public EventGenerator { public: ParserEventGenerator(SgmlParser &, bool generalEntities, ParserEventGeneratorKitImpl *kit_); ParserEventGenerator(const SgmlParser &, const SGMLApplication::Char *, size_t n, bool generalEntities, bool messagesInhibited, ParserEventGeneratorKitImpl *kit_); ~ParserEventGenerator(); unsigned run(SGMLApplication &); void inhibitMessages(bool); void halt(); EventGenerator * makeSubdocEventGenerator(const SGMLApplication::Char *systemId, size_t systemIdLength); private: SgmlParser parser_; bool generalEntities_; bool messagesInhibited_; sig_atomic_t cancel_; ParserEventGeneratorKitImpl *kit_; }; #ifdef SP_NAMESPACE } #endif ParserEventGeneratorKit::ParserEventGeneratorKit() { impl_ = new ParserEventGeneratorKitImpl; impl_->refCount = 1; impl_->generalEntities = 0; } ParserEventGeneratorKit::~ParserEventGeneratorKit() { impl_->refCount -= 1; if (impl_->refCount == 0) delete impl_; } EventGenerator * ParserEventGeneratorKit::makeEventGenerator(int nFiles, SP_NAMESPACE_SCOPE ParserApp::AppChar *const *files) { SP_NAMESPACE_SCOPE StringC sysid; if (impl_->makeSystemId(nFiles, files, sysid)) impl_->initParser(sysid); return new SP_NAMESPACE_SCOPE ParserEventGenerator(impl_->parser(), impl_->generalEntities, impl_); } void ParserEventGeneratorKit::setProgramName(const SP_NAMESPACE_SCOPE ParserApp::AppChar *prog) { if (prog) impl_->setProgramName(impl_->convertInput(prog)); } void ParserEventGeneratorKit::setOption(Option opt) { switch (opt) { case showOpenEntities: impl_->processOption('e', 0); break; case showOpenElements: impl_->processOption('g', 0); break; case outputCommentDecls: impl_->options().eventsWanted.addCommentDecls(); break; case outputMarkedSections: impl_->options().eventsWanted.addMarkedSections(); break; case outputGeneralEntities: impl_->generalEntities = 1; break; case mapCatalogDocument: impl_->processOption('C', 0); break; } } void ParserEventGeneratorKit::setOption(OptionWithArg opt, const SP_NAMESPACE_SCOPE ParserApp::AppChar *arg) { switch (opt) { case addCatalog: impl_->processOption('c', arg); break; case includeParam: impl_->processOption('i', arg); break; case enableWarning: impl_->processOption('w', arg); break; case addSearchDir: impl_->processOption('D', arg); break; case activateLink: impl_->processOption('a', arg); break; case architecture: impl_->processOption('A', arg); break; } } #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif ParserEventGenerator::ParserEventGenerator(SgmlParser &parser, bool generalEntities, ParserEventGeneratorKitImpl *kit) : generalEntities_(generalEntities), messagesInhibited_(0), cancel_(0), kit_(kit) { parser_.swap(parser); kit_->refCount += 1; } ParserEventGenerator::ParserEventGenerator(const SgmlParser &parser, const SGMLApplication::Char *s, size_t n, bool generalEntities, bool messagesInhibited, ParserEventGeneratorKitImpl *kit) : generalEntities_(generalEntities), messagesInhibited_(messagesInhibited), cancel_(0), kit_(kit) { kit_->refCount += 1; SgmlParser::Params params; params.parent = &parser; params.sysid.assign(s, n); params.entityType = SgmlParser::Params::subdoc; parser_.init(params); } void ParserEventGenerator::halt() { cancel_ = 1; } ParserEventGenerator::~ParserEventGenerator() { kit_->refCount -= 1; if (kit_->refCount == 0) delete kit_; } unsigned ParserEventGenerator::run(SGMLApplication &app) { MsgGenericEventHandler handler(app, generalEntities_, *kit_, &messagesInhibited_); kit_->parseAll(parser_, handler, &cancel_); return handler.errorCount(); } void ParserEventGenerator::inhibitMessages(bool b) { messagesInhibited_ = b; } EventGenerator * ParserEventGenerator::makeSubdocEventGenerator(const SGMLApplication::Char *s, size_t n) { return new ParserEventGenerator(parser_, s, n, generalEntities_, messagesInhibited_, kit_); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ParserMessages.cxx100444 764 764 345226 6604610606 14501 0ustar jjcjjc// This file was automatically generated from lib\ParserMessages.msg by msggen.pl. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "ParserMessages.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const MessageType1 ParserMessages::nameLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 0 #ifndef SP_NO_MESSAGE_TEXT ,"length of name must not exceed NAMELEN (%1)" #endif ); const MessageType1 ParserMessages::parameterEntityNameLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1 #ifndef SP_NO_MESSAGE_TEXT ,"length of parameter entity name must not exceed NAMELEN less the length of the PERO delimiter (%1)" #endif ); const MessageType1 ParserMessages::numberLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2 #ifndef SP_NO_MESSAGE_TEXT ,"length of number must not exceed NAMELEN (%1)" #endif ); const MessageType1 ParserMessages::attributeValueLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 3 #ifndef SP_NO_MESSAGE_TEXT ,"length of attribute value must not exceed LITLEN less NORMSEP (%1)" #endif ); const MessageType0 ParserMessages::peroGrpoProlog( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 4 #ifndef SP_NO_MESSAGE_TEXT ,"a name group is not allowed in a parameter entity reference in the prolog" #endif ); const MessageType0 ParserMessages::groupLevel( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 5 #ifndef SP_NO_MESSAGE_TEXT ,"an entity end in a token separator must terminate an entity referenced in the same group" #endif ); const MessageType2 ParserMessages::groupCharacter( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 6 #ifndef SP_NO_MESSAGE_TEXT ,"character %1 invalid: only %2 and token separators allowed" #endif ); const MessageType0 ParserMessages::psRequired( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 7 #ifndef SP_NO_MESSAGE_TEXT ,"a parameter separator is required after a number that is followed by a name start character" #endif ); const MessageType2 ParserMessages::markupDeclarationCharacter( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 8 #ifndef SP_NO_MESSAGE_TEXT ,"character %1 invalid: only %2 and parameter separators allowed" #endif ); const MessageType0 ParserMessages::declarationLevel( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 9 #ifndef SP_NO_MESSAGE_TEXT ,"an entity end in a parameter separator must terminate an entity referenced in the same declaration" #endif ); const MessageType0 ParserMessages::groupEntityEnd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 10 #ifndef SP_NO_MESSAGE_TEXT ,"an entity end is not allowed in a token separator that does not follow a token" #endif ); const MessageType1 ParserMessages::invalidToken( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 11 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a valid token here" #endif ); const MessageType0 ParserMessages::groupEntityReference( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 12 #ifndef SP_NO_MESSAGE_TEXT ,"a parameter entity reference can only occur in a group where a token could occur" #endif ); const MessageType1 ParserMessages::duplicateGroupToken( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 13 #ifndef SP_NO_MESSAGE_TEXT ,"token %1 has already occurred in this group" #endif ); const MessageType1 ParserMessages::groupCount( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 14 #ifndef SP_NO_MESSAGE_TEXT ,"the number of tokens in a group must not exceed GRPCNT (%1)" #endif ); const MessageType0 ParserMessages::literalLevel( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 15 #ifndef SP_NO_MESSAGE_TEXT ,"an entity end in a literal must terminate an entity referenced in the same literal" #endif ); const MessageType1 ParserMessages::literalMinimumData( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 16 #ifndef SP_NO_MESSAGE_TEXT ,"character %1 invalid: only minimum data characters allowed" #endif ); const MessageType0 ParserMessages::dataTagPatternNonSgml( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 17 #ifndef SP_NO_MESSAGE_TEXT ,"a parameter literal in a data tag pattern must not contain a numeric character reference to a non-SGML character" #endif ); const MessageType0 ParserMessages::dataTagPatternFunction( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 18 #ifndef SP_NO_MESSAGE_TEXT ,"a parameter literal in a data tag pattern must not contain a numeric character reference to a function character" #endif ); const MessageType0 ParserMessages::eroGrpoStartTag( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 19 #ifndef SP_NO_MESSAGE_TEXT ,"a name group is not allowed in a general entity reference in a start tag" #endif ); const MessageType0 ParserMessages::eroGrpoProlog( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 20 #ifndef SP_NO_MESSAGE_TEXT ,"a name group is not allowed in a general entity reference in the prolog" #endif ); const MessageType1 ParserMessages::functionName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 21 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a function name" #endif ); const MessageType1 ParserMessages::characterNumber( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 22 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a character number in the document character set" #endif ); const MessageType1 ParserMessages::parameterEntityUndefined( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 23 #ifndef SP_NO_MESSAGE_TEXT ,"parameter entity %1 not defined" #endif ); const MessageType1 ParserMessages::entityUndefined( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 24 #ifndef SP_NO_MESSAGE_TEXT ,"general entity %1 not defined and no default entity" #endif ); const MessageType0 ParserMessages::rniNameStart( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 25 #ifndef SP_NO_MESSAGE_TEXT ,"RNI delimiter must be followed by name start character" #endif ); const MessageType0L ParserMessages::commentEntityEnd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 26 #ifndef SP_NO_MESSAGE_TEXT ,"unterminated comment: found end of entity inside comment" ,"comment started here" #endif ); const MessageType0 ParserMessages::mixedConnectors( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 28 #ifndef SP_NO_MESSAGE_TEXT ,"only one type of connector should be used in a single group" #endif ); const MessageType1 ParserMessages::noSuchReservedName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 29 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a reserved name" #endif ); const MessageType1 ParserMessages::invalidReservedName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 30 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not allowed as a reserved name here" #endif ); const MessageType1 ParserMessages::minimumLiteralLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 31 #ifndef SP_NO_MESSAGE_TEXT ,"length of interpreted minimum literal must not exceed reference LITLEN (%1)" #endif ); const MessageType1 ParserMessages::tokenizedAttributeValueLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 32 #ifndef SP_NO_MESSAGE_TEXT ,"length of tokenized attribute value must not exceed LITLEN less NORMSEP (%1)" #endif ); const MessageType1 ParserMessages::systemIdentifierLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 33 #ifndef SP_NO_MESSAGE_TEXT ,"length of system identifier must not exceed LITLEN (%1)" #endif ); const MessageType1 ParserMessages::parameterLiteralLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 34 #ifndef SP_NO_MESSAGE_TEXT ,"length of interpreted parameter literal must not exceed LITLEN (%1)" #endif ); const MessageType1 ParserMessages::dataTagPatternLiteralLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 35 #ifndef SP_NO_MESSAGE_TEXT ,"length of interpreted parameter literal in data tag pattern must not exceed DTEMPLEN" #endif ); const MessageType0 ParserMessages::literalClosingDelimiter( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 36 #ifndef SP_NO_MESSAGE_TEXT ,"literal is missing closing delimiter" #endif ); const MessageType2 ParserMessages::paramInvalidToken( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 37 #ifndef SP_NO_MESSAGE_TEXT ,"%1 invalid: only %2 and parameter separators are allowed" #endif ); const MessageType2 ParserMessages::groupTokenInvalidToken( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 38 #ifndef SP_NO_MESSAGE_TEXT ,"%1 invalid: only %2 and token separators are allowed" #endif ); const MessageType2 ParserMessages::connectorInvalidToken( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 39 #ifndef SP_NO_MESSAGE_TEXT ,"%1 invalid: only %2 and token separators are allowed" #endif ); const MessageType1 ParserMessages::noSuchDeclarationType( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 40 #ifndef SP_NO_MESSAGE_TEXT ,"unknown declaration type %1" #endif ); const MessageType1 ParserMessages::dtdSubsetDeclaration( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 41 #ifndef SP_NO_MESSAGE_TEXT ,"%1 declaration not allowed in DTD subset" #endif ); const MessageType1 ParserMessages::declSubsetCharacter( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 42 #ifndef SP_NO_MESSAGE_TEXT ,"character %1 not allowed in declaration subset" #endif ); const MessageType0 ParserMessages::documentEndDtdSubset( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 43 #ifndef SP_NO_MESSAGE_TEXT ,"end of document in DTD subset" #endif ); const MessageType1 ParserMessages::prologCharacter( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 44 #ifndef SP_NO_MESSAGE_TEXT ,"character %1 not allowed in prolog" #endif ); const MessageType0 ParserMessages::documentEndProlog( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 45 #ifndef SP_NO_MESSAGE_TEXT ,"end of document in prolog" #endif ); const MessageType1 ParserMessages::prologDeclaration( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 46 #ifndef SP_NO_MESSAGE_TEXT ,"%1 declaration not allowed in prolog" #endif ); const MessageType1 ParserMessages::rankStemGenericIdentifier( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 47 #ifndef SP_NO_MESSAGE_TEXT ,"%1 used both a rank stem and generic identifier" #endif ); const MessageType0 ParserMessages::missingTagMinimization( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 48 #ifndef SP_NO_MESSAGE_TEXT ,"omitted tag minimization parameter can be omitted only if \"OMITTAG NO\" is specified on the SGML declaration" #endif ); const MessageType1 ParserMessages::duplicateElementDefinition( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 49 #ifndef SP_NO_MESSAGE_TEXT ,"element type %1 already defined" #endif ); const MessageType0 ParserMessages::entityApplicableDtd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 50 #ifndef SP_NO_MESSAGE_TEXT ,"entity reference with no applicable DTD" #endif ); const MessageType1L ParserMessages::commentDeclInvalidToken( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 51 #ifndef SP_NO_MESSAGE_TEXT ,"invalid comment declaration: found %1 outside comment but inside comment declaration" ,"comment declaration started here" #endif ); const MessageType1 ParserMessages::instanceDeclaration( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 53 #ifndef SP_NO_MESSAGE_TEXT ,"%1 declaration not allowed in instance" #endif ); const MessageType0 ParserMessages::contentNonSgml( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 54 #ifndef SP_NO_MESSAGE_TEXT ,"non-SGML character not allowed in content" #endif ); const MessageType1 ParserMessages::noCurrentRank( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 55 #ifndef SP_NO_MESSAGE_TEXT ,"no current rank for rank stem %1" #endif ); const MessageType1 ParserMessages::duplicateAttlistNotation( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 56 #ifndef SP_NO_MESSAGE_TEXT ,"duplicate attribute definition list for notation %1" #endif ); const MessageType1 ParserMessages::duplicateAttlistElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 57 #ifndef SP_NO_MESSAGE_TEXT ,"duplicate attribute definition list for element %1" #endif ); const MessageType0 ParserMessages::endTagEntityEnd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 58 #ifndef SP_NO_MESSAGE_TEXT ,"entity end not allowed in end tag" #endif ); const MessageType1 ParserMessages::endTagCharacter( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 59 #ifndef SP_NO_MESSAGE_TEXT ,"character %1 not allowed in end tag" #endif ); const MessageType1 ParserMessages::endTagInvalidToken( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 60 #ifndef SP_NO_MESSAGE_TEXT ,"%1 invalid: only s and tagc allowed here" #endif ); const MessageType0 ParserMessages::pcdataNotAllowed( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 61 #ifndef SP_NO_MESSAGE_TEXT ,"character data is not allowed here" #endif ); const MessageType1 ParserMessages::elementNotAllowed( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 62 #ifndef SP_NO_MESSAGE_TEXT ,"document type does not allow element %1 here" #endif ); const MessageType2 ParserMessages::missingElementMultiple( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 63 #ifndef SP_NO_MESSAGE_TEXT ,"document type does not allow element %1 here; missing one of %2 start-tag" #endif ); const MessageType2 ParserMessages::missingElementInferred( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 64 #ifndef SP_NO_MESSAGE_TEXT ,"document type does not allow element %1 here; assuming missing %2 start-tag" #endif ); const MessageType1 ParserMessages::startTagEmptyElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 65 #ifndef SP_NO_MESSAGE_TEXT ,"no start tag specified for implied empty element %1" #endif ); const MessageType1L ParserMessages::omitEndTagDeclare( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 66 #ifndef SP_NO_MESSAGE_TEXT ,"end tag for %1 omitted, but its declaration does not permit this" ,"start tag was here" #endif ); const MessageType1L ParserMessages::omitEndTagOmittag( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 68 #ifndef SP_NO_MESSAGE_TEXT ,"end tag for %1 omitted, but OMITTAG NO was specified" ,"start tag was here" #endif ); const MessageType1 ParserMessages::omitStartTagDeclaredContent( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 70 #ifndef SP_NO_MESSAGE_TEXT ,"start tag omitted for element %1 with declared content" #endif ); const MessageType1 ParserMessages::elementEndTagNotFinished( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 71 #ifndef SP_NO_MESSAGE_TEXT ,"end tag for %1 which is not finished" #endif ); const MessageType1 ParserMessages::omitStartTagDeclare( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 72 #ifndef SP_NO_MESSAGE_TEXT ,"start tag for %1 omitted, but its declaration does not permit this" #endif ); const MessageType1 ParserMessages::taglvlOpenElements( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 73 #ifndef SP_NO_MESSAGE_TEXT ,"number of open elements exceeds TAGLVL (%1)" #endif ); const MessageType1 ParserMessages::undefinedElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 74 #ifndef SP_NO_MESSAGE_TEXT ,"element %1 undefined" #endif ); const MessageType0 ParserMessages::emptyEndTagNoOpenElements( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 75 #ifndef SP_NO_MESSAGE_TEXT ,"empty end tag but no open elements" #endif ); const MessageType1 ParserMessages::elementNotFinished( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 76 #ifndef SP_NO_MESSAGE_TEXT ,"%1 not finished but containing element ended" #endif ); const MessageType1 ParserMessages::elementNotOpen( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 77 #ifndef SP_NO_MESSAGE_TEXT ,"end tag for element %1 which is not open" #endif ); const MessageType1 ParserMessages::internalParameterDataEntity( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 78 #ifndef SP_NO_MESSAGE_TEXT ,"internal parameter entity %1 cannot be CDATA or SDATA" #endif ); const MessageType1 ParserMessages::attributeSpecCharacter( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 79 #ifndef SP_NO_MESSAGE_TEXT ,"character %1 not allowed in attribute specification list" #endif ); const MessageType0 ParserMessages::unquotedAttributeValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 80 #ifndef SP_NO_MESSAGE_TEXT ,"an attribute value must be a literal unless it contains only name characters" #endif ); const MessageType0 ParserMessages::attributeSpecEntityEnd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 81 #ifndef SP_NO_MESSAGE_TEXT ,"entity end not allowed in attribute specification list except in attribute value literal" #endif ); const MessageType1 ParserMessages::externalParameterDataSubdocEntity( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 82 #ifndef SP_NO_MESSAGE_TEXT ,"external parameter entity %1 cannot be CDATA, SDATA, NDATA or SUBDOC" #endif ); const MessageType1 ParserMessages::duplicateEntityDeclaration( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 83 #ifndef SP_NO_MESSAGE_TEXT ,"duplicate declaration of entity %1" #endif ); const MessageType1 ParserMessages::duplicateParameterEntityDeclaration( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 84 #ifndef SP_NO_MESSAGE_TEXT ,"duplicate declaration of parameter entity %1" #endif ); const MessageType0 ParserMessages::piEntityReference( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 85 #ifndef SP_NO_MESSAGE_TEXT ,"a reference to a PI entity is allowed only in a context where a processing instruction could occur" #endif ); const MessageType0 ParserMessages::internalDataEntityReference( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 86 #ifndef SP_NO_MESSAGE_TEXT ,"a reference to a CDATA or SDATA entity is allowed only in a context where a data character could occur" #endif ); const MessageType0 ParserMessages::externalNonTextEntityReference( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 87 #ifndef SP_NO_MESSAGE_TEXT ,"a reference to a subdocument entity or external data entity is allowed only in a context where a data character could occur" #endif ); const MessageType0 ParserMessages::externalNonTextEntityRcdata( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 88 #ifndef SP_NO_MESSAGE_TEXT ,"a reference to a subdocument entity or external data entity is not allowed in replaceable character data" #endif ); const MessageType0 ParserMessages::entlvl( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 89 #ifndef SP_NO_MESSAGE_TEXT ,"the number of open entities cannot exceed ENTLVL" #endif ); const MessageType0 ParserMessages::piEntityRcdata( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 90 #ifndef SP_NO_MESSAGE_TEXT ,"a reference to a PI entity is not allowed in replaceable character data" #endif ); const MessageType1 ParserMessages::recursiveEntityReference( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 91 #ifndef SP_NO_MESSAGE_TEXT ,"entity %1 is already open" #endif ); const MessageType1 ParserMessages::undefinedShortrefMapInstance( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 92 #ifndef SP_NO_MESSAGE_TEXT ,"short reference map %1 not defined" #endif ); const MessageType0 ParserMessages::usemapAssociatedElementTypeDtd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 93 #ifndef SP_NO_MESSAGE_TEXT ,"short reference map in DTD must specify associated element type" #endif ); const MessageType0 ParserMessages::usemapAssociatedElementTypeInstance( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 94 #ifndef SP_NO_MESSAGE_TEXT ,"short reference map in document instance cannot specify associated element type" #endif ); const MessageType2 ParserMessages::undefinedShortrefMapDtd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 95 #ifndef SP_NO_MESSAGE_TEXT ,"short reference map %1 for element %2 not defined in DTD" #endif ); const MessageType1 ParserMessages::unknownShortrefDelim( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 96 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a short reference delimiter" #endif ); const MessageType1 ParserMessages::delimDuplicateMap( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 97 #ifndef SP_NO_MESSAGE_TEXT ,"short reference delimiter %1 already mapped in this declaration" #endif ); const MessageType0 ParserMessages::noDocumentElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 98 #ifndef SP_NO_MESSAGE_TEXT ,"no document element" #endif ); const MessageType0 ParserMessages::processingInstructionEntityEnd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 99 #ifndef SP_NO_MESSAGE_TEXT ,"entity end not allowed in processing instruction" #endif ); const MessageType1 ParserMessages::processingInstructionLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 100 #ifndef SP_NO_MESSAGE_TEXT ,"length of processing instruction must not exceed PILEN (%1)" #endif ); const MessageType0 ParserMessages::processingInstructionClose( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 101 #ifndef SP_NO_MESSAGE_TEXT ,"missing pic delimiter" #endif ); const MessageType0 ParserMessages::attributeSpecNameTokenExpected( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 102 #ifndef SP_NO_MESSAGE_TEXT ,"an attribute specification must start with a name or name token" #endif ); const MessageType1 ParserMessages::noSuchAttributeToken( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 103 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a member of a group specified for any attribute" #endif ); const MessageType0 ParserMessages::attributeNameShorttag( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 104 #ifndef SP_NO_MESSAGE_TEXT ,"the name and vi delimiter can be omitted from an attribute specification only if SHORTTAG YES is specified" #endif ); const MessageType1 ParserMessages::noSuchAttribute( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 105 #ifndef SP_NO_MESSAGE_TEXT ,"there is no attribute %1" #endif ); const MessageType0 ParserMessages::attributeValueExpected( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 106 #ifndef SP_NO_MESSAGE_TEXT ,"an attribute value specification must start with a literal or a name character" #endif ); const MessageType1 ParserMessages::nameTokenLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 107 #ifndef SP_NO_MESSAGE_TEXT ,"length of name token must not exceed NAMELEN (%1)" #endif ); const MessageType0 ParserMessages::attributeSpecLiteral( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 108 #ifndef SP_NO_MESSAGE_TEXT ,"an attribute value literal can occur in an attribute specification list only after a vi delimiter" #endif ); const MessageType1 ParserMessages::duplicateAttributeSpec( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 109 #ifndef SP_NO_MESSAGE_TEXT ,"duplicate specification of attribute %1" #endif ); const MessageType1 ParserMessages::duplicateAttributeDef( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 110 #ifndef SP_NO_MESSAGE_TEXT ,"duplicate definition of attribute %1" #endif ); const MessageType0 ParserMessages::emptyDataAttributeSpec( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 111 #ifndef SP_NO_MESSAGE_TEXT ,"data attribute specification must be omitted if attribute specification list is empty" #endif ); const MessageType0 ParserMessages::markedSectionEnd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 112 #ifndef SP_NO_MESSAGE_TEXT ,"marked section end not in marked section declaration" #endif ); const MessageType1 ParserMessages::markedSectionLevel( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 113 #ifndef SP_NO_MESSAGE_TEXT ,"number of open marked sections must not exceed TAGLVL (%1)" #endif ); const MessageType0L ParserMessages::unclosedMarkedSection( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 114 #ifndef SP_NO_MESSAGE_TEXT ,"missing marked section end" ,"marked section started here" #endif ); const MessageType0 ParserMessages::specialParseEntityEnd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 116 #ifndef SP_NO_MESSAGE_TEXT ,"entity end in character data, replaceable character data or ignored marked section" #endif ); const MessageType2 ParserMessages::normalizedAttributeValueLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 117 #ifndef SP_NO_MESSAGE_TEXT ,"normalized length of attribute value literal must not exceed LITLEN (%1); length was %2" #endif ); const MessageType0 ParserMessages::attributeValueSyntax( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 118 #ifndef SP_NO_MESSAGE_TEXT ,"syntax of attribute value does not conform to declared value" #endif ); const MessageType2 ParserMessages::attributeValueChar( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 119 #ifndef SP_NO_MESSAGE_TEXT ,"character %1 is not allowed in the value of attribute %2" #endif ); const MessageType1 ParserMessages::attributeValueMultiple( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 120 #ifndef SP_NO_MESSAGE_TEXT ,"value of attribute %1 must be a single token" #endif ); const MessageType2 ParserMessages::attributeValueNumberToken( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 121 #ifndef SP_NO_MESSAGE_TEXT ,"value of attribute %2 invalid: %1 cannot start a number token" #endif ); const MessageType2 ParserMessages::attributeValueName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 122 #ifndef SP_NO_MESSAGE_TEXT ,"value of attribute %2 invalid: %1 cannot start a name" #endif ); const MessageType1 ParserMessages::attributeMissing( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 123 #ifndef SP_NO_MESSAGE_TEXT ,"non-impliable attribute %1 not specified but OMITTAG NO and SHORTTAG NO" #endif ); const MessageType1 ParserMessages::requiredAttributeMissing( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 124 #ifndef SP_NO_MESSAGE_TEXT ,"required attribute %1 not specified" #endif ); const MessageType1 ParserMessages::currentAttributeMissing( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 125 #ifndef SP_NO_MESSAGE_TEXT ,"first occurrence of current attribute %1 not specified" #endif ); const MessageType1 ParserMessages::invalidNotationAttribute( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 126 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a notation name" #endif ); const MessageType1 ParserMessages::invalidEntityAttribute( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 127 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a general entity name" #endif ); const MessageType3 ParserMessages::attributeValueNotInGroup( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 128 #ifndef SP_NO_MESSAGE_TEXT ,"value of attribute %2 cannot be %1; must be one of %3" #endif ); const MessageType1 ParserMessages::notDataOrSubdocEntity( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 129 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a data or subdocument entity" #endif ); const MessageType3 ParserMessages::ambiguousModelInitial( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 130 #ifndef SP_NO_MESSAGE_TEXT ,"content model is ambiguous: when no tokens have been matched, both the %2 and %3 occurrences of %1 are possible" #endif ); const MessageType5 ParserMessages::ambiguousModel( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 131 #ifndef SP_NO_MESSAGE_TEXT ,"content model is ambiguous: when the current token is the %2 occurrence of %1, both the %4 and %5 occurrences of %3 are possible" #endif ); const MessageType5 ParserMessages::ambiguousModelSingleAnd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 132 #ifndef SP_NO_MESSAGE_TEXT ,"content model is ambiguous: when the current token is the %2 occurrence of %1 and the innermost containing and group has been matched, both the %4 and %5 occurrences of %3 are possible" #endif ); const MessageType6 ParserMessages::ambiguousModelMultipleAnd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 133 #ifndef SP_NO_MESSAGE_TEXT ,"content model is ambiguous: when the current token is the %2 occurrence of %1 and the innermost %3 containing and groups have been matched, both the %5 and %6 occurrences of %4 are possible" #endif ); const MessageType1L ParserMessages::commentDeclarationCharacter( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 134 #ifndef SP_NO_MESSAGE_TEXT ,"invalid comment declaration: found character %1 outside comment but inside comment declaration" ,"comment declaration started here" #endif ); const MessageType1 ParserMessages::nonSgmlCharacter( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 136 #ifndef SP_NO_MESSAGE_TEXT ,"non SGML character number %1" #endif ); const MessageType0 ParserMessages::dataMarkedSectionDeclSubset( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 137 #ifndef SP_NO_MESSAGE_TEXT ,"data or replaceable character data in declaration subset" #endif ); const MessageType1L ParserMessages::duplicateId( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 138 #ifndef SP_NO_MESSAGE_TEXT ,"ID %1 already defined" ,"ID %1 first defined here" #endif ); const MessageType1 ParserMessages::notFixedValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 140 #ifndef SP_NO_MESSAGE_TEXT ,"value of fixed attribute %1 not equal to default" #endif ); const MessageType1 ParserMessages::sdCommentSignificant( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 141 #ifndef SP_NO_MESSAGE_TEXT ,"character %1 is not significant in the reference concrete syntax and so cannot occur in a comment in the SGML declaration" #endif ); const MessageType1 ParserMessages::standardVersion( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 142 #ifndef SP_NO_MESSAGE_TEXT ,"minimum data of first minimum literal in SGML declaration must be \"ISO 8879:1986\" or \"ISO 8879:1986 (ENR)\" or \"ISO 8879:1986 (WWW)\" not %1" #endif ); const MessageType1 ParserMessages::namingBeforeLcnmstrt( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 143 #ifndef SP_NO_MESSAGE_TEXT ,"parameter before \"LCNMSTRT\" must be \"NAMING\" not %1" #endif ); const MessageType1 ParserMessages::sdEntityEnd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 144 #ifndef SP_NO_MESSAGE_TEXT ,"unexpected entity end in SGML declaration: only %1, S separators and comments allowed" #endif ); const MessageType2 ParserMessages::sdInvalidNameToken( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 145 #ifndef SP_NO_MESSAGE_TEXT ,"%1 invalid: only %2 and parameter separators allowed" #endif ); const MessageType1 ParserMessages::numberTooBig( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 146 #ifndef SP_NO_MESSAGE_TEXT ,"magnitude of %1 too big (length exceeds NAMELEN)" #endif ); const MessageType1 ParserMessages::sdLiteralSignificant( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 147 #ifndef SP_NO_MESSAGE_TEXT ,"character %1 is not significant in the reference concrete syntax and so cannot occur in a literal in the SGML declaration except as the replacement of a character reference" #endif ); const MessageType1 ParserMessages::syntaxCharacterNumber( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 148 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a valid syntax reference character number" #endif ); const MessageType0 ParserMessages::sdParameterEntity( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 149 #ifndef SP_NO_MESSAGE_TEXT ,"a parameter entity reference cannot occur in an SGML declaration" #endif ); const MessageType2 ParserMessages::sdParamInvalidToken( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 150 #ifndef SP_NO_MESSAGE_TEXT ,"%1 invalid: only %2 and parameter separators are allowed" #endif ); const MessageType0 ParserMessages::giveUp( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 151 #ifndef SP_NO_MESSAGE_TEXT ,"cannot continue because of previous errors" #endif ); const MessageType1 ParserMessages::sdMissingCharacters( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 152 #ifndef SP_NO_MESSAGE_TEXT ,"SGML declaration cannot be parsed because the character set does not contain characters having the following numbers in ISO 646: %1" #endif ); const MessageType1 ParserMessages::missingMinimumChars( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 153 #ifndef SP_NO_MESSAGE_TEXT ,"the specified character set is invalid because it does not contain the minimum data characters having the following numbers in ISO 646: %1" #endif ); const MessageType1 ParserMessages::duplicateCharNumbers( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 154 #ifndef SP_NO_MESSAGE_TEXT ,"character numbers declared more than once: %1" #endif ); const MessageType1 ParserMessages::codeSetHoles( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 155 #ifndef SP_NO_MESSAGE_TEXT ,"character numbers should have been declared UNUSED: %1" #endif ); const MessageType1 ParserMessages::basesetCharsMissing( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 156 #ifndef SP_NO_MESSAGE_TEXT ,"character numbers missing in base set: %1" #endif ); const MessageType1 ParserMessages::documentCharMax( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 157 #ifndef SP_NO_MESSAGE_TEXT ,"characters in the document character set with numbers exceeding %1 not supported" #endif ); const MessageType1 ParserMessages::fpiMissingField( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 158 #ifndef SP_NO_MESSAGE_TEXT ,"invalid formal public identifier %1: missing //" #endif ); const MessageType1 ParserMessages::fpiMissingTextClassSpace( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 159 #ifndef SP_NO_MESSAGE_TEXT ,"invalid formal public identifier %1: no SPACE after public text class" #endif ); const MessageType1 ParserMessages::fpiInvalidTextClass( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 160 #ifndef SP_NO_MESSAGE_TEXT ,"invalid formal public identifier %1: invalid public text class" #endif ); const MessageType1 ParserMessages::fpiInvalidLanguage( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 161 #ifndef SP_NO_MESSAGE_TEXT ,"invalid formal public identifier %1: public text language must be a name containing only upper case letters" #endif ); const MessageType1 ParserMessages::fpiIllegalDisplayVersion( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 162 #ifndef SP_NO_MESSAGE_TEXT ,"invalid formal public identifer %1: public text display version not permitted with this text class" #endif ); const MessageType1 ParserMessages::fpiExtraField( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 163 #ifndef SP_NO_MESSAGE_TEXT ,"invalid formal public identifier %1: extra field" #endif ); const MessageType0 ParserMessages::notationIdentifierTextClass( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 164 #ifndef SP_NO_MESSAGE_TEXT ,"public text class of public identifier in notation identifier must be NOTATION" #endif ); const MessageType1 ParserMessages::unknownBaseset( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 165 #ifndef SP_NO_MESSAGE_TEXT ,"base character set %1 is unknown" #endif ); const MessageType2 ParserMessages::lexicalAmbiguity( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 166 #ifndef SP_NO_MESSAGE_TEXT ,"delimiter set is ambiguous: %1 and %2 can be recognized in the same mode" #endif ); const MessageType1 ParserMessages::missingSignificant( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 167 #ifndef SP_NO_MESSAGE_TEXT ,"characters with the following numbers in the syntax reference character set are significant in the concrete syntax but are not in the document character set: %1" #endif ); const MessageType1 ParserMessages::translateSyntaxCharDoc( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 168 #ifndef SP_NO_MESSAGE_TEXT ,"there is no unique character in the document character set corresponding to character number %1 in the syntax reference character set" #endif ); const MessageType1 ParserMessages::translateSyntaxCharInternal( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 169 #ifndef SP_NO_MESSAGE_TEXT ,"there is no unique character in the internal character set corresponding to character number %1 in the syntax reference character set" #endif ); const MessageType1 ParserMessages::missingSyntaxChar( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 170 #ifndef SP_NO_MESSAGE_TEXT ,"the character with number %1 in ISO 646 is significant but has no representation in the syntax reference character set" #endif ); const MessageType1 ParserMessages::unknownCapacitySet( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 171 #ifndef SP_NO_MESSAGE_TEXT ,"capacity set %1 is unknown" #endif ); const MessageType1 ParserMessages::duplicateCapacity( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 172 #ifndef SP_NO_MESSAGE_TEXT ,"capacity %1 already specified" #endif ); const MessageType1 ParserMessages::capacityExceedsTotalcap( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 173 #ifndef SP_NO_MESSAGE_TEXT ,"value of capacity %1 exceeds value of TOTALCAP" #endif ); const MessageType1 ParserMessages::unknownPublicSyntax( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 174 #ifndef SP_NO_MESSAGE_TEXT ,"syntax %1 is unknown" #endif ); const MessageType0 ParserMessages::nmstrtLength( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 175 #ifndef SP_NO_MESSAGE_TEXT ,"UCNMSTRT must have the same number of characters as LCNMSTRT" #endif ); const MessageType0 ParserMessages::nmcharLength( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 176 #ifndef SP_NO_MESSAGE_TEXT ,"UCNMCHAR must have the same number of characters as LCNMCHAR" #endif ); const MessageType1 ParserMessages::subdocLevel( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 177 #ifndef SP_NO_MESSAGE_TEXT ,"number of open subdocuments exceeds quantity specified for SUBDOC parameter in SGML declaration (%1)" #endif ); const MessageType1 ParserMessages::subdocEntity( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 178 #ifndef SP_NO_MESSAGE_TEXT ,"entity %1 declared SUBDOC, but SUBDOC NO specified in SGML declaration" #endif ); const MessageType0 ParserMessages::parameterEntityNotEnded( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 179 #ifndef SP_NO_MESSAGE_TEXT ,"a parameter entity referenced in a parameter separator must end in the same declaration" #endif ); const MessageType1 ParserMessages::missingId( MessageType::idrefError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 180 #ifndef SP_NO_MESSAGE_TEXT ,"reference to non-existent ID %1" #endif ); const MessageType1 ParserMessages::dtdUndefinedElement( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 181 #ifndef SP_NO_MESSAGE_TEXT ,"generic identifier %1 used in DTD but not defined" #endif ); const MessageType1 ParserMessages::elementNotFinishedDocumentEnd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 182 #ifndef SP_NO_MESSAGE_TEXT ,"%1 not finished but document ended" #endif ); const MessageType0 ParserMessages::subdocGiveUp( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 183 #ifndef SP_NO_MESSAGE_TEXT ,"cannot continue with subdocument because of previous errors" #endif ); const MessageType0 ParserMessages::noDtd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 184 #ifndef SP_NO_MESSAGE_TEXT ,"no document type declaration; will parse without validation" #endif ); const MessageType0 ParserMessages::noDtdSubset( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 185 #ifndef SP_NO_MESSAGE_TEXT ,"no internal or external document type declaration subset; will parse without validation" #endif ); const MessageType0 ParserMessages::notSgml( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 186 #ifndef SP_NO_MESSAGE_TEXT ,"this is not an SGML document" #endif ); const MessageType1 ParserMessages::taglen( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 187 #ifndef SP_NO_MESSAGE_TEXT ,"length of start-tag before interpretation of literals must not exceed TAGLEN (%1)" #endif ); const MessageType0 ParserMessages::groupParameterEntityNotEnded( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 188 #ifndef SP_NO_MESSAGE_TEXT ,"a parameter entity referenced in a token separator must end in the same group" #endif ); const MessageType1 ParserMessages::invalidSgmlChar( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 189 #ifndef SP_NO_MESSAGE_TEXT ,"the following character numbers are shunned characters that are not significant and so should have been declared UNUSED: %1" #endif ); const MessageType1 ParserMessages::translateDocChar( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 190 #ifndef SP_NO_MESSAGE_TEXT ,"there is no unique character in the specified document character set corresponding to character number %1 in ISO 646" #endif ); const MessageType1 ParserMessages::attributeValueLengthNeg( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 191 #ifndef SP_NO_MESSAGE_TEXT ,"length of attribute value must not exceed LITLEN less NORMSEP (-%1)" #endif ); const MessageType1 ParserMessages::tokenizedAttributeValueLengthNeg( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 192 #ifndef SP_NO_MESSAGE_TEXT ,"length of tokenized attribute value must not exceed LITLEN less NORMSEP (-%1)" #endif ); const MessageType1 ParserMessages::scopeInstanceQuantity( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 193 #ifndef SP_NO_MESSAGE_TEXT ,"concrete syntax scope is INSTANCE but value of %1 quantity is less than value in reference quantity set" #endif ); const MessageType1 ParserMessages::basesetTextClass( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 194 #ifndef SP_NO_MESSAGE_TEXT ,"public text class of formal public identifier of base character set must be CHARSET" #endif ); const MessageType1 ParserMessages::capacityTextClass( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 195 #ifndef SP_NO_MESSAGE_TEXT ,"public text class of formal public identifier of capacity set must be CAPACITY" #endif ); const MessageType1 ParserMessages::syntaxTextClass( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 196 #ifndef SP_NO_MESSAGE_TEXT ,"public text class of formal public identifier of concrete syntax must be SYNTAX" #endif ); const MessageType0 ParserMessages::msocharRequiresMsichar( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 197 #ifndef SP_NO_MESSAGE_TEXT ,"when there is an MSOCHAR there must also be an MSICHAR" #endif ); const MessageType1 ParserMessages::switchNotMarkup( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 198 #ifndef SP_NO_MESSAGE_TEXT ,"character number %1 in the syntax reference character set was specified as a character to be switched but is not a markup character" #endif ); const MessageType1 ParserMessages::switchNotInCharset( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 199 #ifndef SP_NO_MESSAGE_TEXT ,"character number %1 was specified as a character to be switched but is not in the syntax reference character set" #endif ); const MessageType1 ParserMessages::ambiguousDocCharacter( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 200 #ifndef SP_NO_MESSAGE_TEXT ,"character numbers %1 in the document character set have been assigned the same meaning, but this is the meaning of a significant character" #endif ); const MessageType1 ParserMessages::oneFunction( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 201 #ifndef SP_NO_MESSAGE_TEXT ,"character number %1 assigned to more than one function" #endif ); const MessageType1 ParserMessages::duplicateFunctionName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 202 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is already a function name" #endif ); const MessageType1 ParserMessages::missingSignificant646( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 203 #ifndef SP_NO_MESSAGE_TEXT ,"characters with the following numbers in ISO 646 are significant in the concrete syntax but are not in the document character set: %1" #endif ); const MessageType1 ParserMessages::generalDelimAllFunction( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 204 #ifndef SP_NO_MESSAGE_TEXT ,"general delimiter %1 consists solely of function characters" #endif ); const MessageType1 ParserMessages::nmcharLetter( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 205 #ifndef SP_NO_MESSAGE_TEXT ,"letters assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT: %1" #endif ); const MessageType1 ParserMessages::nmcharDigit( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 206 #ifndef SP_NO_MESSAGE_TEXT ,"digits assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT: %1" #endif ); const MessageType1 ParserMessages::nmcharRe( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 207 #ifndef SP_NO_MESSAGE_TEXT ,"character number %1 cannot be assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT because it is RE" #endif ); const MessageType1 ParserMessages::nmcharRs( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 208 #ifndef SP_NO_MESSAGE_TEXT ,"character number %1 cannot be assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT because it is RS" #endif ); const MessageType1 ParserMessages::nmcharSpace( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 209 #ifndef SP_NO_MESSAGE_TEXT ,"character number %1 cannot be assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT because it is SPACE" #endif ); const MessageType1 ParserMessages::nmcharSepchar( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 210 #ifndef SP_NO_MESSAGE_TEXT ,"separator characters assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT: %1" #endif ); const MessageType1 ParserMessages::switchLetterDigit( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 211 #ifndef SP_NO_MESSAGE_TEXT ,"character number %1 cannot be switched because it is a Digit, LC Letter or UC Letter" #endif ); const MessageType0 ParserMessages::zeroNumberOfCharacters( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 212 #ifndef SP_NO_MESSAGE_TEXT ,"pointless for number of characters to be 0" #endif ); const MessageType1 ParserMessages::nameReferenceReservedName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 213 #ifndef SP_NO_MESSAGE_TEXT ,"%1 cannot be the replacement for a reference reserved name because it is another reference reserved name" #endif ); const MessageType1 ParserMessages::ambiguousReservedName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 214 #ifndef SP_NO_MESSAGE_TEXT ,"%1 cannot be the replacement for a reference reserved name because it is the replacement of another reference reserved name" #endif ); const MessageType1 ParserMessages::duplicateReservedName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 215 #ifndef SP_NO_MESSAGE_TEXT ,"replacement for reserved name %1 already specified" #endif ); const MessageType1 ParserMessages::reservedNameSyntax( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 216 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a valid name in the declared concrete syntax" #endif ); const MessageType1 ParserMessages::multipleBSequence( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 217 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a valid short reference delimiter because it has more than one B sequence" #endif ); const MessageType1 ParserMessages::blankAdjacentBSequence( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 218 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a valid short reference delimiter because it is adjacent to a character that can occur in a blank sequence" #endif ); const MessageType2 ParserMessages::delimiterLength( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 219 #ifndef SP_NO_MESSAGE_TEXT ,"length of delimiter %1 exceeds NAMELEN (%2)" #endif ); const MessageType2 ParserMessages::reservedNameLength( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 220 #ifndef SP_NO_MESSAGE_TEXT ,"length of reserved name %1 exceeds NAMELEN (%2)" #endif ); const MessageType1 ParserMessages::nmcharNmstrt( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 221 #ifndef SP_NO_MESSAGE_TEXT ,"character numbers assigned to both LCNMCHAR or UCNMCHAR and LCNMSTRT or UCNMSTRT: %1" #endif ); const MessageType0 ParserMessages::scopeInstanceSyntaxCharset( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 222 #ifndef SP_NO_MESSAGE_TEXT ,"when the concrete syntax scope is INSTANCE the syntax reference character set of the declared syntax must be the same as that of the reference concrete syntax" #endif ); const MessageType0 ParserMessages::emptyOmitEndTag( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 223 #ifndef SP_NO_MESSAGE_TEXT ,"end-tag minimization should be \"O\" for element with declared content of EMPTY" #endif ); const MessageType1 ParserMessages::conrefOmitEndTag( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 224 #ifndef SP_NO_MESSAGE_TEXT ,"end-tag minimization should be \"O\" for element %1 because it has CONREF attribute" #endif ); const MessageType1 ParserMessages::conrefEmpty( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 225 #ifndef SP_NO_MESSAGE_TEXT ,"element %1 has a declared content of EMPTY and a CONREF attribute" #endif ); const MessageType1 ParserMessages::notationEmpty( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 226 #ifndef SP_NO_MESSAGE_TEXT ,"element %1 has a declared content of EMPTY and a NOTATION attribute" #endif ); const MessageType0 ParserMessages::dataAttributeDeclaredValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 227 #ifndef SP_NO_MESSAGE_TEXT ,"declared value of data attribute cannot be ENTITY, ENTITIES, ID, IDREF, IDREFS or NOTATION" #endif ); const MessageType0 ParserMessages::dataAttributeDefaultValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 228 #ifndef SP_NO_MESSAGE_TEXT ,"default value of data attribute cannot be CONREF or CURRENT" #endif ); const MessageType2 ParserMessages::attcnt( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 229 #ifndef SP_NO_MESSAGE_TEXT ,"number of attribute names and name tokens (%1) exceeds ATTCNT (%2)" #endif ); const MessageType0 ParserMessages::idDeclaredValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 230 #ifndef SP_NO_MESSAGE_TEXT ,"if the declared value is ID the default value must be IMPLIED or REQUIRED" #endif ); const MessageType1 ParserMessages::multipleIdAttributes( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 231 #ifndef SP_NO_MESSAGE_TEXT ,"the attribute definition list already declared attribute %1 as the ID attribute" #endif ); const MessageType1 ParserMessages::multipleNotationAttributes( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 232 #ifndef SP_NO_MESSAGE_TEXT ,"the attribute definition list already declared attribute %1 as the NOTATION attribute" #endif ); const MessageType1 ParserMessages::duplicateAttributeToken( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 233 #ifndef SP_NO_MESSAGE_TEXT ,"token %1 occurs more than once in attribute definition list" #endif ); const MessageType1 ParserMessages::notationNoAttributes( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 234 #ifndef SP_NO_MESSAGE_TEXT ,"no attributes defined for notation %1" #endif ); const MessageType2 ParserMessages::entityNotationUndefined( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 235 #ifndef SP_NO_MESSAGE_TEXT ,"notation %1 for entity %2 undefined" #endif ); const MessageType2 ParserMessages::mapEntityUndefined( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 236 #ifndef SP_NO_MESSAGE_TEXT ,"entity %1 undefined in short reference map %2" #endif ); const MessageType1 ParserMessages::attlistNotationUndefined( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 237 #ifndef SP_NO_MESSAGE_TEXT ,"notation %1 is undefined but had attribute definition" #endif ); const MessageType1 ParserMessages::bracketedLitlen( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 238 #ifndef SP_NO_MESSAGE_TEXT ,"length of interpreted parameter literal in bracketed text plus the length of the bracketing delimiters must not exceed LITLEN (%1)" #endif ); const MessageType1 ParserMessages::genericIdentifierLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 239 #ifndef SP_NO_MESSAGE_TEXT ,"length of rank stem plus length of rank suffix must not exceed NAMELEN (%1)" #endif ); const MessageType0 ParserMessages::instanceStartOmittag( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 240 #ifndef SP_NO_MESSAGE_TEXT ,"document instance must start with document element" #endif ); const MessageType1 ParserMessages::grplvl( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 241 #ifndef SP_NO_MESSAGE_TEXT ,"content model nesting level exceeds GRPLVL (%1)" #endif ); const MessageType1 ParserMessages::grpgtcnt( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 242 #ifndef SP_NO_MESSAGE_TEXT ,"grand total of content tokens exceeds GRPGTCNT (%1)" #endif ); const MessageType0 ParserMessages::unclosedStartTagShorttag( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 243 #ifndef SP_NO_MESSAGE_TEXT ,"unclosed start-tag requires SHORTTAG YES" #endif ); const MessageType0 ParserMessages::netEnablingStartTagShorttag( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 244 #ifndef SP_NO_MESSAGE_TEXT ,"net-enabling start-tag requires SHORTTAG YES" #endif ); const MessageType0 ParserMessages::unclosedEndTagShorttag( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 245 #ifndef SP_NO_MESSAGE_TEXT ,"unclosed end-tag requires SHORTTAG YES" #endif ); const MessageType0 ParserMessages::multipleDtds( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 246 #ifndef SP_NO_MESSAGE_TEXT ,"DTDs other than base allowed only if CONCUR YES or EXPLICIT YES" #endif ); const MessageType0 ParserMessages::afterDocumentElementEntityEnd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 247 #ifndef SP_NO_MESSAGE_TEXT ,"end of entity other than document entity after document element" #endif ); const MessageType1 ParserMessages::declarationAfterDocumentElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 248 #ifndef SP_NO_MESSAGE_TEXT ,"%1 declaration illegal after document element" #endif ); const MessageType0 ParserMessages::characterReferenceAfterDocumentElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 249 #ifndef SP_NO_MESSAGE_TEXT ,"character reference illegal after document element" #endif ); const MessageType0 ParserMessages::entityReferenceAfterDocumentElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 250 #ifndef SP_NO_MESSAGE_TEXT ,"entity reference illegal after document element" #endif ); const MessageType0 ParserMessages::markedSectionAfterDocumentElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 251 #ifndef SP_NO_MESSAGE_TEXT ,"marked section illegal after document element" #endif ); const MessageType3 ParserMessages::requiredElementExcluded( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 252 #ifndef SP_NO_MESSAGE_TEXT ,"the %1 occurrence of %2 in the content model for %3 cannot be excluded at this point because it is contextually required" #endif ); const MessageType3 ParserMessages::invalidExclusion( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 253 #ifndef SP_NO_MESSAGE_TEXT ,"the %1 occurrence of %2 in the content model for %3 cannot be excluded because it is neither inherently optional nor a member of an or group" #endif ); const MessageType0 ParserMessages::attributeValueShorttag( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 254 #ifndef SP_NO_MESSAGE_TEXT ,"an attribute value specification must be an attribute value literal unless SHORTTAG YES is specified" #endif ); const MessageType0 ParserMessages::conrefNotation( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 255 #ifndef SP_NO_MESSAGE_TEXT ,"value cannot be specified both for notation attribute and content reference attribute" #endif ); const MessageType1 ParserMessages::duplicateNotationDeclaration( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 256 #ifndef SP_NO_MESSAGE_TEXT ,"notation %1 already defined" #endif ); const MessageType1L ParserMessages::duplicateShortrefDeclaration( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 257 #ifndef SP_NO_MESSAGE_TEXT ,"short reference map %1 already defined" ,"first defined here" #endif ); const MessageType1 ParserMessages::duplicateDelimGeneral( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 259 #ifndef SP_NO_MESSAGE_TEXT ,"general delimiter role %1 already defined" #endif ); const MessageType1 ParserMessages::idrefGrpcnt( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 260 #ifndef SP_NO_MESSAGE_TEXT ,"number of id references in start-tag must not exceed GRPCNT (%1)" #endif ); const MessageType1 ParserMessages::entityNameGrpcnt( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 261 #ifndef SP_NO_MESSAGE_TEXT ,"number of entity names in attribute specification list must not exceed GRPCNT (%1)" #endif ); const MessageType2 ParserMessages::attsplen( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 262 #ifndef SP_NO_MESSAGE_TEXT ,"normalized length of attribute specification list must not exceed ATTSPLEN (%1); length was %2" #endif ); const MessageType1 ParserMessages::duplicateDelimShortref( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 263 #ifndef SP_NO_MESSAGE_TEXT ,"short reference delimiter %1 already specified" #endif ); const MessageType1 ParserMessages::duplicateDelimShortrefSet( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 264 #ifndef SP_NO_MESSAGE_TEXT ,"single character short references were already specified for character numbers: %1" #endif ); const MessageType1 ParserMessages::defaultEntityInAttribute( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 265 #ifndef SP_NO_MESSAGE_TEXT ,"default entity used in entity attribute %1" #endif ); const MessageType1 ParserMessages::defaultEntityReference( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 266 #ifndef SP_NO_MESSAGE_TEXT ,"reference to entity %1 uses default entity " #endif ); const MessageType2 ParserMessages::mapDefaultEntity( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 267 #ifndef SP_NO_MESSAGE_TEXT ,"entity %1 in short reference map %2 uses default entity" #endif ); const MessageType1 ParserMessages::noSuchDtd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 268 #ifndef SP_NO_MESSAGE_TEXT ,"no DTD %1 declared" #endif ); const MessageType1 ParserMessages::noLpdSubset( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 269 #ifndef SP_NO_MESSAGE_TEXT ,"LPD %1 has neither internal nor external subset" #endif ); const MessageType0 ParserMessages::assocElementDifferentAtts( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 270 #ifndef SP_NO_MESSAGE_TEXT ,"element types have different link attribute definitions" #endif ); const MessageType1 ParserMessages::duplicateLinkSet( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 271 #ifndef SP_NO_MESSAGE_TEXT ,"link set %1 already defined" #endif ); const MessageType0 ParserMessages::emptyResultAttributeSpec( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 272 #ifndef SP_NO_MESSAGE_TEXT ,"empty result attribute specification" #endif ); const MessageType1 ParserMessages::noSuchSourceElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 273 #ifndef SP_NO_MESSAGE_TEXT ,"no source element type %1" #endif ); const MessageType1 ParserMessages::noSuchResultElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 274 #ifndef SP_NO_MESSAGE_TEXT ,"no result element type %1" #endif ); const MessageType0 ParserMessages::documentEndLpdSubset( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 275 #ifndef SP_NO_MESSAGE_TEXT ,"end of document in LPD subset" #endif ); const MessageType1 ParserMessages::lpdSubsetDeclaration( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 276 #ifndef SP_NO_MESSAGE_TEXT ,"%1 declaration not allowed in LPD subset" #endif ); const MessageType0 ParserMessages::idlinkDeclSimple( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 277 #ifndef SP_NO_MESSAGE_TEXT ,"ID link set declaration not allowed in simple link declaration subset" #endif ); const MessageType0 ParserMessages::linkDeclSimple( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 278 #ifndef SP_NO_MESSAGE_TEXT ,"link set declaration not allowed in simple link declaration subset" #endif ); const MessageType1 ParserMessages::simpleLinkAttlistElement( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 279 #ifndef SP_NO_MESSAGE_TEXT ,"attributes can only be defined for base document element (not %1) in simple link declaration subset" #endif ); const MessageType0 ParserMessages::shortrefOnlyInBaseDtd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 280 #ifndef SP_NO_MESSAGE_TEXT ,"a short reference mapping declaration is allowed only in the base DTD" #endif ); const MessageType0 ParserMessages::usemapOnlyInBaseDtd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 281 #ifndef SP_NO_MESSAGE_TEXT ,"a short reference use declaration is allowed only in the base DTD" #endif ); const MessageType0 ParserMessages::linkAttributeDefaultValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 282 #ifndef SP_NO_MESSAGE_TEXT ,"default value of link attribute cannot be CURRENT or CONREF" #endif ); const MessageType0 ParserMessages::linkAttributeDeclaredValue( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 283 #ifndef SP_NO_MESSAGE_TEXT ,"declared value of link attribute cannot be ID, IDREF, IDREFS or NOTATION" #endif ); const MessageType0 ParserMessages::simpleLinkFixedAttribute( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 284 #ifndef SP_NO_MESSAGE_TEXT ,"only fixed attributes can be defined in simple LPD" #endif ); const MessageType0 ParserMessages::duplicateIdLinkSet( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 285 #ifndef SP_NO_MESSAGE_TEXT ,"only one ID link set declaration allowed in an LPD subset" #endif ); const MessageType1 ParserMessages::noInitialLinkSet( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 286 #ifndef SP_NO_MESSAGE_TEXT ,"no initial link set defined for LPD %1" #endif ); const MessageType1 ParserMessages::notationUndefinedSourceDtd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 287 #ifndef SP_NO_MESSAGE_TEXT ,"notation %1 not defined in source DTD" #endif ); const MessageType0 ParserMessages::simpleLinkResultNotImplied( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 288 #ifndef SP_NO_MESSAGE_TEXT ,"result document type in simple link specification must be implied" #endif ); const MessageType0 ParserMessages::simpleLinkFeature( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 289 #ifndef SP_NO_MESSAGE_TEXT ,"simple link requires SIMPLE YES" #endif ); const MessageType0 ParserMessages::implicitLinkFeature( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 290 #ifndef SP_NO_MESSAGE_TEXT ,"implicit link requires IMPLICIT YES" #endif ); const MessageType0 ParserMessages::explicitLinkFeature( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 291 #ifndef SP_NO_MESSAGE_TEXT ,"explicit link requires EXPLICIT YES" #endif ); const MessageType0 ParserMessages::lpdBeforeBaseDtd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 292 #ifndef SP_NO_MESSAGE_TEXT ,"LPD not allowed before first DTD" #endif ); const MessageType0 ParserMessages::dtdAfterLpd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 293 #ifndef SP_NO_MESSAGE_TEXT ,"DTD not allowed after an LPD" #endif ); const MessageType1 ParserMessages::unstableLpdGeneralEntity( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 294 #ifndef SP_NO_MESSAGE_TEXT ,"definition of general entity %1 is unstable" #endif ); const MessageType1 ParserMessages::unstableLpdParameterEntity( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 295 #ifndef SP_NO_MESSAGE_TEXT ,"definition of parameter entity %1 is unstable" #endif ); const MessageType1 ParserMessages::multipleIdLinkRuleAttribute( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 296 #ifndef SP_NO_MESSAGE_TEXT ,"multiple link rules for ID %1 but not all have link attribute specifications" #endif ); const MessageType1 ParserMessages::multipleLinkRuleAttribute( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 297 #ifndef SP_NO_MESSAGE_TEXT ,"multiple link rules for element type %1 but not all have link attribute specifications" #endif ); const MessageType2 ParserMessages::uselinkBadLinkSet( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 298 #ifndef SP_NO_MESSAGE_TEXT ,"link type %1 does not have a link set %2" #endif ); const MessageType1 ParserMessages::uselinkSimpleLpd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 299 #ifndef SP_NO_MESSAGE_TEXT ,"link set use declaration for simple link process" #endif ); const MessageType1 ParserMessages::uselinkBadLinkType( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 300 #ifndef SP_NO_MESSAGE_TEXT ,"no link type %1" #endif ); const MessageType1 ParserMessages::duplicateDtdLpd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 301 #ifndef SP_NO_MESSAGE_TEXT ,"both document type and link type %1" #endif ); const MessageType1 ParserMessages::duplicateLpd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 302 #ifndef SP_NO_MESSAGE_TEXT ,"link type %1 already defined" #endif ); const MessageType1 ParserMessages::duplicateDtd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 303 #ifndef SP_NO_MESSAGE_TEXT ,"document type %1 already defined" #endif ); const MessageType1 ParserMessages::undefinedLinkSet( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 304 #ifndef SP_NO_MESSAGE_TEXT ,"link set %1 used in LPD but not defined" #endif ); const MessageType1 ParserMessages::duplicateImpliedResult( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 305 #ifndef SP_NO_MESSAGE_TEXT ,"#IMPLIED already linked to result element type %1" #endif ); const MessageType1 ParserMessages::simpleLinkCount( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 306 #ifndef SP_NO_MESSAGE_TEXT ,"number of active simple link processes exceeds quantity specified for SIMPLE parameter in SGML declaration (%1)" #endif ); const MessageType0 ParserMessages::duplicateExplicitChain( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 307 #ifndef SP_NO_MESSAGE_TEXT ,"only one chain of explicit link processes can be active" #endif ); const MessageType1 ParserMessages::explicit1RequiresSourceTypeBase( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 308 #ifndef SP_NO_MESSAGE_TEXT ,"source document type name for link type %1 must be base document type since EXPLICIT YES 1" #endif ); const MessageType0 ParserMessages::oneImplicitLink( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 309 #ifndef SP_NO_MESSAGE_TEXT ,"one one implicit link process can be active" #endif ); const MessageType1 ParserMessages::sorryLink( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 310 #ifndef SP_NO_MESSAGE_TEXT ,"sorry, link type %1 not activated: only one implicit or explicit link process can be active (with base document type as source document type)" #endif ); const MessageType0 ParserMessages::entityReferenceMissingName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 311 #ifndef SP_NO_MESSAGE_TEXT ,"name missing after name group in entity reference" #endif ); const MessageType1 ParserMessages::explicitNoRequiresSourceTypeBase( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 312 #ifndef SP_NO_MESSAGE_TEXT ,"source document type name for link type %1 must be base document type since EXPLICIT NO" #endif ); const MessageType0 ParserMessages::linkActivateTooLate( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 313 #ifndef SP_NO_MESSAGE_TEXT ,"link process must be activated before base DTD" #endif ); const MessageType0 ParserMessages::pass2Ee( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 314 #ifndef SP_NO_MESSAGE_TEXT ,"unexpected entity end while starting second pass" #endif ); const MessageType2 ParserMessages::idlinkElementType( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 315 #ifndef SP_NO_MESSAGE_TEXT ,"type %1 of element with ID %2 not associated element type for applicable link rule in ID link set" #endif ); const MessageType0 ParserMessages::datatagNotImplemented( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 316 #ifndef SP_NO_MESSAGE_TEXT ,"DATATAG feature not implemented" #endif ); const MessageType0 ParserMessages::startTagMissingName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 317 #ifndef SP_NO_MESSAGE_TEXT ,"generic identifier specification missing after document type specification in start-tag" #endif ); const MessageType0 ParserMessages::endTagMissingName( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 318 #ifndef SP_NO_MESSAGE_TEXT ,"generic identifier specification missing after document type specification in end-tag" #endif ); const MessageType0 ParserMessages::startTagGroupNet( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 319 #ifndef SP_NO_MESSAGE_TEXT ,"a net-enabling start-tag cannot include a document type specification" #endif ); const MessageType0 ParserMessages::documentElementUndefined( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 320 #ifndef SP_NO_MESSAGE_TEXT ,"DTD did not contain element declaration for document type name" #endif ); const MessageType0 ParserMessages::badDefaultSgmlDecl( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 321 #ifndef SP_NO_MESSAGE_TEXT ,"invalid default SGML declaration" #endif ); const MessageType1L ParserMessages::nonExistentEntityRef( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 322 #ifndef SP_NO_MESSAGE_TEXT ,"reference to entity %1 for which no system identifier could be generated" ,"entity was defined here" #endif ); const MessageType0 ParserMessages::pcdataUnreachable( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 324 #ifndef SP_NO_MESSAGE_TEXT ,"content model is mixed but does not allow #PCDATA everywhere" #endif ); const MessageType0 ParserMessages::sdRangeNotSingleChar( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 325 #ifndef SP_NO_MESSAGE_TEXT ,"start or end of range must specify a single character" #endif ); const MessageType0 ParserMessages::sdInvalidRange( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 326 #ifndef SP_NO_MESSAGE_TEXT ,"number of first character in range must not exceed number of second character in range" #endif ); const MessageType0 ParserMessages::sdEmptyDelimiter( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 327 #ifndef SP_NO_MESSAGE_TEXT ,"delimiter cannot be an empty string" #endif ); const MessageType0 ParserMessages::tooManyCharsMinimumLiteral( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 328 #ifndef SP_NO_MESSAGE_TEXT ,"too many characters assigned same meaning with minimum literal" #endif ); const MessageType1 ParserMessages::defaultedEntityDefined( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 329 #ifndef SP_NO_MESSAGE_TEXT ,"earlier reference to entity %1 used default entity" #endif ); const MessageType0 ParserMessages::emptyStartTag( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 330 #ifndef SP_NO_MESSAGE_TEXT ,"empty start-tag" #endif ); const MessageType0 ParserMessages::emptyEndTag( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 331 #ifndef SP_NO_MESSAGE_TEXT ,"empty end-tag" #endif ); const MessageType1 ParserMessages::unusedMap( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 332 #ifndef SP_NO_MESSAGE_TEXT ,"unused short reference map %1" #endif ); const MessageType1 ParserMessages::unusedParamEntity( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 333 #ifndef SP_NO_MESSAGE_TEXT ,"unused parameter entity %1" #endif ); const MessageType1 ParserMessages::cannotGenerateSystemIdPublic( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 334 #ifndef SP_NO_MESSAGE_TEXT ,"cannot generate system identifier for public text %1" #endif ); const MessageType1 ParserMessages::cannotGenerateSystemIdGeneral( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 335 #ifndef SP_NO_MESSAGE_TEXT ,"cannot generate system identifier for general entity %1" #endif ); const MessageType1 ParserMessages::cannotGenerateSystemIdParameter( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 336 #ifndef SP_NO_MESSAGE_TEXT ,"cannot generate system identifier for parameter entity %1" #endif ); const MessageType1 ParserMessages::cannotGenerateSystemIdDoctype( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 337 #ifndef SP_NO_MESSAGE_TEXT ,"cannot generate system identifier for document type %1" #endif ); const MessageType1 ParserMessages::cannotGenerateSystemIdLinktype( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 338 #ifndef SP_NO_MESSAGE_TEXT ,"cannot generate system identifier for link type %1" #endif ); const MessageType1 ParserMessages::cannotGenerateSystemIdNotation( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 339 #ifndef SP_NO_MESSAGE_TEXT ,"cannot generate system identifier for notation %1" #endif ); const MessageType1 ParserMessages::excludeIncludeSame( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 340 #ifndef SP_NO_MESSAGE_TEXT ,"element type %1 both included and excluded" #endif ); const MessageType1 ParserMessages::implyingDtd( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 341 #ifndef SP_NO_MESSAGE_TEXT ,"no document type declaration; implying %1" #endif ); const MessageType1 ParserMessages::afdrVersion( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 342 #ifndef SP_NO_MESSAGE_TEXT ,"minimum data of AFDR declaration must be \"ISO/IEC 10744:1997\" not %1" #endif ); const MessageType0 ParserMessages::missingAfdrDecl( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 343 #ifndef SP_NO_MESSAGE_TEXT ,"AFDR declaration required before use of AFDR extensions" #endif ); const MessageType0 ParserMessages::enrRequired( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 344 #ifndef SP_NO_MESSAGE_TEXT ,"ENR extensions were used but minimum literal was not \"ISO 8879:1986 (ENR)\" or \"ISO 8879:1986 (WWW)\"" #endif ); const MessageType1 ParserMessages::numericCharRefLiteralNonSgml( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 345 #ifndef SP_NO_MESSAGE_TEXT ,"illegal numeric character reference to non-SGML character %1 in literal" #endif ); const MessageType2 ParserMessages::numericCharRefUnknownDesc( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 346 #ifndef SP_NO_MESSAGE_TEXT ,"cannot convert character reference to number %1 because description %2 unrecognized" #endif ); const MessageType3 ParserMessages::numericCharRefUnknownBase( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 347 #ifndef SP_NO_MESSAGE_TEXT ,"cannot convert character reference to number %1 because character %2 from baseset %3 unknown" #endif ); const MessageType1 ParserMessages::numericCharRefBadInternal( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 348 #ifndef SP_NO_MESSAGE_TEXT ,"character reference to number %1 cannot be converted because of problem with internal character set" #endif ); const MessageType1 ParserMessages::numericCharRefNoInternal( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 349 #ifndef SP_NO_MESSAGE_TEXT ,"cannot convert character reference to number %1 because character not in internal character set" #endif ); const MessageType0 ParserMessages::wwwRequired( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 350 #ifndef SP_NO_MESSAGE_TEXT ,"Web SGML adaptations were used but minimum literal was not \"ISO 8879:1986 (WWW)\"" #endif ); const MessageType1 ParserMessages::attributeTokenNotUnique( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 351 #ifndef SP_NO_MESSAGE_TEXT ,"token %1 can be value for more multiple attributes so attribute name required" #endif ); const MessageType1 ParserMessages::hexNumberLength( MessageType::quantityError, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 352 #ifndef SP_NO_MESSAGE_TEXT ,"length of hex number must not exceed NAMELEN (%1)" #endif ); const MessageType1 ParserMessages::entityNameSyntax( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 353 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a valid name in the declared concrete syntax" #endif ); const MessageType0 ParserMessages::cdataContent( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 354 #ifndef SP_NO_MESSAGE_TEXT ,"CDATA declared content" #endif ); const MessageType0 ParserMessages::rcdataContent( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 355 #ifndef SP_NO_MESSAGE_TEXT ,"RCDATA declared content" #endif ); const MessageType0 ParserMessages::inclusion( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 356 #ifndef SP_NO_MESSAGE_TEXT ,"inclusion" #endif ); const MessageType0 ParserMessages::exclusion( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 357 #ifndef SP_NO_MESSAGE_TEXT ,"exclusion" #endif ); const MessageType0 ParserMessages::numberDeclaredValue( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 358 #ifndef SP_NO_MESSAGE_TEXT ,"NUMBER or NUMBERS declared value" #endif ); const MessageType0 ParserMessages::nameDeclaredValue( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 359 #ifndef SP_NO_MESSAGE_TEXT ,"NAME or NAMES declared value" #endif ); const MessageType0 ParserMessages::nutokenDeclaredValue( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 360 #ifndef SP_NO_MESSAGE_TEXT ,"NUTOKEN or NUTOKENS declared value" #endif ); const MessageType0 ParserMessages::conrefAttribute( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 361 #ifndef SP_NO_MESSAGE_TEXT ,"conref attribute" #endif ); const MessageType0 ParserMessages::currentAttribute( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 362 #ifndef SP_NO_MESSAGE_TEXT ,"current attribute" #endif ); const MessageType0 ParserMessages::tempMarkedSection( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 363 #ifndef SP_NO_MESSAGE_TEXT ,"TEMP marked section" #endif ); const MessageType0 ParserMessages::instanceIncludeMarkedSection( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 364 #ifndef SP_NO_MESSAGE_TEXT ,"included marked section in the instance" #endif ); const MessageType0 ParserMessages::instanceIgnoreMarkedSection( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 365 #ifndef SP_NO_MESSAGE_TEXT ,"ignored marked section in the instance" #endif ); const MessageType0 ParserMessages::rcdataMarkedSection( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 366 #ifndef SP_NO_MESSAGE_TEXT ,"RCDATA marked section" #endif ); const MessageType0 ParserMessages::piEntity( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 367 #ifndef SP_NO_MESSAGE_TEXT ,"processing instruction entity" #endif ); const MessageType0 ParserMessages::bracketEntity( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 368 #ifndef SP_NO_MESSAGE_TEXT ,"bracketed text entity" #endif ); const MessageType0 ParserMessages::internalCdataEntity( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 369 #ifndef SP_NO_MESSAGE_TEXT ,"internal CDATA entity" #endif ); const MessageType0 ParserMessages::internalSdataEntity( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 370 #ifndef SP_NO_MESSAGE_TEXT ,"internal SDATA entity" #endif ); const MessageType0 ParserMessages::externalCdataEntity( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 371 #ifndef SP_NO_MESSAGE_TEXT ,"external CDATA entity" #endif ); const MessageType0 ParserMessages::externalSdataEntity( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 372 #ifndef SP_NO_MESSAGE_TEXT ,"external SDATA entity" #endif ); const MessageType0 ParserMessages::dataAttributes( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 373 #ifndef SP_NO_MESSAGE_TEXT ,"attribute definition list declaration for notation" #endif ); const MessageType0 ParserMessages::rank( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 374 #ifndef SP_NO_MESSAGE_TEXT ,"rank stem" #endif ); const MessageType0 ParserMessages::missingSystemId( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 375 #ifndef SP_NO_MESSAGE_TEXT ,"no system id specified" #endif ); const MessageType0 ParserMessages::psComment( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 376 #ifndef SP_NO_MESSAGE_TEXT ,"comment in parameter separator" #endif ); const MessageType0 ParserMessages::namedCharRef( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 377 #ifndef SP_NO_MESSAGE_TEXT ,"named character reference" #endif ); const MessageType0 ParserMessages::andGroup( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 378 #ifndef SP_NO_MESSAGE_TEXT ,"and group" #endif ); const MessageType0 ParserMessages::attributeValueNotLiteral( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 379 #ifndef SP_NO_MESSAGE_TEXT ,"attribute value not a literal" #endif ); const MessageType0 ParserMessages::missingAttributeName( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 380 #ifndef SP_NO_MESSAGE_TEXT ,"attribute name missing" #endif ); const MessageType0 ParserMessages::elementGroupDecl( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 381 #ifndef SP_NO_MESSAGE_TEXT ,"element declaration for group of element types" #endif ); const MessageType0 ParserMessages::attlistGroupDecl( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 382 #ifndef SP_NO_MESSAGE_TEXT ,"attribute definition list declaration for group of element types" #endif ); const MessageType0 ParserMessages::emptyCommentDecl( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 383 #ifndef SP_NO_MESSAGE_TEXT ,"empty comment declaration" #endif ); const MessageType0 ParserMessages::commentDeclS( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 384 #ifndef SP_NO_MESSAGE_TEXT ,"s separator in comment declaration" #endif ); const MessageType0 ParserMessages::commentDeclMultiple( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 385 #ifndef SP_NO_MESSAGE_TEXT ,"multiple comments in comment declaration" #endif ); const MessageType0 ParserMessages::missingStatusKeyword( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 386 #ifndef SP_NO_MESSAGE_TEXT ,"no status keyword" #endif ); const MessageType0 ParserMessages::multipleStatusKeyword( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 387 #ifndef SP_NO_MESSAGE_TEXT ,"multiple status keywords" #endif ); const MessageType0 ParserMessages::instanceParamEntityRef( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 388 #ifndef SP_NO_MESSAGE_TEXT ,"parameter entity reference in document instance" #endif ); const MessageType0 ParserMessages::current( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 389 #ifndef SP_NO_MESSAGE_TEXT ,"current attribute" #endif ); const MessageType0 ParserMessages::minimizationParam( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 390 #ifndef SP_NO_MESSAGE_TEXT ,"element type minimization parameter" #endif ); const MessageType0 ParserMessages::refc( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 391 #ifndef SP_NO_MESSAGE_TEXT ,"reference not terminated by refc delimiter" #endif ); const MessageType0 ParserMessages::pcdataNotFirstInGroup( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 392 #ifndef SP_NO_MESSAGE_TEXT ,"#PCDATA not first in model group" #endif ); const MessageType0 ParserMessages::pcdataInSeqGroup( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 393 #ifndef SP_NO_MESSAGE_TEXT ,"#PCDATA in seq group" #endif ); const MessageType0 ParserMessages::pcdataInNestedModelGroup( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 394 #ifndef SP_NO_MESSAGE_TEXT ,"#PCDATA in nested model group" #endif ); const MessageType0 ParserMessages::pcdataGroupNotRep( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 395 #ifndef SP_NO_MESSAGE_TEXT ,"#PCDATA in model group that does not have rep occurrence indicator" #endif ); const MessageType0 ParserMessages::nameGroupNotOr( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 396 #ifndef SP_NO_MESSAGE_TEXT ,"name group or name token group used connector other than OR" #endif ); const MessageType0 ParserMessages::piMissingName( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 397 #ifndef SP_NO_MESSAGE_TEXT ,"processing instruction does not start with name" #endif ); const MessageType0 ParserMessages::instanceStatusKeywordSpecS( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 398 #ifndef SP_NO_MESSAGE_TEXT ,"s separator in status keyword specification in document instance" #endif ); const MessageType0 ParserMessages::externalDataEntityRef( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 399 #ifndef SP_NO_MESSAGE_TEXT ,"reference to external data entity" #endif ); const MessageType0 ParserMessages::attributeValueExternalEntityRef( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 400 #ifndef SP_NO_MESSAGE_TEXT ,"reference to external entity in attribute value" #endif ); const MessageType1 ParserMessages::dataCharDelim( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 401 #ifndef SP_NO_MESSAGE_TEXT ,"character %1 is the first character of a delimiter but occurred as data" #endif ); const MessageType0 ParserMessages::explicitSgmlDecl( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 402 #ifndef SP_NO_MESSAGE_TEXT ,"SGML declaration was not implied" #endif ); const MessageType0 ParserMessages::internalSubsetMarkedSection( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 403 #ifndef SP_NO_MESSAGE_TEXT ,"marked section in internal DTD subset" #endif ); const MessageType0 ParserMessages::nestcWithoutNet( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 404 #ifndef SP_NO_MESSAGE_TEXT ,"net-enabling start-tag not immediately followed by null end-tag" #endif ); const MessageType0 ParserMessages::contentAsyncEntityRef( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 405 #ifndef SP_NO_MESSAGE_TEXT ,"entity end in different element from entity reference" #endif ); const MessageType0 ParserMessages::immednetRequiresEmptynrm( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 406 #ifndef SP_NO_MESSAGE_TEXT ,"NETENABL IMMEDNET requires EMPTYNRM YES" #endif ); const MessageType0 ParserMessages::nonSgmlCharRef( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 407 #ifndef SP_NO_MESSAGE_TEXT ,"reference to non-SGML character" #endif ); const MessageType0 ParserMessages::defaultEntityDecl( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 408 #ifndef SP_NO_MESSAGE_TEXT ,"declaration of default entity" #endif ); const MessageType0 ParserMessages::internalSubsetPsParamEntityRef( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 409 #ifndef SP_NO_MESSAGE_TEXT ,"reference to parameter entity in parameter separator in internal subset" #endif ); const MessageType0 ParserMessages::internalSubsetTsParamEntityRef( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 410 #ifndef SP_NO_MESSAGE_TEXT ,"reference to parameter entity in token separator in internal subset" #endif ); const MessageType0 ParserMessages::internalSubsetLiteralParamEntityRef( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 411 #ifndef SP_NO_MESSAGE_TEXT ,"reference to parameter entity in parameter literal in internal subset" #endif ); const MessageType0 ParserMessages::cannotGenerateSystemIdSgml( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 412 #ifndef SP_NO_MESSAGE_TEXT ,"cannot generate system identifier for SGML declaration reference" #endif ); const MessageType1 ParserMessages::sdTextClass( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 413 #ifndef SP_NO_MESSAGE_TEXT ,"public text class of formal public identifier of SGML declaration must be SD" #endif ); const MessageType0 ParserMessages::sgmlDeclRefRequiresWww( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 414 #ifndef SP_NO_MESSAGE_TEXT ,"SGML declaration reference was used but minimum literal was not \"ISO 8879:1986 (WWW)\"" #endif ); const MessageType0 ParserMessages::pcdataGroupMemberOccurrenceIndicator( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 415 #ifndef SP_NO_MESSAGE_TEXT ,"member of model group containing #PCDATA has occurrence indicator" #endif ); const MessageType0 ParserMessages::pcdataGroupMemberModelGroup( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 416 #ifndef SP_NO_MESSAGE_TEXT ,"member of model group containing #PCDATA is a model group" #endif ); const MessageFragment ParserMessages::delimStart( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1000 #ifndef SP_NO_MESSAGE_TEXT ,"delimiter " #endif ); const MessageFragment ParserMessages::delimEnd( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1001 #ifndef SP_NO_MESSAGE_TEXT ,"" #endif ); const MessageFragment ParserMessages::digit( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1002 #ifndef SP_NO_MESSAGE_TEXT ,"digit" #endif ); const MessageFragment ParserMessages::nameStartCharacter( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1003 #ifndef SP_NO_MESSAGE_TEXT ,"name start character" #endif ); const MessageFragment ParserMessages::sepchar( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1004 #ifndef SP_NO_MESSAGE_TEXT ,"sepchar" #endif ); const MessageFragment ParserMessages::separator( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1005 #ifndef SP_NO_MESSAGE_TEXT ,"separator" #endif ); const MessageFragment ParserMessages::nameCharacter( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1006 #ifndef SP_NO_MESSAGE_TEXT ,"name character" #endif ); const MessageFragment ParserMessages::dataCharacter( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1007 #ifndef SP_NO_MESSAGE_TEXT ,"data character" #endif ); const MessageFragment ParserMessages::minimumDataCharacter( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1008 #ifndef SP_NO_MESSAGE_TEXT ,"minimum data character" #endif ); const MessageFragment ParserMessages::significantCharacter( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1009 #ifndef SP_NO_MESSAGE_TEXT ,"significant character" #endif ); const MessageFragment ParserMessages::recordEnd( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1010 #ifndef SP_NO_MESSAGE_TEXT ,"record end character" #endif ); const MessageFragment ParserMessages::recordStart( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1011 #ifndef SP_NO_MESSAGE_TEXT ,"record start character" #endif ); const MessageFragment ParserMessages::space( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1012 #ifndef SP_NO_MESSAGE_TEXT ,"space character" #endif ); const MessageFragment ParserMessages::listSep( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1013 #ifndef SP_NO_MESSAGE_TEXT ,", " #endif ); const MessageFragment ParserMessages::rangeSep( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1014 #ifndef SP_NO_MESSAGE_TEXT ,"-" #endif ); const MessageFragment ParserMessages::parameterLiteral( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1015 #ifndef SP_NO_MESSAGE_TEXT ,"parameter literal" #endif ); const MessageFragment ParserMessages::dataTagGroup( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1016 #ifndef SP_NO_MESSAGE_TEXT ,"data tag group" #endif ); const MessageFragment ParserMessages::modelGroup( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1017 #ifndef SP_NO_MESSAGE_TEXT ,"model group" #endif ); const MessageFragment ParserMessages::dataTagTemplateGroup( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1018 #ifndef SP_NO_MESSAGE_TEXT ,"data tag template group" #endif ); const MessageFragment ParserMessages::name( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1019 #ifndef SP_NO_MESSAGE_TEXT ,"name" #endif ); const MessageFragment ParserMessages::nameToken( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1020 #ifndef SP_NO_MESSAGE_TEXT ,"name token" #endif ); const MessageFragment ParserMessages::elementToken( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1021 #ifndef SP_NO_MESSAGE_TEXT ,"element token" #endif ); const MessageFragment ParserMessages::inclusions( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1022 #ifndef SP_NO_MESSAGE_TEXT ,"inclusions" #endif ); const MessageFragment ParserMessages::exclusions( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1023 #ifndef SP_NO_MESSAGE_TEXT ,"exclusions" #endif ); const MessageFragment ParserMessages::minimumLiteral( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1024 #ifndef SP_NO_MESSAGE_TEXT ,"minimum literal" #endif ); const MessageFragment ParserMessages::attributeValueLiteral( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1025 #ifndef SP_NO_MESSAGE_TEXT ,"attribute value literal" #endif ); const MessageFragment ParserMessages::systemIdentifier( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1026 #ifndef SP_NO_MESSAGE_TEXT ,"system identifier" #endif ); const MessageFragment ParserMessages::number( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1027 #ifndef SP_NO_MESSAGE_TEXT ,"number" #endif ); const MessageFragment ParserMessages::attributeValue( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1028 #ifndef SP_NO_MESSAGE_TEXT ,"attribute value" #endif ); const MessageFragment ParserMessages::capacityName( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1029 #ifndef SP_NO_MESSAGE_TEXT ,"name of capacity" #endif ); const MessageFragment ParserMessages::generalDelimiteRoleName( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1030 #ifndef SP_NO_MESSAGE_TEXT ,"name of general delimiter role" #endif ); const MessageFragment ParserMessages::referenceReservedName( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1031 #ifndef SP_NO_MESSAGE_TEXT ,"reference reserved name" #endif ); const MessageFragment ParserMessages::quantityName( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1032 #ifndef SP_NO_MESSAGE_TEXT ,"name of quantity" #endif ); const MessageFragment ParserMessages::entityEnd( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1033 #ifndef SP_NO_MESSAGE_TEXT ,"entity end" #endif ); const MessageFragment ParserMessages::shortrefDelim( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1034 #ifndef SP_NO_MESSAGE_TEXT ,"short reference delimiter" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ParserMessages.msg100444 764 764 112020 6604607570 14453 0ustar jjcjjc# Copyright (c) 1994, 1995, 1996 James Clark # See the file COPYING for copying permission. # Next line tells msggen to generate a .cxx file. !cxx # Format is+ # TN+tag+relevant clauses+message # where T is a letter indicating the type, and N is the number of arguments. Q1+nameLength+9.3.1+length of name must not exceed NAMELEN (%1) Q1+parameterEntityNameLength+10.5.1.1+length of parameter entity name must not exceed NAMELEN less the length of the PERO delimiter (%1) Q1+numberLength+9.3.1+length of number must not exceed NAMELEN (%1) Q1+attributeValueLength+7.9.4.5+length of attribute value must not exceed LITLEN less NORMSEP (%1) E0+peroGrpoProlog+9.4.4p3+a name group is not allowed in a parameter entity reference in the prolog E0+groupLevel+10.1.3p8+an entity end in a token separator must terminate an entity referenced in the same group E2+groupCharacter++character %1 invalid: only %2 and token separators allowed E0+psRequired+10.1.1p4+a parameter separator is required after a number that is followed by a name start character E2+markupDeclarationCharacter++character %1 invalid: only %2 and parameter separators allowed E0+declarationLevel+10.1.1p3+an entity end in a parameter separator must terminate an entity referenced in the same declaration E0+groupEntityEnd+10.1.3p8+an entity end is not allowed in a token separator that does not follow a token E1+invalidToken++%1 is not a valid token here E0+groupEntityReference+10.1.3p7+a parameter entity reference can only occur in a group where a token could occur E1+duplicateGroupToken+10.1.3p6+token %1 has already occurred in this group Q1+groupCount+10.1.3.1+the number of tokens in a group must not exceed GRPCNT (%1) E0+literalLevel+10.1.2p6 9.1.1p3+an entity end in a literal must terminate an entity referenced in the same literal E1+literalMinimumData+10.1.7p3+character %1 invalid: only minimum data characters allowed #018E0+literalNonSgml+9.2p2+non-SGML character number %1 not allowed in literal E0+dataTagPatternNonSgml+11.2.4.4p9+a parameter literal in a data tag pattern must not contain a numeric character reference to a non-SGML character E0+dataTagPatternFunction+11.2.4.4p9+a parameter literal in a data tag pattern must not contain a numeric character reference to a function character E0+eroGrpoStartTag+9.4.4p3+a name group is not allowed in a general entity reference in a start tag E0+eroGrpoProlog+9.4.4p3+a name group is not allowed in a general entity reference in the prolog E1+functionName+9.5p4+%1 is not a function name E1+characterNumber+4.36+%1 is not a character number in the document character set E1+parameterEntityUndefined+9.4.4.1p2+parameter entity %1 not defined E1+entityUndefined+9.4.4.1p2+general entity %1 not defined and no default entity E0+rniNameStart++RNI delimiter must be followed by name start character #028E0+commentNonSgml+10.3p2+non-SGML character not allowed in comment E0+commentEntityEnd+10.3p2+unterminated comment: found end of entity inside comment+comment started here W0+mixedConnectors+10.1.3p4+only one type of connector should be used in a single group E1+noSuchReservedName++%1 is not a reserved name E1+invalidReservedName++%1 is not allowed as a reserved name here Q1+minimumLiteralLength+10.1.7.1+length of interpreted minimum literal must not exceed reference LITLEN (%1) Q1+tokenizedAttributeValueLength+7.9.4.5 7.9.3p5+length of tokenized attribute value must not exceed LITLEN less NORMSEP (%1) Q1+systemIdentifierLength+10.1.6.1+length of system identifier must not exceed LITLEN (%1) Q1+parameterLiteralLength+10.1.2.1+length of interpreted parameter literal must not exceed LITLEN (%1) Q1+dataTagPatternLiteralLength+11.2.4.5p3+length of interpreted parameter literal in data tag pattern must not exceed DTEMPLEN E0+literalClosingDelimiter++literal is missing closing delimiter E2+paramInvalidToken++%1 invalid: only %2 and parameter separators are allowed E2+groupTokenInvalidToken++%1 invalid: only %2 and token separators are allowed E2+connectorInvalidToken++%1 invalid: only %2 and token separators are allowed E1+noSuchDeclarationType++unknown declaration type %1 E1+dtdSubsetDeclaration++%1 declaration not allowed in DTD subset # E1+declSubsetCharacter++character %1 not allowed in declaration subset E0+documentEndDtdSubset++end of document in DTD subset E1+prologCharacter++character %1 not allowed in prolog E0+documentEndProlog++end of document in prolog E1+prologDeclaration++%1 declaration not allowed in prolog E1+rankStemGenericIdentifier+11.2.1p2+%1 used both a rank stem and generic identifier E0+missingTagMinimization+11.2p3+omitted tag minimization parameter can be omitted only if "OMITTAG NO" is specified on the SGML declaration E1+duplicateElementDefinition+11.2p2+element type %1 already defined E0+entityApplicableDtd++entity reference with no applicable DTD E1+commentDeclInvalidToken+10.3p1+invalid comment declaration: found %1 outside comment but inside comment declaration+comment declaration started here E1+instanceDeclaration++%1 declaration not allowed in instance E0+contentNonSgml++non-SGML character not allowed in content E1+noCurrentRank++no current rank for rank stem %1 E1+duplicateAttlistNotation+11.4.1.1p4+duplicate attribute definition list for notation %1 E1+duplicateAttlistElement+11.3p4+duplicate attribute definition list for element %1 E0+endTagEntityEnd++entity end not allowed in end tag E1+endTagCharacter++character %1 not allowed in end tag E1+endTagInvalidToken++%1 invalid: only s and tagc allowed here E0+pcdataNotAllowed++character data is not allowed here E1+elementNotAllowed++document type does not allow element %1 here E2+missingElementMultiple++document type does not allow element %1 here; missing one of %2 start-tag E2+missingElementInferred++document type does not allow element %1 here; assuming missing %2 start-tag E1+startTagEmptyElement+7.3.1.1p3+no start tag specified for implied empty element %1 E1+omitEndTagDeclare++end tag for %1 omitted, but its declaration does not permit this+start tag was here E1+omitEndTagOmittag+7.3.1p1+end tag for %1 omitted, but OMITTAG NO was specified+start tag was here E1+omitStartTagDeclaredContent+7.3.1.1p2+start tag omitted for element %1 with declared content E1+elementEndTagNotFinished++end tag for %1 which is not finished E1+omitStartTagDeclare++start tag for %1 omitted, but its declaration does not permit this Q1+taglvlOpenElements++number of open elements exceeds TAGLVL (%1) E1+undefinedElement++element %1 undefined E0+emptyEndTagNoOpenElements++empty end tag but no open elements E1+elementNotFinished++%1 not finished but containing element ended E1+elementNotOpen++end tag for element %1 which is not open E1+internalParameterDataEntity++internal parameter entity %1 cannot be CDATA or SDATA E1+attributeSpecCharacter++character %1 not allowed in attribute specification list E0+unquotedAttributeValue++an attribute value must be a literal unless it contains only name characters E0+attributeSpecEntityEnd++entity end not allowed in attribute specification list except in attribute value literal E1+externalParameterDataSubdocEntity++external parameter entity %1 cannot be CDATA, SDATA, NDATA or SUBDOC W1+duplicateEntityDeclaration++duplicate declaration of entity %1 W1+duplicateParameterEntityDeclaration++duplicate declaration of parameter entity %1 E0+piEntityReference+10.5.3p9+a reference to a PI entity is allowed only in a context where a processing instruction could occur E0+internalDataEntityReference+10.5.3p9+a reference to a CDATA or SDATA entity is allowed only in a context where a data character could occur E0+externalNonTextEntityReference+9.4p0+a reference to a subdocument entity or external data entity is allowed only in a context where a data character could occur E0+externalNonTextEntityRcdata+9.4p0+a reference to a subdocument entity or external data entity is not allowed in replaceable character data E0+entlvl+9.4.1+the number of open entities cannot exceed ENTLVL E0+piEntityRcdata+10.5.3p9+a reference to a PI entity is not allowed in replaceable character data E1+recursiveEntityReference+9.4p4+entity %1 is already open E1+undefinedShortrefMapInstance+11.6.2p2+short reference map %1 not defined E0+usemapAssociatedElementTypeDtd+11.6.1p1+short reference map in DTD must specify associated element type E0+usemapAssociatedElementTypeInstance+11.6.2p1+short reference map in document instance cannot specify associated element type #092 E2+undefinedShortrefMapDtd+11.6.1p2+short reference map %1 for element %2 not defined in DTD E1+unknownShortrefDelim+11.5p4+%1 is not a short reference delimiter E1+delimDuplicateMap+11.5p6+short reference delimiter %1 already mapped in this declaration E0+noDocumentElement++no document element #097E0+ E0+processingInstructionEntityEnd++entity end not allowed in processing instruction Q1+processingInstructionLength+8.1p1+length of processing instruction must not exceed PILEN (%1) E0+processingInstructionClose++missing pic delimiter E0+attributeSpecNameTokenExpected+7.9p2 7.9.1.2p1+an attribute specification must start with a name or name token E1+noSuchAttributeToken+7.9.1.2p1+%1 is not a member of a group specified for any attribute E0+attributeNameShorttag+7.9.1.2+the name and vi delimiter can be omitted from an attribute specification only if SHORTTAG YES is specified E1+noSuchAttribute++there is no attribute %1 E0+attributeValueExpected+7.9.3p1+an attribute value specification must start with a literal or a name character Q1+nameTokenLength+9.3.1+length of name token must not exceed NAMELEN (%1) E0+attributeSpecLiteral+7.9.3p1 7.9.1.2p1+an attribute value literal can occur in an attribute specification list only after a vi delimiter E1+duplicateAttributeSpec+7.9p5+duplicate specification of attribute %1 E1+duplicateAttributeDef+11.3.2p2+duplicate definition of attribute %1 E0+emptyDataAttributeSpec+11.4.1.2p3+data attribute specification must be omitted if attribute specification list is empty E0+markedSectionEnd+10.4p6+marked section end not in marked section declaration E1+markedSectionLevel+10.4.1p1+number of open marked sections must not exceed TAGLVL (%1) E0+unclosedMarkedSection+10.4p1+missing marked section end+marked section started here E0+specialParseEntityEnd++entity end in character data, replaceable character data or ignored marked section Q2+normalizedAttributeValueLength+7.9.4.5+normalized length of attribute value literal must not exceed LITLEN (%1); length was %2 E0+attributeValueSyntax+7.9.4.1p1+syntax of attribute value does not conform to declared value E2+attributeValueChar+7.9.4.1p1+character %1 is not allowed in the value of attribute %2 E1+attributeValueMultiple+7.9.4.1p1+value of attribute %1 must be a single token E2+attributeValueNumberToken+7.9.4p1+value of attribute %2 invalid: %1 cannot start a number token E2+attributeValueName+7.9.4p1+value of attribute %2 invalid: %1 cannot start a name E1+attributeMissing+7.9p4+non-impliable attribute %1 not specified but OMITTAG NO and SHORTTAG NO E1+requiredAttributeMissing+7.9p4 7.9.1.1p2+required attribute %1 not specified E1+currentAttributeMissing+7.9.1.1p2+first occurrence of current attribute %1 not specified E1+invalidNotationAttribute+7.9.4.4p1+%1 is not a notation name E1+invalidEntityAttribute+7.9.4.3p1+%1 is not a general entity name E3+attributeValueNotInGroup+7.9.4.1p2+value of attribute %2 cannot be %1; must be one of %3 E1+notDataOrSubdocEntity+7.9.4.3p1+%1 is not a data or subdocument entity E3+ambiguousModelInitial++content model is ambiguous: when no tokens have been matched, both the %2 and %3 occurrences of %1 are possible E5+ambiguousModel++content model is ambiguous: when the current token is the %2 occurrence of %1, both the %4 and %5 occurrences of %3 are possible E5+ambiguousModelSingleAnd++content model is ambiguous: when the current token is the %2 occurrence of %1 and the innermost containing and group has been matched, both the %4 and %5 occurrences of %3 are possible E6+ambiguousModelMultipleAnd++content model is ambiguous: when the current token is the %2 occurrence of %1 and the innermost %3 containing and groups have been matched, both the %5 and %6 occurrences of %4 are possible E1+commentDeclarationCharacter++invalid comment declaration: found character %1 outside comment but inside comment declaration+comment declaration started here E1+nonSgmlCharacter++non SGML character number %1 E0+dataMarkedSectionDeclSubset++data or replaceable character data in declaration subset E1+duplicateId+4.153+ID %1 already defined+ID %1 first defined here E1+notFixedValue+4.136+value of fixed attribute %1 not equal to default E1+sdCommentSignificant++character %1 is not significant in the reference concrete syntax and so cannot occur in a comment in the SGML declaration E1+standardVersion+13p2+minimum data of first minimum literal in SGML declaration must be "ISO 8879:1986" or "ISO 8879:1986 (ENR)" or "ISO 8879:1986 (WWW)" not %1 E1+namingBeforeLcnmstrt+13.4.5p1+parameter before "LCNMSTRT" must be "NAMING" not %1 E1+sdEntityEnd+13p1+unexpected entity end in SGML declaration: only %1, S separators and comments allowed E2+sdInvalidNameToken++%1 invalid: only %2 and parameter separators allowed E1+numberTooBig++magnitude of %1 too big (length exceeds NAMELEN) E1+sdLiteralSignificant++character %1 is not significant in the reference concrete syntax and so cannot occur in a literal in the SGML declaration except as the replacement of a character reference E1+syntaxCharacterNumber+4.36+%1 is not a valid syntax reference character number E0+sdParameterEntity+451p7+a parameter entity reference cannot occur in an SGML declaration E2+sdParamInvalidToken++%1 invalid: only %2 and parameter separators are allowed E0+giveUp++cannot continue because of previous errors E1+sdMissingCharacters++SGML declaration cannot be parsed because the character set does not contain characters having the following numbers in ISO 646: %1 E1+missingMinimumChars++the specified character set is invalid because it does not contain the minimum data characters having the following numbers in ISO 646: %1 E1+duplicateCharNumbers++character numbers declared more than once: %1 E1+codeSetHoles++character numbers should have been declared UNUSED: %1 W1+basesetCharsMissing++character numbers missing in base set: %1 W1+documentCharMax++characters in the document character set with numbers exceeding %1 not supported E1+fpiMissingField++invalid formal public identifier %1: missing // E1+fpiMissingTextClassSpace++invalid formal public identifier %1: no SPACE after public text class E1+fpiInvalidTextClass++invalid formal public identifier %1: invalid public text class E1+fpiInvalidLanguage++invalid formal public identifier %1: public text language must be a name containing only upper case letters E1+fpiIllegalDisplayVersion++invalid formal public identifer %1: public text display version not permitted with this text class E1+fpiExtraField++invalid formal public identifier %1: extra field E0+notationIdentifierTextClass++public text class of public identifier in notation identifier must be NOTATION W1+unknownBaseset++base character set %1 is unknown E2+lexicalAmbiguity+13.4.6p2+delimiter set is ambiguous: %1 and %2 can be recognized in the same mode E1+missingSignificant++characters with the following numbers in the syntax reference character set are significant in the concrete syntax but are not in the document character set: %1 E1+translateSyntaxCharDoc++there is no unique character in the document character set corresponding to character number %1 in the syntax reference character set E1+translateSyntaxCharInternal++there is no unique character in the internal character set corresponding to character number %1 in the syntax reference character set E1+missingSyntaxChar+13.4.3p2+the character with number %1 in ISO 646 is significant but has no representation in the syntax reference character set E1+unknownCapacitySet++capacity set %1 is unknown W1+duplicateCapacity++capacity %1 already specified E1+capacityExceedsTotalcap++value of capacity %1 exceeds value of TOTALCAP E1+unknownPublicSyntax++syntax %1 is unknown E0+nmstrtLength+13.4.5p13+UCNMSTRT must have the same number of characters as LCNMSTRT E0+nmcharLength+13.4.5p13+UCNMCHAR must have the same number of characters as LCNMCHAR # This isn't formally a quantity error, but we'll treat it as one. Q1+subdocLevel+9.4.2p1+number of open subdocuments exceeds quantity specified for SUBDOC parameter in SGML declaration (%1) E1+subdocEntity+10.5.5p12+entity %1 declared SUBDOC, but SUBDOC NO specified in SGML declaration E0+parameterEntityNotEnded+10.1.1p2+a parameter entity referenced in a parameter separator must end in the same declaration X1+missingId++reference to non-existent ID %1 W1+dtdUndefinedElement++generic identifier %1 used in DTD but not defined E1+elementNotFinishedDocumentEnd++%1 not finished but document ended E0+subdocGiveUp++cannot continue with subdocument because of previous errors E0+noDtd++no document type declaration; will parse without validation E0+noDtdSubset++no internal or external document type declaration subset; will parse without validation E0+notSgml++this is not an SGML document Q1+taglen+7.4.2p1+length of start-tag before interpretation of literals must not exceed TAGLEN (%1) E0+groupParameterEntityNotEnded+10.1.3p7+a parameter entity referenced in a token separator must end in the same group E1+invalidSgmlChar+13.1.2p3+the following character numbers are shunned characters that are not significant and so should have been declared UNUSED: %1 E1+translateDocChar++there is no unique character in the specified document character set corresponding to character number %1 in ISO 646 Q1+attributeValueLengthNeg+7.9.4.5+length of attribute value must not exceed LITLEN less NORMSEP (-%1) Q1+tokenizedAttributeValueLengthNeg+7.9.4.5 7.9.3p5+length of tokenized attribute value must not exceed LITLEN less NORMSEP (-%1) E1+scopeInstanceQuantity+13.3p9+concrete syntax scope is INSTANCE but value of %1 quantity is less than value in reference quantity set E1+basesetTextClass+13.1.1.1p4+public text class of formal public identifier of base character set must be CHARSET E1+capacityTextClass+13.2p7+public text class of formal public identifier of capacity set must be CAPACITY E1+syntaxTextClass+13.4.1p6+public text class of formal public identifier of concrete syntax must be SYNTAX E0+msocharRequiresMsichar+13.4.4p13+when there is an MSOCHAR there must also be an MSICHAR E1+switchNotMarkup+13.4.1p4+character number %1 in the syntax reference character set was specified as a character to be switched but is not a markup character E1+switchNotInCharset+13.4.1p4+character number %1 was specified as a character to be switched but is not in the syntax reference character set W1+ambiguousDocCharacter++character numbers %1 in the document character set have been assigned the same meaning, but this is the meaning of a significant character E1+oneFunction+13.4.4p11+character number %1 assigned to more than one function E1+duplicateFunctionName+13.4.4p12+%1 is already a function name E1+missingSignificant646++characters with the following numbers in ISO 646 are significant in the concrete syntax but are not in the document character set: %1 E1+generalDelimAllFunction+13.4.6.1p5+general delimiter %1 consists solely of function characters E1+nmcharLetter+13.4.5p11+letters assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT: %1 E1+nmcharDigit+13.4.5p11+digits assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT: %1 E1+nmcharRe+13.4.5p11+character number %1 cannot be assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT because it is RE E1+nmcharRs+13.4.5p11+character number %1 cannot be assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT because it is RS E1+nmcharSpace+13.4.5p11+character number %1 cannot be assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT because it is SPACE E1+nmcharSepchar+13.4.5p11+separator characters assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT: %1 E1+switchLetterDigit+13.4.1p4+character number %1 cannot be switched because it is a Digit, LC Letter or UC Letter W0+zeroNumberOfCharacters++pointless for number of characters to be 0 E1+nameReferenceReservedName+13.4.7p6+%1 cannot be the replacement for a reference reserved name because it is another reference reserved name E1+ambiguousReservedName+13.4.7p6+%1 cannot be the replacement for a reference reserved name because it is the replacement of another reference reserved name E1+duplicateReservedName+13.4.7p2+replacement for reserved name %1 already specified W1+reservedNameSyntax++%1 is not a valid name in the declared concrete syntax E1+multipleBSequence+13.4.6.2p6+%1 is not a valid short reference delimiter because it has more than one B sequence E1+blankAdjacentBSequence+13.4.6.2p6+%1 is not a valid short reference delimiter because it is adjacent to a character that can occur in a blank sequence E2+delimiterLength+13.4.6p5+length of delimiter %1 exceeds NAMELEN (%2) W2+reservedNameLength++length of reserved name %1 exceeds NAMELEN (%2) E1+nmcharNmstrt+13.4.5p12+character numbers assigned to both LCNMCHAR or UCNMCHAR and LCNMSTRT or UCNMSTRT: %1 E0+scopeInstanceSyntaxCharset+13.3p7+when the concrete syntax scope is INSTANCE the syntax reference character set of the declared syntax must be the same as that of the reference concrete syntax W0+emptyOmitEndTag+11.2.2p8+end-tag minimization should be "O" for element with declared content of EMPTY W1+conrefOmitEndTag+11.2.2p8+end-tag minimization should be "O" for element %1 because it has CONREF attribute E1+conrefEmpty+11.3.4p12+element %1 has a declared content of EMPTY and a CONREF attribute E1+notationEmpty+11.3.3p21+element %1 has a declared content of EMPTY and a NOTATION attribute E0+dataAttributeDeclaredValue+11.4.1p2+declared value of data attribute cannot be ENTITY, ENTITIES, ID, IDREF, IDREFS or NOTATION E0+dataAttributeDefaultValue+11.4.1p3+default value of data attribute cannot be CONREF or CURRENT Q2+attcnt+11.3.1+number of attribute names and name tokens (%1) exceeds ATTCNT (%2) E0+idDeclaredValue+11.3.4p11+if the declared value is ID the default value must be IMPLIED or REQUIRED E1+multipleIdAttributes+11.3.3p19+the attribute definition list already declared attribute %1 as the ID attribute E1+multipleNotationAttributes+11.3.3p19+the attribute definition list already declared attribute %1 as the NOTATION attribute E1+duplicateAttributeToken+11.3.3p20+token %1 occurs more than once in attribute definition list E1+notationNoAttributes+11.4.1.2p2+no attributes defined for notation %1 E2+entityNotationUndefined+10.5.5p10+notation %1 for entity %2 undefined E2+mapEntityUndefined++entity %1 undefined in short reference map %2 E1+attlistNotationUndefined+11.4.1.1p4+notation %1 is undefined but had attribute definition Q1+bracketedLitlen+10.5.4.1+length of interpreted parameter literal in bracketed text plus the length of the bracketing delimiters must not exceed LITLEN (%1) Q1+genericIdentifierLength+11.2.1.2+length of rank stem plus length of rank suffix must not exceed NAMELEN (%1) E0+instanceStartOmittag+7.2p1+document instance must start with document element Q1+grplvl+11.2.4.5p1+content model nesting level exceeds GRPLVL (%1) Q1+grpgtcnt+11.2.4.5p2+grand total of content tokens exceeds GRPGTCNT (%1) E0+unclosedStartTagShorttag+7.4.1p2+unclosed start-tag requires SHORTTAG YES E0+netEnablingStartTagShorttag+7.4.1p2+net-enabling start-tag requires SHORTTAG YES E0+unclosedEndTagShorttag+7.5.1p2+unclosed end-tag requires SHORTTAG YES E0+multipleDtds+7.1p6+DTDs other than base allowed only if CONCUR YES or EXPLICIT YES E0+afterDocumentElementEntityEnd+7.2p1+end of entity other than document entity after document element E1+declarationAfterDocumentElement+7.2p1+%1 declaration illegal after document element E0+characterReferenceAfterDocumentElement+7.2p1+character reference illegal after document element E0+entityReferenceAfterDocumentElement+7.2p1+entity reference illegal after document element E0+markedSectionAfterDocumentElement+7.2p1+marked section illegal after document element E3+requiredElementExcluded+11.2.5.2p5+the %1 occurrence of %2 in the content model for %3 cannot be excluded at this point because it is contextually required E3+invalidExclusion+11.2.5.2p4+the %1 occurrence of %2 in the content model for %3 cannot be excluded because it is neither inherently optional nor a member of an or group E0+attributeValueShorttag+7.9.3.1+an attribute value specification must be an attribute value literal unless SHORTTAG YES is specified E0+conrefNotation+7.9.4.4p2+value cannot be specified both for notation attribute and content reference attribute E1+duplicateNotationDeclaration+11.4p3+notation %1 already defined E1+duplicateShortrefDeclaration+11.5p3+short reference map %1 already defined+first defined here E1+duplicateDelimGeneral+13.4.6.1+general delimiter role %1 already defined Q1+idrefGrpcnt+7.9.4.5p5+number of id references in start-tag must not exceed GRPCNT (%1) Q1+entityNameGrpcnt+7.9.4.5p6+number of entity names in attribute specification list must not exceed GRPCNT (%1) Q2+attsplen+7.9.2+normalized length of attribute specification list must not exceed ATTSPLEN (%1); length was %2 E1+duplicateDelimShortref+13.4.6p2+short reference delimiter %1 already specified E1+duplicateDelimShortrefSet+13.4.6.2+single character short references were already specified for character numbers: %1 W1+defaultEntityInAttribute++default entity used in entity attribute %1 W1+defaultEntityReference++reference to entity %1 uses default entity W2+mapDefaultEntity++entity %1 in short reference map %2 uses default entity E1+noSuchDtd+12.1.3p6+no DTD %1 declared W1+noLpdSubset++LPD %1 has neither internal nor external subset E0+assocElementDifferentAtts+12.2.1p11+element types have different link attribute definitions E1+duplicateLinkSet+12.2p6+link set %1 already defined E0+emptyResultAttributeSpec+12.2.2p8+empty result attribute specification E1+noSuchSourceElement++no source element type %1 E1+noSuchResultElement++no result element type %1 E0+documentEndLpdSubset++end of document in LPD subset E1+lpdSubsetDeclaration++%1 declaration not allowed in LPD subset E0+idlinkDeclSimple+12.1.4.3+ID link set declaration not allowed in simple link declaration subset E0+linkDeclSimple+12.1.4.3+link set declaration not allowed in simple link declaration subset E1+simpleLinkAttlistElement+12.1.4.3+attributes can only be defined for base document element (not %1) in simple link declaration subset E0+shortrefOnlyInBaseDtd+11.1p11+a short reference mapping declaration is allowed only in the base DTD E0+usemapOnlyInBaseDtd+11.1p11+a short reference use declaration is allowed only in the base DTD E0+linkAttributeDefaultValue+12.1.4.2p3+default value of link attribute cannot be CURRENT or CONREF E0+linkAttributeDeclaredValue+12.1.4.2p2+declared value of link attribute cannot be ID, IDREF, IDREFS or NOTATION E0+simpleLinkFixedAttribute+12.1.4.3+only fixed attributes can be defined in simple LPD E0+duplicateIdLinkSet+12.1.4p1+only one ID link set declaration allowed in an LPD subset E1+noInitialLinkSet+12.2p7+no initial link set defined for LPD %1 E1+notationUndefinedSourceDtd++notation %1 not defined in source DTD E0+simpleLinkResultNotImplied+12.1.1p1+result document type in simple link specification must be implied E0+simpleLinkFeature+12.1.1p5+simple link requires SIMPLE YES E0+implicitLinkFeature+12.1.2p4+implicit link requires IMPLICIT YES E0+explicitLinkFeature+12.1.3p4+explicit link requires EXPLICIT YES E0+lpdBeforeBaseDtd+7.1p1+LPD not allowed before first DTD E0+dtdAfterLpd+7.1p1+DTD not allowed after an LPD E1+unstableLpdGeneralEntity++definition of general entity %1 is unstable E1+unstableLpdParameterEntity++definition of parameter entity %1 is unstable E1+multipleIdLinkRuleAttribute+12.2.3p3+multiple link rules for ID %1 but not all have link attribute specifications E1+multipleLinkRuleAttribute+12.2.1p9+multiple link rules for element type %1 but not all have link attribute specifications E2+uselinkBadLinkSet+12.3p10+link type %1 does not have a link set %2 E1+uselinkSimpleLpd++link set use declaration for simple link process E1+uselinkBadLinkType+12.3p10+no link type %1 E1+duplicateDtdLpd+12.1p3+both document type and link type %1 E1+duplicateLpd+12.1p3+link type %1 already defined E1+duplicateDtd+11.1p7+document type %1 already defined E1+undefinedLinkSet+12.2.2p8+link set %1 used in LPD but not defined E1+duplicateImpliedResult+12.2.2p6+#IMPLIED already linked to result element type %1 E1+simpleLinkCount+12.1.1.1p1+number of active simple link processes exceeds quantity specified for SIMPLE parameter in SGML declaration (%1) E0+duplicateExplicitChain+7.1p11+only one chain of explicit link processes can be active E1+explicit1RequiresSourceTypeBase+12.1.2p5 12.1.3p5 12.1.3.1+source document type name for link type %1 must be base document type since EXPLICIT YES 1 E0+oneImplicitLink+7.1p10+one one implicit link process can be active W1+sorryLink++sorry, link type %1 not activated: only one implicit or explicit link process can be active (with base document type as source document type) E0+entityReferenceMissingName+9.4.4p1 9.4.4p2+name missing after name group in entity reference E1+explicitNoRequiresSourceTypeBase+12.1.2p5 12.1.3p5 12.1.3.1+source document type name for link type %1 must be base document type since EXPLICIT NO W0+linkActivateTooLate++link process must be activated before base DTD E0+pass2Ee++unexpected entity end while starting second pass E2+idlinkElementType+12.2.3p2+type %1 of element with ID %2 not associated element type for applicable link rule in ID link set E0+datatagNotImplemented++DATATAG feature not implemented E0+startTagMissingName+7.4p1+generic identifier specification missing after document type specification in start-tag E0+endTagMissingName+7.5p1+generic identifier specification missing after document type specification in end-tag E0+startTagGroupNet+7.4.1.3p1+a net-enabling start-tag cannot include a document type specification E0+documentElementUndefined+11.1p10+DTD did not contain element declaration for document type name E0+badDefaultSgmlDecl++invalid default SGML declaration E1+nonExistentEntityRef++reference to entity %1 for which no system identifier could be generated+entity was defined here W0+pcdataUnreachable+11.2.4p11+content model is mixed but does not allow #PCDATA everywhere E0+sdRangeNotSingleChar++start or end of range must specify a single character E0+sdInvalidRange++number of first character in range must not exceed number of second character in range E0+sdEmptyDelimiter++delimiter cannot be an empty string W0+tooManyCharsMinimumLiteral++too many characters assigned same meaning with minimum literal W1+defaultedEntityDefined++earlier reference to entity %1 used default entity W0+emptyStartTag++empty start-tag W0+emptyEndTag++empty end-tag W1+unusedMap++unused short reference map %1 W1+unusedParamEntity++unused parameter entity %1 W1+cannotGenerateSystemIdPublic++cannot generate system identifier for public text %1 W1+cannotGenerateSystemIdGeneral++cannot generate system identifier for general entity %1 W1+cannotGenerateSystemIdParameter++cannot generate system identifier for parameter entity %1 W1+cannotGenerateSystemIdDoctype++cannot generate system identifier for document type %1 W1+cannotGenerateSystemIdLinktype++cannot generate system identifier for link type %1 W1+cannotGenerateSystemIdNotation++cannot generate system identifier for notation %1 W1+excludeIncludeSame++element type %1 both included and excluded E1+implyingDtd++no document type declaration; implying %1 E1+afdrVersion++minimum data of AFDR declaration must be "ISO/IEC 10744:1997" not %1 E0+missingAfdrDecl++AFDR declaration required before use of AFDR extensions E0+enrRequired++ENR extensions were used but minimum literal was not "ISO 8879:1986 (ENR)" or "ISO 8879:1986 (WWW)" E1+numericCharRefLiteralNonSgml++illegal numeric character reference to non-SGML character %1 in literal E2+numericCharRefUnknownDesc++cannot convert character reference to number %1 because description %2 unrecognized E3+numericCharRefUnknownBase++cannot convert character reference to number %1 because character %2 from baseset %3 unknown E1+numericCharRefBadInternal++character reference to number %1 cannot be converted because of problem with internal character set E1+numericCharRefNoInternal++cannot convert character reference to number %1 because character not in internal character set E0+wwwRequired++Web SGML adaptations were used but minimum literal was not "ISO 8879:1986 (WWW)" E1+attributeTokenNotUnique++token %1 can be value for more multiple attributes so attribute name required Q1+hexNumberLength++length of hex number must not exceed NAMELEN (%1) W1+entityNameSyntax++%1 is not a valid name in the declared concrete syntax W0+cdataContent++CDATA declared content W0+rcdataContent++RCDATA declared content W0+inclusion++inclusion W0+exclusion++exclusion W0+numberDeclaredValue++NUMBER or NUMBERS declared value W0+nameDeclaredValue++NAME or NAMES declared value W0+nutokenDeclaredValue++NUTOKEN or NUTOKENS declared value W0+conrefAttribute++conref attribute W0+currentAttribute++current attribute W0+tempMarkedSection++TEMP marked section W0+instanceIncludeMarkedSection++included marked section in the instance W0+instanceIgnoreMarkedSection++ignored marked section in the instance W0+rcdataMarkedSection++RCDATA marked section W0+piEntity++processing instruction entity W0+bracketEntity++bracketed text entity W0+internalCdataEntity++internal CDATA entity W0+internalSdataEntity++internal SDATA entity W0+externalCdataEntity++external CDATA entity W0+externalSdataEntity++external SDATA entity W0+dataAttributes++attribute definition list declaration for notation W0+rank++rank stem W0+missingSystemId++no system id specified W0+psComment++comment in parameter separator W0+namedCharRef++named character reference W0+andGroup++and group W0+attributeValueNotLiteral++attribute value not a literal W0+missingAttributeName++attribute name missing W0+elementGroupDecl++element declaration for group of element types W0+attlistGroupDecl++attribute definition list declaration for group of element types W0+emptyCommentDecl++empty comment declaration W0+commentDeclS++s separator in comment declaration W0+commentDeclMultiple++multiple comments in comment declaration W0+missingStatusKeyword++no status keyword W0+multipleStatusKeyword++multiple status keywords W0+instanceParamEntityRef++parameter entity reference in document instance W0+current++current attribute W0+minimizationParam++element type minimization parameter W0+refc++reference not terminated by refc delimiter W0+pcdataNotFirstInGroup++#PCDATA not first in model group W0+pcdataInSeqGroup++#PCDATA in seq group W0+pcdataInNestedModelGroup++#PCDATA in nested model group W0+pcdataGroupNotRep++#PCDATA in model group that does not have rep occurrence indicator W0+nameGroupNotOr++name group or name token group used connector other than OR W0+piMissingName++processing instruction does not start with name W0+instanceStatusKeywordSpecS++s separator in status keyword specification in document instance W0+externalDataEntityRef++reference to external data entity W0+attributeValueExternalEntityRef++reference to external entity in attribute value W1+dataCharDelim++character %1 is the first character of a delimiter but occurred as data W0+explicitSgmlDecl++SGML declaration was not implied W0+internalSubsetMarkedSection++marked section in internal DTD subset E0+nestcWithoutNet++net-enabling start-tag not immediately followed by null end-tag E0+contentAsyncEntityRef++entity end in different element from entity reference E0+immednetRequiresEmptynrm++NETENABL IMMEDNET requires EMPTYNRM YES W0+nonSgmlCharRef++reference to non-SGML character W0+defaultEntityDecl++declaration of default entity W0+internalSubsetPsParamEntityRef++reference to parameter entity in parameter separator in internal subset W0+internalSubsetTsParamEntityRef++reference to parameter entity in token separator in internal subset W0+internalSubsetLiteralParamEntityRef++reference to parameter entity in parameter literal in internal subset E0+cannotGenerateSystemIdSgml++cannot generate system identifier for SGML declaration reference E1+sdTextClass++public text class of formal public identifier of SGML declaration must be SD E0+sgmlDeclRefRequiresWww++SGML declaration reference was used but minimum literal was not "ISO 8879:1986 (WWW)" W0+pcdataGroupMemberOccurrenceIndicator++member of model group containing #PCDATA has occurrence indicator W0+pcdataGroupMemberModelGroup++member of model group containing #PCDATA is a model group # message fragments =1000 +delimStart++delimiter +delimEnd++ +digit++digit +nameStartCharacter++name start character +sepchar++sepchar +separator++separator +nameCharacter++name character +dataCharacter++data character +minimumDataCharacter++minimum data character +significantCharacter++significant character +recordEnd++record end character +recordStart++record start character +space++space character +listSep++, +rangeSep++- +parameterLiteral++parameter literal +dataTagGroup++data tag group +modelGroup++model group +dataTagTemplateGroup++data tag template group +name++name +nameToken++name token +elementToken++element token +inclusions++inclusions +exclusions++exclusions +minimumLiteral++minimum literal +attributeValueLiteral++attribute value literal +systemIdentifier++system identifier +number++number +attributeValue++attribute value +capacityName++name of capacity +generalDelimiteRoleName++name of general delimiter role +referenceReservedName++reference reserved name +quantityName++name of quantity +entityEnd++entity end +shortrefDelim++short reference delimiter jade-1.2.1/lib/ParserMessages.rc100444 764 764 71352 6604610606 14257 0ustar jjcjjcSTRINGTABLE BEGIN 0, "length of name must not exceed NAMELEN (%1)" 1, "length of parameter entity name must not exceed NAMELEN less the length of the PERO delimiter (%1)" 2, "length of number must not exceed NAMELEN (%1)" 3, "length of attribute value must not exceed LITLEN less NORMSEP (%1)" 4, "a name group is not allowed in a parameter entity reference in the prolog" 5, "an entity end in a token separator must terminate an entity referenced in the same group" 6, "character %1 invalid: only %2 and token separators allowed" 7, "a parameter separator is required after a number that is followed by a name start character" 8, "character %1 invalid: only %2 and parameter separators allowed" 9, "an entity end in a parameter separator must terminate an entity referenced in the same declaration" 10, "an entity end is not allowed in a token separator that does not follow a token" 11, "%1 is not a valid token here" 12, "a parameter entity reference can only occur in a group where a token could occur" 13, "token %1 has already occurred in this group" 14, "the number of tokens in a group must not exceed GRPCNT (%1)" 15, "an entity end in a literal must terminate an entity referenced in the same literal" 16, "character %1 invalid: only minimum data characters allowed" 17, "a parameter literal in a data tag pattern must not contain a numeric character reference to a non-SGML character" 18, "a parameter literal in a data tag pattern must not contain a numeric character reference to a function character" 19, "a name group is not allowed in a general entity reference in a start tag" 20, "a name group is not allowed in a general entity reference in the prolog" 21, "%1 is not a function name" 22, "%1 is not a character number in the document character set" 23, "parameter entity %1 not defined" 24, "general entity %1 not defined and no default entity" 25, "RNI delimiter must be followed by name start character" 26, "unterminated comment: found end of entity inside comment" 27, "comment started here" 28, "only one type of connector should be used in a single group" 29, "%1 is not a reserved name" 30, "%1 is not allowed as a reserved name here" 31, "length of interpreted minimum literal must not exceed reference LITLEN (%1)" 32, "length of tokenized attribute value must not exceed LITLEN less NORMSEP (%1)" 33, "length of system identifier must not exceed LITLEN (%1)" 34, "length of interpreted parameter literal must not exceed LITLEN (%1)" 35, "length of interpreted parameter literal in data tag pattern must not exceed DTEMPLEN" 36, "literal is missing closing delimiter" 37, "%1 invalid: only %2 and parameter separators are allowed" 38, "%1 invalid: only %2 and token separators are allowed" 39, "%1 invalid: only %2 and token separators are allowed" 40, "unknown declaration type %1" 41, "%1 declaration not allowed in DTD subset" 42, "character %1 not allowed in declaration subset" 43, "end of document in DTD subset" 44, "character %1 not allowed in prolog" 45, "end of document in prolog" 46, "%1 declaration not allowed in prolog" 47, "%1 used both a rank stem and generic identifier" 48, "omitted tag minimization parameter can be omitted only if ""OMITTAG NO"" is specified on the SGML declaration" 49, "element type %1 already defined" 50, "entity reference with no applicable DTD" 51, "invalid comment declaration: found %1 outside comment but inside comment declaration" 52, "comment declaration started here" 53, "%1 declaration not allowed in instance" 54, "non-SGML character not allowed in content" 55, "no current rank for rank stem %1" 56, "duplicate attribute definition list for notation %1" 57, "duplicate attribute definition list for element %1" 58, "entity end not allowed in end tag" 59, "character %1 not allowed in end tag" 60, "%1 invalid: only s and tagc allowed here" 61, "character data is not allowed here" 62, "document type does not allow element %1 here" 63, "document type does not allow element %1 here; missing one of %2 start-tag" 64, "document type does not allow element %1 here; assuming missing %2 start-tag" 65, "no start tag specified for implied empty element %1" 66, "end tag for %1 omitted, but its declaration does not permit this" 67, "start tag was here" 68, "end tag for %1 omitted, but OMITTAG NO was specified" 69, "start tag was here" 70, "start tag omitted for element %1 with declared content" 71, "end tag for %1 which is not finished" 72, "start tag for %1 omitted, but its declaration does not permit this" 73, "number of open elements exceeds TAGLVL (%1)" 74, "element %1 undefined" 75, "empty end tag but no open elements" 76, "%1 not finished but containing element ended" 77, "end tag for element %1 which is not open" 78, "internal parameter entity %1 cannot be CDATA or SDATA" 79, "character %1 not allowed in attribute specification list" 80, "an attribute value must be a literal unless it contains only name characters" 81, "entity end not allowed in attribute specification list except in attribute value literal" 82, "external parameter entity %1 cannot be CDATA, SDATA, NDATA or SUBDOC" 83, "duplicate declaration of entity %1" 84, "duplicate declaration of parameter entity %1" 85, "a reference to a PI entity is allowed only in a context where a processing instruction could occur" 86, "a reference to a CDATA or SDATA entity is allowed only in a context where a data character could occur" 87, "a reference to a subdocument entity or external data entity is allowed only in a context where a data character could occur" 88, "a reference to a subdocument entity or external data entity is not allowed in replaceable character data" 89, "the number of open entities cannot exceed ENTLVL" 90, "a reference to a PI entity is not allowed in replaceable character data" 91, "entity %1 is already open" 92, "short reference map %1 not defined" 93, "short reference map in DTD must specify associated element type" 94, "short reference map in document instance cannot specify associated element type" 95, "short reference map %1 for element %2 not defined in DTD" 96, "%1 is not a short reference delimiter" 97, "short reference delimiter %1 already mapped in this declaration" 98, "no document element" 99, "entity end not allowed in processing instruction" 100, "length of processing instruction must not exceed PILEN (%1)" 101, "missing pic delimiter" 102, "an attribute specification must start with a name or name token" 103, "%1 is not a member of a group specified for any attribute" 104, "the name and vi delimiter can be omitted from an attribute specification only if SHORTTAG YES is specified" 105, "there is no attribute %1" 106, "an attribute value specification must start with a literal or a name character" 107, "length of name token must not exceed NAMELEN (%1)" 108, "an attribute value literal can occur in an attribute specification list only after a vi delimiter" 109, "duplicate specification of attribute %1" 110, "duplicate definition of attribute %1" 111, "data attribute specification must be omitted if attribute specification list is empty" 112, "marked section end not in marked section declaration" 113, "number of open marked sections must not exceed TAGLVL (%1)" 114, "missing marked section end" 115, "marked section started here" 116, "entity end in character data, replaceable character data or ignored marked section" 117, "normalized length of attribute value literal must not exceed LITLEN (%1); length was %2" 118, "syntax of attribute value does not conform to declared value" 119, "character %1 is not allowed in the value of attribute %2" 120, "value of attribute %1 must be a single token" 121, "value of attribute %2 invalid: %1 cannot start a number token" 122, "value of attribute %2 invalid: %1 cannot start a name" 123, "non-impliable attribute %1 not specified but OMITTAG NO and SHORTTAG NO" 124, "required attribute %1 not specified" 125, "first occurrence of current attribute %1 not specified" 126, "%1 is not a notation name" 127, "%1 is not a general entity name" 128, "value of attribute %2 cannot be %1; must be one of %3" 129, "%1 is not a data or subdocument entity" 130, "content model is ambiguous: when no tokens have been matched, both the %2 and %3 occurrences of %1 are possible" 131, "content model is ambiguous: when the current token is the %2 occurrence of %1, both the %4 and %5 occurrences of %3 are possible" 132, "content model is ambiguous: when the current token is the %2 occurrence of %1 and the innermost containing and group has been matched, both the %4 and %5 occurrences of %3 are possible" 133, "content model is ambiguous: when the current token is the %2 occurrence of %1 and the innermost %3 containing and groups have been matched, both the %5 and %6 occurrences of %4 are possible" 134, "invalid comment declaration: found character %1 outside comment but inside comment declaration" 135, "comment declaration started here" 136, "non SGML character number %1" 137, "data or replaceable character data in declaration subset" 138, "ID %1 already defined" 139, "ID %1 first defined here" 140, "value of fixed attribute %1 not equal to default" 141, "character %1 is not significant in the reference concrete syntax and so cannot occur in a comment in the SGML declaration" 142, "minimum data of first minimum literal in SGML declaration must be ""ISO 8879:1986"" or ""ISO 8879:1986 (ENR)"" or ""ISO 8879:1986 (WWW)"" not %1" 143, "parameter before ""LCNMSTRT"" must be ""NAMING"" not %1" 144, "unexpected entity end in SGML declaration: only %1, S separators and comments allowed" 145, "%1 invalid: only %2 and parameter separators allowed" 146, "magnitude of %1 too big (length exceeds NAMELEN)" 147, "character %1 is not significant in the reference concrete syntax and so cannot occur in a literal in the SGML declaration except as the replacement of a character reference" 148, "%1 is not a valid syntax reference character number" 149, "a parameter entity reference cannot occur in an SGML declaration" 150, "%1 invalid: only %2 and parameter separators are allowed" 151, "cannot continue because of previous errors" 152, "SGML declaration cannot be parsed because the character set does not contain characters having the following numbers in ISO 646: %1" 153, "the specified character set is invalid because it does not contain the minimum data characters having the following numbers in ISO 646: %1" 154, "character numbers declared more than once: %1" 155, "character numbers should have been declared UNUSED: %1" 156, "character numbers missing in base set: %1" 157, "characters in the document character set with numbers exceeding %1 not supported" 158, "invalid formal public identifier %1: missing //" 159, "invalid formal public identifier %1: no SPACE after public text class" 160, "invalid formal public identifier %1: invalid public text class" 161, "invalid formal public identifier %1: public text language must be a name containing only upper case letters" 162, "invalid formal public identifer %1: public text display version not permitted with this text class" 163, "invalid formal public identifier %1: extra field" 164, "public text class of public identifier in notation identifier must be NOTATION" 165, "base character set %1 is unknown" 166, "delimiter set is ambiguous: %1 and %2 can be recognized in the same mode" 167, "characters with the following numbers in the syntax reference character set are significant in the concrete syntax but are not in the document character set: %1" 168, "there is no unique character in the document character set corresponding to character number %1 in the syntax reference character set" 169, "there is no unique character in the internal character set corresponding to character number %1 in the syntax reference character set" 170, "the character with number %1 in ISO 646 is significant but has no representation in the syntax reference character set" 171, "capacity set %1 is unknown" 172, "capacity %1 already specified" 173, "value of capacity %1 exceeds value of TOTALCAP" 174, "syntax %1 is unknown" 175, "UCNMSTRT must have the same number of characters as LCNMSTRT" 176, "UCNMCHAR must have the same number of characters as LCNMCHAR" 177, "number of open subdocuments exceeds quantity specified for SUBDOC parameter in SGML declaration (%1)" 178, "entity %1 declared SUBDOC, but SUBDOC NO specified in SGML declaration" 179, "a parameter entity referenced in a parameter separator must end in the same declaration" 180, "reference to non-existent ID %1" 181, "generic identifier %1 used in DTD but not defined" 182, "%1 not finished but document ended" 183, "cannot continue with subdocument because of previous errors" 184, "no document type declaration; will parse without validation" 185, "no internal or external document type declaration subset; will parse without validation" 186, "this is not an SGML document" 187, "length of start-tag before interpretation of literals must not exceed TAGLEN (%1)" 188, "a parameter entity referenced in a token separator must end in the same group" 189, "the following character numbers are shunned characters that are not significant and so should have been declared UNUSED: %1" 190, "there is no unique character in the specified document character set corresponding to character number %1 in ISO 646" 191, "length of attribute value must not exceed LITLEN less NORMSEP (-%1)" 192, "length of tokenized attribute value must not exceed LITLEN less NORMSEP (-%1)" 193, "concrete syntax scope is INSTANCE but value of %1 quantity is less than value in reference quantity set" 194, "public text class of formal public identifier of base character set must be CHARSET" 195, "public text class of formal public identifier of capacity set must be CAPACITY" 196, "public text class of formal public identifier of concrete syntax must be SYNTAX" 197, "when there is an MSOCHAR there must also be an MSICHAR" 198, "character number %1 in the syntax reference character set was specified as a character to be switched but is not a markup character" 199, "character number %1 was specified as a character to be switched but is not in the syntax reference character set" 200, "character numbers %1 in the document character set have been assigned the same meaning, but this is the meaning of a significant character" 201, "character number %1 assigned to more than one function" 202, "%1 is already a function name" 203, "characters with the following numbers in ISO 646 are significant in the concrete syntax but are not in the document character set: %1" 204, "general delimiter %1 consists solely of function characters" 205, "letters assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT: %1" 206, "digits assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT: %1" 207, "character number %1 cannot be assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT because it is RE" 208, "character number %1 cannot be assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT because it is RS" 209, "character number %1 cannot be assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT because it is SPACE" 210, "separator characters assigned to LCNMCHAR, UCNMCHAR, LCNMSTRT or UCNMSTRT: %1" 211, "character number %1 cannot be switched because it is a Digit, LC Letter or UC Letter" 212, "pointless for number of characters to be 0" 213, "%1 cannot be the replacement for a reference reserved name because it is another reference reserved name" 214, "%1 cannot be the replacement for a reference reserved name because it is the replacement of another reference reserved name" 215, "replacement for reserved name %1 already specified" 216, "%1 is not a valid name in the declared concrete syntax" 217, "%1 is not a valid short reference delimiter because it has more than one B sequence" 218, "%1 is not a valid short reference delimiter because it is adjacent to a character that can occur in a blank sequence" 219, "length of delimiter %1 exceeds NAMELEN (%2)" 220, "length of reserved name %1 exceeds NAMELEN (%2)" 221, "character numbers assigned to both LCNMCHAR or UCNMCHAR and LCNMSTRT or UCNMSTRT: %1" 222, "when the concrete syntax scope is INSTANCE the syntax reference character set of the declared syntax must be the same as that of the reference concrete syntax" 223, "end-tag minimization should be ""O"" for element with declared content of EMPTY" 224, "end-tag minimization should be ""O"" for element %1 because it has CONREF attribute" 225, "element %1 has a declared content of EMPTY and a CONREF attribute" 226, "element %1 has a declared content of EMPTY and a NOTATION attribute" 227, "declared value of data attribute cannot be ENTITY, ENTITIES, ID, IDREF, IDREFS or NOTATION" 228, "default value of data attribute cannot be CONREF or CURRENT" 229, "number of attribute names and name tokens (%1) exceeds ATTCNT (%2)" 230, "if the declared value is ID the default value must be IMPLIED or REQUIRED" 231, "the attribute definition list already declared attribute %1 as the ID attribute" 232, "the attribute definition list already declared attribute %1 as the NOTATION attribute" 233, "token %1 occurs more than once in attribute definition list" 234, "no attributes defined for notation %1" 235, "notation %1 for entity %2 undefined" 236, "entity %1 undefined in short reference map %2" 237, "notation %1 is undefined but had attribute definition" 238, "length of interpreted parameter literal in bracketed text plus the length of the bracketing delimiters must not exceed LITLEN (%1)" 239, "length of rank stem plus length of rank suffix must not exceed NAMELEN (%1)" 240, "document instance must start with document element" 241, "content model nesting level exceeds GRPLVL (%1)" 242, "grand total of content tokens exceeds GRPGTCNT (%1)" 243, "unclosed start-tag requires SHORTTAG YES" 244, "net-enabling start-tag requires SHORTTAG YES" 245, "unclosed end-tag requires SHORTTAG YES" 246, "DTDs other than base allowed only if CONCUR YES or EXPLICIT YES" 247, "end of entity other than document entity after document element" 248, "%1 declaration illegal after document element" 249, "character reference illegal after document element" 250, "entity reference illegal after document element" 251, "marked section illegal after document element" 252, "the %1 occurrence of %2 in the content model for %3 cannot be excluded at this point because it is contextually required" 253, "the %1 occurrence of %2 in the content model for %3 cannot be excluded because it is neither inherently optional nor a member of an or group" 254, "an attribute value specification must be an attribute value literal unless SHORTTAG YES is specified" 255, "value cannot be specified both for notation attribute and content reference attribute" 256, "notation %1 already defined" 257, "short reference map %1 already defined" 258, "first defined here" 259, "general delimiter role %1 already defined" 260, "number of id references in start-tag must not exceed GRPCNT (%1)" 261, "number of entity names in attribute specification list must not exceed GRPCNT (%1)" 262, "normalized length of attribute specification list must not exceed ATTSPLEN (%1); length was %2" 263, "short reference delimiter %1 already specified" 264, "single character short references were already specified for character numbers: %1" 265, "default entity used in entity attribute %1" 266, "reference to entity %1 uses default entity " 267, "entity %1 in short reference map %2 uses default entity" 268, "no DTD %1 declared" 269, "LPD %1 has neither internal nor external subset" 270, "element types have different link attribute definitions" 271, "link set %1 already defined" 272, "empty result attribute specification" 273, "no source element type %1" 274, "no result element type %1" 275, "end of document in LPD subset" 276, "%1 declaration not allowed in LPD subset" 277, "ID link set declaration not allowed in simple link declaration subset" 278, "link set declaration not allowed in simple link declaration subset" 279, "attributes can only be defined for base document element (not %1) in simple link declaration subset" 280, "a short reference mapping declaration is allowed only in the base DTD" 281, "a short reference use declaration is allowed only in the base DTD" 282, "default value of link attribute cannot be CURRENT or CONREF" 283, "declared value of link attribute cannot be ID, IDREF, IDREFS or NOTATION" 284, "only fixed attributes can be defined in simple LPD" 285, "only one ID link set declaration allowed in an LPD subset" 286, "no initial link set defined for LPD %1" 287, "notation %1 not defined in source DTD" 288, "result document type in simple link specification must be implied" 289, "simple link requires SIMPLE YES" 290, "implicit link requires IMPLICIT YES" 291, "explicit link requires EXPLICIT YES" 292, "LPD not allowed before first DTD" 293, "DTD not allowed after an LPD" 294, "definition of general entity %1 is unstable" 295, "definition of parameter entity %1 is unstable" 296, "multiple link rules for ID %1 but not all have link attribute specifications" 297, "multiple link rules for element type %1 but not all have link attribute specifications" 298, "link type %1 does not have a link set %2" 299, "link set use declaration for simple link process" 300, "no link type %1" 301, "both document type and link type %1" 302, "link type %1 already defined" 303, "document type %1 already defined" 304, "link set %1 used in LPD but not defined" 305, "#IMPLIED already linked to result element type %1" 306, "number of active simple link processes exceeds quantity specified for SIMPLE parameter in SGML declaration (%1)" 307, "only one chain of explicit link processes can be active" 308, "source document type name for link type %1 must be base document type since EXPLICIT YES 1" 309, "one one implicit link process can be active" 310, "sorry, link type %1 not activated: only one implicit or explicit link process can be active (with base document type as source document type)" 311, "name missing after name group in entity reference" 312, "source document type name for link type %1 must be base document type since EXPLICIT NO" 313, "link process must be activated before base DTD" 314, "unexpected entity end while starting second pass" 315, "type %1 of element with ID %2 not associated element type for applicable link rule in ID link set" 316, "DATATAG feature not implemented" 317, "generic identifier specification missing after document type specification in start-tag" 318, "generic identifier specification missing after document type specification in end-tag" 319, "a net-enabling start-tag cannot include a document type specification" 320, "DTD did not contain element declaration for document type name" 321, "invalid default SGML declaration" 322, "reference to entity %1 for which no system identifier could be generated" 323, "entity was defined here" 324, "content model is mixed but does not allow #PCDATA everywhere" 325, "start or end of range must specify a single character" 326, "number of first character in range must not exceed number of second character in range" 327, "delimiter cannot be an empty string" 328, "too many characters assigned same meaning with minimum literal" 329, "earlier reference to entity %1 used default entity" 330, "empty start-tag" 331, "empty end-tag" 332, "unused short reference map %1" 333, "unused parameter entity %1" 334, "cannot generate system identifier for public text %1" 335, "cannot generate system identifier for general entity %1" 336, "cannot generate system identifier for parameter entity %1" 337, "cannot generate system identifier for document type %1" 338, "cannot generate system identifier for link type %1" 339, "cannot generate system identifier for notation %1" 340, "element type %1 both included and excluded" 341, "no document type declaration; implying %1" 342, "minimum data of AFDR declaration must be ""ISO/IEC 10744:1997"" not %1" 343, "AFDR declaration required before use of AFDR extensions" 344, "ENR extensions were used but minimum literal was not ""ISO 8879:1986 (ENR)"" or ""ISO 8879:1986 (WWW)""" 345, "illegal numeric character reference to non-SGML character %1 in literal" 346, "cannot convert character reference to number %1 because description %2 unrecognized" 347, "cannot convert character reference to number %1 because character %2 from baseset %3 unknown" 348, "character reference to number %1 cannot be converted because of problem with internal character set" 349, "cannot convert character reference to number %1 because character not in internal character set" 350, "Web SGML adaptations were used but minimum literal was not ""ISO 8879:1986 (WWW)""" 351, "token %1 can be value for more multiple attributes so attribute name required" 352, "length of hex number must not exceed NAMELEN (%1)" 353, "%1 is not a valid name in the declared concrete syntax" 354, "CDATA declared content" 355, "RCDATA declared content" 356, "inclusion" 357, "exclusion" 358, "NUMBER or NUMBERS declared value" 359, "NAME or NAMES declared value" 360, "NUTOKEN or NUTOKENS declared value" 361, "conref attribute" 362, "current attribute" 363, "TEMP marked section" 364, "included marked section in the instance" 365, "ignored marked section in the instance" 366, "RCDATA marked section" 367, "processing instruction entity" 368, "bracketed text entity" 369, "internal CDATA entity" 370, "internal SDATA entity" 371, "external CDATA entity" 372, "external SDATA entity" 373, "attribute definition list declaration for notation" 374, "rank stem" 375, "no system id specified" 376, "comment in parameter separator" 377, "named character reference" 378, "and group" 379, "attribute value not a literal" 380, "attribute name missing" 381, "element declaration for group of element types" 382, "attribute definition list declaration for group of element types" 383, "empty comment declaration" 384, "s separator in comment declaration" 385, "multiple comments in comment declaration" 386, "no status keyword" 387, "multiple status keywords" 388, "parameter entity reference in document instance" 389, "current attribute" 390, "element type minimization parameter" 391, "reference not terminated by refc delimiter" 392, "#PCDATA not first in model group" 393, "#PCDATA in seq group" 394, "#PCDATA in nested model group" 395, "#PCDATA in model group that does not have rep occurrence indicator" 396, "name group or name token group used connector other than OR" 397, "processing instruction does not start with name" 398, "s separator in status keyword specification in document instance" 399, "reference to external data entity" 400, "reference to external entity in attribute value" 401, "character %1 is the first character of a delimiter but occurred as data" 402, "SGML declaration was not implied" 403, "marked section in internal DTD subset" 404, "net-enabling start-tag not immediately followed by null end-tag" 405, "entity end in different element from entity reference" 406, "NETENABL IMMEDNET requires EMPTYNRM YES" 407, "reference to non-SGML character" 408, "declaration of default entity" 409, "reference to parameter entity in parameter separator in internal subset" 410, "reference to parameter entity in token separator in internal subset" 411, "reference to parameter entity in parameter literal in internal subset" 412, "cannot generate system identifier for SGML declaration reference" 413, "public text class of formal public identifier of SGML declaration must be SD" 414, "SGML declaration reference was used but minimum literal was not ""ISO 8879:1986 (WWW)""" 415, "member of model group containing #PCDATA has occurrence indicator" 416, "member of model group containing #PCDATA is a model group" 1000, "delimiter " 1001, "" 1002, "digit" 1003, "name start character" 1004, "sepchar" 1005, "separator" 1006, "name character" 1007, "data character" 1008, "minimum data character" 1009, "significant character" 1010, "record end character" 1011, "record start character" 1012, "space character" 1013, ", " 1014, "-" 1015, "parameter literal" 1016, "data tag group" 1017, "model group" 1018, "data tag template group" 1019, "name" 1020, "name token" 1021, "element token" 1022, "inclusions" 1023, "exclusions" 1024, "minimum literal" 1025, "attribute value literal" 1026, "system identifier" 1027, "number" 1028, "attribute value" 1029, "name of capacity" 1030, "name of general delimiter role" 1031, "reference reserved name" 1032, "name of quantity" 1033, "entity end" 1034, "short reference delimiter" END jade-1.2.1/lib/ParserMessages.h100444 764 764 62475 6604610606 14110 0ustar jjcjjc// This file was automatically generated from lib\ParserMessages.msg by msggen.pl. #ifndef ParserMessages_INCLUDED #define ParserMessages_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct ParserMessages { // 0 static const MessageType1 nameLength; // 1 static const MessageType1 parameterEntityNameLength; // 2 static const MessageType1 numberLength; // 3 static const MessageType1 attributeValueLength; // 4 static const MessageType0 peroGrpoProlog; // 5 static const MessageType0 groupLevel; // 6 static const MessageType2 groupCharacter; // 7 static const MessageType0 psRequired; // 8 static const MessageType2 markupDeclarationCharacter; // 9 static const MessageType0 declarationLevel; // 10 static const MessageType0 groupEntityEnd; // 11 static const MessageType1 invalidToken; // 12 static const MessageType0 groupEntityReference; // 13 static const MessageType1 duplicateGroupToken; // 14 static const MessageType1 groupCount; // 15 static const MessageType0 literalLevel; // 16 static const MessageType1 literalMinimumData; // 17 static const MessageType0 dataTagPatternNonSgml; // 18 static const MessageType0 dataTagPatternFunction; // 19 static const MessageType0 eroGrpoStartTag; // 20 static const MessageType0 eroGrpoProlog; // 21 static const MessageType1 functionName; // 22 static const MessageType1 characterNumber; // 23 static const MessageType1 parameterEntityUndefined; // 24 static const MessageType1 entityUndefined; // 25 static const MessageType0 rniNameStart; // 26 static const MessageType0L commentEntityEnd; // 28 static const MessageType0 mixedConnectors; // 29 static const MessageType1 noSuchReservedName; // 30 static const MessageType1 invalidReservedName; // 31 static const MessageType1 minimumLiteralLength; // 32 static const MessageType1 tokenizedAttributeValueLength; // 33 static const MessageType1 systemIdentifierLength; // 34 static const MessageType1 parameterLiteralLength; // 35 static const MessageType1 dataTagPatternLiteralLength; // 36 static const MessageType0 literalClosingDelimiter; // 37 static const MessageType2 paramInvalidToken; // 38 static const MessageType2 groupTokenInvalidToken; // 39 static const MessageType2 connectorInvalidToken; // 40 static const MessageType1 noSuchDeclarationType; // 41 static const MessageType1 dtdSubsetDeclaration; // 42 static const MessageType1 declSubsetCharacter; // 43 static const MessageType0 documentEndDtdSubset; // 44 static const MessageType1 prologCharacter; // 45 static const MessageType0 documentEndProlog; // 46 static const MessageType1 prologDeclaration; // 47 static const MessageType1 rankStemGenericIdentifier; // 48 static const MessageType0 missingTagMinimization; // 49 static const MessageType1 duplicateElementDefinition; // 50 static const MessageType0 entityApplicableDtd; // 51 static const MessageType1L commentDeclInvalidToken; // 53 static const MessageType1 instanceDeclaration; // 54 static const MessageType0 contentNonSgml; // 55 static const MessageType1 noCurrentRank; // 56 static const MessageType1 duplicateAttlistNotation; // 57 static const MessageType1 duplicateAttlistElement; // 58 static const MessageType0 endTagEntityEnd; // 59 static const MessageType1 endTagCharacter; // 60 static const MessageType1 endTagInvalidToken; // 61 static const MessageType0 pcdataNotAllowed; // 62 static const MessageType1 elementNotAllowed; // 63 static const MessageType2 missingElementMultiple; // 64 static const MessageType2 missingElementInferred; // 65 static const MessageType1 startTagEmptyElement; // 66 static const MessageType1L omitEndTagDeclare; // 68 static const MessageType1L omitEndTagOmittag; // 70 static const MessageType1 omitStartTagDeclaredContent; // 71 static const MessageType1 elementEndTagNotFinished; // 72 static const MessageType1 omitStartTagDeclare; // 73 static const MessageType1 taglvlOpenElements; // 74 static const MessageType1 undefinedElement; // 75 static const MessageType0 emptyEndTagNoOpenElements; // 76 static const MessageType1 elementNotFinished; // 77 static const MessageType1 elementNotOpen; // 78 static const MessageType1 internalParameterDataEntity; // 79 static const MessageType1 attributeSpecCharacter; // 80 static const MessageType0 unquotedAttributeValue; // 81 static const MessageType0 attributeSpecEntityEnd; // 82 static const MessageType1 externalParameterDataSubdocEntity; // 83 static const MessageType1 duplicateEntityDeclaration; // 84 static const MessageType1 duplicateParameterEntityDeclaration; // 85 static const MessageType0 piEntityReference; // 86 static const MessageType0 internalDataEntityReference; // 87 static const MessageType0 externalNonTextEntityReference; // 88 static const MessageType0 externalNonTextEntityRcdata; // 89 static const MessageType0 entlvl; // 90 static const MessageType0 piEntityRcdata; // 91 static const MessageType1 recursiveEntityReference; // 92 static const MessageType1 undefinedShortrefMapInstance; // 93 static const MessageType0 usemapAssociatedElementTypeDtd; // 94 static const MessageType0 usemapAssociatedElementTypeInstance; // 95 static const MessageType2 undefinedShortrefMapDtd; // 96 static const MessageType1 unknownShortrefDelim; // 97 static const MessageType1 delimDuplicateMap; // 98 static const MessageType0 noDocumentElement; // 99 static const MessageType0 processingInstructionEntityEnd; // 100 static const MessageType1 processingInstructionLength; // 101 static const MessageType0 processingInstructionClose; // 102 static const MessageType0 attributeSpecNameTokenExpected; // 103 static const MessageType1 noSuchAttributeToken; // 104 static const MessageType0 attributeNameShorttag; // 105 static const MessageType1 noSuchAttribute; // 106 static const MessageType0 attributeValueExpected; // 107 static const MessageType1 nameTokenLength; // 108 static const MessageType0 attributeSpecLiteral; // 109 static const MessageType1 duplicateAttributeSpec; // 110 static const MessageType1 duplicateAttributeDef; // 111 static const MessageType0 emptyDataAttributeSpec; // 112 static const MessageType0 markedSectionEnd; // 113 static const MessageType1 markedSectionLevel; // 114 static const MessageType0L unclosedMarkedSection; // 116 static const MessageType0 specialParseEntityEnd; // 117 static const MessageType2 normalizedAttributeValueLength; // 118 static const MessageType0 attributeValueSyntax; // 119 static const MessageType2 attributeValueChar; // 120 static const MessageType1 attributeValueMultiple; // 121 static const MessageType2 attributeValueNumberToken; // 122 static const MessageType2 attributeValueName; // 123 static const MessageType1 attributeMissing; // 124 static const MessageType1 requiredAttributeMissing; // 125 static const MessageType1 currentAttributeMissing; // 126 static const MessageType1 invalidNotationAttribute; // 127 static const MessageType1 invalidEntityAttribute; // 128 static const MessageType3 attributeValueNotInGroup; // 129 static const MessageType1 notDataOrSubdocEntity; // 130 static const MessageType3 ambiguousModelInitial; // 131 static const MessageType5 ambiguousModel; // 132 static const MessageType5 ambiguousModelSingleAnd; // 133 static const MessageType6 ambiguousModelMultipleAnd; // 134 static const MessageType1L commentDeclarationCharacter; // 136 static const MessageType1 nonSgmlCharacter; // 137 static const MessageType0 dataMarkedSectionDeclSubset; // 138 static const MessageType1L duplicateId; // 140 static const MessageType1 notFixedValue; // 141 static const MessageType1 sdCommentSignificant; // 142 static const MessageType1 standardVersion; // 143 static const MessageType1 namingBeforeLcnmstrt; // 144 static const MessageType1 sdEntityEnd; // 145 static const MessageType2 sdInvalidNameToken; // 146 static const MessageType1 numberTooBig; // 147 static const MessageType1 sdLiteralSignificant; // 148 static const MessageType1 syntaxCharacterNumber; // 149 static const MessageType0 sdParameterEntity; // 150 static const MessageType2 sdParamInvalidToken; // 151 static const MessageType0 giveUp; // 152 static const MessageType1 sdMissingCharacters; // 153 static const MessageType1 missingMinimumChars; // 154 static const MessageType1 duplicateCharNumbers; // 155 static const MessageType1 codeSetHoles; // 156 static const MessageType1 basesetCharsMissing; // 157 static const MessageType1 documentCharMax; // 158 static const MessageType1 fpiMissingField; // 159 static const MessageType1 fpiMissingTextClassSpace; // 160 static const MessageType1 fpiInvalidTextClass; // 161 static const MessageType1 fpiInvalidLanguage; // 162 static const MessageType1 fpiIllegalDisplayVersion; // 163 static const MessageType1 fpiExtraField; // 164 static const MessageType0 notationIdentifierTextClass; // 165 static const MessageType1 unknownBaseset; // 166 static const MessageType2 lexicalAmbiguity; // 167 static const MessageType1 missingSignificant; // 168 static const MessageType1 translateSyntaxCharDoc; // 169 static const MessageType1 translateSyntaxCharInternal; // 170 static const MessageType1 missingSyntaxChar; // 171 static const MessageType1 unknownCapacitySet; // 172 static const MessageType1 duplicateCapacity; // 173 static const MessageType1 capacityExceedsTotalcap; // 174 static const MessageType1 unknownPublicSyntax; // 175 static const MessageType0 nmstrtLength; // 176 static const MessageType0 nmcharLength; // 177 static const MessageType1 subdocLevel; // 178 static const MessageType1 subdocEntity; // 179 static const MessageType0 parameterEntityNotEnded; // 180 static const MessageType1 missingId; // 181 static const MessageType1 dtdUndefinedElement; // 182 static const MessageType1 elementNotFinishedDocumentEnd; // 183 static const MessageType0 subdocGiveUp; // 184 static const MessageType0 noDtd; // 185 static const MessageType0 noDtdSubset; // 186 static const MessageType0 notSgml; // 187 static const MessageType1 taglen; // 188 static const MessageType0 groupParameterEntityNotEnded; // 189 static const MessageType1 invalidSgmlChar; // 190 static const MessageType1 translateDocChar; // 191 static const MessageType1 attributeValueLengthNeg; // 192 static const MessageType1 tokenizedAttributeValueLengthNeg; // 193 static const MessageType1 scopeInstanceQuantity; // 194 static const MessageType1 basesetTextClass; // 195 static const MessageType1 capacityTextClass; // 196 static const MessageType1 syntaxTextClass; // 197 static const MessageType0 msocharRequiresMsichar; // 198 static const MessageType1 switchNotMarkup; // 199 static const MessageType1 switchNotInCharset; // 200 static const MessageType1 ambiguousDocCharacter; // 201 static const MessageType1 oneFunction; // 202 static const MessageType1 duplicateFunctionName; // 203 static const MessageType1 missingSignificant646; // 204 static const MessageType1 generalDelimAllFunction; // 205 static const MessageType1 nmcharLetter; // 206 static const MessageType1 nmcharDigit; // 207 static const MessageType1 nmcharRe; // 208 static const MessageType1 nmcharRs; // 209 static const MessageType1 nmcharSpace; // 210 static const MessageType1 nmcharSepchar; // 211 static const MessageType1 switchLetterDigit; // 212 static const MessageType0 zeroNumberOfCharacters; // 213 static const MessageType1 nameReferenceReservedName; // 214 static const MessageType1 ambiguousReservedName; // 215 static const MessageType1 duplicateReservedName; // 216 static const MessageType1 reservedNameSyntax; // 217 static const MessageType1 multipleBSequence; // 218 static const MessageType1 blankAdjacentBSequence; // 219 static const MessageType2 delimiterLength; // 220 static const MessageType2 reservedNameLength; // 221 static const MessageType1 nmcharNmstrt; // 222 static const MessageType0 scopeInstanceSyntaxCharset; // 223 static const MessageType0 emptyOmitEndTag; // 224 static const MessageType1 conrefOmitEndTag; // 225 static const MessageType1 conrefEmpty; // 226 static const MessageType1 notationEmpty; // 227 static const MessageType0 dataAttributeDeclaredValue; // 228 static const MessageType0 dataAttributeDefaultValue; // 229 static const MessageType2 attcnt; // 230 static const MessageType0 idDeclaredValue; // 231 static const MessageType1 multipleIdAttributes; // 232 static const MessageType1 multipleNotationAttributes; // 233 static const MessageType1 duplicateAttributeToken; // 234 static const MessageType1 notationNoAttributes; // 235 static const MessageType2 entityNotationUndefined; // 236 static const MessageType2 mapEntityUndefined; // 237 static const MessageType1 attlistNotationUndefined; // 238 static const MessageType1 bracketedLitlen; // 239 static const MessageType1 genericIdentifierLength; // 240 static const MessageType0 instanceStartOmittag; // 241 static const MessageType1 grplvl; // 242 static const MessageType1 grpgtcnt; // 243 static const MessageType0 unclosedStartTagShorttag; // 244 static const MessageType0 netEnablingStartTagShorttag; // 245 static const MessageType0 unclosedEndTagShorttag; // 246 static const MessageType0 multipleDtds; // 247 static const MessageType0 afterDocumentElementEntityEnd; // 248 static const MessageType1 declarationAfterDocumentElement; // 249 static const MessageType0 characterReferenceAfterDocumentElement; // 250 static const MessageType0 entityReferenceAfterDocumentElement; // 251 static const MessageType0 markedSectionAfterDocumentElement; // 252 static const MessageType3 requiredElementExcluded; // 253 static const MessageType3 invalidExclusion; // 254 static const MessageType0 attributeValueShorttag; // 255 static const MessageType0 conrefNotation; // 256 static const MessageType1 duplicateNotationDeclaration; // 257 static const MessageType1L duplicateShortrefDeclaration; // 259 static const MessageType1 duplicateDelimGeneral; // 260 static const MessageType1 idrefGrpcnt; // 261 static const MessageType1 entityNameGrpcnt; // 262 static const MessageType2 attsplen; // 263 static const MessageType1 duplicateDelimShortref; // 264 static const MessageType1 duplicateDelimShortrefSet; // 265 static const MessageType1 defaultEntityInAttribute; // 266 static const MessageType1 defaultEntityReference; // 267 static const MessageType2 mapDefaultEntity; // 268 static const MessageType1 noSuchDtd; // 269 static const MessageType1 noLpdSubset; // 270 static const MessageType0 assocElementDifferentAtts; // 271 static const MessageType1 duplicateLinkSet; // 272 static const MessageType0 emptyResultAttributeSpec; // 273 static const MessageType1 noSuchSourceElement; // 274 static const MessageType1 noSuchResultElement; // 275 static const MessageType0 documentEndLpdSubset; // 276 static const MessageType1 lpdSubsetDeclaration; // 277 static const MessageType0 idlinkDeclSimple; // 278 static const MessageType0 linkDeclSimple; // 279 static const MessageType1 simpleLinkAttlistElement; // 280 static const MessageType0 shortrefOnlyInBaseDtd; // 281 static const MessageType0 usemapOnlyInBaseDtd; // 282 static const MessageType0 linkAttributeDefaultValue; // 283 static const MessageType0 linkAttributeDeclaredValue; // 284 static const MessageType0 simpleLinkFixedAttribute; // 285 static const MessageType0 duplicateIdLinkSet; // 286 static const MessageType1 noInitialLinkSet; // 287 static const MessageType1 notationUndefinedSourceDtd; // 288 static const MessageType0 simpleLinkResultNotImplied; // 289 static const MessageType0 simpleLinkFeature; // 290 static const MessageType0 implicitLinkFeature; // 291 static const MessageType0 explicitLinkFeature; // 292 static const MessageType0 lpdBeforeBaseDtd; // 293 static const MessageType0 dtdAfterLpd; // 294 static const MessageType1 unstableLpdGeneralEntity; // 295 static const MessageType1 unstableLpdParameterEntity; // 296 static const MessageType1 multipleIdLinkRuleAttribute; // 297 static const MessageType1 multipleLinkRuleAttribute; // 298 static const MessageType2 uselinkBadLinkSet; // 299 static const MessageType1 uselinkSimpleLpd; // 300 static const MessageType1 uselinkBadLinkType; // 301 static const MessageType1 duplicateDtdLpd; // 302 static const MessageType1 duplicateLpd; // 303 static const MessageType1 duplicateDtd; // 304 static const MessageType1 undefinedLinkSet; // 305 static const MessageType1 duplicateImpliedResult; // 306 static const MessageType1 simpleLinkCount; // 307 static const MessageType0 duplicateExplicitChain; // 308 static const MessageType1 explicit1RequiresSourceTypeBase; // 309 static const MessageType0 oneImplicitLink; // 310 static const MessageType1 sorryLink; // 311 static const MessageType0 entityReferenceMissingName; // 312 static const MessageType1 explicitNoRequiresSourceTypeBase; // 313 static const MessageType0 linkActivateTooLate; // 314 static const MessageType0 pass2Ee; // 315 static const MessageType2 idlinkElementType; // 316 static const MessageType0 datatagNotImplemented; // 317 static const MessageType0 startTagMissingName; // 318 static const MessageType0 endTagMissingName; // 319 static const MessageType0 startTagGroupNet; // 320 static const MessageType0 documentElementUndefined; // 321 static const MessageType0 badDefaultSgmlDecl; // 322 static const MessageType1L nonExistentEntityRef; // 324 static const MessageType0 pcdataUnreachable; // 325 static const MessageType0 sdRangeNotSingleChar; // 326 static const MessageType0 sdInvalidRange; // 327 static const MessageType0 sdEmptyDelimiter; // 328 static const MessageType0 tooManyCharsMinimumLiteral; // 329 static const MessageType1 defaultedEntityDefined; // 330 static const MessageType0 emptyStartTag; // 331 static const MessageType0 emptyEndTag; // 332 static const MessageType1 unusedMap; // 333 static const MessageType1 unusedParamEntity; // 334 static const MessageType1 cannotGenerateSystemIdPublic; // 335 static const MessageType1 cannotGenerateSystemIdGeneral; // 336 static const MessageType1 cannotGenerateSystemIdParameter; // 337 static const MessageType1 cannotGenerateSystemIdDoctype; // 338 static const MessageType1 cannotGenerateSystemIdLinktype; // 339 static const MessageType1 cannotGenerateSystemIdNotation; // 340 static const MessageType1 excludeIncludeSame; // 341 static const MessageType1 implyingDtd; // 342 static const MessageType1 afdrVersion; // 343 static const MessageType0 missingAfdrDecl; // 344 static const MessageType0 enrRequired; // 345 static const MessageType1 numericCharRefLiteralNonSgml; // 346 static const MessageType2 numericCharRefUnknownDesc; // 347 static const MessageType3 numericCharRefUnknownBase; // 348 static const MessageType1 numericCharRefBadInternal; // 349 static const MessageType1 numericCharRefNoInternal; // 350 static const MessageType0 wwwRequired; // 351 static const MessageType1 attributeTokenNotUnique; // 352 static const MessageType1 hexNumberLength; // 353 static const MessageType1 entityNameSyntax; // 354 static const MessageType0 cdataContent; // 355 static const MessageType0 rcdataContent; // 356 static const MessageType0 inclusion; // 357 static const MessageType0 exclusion; // 358 static const MessageType0 numberDeclaredValue; // 359 static const MessageType0 nameDeclaredValue; // 360 static const MessageType0 nutokenDeclaredValue; // 361 static const MessageType0 conrefAttribute; // 362 static const MessageType0 currentAttribute; // 363 static const MessageType0 tempMarkedSection; // 364 static const MessageType0 instanceIncludeMarkedSection; // 365 static const MessageType0 instanceIgnoreMarkedSection; // 366 static const MessageType0 rcdataMarkedSection; // 367 static const MessageType0 piEntity; // 368 static const MessageType0 bracketEntity; // 369 static const MessageType0 internalCdataEntity; // 370 static const MessageType0 internalSdataEntity; // 371 static const MessageType0 externalCdataEntity; // 372 static const MessageType0 externalSdataEntity; // 373 static const MessageType0 dataAttributes; // 374 static const MessageType0 rank; // 375 static const MessageType0 missingSystemId; // 376 static const MessageType0 psComment; // 377 static const MessageType0 namedCharRef; // 378 static const MessageType0 andGroup; // 379 static const MessageType0 attributeValueNotLiteral; // 380 static const MessageType0 missingAttributeName; // 381 static const MessageType0 elementGroupDecl; // 382 static const MessageType0 attlistGroupDecl; // 383 static const MessageType0 emptyCommentDecl; // 384 static const MessageType0 commentDeclS; // 385 static const MessageType0 commentDeclMultiple; // 386 static const MessageType0 missingStatusKeyword; // 387 static const MessageType0 multipleStatusKeyword; // 388 static const MessageType0 instanceParamEntityRef; // 389 static const MessageType0 current; // 390 static const MessageType0 minimizationParam; // 391 static const MessageType0 refc; // 392 static const MessageType0 pcdataNotFirstInGroup; // 393 static const MessageType0 pcdataInSeqGroup; // 394 static const MessageType0 pcdataInNestedModelGroup; // 395 static const MessageType0 pcdataGroupNotRep; // 396 static const MessageType0 nameGroupNotOr; // 397 static const MessageType0 piMissingName; // 398 static const MessageType0 instanceStatusKeywordSpecS; // 399 static const MessageType0 externalDataEntityRef; // 400 static const MessageType0 attributeValueExternalEntityRef; // 401 static const MessageType1 dataCharDelim; // 402 static const MessageType0 explicitSgmlDecl; // 403 static const MessageType0 internalSubsetMarkedSection; // 404 static const MessageType0 nestcWithoutNet; // 405 static const MessageType0 contentAsyncEntityRef; // 406 static const MessageType0 immednetRequiresEmptynrm; // 407 static const MessageType0 nonSgmlCharRef; // 408 static const MessageType0 defaultEntityDecl; // 409 static const MessageType0 internalSubsetPsParamEntityRef; // 410 static const MessageType0 internalSubsetTsParamEntityRef; // 411 static const MessageType0 internalSubsetLiteralParamEntityRef; // 412 static const MessageType0 cannotGenerateSystemIdSgml; // 413 static const MessageType1 sdTextClass; // 414 static const MessageType0 sgmlDeclRefRequiresWww; // 415 static const MessageType0 pcdataGroupMemberOccurrenceIndicator; // 416 static const MessageType0 pcdataGroupMemberModelGroup; // 1000 static const MessageFragment delimStart; // 1001 static const MessageFragment delimEnd; // 1002 static const MessageFragment digit; // 1003 static const MessageFragment nameStartCharacter; // 1004 static const MessageFragment sepchar; // 1005 static const MessageFragment separator; // 1006 static const MessageFragment nameCharacter; // 1007 static const MessageFragment dataCharacter; // 1008 static const MessageFragment minimumDataCharacter; // 1009 static const MessageFragment significantCharacter; // 1010 static const MessageFragment recordEnd; // 1011 static const MessageFragment recordStart; // 1012 static const MessageFragment space; // 1013 static const MessageFragment listSep; // 1014 static const MessageFragment rangeSep; // 1015 static const MessageFragment parameterLiteral; // 1016 static const MessageFragment dataTagGroup; // 1017 static const MessageFragment modelGroup; // 1018 static const MessageFragment dataTagTemplateGroup; // 1019 static const MessageFragment name; // 1020 static const MessageFragment nameToken; // 1021 static const MessageFragment elementToken; // 1022 static const MessageFragment inclusions; // 1023 static const MessageFragment exclusions; // 1024 static const MessageFragment minimumLiteral; // 1025 static const MessageFragment attributeValueLiteral; // 1026 static const MessageFragment systemIdentifier; // 1027 static const MessageFragment number; // 1028 static const MessageFragment attributeValue; // 1029 static const MessageFragment capacityName; // 1030 static const MessageFragment generalDelimiteRoleName; // 1031 static const MessageFragment referenceReservedName; // 1032 static const MessageFragment quantityName; // 1033 static const MessageFragment entityEnd; // 1034 static const MessageFragment shortrefDelim; }; #ifdef SP_NAMESPACE } #endif #endif /* not ParserMessages_INCLUDED */ jade-1.2.1/lib/ParserOptions.cxx100444 764 764 1567 6606574410 14326 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "ParserOptions.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif ParserOptions::ParserOptions() : datatag(0), omittag(1), rank(1), shorttag(1), emptynrm(0), linkSimple(1000), linkImplicit(1), linkExplicit(1), concur(0), subdoc(99999999), formal(1), typeValid(sgmlDeclTypeValid), shortref(1), errorIdref(1), errorSignificant(1), errorAfdr(1), noUnclosedTag(0), noNet(0) { for (int i = 0; i < nQuantity; i++) quantity[i] = 99999999; quantity[BSEQLEN] = 960; quantity[NORMSEP] = 2; quantity[LITLEN] = 24000; quantity[PILEN] = 24000; quantity[DTEMPLEN] = 24000; } Warnings::Warnings() { memset(this, 0, sizeof(Warnings)); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ParserState.cxx100444 764 764 50066 6605113074 13763 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "ParserState.h" #include "InternalInputSource.h" #include "MessageArg.h" #include "macros.h" #include "SgmlParser.h" #include "IListIter.h" #include "ParserMessages.h" #include "Undo.h" #include "Trie.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const Location ParserState::nullLocation_; sig_atomic_t ParserState::dummyCancel_ = 0; static const size_t eventSizes[] = { #define EVENT(c, f) sizeof(c), #include "events.h" #undef EVENT }; static const size_t internalSizes[] = { sizeof(InternalInputSource), sizeof(OpenElement), sizeof(UndoStartTag), sizeof(UndoEndTag), sizeof(UndoTransition) }; static size_t maxSize(const size_t *v, size_t n, size_t max = 0) { for (size_t i = 0; i < n; i++) { if (v[i] > max) max = v[i]; } return max; } ParserState::ParserState(const Ptr &em, const ParserOptions &opt, unsigned subdocLevel, Phase finalPhase) : entityManager_(em), options_(opt), inInstance_(0), keepingMessages_(0), eventAllocator_(maxSize(eventSizes, SIZEOF(eventSizes)), 50), internalAllocator_(maxSize(internalSizes, SIZEOF(internalSizes), EntityOrigin::allocSize), 50), handler_(&eventQueue_), subdocLevel_(subdocLevel), inputLevel_(0), specialParseInputLevel_(0), markedSectionLevel_(0), markedSectionSpecialLevel_(0), currentMode_(proMode), hadLpd_(0), resultAttributeSpecMode_(0), pass2_(0), activeLinkTypesSubsted_(0), allowPass2_(0), hadPass2Start_(0), pcdataRecovering_(0), currentMarkup_(0), cancelPtr_(&dummyCancel_), finalPhase_(finalPhase), hadAfdrDecl_(0) { } void ParserState::inheritActiveLinkTypes(const ParserState &parent) { activeLinkTypes_ = parent.activeLinkTypes_; activeLinkTypesSubsted_ = parent.activeLinkTypesSubsted_; } void ParserState::allDone() { phase_ = noPhase; } void ParserState::setPass2Start() { ASSERT(inputLevel_ == 1); if (hadPass2Start_) return; hadPass2Start_ = 1; if (!pass2() && sd().link() && activeLinkTypes_.size() > 0) { allowPass2_ = 1; pass1Handler_.init(handler_); handler_ = &pass1Handler_; const InputSourceOrigin *p = currentLocation().origin()->asInputSourceOrigin(); pass2StartOffset_= p->startOffset(currentLocation().index()); } else { allowPass2_ = 0; currentInput()->willNotRewind(); } } void ParserState::allLinkTypesActivated() { if (activeLinkTypes_.size() == 0 && inputLevel_ == 1) currentInput()->willNotRewind(); } Boolean ParserState::maybeStartPass2() { if (pass2_ || !allowPass2_) return 0; handler_ = pass1Handler_.origHandler(); if (!nActiveLink() || pass1Handler_.hadError()) { while (!pass1Handler_.empty()) { if (cancelled()) return 0; pass1Handler_.get()->handle(*handler_); } InputSource *top = 0; for (IListIter iter(inputStack_); !iter.done(); iter.next()) top = iter.cur(); if (top) top->willNotRewind(); return 0; } pass1Handler_.clear(); while (inputLevel_ > 1) { InputSource *p = inputStack_.get(); inputLevel_--; delete p; } // Caller will call allDone() if inputLevel_ is 0. if (inputLevel_ == 0) return 0; if (!inputStack_.head()->rewind(*this)) { inputLevel_ = 0; delete inputStack_.get(); return 0; } inputStack_.head()->willNotRewind(); for (; pass2StartOffset_ > 0; pass2StartOffset_--) if (inputStack_.head()->get(messenger()) == InputSource::eE) { message(ParserMessages::pass2Ee); inputLevel_ = 0; delete inputStack_.get(); return 0; } specialParseInputLevel_ = 0; markedSectionLevel_ = 0; markedSectionSpecialLevel_ = 0; currentMode_ = proMode; hadLpd_ = 0; allowPass2_ = 0; hadPass2Start_ = 0; currentMarkup_ = 0; inputLevel_ = 1; inInstance_ = 0; defDtd_.clear(); defLpd_.clear(); dtd_[0].swap(pass1Dtd_); dtd_.clear(); dsEntity_.clear(); currentDtd_.clear(); currentDtdConst_.clear(); phase_ = noPhase; pass2_ = 1; lpd_.clear(); allLpd_.clear(); return 1; } Boolean ParserState::referenceDsEntity(const Location &loc) { if (dsEntity_.isNull()) return 0; Ptr origin = EntityOrigin::make(internalAllocator(), dsEntity_, loc); dsEntity_->dsReference(*this, origin); dsEntity_.clear(); return inputLevel() > 1; } void ParserState::startDtd(const StringC &name) { defDtd_ = new Dtd(name, dtd_.size() == 0); defLpd_.clear(); for (size_t i = 0; i < options().includes.size(); i++) { StringC name = options().includes[i]; const SubstTable *subst = syntax().entitySubstTable(); for (size_t j = 0; j < name.size(); j++) subst->subst(name[j]); Text text; text.addChars(syntax().reservedName(Syntax::rINCLUDE), Location()); Entity *entity = new InternalTextEntity(name, Entity::parameterEntity, Location(), text, InternalTextEntity::none); entity->setUsed(); defDtd_->insertEntity(entity); } size_t nEntities = instanceSyntax_->nEntities(); for (size_t i = 0; i < nEntities; i++) { Text text; text.addChar(instanceSyntax_->entityChar(i), Location()); Entity *entity = new InternalCdataEntity(instanceSyntax_->entityName(i), Location(), text); defDtd_->insertEntity(entity); } currentDtd_ = defDtd_; currentDtdConst_ = defDtd_; currentMode_ = dsMode; } void ParserState::endDtd() { dtd_.push_back(defDtd_); defDtd_.clear(); currentDtd_.clear(); currentDtdConst_.clear(); currentMode_ = proMode; } void ParserState::startLpd(Ptr &lpd) { defLpd_ = lpd; defDtd_ = defLpd_->sourceDtd(); currentDtd_ = defLpd_->sourceDtd(); currentDtdConst_ = defLpd_->sourceDtd(); currentMode_ = dsMode; } void ParserState::endLpd() { hadLpd_ = 1; if (defLpd_->active()) lpd_.push_back(defLpd_); allLpd_.push_back(defLpd_); defLpd_.clear(); currentDtd_.clear(); currentDtdConst_.clear(); currentMode_ = proMode; } void ParserState::popInputStack() { ASSERT(inputLevel_ > 0); InputSource *p = inputStack_.get(); inputLevel_--; delete p; if (specialParseInputLevel_ > 0 && inputLevel_ == specialParseInputLevel_) currentMode_ = specialParseMode_; if (currentMode_ == dsiMode && inputLevel_ == 1 && markedSectionLevel_ == 0) currentMode_ = dsMode; if (inputLevelElementIndex_.size()) inputLevelElementIndex_.resize(inputLevelElementIndex_.size() - 1); } void ParserState::setSd(ConstPtr sd) { sd_ = sd; mayDefaultAttribute_ = (sd_->omittag() || sd_->attributeDefault()); validate_ = sd_->typeValid(); implydefElement_ = sd_->implydefElement(); implydefAttlist_ = sd_->implydefAttlist(); } void ParserState::setSyntax(ConstPtr syntax) { syntax_ = syntax; prologSyntax_ = syntax; instanceSyntax_ = syntax; } void ParserState::setSyntaxes(ConstPtr prologSyntax, ConstPtr instanceSyntax) { syntax_ = prologSyntax; prologSyntax_ = prologSyntax; instanceSyntax_ = instanceSyntax; } void ParserState::pushInput(InputSource *in) { if (!in) return; if (!syntax_.isNull() && syntax_->multicode()) in->setMarkupScanTable(syntax_->markupScanTable()); inputStack_.insert(in); inputLevel_++; if (specialParseInputLevel_ > 0 && inputLevel_ > specialParseInputLevel_) currentMode_ = rcconeMode; // mode for rcdata in an entity else if (currentMode_ == dsMode) currentMode_ = dsiMode; if (inInstance_ && sd().integrallyStored()) inputLevelElementIndex_.push_back(tagLevel() ? currentElement().index() : 0); } void ParserState::startMarkedSection(const Location &loc) { markedSectionLevel_++; markedSectionStartLocation_.push_back(loc); if (currentMode_ == dsMode) currentMode_ = dsiMode; if (markedSectionSpecialLevel_) markedSectionSpecialLevel_++; } void ParserState::startSpecialMarkedSection(Mode mode, const Location &loc) { markedSectionLevel_++; markedSectionStartLocation_.push_back(loc); specialParseInputLevel_ = inputLevel_; markedSectionSpecialLevel_ = 1; specialParseMode_ = currentMode_ = mode; } void ParserState::endMarkedSection() { ASSERT(markedSectionLevel_ > 0); markedSectionLevel_--; markedSectionStartLocation_.resize(markedSectionStartLocation_.size() - 1); if (markedSectionSpecialLevel_ > 0) { markedSectionSpecialLevel_--; if (markedSectionSpecialLevel_ > 0) return; // remain in imsMode specialParseInputLevel_ = 0; if (inInstance_) currentMode_ = contentMode(); else currentMode_ = dsiMode; } if (currentMode_ == dsiMode && inputLevel_ == 1 && markedSectionLevel_ == 0) currentMode_ = dsMode; } void ParserState::pushElement(OpenElement *e) { ContentState::pushElement(e); pcdataRecovering_ = 0; // the start tag of this element may have been implied by data // inside a cdata or rcdata marked section if (markedSectionSpecialLevel_ == 0) { currentMode_ = contentMode(); if (e->requiresSpecialParse()) { specialParseMode_ = currentMode_; specialParseInputLevel_ = inputLevel_; } } } // PCDATA was encountered somewhere where it was not allowed. // Change the current mode to improve recovery. void ParserState::pcdataRecover() { switch (currentMode_) { case econMode: currentMode_ = mconMode; break; case econnetMode: currentMode_ = mconnetMode; break; default: break; } pcdataRecovering_ = 1; } OpenElement *ParserState::popSaveElement() { OpenElement *e = ContentState::popSaveElement(); // the end tag of this element may have been implied by data // inside a cdata or rcdata marked section if (markedSectionSpecialLevel_ == 0) { currentMode_ = contentMode(); specialParseInputLevel_ = 0; } pcdataRecovering_ = 0; return e; } void ParserState::popElement() { delete popSaveElement(); } Boolean ParserState::entityIsOpen(const EntityDecl *entityDecl) const { for (IListIter iter(inputStack_); !iter.done(); iter.next()) if (iter.cur()->currentLocation().origin()->entityDecl() == entityDecl) return 1; return 0; } void ParserState::startInstance() { if (!instanceSyntax_.isNull()) syntax_ = instanceSyntax_; currentMode_ = econMode; currentDtd_ = dtd_[0]; currentDtdConst_ = dtd_[0]; startContent(currentDtd()); inInstance_ = 1; if (sd().rank()) currentRank_.assign(currentDtd().nRankStem(), StringC()); currentAttributes_.clear(); currentAttributes_.resize(currentDtd().nCurrentAttribute()); idTable_.clear(); } Id *ParserState::lookupCreateId(const StringC &name) { Id *id = idTable_.lookup(name); if (!id) { id = new Id(name); idTable_.insert(id); } return id; } ConstPtr ParserState::lookupEntity(Boolean isParameter, const StringC &name, const Location &useLocation, Boolean referenced) { Dtd *dtd; if (resultAttributeSpecMode_) dtd = defComplexLpd().resultDtd().pointer(); else dtd = currentDtd_.pointer(); if (dtd) { Ptr entity(dtd->lookupEntity(isParameter, name)); // Did we find it in pass1Dtd? // Did we look at the defaultEntity? if (!inInstance_ && pass2() && dtd->isBase() && !resultAttributeSpecMode_ && (entity.isNull() || !entity->declInActiveLpd())) { ConstPtr entity1 = pass1Dtd_->lookupEntity(isParameter, name); if (!entity1.isNull() && entity1->declInActiveLpd() && !entity1->defaulted()) { if (referenced) noteReferencedEntity(entity1, 1, 0); return entity1; } else if (!entity.isNull()) { if (referenced) noteReferencedEntity(entity, 0, 0); entity->setUsed(); return entity; } } else if (!entity.isNull()) { entity->setUsed(); return entity; } if (!isParameter) { ConstPtr entity(dtd->defaultEntity()); Boolean note = 0; Boolean usedPass1 = 0; if (!inInstance_ && pass2() && dtd->isBase() && !resultAttributeSpecMode_ && (entity.isNull() || !entity->declInActiveLpd())) { if (referenced) note = 1; ConstPtr entity1 = pass1Dtd_->defaultEntity(); if (!entity1.isNull() && entity1->declInActiveLpd()) { usedPass1 = 1; entity = entity1; } } if (!entity.isNull()) { Boolean mustCopy = 1; if (inInstance_) { ConstPtr tem = instanceDefaultedEntityTable_.lookupConst(name); if (!tem.isNull()) { entity = tem; mustCopy = 0; } } if (mustCopy) { Ptr p(entity->copy()); p->setName(name); p->generateSystemId(*this); p->setDefaulted(); entity = p; if (inInstance_) { instanceDefaultedEntityTable_.insert(p); eventHandler().entityDefaulted(new (eventAllocator()) EntityDefaultedEvent(entity, useLocation)); } else dtd->insertEntity(p); } if (note) noteReferencedEntity(entity, usedPass1, 1); } else entity = undefinedEntityTable_.lookupConst(name); return entity; } } return (Entity *)0; } ConstPtr ParserState::createUndefinedEntity(const StringC &name, const Location &loc) { Text text; Ptr entity(new InternalCdataEntity(name, loc, text)); undefinedEntityTable_.insert(entity); return entity; } void ParserState::noteReferencedEntity(const ConstPtr &entity, Boolean foundInPass1Dtd, Boolean lookedAtDefault) { LpdEntityRef ref; ref.entity = entity; ref.lookedAtDefault = lookedAtDefault; ref.foundInPass1Dtd = foundInPass1Dtd; LpdEntityRef *old = lpdEntityRefs_.lookup(ref); if (!old) lpdEntityRefs_.insert(new LpdEntityRef(ref)); } // Compare entity definitions. // e1 is the original (will not be an external non-text entity). // FIXME should look at generated sysids as well. static Boolean sameEntityDef(const Entity *e1, const Entity *e2) { if (e1->dataType() != e2->dataType()) return 0; const InternalEntity *i1 = e1->asInternalEntity(); const InternalEntity *i2 = e2->asInternalEntity(); if (i1) { if (!i2) return 0; if (i1->string() != i2->string()) return 0; return 1; } else if (i2) return 0; const ExternalEntity *x1 = e1->asExternalEntity(); const ExternalEntity *x2 = e2->asExternalEntity(); const StringC *s1 = x1->externalId().systemIdString(); const StringC *s2 = x2->externalId().systemIdString(); if (s1) { if (!s2) return 0; if (*s1 != *s2) return 0; } else if (s2) return 0; s1 = x1->externalId().publicIdString(); s2 = x2->externalId().publicIdString(); if (s1) { if (!s2) return 0; if (*s1 != *s2) return 0; } else if (s2) return 0; return 1; } void ParserState::checkEntityStability() { LpdEntityRefSetIter iter(lpdEntityRefs_); LpdEntityRef *ref; while ((ref = iter.next()) != 0) { ConstPtr entity = dtd_[0]->lookupEntity(ref->entity->declType() == Entity::parameterEntity, ref->entity->name()); if (entity.isNull() && ref->lookedAtDefault) entity = dtd_[0]->defaultEntity(); if (entity.isNull() ? ref->foundInPass1Dtd : !sameEntityDef(ref->entity.pointer(), entity.pointer())) message(((ref->entity->declType() == Entity::parameterEntity) ? ParserMessages::unstableLpdParameterEntity : ParserMessages::unstableLpdGeneralEntity), StringMessageArg(ref->entity->name())); } { // Ensure that the memory is released. LpdEntityRefSet tem; lpdEntityRefs_.swap(tem); } } Boolean ParserState::appendCurrentRank(StringC &str, const RankStem *stem) const { const StringC &suffix = currentRank_[stem->index()]; if (suffix.size() > 0) { str += suffix; return 1; } return 0; } void ParserState::setCurrentRank(const RankStem *stem, const StringC &suffix) { currentRank_[stem->index()] = suffix; } void ParserState::getCurrentToken(const SubstTable *subst, StringC &str) const { InputSource *in = currentInput(); const Char *p = in->currentTokenStart(); size_t count = in->currentTokenLength(); str.resize(count); StringC::iterator s = str.begin(); for (; count > 0; --count) *s++ = (*subst)[*p++]; } void ParserState::queueMessage(MessageEvent *event) { if (cancelled()) { delete event; return; } if (keepingMessages_) keptMessages_.append(event); else handler_->message(event); } void ParserState::releaseKeptMessages() { keepingMessages_ = 0; while (!keptMessages_.empty()) { if (cancelled()) { allDone(); return; } handler_->message(keptMessages_.get()); } } void ParserState::discardKeptMessages() { keepingMessages_ = 0; keptMessages_.clear(); } void ParserState::initMessage(Message &msg) { if (inInstance()) { StringC rniPcdata = syntax().delimGeneral(Syntax::dRNI); rniPcdata += syntax().reservedName(Syntax::rPCDATA); getOpenElementInfo(msg.openElementInfo, rniPcdata); } msg.loc = currentLocation(); } void ParserState::dispatchMessage(Message &msg) { queueMessage(new MessageEvent(msg)); } void ParserState::dispatchMessage(const Message &msg) { queueMessage(new MessageEvent(msg)); } AttributeList * ParserState::allocAttributeList(const ConstPtr &def, unsigned i) { if (i < attributeLists_.size()) attributeLists_[i]->init(def); else { attributeLists_.resize(i + 1); attributeLists_[i] = new AttributeList(def); } return attributeLists_[i].pointer(); } void ParserState::activateLinkType(const StringC &name) { if (!hadPass2Start_ && !pass2_) activeLinkTypes_.push_back(name); else message(ParserMessages::linkActivateTooLate); } Boolean ParserState::shouldActivateLink(const StringC &name) const { if (!activeLinkTypesSubsted_) { // FIXME use mutable ParserState *state = (ParserState *)this; for (size_t i = 0; i < activeLinkTypes_.size(); i++) for (size_t j = 0; j < activeLinkTypes_[i].size(); j++) syntax().generalSubstTable()->subst(state->activeLinkTypes_[i][j]); state->activeLinkTypesSubsted_ = 1; } for (size_t i = 0; i < activeLinkTypes_.size(); i++) if (name == activeLinkTypes_[i]) return 1; return 0; } Ptr ParserState::lookupDtd(const StringC &name) { for (size_t i = 0; i < dtd_.size(); i++) if (dtd_[i]->name() == name) return dtd_[i]; return Ptr(); } ConstPtr ParserState::lookupLpd(const StringC &name) const { for (size_t i = 0; i < allLpd_.size(); i++) if (allLpd_[i]->name() == name) return allLpd_[i]; return ConstPtr(); } ConstPtr ParserState::getAttributeNotation(const StringC &name, const Location &) { ConstPtr notation; if (haveCurrentDtd()) notation = currentDtd().lookupNotation(name); else if (resultAttributeSpecMode_) { const Dtd *resultDtd = defComplexLpd().resultDtd().pointer(); if (!resultDtd) return 0; notation = resultDtd->lookupNotation(name); } return notation; } ConstPtr ParserState::getAttributeEntity(const StringC &str, const Location &loc) { ConstPtr entity = lookupEntity(0, str, loc, 0); if (!entity.isNull() && entity->defaulted() && options().warnDefaultEntityReference) { setNextLocation(loc); message(ParserMessages::defaultEntityInAttribute, StringMessageArg(str)); } return entity; } Boolean ParserState::defineId(const StringC &str, const Location &loc, Location &prevLoc) { if (!inInstance() || !validate()) return 1; Id *id = lookupCreateId(str); if (id->defined()) { prevLoc = id->defLocation(); return 0; } id->define(loc); return 1; } void ParserState::noteIdref(const StringC &str, const Location &loc) { if (!inInstance() || !options().errorIdref || !validate()) return; Id *id = lookupCreateId(str); if (!id->defined()) id->addPendingRef(loc); } void ParserState::noteCurrentAttribute(size_t i, AttributeValue *value) { if (inInstance()) currentAttributes_[i] = value; } ConstPtr ParserState::getCurrentAttribute(size_t i) const { if (!inInstance()) return ConstPtr(); return currentAttributes_[i]; } const Syntax &ParserState::attributeSyntax() const { return syntax(); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/ParserState.h100444 764 764 42750 6606574410 13417 0ustar jjcjjc// 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 #include #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_NAMESPACE namespace SP_NAMESPACE { #endif class ParserState : public ContentState, public AttributeContext { public: enum Phase { noPhase, initPhase, prologPhase, declSubsetPhase, instanceStartPhase, contentPhase }; ParserState(const Ptr &, 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 &defDtdPointer() const; Boolean haveCurrentDtd() const; const Dtd ¤tDtd() const; Dtd ¤tDtdNonConst() const; const ConstPtr ¤tDtdPointer() const; void startLpd(Ptr &lpd); void endLpd(); Lpd &defLpd(); Ptr &defLpdPointer(); Ptr defComplexLpdPointer(); size_t nActiveLink() const; const Lpd &activeLpd(size_t i) const; ComplexLpd &defComplexLpd(); Ptr lookupDtd(const StringC &name); Ptr 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, Boolean, Boolean); ConstPtr lookupLpd(const StringC &name) const; Boolean shouldActivateLink(const StringC &) const; Char currentChar() const; const Location ¤tLocation() const; InputSource *currentInput() const; EntityManager &entityManager() const; Ptr entityManagerPtr() const; const EntityCatalog &entityCatalog() const; ConstPtr entityCatalogPtr() const; void setEntityCatalog(const ConstPtr &); void setSyntax(ConstPtr); void setSyntaxes(ConstPtr, ConstPtr); void setSd(ConstPtr); const Syntax &syntax() const; const Syntax &instanceSyntax() const; const ConstPtr &syntaxPointer() const; const ConstPtr &prologSyntaxPointer() const; const ConstPtr &instanceSyntaxPointer() const; const Sd &sd() const; const ConstPtr &sdPointer() const; void setPhase(Phase phase); Phase phase() const; Phase finalPhase() const; Mode currentMode() const; void setRecognizer(Mode, ConstPtr); void setNormalMap(const XcharMap &); const XcharMap &normalMap() const; Xchar getChar(); void skipChar(); Token getToken(Mode mode); StringC currentToken() const; void getCurrentToken(StringC &) const; void getCurrentToken(const SubstTable *, StringC &) const; unsigned inputLevel() const; unsigned specialParseInputLevel() const; unsigned markedSectionLevel() const; unsigned markedSectionSpecialLevel() const; unsigned currentInputElementIndex() const; const Location ¤tMarkedSectionStartLocation() const; Boolean entityIsOpen(const EntityDecl *) const; void popInputStack(); void pushInput(InputSource *); Boolean referenceDsEntity(const Location &); void setDsEntity(const ConstPtr &); Boolean eventQueueEmpty() const; Event *eventQueueGet(); EventHandler &eventHandler(); void pushElement(OpenElement *); OpenElement *popSaveElement(); void popElement(); void pcdataRecover(); Boolean pcdataRecovering() const; ConstPtr lookupEntity(Boolean isParameter, const StringC &name, const Location &, Boolean referenced); ConstPtr 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 &, unsigned i); static void freeEvent(void *); Boolean wantMarkup() const; const EventsWanted &eventsWanted() const; StringC &nameBuffer(); typedef NamedTableIter 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 getCurrentAttribute(size_t) const; ConstPtr getAttributeEntity(const StringC &, const Location &); ConstPtr 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 prologSyntax_; ConstPtr instanceSyntax_; ConstPtr sd_; unsigned subdocLevel_; Ptr entityManager_; ConstPtr entityCatalog_; Phase phase_; Phase finalPhase_; Boolean inInstance_; Ptr defDtd_; Ptr defLpd_; Vector > allLpd_; Vector > lpd_; // active LPDs Vector activeLinkTypes_; Boolean activeLinkTypesSubsted_; Boolean hadLpd_; Boolean resultAttributeSpecMode_; Boolean pass2_; typedef OwnerTable LpdEntityRefSet; typedef OwnerTableIter LpdEntityRefSetIter; LpdEntityRefSet lpdEntityRefs_; // external entity to be referenced at the end of the declaration subset ConstPtr dsEntity_; Allocator eventAllocator_; Allocator internalAllocator_; NCVector > attributeLists_; StringC nameBuffer_; Boolean keepingMessages_; IQueue 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 markedSectionStartLocation_; ConstPtr recognizers_[nModes]; XcharMap normalMap_; unsigned inputLevel_; IList inputStack_; Vector inputLevelElementIndex_; Ptr currentDtd_; ConstPtr currentDtdConst_; Vector > dtd_; Ptr pass1Dtd_; ConstPtr syntax_; Vector currentRank_; NamedTable idTable_; NamedResourceTable instanceDefaultedEntityTable_; NamedResourceTable undefinedEntityTable_; Vector > 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_; }; inline Messenger &ParserState::messenger() { return *this; } inline Boolean ParserState::wantMarkup() const { return (inInstance_ ? options_.eventsWanted.wantInstanceMarkup() : options_.eventsWanted.wantPrologMarkup()); } inline const EventsWanted &ParserState::eventsWanted() const { return options_.eventsWanted; } inline InputSource *ParserState::currentInput() const { return inputStack_.head(); } inline const Location &ParserState::currentLocation() const { InputSource *in = currentInput(); return in ? in->currentLocation() : nullLocation_; } inline Boolean ParserState::pcdataRecovering() const { return pcdataRecovering_; } inline unsigned ParserState::inputLevel() const { return inputLevel_; } inline unsigned ParserState::specialParseInputLevel() const { return specialParseInputLevel_; } inline unsigned ParserState::markedSectionLevel() const { return markedSectionLevel_; } inline unsigned ParserState::markedSectionSpecialLevel() const { return markedSectionSpecialLevel_; } inline const Location &ParserState::currentMarkedSectionStartLocation() const { return markedSectionStartLocation_.back(); } inline unsigned ParserState::currentInputElementIndex() const { return inputLevelElementIndex_.back(); } inline Char ParserState::currentChar() const { return currentInput()->currentTokenStart()[0]; } inline StringC ParserState::currentToken() const { return StringC(currentInput()->currentTokenStart(), currentInput()->currentTokenLength()); } inline void ParserState::getCurrentToken(StringC &str) const { InputSource *in = currentInput(); str.assign(in->currentTokenStart(), in->currentTokenLength()); } inline void ParserState::setRecognizer(Mode mode, ConstPtr p) { recognizers_[mode] = p; } inline void ParserState::setNormalMap(const XcharMap &map) { normalMap_ = map; } inline const XcharMap &ParserState::normalMap() const { return normalMap_; } inline Boolean ParserState::haveDefLpd() const { return !defLpd_.isNull(); } inline Boolean ParserState::haveCurrentDtd() const { return !currentDtd_.isNull(); } inline Dtd &ParserState::defDtd() { return *defDtd_; } inline const Dtd &ParserState::currentDtd() const { return *currentDtd_; } inline Dtd &ParserState::currentDtdNonConst() const { return *currentDtd_; } inline const Ptr &ParserState::defDtdPointer() const { return defDtd_; } inline const ConstPtr &ParserState::currentDtdPointer() const { return currentDtdConst_; } inline Boolean ParserState::inInstance() const { return inInstance_; } inline const Syntax &ParserState::syntax() const { return *syntax_; } inline const Syntax &ParserState::instanceSyntax() const { return *instanceSyntax_; } inline const ConstPtr &ParserState::syntaxPointer() const { return syntax_; } inline const ConstPtr &ParserState::instanceSyntaxPointer() const { return instanceSyntax_; } inline const ConstPtr &ParserState::prologSyntaxPointer() const { return prologSyntax_; } inline const Sd &ParserState::sd() const { return *sd_; } inline const ConstPtr &ParserState::sdPointer() const { return sd_; } inline void ParserState::setPhase(Phase phase) { phase_ = phase; } inline Mode ParserState::currentMode() const { return currentMode_; } inline Xchar ParserState::getChar() { return inputStack_.head()->get(messenger()); } inline void ParserState::skipChar() { (void)getChar(); } inline Token ParserState::getToken(Mode mode) { return recognizers_[mode]->recognize(inputStack_.head(), messenger()); } inline Boolean ParserState::hadDtd() const { return dtd_.size() > 0; } inline Boolean ParserState::eventQueueEmpty() const { return eventQueue_.empty(); } inline Event *ParserState::eventQueueGet() { return eventQueue_.get(); } inline ParserState::Phase ParserState::phase() const { return phase_; } inline ParserState::Phase ParserState::finalPhase() const { return finalPhase_; } inline EntityManager &ParserState::entityManager() const { return *entityManager_; } inline Ptr ParserState::entityManagerPtr() const { return entityManager_; } inline const EntityCatalog &ParserState::entityCatalog() const { return *entityCatalog_; } inline ConstPtr ParserState::entityCatalogPtr() const { return entityCatalog_; } inline void ParserState::setEntityCatalog(const ConstPtr &catalog) { entityCatalog_ = catalog; } inline void ParserState::setDsEntity(const ConstPtr &entity) { dsEntity_ = entity; } inline Allocator &ParserState::eventAllocator() { return eventAllocator_; } inline Allocator &ParserState::internalAllocator() { return internalAllocator_; } inline StringC &ParserState::nameBuffer() { return nameBuffer_; } inline void ParserState::setHandler(EventHandler *handler, const volatile sig_atomic_t *cancelPtr) { handler_ = handler; cancelPtr_ = cancelPtr ? cancelPtr : &dummyCancel_; } inline void ParserState::unsetHandler() { handler_ = &eventQueue_; cancelPtr_ = &dummyCancel_; } inline void ParserState::queueRe(const Location &location) { outputState_.handleRe(*handler_, eventAllocator_, options_.eventsWanted, syntax().standardFunction(Syntax::fRE), location); } inline void ParserState::noteMarkup() { if (inInstance_) outputState_.noteMarkup(*handler_, eventAllocator_, options_.eventsWanted); } inline void ParserState::noteRs() { outputState_.noteRs(*handler_, eventAllocator_, options_.eventsWanted); } inline void ParserState::noteStartElement(Boolean included) { outputState_.noteStartElement(included, *handler_, eventAllocator_, options_.eventsWanted); } inline void ParserState::noteEndElement(Boolean included) { outputState_.noteEndElement(included, *handler_, eventAllocator_, options_.eventsWanted); } inline void ParserState::noteData() { outputState_.noteData(*handler_, eventAllocator_, options_.eventsWanted); } inline unsigned ParserState::subdocLevel() const { return subdocLevel_; } inline EventHandler &ParserState::eventHandler() { return *handler_; } inline ParserState::IdTableIter ParserState::idTableIter() { // Avoid use of typedef to work around MSVC 2.0 bug. return NamedTableIter(idTable_); } inline const ParserOptions &ParserState::options() const { return options_; } inline Boolean ParserState::implydefElement() { return implydefElement_; } inline Boolean ParserState::implydefAttlist() { return implydefAttlist_; } inline void ParserState::enableImplydef() { implydefElement_ = 1; implydefAttlist_ = 1; } inline void ParserState::keepMessages() { keepingMessages_ = 1; } inline Boolean ParserState::haveApplicableDtd() const { return !currentDtd_.isNull(); } inline Boolean ParserState::hadLpd() const { return hadLpd_; } inline Boolean ParserState::pass2() const { return pass2_; } inline size_t ParserState::nActiveLink() const { return lpd_.size(); } inline const Lpd &ParserState::activeLpd(size_t i) const { return *lpd_[i]; } inline Lpd &ParserState::defLpd() { return *defLpd_; } inline Ptr &ParserState::defLpdPointer() { return defLpd_; } inline Ptr ParserState::defComplexLpdPointer() { return (ComplexLpd *)defLpd_.pointer(); } inline ComplexLpd &ParserState::defComplexLpd() { return (ComplexLpd &)defLpd(); } inline Ptr ParserState::baseDtd() { if (dtd_.size() > 0) return dtd_[0]; else return Ptr(); } inline void ParserState::setResultAttributeSpecMode() { resultAttributeSpecMode_ = 1; } inline void ParserState::clearResultAttributeSpecMode() { resultAttributeSpecMode_ = 0; } inline Markup *ParserState::currentMarkup() { return currentMarkup_; } inline const Location &ParserState::markupLocation() const { return markupLocation_; } inline Markup *ParserState::startMarkup(Boolean storing, const Location &loc) { markupLocation_ = loc; if (storing) { markup_.clear(); return currentMarkup_ = &markup_; } else return currentMarkup_ = 0; } inline Boolean ParserState::cancelled() const { return *cancelPtr_ != 0; } inline void ParserState::setHadAfdrDecl() { hadAfdrDecl_ = 1; } inline Boolean ParserState::hadAfdrDecl() const { return hadAfdrDecl_; } #ifdef SP_NAMESPACE } #endif #endif /* not ParserState_INCLUDED */ jade-1.2.1/lib/Partition.cxx100444 764 764 11324 6606574412 13501 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Partition.h" #include "ISet.h" #include "ISetIter.h" #include "SubstTable.h" #include "Link.h" #include "IList.h" #include "IListIter.h" #include "Owner.h" #include "macros.h" #include "EquivClass.h" #include "constant.h" #include "StringC.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif static void refineByChar(IList *, Char); static void refineBySet(IList *, const ISet &, unsigned); #if _MSC_VER == 900 // Work around MSVC 2.0 bug. typedef SubstTable _msvc_dummy; #endif Partition::Partition(const ISet &chars, const ISet **sets, int nSets, const SubstTable &subst) : map_(0) // eE gets code 0 { IList classes; classes.insert(new EquivClass); classes.head()->set.addRange(0, charMax); { ISetIter iter(chars); Char min, max; while (iter.next(min, max)) { do { refineByChar(&classes, subst[min]); } while (min++ != max); } } int i; for (i = 0; i < nSets; i++) refineBySet(&classes, *sets[i], (1 << i)); maxCode_ = 0; setCodes_.resize(nSets); for (IListIter listIter(classes); !listIter.done(); listIter.next()) { ++maxCode_; ASSERT(maxCode_ != 0); EquivClass *p = listIter.cur(); for (i = 0; i < nSets; i++) if ((1 << i) & p->inSets) setCodes_[i] += maxCode_; ISetIter setIter(p->set); Char min, max; while (setIter.next(min, max)) map_.setRange(min, max, maxCode_); } { ISetIter iter(chars); Char min, max; while (iter.next(min, max)) { do { StringC str(subst.inverse(min)); EquivCode code = map_[min]; for (size_t i = 0; i < str.size(); i++) map_.setChar(str[i], code); } while (min++ != max); } } } static void refineByChar(IList *classes, Char c) { // Avoid modifying *classes, while there's an active iter on it. EquivClass *found = 0; { for (IListIter iter(*classes); !iter.done(); iter.next()) { if (iter.cur()->set.contains(c)) { found = iter.cur(); break; } } } if (found && !found->set.isSingleton()) { found->set.remove(c); classes->insert(new EquivClass(found->inSets)); classes->head()->set.add(c); } } static void addUpTo(ISet *to, Char limit, const ISet &from) { ISetIter iter(from); Char min, max; while (iter.next(min, max) && min < limit) to->addRange(min, max >= limit ? limit - 1 : max); } enum RefineResult { allIn, allOut, someInSomeOut }; static RefineResult refine(const ISet &set, const ISet &refiner, ISet *inp, ISet *outp) { Char setMin, setMax, refMin, refMax; ISetIter refIter(refiner); ISetIter setIter(set); Boolean oneIn = 0; Boolean oneOut = 0; if (!refIter.next(refMin, refMax)) return allOut; while (setIter.next(setMin, setMax)) { while (setMin <= setMax) { while (refMax < setMin && refIter.next(refMin, refMax)) ; if (refMax < setMin || setMin < refMin) { if (!oneOut) { if (oneIn) addUpTo(inp, setMin, set); oneOut = 1; } if (refMax < setMin || refMin > setMax) { if (oneIn) outp->addRange(setMin, setMax); break; } else { if (oneIn) outp->addRange(setMin, refMin - 1); setMin = refMin; } } else { if (!oneIn) { if (oneOut) addUpTo(outp, setMin, set); oneIn = 1; } if (setMax <= refMax) { if (oneOut) inp->addRange(setMin, setMax); break; } else { // refMax < setMax if (oneOut) inp->addRange(setMin, refMax); // avoid wrapping round if (refMax == charMax) break; setMin = refMax + 1; } } } } if (oneIn) return oneOut ? someInSomeOut : allIn; else return allOut; } static void refineBySet(IList *classes, const ISet &set, unsigned setFlag) { Owner in(new EquivClass), out(new EquivClass); IList newClasses; for (;;) { EquivClass *p = classes->head(); if (!p) break; if (!out) out = new EquivClass; switch (refine(p->set, set, &in->set, &out->set)) { case someInSomeOut: in->inSets = p->inSets | setFlag; newClasses.insert(in.extract()); out->inSets = p->inSets; newClasses.insert(out.extract()); in = classes->get(); in->set.clear(); in->inSets = 0; break; case allIn: p->inSets |= setFlag; newClasses.insert(classes->get()); break; case allOut: newClasses.insert(classes->get()); break; } } classes->swap(newClasses); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Partition.h100444 764 764 2457 6606574412 13115 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Partition_INCLUDED #define Partition_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "SubstTable.h" #include "StringOf.h" #include "ISet.h" #include "XcharMap.h" #include "Vector.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Partition { public: Partition(const ISet &chars, const ISet **sets, int nSets, const SubstTable &subst); EquivCode maxCode() const; EquivCode charCode(Char c) const; EquivCode eECode() const; const String &setCodes(int i) const; const XcharMap &map() const; private: Partition(const Partition &); // undefined void operator=(const Partition &); // undefined EquivCode maxCode_; Vector > setCodes_; XcharMap map_; }; inline EquivCode Partition::maxCode() const { return maxCode_; } inline EquivCode Partition::charCode(Char c) const { return map_[c]; } inline EquivCode Partition::eECode() const { return 0; } inline const String &Partition::setCodes(int i) const { return setCodes_[i]; } inline const XcharMap &Partition::map() const { return map_; } #ifdef SP_NAMESPACE } #endif #endif /* not Partition_INCLUDED */ jade-1.2.1/lib/PosixStorage.cxx100444 764 764 37563 6606574412 14174 0ustar jjcjjc// Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "PosixStorage.h" #include "RewindStorageObject.h" #include "StorageManager.h" #include "DescriptorManager.h" #include "MessageArg.h" #include "ErrnoMessageArg.h" #include "SearchResultMessageArg.h" #include "Message.h" #include "StringC.h" #include "StringOf.h" #include "CharsetInfo.h" #include "CodingSystem.h" #include "macros.h" #include "PosixStorageMessages.h" #include #include #include #ifdef SP_INCLUDE_IO_H #include // for open, fstat, lseek, read prototypes #endif #ifdef SP_INCLUDE_UNISTD_H #include #endif #ifdef SP_INCLUDE_OSFCN_H #include #endif #include #include #include #include #ifndef S_ISREG #ifndef S_IFREG #define S_IFREG _S_IFREG #endif #ifndef S_IFMT #define S_IFMT _S_IFMT #endif #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) #endif /* not S_ISREG */ #ifndef O_BINARY #define O_BINARY 0 #endif #ifdef SP_WIDE_SYSTEM #include #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_WIDE_SYSTEM typedef wchar_t FChar; #else typedef char FChar; #endif class PosixBaseStorageObject : public RewindStorageObject { public: PosixBaseStorageObject(int fd, Boolean mayRewind); size_t getBlockSize() const; protected: enum { defaultBlockSize = 8192 }; int fd_; PackedBoolean eof_; Boolean seekToStart(Messenger &); virtual Boolean seek(off_t, Messenger &) = 0; static int xclose(int fd); private: Boolean canSeek(int fd); off_t startOffset_; }; PosixBaseStorageObject::PosixBaseStorageObject(int fd, Boolean mayRewind) : fd_(fd), eof_(0), RewindStorageObject(mayRewind, mayRewind && canSeek(fd)) { } Boolean PosixBaseStorageObject::canSeek(int fd) { struct stat sb; if (fstat(fd, &sb) < 0 || !S_ISREG(sb.st_mode) || (startOffset_ = lseek(fd, off_t(0), SEEK_CUR)) < 0) return 0; else return 1; } Boolean PosixBaseStorageObject::seekToStart(Messenger &mgr) { eof_ = 0; return seek(startOffset_, mgr); } int PosixBaseStorageObject::xclose(int fd) { int ret; do { ret = ::close(fd); } while (ret < 0 && errno == EINTR); return ret; } class PosixStorageObject : public PosixBaseStorageObject, private DescriptorUser { public: PosixStorageObject(int fd, const StringC &, const String &, Boolean mayRewind, DescriptorManager *); ~PosixStorageObject(); Boolean read(char *buf, size_t bufSize, Messenger &mgr, size_t &nread); Boolean suspend(); Boolean seek(off_t, Messenger &); void willNotRewind(); private: void resume(Messenger &); PackedBoolean suspended_; off_t suspendPos_; const MessageType2 *suspendFailedMessage_; int suspendErrno_; StringC filename_; String cfilename_; void systemError(Messenger &, const MessageType2 &, int); }; inline int openFile(const FChar *s) { #ifdef SP_WIDE_SYSTEM int fd = _wopen(s, O_RDONLY|O_BINARY); if (fd < 0 && errno != ENOENT) { String buf; int len = WideCharToMultiByte(CP_ACP, 0, s, -1, 0, 0, 0, 0); buf.resize(len + 1); WideCharToMultiByte(CP_ACP, 0, s, -1, buf.begin(), len, 0, 0); buf[len] = '\0'; return ::open(buf.data(), O_RDONLY|O_BINARY); } return fd; #else return ::open(s, O_RDONLY|O_BINARY); #endif } PosixStorageManager::PosixStorageManager(const char *type, const CharsetInfo *filenameCharset, #ifndef SP_WIDE_SYSTEM const OutputCodingSystem *filenameCodingSystem, #endif int maxFDs) : IdStorageManager(filenameCharset), type_(type), #ifndef SP_WIDE_SYSTEM filenameCodingSystem_(filenameCodingSystem), #endif descriptorManager_(maxFDs) { Char newline = idCharset()->execToDesc('\n'); reString_.assign(&newline, 1); } const char *PosixStorageManager::type() const { return type_; } void PosixStorageManager::addSearchDir(const StringC &str) { searchDirs_.push_back(str); } #ifdef SP_POSIX_FILENAMES #define FILENAME_TYPE_DEFINED // FIXME should use idCharset. Boolean PosixStorageManager::isAbsolute(const StringC &file) const { return file.size() > 0 && file[0] == '/'; } StringC PosixStorageManager::extractDir(const StringC &str) const { for (size_t i = str.size(); i > 0; i--) if (str[i - 1] == '/') return StringC(str.data(), i); // include slash for root case return StringC(); } StringC PosixStorageManager::combineDir(const StringC &dir, const StringC &base) const { StringC result(dir); if (dir.size() > 0 && dir[dir.size() - 1] != '/') result += '/'; result += base; return result; } Boolean PosixStorageManager::transformNeutral(StringC &str, Boolean fold, Messenger &) const { if (fold) for (size_t i = 0; i < str.size(); i++) { Char c = str[i]; if (c <= (unsigned char)-1) str[i] = tolower(str[i]); } return 1; } #endif /* SP_POSIX_FILENAMES */ #ifdef SP_MSDOS_FILENAMES #define FILENAME_TYPE_DEFINED Boolean PosixStorageManager::isAbsolute(const StringC &s) const { if (s.size() == 0) return 0; return s[0] == '/' || s[0] == '\\' || (s.size() > 1 && s[1] == ':'); } StringC PosixStorageManager::extractDir(const StringC &str) const { for (size_t i = str.size(); i > 0; i--) if (str[i - 1] == '/' || str[i - 1] == '\\' || (i == 2 && str[i - 1] == ':')) return StringC(str.data(), i); // include separator return StringC(); } StringC PosixStorageManager::combineDir(const StringC &dir, const StringC &base) const { StringC result(dir); if (dir.size() > 0) { Char lastChar = dir[dir.size() - 1]; if (lastChar != '/' && lastChar != '\\' && !(dir.size() == 2 && lastChar == ':')) result += '\\'; } result += base; return result; } Boolean PosixStorageManager::transformNeutral(StringC &str, Boolean, Messenger &) const { for (size_t i = 0; i < str.size(); i++) if (str[i] == '/') str[i] = '\\'; return 1; } #endif /* SP_MSDOS_FILENAMES */ #ifdef SP_MAC_FILENAMES // Colons separate directory names // relative path-names start with a colon, or have no colons // absolute path-names don't start with a colon and have at least one colon #define FILENAME_TYPE_DEFINED Boolean PosixStorageManager::isAbsolute(const StringC &s) const { if (s.size() == 0) return 0; if (s[0] == ':') return 0; // starts with a colon => relative size_t ss = s.size(); for (size_t i = 0; i < ss; i++) if (s[i] == ':') return 1; // absolute return 0; // no colons => relative } StringC PosixStorageManager::extractDir(const StringC &str) const { for (size_t i = str.size(); i > 0; i--) if (str[i - 1] == ':') return StringC(str.data(), i); // include separator return StringC(); } StringC PosixStorageManager::combineDir(const StringC &dir, const StringC &base) const { StringC result(dir); if (dir.size() > 0) { Char lastChar = dir[dir.size() - 1]; if (lastChar != ':') result += ':'; } if (base[0] == ':') { StringC newbase(base.data() + 1,base.size() - 1); result += newbase; } else result += base; return result; } Boolean PosixStorageManager::transformNeutral(StringC &str, Boolean, Messenger &) const { if (str[0] == '/') { // absolute StringC nstr(str.data() + 1,str.size()-1); str = nstr; } else { // relative Char cc = ':'; StringC colon(&cc,1); str.insert(0,colon); } for (size_t i = 0; i < str.size(); i++) if (str[i] == '/') str[i] = ':'; return 1; } #endif /* SP_MAC_FILENAMES */ #ifndef FILENAME_TYPE_DEFINED Boolean PosixStorageManager::isAbsolute(const StringC &) const { return 1; } StringC PosixStorageManager::extractDir(const StringC &) const { return StringC(); } StringC PosixStorageManager::combineDir(const StringC &, const StringC &base) const { return base; } Boolean PosixStorageManager::transformNeutral(StringC &, Boolean, Messenger &) const { return 1; } #endif /* not FILENAME_TYPE_DEFINED */ Boolean PosixStorageManager::resolveRelative(const StringC &baseId, StringC &specId, Boolean search) const { if (isAbsolute(specId)) return 1; if (!search || searchDirs_.size() == 0) { specId = combineDir(extractDir(baseId), specId); return 1; } return 0; } StorageObject * PosixStorageManager::makeStorageObject(const StringC &spec, const StringC &base, Boolean search, Boolean mayRewind, Messenger &mgr, StringC &found) { if (spec.size() == 0) { mgr.message(PosixStorageMessages::invalidFilename, StringMessageArg(spec)); return 0; } descriptorManager_.acquireD(); Boolean absolute = isAbsolute(spec); SearchResultMessageArg sr; for (size_t i = 0; i < searchDirs_.size() + 1; i++) { StringC filename; if (absolute) filename = spec; else if (i == 0) filename = combineDir(extractDir(base), spec); else filename = combineDir(searchDirs_[i - 1], spec); #ifdef SP_WIDE_SYSTEM String cfilename(filename); cfilename += FChar(0); #else String cfilename = filenameCodingSystem_->convertOut(filename); #endif int fd; do { fd = openFile(cfilename.data()); } while (fd < 0 && errno == EINTR); if (fd >= 0) { found = filename; return new PosixStorageObject(fd, filename, cfilename, mayRewind, &descriptorManager_); } int savedErrno = errno; if (absolute || !search || searchDirs_.size() == 0) { ParentLocationMessenger(mgr).message(PosixStorageMessages::openSystemCall, StringMessageArg(filename), ErrnoMessageArg(savedErrno)); descriptorManager_.releaseD(); return 0; } sr.add(filename, savedErrno); } descriptorManager_.releaseD(); ParentLocationMessenger(mgr).message(PosixStorageMessages::cannotFind, StringMessageArg(spec), sr); return 0; } PosixStorageObject::PosixStorageObject(int fd, const StringC &filename, const String &cfilename, Boolean mayRewind, DescriptorManager *manager) : DescriptorUser(manager), PosixBaseStorageObject(fd, mayRewind), suspended_(0), filename_(filename), cfilename_(cfilename) { } PosixStorageObject::~PosixStorageObject() { if (fd_ >= 0) { (void)xclose(fd_); releaseD(); } } Boolean PosixStorageObject::seek(off_t off, Messenger &mgr) { if (lseek(fd_, off, SEEK_SET) < 0) { fd_ = -1; systemError(mgr, PosixStorageMessages::lseekSystemCall, errno); return 0; } else return 1; } Boolean PosixStorageObject::read(char *buf, size_t bufSize, Messenger &mgr, size_t &nread) { if (readSaved(buf, bufSize, nread)) return 1; if (suspended_) resume(mgr); if (fd_ < 0 || eof_) return 0; long n; do { n = ::read(fd_, buf, bufSize); } while (n < 0 && errno == EINTR); if (n > 0) { nread = size_t(n); saveBytes(buf, nread); return 1; } if (n < 0) { int saveErrno = errno; releaseD(); (void)xclose(fd_); systemError(mgr, PosixStorageMessages::readSystemCall, saveErrno); fd_ = -1; } else { eof_ = 1; // n == 0, so end of file if (!mayRewind_) { releaseD(); if (xclose(fd_) < 0) systemError(mgr, PosixStorageMessages::closeSystemCall, errno); fd_ = -1; } } return 0; } void PosixStorageObject::willNotRewind() { RewindStorageObject::willNotRewind(); if (eof_ && fd_ >= 0) { releaseD(); (void)xclose(fd_); fd_ = -1; } } Boolean PosixStorageObject::suspend() { if (fd_ < 0 || suspended_) return 0; struct stat sb; if (fstat(fd_, &sb) < 0 || !S_ISREG(sb.st_mode)) return 0; suspendFailedMessage_ = 0; suspendPos_ = lseek(fd_, 0, SEEK_CUR); if (suspendPos_ == (off_t)-1) { suspendFailedMessage_ = &PosixStorageMessages::lseekSystemCall; suspendErrno_ = errno; } if (xclose(fd_) < 0 && !suspendFailedMessage_) { suspendFailedMessage_ = &PosixStorageMessages::closeSystemCall; suspendErrno_ = errno; } fd_ = -1; suspended_ = 1; releaseD(); return 1; } void PosixStorageObject::resume(Messenger &mgr) { ASSERT(suspended_); if (suspendFailedMessage_) { systemError(mgr, *suspendFailedMessage_, suspendErrno_); suspended_ = 0; return; } acquireD(); // suspended_ must be 1 until after acquireD() is called, // so that we don't try to suspend this one before it is resumed. suspended_ = 0; do { fd_ = openFile(cfilename_.data()); } while (fd_ < 0 && errno == EINTR); if (fd_ < 0) { releaseD(); systemError(mgr, PosixStorageMessages::openSystemCall, errno); return; } if (lseek(fd_, suspendPos_, SEEK_SET) < 0) { systemError(mgr, PosixStorageMessages::lseekSystemCall, errno); (void)xclose(fd_); fd_ = -1; releaseD(); } } #ifdef SP_STAT_BLKSIZE size_t PosixBaseStorageObject::getBlockSize() const { struct stat sb; long sz; if (fstat(fd_, &sb) < 0) return defaultBlockSize; if (!S_ISREG(sb.st_mode)) return defaultBlockSize; if ((unsigned long)sb.st_blksize > size_t(-1)) sz = size_t(-1); else sz = sb.st_blksize; return sz; } #else /* not SP_STAT_BLKSIZE */ size_t PosixBaseStorageObject::getBlockSize() const { return defaultBlockSize; } #endif /* not SP_STAT_BLKSIZE */ void PosixStorageObject::systemError(Messenger &mgr, const MessageType2 &msg, int err) { ParentLocationMessenger(mgr).message(msg, StringMessageArg(filename_), ErrnoMessageArg(err)); } class PosixFdStorageObject : public PosixBaseStorageObject { public: PosixFdStorageObject(int, Boolean mayRewind); Boolean read(char *buf, size_t bufSize, Messenger &mgr, size_t &nread); Boolean seek(off_t, Messenger &); enum { noError, readError, invalidNumberError, lseekError }; private: int origFd_; }; PosixFdStorageManager::PosixFdStorageManager(const char *type, const CharsetInfo *idCharset) : IdStorageManager(idCharset), type_(type) { } Boolean PosixFdStorageManager::inheritable() const { return 0; } StorageObject *PosixFdStorageManager::makeStorageObject(const StringC &id, const StringC &, Boolean, Boolean mayRewind, Messenger &mgr, StringC &foundId) { int n = 0; size_t i; for (i = 0; i < id.size(); i++) { UnivChar ch; if (!idCharset()->descToUniv(id[i], ch)) break; if (ch < UnivCharsetDesc::zero || ch > UnivCharsetDesc::zero + 9) break; int digit = ch - UnivCharsetDesc::zero; // Allow the division to be done at compile-time. if (n > INT_MAX/10) break; n *= 10; if (n > INT_MAX - digit) break; n += digit; } if (i < id.size() || i == 0) { mgr.message(PosixStorageMessages::invalidNumber, StringMessageArg(id)); return 0; } foundId = id; // Could check access mode with fcntl(n, F_GETFL). return new PosixFdStorageObject(n, mayRewind); } PosixFdStorageObject::PosixFdStorageObject(int fd, Boolean mayRewind) : PosixBaseStorageObject(fd, mayRewind), origFd_(fd) { } const char *PosixFdStorageManager::type() const { return type_; } Boolean PosixFdStorageObject::read(char *buf, size_t bufSize, Messenger &mgr, size_t &nread) { if (readSaved(buf, bufSize, nread)) return 1; if (fd_ < 0 || eof_) return 0; long n; do { n = ::read(fd_, buf, bufSize); } while (n < 0 && errno == EINTR); if (n > 0) { nread = size_t(n); saveBytes(buf, nread); return 1; } if (n < 0) { ParentLocationMessenger(mgr).message(PosixStorageMessages::fdRead, NumberMessageArg(fd_), ErrnoMessageArg(errno)); fd_ = -1; } else eof_ = 1; return 0; } Boolean PosixFdStorageObject::seek(off_t off, Messenger &mgr) { if (lseek(fd_, off, SEEK_SET) < 0) { ParentLocationMessenger(mgr).message(PosixStorageMessages::fdLseek, NumberMessageArg(fd_), ErrnoMessageArg(errno)); return 0; } else return 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/PosixStorageMessages.msg100444 764 764 1023 6606574412 15606 0ustar jjcjjc# Copyright (c) 1994 James Clark # See the file COPYING for copying permission. # PosixStorage message definitions =2200 E2+readSystemCall++error reading %1 (%2) E2+openSystemCall++cannot open %1 (%2) E2+closeSystemCall++error closing %1 (%2) E2+lseekSystemCall++error seeking on %1 (%2) E1+invalidFilename++invalid filename %1 E2+fdRead++error reading file descriptor %1 (%2) E2+fdLseek++error seeking on file descriptor %1 (%2) E1+invalidNumber++%1 is not a valid file descriptor number E2+cannotFind++cannot find %1; tried %2 jade-1.2.1/lib/PosixStorageMessages.rc100444 764 764 556 6606636234 15417 0ustar jjcjjcSTRINGTABLE BEGIN 2200, "error reading %1 (%2)" 2201, "cannot open %1 (%2)" 2202, "error closing %1 (%2)" 2203, "error seeking on %1 (%2)" 2204, "invalid filename %1" 2205, "error reading file descriptor %1 (%2)" 2206, "error seeking on file descriptor %1 (%2)" 2207, "%1 is not a valid file descriptor number" 2208, "cannot find %1; tried %2" END jade-1.2.1/lib/PosixStorageMessages.h100444 764 764 5407 6606636234 15262 0ustar jjcjjc// This file was automatically generated from .\PosixStorageMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct PosixStorageMessages { // 2200 static const MessageType2 readSystemCall; // 2201 static const MessageType2 openSystemCall; // 2202 static const MessageType2 closeSystemCall; // 2203 static const MessageType2 lseekSystemCall; // 2204 static const MessageType1 invalidFilename; // 2205 static const MessageType2 fdRead; // 2206 static const MessageType2 fdLseek; // 2207 static const MessageType1 invalidNumber; // 2208 static const MessageType2 cannotFind; }; const MessageType2 PosixStorageMessages::readSystemCall( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2200 #ifndef SP_NO_MESSAGE_TEXT ,"error reading %1 (%2)" #endif ); const MessageType2 PosixStorageMessages::openSystemCall( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2201 #ifndef SP_NO_MESSAGE_TEXT ,"cannot open %1 (%2)" #endif ); const MessageType2 PosixStorageMessages::closeSystemCall( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2202 #ifndef SP_NO_MESSAGE_TEXT ,"error closing %1 (%2)" #endif ); const MessageType2 PosixStorageMessages::lseekSystemCall( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2203 #ifndef SP_NO_MESSAGE_TEXT ,"error seeking on %1 (%2)" #endif ); const MessageType1 PosixStorageMessages::invalidFilename( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2204 #ifndef SP_NO_MESSAGE_TEXT ,"invalid filename %1" #endif ); const MessageType2 PosixStorageMessages::fdRead( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2205 #ifndef SP_NO_MESSAGE_TEXT ,"error reading file descriptor %1 (%2)" #endif ); const MessageType2 PosixStorageMessages::fdLseek( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2206 #ifndef SP_NO_MESSAGE_TEXT ,"error seeking on file descriptor %1 (%2)" #endif ); const MessageType1 PosixStorageMessages::invalidNumber( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2207 #ifndef SP_NO_MESSAGE_TEXT ,"%1 is not a valid file descriptor number" #endif ); const MessageType2 PosixStorageMessages::cannotFind( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2208 #ifndef SP_NO_MESSAGE_TEXT ,"cannot find %1; tried %2" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Priority.h100444 764 764 1221 6606574412 12751 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Priority_INCLUDED #define Priority_INCLUDED 1 #include #include "Boolean.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Priority { public: typedef unsigned char Type; enum { data = 0, dataDelim = 1, function = 2, delim = UCHAR_MAX }; static inline Type blank(int n) { // `Priority::' works round gcc 2.5.5 bug return Priority::Type(n + function); } static inline Boolean isBlank(Type t) { return function < t && t < delim; } }; #ifdef SP_NAMESPACE } #endif #endif /* not Priority_INCLUDED */ jade-1.2.1/lib/Recognizer.cxx100444 764 764 3407 6606574412 13622 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Resource.h" #include "Trie.h" #include "Owner.h" #include "XcharMap.h" #include "Recognizer.h" #include "InputSource.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Recognizer::Recognizer(Trie *trie, const XcharMap &map) : trie_(trie), map_(map), multicode_(0) { } Recognizer::Recognizer(Trie *trie, const XcharMap &map, Vector &suppressTokens) : trie_(trie), map_(map), multicode_(1) { suppressTokens.swap(suppressTokens_); } Token Recognizer::recognize(InputSource *in, Messenger &mgr) const { if (multicode_) { in->startToken(); if (in->scanSuppress()) return suppressTokens_[map_[in->tokenChar(mgr)]]; } else in->startTokenNoMulticode(); register const Trie *pos = trie_.pointer(); do { pos = pos->next(map_[in->tokenChar(mgr)]); } while (pos->hasNext()); if (!pos->blank()) { in->endToken(pos->tokenLength()); return pos->token(); } const BlankTrie *b = pos->blank(); const Trie *newPos = b; size_t maxBlanks = b->maxBlanksToScan(); size_t nBlanks; for (nBlanks = 0; nBlanks < maxBlanks; nBlanks++) { EquivCode code = map_[in->tokenChar(mgr)]; if (!b->codeIsBlank(code)) { if (newPos->hasNext()) newPos = newPos->next(code); break; } } while (newPos->hasNext()) newPos = newPos->next(map_[in->tokenChar(mgr)]); if (newPos->token() != 0) { in->endToken(newPos->tokenLength() + b->additionalLength() + nBlanks); return newPos->token(); } else { in->endToken(pos->tokenLength() + (pos->includeBlanks() ? nBlanks : 0)); return pos->token(); } } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Recognizer.h100444 764 764 1575 6607562334 13254 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Recognizer_INCLUDED #define Recognizer_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Resource.h" #include "Owner.h" #include "XcharMap.h" #include "types.h" #include "Vector.h" #include "Trie.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class Messenger; class InputSource; class Recognizer : public Resource { public: Recognizer(Trie *, const XcharMap &); Recognizer(Trie *, const XcharMap &, Vector &); Token recognize(InputSource *, Messenger &) const; private: Recognizer(const Recognizer &); // undefined void operator=(const Recognizer &); // undefined Boolean multicode_; Owner trie_; XcharMap map_; Vector suppressTokens_; }; #ifdef SP_NAMESPACE } #endif #endif /* not Recognizer_INCLUDED */ jade-1.2.1/lib/RewindStorageObject.cxx100444 764 764 3030 6604607572 15411 0ustar jjcjjc// Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "RewindStorageObject.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif RewindStorageObject::RewindStorageObject(Boolean mayRewind, Boolean canSeek) : mayRewind_(mayRewind), canSeek_(canSeek), savingBytes_(mayRewind && !canSeek), readingSaved_(0) { } Boolean RewindStorageObject::rewind(Messenger &mgr) { ASSERT(mayRewind_); if (canSeek_) return seekToStart(mgr); else { readingSaved_ = 1; nBytesRead_ = 0; return 1; } } void RewindStorageObject::unread(const char *s, size_t n) { savedBytes_.append(s, n); if (!readingSaved_) { readingSaved_ = 1; nBytesRead_ = 0; } } void RewindStorageObject::willNotRewind() { mayRewind_ = 0; savingBytes_ = 0; if (!readingSaved_) { // Ensure that memory is released now. String tem; tem.swap(savedBytes_); } } Boolean RewindStorageObject::readSaved(char *buf, size_t bufSize, size_t &nread) { if (!readingSaved_) return 0; if (nBytesRead_ >= savedBytes_.size()) { if (!mayRewind_) { // Ensure that memory is released now. String tem; tem.swap(savedBytes_); } readingSaved_ = 0; return 0; } nread = savedBytes_.size() - nBytesRead_; if (nread > bufSize) nread = bufSize; memcpy(buf, savedBytes_.data() + nBytesRead_, nread); nBytesRead_ += nread; return 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/SJISCodingSystem.cxx100444 764 764 6255 6604607572 14622 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MULTI_BYTE #include "SJISCodingSystem.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SJISDecoder : public Decoder { public: SJISDecoder(); size_t decode(Char *, const char *, size_t, const char **); private: }; class SJISEncoder : public RecoveringEncoder { public: SJISEncoder(); void output(const Char *, size_t, OutputByteStream *); }; Decoder *SJISCodingSystem::makeDecoder() const { return new SJISDecoder; } Encoder *SJISCodingSystem::makeEncoder() const { return new SJISEncoder; } SJISDecoder::SJISDecoder() { } size_t SJISDecoder::decode(Char *to, const char *s, size_t slen, const char **rest) { Char *start = to; while (slen > 0) { unsigned char c = *(unsigned char *)s; if (!(c & 0x80)) { *to++ = c; s++; slen--; } else if (129 <= c && c <= 159) { if (slen < 2) break; s++; slen -= 2; unsigned char c2 = *(unsigned char *)s++; unsigned short n = ((c - 112) << 9) | c2; if (64 <= c2 && c2 <= 127) n -= 31 + (1 << 8); else if (c2 <= 158) n -= 32 + (1 << 8); else if (c2 <= 252) n -= 126; else continue; n |= 0x8080; *to++ = n; } else if (224 <= c && c <= 239) { if (slen < 2) break; s++; slen -= 2; unsigned char c2 = *(unsigned char *)s++; unsigned short n = ((c - 176) << 9) | c2; if (64 <= c2 && c2 <= 127) n -= 31 + (1 << 8); else if (c2 <= 158) n -= 32 + (1 << 8); else if (c2 <= 252) n -= 126; else continue; n |= 0x8080; *to++ = n; } else if (161 <= c && c <= 223) { slen--; s++; *to++ = c; } else { // 128, 160, 240-255 slen--; s++; } } *rest = s; return to - start; } SJISEncoder::SJISEncoder() { } void SJISEncoder::output(const Char *s, size_t n, OutputByteStream *sb) { for (; n > 0; s++, n--) { Char c = *s; unsigned short mask = (unsigned short)(c & 0x8080); if (mask == 0) sb->sputc((unsigned char)(c & 0xff)); else if (mask == 0x8080) { unsigned char c1 = (c >> 8) & 0x7f; unsigned char c2 = c & 0x7f; unsigned char out1; if (c1 < 33) out1 = 0; else if (c1 < 95) out1 = ((c1 + 1) >> 1) + 112; else if (c1 < 127) out1 = ((c1 + 1) >> 1) + 176; else out1 = 0; if (out1) { unsigned char out2; if (c1 & 1) { if (c2 < 33) out2 = 0; else if (c2 <= 95) out2 = c2 + 31; else if (c2 <= 126) out2 = c2 + 32; else out2 = 0; } else { if (33 <= c2 && c2 <= 126) out2 = c2 + 126; else out2 = 0; } if (out2) { sb->sputc(out1); sb->sputc(out2); } else handleUnencodable(c, sb); } else handleUnencodable(c, sb); } else if (mask == 0x0080) { if (161 <= c && c <= 223) sb->sputc((unsigned char)(c & 0xff)); else handleUnencodable(c, sb); } else handleUnencodable(c, sb); } } #ifdef SP_NAMESPACE } #endif #else /* not SP_MULTI_BYTE */ #ifndef __GNUG__ static char non_empty_translation_unit; // sigh #endif #endif /* not SP_MULTI_BYTE */ jade-1.2.1/lib/SOEntityCatalog.cxx100444 764 764 75424 6604607572 14556 0ustar jjcjjc// Copyright (c) 1994, 1995, 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "CharsetInfo.h" #include "MessageArg.h" #include "CatalogMessages.h" #include "SOEntityCatalog.h" #include "EntityDecl.h" #include "EntityCatalog.h" #include "Message.h" #include "StringC.h" #include "types.h" #include "HashTable.h" #include "InputSource.h" #include "Boolean.h" #include "SubstTable.h" #include "CatalogEntry.h" #include "Vector.h" #include "StorageManager.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class CatalogParser; class SOEntityCatalog; class SOCatalogManagerImpl : public SOCatalogManager { public: SOCatalogManagerImpl(const Vector &sysids, size_t nSysidsMustExist, const CharsetInfo *sysidCharset, const CharsetInfo *catalogCharset, Boolean useDocCatalog); ConstPtr makeCatalog(StringC &systemId, const CharsetInfo &charset, ExtendEntityManager *, Messenger &) const; Boolean mapCatalog(ParsedSystemId &systemId, ExtendEntityManager *em, Messenger &mgr) const; private: void addCatalogsForDocument(CatalogParser &parser, StringC &sysid, SOEntityCatalog *, const CharsetInfo &charset, Messenger &mgr) const; size_t nSystemCatalogsMustExist_; Vector systemCatalogs_; const CharsetInfo *sysidCharset_; const CharsetInfo *catalogCharset_; Boolean useDocCatalog_; }; class SOEntityCatalog : public EntityCatalog { public: SOEntityCatalog(Ptr em); typedef EntityDecl::DeclType DeclType; Boolean document(const CharsetInfo &, Messenger &, StringC &) const; Boolean sgmlDecl(const CharsetInfo &, Messenger &, StringC &) const; Boolean lookup(const EntityDecl &entity, const Syntax &, const CharsetInfo &, Messenger &, StringC &) const; Boolean lookupPublic(const StringC &, const CharsetInfo &, Messenger &, StringC &) const; Boolean lookupChar(const StringC &, const CharsetInfo &, Messenger &, UnivChar &) const; void addPublicId(StringC &publicId, StringC &systemId, const Location &, Boolean override); void addDelegate(StringC &prefix, StringC &systemId, const Location &, Boolean override); void addSystemId(StringC &systemId, StringC &replSystemId, const Location &); void addName(StringC &name, DeclType, StringC &systemId, const Location &, Boolean override); void setSgmlDecl(StringC &str, const Location &loc); void setDocument(StringC &str, const Location &loc); void setBase(const Location &loc); void endCatalog(); const Ptr &entityManager() { return em_; } private: SOEntityCatalog(const SOEntityCatalog &); // undefined void operator=(const SOEntityCatalog &); // undefined Boolean expandCatalogSystemId(const StringC &str, const Location &loc, size_t baseNumber, Boolean isNdata, const CharsetInfo &charset, const StringC *lookupPublicId, Messenger &mgr, StringC &result) const; const CatalogEntry * findBestPublicEntry(const StringC &publicId, Boolean overrideOnly, const CharsetInfo &charset, Boolean &delegated) const; class Table { public: Table(); const CatalogEntry *lookup(const StringC &, Boolean overrideOnly) const; const CatalogEntry *lookup(const StringC &key, const SubstTable &substTable, Boolean overrideOnly) const; void insert(const StringC &, const CatalogEntry &, Boolean override); size_t count() const; private: Table(const Table &); // undefined void operator=(const Table &); // undefined // These are entries that are applicable when an explicit system id // was specified in the external identifier. HashTable overrideEntries_; // This specifies the entries that should substitute for the // overrideEntries_ when an explicit system identifier was not specified. HashTable normalEntries_; }; Table publicIds_; Table delegates_; HashTable systemIds_; Table names_[5]; size_t catalogNumber_; Boolean haveSgmlDecl_; StringC sgmlDecl_; Location sgmlDeclLoc_; size_t sgmlDeclBaseNumber_; StringC document_; Boolean haveDocument_; Location documentLoc_; size_t documentBaseNumber_; Boolean haveCurrentBase_; Vector base_; Ptr em_; }; class CatalogParser : private Messenger { public: CatalogParser(const CharsetInfo &); void parseCatalog(const StringC &sysid, Boolean mustExist, const CharsetInfo &sysidCharset, const CharsetInfo &catalogCharset, InputSourceOrigin *origin, SOEntityCatalog *catalog, Messenger &mgr); public: // Since it's a return type, it has to be public to keep some // (broken) compilers happy. enum Param { eofParam, literalParam, nameParam, percentParam }; private: enum { data, eof, nul, lit, lita, minus, s, min // other minimum data characters }; enum { minimumLiteral = 01 }; Messenger &messenger() { return *this; } void dispatchMessage(Message &); void dispatchMessage(const Message &); void initMessage(Message &); void parsePublic(); void parseDelegate(); void parseDtddecl(); void parseSystem(); void parseNameMap(EntityDecl::DeclType declType); void parseOverride(); Param parseParam(unsigned flags = 0); Boolean parseArg(); void parseLiteral(Char delim, unsigned flags); void parseName(); void skipComment(); void upcase(StringC &); Boolean inLoop(const Location &loc); Boolean isMinimumData(Xchar c) { int cat = categoryTable_[c]; return (cat == min || (cat == s && c != tab_) || cat == minus || cat == lita); } Xchar get() { return in_->get(messenger()); } void unget() { in_->ungetToken(); } Messenger *mgr_; InputSource *in_; SOEntityCatalog *catalog_; StringC param_; Location paramLoc_; Char minus_; Char tab_; Char rs_; Char re_; Char space_; StringC publicKey_; StringC systemKey_; StringC entityKey_; StringC doctypeKey_; StringC linktypeKey_; StringC notationKey_; StringC overrideKey_; StringC sgmlDeclKey_; StringC documentKey_; StringC catalogKey_; StringC yesKey_; StringC noKey_; StringC baseKey_; StringC delegateKey_; StringC dtddeclKey_; StringC sgmlKey_; XcharMap categoryTable_; SubstTable substTable_; Boolean override_; }; ExtendEntityManager::CatalogManager * SOCatalogManager::make(const Vector &sysids, size_t nSysidsMustExist, const CharsetInfo *sysidCharset, const CharsetInfo *catalogCharset, Boolean useDocCatalog) { return new SOCatalogManagerImpl(sysids, nSysidsMustExist, sysidCharset, catalogCharset, useDocCatalog); } SOCatalogManagerImpl::SOCatalogManagerImpl(const Vector &systemCatalogs, size_t nSystemCatalogsMustExist, const CharsetInfo *sysidCharset, const CharsetInfo *catalogCharset, Boolean useDocCatalog) : systemCatalogs_(systemCatalogs), nSystemCatalogsMustExist_(nSystemCatalogsMustExist), sysidCharset_(sysidCharset), catalogCharset_(catalogCharset), useDocCatalog_(useDocCatalog) { } Boolean SOCatalogManagerImpl::mapCatalog(ParsedSystemId &systemId, ExtendEntityManager *em, Messenger &mgr) const { Vector maps; systemId.maps.swap(maps); while (maps.size() > 0) { StringC catalogSystemId; systemId.unparse(*sysidCharset_, 0, catalogSystemId); SOEntityCatalog *catalog = new SOEntityCatalog(em); ConstPtr deleter(catalog); CatalogParser parser(*catalogCharset_); parser.parseCatalog(catalogSystemId, 1, *sysidCharset_, *catalogCharset_, InputSourceOrigin::make(), catalog, mgr); // FIXME do catalog caching here StringC s; if (maps.back().type == ParsedSystemId::Map::catalogDocument) { if (!catalog->document(*sysidCharset_, mgr, s)) { mgr.message(CatalogMessages::noDocumentEntry, StringMessageArg(catalogSystemId)); return 0; } } else { ASSERT(maps.back().type == ParsedSystemId::Map::catalogPublic); if (!catalog->lookupPublic(maps.back().publicId, *sysidCharset_, mgr, s)) { mgr.message(CatalogMessages::noPublicEntry, StringMessageArg(maps.back().publicId), StringMessageArg(catalogSystemId)); return 0; } } ParsedSystemId tem; if (!em->parseSystemId(s, *sysidCharset_, 0, 0, mgr, tem)) return 0; systemId = tem; maps.resize(maps.size() - 1); for (size_t i = 0; i < systemId.maps.size(); i++) maps.push_back(systemId.maps[i]); systemId.maps.clear(); } return 1; } ConstPtr SOCatalogManagerImpl::makeCatalog(StringC &systemId, const CharsetInfo &charset, ExtendEntityManager *em, Messenger &mgr) const { SOEntityCatalog *entityCatalog = new SOEntityCatalog(em); CatalogParser parser(*catalogCharset_); size_t i; for (i = 0; i < nSystemCatalogsMustExist_; i++) parser.parseCatalog(systemCatalogs_[i], 1, *sysidCharset_, *catalogCharset_, InputSourceOrigin::make(), entityCatalog, mgr); if (useDocCatalog_) addCatalogsForDocument(parser, systemId, entityCatalog, charset, mgr); for (i = nSystemCatalogsMustExist_; i < systemCatalogs_.size(); i++) parser.parseCatalog(systemCatalogs_[i], 0, *sysidCharset_, *catalogCharset_, InputSourceOrigin::make(), entityCatalog, mgr); return entityCatalog; } void SOCatalogManagerImpl::addCatalogsForDocument(CatalogParser &parser, StringC &sysid, SOEntityCatalog *impl, const CharsetInfo &charset, Messenger &mgr) const { ParsedSystemId v; if (!impl->entityManager()->parseSystemId(sysid, charset, 0, 0, mgr, v)) return; if (v.maps.size() > 0) { if (v.maps[0].type == ParsedSystemId::Map::catalogDocument) { v.maps.erase(v.maps.begin(), v.maps.begin() + 1); StringC tem; v.unparse(charset, 0, tem); parser.parseCatalog(tem, 1, charset, *catalogCharset_, InputSourceOrigin::make(), impl, mgr); if (!impl->document(charset, mgr, sysid)) { mgr.message(CatalogMessages::noDocumentEntry, StringMessageArg(tem)); sysid.resize(0); } } return; } Vector catalogs; size_t i; for (i = 0; i < v.size(); i++) if (v[i].storageManager->inheritable()) { ParsedSystemId catalogId; catalogId.resize(1); StorageObjectSpec &spec = catalogId.back(); spec.storageManager = v[i].storageManager; spec.codingSystemType = v[i].codingSystemType; spec.codingSystemName = v[i].codingSystemName; spec.specId = spec.storageManager->idCharset()->execToDesc("catalog"); spec.storageManager->resolveRelative(v[i].specId, spec.specId, 0); spec.baseId = v[i].baseId; spec.records = v[i].records; StringC tem; catalogId.unparse(charset, 0, tem); for (size_t j = 0; j < catalogs.size(); j++) if (tem == catalogs[j]) { tem.resize(0); break; } if (tem.size() > 0) { catalogs.resize(catalogs.size() + 1); tem.swap(catalogs.back()); } } for (i = 0; i < catalogs.size(); i++) parser.parseCatalog(catalogs[i], 0, charset, *catalogCharset_, InputSourceOrigin::make(), impl, mgr); } SOEntityCatalog::SOEntityCatalog(Ptr em) : em_(em), catalogNumber_(0), haveSgmlDecl_(0), haveDocument_(0), haveCurrentBase_(0) { } void SOEntityCatalog::endCatalog() { catalogNumber_++; haveCurrentBase_ = 0; } Boolean SOEntityCatalog::expandCatalogSystemId(const StringC &str, const Location &loc, size_t baseNumber, Boolean isNdata, const CharsetInfo &charset, const StringC *lookupPublicId, Messenger &mgr, StringC &result) const { return em_->expandSystemId(str, (baseNumber ? base_[baseNumber - 1] : loc), isNdata, charset, lookupPublicId, mgr, result); } Boolean SOEntityCatalog::lookup(const EntityDecl &entity, const Syntax &syntax, const CharsetInfo &charset, Messenger &mgr, StringC &result) const { const CatalogEntry *entry = 0; const CatalogEntry *delegatedEntry = 0; if (entity.systemIdPointer()) entry = systemIds_.lookup(*entity.systemIdPointer()); if (entity.publicIdPointer()) { const CatalogEntry *publicEntry; Boolean delegated; publicEntry = findBestPublicEntry(*entity.publicIdPointer(), entity.systemIdPointer() != 0, charset, delegated); if (publicEntry && delegated) delegatedEntry = publicEntry; // match for system id has priority over match for public id in same // catalog if (publicEntry && (!entry || publicEntry->catalogNumber < entry->catalogNumber)) entry = publicEntry; } if (entity.name().size() > 0 && (!entry || entry->catalogNumber > 0)) { const CatalogEntry *entityEntry; int tableIndex = (entity.declType() >= EntityDecl::parameterEntity ? int(entity.declType()) - 1 : int(entity.declType())); StringC name(entity.name()); Boolean subst; switch (entity.declType()) { case EntityDecl::parameterEntity: { StringC tem(name); name = syntax.peroDelim(); name += tem; } // fall through case EntityDecl::generalEntity: subst = syntax.namecaseEntity(); break; default: subst = syntax.namecaseGeneral(); break; } if (!subst) entityEntry = names_[tableIndex].lookup(name, entity.systemIdPointer() != 0); else entityEntry = names_[tableIndex].lookup(name, syntax.upperSubstTable(), entity.systemIdPointer() != 0); // match for public id has priority over match for entity in same // catalog if (entityEntry && (!entry || entityEntry->catalogNumber < entry->catalogNumber)) entry = entityEntry; } if (entry) return expandCatalogSystemId(entry->to, entry->loc, entry->baseNumber, entity.dataType() == EntityDecl::ndata, charset, entry == delegatedEntry ? entity.publicIdPointer() : 0, mgr, result); if (entity.systemIdPointer()) return em_->expandSystemId(*entity.systemIdPointer(), entity.defLocation(), entity.dataType() == EntityDecl::ndata, charset, 0, mgr, result); return 0; } Boolean SOEntityCatalog::lookupPublic(const StringC &publicId, const CharsetInfo &charset, Messenger &mgr, StringC &result) const { Boolean delegated; const CatalogEntry *entry = findBestPublicEntry(publicId, 0, charset, delegated); return (entry && expandCatalogSystemId(entry->to, entry->loc, entry->baseNumber, 0, charset, delegated ? &publicId : 0, mgr, result)); } Boolean SOEntityCatalog::lookupChar(const StringC &name, const CharsetInfo &charset, Messenger &mgr, UnivChar &result) const { Boolean delegated; const CatalogEntry *entry = findBestPublicEntry(name, 0, charset, delegated); if (!entry) return 0; if (delegated) return 0; // FIXME const StringC &number = entry->to; if (number.size() == 0) return 0; UnivChar n = 0; for (size_t i = 0; i < number.size(); i++) { int d = charset.digitWeight(number[i]); if (d < 0) return 0; if (n <= UnivChar(-1)/10 && (n *= 10) <= UnivChar(-1) - d) n += d; } result = n; return 1; } const CatalogEntry * SOEntityCatalog::findBestPublicEntry(const StringC &publicId, Boolean overrideOnly, const CharsetInfo &charset, Boolean &delegated) const { Char slash = charset.execToDesc('/'); Char colon = charset.execToDesc(':'); const CatalogEntry *bestEntry = 0; for (size_t i = 0; i <= publicId.size(); i++) { if ((i + 1 < publicId.size() && (publicId[i] == slash || publicId[i] == colon) && publicId[i + 1] == publicId[i]) || (i >= 2 && (publicId[i - 1] == slash || publicId[i - 1] == colon) && publicId[i - 2] == publicId[i - 1])) { StringC tem(publicId.data(), i); const CatalogEntry *entry = delegates_.lookup(tem, overrideOnly); if (entry && (!bestEntry || entry->catalogNumber <= bestEntry->catalogNumber)) { bestEntry = entry; delegated = 1; } } } const CatalogEntry *entry = publicIds_.lookup(publicId, overrideOnly); if (entry && (!bestEntry || entry->catalogNumber <= bestEntry->catalogNumber)) { bestEntry = entry; delegated = 0; } return bestEntry; } Boolean SOEntityCatalog::sgmlDecl(const CharsetInfo &charset, Messenger &mgr, StringC &result) const { return haveSgmlDecl_ && expandCatalogSystemId(sgmlDecl_, sgmlDeclLoc_, sgmlDeclBaseNumber_, 0, charset, 0, mgr, result); } Boolean SOEntityCatalog::document(const CharsetInfo &charset, Messenger &mgr, StringC &result) const { return haveDocument_ && expandCatalogSystemId(document_, documentLoc_, documentBaseNumber_, 0, charset, 0, mgr, result); } void SOEntityCatalog::addPublicId(StringC &publicId, StringC &systemId, const Location &loc, Boolean override) { CatalogEntry entry; entry.loc = loc; entry.catalogNumber = catalogNumber_; entry.baseNumber = haveCurrentBase_ ? base_.size() : 0; systemId.swap(entry.to); publicIds_.insert(publicId, entry, override); } void SOEntityCatalog::addDelegate(StringC &prefix, StringC &systemId, const Location &loc, Boolean override) { CatalogEntry entry; entry.loc = loc; entry.catalogNumber = catalogNumber_; entry.baseNumber = haveCurrentBase_ ? base_.size() : 0; systemId.swap(entry.to); delegates_.insert(prefix, entry, override); } void SOEntityCatalog::addSystemId(StringC &systemId, StringC &toSystemId, const Location &loc) { CatalogEntry entry; entry.loc = loc; entry.catalogNumber = catalogNumber_; entry.baseNumber = haveCurrentBase_ ? base_.size() : 0; toSystemId.swap(entry.to); systemIds_.insert(systemId, entry, false); } void SOEntityCatalog::addName(StringC &name, DeclType declType, StringC &systemId, const Location &loc, Boolean override) { CatalogEntry entry; entry.loc = loc; entry.catalogNumber = catalogNumber_; entry.baseNumber = haveCurrentBase_ ? base_.size() : 0; int tableIndex = (declType >= EntityDecl::parameterEntity ? int(declType) - 1 : int(declType)); entry.serial = names_[tableIndex].count(); systemId.swap(entry.to); names_[tableIndex].insert(name, entry, override); } void SOEntityCatalog::setSgmlDecl(StringC &str, const Location &loc) { if (!haveSgmlDecl_) { haveSgmlDecl_ = true; str.swap(sgmlDecl_); sgmlDeclLoc_ = loc; sgmlDeclBaseNumber_ = haveCurrentBase_ ? base_.size() : 0; } } void SOEntityCatalog::setDocument(StringC &str, const Location &loc) { if (!haveDocument_) { haveDocument_ = true; str.swap(document_); documentLoc_ = loc; documentBaseNumber_ = haveCurrentBase_ ? base_.size() : 0; } } void SOEntityCatalog::setBase(const Location &loc) { if (loc.origin().isNull()) haveCurrentBase_ = 0; else { haveCurrentBase_ = 1; base_.push_back(loc); } } SOEntityCatalog::Table::Table() { } void SOEntityCatalog::Table::insert(const StringC &key, const CatalogEntry &entry, Boolean override) { if (override) overrideEntries_.insert(key, entry, false); else { const CatalogEntry *e = overrideEntries_.lookup(key); if (!e) normalEntries_.insert(key, entry, false); } } const CatalogEntry *SOEntityCatalog::Table::lookup(const StringC &key, Boolean overrideOnly) const { if (!overrideOnly) { const CatalogEntry *e = normalEntries_.lookup(key); if (e) return e; } return overrideEntries_.lookup(key); } const CatalogEntry * SOEntityCatalog::Table::lookup(const StringC &name, const SubstTable &substTable, Boolean overrideOnly) const { HashTableIter iter1(overrideEntries_); HashTableIter iter2(normalEntries_); HashTableIter *iters[2]; int nIter = 0; iters[nIter++] = &iter1; if (!overrideOnly) iters[nIter++] = &iter2; const CatalogEntry *entry = 0; for (int i = 0; i < nIter; i++) { HashTableIter &iter = *iters[i]; const StringC *key; const CatalogEntry *value; StringC buffer; while (iter.next(key, value)) { buffer = *key; for (size_t j = 0; j < buffer.size(); j++) substTable.subst(buffer[j]); if (buffer == name) { if (!entry || value->serial < entry->serial) entry = value; } } } return entry; } size_t SOEntityCatalog::Table::count() const { return normalEntries_.count() + overrideEntries_.count(); } CatalogParser::CatalogParser(const CharsetInfo &charset) : categoryTable_(data), entityKey_(charset.execToDesc("ENTITY")), publicKey_(charset.execToDesc("PUBLIC")), systemKey_(charset.execToDesc("SYSTEM")), doctypeKey_(charset.execToDesc("DOCTYPE")), linktypeKey_(charset.execToDesc("LINKTYPE")), notationKey_(charset.execToDesc("NOTATION")), overrideKey_(charset.execToDesc("OVERRIDE")), sgmlDeclKey_(charset.execToDesc("SGMLDECL")), documentKey_(charset.execToDesc("DOCUMENT")), catalogKey_(charset.execToDesc("CATALOG")), yesKey_(charset.execToDesc("YES")), noKey_(charset.execToDesc("NO")), baseKey_(charset.execToDesc("BASE")), delegateKey_(charset.execToDesc("DELEGATE")), dtddeclKey_(charset.execToDesc("DTDDECL")), sgmlKey_(charset.execToDesc("SGML")) { static const char lcletters[] = "abcdefghijklmnopqrstuvwxyz"; static const char ucletters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // minimum data other than lcletter, ucletter static const char minChars[] = "0123456789-.'()+,/:=?"; static const char sChars[] = " \n\r\t"; categoryTable_.setChar(0, nul); const char *p; const char *q; for (p = lcletters, q = ucletters; *p; p++, q++) { Char lc = charset.execToDesc(*p); Char uc = charset.execToDesc(*q); substTable_.addSubst(lc, uc); categoryTable_.setChar(lc, min); categoryTable_.setChar(uc, min); } for (p = sChars; *p; p++) categoryTable_.setChar(charset.execToDesc(*p), s); for (p = minChars; *p; p++) categoryTable_.setChar(charset.execToDesc(*p), min); categoryTable_.setChar(charset.execToDesc('\''), lita); categoryTable_.setChar(charset.execToDesc('"'), lit); minus_ = charset.execToDesc('-'); categoryTable_.setChar(minus_, minus); tab_ = charset.execToDesc('\t'); re_ = charset.execToDesc('\r'); rs_ = charset.execToDesc('\n'); space_ = charset.execToDesc(' '); categoryTable_.setEe(eof); } void CatalogParser::parseCatalog(const StringC &sysid, Boolean mustExist, const CharsetInfo &sysidCharset, const CharsetInfo &catalogCharset, InputSourceOrigin *origin, SOEntityCatalog *catalog, Messenger &mgr) { const Ptr &em = catalog->entityManager(); in_ = em->open(sysid, sysidCharset, origin, mustExist ? 0 : ExtendEntityManager::mayNotExist, mgr); if (!in_) return; catalog_ = catalog; mgr_ = &mgr; override_ = 0; Boolean recovering = false; Vector subSysids; Vector subSysidLocs; for (;;) { Param parm = parseParam(); if (parm == nameParam) { upcase(param_); Boolean wasRecovering = recovering; recovering = false; if (param_ == publicKey_) parsePublic(); else if (param_ == systemKey_) parseSystem(); else if (param_ == entityKey_) parseNameMap(EntityDecl::generalEntity); else if (param_ == doctypeKey_) parseNameMap(EntityDecl::doctype); else if (param_ == linktypeKey_) parseNameMap(EntityDecl::linktype); else if (param_ == notationKey_) parseNameMap(EntityDecl::notation); else if (param_ == sgmlKey_) parseNameMap(EntityDecl::sgml); else if (param_ == sgmlDeclKey_) { if (parseArg()) catalog_->setSgmlDecl(param_, paramLoc_); } else if (param_ == documentKey_) { if (parseArg()) catalog_->setDocument(param_, paramLoc_); } else if (param_ == overrideKey_) parseOverride(); else if (param_ == catalogKey_) { if (parseArg()) { if (inLoop(paramLoc_)) break; subSysids.resize(subSysids.size() + 1); param_.swap(subSysids.back()); subSysidLocs.push_back(paramLoc_); } } else if (param_ == baseKey_) { if (parseArg()) { StringC tem; if (em->expandSystemId(param_, paramLoc_, 0, catalogCharset, 0, mgr, tem)) { InputSource *in = em->open(tem, catalogCharset, InputSourceOrigin::make(paramLoc_), 0, mgr); if (in && (in->get(mgr) != InputSource::eE || !in->accessError())) catalog->setBase(in->currentLocation()); } } } else if (param_ == delegateKey_) parseDelegate(); else if (param_ == dtddeclKey_) parseDtddecl(); else { if (!wasRecovering && parseParam() == eofParam) break; recovering = true; } } else if (parm == eofParam) break; else if (!recovering) { recovering = true; message(CatalogMessages::nameExpected); } } delete in_; catalog->endCatalog(); for (size_t i = 0; i < subSysids.size(); i++) { StringC tem; if (em->expandSystemId(subSysids[i], subSysidLocs[i], 0, catalogCharset, 0, mgr, tem)) parseCatalog(tem, 1, catalogCharset, catalogCharset, InputSourceOrigin::make(subSysidLocs[i]), catalog, mgr); } } Boolean CatalogParser::inLoop(const Location &loc) { const InputSourceOrigin *origin = paramLoc_.origin()->asInputSourceOrigin(); if (!origin) return 0; const ExternalInfo *info = origin->externalInfo(); if (!info) return 0; StorageObjectLocation soLoc; if (!ExtendEntityManager::externalize(info, origin->startOffset(paramLoc_.index()), soLoc)) return 0; for (;;) { const Location &parent = origin->parent(); if (parent.origin().isNull()) break; origin = parent.origin()->asInputSourceOrigin(); if (!origin) break; const ExternalInfo *info1 = origin->externalInfo(); if (info1) { StorageObjectLocation soLoc1; if (ExtendEntityManager::externalize(info1, origin->startOffset(parent.index()), soLoc1)) { if (soLoc.storageObjectSpec->storageManager == soLoc1.storageObjectSpec->storageManager && soLoc.actualStorageId == soLoc1.actualStorageId) { setNextLocation(loc.origin()->parent()); message(CatalogMessages::inLoop); return 1; } } } } return 0; } void CatalogParser::parseOverride() { if (parseParam() != nameParam) { message(CatalogMessages::overrideYesOrNo); return; } upcase(param_); if (param_ == yesKey_) override_ = 1; else if (param_ == noKey_) override_ = 0; else message(CatalogMessages::overrideYesOrNo); } void CatalogParser::parsePublic() { if (parseParam(minimumLiteral) != literalParam) { message(CatalogMessages::literalExpected); return; } StringC publicId; param_.swap(publicId); if (!parseArg()) return; catalog_->addPublicId(publicId, param_, paramLoc_, override_); } void CatalogParser::parseDelegate() { if (parseParam(minimumLiteral) != literalParam) { message(CatalogMessages::literalExpected); return; } StringC publicId; param_.swap(publicId); if (!parseArg()) return; catalog_->addDelegate(publicId, param_, paramLoc_, override_); } void CatalogParser::parseDtddecl() { message(CatalogMessages::dtddeclNotSupported); if (parseParam(minimumLiteral) != literalParam) { message(CatalogMessages::literalExpected); return; } if (!parseArg()) return; } void CatalogParser::parseSystem() { if (!parseArg()) return; StringC systemId; param_.swap(systemId); Param parm = parseParam(); if (parm == nameParam) message(CatalogMessages::systemShouldQuote); else if (parm != literalParam) { message(CatalogMessages::literalExpected); return; } catalog_->addSystemId(systemId, param_, paramLoc_); } void CatalogParser::parseNameMap(EntityDecl::DeclType declType) { if (!parseArg()) return; StringC name; param_.swap(name); if (!parseArg()) return; catalog_->addName(name, declType, param_, paramLoc_, override_); } Boolean CatalogParser::parseArg() { Param parm = parseParam(); if (parm != nameParam && parm != literalParam) { message(CatalogMessages::nameOrLiteralExpected); return false; } return true; } CatalogParser::Param CatalogParser::parseParam(unsigned flags) { for (;;) { Xchar c = get(); switch (categoryTable_[c]) { case eof: return eofParam; case lit: case lita: parseLiteral(c, flags); return literalParam; case s: break; case nul: message(CatalogMessages::nulChar); break; case minus: c = get(); if (c == minus_) { skipComment(); break; } unget(); // fall through default: parseName(); return nameParam; } } } void CatalogParser::skipComment() { for (;;) { Xchar c = get(); if (c == minus_) { c = get(); if (c == minus_) break; } if (c == InputSource::eE) { message(CatalogMessages::eofInComment); break; } } } void CatalogParser::parseLiteral(Char delim, unsigned flags) { paramLoc_ = in_->currentLocation(); enum { no, yesBegin, yesMiddle } skipping = yesBegin; param_.resize(0); for (;;) { Xchar c = get(); if (c == InputSource::eE) { message(CatalogMessages::eofInLiteral); break; } if (Char(c) == delim) break; if (flags & minimumLiteral) { if (!isMinimumData(c)) message(CatalogMessages::minimumData); if (c == rs_) ; else if (c == space_ || c == re_) { if (skipping == no) { param_ += space_; skipping = yesMiddle; } } else { skipping = no; param_ += Char(c); } } else param_ += Char(c); } if (skipping == yesMiddle) param_.resize(param_.size() - 1); } void CatalogParser::parseName() { paramLoc_ = in_->currentLocation(); size_t length; for (length = 1;; length++) { Xchar c = in_->tokenChar(messenger()); int cat = categoryTable_[c]; if (cat == eof || cat == s) break; // FIXME maybe check for LIT or LITA if (cat == nul) message(CatalogMessages::nulChar); } in_->endToken(length); param_.assign(in_->currentTokenStart(), in_->currentTokenLength()); } void CatalogParser::upcase(StringC &str) { for (size_t i = 0; i < str.size(); i++) substTable_.subst(str[i]); } void CatalogParser::dispatchMessage(const Message &msg) { mgr_->dispatchMessage(msg); } void CatalogParser::dispatchMessage(Message &msg) { mgr_->dispatchMessage(msg); } void CatalogParser::initMessage(Message &msg) { msg.loc = in_->currentLocation(); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Sd.cxx100444 764 764 10611 6604607572 12076 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Sd.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Sd::Sd(const Ptr &entityManager) : entityManager_(entityManager), internalCharsetIsDocCharset_(entityManager->internalCharsetIsDocCharset()), docCharset_(entityManager->charset()), scopeInstance_(0), www_(0), netEnable_(netEnableNo), entityRef_(entityRefAny), typeValid_(1), integrallyStored_(0) { int i; for (i = 0; i < nBooleanFeature; i++) booleanFeature_[i] = 0; for (i = 0; i < nNumberFeature; i++) numberFeature_[i] = 0; for (i = 0; i < nCapacity; i++) capacity_[i] = 35000; if (internalCharsetIsDocCharset_) internalCharsetPtr_ = 0; else internalCharsetPtr_ = &entityManager->charset(); } void Sd::setDocCharsetDesc(const UnivCharsetDesc &desc) { docCharset_.set(desc); } const char *const Sd::reservedName_[] = { "ALL", "ANY", "APPINFO", "ATTLIST", "ATTRIB", "BASESET", "CAPACITY", "CHARSET", "CONCUR", "CONTROLS", "DATATAG", "DEFAULT", "DELIM", "DESCSET", "DOCTYPE", "DOCUMENT", "ELEMENT", "EMPTY", "EMPTYNRM", "ENDTAG", "ENTITIES", "ENTITY", "EXPLICIT", "FEATURES", "FORMAL", "FUNCHAR", "FUNCTION", "GENERAL", "IMMEDNET", "IMPLICIT", "IMPLYDEF", "INSTANCE", "INTEGRAL", "INTERNAL", "KEEPRSRE", "LCNMCHAR", "LCNMSTRT", "LINK", "MINIMIZE", "MSICHAR", "MSOCHAR", "MSSCHAR", "NAMECASE", "NAMECHAR", "NAMES", "NAMESTRT", "NAMING", "NETENABL", "NO", "NOASSERT", "NONE", "NOTATION", "OMITNAME", "OMITTAG", "OTHER", "PUBLIC", "QUANTITY", "RANK", "RE", "REF", "RS", "SCOPE", "SEEALSO", "SEPCHAR", "SGML", "SGMLREF", "SHORTREF", "SHORTTAG", "SHUNCHAR", "SIMPLE", "SPACE", "STARTTAG", "SUBDOC", "SWITCHES", "SYNTAX", "SYSTEM", "TYPE", "UCNMCHAR", "UCNMSTRT", "UNCLOSED", "UNUSED", "URN", "VALIDITY", "VALUE", "YES" }; const char *const Sd::capacityName_[] = { "TOTALCAP", "ENTCAP", "ENTCHCAP", "ELEMCAP", "GRPCAP", "EXGRPCAP", "EXNMCAP", "ATTCAP", "ATTCHCAP", "AVGRPCAP", "NOTCAP", "NOTCHCAP", "IDCAP", "IDREFCAP", "MAPCAP", "LKSETCAP", "LKNMCAP" }; const char *const Sd::quantityName_[] = { "ATTCNT", "ATTSPLEN", "BSEQLEN", "DTAGLEN", "DTEMPLEN", "ENTLVL", "GRPCNT", "GRPGTCNT", "GRPLVL", "LITLEN", "NAMELEN", "NORMSEP", "PILEN", "TAGLEN", "TAGLVL" }; const char *const Sd::generalDelimiterName_[] = { "AND", "COM", "CRO", "DSC", "DSO", "DTGC", "DTGO", "ERO", "ETAGO", "GRPC", "GRPO", "HCRO", "LIT", "LITA", "MDC", "MDO", "MINUS", "MSC", "NET", "NESTC", "OPT", "OR", "PERO", "PIC", "PIO", "PLUS", "REFC", "REP", "RNI", "SEQ", "STAGO", "TAGC", "VI" }; Boolean Sd::lookupQuantityName(const StringC &name, Syntax::Quantity &quantity) const { for (size_t i = 0; i < SIZEOF(quantityName_); i++) if (execToInternal(quantityName_[i]) == name) { quantity = Syntax::Quantity(i); return 1; } return 0; } Boolean Sd::lookupCapacityName(const StringC &name, Sd::Capacity &capacity) const { for (size_t i = 0; i < SIZEOF(capacityName_); i++) if (execToInternal(capacityName_[i]) == name) { capacity = Sd::Capacity(i); return 1; } return 0; } Boolean Sd::lookupGeneralDelimiterName(const StringC &name, Syntax::DelimGeneral &delimGeneral) const { for (size_t i = 0; i < SIZEOF(generalDelimiterName_); i++) if (execToInternal(generalDelimiterName_[i]) == name) { delimGeneral = Syntax::DelimGeneral(i); return 1; } return 0; } StringC Sd::quantityName(Syntax::Quantity q) const { return execToInternal(quantityName_[q]); } StringC Sd::generalDelimiterName(Syntax::DelimGeneral d) const { return execToInternal(generalDelimiterName_[d]); } UnivChar Sd::nameToUniv(const StringC &name) { const int *p = namedCharTable_.lookup(name); int n; if (p) n = *p; else { n = int(namedCharTable_.count()); namedCharTable_.insert(name, n); } return n + 0x60000000; // 10646 private use group } void Sd::setShorttag(Boolean b) { for (int i = fSHORTTAG_FIRST; i <= fSHORTTAG_LAST; i++) booleanFeature_[i] = b; netEnable_ = netEnableAll; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/SdFormalError.h100444 764 764 1132 6604607572 13654 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef SdFormalError_INCLUDED #define SdFormalError_INCLUDED 1 #include "Link.h" #include "StringC.h" #include "Message.h" #include "Location.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class ParserState; class SdFormalError : public Link { public: SdFormalError(const Location &, const MessageType1 &, const StringC &); void send(ParserState &); private: const MessageType1 *message_; Location location_; StringC id_; }; #ifdef SP_NAMESPACE } #endif #endif /* not SdFormalError_INCLUDED */ jade-1.2.1/lib/SdText.cxx100444 764 764 3316 6604607572 12727 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "SdText.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif SdText::SdText() { } SdText::SdText(const Location &loc, Boolean lita) : lita_(lita) { items_.resize(items_.size() + 1); items_.back().loc = loc; items_.back().index = 0; } void SdText::addChar(SyntaxChar c, const Location &loc) { if (items_.size() == 0 || loc.origin().pointer() != items_.back().loc.origin().pointer() || loc.index() != (items_.back().loc.index() + (chars_.size() - items_.back().index))) { items_.resize(items_.size() + 1); items_.back().loc = loc; items_.back().index = chars_.size(); } chars_ += c; } void SdText::swap(SdText &to) { items_.swap(to.items_); chars_.swap(to.chars_); { Boolean tem = to.lita_; to.lita_ = lita_; lita_ = tem; } } Location SdText::endDelimLocation() const { Location loc(items_.back().loc); loc += chars_.size() - items_.back().index; return loc; } SdTextItem::SdTextItem() { } SdTextIter::SdTextIter(const SdText &text) : ptr_(&text), itemIndex_(0) { } Boolean SdTextIter::next(const SyntaxChar *&ptr, size_t &length, Location &loc) { const Vector &items = ptr_->items_; if (itemIndex_ >= items.size()) return 0; loc = items[itemIndex_].loc; const String &chars = ptr_->chars_; size_t charsIndex = items[itemIndex_].index; ptr = chars.data() + charsIndex; if (itemIndex_ + 1 < items.size()) length = items[itemIndex_ + 1].index - charsIndex; else length = chars.size() - charsIndex; itemIndex_++; return 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/SearchResultMessageArg.cxx100444 764 764 1163 6604607572 16055 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "SearchResultMessageArg.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif RTTI_DEF1(SearchResultMessageArg, OtherMessageArg); SearchResultMessageArg::SearchResultMessageArg() { } MessageArg *SearchResultMessageArg::copy() const { return new SearchResultMessageArg(*this); } void SearchResultMessageArg::add(StringC &str, int n) { filename_.resize(filename_.size() + 1); str.swap(filename_.back()); errno_.push_back(n); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/SgmlParser.cxx100444 764 764 3432 6604607572 13572 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "SgmlParser.h" #include "Parser.h" #include "Trie.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif SgmlParser::SgmlParser() : parser_(0) { } SgmlParser::SgmlParser(const Params ¶ms) : parser_(new Parser(params)) { } void SgmlParser::init(const Params ¶ms) { delete parser_; parser_ = new Parser(params); } SgmlParser::~SgmlParser() { delete parser_; } Event *SgmlParser::nextEvent() { return parser_->nextEvent(); } void SgmlParser::parseAll(EventHandler &handler, const volatile sig_atomic_t *cancelPtr) { parser_->parseAll(handler, cancelPtr); } ConstPtr SgmlParser::sd() const { return parser_->sdPointer(); } ConstPtr SgmlParser::instanceSyntax() const { return parser_->instanceSyntaxPointer(); } ConstPtr SgmlParser::prologSyntax() const { return parser_->prologSyntaxPointer(); } EntityManager &SgmlParser::entityManager() const { return parser_->entityManager(); } const EntityCatalog &SgmlParser::entityCatalog() const { return parser_->entityCatalog(); } void SgmlParser::activateLinkType(const StringC &name) { parser_->activateLinkType(name); } void SgmlParser::allLinkTypesActivated() { parser_->allLinkTypesActivated(); } void SgmlParser::swap(SgmlParser &s) { Parser *tem = parser_; parser_ = s.parser_; s.parser_ = tem; } Ptr SgmlParser::baseDtd() { return parser_->baseDtd(); } const ParserOptions &SgmlParser::options() const { return parser_->options(); } SgmlParser::Params::Params() : entityType(document), parent(0), options(0), subdocInheritActiveLinkTypes(0), subdocReferenced(0), subdocLevel(0) { } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/SGMLApplication.cxx100444 764 764 5004 6604607572 14436 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Boolean.h" #include "SGMLApplication.h" SGMLApplication::~SGMLApplication() { } void SGMLApplication::appinfo(const AppinfoEvent &) { } void SGMLApplication::startDtd(const StartDtdEvent &) { } void SGMLApplication::endDtd(const EndDtdEvent &) { } void SGMLApplication::endProlog(const EndPrologEvent &) { } void SGMLApplication::startElement(const StartElementEvent &) { } void SGMLApplication::endElement(const EndElementEvent &) { } void SGMLApplication::data(const DataEvent &) { } void SGMLApplication::sdata(const SdataEvent &) { } void SGMLApplication::pi(const PiEvent &) { } void SGMLApplication::externalDataEntityRef(const ExternalDataEntityRefEvent &) { } void SGMLApplication::subdocEntityRef(const SubdocEntityRefEvent &) { } void SGMLApplication::nonSgmlChar(const NonSgmlCharEvent &) { } void SGMLApplication::commentDecl(const CommentDeclEvent &) { } void SGMLApplication::markedSectionStart(const MarkedSectionStartEvent &) { } void SGMLApplication::markedSectionEnd(const MarkedSectionEndEvent &) { } void SGMLApplication::ignoredChars(const IgnoredCharsEvent &) { } void SGMLApplication::generalEntity(const GeneralEntityEvent &) { } void SGMLApplication::error(const ErrorEvent &) { } void SGMLApplication::openEntityChange(const OpenEntityPtr &) { } SGMLApplication::OpenEntity::OpenEntity() : count_(0) { } SGMLApplication::OpenEntity::~OpenEntity() { } SGMLApplication::OpenEntityPtr::OpenEntityPtr() : ptr_(0) { } SGMLApplication::OpenEntityPtr::OpenEntityPtr(const OpenEntityPtr &ptr) : ptr_(ptr.ptr_) { if (ptr_) ptr_->count_ += 1; } SGMLApplication::OpenEntityPtr::~OpenEntityPtr() { if (ptr_) { ptr_->count_ -= 1; if (ptr_->count_ == 0) delete ptr_; } } void SGMLApplication::OpenEntityPtr::operator=(OpenEntity *p) { if (p) p->count_ += 1; if (ptr_) { ptr_->count_ -= 1; if (ptr_->count_ == 0) delete ptr_; } ptr_ = p; } SGMLApplication::Location::Location() { init(); } SGMLApplication::Location::Location(const OpenEntityPtr &ptr, Position pos) { if (ptr) *this = ptr->location(pos); else init(); } void SGMLApplication::Location::init() { entityName.ptr = 0; entityName.len = 0; filename.ptr = 0; filename.len = 0; lineNumber = (unsigned long)-1; columnNumber = (unsigned long)-1; byteOffset = (unsigned long)-1; entityOffset = (unsigned long)-1; other = 0; } jade-1.2.1/lib/ShortReferenceMap.cxx100444 764 764 1112 6604607572 15060 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "ShortReferenceMap.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif ShortReferenceMap::ShortReferenceMap() : Named(StringC()), used_(0) { } ShortReferenceMap::ShortReferenceMap(const StringC &name) : Named(name) { } void ShortReferenceMap::setNameMap(Vector &map) { map.swap(nameMap_); // Make sure we know it's defined. if (nameMap_.size() == 0) nameMap_.resize(1); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/SrInfo.h100444 764 764 604 6604607572 12316 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef SrInfo_INCLUDED #define SrInfo_INCLUDED #include "types.h" #include "StringOf.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct SrInfo { String chars; int bSequenceLength; String chars2; }; #ifdef SP_NAMESPACE } #endif #endif /* not SrInfo_INCLUDED */ jade-1.2.1/lib/StdioStorage.cxx100444 764 764 6144 6604607572 14125 0ustar jjcjjc// Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "StdioStorage.h" #include "Message.h" #include "types.h" #include "ErrnoMessageArg.h" #include "StringOf.h" #include "StringC.h" #include "CodingSystem.h" #include "StdioStorageMessages.h" #include #include #include #include #ifndef SEEK_SET #define SEEK_SET 0 #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class StdioStorageObject : public StorageObject { public: StdioStorageObject(FILE *fp, const StringC &filename); ~StdioStorageObject(); Boolean read(char *buf, size_t bufSize, Messenger &mgr, size_t &nread); Boolean rewind(Messenger &mgr); size_t getBlockSize() const; private: enum ErrorIndex { invalidErrorIndex, fopenFailed, readError, seekError }; void error(Messenger &mgr, const MessageType2 &, int err); FILE *fp_; StringC filename_; String filenameBytes_; }; StdioStorageManager::StdioStorageManager(const char *type, const CharsetInfo *filenameCharset, const OutputCodingSystem *filenameCodingSystem) : IdStorageManager(filenameCharset), type_(type), filenameCodingSystem_(filenameCodingSystem) { } StorageObject *StdioStorageManager::makeStorageObject(const StringC &str, const StringC &, Boolean, Boolean, Messenger &mgr, StringC &filename) { filename = str; String filenameBytes = filenameCodingSystem_->convertOut(filename); errno = 0; FILE *fp = fopen(filenameBytes.data(), "r"); if (!fp) { ParentLocationMessenger(mgr).message(StdioStorageMessages::openFailed, StringMessageArg(filename), ErrnoMessageArg(errno)); return 0; } return new StdioStorageObject(fp, filename); } const char *StdioStorageManager::type() const { return type_; } StdioStorageObject::StdioStorageObject(FILE *fp, const StringC &filename) : fp_(fp), filename_(filename) { } StdioStorageObject::~StdioStorageObject() { if (fp_) { fclose(fp_); fp_ = 0; } } Boolean StdioStorageObject::rewind(Messenger &mgr) { if (fp_) { errno = 0; if (fseek(fp_, 0L, SEEK_SET) < 0) { error(mgr, StdioStorageMessages::seekFailed, errno); return 0; } return 1; } return 1; } size_t StdioStorageObject::getBlockSize() const { return BUFSIZ; } Boolean StdioStorageObject::read(char *buf, size_t bufSize, Messenger &mgr, size_t &nread) { if (!fp_) return 0; errno = 0; size_t n = 0; FILE *fp = fp_; while (n < bufSize) { int c = getc(fp); if (c == EOF) { if (ferror(fp)) { error(mgr, StdioStorageMessages::readFailed, errno); (void)fclose(fp); return 0; } fclose(fp); fp_ = 0; break; } buf[n++] = c; } nread = n; return n > 0; } void StdioStorageObject::error(Messenger &mgr, const MessageType2 &msg, int err) { ParentLocationMessenger(mgr).message(msg, StringMessageArg(filename_), ErrnoMessageArg(err)); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/StdioStorageMessages.msg100444 764 764 351 6604607572 15553 0ustar jjcjjc# Copyright (c) 1994 James Clark # See the file COPYING for copying permission. # StdioStorage message definitions =2400 E2+openFailed++cannot open %1 (%2) E2+readFailed++"error reading %1 (%2) E2+seekFailed++error seeking %1 (%2) jade-1.2.1/lib/StdioStorageMessages.rc100444 764 764 166 6604610604 15363 0ustar jjcjjcSTRINGTABLE BEGIN 2400, "cannot open %1 (%2)" 2401, """error reading %1 (%2)" 2402, "error seeking %1 (%2)" END jade-1.2.1/lib/StdioStorageMessages.h100444 764 764 2044 6604610604 15223 0ustar jjcjjc// This file was automatically generated from lib\StdioStorageMessages.msg by msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct StdioStorageMessages { // 2400 static const MessageType2 openFailed; // 2401 static const MessageType2 readFailed; // 2402 static const MessageType2 seekFailed; }; const MessageType2 StdioStorageMessages::openFailed( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2400 #ifndef SP_NO_MESSAGE_TEXT ,"cannot open %1 (%2)" #endif ); const MessageType2 StdioStorageMessages::readFailed( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2401 #ifndef SP_NO_MESSAGE_TEXT ,"\"error reading %1 (%2)" #endif ); const MessageType2 StdioStorageMessages::seekFailed( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2402 #ifndef SP_NO_MESSAGE_TEXT ,"error seeking %1 (%2)" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/StorageManager.cxx100444 764 764 2653 6604607572 14416 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "StorageManager.h" #define DEFAULT_BLOCK_SIZE 1024 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif StorageObject::StorageObject() { } StorageObject::~StorageObject() { } void StorageObject::willNotRewind() { } size_t StorageObject::getBlockSize() const { return DEFAULT_BLOCK_SIZE; } StorageManager::StorageManager() { } StorageManager::~StorageManager() { } Boolean StorageManager::inheritable() const { return 1; } Boolean StorageManager::resolveRelative(const StringC &, StringC &, Boolean) const { return 1; } Boolean StorageManager::guessIsId(const StringC &, const CharsetInfo &) const { return 0; } Boolean StorageManager::transformNeutral(StringC &, Boolean, Messenger &) const { return 0; } const InputCodingSystem *StorageManager::requiredCodingSystem() const { return 0; } Boolean StorageManager::requiresCr() const { return 0; } const CharsetInfo *StorageManager::idCharset() const { return 0; } const StringC *StorageManager::reString() const { return 0; } IdStorageManager::IdStorageManager(const CharsetInfo *idCharset) : idCharset_(idCharset) { } const CharsetInfo *IdStorageManager::idCharset() const { return idCharset_; } const StringC *IdStorageManager::reString() const { return &reString_; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/StorageObjectPosition.h100444 764 764 1472 6604607572 15422 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef StorageObjectPosition_INCLUDED #define StorageObjectPosition_INCLUDED 1 #include "Boolean.h" #include "types.h" #include "Owner.h" #include "CodingSystem.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct StorageObjectPosition { StorageObjectPosition(); // the number of RSs preceding line 1 of this storage object // or -1 if this hasn't been computed yet. size_t line1RS; Owner decoder; // Does the storage object start with an RS? PackedBoolean startsWithRS; // Were the RSs other than the first in the storage object inserted? PackedBoolean insertedRSs; Offset endOffset; StringC id; }; #ifdef SP_NAMESPACE } #endif #endif /* not StorageObjectPosition_INCLUDED */ jade-1.2.1/lib/StringVectorMessageArg.cxx100444 764 764 1355 6604607572 16105 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "StringVectorMessageArg.h" #include "MessageBuilder.h" #include "ParserMessages.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif StringVectorMessageArg::StringVectorMessageArg(const Vector &v) : v_(v) { } MessageArg *StringVectorMessageArg::copy() const { return new StringVectorMessageArg(*this); } void StringVectorMessageArg::append(MessageBuilder &builder) const { for (size_t i = 0; i < v_.size(); i++) { if (i > 0) builder.appendFragment(ParserMessages::listSep); builder.appendChars(v_[i].data(), v_[i].size()); } } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/StringVectorMessageArg.h100444 764 764 1152 6604607572 15525 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifndef StringVectorMessageArg_INCLUDED #define StringVectorMessageArg_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "MessageArg.h" #include "StringC.h" #include "Vector.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class StringVectorMessageArg : public MessageArg { public: StringVectorMessageArg(const Vector &); MessageArg *copy() const; void append(MessageBuilder &) const; private: Vector v_; }; #ifdef SP_NAMESPACE } #endif #endif /* not StringVectorMessageArg_INCLUDED */ jade-1.2.1/lib/Syntax.cxx100444 764 764 24330 6604607572 13021 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Syntax.h" #include "Sd.h" #include "CharsetInfo.h" #include "ISetIter.h" #include "macros.h" #include "MarkupScan.h" #include "constant.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const int Syntax::referenceQuantity_[] = { 40, 960, 960, 16, 16, 16, 32, 96, 16, 240, 8, 2, 240, 960, 24 }; Syntax::Syntax(const Sd &sd) : generalSubst_(0), entitySubst_(0), categoryTable_(otherCategory), shuncharControls_(0), multicode_(0), markupScanTable_(MarkupScan::normal) { static const char lcletter[] = "abcdefghijklmnopqrstuvwxyz"; static const char ucletter[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int i; for (i = 0; i < 26; i++) { Char lc = sd.execToInternal(lcletter[i]); Char uc = sd.execToInternal(ucletter[i]); set_[nameStart] += lc; set_[nameStart] += uc; set_[minimumData] += lc; set_[minimumData] += uc; set_[significant] += lc; set_[significant] += uc; if (i < 6) { set_[hexDigit] += lc; set_[hexDigit] += uc; } categoryTable_.setChar(lc, nameStartCategory); categoryTable_.setChar(uc, nameStartCategory); subst(lc, uc); } static const char digits[] = "0123456789"; for (i = 0; i < 10; i++) { Char c = sd.execToInternal(digits[i]); set_[digit] += c; set_[hexDigit] += c; set_[minimumData] += c; set_[significant] += c; categoryTable_.setChar(c, digitCategory); } static const char special[] = "'()+,-./:=?"; for (i = 0; special[i] != '\0'; i++) { Char c = sd.execToInternal(special[i]); set_[minimumData] += c; set_[significant] += c; } if (sd.www()) { static const char wwwSpecial[] = { 33, 35, 36, 37, 42, 59, 64, 95, 0 }; for (i = 0; wwwSpecial[i] != '\0'; i++) { const CharsetInfo &charset = sd.internalCharset(); WideChar c; ISet set; if (charset.univToDesc(wwwSpecial[i], c, set) > 0 && c <= Char(-1)) { set_[minimumData] += Char(c); set_[significant] += c; } } } for (i = 0; i < nQuantity; i++) quantity_[i] = referenceQuantity_[i]; for (i = 0; i < 3; i++) standardFunctionValid_[i] = 0; } void Syntax::addNameCharacters(const ISet &set) { ISetIter iter(set); Char min, max; while (iter.next(min, max)) { set_[nmchar].addRange(min, max); set_[significant].addRange(min, max); categoryTable_.setRange(min, max, otherNameCategory); } } void Syntax::addNameStartCharacters(const ISet &set) { ISetIter iter(set); Char min, max; while (iter.next(min, max)) { set_[nameStart].addRange(min, max); set_[significant].addRange(min, max); categoryTable_.setRange(min, max, nameStartCategory); } } void Syntax::addSubst(Char lc, Char uc) { subst(lc, uc); } void Syntax::setStandardFunction(StandardFunction f, Char c) { standardFunction_[f] = c; standardFunctionValid_[f] = 1; set_[minimumData] += c; set_[s] += c; categoryTable_.setChar(c, sCategory); set_[functionChar] += c; set_[significant] += c; switch (f) { case fSPACE: set_[blank] += c; break; case fRE: case fRS: break; } } void Syntax::enterStandardFunctionNames() { static Syntax::ReservedName name[3] = { rRE, rRS, rSPACE }; for (int i = 0; i < 3; i++) if (standardFunctionValid_[i]) functionTable_.insert(reservedName(name[i]), standardFunction_[i]); } void Syntax::setDelimGeneral(int i, const StringC &str) { delimGeneral_[i] = str; for (size_t j = 0; j < str.size(); j++) set_[significant] += str[j]; } void Syntax::addDelimShortref(const StringC &str, const CharsetInfo &charset) { if (str.size() == 1 && str[0] != charset.execToDesc('B') && !isB(str[0])) delimShortrefSimple_.add(str[0]); else delimShortrefComplex_.push_back(str); for (size_t i = 0; i < str.size(); i++) set_[significant] += str[i]; } void Syntax::addDelimShortrefs(const ISet &shortrefChars, const CharsetInfo &charset) { ISetIter blankIter(set_[blank]); Char min, max; StringC specialChars; while (blankIter.next(min, max)) { do { specialChars += min; } while (min++ != max); } specialChars += charset.execToDesc('B'); const ISet *simpleCharsPtr = &shortrefChars; ISet simpleChars; for (size_t i = 0; i < specialChars.size(); i++) if (shortrefChars.contains(specialChars[i])) { if (simpleCharsPtr != &simpleChars) { simpleChars = shortrefChars; simpleCharsPtr = &simpleChars; } simpleChars.remove(specialChars[i]); } ISetIter iter(*simpleCharsPtr); while (iter.next(min, max)) { delimShortrefSimple_.addRange(min, max); set_[significant].addRange(min, max); } } void Syntax::addFunctionChar(const StringC &str, FunctionClass fun, Char c) { switch (fun) { case cFUNCHAR: break; case cSEPCHAR: set_[s] += c; categoryTable_.setChar(c, sCategory); set_[blank] += c; set_[sepchar] += c; break; case cMSOCHAR: multicode_ = 1; markupScanTable_.setChar(c, MarkupScan::out); break; case cMSICHAR: // don't need to do anything special if we just have MSICHARs markupScanTable_.setChar(c, MarkupScan::in); break; case cMSSCHAR: multicode_ = 1; markupScanTable_.setChar(c, MarkupScan::suppress); break; } set_[functionChar] += c; set_[significant] += c; functionTable_.insert(str, c); } void Syntax::setName(int i, const StringC &str) { names_[i] = str; nameTable_.insert(str, i); } void Syntax::setNamecaseGeneral(Boolean b) { namecaseGeneral_ = b; generalSubst_ = b ? &upperSubst_ : &identitySubst_; } void Syntax::setNamecaseEntity(Boolean b) { namecaseEntity_ = b; entitySubst_ = b ? &upperSubst_ : &identitySubst_; } void Syntax::subst(Char from, Char to) { upperSubst_.addSubst(from, to); } void Syntax::addShunchar(Char c) { shunchar_.add(c); } Boolean Syntax::lookupReservedName(const StringC &str, ReservedName *result) const { const int *tem = nameTable_.lookup(str); if (tem) { *result = ReservedName(*tem); return 1; } else return 0; } Boolean Syntax::lookupFunctionChar(const StringC &name, Char *result) const { const Char *p = functionTable_.lookup(name); if (p) { *result = *p; return 1; } else return 0; } #ifdef __GNUG__ typedef HashTableIter Dummy_HashTableIter_StringC_Char; #endif Boolean Syntax::charFunctionName(Char c, const StringC *&name) const { HashTableIter iter(functionTable_); const Char *cp; while (iter.next(name, cp)) if (*cp == c) return 1; return 0; } Boolean Syntax::isValidShortref(const StringC &str) const { if (str.size() == 1 && delimShortrefSimple_.contains(str[0])) return 1; for (size_t i = 0; i < delimShortrefComplex_.size(); i++) if (str == delimShortrefComplex_[i]) return 1; return 0; } void Syntax::implySgmlChar(const Sd &sd) { const CharsetInfo &internalCharset = sd.internalCharset(); internalCharset.getDescSet(set_[sgmlChar]); ISet invalid; checkSgmlChar(sd, 0, 0, invalid); ISetIter iter(invalid); WideChar min, max; while (iter.next(min, max)) { do { if (min <= charMax) set_[sgmlChar].remove(Char(min)); } while (min++ != max); } } void Syntax::checkSgmlChar(const Sd &sd, const ::SP_NAMESPACE_SCOPE Syntax *otherSyntax, Boolean invalidUseDocumentCharset, ISet &invalid) const { ISetIter iter(shunchar_); Char min, max; while (iter.next(min, max)) { if (min <= max) { do { Char c; if (!sd.internalCharsetIsDocCharset()) { UnivChar univ; WideChar tem; ISet set; if (sd.docCharset().descToUniv(min, univ) && sd.internalCharset().univToDesc(univ, tem, set) && tem <= charMax) c = Char(tem); else { const PublicId *base; StringC lit; Number n; CharsetDeclRange::Type type; // If it's a declared but unknown character, // then it can't be significant, if (invalidUseDocumentCharset && sd.docCharsetDecl().getCharInfo(min, base, type, n, lit) && type != CharsetDeclRange::unused) invalid += min; continue; } } else c = min; if (!set_[significant].contains(c) && (!otherSyntax || !otherSyntax->set_[significant].contains(c)) && set_[sgmlChar].contains(c)) invalid += invalidUseDocumentCharset ? min : c; } while (min++ != max); } } if (shuncharControls_) { UnivChar i; const CharsetInfo &charset = invalidUseDocumentCharset ? sd.docCharset() : sd.internalCharset(); for (i = 0; i < 32; i++) checkUnivControlChar(i, charset, otherSyntax, invalid); for (i = 127; i < 160; i++) checkUnivControlChar(i, charset, otherSyntax, invalid); } } void Syntax::checkUnivControlChar(UnivChar univChar, const CharsetInfo &internalCharset, const ::SP_NAMESPACE_SCOPE Syntax *otherSyntax, ISet &invalid) const { WideChar c; ISet set; switch (internalCharset.univToDesc(univChar, c, set)) { case 0: break; case 1: set += c; // fall through default: { ISetIter iter(set); WideChar min, max; while (iter.next(min, max)) { do { if (min > charMax) break; Char ch = Char(min); if (!set_[significant].contains(ch) && (!otherSyntax || !otherSyntax->set_[significant].contains(ch)) && set_[sgmlChar].contains(ch)) invalid += ch; } while (min++ != max); } } } } StringC Syntax::rniReservedName(ReservedName i) const { StringC result = delimGeneral(dRNI); result += reservedName(i); return result; } const SubstTable &Syntax::upperSubstTable() const { return upperSubst_; } const StringC &Syntax::peroDelim() const { return delimGeneral(dPERO); } Boolean Syntax::isHexDigit(Xchar c) const { switch (categoryTable_[c]) { case digitCategory: return 1; case nameStartCategory: break; default: return 0; } return set_[hexDigit].contains(Char(c)); } void Syntax::addEntity(const StringC &name, Char c) { entityNames_.push_back(name); entityChars_ += c; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Text.cxx100444 764 764 22221 6605113630 12440 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Text.h" // for memcmp() #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Text::Text() { } void Text::addChar(Char c, const Location &loc) { if (items_.size() == 0 || items_.back().type != TextItem::data || loc.origin().pointer() != items_.back().loc.origin().pointer() || loc.index() != (items_.back().loc.index() + (chars_.size() - items_.back().index))) { items_.resize(items_.size() + 1); items_.back().loc = loc; items_.back().type = TextItem::data; items_.back().index = chars_.size(); } chars_ += c; } void Text::addChars(const Char *p, size_t length, const Location &loc) { if (items_.size() == 0 || items_.back().type != TextItem::data || loc.origin().pointer() != items_.back().loc.origin().pointer() || loc.index() != (items_.back().loc.index() + (chars_.size() - items_.back().index))) { items_.resize(items_.size() + 1); items_.back().loc = loc; items_.back().type = TextItem::data; items_.back().index = chars_.size(); } chars_.append(p, length); } void Text::addCdata(const StringC &str, const ConstPtr &origin) { addSimple(TextItem::cdata, Location(origin, 0)); chars_.append(str.data(), str.size()); } void Text::addSdata(const StringC &str, const ConstPtr &origin) { addSimple(TextItem::sdata, Location(origin, 0)); chars_.append(str.data(), str.size()); } void Text::addNonSgmlChar(Char c, const Location &loc) { addSimple(TextItem::nonSgml, loc); chars_ += c; } void Text::addCharsTokenize(const Char *str, size_t n, const Location &loc, Char space) { Location loci(loc); // FIXME speed this up for (size_t i = 0; i < n; loci += 1, i++) { if (str[i] == space && (size() == 0 || lastChar() == space)) ignoreChar(str[i], loci); else addChar(str[i], loci); } } void Text::tokenize(Char space, Text &text) const { TextIter iter(*this); TextItem::Type type; const Char *p; size_t n; const Location *loc; while (iter.next(type, p, n, loc)) { switch (type) { case TextItem::data: text.addCharsTokenize(p, n, *loc, space); break; case TextItem::sdata: case TextItem::cdata: { text.addEntityStart(*loc); text.addCharsTokenize(p, n, *loc, space); Location tem(*loc); tem += n; text.addEntityEnd(tem); } break; case TextItem::ignore: text.ignoreChar(*p, *loc); break; default: text.addSimple(type, *loc); break; } } if (text.size() > 0 && text.lastChar() == space) text.ignoreLastChar(); } void Text::addSimple(TextItem::Type type, const Location &loc) { items_.resize(items_.size() + 1); items_.back().loc = loc; items_.back().type = type; items_.back().index = chars_.size(); } void Text::ignoreChar(Char c, const Location &loc) { items_.resize(items_.size() + 1); items_.back().loc = loc; items_.back().type = TextItem::ignore; items_.back().c = c; items_.back().index = chars_.size(); } void Text::ignoreLastChar() { size_t lastIndex = chars_.size() - 1; size_t i; for (i = items_.size() - 1; items_[i].index > lastIndex; i--) ; // lastIndex >= items_[i].index if (items_[i].index != lastIndex) { items_.resize(items_.size() + 1); i++; for (size_t j = items_.size() - 1; j > i; j--) items_[j] = items_[j - 1]; items_[i].index = lastIndex; items_[i].loc = items_[i - 1].loc; items_[i].loc += lastIndex - items_[i - 1].index; } items_[i].c = chars_[chars_.size() - 1]; items_[i].type = TextItem::ignore; for (size_t j = i + 1; j < items_.size(); j++) items_[j].index = lastIndex; chars_.resize(chars_.size() - 1); } // All characters other than spaces are substed. void Text::subst(const SubstTable &table, Char space) { for (size_t i = 0; i < items_.size(); i++) if (items_[i].type == TextItem::data) { size_t lim = (i + 1 < items_.size() ? items_[i + 1].index : chars_.size()); size_t j; for (j = items_[i].index; j < lim; j++) { Char c = chars_[j]; if (c != space && c != table[c]) break; } if (j < lim) { size_t start = items_[i].index; StringC origChars(chars_.data() + start, lim - start); for (; j < lim; j++) if (chars_[j] != space) table.subst(chars_[j]); items_[i].loc = Location(new MultiReplacementOrigin(items_[i].loc, origChars), 0); } } } void Text::clear() { chars_.resize(0); items_.clear(); } Boolean Text::startDelimLocation(Location &loc) const { if (items_.size() == 0 || items_[0].type != TextItem::startDelim) return 0; loc = items_[0].loc; return 1; } Boolean Text::endDelimLocation(Location &loc) const { if (items_.size() == 0) return 0; switch (items_.back().type) { case TextItem::endDelim: case TextItem::endDelimA: break; default: return 0; } loc = items_.back().loc; return 1; } Boolean Text::delimType(Boolean &lita) const { if (items_.size() == 0) return 0; switch (items_.back().type) { case TextItem::endDelim: lita = 0; return 1; case TextItem::endDelimA: lita = 1; return 1; default: break; } return 0; } TextItem::TextItem() { } void Text::swap(Text &to) { items_.swap(to.items_); chars_.swap(to.chars_); } TextIter::TextIter(const Text &text) : ptr_(text.items_.begin()), text_(&text) { } const Char *TextIter::chars(size_t &length) const { if (ptr_->type == TextItem::ignore) { length = 1; return &ptr_->c; } else { const StringC &chars = text_->chars_; size_t charsIndex = ptr_->index; if (ptr_ + 1 != text_->items_.begin() + text_->items_.size()) length = ptr_[1].index - charsIndex; else length = chars.size() - charsIndex; return chars.data() + charsIndex; } } Boolean TextIter::next(TextItem::Type &type, const Char *&str, size_t &length, const Location *&loc) { const TextItem *end = text_->items_.begin() + text_->items_.size(); if (ptr_ == end) return 0; type = ptr_->type; loc = &ptr_->loc; if (type == TextItem::ignore) { str = &ptr_->c; length = 1; } else { const StringC &chars = text_->chars_; size_t charsIndex = ptr_->index; str = chars.data() + charsIndex; if (ptr_ + 1 != end) length = ptr_[1].index - charsIndex; else length = chars.size() - charsIndex; } ptr_++; return 1; } void Text::insertChars(const StringC &s, const Location &loc) { chars_.insert(0, s); items_.resize(items_.size() + 1); for (size_t i = items_.size() - 1; i > 0; i--) { items_[i] = items_[i - 1]; items_[i].index += s.size(); } items_[0].loc = loc; items_[0].type = TextItem::data; items_[0].index = 0; } size_t Text::normalizedLength(size_t normsep) const { size_t n = size(); n += normsep; for (size_t i = 0; i < items_.size(); i++) switch (items_[i].type) { case TextItem::sdata: case TextItem::cdata: n += normsep; break; default: break; } return n; } // This is used to determine for a FIXED CDATA attribute // whether a specified value if equal to the default value. Boolean Text::fixedEqual(const Text &text) const { if (string() != text.string()) return 0; size_t j = 0; for (size_t i = 0; i < items_.size(); i++) switch (items_[i].type) { case TextItem::cdata: case TextItem::sdata: for (;;) { if (j >= text.items_.size()) return 0; if (text.items_[j].type == TextItem::nonSgml) return 0; if (text.items_[j].type == TextItem::cdata || text.items_[j].type == TextItem::sdata) break; j++; } if (text.items_[j].index != items_[i].index || (text.items_[j].loc.origin()->entityDecl() != items_[i].loc.origin()->entityDecl())) return 0; break; case TextItem::nonSgml: for (;;) { if (j >= text.items_.size()) return 0; if (text.items_[j].type == TextItem::cdata || text.items_[j].type == TextItem::sdata) return 0; if (text.items_[j].type == TextItem::nonSgml) break; j++; } if (text.items_[j].index != items_[i].index) return 0; break; default: break; } for (; j < text.items_.size(); j++) switch (text.items_[j].type) { case TextItem::cdata: case TextItem::sdata: case TextItem::nonSgml: return 0; default: break; } return 1; } Boolean Text::charLocation(size_t ind, const ConstPtr *&origin, Index &index) const { // Find the last item whose index <= ind. // Invariant: // indexes < i implies index <= ind // indexes >= lim implies index > ind // The first item will always have index 0. size_t i = 1; size_t lim = items_.size(); while (i < lim) { size_t mid = i + (lim - i)/2; if (items_[mid].index > ind) lim = mid; else i = mid + 1; } #if 0 for (size_t i = 1; i < items_.size(); i++) if (items_[i].index > ind) break; #endif i--; // If items_.size() == 0, then i == lim. if (i < lim) { origin = &items_[i].loc.origin(); index = items_[i].loc.index() + (ind - items_[i].index); } return 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/TokenMessageArg.cxx100444 764 764 5077 6604607572 14541 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "TokenMessageArg.h" #include "MessageBuilder.h" #include "token.h" #include "ParserMessages.h" #include "Mode.h" #include "ModeInfo.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif TokenMessageArg::TokenMessageArg(Token token, Mode mode, const ConstPtr &syntax, const ConstPtr &sd) : token_(token), mode_(mode), syntax_(syntax), sd_(sd) { } MessageArg *TokenMessageArg::copy() const { return new TokenMessageArg(*this); } void TokenMessageArg::append(MessageBuilder &builder) const { // FIXME translate function characters in delimiters into // &#NAME; form. if (token_ >= tokenFirstShortref) { builder.appendFragment(ParserMessages::shortrefDelim); return; } if (token_ == tokenEe) { builder.appendFragment(ParserMessages::entityEnd); return; } ModeInfo iter(mode_, *sd_); TokenInfo info; const MessageFragment *fragment = 0; while (iter.nextToken(&info)) if (info.token == token_) { switch (info.type) { case TokenInfo::delimType: case TokenInfo::delimDelimType: case TokenInfo::delimSetType: { const StringC &delim = syntax_->delimGeneral(info.delim1); builder.appendFragment(ParserMessages::delimStart); builder.appendChars(delim.data(), delim.size()); fragment = &ParserMessages::delimEnd; } break; case TokenInfo::setType: switch (info.set) { case Syntax::digit: fragment = &ParserMessages::digit; break; case Syntax::nameStart: fragment = &ParserMessages::nameStartCharacter; break; case Syntax::sepchar: fragment = &ParserMessages::sepchar; break; case Syntax::s: fragment = &ParserMessages::separator; break; case Syntax::nmchar: fragment = &ParserMessages::nameCharacter; break; case Syntax::sgmlChar: fragment = &ParserMessages::dataCharacter; break; case Syntax::minimumData: fragment = &ParserMessages::minimumDataCharacter; break; case Syntax::significant: fragment = &ParserMessages::significantCharacter; break; default: CANNOT_HAPPEN(); } break; case TokenInfo::functionType: switch (info.function) { case Syntax::fRE: fragment = &ParserMessages::recordEnd; break; case Syntax::fRS: fragment = &ParserMessages::recordStart; break; case Syntax::fSPACE: fragment = &ParserMessages::space; break; } break; } break; } if (fragment) builder.appendFragment(*fragment); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/TokenMessageArg.h100444 764 764 1356 6604607572 14162 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef TokenMessageArg_INCLUDED #define TokenMessageArg_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "MessageArg.h" #include "types.h" #include "Mode.h" #include "Syntax.h" #include "Sd.h" #include "Ptr.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class TokenMessageArg : public MessageArg { public: TokenMessageArg(Token token, Mode mode, const ConstPtr &syntax, const ConstPtr &sd); MessageArg *copy() const; void append(MessageBuilder &) const; private: Token token_; Mode mode_; ConstPtr syntax_; ConstPtr sd_; }; #ifdef SP_NAMESPACE } #endif #endif /* not TokenMessageArg_INCLUDED */ jade-1.2.1/lib/TranslateCodingSystem.cxx100444 764 764 12002 6606574412 16010 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "TranslateCodingSystem.h" #include "types.h" #include "Owner.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class TranslateDecoder : public Decoder { public: TranslateDecoder(Decoder *, const ConstPtr > &); size_t decode(Char *, const char *, size_t, const char **); Boolean convertOffset(unsigned long &offset) const; private: Owner decoder_; ConstPtr > map_; }; TranslateDecoder::TranslateDecoder(Decoder *decoder, const ConstPtr > &map) : Decoder(decoder->minBytesPerChar()), decoder_(decoder), map_(map) { } Boolean TranslateDecoder::convertOffset(unsigned long &offset) const { return decoder_->convertOffset(offset); } size_t TranslateDecoder::decode(Char *to, const char *s, size_t slen, const char **rest) { size_t n = decoder_->decode(to, s, slen, rest); for (size_t i = 0; i < n; i++) to[i] = (*map_)[to[i]]; return n; } // FIXME set unencodeable handler for underlying encoder class TranslateEncoder : public RecoveringEncoder { public: TranslateEncoder(Encoder *, const ConstPtr > &map, Char illegalChar); void output(const Char *, size_t, OutputByteStream *); void output(Char *, size_t, OutputByteStream *); void startFile(OutputByteStream *); private: Owner encoder_; ConstPtr > map_; Char illegalChar_; enum { bufSize = 256 }; Char buf_[bufSize]; }; TranslateEncoder::TranslateEncoder(Encoder *encoder, const ConstPtr > &map, Char illegalChar) : encoder_(encoder), map_(map), illegalChar_(illegalChar) { } void TranslateEncoder::startFile(OutputByteStream *sbuf) { encoder_->startFile(sbuf); } void TranslateEncoder::output(const Char *s, size_t n, OutputByteStream *sbuf) { size_t j = 0; for (; n > 0; s++, n--) { Char c = (*map_)[*s]; if (c == illegalChar_) { if (j > 0) { encoder_->output(buf_, j, sbuf); j = 0; } handleUnencodable(*s, sbuf); } else { if (j >= bufSize) { encoder_->output(buf_, j, sbuf); j = 0; } buf_[j++] = c; } } if (j > 0) encoder_->output(buf_, j, sbuf); } void TranslateEncoder::output(Char *s, size_t n, OutputByteStream *sbuf) { size_t i = 0; for (;;) { if (i == n) { if (n > 0) encoder_->output(s, n, sbuf); break; } Char c = (*map_)[s[i]]; if (c == illegalChar_) { if (i > 0) encoder_->output(s, i, sbuf); handleUnencodable(s[i], sbuf); i++; s += i; n -= i; i = 0; } else s[i++] = c; } } TranslateCodingSystem::TranslateCodingSystem(const CodingSystem *sub, const Desc *desc, const CharsetInfo *charset, Char illegalChar, Char replacementChar) : sub_(sub), desc_(desc), charset_(charset), illegalChar_(illegalChar), replacementChar_(replacementChar) { } Decoder *TranslateCodingSystem::makeDecoder() const { if (decodeMap_.isNull()) { CharMapResource *map = new CharMapResource(replacementChar_); *(ConstPtr > *)&decodeMap_ = map; for (const Desc *d = desc_; d->number != CharsetRegistry::UNREGISTERED; d++) { Owner iter(CharsetRegistry::makeIter(d->number)); if (iter) { WideChar min; WideChar max; UnivChar univ; while (iter->next(min, max, univ)) { do { ISet set; WideChar sysChar; WideChar count; int n = charset_->univToDesc(univ, sysChar, set, count); if (count > (max - min) + 1) count = (max - min) + 1; if (n) { for (WideChar i = 0; i < count; i++) map->setChar(min + d->add + i, sysChar + i); } min += count - 1; univ += count; } while (min++ != max); } } } } return new TranslateDecoder(sub_->makeDecoder(), decodeMap_); } Encoder *TranslateCodingSystem::makeEncoder() const { if (encodeMap_.isNull()) { CharMapResource *map = new CharMapResource(illegalChar_); *(ConstPtr > *)&encodeMap_ = map; for (const Desc *d = desc_; d->number != CharsetRegistry::UNREGISTERED; d++) { Owner iter(CharsetRegistry::makeIter(d->number)); if (iter) { WideChar min; WideChar max; UnivChar univ; while (iter->next(min, max, univ)) { do { ISet set; WideChar sysChar; WideChar count; int n = charset_->univToDesc(univ, sysChar, set, count); if (count > (max - min) + 1) count = (max - min) + 1; if (n) { for (WideChar i = 0; i < count; i++) map->setChar(sysChar + i, min + d->add + i); } min += count - 1; univ += count; } while (min++ != max); } } } } return new TranslateEncoder(sub_->makeEncoder(), encodeMap_, illegalChar_); } unsigned TranslateCodingSystem::fixedBytesPerChar() const { return sub_->fixedBytesPerChar(); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Trie.h100444 764 764 3160 6606574412 12037 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Trie_INCLUDED #define Trie_INCLUDED 1 #include #include "types.h" #include "Boolean.h" #include "Vector.h" #include "CopyOwner.h" #include "Priority.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class BlankTrie; class Trie { public: Trie() : next_(0), nCodes_(0) { } Trie(const Trie &); ~Trie(); Trie &operator=(const Trie &); const Trie *next(int i) const { return &next_[i]; } Boolean hasNext() const { return next_ != 0; } Token token() const { return token_; } int tokenLength() const { return tokenLength_; } const BlankTrie *blank() const; Boolean includeBlanks() const { return Priority::isBlank(priority_); } friend class TrieBuilder; private: Trie *next_; int nCodes_; unsigned short token_; unsigned char tokenLength_; Priority::Type priority_; CopyOwner blank_; }; class BlankTrie : public Trie { public: BlankTrie() { } Boolean codeIsBlank(EquivCode c) const { return codeIsBlank_[c]; } // maximum number of blanks to scan (minimum is 0) size_t maxBlanksToScan() const { return maxBlanksToScan_; } // length to add to tokenLengths in this trie (for those > 0). int additionalLength() const { return additionalLength_; } BlankTrie *copy() const { return new BlankTrie(*this); } private: unsigned char additionalLength_; size_t maxBlanksToScan_; Vector codeIsBlank_; friend class TrieBuilder; }; inline const BlankTrie *Trie::blank() const { return blank_.pointer(); } #ifdef SP_NAMESPACE } #endif #endif /* not Trie_INCLUDED */ jade-1.2.1/lib/TrieBuilder.cxx100444 764 764 14350 6606574412 13744 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "types.h" #include "macros.h" #include "StringOf.h" #include "Trie.h" #include "TrieBuilder.h" #include "Priority.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Trie::~Trie() { if (next_) delete [] next_; } Trie::Trie(const Trie &t) : nCodes_(t.nCodes_), token_(t.token_), tokenLength_(t.tokenLength_), priority_(t.priority_), blank_(t.blank_) { if (t.next_) { next_ = new Trie[nCodes_]; for (int i = 0; i < nCodes_; i++) next_[i] = t.next_[i]; } else next_ = 0; } Trie &Trie::operator=(const Trie &t) { if (next_) delete [] next_; nCodes_ = t.nCodes_; token_ = t.token_; tokenLength_ = t.tokenLength_; priority_ = t.priority_; blank_ = t.blank_; if (t.next_) { next_ = new Trie[nCodes_]; for (int i = 0; i < nCodes_; i++) next_[i] = t.next_[i]; } else next_ = 0; return *this; } TrieBuilder::TrieBuilder(int nCodes) : nCodes_(nCodes), root_(new Trie) { root_->token_ = 0; root_->tokenLength_ = 0; root_->priority_ = Priority::data; root_->nCodes_ = nCodes; } void TrieBuilder::recognize(const String &chars, Token t, Priority::Type priority, TokenVector &ambiguities) { setToken(extendTrie(root_.pointer(), chars), chars.size(), t, priority, ambiguities); } void TrieBuilder::recognize(const String &chars, const String &set, Token t, Priority::Type priority, TokenVector &ambiguities) { Trie *trie = extendTrie(root_.pointer(), chars); for (size_t i = 0; i < set.size(); i++) setToken(forceNext(trie, set[i]), chars.size() + 1, t, priority, ambiguities); } void TrieBuilder::recognizeB(const String &chars, int bSequenceLength, size_t maxBlankSequence, const String &blankCodes, const String &chars2, Token token, TokenVector &ambiguities) { doB(extendTrie(root_.pointer(), chars), chars.size(), bSequenceLength, maxBlankSequence, blankCodes, chars2, token, Priority::blank(bSequenceLength), ambiguities); } void TrieBuilder::recognizeEE(EquivCode code, Token t) { Trie *trie = forceNext(root_.pointer(), code); trie->tokenLength_ = 0; // it has length 0 in the buffer trie->token_ = t; trie->priority_ = Priority::data; } void TrieBuilder::doB(Trie *trie, int tokenLength, int minBLength, size_t maxLength, const String &blankCodes, const String &chars2, Token token, Priority::Type pri, TokenVector &ambiguities) { if (minBLength == 0 && trie->next_ == 0) { if (!trie->blank_) { BlankTrie *b = new BlankTrie; trie->blank_ = b; b->maxBlanksToScan_ = maxLength; b->additionalLength_ = tokenLength; b->codeIsBlank_.assign(nCodes_, 0); for (size_t i = 0; i < blankCodes.size(); i++) b->codeIsBlank_[blankCodes[i]] = 1; b->tokenLength_ = 0; b->token_ = 0; b->priority_ = Priority::data; b->nCodes_ = nCodes_; } else { // A B sequence is not allowed to be adjacent to a character // that can occur in a blank sequence, so maxLength will be // the same at a node, no matter how we got there. ASSERT(trie->blank_->maxBlanksToScan_ == maxLength); ASSERT(trie->blank_->additionalLength_ == tokenLength); } if (chars2.size() == 0) setToken(trie, tokenLength, token, pri, ambiguities); else setToken(extendTrie(trie->blank_.pointer(), chars2), chars2.size(), token, pri, ambiguities); } else { if (minBLength == 0) setToken(extendTrie(trie, chars2), tokenLength + chars2.size(), token, pri, ambiguities); for (size_t i = 0; i < blankCodes.size(); i++) doB(forceNext(trie, blankCodes[i]), tokenLength + 1, minBLength == 0 ? 0 : minBLength - 1, maxLength - 1, blankCodes, chars2, token, pri, ambiguities); } } Trie *TrieBuilder::extendTrie(Trie *trie, const String &s) { for (size_t i = 0; i < s.size(); i++) trie = forceNext(trie, s[i]); return trie; } void TrieBuilder::setToken(Trie *trie, int tokenLength, Token token, Priority::Type pri, TokenVector &ambiguities) { if (tokenLength > trie->tokenLength_ || (tokenLength == trie->tokenLength_ && pri > trie->priority_)) { trie->tokenLength_ = tokenLength; trie->token_ = token; trie->priority_ = pri; } else if (trie->tokenLength_ == tokenLength && trie->priority_ == pri && trie->token_ != token && trie->token_ != 0) { ambiguities.push_back(Token(trie->token_)); ambiguities.push_back(token); } if (trie->hasNext()) { for (int i = 0; i < nCodes_; i++) setToken(&trie->next_[i], tokenLength, token, pri, ambiguities); } } void TrieBuilder::copyInto(Trie *into, const Trie *from, int additionalLength) { if (from->token_ != 0) { TokenVector ambiguities; setToken(into, from->tokenLength_ + additionalLength, from->token_, from->priority_, ambiguities); ASSERT(ambiguities.size() == 0); } if (from->hasNext()) for (int i = 0; i < nCodes_; i++) copyInto(forceNext(into, i), &from->next_[i], additionalLength); } Trie *TrieBuilder::forceNext(Trie *trie, EquivCode c) { if (!trie->hasNext()) { trie->next_ = new Trie[nCodes_]; if (trie->blank_) { trie->blank_->additionalLength_ += 1; trie->blank_->maxBlanksToScan_ -= 1; } Owner blankOwner(trie->blank_.extract()); const BlankTrie *b = blankOwner.pointer(); for (int i = 0; i < nCodes_; i++) { Trie *p = &trie->next_[i]; if (b && b->codeIsBlank(i)) trie->next_[i].blank_ = (blankOwner ? blankOwner.extract() : new BlankTrie(*b)); p->token_ = trie->token_; p->tokenLength_ = trie->tokenLength_; p->priority_ = trie->priority_; p->nCodes_ = nCodes_; } if (b) // -1 because 1 was added above copyInto(trie, b, b->additionalLength_ - 1); } return &trie->next_[c]; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/TrieBuilder.h100444 764 764 3362 6606574412 13352 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef TrieBuilder_INCLUDED #define TrieBuilder_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "types.h" #include "StringOf.h" #include "Owner.h" #include "Trie.h" #include "Vector.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class TrieBuilder { public: typedef Vector TokenVector; TrieBuilder(int nCodes); void recognize(const String &chars, Token t, Priority::Type pri, TokenVector &ambiguities); void recognize(const String &chars, const String &set, Token t, Priority::Type pri, TokenVector &ambiguities); // recognize a delimiter with a blank sequence void recognizeB(const String &chars, int bSequenceLength, // >= 1 size_t maxBlankSequenceLength, const String &blankCodes, const String &chars2, Token t, TokenVector &ambiguities); void recognizeEE(EquivCode code, Token t); Trie *extractTrie() { return root_.extract(); } private: TrieBuilder(const TrieBuilder &); // undefined void operator=(const TrieBuilder &); // undefined void doB(Trie *trie, int tokenLength, int minBLength, size_t maxLength, const String &blankCodes, const String &chars2, Token token, Priority::Type pri, TokenVector &ambiguities); Trie *extendTrie(Trie *, const String &); void setToken(Trie *trie, int tokenLength, Token token, Priority::Type pri, TokenVector &ambiguities); Trie *forceNext(Trie *trie, EquivCode); void copyInto(Trie *, const Trie *, int); int nCodes_; Owner root_; }; #ifdef SP_NAMESPACE } #endif #endif /* not TrieBuilder_INCLUDED */ jade-1.2.1/lib/TypeId.cxx100444 764 764 751 6606574412 12670 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "TypeId.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif int TypeId::isA(TypeId ti) const { if (*this == ti) return 1; for (const void *const *p = bases_; *p; p++) if (TypeId((const void *const *)*p).isA(ti)) return 1; return 0; } int TypeId::canCast(TypeId to, TypeId from) const { return isA(to) && to.isA(from); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/URLStorage.cxx100444 764 764 37273 6606574412 13532 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif // FIXME This implementation won't work on an EBCDIC machine. #include "splib.h" #ifdef WINSOCK #include #define readsocket(s, p, n) ::recv(s, p, n, 0) #define writesocket(s, p, n) ::send(s, p, n, 0) #define errnosocket (WSAGetLastError()) #define SocketMessageArg(n) WinsockMessageArg(n) #define SOCKET_EINTR (WSAEINTR) #define SP_HAVE_SOCKET #else #ifdef SP_HAVE_SOCKET #include #include #include #include #include #ifdef SP_INCLUDE_UNISTD_H #include #endif #ifdef SP_INCLUDE_OSFCN_H #include #endif #ifdef SP_DECLARE_H_ERRNO extern int h_errno; #endif typedef int SOCKET; #define SOCKET_ERROR (-1) #define INVALID_SOCKET (-1) #define SOCKET_EINTR (EINTR) #define closesocket(s) close(s) #define writesocket(fd, p, n) ::write(fd, p, n) #define readsocket(s, p, n) ::read(s, p, n) #define errnosocket (errno) #define SocketMessageArg(n) ErrnoMessageArg(n) #include "ErrnoMessageArg.h" #endif /* SP_HAVE_SOCKET */ #endif /* not WINSOCK */ #include "URLStorage.h" #include "URLStorageMessages.h" #include "RewindStorageObject.h" #include "UnivCharsetDesc.h" #include "MessageArg.h" #include "MessageBuilder.h" #include "macros.h" #include #include #include #include #include #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif static UnivCharsetDesc::Range range = { 0, 128, 0 }; static CharsetInfo iso646Charset(UnivCharsetDesc(&range, 1)); #ifdef SP_HAVE_SOCKET class HttpSocketStorageObject : public RewindStorageObject { public: HttpSocketStorageObject(SOCKET fd, Boolean mayRewind, const StringC &hostStr); ~HttpSocketStorageObject(); Boolean open(const String &path, Messenger &); Boolean read(char *buf, size_t bufSize, Messenger &mgr, size_t &nread); Boolean seekToStart(Messenger &); static SOCKET openHttp(const String &host, unsigned short port, const StringC &hostStr, Messenger &mgr); private: HttpSocketStorageObject(const HttpSocketStorageObject &); // undefined void operator=(const HttpSocketStorageObject &); // undefined Boolean readHeader(Messenger &); Boolean readLine(Messenger &mgr, String &line, String &leftOver); static Boolean parseStatus(const char *&ptr, int &val); StringC hostStr_; String path_; Boolean eof_; SOCKET fd_; }; #ifdef WINSOCK class WinsockMessageArg : public MessageArg { public: WinsockMessageArg(int n) : n_(n) { } MessageArg *copy() const { return new WinsockMessageArg(*this); } void append(MessageBuilder &) const; private: int n_; }; void WinsockMessageArg::append(MessageBuilder &builder) const { // I can't figure out how to get a string associated // with this error number. FormatMessage() doesn't seem // to work. builder.appendFragment(URLStorageMessages::winsockErrorNumber); builder.appendNumber(n_); } class WinsockIniter { public: WinsockIniter(); ~WinsockIniter(); Boolean init(Messenger &mgr); private: Boolean inited_; Boolean initSuccess_; }; static WinsockIniter winsockIniter; WinsockIniter::WinsockIniter() : inited_(0) { } WinsockIniter::~WinsockIniter() { if (inited_ && initSuccess_) (void)WSACleanup(); } Boolean WinsockIniter::init(Messenger &mgr) { if (!inited_) { inited_ = 1; initSuccess_ = 0; WORD version = MAKEWORD(1, 1); WSADATA wsaData; int err = WSAStartup(version, &wsaData); if (err) mgr.message(URLStorageMessages::winsockInitialize, WinsockMessageArg(err)); else if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) { mgr.message(URLStorageMessages::winsockVersion); WSACleanup(); } else initSuccess_ = 1; } return initSuccess_; } #endif /* WINSOCK */ #endif /* SP_HAVE_SOCKET */ URLStorageManager::URLStorageManager(const char *type) : type_(type), IdStorageManager(&iso646Charset) { } const char *URLStorageManager::type() const { return type_; } Boolean URLStorageManager::guessIsId(const StringC &id, const CharsetInfo &charset) const { if (id.size() < 8) return 0; size_t i = 0; for (const char *s = "http://"; *s; s++, i++) if (id[i] != charset.execToDesc(*s) && (!islower(*s) || id[i] != charset.execToDesc(toupper(*s)))) return 0; return 1; } StorageObject *URLStorageManager::makeStorageObject(const StringC &specId, const StringC &baseId, Boolean, Boolean mayRewind, Messenger &mgr, StringC &id) { #ifdef SP_HAVE_SOCKET id = specId; resolveRelative(baseId, id, 0); if (id.size() < 5 || (id[0] != 'h' && id[0] != 'H') || (id[1] != 't' && id[1] != 'T') || (id[2] != 't' && id[2] != 'T') || (id[3] != 'p' && id[3] != 'P') || id[4] != ':') { mgr.message(URLStorageMessages::onlyHTTP); return 0; } if (id.size() < 7 || id[5] != '/' || id[6] != '/') { mgr.message(URLStorageMessages::badRelative, StringMessageArg(id)); return 0; } size_t i = 7; String host; while (i < id.size()) { if (id[i] == '/') break; if (id[i] == ':') break; host += char(id[i]); i++; } if (host.size() == 0) { mgr.message(URLStorageMessages::emptyHost, StringMessageArg(id)); return 0; } unsigned short port; if (i < id.size() && id[i] == ':') { i++; String digits; while (i < id.size() && id[i] != '/') { digits += char(id[i]); i++; } if (digits.size() == 0) { mgr.message(URLStorageMessages::emptyPort, StringMessageArg(id)); return 0; } digits += '\0'; char *endptr; long n = strtol(digits.data(), &endptr, 10); if (endptr != digits.data() + digits.size() - 1 || n < 0 || n > 65535L) { mgr.message(URLStorageMessages::invalidPort, StringMessageArg(id)); return 0; } port = (unsigned short)n; } else port = 80; String path; if (i < id.size()) { while (i < id.size() && id[i] != '#') { path += char(id[i]); i++; } } if (path.size() == 0) path += '/'; StringC hostStr; for (i = 0; i < host.size(); i++) hostStr += host[i]; host += '\0'; SOCKET fd = HttpSocketStorageObject::openHttp(host, port, hostStr, mgr); if (fd == INVALID_SOCKET) return 0; HttpSocketStorageObject *p = new HttpSocketStorageObject(fd, mayRewind, hostStr); if (!p->open(path, mgr)) { delete p; return 0; } return p; #else /* not SP_HAVE_SOCKET */ ParentLocationMessenger(mgr).message(URLStorageMessages::notSupported); return 0; #endif /* not SP_HAVE_SOCKET */ } Boolean URLStorageManager::resolveRelative(const StringC &baseId, StringC &id, Boolean) const { static const char schemeChars[] = "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "01234567879" "+-."; size_t i; // If it has a scheme, it is absolute. for (i = 0; i < id.size(); i++) { if (id[i] == ':') { if (i == 0) break; else return 1; } else if (!strchr(schemeChars, id[i])) break; } for (i = 0; i < id.size(); i++) { if (id[i] != '/') break; } size_t slashCount = i; if (slashCount > 0) { Boolean foundSameSlash = 0; size_t sameSlashPos; for (size_t j = 0; j < baseId.size(); j++) { size_t thisSlashCount = 0; for (size_t k = j; k < baseId.size() && baseId[k] == '/'; k++) thisSlashCount++; if (thisSlashCount == slashCount && !foundSameSlash) { foundSameSlash = 1; sameSlashPos = j; } else if (thisSlashCount > slashCount) foundSameSlash = 0; } if (foundSameSlash) { StringC tem(baseId.data(), sameSlashPos); tem += id; tem.swap(id); } } else { size_t j; for (j = baseId.size(); j > 0; j--) if (baseId[j - 1] == '/') break; if (j > 0) { StringC tem(baseId.data(), j); tem += id; tem.swap(id); } } // FIXME remove xxx/../, and /. return 1; } Boolean URLStorageManager::transformNeutral(StringC &str, Boolean fold, Messenger &) const { if (fold) for (size_t i = 0; i < str.size(); i++) { Char c = str[i]; if (c <= (unsigned char)-1) str[i] = tolower(str[i]); } return 1; } #ifdef SP_HAVE_SOCKET SOCKET HttpSocketStorageObject::openHttp(const String &host, unsigned short port, const StringC &hostStr, Messenger &mgr) { #ifdef WINSOCK if (!winsockIniter.init(mgr)) return INVALID_SOCKET; #endif struct sockaddr_in sock; sock.sin_family = AF_INET; sock.sin_port = htons(port); if (isdigit((unsigned char)host[0])) { unsigned long n = inet_addr(host.data()); if (n == (unsigned long)-1) { ParentLocationMessenger(mgr).message(URLStorageMessages::invalidHostNumber, StringMessageArg(hostStr)); return INVALID_SOCKET; } sock.sin_addr.s_addr = n; } else { struct hostent *hp = gethostbyname(host.data()); if (!hp) { const MessageType1 *message; switch (h_errno) { case HOST_NOT_FOUND: message = &URLStorageMessages::hostNotFound; break; case TRY_AGAIN: message = &URLStorageMessages::hostTryAgain; break; case NO_RECOVERY: message = &URLStorageMessages::hostNoRecovery; break; case NO_DATA: #ifdef NO_ADDRESS #if NO_ADDRESS != NO_DATA case NO_ADDRESS: #endif #endif message = &URLStorageMessages::hostNoData; break; default: #ifdef WINSOCK ParentLocationMessenger(mgr).message(URLStorageMessages::hostOtherError, StringMessageArg(hostStr), WinsockMessageArg(h_errno)); return INVALID_SOCKET; #else message = &URLStorageMessages::hostUnknownError; break; #endif } ParentLocationMessenger(mgr).message(*message, StringMessageArg(hostStr)); return INVALID_SOCKET; } memcpy(&sock.sin_addr, hp->h_addr, hp->h_length); } SOCKET fd = socket(PF_INET, SOCK_STREAM, 0); if (fd == INVALID_SOCKET) { ParentLocationMessenger(mgr).message(URLStorageMessages::cannotCreateSocket, SocketMessageArg(errnosocket)); return INVALID_SOCKET; } if (connect(fd, (struct sockaddr *)&sock, sizeof(sock)) == SOCKET_ERROR) { ParentLocationMessenger(mgr).message(URLStorageMessages::cannotConnect, StringMessageArg(hostStr), SocketMessageArg(errnosocket)); (void)closesocket(fd); return INVALID_SOCKET; } return fd; } HttpSocketStorageObject::HttpSocketStorageObject(SOCKET fd, Boolean mayRewind, const StringC &hostStr) : RewindStorageObject(mayRewind, 0), hostStr_(hostStr), fd_(fd), eof_(0) { } HttpSocketStorageObject::~HttpSocketStorageObject() { if (fd_ != INVALID_SOCKET) (void)closesocket(fd_); } Boolean HttpSocketStorageObject::open(const String &path, Messenger &mgr) { path_ = path; String request; request.append("GET ", 4); request += path_; request += ' '; request.append("HTTP/1.0\r\n", 10); request.append("Accept: */*\r\n", 13); request.append("\r\n", 2); // FIXME check length of write if (writesocket(fd_, request.data(), request.size()) == SOCKET_ERROR) { ParentLocationMessenger(mgr).message(URLStorageMessages::writeError, StringMessageArg(hostStr_), SocketMessageArg(errnosocket)); (void)closesocket(fd_); fd_ = INVALID_SOCKET; return 0; } if (!readHeader(mgr)) { (void)closesocket(fd_); fd_ = INVALID_SOCKET; return 0; } return 1; } Boolean HttpSocketStorageObject::readHeader(Messenger &mgr) { String buf; String leftOver; if (!readLine(mgr, buf, leftOver)) return 0; buf += '\0'; const char *ptr = &buf[0]; int val; if (!parseStatus(ptr, val)) { if (buf.size() > 0) unread(buf.data(), buf.size() - 1); return 1; } if (val < 200 || val >= 300) { StringC reason; while (*ptr && *ptr != '\n' && *ptr != '\r') { reason += Char(*ptr); ptr++; } StringC pathStr; for (size_t i = 0; i < path_.size(); i++) pathStr += path_[i]; ParentLocationMessenger(mgr).message(URLStorageMessages::getFailed, StringMessageArg(hostStr_), StringMessageArg(pathStr), StringMessageArg(reason)); return 0; } for (;;) { if (!readLine(mgr, buf, leftOver)) return 0; if (buf.size() == 0 || buf[0] == '\r' || buf[0] == '\n') break; } if (leftOver.size()) unread(leftOver.data(), leftOver.size()); return 1; } // Status line must start with: "HTTP/" 1*DIGIT "." 1*DIGIT SP 3DIGIT SP Boolean HttpSocketStorageObject::parseStatus(const char *&ptr, int &val) { static const char ver[] = "HTTP/"; for (const char *v = ver; *v; v++, ptr++) if (*v != *ptr) return 0; if (!isdigit((unsigned char)*ptr)) return 0; do { ++ptr; } while (isdigit((unsigned char)*ptr)); if (*ptr != '.') return 0; ptr++; if (!isdigit((unsigned char)*ptr)) return 0; do { ++ptr; } while (isdigit((unsigned char)*ptr)); if (*ptr != ' ') return 0; ptr++; val = 0; for (int i = 0; i < 3; i++, ptr++) { if (!isdigit((unsigned char)*ptr)) return 0; val = val*10 + *ptr - '0'; } if (*ptr != ' ') return 0; ptr++; return 1; } // True will be returned for an empty line. Boolean HttpSocketStorageObject::readLine(Messenger &mgr, String &line, String &leftOver) { line.resize(0); Boolean hadCr = 0; Boolean gotLine = 0; size_t li; for (li = 0; li < leftOver.size(); li++) { if (leftOver[li] == '\r') { if (hadCr) { gotLine = 1; break; } line += '\r'; hadCr = 1; } else if (leftOver[li] == '\n') { line += '\n'; li++; gotLine = 1; break; } else if (hadCr) { gotLine = 1; break; } else line += leftOver[li]; } if (gotLine) { for (size_t i = li; i < leftOver.size(); i++) leftOver[i - li] = leftOver[i]; leftOver.resize(leftOver.size() - li); return 1; } leftOver.resize(0); if (eof_) return 1; for (;;) { char c; long n; do { n = readsocket(fd_, &c, 1); } while (n < 0 && errnosocket == SOCKET_EINTR); if (n == 0) { (void)closesocket(fd_); eof_ = 1; return 1; } if (n < 0) { ParentLocationMessenger(mgr).message(URLStorageMessages::readError, StringMessageArg(hostStr_), SocketMessageArg(errnosocket)); (void)closesocket(fd_); fd_ = INVALID_SOCKET; return 0; } switch (c) { case '\r': if (hadCr) { leftOver += c; return 1; } hadCr = 1; line += c; break; case '\n': line += c; return 1; default: if (hadCr) { leftOver += c; return 1; } line += c; break; } } return 0; // not reached } Boolean HttpSocketStorageObject::read(char *buf, size_t bufSize, Messenger &mgr, size_t &nread) { if (readSaved(buf, bufSize, nread)) return 1; if (fd_ == INVALID_SOCKET || eof_) return 0; long n; do { n = readsocket(fd_, buf, bufSize); } while (n < 0 && errnosocket == SOCKET_EINTR); if (n > 0) { nread = size_t(n); saveBytes(buf, nread); return 1; } if (n < 0) { ParentLocationMessenger(mgr).message(URLStorageMessages::readError, StringMessageArg(hostStr_), SocketMessageArg(errnosocket)); fd_ = INVALID_SOCKET; } else { eof_ = 1; if (closesocket(fd_) == SOCKET_ERROR) ParentLocationMessenger(mgr).message(URLStorageMessages::closeError, StringMessageArg(hostStr_), SocketMessageArg(errnosocket)); fd_ = INVALID_SOCKET; } return 0; } Boolean HttpSocketStorageObject::seekToStart(Messenger &) { CANNOT_HAPPEN(); return 0; } #endif /* SP_HAVE_SOCKET */ #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/URLStorageMessages.msg100444 764 764 2323 6606574412 15152 0ustar jjcjjc# Copyright (c) 1995 James Clark # See the file COPYING for copying permission. # URLStorage message definitions =2300 E1+emptyHost++empty host in HTTP URL %1 E1+badRelative++uncompletable relative HTTP URL %1 E1+emptyPort++empty port number in HTTP URL %1 E1+invalidPort++invalid port number in HTTP URL %1 E1+hostNotFound++host %1 not found E1+hostTryAgain++could not resolve host %1 (try again later) E1+hostNoRecovery++could not resolve host %1 (unrecoverable error) E1+hostNoData++no address record for host name %1 E2+hostOtherError++could not resolve host %1 (%2) E1+hostUnknownError++could not resolve host %1 (unknown error) E1+cannotCreateSocket++cannot create socket (%1) E2+cannotConnect++error connecting to %1 (%2) E2+writeError++error sending request to %1 (%2) E2+readError++error receiving from host %1 (%2) E2+closeError++error closing connection to host %1 (%2) E1+invalidHostNumber++invalid host number %1 E3+getFailed++could not get %2 from %1 (reason given was %3) E0+notSupported++URL not supported by this version E0+onlyHTTP++only HTTP scheme supported E1+winsockInitialize++could not initialize Windows Sockets (%1) E0+winsockVersion++incompatible Windows Sockets version +winsockErrorNumber++error number jade-1.2.1/lib/URLStorageMessages.rc100444 764 764 1717 6606636234 14777 0ustar jjcjjcSTRINGTABLE BEGIN 2300, "empty host in HTTP URL %1" 2301, "uncompletable relative HTTP URL %1" 2302, "empty port number in HTTP URL %1" 2303, "invalid port number in HTTP URL %1" 2304, "host %1 not found" 2305, "could not resolve host %1 (try again later)" 2306, "could not resolve host %1 (unrecoverable error)" 2307, "no address record for host name %1" 2308, "could not resolve host %1 (%2)" 2309, "could not resolve host %1 (unknown error)" 2310, "cannot create socket (%1)" 2311, "error connecting to %1 (%2)" 2312, "error sending request to %1 (%2)" 2313, "error receiving from host %1 (%2)" 2314, "error closing connection to host %1 (%2)" 2315, "invalid host number %1" 2316, "could not get %2 from %1 (reason given was %3)" 2317, "URL not supported by this version" 2318, "only HTTP scheme supported" 2319, "could not initialize Windows Sockets (%1)" 2320, "incompatible Windows Sockets version" 2321, "error number " END jade-1.2.1/lib/URLStorageMessages.h100444 764 764 14754 6606636234 14647 0ustar jjcjjc// This file was automatically generated from .\URLStorageMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct URLStorageMessages { // 2300 static const MessageType1 emptyHost; // 2301 static const MessageType1 badRelative; // 2302 static const MessageType1 emptyPort; // 2303 static const MessageType1 invalidPort; // 2304 static const MessageType1 hostNotFound; // 2305 static const MessageType1 hostTryAgain; // 2306 static const MessageType1 hostNoRecovery; // 2307 static const MessageType1 hostNoData; // 2308 static const MessageType2 hostOtherError; // 2309 static const MessageType1 hostUnknownError; // 2310 static const MessageType1 cannotCreateSocket; // 2311 static const MessageType2 cannotConnect; // 2312 static const MessageType2 writeError; // 2313 static const MessageType2 readError; // 2314 static const MessageType2 closeError; // 2315 static const MessageType1 invalidHostNumber; // 2316 static const MessageType3 getFailed; // 2317 static const MessageType0 notSupported; // 2318 static const MessageType0 onlyHTTP; // 2319 static const MessageType1 winsockInitialize; // 2320 static const MessageType0 winsockVersion; // 2321 static const MessageFragment winsockErrorNumber; }; const MessageType1 URLStorageMessages::emptyHost( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2300 #ifndef SP_NO_MESSAGE_TEXT ,"empty host in HTTP URL %1" #endif ); const MessageType1 URLStorageMessages::badRelative( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2301 #ifndef SP_NO_MESSAGE_TEXT ,"uncompletable relative HTTP URL %1" #endif ); const MessageType1 URLStorageMessages::emptyPort( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2302 #ifndef SP_NO_MESSAGE_TEXT ,"empty port number in HTTP URL %1" #endif ); const MessageType1 URLStorageMessages::invalidPort( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2303 #ifndef SP_NO_MESSAGE_TEXT ,"invalid port number in HTTP URL %1" #endif ); const MessageType1 URLStorageMessages::hostNotFound( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2304 #ifndef SP_NO_MESSAGE_TEXT ,"host %1 not found" #endif ); const MessageType1 URLStorageMessages::hostTryAgain( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2305 #ifndef SP_NO_MESSAGE_TEXT ,"could not resolve host %1 (try again later)" #endif ); const MessageType1 URLStorageMessages::hostNoRecovery( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2306 #ifndef SP_NO_MESSAGE_TEXT ,"could not resolve host %1 (unrecoverable error)" #endif ); const MessageType1 URLStorageMessages::hostNoData( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2307 #ifndef SP_NO_MESSAGE_TEXT ,"no address record for host name %1" #endif ); const MessageType2 URLStorageMessages::hostOtherError( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2308 #ifndef SP_NO_MESSAGE_TEXT ,"could not resolve host %1 (%2)" #endif ); const MessageType1 URLStorageMessages::hostUnknownError( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2309 #ifndef SP_NO_MESSAGE_TEXT ,"could not resolve host %1 (unknown error)" #endif ); const MessageType1 URLStorageMessages::cannotCreateSocket( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2310 #ifndef SP_NO_MESSAGE_TEXT ,"cannot create socket (%1)" #endif ); const MessageType2 URLStorageMessages::cannotConnect( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2311 #ifndef SP_NO_MESSAGE_TEXT ,"error connecting to %1 (%2)" #endif ); const MessageType2 URLStorageMessages::writeError( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2312 #ifndef SP_NO_MESSAGE_TEXT ,"error sending request to %1 (%2)" #endif ); const MessageType2 URLStorageMessages::readError( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2313 #ifndef SP_NO_MESSAGE_TEXT ,"error receiving from host %1 (%2)" #endif ); const MessageType2 URLStorageMessages::closeError( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2314 #ifndef SP_NO_MESSAGE_TEXT ,"error closing connection to host %1 (%2)" #endif ); const MessageType1 URLStorageMessages::invalidHostNumber( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2315 #ifndef SP_NO_MESSAGE_TEXT ,"invalid host number %1" #endif ); const MessageType3 URLStorageMessages::getFailed( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2316 #ifndef SP_NO_MESSAGE_TEXT ,"could not get %2 from %1 (reason given was %3)" #endif ); const MessageType0 URLStorageMessages::notSupported( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2317 #ifndef SP_NO_MESSAGE_TEXT ,"URL not supported by this version" #endif ); const MessageType0 URLStorageMessages::onlyHTTP( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2318 #ifndef SP_NO_MESSAGE_TEXT ,"only HTTP scheme supported" #endif ); const MessageType1 URLStorageMessages::winsockInitialize( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2319 #ifndef SP_NO_MESSAGE_TEXT ,"could not initialize Windows Sockets (%1)" #endif ); const MessageType0 URLStorageMessages::winsockVersion( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2320 #ifndef SP_NO_MESSAGE_TEXT ,"incompatible Windows Sockets version" #endif ); const MessageFragment URLStorageMessages::winsockErrorNumber( #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2321 #ifndef SP_NO_MESSAGE_TEXT ,"error number " #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/UTF8CodingSystem.cxx100444 764 764 12611 6606574412 14607 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MULTI_BYTE #include "UTF8CodingSystem.h" #include "constant.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif enum { // cmaskN is mask for first byte to test for N byte sequence cmask1 = 0x80, cmask2 = 0xe0, cmask3 = 0xf0, cmask4 = 0xf8, cmask5 = 0xfc, cmask6 = 0xfe, // cvalN is value of masked first byte of N byte sequence cval1 = 0x00, cval2 = 0xc0, cval3 = 0xe0, cval4 = 0xf0, cval5 = 0xf8, cval6 = 0xfc, // vmaskN is mask to get value from first byte in N byte sequence vmask2 = 0x1f, vmask3 = 0xf, vmask4 = 0x7, vmask5 = 0x3, vmask6 = 0x1, // minN is minimum legal resulting value for N byte sequence min2 = 0x80, min3 = 0x800, min4 = 0x10000, min5 = 0x200000, min6 = 0x4000000, max6 = 0x7fffffff }; class UTF8Decoder : public Decoder { public: UTF8Decoder(); size_t decode(Char *, const char *, size_t, const char **); private: // value for encoding error enum { invalid = 0xfffd }; Boolean recovering_; }; class UTF8Encoder : public Encoder { public: UTF8Encoder(); void output(const Char *, size_t, OutputByteStream *); }; Decoder *UTF8CodingSystem::makeDecoder() const { return new UTF8Decoder; } Encoder *UTF8CodingSystem::makeEncoder() const { return new UTF8Encoder; } UTF8Decoder::UTF8Decoder() : recovering_(0) { } size_t UTF8Decoder::decode(Char *to, const char *s, size_t slen, const char **result) { Char *start = to; const unsigned char *us = (const unsigned char *)s; if (recovering_) { recovering_ = 0; goto recover; } while (slen > 0) { unsigned c0; c0 = us[0]; if ((c0 & cmask1) == cval1) { *to++ = c0; us++; slen--; } else if ((c0 & cmask2) == cval2) { if (slen < 2) goto done; unsigned c1 = us[1] ^ 0x80; if (c1 & 0xc0) goto error; unsigned c = ((c0 & vmask2) << 6) | c1; if (c < min2) c = invalid; *to++ = c; slen -= 2; us += 2; } else if ((c0 & cmask3) == cval3) { if (slen < 3) goto done; unsigned c1 = us[1] ^ 0x80; unsigned c2 = us[2] ^ 0x80; if ((c1 | c2) & 0xc0) goto error; unsigned c = ((((c0 & vmask3) << 6) | c1) << 6) | c2; if (c < min3) c = invalid; *to++ = c; slen -= 3; us += 3; } else if ((c0 & cmask4) == cval4) { if (slen < 4) goto done; unsigned c1 = us[1] ^ 0x80; unsigned c2 = us[2] ^ 0x80; unsigned c3 = us[3] ^ 0x80; if ((c1 | c2 | c3) & 0xc0) goto error; if (charMax < min5 - 1) *to++ = invalid; else { unsigned long c = ((((c0 & vmask4) << 6) | c1) << 6) | c2; c = (c << 6) | c3; if (c < min4) c = invalid; *to++ = c; } slen -= 4; us += 4; } else if ((c0 & cmask5) == cval5) { if (slen < 5) goto done; unsigned c1 = us[1] ^ 0x80; unsigned c2 = us[2] ^ 0x80; unsigned c3 = us[3] ^ 0x80; unsigned c4 = us[4] ^ 0x80; if ((c1 | c2 | c3 | c4) & 0xc0) goto error; if (charMax < min6 - 1) *to++ = invalid; else { unsigned long c = ((((c0 & vmask5) << 6) | c1) << 6) | c2; c = (((c << 6) | c3) << 6) | c4; if (c < min5) c = invalid; *to++ = c; } slen -= 5; us += 5; } else if ((c0 & cmask6) == cval6) { if (slen < 6) goto done; unsigned c1 = us[1] ^ 0x80; unsigned c2 = us[2] ^ 0x80; unsigned c3 = us[3] ^ 0x80; unsigned c4 = us[4] ^ 0x80; unsigned c5 = us[5] ^ 0x80; if ((c1 | c2 | c3 | c4 | c5) & 0xc0) goto error; if (charMax < max6) *to++ = invalid; else { unsigned long c = ((((c0 & vmask6) << 6) | c1) << 6) | c2; c = (((((c << 6) | c3) << 6) | c4) << 6) | c5; if (c < min6) c = invalid; *to++ = c; } slen -= 6; us += 6; } else { error: us++; slen--; *to++ = invalid; recover: for (;;) { if (slen == 0) { recovering_ = 1; goto done; } if ((*us & 0xc0) != 0x80) break; us++; slen--; } } } done: *result = (char *)us; return to - start; } UTF8Encoder::UTF8Encoder() { } void UTF8Encoder::output(const Char *s, size_t n, OutputByteStream *sb) { for (; n > 0; s++, n--) { Char c = *s; if (c < min2) sb->sputc((unsigned char)c); else if (c < min3) { sb->sputc((c >> 6) | cval2); sb->sputc((c & 0x3f) | 0x80); } else if (c < min4) { sb->sputc((c >> 12) | cval3); sb->sputc(((c >> 6) & 0x3f) | 0x80); sb->sputc((c & 0x3f) | 0x80); } else if (c < min5) { sb->sputc((c >> 18) | cval4); sb->sputc(((c >> 12) & 0x3f) | 0x80); sb->sputc(((c >> 6) & 0x3f) | 0x80); sb->sputc((c & 0x3f) | 0x80); } else if (c < min6) { sb->sputc((c >> 24) | cval5); sb->sputc(((c >> 18) & 0x3f) | 0x80); sb->sputc(((c >> 12) & 0x3f) | 0x80); sb->sputc(((c >> 6) & 0x3f) | 0x80); sb->sputc((c & 0x3f) | 0x80); } else if (c <= max6) { sb->sputc((c >> 30) | cval6); sb->sputc(((c >> 24) & 0x3f) | 0x80); sb->sputc(((c >> 18) & 0x3f) | 0x80); sb->sputc(((c >> 12) & 0x3f) | 0x80); sb->sputc(((c >> 6) & 0x3f) | 0x80); sb->sputc((c & 0x3f) | 0x80); } } } #ifdef SP_NAMESPACE } #endif #else /* not SP_MULTI_BYTE */ #ifndef __GNUG__ static char non_empty_translation_unit; // sigh #endif #endif /* not SP_MULTI_BYTE */ jade-1.2.1/lib/Undo.cxx100444 764 764 1353 6606574412 12416 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "Undo.h" #include "ParserState.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Undo::Undo() { } Undo::~Undo() { } UndoTransition::UndoTransition(const MatchState &state) : state_(state) { } void UndoTransition::undo(ParserState *parser) { parser->currentElement().setMatchState(state_); } UndoStartTag::UndoStartTag() { } void UndoStartTag::undo(ParserState *parser) { parser->popElement(); } UndoEndTag::UndoEndTag(OpenElement *e) : element_(e) { } void UndoEndTag::undo(ParserState *parser) { parser->pushElement(element_.extract()); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Undo.h100444 764 764 3140 6606574412 12037 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef Undo_INCLUDED #define Undo_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Link.h" #include "ContentToken.h" #include "OpenElement.h" #include "Allocator.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class ParserState; class Event; class Undo : public Link { public: void *operator new(size_t sz, Allocator &alloc) { return alloc.alloc(sz); } void *operator new(size_t sz) { return Allocator::allocSimple(sz); } void operator delete(void *p) { Allocator::free(p); } #ifdef SP_HAVE_PLACEMENT_OPERATOR_DELETE void operator delete(void *p, Allocator &) { Allocator::free(p); } #endif Undo(); virtual ~Undo(); virtual void undo(ParserState *) = 0; private: Undo(const Undo &); // undefined void operator=(const Undo &); // undefined }; class UndoTransition : public Undo { public: UndoTransition(const MatchState &); void undo(ParserState *); private: UndoTransition(const UndoTransition &); // undefined void operator=(const UndoTransition &); // undefined MatchState state_; }; class UndoStartTag : public Undo { public: UndoStartTag(); void undo(ParserState *); private: UndoStartTag(const UndoStartTag &); // undefined void operator=(const UndoStartTag &); // undefined }; class UndoEndTag : public Undo { public: UndoEndTag(OpenElement *); void undo(ParserState *); private: UndoEndTag(const UndoEndTag &); // undefined void operator=(const UndoEndTag &); // undefined Owner element_; }; #ifdef SP_NAMESPACE } #endif #endif /* not Undo_INCLUDED */ jade-1.2.1/lib/UnicodeCodingSystem.cxx100444 764 764 10617 6606574412 15453 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MULTI_BYTE #include "UnicodeCodingSystem.h" #include "macros.h" #include "Owner.h" #include #include #ifdef DECLARE_MEMMOVE extern "C" { void *memmove(void *, const void *, size_t); } #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const unsigned short byteOrderMark = 0xfeff; const unsigned short swappedByteOrderMark = 0xfffe; class UnicodeDecoder : public Decoder { public: UnicodeDecoder(const InputCodingSystem *sub); size_t decode(Char *to, const char *from, size_t fromLen, const char **rest); Boolean convertOffset(unsigned long &offset) const; private: PackedBoolean hadFirstChar_; PackedBoolean hadByteOrderMark_; PackedBoolean swapBytes_; Owner subDecoder_; const InputCodingSystem *subCodingSystem_; }; class UnicodeEncoder : public Encoder { public: UnicodeEncoder(); ~UnicodeEncoder(); void output(Char *, size_t, OutputByteStream *); void output(const Char *, size_t, OutputByteStream *); void startFile(OutputByteStream *); private: void allocBuf(size_t); unsigned short *buf_; size_t bufSize_; }; UnicodeCodingSystem::UnicodeCodingSystem(const InputCodingSystem *sub) : sub_(sub) { } Decoder *UnicodeCodingSystem::makeDecoder() const { return new UnicodeDecoder(sub_); } Encoder *UnicodeCodingSystem::makeEncoder() const { return new UnicodeEncoder; } unsigned UnicodeCodingSystem::fixedBytesPerChar() const { return 2; } UnicodeDecoder::UnicodeDecoder(const InputCodingSystem *subCodingSystem) : Decoder(subCodingSystem ? 1 : 2), subCodingSystem_(subCodingSystem), hadByteOrderMark_(0), hadFirstChar_(0), swapBytes_(0) { } size_t UnicodeDecoder::decode(Char *to, const char *from, size_t fromLen, const char **rest) { union U { unsigned short word; char bytes[2]; }; if (subDecoder_) return subDecoder_->decode(to, from, fromLen, rest); if (!hadFirstChar_) { if (fromLen < 2) { *rest = from; return 0; } hadFirstChar_ = 1; minBytesPerChar_ = 2; U u; u.bytes[0] = from[0]; u.bytes[1] = from[1]; if (u.word == byteOrderMark) { hadByteOrderMark_ = 1; from += 2; fromLen -= 2; } else if (u.word == swappedByteOrderMark) { hadByteOrderMark_ = 1; from += 2; fromLen -= 2; swapBytes_ = 1; } else if (subCodingSystem_) { subDecoder_ = subCodingSystem_->makeDecoder(); minBytesPerChar_ = subDecoder_->minBytesPerChar(); return subDecoder_->decode(to, from, fromLen, rest); } } fromLen &= ~1; *rest = from + fromLen; if (sizeof(Char) == 2) { if (!swapBytes_) { if (from != (char *)to) memmove(to, from, fromLen); return fromLen/2; } } if (swapBytes_) { for (size_t n = fromLen; n > 0; n -= 2) { U u; u.bytes[1] = *from++; u.bytes[0] = *from++; *to++ = u.word; } } else { for (size_t n = fromLen; n > 0; n -= 2) { U u; u.bytes[0] = *from++; u.bytes[1] = *from++; *to++ = u.word; } } return fromLen/2; } Boolean UnicodeDecoder::convertOffset(unsigned long &n) const { if (subDecoder_) return subDecoder_->convertOffset(n); if (hadByteOrderMark_) n += 1; n *= 2; return true; } UnicodeEncoder::UnicodeEncoder() : buf_(0), bufSize_(0) { } UnicodeEncoder::~UnicodeEncoder() { delete [] buf_; } void UnicodeEncoder::allocBuf(size_t n) { if (bufSize_ < n) { delete [] buf_; buf_ = new unsigned short[bufSize_ = n]; } } void UnicodeEncoder::startFile(OutputByteStream *sb) { const unsigned short n = byteOrderMark; sb->sputn((char *)&n, 2); } void UnicodeEncoder::output(Char *s, size_t n, OutputByteStream *sb) { if (sizeof(Char) == 2) { sb->sputn((char *)s, n*2); return; } ASSERT(sizeof(Char) >= 2); unsigned short *p = (unsigned short *)s; for (size_t i = 0; i < n; i++) p[i] = s[i] & 0xffff; sb->sputn((char *)s, n*2); } void UnicodeEncoder::output(const Char *s, size_t n, OutputByteStream *sb) { if (sizeof(Char) == 2) { sb->sputn((char *)s, n*2); return; } allocBuf(n); for (size_t i = 0; i < n; i++) buf_[i] = s[i] & 0xffff; sb->sputn((char *)buf_, n*2); } #ifdef SP_NAMESPACE } #endif #else /* not SP_MULTI_BYTE */ #ifndef __GNUG__ static char non_empty_translation_unit; // sigh #endif #endif /* not SP_MULTI_BYTE */ jade-1.2.1/lib/UnivCharsetDesc.cxx100444 764 764 10251 6606574412 14560 0ustar jjcjjc// Copyright (c) 1994, 1997 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #include "UnivCharsetDesc.h" #include "macros.h" #include "constant.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif UnivCharsetDesc::UnivCharsetDesc() : charMap_(unsigned(1) << 31) { } UnivCharsetDesc::UnivCharsetDesc(const Range *p, size_t n) : charMap_(unsigned(1) << 31) { set(p, n); } void UnivCharsetDesc::set(const Range *p, size_t n) { for (size_t i = 0; i < n; i++) { const Range &r = p[i]; Char max; if (r.count > charMax || r.descMin > charMax - r.count) max = charMax; else max = r.descMin + (r.count - 1); if (max - r.descMin > univCharMax || r.univMin > univCharMax - (max - r.descMin)) max = r.descMin + (univCharMax - r.univMin); addRange(r.descMin, max, r.univMin); } } void UnivCharsetDesc::addRange(WideChar descMin, WideChar descMax, UnivChar univMin) { if (descMin <= charMax) { Char max = descMax > charMax ? charMax : descMax; charMap_.setRange(descMin, max, wrapChar(univMin, descMin)); } if (descMax > charMax) { if (descMin > charMax) rangeMap_.addRange(descMin, descMax, univMin); else rangeMap_.addRange(charMax, descMax, univMin + (charMax - descMin)); } } void UnivCharsetDesc::addBaseRange(const UnivCharsetDesc &baseSet, WideChar descMin, WideChar descMax, WideChar baseMin, ISet &baseMissing) { UnivCharsetDescIter iter(baseSet); iter.skipTo(baseMin); WideChar baseMax = baseMin + (descMax - descMin); WideChar iDescMin, iDescMax; UnivChar iBaseMin; WideChar missingBaseMin = baseMin; Boolean usedAll = 0; while (iter.next(iDescMin, iDescMax, iBaseMin) && iDescMin <= baseMax) { // baseMin baseMax // iDescMin iDescMax if (iDescMax >= baseMin) { WideChar min = baseMin > iDescMin ? baseMin : iDescMin; if (min > missingBaseMin) baseMissing.addRange(missingBaseMin, min - 1); WideChar max = baseMax < iDescMax ? baseMax : iDescMax; missingBaseMin = max + 1; if (missingBaseMin == 0) usedAll = 1; ASSERT(min <= max); addRange(descMin + (min - baseMin), descMin + (max - baseMin), iBaseMin + (min - iDescMin)); } } if (!usedAll && baseMax >= missingBaseMin) baseMissing.addRange(missingBaseMin, baseMax); } unsigned UnivCharsetDesc::univToDesc(UnivChar to, WideChar &from, ISet &fromSet, WideChar &count) const { unsigned ret = rangeMap_.inverseMap(to, from, fromSet, count); Char min = 0; do { Char max; Unsigned32 tem = charMap_.getRange(min, max); if (!noDesc(tem)) { UnivChar toMin = extractChar(tem, min); if (toMin <= to && to <= toMin + (max - min)) { Char n = min + (to - toMin); WideChar thisCount = max - n + 1; if (ret > 1) { fromSet.add(n); if (thisCount < count) count = thisCount; if (n < from) from = n; } else if (ret == 1) { fromSet.add(from); fromSet.add(n); ret = 2; if (thisCount < count) count = thisCount; if (n < from) from = n; } else { count = thisCount; from = n; ret = 1; } } else if (ret == 0 && toMin > to && toMin - to < count) count = toMin - to; } min = max; } while (min++ != Char(-1)); return ret; } UnivCharsetDescIter::UnivCharsetDescIter(const UnivCharsetDesc &desc) : charMap_(&desc.charMap_), doneCharMap_(0), nextChar_(0), rangeMapIter_(desc.rangeMap_) { } Boolean UnivCharsetDescIter::next(WideChar &descMin, WideChar &descMax, UnivChar &univMin) { while (!doneCharMap_) { Char ch = nextChar_; Unsigned32 tem = charMap_->getRange(nextChar_, nextChar_); descMax = nextChar_; if (!UnivCharsetDesc::noDesc(tem)) { descMin = ch; descMax = nextChar_; univMin = UnivCharsetDesc::extractChar(tem, ch); if (nextChar_ == Char(-1)) doneCharMap_ = 1; else nextChar_++; return 1; } if (nextChar_ == Char(-1)) doneCharMap_ = 1; else nextChar_++; } return rangeMapIter_.next(descMin, descMax, univMin); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/Win32CodingSystem.cxx100444 764 764 10766 6606574412 14774 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #ifdef SP_MULTI_BYTE #include #include #include "Win32CodingSystem.h" #include "Boolean.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SingleByteWin32Decoder : public Decoder { public: SingleByteWin32Decoder(unsigned int codePage, Char defaultChar); size_t decode(Char *to, const char *from, size_t fromLen, const char **rest); Boolean convertOffset(unsigned long &offset) const; private: Char map_[256]; }; class MultiByteWin32Decoder : public Decoder { public: MultiByteWin32Decoder(unsigned int codePage, Char defaultChar, unsigned char *leadByte); size_t decode(Char *to, const char *from, size_t fromLen, const char **rest); private: unsigned int codePage_; Char defaultChar_; PackedBoolean isLeadByte_[256]; }; class Win32Encoder : public Encoder { public: Win32Encoder(unsigned int codePage); ~Win32Encoder(); void output(const Char *, size_t, OutputByteStream *); private: char *buf_; size_t bufLen_; unsigned int codePage_; }; Win32CodingSystem::Win32CodingSystem(unsigned int codePage, Char defaultChar) : codePage_(codePage), defaultChar_(defaultChar) { } Win32CodingSystem::Win32CodingSystem(SpecialCodePage codePage, Char defaultChar) : defaultChar_(defaultChar) { if (codePage == codePageAnsi) codePage_ = GetACP(); else codePage_ = GetOEMCP(); } Boolean Win32CodingSystem::isValid() const { return IsValidCodePage(codePage_); } Encoder *Win32CodingSystem::makeEncoder() const { return new Win32Encoder(codePage_); } Decoder *Win32CodingSystem::makeDecoder() const { CPINFO info; if (GetCPInfo(codePage_, &info) && info.MaxCharSize > 1) return new MultiByteWin32Decoder(codePage_, defaultChar_, info.LeadByte); else return new SingleByteWin32Decoder(codePage_, defaultChar_); } SingleByteWin32Decoder::SingleByteWin32Decoder(unsigned int codePage, Char defaultChar) { for (int i = 0; i < 256; i++) { char c = i; if (MultiByteToWideChar(codePage, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, &c, 1, map_ + i, 1) == 0) map_[i] = defaultChar; } } size_t SingleByteWin32Decoder::decode(Char *to, const char *from, size_t fromLen, const char **rest) { for (size_t n = fromLen; n > 0; n--) *to++ = map_[(unsigned char)*from++]; // zero extend *rest = from; return fromLen; } Boolean SingleByteWin32Decoder::convertOffset(unsigned long &) const { return 1; } MultiByteWin32Decoder::MultiByteWin32Decoder(unsigned int codePage, Char defaultChar, unsigned char *leadByte) : defaultChar_(defaultChar), codePage_(codePage) { for (int i = 0; i < 256; i++) isLeadByte_[i] = 0; for (int i = 0; i < MAX_LEADBYTES; i += 2) { if (leadByte[i] == 0 && leadByte[i + 1] == 0) break; int lim = leadByte[i + 1]; for (int j = leadByte[i]; j < lim; j++) isLeadByte_[j] = 1; } } size_t MultiByteWin32Decoder::decode(Char *to, const char *from, size_t fromLen, const char **rest) { size_t i; for (i = fromLen; i > 0; i--) if (!isLeadByte_[(unsigned char)from[i - 1]]) break; if ((fromLen - i) & 1) fromLen--; int count = MultiByteToWideChar(codePage_, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, from, fromLen, to, fromLen); if (count) { *rest = from + fromLen; return count; } Char *start = to; // Try it character by character. while (fromLen > 0) { int nBytes = 1 + isLeadByte_[(unsigned char)*from]; ASSERT(nBytes <= fromLen); if (MultiByteToWideChar(codePage_, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, from, nBytes, to, 1) != 1) *to = defaultChar_; from += nBytes; fromLen -= nBytes; to++; } *rest = from; return to - start; } Win32Encoder::Win32Encoder(unsigned int codePage) : codePage_(codePage), buf_(0), bufLen_(0) { } Win32Encoder::~Win32Encoder() { delete [] buf_; } void Win32Encoder::output(const Char *s, size_t n, OutputByteStream *sb) { if (n == 0) return; if (n*2 > bufLen_) { delete [] buf_; bufLen_ = n*2; buf_ = new char[bufLen_]; } int nBytes = WideCharToMultiByte(codePage_, 0, s, n, buf_, bufLen_, 0, 0); if (nBytes) sb->sputn(buf_, nBytes); } #ifdef SP_NAMESPACE } #endif #else /* not SP_MULTI_BYTE */ #ifndef __GNUG__ static char non_empty_translation_unit; // sigh #endif #endif /* not SP_MULTI_BYTE */ jade-1.2.1/lib/WinApp.cxx100444 764 764 12415 6606574412 12730 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_WIDE_SYSTEM #include "WinApp.h" #include "CodingSystemKit.h" #include "Ptr.h" #include "ExtendEntityManager.h" #include "SOEntityCatalog.h" #include "SgmlParser.h" #include "PosixStorage.h" #include "LiteralStorage.h" #ifdef SP_WININET #include "WinInetStorage.h" #else #include "URLStorage.h" #endif #define STRICT #include #include "macros.h" #ifndef SP_DEFAULT_ENCODING #define SP_DEFAULT_ENCODING "WINDOWS" #endif #ifndef SP_REGISTRY_KEY #define SP_REGISTRY_KEY "Software\\James Clark\\SP" #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif static StringC asStringC(const char *s) { StringC tem; if (s) { while (*s) tem += (unsigned char)*s++; } return tem; } WinApp::WinApp() { getRegistry("Catalogs", defaultCatalogs_); getRegistry("Directories", defaultDirectories_); getRegistry("Encoding", defaultEncoding_); if (defaultEncoding_.size() == 0 || !getCodingSystem(defaultEncoding_)) { defaultEncoding_ = asStringC(SP_DEFAULT_ENCODING); } } const InputCodingSystem * WinApp::getCodingSystem(const StringC &name) { if (name.size() == 0) return 0; if (codingSystemKit_.isNull()) codingSystemKit_ = CodingSystemKit::make(0); const char *tem; return codingSystemKit_->makeInputCodingSystem(name, codingSystemKit_->systemCharset(), 0, tem); } static void split(const StringC &str, Char sep, Vector &result) { Boolean started = 0; for (size_t i = 0; i < str.size(); i++) { if (str[i] == sep) started = 0; else { if (!started) { result.resize(result.size() + 1); started = 1; } result.back() += str[i]; } } } void WinApp::initParser(const StringC &sysid, SgmlParser &parser) { Ptr em; initParser(sysid, parser, em); } void WinApp::initParser(const StringC &sysid, SgmlParser &parser, Ptr &em) { const InputCodingSystem *codingSystem = getCodingSystem(encoding_); if (!codingSystem) codingSystem = getCodingSystem(defaultEncoding_); ConstPtr icsk; icsk.swap(codingSystemKit_); const CharsetInfo *systemCharset = &icsk->systemCharset(); PosixStorageManager *sm = new PosixStorageManager("OSFILE", systemCharset, 5); { Vector dirs; split(extraDirectories_, ';', dirs); split(defaultDirectories_, ';', dirs); for (size_t i = 0; i < dirs.size(); i++) sm->addSearchDir(dirs[i]); } ExtendEntityManager *xem = ExtendEntityManager::make(sm, codingSystem, icsk, 0); em = xem; xem ->registerStorageManager(new PosixFdStorageManager("OSFD", systemCharset)); #ifdef SP_WININET xem->registerStorageManager(new WinInetStorageManager("URL")); #else xem->registerStorageManager(new URLStorageManager("URL")); #endif xem->registerStorageManager(new LiteralStorageManager("LITERAL")); Vector catalogSysids; split(extraCatalogs_, ';', catalogSysids); size_t nExtra = catalogSysids.size(); split(defaultCatalogs_, ';', catalogSysids); xem->setCatalogManager(SOCatalogManager::make(catalogSysids, nExtra, systemCharset, systemCharset, 1)); SgmlParser::Params params; params.sysid = sysid; params.entityManager = em.pointer(); params.options = &options; parser.init(params); } void WinApp::setDefaultCatalogs(StringC &tem) { if (tem != defaultCatalogs_) { tem.swap(defaultCatalogs_); setRegistry("Catalogs", defaultCatalogs_); } } void WinApp::setDefaultDirectories(StringC &tem) { if (tem != defaultDirectories_) { tem.swap(defaultDirectories_); setRegistry("Directories", defaultDirectories_); } } Boolean WinApp::setEncoding(StringC &str) { if (!getCodingSystem(str)) return 0; str.swap(encoding_); return 1; } Boolean WinApp::setDefaultEncoding(StringC &str) { if (!getCodingSystem(str)) return 0; str.swap(defaultEncoding_); setRegistry("Encoding", defaultEncoding_); return 1; } void WinApp::setRegistry(const char *name, const StringC &value) { HKEY hk; if (RegCreateKeyA(HKEY_CURRENT_USER, SP_REGISTRY_KEY, &hk) != ERROR_SUCCESS) return; String buf; int len = WideCharToMultiByte(CP_ACP, 0, value.data(), value.size(), 0, 0, 0, 0); buf.resize(len + 1); WideCharToMultiByte(CP_ACP, 0, value.data(), value.size(), buf.begin(), len, 0, 0); buf[len] = '\0'; RegSetValue(hk, name, REG_SZ, buf.data(), len); RegCloseKey(hk); } Boolean WinApp::getRegistry(const char *name, StringC &value) { HKEY hk; if (RegOpenKeyA(HKEY_CURRENT_USER, SP_REGISTRY_KEY, &hk) != ERROR_SUCCESS) return 0; String buf; long size; Boolean retval = 0; if (RegQueryValueA(hk, name, 0, &size) == ERROR_SUCCESS) { buf.resize(size); if (RegQueryValueA(hk, name, &buf[0], &size) == ERROR_SUCCESS) { int nChars = MultiByteToWideChar(CP_ACP, 0, buf.data(), size - 1, 0, 0); if (nChars || GetLastError() == ERROR_SUCCESS) { value.resize(nChars); if (MultiByteToWideChar(CP_ACP, 0, buf.data(), size - 1, &value[0], nChars) == nChars) retval = 1; else value.resize(0); } } } RegCloseKey(hk); return retval; } #ifdef SP_NAMESPACE } #endif #endif /* SP_WIDE_SYSTEM */ jade-1.2.1/lib/app_inst.cxx100444 764 764 3103 6604610570 13313 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Vector.h" #include "Owner.h" #include "Options.h" #undef SP_DEFINE_TEMPLATES #include #include "CodingSystem.h" #include "CmdLineApp.h" #include "Event.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template Options #else #ifdef __xlC__ #pragma define(Options) #else #ifdef SP_ANSI_CLASS_INST template class Options; #else typedef Options Dummy_2; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_3; #endif #endif #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/lib/WinInetStorage.cxx100444 764 764 12235 6606574412 14434 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_WININET #include "WinInetStorage.h" #include "WinInetStorageMessages.h" #include "RewindStorageObject.h" #include "UnivCharsetDesc.h" #include "MessageArg.h" #include "MessageBuilder.h" #include "macros.h" #define STRICT #include #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif static UnivCharsetDesc::Range range = { 0, 128, 0 }; static CharsetInfo iso646Charset(UnivCharsetDesc(&range, 1)); String toAscii(const StringC &buf) { String s; for (size_t i = 0; i < buf.size(); i++) s += buf[i]; s += '\0'; return s; } class Win32MessageArg : public MessageArg { public: Win32MessageArg(DWORD n) : n_(n) { } MessageArg *copy() const { return new Win32MessageArg(*this); } void append(MessageBuilder &) const; private: DWORD n_; }; void Win32MessageArg::append(MessageBuilder &builder) const { void *msg; if (!FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ALLOCATE_BUFFER, 0, n_, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&msg, 0, 0)) { // FIXME interpret common internet messages here builder.appendNumber(n_); return; } String s; for (char *tem = (char *)msg; *tem; tem++) s += *tem; LocalFree(msg); builder.appendChars(s.data(), s.size()); } class WinInetStorageObject : public RewindStorageObject { public: WinInetStorageObject(HINTERNET fd, Boolean mayRewind, const StringC &url); ~WinInetStorageObject(); Boolean read(char *buf, size_t bufSize, Messenger &mgr, size_t &nread); Boolean seekToStart(Messenger &); private: WinInetStorageObject(const WinInetStorageObject &); // undefined void operator=(const WinInetStorageObject &); // undefined Boolean eof_; HINTERNET fd_; StringC url_; }; WinInetStorageManager::WinInetStorageManager(const char *type) : type_(type), IdStorageManager(&iso646Charset), session_(0) { } WinInetStorageManager::~WinInetStorageManager() { if (session_) { InternetCloseHandle(session_); session_ = 0; } } const char *WinInetStorageManager::type() const { return type_; } Boolean WinInetStorageManager::initSession() { if (!session_) { session_ = InternetOpenA("SP", INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0); } return 1; } Boolean WinInetStorageManager::guessIsId(const StringC &id, const CharsetInfo &charset) const { if (id.size() < 8) return 0; size_t i = 0; // guess other schemes supported by download protocols for (const char *s = "http://"; *s; s++, i++) if (id[i] != charset.execToDesc(*s) && (!islower(*s) || id[i] != charset.execToDesc(toupper(*s)))) return 0; return 1; } StorageObject *WinInetStorageManager::makeStorageObject(const StringC &specId, const StringC &baseId, Boolean, Boolean mayRewind, Messenger &mgr, StringC &id) { if (!initSession()) return 0; id = specId; resolveRelative(baseId, id, 0); String tem(toAscii(id)); HINTERNET fd = InternetOpenUrlA(session_, tem.data(), 0, 0, 0, 0); if (!fd) { DWORD err = GetLastError(); mgr.message(WinInetStorageMessages::cannotOpen, StringMessageArg(id), Win32MessageArg(err)); return 0; } // FIXME report an error return new WinInetStorageObject(fd, mayRewind, id); } Boolean WinInetStorageManager::resolveRelative(const StringC &baseId, StringC &id, Boolean) const { DWORD bufSize = baseId.size() + id.size() + 1; char *buf = new char[bufSize]; String baseIdA (toAscii(baseId)); String idA(toAscii(id)); if (InternetCombineUrlA(baseIdA.data(), idA.data(), buf, &bufSize, 0)) { id.resize(0); for (size_t i = 0; i < bufSize; i++) id += buf[i]; delete [] buf; return 1; } delete [] buf; return 0; } Boolean WinInetStorageManager::transformNeutral(StringC &str, Boolean fold, Messenger &) const { if (fold) for (size_t i = 0; i < str.size(); i++) { Char c = str[i]; if (c <= (unsigned char)-1) str[i] = tolower(str[i]); } return 1; } WinInetStorageObject::WinInetStorageObject(HINTERNET fd, Boolean mayRewind, const StringC &url) : RewindStorageObject(mayRewind, 0), fd_(fd), url_(url), eof_(0) { } WinInetStorageObject::~WinInetStorageObject() { if (fd_ != 0) { (void)InternetCloseHandle(fd_); fd_ = 0; } } Boolean WinInetStorageObject::read(char *buf, size_t bufSize, Messenger &mgr, size_t &nread) { if (readSaved(buf, bufSize, nread)) return 1; if (fd_ == 0 || eof_) return 0; DWORD n; if (!InternetReadFile(fd_, buf, bufSize, &n)) { DWORD err = GetLastError(); mgr.message(WinInetStorageMessages::readFailed, StringMessageArg(url_), Win32MessageArg(err)); return 0; } if (n) { nread = n; return 1; } eof_ = 1; InternetCloseHandle(fd_); fd_ = 0; return 0; } Boolean WinInetStorageObject::seekToStart(Messenger &) { CANNOT_HAPPEN(); return 0; } #ifdef SP_NAMESPACE } #endif #endif /* SP_WININET */ jade-1.2.1/lib/WinInetStorageMessages.msg100444 764 764 316 6606574412 16045 0ustar jjcjjc# Copyright (c) 1996 James Clark # See the file COPYING for copying permission. # WinInetStorage message definitions =2500 E2+cannotOpen++cannot open URL %1 (%2) E2+readFailed++error reading URL %1 (%2) jade-1.2.1/lib/WinInetStorageMessages.rc100444 764 764 134 6606636232 15660 0ustar jjcjjcSTRINGTABLE BEGIN 2500, "cannot open URL %1 (%2)" 2501, "error reading URL %1 (%2)" END jade-1.2.1/lib/WinInetStorageMessages.h100444 764 764 1435 6606636232 15530 0ustar jjcjjc// This file was automatically generated from .\WinInetStorageMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct WinInetStorageMessages { // 2500 static const MessageType2 cannotOpen; // 2501 static const MessageType2 readFailed; }; const MessageType2 WinInetStorageMessages::cannotOpen( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2500 #ifndef SP_NO_MESSAGE_TEXT ,"cannot open URL %1 (%2)" #endif ); const MessageType2 WinInetStorageMessages::readFailed( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 2501 #ifndef SP_NO_MESSAGE_TEXT ,"error reading URL %1 (%2)" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/XMLCodingSystem.cxx100444 764 764 21404 6606574412 14521 0ustar jjcjjc// Copyright (c) 1994, 1997 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "splib.h" #ifdef SP_MULTI_BYTE #include "XMLCodingSystem.h" #include "UTF8CodingSystem.h" #include "CodingSystemKit.h" #include "Boolean.h" #include "Owner.h" #include "macros.h" #include #include #ifdef SP_DECLARE_MEMMOVE extern "C" { void *memmove(void *, const void *, size_t); } #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const Char ISO646_TAB = 0x9; const Char ISO646_LF = 0xA; const Char ISO646_CR = 0xD; const Char ISO646_SPACE = 0x20; const Char ISO646_QUOT = 0x22; const Char ISO646_APOS = 0x27; const Char ISO646_LT = 0x3C; const Char ISO646_EQUAL = 0x3D; const Char ISO646_GT = 0x3E; const Char ISO646_QUEST = 0x3F; const Char ISO646_LETTER_a = 0x61; const Char ISO646_LETTER_c = 0x63; const Char ISO646_LETTER_d = 0x64; const Char ISO646_LETTER_e = 0x65; const Char ISO646_LETTER_g = 0x67; const Char ISO646_LETTER_i = 0x69; const Char ISO646_LETTER_l = 0x6C; const Char ISO646_LETTER_m = 0x6D; const Char ISO646_LETTER_n = 0x6E; const Char ISO646_LETTER_o = 0x6F; const Char ISO646_LETTER_x = 0x78; class XMLDecoder : public Decoder { public: XMLDecoder(const InputCodingSystemKit *); size_t decode(Char *to, const char *from, size_t fromLen, const char **rest); Boolean convertOffset(unsigned long &offset) const; private: class UCS2 : public Decoder { public: UCS2(Boolean swapBytes); size_t decode(Char *to, const char *from, size_t fromLen, const char **rest); Boolean convertOffset(unsigned long &offset) const; private: Boolean swapBytes_; }; // Don't keep parsing a PI longer than this. // We want to avoid reading some enormous file into memory just because // some quote was left off. enum { piMaxSize = 1024*32 }; void initDecoderDefault(); void initDecoderPI(); Boolean extractEncoding(StringC &name); static Boolean isWS(Char); enum DetectPhase { phaseInit, phasePI, phaseFinish }; DetectPhase phase_; Boolean byteOrderMark_; Boolean lsbFirst_; int guessBytesPerChar_; Owner subDecoder_; // Contains all the characters passed to caller that were // not produced by subDecoder_. StringC pi_; Char piLiteral_; const InputCodingSystemKit *kit_; }; XMLCodingSystem::XMLCodingSystem(const InputCodingSystemKit *kit) : kit_(kit) { } Decoder *XMLCodingSystem::makeDecoder() const { return new XMLDecoder(kit_); } Encoder *XMLCodingSystem::makeEncoder() const { UTF8CodingSystem utf8; return utf8.makeEncoder(); } XMLDecoder::XMLDecoder(const InputCodingSystemKit *kit) : Decoder(1), kit_(kit), phase_(phaseInit), byteOrderMark_(0), lsbFirst_(0), guessBytesPerChar_(1), piLiteral_(0) { } size_t XMLDecoder::decode(Char *to, const char *from, size_t fromLen, const char **rest) { if (phase_ == phaseFinish) return subDecoder_->decode(to, from, fromLen, rest); if (phase_ == phaseInit) { if (fromLen == 0) { *rest = from; return 0; } switch ((unsigned char)*from) { case 0x00: case 0x3C: case 0xFF: case 0xFE: if (fromLen < 2) { *rest = from; return 0; } switch (((unsigned char)from[0] << 8) | (unsigned char)from[1]) { case 0xFEFF: phase_ = phasePI; byteOrderMark_ = 1; guessBytesPerChar_ = 2; from += 2; fromLen -= 2; break; case 0xFFFE: lsbFirst_ = 1; phase_ = phasePI; byteOrderMark_ = 1; guessBytesPerChar_ = 2; from += 2; fromLen -= 2; break; case 0x3C3F: phase_ = phasePI; break; case 0x3C00: lsbFirst_ = 1; phase_ = phasePI; guessBytesPerChar_ = 2; break; case 0x003C: phase_ = phasePI; guessBytesPerChar_ = 2; break; default: break; } if (phase_ == phasePI) break; // fall through default: phase_ = phaseFinish; guessBytesPerChar_ = 1; initDecoderDefault(); return subDecoder_->decode(to, from, fromLen, rest); } } ASSERT(phase_ == phasePI); Char *p = to; for (; fromLen > guessBytesPerChar_; fromLen -= guessBytesPerChar_, from += guessBytesPerChar_) { if (!piLiteral_ && pi_.size() > 0 && pi_[pi_.size() - 1] == ISO646_GT) { initDecoderPI(); phase_ = phaseFinish; return (p - to) + subDecoder_->decode(p, from, fromLen, rest); } Char c = (unsigned char)from[0]; if (guessBytesPerChar_ > 1) { if (lsbFirst_) c |= (unsigned char)from[1] << 8; else { c <<= 8; c |= (unsigned char)from[1]; } } static const Char startBytes[] = { ISO646_LT, ISO646_QUEST, ISO646_LETTER_x, ISO646_LETTER_m, ISO646_LETTER_l }; // Stop accumulating the PI if we get characters that are illegal in the PI. if (c == 0 || c >= 0x7F || (pi_.size() > 0 && c == ISO646_LT) || pi_.size() > piMaxSize || (pi_.size() < 5 && c != startBytes[pi_.size()]) || (pi_.size() == 5 && !isWS(c))) { initDecoderDefault(); phase_ = phaseFinish; break; } *p++ = c; pi_ += c; if (piLiteral_) { if (c == piLiteral_) piLiteral_ = 0; } else if (c == ISO646_QUOT || c == ISO646_APOS) piLiteral_ = c; } size_t n = p - to; if (phase_ == phaseFinish && fromLen > 0) n += subDecoder_->decode(p, from, fromLen, rest); return n; } Boolean XMLDecoder::convertOffset(unsigned long &n) const { if (n <= pi_.size()) n *= guessBytesPerChar_; else { if (!subDecoder_) return 0; unsigned long tem = n - pi_.size(); if (!subDecoder_->convertOffset(tem)) return 0; n = tem + pi_.size() * guessBytesPerChar_; } if (byteOrderMark_) n += 2; return 1; } void XMLDecoder::initDecoderDefault() { if (guessBytesPerChar_ == 1) { UTF8CodingSystem utf8; subDecoder_ = utf8.makeDecoder(); } else { unsigned short n = 0x1; minBytesPerChar_ = 2; subDecoder_ = new UCS2((*(char *)&n == 0x1) != lsbFirst_); } } void XMLDecoder::initDecoderPI() { StringC name; if (!extractEncoding(name)) initDecoderDefault(); const char *dummy; static const UnivCharsetDesc::Range range = { 0, 128, 0 }; CharsetInfo piCharset(UnivCharsetDesc(&range, 1)); const InputCodingSystem *ics = kit_->makeInputCodingSystem(name, piCharset, 0, dummy); if (ics) { subDecoder_ = ics->makeDecoder(); minBytesPerChar_ = subDecoder_->minBytesPerChar(); } if (!subDecoder_) initDecoderDefault(); } Boolean XMLDecoder::isWS(Char c) { switch (c) { case ISO646_CR: case ISO646_LF: case ISO646_SPACE: case ISO646_TAB: return 1; } return 0; } Boolean XMLDecoder::extractEncoding(StringC &name) { Char lit = 0; for (size_t i = 5; i < pi_.size(); i++) { if (!lit) { if (pi_[i] == ISO646_APOS || pi_[i] == ISO646_QUOT) lit = pi_[i]; else if (pi_[i] == ISO646_EQUAL) { size_t j = i; for (; j > 0; j--) { if (!isWS(pi_[j - 1])) break; } size_t nameEnd = j; for (; j > 0; j--) { if (isWS(pi_[j - 1]) || pi_[j - 1] == ISO646_QUOT || pi_[j - 1] == ISO646_APOS) break; } static const Char encodingName[] = { ISO646_LETTER_e, ISO646_LETTER_n, ISO646_LETTER_c, ISO646_LETTER_o, ISO646_LETTER_d, ISO646_LETTER_i, ISO646_LETTER_n, ISO646_LETTER_g, 0 }; const Char *s = encodingName; for (; *s && j < nameEnd; j++, s++) if (pi_[j] != *s) break; if (j == nameEnd && *s == 0) { size_t j = i + 1; for (; j < pi_.size(); j++) { if (!isWS(pi_[j])) break; } if (pi_[j] == ISO646_QUOT || pi_[j] == ISO646_APOS) { Char lit = pi_[j]; size_t nameStart = j + 1; for (++j; j < pi_.size(); j++) { if (pi_[j] == lit) { if (j > nameStart) { name.assign(&pi_[nameStart], j - nameStart); return 1; } break; } } } return 0; } } } else if (pi_[i] == lit) lit = 0; } return 0; } XMLDecoder::UCS2::UCS2(Boolean swapBytes) : swapBytes_(swapBytes) { } size_t XMLDecoder::UCS2::decode(Char *to, const char *from, size_t fromLen, const char **rest) { union U { unsigned short word; char bytes[2]; }; fromLen &= ~1; *rest = from + fromLen; if (sizeof(Char) == 2) { if (!swapBytes_) { if (from != (char *)to) memmove(to, from, fromLen); return fromLen/2; } } if (swapBytes_) { for (size_t n = fromLen; n > 0; n -= 2) { U u; u.bytes[1] = *from++; u.bytes[0] = *from++; *to++ = u.word; } } else { for (size_t n = fromLen; n > 0; n -= 2) { U u; u.bytes[0] = *from++; u.bytes[1] = *from++; *to++ = u.word; } } return fromLen/2; } Boolean XMLDecoder::UCS2::convertOffset(unsigned long &n) const { n *= 2; return 1; } #ifdef SP_NAMESPACE } #endif #else /* not SP_MULTI_BYTE */ #ifndef __GNUG__ static char non_empty_translation_unit; // sigh #endif #endif /* not SP_MULTI_BYTE */ jade-1.2.1/lib/app_inst.m4100444 764 764 1134 6604607560 13040 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Vector.h" #include "Owner.h" #include "Options.h" #undef SP_DEFINE_TEMPLATES #include #include "CodingSystem.h" #include "CmdLineApp.h" #include "Event.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif __instantiate(Vector) __instantiate(Owner) __instantiate(Options) __instantiate(Owner) #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/lib/arc_inst.cxx100444 764 764 2544 6606636234 13317 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Vector.h" #include "NCVector.h" #include "Owner.h" #undef SP_DEFINE_TEMPLATES #include "ArcProcessor.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template NCVector #else #ifdef __xlC__ #pragma define(NCVector) #else #ifdef SP_ANSI_CLASS_INST template class NCVector; #else typedef NCVector Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector > #else #ifdef __xlC__ #pragma define(NCVector >) #else #ifdef SP_ANSI_CLASS_INST template class NCVector >; #else typedef NCVector > Dummy_2; #endif #endif #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/lib/arc_inst.m4100444 764 764 1021 6606574406 13024 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Vector.h" #include "NCVector.h" #include "Owner.h" #undef SP_DEFINE_TEMPLATES #include "ArcProcessor.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif __instantiate(NCVector) __instantiate(Owner) __instantiate(NCVector >) #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/lib/assert.cxx100444 764 764 564 6606574406 13000 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include #include "macros.h" #ifdef __GNUG__ void exit(int) __attribute__((noreturn)); #endif #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif void assertionFailed(const char *, const char *, int) { abort(); exit(1); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/big5.h100444 764 764 326550 6604607562 12036 0ustar jjcjjc/* Mapping from Big 5 to Unicode. */ /* This is the same as MS code page 950, with 0xA2CC, 0xA2CE, 0xF9DD-0xF9FE removed (because they are duplicates). */ 63, 0xa140, 0x3000, 0xff0c, 0x3001, 0x3002, 0xff0e, 0x2027, 0xff1b, 0xff1a, 0xff1f, 0xff01, 0xfe30, 0x2026, 0x2025, 0xfe50, 0xfe51, 0xfe52, 0x00b7, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xff5c, 0x2013, 0xfe31, 0x2014, 0xfe33, 0x2574, 0xfe34, 0xfe4f, 0xff08, 0xff09, 0xfe35, 0xfe36, 0xff5b, 0xff5d, 0xfe37, 0xfe38, 0x3014, 0x3015, 0xfe39, 0xfe3a, 0x3010, 0x3011, 0xfe3b, 0xfe3c, 0x300a, 0x300b, 0xfe3d, 0xfe3e, 0x3008, 0x3009, 0xfe3f, 0xfe40, 0x300c, 0x300d, 0xfe41, 0xfe42, 0x300e, 0x300f, 0xfe43, 0xfe44, 0xfe59, 0xfe5a, 94, 0xa1a1, 0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0x2018, 0x2019, 0x201c, 0x201d, 0x301d, 0x301e, 0x2035, 0x2032, 0xff03, 0xff06, 0xff0a, 0x203b, 0x00a7, 0x3003, 0x25cb, 0x25cf, 0x25b3, 0x25b2, 0x25ce, 0x2606, 0x2605, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25bd, 0x25bc, 0x32a3, 0x2105, 0x00af, 0xffe3, 0xff3f, 0x02cd, 0xfe49, 0xfe4a, 0xfe4d, 0xfe4e, 0xfe4b, 0xfe4c, 0xfe5f, 0xfe60, 0xfe61, 0xff0b, 0xff0d, 0x00d7, 0x00f7, 0x00b1, 0x221a, 0xff1c, 0xff1e, 0xff1d, 0x2266, 0x2267, 0x2260, 0x221e, 0x2252, 0x2261, 0xfe62, 0xfe63, 0xfe64, 0xfe65, 0xfe66, 0xff5e, 0x2229, 0x222a, 0x22a5, 0x2220, 0x221f, 0x22bf, 0x33d2, 0x33d1, 0x222b, 0x222e, 0x2235, 0x2234, 0x2640, 0x2642, 0x2295, 0x2299, 0x2191, 0x2193, 0x2190, 0x2192, 0x2196, 0x2197, 0x2199, 0x2198, 0x2225, 0x2223, 0xff0f, 63, 0xa240, 0xff3c, 0x2215, 0xfe68, 0xff04, 0xffe5, 0x3012, 0xffe0, 0xffe1, 0xff05, 0xff20, 0x2103, 0x2109, 0xfe69, 0xfe6a, 0xfe6b, 0x33d5, 0x339c, 0x339d, 0x339e, 0x33ce, 0x33a1, 0x338e, 0x338f, 0x33c4, 0x00b0, 0x5159, 0x515b, 0x515e, 0x515d, 0x5161, 0x5163, 0x55e7, 0x74e9, 0x7cce, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, 0x2588, 0x258f, 0x258e, 0x258d, 0x258c, 0x258b, 0x258a, 0x2589, 0x253c, 0x2534, 0x252c, 0x2524, 0x251c, 0x2594, 0x2500, 0x2502, 0x2595, 0x250c, 0x2510, 0x2514, 0x2518, 0x256d, 43, 0xa2a1, 0x256e, 0x2570, 0x256f, 0x2550, 0x255e, 0x256a, 0x2561, 0x25e2, 0x25e3, 0x25e5, 0x25e4, 0x2571, 0x2572, 0x2573, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, 0x3028, 0x3029, 1, 0xa2cd, 0x5344, 48, 0xa2cf, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 63, 0xa340, 0xff57, 0xff58, 0xff59, 0xff5a, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x3105, 0x3106, 0x3107, 0x3108, 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 31, 0xa3a1, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, 0x02d9, 0x02c9, 0x02ca, 0x02c7, 0x02cb, 63, 0xa440, 0x4e00, 0x4e59, 0x4e01, 0x4e03, 0x4e43, 0x4e5d, 0x4e86, 0x4e8c, 0x4eba, 0x513f, 0x5165, 0x516b, 0x51e0, 0x5200, 0x5201, 0x529b, 0x5315, 0x5341, 0x535c, 0x53c8, 0x4e09, 0x4e0b, 0x4e08, 0x4e0a, 0x4e2b, 0x4e38, 0x51e1, 0x4e45, 0x4e48, 0x4e5f, 0x4e5e, 0x4e8e, 0x4ea1, 0x5140, 0x5203, 0x52fa, 0x5343, 0x53c9, 0x53e3, 0x571f, 0x58eb, 0x5915, 0x5927, 0x5973, 0x5b50, 0x5b51, 0x5b53, 0x5bf8, 0x5c0f, 0x5c22, 0x5c38, 0x5c71, 0x5ddd, 0x5de5, 0x5df1, 0x5df2, 0x5df3, 0x5dfe, 0x5e72, 0x5efe, 0x5f0b, 0x5f13, 0x624d, 94, 0xa4a1, 0x4e11, 0x4e10, 0x4e0d, 0x4e2d, 0x4e30, 0x4e39, 0x4e4b, 0x5c39, 0x4e88, 0x4e91, 0x4e95, 0x4e92, 0x4e94, 0x4ea2, 0x4ec1, 0x4ec0, 0x4ec3, 0x4ec6, 0x4ec7, 0x4ecd, 0x4eca, 0x4ecb, 0x4ec4, 0x5143, 0x5141, 0x5167, 0x516d, 0x516e, 0x516c, 0x5197, 0x51f6, 0x5206, 0x5207, 0x5208, 0x52fb, 0x52fe, 0x52ff, 0x5316, 0x5339, 0x5348, 0x5347, 0x5345, 0x535e, 0x5384, 0x53cb, 0x53ca, 0x53cd, 0x58ec, 0x5929, 0x592b, 0x592a, 0x592d, 0x5b54, 0x5c11, 0x5c24, 0x5c3a, 0x5c6f, 0x5df4, 0x5e7b, 0x5eff, 0x5f14, 0x5f15, 0x5fc3, 0x6208, 0x6236, 0x624b, 0x624e, 0x652f, 0x6587, 0x6597, 0x65a4, 0x65b9, 0x65e5, 0x66f0, 0x6708, 0x6728, 0x6b20, 0x6b62, 0x6b79, 0x6bcb, 0x6bd4, 0x6bdb, 0x6c0f, 0x6c34, 0x706b, 0x722a, 0x7236, 0x723b, 0x7247, 0x7259, 0x725b, 0x72ac, 0x738b, 0x4e19, 63, 0xa540, 0x4e16, 0x4e15, 0x4e14, 0x4e18, 0x4e3b, 0x4e4d, 0x4e4f, 0x4e4e, 0x4ee5, 0x4ed8, 0x4ed4, 0x4ed5, 0x4ed6, 0x4ed7, 0x4ee3, 0x4ee4, 0x4ed9, 0x4ede, 0x5145, 0x5144, 0x5189, 0x518a, 0x51ac, 0x51f9, 0x51fa, 0x51f8, 0x520a, 0x52a0, 0x529f, 0x5305, 0x5306, 0x5317, 0x531d, 0x4edf, 0x534a, 0x5349, 0x5361, 0x5360, 0x536f, 0x536e, 0x53bb, 0x53ef, 0x53e4, 0x53f3, 0x53ec, 0x53ee, 0x53e9, 0x53e8, 0x53fc, 0x53f8, 0x53f5, 0x53eb, 0x53e6, 0x53ea, 0x53f2, 0x53f1, 0x53f0, 0x53e5, 0x53ed, 0x53fb, 0x56db, 0x56da, 0x5916, 94, 0xa5a1, 0x592e, 0x5931, 0x5974, 0x5976, 0x5b55, 0x5b83, 0x5c3c, 0x5de8, 0x5de7, 0x5de6, 0x5e02, 0x5e03, 0x5e73, 0x5e7c, 0x5f01, 0x5f18, 0x5f17, 0x5fc5, 0x620a, 0x6253, 0x6254, 0x6252, 0x6251, 0x65a5, 0x65e6, 0x672e, 0x672c, 0x672a, 0x672b, 0x672d, 0x6b63, 0x6bcd, 0x6c11, 0x6c10, 0x6c38, 0x6c41, 0x6c40, 0x6c3e, 0x72af, 0x7384, 0x7389, 0x74dc, 0x74e6, 0x7518, 0x751f, 0x7528, 0x7529, 0x7530, 0x7531, 0x7532, 0x7533, 0x758b, 0x767d, 0x76ae, 0x76bf, 0x76ee, 0x77db, 0x77e2, 0x77f3, 0x793a, 0x79be, 0x7a74, 0x7acb, 0x4e1e, 0x4e1f, 0x4e52, 0x4e53, 0x4e69, 0x4e99, 0x4ea4, 0x4ea6, 0x4ea5, 0x4eff, 0x4f09, 0x4f19, 0x4f0a, 0x4f15, 0x4f0d, 0x4f10, 0x4f11, 0x4f0f, 0x4ef2, 0x4ef6, 0x4efb, 0x4ef0, 0x4ef3, 0x4efd, 0x4f01, 0x4f0b, 0x5149, 0x5147, 0x5146, 0x5148, 0x5168, 63, 0xa640, 0x5171, 0x518d, 0x51b0, 0x5217, 0x5211, 0x5212, 0x520e, 0x5216, 0x52a3, 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540f, 0x540c, 0x540a, 0x5410, 0x5401, 0x540b, 0x5404, 0x5411, 0x540d, 0x5408, 0x5403, 0x540e, 0x5406, 0x5412, 0x56e0, 0x56de, 0x56dd, 0x5733, 0x5730, 0x5728, 0x572d, 0x572c, 0x572f, 0x5729, 0x5919, 0x591a, 0x5937, 0x5938, 0x5984, 0x5978, 0x5983, 0x597d, 0x5979, 0x5982, 0x5981, 0x5b57, 0x5b58, 0x5b87, 0x5b88, 0x5b85, 0x5b89, 0x5bfa, 0x5c16, 0x5c79, 0x5dde, 0x5e06, 0x5e76, 0x5e74, 94, 0xa6a1, 0x5f0f, 0x5f1b, 0x5fd9, 0x5fd6, 0x620e, 0x620c, 0x620d, 0x6210, 0x6263, 0x625b, 0x6258, 0x6536, 0x65e9, 0x65e8, 0x65ec, 0x65ed, 0x66f2, 0x66f3, 0x6709, 0x673d, 0x6734, 0x6731, 0x6735, 0x6b21, 0x6b64, 0x6b7b, 0x6c16, 0x6c5d, 0x6c57, 0x6c59, 0x6c5f, 0x6c60, 0x6c50, 0x6c55, 0x6c61, 0x6c5b, 0x6c4d, 0x6c4e, 0x7070, 0x725f, 0x725d, 0x767e, 0x7af9, 0x7c73, 0x7cf8, 0x7f36, 0x7f8a, 0x7fbd, 0x8001, 0x8003, 0x800c, 0x8012, 0x8033, 0x807f, 0x8089, 0x808b, 0x808c, 0x81e3, 0x81ea, 0x81f3, 0x81fc, 0x820c, 0x821b, 0x821f, 0x826e, 0x8272, 0x827e, 0x866b, 0x8840, 0x884c, 0x8863, 0x897f, 0x9621, 0x4e32, 0x4ea8, 0x4f4d, 0x4f4f, 0x4f47, 0x4f57, 0x4f5e, 0x4f34, 0x4f5b, 0x4f55, 0x4f30, 0x4f50, 0x4f51, 0x4f3d, 0x4f3a, 0x4f38, 0x4f43, 0x4f54, 0x4f3c, 0x4f46, 0x4f63, 63, 0xa740, 0x4f5c, 0x4f60, 0x4f2f, 0x4f4e, 0x4f36, 0x4f59, 0x4f5d, 0x4f48, 0x4f5a, 0x514c, 0x514b, 0x514d, 0x5175, 0x51b6, 0x51b7, 0x5225, 0x5224, 0x5229, 0x522a, 0x5228, 0x52ab, 0x52a9, 0x52aa, 0x52ac, 0x5323, 0x5373, 0x5375, 0x541d, 0x542d, 0x541e, 0x543e, 0x5426, 0x544e, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448, 0x5442, 0x541b, 0x5429, 0x544a, 0x5439, 0x543b, 0x5438, 0x542e, 0x5435, 0x5436, 0x5420, 0x543c, 0x5440, 0x5431, 0x542b, 0x541f, 0x542c, 0x56ea, 0x56f0, 0x56e4, 0x56eb, 0x574a, 0x5751, 0x5740, 0x574d, 94, 0xa7a1, 0x5747, 0x574e, 0x573e, 0x5750, 0x574f, 0x573b, 0x58ef, 0x593e, 0x599d, 0x5992, 0x59a8, 0x599e, 0x59a3, 0x5999, 0x5996, 0x598d, 0x59a4, 0x5993, 0x598a, 0x59a5, 0x5b5d, 0x5b5c, 0x5b5a, 0x5b5b, 0x5b8c, 0x5b8b, 0x5b8f, 0x5c2c, 0x5c40, 0x5c41, 0x5c3f, 0x5c3e, 0x5c90, 0x5c91, 0x5c94, 0x5c8c, 0x5deb, 0x5e0c, 0x5e8f, 0x5e87, 0x5e8a, 0x5ef7, 0x5f04, 0x5f1f, 0x5f64, 0x5f62, 0x5f77, 0x5f79, 0x5fd8, 0x5fcc, 0x5fd7, 0x5fcd, 0x5ff1, 0x5feb, 0x5ff8, 0x5fea, 0x6212, 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276, 0x6289, 0x626d, 0x628a, 0x627c, 0x627e, 0x6279, 0x6273, 0x6292, 0x626f, 0x6298, 0x626e, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539, 0x653b, 0x6538, 0x65f1, 0x66f4, 0x675f, 0x674e, 0x674f, 0x6750, 0x6751, 0x675c, 0x6756, 0x675e, 0x6749, 0x6746, 0x6760, 63, 0xa840, 0x6753, 0x6757, 0x6b65, 0x6bcf, 0x6c42, 0x6c5e, 0x6c99, 0x6c81, 0x6c88, 0x6c89, 0x6c85, 0x6c9b, 0x6c6a, 0x6c7a, 0x6c90, 0x6c70, 0x6c8c, 0x6c68, 0x6c96, 0x6c92, 0x6c7d, 0x6c83, 0x6c72, 0x6c7e, 0x6c74, 0x6c86, 0x6c76, 0x6c8d, 0x6c94, 0x6c98, 0x6c82, 0x7076, 0x707c, 0x707d, 0x7078, 0x7262, 0x7261, 0x7260, 0x72c4, 0x72c2, 0x7396, 0x752c, 0x752b, 0x7537, 0x7538, 0x7682, 0x76ef, 0x77e3, 0x79c1, 0x79c0, 0x79bf, 0x7a76, 0x7cfb, 0x7f55, 0x8096, 0x8093, 0x809d, 0x8098, 0x809b, 0x809a, 0x80b2, 0x826f, 0x8292, 94, 0xa8a1, 0x828b, 0x828d, 0x898b, 0x89d2, 0x8a00, 0x8c37, 0x8c46, 0x8c55, 0x8c9d, 0x8d64, 0x8d70, 0x8db3, 0x8eab, 0x8eca, 0x8f9b, 0x8fb0, 0x8fc2, 0x8fc6, 0x8fc5, 0x8fc4, 0x5de1, 0x9091, 0x90a2, 0x90aa, 0x90a6, 0x90a3, 0x9149, 0x91c6, 0x91cc, 0x9632, 0x962e, 0x9631, 0x962a, 0x962c, 0x4e26, 0x4e56, 0x4e73, 0x4e8b, 0x4e9b, 0x4e9e, 0x4eab, 0x4eac, 0x4f6f, 0x4f9d, 0x4f8d, 0x4f73, 0x4f7f, 0x4f6c, 0x4f9b, 0x4f8b, 0x4f86, 0x4f83, 0x4f70, 0x4f75, 0x4f88, 0x4f69, 0x4f7b, 0x4f96, 0x4f7e, 0x4f8f, 0x4f91, 0x4f7a, 0x5154, 0x5152, 0x5155, 0x5169, 0x5177, 0x5176, 0x5178, 0x51bd, 0x51fd, 0x523b, 0x5238, 0x5237, 0x523a, 0x5230, 0x522e, 0x5236, 0x5241, 0x52be, 0x52bb, 0x5352, 0x5354, 0x5353, 0x5351, 0x5366, 0x5377, 0x5378, 0x5379, 0x53d6, 0x53d4, 0x53d7, 0x5473, 0x5475, 63, 0xa940, 0x5496, 0x5478, 0x5495, 0x5480, 0x547b, 0x5477, 0x5484, 0x5492, 0x5486, 0x547c, 0x5490, 0x5471, 0x5476, 0x548c, 0x549a, 0x5462, 0x5468, 0x548b, 0x547d, 0x548e, 0x56fa, 0x5783, 0x5777, 0x576a, 0x5769, 0x5761, 0x5766, 0x5764, 0x577c, 0x591c, 0x5949, 0x5947, 0x5948, 0x5944, 0x5954, 0x59be, 0x59bb, 0x59d4, 0x59b9, 0x59ae, 0x59d1, 0x59c6, 0x59d0, 0x59cd, 0x59cb, 0x59d3, 0x59ca, 0x59af, 0x59b3, 0x59d2, 0x59c5, 0x5b5f, 0x5b64, 0x5b63, 0x5b97, 0x5b9a, 0x5b98, 0x5b9c, 0x5b99, 0x5b9b, 0x5c1a, 0x5c48, 0x5c45, 94, 0xa9a1, 0x5c46, 0x5cb7, 0x5ca1, 0x5cb8, 0x5ca9, 0x5cab, 0x5cb1, 0x5cb3, 0x5e18, 0x5e1a, 0x5e16, 0x5e15, 0x5e1b, 0x5e11, 0x5e78, 0x5e9a, 0x5e97, 0x5e9c, 0x5e95, 0x5e96, 0x5ef6, 0x5f26, 0x5f27, 0x5f29, 0x5f80, 0x5f81, 0x5f7f, 0x5f7c, 0x5fdd, 0x5fe0, 0x5ffd, 0x5ff5, 0x5fff, 0x600f, 0x6014, 0x602f, 0x6035, 0x6016, 0x602a, 0x6015, 0x6021, 0x6027, 0x6029, 0x602b, 0x601b, 0x6216, 0x6215, 0x623f, 0x623e, 0x6240, 0x627f, 0x62c9, 0x62cc, 0x62c4, 0x62bf, 0x62c2, 0x62b9, 0x62d2, 0x62db, 0x62ab, 0x62d3, 0x62d4, 0x62cb, 0x62c8, 0x62a8, 0x62bd, 0x62bc, 0x62d0, 0x62d9, 0x62c7, 0x62cd, 0x62b5, 0x62da, 0x62b1, 0x62d8, 0x62d6, 0x62d7, 0x62c6, 0x62ac, 0x62ce, 0x653e, 0x65a7, 0x65bc, 0x65fa, 0x6614, 0x6613, 0x660c, 0x6606, 0x6602, 0x660e, 0x6600, 0x660f, 0x6615, 0x660a, 63, 0xaa40, 0x6607, 0x670d, 0x670b, 0x676d, 0x678b, 0x6795, 0x6771, 0x679c, 0x6773, 0x6777, 0x6787, 0x679d, 0x6797, 0x676f, 0x6770, 0x677f, 0x6789, 0x677e, 0x6790, 0x6775, 0x679a, 0x6793, 0x677c, 0x676a, 0x6772, 0x6b23, 0x6b66, 0x6b67, 0x6b7f, 0x6c13, 0x6c1b, 0x6ce3, 0x6ce8, 0x6cf3, 0x6cb1, 0x6ccc, 0x6ce5, 0x6cb3, 0x6cbd, 0x6cbe, 0x6cbc, 0x6ce2, 0x6cab, 0x6cd5, 0x6cd3, 0x6cb8, 0x6cc4, 0x6cb9, 0x6cc1, 0x6cae, 0x6cd7, 0x6cc5, 0x6cf1, 0x6cbf, 0x6cbb, 0x6ce1, 0x6cdb, 0x6cca, 0x6cac, 0x6cef, 0x6cdc, 0x6cd6, 0x6ce0, 94, 0xaaa1, 0x7095, 0x708e, 0x7092, 0x708a, 0x7099, 0x722c, 0x722d, 0x7238, 0x7248, 0x7267, 0x7269, 0x72c0, 0x72ce, 0x72d9, 0x72d7, 0x72d0, 0x73a9, 0x73a8, 0x739f, 0x73ab, 0x73a5, 0x753d, 0x759d, 0x7599, 0x759a, 0x7684, 0x76c2, 0x76f2, 0x76f4, 0x77e5, 0x77fd, 0x793e, 0x7940, 0x7941, 0x79c9, 0x79c8, 0x7a7a, 0x7a79, 0x7afa, 0x7cfe, 0x7f54, 0x7f8c, 0x7f8b, 0x8005, 0x80ba, 0x80a5, 0x80a2, 0x80b1, 0x80a1, 0x80ab, 0x80a9, 0x80b4, 0x80aa, 0x80af, 0x81e5, 0x81fe, 0x820d, 0x82b3, 0x829d, 0x8299, 0x82ad, 0x82bd, 0x829f, 0x82b9, 0x82b1, 0x82ac, 0x82a5, 0x82af, 0x82b8, 0x82a3, 0x82b0, 0x82be, 0x82b7, 0x864e, 0x8671, 0x521d, 0x8868, 0x8ecb, 0x8fce, 0x8fd4, 0x8fd1, 0x90b5, 0x90b8, 0x90b1, 0x90b6, 0x91c7, 0x91d1, 0x9577, 0x9580, 0x961c, 0x9640, 0x963f, 0x963b, 0x9644, 63, 0xab40, 0x9642, 0x96b9, 0x96e8, 0x9752, 0x975e, 0x4e9f, 0x4ead, 0x4eae, 0x4fe1, 0x4fb5, 0x4faf, 0x4fbf, 0x4fe0, 0x4fd1, 0x4fcf, 0x4fdd, 0x4fc3, 0x4fb6, 0x4fd8, 0x4fdf, 0x4fca, 0x4fd7, 0x4fae, 0x4fd0, 0x4fc4, 0x4fc2, 0x4fda, 0x4fce, 0x4fde, 0x4fb7, 0x5157, 0x5192, 0x5191, 0x51a0, 0x524e, 0x5243, 0x524a, 0x524d, 0x524c, 0x524b, 0x5247, 0x52c7, 0x52c9, 0x52c3, 0x52c1, 0x530d, 0x5357, 0x537b, 0x539a, 0x53db, 0x54ac, 0x54c0, 0x54a8, 0x54ce, 0x54c9, 0x54b8, 0x54a6, 0x54b3, 0x54c7, 0x54c2, 0x54bd, 0x54aa, 0x54c1, 94, 0xaba1, 0x54c4, 0x54c8, 0x54af, 0x54ab, 0x54b1, 0x54bb, 0x54a9, 0x54a7, 0x54bf, 0x56ff, 0x5782, 0x578b, 0x57a0, 0x57a3, 0x57a2, 0x57ce, 0x57ae, 0x5793, 0x5955, 0x5951, 0x594f, 0x594e, 0x5950, 0x59dc, 0x59d8, 0x59ff, 0x59e3, 0x59e8, 0x5a03, 0x59e5, 0x59ea, 0x59da, 0x59e6, 0x5a01, 0x59fb, 0x5b69, 0x5ba3, 0x5ba6, 0x5ba4, 0x5ba2, 0x5ba5, 0x5c01, 0x5c4e, 0x5c4f, 0x5c4d, 0x5c4b, 0x5cd9, 0x5cd2, 0x5df7, 0x5e1d, 0x5e25, 0x5e1f, 0x5e7d, 0x5ea0, 0x5ea6, 0x5efa, 0x5f08, 0x5f2d, 0x5f65, 0x5f88, 0x5f85, 0x5f8a, 0x5f8b, 0x5f87, 0x5f8c, 0x5f89, 0x6012, 0x601d, 0x6020, 0x6025, 0x600e, 0x6028, 0x604d, 0x6070, 0x6068, 0x6062, 0x6046, 0x6043, 0x606c, 0x606b, 0x606a, 0x6064, 0x6241, 0x62dc, 0x6316, 0x6309, 0x62fc, 0x62ed, 0x6301, 0x62ee, 0x62fd, 0x6307, 0x62f1, 0x62f7, 63, 0xac40, 0x62ef, 0x62ec, 0x62fe, 0x62f4, 0x6311, 0x6302, 0x653f, 0x6545, 0x65ab, 0x65bd, 0x65e2, 0x6625, 0x662d, 0x6620, 0x6627, 0x662f, 0x661f, 0x6628, 0x6631, 0x6624, 0x66f7, 0x67ff, 0x67d3, 0x67f1, 0x67d4, 0x67d0, 0x67ec, 0x67b6, 0x67af, 0x67f5, 0x67e9, 0x67ef, 0x67c4, 0x67d1, 0x67b4, 0x67da, 0x67e5, 0x67b8, 0x67cf, 0x67de, 0x67f3, 0x67b0, 0x67d9, 0x67e2, 0x67dd, 0x67d2, 0x6b6a, 0x6b83, 0x6b86, 0x6bb5, 0x6bd2, 0x6bd7, 0x6c1f, 0x6cc9, 0x6d0b, 0x6d32, 0x6d2a, 0x6d41, 0x6d25, 0x6d0c, 0x6d31, 0x6d1e, 0x6d17, 94, 0xaca1, 0x6d3b, 0x6d3d, 0x6d3e, 0x6d36, 0x6d1b, 0x6cf5, 0x6d39, 0x6d27, 0x6d38, 0x6d29, 0x6d2e, 0x6d35, 0x6d0e, 0x6d2b, 0x70ab, 0x70ba, 0x70b3, 0x70ac, 0x70af, 0x70ad, 0x70b8, 0x70ae, 0x70a4, 0x7230, 0x7272, 0x726f, 0x7274, 0x72e9, 0x72e0, 0x72e1, 0x73b7, 0x73ca, 0x73bb, 0x73b2, 0x73cd, 0x73c0, 0x73b3, 0x751a, 0x752d, 0x754f, 0x754c, 0x754e, 0x754b, 0x75ab, 0x75a4, 0x75a5, 0x75a2, 0x75a3, 0x7678, 0x7686, 0x7687, 0x7688, 0x76c8, 0x76c6, 0x76c3, 0x76c5, 0x7701, 0x76f9, 0x76f8, 0x7709, 0x770b, 0x76fe, 0x76fc, 0x7707, 0x77dc, 0x7802, 0x7814, 0x780c, 0x780d, 0x7946, 0x7949, 0x7948, 0x7947, 0x79b9, 0x79ba, 0x79d1, 0x79d2, 0x79cb, 0x7a7f, 0x7a81, 0x7aff, 0x7afd, 0x7c7d, 0x7d02, 0x7d05, 0x7d00, 0x7d09, 0x7d07, 0x7d04, 0x7d06, 0x7f38, 0x7f8e, 0x7fbf, 0x8004, 63, 0xad40, 0x8010, 0x800d, 0x8011, 0x8036, 0x80d6, 0x80e5, 0x80da, 0x80c3, 0x80c4, 0x80cc, 0x80e1, 0x80db, 0x80ce, 0x80de, 0x80e4, 0x80dd, 0x81f4, 0x8222, 0x82e7, 0x8303, 0x8305, 0x82e3, 0x82db, 0x82e6, 0x8304, 0x82e5, 0x8302, 0x8309, 0x82d2, 0x82d7, 0x82f1, 0x8301, 0x82dc, 0x82d4, 0x82d1, 0x82de, 0x82d3, 0x82df, 0x82ef, 0x8306, 0x8650, 0x8679, 0x867b, 0x867a, 0x884d, 0x886b, 0x8981, 0x89d4, 0x8a08, 0x8a02, 0x8a03, 0x8c9e, 0x8ca0, 0x8d74, 0x8d73, 0x8db4, 0x8ecd, 0x8ecc, 0x8ff0, 0x8fe6, 0x8fe2, 0x8fea, 0x8fe5, 94, 0xada1, 0x8fed, 0x8feb, 0x8fe4, 0x8fe8, 0x90ca, 0x90ce, 0x90c1, 0x90c3, 0x914b, 0x914a, 0x91cd, 0x9582, 0x9650, 0x964b, 0x964c, 0x964d, 0x9762, 0x9769, 0x97cb, 0x97ed, 0x97f3, 0x9801, 0x98a8, 0x98db, 0x98df, 0x9996, 0x9999, 0x4e58, 0x4eb3, 0x500c, 0x500d, 0x5023, 0x4fef, 0x5026, 0x5025, 0x4ff8, 0x5029, 0x5016, 0x5006, 0x503c, 0x501f, 0x501a, 0x5012, 0x5011, 0x4ffa, 0x5000, 0x5014, 0x5028, 0x4ff1, 0x5021, 0x500b, 0x5019, 0x5018, 0x4ff3, 0x4fee, 0x502d, 0x502a, 0x4ffe, 0x502b, 0x5009, 0x517c, 0x51a4, 0x51a5, 0x51a2, 0x51cd, 0x51cc, 0x51c6, 0x51cb, 0x5256, 0x525c, 0x5254, 0x525b, 0x525d, 0x532a, 0x537f, 0x539f, 0x539d, 0x53df, 0x54e8, 0x5510, 0x5501, 0x5537, 0x54fc, 0x54e5, 0x54f2, 0x5506, 0x54fa, 0x5514, 0x54e9, 0x54ed, 0x54e1, 0x5509, 0x54ee, 0x54ea, 63, 0xae40, 0x54e6, 0x5527, 0x5507, 0x54fd, 0x550f, 0x5703, 0x5704, 0x57c2, 0x57d4, 0x57cb, 0x57c3, 0x5809, 0x590f, 0x5957, 0x5958, 0x595a, 0x5a11, 0x5a18, 0x5a1c, 0x5a1f, 0x5a1b, 0x5a13, 0x59ec, 0x5a20, 0x5a23, 0x5a29, 0x5a25, 0x5a0c, 0x5a09, 0x5b6b, 0x5c58, 0x5bb0, 0x5bb3, 0x5bb6, 0x5bb4, 0x5bae, 0x5bb5, 0x5bb9, 0x5bb8, 0x5c04, 0x5c51, 0x5c55, 0x5c50, 0x5ced, 0x5cfd, 0x5cfb, 0x5cea, 0x5ce8, 0x5cf0, 0x5cf6, 0x5d01, 0x5cf4, 0x5dee, 0x5e2d, 0x5e2b, 0x5eab, 0x5ead, 0x5ea7, 0x5f31, 0x5f92, 0x5f91, 0x5f90, 0x6059, 94, 0xaea1, 0x6063, 0x6065, 0x6050, 0x6055, 0x606d, 0x6069, 0x606f, 0x6084, 0x609f, 0x609a, 0x608d, 0x6094, 0x608c, 0x6085, 0x6096, 0x6247, 0x62f3, 0x6308, 0x62ff, 0x634e, 0x633e, 0x632f, 0x6355, 0x6342, 0x6346, 0x634f, 0x6349, 0x633a, 0x6350, 0x633d, 0x632a, 0x632b, 0x6328, 0x634d, 0x634c, 0x6548, 0x6549, 0x6599, 0x65c1, 0x65c5, 0x6642, 0x6649, 0x664f, 0x6643, 0x6652, 0x664c, 0x6645, 0x6641, 0x66f8, 0x6714, 0x6715, 0x6717, 0x6821, 0x6838, 0x6848, 0x6846, 0x6853, 0x6839, 0x6842, 0x6854, 0x6829, 0x68b3, 0x6817, 0x684c, 0x6851, 0x683d, 0x67f4, 0x6850, 0x6840, 0x683c, 0x6843, 0x682a, 0x6845, 0x6813, 0x6818, 0x6841, 0x6b8a, 0x6b89, 0x6bb7, 0x6c23, 0x6c27, 0x6c28, 0x6c26, 0x6c24, 0x6cf0, 0x6d6a, 0x6d95, 0x6d88, 0x6d87, 0x6d66, 0x6d78, 0x6d77, 0x6d59, 0x6d93, 63, 0xaf40, 0x6d6c, 0x6d89, 0x6d6e, 0x6d5a, 0x6d74, 0x6d69, 0x6d8c, 0x6d8a, 0x6d79, 0x6d85, 0x6d65, 0x6d94, 0x70ca, 0x70d8, 0x70e4, 0x70d9, 0x70c8, 0x70cf, 0x7239, 0x7279, 0x72fc, 0x72f9, 0x72fd, 0x72f8, 0x72f7, 0x7386, 0x73ed, 0x7409, 0x73ee, 0x73e0, 0x73ea, 0x73de, 0x7554, 0x755d, 0x755c, 0x755a, 0x7559, 0x75be, 0x75c5, 0x75c7, 0x75b2, 0x75b3, 0x75bd, 0x75bc, 0x75b9, 0x75c2, 0x75b8, 0x768b, 0x76b0, 0x76ca, 0x76cd, 0x76ce, 0x7729, 0x771f, 0x7720, 0x7728, 0x77e9, 0x7830, 0x7827, 0x7838, 0x781d, 0x7834, 0x7837, 94, 0xafa1, 0x7825, 0x782d, 0x7820, 0x781f, 0x7832, 0x7955, 0x7950, 0x7960, 0x795f, 0x7956, 0x795e, 0x795d, 0x7957, 0x795a, 0x79e4, 0x79e3, 0x79e7, 0x79df, 0x79e6, 0x79e9, 0x79d8, 0x7a84, 0x7a88, 0x7ad9, 0x7b06, 0x7b11, 0x7c89, 0x7d21, 0x7d17, 0x7d0b, 0x7d0a, 0x7d20, 0x7d22, 0x7d14, 0x7d10, 0x7d15, 0x7d1a, 0x7d1c, 0x7d0d, 0x7d19, 0x7d1b, 0x7f3a, 0x7f5f, 0x7f94, 0x7fc5, 0x7fc1, 0x8006, 0x8018, 0x8015, 0x8019, 0x8017, 0x803d, 0x803f, 0x80f1, 0x8102, 0x80f0, 0x8105, 0x80ed, 0x80f4, 0x8106, 0x80f8, 0x80f3, 0x8108, 0x80fd, 0x810a, 0x80fc, 0x80ef, 0x81ed, 0x81ec, 0x8200, 0x8210, 0x822a, 0x822b, 0x8228, 0x822c, 0x82bb, 0x832b, 0x8352, 0x8354, 0x834a, 0x8338, 0x8350, 0x8349, 0x8335, 0x8334, 0x834f, 0x8332, 0x8339, 0x8336, 0x8317, 0x8340, 0x8331, 0x8328, 0x8343, 63, 0xb040, 0x8654, 0x868a, 0x86aa, 0x8693, 0x86a4, 0x86a9, 0x868c, 0x86a3, 0x869c, 0x8870, 0x8877, 0x8881, 0x8882, 0x887d, 0x8879, 0x8a18, 0x8a10, 0x8a0e, 0x8a0c, 0x8a15, 0x8a0a, 0x8a17, 0x8a13, 0x8a16, 0x8a0f, 0x8a11, 0x8c48, 0x8c7a, 0x8c79, 0x8ca1, 0x8ca2, 0x8d77, 0x8eac, 0x8ed2, 0x8ed4, 0x8ecf, 0x8fb1, 0x9001, 0x9006, 0x8ff7, 0x9000, 0x8ffa, 0x8ff4, 0x9003, 0x8ffd, 0x9005, 0x8ff8, 0x9095, 0x90e1, 0x90dd, 0x90e2, 0x9152, 0x914d, 0x914c, 0x91d8, 0x91dd, 0x91d7, 0x91dc, 0x91d9, 0x9583, 0x9662, 0x9663, 0x9661, 94, 0xb0a1, 0x965b, 0x965d, 0x9664, 0x9658, 0x965e, 0x96bb, 0x98e2, 0x99ac, 0x9aa8, 0x9ad8, 0x9b25, 0x9b32, 0x9b3c, 0x4e7e, 0x507a, 0x507d, 0x505c, 0x5047, 0x5043, 0x504c, 0x505a, 0x5049, 0x5065, 0x5076, 0x504e, 0x5055, 0x5075, 0x5074, 0x5077, 0x504f, 0x500f, 0x506f, 0x506d, 0x515c, 0x5195, 0x51f0, 0x526a, 0x526f, 0x52d2, 0x52d9, 0x52d8, 0x52d5, 0x5310, 0x530f, 0x5319, 0x533f, 0x5340, 0x533e, 0x53c3, 0x66fc, 0x5546, 0x556a, 0x5566, 0x5544, 0x555e, 0x5561, 0x5543, 0x554a, 0x5531, 0x5556, 0x554f, 0x5555, 0x552f, 0x5564, 0x5538, 0x552e, 0x555c, 0x552c, 0x5563, 0x5533, 0x5541, 0x5557, 0x5708, 0x570b, 0x5709, 0x57df, 0x5805, 0x580a, 0x5806, 0x57e0, 0x57e4, 0x57fa, 0x5802, 0x5835, 0x57f7, 0x57f9, 0x5920, 0x5962, 0x5a36, 0x5a41, 0x5a49, 0x5a66, 0x5a6a, 0x5a40, 63, 0xb140, 0x5a3c, 0x5a62, 0x5a5a, 0x5a46, 0x5a4a, 0x5b70, 0x5bc7, 0x5bc5, 0x5bc4, 0x5bc2, 0x5bbf, 0x5bc6, 0x5c09, 0x5c08, 0x5c07, 0x5c60, 0x5c5c, 0x5c5d, 0x5d07, 0x5d06, 0x5d0e, 0x5d1b, 0x5d16, 0x5d22, 0x5d11, 0x5d29, 0x5d14, 0x5d19, 0x5d24, 0x5d27, 0x5d17, 0x5de2, 0x5e38, 0x5e36, 0x5e33, 0x5e37, 0x5eb7, 0x5eb8, 0x5eb6, 0x5eb5, 0x5ebe, 0x5f35, 0x5f37, 0x5f57, 0x5f6c, 0x5f69, 0x5f6b, 0x5f97, 0x5f99, 0x5f9e, 0x5f98, 0x5fa1, 0x5fa0, 0x5f9c, 0x607f, 0x60a3, 0x6089, 0x60a0, 0x60a8, 0x60cb, 0x60b4, 0x60e6, 0x60bd, 94, 0xb1a1, 0x60c5, 0x60bb, 0x60b5, 0x60dc, 0x60bc, 0x60d8, 0x60d5, 0x60c6, 0x60df, 0x60b8, 0x60da, 0x60c7, 0x621a, 0x621b, 0x6248, 0x63a0, 0x63a7, 0x6372, 0x6396, 0x63a2, 0x63a5, 0x6377, 0x6367, 0x6398, 0x63aa, 0x6371, 0x63a9, 0x6389, 0x6383, 0x639b, 0x636b, 0x63a8, 0x6384, 0x6388, 0x6399, 0x63a1, 0x63ac, 0x6392, 0x638f, 0x6380, 0x637b, 0x6369, 0x6368, 0x637a, 0x655d, 0x6556, 0x6551, 0x6559, 0x6557, 0x555f, 0x654f, 0x6558, 0x6555, 0x6554, 0x659c, 0x659b, 0x65ac, 0x65cf, 0x65cb, 0x65cc, 0x65ce, 0x665d, 0x665a, 0x6664, 0x6668, 0x6666, 0x665e, 0x66f9, 0x52d7, 0x671b, 0x6881, 0x68af, 0x68a2, 0x6893, 0x68b5, 0x687f, 0x6876, 0x68b1, 0x68a7, 0x6897, 0x68b0, 0x6883, 0x68c4, 0x68ad, 0x6886, 0x6885, 0x6894, 0x689d, 0x68a8, 0x689f, 0x68a1, 0x6882, 0x6b32, 0x6bba, 63, 0xb240, 0x6beb, 0x6bec, 0x6c2b, 0x6d8e, 0x6dbc, 0x6df3, 0x6dd9, 0x6db2, 0x6de1, 0x6dcc, 0x6de4, 0x6dfb, 0x6dfa, 0x6e05, 0x6dc7, 0x6dcb, 0x6daf, 0x6dd1, 0x6dae, 0x6dde, 0x6df9, 0x6db8, 0x6df7, 0x6df5, 0x6dc5, 0x6dd2, 0x6e1a, 0x6db5, 0x6dda, 0x6deb, 0x6dd8, 0x6dea, 0x6df1, 0x6dee, 0x6de8, 0x6dc6, 0x6dc4, 0x6daa, 0x6dec, 0x6dbf, 0x6de6, 0x70f9, 0x7109, 0x710a, 0x70fd, 0x70ef, 0x723d, 0x727d, 0x7281, 0x731c, 0x731b, 0x7316, 0x7313, 0x7319, 0x7387, 0x7405, 0x740a, 0x7403, 0x7406, 0x73fe, 0x740d, 0x74e0, 0x74f6, 94, 0xb2a1, 0x74f7, 0x751c, 0x7522, 0x7565, 0x7566, 0x7562, 0x7570, 0x758f, 0x75d4, 0x75d5, 0x75b5, 0x75ca, 0x75cd, 0x768e, 0x76d4, 0x76d2, 0x76db, 0x7737, 0x773e, 0x773c, 0x7736, 0x7738, 0x773a, 0x786b, 0x7843, 0x784e, 0x7965, 0x7968, 0x796d, 0x79fb, 0x7a92, 0x7a95, 0x7b20, 0x7b28, 0x7b1b, 0x7b2c, 0x7b26, 0x7b19, 0x7b1e, 0x7b2e, 0x7c92, 0x7c97, 0x7c95, 0x7d46, 0x7d43, 0x7d71, 0x7d2e, 0x7d39, 0x7d3c, 0x7d40, 0x7d30, 0x7d33, 0x7d44, 0x7d2f, 0x7d42, 0x7d32, 0x7d31, 0x7f3d, 0x7f9e, 0x7f9a, 0x7fcc, 0x7fce, 0x7fd2, 0x801c, 0x804a, 0x8046, 0x812f, 0x8116, 0x8123, 0x812b, 0x8129, 0x8130, 0x8124, 0x8202, 0x8235, 0x8237, 0x8236, 0x8239, 0x838e, 0x839e, 0x8398, 0x8378, 0x83a2, 0x8396, 0x83bd, 0x83ab, 0x8392, 0x838a, 0x8393, 0x8389, 0x83a0, 0x8377, 0x837b, 0x837c, 63, 0xb340, 0x8386, 0x83a7, 0x8655, 0x5f6a, 0x86c7, 0x86c0, 0x86b6, 0x86c4, 0x86b5, 0x86c6, 0x86cb, 0x86b1, 0x86af, 0x86c9, 0x8853, 0x889e, 0x8888, 0x88ab, 0x8892, 0x8896, 0x888d, 0x888b, 0x8993, 0x898f, 0x8a2a, 0x8a1d, 0x8a23, 0x8a25, 0x8a31, 0x8a2d, 0x8a1f, 0x8a1b, 0x8a22, 0x8c49, 0x8c5a, 0x8ca9, 0x8cac, 0x8cab, 0x8ca8, 0x8caa, 0x8ca7, 0x8d67, 0x8d66, 0x8dbe, 0x8dba, 0x8edb, 0x8edf, 0x9019, 0x900d, 0x901a, 0x9017, 0x9023, 0x901f, 0x901d, 0x9010, 0x9015, 0x901e, 0x9020, 0x900f, 0x9022, 0x9016, 0x901b, 0x9014, 94, 0xb3a1, 0x90e8, 0x90ed, 0x90fd, 0x9157, 0x91ce, 0x91f5, 0x91e6, 0x91e3, 0x91e7, 0x91ed, 0x91e9, 0x9589, 0x966a, 0x9675, 0x9673, 0x9678, 0x9670, 0x9674, 0x9676, 0x9677, 0x966c, 0x96c0, 0x96ea, 0x96e9, 0x7ae0, 0x7adf, 0x9802, 0x9803, 0x9b5a, 0x9ce5, 0x9e75, 0x9e7f, 0x9ea5, 0x9ebb, 0x50a2, 0x508d, 0x5085, 0x5099, 0x5091, 0x5080, 0x5096, 0x5098, 0x509a, 0x6700, 0x51f1, 0x5272, 0x5274, 0x5275, 0x5269, 0x52de, 0x52dd, 0x52db, 0x535a, 0x53a5, 0x557b, 0x5580, 0x55a7, 0x557c, 0x558a, 0x559d, 0x5598, 0x5582, 0x559c, 0x55aa, 0x5594, 0x5587, 0x558b, 0x5583, 0x55b3, 0x55ae, 0x559f, 0x553e, 0x55b2, 0x559a, 0x55bb, 0x55ac, 0x55b1, 0x557e, 0x5589, 0x55ab, 0x5599, 0x570d, 0x582f, 0x582a, 0x5834, 0x5824, 0x5830, 0x5831, 0x5821, 0x581d, 0x5820, 0x58f9, 0x58fa, 0x5960, 63, 0xb440, 0x5a77, 0x5a9a, 0x5a7f, 0x5a92, 0x5a9b, 0x5aa7, 0x5b73, 0x5b71, 0x5bd2, 0x5bcc, 0x5bd3, 0x5bd0, 0x5c0a, 0x5c0b, 0x5c31, 0x5d4c, 0x5d50, 0x5d34, 0x5d47, 0x5dfd, 0x5e45, 0x5e3d, 0x5e40, 0x5e43, 0x5e7e, 0x5eca, 0x5ec1, 0x5ec2, 0x5ec4, 0x5f3c, 0x5f6d, 0x5fa9, 0x5faa, 0x5fa8, 0x60d1, 0x60e1, 0x60b2, 0x60b6, 0x60e0, 0x611c, 0x6123, 0x60fa, 0x6115, 0x60f0, 0x60fb, 0x60f4, 0x6168, 0x60f1, 0x610e, 0x60f6, 0x6109, 0x6100, 0x6112, 0x621f, 0x6249, 0x63a3, 0x638c, 0x63cf, 0x63c0, 0x63e9, 0x63c9, 0x63c6, 0x63cd, 94, 0xb4a1, 0x63d2, 0x63e3, 0x63d0, 0x63e1, 0x63d6, 0x63ed, 0x63ee, 0x6376, 0x63f4, 0x63ea, 0x63db, 0x6452, 0x63da, 0x63f9, 0x655e, 0x6566, 0x6562, 0x6563, 0x6591, 0x6590, 0x65af, 0x666e, 0x6670, 0x6674, 0x6676, 0x666f, 0x6691, 0x667a, 0x667e, 0x6677, 0x66fe, 0x66ff, 0x671f, 0x671d, 0x68fa, 0x68d5, 0x68e0, 0x68d8, 0x68d7, 0x6905, 0x68df, 0x68f5, 0x68ee, 0x68e7, 0x68f9, 0x68d2, 0x68f2, 0x68e3, 0x68cb, 0x68cd, 0x690d, 0x6912, 0x690e, 0x68c9, 0x68da, 0x696e, 0x68fb, 0x6b3e, 0x6b3a, 0x6b3d, 0x6b98, 0x6b96, 0x6bbc, 0x6bef, 0x6c2e, 0x6c2f, 0x6c2c, 0x6e2f, 0x6e38, 0x6e54, 0x6e21, 0x6e32, 0x6e67, 0x6e4a, 0x6e20, 0x6e25, 0x6e23, 0x6e1b, 0x6e5b, 0x6e58, 0x6e24, 0x6e56, 0x6e6e, 0x6e2d, 0x6e26, 0x6e6f, 0x6e34, 0x6e4d, 0x6e3a, 0x6e2c, 0x6e43, 0x6e1d, 0x6e3e, 0x6ecb, 63, 0xb540, 0x6e89, 0x6e19, 0x6e4e, 0x6e63, 0x6e44, 0x6e72, 0x6e69, 0x6e5f, 0x7119, 0x711a, 0x7126, 0x7130, 0x7121, 0x7136, 0x716e, 0x711c, 0x724c, 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743a, 0x742a, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742f, 0x741b, 0x7426, 0x7428, 0x7525, 0x7526, 0x756b, 0x756a, 0x75e2, 0x75db, 0x75e3, 0x75d9, 0x75d8, 0x75de, 0x75e0, 0x767b, 0x767c, 0x7696, 0x7693, 0x76b4, 0x76dc, 0x774f, 0x77ed, 0x785d, 0x786c, 0x786f, 0x7a0d, 0x7a08, 0x7a0b, 0x7a05, 0x7a00, 0x7a98, 94, 0xb5a1, 0x7a97, 0x7a96, 0x7ae5, 0x7ae3, 0x7b49, 0x7b56, 0x7b46, 0x7b50, 0x7b52, 0x7b54, 0x7b4d, 0x7b4b, 0x7b4f, 0x7b51, 0x7c9f, 0x7ca5, 0x7d5e, 0x7d50, 0x7d68, 0x7d55, 0x7d2b, 0x7d6e, 0x7d72, 0x7d61, 0x7d66, 0x7d62, 0x7d70, 0x7d73, 0x5584, 0x7fd4, 0x7fd5, 0x800b, 0x8052, 0x8085, 0x8155, 0x8154, 0x814b, 0x8151, 0x814e, 0x8139, 0x8146, 0x813e, 0x814c, 0x8153, 0x8174, 0x8212, 0x821c, 0x83e9, 0x8403, 0x83f8, 0x840d, 0x83e0, 0x83c5, 0x840b, 0x83c1, 0x83ef, 0x83f1, 0x83f4, 0x8457, 0x840a, 0x83f0, 0x840c, 0x83cc, 0x83fd, 0x83f2, 0x83ca, 0x8438, 0x840e, 0x8404, 0x83dc, 0x8407, 0x83d4, 0x83df, 0x865b, 0x86df, 0x86d9, 0x86ed, 0x86d4, 0x86db, 0x86e4, 0x86d0, 0x86de, 0x8857, 0x88c1, 0x88c2, 0x88b1, 0x8983, 0x8996, 0x8a3b, 0x8a60, 0x8a55, 0x8a5e, 0x8a3c, 0x8a41, 63, 0xb640, 0x8a54, 0x8a5b, 0x8a50, 0x8a46, 0x8a34, 0x8a3a, 0x8a36, 0x8a56, 0x8c61, 0x8c82, 0x8caf, 0x8cbc, 0x8cb3, 0x8cbd, 0x8cc1, 0x8cbb, 0x8cc0, 0x8cb4, 0x8cb7, 0x8cb6, 0x8cbf, 0x8cb8, 0x8d8a, 0x8d85, 0x8d81, 0x8dce, 0x8ddd, 0x8dcb, 0x8dda, 0x8dd1, 0x8dcc, 0x8ddb, 0x8dc6, 0x8efb, 0x8ef8, 0x8efc, 0x8f9c, 0x902e, 0x9035, 0x9031, 0x9038, 0x9032, 0x9036, 0x9102, 0x90f5, 0x9109, 0x90fe, 0x9163, 0x9165, 0x91cf, 0x9214, 0x9215, 0x9223, 0x9209, 0x921e, 0x920d, 0x9210, 0x9207, 0x9211, 0x9594, 0x958f, 0x958b, 0x9591, 94, 0xb6a1, 0x9593, 0x9592, 0x958e, 0x968a, 0x968e, 0x968b, 0x967d, 0x9685, 0x9686, 0x968d, 0x9672, 0x9684, 0x96c1, 0x96c5, 0x96c4, 0x96c6, 0x96c7, 0x96ef, 0x96f2, 0x97cc, 0x9805, 0x9806, 0x9808, 0x98e7, 0x98ea, 0x98ef, 0x98e9, 0x98f2, 0x98ed, 0x99ae, 0x99ad, 0x9ec3, 0x9ecd, 0x9ed1, 0x4e82, 0x50ad, 0x50b5, 0x50b2, 0x50b3, 0x50c5, 0x50be, 0x50ac, 0x50b7, 0x50bb, 0x50af, 0x50c7, 0x527f, 0x5277, 0x527d, 0x52df, 0x52e6, 0x52e4, 0x52e2, 0x52e3, 0x532f, 0x55df, 0x55e8, 0x55d3, 0x55e6, 0x55ce, 0x55dc, 0x55c7, 0x55d1, 0x55e3, 0x55e4, 0x55ef, 0x55da, 0x55e1, 0x55c5, 0x55c6, 0x55e5, 0x55c9, 0x5712, 0x5713, 0x585e, 0x5851, 0x5858, 0x5857, 0x585a, 0x5854, 0x586b, 0x584c, 0x586d, 0x584a, 0x5862, 0x5852, 0x584b, 0x5967, 0x5ac1, 0x5ac9, 0x5acc, 0x5abe, 0x5abd, 0x5abc, 63, 0xb740, 0x5ab3, 0x5ac2, 0x5ab2, 0x5d69, 0x5d6f, 0x5e4c, 0x5e79, 0x5ec9, 0x5ec8, 0x5f12, 0x5f59, 0x5fac, 0x5fae, 0x611a, 0x610f, 0x6148, 0x611f, 0x60f3, 0x611b, 0x60f9, 0x6101, 0x6108, 0x614e, 0x614c, 0x6144, 0x614d, 0x613e, 0x6134, 0x6127, 0x610d, 0x6106, 0x6137, 0x6221, 0x6222, 0x6413, 0x643e, 0x641e, 0x642a, 0x642d, 0x643d, 0x642c, 0x640f, 0x641c, 0x6414, 0x640d, 0x6436, 0x6416, 0x6417, 0x6406, 0x656c, 0x659f, 0x65b0, 0x6697, 0x6689, 0x6687, 0x6688, 0x6696, 0x6684, 0x6698, 0x668d, 0x6703, 0x6994, 0x696d, 94, 0xb7a1, 0x695a, 0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982, 0x694a, 0x6968, 0x696b, 0x695e, 0x6953, 0x6979, 0x6986, 0x695d, 0x6963, 0x695b, 0x6b47, 0x6b72, 0x6bc0, 0x6bbf, 0x6bd3, 0x6bfd, 0x6ea2, 0x6eaf, 0x6ed3, 0x6eb6, 0x6ec2, 0x6e90, 0x6e9d, 0x6ec7, 0x6ec5, 0x6ea5, 0x6e98, 0x6ebc, 0x6eba, 0x6eab, 0x6ed1, 0x6e96, 0x6e9c, 0x6ec4, 0x6ed4, 0x6eaa, 0x6ea7, 0x6eb4, 0x714e, 0x7159, 0x7169, 0x7164, 0x7149, 0x7167, 0x715c, 0x716c, 0x7166, 0x714c, 0x7165, 0x715e, 0x7146, 0x7168, 0x7156, 0x723a, 0x7252, 0x7337, 0x7345, 0x733f, 0x733e, 0x746f, 0x745a, 0x7455, 0x745f, 0x745e, 0x7441, 0x743f, 0x7459, 0x745b, 0x745c, 0x7576, 0x7578, 0x7600, 0x75f0, 0x7601, 0x75f2, 0x75f1, 0x75fa, 0x75ff, 0x75f4, 0x75f3, 0x76de, 0x76df, 0x775b, 0x776b, 0x7766, 0x775e, 0x7763, 63, 0xb840, 0x7779, 0x776a, 0x776c, 0x775c, 0x7765, 0x7768, 0x7762, 0x77ee, 0x788e, 0x78b0, 0x7897, 0x7898, 0x788c, 0x7889, 0x787c, 0x7891, 0x7893, 0x787f, 0x797a, 0x797f, 0x7981, 0x842c, 0x79bd, 0x7a1c, 0x7a1a, 0x7a20, 0x7a14, 0x7a1f, 0x7a1e, 0x7a9f, 0x7aa0, 0x7b77, 0x7bc0, 0x7b60, 0x7b6e, 0x7b67, 0x7cb1, 0x7cb3, 0x7cb5, 0x7d93, 0x7d79, 0x7d91, 0x7d81, 0x7d8f, 0x7d5b, 0x7f6e, 0x7f69, 0x7f6a, 0x7f72, 0x7fa9, 0x7fa8, 0x7fa4, 0x8056, 0x8058, 0x8086, 0x8084, 0x8171, 0x8170, 0x8178, 0x8165, 0x816e, 0x8173, 0x816b, 94, 0xb8a1, 0x8179, 0x817a, 0x8166, 0x8205, 0x8247, 0x8482, 0x8477, 0x843d, 0x8431, 0x8475, 0x8466, 0x846b, 0x8449, 0x846c, 0x845b, 0x843c, 0x8435, 0x8461, 0x8463, 0x8469, 0x846d, 0x8446, 0x865e, 0x865c, 0x865f, 0x86f9, 0x8713, 0x8708, 0x8707, 0x8700, 0x86fe, 0x86fb, 0x8702, 0x8703, 0x8706, 0x870a, 0x8859, 0x88df, 0x88d4, 0x88d9, 0x88dc, 0x88d8, 0x88dd, 0x88e1, 0x88ca, 0x88d5, 0x88d2, 0x899c, 0x89e3, 0x8a6b, 0x8a72, 0x8a73, 0x8a66, 0x8a69, 0x8a70, 0x8a87, 0x8a7c, 0x8a63, 0x8aa0, 0x8a71, 0x8a85, 0x8a6d, 0x8a62, 0x8a6e, 0x8a6c, 0x8a79, 0x8a7b, 0x8a3e, 0x8a68, 0x8c62, 0x8c8a, 0x8c89, 0x8cca, 0x8cc7, 0x8cc8, 0x8cc4, 0x8cb2, 0x8cc3, 0x8cc2, 0x8cc5, 0x8de1, 0x8ddf, 0x8de8, 0x8def, 0x8df3, 0x8dfa, 0x8dea, 0x8de4, 0x8de6, 0x8eb2, 0x8f03, 0x8f09, 0x8efe, 0x8f0a, 63, 0xb940, 0x8f9f, 0x8fb2, 0x904b, 0x904a, 0x9053, 0x9042, 0x9054, 0x903c, 0x9055, 0x9050, 0x9047, 0x904f, 0x904e, 0x904d, 0x9051, 0x903e, 0x9041, 0x9112, 0x9117, 0x916c, 0x916a, 0x9169, 0x91c9, 0x9237, 0x9257, 0x9238, 0x923d, 0x9240, 0x923e, 0x925b, 0x924b, 0x9264, 0x9251, 0x9234, 0x9249, 0x924d, 0x9245, 0x9239, 0x923f, 0x925a, 0x9598, 0x9698, 0x9694, 0x9695, 0x96cd, 0x96cb, 0x96c9, 0x96ca, 0x96f7, 0x96fb, 0x96f9, 0x96f6, 0x9756, 0x9774, 0x9776, 0x9810, 0x9811, 0x9813, 0x980a, 0x9812, 0x980c, 0x98fc, 0x98f4, 94, 0xb9a1, 0x98fd, 0x98fe, 0x99b3, 0x99b1, 0x99b4, 0x9ae1, 0x9ce9, 0x9e82, 0x9f0e, 0x9f13, 0x9f20, 0x50e7, 0x50ee, 0x50e5, 0x50d6, 0x50ed, 0x50da, 0x50d5, 0x50cf, 0x50d1, 0x50f1, 0x50ce, 0x50e9, 0x5162, 0x51f3, 0x5283, 0x5282, 0x5331, 0x53ad, 0x55fe, 0x5600, 0x561b, 0x5617, 0x55fd, 0x5614, 0x5606, 0x5609, 0x560d, 0x560e, 0x55f7, 0x5616, 0x561f, 0x5608, 0x5610, 0x55f6, 0x5718, 0x5716, 0x5875, 0x587e, 0x5883, 0x5893, 0x588a, 0x5879, 0x5885, 0x587d, 0x58fd, 0x5925, 0x5922, 0x5924, 0x596a, 0x5969, 0x5ae1, 0x5ae6, 0x5ae9, 0x5ad7, 0x5ad6, 0x5ad8, 0x5ae3, 0x5b75, 0x5bde, 0x5be7, 0x5be1, 0x5be5, 0x5be6, 0x5be8, 0x5be2, 0x5be4, 0x5bdf, 0x5c0d, 0x5c62, 0x5d84, 0x5d87, 0x5e5b, 0x5e63, 0x5e55, 0x5e57, 0x5e54, 0x5ed3, 0x5ed6, 0x5f0a, 0x5f46, 0x5f70, 0x5fb9, 0x6147, 63, 0xba40, 0x613f, 0x614b, 0x6177, 0x6162, 0x6163, 0x615f, 0x615a, 0x6158, 0x6175, 0x622a, 0x6487, 0x6458, 0x6454, 0x64a4, 0x6478, 0x645f, 0x647a, 0x6451, 0x6467, 0x6434, 0x646d, 0x647b, 0x6572, 0x65a1, 0x65d7, 0x65d6, 0x66a2, 0x66a8, 0x669d, 0x699c, 0x69a8, 0x6995, 0x69c1, 0x69ae, 0x69d3, 0x69cb, 0x699b, 0x69b7, 0x69bb, 0x69ab, 0x69b4, 0x69d0, 0x69cd, 0x69ad, 0x69cc, 0x69a6, 0x69c3, 0x69a3, 0x6b49, 0x6b4c, 0x6c33, 0x6f33, 0x6f14, 0x6efe, 0x6f13, 0x6ef4, 0x6f29, 0x6f3e, 0x6f20, 0x6f2c, 0x6f0f, 0x6f02, 0x6f22, 94, 0xbaa1, 0x6eff, 0x6eef, 0x6f06, 0x6f31, 0x6f38, 0x6f32, 0x6f23, 0x6f15, 0x6f2b, 0x6f2f, 0x6f88, 0x6f2a, 0x6eec, 0x6f01, 0x6ef2, 0x6ecc, 0x6ef7, 0x7194, 0x7199, 0x717d, 0x718a, 0x7184, 0x7192, 0x723e, 0x7292, 0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746a, 0x7470, 0x746d, 0x7504, 0x7591, 0x7627, 0x760d, 0x760b, 0x7609, 0x7613, 0x76e1, 0x76e3, 0x7784, 0x777d, 0x777f, 0x7761, 0x78c1, 0x789f, 0x78a7, 0x78b3, 0x78a9, 0x78a3, 0x798e, 0x798f, 0x798d, 0x7a2e, 0x7a31, 0x7aaa, 0x7aa9, 0x7aed, 0x7aef, 0x7ba1, 0x7b95, 0x7b8b, 0x7b75, 0x7b97, 0x7b9d, 0x7b94, 0x7b8f, 0x7bb8, 0x7b87, 0x7b84, 0x7cb9, 0x7cbd, 0x7cbe, 0x7dbb, 0x7db0, 0x7d9c, 0x7dbd, 0x7dbe, 0x7da0, 0x7dca, 0x7db4, 0x7db2, 0x7db1, 0x7dba, 0x7da2, 0x7dbf, 0x7db5, 0x7db8, 0x7dad, 0x7dd2, 0x7dc7, 0x7dac, 63, 0xbb40, 0x7f70, 0x7fe0, 0x7fe1, 0x7fdf, 0x805e, 0x805a, 0x8087, 0x8150, 0x8180, 0x818f, 0x8188, 0x818a, 0x817f, 0x8182, 0x81e7, 0x81fa, 0x8207, 0x8214, 0x821e, 0x824b, 0x84c9, 0x84bf, 0x84c6, 0x84c4, 0x8499, 0x849e, 0x84b2, 0x849c, 0x84cb, 0x84b8, 0x84c0, 0x84d3, 0x8490, 0x84bc, 0x84d1, 0x84ca, 0x873f, 0x871c, 0x873b, 0x8722, 0x8725, 0x8734, 0x8718, 0x8755, 0x8737, 0x8729, 0x88f3, 0x8902, 0x88f4, 0x88f9, 0x88f8, 0x88fd, 0x88e8, 0x891a, 0x88ef, 0x8aa6, 0x8a8c, 0x8a9e, 0x8aa3, 0x8a8d, 0x8aa1, 0x8a93, 0x8aa4, 94, 0xbba1, 0x8aaa, 0x8aa5, 0x8aa8, 0x8a98, 0x8a91, 0x8a9a, 0x8aa7, 0x8c6a, 0x8c8d, 0x8c8c, 0x8cd3, 0x8cd1, 0x8cd2, 0x8d6b, 0x8d99, 0x8d95, 0x8dfc, 0x8f14, 0x8f12, 0x8f15, 0x8f13, 0x8fa3, 0x9060, 0x9058, 0x905c, 0x9063, 0x9059, 0x905e, 0x9062, 0x905d, 0x905b, 0x9119, 0x9118, 0x911e, 0x9175, 0x9178, 0x9177, 0x9174, 0x9278, 0x9280, 0x9285, 0x9298, 0x9296, 0x927b, 0x9293, 0x929c, 0x92a8, 0x927c, 0x9291, 0x95a1, 0x95a8, 0x95a9, 0x95a3, 0x95a5, 0x95a4, 0x9699, 0x969c, 0x969b, 0x96cc, 0x96d2, 0x9700, 0x977c, 0x9785, 0x97f6, 0x9817, 0x9818, 0x98af, 0x98b1, 0x9903, 0x9905, 0x990c, 0x9909, 0x99c1, 0x9aaf, 0x9ab0, 0x9ae6, 0x9b41, 0x9b42, 0x9cf4, 0x9cf6, 0x9cf3, 0x9ebc, 0x9f3b, 0x9f4a, 0x5104, 0x5100, 0x50fb, 0x50f5, 0x50f9, 0x5102, 0x5108, 0x5109, 0x5105, 0x51dc, 63, 0xbc40, 0x5287, 0x5288, 0x5289, 0x528d, 0x528a, 0x52f0, 0x53b2, 0x562e, 0x563b, 0x5639, 0x5632, 0x563f, 0x5634, 0x5629, 0x5653, 0x564e, 0x5657, 0x5674, 0x5636, 0x562f, 0x5630, 0x5880, 0x589f, 0x589e, 0x58b3, 0x589c, 0x58ae, 0x58a9, 0x58a6, 0x596d, 0x5b09, 0x5afb, 0x5b0b, 0x5af5, 0x5b0c, 0x5b08, 0x5bee, 0x5bec, 0x5be9, 0x5beb, 0x5c64, 0x5c65, 0x5d9d, 0x5d94, 0x5e62, 0x5e5f, 0x5e61, 0x5ee2, 0x5eda, 0x5edf, 0x5edd, 0x5ee3, 0x5ee0, 0x5f48, 0x5f71, 0x5fb7, 0x5fb5, 0x6176, 0x6167, 0x616e, 0x615d, 0x6155, 0x6182, 94, 0xbca1, 0x617c, 0x6170, 0x616b, 0x617e, 0x61a7, 0x6190, 0x61ab, 0x618e, 0x61ac, 0x619a, 0x61a4, 0x6194, 0x61ae, 0x622e, 0x6469, 0x646f, 0x6479, 0x649e, 0x64b2, 0x6488, 0x6490, 0x64b0, 0x64a5, 0x6493, 0x6495, 0x64a9, 0x6492, 0x64ae, 0x64ad, 0x64ab, 0x649a, 0x64ac, 0x6499, 0x64a2, 0x64b3, 0x6575, 0x6577, 0x6578, 0x66ae, 0x66ab, 0x66b4, 0x66b1, 0x6a23, 0x6a1f, 0x69e8, 0x6a01, 0x6a1e, 0x6a19, 0x69fd, 0x6a21, 0x6a13, 0x6a0a, 0x69f3, 0x6a02, 0x6a05, 0x69ed, 0x6a11, 0x6b50, 0x6b4e, 0x6ba4, 0x6bc5, 0x6bc6, 0x6f3f, 0x6f7c, 0x6f84, 0x6f51, 0x6f66, 0x6f54, 0x6f86, 0x6f6d, 0x6f5b, 0x6f78, 0x6f6e, 0x6f8e, 0x6f7a, 0x6f70, 0x6f64, 0x6f97, 0x6f58, 0x6ed5, 0x6f6f, 0x6f60, 0x6f5f, 0x719f, 0x71ac, 0x71b1, 0x71a8, 0x7256, 0x729b, 0x734e, 0x7357, 0x7469, 0x748b, 0x7483, 63, 0xbd40, 0x747e, 0x7480, 0x757f, 0x7620, 0x7629, 0x761f, 0x7624, 0x7626, 0x7621, 0x7622, 0x769a, 0x76ba, 0x76e4, 0x778e, 0x7787, 0x778c, 0x7791, 0x778b, 0x78cb, 0x78c5, 0x78ba, 0x78ca, 0x78be, 0x78d5, 0x78bc, 0x78d0, 0x7a3f, 0x7a3c, 0x7a40, 0x7a3d, 0x7a37, 0x7a3b, 0x7aaf, 0x7aae, 0x7bad, 0x7bb1, 0x7bc4, 0x7bb4, 0x7bc6, 0x7bc7, 0x7bc1, 0x7ba0, 0x7bcc, 0x7cca, 0x7de0, 0x7df4, 0x7def, 0x7dfb, 0x7dd8, 0x7dec, 0x7ddd, 0x7de8, 0x7de3, 0x7dda, 0x7dde, 0x7de9, 0x7d9e, 0x7dd9, 0x7df2, 0x7df9, 0x7f75, 0x7f77, 0x7faf, 94, 0xbda1, 0x7fe9, 0x8026, 0x819b, 0x819c, 0x819d, 0x81a0, 0x819a, 0x8198, 0x8517, 0x853d, 0x851a, 0x84ee, 0x852c, 0x852d, 0x8513, 0x8511, 0x8523, 0x8521, 0x8514, 0x84ec, 0x8525, 0x84ff, 0x8506, 0x8782, 0x8774, 0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759, 0x8757, 0x874c, 0x8753, 0x885b, 0x885d, 0x8910, 0x8907, 0x8912, 0x8913, 0x8915, 0x890a, 0x8abc, 0x8ad2, 0x8ac7, 0x8ac4, 0x8a95, 0x8acb, 0x8af8, 0x8ab2, 0x8ac9, 0x8ac2, 0x8abf, 0x8ab0, 0x8ad6, 0x8acd, 0x8ab6, 0x8ab9, 0x8adb, 0x8c4c, 0x8c4e, 0x8c6c, 0x8ce0, 0x8cde, 0x8ce6, 0x8ce4, 0x8cec, 0x8ced, 0x8ce2, 0x8ce3, 0x8cdc, 0x8cea, 0x8ce1, 0x8d6d, 0x8d9f, 0x8da3, 0x8e2b, 0x8e10, 0x8e1d, 0x8e22, 0x8e0f, 0x8e29, 0x8e1f, 0x8e21, 0x8e1e, 0x8eba, 0x8f1d, 0x8f1b, 0x8f1f, 0x8f29, 0x8f26, 0x8f2a, 0x8f1c, 0x8f1e, 63, 0xbe40, 0x8f25, 0x9069, 0x906e, 0x9068, 0x906d, 0x9077, 0x9130, 0x912d, 0x9127, 0x9131, 0x9187, 0x9189, 0x918b, 0x9183, 0x92c5, 0x92bb, 0x92b7, 0x92ea, 0x92ac, 0x92e4, 0x92c1, 0x92b3, 0x92bc, 0x92d2, 0x92c7, 0x92f0, 0x92b2, 0x95ad, 0x95b1, 0x9704, 0x9706, 0x9707, 0x9709, 0x9760, 0x978d, 0x978b, 0x978f, 0x9821, 0x982b, 0x981c, 0x98b3, 0x990a, 0x9913, 0x9912, 0x9918, 0x99dd, 0x99d0, 0x99df, 0x99db, 0x99d1, 0x99d5, 0x99d2, 0x99d9, 0x9ab7, 0x9aee, 0x9aef, 0x9b27, 0x9b45, 0x9b44, 0x9b77, 0x9b6f, 0x9d06, 0x9d09, 94, 0xbea1, 0x9d03, 0x9ea9, 0x9ebe, 0x9ece, 0x58a8, 0x9f52, 0x5112, 0x5118, 0x5114, 0x5110, 0x5115, 0x5180, 0x51aa, 0x51dd, 0x5291, 0x5293, 0x52f3, 0x5659, 0x566b, 0x5679, 0x5669, 0x5664, 0x5678, 0x566a, 0x5668, 0x5665, 0x5671, 0x566f, 0x566c, 0x5662, 0x5676, 0x58c1, 0x58be, 0x58c7, 0x58c5, 0x596e, 0x5b1d, 0x5b34, 0x5b78, 0x5bf0, 0x5c0e, 0x5f4a, 0x61b2, 0x6191, 0x61a9, 0x618a, 0x61cd, 0x61b6, 0x61be, 0x61ca, 0x61c8, 0x6230, 0x64c5, 0x64c1, 0x64cb, 0x64bb, 0x64bc, 0x64da, 0x64c4, 0x64c7, 0x64c2, 0x64cd, 0x64bf, 0x64d2, 0x64d4, 0x64be, 0x6574, 0x66c6, 0x66c9, 0x66b9, 0x66c4, 0x66c7, 0x66b8, 0x6a3d, 0x6a38, 0x6a3a, 0x6a59, 0x6a6b, 0x6a58, 0x6a39, 0x6a44, 0x6a62, 0x6a61, 0x6a4b, 0x6a47, 0x6a35, 0x6a5f, 0x6a48, 0x6b59, 0x6b77, 0x6c05, 0x6fc2, 0x6fb1, 0x6fa1, 63, 0xbf40, 0x6fc3, 0x6fa4, 0x6fc1, 0x6fa7, 0x6fb3, 0x6fc0, 0x6fb9, 0x6fb6, 0x6fa6, 0x6fa0, 0x6fb4, 0x71be, 0x71c9, 0x71d0, 0x71d2, 0x71c8, 0x71d5, 0x71b9, 0x71ce, 0x71d9, 0x71dc, 0x71c3, 0x71c4, 0x7368, 0x749c, 0x74a3, 0x7498, 0x749f, 0x749e, 0x74e2, 0x750c, 0x750d, 0x7634, 0x7638, 0x763a, 0x76e7, 0x76e5, 0x77a0, 0x779e, 0x779f, 0x77a5, 0x78e8, 0x78da, 0x78ec, 0x78e7, 0x79a6, 0x7a4d, 0x7a4e, 0x7a46, 0x7a4c, 0x7a4b, 0x7aba, 0x7bd9, 0x7c11, 0x7bc9, 0x7be4, 0x7bdb, 0x7be1, 0x7be9, 0x7be6, 0x7cd5, 0x7cd6, 0x7e0a, 94, 0xbfa1, 0x7e11, 0x7e08, 0x7e1b, 0x7e23, 0x7e1e, 0x7e1d, 0x7e09, 0x7e10, 0x7f79, 0x7fb2, 0x7ff0, 0x7ff1, 0x7fee, 0x8028, 0x81b3, 0x81a9, 0x81a8, 0x81fb, 0x8208, 0x8258, 0x8259, 0x854a, 0x8559, 0x8548, 0x8568, 0x8569, 0x8543, 0x8549, 0x856d, 0x856a, 0x855e, 0x8783, 0x879f, 0x879e, 0x87a2, 0x878d, 0x8861, 0x892a, 0x8932, 0x8925, 0x892b, 0x8921, 0x89aa, 0x89a6, 0x8ae6, 0x8afa, 0x8aeb, 0x8af1, 0x8b00, 0x8adc, 0x8ae7, 0x8aee, 0x8afe, 0x8b01, 0x8b02, 0x8af7, 0x8aed, 0x8af3, 0x8af6, 0x8afc, 0x8c6b, 0x8c6d, 0x8c93, 0x8cf4, 0x8e44, 0x8e31, 0x8e34, 0x8e42, 0x8e39, 0x8e35, 0x8f3b, 0x8f2f, 0x8f38, 0x8f33, 0x8fa8, 0x8fa6, 0x9075, 0x9074, 0x9078, 0x9072, 0x907c, 0x907a, 0x9134, 0x9192, 0x9320, 0x9336, 0x92f8, 0x9333, 0x932f, 0x9322, 0x92fc, 0x932b, 0x9304, 0x931a, 63, 0xc040, 0x9310, 0x9326, 0x9321, 0x9315, 0x932e, 0x9319, 0x95bb, 0x96a7, 0x96a8, 0x96aa, 0x96d5, 0x970e, 0x9711, 0x9716, 0x970d, 0x9713, 0x970f, 0x975b, 0x975c, 0x9766, 0x9798, 0x9830, 0x9838, 0x983b, 0x9837, 0x982d, 0x9839, 0x9824, 0x9910, 0x9928, 0x991e, 0x991b, 0x9921, 0x991a, 0x99ed, 0x99e2, 0x99f1, 0x9ab8, 0x9abc, 0x9afb, 0x9aed, 0x9b28, 0x9b91, 0x9d15, 0x9d23, 0x9d26, 0x9d28, 0x9d12, 0x9d1b, 0x9ed8, 0x9ed4, 0x9f8d, 0x9f9c, 0x512a, 0x511f, 0x5121, 0x5132, 0x52f5, 0x568e, 0x5680, 0x5690, 0x5685, 0x5687, 94, 0xc0a1, 0x568f, 0x58d5, 0x58d3, 0x58d1, 0x58ce, 0x5b30, 0x5b2a, 0x5b24, 0x5b7a, 0x5c37, 0x5c68, 0x5dbc, 0x5dba, 0x5dbd, 0x5db8, 0x5e6b, 0x5f4c, 0x5fbd, 0x61c9, 0x61c2, 0x61c7, 0x61e6, 0x61cb, 0x6232, 0x6234, 0x64ce, 0x64ca, 0x64d8, 0x64e0, 0x64f0, 0x64e6, 0x64ec, 0x64f1, 0x64e2, 0x64ed, 0x6582, 0x6583, 0x66d9, 0x66d6, 0x6a80, 0x6a94, 0x6a84, 0x6aa2, 0x6a9c, 0x6adb, 0x6aa3, 0x6a7e, 0x6a97, 0x6a90, 0x6aa0, 0x6b5c, 0x6bae, 0x6bda, 0x6c08, 0x6fd8, 0x6ff1, 0x6fdf, 0x6fe0, 0x6fdb, 0x6fe4, 0x6feb, 0x6fef, 0x6f80, 0x6fec, 0x6fe1, 0x6fe9, 0x6fd5, 0x6fee, 0x6ff0, 0x71e7, 0x71df, 0x71ee, 0x71e6, 0x71e5, 0x71ed, 0x71ec, 0x71f4, 0x71e0, 0x7235, 0x7246, 0x7370, 0x7372, 0x74a9, 0x74b0, 0x74a6, 0x74a8, 0x7646, 0x7642, 0x764c, 0x76ea, 0x77b3, 0x77aa, 0x77b0, 0x77ac, 63, 0xc140, 0x77a7, 0x77ad, 0x77ef, 0x78f7, 0x78fa, 0x78f4, 0x78ef, 0x7901, 0x79a7, 0x79aa, 0x7a57, 0x7abf, 0x7c07, 0x7c0d, 0x7bfe, 0x7bf7, 0x7c0c, 0x7be0, 0x7ce0, 0x7cdc, 0x7cde, 0x7ce2, 0x7cdf, 0x7cd9, 0x7cdd, 0x7e2e, 0x7e3e, 0x7e46, 0x7e37, 0x7e32, 0x7e43, 0x7e2b, 0x7e3d, 0x7e31, 0x7e45, 0x7e41, 0x7e34, 0x7e39, 0x7e48, 0x7e35, 0x7e3f, 0x7e2f, 0x7f44, 0x7ff3, 0x7ffc, 0x8071, 0x8072, 0x8070, 0x806f, 0x8073, 0x81c6, 0x81c3, 0x81ba, 0x81c2, 0x81c0, 0x81bf, 0x81bd, 0x81c9, 0x81be, 0x81e8, 0x8209, 0x8271, 0x85aa, 94, 0xc1a1, 0x8584, 0x857e, 0x859c, 0x8591, 0x8594, 0x85af, 0x859b, 0x8587, 0x85a8, 0x858a, 0x8667, 0x87c0, 0x87d1, 0x87b3, 0x87d2, 0x87c6, 0x87ab, 0x87bb, 0x87ba, 0x87c8, 0x87cb, 0x893b, 0x8936, 0x8944, 0x8938, 0x893d, 0x89ac, 0x8b0e, 0x8b17, 0x8b19, 0x8b1b, 0x8b0a, 0x8b20, 0x8b1d, 0x8b04, 0x8b10, 0x8c41, 0x8c3f, 0x8c73, 0x8cfa, 0x8cfd, 0x8cfc, 0x8cf8, 0x8cfb, 0x8da8, 0x8e49, 0x8e4b, 0x8e48, 0x8e4a, 0x8f44, 0x8f3e, 0x8f42, 0x8f45, 0x8f3f, 0x907f, 0x907d, 0x9084, 0x9081, 0x9082, 0x9080, 0x9139, 0x91a3, 0x919e, 0x919c, 0x934d, 0x9382, 0x9328, 0x9375, 0x934a, 0x9365, 0x934b, 0x9318, 0x937e, 0x936c, 0x935b, 0x9370, 0x935a, 0x9354, 0x95ca, 0x95cb, 0x95cc, 0x95c8, 0x95c6, 0x96b1, 0x96b8, 0x96d6, 0x971c, 0x971e, 0x97a0, 0x97d3, 0x9846, 0x98b6, 0x9935, 0x9a01, 63, 0xc240, 0x99ff, 0x9bae, 0x9bab, 0x9baa, 0x9bad, 0x9d3b, 0x9d3f, 0x9e8b, 0x9ecf, 0x9ede, 0x9edc, 0x9edd, 0x9edb, 0x9f3e, 0x9f4b, 0x53e2, 0x5695, 0x56ae, 0x58d9, 0x58d8, 0x5b38, 0x5f5d, 0x61e3, 0x6233, 0x64f4, 0x64f2, 0x64fe, 0x6506, 0x64fa, 0x64fb, 0x64f7, 0x65b7, 0x66dc, 0x6726, 0x6ab3, 0x6aac, 0x6ac3, 0x6abb, 0x6ab8, 0x6ac2, 0x6aae, 0x6aaf, 0x6b5f, 0x6b78, 0x6baf, 0x7009, 0x700b, 0x6ffe, 0x7006, 0x6ffa, 0x7011, 0x700f, 0x71fb, 0x71fc, 0x71fe, 0x71f8, 0x7377, 0x7375, 0x74a7, 0x74bf, 0x7515, 0x7656, 0x7658, 94, 0xc2a1, 0x7652, 0x77bd, 0x77bf, 0x77bb, 0x77bc, 0x790e, 0x79ae, 0x7a61, 0x7a62, 0x7a60, 0x7ac4, 0x7ac5, 0x7c2b, 0x7c27, 0x7c2a, 0x7c1e, 0x7c23, 0x7c21, 0x7ce7, 0x7e54, 0x7e55, 0x7e5e, 0x7e5a, 0x7e61, 0x7e52, 0x7e59, 0x7f48, 0x7ff9, 0x7ffb, 0x8077, 0x8076, 0x81cd, 0x81cf, 0x820a, 0x85cf, 0x85a9, 0x85cd, 0x85d0, 0x85c9, 0x85b0, 0x85ba, 0x85b9, 0x85a6, 0x87ef, 0x87ec, 0x87f2, 0x87e0, 0x8986, 0x89b2, 0x89f4, 0x8b28, 0x8b39, 0x8b2c, 0x8b2b, 0x8c50, 0x8d05, 0x8e59, 0x8e63, 0x8e66, 0x8e64, 0x8e5f, 0x8e55, 0x8ec0, 0x8f49, 0x8f4d, 0x9087, 0x9083, 0x9088, 0x91ab, 0x91ac, 0x91d0, 0x9394, 0x938a, 0x9396, 0x93a2, 0x93b3, 0x93ae, 0x93ac, 0x93b0, 0x9398, 0x939a, 0x9397, 0x95d4, 0x95d6, 0x95d0, 0x95d5, 0x96e2, 0x96dc, 0x96d9, 0x96db, 0x96de, 0x9724, 0x97a3, 0x97a6, 63, 0xc340, 0x97ad, 0x97f9, 0x984d, 0x984f, 0x984c, 0x984e, 0x9853, 0x98ba, 0x993e, 0x993f, 0x993d, 0x992e, 0x99a5, 0x9a0e, 0x9ac1, 0x9b03, 0x9b06, 0x9b4f, 0x9b4e, 0x9b4d, 0x9bca, 0x9bc9, 0x9bfd, 0x9bc8, 0x9bc0, 0x9d51, 0x9d5d, 0x9d60, 0x9ee0, 0x9f15, 0x9f2c, 0x5133, 0x56a5, 0x58de, 0x58df, 0x58e2, 0x5bf5, 0x9f90, 0x5eec, 0x61f2, 0x61f7, 0x61f6, 0x61f5, 0x6500, 0x650f, 0x66e0, 0x66dd, 0x6ae5, 0x6add, 0x6ada, 0x6ad3, 0x701b, 0x701f, 0x7028, 0x701a, 0x701d, 0x7015, 0x7018, 0x7206, 0x720d, 0x7258, 0x72a2, 0x7378, 94, 0xc3a1, 0x737a, 0x74bd, 0x74ca, 0x74e3, 0x7587, 0x7586, 0x765f, 0x7661, 0x77c7, 0x7919, 0x79b1, 0x7a6b, 0x7a69, 0x7c3e, 0x7c3f, 0x7c38, 0x7c3d, 0x7c37, 0x7c40, 0x7e6b, 0x7e6d, 0x7e79, 0x7e69, 0x7e6a, 0x7f85, 0x7e73, 0x7fb6, 0x7fb9, 0x7fb8, 0x81d8, 0x85e9, 0x85dd, 0x85ea, 0x85d5, 0x85e4, 0x85e5, 0x85f7, 0x87fb, 0x8805, 0x880d, 0x87f9, 0x87fe, 0x8960, 0x895f, 0x8956, 0x895e, 0x8b41, 0x8b5c, 0x8b58, 0x8b49, 0x8b5a, 0x8b4e, 0x8b4f, 0x8b46, 0x8b59, 0x8d08, 0x8d0a, 0x8e7c, 0x8e72, 0x8e87, 0x8e76, 0x8e6c, 0x8e7a, 0x8e74, 0x8f54, 0x8f4e, 0x8fad, 0x908a, 0x908b, 0x91b1, 0x91ae, 0x93e1, 0x93d1, 0x93df, 0x93c3, 0x93c8, 0x93dc, 0x93dd, 0x93d6, 0x93e2, 0x93cd, 0x93d8, 0x93e4, 0x93d7, 0x93e8, 0x95dc, 0x96b4, 0x96e3, 0x972a, 0x9727, 0x9761, 0x97dc, 0x97fb, 0x985e, 63, 0xc440, 0x9858, 0x985b, 0x98bc, 0x9945, 0x9949, 0x9a16, 0x9a19, 0x9b0d, 0x9be8, 0x9be7, 0x9bd6, 0x9bdb, 0x9d89, 0x9d61, 0x9d72, 0x9d6a, 0x9d6c, 0x9e92, 0x9e97, 0x9e93, 0x9eb4, 0x52f8, 0x56a8, 0x56b7, 0x56b6, 0x56b4, 0x56bc, 0x58e4, 0x5b40, 0x5b43, 0x5b7d, 0x5bf6, 0x5dc9, 0x61f8, 0x61fa, 0x6518, 0x6514, 0x6519, 0x66e6, 0x6727, 0x6aec, 0x703e, 0x7030, 0x7032, 0x7210, 0x737b, 0x74cf, 0x7662, 0x7665, 0x7926, 0x792a, 0x792c, 0x792b, 0x7ac7, 0x7af6, 0x7c4c, 0x7c43, 0x7c4d, 0x7cef, 0x7cf0, 0x8fae, 0x7e7d, 0x7e7c, 94, 0xc4a1, 0x7e82, 0x7f4c, 0x8000, 0x81da, 0x8266, 0x85fb, 0x85f9, 0x8611, 0x85fa, 0x8606, 0x860b, 0x8607, 0x860a, 0x8814, 0x8815, 0x8964, 0x89ba, 0x89f8, 0x8b70, 0x8b6c, 0x8b66, 0x8b6f, 0x8b5f, 0x8b6b, 0x8d0f, 0x8d0d, 0x8e89, 0x8e81, 0x8e85, 0x8e82, 0x91b4, 0x91cb, 0x9418, 0x9403, 0x93fd, 0x95e1, 0x9730, 0x98c4, 0x9952, 0x9951, 0x99a8, 0x9a2b, 0x9a30, 0x9a37, 0x9a35, 0x9c13, 0x9c0d, 0x9e79, 0x9eb5, 0x9ee8, 0x9f2f, 0x9f5f, 0x9f63, 0x9f61, 0x5137, 0x5138, 0x56c1, 0x56c0, 0x56c2, 0x5914, 0x5c6c, 0x5dcd, 0x61fc, 0x61fe, 0x651d, 0x651c, 0x6595, 0x66e9, 0x6afb, 0x6b04, 0x6afa, 0x6bb2, 0x704c, 0x721b, 0x72a7, 0x74d6, 0x74d4, 0x7669, 0x77d3, 0x7c50, 0x7e8f, 0x7e8c, 0x7fbc, 0x8617, 0x862d, 0x861a, 0x8823, 0x8822, 0x8821, 0x881f, 0x896a, 0x896c, 0x89bd, 0x8b74, 63, 0xc540, 0x8b77, 0x8b7d, 0x8d13, 0x8e8a, 0x8e8d, 0x8e8b, 0x8f5f, 0x8faf, 0x91ba, 0x942e, 0x9433, 0x9435, 0x943a, 0x9438, 0x9432, 0x942b, 0x95e2, 0x9738, 0x9739, 0x9732, 0x97ff, 0x9867, 0x9865, 0x9957, 0x9a45, 0x9a43, 0x9a40, 0x9a3e, 0x9acf, 0x9b54, 0x9b51, 0x9c2d, 0x9c25, 0x9daf, 0x9db4, 0x9dc2, 0x9db8, 0x9e9d, 0x9eef, 0x9f19, 0x9f5c, 0x9f66, 0x9f67, 0x513c, 0x513b, 0x56c8, 0x56ca, 0x56c9, 0x5b7f, 0x5dd4, 0x5dd2, 0x5f4e, 0x61ff, 0x6524, 0x6b0a, 0x6b61, 0x7051, 0x7058, 0x7380, 0x74e4, 0x758a, 0x766e, 0x766c, 94, 0xc5a1, 0x79b3, 0x7c60, 0x7c5f, 0x807e, 0x807d, 0x81df, 0x8972, 0x896f, 0x89fc, 0x8b80, 0x8d16, 0x8d17, 0x8e91, 0x8e93, 0x8f61, 0x9148, 0x9444, 0x9451, 0x9452, 0x973d, 0x973e, 0x97c3, 0x97c1, 0x986b, 0x9955, 0x9a55, 0x9a4d, 0x9ad2, 0x9b1a, 0x9c49, 0x9c31, 0x9c3e, 0x9c3b, 0x9dd3, 0x9dd7, 0x9f34, 0x9f6c, 0x9f6a, 0x9f94, 0x56cc, 0x5dd6, 0x6200, 0x6523, 0x652b, 0x652a, 0x66ec, 0x6b10, 0x74da, 0x7aca, 0x7c64, 0x7c63, 0x7c65, 0x7e93, 0x7e96, 0x7e94, 0x81e2, 0x8638, 0x863f, 0x8831, 0x8b8a, 0x9090, 0x908f, 0x9463, 0x9460, 0x9464, 0x9768, 0x986f, 0x995c, 0x9a5a, 0x9a5b, 0x9a57, 0x9ad3, 0x9ad4, 0x9ad1, 0x9c54, 0x9c57, 0x9c56, 0x9de5, 0x9e9f, 0x9ef4, 0x56d1, 0x58e9, 0x652c, 0x705e, 0x7671, 0x7672, 0x77d7, 0x7f50, 0x7f88, 0x8836, 0x8839, 0x8862, 0x8b93, 0x8b92, 63, 0xc640, 0x8b96, 0x8277, 0x8d1b, 0x91c0, 0x946a, 0x9742, 0x9748, 0x9744, 0x97c6, 0x9870, 0x9a5f, 0x9b22, 0x9b58, 0x9c5f, 0x9df9, 0x9dfa, 0x9e7c, 0x9e7d, 0x9f07, 0x9f77, 0x9f72, 0x5ef3, 0x6b16, 0x7063, 0x7c6c, 0x7c6e, 0x883b, 0x89c0, 0x8ea1, 0x91c1, 0x9472, 0x9470, 0x9871, 0x995e, 0x9ad6, 0x9b23, 0x9ecc, 0x7064, 0x77da, 0x8b9a, 0x9477, 0x97c9, 0x9a62, 0x9a65, 0x7e9c, 0x8b9c, 0x8eaa, 0x91c5, 0x947d, 0x947e, 0x947c, 0x9c77, 0x9c78, 0x9ef7, 0x8c54, 0x947f, 0x9e1a, 0x7228, 0x9a6a, 0x9b31, 0x9e1b, 0x9e1e, 0x7c72, 63, 0xc940, 0x4e42, 0x4e5c, 0x51f5, 0x531a, 0x5382, 0x4e07, 0x4e0c, 0x4e47, 0x4e8d, 0x56d7, 0xfa0c, 0x5c6e, 0x5f73, 0x4e0f, 0x5187, 0x4e0e, 0x4e2e, 0x4e93, 0x4ec2, 0x4ec9, 0x4ec8, 0x5198, 0x52fc, 0x536c, 0x53b9, 0x5720, 0x5903, 0x592c, 0x5c10, 0x5dff, 0x65e1, 0x6bb3, 0x6bcc, 0x6c14, 0x723f, 0x4e31, 0x4e3c, 0x4ee8, 0x4edc, 0x4ee9, 0x4ee1, 0x4edd, 0x4eda, 0x520c, 0x531c, 0x534c, 0x5722, 0x5723, 0x5917, 0x592f, 0x5b81, 0x5b84, 0x5c12, 0x5c3b, 0x5c74, 0x5c73, 0x5e04, 0x5e80, 0x5e82, 0x5fc9, 0x6209, 0x6250, 0x6c15, 94, 0xc9a1, 0x6c36, 0x6c43, 0x6c3f, 0x6c3b, 0x72ae, 0x72b0, 0x738a, 0x79b8, 0x808a, 0x961e, 0x4f0e, 0x4f18, 0x4f2c, 0x4ef5, 0x4f14, 0x4ef1, 0x4f00, 0x4ef7, 0x4f08, 0x4f1d, 0x4f02, 0x4f05, 0x4f22, 0x4f13, 0x4f04, 0x4ef4, 0x4f12, 0x51b1, 0x5213, 0x5209, 0x5210, 0x52a6, 0x5322, 0x531f, 0x534d, 0x538a, 0x5407, 0x56e1, 0x56df, 0x572e, 0x572a, 0x5734, 0x593c, 0x5980, 0x597c, 0x5985, 0x597b, 0x597e, 0x5977, 0x597f, 0x5b56, 0x5c15, 0x5c25, 0x5c7c, 0x5c7a, 0x5c7b, 0x5c7e, 0x5ddf, 0x5e75, 0x5e84, 0x5f02, 0x5f1a, 0x5f74, 0x5fd5, 0x5fd4, 0x5fcf, 0x625c, 0x625e, 0x6264, 0x6261, 0x6266, 0x6262, 0x6259, 0x6260, 0x625a, 0x6265, 0x65ef, 0x65ee, 0x673e, 0x6739, 0x6738, 0x673b, 0x673a, 0x673f, 0x673c, 0x6733, 0x6c18, 0x6c46, 0x6c52, 0x6c5c, 0x6c4f, 0x6c4a, 0x6c54, 0x6c4b, 63, 0xca40, 0x6c4c, 0x7071, 0x725e, 0x72b4, 0x72b5, 0x738e, 0x752a, 0x767f, 0x7a75, 0x7f51, 0x8278, 0x827c, 0x8280, 0x827d, 0x827f, 0x864d, 0x897e, 0x9099, 0x9097, 0x9098, 0x909b, 0x9094, 0x9622, 0x9624, 0x9620, 0x9623, 0x4f56, 0x4f3b, 0x4f62, 0x4f49, 0x4f53, 0x4f64, 0x4f3e, 0x4f67, 0x4f52, 0x4f5f, 0x4f41, 0x4f58, 0x4f2d, 0x4f33, 0x4f3f, 0x4f61, 0x518f, 0x51b9, 0x521c, 0x521e, 0x5221, 0x52ad, 0x52ae, 0x5309, 0x5363, 0x5372, 0x538e, 0x538f, 0x5430, 0x5437, 0x542a, 0x5454, 0x5445, 0x5419, 0x541c, 0x5425, 0x5418, 94, 0xcaa1, 0x543d, 0x544f, 0x5441, 0x5428, 0x5424, 0x5447, 0x56ee, 0x56e7, 0x56e5, 0x5741, 0x5745, 0x574c, 0x5749, 0x574b, 0x5752, 0x5906, 0x5940, 0x59a6, 0x5998, 0x59a0, 0x5997, 0x598e, 0x59a2, 0x5990, 0x598f, 0x59a7, 0x59a1, 0x5b8e, 0x5b92, 0x5c28, 0x5c2a, 0x5c8d, 0x5c8f, 0x5c88, 0x5c8b, 0x5c89, 0x5c92, 0x5c8a, 0x5c86, 0x5c93, 0x5c95, 0x5de0, 0x5e0a, 0x5e0e, 0x5e8b, 0x5e89, 0x5e8c, 0x5e88, 0x5e8d, 0x5f05, 0x5f1d, 0x5f78, 0x5f76, 0x5fd2, 0x5fd1, 0x5fd0, 0x5fed, 0x5fe8, 0x5fee, 0x5ff3, 0x5fe1, 0x5fe4, 0x5fe3, 0x5ffa, 0x5fef, 0x5ff7, 0x5ffb, 0x6000, 0x5ff4, 0x623a, 0x6283, 0x628c, 0x628e, 0x628f, 0x6294, 0x6287, 0x6271, 0x627b, 0x627a, 0x6270, 0x6281, 0x6288, 0x6277, 0x627d, 0x6272, 0x6274, 0x6537, 0x65f0, 0x65f4, 0x65f3, 0x65f2, 0x65f5, 0x6745, 0x6747, 63, 0xcb40, 0x6759, 0x6755, 0x674c, 0x6748, 0x675d, 0x674d, 0x675a, 0x674b, 0x6bd0, 0x6c19, 0x6c1a, 0x6c78, 0x6c67, 0x6c6b, 0x6c84, 0x6c8b, 0x6c8f, 0x6c71, 0x6c6f, 0x6c69, 0x6c9a, 0x6c6d, 0x6c87, 0x6c95, 0x6c9c, 0x6c66, 0x6c73, 0x6c65, 0x6c7b, 0x6c8e, 0x7074, 0x707a, 0x7263, 0x72bf, 0x72bd, 0x72c3, 0x72c6, 0x72c1, 0x72ba, 0x72c5, 0x7395, 0x7397, 0x7393, 0x7394, 0x7392, 0x753a, 0x7539, 0x7594, 0x7595, 0x7681, 0x793d, 0x8034, 0x8095, 0x8099, 0x8090, 0x8092, 0x809c, 0x8290, 0x828f, 0x8285, 0x828e, 0x8291, 0x8293, 94, 0xcba1, 0x828a, 0x8283, 0x8284, 0x8c78, 0x8fc9, 0x8fbf, 0x909f, 0x90a1, 0x90a5, 0x909e, 0x90a7, 0x90a0, 0x9630, 0x9628, 0x962f, 0x962d, 0x4e33, 0x4f98, 0x4f7c, 0x4f85, 0x4f7d, 0x4f80, 0x4f87, 0x4f76, 0x4f74, 0x4f89, 0x4f84, 0x4f77, 0x4f4c, 0x4f97, 0x4f6a, 0x4f9a, 0x4f79, 0x4f81, 0x4f78, 0x4f90, 0x4f9c, 0x4f94, 0x4f9e, 0x4f92, 0x4f82, 0x4f95, 0x4f6b, 0x4f6e, 0x519e, 0x51bc, 0x51be, 0x5235, 0x5232, 0x5233, 0x5246, 0x5231, 0x52bc, 0x530a, 0x530b, 0x533c, 0x5392, 0x5394, 0x5487, 0x547f, 0x5481, 0x5491, 0x5482, 0x5488, 0x546b, 0x547a, 0x547e, 0x5465, 0x546c, 0x5474, 0x5466, 0x548d, 0x546f, 0x5461, 0x5460, 0x5498, 0x5463, 0x5467, 0x5464, 0x56f7, 0x56f9, 0x576f, 0x5772, 0x576d, 0x576b, 0x5771, 0x5770, 0x5776, 0x5780, 0x5775, 0x577b, 0x5773, 0x5774, 0x5762, 63, 0xcc40, 0x5768, 0x577d, 0x590c, 0x5945, 0x59b5, 0x59ba, 0x59cf, 0x59ce, 0x59b2, 0x59cc, 0x59c1, 0x59b6, 0x59bc, 0x59c3, 0x59d6, 0x59b1, 0x59bd, 0x59c0, 0x59c8, 0x59b4, 0x59c7, 0x5b62, 0x5b65, 0x5b93, 0x5b95, 0x5c44, 0x5c47, 0x5cae, 0x5ca4, 0x5ca0, 0x5cb5, 0x5caf, 0x5ca8, 0x5cac, 0x5c9f, 0x5ca3, 0x5cad, 0x5ca2, 0x5caa, 0x5ca7, 0x5c9d, 0x5ca5, 0x5cb6, 0x5cb0, 0x5ca6, 0x5e17, 0x5e14, 0x5e19, 0x5f28, 0x5f22, 0x5f23, 0x5f24, 0x5f54, 0x5f82, 0x5f7e, 0x5f7d, 0x5fde, 0x5fe5, 0x602d, 0x6026, 0x6019, 0x6032, 0x600b, 94, 0xcca1, 0x6034, 0x600a, 0x6017, 0x6033, 0x601a, 0x601e, 0x602c, 0x6022, 0x600d, 0x6010, 0x602e, 0x6013, 0x6011, 0x600c, 0x6009, 0x601c, 0x6214, 0x623d, 0x62ad, 0x62b4, 0x62d1, 0x62be, 0x62aa, 0x62b6, 0x62ca, 0x62ae, 0x62b3, 0x62af, 0x62bb, 0x62a9, 0x62b0, 0x62b8, 0x653d, 0x65a8, 0x65bb, 0x6609, 0x65fc, 0x6604, 0x6612, 0x6608, 0x65fb, 0x6603, 0x660b, 0x660d, 0x6605, 0x65fd, 0x6611, 0x6610, 0x66f6, 0x670a, 0x6785, 0x676c, 0x678e, 0x6792, 0x6776, 0x677b, 0x6798, 0x6786, 0x6784, 0x6774, 0x678d, 0x678c, 0x677a, 0x679f, 0x6791, 0x6799, 0x6783, 0x677d, 0x6781, 0x6778, 0x6779, 0x6794, 0x6b25, 0x6b80, 0x6b7e, 0x6bde, 0x6c1d, 0x6c93, 0x6cec, 0x6ceb, 0x6cee, 0x6cd9, 0x6cb6, 0x6cd4, 0x6cad, 0x6ce7, 0x6cb7, 0x6cd0, 0x6cc2, 0x6cba, 0x6cc3, 0x6cc6, 0x6ced, 0x6cf2, 63, 0xcd40, 0x6cd2, 0x6cdd, 0x6cb4, 0x6c8a, 0x6c9d, 0x6c80, 0x6cde, 0x6cc0, 0x6d30, 0x6ccd, 0x6cc7, 0x6cb0, 0x6cf9, 0x6ccf, 0x6ce9, 0x6cd1, 0x7094, 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096, 0x7082, 0x709a, 0x7083, 0x726a, 0x72d6, 0x72cb, 0x72d8, 0x72c9, 0x72dc, 0x72d2, 0x72d4, 0x72da, 0x72cc, 0x72d1, 0x73a4, 0x73a1, 0x73ad, 0x73a6, 0x73a2, 0x73a0, 0x73ac, 0x739d, 0x74dd, 0x74e8, 0x753f, 0x7540, 0x753e, 0x758c, 0x7598, 0x76af, 0x76f3, 0x76f1, 0x76f0, 0x76f5, 0x77f8, 0x77fc, 0x77f9, 0x77fb, 0x77fa, 94, 0xcda1, 0x77f7, 0x7942, 0x793f, 0x79c5, 0x7a78, 0x7a7b, 0x7afb, 0x7c75, 0x7cfd, 0x8035, 0x808f, 0x80ae, 0x80a3, 0x80b8, 0x80b5, 0x80ad, 0x8220, 0x82a0, 0x82c0, 0x82ab, 0x829a, 0x8298, 0x829b, 0x82b5, 0x82a7, 0x82ae, 0x82bc, 0x829e, 0x82ba, 0x82b4, 0x82a8, 0x82a1, 0x82a9, 0x82c2, 0x82a4, 0x82c3, 0x82b6, 0x82a2, 0x8670, 0x866f, 0x866d, 0x866e, 0x8c56, 0x8fd2, 0x8fcb, 0x8fd3, 0x8fcd, 0x8fd6, 0x8fd5, 0x8fd7, 0x90b2, 0x90b4, 0x90af, 0x90b3, 0x90b0, 0x9639, 0x963d, 0x963c, 0x963a, 0x9643, 0x4fcd, 0x4fc5, 0x4fd3, 0x4fb2, 0x4fc9, 0x4fcb, 0x4fc1, 0x4fd4, 0x4fdc, 0x4fd9, 0x4fbb, 0x4fb3, 0x4fdb, 0x4fc7, 0x4fd6, 0x4fba, 0x4fc0, 0x4fb9, 0x4fec, 0x5244, 0x5249, 0x52c0, 0x52c2, 0x533d, 0x537c, 0x5397, 0x5396, 0x5399, 0x5398, 0x54ba, 0x54a1, 0x54ad, 0x54a5, 0x54cf, 63, 0xce40, 0x54c3, 0x830d, 0x54b7, 0x54ae, 0x54d6, 0x54b6, 0x54c5, 0x54c6, 0x54a0, 0x5470, 0x54bc, 0x54a2, 0x54be, 0x5472, 0x54de, 0x54b0, 0x57b5, 0x579e, 0x579f, 0x57a4, 0x578c, 0x5797, 0x579d, 0x579b, 0x5794, 0x5798, 0x578f, 0x5799, 0x57a5, 0x579a, 0x5795, 0x58f4, 0x590d, 0x5953, 0x59e1, 0x59de, 0x59ee, 0x5a00, 0x59f1, 0x59dd, 0x59fa, 0x59fd, 0x59fc, 0x59f6, 0x59e4, 0x59f2, 0x59f7, 0x59db, 0x59e9, 0x59f3, 0x59f5, 0x59e0, 0x59fe, 0x59f4, 0x59ed, 0x5ba8, 0x5c4c, 0x5cd0, 0x5cd8, 0x5ccc, 0x5cd7, 0x5ccb, 0x5cdb, 94, 0xcea1, 0x5cde, 0x5cda, 0x5cc9, 0x5cc7, 0x5cca, 0x5cd6, 0x5cd3, 0x5cd4, 0x5ccf, 0x5cc8, 0x5cc6, 0x5cce, 0x5cdf, 0x5cf8, 0x5df9, 0x5e21, 0x5e22, 0x5e23, 0x5e20, 0x5e24, 0x5eb0, 0x5ea4, 0x5ea2, 0x5e9b, 0x5ea3, 0x5ea5, 0x5f07, 0x5f2e, 0x5f56, 0x5f86, 0x6037, 0x6039, 0x6054, 0x6072, 0x605e, 0x6045, 0x6053, 0x6047, 0x6049, 0x605b, 0x604c, 0x6040, 0x6042, 0x605f, 0x6024, 0x6044, 0x6058, 0x6066, 0x606e, 0x6242, 0x6243, 0x62cf, 0x630d, 0x630b, 0x62f5, 0x630e, 0x6303, 0x62eb, 0x62f9, 0x630f, 0x630c, 0x62f8, 0x62f6, 0x6300, 0x6313, 0x6314, 0x62fa, 0x6315, 0x62fb, 0x62f0, 0x6541, 0x6543, 0x65aa, 0x65bf, 0x6636, 0x6621, 0x6632, 0x6635, 0x661c, 0x6626, 0x6622, 0x6633, 0x662b, 0x663a, 0x661d, 0x6634, 0x6639, 0x662e, 0x670f, 0x6710, 0x67c1, 0x67f2, 0x67c8, 0x67ba, 63, 0xcf40, 0x67dc, 0x67bb, 0x67f8, 0x67d8, 0x67c0, 0x67b7, 0x67c5, 0x67eb, 0x67e4, 0x67df, 0x67b5, 0x67cd, 0x67b3, 0x67f7, 0x67f6, 0x67ee, 0x67e3, 0x67c2, 0x67b9, 0x67ce, 0x67e7, 0x67f0, 0x67b2, 0x67fc, 0x67c6, 0x67ed, 0x67cc, 0x67ae, 0x67e6, 0x67db, 0x67fa, 0x67c9, 0x67ca, 0x67c3, 0x67ea, 0x67cb, 0x6b28, 0x6b82, 0x6b84, 0x6bb6, 0x6bd6, 0x6bd8, 0x6be0, 0x6c20, 0x6c21, 0x6d28, 0x6d34, 0x6d2d, 0x6d1f, 0x6d3c, 0x6d3f, 0x6d12, 0x6d0a, 0x6cda, 0x6d33, 0x6d04, 0x6d19, 0x6d3a, 0x6d1a, 0x6d11, 0x6d00, 0x6d1d, 0x6d42, 94, 0xcfa1, 0x6d01, 0x6d18, 0x6d37, 0x6d03, 0x6d0f, 0x6d40, 0x6d07, 0x6d20, 0x6d2c, 0x6d08, 0x6d22, 0x6d09, 0x6d10, 0x70b7, 0x709f, 0x70be, 0x70b1, 0x70b0, 0x70a1, 0x70b4, 0x70b5, 0x70a9, 0x7241, 0x7249, 0x724a, 0x726c, 0x7270, 0x7273, 0x726e, 0x72ca, 0x72e4, 0x72e8, 0x72eb, 0x72df, 0x72ea, 0x72e6, 0x72e3, 0x7385, 0x73cc, 0x73c2, 0x73c8, 0x73c5, 0x73b9, 0x73b6, 0x73b5, 0x73b4, 0x73eb, 0x73bf, 0x73c7, 0x73be, 0x73c3, 0x73c6, 0x73b8, 0x73cb, 0x74ec, 0x74ee, 0x752e, 0x7547, 0x7548, 0x75a7, 0x75aa, 0x7679, 0x76c4, 0x7708, 0x7703, 0x7704, 0x7705, 0x770a, 0x76f7, 0x76fb, 0x76fa, 0x77e7, 0x77e8, 0x7806, 0x7811, 0x7812, 0x7805, 0x7810, 0x780f, 0x780e, 0x7809, 0x7803, 0x7813, 0x794a, 0x794c, 0x794b, 0x7945, 0x7944, 0x79d5, 0x79cd, 0x79cf, 0x79d6, 0x79ce, 0x7a80, 63, 0xd040, 0x7a7e, 0x7ad1, 0x7b00, 0x7b01, 0x7c7a, 0x7c78, 0x7c79, 0x7c7f, 0x7c80, 0x7c81, 0x7d03, 0x7d08, 0x7d01, 0x7f58, 0x7f91, 0x7f8d, 0x7fbe, 0x8007, 0x800e, 0x800f, 0x8014, 0x8037, 0x80d8, 0x80c7, 0x80e0, 0x80d1, 0x80c8, 0x80c2, 0x80d0, 0x80c5, 0x80e3, 0x80d9, 0x80dc, 0x80ca, 0x80d5, 0x80c9, 0x80cf, 0x80d7, 0x80e6, 0x80cd, 0x81ff, 0x8221, 0x8294, 0x82d9, 0x82fe, 0x82f9, 0x8307, 0x82e8, 0x8300, 0x82d5, 0x833a, 0x82eb, 0x82d6, 0x82f4, 0x82ec, 0x82e1, 0x82f2, 0x82f5, 0x830c, 0x82fb, 0x82f6, 0x82f0, 0x82ea, 94, 0xd0a1, 0x82e4, 0x82e0, 0x82fa, 0x82f3, 0x82ed, 0x8677, 0x8674, 0x867c, 0x8673, 0x8841, 0x884e, 0x8867, 0x886a, 0x8869, 0x89d3, 0x8a04, 0x8a07, 0x8d72, 0x8fe3, 0x8fe1, 0x8fee, 0x8fe0, 0x90f1, 0x90bd, 0x90bf, 0x90d5, 0x90c5, 0x90be, 0x90c7, 0x90cb, 0x90c8, 0x91d4, 0x91d3, 0x9654, 0x964f, 0x9651, 0x9653, 0x964a, 0x964e, 0x501e, 0x5005, 0x5007, 0x5013, 0x5022, 0x5030, 0x501b, 0x4ff5, 0x4ff4, 0x5033, 0x5037, 0x502c, 0x4ff6, 0x4ff7, 0x5017, 0x501c, 0x5020, 0x5027, 0x5035, 0x502f, 0x5031, 0x500e, 0x515a, 0x5194, 0x5193, 0x51ca, 0x51c4, 0x51c5, 0x51c8, 0x51ce, 0x5261, 0x525a, 0x5252, 0x525e, 0x525f, 0x5255, 0x5262, 0x52cd, 0x530e, 0x539e, 0x5526, 0x54e2, 0x5517, 0x5512, 0x54e7, 0x54f3, 0x54e4, 0x551a, 0x54ff, 0x5504, 0x5508, 0x54eb, 0x5511, 0x5505, 0x54f1, 63, 0xd140, 0x550a, 0x54fb, 0x54f7, 0x54f8, 0x54e0, 0x550e, 0x5503, 0x550b, 0x5701, 0x5702, 0x57cc, 0x5832, 0x57d5, 0x57d2, 0x57ba, 0x57c6, 0x57bd, 0x57bc, 0x57b8, 0x57b6, 0x57bf, 0x57c7, 0x57d0, 0x57b9, 0x57c1, 0x590e, 0x594a, 0x5a19, 0x5a16, 0x5a2d, 0x5a2e, 0x5a15, 0x5a0f, 0x5a17, 0x5a0a, 0x5a1e, 0x5a33, 0x5b6c, 0x5ba7, 0x5bad, 0x5bac, 0x5c03, 0x5c56, 0x5c54, 0x5cec, 0x5cff, 0x5cee, 0x5cf1, 0x5cf7, 0x5d00, 0x5cf9, 0x5e29, 0x5e28, 0x5ea8, 0x5eae, 0x5eaa, 0x5eac, 0x5f33, 0x5f30, 0x5f67, 0x605d, 0x605a, 0x6067, 94, 0xd1a1, 0x6041, 0x60a2, 0x6088, 0x6080, 0x6092, 0x6081, 0x609d, 0x6083, 0x6095, 0x609b, 0x6097, 0x6087, 0x609c, 0x608e, 0x6219, 0x6246, 0x62f2, 0x6310, 0x6356, 0x632c, 0x6344, 0x6345, 0x6336, 0x6343, 0x63e4, 0x6339, 0x634b, 0x634a, 0x633c, 0x6329, 0x6341, 0x6334, 0x6358, 0x6354, 0x6359, 0x632d, 0x6347, 0x6333, 0x635a, 0x6351, 0x6338, 0x6357, 0x6340, 0x6348, 0x654a, 0x6546, 0x65c6, 0x65c3, 0x65c4, 0x65c2, 0x664a, 0x665f, 0x6647, 0x6651, 0x6712, 0x6713, 0x681f, 0x681a, 0x6849, 0x6832, 0x6833, 0x683b, 0x684b, 0x684f, 0x6816, 0x6831, 0x681c, 0x6835, 0x682b, 0x682d, 0x682f, 0x684e, 0x6844, 0x6834, 0x681d, 0x6812, 0x6814, 0x6826, 0x6828, 0x682e, 0x684d, 0x683a, 0x6825, 0x6820, 0x6b2c, 0x6b2f, 0x6b2d, 0x6b31, 0x6b34, 0x6b6d, 0x8082, 0x6b88, 0x6be6, 0x6be4, 63, 0xd240, 0x6be8, 0x6be3, 0x6be2, 0x6be7, 0x6c25, 0x6d7a, 0x6d63, 0x6d64, 0x6d76, 0x6d0d, 0x6d61, 0x6d92, 0x6d58, 0x6d62, 0x6d6d, 0x6d6f, 0x6d91, 0x6d8d, 0x6def, 0x6d7f, 0x6d86, 0x6d5e, 0x6d67, 0x6d60, 0x6d97, 0x6d70, 0x6d7c, 0x6d5f, 0x6d82, 0x6d98, 0x6d2f, 0x6d68, 0x6d8b, 0x6d7e, 0x6d80, 0x6d84, 0x6d16, 0x6d83, 0x6d7b, 0x6d7d, 0x6d75, 0x6d90, 0x70dc, 0x70d3, 0x70d1, 0x70dd, 0x70cb, 0x7f39, 0x70e2, 0x70d7, 0x70d2, 0x70de, 0x70e0, 0x70d4, 0x70cd, 0x70c5, 0x70c6, 0x70c7, 0x70da, 0x70ce, 0x70e1, 0x7242, 0x7278, 94, 0xd2a1, 0x7277, 0x7276, 0x7300, 0x72fa, 0x72f4, 0x72fe, 0x72f6, 0x72f3, 0x72fb, 0x7301, 0x73d3, 0x73d9, 0x73e5, 0x73d6, 0x73bc, 0x73e7, 0x73e3, 0x73e9, 0x73dc, 0x73d2, 0x73db, 0x73d4, 0x73dd, 0x73da, 0x73d7, 0x73d8, 0x73e8, 0x74de, 0x74df, 0x74f4, 0x74f5, 0x7521, 0x755b, 0x755f, 0x75b0, 0x75c1, 0x75bb, 0x75c4, 0x75c0, 0x75bf, 0x75b6, 0x75ba, 0x768a, 0x76c9, 0x771d, 0x771b, 0x7710, 0x7713, 0x7712, 0x7723, 0x7711, 0x7715, 0x7719, 0x771a, 0x7722, 0x7727, 0x7823, 0x782c, 0x7822, 0x7835, 0x782f, 0x7828, 0x782e, 0x782b, 0x7821, 0x7829, 0x7833, 0x782a, 0x7831, 0x7954, 0x795b, 0x794f, 0x795c, 0x7953, 0x7952, 0x7951, 0x79eb, 0x79ec, 0x79e0, 0x79ee, 0x79ed, 0x79ea, 0x79dc, 0x79de, 0x79dd, 0x7a86, 0x7a89, 0x7a85, 0x7a8b, 0x7a8c, 0x7a8a, 0x7a87, 0x7ad8, 0x7b10, 63, 0xd340, 0x7b04, 0x7b13, 0x7b05, 0x7b0f, 0x7b08, 0x7b0a, 0x7b0e, 0x7b09, 0x7b12, 0x7c84, 0x7c91, 0x7c8a, 0x7c8c, 0x7c88, 0x7c8d, 0x7c85, 0x7d1e, 0x7d1d, 0x7d11, 0x7d0e, 0x7d18, 0x7d16, 0x7d13, 0x7d1f, 0x7d12, 0x7d0f, 0x7d0c, 0x7f5c, 0x7f61, 0x7f5e, 0x7f60, 0x7f5d, 0x7f5b, 0x7f96, 0x7f92, 0x7fc3, 0x7fc2, 0x7fc0, 0x8016, 0x803e, 0x8039, 0x80fa, 0x80f2, 0x80f9, 0x80f5, 0x8101, 0x80fb, 0x8100, 0x8201, 0x822f, 0x8225, 0x8333, 0x832d, 0x8344, 0x8319, 0x8351, 0x8325, 0x8356, 0x833f, 0x8341, 0x8326, 0x831c, 0x8322, 94, 0xd3a1, 0x8342, 0x834e, 0x831b, 0x832a, 0x8308, 0x833c, 0x834d, 0x8316, 0x8324, 0x8320, 0x8337, 0x832f, 0x8329, 0x8347, 0x8345, 0x834c, 0x8353, 0x831e, 0x832c, 0x834b, 0x8327, 0x8348, 0x8653, 0x8652, 0x86a2, 0x86a8, 0x8696, 0x868d, 0x8691, 0x869e, 0x8687, 0x8697, 0x8686, 0x868b, 0x869a, 0x8685, 0x86a5, 0x8699, 0x86a1, 0x86a7, 0x8695, 0x8698, 0x868e, 0x869d, 0x8690, 0x8694, 0x8843, 0x8844, 0x886d, 0x8875, 0x8876, 0x8872, 0x8880, 0x8871, 0x887f, 0x886f, 0x8883, 0x887e, 0x8874, 0x887c, 0x8a12, 0x8c47, 0x8c57, 0x8c7b, 0x8ca4, 0x8ca3, 0x8d76, 0x8d78, 0x8db5, 0x8db7, 0x8db6, 0x8ed1, 0x8ed3, 0x8ffe, 0x8ff5, 0x9002, 0x8fff, 0x8ffb, 0x9004, 0x8ffc, 0x8ff6, 0x90d6, 0x90e0, 0x90d9, 0x90da, 0x90e3, 0x90df, 0x90e5, 0x90d8, 0x90db, 0x90d7, 0x90dc, 0x90e4, 0x9150, 63, 0xd440, 0x914e, 0x914f, 0x91d5, 0x91e2, 0x91da, 0x965c, 0x965f, 0x96bc, 0x98e3, 0x9adf, 0x9b2f, 0x4e7f, 0x5070, 0x506a, 0x5061, 0x505e, 0x5060, 0x5053, 0x504b, 0x505d, 0x5072, 0x5048, 0x504d, 0x5041, 0x505b, 0x504a, 0x5062, 0x5015, 0x5045, 0x505f, 0x5069, 0x506b, 0x5063, 0x5064, 0x5046, 0x5040, 0x506e, 0x5073, 0x5057, 0x5051, 0x51d0, 0x526b, 0x526d, 0x526c, 0x526e, 0x52d6, 0x52d3, 0x532d, 0x539c, 0x5575, 0x5576, 0x553c, 0x554d, 0x5550, 0x5534, 0x552a, 0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552, 0x5545, 94, 0xd4a1, 0x550c, 0x5532, 0x5565, 0x554e, 0x5539, 0x5548, 0x552d, 0x553b, 0x5540, 0x554b, 0x570a, 0x5707, 0x57fb, 0x5814, 0x57e2, 0x57f6, 0x57dc, 0x57f4, 0x5800, 0x57ed, 0x57fd, 0x5808, 0x57f8, 0x580b, 0x57f3, 0x57cf, 0x5807, 0x57ee, 0x57e3, 0x57f2, 0x57e5, 0x57ec, 0x57e1, 0x580e, 0x57fc, 0x5810, 0x57e7, 0x5801, 0x580c, 0x57f1, 0x57e9, 0x57f0, 0x580d, 0x5804, 0x595c, 0x5a60, 0x5a58, 0x5a55, 0x5a67, 0x5a5e, 0x5a38, 0x5a35, 0x5a6d, 0x5a50, 0x5a5f, 0x5a65, 0x5a6c, 0x5a53, 0x5a64, 0x5a57, 0x5a43, 0x5a5d, 0x5a52, 0x5a44, 0x5a5b, 0x5a48, 0x5a8e, 0x5a3e, 0x5a4d, 0x5a39, 0x5a4c, 0x5a70, 0x5a69, 0x5a47, 0x5a51, 0x5a56, 0x5a42, 0x5a5c, 0x5b72, 0x5b6e, 0x5bc1, 0x5bc0, 0x5c59, 0x5d1e, 0x5d0b, 0x5d1d, 0x5d1a, 0x5d20, 0x5d0c, 0x5d28, 0x5d0d, 0x5d26, 0x5d25, 0x5d0f, 63, 0xd540, 0x5d30, 0x5d12, 0x5d23, 0x5d1f, 0x5d2e, 0x5e3e, 0x5e34, 0x5eb1, 0x5eb4, 0x5eb9, 0x5eb2, 0x5eb3, 0x5f36, 0x5f38, 0x5f9b, 0x5f96, 0x5f9f, 0x608a, 0x6090, 0x6086, 0x60be, 0x60b0, 0x60ba, 0x60d3, 0x60d4, 0x60cf, 0x60e4, 0x60d9, 0x60dd, 0x60c8, 0x60b1, 0x60db, 0x60b7, 0x60ca, 0x60bf, 0x60c3, 0x60cd, 0x60c0, 0x6332, 0x6365, 0x638a, 0x6382, 0x637d, 0x63bd, 0x639e, 0x63ad, 0x639d, 0x6397, 0x63ab, 0x638e, 0x636f, 0x6387, 0x6390, 0x636e, 0x63af, 0x6375, 0x639c, 0x636d, 0x63ae, 0x637c, 0x63a4, 0x633b, 0x639f, 94, 0xd5a1, 0x6378, 0x6385, 0x6381, 0x6391, 0x638d, 0x6370, 0x6553, 0x65cd, 0x6665, 0x6661, 0x665b, 0x6659, 0x665c, 0x6662, 0x6718, 0x6879, 0x6887, 0x6890, 0x689c, 0x686d, 0x686e, 0x68ae, 0x68ab, 0x6956, 0x686f, 0x68a3, 0x68ac, 0x68a9, 0x6875, 0x6874, 0x68b2, 0x688f, 0x6877, 0x6892, 0x687c, 0x686b, 0x6872, 0x68aa, 0x6880, 0x6871, 0x687e, 0x689b, 0x6896, 0x688b, 0x68a0, 0x6889, 0x68a4, 0x6878, 0x687b, 0x6891, 0x688c, 0x688a, 0x687d, 0x6b36, 0x6b33, 0x6b37, 0x6b38, 0x6b91, 0x6b8f, 0x6b8d, 0x6b8e, 0x6b8c, 0x6c2a, 0x6dc0, 0x6dab, 0x6db4, 0x6db3, 0x6e74, 0x6dac, 0x6de9, 0x6de2, 0x6db7, 0x6df6, 0x6dd4, 0x6e00, 0x6dc8, 0x6de0, 0x6ddf, 0x6dd6, 0x6dbe, 0x6de5, 0x6ddc, 0x6ddd, 0x6ddb, 0x6df4, 0x6dca, 0x6dbd, 0x6ded, 0x6df0, 0x6dba, 0x6dd5, 0x6dc2, 0x6dcf, 0x6dc9, 63, 0xd640, 0x6dd0, 0x6df2, 0x6dd3, 0x6dfd, 0x6dd7, 0x6dcd, 0x6de3, 0x6dbb, 0x70fa, 0x710d, 0x70f7, 0x7117, 0x70f4, 0x710c, 0x70f0, 0x7104, 0x70f3, 0x7110, 0x70fc, 0x70ff, 0x7106, 0x7113, 0x7100, 0x70f8, 0x70f6, 0x710b, 0x7102, 0x710e, 0x727e, 0x727b, 0x727c, 0x727f, 0x731d, 0x7317, 0x7307, 0x7311, 0x7318, 0x730a, 0x7308, 0x72ff, 0x730f, 0x731e, 0x7388, 0x73f6, 0x73f8, 0x73f5, 0x7404, 0x7401, 0x73fd, 0x7407, 0x7400, 0x73fa, 0x73fc, 0x73ff, 0x740c, 0x740b, 0x73f4, 0x7408, 0x7564, 0x7563, 0x75ce, 0x75d2, 0x75cf, 94, 0xd6a1, 0x75cb, 0x75cc, 0x75d1, 0x75d0, 0x768f, 0x7689, 0x76d3, 0x7739, 0x772f, 0x772d, 0x7731, 0x7732, 0x7734, 0x7733, 0x773d, 0x7725, 0x773b, 0x7735, 0x7848, 0x7852, 0x7849, 0x784d, 0x784a, 0x784c, 0x7826, 0x7845, 0x7850, 0x7964, 0x7967, 0x7969, 0x796a, 0x7963, 0x796b, 0x7961, 0x79bb, 0x79fa, 0x79f8, 0x79f6, 0x79f7, 0x7a8f, 0x7a94, 0x7a90, 0x7b35, 0x7b47, 0x7b34, 0x7b25, 0x7b30, 0x7b22, 0x7b24, 0x7b33, 0x7b18, 0x7b2a, 0x7b1d, 0x7b31, 0x7b2b, 0x7b2d, 0x7b2f, 0x7b32, 0x7b38, 0x7b1a, 0x7b23, 0x7c94, 0x7c98, 0x7c96, 0x7ca3, 0x7d35, 0x7d3d, 0x7d38, 0x7d36, 0x7d3a, 0x7d45, 0x7d2c, 0x7d29, 0x7d41, 0x7d47, 0x7d3e, 0x7d3f, 0x7d4a, 0x7d3b, 0x7d28, 0x7f63, 0x7f95, 0x7f9c, 0x7f9d, 0x7f9b, 0x7fca, 0x7fcb, 0x7fcd, 0x7fd0, 0x7fd1, 0x7fc7, 0x7fcf, 0x7fc9, 0x801f, 63, 0xd740, 0x801e, 0x801b, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125, 0x8119, 0x811b, 0x812d, 0x811f, 0x812c, 0x811e, 0x8121, 0x8115, 0x8127, 0x811d, 0x8122, 0x8211, 0x8238, 0x8233, 0x823a, 0x8234, 0x8232, 0x8274, 0x8390, 0x83a3, 0x83a8, 0x838d, 0x837a, 0x8373, 0x83a4, 0x8374, 0x838f, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394, 0x83a9, 0x837d, 0x8383, 0x838c, 0x839d, 0x839b, 0x83aa, 0x838b, 0x837e, 0x83a5, 0x83af, 0x8388, 0x8397, 0x83b0, 0x837f, 0x83a6, 0x8387, 0x83ae, 0x8376, 0x839a, 0x8659, 0x8656, 0x86bf, 0x86b7, 94, 0xd7a1, 0x86c2, 0x86c1, 0x86c5, 0x86ba, 0x86b0, 0x86c8, 0x86b9, 0x86b3, 0x86b8, 0x86cc, 0x86b4, 0x86bb, 0x86bc, 0x86c3, 0x86bd, 0x86be, 0x8852, 0x8889, 0x8895, 0x88a8, 0x88a2, 0x88aa, 0x889a, 0x8891, 0x88a1, 0x889f, 0x8898, 0x88a7, 0x8899, 0x889b, 0x8897, 0x88a4, 0x88ac, 0x888c, 0x8893, 0x888e, 0x8982, 0x89d6, 0x89d9, 0x89d5, 0x8a30, 0x8a27, 0x8a2c, 0x8a1e, 0x8c39, 0x8c3b, 0x8c5c, 0x8c5d, 0x8c7d, 0x8ca5, 0x8d7d, 0x8d7b, 0x8d79, 0x8dbc, 0x8dc2, 0x8db9, 0x8dbf, 0x8dc1, 0x8ed8, 0x8ede, 0x8edd, 0x8edc, 0x8ed7, 0x8ee0, 0x8ee1, 0x9024, 0x900b, 0x9011, 0x901c, 0x900c, 0x9021, 0x90ef, 0x90ea, 0x90f0, 0x90f4, 0x90f2, 0x90f3, 0x90d4, 0x90eb, 0x90ec, 0x90e9, 0x9156, 0x9158, 0x915a, 0x9153, 0x9155, 0x91ec, 0x91f4, 0x91f1, 0x91f3, 0x91f8, 0x91e4, 0x91f9, 0x91ea, 63, 0xd840, 0x91eb, 0x91f7, 0x91e8, 0x91ee, 0x957a, 0x9586, 0x9588, 0x967c, 0x966d, 0x966b, 0x9671, 0x966f, 0x96bf, 0x976a, 0x9804, 0x98e5, 0x9997, 0x509b, 0x5095, 0x5094, 0x509e, 0x508b, 0x50a3, 0x5083, 0x508c, 0x508e, 0x509d, 0x5068, 0x509c, 0x5092, 0x5082, 0x5087, 0x515f, 0x51d4, 0x5312, 0x5311, 0x53a4, 0x53a7, 0x5591, 0x55a8, 0x55a5, 0x55ad, 0x5577, 0x5645, 0x55a2, 0x5593, 0x5588, 0x558f, 0x55b5, 0x5581, 0x55a3, 0x5592, 0x55a4, 0x557d, 0x558c, 0x55a6, 0x557f, 0x5595, 0x55a1, 0x558e, 0x570c, 0x5829, 0x5837, 94, 0xd8a1, 0x5819, 0x581e, 0x5827, 0x5823, 0x5828, 0x57f5, 0x5848, 0x5825, 0x581c, 0x581b, 0x5833, 0x583f, 0x5836, 0x582e, 0x5839, 0x5838, 0x582d, 0x582c, 0x583b, 0x5961, 0x5aaf, 0x5a94, 0x5a9f, 0x5a7a, 0x5aa2, 0x5a9e, 0x5a78, 0x5aa6, 0x5a7c, 0x5aa5, 0x5aac, 0x5a95, 0x5aae, 0x5a37, 0x5a84, 0x5a8a, 0x5a97, 0x5a83, 0x5a8b, 0x5aa9, 0x5a7b, 0x5a7d, 0x5a8c, 0x5a9c, 0x5a8f, 0x5a93, 0x5a9d, 0x5bea, 0x5bcd, 0x5bcb, 0x5bd4, 0x5bd1, 0x5bca, 0x5bce, 0x5c0c, 0x5c30, 0x5d37, 0x5d43, 0x5d6b, 0x5d41, 0x5d4b, 0x5d3f, 0x5d35, 0x5d51, 0x5d4e, 0x5d55, 0x5d33, 0x5d3a, 0x5d52, 0x5d3d, 0x5d31, 0x5d59, 0x5d42, 0x5d39, 0x5d49, 0x5d38, 0x5d3c, 0x5d32, 0x5d36, 0x5d40, 0x5d45, 0x5e44, 0x5e41, 0x5f58, 0x5fa6, 0x5fa5, 0x5fab, 0x60c9, 0x60b9, 0x60cc, 0x60e2, 0x60ce, 0x60c4, 0x6114, 63, 0xd940, 0x60f2, 0x610a, 0x6116, 0x6105, 0x60f5, 0x6113, 0x60f8, 0x60fc, 0x60fe, 0x60c1, 0x6103, 0x6118, 0x611d, 0x6110, 0x60ff, 0x6104, 0x610b, 0x624a, 0x6394, 0x63b1, 0x63b0, 0x63ce, 0x63e5, 0x63e8, 0x63ef, 0x63c3, 0x649d, 0x63f3, 0x63ca, 0x63e0, 0x63f6, 0x63d5, 0x63f2, 0x63f5, 0x6461, 0x63df, 0x63be, 0x63dd, 0x63dc, 0x63c4, 0x63d8, 0x63d3, 0x63c2, 0x63c7, 0x63cc, 0x63cb, 0x63c8, 0x63f0, 0x63d7, 0x63d9, 0x6532, 0x6567, 0x656a, 0x6564, 0x655c, 0x6568, 0x6565, 0x658c, 0x659d, 0x659e, 0x65ae, 0x65d0, 0x65d2, 94, 0xd9a1, 0x667c, 0x666c, 0x667b, 0x6680, 0x6671, 0x6679, 0x666a, 0x6672, 0x6701, 0x690c, 0x68d3, 0x6904, 0x68dc, 0x692a, 0x68ec, 0x68ea, 0x68f1, 0x690f, 0x68d6, 0x68f7, 0x68eb, 0x68e4, 0x68f6, 0x6913, 0x6910, 0x68f3, 0x68e1, 0x6907, 0x68cc, 0x6908, 0x6970, 0x68b4, 0x6911, 0x68ef, 0x68c6, 0x6914, 0x68f8, 0x68d0, 0x68fd, 0x68fc, 0x68e8, 0x690b, 0x690a, 0x6917, 0x68ce, 0x68c8, 0x68dd, 0x68de, 0x68e6, 0x68f4, 0x68d1, 0x6906, 0x68d4, 0x68e9, 0x6915, 0x6925, 0x68c7, 0x6b39, 0x6b3b, 0x6b3f, 0x6b3c, 0x6b94, 0x6b97, 0x6b99, 0x6b95, 0x6bbd, 0x6bf0, 0x6bf2, 0x6bf3, 0x6c30, 0x6dfc, 0x6e46, 0x6e47, 0x6e1f, 0x6e49, 0x6e88, 0x6e3c, 0x6e3d, 0x6e45, 0x6e62, 0x6e2b, 0x6e3f, 0x6e41, 0x6e5d, 0x6e73, 0x6e1c, 0x6e33, 0x6e4b, 0x6e40, 0x6e51, 0x6e3b, 0x6e03, 0x6e2e, 0x6e5e, 63, 0xda40, 0x6e68, 0x6e5c, 0x6e61, 0x6e31, 0x6e28, 0x6e60, 0x6e71, 0x6e6b, 0x6e39, 0x6e22, 0x6e30, 0x6e53, 0x6e65, 0x6e27, 0x6e78, 0x6e64, 0x6e77, 0x6e55, 0x6e79, 0x6e52, 0x6e66, 0x6e35, 0x6e36, 0x6e5a, 0x7120, 0x711e, 0x712f, 0x70fb, 0x712e, 0x7131, 0x7123, 0x7125, 0x7122, 0x7132, 0x711f, 0x7128, 0x713a, 0x711b, 0x724b, 0x725a, 0x7288, 0x7289, 0x7286, 0x7285, 0x728b, 0x7312, 0x730b, 0x7330, 0x7322, 0x7331, 0x7333, 0x7327, 0x7332, 0x732d, 0x7326, 0x7323, 0x7335, 0x730c, 0x742e, 0x742c, 0x7430, 0x742b, 0x7416, 94, 0xdaa1, 0x741a, 0x7421, 0x742d, 0x7431, 0x7424, 0x7423, 0x741d, 0x7429, 0x7420, 0x7432, 0x74fb, 0x752f, 0x756f, 0x756c, 0x75e7, 0x75da, 0x75e1, 0x75e6, 0x75dd, 0x75df, 0x75e4, 0x75d7, 0x7695, 0x7692, 0x76da, 0x7746, 0x7747, 0x7744, 0x774d, 0x7745, 0x774a, 0x774e, 0x774b, 0x774c, 0x77de, 0x77ec, 0x7860, 0x7864, 0x7865, 0x785c, 0x786d, 0x7871, 0x786a, 0x786e, 0x7870, 0x7869, 0x7868, 0x785e, 0x7862, 0x7974, 0x7973, 0x7972, 0x7970, 0x7a02, 0x7a0a, 0x7a03, 0x7a0c, 0x7a04, 0x7a99, 0x7ae6, 0x7ae4, 0x7b4a, 0x7b3b, 0x7b44, 0x7b48, 0x7b4c, 0x7b4e, 0x7b40, 0x7b58, 0x7b45, 0x7ca2, 0x7c9e, 0x7ca8, 0x7ca1, 0x7d58, 0x7d6f, 0x7d63, 0x7d53, 0x7d56, 0x7d67, 0x7d6a, 0x7d4f, 0x7d6d, 0x7d5c, 0x7d6b, 0x7d52, 0x7d54, 0x7d69, 0x7d51, 0x7d5f, 0x7d4e, 0x7f3e, 0x7f3f, 0x7f65, 63, 0xdb40, 0x7f66, 0x7fa2, 0x7fa0, 0x7fa1, 0x7fd7, 0x8051, 0x804f, 0x8050, 0x80fe, 0x80d4, 0x8143, 0x814a, 0x8152, 0x814f, 0x8147, 0x813d, 0x814d, 0x813a, 0x81e6, 0x81ee, 0x81f7, 0x81f8, 0x81f9, 0x8204, 0x823c, 0x823d, 0x823f, 0x8275, 0x833b, 0x83cf, 0x83f9, 0x8423, 0x83c0, 0x83e8, 0x8412, 0x83e7, 0x83e4, 0x83fc, 0x83f6, 0x8410, 0x83c6, 0x83c8, 0x83eb, 0x83e3, 0x83bf, 0x8401, 0x83dd, 0x83e5, 0x83d8, 0x83ff, 0x83e1, 0x83cb, 0x83ce, 0x83d6, 0x83f5, 0x83c9, 0x8409, 0x840f, 0x83de, 0x8411, 0x8406, 0x83c2, 0x83f3, 94, 0xdba1, 0x83d5, 0x83fa, 0x83c7, 0x83d1, 0x83ea, 0x8413, 0x83c3, 0x83ec, 0x83ee, 0x83c4, 0x83fb, 0x83d7, 0x83e2, 0x841b, 0x83db, 0x83fe, 0x86d8, 0x86e2, 0x86e6, 0x86d3, 0x86e3, 0x86da, 0x86ea, 0x86dd, 0x86eb, 0x86dc, 0x86ec, 0x86e9, 0x86d7, 0x86e8, 0x86d1, 0x8848, 0x8856, 0x8855, 0x88ba, 0x88d7, 0x88b9, 0x88b8, 0x88c0, 0x88be, 0x88b6, 0x88bc, 0x88b7, 0x88bd, 0x88b2, 0x8901, 0x88c9, 0x8995, 0x8998, 0x8997, 0x89dd, 0x89da, 0x89db, 0x8a4e, 0x8a4d, 0x8a39, 0x8a59, 0x8a40, 0x8a57, 0x8a58, 0x8a44, 0x8a45, 0x8a52, 0x8a48, 0x8a51, 0x8a4a, 0x8a4c, 0x8a4f, 0x8c5f, 0x8c81, 0x8c80, 0x8cba, 0x8cbe, 0x8cb0, 0x8cb9, 0x8cb5, 0x8d84, 0x8d80, 0x8d89, 0x8dd8, 0x8dd3, 0x8dcd, 0x8dc7, 0x8dd6, 0x8ddc, 0x8dcf, 0x8dd5, 0x8dd9, 0x8dc8, 0x8dd7, 0x8dc5, 0x8eef, 0x8ef7, 0x8efa, 63, 0xdc40, 0x8ef9, 0x8ee6, 0x8eee, 0x8ee5, 0x8ef5, 0x8ee7, 0x8ee8, 0x8ef6, 0x8eeb, 0x8ef1, 0x8eec, 0x8ef4, 0x8ee9, 0x902d, 0x9034, 0x902f, 0x9106, 0x912c, 0x9104, 0x90ff, 0x90fc, 0x9108, 0x90f9, 0x90fb, 0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161, 0x9164, 0x915f, 0x9162, 0x9160, 0x9201, 0x920a, 0x9225, 0x9203, 0x921a, 0x9226, 0x920f, 0x920c, 0x9200, 0x9212, 0x91ff, 0x91fd, 0x9206, 0x9204, 0x9227, 0x9202, 0x921c, 0x9224, 0x9219, 0x9217, 0x9205, 0x9216, 0x957b, 0x958d, 0x958c, 0x9590, 0x9687, 0x967e, 0x9688, 94, 0xdca1, 0x9689, 0x9683, 0x9680, 0x96c2, 0x96c8, 0x96c3, 0x96f1, 0x96f0, 0x976c, 0x9770, 0x976e, 0x9807, 0x98a9, 0x98eb, 0x9ce6, 0x9ef9, 0x4e83, 0x4e84, 0x4eb6, 0x50bd, 0x50bf, 0x50c6, 0x50ae, 0x50c4, 0x50ca, 0x50b4, 0x50c8, 0x50c2, 0x50b0, 0x50c1, 0x50ba, 0x50b1, 0x50cb, 0x50c9, 0x50b6, 0x50b8, 0x51d7, 0x527a, 0x5278, 0x527b, 0x527c, 0x55c3, 0x55db, 0x55cc, 0x55d0, 0x55cb, 0x55ca, 0x55dd, 0x55c0, 0x55d4, 0x55c4, 0x55e9, 0x55bf, 0x55d2, 0x558d, 0x55cf, 0x55d5, 0x55e2, 0x55d6, 0x55c8, 0x55f2, 0x55cd, 0x55d9, 0x55c2, 0x5714, 0x5853, 0x5868, 0x5864, 0x584f, 0x584d, 0x5849, 0x586f, 0x5855, 0x584e, 0x585d, 0x5859, 0x5865, 0x585b, 0x583d, 0x5863, 0x5871, 0x58fc, 0x5ac7, 0x5ac4, 0x5acb, 0x5aba, 0x5ab8, 0x5ab1, 0x5ab5, 0x5ab0, 0x5abf, 0x5ac8, 0x5abb, 0x5ac6, 63, 0xdd40, 0x5ab7, 0x5ac0, 0x5aca, 0x5ab4, 0x5ab6, 0x5acd, 0x5ab9, 0x5a90, 0x5bd6, 0x5bd8, 0x5bd9, 0x5c1f, 0x5c33, 0x5d71, 0x5d63, 0x5d4a, 0x5d65, 0x5d72, 0x5d6c, 0x5d5e, 0x5d68, 0x5d67, 0x5d62, 0x5df0, 0x5e4f, 0x5e4e, 0x5e4a, 0x5e4d, 0x5e4b, 0x5ec5, 0x5ecc, 0x5ec6, 0x5ecb, 0x5ec7, 0x5f40, 0x5faf, 0x5fad, 0x60f7, 0x6149, 0x614a, 0x612b, 0x6145, 0x6136, 0x6132, 0x612e, 0x6146, 0x612f, 0x614f, 0x6129, 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63c5, 0x63f1, 0x63eb, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 94, 0xdda1, 0x6433, 0x6443, 0x641f, 0x6415, 0x6418, 0x6439, 0x6437, 0x6422, 0x6423, 0x640c, 0x6426, 0x6430, 0x6428, 0x6441, 0x6435, 0x642f, 0x640a, 0x641a, 0x6440, 0x6425, 0x6427, 0x640b, 0x63e7, 0x641b, 0x642e, 0x6421, 0x640e, 0x656f, 0x6592, 0x65d3, 0x6686, 0x668c, 0x6695, 0x6690, 0x668b, 0x668a, 0x6699, 0x6694, 0x6678, 0x6720, 0x6966, 0x695f, 0x6938, 0x694e, 0x6962, 0x6971, 0x693f, 0x6945, 0x696a, 0x6939, 0x6942, 0x6957, 0x6959, 0x697a, 0x6948, 0x6949, 0x6935, 0x696c, 0x6933, 0x693d, 0x6965, 0x68f0, 0x6978, 0x6934, 0x6969, 0x6940, 0x696f, 0x6944, 0x6976, 0x6958, 0x6941, 0x6974, 0x694c, 0x693b, 0x694b, 0x6937, 0x695c, 0x694f, 0x6951, 0x6932, 0x6952, 0x692f, 0x697b, 0x693c, 0x6b46, 0x6b45, 0x6b43, 0x6b42, 0x6b48, 0x6b41, 0x6b9b, 0xfa0d, 0x6bfb, 0x6bfc, 63, 0xde40, 0x6bf9, 0x6bf7, 0x6bf8, 0x6e9b, 0x6ed6, 0x6ec8, 0x6e8f, 0x6ec0, 0x6e9f, 0x6e93, 0x6e94, 0x6ea0, 0x6eb1, 0x6eb9, 0x6ec6, 0x6ed2, 0x6ebd, 0x6ec1, 0x6e9e, 0x6ec9, 0x6eb7, 0x6eb0, 0x6ecd, 0x6ea6, 0x6ecf, 0x6eb2, 0x6ebe, 0x6ec3, 0x6edc, 0x6ed8, 0x6e99, 0x6e92, 0x6e8e, 0x6e8d, 0x6ea4, 0x6ea1, 0x6ebf, 0x6eb3, 0x6ed0, 0x6eca, 0x6e97, 0x6eae, 0x6ea3, 0x7147, 0x7154, 0x7152, 0x7163, 0x7160, 0x7141, 0x715d, 0x7162, 0x7172, 0x7178, 0x716a, 0x7161, 0x7142, 0x7158, 0x7143, 0x714b, 0x7170, 0x715f, 0x7150, 0x7153, 94, 0xdea1, 0x7144, 0x714d, 0x715a, 0x724f, 0x728d, 0x728c, 0x7291, 0x7290, 0x728e, 0x733c, 0x7342, 0x733b, 0x733a, 0x7340, 0x734a, 0x7349, 0x7444, 0x744a, 0x744b, 0x7452, 0x7451, 0x7457, 0x7440, 0x744f, 0x7450, 0x744e, 0x7442, 0x7446, 0x744d, 0x7454, 0x74e1, 0x74ff, 0x74fe, 0x74fd, 0x751d, 0x7579, 0x7577, 0x6983, 0x75ef, 0x760f, 0x7603, 0x75f7, 0x75fe, 0x75fc, 0x75f9, 0x75f8, 0x7610, 0x75fb, 0x75f6, 0x75ed, 0x75f5, 0x75fd, 0x7699, 0x76b5, 0x76dd, 0x7755, 0x775f, 0x7760, 0x7752, 0x7756, 0x775a, 0x7769, 0x7767, 0x7754, 0x7759, 0x776d, 0x77e0, 0x7887, 0x789a, 0x7894, 0x788f, 0x7884, 0x7895, 0x7885, 0x7886, 0x78a1, 0x7883, 0x7879, 0x7899, 0x7880, 0x7896, 0x787b, 0x797c, 0x7982, 0x797d, 0x7979, 0x7a11, 0x7a18, 0x7a19, 0x7a12, 0x7a17, 0x7a15, 0x7a22, 0x7a13, 63, 0xdf40, 0x7a1b, 0x7a10, 0x7aa3, 0x7aa2, 0x7a9e, 0x7aeb, 0x7b66, 0x7b64, 0x7b6d, 0x7b74, 0x7b69, 0x7b72, 0x7b65, 0x7b73, 0x7b71, 0x7b70, 0x7b61, 0x7b78, 0x7b76, 0x7b63, 0x7cb2, 0x7cb4, 0x7caf, 0x7d88, 0x7d86, 0x7d80, 0x7d8d, 0x7d7f, 0x7d85, 0x7d7a, 0x7d8e, 0x7d7b, 0x7d83, 0x7d7c, 0x7d8c, 0x7d94, 0x7d84, 0x7d7d, 0x7d92, 0x7f6d, 0x7f6b, 0x7f67, 0x7f68, 0x7f6c, 0x7fa6, 0x7fa5, 0x7fa7, 0x7fdb, 0x7fdc, 0x8021, 0x8164, 0x8160, 0x8177, 0x815c, 0x8169, 0x815b, 0x8162, 0x8172, 0x6721, 0x815e, 0x8176, 0x8167, 0x816f, 94, 0xdfa1, 0x8144, 0x8161, 0x821d, 0x8249, 0x8244, 0x8240, 0x8242, 0x8245, 0x84f1, 0x843f, 0x8456, 0x8476, 0x8479, 0x848f, 0x848d, 0x8465, 0x8451, 0x8440, 0x8486, 0x8467, 0x8430, 0x844d, 0x847d, 0x845a, 0x8459, 0x8474, 0x8473, 0x845d, 0x8507, 0x845e, 0x8437, 0x843a, 0x8434, 0x847a, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429, 0x83d9, 0x844b, 0x842f, 0x8442, 0x842d, 0x845f, 0x8470, 0x8439, 0x844e, 0x844c, 0x8452, 0x846f, 0x84c5, 0x848e, 0x843b, 0x8447, 0x8436, 0x8433, 0x8468, 0x847e, 0x8444, 0x842b, 0x8460, 0x8454, 0x846e, 0x8450, 0x870b, 0x8704, 0x86f7, 0x870c, 0x86fa, 0x86d6, 0x86f5, 0x874d, 0x86f8, 0x870e, 0x8709, 0x8701, 0x86f6, 0x870d, 0x8705, 0x88d6, 0x88cb, 0x88cd, 0x88ce, 0x88de, 0x88db, 0x88da, 0x88cc, 0x88d0, 0x8985, 0x899b, 0x89df, 0x89e5, 0x89e4, 63, 0xe040, 0x89e1, 0x89e0, 0x89e2, 0x89dc, 0x89e6, 0x8a76, 0x8a86, 0x8a7f, 0x8a61, 0x8a3f, 0x8a77, 0x8a82, 0x8a84, 0x8a75, 0x8a83, 0x8a81, 0x8a74, 0x8a7a, 0x8c3c, 0x8c4b, 0x8c4a, 0x8c65, 0x8c64, 0x8c66, 0x8c86, 0x8c84, 0x8c85, 0x8ccc, 0x8d68, 0x8d69, 0x8d91, 0x8d8c, 0x8d8e, 0x8d8f, 0x8d8d, 0x8d93, 0x8d94, 0x8d90, 0x8d92, 0x8df0, 0x8de0, 0x8dec, 0x8df1, 0x8dee, 0x8dd0, 0x8de9, 0x8de3, 0x8de2, 0x8de7, 0x8df2, 0x8deb, 0x8df4, 0x8f06, 0x8eff, 0x8f01, 0x8f00, 0x8f05, 0x8f07, 0x8f08, 0x8f02, 0x8f0b, 0x9052, 0x903f, 94, 0xe0a1, 0x9044, 0x9049, 0x903d, 0x9110, 0x910d, 0x910f, 0x9111, 0x9116, 0x9114, 0x910b, 0x910e, 0x916e, 0x916f, 0x9248, 0x9252, 0x9230, 0x923a, 0x9266, 0x9233, 0x9265, 0x925e, 0x9283, 0x922e, 0x924a, 0x9246, 0x926d, 0x926c, 0x924f, 0x9260, 0x9267, 0x926f, 0x9236, 0x9261, 0x9270, 0x9231, 0x9254, 0x9263, 0x9250, 0x9272, 0x924e, 0x9253, 0x924c, 0x9256, 0x9232, 0x959f, 0x959c, 0x959e, 0x959b, 0x9692, 0x9693, 0x9691, 0x9697, 0x96ce, 0x96fa, 0x96fd, 0x96f8, 0x96f5, 0x9773, 0x9777, 0x9778, 0x9772, 0x980f, 0x980d, 0x980e, 0x98ac, 0x98f6, 0x98f9, 0x99af, 0x99b2, 0x99b0, 0x99b5, 0x9aad, 0x9aab, 0x9b5b, 0x9cea, 0x9ced, 0x9ce7, 0x9e80, 0x9efd, 0x50e6, 0x50d4, 0x50d7, 0x50e8, 0x50f3, 0x50db, 0x50ea, 0x50dd, 0x50e4, 0x50d3, 0x50ec, 0x50f0, 0x50ef, 0x50e3, 0x50e0, 63, 0xe140, 0x51d8, 0x5280, 0x5281, 0x52e9, 0x52eb, 0x5330, 0x53ac, 0x5627, 0x5615, 0x560c, 0x5612, 0x55fc, 0x560f, 0x561c, 0x5601, 0x5613, 0x5602, 0x55fa, 0x561d, 0x5604, 0x55ff, 0x55f9, 0x5889, 0x587c, 0x5890, 0x5898, 0x5886, 0x5881, 0x587f, 0x5874, 0x588b, 0x587a, 0x5887, 0x5891, 0x588e, 0x5876, 0x5882, 0x5888, 0x587b, 0x5894, 0x588f, 0x58fe, 0x596b, 0x5adc, 0x5aee, 0x5ae5, 0x5ad5, 0x5aea, 0x5ada, 0x5aed, 0x5aeb, 0x5af3, 0x5ae2, 0x5ae0, 0x5adb, 0x5aec, 0x5ade, 0x5add, 0x5ad9, 0x5ae8, 0x5adf, 0x5b77, 0x5be0, 94, 0xe1a1, 0x5be3, 0x5c63, 0x5d82, 0x5d80, 0x5d7d, 0x5d86, 0x5d7a, 0x5d81, 0x5d77, 0x5d8a, 0x5d89, 0x5d88, 0x5d7e, 0x5d7c, 0x5d8d, 0x5d79, 0x5d7f, 0x5e58, 0x5e59, 0x5e53, 0x5ed8, 0x5ed1, 0x5ed7, 0x5ece, 0x5edc, 0x5ed5, 0x5ed9, 0x5ed2, 0x5ed4, 0x5f44, 0x5f43, 0x5f6f, 0x5fb6, 0x612c, 0x6128, 0x6141, 0x615e, 0x6171, 0x6173, 0x6152, 0x6153, 0x6172, 0x616c, 0x6180, 0x6174, 0x6154, 0x617a, 0x615b, 0x6165, 0x613b, 0x616a, 0x6161, 0x6156, 0x6229, 0x6227, 0x622b, 0x642b, 0x644d, 0x645b, 0x645d, 0x6474, 0x6476, 0x6472, 0x6473, 0x647d, 0x6475, 0x6466, 0x64a6, 0x644e, 0x6482, 0x645e, 0x645c, 0x644b, 0x6453, 0x6460, 0x6450, 0x647f, 0x643f, 0x646c, 0x646b, 0x6459, 0x6465, 0x6477, 0x6573, 0x65a0, 0x66a1, 0x66a0, 0x669f, 0x6705, 0x6704, 0x6722, 0x69b1, 0x69b6, 0x69c9, 63, 0xe240, 0x69a0, 0x69ce, 0x6996, 0x69b0, 0x69ac, 0x69bc, 0x6991, 0x6999, 0x698e, 0x69a7, 0x698d, 0x69a9, 0x69be, 0x69af, 0x69bf, 0x69c4, 0x69bd, 0x69a4, 0x69d4, 0x69b9, 0x69ca, 0x699a, 0x69cf, 0x69b3, 0x6993, 0x69aa, 0x69a1, 0x699e, 0x69d9, 0x6997, 0x6990, 0x69c2, 0x69b5, 0x69a5, 0x69c6, 0x6b4a, 0x6b4d, 0x6b4b, 0x6b9e, 0x6b9f, 0x6ba0, 0x6bc3, 0x6bc4, 0x6bfe, 0x6ece, 0x6ef5, 0x6ef1, 0x6f03, 0x6f25, 0x6ef8, 0x6f37, 0x6efb, 0x6f2e, 0x6f09, 0x6f4e, 0x6f19, 0x6f1a, 0x6f27, 0x6f18, 0x6f3b, 0x6f12, 0x6eed, 0x6f0a, 94, 0xe2a1, 0x6f36, 0x6f73, 0x6ef9, 0x6eee, 0x6f2d, 0x6f40, 0x6f30, 0x6f3c, 0x6f35, 0x6eeb, 0x6f07, 0x6f0e, 0x6f43, 0x6f05, 0x6efd, 0x6ef6, 0x6f39, 0x6f1c, 0x6efc, 0x6f3a, 0x6f1f, 0x6f0d, 0x6f1e, 0x6f08, 0x6f21, 0x7187, 0x7190, 0x7189, 0x7180, 0x7185, 0x7182, 0x718f, 0x717b, 0x7186, 0x7181, 0x7197, 0x7244, 0x7253, 0x7297, 0x7295, 0x7293, 0x7343, 0x734d, 0x7351, 0x734c, 0x7462, 0x7473, 0x7471, 0x7475, 0x7472, 0x7467, 0x746e, 0x7500, 0x7502, 0x7503, 0x757d, 0x7590, 0x7616, 0x7608, 0x760c, 0x7615, 0x7611, 0x760a, 0x7614, 0x76b8, 0x7781, 0x777c, 0x7785, 0x7782, 0x776e, 0x7780, 0x776f, 0x777e, 0x7783, 0x78b2, 0x78aa, 0x78b4, 0x78ad, 0x78a8, 0x787e, 0x78ab, 0x789e, 0x78a5, 0x78a0, 0x78ac, 0x78a2, 0x78a4, 0x7998, 0x798a, 0x798b, 0x7996, 0x7995, 0x7994, 0x7993, 63, 0xe340, 0x7997, 0x7988, 0x7992, 0x7990, 0x7a2b, 0x7a4a, 0x7a30, 0x7a2f, 0x7a28, 0x7a26, 0x7aa8, 0x7aab, 0x7aac, 0x7aee, 0x7b88, 0x7b9c, 0x7b8a, 0x7b91, 0x7b90, 0x7b96, 0x7b8d, 0x7b8c, 0x7b9b, 0x7b8e, 0x7b85, 0x7b98, 0x5284, 0x7b99, 0x7ba4, 0x7b82, 0x7cbb, 0x7cbf, 0x7cbc, 0x7cba, 0x7da7, 0x7db7, 0x7dc2, 0x7da3, 0x7daa, 0x7dc1, 0x7dc0, 0x7dc5, 0x7d9d, 0x7dce, 0x7dc4, 0x7dc6, 0x7dcb, 0x7dcc, 0x7daf, 0x7db9, 0x7d96, 0x7dbc, 0x7d9f, 0x7da6, 0x7dae, 0x7da9, 0x7da1, 0x7dc9, 0x7f73, 0x7fe2, 0x7fe3, 0x7fe5, 0x7fde, 94, 0xe3a1, 0x8024, 0x805d, 0x805c, 0x8189, 0x8186, 0x8183, 0x8187, 0x818d, 0x818c, 0x818b, 0x8215, 0x8497, 0x84a4, 0x84a1, 0x849f, 0x84ba, 0x84ce, 0x84c2, 0x84ac, 0x84ae, 0x84ab, 0x84b9, 0x84b4, 0x84c1, 0x84cd, 0x84aa, 0x849a, 0x84b1, 0x84d0, 0x849d, 0x84a7, 0x84bb, 0x84a2, 0x8494, 0x84c7, 0x84cc, 0x849b, 0x84a9, 0x84af, 0x84a8, 0x84d6, 0x8498, 0x84b6, 0x84cf, 0x84a0, 0x84d7, 0x84d4, 0x84d2, 0x84db, 0x84b0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728, 0x876b, 0x8740, 0x872e, 0x871e, 0x8721, 0x8719, 0x871b, 0x8743, 0x872c, 0x8741, 0x873e, 0x8746, 0x8720, 0x8732, 0x872a, 0x872d, 0x873c, 0x8712, 0x873a, 0x8731, 0x8735, 0x8742, 0x8726, 0x8727, 0x8738, 0x8724, 0x871a, 0x8730, 0x8711, 0x88f7, 0x88e7, 0x88f1, 0x88f2, 0x88fa, 0x88fe, 0x88ee, 0x88fc, 0x88f6, 0x88fb, 63, 0xe440, 0x88f0, 0x88ec, 0x88eb, 0x899d, 0x89a1, 0x899f, 0x899e, 0x89e9, 0x89eb, 0x89e8, 0x8aab, 0x8a99, 0x8a8b, 0x8a92, 0x8a8f, 0x8a96, 0x8c3d, 0x8c68, 0x8c69, 0x8cd5, 0x8ccf, 0x8cd7, 0x8d96, 0x8e09, 0x8e02, 0x8dff, 0x8e0d, 0x8dfd, 0x8e0a, 0x8e03, 0x8e07, 0x8e06, 0x8e05, 0x8dfe, 0x8e00, 0x8e04, 0x8f10, 0x8f11, 0x8f0e, 0x8f0d, 0x9123, 0x911c, 0x9120, 0x9122, 0x911f, 0x911d, 0x911a, 0x9124, 0x9121, 0x911b, 0x917a, 0x9172, 0x9179, 0x9173, 0x92a5, 0x92a4, 0x9276, 0x929b, 0x927a, 0x92a0, 0x9294, 0x92aa, 0x928d, 94, 0xe4a1, 0x92a6, 0x929a, 0x92ab, 0x9279, 0x9297, 0x927f, 0x92a3, 0x92ee, 0x928e, 0x9282, 0x9295, 0x92a2, 0x927d, 0x9288, 0x92a1, 0x928a, 0x9286, 0x928c, 0x9299, 0x92a7, 0x927e, 0x9287, 0x92a9, 0x929d, 0x928b, 0x922d, 0x969e, 0x96a1, 0x96ff, 0x9758, 0x977d, 0x977a, 0x977e, 0x9783, 0x9780, 0x9782, 0x977b, 0x9784, 0x9781, 0x977f, 0x97ce, 0x97cd, 0x9816, 0x98ad, 0x98ae, 0x9902, 0x9900, 0x9907, 0x999d, 0x999c, 0x99c3, 0x99b9, 0x99bb, 0x99ba, 0x99c2, 0x99bd, 0x99c7, 0x9ab1, 0x9ae3, 0x9ae7, 0x9b3e, 0x9b3f, 0x9b60, 0x9b61, 0x9b5f, 0x9cf1, 0x9cf2, 0x9cf5, 0x9ea7, 0x50ff, 0x5103, 0x5130, 0x50f8, 0x5106, 0x5107, 0x50f6, 0x50fe, 0x510b, 0x510c, 0x50fd, 0x510a, 0x528b, 0x528c, 0x52f1, 0x52ef, 0x5648, 0x5642, 0x564c, 0x5635, 0x5641, 0x564a, 0x5649, 0x5646, 0x5658, 63, 0xe540, 0x565a, 0x5640, 0x5633, 0x563d, 0x562c, 0x563e, 0x5638, 0x562a, 0x563a, 0x571a, 0x58ab, 0x589d, 0x58b1, 0x58a0, 0x58a3, 0x58af, 0x58ac, 0x58a5, 0x58a1, 0x58ff, 0x5aff, 0x5af4, 0x5afd, 0x5af7, 0x5af6, 0x5b03, 0x5af8, 0x5b02, 0x5af9, 0x5b01, 0x5b07, 0x5b05, 0x5b0f, 0x5c67, 0x5d99, 0x5d97, 0x5d9f, 0x5d92, 0x5da2, 0x5d93, 0x5d95, 0x5da0, 0x5d9c, 0x5da1, 0x5d9a, 0x5d9e, 0x5e69, 0x5e5d, 0x5e60, 0x5e5c, 0x7df3, 0x5edb, 0x5ede, 0x5ee1, 0x5f49, 0x5fb2, 0x618b, 0x6183, 0x6179, 0x61b1, 0x61b0, 0x61a2, 0x6189, 94, 0xe5a1, 0x619b, 0x6193, 0x61af, 0x61ad, 0x619f, 0x6192, 0x61aa, 0x61a1, 0x618d, 0x6166, 0x61b3, 0x622d, 0x646e, 0x6470, 0x6496, 0x64a0, 0x6485, 0x6497, 0x649c, 0x648f, 0x648b, 0x648a, 0x648c, 0x64a3, 0x649f, 0x6468, 0x64b1, 0x6498, 0x6576, 0x657a, 0x6579, 0x657b, 0x65b2, 0x65b3, 0x66b5, 0x66b0, 0x66a9, 0x66b2, 0x66b7, 0x66aa, 0x66af, 0x6a00, 0x6a06, 0x6a17, 0x69e5, 0x69f8, 0x6a15, 0x69f1, 0x69e4, 0x6a20, 0x69ff, 0x69ec, 0x69e2, 0x6a1b, 0x6a1d, 0x69fe, 0x6a27, 0x69f2, 0x69ee, 0x6a14, 0x69f7, 0x69e7, 0x6a40, 0x6a08, 0x69e6, 0x69fb, 0x6a0d, 0x69fc, 0x69eb, 0x6a09, 0x6a04, 0x6a18, 0x6a25, 0x6a0f, 0x69f6, 0x6a26, 0x6a07, 0x69f4, 0x6a16, 0x6b51, 0x6ba5, 0x6ba3, 0x6ba2, 0x6ba6, 0x6c01, 0x6c00, 0x6bff, 0x6c02, 0x6f41, 0x6f26, 0x6f7e, 0x6f87, 0x6fc6, 0x6f92, 63, 0xe640, 0x6f8d, 0x6f89, 0x6f8c, 0x6f62, 0x6f4f, 0x6f85, 0x6f5a, 0x6f96, 0x6f76, 0x6f6c, 0x6f82, 0x6f55, 0x6f72, 0x6f52, 0x6f50, 0x6f57, 0x6f94, 0x6f93, 0x6f5d, 0x6f00, 0x6f61, 0x6f6b, 0x6f7d, 0x6f67, 0x6f90, 0x6f53, 0x6f8b, 0x6f69, 0x6f7f, 0x6f95, 0x6f63, 0x6f77, 0x6f6a, 0x6f7b, 0x71b2, 0x71af, 0x719b, 0x71b0, 0x71a0, 0x719a, 0x71a9, 0x71b5, 0x719d, 0x71a5, 0x719e, 0x71a4, 0x71a1, 0x71aa, 0x719c, 0x71a7, 0x71b3, 0x7298, 0x729a, 0x7358, 0x7352, 0x735e, 0x735f, 0x7360, 0x735d, 0x735b, 0x7361, 0x735a, 0x7359, 94, 0xe6a1, 0x7362, 0x7487, 0x7489, 0x748a, 0x7486, 0x7481, 0x747d, 0x7485, 0x7488, 0x747c, 0x7479, 0x7508, 0x7507, 0x757e, 0x7625, 0x761e, 0x7619, 0x761d, 0x761c, 0x7623, 0x761a, 0x7628, 0x761b, 0x769c, 0x769d, 0x769e, 0x769b, 0x778d, 0x778f, 0x7789, 0x7788, 0x78cd, 0x78bb, 0x78cf, 0x78cc, 0x78d1, 0x78ce, 0x78d4, 0x78c8, 0x78c3, 0x78c4, 0x78c9, 0x799a, 0x79a1, 0x79a0, 0x799c, 0x79a2, 0x799b, 0x6b76, 0x7a39, 0x7ab2, 0x7ab4, 0x7ab3, 0x7bb7, 0x7bcb, 0x7bbe, 0x7bac, 0x7bce, 0x7baf, 0x7bb9, 0x7bca, 0x7bb5, 0x7cc5, 0x7cc8, 0x7ccc, 0x7ccb, 0x7df7, 0x7ddb, 0x7dea, 0x7de7, 0x7dd7, 0x7de1, 0x7e03, 0x7dfa, 0x7de6, 0x7df6, 0x7df1, 0x7df0, 0x7dee, 0x7ddf, 0x7f76, 0x7fac, 0x7fb0, 0x7fad, 0x7fed, 0x7feb, 0x7fea, 0x7fec, 0x7fe6, 0x7fe8, 0x8064, 0x8067, 0x81a3, 0x819f, 63, 0xe740, 0x819e, 0x8195, 0x81a2, 0x8199, 0x8197, 0x8216, 0x824f, 0x8253, 0x8252, 0x8250, 0x824e, 0x8251, 0x8524, 0x853b, 0x850f, 0x8500, 0x8529, 0x850e, 0x8509, 0x850d, 0x851f, 0x850a, 0x8527, 0x851c, 0x84fb, 0x852b, 0x84fa, 0x8508, 0x850c, 0x84f4, 0x852a, 0x84f2, 0x8515, 0x84f7, 0x84eb, 0x84f3, 0x84fc, 0x8512, 0x84ea, 0x84e9, 0x8516, 0x84fe, 0x8528, 0x851d, 0x852e, 0x8502, 0x84fd, 0x851e, 0x84f6, 0x8531, 0x8526, 0x84e7, 0x84e8, 0x84f0, 0x84ef, 0x84f9, 0x8518, 0x8520, 0x8530, 0x850b, 0x8519, 0x852f, 0x8662, 94, 0xe7a1, 0x8756, 0x8763, 0x8764, 0x8777, 0x87e1, 0x8773, 0x8758, 0x8754, 0x875b, 0x8752, 0x8761, 0x875a, 0x8751, 0x875e, 0x876d, 0x876a, 0x8750, 0x874e, 0x875f, 0x875d, 0x876f, 0x876c, 0x877a, 0x876e, 0x875c, 0x8765, 0x874f, 0x877b, 0x8775, 0x8762, 0x8767, 0x8769, 0x885a, 0x8905, 0x890c, 0x8914, 0x890b, 0x8917, 0x8918, 0x8919, 0x8906, 0x8916, 0x8911, 0x890e, 0x8909, 0x89a2, 0x89a4, 0x89a3, 0x89ed, 0x89f0, 0x89ec, 0x8acf, 0x8ac6, 0x8ab8, 0x8ad3, 0x8ad1, 0x8ad4, 0x8ad5, 0x8abb, 0x8ad7, 0x8abe, 0x8ac0, 0x8ac5, 0x8ad8, 0x8ac3, 0x8aba, 0x8abd, 0x8ad9, 0x8c3e, 0x8c4d, 0x8c8f, 0x8ce5, 0x8cdf, 0x8cd9, 0x8ce8, 0x8cda, 0x8cdd, 0x8ce7, 0x8da0, 0x8d9c, 0x8da1, 0x8d9b, 0x8e20, 0x8e23, 0x8e25, 0x8e24, 0x8e2e, 0x8e15, 0x8e1b, 0x8e16, 0x8e11, 0x8e19, 0x8e26, 0x8e27, 63, 0xe840, 0x8e14, 0x8e12, 0x8e18, 0x8e13, 0x8e1c, 0x8e17, 0x8e1a, 0x8f2c, 0x8f24, 0x8f18, 0x8f1a, 0x8f20, 0x8f23, 0x8f16, 0x8f17, 0x9073, 0x9070, 0x906f, 0x9067, 0x906b, 0x912f, 0x912b, 0x9129, 0x912a, 0x9132, 0x9126, 0x912e, 0x9185, 0x9186, 0x918a, 0x9181, 0x9182, 0x9184, 0x9180, 0x92d0, 0x92c3, 0x92c4, 0x92c0, 0x92d9, 0x92b6, 0x92cf, 0x92f1, 0x92df, 0x92d8, 0x92e9, 0x92d7, 0x92dd, 0x92cc, 0x92ef, 0x92c2, 0x92e8, 0x92ca, 0x92c8, 0x92ce, 0x92e6, 0x92cd, 0x92d5, 0x92c9, 0x92e0, 0x92de, 0x92e7, 0x92d1, 0x92d3, 94, 0xe8a1, 0x92b5, 0x92e1, 0x92c6, 0x92b4, 0x957c, 0x95ac, 0x95ab, 0x95ae, 0x95b0, 0x96a4, 0x96a2, 0x96d3, 0x9705, 0x9708, 0x9702, 0x975a, 0x978a, 0x978e, 0x9788, 0x97d0, 0x97cf, 0x981e, 0x981d, 0x9826, 0x9829, 0x9828, 0x9820, 0x981b, 0x9827, 0x98b2, 0x9908, 0x98fa, 0x9911, 0x9914, 0x9916, 0x9917, 0x9915, 0x99dc, 0x99cd, 0x99cf, 0x99d3, 0x99d4, 0x99ce, 0x99c9, 0x99d6, 0x99d8, 0x99cb, 0x99d7, 0x99cc, 0x9ab3, 0x9aec, 0x9aeb, 0x9af3, 0x9af2, 0x9af1, 0x9b46, 0x9b43, 0x9b67, 0x9b74, 0x9b71, 0x9b66, 0x9b76, 0x9b75, 0x9b70, 0x9b68, 0x9b64, 0x9b6c, 0x9cfc, 0x9cfa, 0x9cfd, 0x9cff, 0x9cf7, 0x9d07, 0x9d00, 0x9cf9, 0x9cfb, 0x9d08, 0x9d05, 0x9d04, 0x9e83, 0x9ed3, 0x9f0f, 0x9f10, 0x511c, 0x5113, 0x5117, 0x511a, 0x5111, 0x51de, 0x5334, 0x53e1, 0x5670, 0x5660, 0x566e, 63, 0xe940, 0x5673, 0x5666, 0x5663, 0x566d, 0x5672, 0x565e, 0x5677, 0x571c, 0x571b, 0x58c8, 0x58bd, 0x58c9, 0x58bf, 0x58ba, 0x58c2, 0x58bc, 0x58c6, 0x5b17, 0x5b19, 0x5b1b, 0x5b21, 0x5b14, 0x5b13, 0x5b10, 0x5b16, 0x5b28, 0x5b1a, 0x5b20, 0x5b1e, 0x5bef, 0x5dac, 0x5db1, 0x5da9, 0x5da7, 0x5db5, 0x5db0, 0x5dae, 0x5daa, 0x5da8, 0x5db2, 0x5dad, 0x5daf, 0x5db4, 0x5e67, 0x5e68, 0x5e66, 0x5e6f, 0x5ee9, 0x5ee7, 0x5ee6, 0x5ee8, 0x5ee5, 0x5f4b, 0x5fbc, 0x619d, 0x61a8, 0x6196, 0x61c5, 0x61b4, 0x61c6, 0x61c1, 0x61cc, 0x61ba, 94, 0xe9a1, 0x61bf, 0x61b8, 0x618c, 0x64d7, 0x64d6, 0x64d0, 0x64cf, 0x64c9, 0x64bd, 0x6489, 0x64c3, 0x64db, 0x64f3, 0x64d9, 0x6533, 0x657f, 0x657c, 0x65a2, 0x66c8, 0x66be, 0x66c0, 0x66ca, 0x66cb, 0x66cf, 0x66bd, 0x66bb, 0x66ba, 0x66cc, 0x6723, 0x6a34, 0x6a66, 0x6a49, 0x6a67, 0x6a32, 0x6a68, 0x6a3e, 0x6a5d, 0x6a6d, 0x6a76, 0x6a5b, 0x6a51, 0x6a28, 0x6a5a, 0x6a3b, 0x6a3f, 0x6a41, 0x6a6a, 0x6a64, 0x6a50, 0x6a4f, 0x6a54, 0x6a6f, 0x6a69, 0x6a60, 0x6a3c, 0x6a5e, 0x6a56, 0x6a55, 0x6a4d, 0x6a4e, 0x6a46, 0x6b55, 0x6b54, 0x6b56, 0x6ba7, 0x6baa, 0x6bab, 0x6bc8, 0x6bc7, 0x6c04, 0x6c03, 0x6c06, 0x6fad, 0x6fcb, 0x6fa3, 0x6fc7, 0x6fbc, 0x6fce, 0x6fc8, 0x6f5e, 0x6fc4, 0x6fbd, 0x6f9e, 0x6fca, 0x6fa8, 0x7004, 0x6fa5, 0x6fae, 0x6fba, 0x6fac, 0x6faa, 0x6fcf, 0x6fbf, 0x6fb8, 63, 0xea40, 0x6fa2, 0x6fc9, 0x6fab, 0x6fcd, 0x6faf, 0x6fb2, 0x6fb0, 0x71c5, 0x71c2, 0x71bf, 0x71b8, 0x71d6, 0x71c0, 0x71c1, 0x71cb, 0x71d4, 0x71ca, 0x71c7, 0x71cf, 0x71bd, 0x71d8, 0x71bc, 0x71c6, 0x71da, 0x71db, 0x729d, 0x729e, 0x7369, 0x7366, 0x7367, 0x736c, 0x7365, 0x736b, 0x736a, 0x747f, 0x749a, 0x74a0, 0x7494, 0x7492, 0x7495, 0x74a1, 0x750b, 0x7580, 0x762f, 0x762d, 0x7631, 0x763d, 0x7633, 0x763c, 0x7635, 0x7632, 0x7630, 0x76bb, 0x76e6, 0x779a, 0x779d, 0x77a1, 0x779c, 0x779b, 0x77a2, 0x77a3, 0x7795, 0x7799, 94, 0xeaa1, 0x7797, 0x78dd, 0x78e9, 0x78e5, 0x78ea, 0x78de, 0x78e3, 0x78db, 0x78e1, 0x78e2, 0x78ed, 0x78df, 0x78e0, 0x79a4, 0x7a44, 0x7a48, 0x7a47, 0x7ab6, 0x7ab8, 0x7ab5, 0x7ab1, 0x7ab7, 0x7bde, 0x7be3, 0x7be7, 0x7bdd, 0x7bd5, 0x7be5, 0x7bda, 0x7be8, 0x7bf9, 0x7bd4, 0x7bea, 0x7be2, 0x7bdc, 0x7beb, 0x7bd8, 0x7bdf, 0x7cd2, 0x7cd4, 0x7cd7, 0x7cd0, 0x7cd1, 0x7e12, 0x7e21, 0x7e17, 0x7e0c, 0x7e1f, 0x7e20, 0x7e13, 0x7e0e, 0x7e1c, 0x7e15, 0x7e1a, 0x7e22, 0x7e0b, 0x7e0f, 0x7e16, 0x7e0d, 0x7e14, 0x7e25, 0x7e24, 0x7f43, 0x7f7b, 0x7f7c, 0x7f7a, 0x7fb1, 0x7fef, 0x802a, 0x8029, 0x806c, 0x81b1, 0x81a6, 0x81ae, 0x81b9, 0x81b5, 0x81ab, 0x81b0, 0x81ac, 0x81b4, 0x81b2, 0x81b7, 0x81a7, 0x81f2, 0x8255, 0x8256, 0x8257, 0x8556, 0x8545, 0x856b, 0x854d, 0x8553, 0x8561, 0x8558, 63, 0xeb40, 0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547, 0x8563, 0x853e, 0x855b, 0x8571, 0x854e, 0x856e, 0x8575, 0x8555, 0x8567, 0x8560, 0x858c, 0x8566, 0x855d, 0x8554, 0x8565, 0x856c, 0x8663, 0x8665, 0x8664, 0x879b, 0x878f, 0x8797, 0x8793, 0x8792, 0x8788, 0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87a3, 0x8785, 0x8790, 0x8791, 0x879d, 0x8784, 0x8794, 0x879c, 0x879a, 0x8789, 0x891e, 0x8926, 0x8930, 0x892d, 0x892e, 0x8927, 0x8931, 0x8922, 0x8929, 0x8923, 0x892f, 0x892c, 0x891f, 0x89f1, 0x8ae0, 94, 0xeba1, 0x8ae2, 0x8af2, 0x8af4, 0x8af5, 0x8add, 0x8b14, 0x8ae4, 0x8adf, 0x8af0, 0x8ac8, 0x8ade, 0x8ae1, 0x8ae8, 0x8aff, 0x8aef, 0x8afb, 0x8c91, 0x8c92, 0x8c90, 0x8cf5, 0x8cee, 0x8cf1, 0x8cf0, 0x8cf3, 0x8d6c, 0x8d6e, 0x8da5, 0x8da7, 0x8e33, 0x8e3e, 0x8e38, 0x8e40, 0x8e45, 0x8e36, 0x8e3c, 0x8e3d, 0x8e41, 0x8e30, 0x8e3f, 0x8ebd, 0x8f36, 0x8f2e, 0x8f35, 0x8f32, 0x8f39, 0x8f37, 0x8f34, 0x9076, 0x9079, 0x907b, 0x9086, 0x90fa, 0x9133, 0x9135, 0x9136, 0x9193, 0x9190, 0x9191, 0x918d, 0x918f, 0x9327, 0x931e, 0x9308, 0x931f, 0x9306, 0x930f, 0x937a, 0x9338, 0x933c, 0x931b, 0x9323, 0x9312, 0x9301, 0x9346, 0x932d, 0x930e, 0x930d, 0x92cb, 0x931d, 0x92fa, 0x9325, 0x9313, 0x92f9, 0x92f7, 0x9334, 0x9302, 0x9324, 0x92ff, 0x9329, 0x9339, 0x9335, 0x932a, 0x9314, 0x930c, 63, 0xec40, 0x930b, 0x92fe, 0x9309, 0x9300, 0x92fb, 0x9316, 0x95bc, 0x95cd, 0x95be, 0x95b9, 0x95ba, 0x95b6, 0x95bf, 0x95b5, 0x95bd, 0x96a9, 0x96d4, 0x970b, 0x9712, 0x9710, 0x9799, 0x9797, 0x9794, 0x97f0, 0x97f8, 0x9835, 0x982f, 0x9832, 0x9924, 0x991f, 0x9927, 0x9929, 0x999e, 0x99ee, 0x99ec, 0x99e5, 0x99e4, 0x99f0, 0x99e3, 0x99ea, 0x99e9, 0x99e7, 0x9ab9, 0x9abf, 0x9ab4, 0x9abb, 0x9af6, 0x9afa, 0x9af9, 0x9af7, 0x9b33, 0x9b80, 0x9b85, 0x9b87, 0x9b7c, 0x9b7e, 0x9b7b, 0x9b82, 0x9b93, 0x9b92, 0x9b90, 0x9b7a, 0x9b95, 94, 0xeca1, 0x9b7d, 0x9b88, 0x9d25, 0x9d17, 0x9d20, 0x9d1e, 0x9d14, 0x9d29, 0x9d1d, 0x9d18, 0x9d22, 0x9d10, 0x9d19, 0x9d1f, 0x9e88, 0x9e86, 0x9e87, 0x9eae, 0x9ead, 0x9ed5, 0x9ed6, 0x9efa, 0x9f12, 0x9f3d, 0x5126, 0x5125, 0x5122, 0x5124, 0x5120, 0x5129, 0x52f4, 0x5693, 0x568c, 0x568d, 0x5686, 0x5684, 0x5683, 0x567e, 0x5682, 0x567f, 0x5681, 0x58d6, 0x58d4, 0x58cf, 0x58d2, 0x5b2d, 0x5b25, 0x5b32, 0x5b23, 0x5b2c, 0x5b27, 0x5b26, 0x5b2f, 0x5b2e, 0x5b7b, 0x5bf1, 0x5bf2, 0x5db7, 0x5e6c, 0x5e6a, 0x5fbe, 0x5fbb, 0x61c3, 0x61b5, 0x61bc, 0x61e7, 0x61e0, 0x61e5, 0x61e4, 0x61e8, 0x61de, 0x64ef, 0x64e9, 0x64e3, 0x64eb, 0x64e4, 0x64e8, 0x6581, 0x6580, 0x65b6, 0x65da, 0x66d2, 0x6a8d, 0x6a96, 0x6a81, 0x6aa5, 0x6a89, 0x6a9f, 0x6a9b, 0x6aa1, 0x6a9e, 0x6a87, 0x6a93, 0x6a8e, 63, 0xed40, 0x6a95, 0x6a83, 0x6aa8, 0x6aa4, 0x6a91, 0x6a7f, 0x6aa6, 0x6a9a, 0x6a85, 0x6a8c, 0x6a92, 0x6b5b, 0x6bad, 0x6c09, 0x6fcc, 0x6fa9, 0x6ff4, 0x6fd4, 0x6fe3, 0x6fdc, 0x6fed, 0x6fe7, 0x6fe6, 0x6fde, 0x6ff2, 0x6fdd, 0x6fe2, 0x6fe8, 0x71e1, 0x71f1, 0x71e8, 0x71f2, 0x71e4, 0x71f0, 0x71e2, 0x7373, 0x736e, 0x736f, 0x7497, 0x74b2, 0x74ab, 0x7490, 0x74aa, 0x74ad, 0x74b1, 0x74a5, 0x74af, 0x7510, 0x7511, 0x7512, 0x750f, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647, 0x76a4, 0x76e9, 0x77b5, 0x77ab, 0x77b2, 0x77b7, 0x77b6, 94, 0xeda1, 0x77b4, 0x77b1, 0x77a8, 0x77f0, 0x78f3, 0x78fd, 0x7902, 0x78fb, 0x78fc, 0x78f2, 0x7905, 0x78f9, 0x78fe, 0x7904, 0x79ab, 0x79a8, 0x7a5c, 0x7a5b, 0x7a56, 0x7a58, 0x7a54, 0x7a5a, 0x7abe, 0x7ac0, 0x7ac1, 0x7c05, 0x7c0f, 0x7bf2, 0x7c00, 0x7bff, 0x7bfb, 0x7c0e, 0x7bf4, 0x7c0b, 0x7bf3, 0x7c02, 0x7c09, 0x7c03, 0x7c01, 0x7bf8, 0x7bfd, 0x7c06, 0x7bf0, 0x7bf1, 0x7c10, 0x7c0a, 0x7ce8, 0x7e2d, 0x7e3c, 0x7e42, 0x7e33, 0x9848, 0x7e38, 0x7e2a, 0x7e49, 0x7e40, 0x7e47, 0x7e29, 0x7e4c, 0x7e30, 0x7e3b, 0x7e36, 0x7e44, 0x7e3a, 0x7f45, 0x7f7f, 0x7f7e, 0x7f7d, 0x7ff4, 0x7ff2, 0x802c, 0x81bb, 0x81c4, 0x81cc, 0x81ca, 0x81c5, 0x81c7, 0x81bc, 0x81e9, 0x825b, 0x825a, 0x825c, 0x8583, 0x8580, 0x858f, 0x85a7, 0x8595, 0x85a0, 0x858b, 0x85a3, 0x857b, 0x85a4, 0x859a, 0x859e, 63, 0xee40, 0x8577, 0x857c, 0x8589, 0x85a1, 0x857a, 0x8578, 0x8557, 0x858e, 0x8596, 0x8586, 0x858d, 0x8599, 0x859d, 0x8581, 0x85a2, 0x8582, 0x8588, 0x8585, 0x8579, 0x8576, 0x8598, 0x8590, 0x859f, 0x8668, 0x87be, 0x87aa, 0x87ad, 0x87c5, 0x87b0, 0x87ac, 0x87b9, 0x87b5, 0x87bc, 0x87ae, 0x87c9, 0x87c3, 0x87c2, 0x87cc, 0x87b7, 0x87af, 0x87c4, 0x87ca, 0x87b4, 0x87b6, 0x87bf, 0x87b8, 0x87bd, 0x87de, 0x87b2, 0x8935, 0x8933, 0x893c, 0x893e, 0x8941, 0x8952, 0x8937, 0x8942, 0x89ad, 0x89af, 0x89ae, 0x89f2, 0x89f3, 0x8b1e, 94, 0xeea1, 0x8b18, 0x8b16, 0x8b11, 0x8b05, 0x8b0b, 0x8b22, 0x8b0f, 0x8b12, 0x8b15, 0x8b07, 0x8b0d, 0x8b08, 0x8b06, 0x8b1c, 0x8b13, 0x8b1a, 0x8c4f, 0x8c70, 0x8c72, 0x8c71, 0x8c6f, 0x8c95, 0x8c94, 0x8cf9, 0x8d6f, 0x8e4e, 0x8e4d, 0x8e53, 0x8e50, 0x8e4c, 0x8e47, 0x8f43, 0x8f40, 0x9085, 0x907e, 0x9138, 0x919a, 0x91a2, 0x919b, 0x9199, 0x919f, 0x91a1, 0x919d, 0x91a0, 0x93a1, 0x9383, 0x93af, 0x9364, 0x9356, 0x9347, 0x937c, 0x9358, 0x935c, 0x9376, 0x9349, 0x9350, 0x9351, 0x9360, 0x936d, 0x938f, 0x934c, 0x936a, 0x9379, 0x9357, 0x9355, 0x9352, 0x934f, 0x9371, 0x9377, 0x937b, 0x9361, 0x935e, 0x9363, 0x9367, 0x9380, 0x934e, 0x9359, 0x95c7, 0x95c0, 0x95c9, 0x95c3, 0x95c5, 0x95b7, 0x96ae, 0x96b0, 0x96ac, 0x9720, 0x971f, 0x9718, 0x971d, 0x9719, 0x979a, 0x97a1, 0x979c, 63, 0xef40, 0x979e, 0x979d, 0x97d5, 0x97d4, 0x97f1, 0x9841, 0x9844, 0x984a, 0x9849, 0x9845, 0x9843, 0x9925, 0x992b, 0x992c, 0x992a, 0x9933, 0x9932, 0x992f, 0x992d, 0x9931, 0x9930, 0x9998, 0x99a3, 0x99a1, 0x9a02, 0x99fa, 0x99f4, 0x99f7, 0x99f9, 0x99f8, 0x99f6, 0x99fb, 0x99fd, 0x99fe, 0x99fc, 0x9a03, 0x9abe, 0x9afe, 0x9afd, 0x9b01, 0x9afc, 0x9b48, 0x9b9a, 0x9ba8, 0x9b9e, 0x9b9b, 0x9ba6, 0x9ba1, 0x9ba5, 0x9ba4, 0x9b86, 0x9ba2, 0x9ba0, 0x9baf, 0x9d33, 0x9d41, 0x9d67, 0x9d36, 0x9d2e, 0x9d2f, 0x9d31, 0x9d38, 0x9d30, 94, 0xefa1, 0x9d45, 0x9d42, 0x9d43, 0x9d3e, 0x9d37, 0x9d40, 0x9d3d, 0x7ff5, 0x9d2d, 0x9e8a, 0x9e89, 0x9e8d, 0x9eb0, 0x9ec8, 0x9eda, 0x9efb, 0x9eff, 0x9f24, 0x9f23, 0x9f22, 0x9f54, 0x9fa0, 0x5131, 0x512d, 0x512e, 0x5698, 0x569c, 0x5697, 0x569a, 0x569d, 0x5699, 0x5970, 0x5b3c, 0x5c69, 0x5c6a, 0x5dc0, 0x5e6d, 0x5e6e, 0x61d8, 0x61df, 0x61ed, 0x61ee, 0x61f1, 0x61ea, 0x61f0, 0x61eb, 0x61d6, 0x61e9, 0x64ff, 0x6504, 0x64fd, 0x64f8, 0x6501, 0x6503, 0x64fc, 0x6594, 0x65db, 0x66da, 0x66db, 0x66d8, 0x6ac5, 0x6ab9, 0x6abd, 0x6ae1, 0x6ac6, 0x6aba, 0x6ab6, 0x6ab7, 0x6ac7, 0x6ab4, 0x6aad, 0x6b5e, 0x6bc9, 0x6c0b, 0x7007, 0x700c, 0x700d, 0x7001, 0x7005, 0x7014, 0x700e, 0x6fff, 0x7000, 0x6ffb, 0x7026, 0x6ffc, 0x6ff7, 0x700a, 0x7201, 0x71ff, 0x71f9, 0x7203, 0x71fd, 0x7376, 63, 0xf040, 0x74b8, 0x74c0, 0x74b5, 0x74c1, 0x74be, 0x74b6, 0x74bb, 0x74c2, 0x7514, 0x7513, 0x765c, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657, 0x765a, 0x76a6, 0x76bd, 0x76ec, 0x77c2, 0x77ba, 0x78ff, 0x790c, 0x7913, 0x7914, 0x7909, 0x7910, 0x7912, 0x7911, 0x79ad, 0x79ac, 0x7a5f, 0x7c1c, 0x7c29, 0x7c19, 0x7c20, 0x7c1f, 0x7c2d, 0x7c1d, 0x7c26, 0x7c28, 0x7c22, 0x7c25, 0x7c30, 0x7e5c, 0x7e50, 0x7e56, 0x7e63, 0x7e58, 0x7e62, 0x7e5f, 0x7e51, 0x7e60, 0x7e57, 0x7e53, 0x7fb5, 0x7fb3, 0x7ff7, 0x7ff8, 0x8075, 0x81d1, 0x81d2, 94, 0xf0a1, 0x81d0, 0x825f, 0x825e, 0x85b4, 0x85c6, 0x85c0, 0x85c3, 0x85c2, 0x85b3, 0x85b5, 0x85bd, 0x85c7, 0x85c4, 0x85bf, 0x85cb, 0x85ce, 0x85c8, 0x85c5, 0x85b1, 0x85b6, 0x85d2, 0x8624, 0x85b8, 0x85b7, 0x85be, 0x8669, 0x87e7, 0x87e6, 0x87e2, 0x87db, 0x87eb, 0x87ea, 0x87e5, 0x87df, 0x87f3, 0x87e4, 0x87d4, 0x87dc, 0x87d3, 0x87ed, 0x87d8, 0x87e3, 0x87a4, 0x87d7, 0x87d9, 0x8801, 0x87f4, 0x87e8, 0x87dd, 0x8953, 0x894b, 0x894f, 0x894c, 0x8946, 0x8950, 0x8951, 0x8949, 0x8b2a, 0x8b27, 0x8b23, 0x8b33, 0x8b30, 0x8b35, 0x8b47, 0x8b2f, 0x8b3c, 0x8b3e, 0x8b31, 0x8b25, 0x8b37, 0x8b26, 0x8b36, 0x8b2e, 0x8b24, 0x8b3b, 0x8b3d, 0x8b3a, 0x8c42, 0x8c75, 0x8c99, 0x8c98, 0x8c97, 0x8cfe, 0x8d04, 0x8d02, 0x8d00, 0x8e5c, 0x8e62, 0x8e60, 0x8e57, 0x8e56, 0x8e5e, 0x8e65, 0x8e67, 63, 0xf140, 0x8e5b, 0x8e5a, 0x8e61, 0x8e5d, 0x8e69, 0x8e54, 0x8f46, 0x8f47, 0x8f48, 0x8f4b, 0x9128, 0x913a, 0x913b, 0x913e, 0x91a8, 0x91a5, 0x91a7, 0x91af, 0x91aa, 0x93b5, 0x938c, 0x9392, 0x93b7, 0x939b, 0x939d, 0x9389, 0x93a7, 0x938e, 0x93aa, 0x939e, 0x93a6, 0x9395, 0x9388, 0x9399, 0x939f, 0x938d, 0x93b1, 0x9391, 0x93b2, 0x93a4, 0x93a8, 0x93b4, 0x93a3, 0x93a5, 0x95d2, 0x95d3, 0x95d1, 0x96b3, 0x96d7, 0x96da, 0x5dc2, 0x96df, 0x96d8, 0x96dd, 0x9723, 0x9722, 0x9725, 0x97ac, 0x97ae, 0x97a8, 0x97ab, 0x97a4, 0x97aa, 94, 0xf1a1, 0x97a2, 0x97a5, 0x97d7, 0x97d9, 0x97d6, 0x97d8, 0x97fa, 0x9850, 0x9851, 0x9852, 0x98b8, 0x9941, 0x993c, 0x993a, 0x9a0f, 0x9a0b, 0x9a09, 0x9a0d, 0x9a04, 0x9a11, 0x9a0a, 0x9a05, 0x9a07, 0x9a06, 0x9ac0, 0x9adc, 0x9b08, 0x9b04, 0x9b05, 0x9b29, 0x9b35, 0x9b4a, 0x9b4c, 0x9b4b, 0x9bc7, 0x9bc6, 0x9bc3, 0x9bbf, 0x9bc1, 0x9bb5, 0x9bb8, 0x9bd3, 0x9bb6, 0x9bc4, 0x9bb9, 0x9bbd, 0x9d5c, 0x9d53, 0x9d4f, 0x9d4a, 0x9d5b, 0x9d4b, 0x9d59, 0x9d56, 0x9d4c, 0x9d57, 0x9d52, 0x9d54, 0x9d5f, 0x9d58, 0x9d5a, 0x9e8e, 0x9e8c, 0x9edf, 0x9f01, 0x9f00, 0x9f16, 0x9f25, 0x9f2b, 0x9f2a, 0x9f29, 0x9f28, 0x9f4c, 0x9f55, 0x5134, 0x5135, 0x5296, 0x52f7, 0x53b4, 0x56ab, 0x56ad, 0x56a6, 0x56a7, 0x56aa, 0x56ac, 0x58da, 0x58dd, 0x58db, 0x5912, 0x5b3d, 0x5b3e, 0x5b3f, 0x5dc3, 0x5e70, 63, 0xf240, 0x5fbf, 0x61fb, 0x6507, 0x6510, 0x650d, 0x6509, 0x650c, 0x650e, 0x6584, 0x65de, 0x65dd, 0x66de, 0x6ae7, 0x6ae0, 0x6acc, 0x6ad1, 0x6ad9, 0x6acb, 0x6adf, 0x6adc, 0x6ad0, 0x6aeb, 0x6acf, 0x6acd, 0x6ade, 0x6b60, 0x6bb0, 0x6c0c, 0x7019, 0x7027, 0x7020, 0x7016, 0x702b, 0x7021, 0x7022, 0x7023, 0x7029, 0x7017, 0x7024, 0x701c, 0x702a, 0x720c, 0x720a, 0x7207, 0x7202, 0x7205, 0x72a5, 0x72a6, 0x72a4, 0x72a3, 0x72a1, 0x74cb, 0x74c5, 0x74b7, 0x74c3, 0x7516, 0x7660, 0x77c9, 0x77ca, 0x77c4, 0x77f1, 0x791d, 0x791b, 94, 0xf2a1, 0x7921, 0x791c, 0x7917, 0x791e, 0x79b0, 0x7a67, 0x7a68, 0x7c33, 0x7c3c, 0x7c39, 0x7c2c, 0x7c3b, 0x7cec, 0x7cea, 0x7e76, 0x7e75, 0x7e78, 0x7e70, 0x7e77, 0x7e6f, 0x7e7a, 0x7e72, 0x7e74, 0x7e68, 0x7f4b, 0x7f4a, 0x7f83, 0x7f86, 0x7fb7, 0x7ffd, 0x7ffe, 0x8078, 0x81d7, 0x81d5, 0x8264, 0x8261, 0x8263, 0x85eb, 0x85f1, 0x85ed, 0x85d9, 0x85e1, 0x85e8, 0x85da, 0x85d7, 0x85ec, 0x85f2, 0x85f8, 0x85d8, 0x85df, 0x85e3, 0x85dc, 0x85d1, 0x85f0, 0x85e6, 0x85ef, 0x85de, 0x85e2, 0x8800, 0x87fa, 0x8803, 0x87f6, 0x87f7, 0x8809, 0x880c, 0x880b, 0x8806, 0x87fc, 0x8808, 0x87ff, 0x880a, 0x8802, 0x8962, 0x895a, 0x895b, 0x8957, 0x8961, 0x895c, 0x8958, 0x895d, 0x8959, 0x8988, 0x89b7, 0x89b6, 0x89f6, 0x8b50, 0x8b48, 0x8b4a, 0x8b40, 0x8b53, 0x8b56, 0x8b54, 0x8b4b, 0x8b55, 63, 0xf340, 0x8b51, 0x8b42, 0x8b52, 0x8b57, 0x8c43, 0x8c77, 0x8c76, 0x8c9a, 0x8d06, 0x8d07, 0x8d09, 0x8dac, 0x8daa, 0x8dad, 0x8dab, 0x8e6d, 0x8e78, 0x8e73, 0x8e6a, 0x8e6f, 0x8e7b, 0x8ec2, 0x8f52, 0x8f51, 0x8f4f, 0x8f50, 0x8f53, 0x8fb4, 0x9140, 0x913f, 0x91b0, 0x91ad, 0x93de, 0x93c7, 0x93cf, 0x93c2, 0x93da, 0x93d0, 0x93f9, 0x93ec, 0x93cc, 0x93d9, 0x93a9, 0x93e6, 0x93ca, 0x93d4, 0x93ee, 0x93e3, 0x93d5, 0x93c4, 0x93ce, 0x93c0, 0x93d2, 0x93e7, 0x957d, 0x95da, 0x95db, 0x96e1, 0x9729, 0x972b, 0x972c, 0x9728, 0x9726, 94, 0xf3a1, 0x97b3, 0x97b7, 0x97b6, 0x97dd, 0x97de, 0x97df, 0x985c, 0x9859, 0x985d, 0x9857, 0x98bf, 0x98bd, 0x98bb, 0x98be, 0x9948, 0x9947, 0x9943, 0x99a6, 0x99a7, 0x9a1a, 0x9a15, 0x9a25, 0x9a1d, 0x9a24, 0x9a1b, 0x9a22, 0x9a20, 0x9a27, 0x9a23, 0x9a1e, 0x9a1c, 0x9a14, 0x9ac2, 0x9b0b, 0x9b0a, 0x9b0e, 0x9b0c, 0x9b37, 0x9bea, 0x9beb, 0x9be0, 0x9bde, 0x9be4, 0x9be6, 0x9be2, 0x9bf0, 0x9bd4, 0x9bd7, 0x9bec, 0x9bdc, 0x9bd9, 0x9be5, 0x9bd5, 0x9be1, 0x9bda, 0x9d77, 0x9d81, 0x9d8a, 0x9d84, 0x9d88, 0x9d71, 0x9d80, 0x9d78, 0x9d86, 0x9d8b, 0x9d8c, 0x9d7d, 0x9d6b, 0x9d74, 0x9d75, 0x9d70, 0x9d69, 0x9d85, 0x9d73, 0x9d7b, 0x9d82, 0x9d6f, 0x9d79, 0x9d7f, 0x9d87, 0x9d68, 0x9e94, 0x9e91, 0x9ec0, 0x9efc, 0x9f2d, 0x9f40, 0x9f41, 0x9f4d, 0x9f56, 0x9f57, 0x9f58, 0x5337, 0x56b2, 63, 0xf440, 0x56b5, 0x56b3, 0x58e3, 0x5b45, 0x5dc6, 0x5dc7, 0x5eee, 0x5eef, 0x5fc0, 0x5fc1, 0x61f9, 0x6517, 0x6516, 0x6515, 0x6513, 0x65df, 0x66e8, 0x66e3, 0x66e4, 0x6af3, 0x6af0, 0x6aea, 0x6ae8, 0x6af9, 0x6af1, 0x6aee, 0x6aef, 0x703c, 0x7035, 0x702f, 0x7037, 0x7034, 0x7031, 0x7042, 0x7038, 0x703f, 0x703a, 0x7039, 0x7040, 0x703b, 0x7033, 0x7041, 0x7213, 0x7214, 0x72a8, 0x737d, 0x737c, 0x74ba, 0x76ab, 0x76aa, 0x76be, 0x76ed, 0x77cc, 0x77ce, 0x77cf, 0x77cd, 0x77f2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, 94, 0xf4a1, 0x79b2, 0x7a6e, 0x7a6c, 0x7a6d, 0x7af7, 0x7c49, 0x7c48, 0x7c4a, 0x7c47, 0x7c45, 0x7cee, 0x7e7b, 0x7e7e, 0x7e81, 0x7e80, 0x7fba, 0x7fff, 0x8079, 0x81db, 0x81d9, 0x820b, 0x8268, 0x8269, 0x8622, 0x85ff, 0x8601, 0x85fe, 0x861b, 0x8600, 0x85f6, 0x8604, 0x8609, 0x8605, 0x860c, 0x85fd, 0x8819, 0x8810, 0x8811, 0x8817, 0x8813, 0x8816, 0x8963, 0x8966, 0x89b9, 0x89f7, 0x8b60, 0x8b6a, 0x8b5d, 0x8b68, 0x8b63, 0x8b65, 0x8b67, 0x8b6d, 0x8dae, 0x8e86, 0x8e88, 0x8e84, 0x8f59, 0x8f56, 0x8f57, 0x8f55, 0x8f58, 0x8f5a, 0x908d, 0x9143, 0x9141, 0x91b7, 0x91b5, 0x91b2, 0x91b3, 0x940b, 0x9413, 0x93fb, 0x9420, 0x940f, 0x9414, 0x93fe, 0x9415, 0x9410, 0x9428, 0x9419, 0x940d, 0x93f5, 0x9400, 0x93f7, 0x9407, 0x940e, 0x9416, 0x9412, 0x93fa, 0x9409, 0x93f8, 0x940a, 0x93ff, 63, 0xf540, 0x93fc, 0x940c, 0x93f6, 0x9411, 0x9406, 0x95de, 0x95e0, 0x95df, 0x972e, 0x972f, 0x97b9, 0x97bb, 0x97fd, 0x97fe, 0x9860, 0x9862, 0x9863, 0x985f, 0x98c1, 0x98c2, 0x9950, 0x994e, 0x9959, 0x994c, 0x994b, 0x9953, 0x9a32, 0x9a34, 0x9a31, 0x9a2c, 0x9a2a, 0x9a36, 0x9a29, 0x9a2e, 0x9a38, 0x9a2d, 0x9ac7, 0x9aca, 0x9ac6, 0x9b10, 0x9b12, 0x9b11, 0x9c0b, 0x9c08, 0x9bf7, 0x9c05, 0x9c12, 0x9bf8, 0x9c40, 0x9c07, 0x9c0e, 0x9c06, 0x9c17, 0x9c14, 0x9c09, 0x9d9f, 0x9d99, 0x9da4, 0x9d9d, 0x9d92, 0x9d98, 0x9d90, 0x9d9b, 94, 0xf5a1, 0x9da0, 0x9d94, 0x9d9c, 0x9daa, 0x9d97, 0x9da1, 0x9d9a, 0x9da2, 0x9da8, 0x9d9e, 0x9da3, 0x9dbf, 0x9da9, 0x9d96, 0x9da6, 0x9da7, 0x9e99, 0x9e9b, 0x9e9a, 0x9ee5, 0x9ee4, 0x9ee7, 0x9ee6, 0x9f30, 0x9f2e, 0x9f5b, 0x9f60, 0x9f5e, 0x9f5d, 0x9f59, 0x9f91, 0x513a, 0x5139, 0x5298, 0x5297, 0x56c3, 0x56bd, 0x56be, 0x5b48, 0x5b47, 0x5dcb, 0x5dcf, 0x5ef1, 0x61fd, 0x651b, 0x6b02, 0x6afc, 0x6b03, 0x6af8, 0x6b00, 0x7043, 0x7044, 0x704a, 0x7048, 0x7049, 0x7045, 0x7046, 0x721d, 0x721a, 0x7219, 0x737e, 0x7517, 0x766a, 0x77d0, 0x792d, 0x7931, 0x792f, 0x7c54, 0x7c53, 0x7cf2, 0x7e8a, 0x7e87, 0x7e88, 0x7e8b, 0x7e86, 0x7e8d, 0x7f4d, 0x7fbb, 0x8030, 0x81dd, 0x8618, 0x862a, 0x8626, 0x861f, 0x8623, 0x861c, 0x8619, 0x8627, 0x862e, 0x8621, 0x8620, 0x8629, 0x861e, 0x8625, 63, 0xf640, 0x8829, 0x881d, 0x881b, 0x8820, 0x8824, 0x881c, 0x882b, 0x884a, 0x896d, 0x8969, 0x896e, 0x896b, 0x89fa, 0x8b79, 0x8b78, 0x8b45, 0x8b7a, 0x8b7b, 0x8d10, 0x8d14, 0x8daf, 0x8e8e, 0x8e8c, 0x8f5e, 0x8f5b, 0x8f5d, 0x9146, 0x9144, 0x9145, 0x91b9, 0x943f, 0x943b, 0x9436, 0x9429, 0x943d, 0x943c, 0x9430, 0x9439, 0x942a, 0x9437, 0x942c, 0x9440, 0x9431, 0x95e5, 0x95e4, 0x95e3, 0x9735, 0x973a, 0x97bf, 0x97e1, 0x9864, 0x98c9, 0x98c6, 0x98c0, 0x9958, 0x9956, 0x9a39, 0x9a3d, 0x9a46, 0x9a44, 0x9a42, 0x9a41, 0x9a3a, 94, 0xf6a1, 0x9a3f, 0x9acd, 0x9b15, 0x9b17, 0x9b18, 0x9b16, 0x9b3a, 0x9b52, 0x9c2b, 0x9c1d, 0x9c1c, 0x9c2c, 0x9c23, 0x9c28, 0x9c29, 0x9c24, 0x9c21, 0x9db7, 0x9db6, 0x9dbc, 0x9dc1, 0x9dc7, 0x9dca, 0x9dcf, 0x9dbe, 0x9dc5, 0x9dc3, 0x9dbb, 0x9db5, 0x9dce, 0x9db9, 0x9dba, 0x9dac, 0x9dc8, 0x9db1, 0x9dad, 0x9dcc, 0x9db3, 0x9dcd, 0x9db2, 0x9e7a, 0x9e9c, 0x9eeb, 0x9eee, 0x9eed, 0x9f1b, 0x9f18, 0x9f1a, 0x9f31, 0x9f4e, 0x9f65, 0x9f64, 0x9f92, 0x4eb9, 0x56c6, 0x56c5, 0x56cb, 0x5971, 0x5b4b, 0x5b4c, 0x5dd5, 0x5dd1, 0x5ef2, 0x6521, 0x6520, 0x6526, 0x6522, 0x6b0b, 0x6b08, 0x6b09, 0x6c0d, 0x7055, 0x7056, 0x7057, 0x7052, 0x721e, 0x721f, 0x72a9, 0x737f, 0x74d8, 0x74d5, 0x74d9, 0x74d7, 0x766d, 0x76ad, 0x7935, 0x79b4, 0x7a70, 0x7a71, 0x7c57, 0x7c5c, 0x7c59, 0x7c5b, 0x7c5a, 63, 0xf740, 0x7cf4, 0x7cf1, 0x7e91, 0x7f4f, 0x7f87, 0x81de, 0x826b, 0x8634, 0x8635, 0x8633, 0x862c, 0x8632, 0x8636, 0x882c, 0x8828, 0x8826, 0x882a, 0x8825, 0x8971, 0x89bf, 0x89be, 0x89fb, 0x8b7e, 0x8b84, 0x8b82, 0x8b86, 0x8b85, 0x8b7f, 0x8d15, 0x8e95, 0x8e94, 0x8e9a, 0x8e92, 0x8e90, 0x8e96, 0x8e97, 0x8f60, 0x8f62, 0x9147, 0x944c, 0x9450, 0x944a, 0x944b, 0x944f, 0x9447, 0x9445, 0x9448, 0x9449, 0x9446, 0x973f, 0x97e3, 0x986a, 0x9869, 0x98cb, 0x9954, 0x995b, 0x9a4e, 0x9a53, 0x9a54, 0x9a4c, 0x9a4f, 0x9a48, 0x9a4a, 94, 0xf7a1, 0x9a49, 0x9a52, 0x9a50, 0x9ad0, 0x9b19, 0x9b2b, 0x9b3b, 0x9b56, 0x9b55, 0x9c46, 0x9c48, 0x9c3f, 0x9c44, 0x9c39, 0x9c33, 0x9c41, 0x9c3c, 0x9c37, 0x9c34, 0x9c32, 0x9c3d, 0x9c36, 0x9ddb, 0x9dd2, 0x9dde, 0x9dda, 0x9dcb, 0x9dd0, 0x9ddc, 0x9dd1, 0x9ddf, 0x9de9, 0x9dd9, 0x9dd8, 0x9dd6, 0x9df5, 0x9dd5, 0x9ddd, 0x9eb6, 0x9ef0, 0x9f35, 0x9f33, 0x9f32, 0x9f42, 0x9f6b, 0x9f95, 0x9fa2, 0x513d, 0x5299, 0x58e8, 0x58e7, 0x5972, 0x5b4d, 0x5dd8, 0x882f, 0x5f4f, 0x6201, 0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66eb, 0x6b11, 0x6b12, 0x6b0f, 0x6bca, 0x705b, 0x705a, 0x7222, 0x7382, 0x7381, 0x7383, 0x7670, 0x77d4, 0x7c67, 0x7c66, 0x7e95, 0x826c, 0x863a, 0x8640, 0x8639, 0x863c, 0x8631, 0x863b, 0x863e, 0x8830, 0x8832, 0x882e, 0x8833, 0x8976, 0x8974, 0x8973, 0x89fe, 63, 0xf840, 0x8b8c, 0x8b8e, 0x8b8b, 0x8b88, 0x8c45, 0x8d19, 0x8e98, 0x8f64, 0x8f63, 0x91bc, 0x9462, 0x9455, 0x945d, 0x9457, 0x945e, 0x97c4, 0x97c5, 0x9800, 0x9a56, 0x9a59, 0x9b1e, 0x9b1f, 0x9b20, 0x9c52, 0x9c58, 0x9c50, 0x9c4a, 0x9c4d, 0x9c4b, 0x9c55, 0x9c59, 0x9c4c, 0x9c4e, 0x9dfb, 0x9df7, 0x9def, 0x9de3, 0x9deb, 0x9df8, 0x9de4, 0x9df6, 0x9de1, 0x9dee, 0x9de6, 0x9df2, 0x9df0, 0x9de2, 0x9dec, 0x9df4, 0x9df3, 0x9de8, 0x9ded, 0x9ec2, 0x9ed0, 0x9ef2, 0x9ef3, 0x9f06, 0x9f1c, 0x9f38, 0x9f37, 0x9f36, 0x9f43, 0x9f4f, 94, 0xf8a1, 0x9f71, 0x9f70, 0x9f6e, 0x9f6f, 0x56d3, 0x56cd, 0x5b4e, 0x5c6d, 0x652d, 0x66ed, 0x66ee, 0x6b13, 0x705f, 0x7061, 0x705d, 0x7060, 0x7223, 0x74db, 0x74e5, 0x77d5, 0x7938, 0x79b7, 0x79b6, 0x7c6a, 0x7e97, 0x7f89, 0x826d, 0x8643, 0x8838, 0x8837, 0x8835, 0x884b, 0x8b94, 0x8b95, 0x8e9e, 0x8e9f, 0x8ea0, 0x8e9d, 0x91be, 0x91bd, 0x91c2, 0x946b, 0x9468, 0x9469, 0x96e5, 0x9746, 0x9743, 0x9747, 0x97c7, 0x97e5, 0x9a5e, 0x9ad5, 0x9b59, 0x9c63, 0x9c67, 0x9c66, 0x9c62, 0x9c5e, 0x9c60, 0x9e02, 0x9dfe, 0x9e07, 0x9e03, 0x9e06, 0x9e05, 0x9e00, 0x9e01, 0x9e09, 0x9dff, 0x9dfd, 0x9e04, 0x9ea0, 0x9f1e, 0x9f46, 0x9f74, 0x9f75, 0x9f76, 0x56d4, 0x652e, 0x65b8, 0x6b18, 0x6b19, 0x6b17, 0x6b1a, 0x7062, 0x7226, 0x72aa, 0x77d8, 0x77d9, 0x7939, 0x7c69, 0x7c6b, 0x7cf6, 0x7e9a, 63, 0xf940, 0x7e98, 0x7e9b, 0x7e99, 0x81e0, 0x81e1, 0x8646, 0x8647, 0x8648, 0x8979, 0x897a, 0x897c, 0x897b, 0x89ff, 0x8b98, 0x8b99, 0x8ea5, 0x8ea4, 0x8ea3, 0x946e, 0x946d, 0x946f, 0x9471, 0x9473, 0x9749, 0x9872, 0x995f, 0x9c68, 0x9c6e, 0x9c6d, 0x9e0b, 0x9e0d, 0x9e10, 0x9e0f, 0x9e12, 0x9e11, 0x9ea1, 0x9ef5, 0x9f09, 0x9f47, 0x9f78, 0x9f7b, 0x9f7a, 0x9f79, 0x571e, 0x7066, 0x7c6f, 0x883c, 0x8db2, 0x8ea6, 0x91c3, 0x9474, 0x9478, 0x9476, 0x9475, 0x9a60, 0x9c74, 0x9c73, 0x9c71, 0x9c75, 0x9e14, 0x9e13, 0x9ef6, 0x9f0a, 53, 0xf9a1, 0x9fa4, 0x7068, 0x7065, 0x7cf7, 0x866a, 0x883e, 0x883d, 0x883f, 0x8b9e, 0x8c9c, 0x8ea9, 0x8ec9, 0x974b, 0x9873, 0x9874, 0x98cc, 0x9961, 0x99ab, 0x9a64, 0x9a66, 0x9a67, 0x9b24, 0x9e15, 0x9e17, 0x9f48, 0x6207, 0x6b1e, 0x7227, 0x864c, 0x8ea8, 0x9482, 0x9480, 0x9481, 0x9a69, 0x9a68, 0x9b2e, 0x9e19, 0x7229, 0x864b, 0x8b9f, 0x9483, 0x9c79, 0x9eb7, 0x7675, 0x9a6b, 0x9c7a, 0x9e1d, 0x7069, 0x706a, 0x9ea4, 0x9f7e, 0x9f49, 0x9f98, 0 jade-1.2.1/lib/entmgr_inst.cxx100444 764 764 37053 6605016310 14053 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Owner.h" #include "CopyOwner.h" #include "RangeMap.h" #include "Ptr.h" #include "StringOf.h" #include "StringC.h" #include "Vector.h" #include "ISet.h" #include "ISetIter.h" #include "XcharMap.h" #include "SubstTable.h" #include "StringResource.h" #include "CharMap.h" #undef SP_DEFINE_TEMPLATES #include "types.h" #include "Location.h" #include "Message.h" #include "NamedResource.h" #include "EntityManager.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_2; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_3; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr > #else #ifdef __xlC__ #pragma define(Ptr >) #else #ifdef SP_ANSI_CLASS_INST template class Ptr >; #else typedef Ptr > Dummy_4; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr > #else #ifdef __xlC__ #pragma define(ConstPtr >) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr >; #else typedef ConstPtr > Dummy_5; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr > #else #ifdef __xlC__ #pragma define(Ptr >) #else #ifdef SP_ANSI_CLASS_INST template class Ptr >; #else typedef Ptr > Dummy_6; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr > #else #ifdef __xlC__ #pragma define(ConstPtr >) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr >; #else typedef ConstPtr > Dummy_7; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr > #else #ifdef __xlC__ #pragma define(Ptr >) #else #ifdef SP_ANSI_CLASS_INST template class Ptr >; #else typedef Ptr > Dummy_8; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr > #else #ifdef __xlC__ #pragma define(ConstPtr >) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr >; #else typedef ConstPtr > Dummy_9; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr > #else #ifdef __xlC__ #pragma define(Ptr >) #else #ifdef SP_ANSI_CLASS_INST template class Ptr >; #else typedef Ptr > Dummy_10; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr > #else #ifdef __xlC__ #pragma define(ConstPtr >) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr >; #else typedef ConstPtr > Dummy_11; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_12; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_13; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_14; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_15; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_16; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_17; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_18; #endif #endif #endif #ifdef __DECCXX #pragma define_template CopyOwner #else #ifdef __xlC__ #pragma define(CopyOwner) #else #ifdef SP_ANSI_CLASS_INST template class CopyOwner; #else typedef CopyOwner Dummy_19; #endif #endif #endif #ifdef __DECCXX #pragma define_template String #else #ifdef __xlC__ #pragma define(String) #else #ifdef SP_ANSI_CLASS_INST template class String; #else typedef String Dummy_20; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_21; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_22; #endif #endif #endif #ifdef __DECCXX #pragma define_template SharedXcharMap #else #ifdef __xlC__ #pragma define(SharedXcharMap) #else #ifdef SP_ANSI_CLASS_INST template class SharedXcharMap; #else typedef SharedXcharMap Dummy_23; #endif #endif #endif #ifdef __DECCXX #pragma define_template XcharMap #else #ifdef __xlC__ #pragma define(XcharMap) #else #ifdef SP_ANSI_CLASS_INST template class XcharMap; #else typedef XcharMap Dummy_24; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_25; #endif #endif #endif #ifdef __DECCXX #pragma define_template RangeMapIter #else #ifdef __xlC__ #pragma define(RangeMapIter) #else #ifdef SP_ANSI_CLASS_INST template class RangeMapIter; #else typedef RangeMapIter Dummy_26; #endif #endif #endif #ifdef __DECCXX #pragma define_template RangeMap #else #ifdef __xlC__ #pragma define(RangeMap) #else #ifdef SP_ANSI_CLASS_INST template class RangeMap; #else typedef RangeMap Dummy_27; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_28; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_29; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_30; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_31; #endif #endif #endif #ifdef __DECCXX #pragma define_template ISet #else #ifdef __xlC__ #pragma define(ISet) #else #ifdef SP_ANSI_CLASS_INST template class ISet; #else typedef ISet Dummy_32; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_33; #endif #endif #endif #ifdef __DECCXX #pragma define_template ISet #else #ifdef __xlC__ #pragma define(ISet) #else #ifdef SP_ANSI_CLASS_INST template class ISet; #else typedef ISet Dummy_34; #endif #endif #endif #ifdef __DECCXX #pragma define_template ISetIter #else #ifdef __xlC__ #pragma define(ISetIter) #else #ifdef SP_ANSI_CLASS_INST template class ISetIter; #else typedef ISetIter Dummy_35; #endif #endif #endif #ifdef __DECCXX #pragma define_template ISetIter #else #ifdef __xlC__ #pragma define(ISetIter) #else #ifdef SP_ANSI_CLASS_INST template class ISetIter; #else typedef ISetIter Dummy_36; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_37; #endif #endif #endif #ifdef __DECCXX #pragma define_template SubstTable #else #ifdef __xlC__ #pragma define(SubstTable) #else #ifdef SP_ANSI_CLASS_INST template class SubstTable; #else typedef SubstTable Dummy_38; #endif #endif #endif #ifdef __DECCXX #pragma define_template SharedXcharMap #else #ifdef __xlC__ #pragma define(SharedXcharMap) #else #ifdef SP_ANSI_CLASS_INST template class SharedXcharMap; #else typedef SharedXcharMap Dummy_39; #endif #endif #endif #ifdef __DECCXX #pragma define_template SharedXcharMap #else #ifdef __xlC__ #pragma define(SharedXcharMap) #else #ifdef SP_ANSI_CLASS_INST template class SharedXcharMap; #else typedef SharedXcharMap Dummy_40; #endif #endif #endif #ifdef __DECCXX #pragma define_template SharedXcharMap #else #ifdef __xlC__ #pragma define(SharedXcharMap) #else #ifdef SP_ANSI_CLASS_INST template class SharedXcharMap; #else typedef SharedXcharMap Dummy_41; #endif #endif #endif #ifdef __DECCXX #pragma define_template String #else #ifdef __xlC__ #pragma define(String) #else #ifdef SP_ANSI_CLASS_INST template class String; #else typedef String Dummy_42; #endif #endif #endif #ifdef __DECCXX #pragma define_template String #else #ifdef __xlC__ #pragma define(String) #else #ifdef SP_ANSI_CLASS_INST template class String; #else typedef String Dummy_43; #endif #endif #endif #ifdef __DECCXX #pragma define_template XcharMap #else #ifdef __xlC__ #pragma define(XcharMap) #else #ifdef SP_ANSI_CLASS_INST template class XcharMap; #else typedef XcharMap Dummy_44; #endif #endif #endif #ifdef __DECCXX #pragma define_template XcharMap #else #ifdef __xlC__ #pragma define(XcharMap) #else #ifdef SP_ANSI_CLASS_INST template class XcharMap; #else typedef XcharMap Dummy_45; #endif #endif #endif #ifdef __DECCXX #pragma define_template XcharMap #else #ifdef __xlC__ #pragma define(XcharMap) #else #ifdef SP_ANSI_CLASS_INST template class XcharMap; #else typedef XcharMap Dummy_46; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_47; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_48; #endif #endif #endif #ifdef __DECCXX #pragma define_template SubstTable #else #ifdef __xlC__ #pragma define(SubstTable) #else #ifdef SP_ANSI_CLASS_INST template class SubstTable; #else typedef SubstTable Dummy_49; #endif #endif #endif #ifdef __DECCXX #pragma define_template CharMap #else #ifdef __xlC__ #pragma define(CharMap) #else #ifdef SP_ANSI_CLASS_INST template class CharMap; #else typedef CharMap Dummy_50; #endif #endif #endif #ifdef SP_MULTI_BYTE #ifdef __DECCXX #pragma define_template CharMapPage #else #ifdef __xlC__ #pragma define(CharMapPage) #else #ifdef SP_ANSI_CLASS_INST template class CharMapPage; #else typedef CharMapPage Dummy_51; #endif #endif #endif #ifdef __DECCXX #pragma define_template CharMapColumn #else #ifdef __xlC__ #pragma define(CharMapColumn) #else #ifdef SP_ANSI_CLASS_INST template class CharMapColumn; #else typedef CharMapColumn Dummy_52; #endif #endif #endif #endif #ifdef __DECCXX #pragma define_template CharMapResource #else #ifdef __xlC__ #pragma define(CharMapResource) #else #ifdef SP_ANSI_CLASS_INST template class CharMapResource; #else typedef CharMapResource Dummy_53; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr > #else #ifdef __xlC__ #pragma define(Ptr >) #else #ifdef SP_ANSI_CLASS_INST template class Ptr >; #else typedef Ptr > Dummy_54; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr > #else #ifdef __xlC__ #pragma define(ConstPtr >) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr >; #else typedef ConstPtr > Dummy_55; #endif #endif #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/lib/entmgr_inst.m4100444 764 764 5625 6604711356 13564 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Owner.h" #include "CopyOwner.h" #include "RangeMap.h" #include "Ptr.h" #include "StringOf.h" #include "StringC.h" #include "Vector.h" #include "ISet.h" #include "ISetIter.h" #include "XcharMap.h" #include "SubstTable.h" #include "StringResource.h" #include "CharMap.h" #undef SP_DEFINE_TEMPLATES #include "types.h" #include "Location.h" #include "Message.h" #include "NamedResource.h" #include "EntityManager.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr >) __instantiate(ConstPtr >) __instantiate(Ptr >) __instantiate(ConstPtr >) __instantiate(Ptr >) __instantiate(ConstPtr >) __instantiate(Ptr >) __instantiate(ConstPtr >) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Owner) __instantiate(CopyOwner) __instantiate(String) __instantiate(Vector) __instantiate(Vector >) __instantiate(SharedXcharMap) __instantiate(XcharMap) __instantiate(`Vector >') __instantiate(`RangeMapIter') __instantiate(`RangeMap') __instantiate(Vector) __instantiate(Vector) __instantiate(Vector >) __instantiate(Owner) __instantiate(ISet) __instantiate(Vector >) __instantiate(ISet) __instantiate(ISetIter) __instantiate(ISetIter) __instantiate(Vector >) __instantiate(SubstTable) __instantiate(SharedXcharMap) __instantiate(SharedXcharMap) __instantiate(SharedXcharMap) __instantiate(String) __instantiate(String) __instantiate(XcharMap) __instantiate(XcharMap) __instantiate(XcharMap) __instantiate(Vector) __instantiate(Vector) __instantiate(SubstTable) __instantiate(CharMap) #ifdef SP_MULTI_BYTE __instantiate(CharMapPage) __instantiate(CharMapColumn) #endif __instantiate(CharMapResource) __instantiate(Ptr >) __instantiate(ConstPtr >) #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/lib/events.h100444 764 764 2735 6606574410 12445 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. EVENT(MessageEvent, message) EVENT(DataEvent, data) EVENT(StartElementEvent, startElement) EVENT(EndElementEvent, endElement) EVENT(PiEvent, pi) EVENT(SdataEntityEvent, sdataEntity) EVENT(ExternalDataEntityEvent, externalDataEntity) EVENT(SubdocEntityEvent, subdocEntity) EVENT(NonSgmlCharEvent, nonSgmlChar) EVENT(AppinfoEvent, appinfo) EVENT(UselinkEvent, uselink) EVENT(UsemapEvent, usemap) EVENT(StartDtdEvent, startDtd) EVENT(EndDtdEvent, endDtd) EVENT(StartLpdEvent, startLpd) EVENT(EndLpdEvent, endLpd) EVENT(EndPrologEvent, endProlog) EVENT(SgmlDeclEvent, sgmlDecl) EVENT(CommentDeclEvent, commentDecl) EVENT(SSepEvent, sSep) EVENT(IgnoredReEvent, ignoredRe) EVENT(ReOriginEvent, reOrigin) EVENT(IgnoredRsEvent, ignoredRs) EVENT(IgnoredCharsEvent, ignoredChars) EVENT(MarkedSectionStartEvent, markedSectionStart) EVENT(MarkedSectionEndEvent, markedSectionEnd) EVENT(EntityStartEvent, entityStart) EVENT(EntityEndEvent, entityEnd) EVENT(EntityDeclEvent, entityDecl) EVENT(NotationDeclEvent, notationDecl) EVENT(ElementDeclEvent, elementDecl) EVENT(AttlistDeclEvent, attlistDecl) EVENT(LinkAttlistDeclEvent, linkAttlistDecl) EVENT(AttlistNotationDeclEvent, attlistNotationDecl) EVENT(LinkDeclEvent, linkDecl) EVENT(IdLinkDeclEvent, idLinkDecl) EVENT(ShortrefDeclEvent, shortrefDecl) EVENT(IgnoredMarkupEvent, ignoredMarkup) EVENT(EntityDefaultedEvent, entityDefaulted) EVENT(SgmlDeclEntityEvent, sgmlDeclEntity) jade-1.2.1/lib/instmac.m4100444 764 764 4054 6604607564 12671 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif dnl Copyright (c) 1994 James Clark dnl See the file COPYING for copying permission. dnl M4 macros for template instantiation. define(`__undefine', defn(`undefine'))dnl define(`__define', defn(`define'))dnl define(`__changequote', defn(`changequote'))dnl define(`__include', defn(`include'))dnl define(`__ifdef', defn(`ifdef'))dnl define(`__divert', defn(`divert'))dnl define(`__dnl', defn(`dnl'))dnl define(`__incr', defn(`incr'))dnl define(`__index', 0)dnl define(`__concat', $1$2)dnl define(`__instantiate',`#ifdef __DECCXX #pragma define_template $1 #else #ifdef __xlC__ #pragma define($1) #else #ifdef SP_ANSI_CLASS_INST template class $1; #else typedef $1 __concat(Dummy_,__index); #endif #endif #endif __define(`__index',__incr(__index))__dnl')dnl define(`__func_index', 0)dnl define(`__instantiate_func3', `#ifdef __GNUG__ template void $1($2, $3, $4); #else static void __concat(func_,__func_index) ($2 arg1, $3 arg2, $4 arg3) { (void)$1(arg1, arg2, arg3); } #endif __define(`__func_index',__incr(__func_index))__dnl')dnl dnl we want __p to be expanded even inside comments changecom()__dnl __undefine(`changecom')__dnl __undefine(`changequote')__dnl __undefine(`decr')__dnl __undefine(`define')__dnl __undefine(`defn')__dnl __undefine(`divert')__dnl __undefine(`divnum')__dnl __undefine(`dnl')__dnl __undefine(`dumpdef')__dnl __undefine(`errprint')__dnl __undefine(`eval')__dnl __undefine(`ifdef')__dnl __undefine(`ifelse')__dnl __undefine(`include')__dnl __undefine(`incr')__dnl __undefine(`index')__dnl __undefine(`len')__dnl __undefine(`m4exit')__dnl __undefine(`m4wrap')__dnl __undefine(`maketemp')__dnl __undefine(`popdef')__dnl __undefine(`pushdef')__dnl __undefine(`shift')__dnl __undefine(`sinclude')__dnl __undefine(`substr')__dnl __undefine(`syscmd')__dnl __undefine(`sysval')__dnl __undefine(`traceoff')__dnl __undefine(`traceon')__dnl __undefine(`translit')__dnl __undefine(`undefine')__dnl __undefine(`undivert')__dnl __undefine(`unix')__dnl __dnl __changequote(,)__dnl disable quoting #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/gb2312.h100444 764 764 166262 6604607564 12114 0ustar jjcjjc94, 0x2121, 0x3000, 0x3001, 0x3002, 0x30fb, 0x02c9, 0x02c7, 0x00a8, 0x3003, 0x3005, 0x2015, 0xff5e, 0x2225, 0x2026, 0x2018, 0x2019, 0x201c, 0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e, 0x300f, 0x3016, 0x3017, 0x3010, 0x3011, 0x00b1, 0x00d7, 0x00f7, 0x2236, 0x2227, 0x2228, 0x2211, 0x220f, 0x222a, 0x2229, 0x2208, 0x2237, 0x221a, 0x22a5, 0x2225, 0x2220, 0x2312, 0x2299, 0x222b, 0x222e, 0x2261, 0x224c, 0x2248, 0x223d, 0x221d, 0x2260, 0x226e, 0x226f, 0x2264, 0x2265, 0x221e, 0x2235, 0x2234, 0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xff04, 0x00a4, 0xffe0, 0xffe1, 0x2030, 0x00a7, 0x2116, 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x203b, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 50, 0x2231, 0x2488, 0x2489, 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, 0x248f, 0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497, 0x2498, 0x2499, 0x249a, 0x249b, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 10, 0x2265, 0x3220, 0x3221, 0x3222, 0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 12, 0x2271, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216a, 0x216b, 94, 0x2321, 0xff01, 0xff02, 0xff03, 0xffe5, 0xff05, 0xff06, 0xff07, 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, 0xff20, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, 0xff40, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3, 83, 0x2421, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 86, 0x2521, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 24, 0x2621, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 24, 0x2641, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 33, 0x2721, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 33, 0x2751, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 26, 0x2821, 0x0101, 0x00e1, 0x01ce, 0x00e0, 0x0113, 0x00e9, 0x011b, 0x00e8, 0x012b, 0x00ed, 0x01d0, 0x00ec, 0x014d, 0x00f3, 0x01d2, 0x00f2, 0x016b, 0x00fa, 0x01d4, 0x00f9, 0x01d6, 0x01d8, 0x01da, 0x01dc, 0x00fc, 0x00ea, 37, 0x2845, 0x3105, 0x3106, 0x3107, 0x3108, 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, 76, 0x2924, 0x2500, 0x2501, 0x2502, 0x2503, 0x2504, 0x2505, 0x2506, 0x2507, 0x2508, 0x2509, 0x250a, 0x250b, 0x250c, 0x250d, 0x250e, 0x250f, 0x2510, 0x2511, 0x2512, 0x2513, 0x2514, 0x2515, 0x2516, 0x2517, 0x2518, 0x2519, 0x251a, 0x251b, 0x251c, 0x251d, 0x251e, 0x251f, 0x2520, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c, 0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c, 0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, 94, 0x3021, 0x554a, 0x963f, 0x57c3, 0x6328, 0x54ce, 0x5509, 0x54c0, 0x7691, 0x764c, 0x853c, 0x77ee, 0x827e, 0x788d, 0x7231, 0x9698, 0x978d, 0x6c28, 0x5b89, 0x4ffa, 0x6309, 0x6697, 0x5cb8, 0x80fa, 0x6848, 0x80ae, 0x6602, 0x76ce, 0x51f9, 0x6556, 0x71ac, 0x7ff1, 0x8884, 0x50b2, 0x5965, 0x61ca, 0x6fb3, 0x82ad, 0x634c, 0x6252, 0x53ed, 0x5427, 0x7b06, 0x516b, 0x75a4, 0x5df4, 0x62d4, 0x8dcb, 0x9776, 0x628a, 0x8019, 0x575d, 0x9738, 0x7f62, 0x7238, 0x767d, 0x67cf, 0x767e, 0x6446, 0x4f70, 0x8d25, 0x62dc, 0x7a17, 0x6591, 0x73ed, 0x642c, 0x6273, 0x822c, 0x9881, 0x677f, 0x7248, 0x626e, 0x62cc, 0x4f34, 0x74e3, 0x534a, 0x529e, 0x7eca, 0x90a6, 0x5e2e, 0x6886, 0x699c, 0x8180, 0x7ed1, 0x68d2, 0x78c5, 0x868c, 0x9551, 0x508d, 0x8c24, 0x82de, 0x80de, 0x5305, 0x8912, 0x5265, 94, 0x3121, 0x8584, 0x96f9, 0x4fdd, 0x5821, 0x9971, 0x5b9d, 0x62b1, 0x62a5, 0x66b4, 0x8c79, 0x9c8d, 0x7206, 0x676f, 0x7891, 0x60b2, 0x5351, 0x5317, 0x8f88, 0x80cc, 0x8d1d, 0x94a1, 0x500d, 0x72c8, 0x5907, 0x60eb, 0x7119, 0x88ab, 0x5954, 0x82ef, 0x672c, 0x7b28, 0x5d29, 0x7ef7, 0x752d, 0x6cf5, 0x8e66, 0x8ff8, 0x903c, 0x9f3b, 0x6bd4, 0x9119, 0x7b14, 0x5f7c, 0x78a7, 0x84d6, 0x853d, 0x6bd5, 0x6bd9, 0x6bd6, 0x5e01, 0x5e87, 0x75f9, 0x95ed, 0x655d, 0x5f0a, 0x5fc5, 0x8f9f, 0x58c1, 0x81c2, 0x907f, 0x965b, 0x97ad, 0x8fb9, 0x7f16, 0x8d2c, 0x6241, 0x4fbf, 0x53d8, 0x535e, 0x8fa8, 0x8fa9, 0x8fab, 0x904d, 0x6807, 0x5f6a, 0x8198, 0x8868, 0x9cd6, 0x618b, 0x522b, 0x762a, 0x5f6c, 0x658c, 0x6fd2, 0x6ee8, 0x5bbe, 0x6448, 0x5175, 0x51b0, 0x67c4, 0x4e19, 0x79c9, 0x997c, 0x70b3, 94, 0x3221, 0x75c5, 0x5e76, 0x73bb, 0x83e0, 0x64ad, 0x62e8, 0x94b5, 0x6ce2, 0x535a, 0x52c3, 0x640f, 0x94c2, 0x7b94, 0x4f2f, 0x5e1b, 0x8236, 0x8116, 0x818a, 0x6e24, 0x6cca, 0x9a73, 0x6355, 0x535c, 0x54fa, 0x8865, 0x57e0, 0x4e0d, 0x5e03, 0x6b65, 0x7c3f, 0x90e8, 0x6016, 0x64e6, 0x731c, 0x88c1, 0x6750, 0x624d, 0x8d22, 0x776c, 0x8e29, 0x91c7, 0x5f69, 0x83dc, 0x8521, 0x9910, 0x53c2, 0x8695, 0x6b8b, 0x60ed, 0x60e8, 0x707f, 0x82cd, 0x8231, 0x4ed3, 0x6ca7, 0x85cf, 0x64cd, 0x7cd9, 0x69fd, 0x66f9, 0x8349, 0x5395, 0x7b56, 0x4fa7, 0x518c, 0x6d4b, 0x5c42, 0x8e6d, 0x63d2, 0x53c9, 0x832c, 0x8336, 0x67e5, 0x78b4, 0x643d, 0x5bdf, 0x5c94, 0x5dee, 0x8be7, 0x62c6, 0x67f4, 0x8c7a, 0x6400, 0x63ba, 0x8749, 0x998b, 0x8c17, 0x7f20, 0x94f2, 0x4ea7, 0x9610, 0x98a4, 0x660c, 0x7316, 94, 0x3321, 0x573a, 0x5c1d, 0x5e38, 0x957f, 0x507f, 0x80a0, 0x5382, 0x655e, 0x7545, 0x5531, 0x5021, 0x8d85, 0x6284, 0x949e, 0x671d, 0x5632, 0x6f6e, 0x5de2, 0x5435, 0x7092, 0x8f66, 0x626f, 0x64a4, 0x63a3, 0x5f7b, 0x6f88, 0x90f4, 0x81e3, 0x8fb0, 0x5c18, 0x6668, 0x5ff1, 0x6c89, 0x9648, 0x8d81, 0x886c, 0x6491, 0x79f0, 0x57ce, 0x6a59, 0x6210, 0x5448, 0x4e58, 0x7a0b, 0x60e9, 0x6f84, 0x8bda, 0x627f, 0x901e, 0x9a8b, 0x79e4, 0x5403, 0x75f4, 0x6301, 0x5319, 0x6c60, 0x8fdf, 0x5f1b, 0x9a70, 0x803b, 0x9f7f, 0x4f88, 0x5c3a, 0x8d64, 0x7fc5, 0x65a5, 0x70bd, 0x5145, 0x51b2, 0x866b, 0x5d07, 0x5ba0, 0x62bd, 0x916c, 0x7574, 0x8e0c, 0x7a20, 0x6101, 0x7b79, 0x4ec7, 0x7ef8, 0x7785, 0x4e11, 0x81ed, 0x521d, 0x51fa, 0x6a71, 0x53a8, 0x8e87, 0x9504, 0x96cf, 0x6ec1, 0x9664, 0x695a, 94, 0x3421, 0x7840, 0x50a8, 0x77d7, 0x6410, 0x89e6, 0x5904, 0x63e3, 0x5ddd, 0x7a7f, 0x693d, 0x4f20, 0x8239, 0x5598, 0x4e32, 0x75ae, 0x7a97, 0x5e62, 0x5e8a, 0x95ef, 0x521b, 0x5439, 0x708a, 0x6376, 0x9524, 0x5782, 0x6625, 0x693f, 0x9187, 0x5507, 0x6df3, 0x7eaf, 0x8822, 0x6233, 0x7ef0, 0x75b5, 0x8328, 0x78c1, 0x96cc, 0x8f9e, 0x6148, 0x74f7, 0x8bcd, 0x6b64, 0x523a, 0x8d50, 0x6b21, 0x806a, 0x8471, 0x56f1, 0x5306, 0x4ece, 0x4e1b, 0x51d1, 0x7c97, 0x918b, 0x7c07, 0x4fc3, 0x8e7f, 0x7be1, 0x7a9c, 0x6467, 0x5d14, 0x50ac, 0x8106, 0x7601, 0x7cb9, 0x6dec, 0x7fe0, 0x6751, 0x5b58, 0x5bf8, 0x78cb, 0x64ae, 0x6413, 0x63aa, 0x632b, 0x9519, 0x642d, 0x8fbe, 0x7b54, 0x7629, 0x6253, 0x5927, 0x5446, 0x6b79, 0x50a3, 0x6234, 0x5e26, 0x6b86, 0x4ee3, 0x8d37, 0x888b, 0x5f85, 0x902e, 94, 0x3521, 0x6020, 0x803d, 0x62c5, 0x4e39, 0x5355, 0x90f8, 0x63b8, 0x80c6, 0x65e6, 0x6c2e, 0x4f46, 0x60ee, 0x6de1, 0x8bde, 0x5f39, 0x86cb, 0x5f53, 0x6321, 0x515a, 0x8361, 0x6863, 0x5200, 0x6363, 0x8e48, 0x5012, 0x5c9b, 0x7977, 0x5bfc, 0x5230, 0x7a3b, 0x60bc, 0x9053, 0x76d7, 0x5fb7, 0x5f97, 0x7684, 0x8e6c, 0x706f, 0x767b, 0x7b49, 0x77aa, 0x51f3, 0x9093, 0x5824, 0x4f4e, 0x6ef4, 0x8fea, 0x654c, 0x7b1b, 0x72c4, 0x6da4, 0x7fdf, 0x5ae1, 0x62b5, 0x5e95, 0x5730, 0x8482, 0x7b2c, 0x5e1d, 0x5f1f, 0x9012, 0x7f14, 0x98a0, 0x6382, 0x6ec7, 0x7898, 0x70b9, 0x5178, 0x975b, 0x57ab, 0x7535, 0x4f43, 0x7538, 0x5e97, 0x60e6, 0x5960, 0x6dc0, 0x6bbf, 0x7889, 0x53fc, 0x96d5, 0x51cb, 0x5201, 0x6389, 0x540a, 0x9493, 0x8c03, 0x8dcc, 0x7239, 0x789f, 0x8776, 0x8fed, 0x8c0d, 0x53e0, 94, 0x3621, 0x4e01, 0x76ef, 0x53ee, 0x9489, 0x9876, 0x9f0e, 0x952d, 0x5b9a, 0x8ba2, 0x4e22, 0x4e1c, 0x51ac, 0x8463, 0x61c2, 0x52a8, 0x680b, 0x4f97, 0x606b, 0x51bb, 0x6d1e, 0x515c, 0x6296, 0x6597, 0x9661, 0x8c46, 0x9017, 0x75d8, 0x90fd, 0x7763, 0x6bd2, 0x728a, 0x72ec, 0x8bfb, 0x5835, 0x7779, 0x8d4c, 0x675c, 0x9540, 0x809a, 0x5ea6, 0x6e21, 0x5992, 0x7aef, 0x77ed, 0x953b, 0x6bb5, 0x65ad, 0x7f0e, 0x5806, 0x5151, 0x961f, 0x5bf9, 0x58a9, 0x5428, 0x8e72, 0x6566, 0x987f, 0x56e4, 0x949d, 0x76fe, 0x9041, 0x6387, 0x54c6, 0x591a, 0x593a, 0x579b, 0x8eb2, 0x6735, 0x8dfa, 0x8235, 0x5241, 0x60f0, 0x5815, 0x86fe, 0x5ce8, 0x9e45, 0x4fc4, 0x989d, 0x8bb9, 0x5a25, 0x6076, 0x5384, 0x627c, 0x904f, 0x9102, 0x997f, 0x6069, 0x800c, 0x513f, 0x8033, 0x5c14, 0x9975, 0x6d31, 0x4e8c, 94, 0x3721, 0x8d30, 0x53d1, 0x7f5a, 0x7b4f, 0x4f10, 0x4e4f, 0x9600, 0x6cd5, 0x73d0, 0x85e9, 0x5e06, 0x756a, 0x7ffb, 0x6a0a, 0x77fe, 0x9492, 0x7e41, 0x51e1, 0x70e6, 0x53cd, 0x8fd4, 0x8303, 0x8d29, 0x72af, 0x996d, 0x6cdb, 0x574a, 0x82b3, 0x65b9, 0x80aa, 0x623f, 0x9632, 0x59a8, 0x4eff, 0x8bbf, 0x7eba, 0x653e, 0x83f2, 0x975e, 0x5561, 0x98de, 0x80a5, 0x532a, 0x8bfd, 0x5420, 0x80ba, 0x5e9f, 0x6cb8, 0x8d39, 0x82ac, 0x915a, 0x5429, 0x6c1b, 0x5206, 0x7eb7, 0x575f, 0x711a, 0x6c7e, 0x7c89, 0x594b, 0x4efd, 0x5fff, 0x6124, 0x7caa, 0x4e30, 0x5c01, 0x67ab, 0x8702, 0x5cf0, 0x950b, 0x98ce, 0x75af, 0x70fd, 0x9022, 0x51af, 0x7f1d, 0x8bbd, 0x5949, 0x51e4, 0x4f5b, 0x5426, 0x592b, 0x6577, 0x80a4, 0x5b75, 0x6276, 0x62c2, 0x8f90, 0x5e45, 0x6c1f, 0x7b26, 0x4f0f, 0x4fd8, 0x670d, 94, 0x3821, 0x6d6e, 0x6daa, 0x798f, 0x88b1, 0x5f17, 0x752b, 0x629a, 0x8f85, 0x4fef, 0x91dc, 0x65a7, 0x812f, 0x8151, 0x5e9c, 0x8150, 0x8d74, 0x526f, 0x8986, 0x8d4b, 0x590d, 0x5085, 0x4ed8, 0x961c, 0x7236, 0x8179, 0x8d1f, 0x5bcc, 0x8ba3, 0x9644, 0x5987, 0x7f1a, 0x5490, 0x5676, 0x560e, 0x8be5, 0x6539, 0x6982, 0x9499, 0x76d6, 0x6e89, 0x5e72, 0x7518, 0x6746, 0x67d1, 0x7aff, 0x809d, 0x8d76, 0x611f, 0x79c6, 0x6562, 0x8d63, 0x5188, 0x521a, 0x94a2, 0x7f38, 0x809b, 0x7eb2, 0x5c97, 0x6e2f, 0x6760, 0x7bd9, 0x768b, 0x9ad8, 0x818f, 0x7f94, 0x7cd5, 0x641e, 0x9550, 0x7a3f, 0x544a, 0x54e5, 0x6b4c, 0x6401, 0x6208, 0x9e3d, 0x80f3, 0x7599, 0x5272, 0x9769, 0x845b, 0x683c, 0x86e4, 0x9601, 0x9694, 0x94ec, 0x4e2a, 0x5404, 0x7ed9, 0x6839, 0x8ddf, 0x8015, 0x66f4, 0x5e9a, 0x7fb9, 94, 0x3921, 0x57c2, 0x803f, 0x6897, 0x5de5, 0x653b, 0x529f, 0x606d, 0x9f9a, 0x4f9b, 0x8eac, 0x516c, 0x5bab, 0x5f13, 0x5de9, 0x6c5e, 0x62f1, 0x8d21, 0x5171, 0x94a9, 0x52fe, 0x6c9f, 0x82df, 0x72d7, 0x57a2, 0x6784, 0x8d2d, 0x591f, 0x8f9c, 0x83c7, 0x5495, 0x7b8d, 0x4f30, 0x6cbd, 0x5b64, 0x59d1, 0x9f13, 0x53e4, 0x86ca, 0x9aa8, 0x8c37, 0x80a1, 0x6545, 0x987e, 0x56fa, 0x96c7, 0x522e, 0x74dc, 0x5250, 0x5be1, 0x6302, 0x8902, 0x4e56, 0x62d0, 0x602a, 0x68fa, 0x5173, 0x5b98, 0x51a0, 0x89c2, 0x7ba1, 0x9986, 0x7f50, 0x60ef, 0x704c, 0x8d2f, 0x5149, 0x5e7f, 0x901b, 0x7470, 0x89c4, 0x572d, 0x7845, 0x5f52, 0x9f9f, 0x95fa, 0x8f68, 0x9b3c, 0x8be1, 0x7678, 0x6842, 0x67dc, 0x8dea, 0x8d35, 0x523d, 0x8f8a, 0x6eda, 0x68cd, 0x9505, 0x90ed, 0x56fd, 0x679c, 0x88f9, 0x8fc7, 0x54c8, 94, 0x3a21, 0x9ab8, 0x5b69, 0x6d77, 0x6c26, 0x4ea5, 0x5bb3, 0x9a87, 0x9163, 0x61a8, 0x90af, 0x97e9, 0x542b, 0x6db5, 0x5bd2, 0x51fd, 0x558a, 0x7f55, 0x7ff0, 0x64bc, 0x634d, 0x65f1, 0x61be, 0x608d, 0x710a, 0x6c57, 0x6c49, 0x592f, 0x676d, 0x822a, 0x58d5, 0x568e, 0x8c6a, 0x6beb, 0x90dd, 0x597d, 0x8017, 0x53f7, 0x6d69, 0x5475, 0x559d, 0x8377, 0x83cf, 0x6838, 0x79be, 0x548c, 0x4f55, 0x5408, 0x76d2, 0x8c89, 0x9602, 0x6cb3, 0x6db8, 0x8d6b, 0x8910, 0x9e64, 0x8d3a, 0x563f, 0x9ed1, 0x75d5, 0x5f88, 0x72e0, 0x6068, 0x54fc, 0x4ea8, 0x6a2a, 0x8861, 0x6052, 0x8f70, 0x54c4, 0x70d8, 0x8679, 0x9e3f, 0x6d2a, 0x5b8f, 0x5f18, 0x7ea2, 0x5589, 0x4faf, 0x7334, 0x543c, 0x539a, 0x5019, 0x540e, 0x547c, 0x4e4e, 0x5ffd, 0x745a, 0x58f6, 0x846b, 0x80e1, 0x8774, 0x72d0, 0x7cca, 0x6e56, 94, 0x3b21, 0x5f27, 0x864e, 0x552c, 0x62a4, 0x4e92, 0x6caa, 0x6237, 0x82b1, 0x54d7, 0x534e, 0x733e, 0x6ed1, 0x753b, 0x5212, 0x5316, 0x8bdd, 0x69d0, 0x5f8a, 0x6000, 0x6dee, 0x574f, 0x6b22, 0x73af, 0x6853, 0x8fd8, 0x7f13, 0x6362, 0x60a3, 0x5524, 0x75ea, 0x8c62, 0x7115, 0x6da3, 0x5ba6, 0x5e7b, 0x8352, 0x614c, 0x9ec4, 0x78fa, 0x8757, 0x7c27, 0x7687, 0x51f0, 0x60f6, 0x714c, 0x6643, 0x5e4c, 0x604d, 0x8c0e, 0x7070, 0x6325, 0x8f89, 0x5fbd, 0x6062, 0x86d4, 0x56de, 0x6bc1, 0x6094, 0x6167, 0x5349, 0x60e0, 0x6666, 0x8d3f, 0x79fd, 0x4f1a, 0x70e9, 0x6c47, 0x8bb3, 0x8bf2, 0x7ed8, 0x8364, 0x660f, 0x5a5a, 0x9b42, 0x6d51, 0x6df7, 0x8c41, 0x6d3b, 0x4f19, 0x706b, 0x83b7, 0x6216, 0x60d1, 0x970d, 0x8d27, 0x7978, 0x51fb, 0x573e, 0x57fa, 0x673a, 0x7578, 0x7a3d, 0x79ef, 0x7b95, 94, 0x3c21, 0x808c, 0x9965, 0x8ff9, 0x6fc0, 0x8ba5, 0x9e21, 0x59ec, 0x7ee9, 0x7f09, 0x5409, 0x6781, 0x68d8, 0x8f91, 0x7c4d, 0x96c6, 0x53ca, 0x6025, 0x75be, 0x6c72, 0x5373, 0x5ac9, 0x7ea7, 0x6324, 0x51e0, 0x810a, 0x5df1, 0x84df, 0x6280, 0x5180, 0x5b63, 0x4f0e, 0x796d, 0x5242, 0x60b8, 0x6d4e, 0x5bc4, 0x5bc2, 0x8ba1, 0x8bb0, 0x65e2, 0x5fcc, 0x9645, 0x5993, 0x7ee7, 0x7eaa, 0x5609, 0x67b7, 0x5939, 0x4f73, 0x5bb6, 0x52a0, 0x835a, 0x988a, 0x8d3e, 0x7532, 0x94be, 0x5047, 0x7a3c, 0x4ef7, 0x67b6, 0x9a7e, 0x5ac1, 0x6b7c, 0x76d1, 0x575a, 0x5c16, 0x7b3a, 0x95f4, 0x714e, 0x517c, 0x80a9, 0x8270, 0x5978, 0x7f04, 0x8327, 0x68c0, 0x67ec, 0x78b1, 0x7877, 0x62e3, 0x6361, 0x7b80, 0x4fed, 0x526a, 0x51cf, 0x8350, 0x69db, 0x9274, 0x8df5, 0x8d31, 0x89c1, 0x952e, 0x7bad, 0x4ef6, 94, 0x3d21, 0x5065, 0x8230, 0x5251, 0x996f, 0x6e10, 0x6e85, 0x6da7, 0x5efa, 0x50f5, 0x59dc, 0x5c06, 0x6d46, 0x6c5f, 0x7586, 0x848b, 0x6868, 0x5956, 0x8bb2, 0x5320, 0x9171, 0x964d, 0x8549, 0x6912, 0x7901, 0x7126, 0x80f6, 0x4ea4, 0x90ca, 0x6d47, 0x9a84, 0x5a07, 0x56bc, 0x6405, 0x94f0, 0x77eb, 0x4fa5, 0x811a, 0x72e1, 0x89d2, 0x997a, 0x7f34, 0x7ede, 0x527f, 0x6559, 0x9175, 0x8f7f, 0x8f83, 0x53eb, 0x7a96, 0x63ed, 0x63a5, 0x7686, 0x79f8, 0x8857, 0x9636, 0x622a, 0x52ab, 0x8282, 0x6854, 0x6770, 0x6377, 0x776b, 0x7aed, 0x6d01, 0x7ed3, 0x89e3, 0x59d0, 0x6212, 0x85c9, 0x82a5, 0x754c, 0x501f, 0x4ecb, 0x75a5, 0x8beb, 0x5c4a, 0x5dfe, 0x7b4b, 0x65a4, 0x91d1, 0x4eca, 0x6d25, 0x895f, 0x7d27, 0x9526, 0x4ec5, 0x8c28, 0x8fdb, 0x9773, 0x664b, 0x7981, 0x8fd1, 0x70ec, 0x6d78, 94, 0x3e21, 0x5c3d, 0x52b2, 0x8346, 0x5162, 0x830e, 0x775b, 0x6676, 0x9cb8, 0x4eac, 0x60ca, 0x7cbe, 0x7cb3, 0x7ecf, 0x4e95, 0x8b66, 0x666f, 0x9888, 0x9759, 0x5883, 0x656c, 0x955c, 0x5f84, 0x75c9, 0x9756, 0x7adf, 0x7ade, 0x51c0, 0x70af, 0x7a98, 0x63ea, 0x7a76, 0x7ea0, 0x7396, 0x97ed, 0x4e45, 0x7078, 0x4e5d, 0x9152, 0x53a9, 0x6551, 0x65e7, 0x81fc, 0x8205, 0x548e, 0x5c31, 0x759a, 0x97a0, 0x62d8, 0x72d9, 0x75bd, 0x5c45, 0x9a79, 0x83ca, 0x5c40, 0x5480, 0x77e9, 0x4e3e, 0x6cae, 0x805a, 0x62d2, 0x636e, 0x5de8, 0x5177, 0x8ddd, 0x8e1e, 0x952f, 0x4ff1, 0x53e5, 0x60e7, 0x70ac, 0x5267, 0x6350, 0x9e43, 0x5a1f, 0x5026, 0x7737, 0x5377, 0x7ee2, 0x6485, 0x652b, 0x6289, 0x6398, 0x5014, 0x7235, 0x89c9, 0x51b3, 0x8bc0, 0x7edd, 0x5747, 0x83cc, 0x94a7, 0x519b, 0x541b, 0x5cfb, 94, 0x3f21, 0x4fca, 0x7ae3, 0x6d5a, 0x90e1, 0x9a8f, 0x5580, 0x5496, 0x5361, 0x54af, 0x5f00, 0x63e9, 0x6977, 0x51ef, 0x6168, 0x520a, 0x582a, 0x52d8, 0x574e, 0x780d, 0x770b, 0x5eb7, 0x6177, 0x7ce0, 0x625b, 0x6297, 0x4ea2, 0x7095, 0x8003, 0x62f7, 0x70e4, 0x9760, 0x5777, 0x82db, 0x67ef, 0x68f5, 0x78d5, 0x9897, 0x79d1, 0x58f3, 0x54b3, 0x53ef, 0x6e34, 0x514b, 0x523b, 0x5ba2, 0x8bfe, 0x80af, 0x5543, 0x57a6, 0x6073, 0x5751, 0x542d, 0x7a7a, 0x6050, 0x5b54, 0x63a7, 0x62a0, 0x53e3, 0x6263, 0x5bc7, 0x67af, 0x54ed, 0x7a9f, 0x82e6, 0x9177, 0x5e93, 0x88e4, 0x5938, 0x57ae, 0x630e, 0x8de8, 0x80ef, 0x5757, 0x7b77, 0x4fa9, 0x5feb, 0x5bbd, 0x6b3e, 0x5321, 0x7b50, 0x72c2, 0x6846, 0x77ff, 0x7736, 0x65f7, 0x51b5, 0x4e8f, 0x76d4, 0x5cbf, 0x7aa5, 0x8475, 0x594e, 0x9b41, 0x5080, 94, 0x4021, 0x9988, 0x6127, 0x6e83, 0x5764, 0x6606, 0x6346, 0x56f0, 0x62ec, 0x6269, 0x5ed3, 0x9614, 0x5783, 0x62c9, 0x5587, 0x8721, 0x814a, 0x8fa3, 0x5566, 0x83b1, 0x6765, 0x8d56, 0x84dd, 0x5a6a, 0x680f, 0x62e6, 0x7bee, 0x9611, 0x5170, 0x6f9c, 0x8c30, 0x63fd, 0x89c8, 0x61d2, 0x7f06, 0x70c2, 0x6ee5, 0x7405, 0x6994, 0x72fc, 0x5eca, 0x90ce, 0x6717, 0x6d6a, 0x635e, 0x52b3, 0x7262, 0x8001, 0x4f6c, 0x59e5, 0x916a, 0x70d9, 0x6d9d, 0x52d2, 0x4e50, 0x96f7, 0x956d, 0x857e, 0x78ca, 0x7d2f, 0x5121, 0x5792, 0x64c2, 0x808b, 0x7c7b, 0x6cea, 0x68f1, 0x695e, 0x51b7, 0x5398, 0x68a8, 0x7281, 0x9ece, 0x7bf1, 0x72f8, 0x79bb, 0x6f13, 0x7406, 0x674e, 0x91cc, 0x9ca4, 0x793c, 0x8389, 0x8354, 0x540f, 0x6817, 0x4e3d, 0x5389, 0x52b1, 0x783e, 0x5386, 0x5229, 0x5088, 0x4f8b, 0x4fd0, 94, 0x4121, 0x75e2, 0x7acb, 0x7c92, 0x6ca5, 0x96b6, 0x529b, 0x7483, 0x54e9, 0x4fe9, 0x8054, 0x83b2, 0x8fde, 0x9570, 0x5ec9, 0x601c, 0x6d9f, 0x5e18, 0x655b, 0x8138, 0x94fe, 0x604b, 0x70bc, 0x7ec3, 0x7cae, 0x51c9, 0x6881, 0x7cb1, 0x826f, 0x4e24, 0x8f86, 0x91cf, 0x667e, 0x4eae, 0x8c05, 0x64a9, 0x804a, 0x50da, 0x7597, 0x71ce, 0x5be5, 0x8fbd, 0x6f66, 0x4e86, 0x6482, 0x9563, 0x5ed6, 0x6599, 0x5217, 0x88c2, 0x70c8, 0x52a3, 0x730e, 0x7433, 0x6797, 0x78f7, 0x9716, 0x4e34, 0x90bb, 0x9cde, 0x6dcb, 0x51db, 0x8d41, 0x541d, 0x62ce, 0x73b2, 0x83f1, 0x96f6, 0x9f84, 0x94c3, 0x4f36, 0x7f9a, 0x51cc, 0x7075, 0x9675, 0x5cad, 0x9886, 0x53e6, 0x4ee4, 0x6e9c, 0x7409, 0x69b4, 0x786b, 0x998f, 0x7559, 0x5218, 0x7624, 0x6d41, 0x67f3, 0x516d, 0x9f99, 0x804b, 0x5499, 0x7b3c, 0x7abf, 94, 0x4221, 0x9686, 0x5784, 0x62e2, 0x9647, 0x697c, 0x5a04, 0x6402, 0x7bd3, 0x6f0f, 0x964b, 0x82a6, 0x5362, 0x9885, 0x5e90, 0x7089, 0x63b3, 0x5364, 0x864f, 0x9c81, 0x9e93, 0x788c, 0x9732, 0x8def, 0x8d42, 0x9e7f, 0x6f5e, 0x7984, 0x5f55, 0x9646, 0x622e, 0x9a74, 0x5415, 0x94dd, 0x4fa3, 0x65c5, 0x5c65, 0x5c61, 0x7f15, 0x8651, 0x6c2f, 0x5f8b, 0x7387, 0x6ee4, 0x7eff, 0x5ce6, 0x631b, 0x5b6a, 0x6ee6, 0x5375, 0x4e71, 0x63a0, 0x7565, 0x62a1, 0x8f6e, 0x4f26, 0x4ed1, 0x6ca6, 0x7eb6, 0x8bba, 0x841d, 0x87ba, 0x7f57, 0x903b, 0x9523, 0x7ba9, 0x9aa1, 0x88f8, 0x843d, 0x6d1b, 0x9a86, 0x7edc, 0x5988, 0x9ebb, 0x739b, 0x7801, 0x8682, 0x9a6c, 0x9a82, 0x561b, 0x5417, 0x57cb, 0x4e70, 0x9ea6, 0x5356, 0x8fc8, 0x8109, 0x7792, 0x9992, 0x86ee, 0x6ee1, 0x8513, 0x66fc, 0x6162, 0x6f2b, 94, 0x4321, 0x8c29, 0x8292, 0x832b, 0x76f2, 0x6c13, 0x5fd9, 0x83bd, 0x732b, 0x8305, 0x951a, 0x6bdb, 0x77db, 0x94c6, 0x536f, 0x8302, 0x5192, 0x5e3d, 0x8c8c, 0x8d38, 0x4e48, 0x73ab, 0x679a, 0x6885, 0x9176, 0x9709, 0x7164, 0x6ca1, 0x7709, 0x5a92, 0x9541, 0x6bcf, 0x7f8e, 0x6627, 0x5bd0, 0x59b9, 0x5a9a, 0x95e8, 0x95f7, 0x4eec, 0x840c, 0x8499, 0x6aac, 0x76df, 0x9530, 0x731b, 0x68a6, 0x5b5f, 0x772f, 0x919a, 0x9761, 0x7cdc, 0x8ff7, 0x8c1c, 0x5f25, 0x7c73, 0x79d8, 0x89c5, 0x6ccc, 0x871c, 0x5bc6, 0x5e42, 0x68c9, 0x7720, 0x7ef5, 0x5195, 0x514d, 0x52c9, 0x5a29, 0x7f05, 0x9762, 0x82d7, 0x63cf, 0x7784, 0x85d0, 0x79d2, 0x6e3a, 0x5e99, 0x5999, 0x8511, 0x706d, 0x6c11, 0x62bf, 0x76bf, 0x654f, 0x60af, 0x95fd, 0x660e, 0x879f, 0x9e23, 0x94ed, 0x540d, 0x547d, 0x8c2c, 0x6478, 94, 0x4421, 0x6479, 0x8611, 0x6a21, 0x819c, 0x78e8, 0x6469, 0x9b54, 0x62b9, 0x672b, 0x83ab, 0x58a8, 0x9ed8, 0x6cab, 0x6f20, 0x5bde, 0x964c, 0x8c0b, 0x725f, 0x67d0, 0x62c7, 0x7261, 0x4ea9, 0x59c6, 0x6bcd, 0x5893, 0x66ae, 0x5e55, 0x52df, 0x6155, 0x6728, 0x76ee, 0x7766, 0x7267, 0x7a46, 0x62ff, 0x54ea, 0x5450, 0x94a0, 0x90a3, 0x5a1c, 0x7eb3, 0x6c16, 0x4e43, 0x5976, 0x8010, 0x5948, 0x5357, 0x7537, 0x96be, 0x56ca, 0x6320, 0x8111, 0x607c, 0x95f9, 0x6dd6, 0x5462, 0x9981, 0x5185, 0x5ae9, 0x80fd, 0x59ae, 0x9713, 0x502a, 0x6ce5, 0x5c3c, 0x62df, 0x4f60, 0x533f, 0x817b, 0x9006, 0x6eba, 0x852b, 0x62c8, 0x5e74, 0x78be, 0x64b5, 0x637b, 0x5ff5, 0x5a18, 0x917f, 0x9e1f, 0x5c3f, 0x634f, 0x8042, 0x5b7d, 0x556e, 0x954a, 0x954d, 0x6d85, 0x60a8, 0x67e0, 0x72de, 0x51dd, 0x5b81, 94, 0x4521, 0x62e7, 0x6cde, 0x725b, 0x626d, 0x94ae, 0x7ebd, 0x8113, 0x6d53, 0x519c, 0x5f04, 0x5974, 0x52aa, 0x6012, 0x5973, 0x6696, 0x8650, 0x759f, 0x632a, 0x61e6, 0x7cef, 0x8bfa, 0x54e6, 0x6b27, 0x9e25, 0x6bb4, 0x85d5, 0x5455, 0x5076, 0x6ca4, 0x556a, 0x8db4, 0x722c, 0x5e15, 0x6015, 0x7436, 0x62cd, 0x6392, 0x724c, 0x5f98, 0x6e43, 0x6d3e, 0x6500, 0x6f58, 0x76d8, 0x78d0, 0x76fc, 0x7554, 0x5224, 0x53db, 0x4e53, 0x5e9e, 0x65c1, 0x802a, 0x80d6, 0x629b, 0x5486, 0x5228, 0x70ae, 0x888d, 0x8dd1, 0x6ce1, 0x5478, 0x80da, 0x57f9, 0x88f4, 0x8d54, 0x966a, 0x914d, 0x4f69, 0x6c9b, 0x55b7, 0x76c6, 0x7830, 0x62a8, 0x70f9, 0x6f8e, 0x5f6d, 0x84ec, 0x68da, 0x787c, 0x7bf7, 0x81a8, 0x670b, 0x9e4f, 0x6367, 0x78b0, 0x576f, 0x7812, 0x9739, 0x6279, 0x62ab, 0x5288, 0x7435, 0x6bd7, 94, 0x4621, 0x5564, 0x813e, 0x75b2, 0x76ae, 0x5339, 0x75de, 0x50fb, 0x5c41, 0x8b6c, 0x7bc7, 0x504f, 0x7247, 0x9a97, 0x98d8, 0x6f02, 0x74e2, 0x7968, 0x6487, 0x77a5, 0x62fc, 0x9891, 0x8d2b, 0x54c1, 0x8058, 0x4e52, 0x576a, 0x82f9, 0x840d, 0x5e73, 0x51ed, 0x74f6, 0x8bc4, 0x5c4f, 0x5761, 0x6cfc, 0x9887, 0x5a46, 0x7834, 0x9b44, 0x8feb, 0x7c95, 0x5256, 0x6251, 0x94fa, 0x4ec6, 0x8386, 0x8461, 0x83e9, 0x84b2, 0x57d4, 0x6734, 0x5703, 0x666e, 0x6d66, 0x8c31, 0x66dd, 0x7011, 0x671f, 0x6b3a, 0x6816, 0x621a, 0x59bb, 0x4e03, 0x51c4, 0x6f06, 0x67d2, 0x6c8f, 0x5176, 0x68cb, 0x5947, 0x6b67, 0x7566, 0x5d0e, 0x8110, 0x9f50, 0x65d7, 0x7948, 0x7941, 0x9a91, 0x8d77, 0x5c82, 0x4e5e, 0x4f01, 0x542f, 0x5951, 0x780c, 0x5668, 0x6c14, 0x8fc4, 0x5f03, 0x6c7d, 0x6ce3, 0x8bab, 0x6390, 94, 0x4721, 0x6070, 0x6d3d, 0x7275, 0x6266, 0x948e, 0x94c5, 0x5343, 0x8fc1, 0x7b7e, 0x4edf, 0x8c26, 0x4e7e, 0x9ed4, 0x94b1, 0x94b3, 0x524d, 0x6f5c, 0x9063, 0x6d45, 0x8c34, 0x5811, 0x5d4c, 0x6b20, 0x6b49, 0x67aa, 0x545b, 0x8154, 0x7f8c, 0x5899, 0x8537, 0x5f3a, 0x62a2, 0x6a47, 0x9539, 0x6572, 0x6084, 0x6865, 0x77a7, 0x4e54, 0x4fa8, 0x5de7, 0x9798, 0x64ac, 0x7fd8, 0x5ced, 0x4fcf, 0x7a8d, 0x5207, 0x8304, 0x4e14, 0x602f, 0x7a83, 0x94a6, 0x4fb5, 0x4eb2, 0x79e6, 0x7434, 0x52e4, 0x82b9, 0x64d2, 0x79bd, 0x5bdd, 0x6c81, 0x9752, 0x8f7b, 0x6c22, 0x503e, 0x537f, 0x6e05, 0x64ce, 0x6674, 0x6c30, 0x60c5, 0x9877, 0x8bf7, 0x5e86, 0x743c, 0x7a77, 0x79cb, 0x4e18, 0x90b1, 0x7403, 0x6c42, 0x56da, 0x914b, 0x6cc5, 0x8d8b, 0x533a, 0x86c6, 0x66f2, 0x8eaf, 0x5c48, 0x9a71, 0x6e20, 94, 0x4821, 0x53d6, 0x5a36, 0x9f8b, 0x8da3, 0x53bb, 0x5708, 0x98a7, 0x6743, 0x919b, 0x6cc9, 0x5168, 0x75ca, 0x62f3, 0x72ac, 0x5238, 0x529d, 0x7f3a, 0x7094, 0x7638, 0x5374, 0x9e4a, 0x69b7, 0x786e, 0x96c0, 0x88d9, 0x7fa4, 0x7136, 0x71c3, 0x5189, 0x67d3, 0x74e4, 0x58e4, 0x6518, 0x56b7, 0x8ba9, 0x9976, 0x6270, 0x7ed5, 0x60f9, 0x70ed, 0x58ec, 0x4ec1, 0x4eba, 0x5fcd, 0x97e7, 0x4efb, 0x8ba4, 0x5203, 0x598a, 0x7eab, 0x6254, 0x4ecd, 0x65e5, 0x620e, 0x8338, 0x84c9, 0x8363, 0x878d, 0x7194, 0x6eb6, 0x5bb9, 0x7ed2, 0x5197, 0x63c9, 0x67d4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5b7a, 0x5982, 0x8fb1, 0x4e73, 0x6c5d, 0x5165, 0x8925, 0x8f6f, 0x962e, 0x854a, 0x745e, 0x9510, 0x95f0, 0x6da6, 0x82e5, 0x5f31, 0x6492, 0x6d12, 0x8428, 0x816e, 0x9cc3, 0x585e, 0x8d5b, 0x4e09, 0x53c1, 94, 0x4921, 0x4f1e, 0x6563, 0x6851, 0x55d3, 0x4e27, 0x6414, 0x9a9a, 0x626b, 0x5ac2, 0x745f, 0x8272, 0x6da9, 0x68ee, 0x50e7, 0x838e, 0x7802, 0x6740, 0x5239, 0x6c99, 0x7eb1, 0x50bb, 0x5565, 0x715e, 0x7b5b, 0x6652, 0x73ca, 0x82eb, 0x6749, 0x5c71, 0x5220, 0x717d, 0x886b, 0x95ea, 0x9655, 0x64c5, 0x8d61, 0x81b3, 0x5584, 0x6c55, 0x6247, 0x7f2e, 0x5892, 0x4f24, 0x5546, 0x8d4f, 0x664c, 0x4e0a, 0x5c1a, 0x88f3, 0x68a2, 0x634e, 0x7a0d, 0x70e7, 0x828d, 0x52fa, 0x97f6, 0x5c11, 0x54e8, 0x90b5, 0x7ecd, 0x5962, 0x8d4a, 0x86c7, 0x820c, 0x820d, 0x8d66, 0x6444, 0x5c04, 0x6151, 0x6d89, 0x793e, 0x8bbe, 0x7837, 0x7533, 0x547b, 0x4f38, 0x8eab, 0x6df1, 0x5a20, 0x7ec5, 0x795e, 0x6c88, 0x5ba1, 0x5a76, 0x751a, 0x80be, 0x614e, 0x6e17, 0x58f0, 0x751f, 0x7525, 0x7272, 0x5347, 0x7ef3, 94, 0x4a21, 0x7701, 0x76db, 0x5269, 0x80dc, 0x5723, 0x5e08, 0x5931, 0x72ee, 0x65bd, 0x6e7f, 0x8bd7, 0x5c38, 0x8671, 0x5341, 0x77f3, 0x62fe, 0x65f6, 0x4ec0, 0x98df, 0x8680, 0x5b9e, 0x8bc6, 0x53f2, 0x77e2, 0x4f7f, 0x5c4e, 0x9a76, 0x59cb, 0x5f0f, 0x793a, 0x58eb, 0x4e16, 0x67ff, 0x4e8b, 0x62ed, 0x8a93, 0x901d, 0x52bf, 0x662f, 0x55dc, 0x566c, 0x9002, 0x4ed5, 0x4f8d, 0x91ca, 0x9970, 0x6c0f, 0x5e02, 0x6043, 0x5ba4, 0x89c6, 0x8bd5, 0x6536, 0x624b, 0x9996, 0x5b88, 0x5bff, 0x6388, 0x552e, 0x53d7, 0x7626, 0x517d, 0x852c, 0x67a2, 0x68b3, 0x6b8a, 0x6292, 0x8f93, 0x53d4, 0x8212, 0x6dd1, 0x758f, 0x4e66, 0x8d4e, 0x5b70, 0x719f, 0x85af, 0x6691, 0x66d9, 0x7f72, 0x8700, 0x9ecd, 0x9f20, 0x5c5e, 0x672f, 0x8ff0, 0x6811, 0x675f, 0x620d, 0x7ad6, 0x5885, 0x5eb6, 0x6570, 0x6f31, 94, 0x4b21, 0x6055, 0x5237, 0x800d, 0x6454, 0x8870, 0x7529, 0x5e05, 0x6813, 0x62f4, 0x971c, 0x53cc, 0x723d, 0x8c01, 0x6c34, 0x7761, 0x7a0e, 0x542e, 0x77ac, 0x987a, 0x821c, 0x8bf4, 0x7855, 0x6714, 0x70c1, 0x65af, 0x6495, 0x5636, 0x601d, 0x79c1, 0x53f8, 0x4e1d, 0x6b7b, 0x8086, 0x5bfa, 0x55e3, 0x56db, 0x4f3a, 0x4f3c, 0x9972, 0x5df3, 0x677e, 0x8038, 0x6002, 0x9882, 0x9001, 0x5b8b, 0x8bbc, 0x8bf5, 0x641c, 0x8258, 0x64de, 0x55fd, 0x82cf, 0x9165, 0x4fd7, 0x7d20, 0x901f, 0x7c9f, 0x50f3, 0x5851, 0x6eaf, 0x5bbf, 0x8bc9, 0x8083, 0x9178, 0x849c, 0x7b97, 0x867d, 0x968b, 0x968f, 0x7ee5, 0x9ad3, 0x788e, 0x5c81, 0x7a57, 0x9042, 0x96a7, 0x795f, 0x5b59, 0x635f, 0x7b0b, 0x84d1, 0x68ad, 0x5506, 0x7f29, 0x7410, 0x7d22, 0x9501, 0x6240, 0x584c, 0x4ed6, 0x5b83, 0x5979, 0x5854, 94, 0x4c21, 0x736d, 0x631e, 0x8e4b, 0x8e0f, 0x80ce, 0x82d4, 0x62ac, 0x53f0, 0x6cf0, 0x915e, 0x592a, 0x6001, 0x6c70, 0x574d, 0x644a, 0x8d2a, 0x762b, 0x6ee9, 0x575b, 0x6a80, 0x75f0, 0x6f6d, 0x8c2d, 0x8c08, 0x5766, 0x6bef, 0x8892, 0x78b3, 0x63a2, 0x53f9, 0x70ad, 0x6c64, 0x5858, 0x642a, 0x5802, 0x68e0, 0x819b, 0x5510, 0x7cd6, 0x5018, 0x8eba, 0x6dcc, 0x8d9f, 0x70eb, 0x638f, 0x6d9b, 0x6ed4, 0x7ee6, 0x8404, 0x6843, 0x9003, 0x6dd8, 0x9676, 0x8ba8, 0x5957, 0x7279, 0x85e4, 0x817e, 0x75bc, 0x8a8a, 0x68af, 0x5254, 0x8e22, 0x9511, 0x63d0, 0x9898, 0x8e44, 0x557c, 0x4f53, 0x66ff, 0x568f, 0x60d5, 0x6d95, 0x5243, 0x5c49, 0x5929, 0x6dfb, 0x586b, 0x7530, 0x751c, 0x606c, 0x8214, 0x8146, 0x6311, 0x6761, 0x8fe2, 0x773a, 0x8df3, 0x8d34, 0x94c1, 0x5e16, 0x5385, 0x542c, 0x70c3, 94, 0x4d21, 0x6c40, 0x5ef7, 0x505c, 0x4ead, 0x5ead, 0x633a, 0x8247, 0x901a, 0x6850, 0x916e, 0x77b3, 0x540c, 0x94dc, 0x5f64, 0x7ae5, 0x6876, 0x6345, 0x7b52, 0x7edf, 0x75db, 0x5077, 0x6295, 0x5934, 0x900f, 0x51f8, 0x79c3, 0x7a81, 0x56fe, 0x5f92, 0x9014, 0x6d82, 0x5c60, 0x571f, 0x5410, 0x5154, 0x6e4d, 0x56e2, 0x63a8, 0x9893, 0x817f, 0x8715, 0x892a, 0x9000, 0x541e, 0x5c6f, 0x81c0, 0x62d6, 0x6258, 0x8131, 0x9e35, 0x9640, 0x9a6e, 0x9a7c, 0x692d, 0x59a5, 0x62d3, 0x553e, 0x6316, 0x54c7, 0x86d9, 0x6d3c, 0x5a03, 0x74e6, 0x889c, 0x6b6a, 0x5916, 0x8c4c, 0x5f2f, 0x6e7e, 0x73a9, 0x987d, 0x4e38, 0x70f7, 0x5b8c, 0x7897, 0x633d, 0x665a, 0x7696, 0x60cb, 0x5b9b, 0x5a49, 0x4e07, 0x8155, 0x6c6a, 0x738b, 0x4ea1, 0x6789, 0x7f51, 0x5f80, 0x65fa, 0x671b, 0x5fd8, 0x5984, 0x5a01, 94, 0x4e21, 0x5dcd, 0x5fae, 0x5371, 0x97e6, 0x8fdd, 0x6845, 0x56f4, 0x552f, 0x60df, 0x4e3a, 0x6f4d, 0x7ef4, 0x82c7, 0x840e, 0x59d4, 0x4f1f, 0x4f2a, 0x5c3e, 0x7eac, 0x672a, 0x851a, 0x5473, 0x754f, 0x80c3, 0x5582, 0x9b4f, 0x4f4d, 0x6e2d, 0x8c13, 0x5c09, 0x6170, 0x536b, 0x761f, 0x6e29, 0x868a, 0x6587, 0x95fb, 0x7eb9, 0x543b, 0x7a33, 0x7d0a, 0x95ee, 0x55e1, 0x7fc1, 0x74ee, 0x631d, 0x8717, 0x6da1, 0x7a9d, 0x6211, 0x65a1, 0x5367, 0x63e1, 0x6c83, 0x5deb, 0x545c, 0x94a8, 0x4e4c, 0x6c61, 0x8bec, 0x5c4b, 0x65e0, 0x829c, 0x68a7, 0x543e, 0x5434, 0x6bcb, 0x6b66, 0x4e94, 0x6342, 0x5348, 0x821e, 0x4f0d, 0x4fae, 0x575e, 0x620a, 0x96fe, 0x6664, 0x7269, 0x52ff, 0x52a1, 0x609f, 0x8bef, 0x6614, 0x7199, 0x6790, 0x897f, 0x7852, 0x77fd, 0x6670, 0x563b, 0x5438, 0x9521, 0x727a, 94, 0x4f21, 0x7a00, 0x606f, 0x5e0c, 0x6089, 0x819d, 0x5915, 0x60dc, 0x7184, 0x70ef, 0x6eaa, 0x6c50, 0x7280, 0x6a84, 0x88ad, 0x5e2d, 0x4e60, 0x5ab3, 0x559c, 0x94e3, 0x6d17, 0x7cfb, 0x9699, 0x620f, 0x7ec6, 0x778e, 0x867e, 0x5323, 0x971e, 0x8f96, 0x6687, 0x5ce1, 0x4fa0, 0x72ed, 0x4e0b, 0x53a6, 0x590f, 0x5413, 0x6380, 0x9528, 0x5148, 0x4ed9, 0x9c9c, 0x7ea4, 0x54b8, 0x8d24, 0x8854, 0x8237, 0x95f2, 0x6d8e, 0x5f26, 0x5acc, 0x663e, 0x9669, 0x73b0, 0x732e, 0x53bf, 0x817a, 0x9985, 0x7fa1, 0x5baa, 0x9677, 0x9650, 0x7ebf, 0x76f8, 0x53a2, 0x9576, 0x9999, 0x7bb1, 0x8944, 0x6e58, 0x4e61, 0x7fd4, 0x7965, 0x8be6, 0x60f3, 0x54cd, 0x4eab, 0x9879, 0x5df7, 0x6a61, 0x50cf, 0x5411, 0x8c61, 0x8427, 0x785d, 0x9704, 0x524a, 0x54ee, 0x56a3, 0x9500, 0x6d88, 0x5bb5, 0x6dc6, 0x6653, 94, 0x5021, 0x5c0f, 0x5b5d, 0x6821, 0x8096, 0x5578, 0x7b11, 0x6548, 0x6954, 0x4e9b, 0x6b47, 0x874e, 0x978b, 0x534f, 0x631f, 0x643a, 0x90aa, 0x659c, 0x80c1, 0x8c10, 0x5199, 0x68b0, 0x5378, 0x87f9, 0x61c8, 0x6cc4, 0x6cfb, 0x8c22, 0x5c51, 0x85aa, 0x82af, 0x950c, 0x6b23, 0x8f9b, 0x65b0, 0x5ffb, 0x5fc3, 0x4fe1, 0x8845, 0x661f, 0x8165, 0x7329, 0x60fa, 0x5174, 0x5211, 0x578b, 0x5f62, 0x90a2, 0x884c, 0x9192, 0x5e78, 0x674f, 0x6027, 0x59d3, 0x5144, 0x51f6, 0x80f8, 0x5308, 0x6c79, 0x96c4, 0x718a, 0x4f11, 0x4fee, 0x7f9e, 0x673d, 0x55c5, 0x9508, 0x79c0, 0x8896, 0x7ee3, 0x589f, 0x620c, 0x9700, 0x865a, 0x5618, 0x987b, 0x5f90, 0x8bb8, 0x84c4, 0x9157, 0x53d9, 0x65ed, 0x5e8f, 0x755c, 0x6064, 0x7d6e, 0x5a7f, 0x7eea, 0x7eed, 0x8f69, 0x55a7, 0x5ba3, 0x60ac, 0x65cb, 0x7384, 94, 0x5121, 0x9009, 0x7663, 0x7729, 0x7eda, 0x9774, 0x859b, 0x5b66, 0x7a74, 0x96ea, 0x8840, 0x52cb, 0x718f, 0x5faa, 0x65ec, 0x8be2, 0x5bfb, 0x9a6f, 0x5de1, 0x6b89, 0x6c5b, 0x8bad, 0x8baf, 0x900a, 0x8fc5, 0x538b, 0x62bc, 0x9e26, 0x9e2d, 0x5440, 0x4e2b, 0x82bd, 0x7259, 0x869c, 0x5d16, 0x8859, 0x6daf, 0x96c5, 0x54d1, 0x4e9a, 0x8bb6, 0x7109, 0x54bd, 0x9609, 0x70df, 0x6df9, 0x76d0, 0x4e25, 0x7814, 0x8712, 0x5ca9, 0x5ef6, 0x8a00, 0x989c, 0x960e, 0x708e, 0x6cbf, 0x5944, 0x63a9, 0x773c, 0x884d, 0x6f14, 0x8273, 0x5830, 0x71d5, 0x538c, 0x781a, 0x96c1, 0x5501, 0x5f66, 0x7130, 0x5bb4, 0x8c1a, 0x9a8c, 0x6b83, 0x592e, 0x9e2f, 0x79e7, 0x6768, 0x626c, 0x4f6f, 0x75a1, 0x7f8a, 0x6d0b, 0x9633, 0x6c27, 0x4ef0, 0x75d2, 0x517b, 0x6837, 0x6f3e, 0x9080, 0x8170, 0x5996, 0x7476, 94, 0x5221, 0x6447, 0x5c27, 0x9065, 0x7a91, 0x8c23, 0x59da, 0x54ac, 0x8200, 0x836f, 0x8981, 0x8000, 0x6930, 0x564e, 0x8036, 0x7237, 0x91ce, 0x51b6, 0x4e5f, 0x9875, 0x6396, 0x4e1a, 0x53f6, 0x66f3, 0x814b, 0x591c, 0x6db2, 0x4e00, 0x58f9, 0x533b, 0x63d6, 0x94f1, 0x4f9d, 0x4f0a, 0x8863, 0x9890, 0x5937, 0x9057, 0x79fb, 0x4eea, 0x80f0, 0x7591, 0x6c82, 0x5b9c, 0x59e8, 0x5f5d, 0x6905, 0x8681, 0x501a, 0x5df2, 0x4e59, 0x77e3, 0x4ee5, 0x827a, 0x6291, 0x6613, 0x9091, 0x5c79, 0x4ebf, 0x5f79, 0x81c6, 0x9038, 0x8084, 0x75ab, 0x4ea6, 0x88d4, 0x610f, 0x6bc5, 0x5fc6, 0x4e49, 0x76ca, 0x6ea2, 0x8be3, 0x8bae, 0x8c0a, 0x8bd1, 0x5f02, 0x7ffc, 0x7fcc, 0x7ece, 0x8335, 0x836b, 0x56e0, 0x6bb7, 0x97f3, 0x9634, 0x59fb, 0x541f, 0x94f6, 0x6deb, 0x5bc5, 0x996e, 0x5c39, 0x5f15, 0x9690, 94, 0x5321, 0x5370, 0x82f1, 0x6a31, 0x5a74, 0x9e70, 0x5e94, 0x7f28, 0x83b9, 0x8424, 0x8425, 0x8367, 0x8747, 0x8fce, 0x8d62, 0x76c8, 0x5f71, 0x9896, 0x786c, 0x6620, 0x54df, 0x62e5, 0x4f63, 0x81c3, 0x75c8, 0x5eb8, 0x96cd, 0x8e0a, 0x86f9, 0x548f, 0x6cf3, 0x6d8c, 0x6c38, 0x607f, 0x52c7, 0x7528, 0x5e7d, 0x4f18, 0x60a0, 0x5fe7, 0x5c24, 0x7531, 0x90ae, 0x94c0, 0x72b9, 0x6cb9, 0x6e38, 0x9149, 0x6709, 0x53cb, 0x53f3, 0x4f51, 0x91c9, 0x8bf1, 0x53c8, 0x5e7c, 0x8fc2, 0x6de4, 0x4e8e, 0x76c2, 0x6986, 0x865e, 0x611a, 0x8206, 0x4f59, 0x4fde, 0x903e, 0x9c7c, 0x6109, 0x6e1d, 0x6e14, 0x9685, 0x4e88, 0x5a31, 0x96e8, 0x4e0e, 0x5c7f, 0x79b9, 0x5b87, 0x8bed, 0x7fbd, 0x7389, 0x57df, 0x828b, 0x90c1, 0x5401, 0x9047, 0x55bb, 0x5cea, 0x5fa1, 0x6108, 0x6b32, 0x72f1, 0x80b2, 0x8a89, 94, 0x5421, 0x6d74, 0x5bd3, 0x88d5, 0x9884, 0x8c6b, 0x9a6d, 0x9e33, 0x6e0a, 0x51a4, 0x5143, 0x57a3, 0x8881, 0x539f, 0x63f4, 0x8f95, 0x56ed, 0x5458, 0x5706, 0x733f, 0x6e90, 0x7f18, 0x8fdc, 0x82d1, 0x613f, 0x6028, 0x9662, 0x66f0, 0x7ea6, 0x8d8a, 0x8dc3, 0x94a5, 0x5cb3, 0x7ca4, 0x6708, 0x60a6, 0x9605, 0x8018, 0x4e91, 0x90e7, 0x5300, 0x9668, 0x5141, 0x8fd0, 0x8574, 0x915d, 0x6655, 0x97f5, 0x5b55, 0x531d, 0x7838, 0x6742, 0x683d, 0x54c9, 0x707e, 0x5bb0, 0x8f7d, 0x518d, 0x5728, 0x54b1, 0x6512, 0x6682, 0x8d5e, 0x8d43, 0x810f, 0x846c, 0x906d, 0x7cdf, 0x51ff, 0x85fb, 0x67a3, 0x65e9, 0x6fa1, 0x86a4, 0x8e81, 0x566a, 0x9020, 0x7682, 0x7076, 0x71e5, 0x8d23, 0x62e9, 0x5219, 0x6cfd, 0x8d3c, 0x600e, 0x589e, 0x618e, 0x66fe, 0x8d60, 0x624e, 0x55b3, 0x6e23, 0x672d, 0x8f67, 94, 0x5521, 0x94e1, 0x95f8, 0x7728, 0x6805, 0x69a8, 0x548b, 0x4e4d, 0x70b8, 0x8bc8, 0x6458, 0x658b, 0x5b85, 0x7a84, 0x503a, 0x5be8, 0x77bb, 0x6be1, 0x8a79, 0x7c98, 0x6cbe, 0x76cf, 0x65a9, 0x8f97, 0x5d2d, 0x5c55, 0x8638, 0x6808, 0x5360, 0x6218, 0x7ad9, 0x6e5b, 0x7efd, 0x6a1f, 0x7ae0, 0x5f70, 0x6f33, 0x5f20, 0x638c, 0x6da8, 0x6756, 0x4e08, 0x5e10, 0x8d26, 0x4ed7, 0x80c0, 0x7634, 0x969c, 0x62db, 0x662d, 0x627e, 0x6cbc, 0x8d75, 0x7167, 0x7f69, 0x5146, 0x8087, 0x53ec, 0x906e, 0x6298, 0x54f2, 0x86f0, 0x8f99, 0x8005, 0x9517, 0x8517, 0x8fd9, 0x6d59, 0x73cd, 0x659f, 0x771f, 0x7504, 0x7827, 0x81fb, 0x8d1e, 0x9488, 0x4fa6, 0x6795, 0x75b9, 0x8bca, 0x9707, 0x632f, 0x9547, 0x9635, 0x84b8, 0x6323, 0x7741, 0x5f81, 0x72f0, 0x4e89, 0x6014, 0x6574, 0x62ef, 0x6b63, 0x653f, 94, 0x5621, 0x5e27, 0x75c7, 0x90d1, 0x8bc1, 0x829d, 0x679d, 0x652f, 0x5431, 0x8718, 0x77e5, 0x80a2, 0x8102, 0x6c41, 0x4e4b, 0x7ec7, 0x804c, 0x76f4, 0x690d, 0x6b96, 0x6267, 0x503c, 0x4f84, 0x5740, 0x6307, 0x6b62, 0x8dbe, 0x53ea, 0x65e8, 0x7eb8, 0x5fd7, 0x631a, 0x63b7, 0x81f3, 0x81f4, 0x7f6e, 0x5e1c, 0x5cd9, 0x5236, 0x667a, 0x79e9, 0x7a1a, 0x8d28, 0x7099, 0x75d4, 0x6ede, 0x6cbb, 0x7a92, 0x4e2d, 0x76c5, 0x5fe0, 0x949f, 0x8877, 0x7ec8, 0x79cd, 0x80bf, 0x91cd, 0x4ef2, 0x4f17, 0x821f, 0x5468, 0x5dde, 0x6d32, 0x8bcc, 0x7ca5, 0x8f74, 0x8098, 0x5e1a, 0x5492, 0x76b1, 0x5b99, 0x663c, 0x9aa4, 0x73e0, 0x682a, 0x86db, 0x6731, 0x732a, 0x8bf8, 0x8bdb, 0x9010, 0x7af9, 0x70db, 0x716e, 0x62c4, 0x77a9, 0x5631, 0x4e3b, 0x8457, 0x67f1, 0x52a9, 0x86c0, 0x8d2e, 0x94f8, 0x7b51, 89, 0x5721, 0x4f4f, 0x6ce8, 0x795d, 0x9a7b, 0x6293, 0x722a, 0x62fd, 0x4e13, 0x7816, 0x8f6c, 0x64b0, 0x8d5a, 0x7bc6, 0x6869, 0x5e84, 0x88c5, 0x5986, 0x649e, 0x58ee, 0x72b6, 0x690e, 0x9525, 0x8ffd, 0x8d58, 0x5760, 0x7f00, 0x8c06, 0x51c6, 0x6349, 0x62d9, 0x5353, 0x684c, 0x7422, 0x8301, 0x914c, 0x5544, 0x7740, 0x707c, 0x6d4a, 0x5179, 0x54a8, 0x8d44, 0x59ff, 0x6ecb, 0x6dc4, 0x5b5c, 0x7d2b, 0x4ed4, 0x7c7d, 0x6ed3, 0x5b50, 0x81ea, 0x6e0d, 0x5b57, 0x9b03, 0x68d5, 0x8e2a, 0x5b97, 0x7efc, 0x603b, 0x7eb5, 0x90b9, 0x8d70, 0x594f, 0x63cd, 0x79df, 0x8db3, 0x5352, 0x65cf, 0x7956, 0x8bc5, 0x963b, 0x7ec4, 0x94bb, 0x7e82, 0x5634, 0x9189, 0x6700, 0x7f6a, 0x5c0a, 0x9075, 0x6628, 0x5de6, 0x4f50, 0x67de, 0x505a, 0x4f5c, 0x5750, 0x5ea7, 94, 0x5821, 0x4e8d, 0x4e0c, 0x5140, 0x4e10, 0x5eff, 0x5345, 0x4e15, 0x4e98, 0x4e1e, 0x9b32, 0x5b6c, 0x5669, 0x4e28, 0x79ba, 0x4e3f, 0x5315, 0x4e47, 0x592d, 0x723b, 0x536e, 0x6c10, 0x56df, 0x80e4, 0x9997, 0x6bd3, 0x777e, 0x9f17, 0x4e36, 0x4e9f, 0x9f10, 0x4e5c, 0x4e69, 0x4e93, 0x8288, 0x5b5b, 0x556c, 0x560f, 0x4ec4, 0x538d, 0x539d, 0x53a3, 0x53a5, 0x53ae, 0x9765, 0x8d5d, 0x531a, 0x53f5, 0x5326, 0x532e, 0x533e, 0x8d5c, 0x5366, 0x5363, 0x5202, 0x5208, 0x520e, 0x522d, 0x5233, 0x523f, 0x5240, 0x524c, 0x525e, 0x5261, 0x525c, 0x84af, 0x527d, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, 0x7f54, 0x4ebb, 0x4ec3, 0x4ec9, 0x4ec2, 0x4ee8, 0x4ee1, 0x4eeb, 0x4ede, 0x4f1b, 0x4ef3, 0x4f22, 0x4f64, 0x4ef5, 0x4f25, 0x4f27, 0x4f09, 0x4f2b, 0x4f5e, 0x4f67, 0x6538, 0x4f5a, 0x4f5d, 94, 0x5921, 0x4f5f, 0x4f57, 0x4f32, 0x4f3d, 0x4f76, 0x4f74, 0x4f91, 0x4f89, 0x4f83, 0x4f8f, 0x4f7e, 0x4f7b, 0x4faa, 0x4f7c, 0x4fac, 0x4f94, 0x4fe6, 0x4fe8, 0x4fea, 0x4fc5, 0x4fda, 0x4fe3, 0x4fdc, 0x4fd1, 0x4fdf, 0x4ff8, 0x5029, 0x504c, 0x4ff3, 0x502c, 0x500f, 0x502e, 0x502d, 0x4ffe, 0x501c, 0x500c, 0x5025, 0x5028, 0x507e, 0x5043, 0x5055, 0x5048, 0x504e, 0x506c, 0x507b, 0x50a5, 0x50a7, 0x50a9, 0x50ba, 0x50d6, 0x5106, 0x50ed, 0x50ec, 0x50e6, 0x50ee, 0x5107, 0x510b, 0x4edd, 0x6c3d, 0x4f58, 0x4f65, 0x4fce, 0x9fa0, 0x6c46, 0x7c74, 0x516e, 0x5dfd, 0x9ec9, 0x9998, 0x5181, 0x5914, 0x52f9, 0x530d, 0x8a07, 0x5310, 0x51eb, 0x5919, 0x5155, 0x4ea0, 0x5156, 0x4eb3, 0x886e, 0x88a4, 0x4eb5, 0x8114, 0x88d2, 0x7980, 0x5b34, 0x8803, 0x7fb8, 0x51ab, 0x51b1, 0x51bd, 0x51bc, 94, 0x5a21, 0x51c7, 0x5196, 0x51a2, 0x51a5, 0x8ba0, 0x8ba6, 0x8ba7, 0x8baa, 0x8bb4, 0x8bb5, 0x8bb7, 0x8bc2, 0x8bc3, 0x8bcb, 0x8bcf, 0x8bce, 0x8bd2, 0x8bd3, 0x8bd4, 0x8bd6, 0x8bd8, 0x8bd9, 0x8bdc, 0x8bdf, 0x8be0, 0x8be4, 0x8be8, 0x8be9, 0x8bee, 0x8bf0, 0x8bf3, 0x8bf6, 0x8bf9, 0x8bfc, 0x8bff, 0x8c00, 0x8c02, 0x8c04, 0x8c07, 0x8c0c, 0x8c0f, 0x8c11, 0x8c12, 0x8c14, 0x8c15, 0x8c16, 0x8c19, 0x8c1b, 0x8c18, 0x8c1d, 0x8c1f, 0x8c20, 0x8c21, 0x8c25, 0x8c27, 0x8c2a, 0x8c2b, 0x8c2e, 0x8c2f, 0x8c32, 0x8c33, 0x8c35, 0x8c36, 0x5369, 0x537a, 0x961d, 0x9622, 0x9621, 0x9631, 0x962a, 0x963d, 0x963c, 0x9642, 0x9649, 0x9654, 0x965f, 0x9667, 0x966c, 0x9672, 0x9674, 0x9688, 0x968d, 0x9697, 0x96b0, 0x9097, 0x909b, 0x909d, 0x9099, 0x90ac, 0x90a1, 0x90b4, 0x90b3, 0x90b6, 0x90ba, 94, 0x5b21, 0x90b8, 0x90b0, 0x90cf, 0x90c5, 0x90be, 0x90d0, 0x90c4, 0x90c7, 0x90d3, 0x90e6, 0x90e2, 0x90dc, 0x90d7, 0x90db, 0x90eb, 0x90ef, 0x90fe, 0x9104, 0x9122, 0x911e, 0x9123, 0x9131, 0x912f, 0x9139, 0x9143, 0x9146, 0x520d, 0x5942, 0x52a2, 0x52ac, 0x52ad, 0x52be, 0x54ff, 0x52d0, 0x52d6, 0x52f0, 0x53df, 0x71ee, 0x77cd, 0x5ef4, 0x51f5, 0x51fc, 0x9b2f, 0x53b6, 0x5f01, 0x755a, 0x5def, 0x574c, 0x57a9, 0x57a1, 0x587e, 0x58bc, 0x58c5, 0x58d1, 0x5729, 0x572c, 0x572a, 0x5733, 0x5739, 0x572e, 0x572f, 0x575c, 0x573b, 0x5742, 0x5769, 0x5785, 0x576b, 0x5786, 0x577c, 0x577b, 0x5768, 0x576d, 0x5776, 0x5773, 0x57ad, 0x57a4, 0x578c, 0x57b2, 0x57cf, 0x57a7, 0x57b4, 0x5793, 0x57a0, 0x57d5, 0x57d8, 0x57da, 0x57d9, 0x57d2, 0x57b8, 0x57f4, 0x57ef, 0x57f8, 0x57e4, 0x57dd, 94, 0x5c21, 0x580b, 0x580d, 0x57fd, 0x57ed, 0x5800, 0x581e, 0x5819, 0x5844, 0x5820, 0x5865, 0x586c, 0x5881, 0x5889, 0x589a, 0x5880, 0x99a8, 0x9f19, 0x61ff, 0x8279, 0x827d, 0x827f, 0x828f, 0x828a, 0x82a8, 0x8284, 0x828e, 0x8291, 0x8297, 0x8299, 0x82ab, 0x82b8, 0x82be, 0x82b0, 0x82c8, 0x82ca, 0x82e3, 0x8298, 0x82b7, 0x82ae, 0x82cb, 0x82cc, 0x82c1, 0x82a9, 0x82b4, 0x82a1, 0x82aa, 0x829f, 0x82c4, 0x82ce, 0x82a4, 0x82e1, 0x8309, 0x82f7, 0x82e4, 0x830f, 0x8307, 0x82dc, 0x82f4, 0x82d2, 0x82d8, 0x830c, 0x82fb, 0x82d3, 0x8311, 0x831a, 0x8306, 0x8314, 0x8315, 0x82e0, 0x82d5, 0x831c, 0x8351, 0x835b, 0x835c, 0x8308, 0x8392, 0x833c, 0x8334, 0x8331, 0x839b, 0x835e, 0x832f, 0x834f, 0x8347, 0x8343, 0x835f, 0x8340, 0x8317, 0x8360, 0x832d, 0x833a, 0x8333, 0x8366, 0x8365, 94, 0x5d21, 0x8368, 0x831b, 0x8369, 0x836c, 0x836a, 0x836d, 0x836e, 0x83b0, 0x8378, 0x83b3, 0x83b4, 0x83a0, 0x83aa, 0x8393, 0x839c, 0x8385, 0x837c, 0x83b6, 0x83a9, 0x837d, 0x83b8, 0x837b, 0x8398, 0x839e, 0x83a8, 0x83ba, 0x83bc, 0x83c1, 0x8401, 0x83e5, 0x83d8, 0x5807, 0x8418, 0x840b, 0x83dd, 0x83fd, 0x83d6, 0x841c, 0x8438, 0x8411, 0x8406, 0x83d4, 0x83df, 0x840f, 0x8403, 0x83f8, 0x83f9, 0x83ea, 0x83c5, 0x83c0, 0x8426, 0x83f0, 0x83e1, 0x845c, 0x8451, 0x845a, 0x8459, 0x8473, 0x8487, 0x8488, 0x847a, 0x8489, 0x8478, 0x843c, 0x8446, 0x8469, 0x8476, 0x848c, 0x848e, 0x8431, 0x846d, 0x84c1, 0x84cd, 0x84d0, 0x84e6, 0x84bd, 0x84d3, 0x84ca, 0x84bf, 0x84ba, 0x84e0, 0x84a1, 0x84b9, 0x84b4, 0x8497, 0x84e5, 0x84e3, 0x850c, 0x750d, 0x8538, 0x84f0, 0x8539, 0x851f, 0x853a, 94, 0x5e21, 0x8556, 0x853b, 0x84ff, 0x84fc, 0x8559, 0x8548, 0x8568, 0x8564, 0x855e, 0x857a, 0x77a2, 0x8543, 0x8572, 0x857b, 0x85a4, 0x85a8, 0x8587, 0x858f, 0x8579, 0x85ae, 0x859c, 0x8585, 0x85b9, 0x85b7, 0x85b0, 0x85d3, 0x85c1, 0x85dc, 0x85ff, 0x8627, 0x8605, 0x8629, 0x8616, 0x863c, 0x5efe, 0x5f08, 0x593c, 0x5941, 0x8037, 0x5955, 0x595a, 0x5958, 0x530f, 0x5c22, 0x5c25, 0x5c2c, 0x5c34, 0x624c, 0x626a, 0x629f, 0x62bb, 0x62ca, 0x62da, 0x62d7, 0x62ee, 0x6322, 0x62f6, 0x6339, 0x634b, 0x6343, 0x63ad, 0x63f6, 0x6371, 0x637a, 0x638e, 0x63b4, 0x636d, 0x63ac, 0x638a, 0x6369, 0x63ae, 0x63bc, 0x63f2, 0x63f8, 0x63e0, 0x63ff, 0x63c4, 0x63de, 0x63ce, 0x6452, 0x63c6, 0x63be, 0x6445, 0x6441, 0x640b, 0x641b, 0x6420, 0x640c, 0x6426, 0x6421, 0x645e, 0x6484, 0x646d, 0x6496, 94, 0x5f21, 0x647a, 0x64b7, 0x64b8, 0x6499, 0x64ba, 0x64c0, 0x64d0, 0x64d7, 0x64e4, 0x64e2, 0x6509, 0x6525, 0x652e, 0x5f0b, 0x5fd2, 0x7519, 0x5f11, 0x535f, 0x53f1, 0x53fd, 0x53e9, 0x53e8, 0x53fb, 0x5412, 0x5416, 0x5406, 0x544b, 0x5452, 0x5453, 0x5454, 0x5456, 0x5443, 0x5421, 0x5457, 0x5459, 0x5423, 0x5432, 0x5482, 0x5494, 0x5477, 0x5471, 0x5464, 0x549a, 0x549b, 0x5484, 0x5476, 0x5466, 0x549d, 0x54d0, 0x54ad, 0x54c2, 0x54b4, 0x54d2, 0x54a7, 0x54a6, 0x54d3, 0x54d4, 0x5472, 0x54a3, 0x54d5, 0x54bb, 0x54bf, 0x54cc, 0x54d9, 0x54da, 0x54dc, 0x54a9, 0x54aa, 0x54a4, 0x54dd, 0x54cf, 0x54de, 0x551b, 0x54e7, 0x5520, 0x54fd, 0x5514, 0x54f3, 0x5522, 0x5523, 0x550f, 0x5511, 0x5527, 0x552a, 0x5567, 0x558f, 0x55b5, 0x5549, 0x556d, 0x5541, 0x5555, 0x553f, 0x5550, 0x553c, 94, 0x6021, 0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, 0x555c, 0x558b, 0x55d2, 0x5583, 0x55b1, 0x55b9, 0x5588, 0x5581, 0x559f, 0x557e, 0x55d6, 0x5591, 0x557b, 0x55df, 0x55bd, 0x55be, 0x5594, 0x5599, 0x55ea, 0x55f7, 0x55c9, 0x561f, 0x55d1, 0x55eb, 0x55ec, 0x55d4, 0x55e6, 0x55dd, 0x55c4, 0x55ef, 0x55e5, 0x55f2, 0x55f3, 0x55cc, 0x55cd, 0x55e8, 0x55f5, 0x55e4, 0x8f94, 0x561e, 0x5608, 0x560c, 0x5601, 0x5624, 0x5623, 0x55fe, 0x5600, 0x5627, 0x562d, 0x5658, 0x5639, 0x5657, 0x562c, 0x564d, 0x5662, 0x5659, 0x565c, 0x564c, 0x5654, 0x5686, 0x5664, 0x5671, 0x566b, 0x567b, 0x567c, 0x5685, 0x5693, 0x56af, 0x56d4, 0x56d7, 0x56dd, 0x56e1, 0x56f5, 0x56eb, 0x56f9, 0x56ff, 0x5704, 0x570a, 0x5709, 0x571c, 0x5e0f, 0x5e19, 0x5e14, 0x5e11, 0x5e31, 0x5e3b, 0x5e3c, 94, 0x6121, 0x5e37, 0x5e44, 0x5e54, 0x5e5b, 0x5e5e, 0x5e61, 0x5c8c, 0x5c7a, 0x5c8d, 0x5c90, 0x5c96, 0x5c88, 0x5c98, 0x5c99, 0x5c91, 0x5c9a, 0x5c9c, 0x5cb5, 0x5ca2, 0x5cbd, 0x5cac, 0x5cab, 0x5cb1, 0x5ca3, 0x5cc1, 0x5cb7, 0x5cc4, 0x5cd2, 0x5ce4, 0x5ccb, 0x5ce5, 0x5d02, 0x5d03, 0x5d27, 0x5d26, 0x5d2e, 0x5d24, 0x5d1e, 0x5d06, 0x5d1b, 0x5d58, 0x5d3e, 0x5d34, 0x5d3d, 0x5d6c, 0x5d5b, 0x5d6f, 0x5d5d, 0x5d6b, 0x5d4b, 0x5d4a, 0x5d69, 0x5d74, 0x5d82, 0x5d99, 0x5d9d, 0x8c73, 0x5db7, 0x5dc5, 0x5f73, 0x5f77, 0x5f82, 0x5f87, 0x5f89, 0x5f8c, 0x5f95, 0x5f99, 0x5f9c, 0x5fa8, 0x5fad, 0x5fb5, 0x5fbc, 0x8862, 0x5f61, 0x72ad, 0x72b0, 0x72b4, 0x72b7, 0x72b8, 0x72c3, 0x72c1, 0x72ce, 0x72cd, 0x72d2, 0x72e8, 0x72ef, 0x72e9, 0x72f2, 0x72f4, 0x72f7, 0x7301, 0x72f3, 0x7303, 0x72fa, 94, 0x6221, 0x72fb, 0x7317, 0x7313, 0x7321, 0x730a, 0x731e, 0x731d, 0x7315, 0x7322, 0x7339, 0x7325, 0x732c, 0x7338, 0x7331, 0x7350, 0x734d, 0x7357, 0x7360, 0x736c, 0x736f, 0x737e, 0x821b, 0x5925, 0x98e7, 0x5924, 0x5902, 0x9963, 0x9967, 0x9968, 0x9969, 0x996a, 0x996b, 0x996c, 0x9974, 0x9977, 0x997d, 0x9980, 0x9984, 0x9987, 0x998a, 0x998d, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995, 0x5e80, 0x5e91, 0x5e8b, 0x5e96, 0x5ea5, 0x5ea0, 0x5eb9, 0x5eb5, 0x5ebe, 0x5eb3, 0x8d53, 0x5ed2, 0x5ed1, 0x5edb, 0x5ee8, 0x5eea, 0x81ba, 0x5fc4, 0x5fc9, 0x5fd6, 0x5fcf, 0x6003, 0x5fee, 0x6004, 0x5fe1, 0x5fe4, 0x5ffe, 0x6005, 0x6006, 0x5fea, 0x5fed, 0x5ff8, 0x6019, 0x6035, 0x6026, 0x601b, 0x600f, 0x600d, 0x6029, 0x602b, 0x600a, 0x603f, 0x6021, 0x6078, 0x6079, 0x607b, 0x607a, 0x6042, 94, 0x6321, 0x606a, 0x607d, 0x6096, 0x609a, 0x60ad, 0x609d, 0x6083, 0x6092, 0x608c, 0x609b, 0x60ec, 0x60bb, 0x60b1, 0x60dd, 0x60d8, 0x60c6, 0x60da, 0x60b4, 0x6120, 0x6126, 0x6115, 0x6123, 0x60f4, 0x6100, 0x610e, 0x612b, 0x614a, 0x6175, 0x61ac, 0x6194, 0x61a7, 0x61b7, 0x61d4, 0x61f5, 0x5fdd, 0x96b3, 0x95e9, 0x95eb, 0x95f1, 0x95f3, 0x95f5, 0x95f6, 0x95fc, 0x95fe, 0x9603, 0x9604, 0x9606, 0x9608, 0x960a, 0x960b, 0x960c, 0x960d, 0x960f, 0x9612, 0x9615, 0x9616, 0x9617, 0x9619, 0x961a, 0x4e2c, 0x723f, 0x6215, 0x6c35, 0x6c54, 0x6c5c, 0x6c4a, 0x6ca3, 0x6c85, 0x6c90, 0x6c94, 0x6c8c, 0x6c68, 0x6c69, 0x6c74, 0x6c76, 0x6c86, 0x6ca9, 0x6cd0, 0x6cd4, 0x6cad, 0x6cf7, 0x6cf8, 0x6cf1, 0x6cd7, 0x6cb2, 0x6ce0, 0x6cd6, 0x6cfa, 0x6ceb, 0x6cee, 0x6cb1, 0x6cd3, 0x6cef, 0x6cfe, 94, 0x6421, 0x6d39, 0x6d27, 0x6d0c, 0x6d43, 0x6d48, 0x6d07, 0x6d04, 0x6d19, 0x6d0e, 0x6d2b, 0x6d4d, 0x6d2e, 0x6d35, 0x6d1a, 0x6d4f, 0x6d52, 0x6d54, 0x6d33, 0x6d91, 0x6d6f, 0x6d9e, 0x6da0, 0x6d5e, 0x6d93, 0x6d94, 0x6d5c, 0x6d60, 0x6d7c, 0x6d63, 0x6e1a, 0x6dc7, 0x6dc5, 0x6dde, 0x6e0e, 0x6dbf, 0x6de0, 0x6e11, 0x6de6, 0x6ddd, 0x6dd9, 0x6e16, 0x6dab, 0x6e0c, 0x6dae, 0x6e2b, 0x6e6e, 0x6e4e, 0x6e6b, 0x6eb2, 0x6e5f, 0x6e86, 0x6e53, 0x6e54, 0x6e32, 0x6e25, 0x6e44, 0x6edf, 0x6eb1, 0x6e98, 0x6ee0, 0x6f2d, 0x6ee2, 0x6ea5, 0x6ea7, 0x6ebd, 0x6ebb, 0x6eb7, 0x6ed7, 0x6eb4, 0x6ecf, 0x6e8f, 0x6ec2, 0x6e9f, 0x6f62, 0x6f46, 0x6f47, 0x6f24, 0x6f15, 0x6ef9, 0x6f2f, 0x6f36, 0x6f4b, 0x6f74, 0x6f2a, 0x6f09, 0x6f29, 0x6f89, 0x6f8d, 0x6f8c, 0x6f78, 0x6f72, 0x6f7c, 0x6f7a, 0x6fd1, 94, 0x6521, 0x6fc9, 0x6fa7, 0x6fb9, 0x6fb6, 0x6fc2, 0x6fe1, 0x6fee, 0x6fde, 0x6fe0, 0x6fef, 0x701a, 0x7023, 0x701b, 0x7039, 0x7035, 0x704f, 0x705e, 0x5b80, 0x5b84, 0x5b95, 0x5b93, 0x5ba5, 0x5bb8, 0x752f, 0x9a9e, 0x6434, 0x5be4, 0x5bee, 0x8930, 0x5bf0, 0x8e47, 0x8b07, 0x8fb6, 0x8fd3, 0x8fd5, 0x8fe5, 0x8fee, 0x8fe4, 0x8fe9, 0x8fe6, 0x8ff3, 0x8fe8, 0x9005, 0x9004, 0x900b, 0x9026, 0x9011, 0x900d, 0x9016, 0x9021, 0x9035, 0x9036, 0x902d, 0x902f, 0x9044, 0x9051, 0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905b, 0x66b9, 0x9074, 0x907d, 0x9082, 0x9088, 0x9083, 0x908b, 0x5f50, 0x5f57, 0x5f56, 0x5f58, 0x5c3b, 0x54ab, 0x5c50, 0x5c59, 0x5b71, 0x5c63, 0x5c66, 0x7fbc, 0x5f2a, 0x5f29, 0x5f2d, 0x8274, 0x5f3c, 0x9b3b, 0x5c6e, 0x5981, 0x5983, 0x598d, 0x59a9, 0x59aa, 0x59a3, 94, 0x6621, 0x5997, 0x59ca, 0x59ab, 0x599e, 0x59a4, 0x59d2, 0x59b2, 0x59af, 0x59d7, 0x59be, 0x5a05, 0x5a06, 0x59dd, 0x5a08, 0x59e3, 0x59d8, 0x59f9, 0x5a0c, 0x5a09, 0x5a32, 0x5a34, 0x5a11, 0x5a23, 0x5a13, 0x5a40, 0x5a67, 0x5a4a, 0x5a55, 0x5a3c, 0x5a62, 0x5a75, 0x80ec, 0x5aaa, 0x5a9b, 0x5a77, 0x5a7a, 0x5abe, 0x5aeb, 0x5ab2, 0x5ad2, 0x5ad4, 0x5ab8, 0x5ae0, 0x5ae3, 0x5af1, 0x5ad6, 0x5ae6, 0x5ad8, 0x5adc, 0x5b09, 0x5b17, 0x5b16, 0x5b32, 0x5b37, 0x5b40, 0x5c15, 0x5c1c, 0x5b5a, 0x5b65, 0x5b73, 0x5b51, 0x5b53, 0x5b62, 0x9a75, 0x9a77, 0x9a78, 0x9a7a, 0x9a7f, 0x9a7d, 0x9a80, 0x9a81, 0x9a85, 0x9a88, 0x9a8a, 0x9a90, 0x9a92, 0x9a93, 0x9a96, 0x9a98, 0x9a9b, 0x9a9c, 0x9a9d, 0x9a9f, 0x9aa0, 0x9aa2, 0x9aa3, 0x9aa5, 0x9aa7, 0x7e9f, 0x7ea1, 0x7ea3, 0x7ea5, 0x7ea8, 0x7ea9, 94, 0x6721, 0x7ead, 0x7eb0, 0x7ebe, 0x7ec0, 0x7ec1, 0x7ec2, 0x7ec9, 0x7ecb, 0x7ecc, 0x7ed0, 0x7ed4, 0x7ed7, 0x7edb, 0x7ee0, 0x7ee1, 0x7ee8, 0x7eeb, 0x7eee, 0x7eef, 0x7ef1, 0x7ef2, 0x7f0d, 0x7ef6, 0x7efa, 0x7efb, 0x7efe, 0x7f01, 0x7f02, 0x7f03, 0x7f07, 0x7f08, 0x7f0b, 0x7f0c, 0x7f0f, 0x7f11, 0x7f12, 0x7f17, 0x7f19, 0x7f1c, 0x7f1b, 0x7f1f, 0x7f21, 0x7f22, 0x7f23, 0x7f24, 0x7f25, 0x7f26, 0x7f27, 0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2f, 0x7f30, 0x7f31, 0x7f32, 0x7f33, 0x7f35, 0x5e7a, 0x757f, 0x5ddb, 0x753e, 0x9095, 0x738e, 0x7391, 0x73ae, 0x73a2, 0x739f, 0x73cf, 0x73c2, 0x73d1, 0x73b7, 0x73b3, 0x73c0, 0x73c9, 0x73c8, 0x73e5, 0x73d9, 0x987c, 0x740a, 0x73e9, 0x73e7, 0x73de, 0x73ba, 0x73f2, 0x740f, 0x742a, 0x745b, 0x7426, 0x7425, 0x7428, 0x7430, 0x742e, 0x742c, 94, 0x6821, 0x741b, 0x741a, 0x7441, 0x745c, 0x7457, 0x7455, 0x7459, 0x7477, 0x746d, 0x747e, 0x749c, 0x748e, 0x7480, 0x7481, 0x7487, 0x748b, 0x749e, 0x74a8, 0x74a9, 0x7490, 0x74a7, 0x74d2, 0x74ba, 0x97ea, 0x97eb, 0x97ec, 0x674c, 0x6753, 0x675e, 0x6748, 0x6769, 0x67a5, 0x6787, 0x676a, 0x6773, 0x6798, 0x67a7, 0x6775, 0x67a8, 0x679e, 0x67ad, 0x678b, 0x6777, 0x677c, 0x67f0, 0x6809, 0x67d8, 0x680a, 0x67e9, 0x67b0, 0x680c, 0x67d9, 0x67b5, 0x67da, 0x67b3, 0x67dd, 0x6800, 0x67c3, 0x67b8, 0x67e2, 0x680e, 0x67c1, 0x67fd, 0x6832, 0x6833, 0x6860, 0x6861, 0x684e, 0x6862, 0x6844, 0x6864, 0x6883, 0x681d, 0x6855, 0x6866, 0x6841, 0x6867, 0x6840, 0x683e, 0x684a, 0x6849, 0x6829, 0x68b5, 0x688f, 0x6874, 0x6877, 0x6893, 0x686b, 0x68c2, 0x696e, 0x68fc, 0x691f, 0x6920, 0x68f9, 94, 0x6921, 0x6924, 0x68f0, 0x690b, 0x6901, 0x6957, 0x68e3, 0x6910, 0x6971, 0x6939, 0x6960, 0x6942, 0x695d, 0x6984, 0x696b, 0x6980, 0x6998, 0x6978, 0x6934, 0x69cc, 0x6987, 0x6988, 0x69ce, 0x6989, 0x6966, 0x6963, 0x6979, 0x699b, 0x69a7, 0x69bb, 0x69ab, 0x69ad, 0x69d4, 0x69b1, 0x69c1, 0x69ca, 0x69df, 0x6995, 0x69e0, 0x698d, 0x69ff, 0x6a2f, 0x69ed, 0x6a17, 0x6a18, 0x6a65, 0x69f2, 0x6a44, 0x6a3e, 0x6aa0, 0x6a50, 0x6a5b, 0x6a35, 0x6a8e, 0x6a79, 0x6a3d, 0x6a28, 0x6a58, 0x6a7c, 0x6a91, 0x6a90, 0x6aa9, 0x6a97, 0x6aab, 0x7337, 0x7352, 0x6b81, 0x6b82, 0x6b87, 0x6b84, 0x6b92, 0x6b93, 0x6b8d, 0x6b9a, 0x6b9b, 0x6ba1, 0x6baa, 0x8f6b, 0x8f6d, 0x8f71, 0x8f72, 0x8f73, 0x8f75, 0x8f76, 0x8f78, 0x8f77, 0x8f79, 0x8f7a, 0x8f7c, 0x8f7e, 0x8f81, 0x8f82, 0x8f84, 0x8f87, 0x8f8b, 94, 0x6a21, 0x8f8d, 0x8f8e, 0x8f8f, 0x8f98, 0x8f9a, 0x8ece, 0x620b, 0x6217, 0x621b, 0x621f, 0x6222, 0x6221, 0x6225, 0x6224, 0x622c, 0x81e7, 0x74ef, 0x74f4, 0x74ff, 0x750f, 0x7511, 0x7513, 0x6534, 0x65ee, 0x65ef, 0x65f0, 0x660a, 0x6619, 0x6772, 0x6603, 0x6615, 0x6600, 0x7085, 0x66f7, 0x661d, 0x6634, 0x6631, 0x6636, 0x6635, 0x8006, 0x665f, 0x6654, 0x6641, 0x664f, 0x6656, 0x6661, 0x6657, 0x6677, 0x6684, 0x668c, 0x66a7, 0x669d, 0x66be, 0x66db, 0x66dc, 0x66e6, 0x66e9, 0x8d32, 0x8d33, 0x8d36, 0x8d3b, 0x8d3d, 0x8d40, 0x8d45, 0x8d46, 0x8d48, 0x8d49, 0x8d47, 0x8d4d, 0x8d55, 0x8d59, 0x89c7, 0x89ca, 0x89cb, 0x89cc, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x726e, 0x729f, 0x725d, 0x7266, 0x726f, 0x727e, 0x727f, 0x7284, 0x728b, 0x728d, 0x728f, 0x7292, 0x6308, 0x6332, 0x63b0, 94, 0x6b21, 0x643f, 0x64d8, 0x8004, 0x6bea, 0x6bf3, 0x6bfd, 0x6bf5, 0x6bf9, 0x6c05, 0x6c07, 0x6c06, 0x6c0d, 0x6c15, 0x6c18, 0x6c19, 0x6c1a, 0x6c21, 0x6c29, 0x6c24, 0x6c2a, 0x6c32, 0x6535, 0x6555, 0x656b, 0x724d, 0x7252, 0x7256, 0x7230, 0x8662, 0x5216, 0x809f, 0x809c, 0x8093, 0x80bc, 0x670a, 0x80bd, 0x80b1, 0x80ab, 0x80ad, 0x80b4, 0x80b7, 0x80e7, 0x80e8, 0x80e9, 0x80ea, 0x80db, 0x80c2, 0x80c4, 0x80d9, 0x80cd, 0x80d7, 0x6710, 0x80dd, 0x80eb, 0x80f1, 0x80f4, 0x80ed, 0x810d, 0x810e, 0x80f2, 0x80fc, 0x6715, 0x8112, 0x8c5a, 0x8136, 0x811e, 0x812c, 0x8118, 0x8132, 0x8148, 0x814c, 0x8153, 0x8174, 0x8159, 0x815a, 0x8171, 0x8160, 0x8169, 0x817c, 0x817d, 0x816d, 0x8167, 0x584d, 0x5ab5, 0x8188, 0x8182, 0x8191, 0x6ed5, 0x81a3, 0x81aa, 0x81cc, 0x6726, 0x81ca, 0x81bb, 94, 0x6c21, 0x81c1, 0x81a6, 0x6b24, 0x6b37, 0x6b39, 0x6b43, 0x6b46, 0x6b59, 0x98d1, 0x98d2, 0x98d3, 0x98d5, 0x98d9, 0x98da, 0x6bb3, 0x5f40, 0x6bc2, 0x89f3, 0x6590, 0x9f51, 0x6593, 0x65bc, 0x65c6, 0x65c4, 0x65c3, 0x65cc, 0x65ce, 0x65d2, 0x65d6, 0x7080, 0x709c, 0x7096, 0x709d, 0x70bb, 0x70c0, 0x70b7, 0x70ab, 0x70b1, 0x70e8, 0x70ca, 0x7110, 0x7113, 0x7116, 0x712f, 0x7131, 0x7173, 0x715c, 0x7168, 0x7145, 0x7172, 0x714a, 0x7178, 0x717a, 0x7198, 0x71b3, 0x71b5, 0x71a8, 0x71a0, 0x71e0, 0x71d4, 0x71e7, 0x71f9, 0x721d, 0x7228, 0x706c, 0x7118, 0x7166, 0x71b9, 0x623e, 0x623d, 0x6243, 0x6248, 0x6249, 0x793b, 0x7940, 0x7946, 0x7949, 0x795b, 0x795c, 0x7953, 0x795a, 0x7962, 0x7957, 0x7960, 0x796f, 0x7967, 0x797a, 0x7985, 0x798a, 0x799a, 0x79a7, 0x79b3, 0x5fd1, 0x5fd0, 94, 0x6d21, 0x603c, 0x605d, 0x605a, 0x6067, 0x6041, 0x6059, 0x6063, 0x60ab, 0x6106, 0x610d, 0x615d, 0x61a9, 0x619d, 0x61cb, 0x61d1, 0x6206, 0x8080, 0x807f, 0x6c93, 0x6cf6, 0x6dfc, 0x77f6, 0x77f8, 0x7800, 0x7809, 0x7817, 0x7818, 0x7811, 0x65ab, 0x782d, 0x781c, 0x781d, 0x7839, 0x783a, 0x783b, 0x781f, 0x783c, 0x7825, 0x782c, 0x7823, 0x7829, 0x784e, 0x786d, 0x7856, 0x7857, 0x7826, 0x7850, 0x7847, 0x784c, 0x786a, 0x789b, 0x7893, 0x789a, 0x7887, 0x789c, 0x78a1, 0x78a3, 0x78b2, 0x78b9, 0x78a5, 0x78d4, 0x78d9, 0x78c9, 0x78ec, 0x78f2, 0x7905, 0x78f4, 0x7913, 0x7924, 0x791e, 0x7934, 0x9f9b, 0x9ef9, 0x9efb, 0x9efc, 0x76f1, 0x7704, 0x770d, 0x76f9, 0x7707, 0x7708, 0x771a, 0x7722, 0x7719, 0x772d, 0x7726, 0x7735, 0x7738, 0x7750, 0x7751, 0x7747, 0x7743, 0x775a, 0x7768, 94, 0x6e21, 0x7762, 0x7765, 0x777f, 0x778d, 0x777d, 0x7780, 0x778c, 0x7791, 0x779f, 0x77a0, 0x77b0, 0x77b5, 0x77bd, 0x753a, 0x7540, 0x754e, 0x754b, 0x7548, 0x755b, 0x7572, 0x7579, 0x7583, 0x7f58, 0x7f61, 0x7f5f, 0x8a48, 0x7f68, 0x7f74, 0x7f71, 0x7f79, 0x7f81, 0x7f7e, 0x76cd, 0x76e5, 0x8832, 0x9485, 0x9486, 0x9487, 0x948b, 0x948a, 0x948c, 0x948d, 0x948f, 0x9490, 0x9494, 0x9497, 0x9495, 0x949a, 0x949b, 0x949c, 0x94a3, 0x94a4, 0x94ab, 0x94aa, 0x94ad, 0x94ac, 0x94af, 0x94b0, 0x94b2, 0x94b4, 0x94b6, 0x94b7, 0x94b8, 0x94b9, 0x94ba, 0x94bc, 0x94bd, 0x94bf, 0x94c4, 0x94c8, 0x94c9, 0x94ca, 0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94d0, 0x94d1, 0x94d2, 0x94d5, 0x94d6, 0x94d7, 0x94d9, 0x94d8, 0x94db, 0x94de, 0x94df, 0x94e0, 0x94e2, 0x94e4, 0x94e5, 0x94e7, 0x94e8, 0x94ea, 94, 0x6f21, 0x94e9, 0x94eb, 0x94ee, 0x94ef, 0x94f3, 0x94f4, 0x94f5, 0x94f7, 0x94f9, 0x94fc, 0x94fd, 0x94ff, 0x9503, 0x9502, 0x9506, 0x9507, 0x9509, 0x950a, 0x950d, 0x950e, 0x950f, 0x9512, 0x9513, 0x9514, 0x9515, 0x9516, 0x9518, 0x951b, 0x951d, 0x951e, 0x951f, 0x9522, 0x952a, 0x952b, 0x9529, 0x952c, 0x9531, 0x9532, 0x9534, 0x9536, 0x9537, 0x9538, 0x953c, 0x953e, 0x953f, 0x9542, 0x9535, 0x9544, 0x9545, 0x9546, 0x9549, 0x954c, 0x954e, 0x954f, 0x9552, 0x9553, 0x9554, 0x9556, 0x9557, 0x9558, 0x9559, 0x955b, 0x955e, 0x955f, 0x955d, 0x9561, 0x9562, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568, 0x9569, 0x956a, 0x956b, 0x956c, 0x956f, 0x9571, 0x9572, 0x9573, 0x953a, 0x77e7, 0x77ec, 0x96c9, 0x79d5, 0x79ed, 0x79e3, 0x79eb, 0x7a06, 0x5d47, 0x7a03, 0x7a02, 0x7a1e, 0x7a14, 94, 0x7021, 0x7a39, 0x7a37, 0x7a51, 0x9ecf, 0x99a5, 0x7a70, 0x7688, 0x768e, 0x7693, 0x7699, 0x76a4, 0x74de, 0x74e0, 0x752c, 0x9e20, 0x9e22, 0x9e28, 0x9e29, 0x9e2a, 0x9e2b, 0x9e2c, 0x9e32, 0x9e31, 0x9e36, 0x9e38, 0x9e37, 0x9e39, 0x9e3a, 0x9e3e, 0x9e41, 0x9e42, 0x9e44, 0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4b, 0x9e4c, 0x9e4e, 0x9e51, 0x9e55, 0x9e57, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5e, 0x9e63, 0x9e66, 0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e71, 0x9e6d, 0x9e73, 0x7592, 0x7594, 0x7596, 0x75a0, 0x759d, 0x75ac, 0x75a3, 0x75b3, 0x75b4, 0x75b8, 0x75c4, 0x75b1, 0x75b0, 0x75c3, 0x75c2, 0x75d6, 0x75cd, 0x75e3, 0x75e8, 0x75e6, 0x75e4, 0x75eb, 0x75e7, 0x7603, 0x75f1, 0x75fc, 0x75ff, 0x7610, 0x7600, 0x7605, 0x760c, 0x7617, 0x760a, 0x7625, 0x7618, 0x7615, 0x7619, 94, 0x7121, 0x761b, 0x763c, 0x7622, 0x7620, 0x7640, 0x762d, 0x7630, 0x763f, 0x7635, 0x7643, 0x763e, 0x7633, 0x764d, 0x765e, 0x7654, 0x765c, 0x7656, 0x766b, 0x766f, 0x7fca, 0x7ae6, 0x7a78, 0x7a79, 0x7a80, 0x7a86, 0x7a88, 0x7a95, 0x7aa6, 0x7aa0, 0x7aac, 0x7aa8, 0x7aad, 0x7ab3, 0x8864, 0x8869, 0x8872, 0x887d, 0x887f, 0x8882, 0x88a2, 0x88c6, 0x88b7, 0x88bc, 0x88c9, 0x88e2, 0x88ce, 0x88e3, 0x88e5, 0x88f1, 0x891a, 0x88fc, 0x88e8, 0x88fe, 0x88f0, 0x8921, 0x8919, 0x8913, 0x891b, 0x890a, 0x8934, 0x892b, 0x8936, 0x8941, 0x8966, 0x897b, 0x758b, 0x80e5, 0x76b2, 0x76b4, 0x77dc, 0x8012, 0x8014, 0x8016, 0x801c, 0x8020, 0x8022, 0x8025, 0x8026, 0x8027, 0x8029, 0x8028, 0x8031, 0x800b, 0x8035, 0x8043, 0x8046, 0x804d, 0x8052, 0x8069, 0x8071, 0x8983, 0x9878, 0x9880, 0x9883, 94, 0x7221, 0x9889, 0x988c, 0x988d, 0x988f, 0x9894, 0x989a, 0x989b, 0x989e, 0x989f, 0x98a1, 0x98a2, 0x98a5, 0x98a6, 0x864d, 0x8654, 0x866c, 0x866e, 0x867f, 0x867a, 0x867c, 0x867b, 0x86a8, 0x868d, 0x868b, 0x86ac, 0x869d, 0x86a7, 0x86a3, 0x86aa, 0x8693, 0x86a9, 0x86b6, 0x86c4, 0x86b5, 0x86ce, 0x86b0, 0x86ba, 0x86b1, 0x86af, 0x86c9, 0x86cf, 0x86b4, 0x86e9, 0x86f1, 0x86f2, 0x86ed, 0x86f3, 0x86d0, 0x8713, 0x86de, 0x86f4, 0x86df, 0x86d8, 0x86d1, 0x8703, 0x8707, 0x86f8, 0x8708, 0x870a, 0x870d, 0x8709, 0x8723, 0x873b, 0x871e, 0x8725, 0x872e, 0x871a, 0x873e, 0x8748, 0x8734, 0x8731, 0x8729, 0x8737, 0x873f, 0x8782, 0x8722, 0x877d, 0x877e, 0x877b, 0x8760, 0x8770, 0x874c, 0x876e, 0x878b, 0x8753, 0x8763, 0x877c, 0x8764, 0x8759, 0x8765, 0x8793, 0x87af, 0x87a8, 0x87d2, 94, 0x7321, 0x87c6, 0x8788, 0x8785, 0x87ad, 0x8797, 0x8783, 0x87ab, 0x87e5, 0x87ac, 0x87b5, 0x87b3, 0x87cb, 0x87d3, 0x87bd, 0x87d1, 0x87c0, 0x87ca, 0x87db, 0x87ea, 0x87e0, 0x87ee, 0x8816, 0x8813, 0x87fe, 0x880a, 0x881b, 0x8821, 0x8839, 0x883c, 0x7f36, 0x7f42, 0x7f44, 0x7f45, 0x8210, 0x7afa, 0x7afd, 0x7b08, 0x7b03, 0x7b04, 0x7b15, 0x7b0a, 0x7b2b, 0x7b0f, 0x7b47, 0x7b38, 0x7b2a, 0x7b19, 0x7b2e, 0x7b31, 0x7b20, 0x7b25, 0x7b24, 0x7b33, 0x7b3e, 0x7b1e, 0x7b58, 0x7b5a, 0x7b45, 0x7b75, 0x7b4c, 0x7b5d, 0x7b60, 0x7b6e, 0x7b7b, 0x7b62, 0x7b72, 0x7b71, 0x7b90, 0x7ba6, 0x7ba7, 0x7bb8, 0x7bac, 0x7b9d, 0x7ba8, 0x7b85, 0x7baa, 0x7b9c, 0x7ba2, 0x7bab, 0x7bb4, 0x7bd1, 0x7bc1, 0x7bcc, 0x7bdd, 0x7bda, 0x7be5, 0x7be6, 0x7bea, 0x7c0c, 0x7bfe, 0x7bfc, 0x7c0f, 0x7c16, 0x7c0b, 94, 0x7421, 0x7c1f, 0x7c2a, 0x7c26, 0x7c38, 0x7c41, 0x7c40, 0x81fe, 0x8201, 0x8202, 0x8204, 0x81ec, 0x8844, 0x8221, 0x8222, 0x8223, 0x822d, 0x822f, 0x8228, 0x822b, 0x8238, 0x823b, 0x8233, 0x8234, 0x823e, 0x8244, 0x8249, 0x824b, 0x824f, 0x825a, 0x825f, 0x8268, 0x887e, 0x8885, 0x8888, 0x88d8, 0x88df, 0x895e, 0x7f9d, 0x7f9f, 0x7fa7, 0x7faf, 0x7fb0, 0x7fb2, 0x7c7c, 0x6549, 0x7c91, 0x7c9d, 0x7c9c, 0x7c9e, 0x7ca2, 0x7cb2, 0x7cbc, 0x7cbd, 0x7cc1, 0x7cc7, 0x7ccc, 0x7ccd, 0x7cc8, 0x7cc5, 0x7cd7, 0x7ce8, 0x826e, 0x66a8, 0x7fbf, 0x7fce, 0x7fd5, 0x7fe5, 0x7fe1, 0x7fe6, 0x7fe9, 0x7fee, 0x7ff3, 0x7cf8, 0x7d77, 0x7da6, 0x7dae, 0x7e47, 0x7e9b, 0x9eb8, 0x9eb4, 0x8d73, 0x8d84, 0x8d94, 0x8d91, 0x8db1, 0x8d67, 0x8d6d, 0x8c47, 0x8c49, 0x914a, 0x9150, 0x914e, 0x914f, 0x9164, 94, 0x7521, 0x9162, 0x9161, 0x9170, 0x9169, 0x916f, 0x917d, 0x917e, 0x9172, 0x9174, 0x9179, 0x918c, 0x9185, 0x9190, 0x918d, 0x9191, 0x91a2, 0x91a3, 0x91aa, 0x91ad, 0x91ae, 0x91af, 0x91b5, 0x91b4, 0x91ba, 0x8c55, 0x9e7e, 0x8db8, 0x8deb, 0x8e05, 0x8e59, 0x8e69, 0x8db5, 0x8dbf, 0x8dbc, 0x8dba, 0x8dc4, 0x8dd6, 0x8dd7, 0x8dda, 0x8dde, 0x8dce, 0x8dcf, 0x8ddb, 0x8dc6, 0x8dec, 0x8df7, 0x8df8, 0x8de3, 0x8df9, 0x8dfb, 0x8de4, 0x8e09, 0x8dfd, 0x8e14, 0x8e1d, 0x8e1f, 0x8e2c, 0x8e2e, 0x8e23, 0x8e2f, 0x8e3a, 0x8e40, 0x8e39, 0x8e35, 0x8e3d, 0x8e31, 0x8e49, 0x8e41, 0x8e42, 0x8e51, 0x8e52, 0x8e4a, 0x8e70, 0x8e76, 0x8e7c, 0x8e6f, 0x8e74, 0x8e85, 0x8e8f, 0x8e94, 0x8e90, 0x8e9c, 0x8e9e, 0x8c78, 0x8c82, 0x8c8a, 0x8c85, 0x8c98, 0x8c94, 0x659b, 0x89d6, 0x89de, 0x89da, 0x89dc, 94, 0x7621, 0x89e5, 0x89eb, 0x89ef, 0x8a3e, 0x8b26, 0x9753, 0x96e9, 0x96f3, 0x96ef, 0x9706, 0x9701, 0x9708, 0x970f, 0x970e, 0x972a, 0x972d, 0x9730, 0x973e, 0x9f80, 0x9f83, 0x9f85, 0x9f86, 0x9f87, 0x9f88, 0x9f89, 0x9f8a, 0x9f8c, 0x9efe, 0x9f0b, 0x9f0d, 0x96b9, 0x96bc, 0x96bd, 0x96ce, 0x96d2, 0x77bf, 0x96e0, 0x928e, 0x92ae, 0x92c8, 0x933e, 0x936a, 0x93ca, 0x938f, 0x943e, 0x946b, 0x9c7f, 0x9c82, 0x9c85, 0x9c86, 0x9c87, 0x9c88, 0x7a23, 0x9c8b, 0x9c8e, 0x9c90, 0x9c91, 0x9c92, 0x9c94, 0x9c95, 0x9c9a, 0x9c9b, 0x9c9e, 0x9c9f, 0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8, 0x9ca9, 0x9cab, 0x9cad, 0x9cae, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3, 0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd, 0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cca, 0x9ccb, 94, 0x7721, 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0, 0x9cd3, 0x9cd4, 0x9cd5, 0x9cd7, 0x9cd8, 0x9cd9, 0x9cdc, 0x9cdd, 0x9cdf, 0x9ce2, 0x977c, 0x9785, 0x9791, 0x9792, 0x9794, 0x97af, 0x97ab, 0x97a3, 0x97b2, 0x97b4, 0x9ab1, 0x9ab0, 0x9ab7, 0x9e58, 0x9ab6, 0x9aba, 0x9abc, 0x9ac1, 0x9ac0, 0x9ac5, 0x9ac2, 0x9acb, 0x9acc, 0x9ad1, 0x9b45, 0x9b43, 0x9b47, 0x9b49, 0x9b48, 0x9b4d, 0x9b51, 0x98e8, 0x990d, 0x992e, 0x9955, 0x9954, 0x9adf, 0x9ae1, 0x9ae6, 0x9aef, 0x9aeb, 0x9afb, 0x9aed, 0x9af9, 0x9b08, 0x9b0f, 0x9b13, 0x9b1f, 0x9b23, 0x9ebd, 0x9ebe, 0x7e3b, 0x9e82, 0x9e87, 0x9e88, 0x9e8b, 0x9e92, 0x93d6, 0x9e9d, 0x9e9f, 0x9edb, 0x9edc, 0x9edd, 0x9ee0, 0x9edf, 0x9ee2, 0x9ee9, 0x9ee7, 0x9ee5, 0x9eea, 0x9eef, 0x9f22, 0x9f2c, 0x9f2f, 0x9f39, 0x9f37, 0x9f3d, 0x9f3e, 0x9f44, 0 jade-1.2.1/lib/iso646-jis.h100444 764 764 1416 6604607564 12756 0ustar jjcjjc96, 0x0020, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x00a5, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x203e, 0x007f, 0 jade-1.2.1/lib/iso8859-2.h100444 764 764 1437 6604607564 12433 0ustar jjcjjc/* ISO 8859-2 */ 96, 0x0020, 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7, 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b, 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7, 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9, 0 jade-1.2.1/lib/iso8859-3.h100444 764 764 1470 6604607564 12431 0ustar jjcjjc/* ISO 8859-3 */ 5, 0x0020, 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 8, 0x0026, 0x0124, 0x00a7, 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 15, 0x002f, 0x017b, 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7, 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 4, 0x003f, 0x017c, 0x00c0, 0x00c1, 0x00c2, 12, 0x0044, 0x00c4, 0x010a, 0x0108, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 18, 0x0051, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7, 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df, 0x00e0, 0x00e1, 0x00e2, 12, 0x0064, 0x00e4, 0x010b, 0x0109, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 15, 0x0071, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7, 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9, 0 jade-1.2.1/lib/iso8859-4.h100444 764 764 1437 6604607564 12435 0ustar jjcjjc/* ISO 8859-4 */ 96, 0x0020, 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7, 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af, 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7, 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b, 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a, 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df, 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b, 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9, 0 jade-1.2.1/lib/iso8859-5.h100444 764 764 1437 6604607564 12436 0ustar jjcjjc/* ISO 8859-5 */ 96, 0x0020, 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f, 0 jade-1.2.1/lib/iso8859-6.h100444 764 764 772 6606574354 12422 0ustar jjcjjc/* ISO 8859-6 */ 1, 0x0020, 0x00a0, 1, 0x0024, 0x00a4, 2, 0x002c, 0x060c, 0x00ad, 1, 0x003b, 0x061b, 1, 0x003f, 0x061f, 26, 0x0041, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 0x0638, 0x0639, 0x063a, 19, 0x0060, 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, 0x0650, 0x0651, 0x0652, 0 jade-1.2.1/lib/iso8859-7.h100444 764 764 1434 6606574410 12430 0ustar jjcjjc/* ISO 8859-7 */ 4, 0x0020, 0x00a0, 0x02bd, 0x02bc, 0x00a3, 4, 0x0026, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 3, 0x002b, 0x00ab, 0x00ac, 0x00ad, 35, 0x002f, 0x2015, 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7, 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 44, 0x0053, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0 jade-1.2.1/lib/iso8859-8.h100444 764 764 1006 6606574410 12424 0ustar jjcjjc/* ISO 8859-8 */ 1, 0x0020, 0x00a0, 29, 0x0022, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x203e, 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 28, 0x005f, 0x2017, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0 jade-1.2.1/lib/iso8859-9.h100444 764 764 1437 6606574410 12435 0ustar jjcjjc/* ISO 8859-9 */ 96, 0x0020, 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff, 0 jade-1.2.1/lib/jis0201.h100444 764 764 1006 6606574410 12217 0ustar jjcjjc63, 0x0021, 0xff61, 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67, 0xff68, 0xff69, 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f, 0xff70, 0xff71, 0xff72, 0xff73, 0xff74, 0xff75, 0xff76, 0xff77, 0xff78, 0xff79, 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f, 0xff80, 0xff81, 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87, 0xff88, 0xff89, 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f, 0xff90, 0xff91, 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97, 0xff98, 0xff99, 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f, 0 jade-1.2.1/lib/jis0208.h100444 764 764 155375 6606574410 12311 0ustar jjcjjc94, 0x2121, 0x3000, 0x3001, 0x3002, 0xff0c, 0xff0e, 0x30fb, 0xff1a, 0xff1b, 0xff1f, 0xff01, 0x309b, 0x309c, 0x00b4, 0xff40, 0x00a8, 0xff3e, 0xffe3, 0xff3f, 0x30fd, 0x30fe, 0x309d, 0x309e, 0x3003, 0x4edd, 0x3005, 0x3006, 0x3007, 0x30fc, 0x2015, 0x2010, 0xff0f, 0x005c, 0x301c, 0x2016, 0xff5c, 0x2026, 0x2025, 0x2018, 0x2019, 0x201c, 0x201d, 0xff08, 0xff09, 0x3014, 0x3015, 0xff3b, 0xff3d, 0xff5b, 0xff5d, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e, 0x300f, 0x3010, 0x3011, 0xff0b, 0x2212, 0x00b1, 0x00d7, 0x00f7, 0xff1d, 0x2260, 0xff1c, 0xff1e, 0x2266, 0x2267, 0x221e, 0x2234, 0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xffe5, 0xff04, 0x00a2, 0x00a3, 0xff05, 0xff03, 0xff06, 0xff0a, 0xff20, 0x00a7, 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 14, 0x2221, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x203b, 0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 8, 0x223a, 0x2208, 0x220b, 0x2286, 0x2287, 0x2282, 0x2283, 0x222a, 0x2229, 7, 0x224a, 0x2227, 0x2228, 0x00ac, 0x21d2, 0x21d4, 0x2200, 0x2203, 15, 0x225c, 0x2220, 0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x226a, 0x226b, 0x221a, 0x223d, 0x221d, 0x2235, 0x222b, 0x222c, 8, 0x2272, 0x212b, 0x2030, 0x266f, 0x266d, 0x266a, 0x2020, 0x2021, 0x00b6, 1, 0x227e, 0x25ef, 10, 0x2330, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 26, 0x2341, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 26, 0x2361, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 83, 0x2421, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 86, 0x2521, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 24, 0x2621, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 24, 0x2641, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 33, 0x2721, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 33, 0x2751, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 32, 0x2821, 0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, 0x252c, 0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, 0x251b, 0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, 0x252f, 0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, 0x2542, 94, 0x3021, 0x4e9c, 0x5516, 0x5a03, 0x963f, 0x54c0, 0x611b, 0x6328, 0x59f6, 0x9022, 0x8475, 0x831c, 0x7a50, 0x60aa, 0x63e1, 0x6e25, 0x65ed, 0x8466, 0x82a6, 0x9bf5, 0x6893, 0x5727, 0x65a1, 0x6271, 0x5b9b, 0x59d0, 0x867b, 0x98f4, 0x7d62, 0x7dbe, 0x9b8e, 0x6216, 0x7c9f, 0x88b7, 0x5b89, 0x5eb5, 0x6309, 0x6697, 0x6848, 0x95c7, 0x978d, 0x674f, 0x4ee5, 0x4f0a, 0x4f4d, 0x4f9d, 0x5049, 0x56f2, 0x5937, 0x59d4, 0x5a01, 0x5c09, 0x60df, 0x610f, 0x6170, 0x6613, 0x6905, 0x70ba, 0x754f, 0x7570, 0x79fb, 0x7dad, 0x7def, 0x80c3, 0x840e, 0x8863, 0x8b02, 0x9055, 0x907a, 0x533b, 0x4e95, 0x4ea5, 0x57df, 0x80b2, 0x90c1, 0x78ef, 0x4e00, 0x58f1, 0x6ea2, 0x9038, 0x7a32, 0x8328, 0x828b, 0x9c2f, 0x5141, 0x5370, 0x54bd, 0x54e1, 0x56e0, 0x59fb, 0x5f15, 0x98f2, 0x6deb, 0x80e4, 0x852d, 94, 0x3121, 0x9662, 0x9670, 0x96a0, 0x97fb, 0x540b, 0x53f3, 0x5b87, 0x70cf, 0x7fbd, 0x8fc2, 0x96e8, 0x536f, 0x9d5c, 0x7aba, 0x4e11, 0x7893, 0x81fc, 0x6e26, 0x5618, 0x5504, 0x6b1d, 0x851a, 0x9c3b, 0x59e5, 0x53a9, 0x6d66, 0x74dc, 0x958f, 0x5642, 0x4e91, 0x904b, 0x96f2, 0x834f, 0x990c, 0x53e1, 0x55b6, 0x5b30, 0x5f71, 0x6620, 0x66f3, 0x6804, 0x6c38, 0x6cf3, 0x6d29, 0x745b, 0x76c8, 0x7a4e, 0x9834, 0x82f1, 0x885b, 0x8a60, 0x92ed, 0x6db2, 0x75ab, 0x76ca, 0x99c5, 0x60a6, 0x8b01, 0x8d8a, 0x95b2, 0x698e, 0x53ad, 0x5186, 0x5712, 0x5830, 0x5944, 0x5bb4, 0x5ef6, 0x6028, 0x63a9, 0x63f4, 0x6cbf, 0x6f14, 0x708e, 0x7114, 0x7159, 0x71d5, 0x733f, 0x7e01, 0x8276, 0x82d1, 0x8597, 0x9060, 0x925b, 0x9d1b, 0x5869, 0x65bc, 0x6c5a, 0x7525, 0x51f9, 0x592e, 0x5965, 0x5f80, 0x5fdc, 94, 0x3221, 0x62bc, 0x65fa, 0x6a2a, 0x6b27, 0x6bb4, 0x738b, 0x7fc1, 0x8956, 0x9d2c, 0x9d0e, 0x9ec4, 0x5ca1, 0x6c96, 0x837b, 0x5104, 0x5c4b, 0x61b6, 0x81c6, 0x6876, 0x7261, 0x4e59, 0x4ffa, 0x5378, 0x6069, 0x6e29, 0x7a4f, 0x97f3, 0x4e0b, 0x5316, 0x4eee, 0x4f55, 0x4f3d, 0x4fa1, 0x4f73, 0x52a0, 0x53ef, 0x5609, 0x590f, 0x5ac1, 0x5bb6, 0x5be1, 0x79d1, 0x6687, 0x679c, 0x67b6, 0x6b4c, 0x6cb3, 0x706b, 0x73c2, 0x798d, 0x79be, 0x7a3c, 0x7b87, 0x82b1, 0x82db, 0x8304, 0x8377, 0x83ef, 0x83d3, 0x8766, 0x8ab2, 0x5629, 0x8ca8, 0x8fe6, 0x904e, 0x971e, 0x868a, 0x4fc4, 0x5ce8, 0x6211, 0x7259, 0x753b, 0x81e5, 0x82bd, 0x86fe, 0x8cc0, 0x96c5, 0x9913, 0x99d5, 0x4ecb, 0x4f1a, 0x89e3, 0x56de, 0x584a, 0x58ca, 0x5efb, 0x5feb, 0x602a, 0x6094, 0x6062, 0x61d0, 0x6212, 0x62d0, 0x6539, 94, 0x3321, 0x9b41, 0x6666, 0x68b0, 0x6d77, 0x7070, 0x754c, 0x7686, 0x7d75, 0x82a5, 0x87f9, 0x958b, 0x968e, 0x8c9d, 0x51f1, 0x52be, 0x5916, 0x54b3, 0x5bb3, 0x5d16, 0x6168, 0x6982, 0x6daf, 0x788d, 0x84cb, 0x8857, 0x8a72, 0x93a7, 0x9ab8, 0x6d6c, 0x99a8, 0x86d9, 0x57a3, 0x67ff, 0x86ce, 0x920e, 0x5283, 0x5687, 0x5404, 0x5ed3, 0x62e1, 0x64b9, 0x683c, 0x6838, 0x6bbb, 0x7372, 0x78ba, 0x7a6b, 0x899a, 0x89d2, 0x8d6b, 0x8f03, 0x90ed, 0x95a3, 0x9694, 0x9769, 0x5b66, 0x5cb3, 0x697d, 0x984d, 0x984e, 0x639b, 0x7b20, 0x6a2b, 0x6a7f, 0x68b6, 0x9c0d, 0x6f5f, 0x5272, 0x559d, 0x6070, 0x62ec, 0x6d3b, 0x6e07, 0x6ed1, 0x845b, 0x8910, 0x8f44, 0x4e14, 0x9c39, 0x53f6, 0x691b, 0x6a3a, 0x9784, 0x682a, 0x515c, 0x7ac3, 0x84b2, 0x91dc, 0x938c, 0x565b, 0x9d28, 0x6822, 0x8305, 0x8431, 94, 0x3421, 0x7ca5, 0x5208, 0x82c5, 0x74e6, 0x4e7e, 0x4f83, 0x51a0, 0x5bd2, 0x520a, 0x52d8, 0x52e7, 0x5dfb, 0x559a, 0x582a, 0x59e6, 0x5b8c, 0x5b98, 0x5bdb, 0x5e72, 0x5e79, 0x60a3, 0x611f, 0x6163, 0x61be, 0x63db, 0x6562, 0x67d1, 0x6853, 0x68fa, 0x6b3e, 0x6b53, 0x6c57, 0x6f22, 0x6f97, 0x6f45, 0x74b0, 0x7518, 0x76e3, 0x770b, 0x7aff, 0x7ba1, 0x7c21, 0x7de9, 0x7f36, 0x7ff0, 0x809d, 0x8266, 0x839e, 0x89b3, 0x8acc, 0x8cab, 0x9084, 0x9451, 0x9593, 0x9591, 0x95a2, 0x9665, 0x97d3, 0x9928, 0x8218, 0x4e38, 0x542b, 0x5cb8, 0x5dcc, 0x73a9, 0x764c, 0x773c, 0x5ca9, 0x7feb, 0x8d0b, 0x96c1, 0x9811, 0x9854, 0x9858, 0x4f01, 0x4f0e, 0x5371, 0x559c, 0x5668, 0x57fa, 0x5947, 0x5b09, 0x5bc4, 0x5c90, 0x5e0c, 0x5e7e, 0x5fcc, 0x63ee, 0x673a, 0x65d7, 0x65e2, 0x671f, 0x68cb, 0x68c4, 94, 0x3521, 0x6a5f, 0x5e30, 0x6bc5, 0x6c17, 0x6c7d, 0x757f, 0x7948, 0x5b63, 0x7a00, 0x7d00, 0x5fbd, 0x898f, 0x8a18, 0x8cb4, 0x8d77, 0x8ecc, 0x8f1d, 0x98e2, 0x9a0e, 0x9b3c, 0x4e80, 0x507d, 0x5100, 0x5993, 0x5b9c, 0x622f, 0x6280, 0x64ec, 0x6b3a, 0x72a0, 0x7591, 0x7947, 0x7fa9, 0x87fb, 0x8abc, 0x8b70, 0x63ac, 0x83ca, 0x97a0, 0x5409, 0x5403, 0x55ab, 0x6854, 0x6a58, 0x8a70, 0x7827, 0x6775, 0x9ecd, 0x5374, 0x5ba2, 0x811a, 0x8650, 0x9006, 0x4e18, 0x4e45, 0x4ec7, 0x4f11, 0x53ca, 0x5438, 0x5bae, 0x5f13, 0x6025, 0x6551, 0x673d, 0x6c42, 0x6c72, 0x6ce3, 0x7078, 0x7403, 0x7a76, 0x7aae, 0x7b08, 0x7d1a, 0x7cfe, 0x7d66, 0x65e7, 0x725b, 0x53bb, 0x5c45, 0x5de8, 0x62d2, 0x62e0, 0x6319, 0x6e20, 0x865a, 0x8a31, 0x8ddd, 0x92f8, 0x6f01, 0x79a6, 0x9b5a, 0x4ea8, 0x4eab, 0x4eac, 94, 0x3621, 0x4f9b, 0x4fa0, 0x50d1, 0x5147, 0x7af6, 0x5171, 0x51f6, 0x5354, 0x5321, 0x537f, 0x53eb, 0x55ac, 0x5883, 0x5ce1, 0x5f37, 0x5f4a, 0x602f, 0x6050, 0x606d, 0x631f, 0x6559, 0x6a4b, 0x6cc1, 0x72c2, 0x72ed, 0x77ef, 0x80f8, 0x8105, 0x8208, 0x854e, 0x90f7, 0x93e1, 0x97ff, 0x9957, 0x9a5a, 0x4ef0, 0x51dd, 0x5c2d, 0x6681, 0x696d, 0x5c40, 0x66f2, 0x6975, 0x7389, 0x6850, 0x7c81, 0x50c5, 0x52e4, 0x5747, 0x5dfe, 0x9326, 0x65a4, 0x6b23, 0x6b3d, 0x7434, 0x7981, 0x79bd, 0x7b4b, 0x7dca, 0x82b9, 0x83cc, 0x887f, 0x895f, 0x8b39, 0x8fd1, 0x91d1, 0x541f, 0x9280, 0x4e5d, 0x5036, 0x53e5, 0x533a, 0x72d7, 0x7396, 0x77e9, 0x82e6, 0x8eaf, 0x99c6, 0x99c8, 0x99d2, 0x5177, 0x611a, 0x865e, 0x55b0, 0x7a7a, 0x5076, 0x5bd3, 0x9047, 0x9685, 0x4e32, 0x6adb, 0x91e7, 0x5c51, 0x5c48, 94, 0x3721, 0x6398, 0x7a9f, 0x6c93, 0x9774, 0x8f61, 0x7aaa, 0x718a, 0x9688, 0x7c82, 0x6817, 0x7e70, 0x6851, 0x936c, 0x52f2, 0x541b, 0x85ab, 0x8a13, 0x7fa4, 0x8ecd, 0x90e1, 0x5366, 0x8888, 0x7941, 0x4fc2, 0x50be, 0x5211, 0x5144, 0x5553, 0x572d, 0x73ea, 0x578b, 0x5951, 0x5f62, 0x5f84, 0x6075, 0x6176, 0x6167, 0x61a9, 0x63b2, 0x643a, 0x656c, 0x666f, 0x6842, 0x6e13, 0x7566, 0x7a3d, 0x7cfb, 0x7d4c, 0x7d99, 0x7e4b, 0x7f6b, 0x830e, 0x834a, 0x86cd, 0x8a08, 0x8a63, 0x8b66, 0x8efd, 0x981a, 0x9d8f, 0x82b8, 0x8fce, 0x9be8, 0x5287, 0x621f, 0x6483, 0x6fc0, 0x9699, 0x6841, 0x5091, 0x6b20, 0x6c7a, 0x6f54, 0x7a74, 0x7d50, 0x8840, 0x8a23, 0x6708, 0x4ef6, 0x5039, 0x5026, 0x5065, 0x517c, 0x5238, 0x5263, 0x55a7, 0x570f, 0x5805, 0x5acc, 0x5efa, 0x61b2, 0x61f8, 0x62f3, 0x6372, 94, 0x3821, 0x691c, 0x6a29, 0x727d, 0x72ac, 0x732e, 0x7814, 0x786f, 0x7d79, 0x770c, 0x80a9, 0x898b, 0x8b19, 0x8ce2, 0x8ed2, 0x9063, 0x9375, 0x967a, 0x9855, 0x9a13, 0x9e78, 0x5143, 0x539f, 0x53b3, 0x5e7b, 0x5f26, 0x6e1b, 0x6e90, 0x7384, 0x73fe, 0x7d43, 0x8237, 0x8a00, 0x8afa, 0x9650, 0x4e4e, 0x500b, 0x53e4, 0x547c, 0x56fa, 0x59d1, 0x5b64, 0x5df1, 0x5eab, 0x5f27, 0x6238, 0x6545, 0x67af, 0x6e56, 0x72d0, 0x7cca, 0x88b4, 0x80a1, 0x80e1, 0x83f0, 0x864e, 0x8a87, 0x8de8, 0x9237, 0x96c7, 0x9867, 0x9f13, 0x4e94, 0x4e92, 0x4f0d, 0x5348, 0x5449, 0x543e, 0x5a2f, 0x5f8c, 0x5fa1, 0x609f, 0x68a7, 0x6a8e, 0x745a, 0x7881, 0x8a9e, 0x8aa4, 0x8b77, 0x9190, 0x4e5e, 0x9bc9, 0x4ea4, 0x4f7c, 0x4faf, 0x5019, 0x5016, 0x5149, 0x516c, 0x529f, 0x52b9, 0x52fe, 0x539a, 0x53e3, 0x5411, 94, 0x3921, 0x540e, 0x5589, 0x5751, 0x57a2, 0x597d, 0x5b54, 0x5b5d, 0x5b8f, 0x5de5, 0x5de7, 0x5df7, 0x5e78, 0x5e83, 0x5e9a, 0x5eb7, 0x5f18, 0x6052, 0x614c, 0x6297, 0x62d8, 0x63a7, 0x653b, 0x6602, 0x6643, 0x66f4, 0x676d, 0x6821, 0x6897, 0x69cb, 0x6c5f, 0x6d2a, 0x6d69, 0x6e2f, 0x6e9d, 0x7532, 0x7687, 0x786c, 0x7a3f, 0x7ce0, 0x7d05, 0x7d18, 0x7d5e, 0x7db1, 0x8015, 0x8003, 0x80af, 0x80b1, 0x8154, 0x818f, 0x822a, 0x8352, 0x884c, 0x8861, 0x8b1b, 0x8ca2, 0x8cfc, 0x90ca, 0x9175, 0x9271, 0x783f, 0x92fc, 0x95a4, 0x964d, 0x9805, 0x9999, 0x9ad8, 0x9d3b, 0x525b, 0x52ab, 0x53f7, 0x5408, 0x58d5, 0x62f7, 0x6fe0, 0x8c6a, 0x8f5f, 0x9eb9, 0x514b, 0x523b, 0x544a, 0x56fd, 0x7a40, 0x9177, 0x9d60, 0x9ed2, 0x7344, 0x6f09, 0x8170, 0x7511, 0x5ffd, 0x60da, 0x9aa8, 0x72db, 0x8fbc, 94, 0x3a21, 0x6b64, 0x9803, 0x4eca, 0x56f0, 0x5764, 0x58be, 0x5a5a, 0x6068, 0x61c7, 0x660f, 0x6606, 0x6839, 0x68b1, 0x6df7, 0x75d5, 0x7d3a, 0x826e, 0x9b42, 0x4e9b, 0x4f50, 0x53c9, 0x5506, 0x5d6f, 0x5de6, 0x5dee, 0x67fb, 0x6c99, 0x7473, 0x7802, 0x8a50, 0x9396, 0x88df, 0x5750, 0x5ea7, 0x632b, 0x50b5, 0x50ac, 0x518d, 0x6700, 0x54c9, 0x585e, 0x59bb, 0x5bb0, 0x5f69, 0x624d, 0x63a1, 0x683d, 0x6b73, 0x6e08, 0x707d, 0x91c7, 0x7280, 0x7815, 0x7826, 0x796d, 0x658e, 0x7d30, 0x83dc, 0x88c1, 0x8f09, 0x969b, 0x5264, 0x5728, 0x6750, 0x7f6a, 0x8ca1, 0x51b4, 0x5742, 0x962a, 0x583a, 0x698a, 0x80b4, 0x54b2, 0x5d0e, 0x57fc, 0x7895, 0x9dfa, 0x4f5c, 0x524a, 0x548b, 0x643e, 0x6628, 0x6714, 0x67f5, 0x7a84, 0x7b56, 0x7d22, 0x932f, 0x685c, 0x9bad, 0x7b39, 0x5319, 0x518a, 0x5237, 94, 0x3b21, 0x5bdf, 0x62f6, 0x64ae, 0x64e6, 0x672d, 0x6bba, 0x85a9, 0x96d1, 0x7690, 0x9bd6, 0x634c, 0x9306, 0x9bab, 0x76bf, 0x6652, 0x4e09, 0x5098, 0x53c2, 0x5c71, 0x60e8, 0x6492, 0x6563, 0x685f, 0x71e6, 0x73ca, 0x7523, 0x7b97, 0x7e82, 0x8695, 0x8b83, 0x8cdb, 0x9178, 0x9910, 0x65ac, 0x66ab, 0x6b8b, 0x4ed5, 0x4ed4, 0x4f3a, 0x4f7f, 0x523a, 0x53f8, 0x53f2, 0x55e3, 0x56db, 0x58eb, 0x59cb, 0x59c9, 0x59ff, 0x5b50, 0x5c4d, 0x5e02, 0x5e2b, 0x5fd7, 0x601d, 0x6307, 0x652f, 0x5b5c, 0x65af, 0x65bd, 0x65e8, 0x679d, 0x6b62, 0x6b7b, 0x6c0f, 0x7345, 0x7949, 0x79c1, 0x7cf8, 0x7d19, 0x7d2b, 0x80a2, 0x8102, 0x81f3, 0x8996, 0x8a5e, 0x8a69, 0x8a66, 0x8a8c, 0x8aee, 0x8cc7, 0x8cdc, 0x96cc, 0x98fc, 0x6b6f, 0x4e8b, 0x4f3c, 0x4f8d, 0x5150, 0x5b57, 0x5bfa, 0x6148, 0x6301, 0x6642, 94, 0x3c21, 0x6b21, 0x6ecb, 0x6cbb, 0x723e, 0x74bd, 0x75d4, 0x78c1, 0x793a, 0x800c, 0x8033, 0x81ea, 0x8494, 0x8f9e, 0x6c50, 0x9e7f, 0x5f0f, 0x8b58, 0x9d2b, 0x7afa, 0x8ef8, 0x5b8d, 0x96eb, 0x4e03, 0x53f1, 0x57f7, 0x5931, 0x5ac9, 0x5ba4, 0x6089, 0x6e7f, 0x6f06, 0x75be, 0x8cea, 0x5b9f, 0x8500, 0x7be0, 0x5072, 0x67f4, 0x829d, 0x5c61, 0x854a, 0x7e1e, 0x820e, 0x5199, 0x5c04, 0x6368, 0x8d66, 0x659c, 0x716e, 0x793e, 0x7d17, 0x8005, 0x8b1d, 0x8eca, 0x906e, 0x86c7, 0x90aa, 0x501f, 0x52fa, 0x5c3a, 0x6753, 0x707c, 0x7235, 0x914c, 0x91c8, 0x932b, 0x82e5, 0x5bc2, 0x5f31, 0x60f9, 0x4e3b, 0x53d6, 0x5b88, 0x624b, 0x6731, 0x6b8a, 0x72e9, 0x73e0, 0x7a2e, 0x816b, 0x8da3, 0x9152, 0x9996, 0x5112, 0x53d7, 0x546a, 0x5bff, 0x6388, 0x6a39, 0x7dac, 0x9700, 0x56da, 0x53ce, 0x5468, 94, 0x3d21, 0x5b97, 0x5c31, 0x5dde, 0x4fee, 0x6101, 0x62fe, 0x6d32, 0x79c0, 0x79cb, 0x7d42, 0x7e4d, 0x7fd2, 0x81ed, 0x821f, 0x8490, 0x8846, 0x8972, 0x8b90, 0x8e74, 0x8f2f, 0x9031, 0x914b, 0x916c, 0x96c6, 0x919c, 0x4ec0, 0x4f4f, 0x5145, 0x5341, 0x5f93, 0x620e, 0x67d4, 0x6c41, 0x6e0b, 0x7363, 0x7e26, 0x91cd, 0x9283, 0x53d4, 0x5919, 0x5bbf, 0x6dd1, 0x795d, 0x7e2e, 0x7c9b, 0x587e, 0x719f, 0x51fa, 0x8853, 0x8ff0, 0x4fca, 0x5cfb, 0x6625, 0x77ac, 0x7ae3, 0x821c, 0x99ff, 0x51c6, 0x5faa, 0x65ec, 0x696f, 0x6b89, 0x6df3, 0x6e96, 0x6f64, 0x76fe, 0x7d14, 0x5de1, 0x9075, 0x9187, 0x9806, 0x51e6, 0x521d, 0x6240, 0x6691, 0x66d9, 0x6e1a, 0x5eb6, 0x7dd2, 0x7f72, 0x66f8, 0x85af, 0x85f7, 0x8af8, 0x52a9, 0x53d9, 0x5973, 0x5e8f, 0x5f90, 0x6055, 0x92e4, 0x9664, 0x50b7, 0x511f, 94, 0x3e21, 0x52dd, 0x5320, 0x5347, 0x53ec, 0x54e8, 0x5546, 0x5531, 0x5617, 0x5968, 0x59be, 0x5a3c, 0x5bb5, 0x5c06, 0x5c0f, 0x5c11, 0x5c1a, 0x5e84, 0x5e8a, 0x5ee0, 0x5f70, 0x627f, 0x6284, 0x62db, 0x638c, 0x6377, 0x6607, 0x660c, 0x662d, 0x6676, 0x677e, 0x68a2, 0x6a1f, 0x6a35, 0x6cbc, 0x6d88, 0x6e09, 0x6e58, 0x713c, 0x7126, 0x7167, 0x75c7, 0x7701, 0x785d, 0x7901, 0x7965, 0x79f0, 0x7ae0, 0x7b11, 0x7ca7, 0x7d39, 0x8096, 0x83d6, 0x848b, 0x8549, 0x885d, 0x88f3, 0x8a1f, 0x8a3c, 0x8a54, 0x8a73, 0x8c61, 0x8cde, 0x91a4, 0x9266, 0x937e, 0x9418, 0x969c, 0x9798, 0x4e0a, 0x4e08, 0x4e1e, 0x4e57, 0x5197, 0x5270, 0x57ce, 0x5834, 0x58cc, 0x5b22, 0x5e38, 0x60c5, 0x64fe, 0x6761, 0x6756, 0x6d44, 0x72b6, 0x7573, 0x7a63, 0x84b8, 0x8b72, 0x91b8, 0x9320, 0x5631, 0x57f4, 0x98fe, 94, 0x3f21, 0x62ed, 0x690d, 0x6b96, 0x71ed, 0x7e54, 0x8077, 0x8272, 0x89e6, 0x98df, 0x8755, 0x8fb1, 0x5c3b, 0x4f38, 0x4fe1, 0x4fb5, 0x5507, 0x5a20, 0x5bdd, 0x5be9, 0x5fc3, 0x614e, 0x632f, 0x65b0, 0x664b, 0x68ee, 0x699b, 0x6d78, 0x6df1, 0x7533, 0x75b9, 0x771f, 0x795e, 0x79e6, 0x7d33, 0x81e3, 0x82af, 0x85aa, 0x89aa, 0x8a3a, 0x8eab, 0x8f9b, 0x9032, 0x91dd, 0x9707, 0x4eba, 0x4ec1, 0x5203, 0x5875, 0x58ec, 0x5c0b, 0x751a, 0x5c3d, 0x814e, 0x8a0a, 0x8fc5, 0x9663, 0x976d, 0x7b25, 0x8acf, 0x9808, 0x9162, 0x56f3, 0x53a8, 0x9017, 0x5439, 0x5782, 0x5e25, 0x63a8, 0x6c34, 0x708a, 0x7761, 0x7c8b, 0x7fe0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968f, 0x745e, 0x9ac4, 0x5d07, 0x5d69, 0x6570, 0x67a2, 0x8da8, 0x96db, 0x636e, 0x6749, 0x6919, 0x83c5, 0x9817, 0x96c0, 0x88fe, 94, 0x4021, 0x6f84, 0x647a, 0x5bf8, 0x4e16, 0x702c, 0x755d, 0x662f, 0x51c4, 0x5236, 0x52e2, 0x59d3, 0x5f81, 0x6027, 0x6210, 0x653f, 0x6574, 0x661f, 0x6674, 0x68f2, 0x6816, 0x6b63, 0x6e05, 0x7272, 0x751f, 0x76db, 0x7cbe, 0x8056, 0x58f0, 0x88fd, 0x897f, 0x8aa0, 0x8a93, 0x8acb, 0x901d, 0x9192, 0x9752, 0x9759, 0x6589, 0x7a0e, 0x8106, 0x96bb, 0x5e2d, 0x60dc, 0x621a, 0x65a5, 0x6614, 0x6790, 0x77f3, 0x7a4d, 0x7c4d, 0x7e3e, 0x810a, 0x8cac, 0x8d64, 0x8de1, 0x8e5f, 0x78a9, 0x5207, 0x62d9, 0x63a5, 0x6442, 0x6298, 0x8a2d, 0x7a83, 0x7bc0, 0x8aac, 0x96ea, 0x7d76, 0x820c, 0x8749, 0x4ed9, 0x5148, 0x5343, 0x5360, 0x5ba3, 0x5c02, 0x5c16, 0x5ddd, 0x6226, 0x6247, 0x64b0, 0x6813, 0x6834, 0x6cc9, 0x6d45, 0x6d17, 0x67d3, 0x6f5c, 0x714e, 0x717d, 0x65cb, 0x7a7f, 0x7bad, 0x7dda, 94, 0x4121, 0x7e4a, 0x7fa8, 0x817a, 0x821b, 0x8239, 0x85a6, 0x8a6e, 0x8cce, 0x8df5, 0x9078, 0x9077, 0x92ad, 0x9291, 0x9583, 0x9bae, 0x524d, 0x5584, 0x6f38, 0x7136, 0x5168, 0x7985, 0x7e55, 0x81b3, 0x7cce, 0x564c, 0x5851, 0x5ca8, 0x63aa, 0x66fe, 0x66fd, 0x695a, 0x72d9, 0x758f, 0x758e, 0x790e, 0x7956, 0x79df, 0x7c97, 0x7d20, 0x7d44, 0x8607, 0x8a34, 0x963b, 0x9061, 0x9f20, 0x50e7, 0x5275, 0x53cc, 0x53e2, 0x5009, 0x55aa, 0x58ee, 0x594f, 0x723d, 0x5b8b, 0x5c64, 0x531d, 0x60e3, 0x60f3, 0x635c, 0x6383, 0x633f, 0x63bb, 0x64cd, 0x65e9, 0x66f9, 0x5de3, 0x69cd, 0x69fd, 0x6f15, 0x71e5, 0x4e89, 0x75e9, 0x76f8, 0x7a93, 0x7cdf, 0x7dcf, 0x7d9c, 0x8061, 0x8349, 0x8358, 0x846c, 0x84bc, 0x85fb, 0x88c5, 0x8d70, 0x9001, 0x906d, 0x9397, 0x971c, 0x9a12, 0x50cf, 0x5897, 0x618e, 94, 0x4221, 0x81d3, 0x8535, 0x8d08, 0x9020, 0x4fc3, 0x5074, 0x5247, 0x5373, 0x606f, 0x6349, 0x675f, 0x6e2c, 0x8db3, 0x901f, 0x4fd7, 0x5c5e, 0x8cca, 0x65cf, 0x7d9a, 0x5352, 0x8896, 0x5176, 0x63c3, 0x5b58, 0x5b6b, 0x5c0a, 0x640d, 0x6751, 0x905c, 0x4ed6, 0x591a, 0x592a, 0x6c70, 0x8a51, 0x553e, 0x5815, 0x59a5, 0x60f0, 0x6253, 0x67c1, 0x8235, 0x6955, 0x9640, 0x99c4, 0x9a28, 0x4f53, 0x5806, 0x5bfe, 0x8010, 0x5cb1, 0x5e2f, 0x5f85, 0x6020, 0x614b, 0x6234, 0x66ff, 0x6cf0, 0x6ede, 0x80ce, 0x817f, 0x82d4, 0x888b, 0x8cb8, 0x9000, 0x902e, 0x968a, 0x9edb, 0x9bdb, 0x4ee3, 0x53f0, 0x5927, 0x7b2c, 0x918d, 0x984c, 0x9df9, 0x6edd, 0x7027, 0x5353, 0x5544, 0x5b85, 0x6258, 0x629e, 0x62d3, 0x6ca2, 0x6fef, 0x7422, 0x8a17, 0x9438, 0x6fc1, 0x8afe, 0x8338, 0x51e7, 0x86f8, 0x53ea, 94, 0x4321, 0x53e9, 0x4f46, 0x9054, 0x8fb0, 0x596a, 0x8131, 0x5dfd, 0x7aea, 0x8fbf, 0x68da, 0x8c37, 0x72f8, 0x9c48, 0x6a3d, 0x8ab0, 0x4e39, 0x5358, 0x5606, 0x5766, 0x62c5, 0x63a2, 0x65e6, 0x6b4e, 0x6de1, 0x6e5b, 0x70ad, 0x77ed, 0x7aef, 0x7baa, 0x7dbb, 0x803d, 0x80c6, 0x86cb, 0x8a95, 0x935b, 0x56e3, 0x58c7, 0x5f3e, 0x65ad, 0x6696, 0x6a80, 0x6bb5, 0x7537, 0x8ac7, 0x5024, 0x77e5, 0x5730, 0x5f1b, 0x6065, 0x667a, 0x6c60, 0x75f4, 0x7a1a, 0x7f6e, 0x81f4, 0x8718, 0x9045, 0x99b3, 0x7bc9, 0x755c, 0x7af9, 0x7b51, 0x84c4, 0x9010, 0x79e9, 0x7a92, 0x8336, 0x5ae1, 0x7740, 0x4e2d, 0x4ef2, 0x5b99, 0x5fe0, 0x62bd, 0x663c, 0x67f1, 0x6ce8, 0x866b, 0x8877, 0x8a3b, 0x914e, 0x92f3, 0x99d0, 0x6a17, 0x7026, 0x732a, 0x82e7, 0x8457, 0x8caf, 0x4e01, 0x5146, 0x51cb, 0x558b, 0x5bf5, 94, 0x4421, 0x5e16, 0x5e33, 0x5e81, 0x5f14, 0x5f35, 0x5f6b, 0x5fb4, 0x61f2, 0x6311, 0x66a2, 0x671d, 0x6f6e, 0x7252, 0x753a, 0x773a, 0x8074, 0x8139, 0x8178, 0x8776, 0x8abf, 0x8adc, 0x8d85, 0x8df3, 0x929a, 0x9577, 0x9802, 0x9ce5, 0x52c5, 0x6357, 0x76f4, 0x6715, 0x6c88, 0x73cd, 0x8cc3, 0x93ae, 0x9673, 0x6d25, 0x589c, 0x690e, 0x69cc, 0x8ffd, 0x939a, 0x75db, 0x901a, 0x585a, 0x6802, 0x63b4, 0x69fb, 0x4f43, 0x6f2c, 0x67d8, 0x8fbb, 0x8526, 0x7db4, 0x9354, 0x693f, 0x6f70, 0x576a, 0x58f7, 0x5b2c, 0x7d2c, 0x722a, 0x540a, 0x91e3, 0x9db4, 0x4ead, 0x4f4e, 0x505c, 0x5075, 0x5243, 0x8c9e, 0x5448, 0x5824, 0x5b9a, 0x5e1d, 0x5e95, 0x5ead, 0x5ef7, 0x5f1f, 0x608c, 0x62b5, 0x633a, 0x63d0, 0x68af, 0x6c40, 0x7887, 0x798e, 0x7a0b, 0x7de0, 0x8247, 0x8a02, 0x8ae6, 0x8e44, 0x9013, 94, 0x4521, 0x90b8, 0x912d, 0x91d8, 0x9f0e, 0x6ce5, 0x6458, 0x64e2, 0x6575, 0x6ef4, 0x7684, 0x7b1b, 0x9069, 0x93d1, 0x6eba, 0x54f2, 0x5fb9, 0x64a4, 0x8f4d, 0x8fed, 0x9244, 0x5178, 0x586b, 0x5929, 0x5c55, 0x5e97, 0x6dfb, 0x7e8f, 0x751c, 0x8cbc, 0x8ee2, 0x985b, 0x70b9, 0x4f1d, 0x6bbf, 0x6fb1, 0x7530, 0x96fb, 0x514e, 0x5410, 0x5835, 0x5857, 0x59ac, 0x5c60, 0x5f92, 0x6597, 0x675c, 0x6e21, 0x767b, 0x83df, 0x8ced, 0x9014, 0x90fd, 0x934d, 0x7825, 0x783a, 0x52aa, 0x5ea6, 0x571f, 0x5974, 0x6012, 0x5012, 0x515a, 0x51ac, 0x51cd, 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5b95, 0x5cf6, 0x5d8b, 0x60bc, 0x6295, 0x642d, 0x6771, 0x6843, 0x68bc, 0x68df, 0x76d7, 0x6dd8, 0x6e6f, 0x6d9b, 0x706f, 0x71c8, 0x5f53, 0x75d8, 0x7977, 0x7b49, 0x7b54, 0x7b52, 0x7cd6, 0x7d71, 0x5230, 94, 0x4621, 0x8463, 0x8569, 0x85e4, 0x8a0e, 0x8b04, 0x8c46, 0x8e0f, 0x9003, 0x900f, 0x9419, 0x9676, 0x982d, 0x9a30, 0x95d8, 0x50cd, 0x52d5, 0x540c, 0x5802, 0x5c0e, 0x61a7, 0x649e, 0x6d1e, 0x77b3, 0x7ae5, 0x80f4, 0x8404, 0x9053, 0x9285, 0x5ce0, 0x9d07, 0x533f, 0x5f97, 0x5fb3, 0x6d9c, 0x7279, 0x7763, 0x79bf, 0x7be4, 0x6bd2, 0x72ec, 0x8aad, 0x6803, 0x6a61, 0x51f8, 0x7a81, 0x6934, 0x5c4a, 0x9cf6, 0x82eb, 0x5bc5, 0x9149, 0x701e, 0x5678, 0x5c6f, 0x60c7, 0x6566, 0x6c8c, 0x8c5a, 0x9041, 0x9813, 0x5451, 0x66c7, 0x920d, 0x5948, 0x90a3, 0x5185, 0x4e4d, 0x51ea, 0x8599, 0x8b0e, 0x7058, 0x637a, 0x934b, 0x6962, 0x99b4, 0x7e04, 0x7577, 0x5357, 0x6960, 0x8edf, 0x96e3, 0x6c5d, 0x4e8c, 0x5c3c, 0x5f10, 0x8fe9, 0x5302, 0x8cd1, 0x8089, 0x8679, 0x5eff, 0x65e5, 0x4e73, 0x5165, 94, 0x4721, 0x5982, 0x5c3f, 0x97ee, 0x4efb, 0x598a, 0x5fcd, 0x8a8d, 0x6fe1, 0x79b0, 0x7962, 0x5be7, 0x8471, 0x732b, 0x71b1, 0x5e74, 0x5ff5, 0x637b, 0x649a, 0x71c3, 0x7c98, 0x4e43, 0x5efc, 0x4e4b, 0x57dc, 0x56a2, 0x60a9, 0x6fc3, 0x7d0d, 0x80fd, 0x8133, 0x81bf, 0x8fb2, 0x8997, 0x86a4, 0x5df4, 0x628a, 0x64ad, 0x8987, 0x6777, 0x6ce2, 0x6d3e, 0x7436, 0x7834, 0x5a46, 0x7f75, 0x82ad, 0x99ac, 0x4ff3, 0x5ec3, 0x62dd, 0x6392, 0x6557, 0x676f, 0x76c3, 0x724c, 0x80cc, 0x80ba, 0x8f29, 0x914d, 0x500d, 0x57f9, 0x5a92, 0x6885, 0x6973, 0x7164, 0x72fd, 0x8cb7, 0x58f2, 0x8ce0, 0x966a, 0x9019, 0x877f, 0x79e4, 0x77e7, 0x8429, 0x4f2f, 0x5265, 0x535a, 0x62cd, 0x67cf, 0x6cca, 0x767d, 0x7b94, 0x7c95, 0x8236, 0x8584, 0x8feb, 0x66dd, 0x6f20, 0x7206, 0x7e1b, 0x83ab, 0x99c1, 0x9ea6, 94, 0x4821, 0x51fd, 0x7bb1, 0x7872, 0x7bb8, 0x8087, 0x7b48, 0x6ae8, 0x5e61, 0x808c, 0x7551, 0x7560, 0x516b, 0x9262, 0x6e8c, 0x767a, 0x9197, 0x9aea, 0x4f10, 0x7f70, 0x629c, 0x7b4f, 0x95a5, 0x9ce9, 0x567a, 0x5859, 0x86e4, 0x96bc, 0x4f34, 0x5224, 0x534a, 0x53cd, 0x53db, 0x5e06, 0x642c, 0x6591, 0x677f, 0x6c3e, 0x6c4e, 0x7248, 0x72af, 0x73ed, 0x7554, 0x7e41, 0x822c, 0x85e9, 0x8ca9, 0x7bc4, 0x91c6, 0x7169, 0x9812, 0x98ef, 0x633d, 0x6669, 0x756a, 0x76e4, 0x78d0, 0x8543, 0x86ee, 0x532a, 0x5351, 0x5426, 0x5983, 0x5e87, 0x5f7c, 0x60b2, 0x6249, 0x6279, 0x62ab, 0x6590, 0x6bd4, 0x6ccc, 0x75b2, 0x76ae, 0x7891, 0x79d8, 0x7dcb, 0x7f77, 0x80a5, 0x88ab, 0x8ab9, 0x8cbb, 0x907f, 0x975e, 0x98db, 0x6a0b, 0x7c38, 0x5099, 0x5c3e, 0x5fae, 0x6787, 0x6bd8, 0x7435, 0x7709, 0x7f8e, 94, 0x4921, 0x9f3b, 0x67ca, 0x7a17, 0x5339, 0x758b, 0x9aed, 0x5f66, 0x819d, 0x83f1, 0x8098, 0x5f3c, 0x5fc5, 0x7562, 0x7b46, 0x903c, 0x6867, 0x59eb, 0x5a9b, 0x7d10, 0x767e, 0x8b2c, 0x4ff5, 0x5f6a, 0x6a19, 0x6c37, 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8a55, 0x8c79, 0x5edf, 0x63cf, 0x75c5, 0x79d2, 0x82d7, 0x9328, 0x92f2, 0x849c, 0x86ed, 0x9c2d, 0x54c1, 0x5f6c, 0x658c, 0x6d5c, 0x7015, 0x8ca7, 0x8cd3, 0x983b, 0x654f, 0x74f6, 0x4e0d, 0x4ed8, 0x57e0, 0x592b, 0x5a66, 0x5bcc, 0x51a8, 0x5e03, 0x5e9c, 0x6016, 0x6276, 0x6577, 0x65a7, 0x666e, 0x6d6e, 0x7236, 0x7b26, 0x8150, 0x819a, 0x8299, 0x8b5c, 0x8ca0, 0x8ce6, 0x8d74, 0x961c, 0x9644, 0x4fae, 0x64ab, 0x6b66, 0x821e, 0x8461, 0x856a, 0x90e8, 0x5c01, 0x6953, 0x98a8, 0x847a, 0x8557, 0x4f0f, 0x526f, 0x5fa9, 0x5e45, 0x670d, 94, 0x4a21, 0x798f, 0x8179, 0x8907, 0x8986, 0x6df5, 0x5f17, 0x6255, 0x6cb8, 0x4ecf, 0x7269, 0x9b92, 0x5206, 0x543b, 0x5674, 0x58b3, 0x61a4, 0x626e, 0x711a, 0x596e, 0x7c89, 0x7cde, 0x7d1b, 0x96f0, 0x6587, 0x805e, 0x4e19, 0x4f75, 0x5175, 0x5840, 0x5e63, 0x5e73, 0x5f0a, 0x67c4, 0x4e26, 0x853d, 0x9589, 0x965b, 0x7c73, 0x9801, 0x50fb, 0x58c1, 0x7656, 0x78a7, 0x5225, 0x77a5, 0x8511, 0x7b86, 0x504f, 0x5909, 0x7247, 0x7bc7, 0x7de8, 0x8fba, 0x8fd4, 0x904d, 0x4fbf, 0x52c9, 0x5a29, 0x5f01, 0x97ad, 0x4fdd, 0x8217, 0x92ea, 0x5703, 0x6355, 0x6b69, 0x752b, 0x88dc, 0x8f14, 0x7a42, 0x52df, 0x5893, 0x6155, 0x620a, 0x66ae, 0x6bcd, 0x7c3f, 0x83e9, 0x5023, 0x4ff8, 0x5305, 0x5446, 0x5831, 0x5949, 0x5b9d, 0x5cf0, 0x5cef, 0x5d29, 0x5e96, 0x62b1, 0x6367, 0x653e, 0x65b9, 0x670b, 94, 0x4b21, 0x6cd5, 0x6ce1, 0x70f9, 0x7832, 0x7e2b, 0x80de, 0x82b3, 0x840c, 0x84ec, 0x8702, 0x8912, 0x8a2a, 0x8c4a, 0x90a6, 0x92d2, 0x98fd, 0x9cf3, 0x9d6c, 0x4e4f, 0x4ea1, 0x508d, 0x5256, 0x574a, 0x59a8, 0x5e3d, 0x5fd8, 0x5fd9, 0x623f, 0x66b4, 0x671b, 0x67d0, 0x68d2, 0x5192, 0x7d21, 0x80aa, 0x81a8, 0x8b00, 0x8c8c, 0x8cbf, 0x927e, 0x9632, 0x5420, 0x982c, 0x5317, 0x50d5, 0x535c, 0x58a8, 0x64b2, 0x6734, 0x7267, 0x7766, 0x7a46, 0x91e6, 0x52c3, 0x6ca1, 0x6b86, 0x5800, 0x5e4c, 0x5954, 0x672c, 0x7ffb, 0x51e1, 0x76c6, 0x6469, 0x78e8, 0x9b54, 0x9ebb, 0x57cb, 0x59b9, 0x6627, 0x679a, 0x6bce, 0x54e9, 0x69d9, 0x5e55, 0x819c, 0x6795, 0x9baa, 0x67fe, 0x9c52, 0x685d, 0x4ea6, 0x4fe3, 0x53c8, 0x62b9, 0x672b, 0x6cab, 0x8fc4, 0x4fad, 0x7e6d, 0x9ebf, 0x4e07, 0x6162, 0x6e80, 94, 0x4c21, 0x6f2b, 0x8513, 0x5473, 0x672a, 0x9b45, 0x5df3, 0x7b95, 0x5cac, 0x5bc6, 0x871c, 0x6e4a, 0x84d1, 0x7a14, 0x8108, 0x5999, 0x7c8d, 0x6c11, 0x7720, 0x52d9, 0x5922, 0x7121, 0x725f, 0x77db, 0x9727, 0x9d61, 0x690b, 0x5a7f, 0x5a18, 0x51a5, 0x540d, 0x547d, 0x660e, 0x76df, 0x8ff7, 0x9298, 0x9cf4, 0x59ea, 0x725d, 0x6ec5, 0x514d, 0x68c9, 0x7dbf, 0x7dec, 0x9762, 0x9eba, 0x6478, 0x6a21, 0x8302, 0x5984, 0x5b5f, 0x6bdb, 0x731b, 0x76f2, 0x7db2, 0x8017, 0x8499, 0x5132, 0x6728, 0x9ed9, 0x76ee, 0x6762, 0x52ff, 0x9905, 0x5c24, 0x623b, 0x7c7e, 0x8cb0, 0x554f, 0x60b6, 0x7d0b, 0x9580, 0x5301, 0x4e5f, 0x51b6, 0x591c, 0x723a, 0x8036, 0x91ce, 0x5f25, 0x77e2, 0x5384, 0x5f79, 0x7d04, 0x85ac, 0x8a33, 0x8e8d, 0x9756, 0x67f3, 0x85ae, 0x9453, 0x6109, 0x6108, 0x6cb9, 0x7652, 94, 0x4d21, 0x8aed, 0x8f38, 0x552f, 0x4f51, 0x512a, 0x52c7, 0x53cb, 0x5ba5, 0x5e7d, 0x60a0, 0x6182, 0x63d6, 0x6709, 0x67da, 0x6e67, 0x6d8c, 0x7336, 0x7337, 0x7531, 0x7950, 0x88d5, 0x8a98, 0x904a, 0x9091, 0x90f5, 0x96c4, 0x878d, 0x5915, 0x4e88, 0x4f59, 0x4e0e, 0x8a89, 0x8f3f, 0x9810, 0x50ad, 0x5e7c, 0x5996, 0x5bb9, 0x5eb8, 0x63da, 0x63fa, 0x64c1, 0x66dc, 0x694a, 0x69d8, 0x6d0b, 0x6eb6, 0x7194, 0x7528, 0x7aaf, 0x7f8a, 0x8000, 0x8449, 0x84c9, 0x8981, 0x8b21, 0x8e0a, 0x9065, 0x967d, 0x990a, 0x617e, 0x6291, 0x6b32, 0x6c83, 0x6d74, 0x7fcc, 0x7ffc, 0x6dc0, 0x7f85, 0x87ba, 0x88f8, 0x6765, 0x83b1, 0x983c, 0x96f7, 0x6d1b, 0x7d61, 0x843d, 0x916a, 0x4e71, 0x5375, 0x5d50, 0x6b04, 0x6feb, 0x85cd, 0x862d, 0x89a7, 0x5229, 0x540f, 0x5c65, 0x674e, 0x68a8, 0x7406, 0x7483, 94, 0x4e21, 0x75e2, 0x88cf, 0x88e1, 0x91cc, 0x96e2, 0x9678, 0x5f8b, 0x7387, 0x7acb, 0x844e, 0x63a0, 0x7565, 0x5289, 0x6d41, 0x6e9c, 0x7409, 0x7559, 0x786b, 0x7c92, 0x9686, 0x7adc, 0x9f8d, 0x4fb6, 0x616e, 0x65c5, 0x865c, 0x4e86, 0x4eae, 0x50da, 0x4e21, 0x51cc, 0x5bee, 0x6599, 0x6881, 0x6dbc, 0x731f, 0x7642, 0x77ad, 0x7a1c, 0x7ce7, 0x826f, 0x8ad2, 0x907c, 0x91cf, 0x9675, 0x9818, 0x529b, 0x7dd1, 0x502b, 0x5398, 0x6797, 0x6dcb, 0x71d0, 0x7433, 0x81e8, 0x8f2a, 0x96a3, 0x9c57, 0x9e9f, 0x7460, 0x5841, 0x6d99, 0x7d2f, 0x985e, 0x4ee4, 0x4f36, 0x4f8b, 0x51b7, 0x52b1, 0x5dba, 0x601c, 0x73b2, 0x793c, 0x82d3, 0x9234, 0x96b7, 0x96f6, 0x970a, 0x9e97, 0x9f62, 0x66a6, 0x6b74, 0x5217, 0x52a3, 0x70c8, 0x88c2, 0x5ec9, 0x604b, 0x6190, 0x6f23, 0x7149, 0x7c3e, 0x7df4, 0x806f, 51, 0x4f21, 0x84ee, 0x9023, 0x932c, 0x5442, 0x9b6f, 0x6ad3, 0x7089, 0x8cc2, 0x8def, 0x9732, 0x52b4, 0x5a41, 0x5eca, 0x5f04, 0x6717, 0x697c, 0x6994, 0x6d6a, 0x6f0f, 0x7262, 0x72fc, 0x7bed, 0x8001, 0x807e, 0x874b, 0x90ce, 0x516d, 0x9e93, 0x7984, 0x808b, 0x9332, 0x8ad6, 0x502d, 0x548c, 0x8a71, 0x6b6a, 0x8cc4, 0x8107, 0x60d1, 0x67a0, 0x9df2, 0x4e99, 0x4e98, 0x9c10, 0x8a6b, 0x85c1, 0x8568, 0x6900, 0x6e7e, 0x7897, 0x8155, 94, 0x5021, 0x5f0c, 0x4e10, 0x4e15, 0x4e2a, 0x4e31, 0x4e36, 0x4e3c, 0x4e3f, 0x4e42, 0x4e56, 0x4e58, 0x4e82, 0x4e85, 0x8c6b, 0x4e8a, 0x8212, 0x5f0d, 0x4e8e, 0x4e9e, 0x4e9f, 0x4ea0, 0x4ea2, 0x4eb0, 0x4eb3, 0x4eb6, 0x4ece, 0x4ecd, 0x4ec4, 0x4ec6, 0x4ec2, 0x4ed7, 0x4ede, 0x4eed, 0x4edf, 0x4ef7, 0x4f09, 0x4f5a, 0x4f30, 0x4f5b, 0x4f5d, 0x4f57, 0x4f47, 0x4f76, 0x4f88, 0x4f8f, 0x4f98, 0x4f7b, 0x4f69, 0x4f70, 0x4f91, 0x4f6f, 0x4f86, 0x4f96, 0x5118, 0x4fd4, 0x4fdf, 0x4fce, 0x4fd8, 0x4fdb, 0x4fd1, 0x4fda, 0x4fd0, 0x4fe4, 0x4fe5, 0x501a, 0x5028, 0x5014, 0x502a, 0x5025, 0x5005, 0x4f1c, 0x4ff6, 0x5021, 0x5029, 0x502c, 0x4ffe, 0x4fef, 0x5011, 0x5006, 0x5043, 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505a, 0x5056, 0x506c, 0x5078, 0x5080, 0x509a, 0x5085, 0x50b4, 0x50b2, 94, 0x5121, 0x50c9, 0x50ca, 0x50b3, 0x50c2, 0x50d6, 0x50de, 0x50e5, 0x50ed, 0x50e3, 0x50ee, 0x50f9, 0x50f5, 0x5109, 0x5101, 0x5102, 0x5116, 0x5115, 0x5114, 0x511a, 0x5121, 0x513a, 0x5137, 0x513c, 0x513b, 0x513f, 0x5140, 0x5152, 0x514c, 0x5154, 0x5162, 0x7af8, 0x5169, 0x516a, 0x516e, 0x5180, 0x5182, 0x56d8, 0x518c, 0x5189, 0x518f, 0x5191, 0x5193, 0x5195, 0x5196, 0x51a4, 0x51a6, 0x51a2, 0x51a9, 0x51aa, 0x51ab, 0x51b3, 0x51b1, 0x51b2, 0x51b0, 0x51b5, 0x51bd, 0x51c5, 0x51c9, 0x51db, 0x51e0, 0x8655, 0x51e9, 0x51ed, 0x51f0, 0x51f5, 0x51fe, 0x5204, 0x520b, 0x5214, 0x520e, 0x5227, 0x522a, 0x522e, 0x5233, 0x5239, 0x524f, 0x5244, 0x524b, 0x524c, 0x525e, 0x5254, 0x526a, 0x5274, 0x5269, 0x5273, 0x527f, 0x527d, 0x528d, 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8fa8, 94, 0x5221, 0x8fa7, 0x52ac, 0x52ad, 0x52bc, 0x52b5, 0x52c1, 0x52cd, 0x52d7, 0x52de, 0x52e3, 0x52e6, 0x98ed, 0x52e0, 0x52f3, 0x52f5, 0x52f8, 0x52f9, 0x5306, 0x5308, 0x7538, 0x530d, 0x5310, 0x530f, 0x5315, 0x531a, 0x5323, 0x532f, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, 0x5345, 0x4e17, 0x5349, 0x534d, 0x51d6, 0x535e, 0x5369, 0x536e, 0x5918, 0x537b, 0x5377, 0x5382, 0x5396, 0x53a0, 0x53a6, 0x53a5, 0x53ae, 0x53b0, 0x53b6, 0x53c3, 0x7c12, 0x96d9, 0x53df, 0x66fc, 0x71ee, 0x53ee, 0x53e8, 0x53ed, 0x53fa, 0x5401, 0x543d, 0x5440, 0x542c, 0x542d, 0x543c, 0x542e, 0x5436, 0x5429, 0x541d, 0x544e, 0x548f, 0x5475, 0x548e, 0x545f, 0x5471, 0x5477, 0x5470, 0x5492, 0x547b, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54c7, 0x54a2, 0x54b8, 0x54a5, 0x54ac, 0x54c4, 0x54c8, 0x54a8, 94, 0x5321, 0x54ab, 0x54c2, 0x54a4, 0x54be, 0x54bc, 0x54d8, 0x54e5, 0x54e6, 0x550f, 0x5514, 0x54fd, 0x54ee, 0x54ed, 0x54fa, 0x54e2, 0x5539, 0x5540, 0x5563, 0x554c, 0x552e, 0x555c, 0x5545, 0x5556, 0x5557, 0x5538, 0x5533, 0x555d, 0x5599, 0x5580, 0x54af, 0x558a, 0x559f, 0x557b, 0x557e, 0x5598, 0x559e, 0x55ae, 0x557c, 0x5583, 0x55a9, 0x5587, 0x55a8, 0x55da, 0x55c5, 0x55df, 0x55c4, 0x55dc, 0x55e4, 0x55d4, 0x5614, 0x55f7, 0x5616, 0x55fe, 0x55fd, 0x561b, 0x55f9, 0x564e, 0x5650, 0x71df, 0x5634, 0x5636, 0x5632, 0x5638, 0x566b, 0x5664, 0x562f, 0x566c, 0x566a, 0x5686, 0x5680, 0x568a, 0x56a0, 0x5694, 0x568f, 0x56a5, 0x56ae, 0x56b6, 0x56b4, 0x56c2, 0x56bc, 0x56c1, 0x56c3, 0x56c0, 0x56c8, 0x56ce, 0x56d1, 0x56d3, 0x56d7, 0x56ee, 0x56f9, 0x5700, 0x56ff, 0x5704, 0x5709, 94, 0x5421, 0x5708, 0x570b, 0x570d, 0x5713, 0x5718, 0x5716, 0x55c7, 0x571c, 0x5726, 0x5737, 0x5738, 0x574e, 0x573b, 0x5740, 0x574f, 0x5769, 0x57c0, 0x5788, 0x5761, 0x577f, 0x5789, 0x5793, 0x57a0, 0x57b3, 0x57a4, 0x57aa, 0x57b0, 0x57c3, 0x57c6, 0x57d4, 0x57d2, 0x57d3, 0x580a, 0x57d6, 0x57e3, 0x580b, 0x5819, 0x581d, 0x5872, 0x5821, 0x5862, 0x584b, 0x5870, 0x6bc0, 0x5852, 0x583d, 0x5879, 0x5885, 0x58b9, 0x589f, 0x58ab, 0x58ba, 0x58de, 0x58bb, 0x58b8, 0x58ae, 0x58c5, 0x58d3, 0x58d1, 0x58d7, 0x58d9, 0x58d8, 0x58e5, 0x58dc, 0x58e4, 0x58df, 0x58ef, 0x58fa, 0x58f9, 0x58fb, 0x58fc, 0x58fd, 0x5902, 0x590a, 0x5910, 0x591b, 0x68a6, 0x5925, 0x592c, 0x592d, 0x5932, 0x5938, 0x593e, 0x7ad2, 0x5955, 0x5950, 0x594e, 0x595a, 0x5958, 0x5962, 0x5960, 0x5967, 0x596c, 0x5969, 94, 0x5521, 0x5978, 0x5981, 0x599d, 0x4f5e, 0x4fab, 0x59a3, 0x59b2, 0x59c6, 0x59e8, 0x59dc, 0x598d, 0x59d9, 0x59da, 0x5a25, 0x5a1f, 0x5a11, 0x5a1c, 0x5a09, 0x5a1a, 0x5a40, 0x5a6c, 0x5a49, 0x5a35, 0x5a36, 0x5a62, 0x5a6a, 0x5a9a, 0x5abc, 0x5abe, 0x5acb, 0x5ac2, 0x5abd, 0x5ae3, 0x5ad7, 0x5ae6, 0x5ae9, 0x5ad6, 0x5afa, 0x5afb, 0x5b0c, 0x5b0b, 0x5b16, 0x5b32, 0x5ad0, 0x5b2a, 0x5b36, 0x5b3e, 0x5b43, 0x5b45, 0x5b40, 0x5b51, 0x5b55, 0x5b5a, 0x5b5b, 0x5b65, 0x5b69, 0x5b70, 0x5b73, 0x5b75, 0x5b78, 0x6588, 0x5b7a, 0x5b80, 0x5b83, 0x5ba6, 0x5bb8, 0x5bc3, 0x5bc7, 0x5bc9, 0x5bd4, 0x5bd0, 0x5be4, 0x5be6, 0x5be2, 0x5bde, 0x5be5, 0x5beb, 0x5bf0, 0x5bf6, 0x5bf3, 0x5c05, 0x5c07, 0x5c08, 0x5c0d, 0x5c13, 0x5c20, 0x5c22, 0x5c28, 0x5c38, 0x5c39, 0x5c41, 0x5c46, 0x5c4e, 0x5c53, 94, 0x5621, 0x5c50, 0x5c4f, 0x5b71, 0x5c6c, 0x5c6e, 0x4e62, 0x5c76, 0x5c79, 0x5c8c, 0x5c91, 0x5c94, 0x599b, 0x5cab, 0x5cbb, 0x5cb6, 0x5cbc, 0x5cb7, 0x5cc5, 0x5cbe, 0x5cc7, 0x5cd9, 0x5ce9, 0x5cfd, 0x5cfa, 0x5ced, 0x5d8c, 0x5cea, 0x5d0b, 0x5d15, 0x5d17, 0x5d5c, 0x5d1f, 0x5d1b, 0x5d11, 0x5d14, 0x5d22, 0x5d1a, 0x5d19, 0x5d18, 0x5d4c, 0x5d52, 0x5d4e, 0x5d4b, 0x5d6c, 0x5d73, 0x5d76, 0x5d87, 0x5d84, 0x5d82, 0x5da2, 0x5d9d, 0x5dac, 0x5dae, 0x5dbd, 0x5d90, 0x5db7, 0x5dbc, 0x5dc9, 0x5dcd, 0x5dd3, 0x5dd2, 0x5dd6, 0x5ddb, 0x5deb, 0x5df2, 0x5df5, 0x5e0b, 0x5e1a, 0x5e19, 0x5e11, 0x5e1b, 0x5e36, 0x5e37, 0x5e44, 0x5e43, 0x5e40, 0x5e4e, 0x5e57, 0x5e54, 0x5e5f, 0x5e62, 0x5e64, 0x5e47, 0x5e75, 0x5e76, 0x5e7a, 0x9ebc, 0x5e7f, 0x5ea0, 0x5ec1, 0x5ec2, 0x5ec8, 0x5ed0, 0x5ecf, 94, 0x5721, 0x5ed6, 0x5ee3, 0x5edd, 0x5eda, 0x5edb, 0x5ee2, 0x5ee1, 0x5ee8, 0x5ee9, 0x5eec, 0x5ef1, 0x5ef3, 0x5ef0, 0x5ef4, 0x5ef8, 0x5efe, 0x5f03, 0x5f09, 0x5f5d, 0x5f5c, 0x5f0b, 0x5f11, 0x5f16, 0x5f29, 0x5f2d, 0x5f38, 0x5f41, 0x5f48, 0x5f4c, 0x5f4e, 0x5f2f, 0x5f51, 0x5f56, 0x5f57, 0x5f59, 0x5f61, 0x5f6d, 0x5f73, 0x5f77, 0x5f83, 0x5f82, 0x5f7f, 0x5f8a, 0x5f88, 0x5f91, 0x5f87, 0x5f9e, 0x5f99, 0x5f98, 0x5fa0, 0x5fa8, 0x5fad, 0x5fbc, 0x5fd6, 0x5ffb, 0x5fe4, 0x5ff8, 0x5ff1, 0x5fdd, 0x60b3, 0x5fff, 0x6021, 0x6060, 0x6019, 0x6010, 0x6029, 0x600e, 0x6031, 0x601b, 0x6015, 0x602b, 0x6026, 0x600f, 0x603a, 0x605a, 0x6041, 0x606a, 0x6077, 0x605f, 0x604a, 0x6046, 0x604d, 0x6063, 0x6043, 0x6064, 0x6042, 0x606c, 0x606b, 0x6059, 0x6081, 0x608d, 0x60e7, 0x6083, 0x609a, 94, 0x5821, 0x6084, 0x609b, 0x6096, 0x6097, 0x6092, 0x60a7, 0x608b, 0x60e1, 0x60b8, 0x60e0, 0x60d3, 0x60b4, 0x5ff0, 0x60bd, 0x60c6, 0x60b5, 0x60d8, 0x614d, 0x6115, 0x6106, 0x60f6, 0x60f7, 0x6100, 0x60f4, 0x60fa, 0x6103, 0x6121, 0x60fb, 0x60f1, 0x610d, 0x610e, 0x6147, 0x613e, 0x6128, 0x6127, 0x614a, 0x613f, 0x613c, 0x612c, 0x6134, 0x613d, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615a, 0x616b, 0x6174, 0x616f, 0x6165, 0x6171, 0x615f, 0x615d, 0x6153, 0x6175, 0x6199, 0x6196, 0x6187, 0x61ac, 0x6194, 0x619a, 0x618a, 0x6191, 0x61ab, 0x61ae, 0x61cc, 0x61ca, 0x61c9, 0x61f7, 0x61c8, 0x61c3, 0x61c6, 0x61ba, 0x61cb, 0x7f79, 0x61cd, 0x61e6, 0x61e3, 0x61f6, 0x61fa, 0x61f4, 0x61ff, 0x61fd, 0x61fc, 0x61fe, 0x6200, 0x6208, 0x6209, 0x620d, 0x620c, 0x6214, 0x621b, 94, 0x5921, 0x621e, 0x6221, 0x622a, 0x622e, 0x6230, 0x6232, 0x6233, 0x6241, 0x624e, 0x625e, 0x6263, 0x625b, 0x6260, 0x6268, 0x627c, 0x6282, 0x6289, 0x627e, 0x6292, 0x6293, 0x6296, 0x62d4, 0x6283, 0x6294, 0x62d7, 0x62d1, 0x62bb, 0x62cf, 0x62ff, 0x62c6, 0x64d4, 0x62c8, 0x62dc, 0x62cc, 0x62ca, 0x62c2, 0x62c7, 0x629b, 0x62c9, 0x630c, 0x62ee, 0x62f1, 0x6327, 0x6302, 0x6308, 0x62ef, 0x62f5, 0x6350, 0x633e, 0x634d, 0x641c, 0x634f, 0x6396, 0x638e, 0x6380, 0x63ab, 0x6376, 0x63a3, 0x638f, 0x6389, 0x639f, 0x63b5, 0x636b, 0x6369, 0x63be, 0x63e9, 0x63c0, 0x63c6, 0x63e3, 0x63c9, 0x63d2, 0x63f6, 0x63c4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651d, 0x6417, 0x6428, 0x640f, 0x6467, 0x646f, 0x6476, 0x644e, 0x652a, 0x6495, 0x6493, 0x64a5, 0x64a9, 0x6488, 0x64bc, 94, 0x5a21, 0x64da, 0x64d2, 0x64c5, 0x64c7, 0x64bb, 0x64d8, 0x64c2, 0x64f1, 0x64e7, 0x8209, 0x64e0, 0x64e1, 0x62ac, 0x64e3, 0x64ef, 0x652c, 0x64f6, 0x64f4, 0x64f2, 0x64fa, 0x6500, 0x64fd, 0x6518, 0x651c, 0x6505, 0x6524, 0x6523, 0x652b, 0x6534, 0x6535, 0x6537, 0x6536, 0x6538, 0x754b, 0x6548, 0x6556, 0x6555, 0x654d, 0x6558, 0x655e, 0x655d, 0x6572, 0x6578, 0x6582, 0x6583, 0x8b8a, 0x659b, 0x659f, 0x65ab, 0x65b7, 0x65c3, 0x65c6, 0x65c1, 0x65c4, 0x65cc, 0x65d2, 0x65db, 0x65d9, 0x65e0, 0x65e1, 0x65f1, 0x6772, 0x660a, 0x6603, 0x65fb, 0x6773, 0x6635, 0x6636, 0x6634, 0x661c, 0x664f, 0x6644, 0x6649, 0x6641, 0x665e, 0x665d, 0x6664, 0x6667, 0x6668, 0x665f, 0x6662, 0x6670, 0x6683, 0x6688, 0x668e, 0x6689, 0x6684, 0x6698, 0x669d, 0x66c1, 0x66b9, 0x66c9, 0x66be, 0x66bc, 94, 0x5b21, 0x66c4, 0x66b8, 0x66d6, 0x66da, 0x66e0, 0x663f, 0x66e6, 0x66e9, 0x66f0, 0x66f5, 0x66f7, 0x670f, 0x6716, 0x671e, 0x6726, 0x6727, 0x9738, 0x672e, 0x673f, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746, 0x675e, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67a9, 0x677c, 0x676a, 0x678c, 0x678b, 0x67a6, 0x67a1, 0x6785, 0x67b7, 0x67ef, 0x67b4, 0x67ec, 0x67b3, 0x67e9, 0x67b8, 0x67e4, 0x67de, 0x67dd, 0x67e2, 0x67ee, 0x67b9, 0x67ce, 0x67c6, 0x67e7, 0x6a9c, 0x681e, 0x6846, 0x6829, 0x6840, 0x684d, 0x6832, 0x684e, 0x68b3, 0x682b, 0x6859, 0x6863, 0x6877, 0x687f, 0x689f, 0x688f, 0x68ad, 0x6894, 0x689d, 0x689b, 0x6883, 0x6aae, 0x68b9, 0x6874, 0x68b5, 0x68a0, 0x68ba, 0x690f, 0x688d, 0x687e, 0x6901, 0x68ca, 0x6908, 0x68d8, 0x6922, 0x6926, 0x68e1, 0x690c, 0x68cd, 94, 0x5c21, 0x68d4, 0x68e7, 0x68d5, 0x6936, 0x6912, 0x6904, 0x68d7, 0x68e3, 0x6925, 0x68f9, 0x68e0, 0x68ef, 0x6928, 0x692a, 0x691a, 0x6923, 0x6921, 0x68c6, 0x6979, 0x6977, 0x695c, 0x6978, 0x696b, 0x6954, 0x697e, 0x696e, 0x6939, 0x6974, 0x693d, 0x6959, 0x6930, 0x6961, 0x695e, 0x695d, 0x6981, 0x696a, 0x69b2, 0x69ae, 0x69d0, 0x69bf, 0x69c1, 0x69d3, 0x69be, 0x69ce, 0x5be8, 0x69ca, 0x69dd, 0x69bb, 0x69c3, 0x69a7, 0x6a2e, 0x6991, 0x69a0, 0x699c, 0x6995, 0x69b4, 0x69de, 0x69e8, 0x6a02, 0x6a1b, 0x69ff, 0x6b0a, 0x69f9, 0x69f2, 0x69e7, 0x6a05, 0x69b1, 0x6a1e, 0x69ed, 0x6a14, 0x69eb, 0x6a0a, 0x6a12, 0x6ac1, 0x6a23, 0x6a13, 0x6a44, 0x6a0c, 0x6a72, 0x6a36, 0x6a78, 0x6a47, 0x6a62, 0x6a59, 0x6a66, 0x6a48, 0x6a38, 0x6a22, 0x6a90, 0x6a8d, 0x6aa0, 0x6a84, 0x6aa2, 0x6aa3, 94, 0x5d21, 0x6a97, 0x8617, 0x6abb, 0x6ac3, 0x6ac2, 0x6ab8, 0x6ab3, 0x6aac, 0x6ade, 0x6ad1, 0x6adf, 0x6aaa, 0x6ada, 0x6aea, 0x6afb, 0x6b05, 0x8616, 0x6afa, 0x6b12, 0x6b16, 0x9b31, 0x6b1f, 0x6b38, 0x6b37, 0x76dc, 0x6b39, 0x98ee, 0x6b47, 0x6b43, 0x6b49, 0x6b50, 0x6b59, 0x6b54, 0x6b5b, 0x6b5f, 0x6b61, 0x6b78, 0x6b79, 0x6b7f, 0x6b80, 0x6b84, 0x6b83, 0x6b8d, 0x6b98, 0x6b95, 0x6b9e, 0x6ba4, 0x6baa, 0x6bab, 0x6baf, 0x6bb2, 0x6bb1, 0x6bb3, 0x6bb7, 0x6bbc, 0x6bc6, 0x6bcb, 0x6bd3, 0x6bdf, 0x6bec, 0x6beb, 0x6bf3, 0x6bef, 0x9ebe, 0x6c08, 0x6c13, 0x6c14, 0x6c1b, 0x6c24, 0x6c23, 0x6c5e, 0x6c55, 0x6c62, 0x6c6a, 0x6c82, 0x6c8d, 0x6c9a, 0x6c81, 0x6c9b, 0x6c7e, 0x6c68, 0x6c73, 0x6c92, 0x6c90, 0x6cc4, 0x6cf1, 0x6cd3, 0x6cbd, 0x6cd7, 0x6cc5, 0x6cdd, 0x6cae, 0x6cb1, 0x6cbe, 94, 0x5e21, 0x6cba, 0x6cdb, 0x6cef, 0x6cd9, 0x6cea, 0x6d1f, 0x884d, 0x6d36, 0x6d2b, 0x6d3d, 0x6d38, 0x6d19, 0x6d35, 0x6d33, 0x6d12, 0x6d0c, 0x6d63, 0x6d93, 0x6d64, 0x6d5a, 0x6d79, 0x6d59, 0x6d8e, 0x6d95, 0x6fe4, 0x6d85, 0x6df9, 0x6e15, 0x6e0a, 0x6db5, 0x6dc7, 0x6de6, 0x6db8, 0x6dc6, 0x6dec, 0x6dde, 0x6dcc, 0x6de8, 0x6dd2, 0x6dc5, 0x6dfa, 0x6dd9, 0x6de4, 0x6dd5, 0x6dea, 0x6dee, 0x6e2d, 0x6e6e, 0x6e2e, 0x6e19, 0x6e72, 0x6e5f, 0x6e3e, 0x6e23, 0x6e6b, 0x6e2b, 0x6e76, 0x6e4d, 0x6e1f, 0x6e43, 0x6e3a, 0x6e4e, 0x6e24, 0x6eff, 0x6e1d, 0x6e38, 0x6e82, 0x6eaa, 0x6e98, 0x6ec9, 0x6eb7, 0x6ed3, 0x6ebd, 0x6eaf, 0x6ec4, 0x6eb2, 0x6ed4, 0x6ed5, 0x6e8f, 0x6ea5, 0x6ec2, 0x6e9f, 0x6f41, 0x6f11, 0x704c, 0x6eec, 0x6ef8, 0x6efe, 0x6f3f, 0x6ef2, 0x6f31, 0x6eef, 0x6f32, 0x6ecc, 94, 0x5f21, 0x6f3e, 0x6f13, 0x6ef7, 0x6f86, 0x6f7a, 0x6f78, 0x6f81, 0x6f80, 0x6f6f, 0x6f5b, 0x6ff3, 0x6f6d, 0x6f82, 0x6f7c, 0x6f58, 0x6f8e, 0x6f91, 0x6fc2, 0x6f66, 0x6fb3, 0x6fa3, 0x6fa1, 0x6fa4, 0x6fb9, 0x6fc6, 0x6faa, 0x6fdf, 0x6fd5, 0x6fec, 0x6fd4, 0x6fd8, 0x6ff1, 0x6fee, 0x6fdb, 0x7009, 0x700b, 0x6ffa, 0x7011, 0x7001, 0x700f, 0x6ffe, 0x701b, 0x701a, 0x6f74, 0x701d, 0x7018, 0x701f, 0x7030, 0x703e, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70af, 0x70f1, 0x70ac, 0x70b8, 0x70b3, 0x70ae, 0x70df, 0x70cb, 0x70dd, 0x70d9, 0x7109, 0x70fd, 0x711c, 0x7119, 0x7165, 0x7155, 0x7188, 0x7166, 0x7162, 0x714c, 0x7156, 0x716c, 0x718f, 0x71fb, 0x7184, 0x7195, 0x71a8, 0x71ac, 0x71d7, 0x71b9, 0x71be, 0x71d2, 0x71c9, 0x71d4, 0x71ce, 0x71e0, 0x71ec, 0x71e7, 0x71f5, 0x71fc, 94, 0x6021, 0x71f9, 0x71ff, 0x720d, 0x7210, 0x721b, 0x7228, 0x722d, 0x722c, 0x7230, 0x7232, 0x723b, 0x723c, 0x723f, 0x7240, 0x7246, 0x724b, 0x7258, 0x7274, 0x727e, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296, 0x72a2, 0x72a7, 0x72b9, 0x72b2, 0x72c3, 0x72c6, 0x72c4, 0x72ce, 0x72d2, 0x72e2, 0x72e0, 0x72e1, 0x72f9, 0x72f7, 0x500f, 0x7317, 0x730a, 0x731c, 0x7316, 0x731d, 0x7334, 0x732f, 0x7329, 0x7325, 0x733e, 0x734e, 0x734f, 0x9ed8, 0x7357, 0x736a, 0x7368, 0x7370, 0x7378, 0x7375, 0x737b, 0x737a, 0x73c8, 0x73b3, 0x73ce, 0x73bb, 0x73c0, 0x73e5, 0x73ee, 0x73de, 0x74a2, 0x7405, 0x746f, 0x7425, 0x73f8, 0x7432, 0x743a, 0x7455, 0x743f, 0x745f, 0x7459, 0x7441, 0x745c, 0x7469, 0x7470, 0x7463, 0x746a, 0x7476, 0x747e, 0x748b, 0x749e, 0x74a7, 0x74ca, 0x74cf, 0x74d4, 0x73f1, 94, 0x6121, 0x74e0, 0x74e3, 0x74e7, 0x74e9, 0x74ee, 0x74f2, 0x74f0, 0x74f1, 0x74f8, 0x74f7, 0x7504, 0x7503, 0x7505, 0x750c, 0x750e, 0x750d, 0x7515, 0x7513, 0x751e, 0x7526, 0x752c, 0x753c, 0x7544, 0x754d, 0x754a, 0x7549, 0x755b, 0x7546, 0x755a, 0x7569, 0x7564, 0x7567, 0x756b, 0x756d, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758a, 0x7589, 0x7582, 0x7594, 0x759a, 0x759d, 0x75a5, 0x75a3, 0x75c2, 0x75b3, 0x75c3, 0x75b5, 0x75bd, 0x75b8, 0x75bc, 0x75b1, 0x75cd, 0x75ca, 0x75d2, 0x75d9, 0x75e3, 0x75de, 0x75fe, 0x75ff, 0x75fc, 0x7601, 0x75f0, 0x75fa, 0x75f2, 0x75f3, 0x760b, 0x760d, 0x7609, 0x761f, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630, 0x763b, 0x7647, 0x7648, 0x7646, 0x765c, 0x7658, 0x7661, 0x7662, 0x7668, 0x7669, 0x766a, 0x7667, 0x766c, 0x7670, 94, 0x6221, 0x7672, 0x7676, 0x7678, 0x767c, 0x7680, 0x7683, 0x7688, 0x768b, 0x768e, 0x7696, 0x7693, 0x7699, 0x769a, 0x76b0, 0x76b4, 0x76b8, 0x76b9, 0x76ba, 0x76c2, 0x76cd, 0x76d6, 0x76d2, 0x76de, 0x76e1, 0x76e5, 0x76e7, 0x76ea, 0x862f, 0x76fb, 0x7708, 0x7707, 0x7704, 0x7729, 0x7724, 0x771e, 0x7725, 0x7726, 0x771b, 0x7737, 0x7738, 0x7747, 0x775a, 0x7768, 0x776b, 0x775b, 0x7765, 0x777f, 0x777e, 0x7779, 0x778e, 0x778b, 0x7791, 0x77a0, 0x779e, 0x77b0, 0x77b6, 0x77b9, 0x77bf, 0x77bc, 0x77bd, 0x77bb, 0x77c7, 0x77cd, 0x77d7, 0x77da, 0x77dc, 0x77e3, 0x77ee, 0x77fc, 0x780c, 0x7812, 0x7926, 0x7820, 0x792a, 0x7845, 0x788e, 0x7874, 0x7886, 0x787c, 0x789a, 0x788c, 0x78a3, 0x78b5, 0x78aa, 0x78af, 0x78d1, 0x78c6, 0x78cb, 0x78d4, 0x78be, 0x78bc, 0x78c5, 0x78ca, 0x78ec, 94, 0x6321, 0x78e7, 0x78da, 0x78fd, 0x78f4, 0x7907, 0x7912, 0x7911, 0x7919, 0x792c, 0x792b, 0x7940, 0x7960, 0x7957, 0x795f, 0x795a, 0x7955, 0x7953, 0x797a, 0x797f, 0x798a, 0x799d, 0x79a7, 0x9f4b, 0x79aa, 0x79ae, 0x79b3, 0x79b9, 0x79ba, 0x79c9, 0x79d5, 0x79e7, 0x79ec, 0x79e1, 0x79e3, 0x7a08, 0x7a0d, 0x7a18, 0x7a19, 0x7a20, 0x7a1f, 0x7980, 0x7a31, 0x7a3b, 0x7a3e, 0x7a37, 0x7a43, 0x7a57, 0x7a49, 0x7a61, 0x7a62, 0x7a69, 0x9f9d, 0x7a70, 0x7a79, 0x7a7d, 0x7a88, 0x7a97, 0x7a95, 0x7a98, 0x7a96, 0x7aa9, 0x7ac8, 0x7ab0, 0x7ab6, 0x7ac5, 0x7ac4, 0x7abf, 0x9083, 0x7ac7, 0x7aca, 0x7acd, 0x7acf, 0x7ad5, 0x7ad3, 0x7ad9, 0x7ada, 0x7add, 0x7ae1, 0x7ae2, 0x7ae6, 0x7aed, 0x7af0, 0x7b02, 0x7b0f, 0x7b0a, 0x7b06, 0x7b33, 0x7b18, 0x7b19, 0x7b1e, 0x7b35, 0x7b28, 0x7b36, 0x7b50, 94, 0x6421, 0x7b7a, 0x7b04, 0x7b4d, 0x7b0b, 0x7b4c, 0x7b45, 0x7b75, 0x7b65, 0x7b74, 0x7b67, 0x7b70, 0x7b71, 0x7b6c, 0x7b6e, 0x7b9d, 0x7b98, 0x7b9f, 0x7b8d, 0x7b9c, 0x7b9a, 0x7b8b, 0x7b92, 0x7b8f, 0x7b5d, 0x7b99, 0x7bcb, 0x7bc1, 0x7bcc, 0x7bcf, 0x7bb4, 0x7bc6, 0x7bdd, 0x7be9, 0x7c11, 0x7c14, 0x7be6, 0x7be5, 0x7c60, 0x7c00, 0x7c07, 0x7c13, 0x7bf3, 0x7bf7, 0x7c17, 0x7c0d, 0x7bf6, 0x7c23, 0x7c27, 0x7c2a, 0x7c1f, 0x7c37, 0x7c2b, 0x7c3d, 0x7c4c, 0x7c43, 0x7c54, 0x7c4f, 0x7c40, 0x7c50, 0x7c58, 0x7c5f, 0x7c64, 0x7c56, 0x7c65, 0x7c6c, 0x7c75, 0x7c83, 0x7c90, 0x7ca4, 0x7cad, 0x7ca2, 0x7cab, 0x7ca1, 0x7ca8, 0x7cb3, 0x7cb2, 0x7cb1, 0x7cae, 0x7cb9, 0x7cbd, 0x7cc0, 0x7cc5, 0x7cc2, 0x7cd8, 0x7cd2, 0x7cdc, 0x7ce2, 0x9b3b, 0x7cef, 0x7cf2, 0x7cf4, 0x7cf6, 0x7cfa, 0x7d06, 94, 0x6521, 0x7d02, 0x7d1c, 0x7d15, 0x7d0a, 0x7d45, 0x7d4b, 0x7d2e, 0x7d32, 0x7d3f, 0x7d35, 0x7d46, 0x7d73, 0x7d56, 0x7d4e, 0x7d72, 0x7d68, 0x7d6e, 0x7d4f, 0x7d63, 0x7d93, 0x7d89, 0x7d5b, 0x7d8f, 0x7d7d, 0x7d9b, 0x7dba, 0x7dae, 0x7da3, 0x7db5, 0x7dc7, 0x7dbd, 0x7dab, 0x7e3d, 0x7da2, 0x7daf, 0x7ddc, 0x7db8, 0x7d9f, 0x7db0, 0x7dd8, 0x7ddd, 0x7de4, 0x7dde, 0x7dfb, 0x7df2, 0x7de1, 0x7e05, 0x7e0a, 0x7e23, 0x7e21, 0x7e12, 0x7e31, 0x7e1f, 0x7e09, 0x7e0b, 0x7e22, 0x7e46, 0x7e66, 0x7e3b, 0x7e35, 0x7e39, 0x7e43, 0x7e37, 0x7e32, 0x7e3a, 0x7e67, 0x7e5d, 0x7e56, 0x7e5e, 0x7e59, 0x7e5a, 0x7e79, 0x7e6a, 0x7e69, 0x7e7c, 0x7e7b, 0x7e83, 0x7dd5, 0x7e7d, 0x8fae, 0x7e7f, 0x7e88, 0x7e89, 0x7e8c, 0x7e92, 0x7e90, 0x7e93, 0x7e94, 0x7e96, 0x7e8e, 0x7e9b, 0x7e9c, 0x7f38, 0x7f3a, 94, 0x6621, 0x7f45, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f50, 0x7f51, 0x7f55, 0x7f54, 0x7f58, 0x7f5f, 0x7f60, 0x7f68, 0x7f69, 0x7f67, 0x7f78, 0x7f82, 0x7f86, 0x7f83, 0x7f88, 0x7f87, 0x7f8c, 0x7f94, 0x7f9e, 0x7f9d, 0x7f9a, 0x7fa3, 0x7faf, 0x7fb2, 0x7fb9, 0x7fae, 0x7fb6, 0x7fb8, 0x8b71, 0x7fc5, 0x7fc6, 0x7fca, 0x7fd5, 0x7fd4, 0x7fe1, 0x7fe6, 0x7fe9, 0x7ff3, 0x7ff9, 0x98dc, 0x8006, 0x8004, 0x800b, 0x8012, 0x8018, 0x8019, 0x801c, 0x8021, 0x8028, 0x803f, 0x803b, 0x804a, 0x8046, 0x8052, 0x8058, 0x805a, 0x805f, 0x8062, 0x8068, 0x8073, 0x8072, 0x8070, 0x8076, 0x8079, 0x807d, 0x807f, 0x8084, 0x8086, 0x8085, 0x809b, 0x8093, 0x809a, 0x80ad, 0x5190, 0x80ac, 0x80db, 0x80e5, 0x80d9, 0x80dd, 0x80c4, 0x80da, 0x80d6, 0x8109, 0x80ef, 0x80f1, 0x811b, 0x8129, 0x8123, 0x812f, 0x814b, 94, 0x6721, 0x968b, 0x8146, 0x813e, 0x8153, 0x8151, 0x80fc, 0x8171, 0x816e, 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818a, 0x8180, 0x8182, 0x81a0, 0x8195, 0x81a4, 0x81a3, 0x815f, 0x8193, 0x81a9, 0x81b0, 0x81b5, 0x81be, 0x81b8, 0x81bd, 0x81c0, 0x81c2, 0x81ba, 0x81c9, 0x81cd, 0x81d1, 0x81d9, 0x81d8, 0x81c8, 0x81da, 0x81df, 0x81e0, 0x81e7, 0x81fa, 0x81fb, 0x81fe, 0x8201, 0x8202, 0x8205, 0x8207, 0x820a, 0x820d, 0x8210, 0x8216, 0x8229, 0x822b, 0x8238, 0x8233, 0x8240, 0x8259, 0x8258, 0x825d, 0x825a, 0x825f, 0x8264, 0x8262, 0x8268, 0x826a, 0x826b, 0x822e, 0x8271, 0x8277, 0x8278, 0x827e, 0x828d, 0x8292, 0x82ab, 0x829f, 0x82bb, 0x82ac, 0x82e1, 0x82e3, 0x82df, 0x82d2, 0x82f4, 0x82f3, 0x82fa, 0x8393, 0x8303, 0x82fb, 0x82f9, 0x82de, 0x8306, 0x82dc, 0x8309, 0x82d9, 94, 0x6821, 0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350, 0x8345, 0x832f, 0x832b, 0x8317, 0x8318, 0x8385, 0x839a, 0x83aa, 0x839f, 0x83a2, 0x8396, 0x8323, 0x838e, 0x8387, 0x838a, 0x837c, 0x83b5, 0x8373, 0x8375, 0x83a0, 0x8389, 0x83a8, 0x83f4, 0x8413, 0x83eb, 0x83ce, 0x83fd, 0x8403, 0x83d8, 0x840b, 0x83c1, 0x83f7, 0x8407, 0x83e0, 0x83f2, 0x840d, 0x8422, 0x8420, 0x83bd, 0x8438, 0x8506, 0x83fb, 0x846d, 0x842a, 0x843c, 0x855a, 0x8484, 0x8477, 0x846b, 0x84ad, 0x846e, 0x8482, 0x8469, 0x8446, 0x842c, 0x846f, 0x8479, 0x8435, 0x84ca, 0x8462, 0x84b9, 0x84bf, 0x849f, 0x84d9, 0x84cd, 0x84bb, 0x84da, 0x84d0, 0x84c1, 0x84c6, 0x84d6, 0x84a1, 0x8521, 0x84ff, 0x84f4, 0x8517, 0x8518, 0x852c, 0x851f, 0x8515, 0x8514, 0x84fc, 0x8540, 0x8563, 0x8558, 0x8548, 94, 0x6921, 0x8541, 0x8602, 0x854b, 0x8555, 0x8580, 0x85a4, 0x8588, 0x8591, 0x858a, 0x85a8, 0x856d, 0x8594, 0x859b, 0x85ea, 0x8587, 0x859c, 0x8577, 0x857e, 0x8590, 0x85c9, 0x85ba, 0x85cf, 0x85b9, 0x85d0, 0x85d5, 0x85dd, 0x85e5, 0x85dc, 0x85f9, 0x860a, 0x8613, 0x860b, 0x85fe, 0x85fa, 0x8606, 0x8622, 0x861a, 0x8630, 0x863f, 0x864d, 0x4e55, 0x8654, 0x865f, 0x8667, 0x8671, 0x8693, 0x86a3, 0x86a9, 0x86aa, 0x868b, 0x868c, 0x86b6, 0x86af, 0x86c4, 0x86c6, 0x86b0, 0x86c9, 0x8823, 0x86ab, 0x86d4, 0x86de, 0x86e9, 0x86ec, 0x86df, 0x86db, 0x86ef, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86fb, 0x8711, 0x8709, 0x870d, 0x86f9, 0x870a, 0x8734, 0x873f, 0x8737, 0x873b, 0x8725, 0x8729, 0x871a, 0x8760, 0x875f, 0x8778, 0x874c, 0x874e, 0x8774, 0x8757, 0x8768, 0x876e, 0x8759, 94, 0x6a21, 0x8753, 0x8763, 0x876a, 0x8805, 0x87a2, 0x879f, 0x8782, 0x87af, 0x87cb, 0x87bd, 0x87c0, 0x87d0, 0x96d6, 0x87ab, 0x87c4, 0x87b3, 0x87c7, 0x87c6, 0x87bb, 0x87ef, 0x87f2, 0x87e0, 0x880f, 0x880d, 0x87fe, 0x87f6, 0x87f7, 0x880e, 0x87d2, 0x8811, 0x8816, 0x8815, 0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883b, 0x8844, 0x8842, 0x8852, 0x8859, 0x885e, 0x8862, 0x886b, 0x8881, 0x887e, 0x889e, 0x8875, 0x887d, 0x88b5, 0x8872, 0x8882, 0x8897, 0x8892, 0x88ae, 0x8899, 0x88a2, 0x888d, 0x88a4, 0x88b0, 0x88bf, 0x88b1, 0x88c3, 0x88c4, 0x88d4, 0x88d8, 0x88d9, 0x88dd, 0x88f9, 0x8902, 0x88fc, 0x88f4, 0x88e8, 0x88f2, 0x8904, 0x890c, 0x890a, 0x8913, 0x8943, 0x891e, 0x8925, 0x892a, 0x892b, 0x8941, 0x8944, 0x893b, 0x8936, 0x8938, 0x894c, 0x891d, 0x8960, 0x895e, 94, 0x6b21, 0x8966, 0x8964, 0x896d, 0x896a, 0x896f, 0x8974, 0x8977, 0x897e, 0x8983, 0x8988, 0x898a, 0x8993, 0x8998, 0x89a1, 0x89a9, 0x89a6, 0x89ac, 0x89af, 0x89b2, 0x89ba, 0x89bd, 0x89bf, 0x89c0, 0x89da, 0x89dc, 0x89dd, 0x89e7, 0x89f4, 0x89f8, 0x8a03, 0x8a16, 0x8a10, 0x8a0c, 0x8a1b, 0x8a1d, 0x8a25, 0x8a36, 0x8a41, 0x8a5b, 0x8a52, 0x8a46, 0x8a48, 0x8a7c, 0x8a6d, 0x8a6c, 0x8a62, 0x8a85, 0x8a82, 0x8a84, 0x8aa8, 0x8aa1, 0x8a91, 0x8aa5, 0x8aa6, 0x8a9a, 0x8aa3, 0x8ac4, 0x8acd, 0x8ac2, 0x8ada, 0x8aeb, 0x8af3, 0x8ae7, 0x8ae4, 0x8af1, 0x8b14, 0x8ae0, 0x8ae2, 0x8af7, 0x8ade, 0x8adb, 0x8b0c, 0x8b07, 0x8b1a, 0x8ae1, 0x8b16, 0x8b10, 0x8b17, 0x8b20, 0x8b33, 0x97ab, 0x8b26, 0x8b2b, 0x8b3e, 0x8b28, 0x8b41, 0x8b4c, 0x8b4f, 0x8b4e, 0x8b49, 0x8b56, 0x8b5b, 0x8b5a, 0x8b6b, 94, 0x6c21, 0x8b5f, 0x8b6c, 0x8b6f, 0x8b74, 0x8b7d, 0x8b80, 0x8b8c, 0x8b8e, 0x8b92, 0x8b93, 0x8b96, 0x8b99, 0x8b9a, 0x8c3a, 0x8c41, 0x8c3f, 0x8c48, 0x8c4c, 0x8c4e, 0x8c50, 0x8c55, 0x8c62, 0x8c6c, 0x8c78, 0x8c7a, 0x8c82, 0x8c89, 0x8c85, 0x8c8a, 0x8c8d, 0x8c8e, 0x8c94, 0x8c7c, 0x8c98, 0x621d, 0x8cad, 0x8caa, 0x8cbd, 0x8cb2, 0x8cb3, 0x8cae, 0x8cb6, 0x8cc8, 0x8cc1, 0x8ce4, 0x8ce3, 0x8cda, 0x8cfd, 0x8cfa, 0x8cfb, 0x8d04, 0x8d05, 0x8d0a, 0x8d07, 0x8d0f, 0x8d0d, 0x8d10, 0x9f4e, 0x8d13, 0x8ccd, 0x8d14, 0x8d16, 0x8d67, 0x8d6d, 0x8d71, 0x8d73, 0x8d81, 0x8d99, 0x8dc2, 0x8dbe, 0x8dba, 0x8dcf, 0x8dda, 0x8dd6, 0x8dcc, 0x8ddb, 0x8dcb, 0x8dea, 0x8deb, 0x8ddf, 0x8de3, 0x8dfc, 0x8e08, 0x8e09, 0x8dff, 0x8e1d, 0x8e1e, 0x8e10, 0x8e1f, 0x8e42, 0x8e35, 0x8e30, 0x8e34, 0x8e4a, 94, 0x6d21, 0x8e47, 0x8e49, 0x8e4c, 0x8e50, 0x8e48, 0x8e59, 0x8e64, 0x8e60, 0x8e2a, 0x8e63, 0x8e55, 0x8e76, 0x8e72, 0x8e7c, 0x8e81, 0x8e87, 0x8e85, 0x8e84, 0x8e8b, 0x8e8a, 0x8e93, 0x8e91, 0x8e94, 0x8e99, 0x8eaa, 0x8ea1, 0x8eac, 0x8eb0, 0x8ec6, 0x8eb1, 0x8ebe, 0x8ec5, 0x8ec8, 0x8ecb, 0x8edb, 0x8ee3, 0x8efc, 0x8efb, 0x8eeb, 0x8efe, 0x8f0a, 0x8f05, 0x8f15, 0x8f12, 0x8f19, 0x8f13, 0x8f1c, 0x8f1f, 0x8f1b, 0x8f0c, 0x8f26, 0x8f33, 0x8f3b, 0x8f39, 0x8f45, 0x8f42, 0x8f3e, 0x8f4c, 0x8f49, 0x8f46, 0x8f4e, 0x8f57, 0x8f5c, 0x8f62, 0x8f63, 0x8f64, 0x8f9c, 0x8f9f, 0x8fa3, 0x8fad, 0x8faf, 0x8fb7, 0x8fda, 0x8fe5, 0x8fe2, 0x8fea, 0x8fef, 0x9087, 0x8ff4, 0x9005, 0x8ff9, 0x8ffa, 0x9011, 0x9015, 0x9021, 0x900d, 0x901e, 0x9016, 0x900b, 0x9027, 0x9036, 0x9035, 0x9039, 0x8ff8, 94, 0x6e21, 0x904f, 0x9050, 0x9051, 0x9052, 0x900e, 0x9049, 0x903e, 0x9056, 0x9058, 0x905e, 0x9068, 0x906f, 0x9076, 0x96a8, 0x9072, 0x9082, 0x907d, 0x9081, 0x9080, 0x908a, 0x9089, 0x908f, 0x90a8, 0x90af, 0x90b1, 0x90b5, 0x90e2, 0x90e4, 0x6248, 0x90db, 0x9102, 0x9112, 0x9119, 0x9132, 0x9130, 0x914a, 0x9156, 0x9158, 0x9163, 0x9165, 0x9169, 0x9173, 0x9172, 0x918b, 0x9189, 0x9182, 0x91a2, 0x91ab, 0x91af, 0x91aa, 0x91b5, 0x91b4, 0x91ba, 0x91c0, 0x91c1, 0x91c9, 0x91cb, 0x91d0, 0x91d6, 0x91df, 0x91e1, 0x91db, 0x91fc, 0x91f5, 0x91f6, 0x921e, 0x91ff, 0x9214, 0x922c, 0x9215, 0x9211, 0x925e, 0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923f, 0x924b, 0x9250, 0x929c, 0x9296, 0x9293, 0x929b, 0x925a, 0x92cf, 0x92b9, 0x92b7, 0x92e9, 0x930f, 0x92fa, 0x9344, 0x932e, 94, 0x6f21, 0x9319, 0x9322, 0x931a, 0x9323, 0x933a, 0x9335, 0x933b, 0x935c, 0x9360, 0x937c, 0x936e, 0x9356, 0x93b0, 0x93ac, 0x93ad, 0x9394, 0x93b9, 0x93d6, 0x93d7, 0x93e8, 0x93e5, 0x93d8, 0x93c3, 0x93dd, 0x93d0, 0x93c8, 0x93e4, 0x941a, 0x9414, 0x9413, 0x9403, 0x9407, 0x9410, 0x9436, 0x942b, 0x9435, 0x9421, 0x943a, 0x9441, 0x9452, 0x9444, 0x945b, 0x9460, 0x9462, 0x945e, 0x946a, 0x9229, 0x9470, 0x9475, 0x9477, 0x947d, 0x945a, 0x947c, 0x947e, 0x9481, 0x947f, 0x9582, 0x9587, 0x958a, 0x9594, 0x9596, 0x9598, 0x9599, 0x95a0, 0x95a8, 0x95a7, 0x95ad, 0x95bc, 0x95bb, 0x95b9, 0x95be, 0x95ca, 0x6ff6, 0x95c3, 0x95cd, 0x95cc, 0x95d5, 0x95d4, 0x95d6, 0x95dc, 0x95e1, 0x95e5, 0x95e2, 0x9621, 0x9628, 0x962e, 0x962f, 0x9642, 0x964c, 0x964f, 0x964b, 0x9677, 0x965c, 0x965e, 94, 0x7021, 0x965d, 0x965f, 0x9666, 0x9672, 0x966c, 0x968d, 0x9698, 0x9695, 0x9697, 0x96aa, 0x96a7, 0x96b1, 0x96b2, 0x96b0, 0x96b4, 0x96b6, 0x96b8, 0x96b9, 0x96ce, 0x96cb, 0x96c9, 0x96cd, 0x894d, 0x96dc, 0x970d, 0x96d5, 0x96f9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970e, 0x9711, 0x970f, 0x9716, 0x9719, 0x9724, 0x972a, 0x9730, 0x9739, 0x973d, 0x973e, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975c, 0x9760, 0x9764, 0x9766, 0x9768, 0x52d2, 0x976b, 0x9771, 0x9779, 0x9785, 0x977c, 0x9781, 0x977a, 0x9786, 0x978b, 0x978f, 0x9790, 0x979c, 0x97a8, 0x97a6, 0x97a3, 0x97b3, 0x97b4, 0x97c3, 0x97c6, 0x97c8, 0x97cb, 0x97dc, 0x97ed, 0x9f4f, 0x97f2, 0x7adf, 0x97f6, 0x97f5, 0x980f, 0x980c, 0x9838, 0x9824, 0x9821, 0x9837, 0x983d, 0x9846, 0x984f, 0x984b, 0x986b, 0x986f, 0x9870, 94, 0x7121, 0x9871, 0x9874, 0x9873, 0x98aa, 0x98af, 0x98b1, 0x98b6, 0x98c4, 0x98c3, 0x98c6, 0x98e9, 0x98eb, 0x9903, 0x9909, 0x9912, 0x9914, 0x9918, 0x9921, 0x991d, 0x991e, 0x9924, 0x9920, 0x992c, 0x992e, 0x993d, 0x993e, 0x9942, 0x9949, 0x9945, 0x9950, 0x994b, 0x9951, 0x9952, 0x994c, 0x9955, 0x9997, 0x9998, 0x99a5, 0x99ad, 0x99ae, 0x99bc, 0x99df, 0x99db, 0x99dd, 0x99d8, 0x99d1, 0x99ed, 0x99ee, 0x99f1, 0x99f2, 0x99fb, 0x99f8, 0x9a01, 0x9a0f, 0x9a05, 0x99e2, 0x9a19, 0x9a2b, 0x9a37, 0x9a45, 0x9a42, 0x9a40, 0x9a43, 0x9a3e, 0x9a55, 0x9a4d, 0x9a5b, 0x9a57, 0x9a5f, 0x9a62, 0x9a65, 0x9a64, 0x9a69, 0x9a6b, 0x9a6a, 0x9aad, 0x9ab0, 0x9abc, 0x9ac0, 0x9acf, 0x9ad1, 0x9ad3, 0x9ad4, 0x9ade, 0x9adf, 0x9ae2, 0x9ae3, 0x9ae6, 0x9aef, 0x9aeb, 0x9aee, 0x9af4, 0x9af1, 0x9af7, 94, 0x7221, 0x9afb, 0x9b06, 0x9b18, 0x9b1a, 0x9b1f, 0x9b22, 0x9b23, 0x9b25, 0x9b27, 0x9b28, 0x9b29, 0x9b2a, 0x9b2e, 0x9b2f, 0x9b32, 0x9b44, 0x9b43, 0x9b4f, 0x9b4d, 0x9b4e, 0x9b51, 0x9b58, 0x9b74, 0x9b93, 0x9b83, 0x9b91, 0x9b96, 0x9b97, 0x9b9f, 0x9ba0, 0x9ba8, 0x9bb4, 0x9bc0, 0x9bca, 0x9bb9, 0x9bc6, 0x9bcf, 0x9bd1, 0x9bd2, 0x9be3, 0x9be2, 0x9be4, 0x9bd4, 0x9be1, 0x9c3a, 0x9bf2, 0x9bf1, 0x9bf0, 0x9c15, 0x9c14, 0x9c09, 0x9c13, 0x9c0c, 0x9c06, 0x9c08, 0x9c12, 0x9c0a, 0x9c04, 0x9c2e, 0x9c1b, 0x9c25, 0x9c24, 0x9c21, 0x9c30, 0x9c47, 0x9c32, 0x9c46, 0x9c3e, 0x9c5a, 0x9c60, 0x9c67, 0x9c76, 0x9c78, 0x9ce7, 0x9cec, 0x9cf0, 0x9d09, 0x9d08, 0x9ceb, 0x9d03, 0x9d06, 0x9d2a, 0x9d26, 0x9daf, 0x9d23, 0x9d1f, 0x9d44, 0x9d15, 0x9d12, 0x9d41, 0x9d3f, 0x9d3e, 0x9d46, 0x9d48, 94, 0x7321, 0x9d5d, 0x9d5e, 0x9d64, 0x9d51, 0x9d50, 0x9d59, 0x9d72, 0x9d89, 0x9d87, 0x9dab, 0x9d6f, 0x9d7a, 0x9d9a, 0x9da4, 0x9da9, 0x9db2, 0x9dc4, 0x9dc1, 0x9dbb, 0x9db8, 0x9dba, 0x9dc6, 0x9dcf, 0x9dc2, 0x9dd9, 0x9dd3, 0x9df8, 0x9de6, 0x9ded, 0x9def, 0x9dfd, 0x9e1a, 0x9e1b, 0x9e1e, 0x9e75, 0x9e79, 0x9e7d, 0x9e81, 0x9e88, 0x9e8b, 0x9e8c, 0x9e92, 0x9e95, 0x9e91, 0x9e9d, 0x9ea5, 0x9ea9, 0x9eb8, 0x9eaa, 0x9ead, 0x9761, 0x9ecc, 0x9ece, 0x9ecf, 0x9ed0, 0x9ed4, 0x9edc, 0x9ede, 0x9edd, 0x9ee0, 0x9ee5, 0x9ee8, 0x9eef, 0x9ef4, 0x9ef6, 0x9ef7, 0x9ef9, 0x9efb, 0x9efc, 0x9efd, 0x9f07, 0x9f08, 0x76b7, 0x9f15, 0x9f21, 0x9f2c, 0x9f3e, 0x9f4a, 0x9f52, 0x9f54, 0x9f63, 0x9f5f, 0x9f60, 0x9f61, 0x9f66, 0x9f67, 0x9f6c, 0x9f6a, 0x9f77, 0x9f72, 0x9f76, 0x9f95, 0x9f9c, 0x9fa0, 6, 0x7421, 0x582f, 0x69c7, 0x9059, 0x7464, 0x51dc, 0x7199, 0 jade-1.2.1/lib/jis0212.h100444 764 764 140575 6606574410 12300 0ustar jjcjjc11, 0x222f, 0x02d8, 0x02c7, 0x00b8, 0x02d9, 0x02dd, 0x00af, 0x02db, 0x02da, 0x007e, 0x0384, 0x0385, 3, 0x2242, 0x00a1, 0x00a6, 0x00bf, 7, 0x226b, 0x00ba, 0x00aa, 0x00a9, 0x00ae, 0x2122, 0x00a4, 0x2116, 5, 0x2661, 0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 1, 0x2667, 0x038c, 2, 0x2669, 0x038e, 0x03ab, 1, 0x266c, 0x038f, 12, 0x2671, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, 0x03c2, 0x03cd, 0x03cb, 0x03b0, 0x03ce, 13, 0x2742, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x040e, 0x040f, 13, 0x2772, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, 2, 0x2921, 0x00c6, 0x0110, 1, 0x2924, 0x0126, 1, 0x2926, 0x0132, 2, 0x2928, 0x0141, 0x013f, 3, 0x292b, 0x014a, 0x00d8, 0x0152, 2, 0x292f, 0x0166, 0x00de, 16, 0x2941, 0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0142, 0x0140, 0x0149, 0x014b, 0x00f8, 0x0153, 0x00df, 0x0167, 0x00fe, 24, 0x2a21, 0x00c1, 0x00c0, 0x00c4, 0x00c2, 0x0102, 0x01cd, 0x0100, 0x0104, 0x00c5, 0x00c3, 0x0106, 0x0108, 0x010c, 0x00c7, 0x010a, 0x010e, 0x00c9, 0x00c8, 0x00cb, 0x00ca, 0x011a, 0x0116, 0x0112, 0x0118, 62, 0x2a3a, 0x011c, 0x011e, 0x0122, 0x0120, 0x0124, 0x00cd, 0x00cc, 0x00cf, 0x00ce, 0x01cf, 0x0130, 0x012a, 0x012e, 0x0128, 0x0134, 0x0136, 0x0139, 0x013d, 0x013b, 0x0143, 0x0147, 0x0145, 0x00d1, 0x00d3, 0x00d2, 0x00d6, 0x00d4, 0x01d1, 0x0150, 0x014c, 0x00d5, 0x0154, 0x0158, 0x0156, 0x015a, 0x015c, 0x0160, 0x015e, 0x0164, 0x0162, 0x00da, 0x00d9, 0x00dc, 0x00db, 0x016c, 0x01d3, 0x0170, 0x016a, 0x0172, 0x016e, 0x0168, 0x01d7, 0x01db, 0x01d9, 0x01d5, 0x0174, 0x00dd, 0x0178, 0x0176, 0x0179, 0x017d, 0x017b, 27, 0x2b21, 0x00e1, 0x00e0, 0x00e4, 0x00e2, 0x0103, 0x01ce, 0x0101, 0x0105, 0x00e5, 0x00e3, 0x0107, 0x0109, 0x010d, 0x00e7, 0x010b, 0x010f, 0x00e9, 0x00e8, 0x00eb, 0x00ea, 0x011b, 0x0117, 0x0113, 0x0119, 0x01f5, 0x011d, 0x011f, 7, 0x2b3d, 0x0121, 0x0125, 0x00ed, 0x00ec, 0x00ef, 0x00ee, 0x01d0, 51, 0x2b45, 0x012b, 0x012f, 0x0129, 0x0135, 0x0137, 0x013a, 0x013e, 0x013c, 0x0144, 0x0148, 0x0146, 0x00f1, 0x00f3, 0x00f2, 0x00f6, 0x00f4, 0x01d2, 0x0151, 0x014d, 0x00f5, 0x0155, 0x0159, 0x0157, 0x015b, 0x015d, 0x0161, 0x015f, 0x0165, 0x0163, 0x00fa, 0x00f9, 0x00fc, 0x00fb, 0x016d, 0x01d4, 0x0171, 0x016b, 0x0173, 0x016f, 0x0169, 0x01d8, 0x01dc, 0x01da, 0x01d6, 0x0175, 0x00fd, 0x00ff, 0x0177, 0x017a, 0x017e, 0x017c, 94, 0x3021, 0x4e02, 0x4e04, 0x4e05, 0x4e0c, 0x4e12, 0x4e1f, 0x4e23, 0x4e24, 0x4e28, 0x4e2b, 0x4e2e, 0x4e2f, 0x4e30, 0x4e35, 0x4e40, 0x4e41, 0x4e44, 0x4e47, 0x4e51, 0x4e5a, 0x4e5c, 0x4e63, 0x4e68, 0x4e69, 0x4e74, 0x4e75, 0x4e79, 0x4e7f, 0x4e8d, 0x4e96, 0x4e97, 0x4e9d, 0x4eaf, 0x4eb9, 0x4ec3, 0x4ed0, 0x4eda, 0x4edb, 0x4ee0, 0x4ee1, 0x4ee2, 0x4ee8, 0x4eef, 0x4ef1, 0x4ef3, 0x4ef5, 0x4efd, 0x4efe, 0x4eff, 0x4f00, 0x4f02, 0x4f03, 0x4f08, 0x4f0b, 0x4f0c, 0x4f12, 0x4f15, 0x4f16, 0x4f17, 0x4f19, 0x4f2e, 0x4f31, 0x4f60, 0x4f33, 0x4f35, 0x4f37, 0x4f39, 0x4f3b, 0x4f3e, 0x4f40, 0x4f42, 0x4f48, 0x4f49, 0x4f4b, 0x4f4c, 0x4f52, 0x4f54, 0x4f56, 0x4f58, 0x4f5f, 0x4f63, 0x4f6a, 0x4f6c, 0x4f6e, 0x4f71, 0x4f77, 0x4f78, 0x4f79, 0x4f7a, 0x4f7d, 0x4f7e, 0x4f81, 0x4f82, 0x4f84, 94, 0x3121, 0x4f85, 0x4f89, 0x4f8a, 0x4f8c, 0x4f8e, 0x4f90, 0x4f92, 0x4f93, 0x4f94, 0x4f97, 0x4f99, 0x4f9a, 0x4f9e, 0x4f9f, 0x4fb2, 0x4fb7, 0x4fb9, 0x4fbb, 0x4fbc, 0x4fbd, 0x4fbe, 0x4fc0, 0x4fc1, 0x4fc5, 0x4fc6, 0x4fc8, 0x4fc9, 0x4fcb, 0x4fcc, 0x4fcd, 0x4fcf, 0x4fd2, 0x4fdc, 0x4fe0, 0x4fe2, 0x4ff0, 0x4ff2, 0x4ffc, 0x4ffd, 0x4fff, 0x5000, 0x5001, 0x5004, 0x5007, 0x500a, 0x500c, 0x500e, 0x5010, 0x5013, 0x5017, 0x5018, 0x501b, 0x501c, 0x501d, 0x501e, 0x5022, 0x5027, 0x502e, 0x5030, 0x5032, 0x5033, 0x5035, 0x5040, 0x5041, 0x5042, 0x5045, 0x5046, 0x504a, 0x504c, 0x504e, 0x5051, 0x5052, 0x5053, 0x5057, 0x5059, 0x505f, 0x5060, 0x5062, 0x5063, 0x5066, 0x5067, 0x506a, 0x506d, 0x5070, 0x5071, 0x503b, 0x5081, 0x5083, 0x5084, 0x5086, 0x508a, 0x508e, 0x508f, 0x5090, 94, 0x3221, 0x5092, 0x5093, 0x5094, 0x5096, 0x509b, 0x509c, 0x509e, 0x509f, 0x50a0, 0x50a1, 0x50a2, 0x50aa, 0x50af, 0x50b0, 0x50b9, 0x50ba, 0x50bd, 0x50c0, 0x50c3, 0x50c4, 0x50c7, 0x50cc, 0x50ce, 0x50d0, 0x50d3, 0x50d4, 0x50d8, 0x50dc, 0x50dd, 0x50df, 0x50e2, 0x50e4, 0x50e6, 0x50e8, 0x50e9, 0x50ef, 0x50f1, 0x50f6, 0x50fa, 0x50fe, 0x5103, 0x5106, 0x5107, 0x5108, 0x510b, 0x510c, 0x510d, 0x510e, 0x50f2, 0x5110, 0x5117, 0x5119, 0x511b, 0x511c, 0x511d, 0x511e, 0x5123, 0x5127, 0x5128, 0x512c, 0x512d, 0x512f, 0x5131, 0x5133, 0x5134, 0x5135, 0x5138, 0x5139, 0x5142, 0x514a, 0x514f, 0x5153, 0x5155, 0x5157, 0x5158, 0x515f, 0x5164, 0x5166, 0x517e, 0x5183, 0x5184, 0x518b, 0x518e, 0x5198, 0x519d, 0x51a1, 0x51a3, 0x51ad, 0x51b8, 0x51ba, 0x51bc, 0x51be, 0x51bf, 0x51c2, 94, 0x3321, 0x51c8, 0x51cf, 0x51d1, 0x51d2, 0x51d3, 0x51d5, 0x51d8, 0x51de, 0x51e2, 0x51e5, 0x51ee, 0x51f2, 0x51f3, 0x51f4, 0x51f7, 0x5201, 0x5202, 0x5205, 0x5212, 0x5213, 0x5215, 0x5216, 0x5218, 0x5222, 0x5228, 0x5231, 0x5232, 0x5235, 0x523c, 0x5245, 0x5249, 0x5255, 0x5257, 0x5258, 0x525a, 0x525c, 0x525f, 0x5260, 0x5261, 0x5266, 0x526e, 0x5277, 0x5278, 0x5279, 0x5280, 0x5282, 0x5285, 0x528a, 0x528c, 0x5293, 0x5295, 0x5296, 0x5297, 0x5298, 0x529a, 0x529c, 0x52a4, 0x52a5, 0x52a6, 0x52a7, 0x52af, 0x52b0, 0x52b6, 0x52b7, 0x52b8, 0x52ba, 0x52bb, 0x52bd, 0x52c0, 0x52c4, 0x52c6, 0x52c8, 0x52cc, 0x52cf, 0x52d1, 0x52d4, 0x52d6, 0x52db, 0x52dc, 0x52e1, 0x52e5, 0x52e8, 0x52e9, 0x52ea, 0x52ec, 0x52f0, 0x52f1, 0x52f4, 0x52f6, 0x52f7, 0x5300, 0x5303, 0x530a, 0x530b, 94, 0x3421, 0x530c, 0x5311, 0x5313, 0x5318, 0x531b, 0x531c, 0x531e, 0x531f, 0x5325, 0x5327, 0x5328, 0x5329, 0x532b, 0x532c, 0x532d, 0x5330, 0x5332, 0x5335, 0x533c, 0x533d, 0x533e, 0x5342, 0x534c, 0x534b, 0x5359, 0x535b, 0x5361, 0x5363, 0x5365, 0x536c, 0x536d, 0x5372, 0x5379, 0x537e, 0x5383, 0x5387, 0x5388, 0x538e, 0x5393, 0x5394, 0x5399, 0x539d, 0x53a1, 0x53a4, 0x53aa, 0x53ab, 0x53af, 0x53b2, 0x53b4, 0x53b5, 0x53b7, 0x53b8, 0x53ba, 0x53bd, 0x53c0, 0x53c5, 0x53cf, 0x53d2, 0x53d3, 0x53d5, 0x53da, 0x53dd, 0x53de, 0x53e0, 0x53e6, 0x53e7, 0x53f5, 0x5402, 0x5413, 0x541a, 0x5421, 0x5427, 0x5428, 0x542a, 0x542f, 0x5431, 0x5434, 0x5435, 0x5443, 0x5444, 0x5447, 0x544d, 0x544f, 0x545e, 0x5462, 0x5464, 0x5466, 0x5467, 0x5469, 0x546b, 0x546d, 0x546e, 0x5474, 0x547f, 94, 0x3521, 0x5481, 0x5483, 0x5485, 0x5488, 0x5489, 0x548d, 0x5491, 0x5495, 0x5496, 0x549c, 0x549f, 0x54a1, 0x54a6, 0x54a7, 0x54a9, 0x54aa, 0x54ad, 0x54ae, 0x54b1, 0x54b7, 0x54b9, 0x54ba, 0x54bb, 0x54bf, 0x54c6, 0x54ca, 0x54cd, 0x54ce, 0x54e0, 0x54ea, 0x54ec, 0x54ef, 0x54f6, 0x54fc, 0x54fe, 0x54ff, 0x5500, 0x5501, 0x5505, 0x5508, 0x5509, 0x550c, 0x550d, 0x550e, 0x5515, 0x552a, 0x552b, 0x5532, 0x5535, 0x5536, 0x553b, 0x553c, 0x553d, 0x5541, 0x5547, 0x5549, 0x554a, 0x554d, 0x5550, 0x5551, 0x5558, 0x555a, 0x555b, 0x555e, 0x5560, 0x5561, 0x5564, 0x5566, 0x557f, 0x5581, 0x5582, 0x5586, 0x5588, 0x558e, 0x558f, 0x5591, 0x5592, 0x5593, 0x5594, 0x5597, 0x55a3, 0x55a4, 0x55ad, 0x55b2, 0x55bf, 0x55c1, 0x55c3, 0x55c6, 0x55c9, 0x55cb, 0x55cc, 0x55ce, 0x55d1, 0x55d2, 94, 0x3621, 0x55d3, 0x55d7, 0x55d8, 0x55db, 0x55de, 0x55e2, 0x55e9, 0x55f6, 0x55ff, 0x5605, 0x5608, 0x560a, 0x560d, 0x560e, 0x560f, 0x5610, 0x5611, 0x5612, 0x5619, 0x562c, 0x5630, 0x5633, 0x5635, 0x5637, 0x5639, 0x563b, 0x563c, 0x563d, 0x563f, 0x5640, 0x5641, 0x5643, 0x5644, 0x5646, 0x5649, 0x564b, 0x564d, 0x564f, 0x5654, 0x565e, 0x5660, 0x5661, 0x5662, 0x5663, 0x5666, 0x5669, 0x566d, 0x566f, 0x5671, 0x5672, 0x5675, 0x5684, 0x5685, 0x5688, 0x568b, 0x568c, 0x5695, 0x5699, 0x569a, 0x569d, 0x569e, 0x569f, 0x56a6, 0x56a7, 0x56a8, 0x56a9, 0x56ab, 0x56ac, 0x56ad, 0x56b1, 0x56b3, 0x56b7, 0x56be, 0x56c5, 0x56c9, 0x56ca, 0x56cb, 0x56cf, 0x56d0, 0x56cc, 0x56cd, 0x56d9, 0x56dc, 0x56dd, 0x56df, 0x56e1, 0x56e4, 0x56e5, 0x56e6, 0x56e7, 0x56e8, 0x56f1, 0x56eb, 0x56ed, 94, 0x3721, 0x56f6, 0x56f7, 0x5701, 0x5702, 0x5707, 0x570a, 0x570c, 0x5711, 0x5715, 0x571a, 0x571b, 0x571d, 0x5720, 0x5722, 0x5723, 0x5724, 0x5725, 0x5729, 0x572a, 0x572c, 0x572e, 0x572f, 0x5733, 0x5734, 0x573d, 0x573e, 0x573f, 0x5745, 0x5746, 0x574c, 0x574d, 0x5752, 0x5762, 0x5765, 0x5767, 0x5768, 0x576b, 0x576d, 0x576e, 0x576f, 0x5770, 0x5771, 0x5773, 0x5774, 0x5775, 0x5777, 0x5779, 0x577a, 0x577b, 0x577c, 0x577e, 0x5781, 0x5783, 0x578c, 0x5794, 0x5797, 0x5799, 0x579a, 0x579c, 0x579d, 0x579e, 0x579f, 0x57a1, 0x5795, 0x57a7, 0x57a8, 0x57a9, 0x57ac, 0x57b8, 0x57bd, 0x57c7, 0x57c8, 0x57cc, 0x57cf, 0x57d5, 0x57dd, 0x57de, 0x57e4, 0x57e6, 0x57e7, 0x57e9, 0x57ed, 0x57f0, 0x57f5, 0x57f6, 0x57f8, 0x57fd, 0x57fe, 0x57ff, 0x5803, 0x5804, 0x5808, 0x5809, 0x57e1, 94, 0x3821, 0x580c, 0x580d, 0x581b, 0x581e, 0x581f, 0x5820, 0x5826, 0x5827, 0x582d, 0x5832, 0x5839, 0x583f, 0x5849, 0x584c, 0x584d, 0x584f, 0x5850, 0x5855, 0x585f, 0x5861, 0x5864, 0x5867, 0x5868, 0x5878, 0x587c, 0x587f, 0x5880, 0x5881, 0x5887, 0x5888, 0x5889, 0x588a, 0x588c, 0x588d, 0x588f, 0x5890, 0x5894, 0x5896, 0x589d, 0x58a0, 0x58a1, 0x58a2, 0x58a6, 0x58a9, 0x58b1, 0x58b2, 0x58c4, 0x58bc, 0x58c2, 0x58c8, 0x58cd, 0x58ce, 0x58d0, 0x58d2, 0x58d4, 0x58d6, 0x58da, 0x58dd, 0x58e1, 0x58e2, 0x58e9, 0x58f3, 0x5905, 0x5906, 0x590b, 0x590c, 0x5912, 0x5913, 0x5914, 0x8641, 0x591d, 0x5921, 0x5923, 0x5924, 0x5928, 0x592f, 0x5930, 0x5933, 0x5935, 0x5936, 0x593f, 0x5943, 0x5946, 0x5952, 0x5953, 0x5959, 0x595b, 0x595d, 0x595e, 0x595f, 0x5961, 0x5963, 0x596b, 0x596d, 94, 0x3921, 0x596f, 0x5972, 0x5975, 0x5976, 0x5979, 0x597b, 0x597c, 0x598b, 0x598c, 0x598e, 0x5992, 0x5995, 0x5997, 0x599f, 0x59a4, 0x59a7, 0x59ad, 0x59ae, 0x59af, 0x59b0, 0x59b3, 0x59b7, 0x59ba, 0x59bc, 0x59c1, 0x59c3, 0x59c4, 0x59c8, 0x59ca, 0x59cd, 0x59d2, 0x59dd, 0x59de, 0x59df, 0x59e3, 0x59e4, 0x59e7, 0x59ee, 0x59ef, 0x59f1, 0x59f2, 0x59f4, 0x59f7, 0x5a00, 0x5a04, 0x5a0c, 0x5a0d, 0x5a0e, 0x5a12, 0x5a13, 0x5a1e, 0x5a23, 0x5a24, 0x5a27, 0x5a28, 0x5a2a, 0x5a2d, 0x5a30, 0x5a44, 0x5a45, 0x5a47, 0x5a48, 0x5a4c, 0x5a50, 0x5a55, 0x5a5e, 0x5a63, 0x5a65, 0x5a67, 0x5a6d, 0x5a77, 0x5a7a, 0x5a7b, 0x5a7e, 0x5a8b, 0x5a90, 0x5a93, 0x5a96, 0x5a99, 0x5a9c, 0x5a9e, 0x5a9f, 0x5aa0, 0x5aa2, 0x5aa7, 0x5aac, 0x5ab1, 0x5ab2, 0x5ab3, 0x5ab5, 0x5ab8, 0x5aba, 0x5abb, 0x5abf, 94, 0x3a21, 0x5ac4, 0x5ac6, 0x5ac8, 0x5acf, 0x5ada, 0x5adc, 0x5ae0, 0x5ae5, 0x5aea, 0x5aee, 0x5af5, 0x5af6, 0x5afd, 0x5b00, 0x5b01, 0x5b08, 0x5b17, 0x5b34, 0x5b19, 0x5b1b, 0x5b1d, 0x5b21, 0x5b25, 0x5b2d, 0x5b38, 0x5b41, 0x5b4b, 0x5b4c, 0x5b52, 0x5b56, 0x5b5e, 0x5b68, 0x5b6e, 0x5b6f, 0x5b7c, 0x5b7d, 0x5b7e, 0x5b7f, 0x5b81, 0x5b84, 0x5b86, 0x5b8a, 0x5b8e, 0x5b90, 0x5b91, 0x5b93, 0x5b94, 0x5b96, 0x5ba8, 0x5ba9, 0x5bac, 0x5bad, 0x5baf, 0x5bb1, 0x5bb2, 0x5bb7, 0x5bba, 0x5bbc, 0x5bc0, 0x5bc1, 0x5bcd, 0x5bcf, 0x5bd6, 0x5bd7, 0x5bd8, 0x5bd9, 0x5bda, 0x5be0, 0x5bef, 0x5bf1, 0x5bf4, 0x5bfd, 0x5c0c, 0x5c17, 0x5c1e, 0x5c1f, 0x5c23, 0x5c26, 0x5c29, 0x5c2b, 0x5c2c, 0x5c2e, 0x5c30, 0x5c32, 0x5c35, 0x5c36, 0x5c59, 0x5c5a, 0x5c5c, 0x5c62, 0x5c63, 0x5c67, 0x5c68, 0x5c69, 94, 0x3b21, 0x5c6d, 0x5c70, 0x5c74, 0x5c75, 0x5c7a, 0x5c7b, 0x5c7c, 0x5c7d, 0x5c87, 0x5c88, 0x5c8a, 0x5c8f, 0x5c92, 0x5c9d, 0x5c9f, 0x5ca0, 0x5ca2, 0x5ca3, 0x5ca6, 0x5caa, 0x5cb2, 0x5cb4, 0x5cb5, 0x5cba, 0x5cc9, 0x5ccb, 0x5cd2, 0x5cdd, 0x5cd7, 0x5cee, 0x5cf1, 0x5cf2, 0x5cf4, 0x5d01, 0x5d06, 0x5d0d, 0x5d12, 0x5d2b, 0x5d23, 0x5d24, 0x5d26, 0x5d27, 0x5d31, 0x5d34, 0x5d39, 0x5d3d, 0x5d3f, 0x5d42, 0x5d43, 0x5d46, 0x5d48, 0x5d55, 0x5d51, 0x5d59, 0x5d4a, 0x5d5f, 0x5d60, 0x5d61, 0x5d62, 0x5d64, 0x5d6a, 0x5d6d, 0x5d70, 0x5d79, 0x5d7a, 0x5d7e, 0x5d7f, 0x5d81, 0x5d83, 0x5d88, 0x5d8a, 0x5d92, 0x5d93, 0x5d94, 0x5d95, 0x5d99, 0x5d9b, 0x5d9f, 0x5da0, 0x5da7, 0x5dab, 0x5db0, 0x5db4, 0x5db8, 0x5db9, 0x5dc3, 0x5dc7, 0x5dcb, 0x5dd0, 0x5dce, 0x5dd8, 0x5dd9, 0x5de0, 0x5de4, 94, 0x3c21, 0x5de9, 0x5df8, 0x5df9, 0x5e00, 0x5e07, 0x5e0d, 0x5e12, 0x5e14, 0x5e15, 0x5e18, 0x5e1f, 0x5e20, 0x5e2e, 0x5e28, 0x5e32, 0x5e35, 0x5e3e, 0x5e4b, 0x5e50, 0x5e49, 0x5e51, 0x5e56, 0x5e58, 0x5e5b, 0x5e5c, 0x5e5e, 0x5e68, 0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e, 0x5e70, 0x5e80, 0x5e8b, 0x5e8e, 0x5ea2, 0x5ea4, 0x5ea5, 0x5ea8, 0x5eaa, 0x5eac, 0x5eb1, 0x5eb3, 0x5ebd, 0x5ebe, 0x5ebf, 0x5ec6, 0x5ecc, 0x5ecb, 0x5ece, 0x5ed1, 0x5ed2, 0x5ed4, 0x5ed5, 0x5edc, 0x5ede, 0x5ee5, 0x5eeb, 0x5f02, 0x5f06, 0x5f07, 0x5f08, 0x5f0e, 0x5f19, 0x5f1c, 0x5f1d, 0x5f21, 0x5f22, 0x5f23, 0x5f24, 0x5f28, 0x5f2b, 0x5f2c, 0x5f2e, 0x5f30, 0x5f34, 0x5f36, 0x5f3b, 0x5f3d, 0x5f3f, 0x5f40, 0x5f44, 0x5f45, 0x5f47, 0x5f4d, 0x5f50, 0x5f54, 0x5f58, 0x5f5b, 0x5f60, 0x5f63, 0x5f64, 0x5f67, 94, 0x3d21, 0x5f6f, 0x5f72, 0x5f74, 0x5f75, 0x5f78, 0x5f7a, 0x5f7d, 0x5f7e, 0x5f89, 0x5f8d, 0x5f8f, 0x5f96, 0x5f9c, 0x5f9d, 0x5fa2, 0x5fa7, 0x5fab, 0x5fa4, 0x5fac, 0x5faf, 0x5fb0, 0x5fb1, 0x5fb8, 0x5fc4, 0x5fc7, 0x5fc8, 0x5fc9, 0x5fcb, 0x5fd0, 0x5fd1, 0x5fd2, 0x5fd3, 0x5fd4, 0x5fde, 0x5fe1, 0x5fe2, 0x5fe8, 0x5fe9, 0x5fea, 0x5fec, 0x5fed, 0x5fee, 0x5fef, 0x5ff2, 0x5ff3, 0x5ff6, 0x5ffa, 0x5ffc, 0x6007, 0x600a, 0x600d, 0x6013, 0x6014, 0x6017, 0x6018, 0x601a, 0x601f, 0x6024, 0x602d, 0x6033, 0x6035, 0x6040, 0x6047, 0x6048, 0x6049, 0x604c, 0x6051, 0x6054, 0x6056, 0x6057, 0x605d, 0x6061, 0x6067, 0x6071, 0x607e, 0x607f, 0x6082, 0x6086, 0x6088, 0x608a, 0x608e, 0x6091, 0x6093, 0x6095, 0x6098, 0x609d, 0x609e, 0x60a2, 0x60a4, 0x60a5, 0x60a8, 0x60b0, 0x60b1, 0x60b7, 94, 0x3e21, 0x60bb, 0x60be, 0x60c2, 0x60c4, 0x60c8, 0x60c9, 0x60ca, 0x60cb, 0x60ce, 0x60cf, 0x60d4, 0x60d5, 0x60d9, 0x60db, 0x60dd, 0x60de, 0x60e2, 0x60e5, 0x60f2, 0x60f5, 0x60f8, 0x60fc, 0x60fd, 0x6102, 0x6107, 0x610a, 0x610c, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, 0x6116, 0x6117, 0x6119, 0x611c, 0x611e, 0x6122, 0x612a, 0x612b, 0x6130, 0x6131, 0x6135, 0x6136, 0x6137, 0x6139, 0x6141, 0x6145, 0x6146, 0x6149, 0x615e, 0x6160, 0x616c, 0x6172, 0x6178, 0x617b, 0x617c, 0x617f, 0x6180, 0x6181, 0x6183, 0x6184, 0x618b, 0x618d, 0x6192, 0x6193, 0x6197, 0x6198, 0x619c, 0x619d, 0x619f, 0x61a0, 0x61a5, 0x61a8, 0x61aa, 0x61ad, 0x61b8, 0x61b9, 0x61bc, 0x61c0, 0x61c1, 0x61c2, 0x61ce, 0x61cf, 0x61d5, 0x61dc, 0x61dd, 0x61de, 0x61df, 0x61e1, 0x61e2, 0x61e7, 0x61e9, 0x61e5, 94, 0x3f21, 0x61ec, 0x61ed, 0x61ef, 0x6201, 0x6203, 0x6204, 0x6207, 0x6213, 0x6215, 0x621c, 0x6220, 0x6222, 0x6223, 0x6227, 0x6229, 0x622b, 0x6239, 0x623d, 0x6242, 0x6243, 0x6244, 0x6246, 0x624c, 0x6250, 0x6251, 0x6252, 0x6254, 0x6256, 0x625a, 0x625c, 0x6264, 0x626d, 0x626f, 0x6273, 0x627a, 0x627d, 0x628d, 0x628e, 0x628f, 0x6290, 0x62a6, 0x62a8, 0x62b3, 0x62b6, 0x62b7, 0x62ba, 0x62be, 0x62bf, 0x62c4, 0x62ce, 0x62d5, 0x62d6, 0x62da, 0x62ea, 0x62f2, 0x62f4, 0x62fc, 0x62fd, 0x6303, 0x6304, 0x630a, 0x630b, 0x630d, 0x6310, 0x6313, 0x6316, 0x6318, 0x6329, 0x632a, 0x632d, 0x6335, 0x6336, 0x6339, 0x633c, 0x6341, 0x6342, 0x6343, 0x6344, 0x6346, 0x634a, 0x634b, 0x634e, 0x6352, 0x6353, 0x6354, 0x6358, 0x635b, 0x6365, 0x6366, 0x636c, 0x636d, 0x6371, 0x6374, 0x6375, 94, 0x4021, 0x6378, 0x637c, 0x637d, 0x637f, 0x6382, 0x6384, 0x6387, 0x638a, 0x6390, 0x6394, 0x6395, 0x6399, 0x639a, 0x639e, 0x63a4, 0x63a6, 0x63ad, 0x63ae, 0x63af, 0x63bd, 0x63c1, 0x63c5, 0x63c8, 0x63ce, 0x63d1, 0x63d3, 0x63d4, 0x63d5, 0x63dc, 0x63e0, 0x63e5, 0x63ea, 0x63ec, 0x63f2, 0x63f3, 0x63f5, 0x63f8, 0x63f9, 0x6409, 0x640a, 0x6410, 0x6412, 0x6414, 0x6418, 0x641e, 0x6420, 0x6422, 0x6424, 0x6425, 0x6429, 0x642a, 0x642f, 0x6430, 0x6435, 0x643d, 0x643f, 0x644b, 0x644f, 0x6451, 0x6452, 0x6453, 0x6454, 0x645a, 0x645b, 0x645c, 0x645d, 0x645f, 0x6460, 0x6461, 0x6463, 0x646d, 0x6473, 0x6474, 0x647b, 0x647d, 0x6485, 0x6487, 0x648f, 0x6490, 0x6491, 0x6498, 0x6499, 0x649b, 0x649d, 0x649f, 0x64a1, 0x64a3, 0x64a6, 0x64a8, 0x64ac, 0x64b3, 0x64bd, 0x64be, 0x64bf, 94, 0x4121, 0x64c4, 0x64c9, 0x64ca, 0x64cb, 0x64cc, 0x64ce, 0x64d0, 0x64d1, 0x64d5, 0x64d7, 0x64e4, 0x64e5, 0x64e9, 0x64ea, 0x64ed, 0x64f0, 0x64f5, 0x64f7, 0x64fb, 0x64ff, 0x6501, 0x6504, 0x6508, 0x6509, 0x650a, 0x650f, 0x6513, 0x6514, 0x6516, 0x6519, 0x651b, 0x651e, 0x651f, 0x6522, 0x6526, 0x6529, 0x652e, 0x6531, 0x653a, 0x653c, 0x653d, 0x6543, 0x6547, 0x6549, 0x6550, 0x6552, 0x6554, 0x655f, 0x6560, 0x6567, 0x656b, 0x657a, 0x657d, 0x6581, 0x6585, 0x658a, 0x6592, 0x6595, 0x6598, 0x659d, 0x65a0, 0x65a3, 0x65a6, 0x65ae, 0x65b2, 0x65b3, 0x65b4, 0x65bf, 0x65c2, 0x65c8, 0x65c9, 0x65ce, 0x65d0, 0x65d4, 0x65d6, 0x65d8, 0x65df, 0x65f0, 0x65f2, 0x65f4, 0x65f5, 0x65f9, 0x65fe, 0x65ff, 0x6600, 0x6604, 0x6608, 0x6609, 0x660d, 0x6611, 0x6612, 0x6615, 0x6616, 0x661d, 94, 0x4221, 0x661e, 0x6621, 0x6622, 0x6623, 0x6624, 0x6626, 0x6629, 0x662a, 0x662b, 0x662c, 0x662e, 0x6630, 0x6631, 0x6633, 0x6639, 0x6637, 0x6640, 0x6645, 0x6646, 0x664a, 0x664c, 0x6651, 0x664e, 0x6657, 0x6658, 0x6659, 0x665b, 0x665c, 0x6660, 0x6661, 0x66fb, 0x666a, 0x666b, 0x666c, 0x667e, 0x6673, 0x6675, 0x667f, 0x6677, 0x6678, 0x6679, 0x667b, 0x6680, 0x667c, 0x668b, 0x668c, 0x668d, 0x6690, 0x6692, 0x6699, 0x669a, 0x669b, 0x669c, 0x669f, 0x66a0, 0x66a4, 0x66ad, 0x66b1, 0x66b2, 0x66b5, 0x66bb, 0x66bf, 0x66c0, 0x66c2, 0x66c3, 0x66c8, 0x66cc, 0x66ce, 0x66cf, 0x66d4, 0x66db, 0x66df, 0x66e8, 0x66eb, 0x66ec, 0x66ee, 0x66fa, 0x6705, 0x6707, 0x670e, 0x6713, 0x6719, 0x671c, 0x6720, 0x6722, 0x6733, 0x673e, 0x6745, 0x6747, 0x6748, 0x674c, 0x6754, 0x6755, 0x675d, 94, 0x4321, 0x6766, 0x676c, 0x676e, 0x6774, 0x6776, 0x677b, 0x6781, 0x6784, 0x678e, 0x678f, 0x6791, 0x6793, 0x6796, 0x6798, 0x6799, 0x679b, 0x67b0, 0x67b1, 0x67b2, 0x67b5, 0x67bb, 0x67bc, 0x67bd, 0x67f9, 0x67c0, 0x67c2, 0x67c3, 0x67c5, 0x67c8, 0x67c9, 0x67d2, 0x67d7, 0x67d9, 0x67dc, 0x67e1, 0x67e6, 0x67f0, 0x67f2, 0x67f6, 0x67f7, 0x6852, 0x6814, 0x6819, 0x681d, 0x681f, 0x6828, 0x6827, 0x682c, 0x682d, 0x682f, 0x6830, 0x6831, 0x6833, 0x683b, 0x683f, 0x6844, 0x6845, 0x684a, 0x684c, 0x6855, 0x6857, 0x6858, 0x685b, 0x686b, 0x686e, 0x686f, 0x6870, 0x6871, 0x6872, 0x6875, 0x6879, 0x687a, 0x687b, 0x687c, 0x6882, 0x6884, 0x6886, 0x6888, 0x6896, 0x6898, 0x689a, 0x689c, 0x68a1, 0x68a3, 0x68a5, 0x68a9, 0x68aa, 0x68ae, 0x68b2, 0x68bb, 0x68c5, 0x68c8, 0x68cc, 0x68cf, 94, 0x4421, 0x68d0, 0x68d1, 0x68d3, 0x68d6, 0x68d9, 0x68dc, 0x68dd, 0x68e5, 0x68e8, 0x68ea, 0x68eb, 0x68ec, 0x68ed, 0x68f0, 0x68f1, 0x68f5, 0x68f6, 0x68fb, 0x68fc, 0x68fd, 0x6906, 0x6909, 0x690a, 0x6910, 0x6911, 0x6913, 0x6916, 0x6917, 0x6931, 0x6933, 0x6935, 0x6938, 0x693b, 0x6942, 0x6945, 0x6949, 0x694e, 0x6957, 0x695b, 0x6963, 0x6964, 0x6965, 0x6966, 0x6968, 0x6969, 0x696c, 0x6970, 0x6971, 0x6972, 0x697a, 0x697b, 0x697f, 0x6980, 0x698d, 0x6992, 0x6996, 0x6998, 0x69a1, 0x69a5, 0x69a6, 0x69a8, 0x69ab, 0x69ad, 0x69af, 0x69b7, 0x69b8, 0x69ba, 0x69bc, 0x69c5, 0x69c8, 0x69d1, 0x69d6, 0x69d7, 0x69e2, 0x69e5, 0x69ee, 0x69ef, 0x69f1, 0x69f3, 0x69f5, 0x69fe, 0x6a00, 0x6a01, 0x6a03, 0x6a0f, 0x6a11, 0x6a15, 0x6a1a, 0x6a1d, 0x6a20, 0x6a24, 0x6a28, 0x6a30, 0x6a32, 94, 0x4521, 0x6a34, 0x6a37, 0x6a3b, 0x6a3e, 0x6a3f, 0x6a45, 0x6a46, 0x6a49, 0x6a4a, 0x6a4e, 0x6a50, 0x6a51, 0x6a52, 0x6a55, 0x6a56, 0x6a5b, 0x6a64, 0x6a67, 0x6a6a, 0x6a71, 0x6a73, 0x6a7e, 0x6a81, 0x6a83, 0x6a86, 0x6a87, 0x6a89, 0x6a8b, 0x6a91, 0x6a9b, 0x6a9d, 0x6a9e, 0x6a9f, 0x6aa5, 0x6aab, 0x6aaf, 0x6ab0, 0x6ab1, 0x6ab4, 0x6abd, 0x6abe, 0x6abf, 0x6ac6, 0x6ac9, 0x6ac8, 0x6acc, 0x6ad0, 0x6ad4, 0x6ad5, 0x6ad6, 0x6adc, 0x6add, 0x6ae4, 0x6ae7, 0x6aec, 0x6af0, 0x6af1, 0x6af2, 0x6afc, 0x6afd, 0x6b02, 0x6b03, 0x6b06, 0x6b07, 0x6b09, 0x6b0f, 0x6b10, 0x6b11, 0x6b17, 0x6b1b, 0x6b1e, 0x6b24, 0x6b28, 0x6b2b, 0x6b2c, 0x6b2f, 0x6b35, 0x6b36, 0x6b3b, 0x6b3f, 0x6b46, 0x6b4a, 0x6b4d, 0x6b52, 0x6b56, 0x6b58, 0x6b5d, 0x6b60, 0x6b67, 0x6b6b, 0x6b6e, 0x6b70, 0x6b75, 0x6b7d, 94, 0x4621, 0x6b7e, 0x6b82, 0x6b85, 0x6b97, 0x6b9b, 0x6b9f, 0x6ba0, 0x6ba2, 0x6ba3, 0x6ba8, 0x6ba9, 0x6bac, 0x6bad, 0x6bae, 0x6bb0, 0x6bb8, 0x6bb9, 0x6bbd, 0x6bbe, 0x6bc3, 0x6bc4, 0x6bc9, 0x6bcc, 0x6bd6, 0x6bda, 0x6be1, 0x6be3, 0x6be6, 0x6be7, 0x6bee, 0x6bf1, 0x6bf7, 0x6bf9, 0x6bff, 0x6c02, 0x6c04, 0x6c05, 0x6c09, 0x6c0d, 0x6c0e, 0x6c10, 0x6c12, 0x6c19, 0x6c1f, 0x6c26, 0x6c27, 0x6c28, 0x6c2c, 0x6c2e, 0x6c33, 0x6c35, 0x6c36, 0x6c3a, 0x6c3b, 0x6c3f, 0x6c4a, 0x6c4b, 0x6c4d, 0x6c4f, 0x6c52, 0x6c54, 0x6c59, 0x6c5b, 0x6c5c, 0x6c6b, 0x6c6d, 0x6c6f, 0x6c74, 0x6c76, 0x6c78, 0x6c79, 0x6c7b, 0x6c85, 0x6c86, 0x6c87, 0x6c89, 0x6c94, 0x6c95, 0x6c97, 0x6c98, 0x6c9c, 0x6c9f, 0x6cb0, 0x6cb2, 0x6cb4, 0x6cc2, 0x6cc6, 0x6ccd, 0x6ccf, 0x6cd0, 0x6cd1, 0x6cd2, 0x6cd4, 0x6cd6, 94, 0x4721, 0x6cda, 0x6cdc, 0x6ce0, 0x6ce7, 0x6ce9, 0x6ceb, 0x6cec, 0x6cee, 0x6cf2, 0x6cf4, 0x6d04, 0x6d07, 0x6d0a, 0x6d0e, 0x6d0f, 0x6d11, 0x6d13, 0x6d1a, 0x6d26, 0x6d27, 0x6d28, 0x6c67, 0x6d2e, 0x6d2f, 0x6d31, 0x6d39, 0x6d3c, 0x6d3f, 0x6d57, 0x6d5e, 0x6d5f, 0x6d61, 0x6d65, 0x6d67, 0x6d6f, 0x6d70, 0x6d7c, 0x6d82, 0x6d87, 0x6d91, 0x6d92, 0x6d94, 0x6d96, 0x6d97, 0x6d98, 0x6daa, 0x6dac, 0x6db4, 0x6db7, 0x6db9, 0x6dbd, 0x6dbf, 0x6dc4, 0x6dc8, 0x6dca, 0x6dce, 0x6dcf, 0x6dd6, 0x6ddb, 0x6ddd, 0x6ddf, 0x6de0, 0x6de2, 0x6de5, 0x6de9, 0x6def, 0x6df0, 0x6df4, 0x6df6, 0x6dfc, 0x6e00, 0x6e04, 0x6e1e, 0x6e22, 0x6e27, 0x6e32, 0x6e36, 0x6e39, 0x6e3b, 0x6e3c, 0x6e44, 0x6e45, 0x6e48, 0x6e49, 0x6e4b, 0x6e4f, 0x6e51, 0x6e52, 0x6e53, 0x6e54, 0x6e57, 0x6e5c, 0x6e5d, 0x6e5e, 94, 0x4821, 0x6e62, 0x6e63, 0x6e68, 0x6e73, 0x6e7b, 0x6e7d, 0x6e8d, 0x6e93, 0x6e99, 0x6ea0, 0x6ea7, 0x6ead, 0x6eae, 0x6eb1, 0x6eb3, 0x6ebb, 0x6ebf, 0x6ec0, 0x6ec1, 0x6ec3, 0x6ec7, 0x6ec8, 0x6eca, 0x6ecd, 0x6ece, 0x6ecf, 0x6eeb, 0x6eed, 0x6eee, 0x6ef9, 0x6efb, 0x6efd, 0x6f04, 0x6f08, 0x6f0a, 0x6f0c, 0x6f0d, 0x6f16, 0x6f18, 0x6f1a, 0x6f1b, 0x6f26, 0x6f29, 0x6f2a, 0x6f2f, 0x6f30, 0x6f33, 0x6f36, 0x6f3b, 0x6f3c, 0x6f2d, 0x6f4f, 0x6f51, 0x6f52, 0x6f53, 0x6f57, 0x6f59, 0x6f5a, 0x6f5d, 0x6f5e, 0x6f61, 0x6f62, 0x6f68, 0x6f6c, 0x6f7d, 0x6f7e, 0x6f83, 0x6f87, 0x6f88, 0x6f8b, 0x6f8c, 0x6f8d, 0x6f90, 0x6f92, 0x6f93, 0x6f94, 0x6f96, 0x6f9a, 0x6f9f, 0x6fa0, 0x6fa5, 0x6fa6, 0x6fa7, 0x6fa8, 0x6fae, 0x6faf, 0x6fb0, 0x6fb5, 0x6fb6, 0x6fbc, 0x6fc5, 0x6fc7, 0x6fc8, 0x6fca, 94, 0x4921, 0x6fda, 0x6fde, 0x6fe8, 0x6fe9, 0x6ff0, 0x6ff5, 0x6ff9, 0x6ffc, 0x6ffd, 0x7000, 0x7005, 0x7006, 0x7007, 0x700d, 0x7017, 0x7020, 0x7023, 0x702f, 0x7034, 0x7037, 0x7039, 0x703c, 0x7043, 0x7044, 0x7048, 0x7049, 0x704a, 0x704b, 0x7054, 0x7055, 0x705d, 0x705e, 0x704e, 0x7064, 0x7065, 0x706c, 0x706e, 0x7075, 0x7076, 0x707e, 0x7081, 0x7085, 0x7086, 0x7094, 0x7095, 0x7096, 0x7097, 0x7098, 0x709b, 0x70a4, 0x70ab, 0x70b0, 0x70b1, 0x70b4, 0x70b7, 0x70ca, 0x70d1, 0x70d3, 0x70d4, 0x70d5, 0x70d6, 0x70d8, 0x70dc, 0x70e4, 0x70fa, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x710b, 0x710c, 0x710f, 0x711e, 0x7120, 0x712b, 0x712d, 0x712f, 0x7130, 0x7131, 0x7138, 0x7141, 0x7145, 0x7146, 0x7147, 0x714a, 0x714b, 0x7150, 0x7152, 0x7157, 0x715a, 0x715c, 0x715e, 0x7160, 94, 0x4a21, 0x7168, 0x7179, 0x7180, 0x7185, 0x7187, 0x718c, 0x7192, 0x719a, 0x719b, 0x71a0, 0x71a2, 0x71af, 0x71b0, 0x71b2, 0x71b3, 0x71ba, 0x71bf, 0x71c0, 0x71c1, 0x71c4, 0x71cb, 0x71cc, 0x71d3, 0x71d6, 0x71d9, 0x71da, 0x71dc, 0x71f8, 0x71fe, 0x7200, 0x7207, 0x7208, 0x7209, 0x7213, 0x7217, 0x721a, 0x721d, 0x721f, 0x7224, 0x722b, 0x722f, 0x7234, 0x7238, 0x7239, 0x7241, 0x7242, 0x7243, 0x7245, 0x724e, 0x724f, 0x7250, 0x7253, 0x7255, 0x7256, 0x725a, 0x725c, 0x725e, 0x7260, 0x7263, 0x7268, 0x726b, 0x726e, 0x726f, 0x7271, 0x7277, 0x7278, 0x727b, 0x727c, 0x727f, 0x7284, 0x7289, 0x728d, 0x728e, 0x7293, 0x729b, 0x72a8, 0x72ad, 0x72ae, 0x72b1, 0x72b4, 0x72be, 0x72c1, 0x72c7, 0x72c9, 0x72cc, 0x72d5, 0x72d6, 0x72d8, 0x72df, 0x72e5, 0x72f3, 0x72f4, 0x72fa, 0x72fb, 94, 0x4b21, 0x72fe, 0x7302, 0x7304, 0x7305, 0x7307, 0x730b, 0x730d, 0x7312, 0x7313, 0x7318, 0x7319, 0x731e, 0x7322, 0x7324, 0x7327, 0x7328, 0x732c, 0x7331, 0x7332, 0x7335, 0x733a, 0x733b, 0x733d, 0x7343, 0x734d, 0x7350, 0x7352, 0x7356, 0x7358, 0x735d, 0x735e, 0x735f, 0x7360, 0x7366, 0x7367, 0x7369, 0x736b, 0x736c, 0x736e, 0x736f, 0x7371, 0x7377, 0x7379, 0x737c, 0x7380, 0x7381, 0x7383, 0x7385, 0x7386, 0x738e, 0x7390, 0x7393, 0x7395, 0x7397, 0x7398, 0x739c, 0x739e, 0x739f, 0x73a0, 0x73a2, 0x73a5, 0x73a6, 0x73aa, 0x73ab, 0x73ad, 0x73b5, 0x73b7, 0x73b9, 0x73bc, 0x73bd, 0x73bf, 0x73c5, 0x73c6, 0x73c9, 0x73cb, 0x73cc, 0x73cf, 0x73d2, 0x73d3, 0x73d6, 0x73d9, 0x73dd, 0x73e1, 0x73e3, 0x73e6, 0x73e7, 0x73e9, 0x73f4, 0x73f5, 0x73f7, 0x73f9, 0x73fa, 0x73fb, 0x73fd, 94, 0x4c21, 0x73ff, 0x7400, 0x7401, 0x7404, 0x7407, 0x740a, 0x7411, 0x741a, 0x741b, 0x7424, 0x7426, 0x7428, 0x7429, 0x742a, 0x742b, 0x742c, 0x742d, 0x742e, 0x742f, 0x7430, 0x7431, 0x7439, 0x7440, 0x7443, 0x7444, 0x7446, 0x7447, 0x744b, 0x744d, 0x7451, 0x7452, 0x7457, 0x745d, 0x7462, 0x7466, 0x7467, 0x7468, 0x746b, 0x746d, 0x746e, 0x7471, 0x7472, 0x7480, 0x7481, 0x7485, 0x7486, 0x7487, 0x7489, 0x748f, 0x7490, 0x7491, 0x7492, 0x7498, 0x7499, 0x749a, 0x749c, 0x749f, 0x74a0, 0x74a1, 0x74a3, 0x74a6, 0x74a8, 0x74a9, 0x74aa, 0x74ab, 0x74ae, 0x74af, 0x74b1, 0x74b2, 0x74b5, 0x74b9, 0x74bb, 0x74bf, 0x74c8, 0x74c9, 0x74cc, 0x74d0, 0x74d3, 0x74d8, 0x74da, 0x74db, 0x74de, 0x74df, 0x74e4, 0x74e8, 0x74ea, 0x74eb, 0x74ef, 0x74f4, 0x74fa, 0x74fb, 0x74fc, 0x74ff, 0x7506, 94, 0x4d21, 0x7512, 0x7516, 0x7517, 0x7520, 0x7521, 0x7524, 0x7527, 0x7529, 0x752a, 0x752f, 0x7536, 0x7539, 0x753d, 0x753e, 0x753f, 0x7540, 0x7543, 0x7547, 0x7548, 0x754e, 0x7550, 0x7552, 0x7557, 0x755e, 0x755f, 0x7561, 0x756f, 0x7571, 0x7579, 0x757a, 0x757b, 0x757c, 0x757d, 0x757e, 0x7581, 0x7585, 0x7590, 0x7592, 0x7593, 0x7595, 0x7599, 0x759c, 0x75a2, 0x75a4, 0x75b4, 0x75ba, 0x75bf, 0x75c0, 0x75c1, 0x75c4, 0x75c6, 0x75cc, 0x75ce, 0x75cf, 0x75d7, 0x75dc, 0x75df, 0x75e0, 0x75e1, 0x75e4, 0x75e7, 0x75ec, 0x75ee, 0x75ef, 0x75f1, 0x75f9, 0x7600, 0x7602, 0x7603, 0x7604, 0x7607, 0x7608, 0x760a, 0x760c, 0x760f, 0x7612, 0x7613, 0x7615, 0x7616, 0x7619, 0x761b, 0x761c, 0x761d, 0x761e, 0x7623, 0x7625, 0x7626, 0x7629, 0x762d, 0x7632, 0x7633, 0x7635, 0x7638, 0x7639, 94, 0x4e21, 0x763a, 0x763c, 0x764a, 0x7640, 0x7641, 0x7643, 0x7644, 0x7645, 0x7649, 0x764b, 0x7655, 0x7659, 0x765f, 0x7664, 0x7665, 0x766d, 0x766e, 0x766f, 0x7671, 0x7674, 0x7681, 0x7685, 0x768c, 0x768d, 0x7695, 0x769b, 0x769c, 0x769d, 0x769f, 0x76a0, 0x76a2, 0x76a3, 0x76a4, 0x76a5, 0x76a6, 0x76a7, 0x76a8, 0x76aa, 0x76ad, 0x76bd, 0x76c1, 0x76c5, 0x76c9, 0x76cb, 0x76cc, 0x76ce, 0x76d4, 0x76d9, 0x76e0, 0x76e6, 0x76e8, 0x76ec, 0x76f0, 0x76f1, 0x76f6, 0x76f9, 0x76fc, 0x7700, 0x7706, 0x770a, 0x770e, 0x7712, 0x7714, 0x7715, 0x7717, 0x7719, 0x771a, 0x771c, 0x7722, 0x7728, 0x772d, 0x772e, 0x772f, 0x7734, 0x7735, 0x7736, 0x7739, 0x773d, 0x773e, 0x7742, 0x7745, 0x7746, 0x774a, 0x774d, 0x774e, 0x774f, 0x7752, 0x7756, 0x7757, 0x775c, 0x775e, 0x775f, 0x7760, 0x7762, 94, 0x4f21, 0x7764, 0x7767, 0x776a, 0x776c, 0x7770, 0x7772, 0x7773, 0x7774, 0x777a, 0x777d, 0x7780, 0x7784, 0x778c, 0x778d, 0x7794, 0x7795, 0x7796, 0x779a, 0x779f, 0x77a2, 0x77a7, 0x77aa, 0x77ae, 0x77af, 0x77b1, 0x77b5, 0x77be, 0x77c3, 0x77c9, 0x77d1, 0x77d2, 0x77d5, 0x77d9, 0x77de, 0x77df, 0x77e0, 0x77e4, 0x77e6, 0x77ea, 0x77ec, 0x77f0, 0x77f1, 0x77f4, 0x77f8, 0x77fb, 0x7805, 0x7806, 0x7809, 0x780d, 0x780e, 0x7811, 0x781d, 0x7821, 0x7822, 0x7823, 0x782d, 0x782e, 0x7830, 0x7835, 0x7837, 0x7843, 0x7844, 0x7847, 0x7848, 0x784c, 0x784e, 0x7852, 0x785c, 0x785e, 0x7860, 0x7861, 0x7863, 0x7864, 0x7868, 0x786a, 0x786e, 0x787a, 0x787e, 0x788a, 0x788f, 0x7894, 0x7898, 0x78a1, 0x789d, 0x789e, 0x789f, 0x78a4, 0x78a8, 0x78ac, 0x78ad, 0x78b0, 0x78b1, 0x78b2, 0x78b3, 94, 0x5021, 0x78bb, 0x78bd, 0x78bf, 0x78c7, 0x78c8, 0x78c9, 0x78cc, 0x78ce, 0x78d2, 0x78d3, 0x78d5, 0x78d6, 0x78e4, 0x78db, 0x78df, 0x78e0, 0x78e1, 0x78e6, 0x78ea, 0x78f2, 0x78f3, 0x7900, 0x78f6, 0x78f7, 0x78fa, 0x78fb, 0x78ff, 0x7906, 0x790c, 0x7910, 0x791a, 0x791c, 0x791e, 0x791f, 0x7920, 0x7925, 0x7927, 0x7929, 0x792d, 0x7931, 0x7934, 0x7935, 0x793b, 0x793d, 0x793f, 0x7944, 0x7945, 0x7946, 0x794a, 0x794b, 0x794f, 0x7951, 0x7954, 0x7958, 0x795b, 0x795c, 0x7967, 0x7969, 0x796b, 0x7972, 0x7979, 0x797b, 0x797c, 0x797e, 0x798b, 0x798c, 0x7991, 0x7993, 0x7994, 0x7995, 0x7996, 0x7998, 0x799b, 0x799c, 0x79a1, 0x79a8, 0x79a9, 0x79ab, 0x79af, 0x79b1, 0x79b4, 0x79b8, 0x79bb, 0x79c2, 0x79c4, 0x79c7, 0x79c8, 0x79ca, 0x79cf, 0x79d4, 0x79d6, 0x79da, 0x79dd, 0x79de, 94, 0x5121, 0x79e0, 0x79e2, 0x79e5, 0x79ea, 0x79eb, 0x79ed, 0x79f1, 0x79f8, 0x79fc, 0x7a02, 0x7a03, 0x7a07, 0x7a09, 0x7a0a, 0x7a0c, 0x7a11, 0x7a15, 0x7a1b, 0x7a1e, 0x7a21, 0x7a27, 0x7a2b, 0x7a2d, 0x7a2f, 0x7a30, 0x7a34, 0x7a35, 0x7a38, 0x7a39, 0x7a3a, 0x7a44, 0x7a45, 0x7a47, 0x7a48, 0x7a4c, 0x7a55, 0x7a56, 0x7a59, 0x7a5c, 0x7a5d, 0x7a5f, 0x7a60, 0x7a65, 0x7a67, 0x7a6a, 0x7a6d, 0x7a75, 0x7a78, 0x7a7e, 0x7a80, 0x7a82, 0x7a85, 0x7a86, 0x7a8a, 0x7a8b, 0x7a90, 0x7a91, 0x7a94, 0x7a9e, 0x7aa0, 0x7aa3, 0x7aac, 0x7ab3, 0x7ab5, 0x7ab9, 0x7abb, 0x7abc, 0x7ac6, 0x7ac9, 0x7acc, 0x7ace, 0x7ad1, 0x7adb, 0x7ae8, 0x7ae9, 0x7aeb, 0x7aec, 0x7af1, 0x7af4, 0x7afb, 0x7afd, 0x7afe, 0x7b07, 0x7b14, 0x7b1f, 0x7b23, 0x7b27, 0x7b29, 0x7b2a, 0x7b2b, 0x7b2d, 0x7b2e, 0x7b2f, 0x7b30, 94, 0x5221, 0x7b31, 0x7b34, 0x7b3d, 0x7b3f, 0x7b40, 0x7b41, 0x7b47, 0x7b4e, 0x7b55, 0x7b60, 0x7b64, 0x7b66, 0x7b69, 0x7b6a, 0x7b6d, 0x7b6f, 0x7b72, 0x7b73, 0x7b77, 0x7b84, 0x7b89, 0x7b8e, 0x7b90, 0x7b91, 0x7b96, 0x7b9b, 0x7b9e, 0x7ba0, 0x7ba5, 0x7bac, 0x7baf, 0x7bb0, 0x7bb2, 0x7bb5, 0x7bb6, 0x7bba, 0x7bbb, 0x7bbc, 0x7bbd, 0x7bc2, 0x7bc5, 0x7bc8, 0x7bca, 0x7bd4, 0x7bd6, 0x7bd7, 0x7bd9, 0x7bda, 0x7bdb, 0x7be8, 0x7bea, 0x7bf2, 0x7bf4, 0x7bf5, 0x7bf8, 0x7bf9, 0x7bfa, 0x7bfc, 0x7bfe, 0x7c01, 0x7c02, 0x7c03, 0x7c04, 0x7c06, 0x7c09, 0x7c0b, 0x7c0c, 0x7c0e, 0x7c0f, 0x7c19, 0x7c1b, 0x7c20, 0x7c25, 0x7c26, 0x7c28, 0x7c2c, 0x7c31, 0x7c33, 0x7c34, 0x7c36, 0x7c39, 0x7c3a, 0x7c46, 0x7c4a, 0x7c55, 0x7c51, 0x7c52, 0x7c53, 0x7c59, 0x7c5a, 0x7c5b, 0x7c5c, 0x7c5d, 0x7c5e, 94, 0x5321, 0x7c61, 0x7c63, 0x7c67, 0x7c69, 0x7c6d, 0x7c6e, 0x7c70, 0x7c72, 0x7c79, 0x7c7c, 0x7c7d, 0x7c86, 0x7c87, 0x7c8f, 0x7c94, 0x7c9e, 0x7ca0, 0x7ca6, 0x7cb0, 0x7cb6, 0x7cb7, 0x7cba, 0x7cbb, 0x7cbc, 0x7cbf, 0x7cc4, 0x7cc7, 0x7cc8, 0x7cc9, 0x7ccd, 0x7ccf, 0x7cd3, 0x7cd4, 0x7cd5, 0x7cd7, 0x7cd9, 0x7cda, 0x7cdd, 0x7ce6, 0x7ce9, 0x7ceb, 0x7cf5, 0x7d03, 0x7d07, 0x7d08, 0x7d09, 0x7d0f, 0x7d11, 0x7d12, 0x7d13, 0x7d16, 0x7d1d, 0x7d1e, 0x7d23, 0x7d26, 0x7d2a, 0x7d2d, 0x7d31, 0x7d3c, 0x7d3d, 0x7d3e, 0x7d40, 0x7d41, 0x7d47, 0x7d48, 0x7d4d, 0x7d51, 0x7d53, 0x7d57, 0x7d59, 0x7d5a, 0x7d5c, 0x7d5d, 0x7d65, 0x7d67, 0x7d6a, 0x7d70, 0x7d78, 0x7d7a, 0x7d7b, 0x7d7f, 0x7d81, 0x7d82, 0x7d83, 0x7d85, 0x7d86, 0x7d88, 0x7d8b, 0x7d8c, 0x7d8d, 0x7d91, 0x7d96, 0x7d97, 0x7d9d, 94, 0x5421, 0x7d9e, 0x7da6, 0x7da7, 0x7daa, 0x7db3, 0x7db6, 0x7db7, 0x7db9, 0x7dc2, 0x7dc3, 0x7dc4, 0x7dc5, 0x7dc6, 0x7dcc, 0x7dcd, 0x7dce, 0x7dd7, 0x7dd9, 0x7e00, 0x7de2, 0x7de5, 0x7de6, 0x7dea, 0x7deb, 0x7ded, 0x7df1, 0x7df5, 0x7df6, 0x7df9, 0x7dfa, 0x7e08, 0x7e10, 0x7e11, 0x7e15, 0x7e17, 0x7e1c, 0x7e1d, 0x7e20, 0x7e27, 0x7e28, 0x7e2c, 0x7e2d, 0x7e2f, 0x7e33, 0x7e36, 0x7e3f, 0x7e44, 0x7e45, 0x7e47, 0x7e4e, 0x7e50, 0x7e52, 0x7e58, 0x7e5f, 0x7e61, 0x7e62, 0x7e65, 0x7e6b, 0x7e6e, 0x7e6f, 0x7e73, 0x7e78, 0x7e7e, 0x7e81, 0x7e86, 0x7e87, 0x7e8a, 0x7e8d, 0x7e91, 0x7e95, 0x7e98, 0x7e9a, 0x7e9d, 0x7e9e, 0x7f3c, 0x7f3b, 0x7f3d, 0x7f3e, 0x7f3f, 0x7f43, 0x7f44, 0x7f47, 0x7f4f, 0x7f52, 0x7f53, 0x7f5b, 0x7f5c, 0x7f5d, 0x7f61, 0x7f63, 0x7f64, 0x7f65, 0x7f66, 0x7f6d, 94, 0x5521, 0x7f71, 0x7f7d, 0x7f7e, 0x7f7f, 0x7f80, 0x7f8b, 0x7f8d, 0x7f8f, 0x7f90, 0x7f91, 0x7f96, 0x7f97, 0x7f9c, 0x7fa1, 0x7fa2, 0x7fa6, 0x7faa, 0x7fad, 0x7fb4, 0x7fbc, 0x7fbf, 0x7fc0, 0x7fc3, 0x7fc8, 0x7fce, 0x7fcf, 0x7fdb, 0x7fdf, 0x7fe3, 0x7fe5, 0x7fe8, 0x7fec, 0x7fee, 0x7fef, 0x7ff2, 0x7ffa, 0x7ffd, 0x7ffe, 0x7fff, 0x8007, 0x8008, 0x800a, 0x800d, 0x800e, 0x800f, 0x8011, 0x8013, 0x8014, 0x8016, 0x801d, 0x801e, 0x801f, 0x8020, 0x8024, 0x8026, 0x802c, 0x802e, 0x8030, 0x8034, 0x8035, 0x8037, 0x8039, 0x803a, 0x803c, 0x803e, 0x8040, 0x8044, 0x8060, 0x8064, 0x8066, 0x806d, 0x8071, 0x8075, 0x8081, 0x8088, 0x808e, 0x809c, 0x809e, 0x80a6, 0x80a7, 0x80ab, 0x80b8, 0x80b9, 0x80c8, 0x80cd, 0x80cf, 0x80d2, 0x80d4, 0x80d5, 0x80d7, 0x80d8, 0x80e0, 0x80ed, 0x80ee, 94, 0x5621, 0x80f0, 0x80f2, 0x80f3, 0x80f6, 0x80f9, 0x80fa, 0x80fe, 0x8103, 0x810b, 0x8116, 0x8117, 0x8118, 0x811c, 0x811e, 0x8120, 0x8124, 0x8127, 0x812c, 0x8130, 0x8135, 0x813a, 0x813c, 0x8145, 0x8147, 0x814a, 0x814c, 0x8152, 0x8157, 0x8160, 0x8161, 0x8167, 0x8168, 0x8169, 0x816d, 0x816f, 0x8177, 0x8181, 0x8190, 0x8184, 0x8185, 0x8186, 0x818b, 0x818e, 0x8196, 0x8198, 0x819b, 0x819e, 0x81a2, 0x81ae, 0x81b2, 0x81b4, 0x81bb, 0x81cb, 0x81c3, 0x81c5, 0x81ca, 0x81ce, 0x81cf, 0x81d5, 0x81d7, 0x81db, 0x81dd, 0x81de, 0x81e1, 0x81e4, 0x81eb, 0x81ec, 0x81f0, 0x81f1, 0x81f2, 0x81f5, 0x81f6, 0x81f8, 0x81f9, 0x81fd, 0x81ff, 0x8200, 0x8203, 0x820f, 0x8213, 0x8214, 0x8219, 0x821a, 0x821d, 0x8221, 0x8222, 0x8228, 0x8232, 0x8234, 0x823a, 0x8243, 0x8244, 0x8245, 0x8246, 94, 0x5721, 0x824b, 0x824e, 0x824f, 0x8251, 0x8256, 0x825c, 0x8260, 0x8263, 0x8267, 0x826d, 0x8274, 0x827b, 0x827d, 0x827f, 0x8280, 0x8281, 0x8283, 0x8284, 0x8287, 0x8289, 0x828a, 0x828e, 0x8291, 0x8294, 0x8296, 0x8298, 0x829a, 0x829b, 0x82a0, 0x82a1, 0x82a3, 0x82a4, 0x82a7, 0x82a8, 0x82a9, 0x82aa, 0x82ae, 0x82b0, 0x82b2, 0x82b4, 0x82b7, 0x82ba, 0x82bc, 0x82be, 0x82bf, 0x82c6, 0x82d0, 0x82d5, 0x82da, 0x82e0, 0x82e2, 0x82e4, 0x82e8, 0x82ea, 0x82ed, 0x82ef, 0x82f6, 0x82f7, 0x82fd, 0x82fe, 0x8300, 0x8301, 0x8307, 0x8308, 0x830a, 0x830b, 0x8354, 0x831b, 0x831d, 0x831e, 0x831f, 0x8321, 0x8322, 0x832c, 0x832d, 0x832e, 0x8330, 0x8333, 0x8337, 0x833a, 0x833c, 0x833d, 0x8342, 0x8343, 0x8344, 0x8347, 0x834d, 0x834e, 0x8351, 0x8355, 0x8356, 0x8357, 0x8370, 0x8378, 94, 0x5821, 0x837d, 0x837f, 0x8380, 0x8382, 0x8384, 0x8386, 0x838d, 0x8392, 0x8394, 0x8395, 0x8398, 0x8399, 0x839b, 0x839c, 0x839d, 0x83a6, 0x83a7, 0x83a9, 0x83ac, 0x83be, 0x83bf, 0x83c0, 0x83c7, 0x83c9, 0x83cf, 0x83d0, 0x83d1, 0x83d4, 0x83dd, 0x8353, 0x83e8, 0x83ea, 0x83f6, 0x83f8, 0x83f9, 0x83fc, 0x8401, 0x8406, 0x840a, 0x840f, 0x8411, 0x8415, 0x8419, 0x83ad, 0x842f, 0x8439, 0x8445, 0x8447, 0x8448, 0x844a, 0x844d, 0x844f, 0x8451, 0x8452, 0x8456, 0x8458, 0x8459, 0x845a, 0x845c, 0x8460, 0x8464, 0x8465, 0x8467, 0x846a, 0x8470, 0x8473, 0x8474, 0x8476, 0x8478, 0x847c, 0x847d, 0x8481, 0x8485, 0x8492, 0x8493, 0x8495, 0x849e, 0x84a6, 0x84a8, 0x84a9, 0x84aa, 0x84af, 0x84b1, 0x84b4, 0x84ba, 0x84bd, 0x84be, 0x84c0, 0x84c2, 0x84c7, 0x84c8, 0x84cc, 0x84cf, 0x84d3, 94, 0x5921, 0x84dc, 0x84e7, 0x84ea, 0x84ef, 0x84f0, 0x84f1, 0x84f2, 0x84f7, 0x8532, 0x84fa, 0x84fb, 0x84fd, 0x8502, 0x8503, 0x8507, 0x850c, 0x850e, 0x8510, 0x851c, 0x851e, 0x8522, 0x8523, 0x8524, 0x8525, 0x8527, 0x852a, 0x852b, 0x852f, 0x8533, 0x8534, 0x8536, 0x853f, 0x8546, 0x854f, 0x8550, 0x8551, 0x8552, 0x8553, 0x8556, 0x8559, 0x855c, 0x855d, 0x855e, 0x855f, 0x8560, 0x8561, 0x8562, 0x8564, 0x856b, 0x856f, 0x8579, 0x857a, 0x857b, 0x857d, 0x857f, 0x8581, 0x8585, 0x8586, 0x8589, 0x858b, 0x858c, 0x858f, 0x8593, 0x8598, 0x859d, 0x859f, 0x85a0, 0x85a2, 0x85a5, 0x85a7, 0x85b4, 0x85b6, 0x85b7, 0x85b8, 0x85bc, 0x85bd, 0x85be, 0x85bf, 0x85c2, 0x85c7, 0x85ca, 0x85cb, 0x85ce, 0x85ad, 0x85d8, 0x85da, 0x85df, 0x85e0, 0x85e6, 0x85e8, 0x85ed, 0x85f3, 0x85f6, 0x85fc, 94, 0x5a21, 0x85ff, 0x8600, 0x8604, 0x8605, 0x860d, 0x860e, 0x8610, 0x8611, 0x8612, 0x8618, 0x8619, 0x861b, 0x861e, 0x8621, 0x8627, 0x8629, 0x8636, 0x8638, 0x863a, 0x863c, 0x863d, 0x8640, 0x8642, 0x8646, 0x8652, 0x8653, 0x8656, 0x8657, 0x8658, 0x8659, 0x865d, 0x8660, 0x8661, 0x8662, 0x8663, 0x8664, 0x8669, 0x866c, 0x866f, 0x8675, 0x8676, 0x8677, 0x867a, 0x868d, 0x8691, 0x8696, 0x8698, 0x869a, 0x869c, 0x86a1, 0x86a6, 0x86a7, 0x86a8, 0x86ad, 0x86b1, 0x86b3, 0x86b4, 0x86b5, 0x86b7, 0x86b8, 0x86b9, 0x86bf, 0x86c0, 0x86c1, 0x86c3, 0x86c5, 0x86d1, 0x86d2, 0x86d5, 0x86d7, 0x86da, 0x86dc, 0x86e0, 0x86e3, 0x86e5, 0x86e7, 0x8688, 0x86fa, 0x86fc, 0x86fd, 0x8704, 0x8705, 0x8707, 0x870b, 0x870e, 0x870f, 0x8710, 0x8713, 0x8714, 0x8719, 0x871e, 0x871f, 0x8721, 0x8723, 94, 0x5b21, 0x8728, 0x872e, 0x872f, 0x8731, 0x8732, 0x8739, 0x873a, 0x873c, 0x873d, 0x873e, 0x8740, 0x8743, 0x8745, 0x874d, 0x8758, 0x875d, 0x8761, 0x8764, 0x8765, 0x876f, 0x8771, 0x8772, 0x877b, 0x8783, 0x8784, 0x8785, 0x8786, 0x8787, 0x8788, 0x8789, 0x878b, 0x878c, 0x8790, 0x8793, 0x8795, 0x8797, 0x8798, 0x8799, 0x879e, 0x87a0, 0x87a3, 0x87a7, 0x87ac, 0x87ad, 0x87ae, 0x87b1, 0x87b5, 0x87be, 0x87bf, 0x87c1, 0x87c8, 0x87c9, 0x87ca, 0x87ce, 0x87d5, 0x87d6, 0x87d9, 0x87da, 0x87dc, 0x87df, 0x87e2, 0x87e3, 0x87e4, 0x87ea, 0x87eb, 0x87ed, 0x87f1, 0x87f3, 0x87f8, 0x87fa, 0x87ff, 0x8801, 0x8803, 0x8806, 0x8809, 0x880a, 0x880b, 0x8810, 0x8819, 0x8812, 0x8813, 0x8814, 0x8818, 0x881a, 0x881b, 0x881c, 0x881e, 0x881f, 0x8828, 0x882d, 0x882e, 0x8830, 0x8832, 0x8835, 94, 0x5c21, 0x883a, 0x883c, 0x8841, 0x8843, 0x8845, 0x8848, 0x8849, 0x884a, 0x884b, 0x884e, 0x8851, 0x8855, 0x8856, 0x8858, 0x885a, 0x885c, 0x885f, 0x8860, 0x8864, 0x8869, 0x8871, 0x8879, 0x887b, 0x8880, 0x8898, 0x889a, 0x889b, 0x889c, 0x889f, 0x88a0, 0x88a8, 0x88aa, 0x88ba, 0x88bd, 0x88be, 0x88c0, 0x88ca, 0x88cb, 0x88cc, 0x88cd, 0x88ce, 0x88d1, 0x88d2, 0x88d3, 0x88db, 0x88de, 0x88e7, 0x88ef, 0x88f0, 0x88f1, 0x88f5, 0x88f7, 0x8901, 0x8906, 0x890d, 0x890e, 0x890f, 0x8915, 0x8916, 0x8918, 0x8919, 0x891a, 0x891c, 0x8920, 0x8926, 0x8927, 0x8928, 0x8930, 0x8931, 0x8932, 0x8935, 0x8939, 0x893a, 0x893e, 0x8940, 0x8942, 0x8945, 0x8946, 0x8949, 0x894f, 0x8952, 0x8957, 0x895a, 0x895b, 0x895c, 0x8961, 0x8962, 0x8963, 0x896b, 0x896e, 0x8970, 0x8973, 0x8975, 0x897a, 94, 0x5d21, 0x897b, 0x897c, 0x897d, 0x8989, 0x898d, 0x8990, 0x8994, 0x8995, 0x899b, 0x899c, 0x899f, 0x89a0, 0x89a5, 0x89b0, 0x89b4, 0x89b5, 0x89b6, 0x89b7, 0x89bc, 0x89d4, 0x89d5, 0x89d6, 0x89d7, 0x89d8, 0x89e5, 0x89e9, 0x89eb, 0x89ed, 0x89f1, 0x89f3, 0x89f6, 0x89f9, 0x89fd, 0x89ff, 0x8a04, 0x8a05, 0x8a07, 0x8a0f, 0x8a11, 0x8a12, 0x8a14, 0x8a15, 0x8a1e, 0x8a20, 0x8a22, 0x8a24, 0x8a26, 0x8a2b, 0x8a2c, 0x8a2f, 0x8a35, 0x8a37, 0x8a3d, 0x8a3e, 0x8a40, 0x8a43, 0x8a45, 0x8a47, 0x8a49, 0x8a4d, 0x8a4e, 0x8a53, 0x8a56, 0x8a57, 0x8a58, 0x8a5c, 0x8a5d, 0x8a61, 0x8a65, 0x8a67, 0x8a75, 0x8a76, 0x8a77, 0x8a79, 0x8a7a, 0x8a7b, 0x8a7e, 0x8a7f, 0x8a80, 0x8a83, 0x8a86, 0x8a8b, 0x8a8f, 0x8a90, 0x8a92, 0x8a96, 0x8a97, 0x8a99, 0x8a9f, 0x8aa7, 0x8aa9, 0x8aae, 0x8aaf, 0x8ab3, 94, 0x5e21, 0x8ab6, 0x8ab7, 0x8abb, 0x8abe, 0x8ac3, 0x8ac6, 0x8ac8, 0x8ac9, 0x8aca, 0x8ad1, 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad7, 0x8add, 0x8adf, 0x8aec, 0x8af0, 0x8af4, 0x8af5, 0x8af6, 0x8afc, 0x8aff, 0x8b05, 0x8b06, 0x8b0b, 0x8b11, 0x8b1c, 0x8b1e, 0x8b1f, 0x8b0a, 0x8b2d, 0x8b30, 0x8b37, 0x8b3c, 0x8b42, 0x8b43, 0x8b44, 0x8b45, 0x8b46, 0x8b48, 0x8b52, 0x8b53, 0x8b54, 0x8b59, 0x8b4d, 0x8b5e, 0x8b63, 0x8b6d, 0x8b76, 0x8b78, 0x8b79, 0x8b7c, 0x8b7e, 0x8b81, 0x8b84, 0x8b85, 0x8b8b, 0x8b8d, 0x8b8f, 0x8b94, 0x8b95, 0x8b9c, 0x8b9e, 0x8b9f, 0x8c38, 0x8c39, 0x8c3d, 0x8c3e, 0x8c45, 0x8c47, 0x8c49, 0x8c4b, 0x8c4f, 0x8c51, 0x8c53, 0x8c54, 0x8c57, 0x8c58, 0x8c5b, 0x8c5d, 0x8c59, 0x8c63, 0x8c64, 0x8c66, 0x8c68, 0x8c69, 0x8c6d, 0x8c73, 0x8c75, 0x8c76, 0x8c7b, 0x8c7e, 0x8c86, 94, 0x5f21, 0x8c87, 0x8c8b, 0x8c90, 0x8c92, 0x8c93, 0x8c99, 0x8c9b, 0x8c9c, 0x8ca4, 0x8cb9, 0x8cba, 0x8cc5, 0x8cc6, 0x8cc9, 0x8ccb, 0x8ccf, 0x8cd6, 0x8cd5, 0x8cd9, 0x8cdd, 0x8ce1, 0x8ce8, 0x8cec, 0x8cef, 0x8cf0, 0x8cf2, 0x8cf5, 0x8cf7, 0x8cf8, 0x8cfe, 0x8cff, 0x8d01, 0x8d03, 0x8d09, 0x8d12, 0x8d17, 0x8d1b, 0x8d65, 0x8d69, 0x8d6c, 0x8d6e, 0x8d7f, 0x8d82, 0x8d84, 0x8d88, 0x8d8d, 0x8d90, 0x8d91, 0x8d95, 0x8d9e, 0x8d9f, 0x8da0, 0x8da6, 0x8dab, 0x8dac, 0x8daf, 0x8db2, 0x8db5, 0x8db7, 0x8db9, 0x8dbb, 0x8dc0, 0x8dc5, 0x8dc6, 0x8dc7, 0x8dc8, 0x8dca, 0x8dce, 0x8dd1, 0x8dd4, 0x8dd5, 0x8dd7, 0x8dd9, 0x8de4, 0x8de5, 0x8de7, 0x8dec, 0x8df0, 0x8dbc, 0x8df1, 0x8df2, 0x8df4, 0x8dfd, 0x8e01, 0x8e04, 0x8e05, 0x8e06, 0x8e0b, 0x8e11, 0x8e14, 0x8e16, 0x8e20, 0x8e21, 0x8e22, 94, 0x6021, 0x8e23, 0x8e26, 0x8e27, 0x8e31, 0x8e33, 0x8e36, 0x8e37, 0x8e38, 0x8e39, 0x8e3d, 0x8e40, 0x8e41, 0x8e4b, 0x8e4d, 0x8e4e, 0x8e4f, 0x8e54, 0x8e5b, 0x8e5c, 0x8e5d, 0x8e5e, 0x8e61, 0x8e62, 0x8e69, 0x8e6c, 0x8e6d, 0x8e6f, 0x8e70, 0x8e71, 0x8e79, 0x8e7a, 0x8e7b, 0x8e82, 0x8e83, 0x8e89, 0x8e90, 0x8e92, 0x8e95, 0x8e9a, 0x8e9b, 0x8e9d, 0x8e9e, 0x8ea2, 0x8ea7, 0x8ea9, 0x8ead, 0x8eae, 0x8eb3, 0x8eb5, 0x8eba, 0x8ebb, 0x8ec0, 0x8ec1, 0x8ec3, 0x8ec4, 0x8ec7, 0x8ecf, 0x8ed1, 0x8ed4, 0x8edc, 0x8ee8, 0x8eee, 0x8ef0, 0x8ef1, 0x8ef7, 0x8ef9, 0x8efa, 0x8eed, 0x8f00, 0x8f02, 0x8f07, 0x8f08, 0x8f0f, 0x8f10, 0x8f16, 0x8f17, 0x8f18, 0x8f1e, 0x8f20, 0x8f21, 0x8f23, 0x8f25, 0x8f27, 0x8f28, 0x8f2c, 0x8f2d, 0x8f2e, 0x8f34, 0x8f35, 0x8f36, 0x8f37, 0x8f3a, 0x8f40, 0x8f41, 94, 0x6121, 0x8f43, 0x8f47, 0x8f4f, 0x8f51, 0x8f52, 0x8f53, 0x8f54, 0x8f55, 0x8f58, 0x8f5d, 0x8f5e, 0x8f65, 0x8f9d, 0x8fa0, 0x8fa1, 0x8fa4, 0x8fa5, 0x8fa6, 0x8fb5, 0x8fb6, 0x8fb8, 0x8fbe, 0x8fc0, 0x8fc1, 0x8fc6, 0x8fca, 0x8fcb, 0x8fcd, 0x8fd0, 0x8fd2, 0x8fd3, 0x8fd5, 0x8fe0, 0x8fe3, 0x8fe4, 0x8fe8, 0x8fee, 0x8ff1, 0x8ff5, 0x8ff6, 0x8ffb, 0x8ffe, 0x9002, 0x9004, 0x9008, 0x900c, 0x9018, 0x901b, 0x9028, 0x9029, 0x902f, 0x902a, 0x902c, 0x902d, 0x9033, 0x9034, 0x9037, 0x903f, 0x9043, 0x9044, 0x904c, 0x905b, 0x905d, 0x9062, 0x9066, 0x9067, 0x906c, 0x9070, 0x9074, 0x9079, 0x9085, 0x9088, 0x908b, 0x908c, 0x908e, 0x9090, 0x9095, 0x9097, 0x9098, 0x9099, 0x909b, 0x90a0, 0x90a1, 0x90a2, 0x90a5, 0x90b0, 0x90b2, 0x90b3, 0x90b4, 0x90b6, 0x90bd, 0x90cc, 0x90be, 0x90c3, 94, 0x6221, 0x90c4, 0x90c5, 0x90c7, 0x90c8, 0x90d5, 0x90d7, 0x90d8, 0x90d9, 0x90dc, 0x90dd, 0x90df, 0x90e5, 0x90d2, 0x90f6, 0x90eb, 0x90ef, 0x90f0, 0x90f4, 0x90fe, 0x90ff, 0x9100, 0x9104, 0x9105, 0x9106, 0x9108, 0x910d, 0x9110, 0x9114, 0x9116, 0x9117, 0x9118, 0x911a, 0x911c, 0x911e, 0x9120, 0x9125, 0x9122, 0x9123, 0x9127, 0x9129, 0x912e, 0x912f, 0x9131, 0x9134, 0x9136, 0x9137, 0x9139, 0x913a, 0x913c, 0x913d, 0x9143, 0x9147, 0x9148, 0x914f, 0x9153, 0x9157, 0x9159, 0x915a, 0x915b, 0x9161, 0x9164, 0x9167, 0x916d, 0x9174, 0x9179, 0x917a, 0x917b, 0x9181, 0x9183, 0x9185, 0x9186, 0x918a, 0x918e, 0x9191, 0x9193, 0x9194, 0x9195, 0x9198, 0x919e, 0x91a1, 0x91a6, 0x91a8, 0x91ac, 0x91ad, 0x91ae, 0x91b0, 0x91b1, 0x91b2, 0x91b3, 0x91b6, 0x91bb, 0x91bc, 0x91bd, 0x91bf, 94, 0x6321, 0x91c2, 0x91c3, 0x91c5, 0x91d3, 0x91d4, 0x91d7, 0x91d9, 0x91da, 0x91de, 0x91e4, 0x91e5, 0x91e9, 0x91ea, 0x91ec, 0x91ed, 0x91ee, 0x91ef, 0x91f0, 0x91f1, 0x91f7, 0x91f9, 0x91fb, 0x91fd, 0x9200, 0x9201, 0x9204, 0x9205, 0x9206, 0x9207, 0x9209, 0x920a, 0x920c, 0x9210, 0x9212, 0x9213, 0x9216, 0x9218, 0x921c, 0x921d, 0x9223, 0x9224, 0x9225, 0x9226, 0x9228, 0x922e, 0x922f, 0x9230, 0x9233, 0x9235, 0x9236, 0x9238, 0x9239, 0x923a, 0x923c, 0x923e, 0x9240, 0x9242, 0x9243, 0x9246, 0x9247, 0x924a, 0x924d, 0x924e, 0x924f, 0x9251, 0x9258, 0x9259, 0x925c, 0x925d, 0x9260, 0x9261, 0x9265, 0x9267, 0x9268, 0x9269, 0x926e, 0x926f, 0x9270, 0x9275, 0x9276, 0x9277, 0x9278, 0x9279, 0x927b, 0x927c, 0x927d, 0x927f, 0x9288, 0x9289, 0x928a, 0x928d, 0x928e, 0x9292, 0x9297, 94, 0x6421, 0x9299, 0x929f, 0x92a0, 0x92a4, 0x92a5, 0x92a7, 0x92a8, 0x92ab, 0x92af, 0x92b2, 0x92b6, 0x92b8, 0x92ba, 0x92bb, 0x92bc, 0x92bd, 0x92bf, 0x92c0, 0x92c1, 0x92c2, 0x92c3, 0x92c5, 0x92c6, 0x92c7, 0x92c8, 0x92cb, 0x92cc, 0x92cd, 0x92ce, 0x92d0, 0x92d3, 0x92d5, 0x92d7, 0x92d8, 0x92d9, 0x92dc, 0x92dd, 0x92df, 0x92e0, 0x92e1, 0x92e3, 0x92e5, 0x92e7, 0x92e8, 0x92ec, 0x92ee, 0x92f0, 0x92f9, 0x92fb, 0x92ff, 0x9300, 0x9302, 0x9308, 0x930d, 0x9311, 0x9314, 0x9315, 0x931c, 0x931d, 0x931e, 0x931f, 0x9321, 0x9324, 0x9325, 0x9327, 0x9329, 0x932a, 0x9333, 0x9334, 0x9336, 0x9337, 0x9347, 0x9348, 0x9349, 0x9350, 0x9351, 0x9352, 0x9355, 0x9357, 0x9358, 0x935a, 0x935e, 0x9364, 0x9365, 0x9367, 0x9369, 0x936a, 0x936d, 0x936f, 0x9370, 0x9371, 0x9373, 0x9374, 0x9376, 94, 0x6521, 0x937a, 0x937d, 0x937f, 0x9380, 0x9381, 0x9382, 0x9388, 0x938a, 0x938b, 0x938d, 0x938f, 0x9392, 0x9395, 0x9398, 0x939b, 0x939e, 0x93a1, 0x93a3, 0x93a4, 0x93a6, 0x93a8, 0x93ab, 0x93b4, 0x93b5, 0x93b6, 0x93ba, 0x93a9, 0x93c1, 0x93c4, 0x93c5, 0x93c6, 0x93c7, 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, 0x93d3, 0x93d9, 0x93dc, 0x93de, 0x93df, 0x93e2, 0x93e6, 0x93e7, 0x93f9, 0x93f7, 0x93f8, 0x93fa, 0x93fb, 0x93fd, 0x9401, 0x9402, 0x9404, 0x9408, 0x9409, 0x940d, 0x940e, 0x940f, 0x9415, 0x9416, 0x9417, 0x941f, 0x942e, 0x942f, 0x9431, 0x9432, 0x9433, 0x9434, 0x943b, 0x943f, 0x943d, 0x9443, 0x9445, 0x9448, 0x944a, 0x944c, 0x9455, 0x9459, 0x945c, 0x945f, 0x9461, 0x9463, 0x9468, 0x946b, 0x946d, 0x946e, 0x946f, 0x9471, 0x9472, 0x9484, 0x9483, 0x9578, 0x9579, 94, 0x6621, 0x957e, 0x9584, 0x9588, 0x958c, 0x958d, 0x958e, 0x959d, 0x959e, 0x959f, 0x95a1, 0x95a6, 0x95a9, 0x95ab, 0x95ac, 0x95b4, 0x95b6, 0x95ba, 0x95bd, 0x95bf, 0x95c6, 0x95c8, 0x95c9, 0x95cb, 0x95d0, 0x95d1, 0x95d2, 0x95d3, 0x95d9, 0x95da, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e4, 0x95e6, 0x961d, 0x961e, 0x9622, 0x9624, 0x9625, 0x9626, 0x962c, 0x9631, 0x9633, 0x9637, 0x9638, 0x9639, 0x963a, 0x963c, 0x963d, 0x9641, 0x9652, 0x9654, 0x9656, 0x9657, 0x9658, 0x9661, 0x966e, 0x9674, 0x967b, 0x967c, 0x967e, 0x967f, 0x9681, 0x9682, 0x9683, 0x9684, 0x9689, 0x9691, 0x9696, 0x969a, 0x969d, 0x969f, 0x96a4, 0x96a5, 0x96a6, 0x96a9, 0x96ae, 0x96af, 0x96b3, 0x96ba, 0x96ca, 0x96d2, 0x5db2, 0x96d8, 0x96da, 0x96dd, 0x96de, 0x96df, 0x96e9, 0x96ef, 0x96f1, 0x96fa, 0x9702, 94, 0x6721, 0x9703, 0x9705, 0x9709, 0x971a, 0x971b, 0x971d, 0x9721, 0x9722, 0x9723, 0x9728, 0x9731, 0x9733, 0x9741, 0x9743, 0x974a, 0x974e, 0x974f, 0x9755, 0x9757, 0x9758, 0x975a, 0x975b, 0x9763, 0x9767, 0x976a, 0x976e, 0x9773, 0x9776, 0x9777, 0x9778, 0x977b, 0x977d, 0x977f, 0x9780, 0x9789, 0x9795, 0x9796, 0x9797, 0x9799, 0x979a, 0x979e, 0x979f, 0x97a2, 0x97ac, 0x97ae, 0x97b1, 0x97b2, 0x97b5, 0x97b6, 0x97b8, 0x97b9, 0x97ba, 0x97bc, 0x97be, 0x97bf, 0x97c1, 0x97c4, 0x97c5, 0x97c7, 0x97c9, 0x97ca, 0x97cc, 0x97cd, 0x97ce, 0x97d0, 0x97d1, 0x97d4, 0x97d7, 0x97d8, 0x97d9, 0x97dd, 0x97de, 0x97e0, 0x97db, 0x97e1, 0x97e4, 0x97ef, 0x97f1, 0x97f4, 0x97f7, 0x97f8, 0x97fa, 0x9807, 0x980a, 0x9819, 0x980d, 0x980e, 0x9814, 0x9816, 0x981c, 0x981e, 0x9820, 0x9823, 0x9826, 94, 0x6821, 0x982b, 0x982e, 0x982f, 0x9830, 0x9832, 0x9833, 0x9835, 0x9825, 0x983e, 0x9844, 0x9847, 0x984a, 0x9851, 0x9852, 0x9853, 0x9856, 0x9857, 0x9859, 0x985a, 0x9862, 0x9863, 0x9865, 0x9866, 0x986a, 0x986c, 0x98ab, 0x98ad, 0x98ae, 0x98b0, 0x98b4, 0x98b7, 0x98b8, 0x98ba, 0x98bb, 0x98bf, 0x98c2, 0x98c5, 0x98c8, 0x98cc, 0x98e1, 0x98e3, 0x98e5, 0x98e6, 0x98e7, 0x98ea, 0x98f3, 0x98f6, 0x9902, 0x9907, 0x9908, 0x9911, 0x9915, 0x9916, 0x9917, 0x991a, 0x991b, 0x991c, 0x991f, 0x9922, 0x9926, 0x9927, 0x992b, 0x9931, 0x9932, 0x9933, 0x9934, 0x9935, 0x9939, 0x993a, 0x993b, 0x993c, 0x9940, 0x9941, 0x9946, 0x9947, 0x9948, 0x994d, 0x994e, 0x9954, 0x9958, 0x9959, 0x995b, 0x995c, 0x995e, 0x995f, 0x9960, 0x999b, 0x999d, 0x999f, 0x99a6, 0x99b0, 0x99b1, 0x99b2, 0x99b5, 94, 0x6921, 0x99b9, 0x99ba, 0x99bd, 0x99bf, 0x99c3, 0x99c9, 0x99d3, 0x99d4, 0x99d9, 0x99da, 0x99dc, 0x99de, 0x99e7, 0x99ea, 0x99eb, 0x99ec, 0x99f0, 0x99f4, 0x99f5, 0x99f9, 0x99fd, 0x99fe, 0x9a02, 0x9a03, 0x9a04, 0x9a0b, 0x9a0c, 0x9a10, 0x9a11, 0x9a16, 0x9a1e, 0x9a20, 0x9a22, 0x9a23, 0x9a24, 0x9a27, 0x9a2d, 0x9a2e, 0x9a33, 0x9a35, 0x9a36, 0x9a38, 0x9a47, 0x9a41, 0x9a44, 0x9a4a, 0x9a4b, 0x9a4c, 0x9a4e, 0x9a51, 0x9a54, 0x9a56, 0x9a5d, 0x9aaa, 0x9aac, 0x9aae, 0x9aaf, 0x9ab2, 0x9ab4, 0x9ab5, 0x9ab6, 0x9ab9, 0x9abb, 0x9abe, 0x9abf, 0x9ac1, 0x9ac3, 0x9ac6, 0x9ac8, 0x9ace, 0x9ad0, 0x9ad2, 0x9ad5, 0x9ad6, 0x9ad7, 0x9adb, 0x9adc, 0x9ae0, 0x9ae4, 0x9ae5, 0x9ae7, 0x9ae9, 0x9aec, 0x9af2, 0x9af3, 0x9af5, 0x9af9, 0x9afa, 0x9afd, 0x9aff, 0x9b00, 0x9b01, 0x9b02, 0x9b03, 94, 0x6a21, 0x9b04, 0x9b05, 0x9b08, 0x9b09, 0x9b0b, 0x9b0c, 0x9b0d, 0x9b0e, 0x9b10, 0x9b12, 0x9b16, 0x9b19, 0x9b1b, 0x9b1c, 0x9b20, 0x9b26, 0x9b2b, 0x9b2d, 0x9b33, 0x9b34, 0x9b35, 0x9b37, 0x9b39, 0x9b3a, 0x9b3d, 0x9b48, 0x9b4b, 0x9b4c, 0x9b55, 0x9b56, 0x9b57, 0x9b5b, 0x9b5e, 0x9b61, 0x9b63, 0x9b65, 0x9b66, 0x9b68, 0x9b6a, 0x9b6b, 0x9b6c, 0x9b6d, 0x9b6e, 0x9b73, 0x9b75, 0x9b77, 0x9b78, 0x9b79, 0x9b7f, 0x9b80, 0x9b84, 0x9b85, 0x9b86, 0x9b87, 0x9b89, 0x9b8a, 0x9b8b, 0x9b8d, 0x9b8f, 0x9b90, 0x9b94, 0x9b9a, 0x9b9d, 0x9b9e, 0x9ba6, 0x9ba7, 0x9ba9, 0x9bac, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb7, 0x9bb8, 0x9bbb, 0x9bbc, 0x9bbe, 0x9bbf, 0x9bc1, 0x9bc7, 0x9bc8, 0x9bce, 0x9bd0, 0x9bd7, 0x9bd8, 0x9bdd, 0x9bdf, 0x9be5, 0x9be7, 0x9bea, 0x9beb, 0x9bef, 0x9bf3, 0x9bf7, 0x9bf8, 94, 0x6b21, 0x9bf9, 0x9bfa, 0x9bfd, 0x9bff, 0x9c00, 0x9c02, 0x9c0b, 0x9c0f, 0x9c11, 0x9c16, 0x9c18, 0x9c19, 0x9c1a, 0x9c1c, 0x9c1e, 0x9c22, 0x9c23, 0x9c26, 0x9c27, 0x9c28, 0x9c29, 0x9c2a, 0x9c31, 0x9c35, 0x9c36, 0x9c37, 0x9c3d, 0x9c41, 0x9c43, 0x9c44, 0x9c45, 0x9c49, 0x9c4a, 0x9c4e, 0x9c4f, 0x9c50, 0x9c53, 0x9c54, 0x9c56, 0x9c58, 0x9c5b, 0x9c5d, 0x9c5e, 0x9c5f, 0x9c63, 0x9c69, 0x9c6a, 0x9c5c, 0x9c6b, 0x9c68, 0x9c6e, 0x9c70, 0x9c72, 0x9c75, 0x9c77, 0x9c7b, 0x9ce6, 0x9cf2, 0x9cf7, 0x9cf9, 0x9d0b, 0x9d02, 0x9d11, 0x9d17, 0x9d18, 0x9d1c, 0x9d1d, 0x9d1e, 0x9d2f, 0x9d30, 0x9d32, 0x9d33, 0x9d34, 0x9d3a, 0x9d3c, 0x9d45, 0x9d3d, 0x9d42, 0x9d43, 0x9d47, 0x9d4a, 0x9d53, 0x9d54, 0x9d5f, 0x9d63, 0x9d62, 0x9d65, 0x9d69, 0x9d6a, 0x9d6b, 0x9d70, 0x9d76, 0x9d77, 0x9d7b, 94, 0x6c21, 0x9d7c, 0x9d7e, 0x9d83, 0x9d84, 0x9d86, 0x9d8a, 0x9d8d, 0x9d8e, 0x9d92, 0x9d93, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9da1, 0x9daa, 0x9dac, 0x9dae, 0x9db1, 0x9db5, 0x9db9, 0x9dbc, 0x9dbf, 0x9dc3, 0x9dc7, 0x9dc9, 0x9dca, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dda, 0x9dde, 0x9ddf, 0x9de0, 0x9de5, 0x9de7, 0x9de9, 0x9deb, 0x9dee, 0x9df0, 0x9df3, 0x9df4, 0x9dfe, 0x9e0a, 0x9e02, 0x9e07, 0x9e0e, 0x9e10, 0x9e11, 0x9e12, 0x9e15, 0x9e16, 0x9e19, 0x9e1c, 0x9e1d, 0x9e7a, 0x9e7b, 0x9e7c, 0x9e80, 0x9e82, 0x9e83, 0x9e84, 0x9e85, 0x9e87, 0x9e8e, 0x9e8f, 0x9e96, 0x9e98, 0x9e9b, 0x9e9e, 0x9ea4, 0x9ea8, 0x9eac, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb3, 0x9eb4, 0x9eb5, 0x9ec6, 0x9ec8, 0x9ecb, 0x9ed5, 0x9edf, 0x9ee4, 0x9ee7, 0x9eec, 0x9eed, 0x9eee, 0x9ef0, 0x9ef1, 0x9ef2, 0x9ef5, 67, 0x6d21, 0x9ef8, 0x9eff, 0x9f02, 0x9f03, 0x9f09, 0x9f0f, 0x9f10, 0x9f11, 0x9f12, 0x9f14, 0x9f16, 0x9f17, 0x9f19, 0x9f1a, 0x9f1b, 0x9f1f, 0x9f22, 0x9f26, 0x9f2a, 0x9f2b, 0x9f2f, 0x9f31, 0x9f32, 0x9f34, 0x9f37, 0x9f39, 0x9f3a, 0x9f3c, 0x9f3d, 0x9f3f, 0x9f41, 0x9f43, 0x9f44, 0x9f45, 0x9f46, 0x9f47, 0x9f53, 0x9f55, 0x9f56, 0x9f57, 0x9f58, 0x9f5a, 0x9f5d, 0x9f5e, 0x9f68, 0x9f69, 0x9f6d, 0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f73, 0x9f75, 0x9f7a, 0x9f7d, 0x9f8f, 0x9f90, 0x9f91, 0x9f92, 0x9f94, 0x9f96, 0x9f97, 0x9f9e, 0x9fa1, 0x9fa2, 0x9fa3, 0x9fa5, 0 jade-1.2.1/lib/ksc5601.h100444 764 764 202577 6604607566 12312 0ustar jjcjjc94, 0x2121, 0x3000, 0x3001, 0x3002, 0x00b7, 0x2025, 0x2026, 0x00a8, 0x3003, 0x00ad, 0x2015, 0x2225, 0xff3c, 0x223c, 0x2018, 0x2019, 0x201c, 0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e, 0x300f, 0x3010, 0x3011, 0x00b1, 0x00d7, 0x00f7, 0x2260, 0x2264, 0x2265, 0x221e, 0x2234, 0x00b0, 0x2032, 0x2033, 0x2103, 0x212b, 0xffe0, 0xffe1, 0xffe5, 0x2642, 0x2640, 0x2220, 0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00a7, 0x203b, 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x2192, 0x2190, 0x2191, 0x2193, 0x2194, 0x3013, 0x226a, 0x226b, 0x221a, 0x223d, 0x221d, 0x2235, 0x222b, 0x222c, 0x2208, 0x220b, 0x2286, 0x2287, 0x2282, 0x2283, 0x222a, 0x2229, 0x2227, 0x2228, 0xffe2, 69, 0x2221, 0x21d2, 0x21d4, 0x2200, 0x2203, 0x00b4, 0xff5e, 0x02c7, 0x02d8, 0x02dd, 0x02da, 0x02d9, 0x00b8, 0x02db, 0x00a1, 0x00bf, 0x02d0, 0x222e, 0x2211, 0x220f, 0x00a4, 0x2109, 0x2030, 0x25c1, 0x25c0, 0x25b7, 0x25b6, 0x2664, 0x2660, 0x2661, 0x2665, 0x2667, 0x2663, 0x2299, 0x25c8, 0x25a3, 0x25d0, 0x25d1, 0x2592, 0x25a4, 0x25a5, 0x25a8, 0x25a7, 0x25a6, 0x25a9, 0x2668, 0x260f, 0x260e, 0x261c, 0x261e, 0x00b6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199, 0x2196, 0x2198, 0x266d, 0x2669, 0x266a, 0x266c, 0x327f, 0x321c, 0x2116, 0x33c7, 0x2122, 0x33c2, 0x33d8, 0x2121, 94, 0x2321, 0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07, 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, 0xff20, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff3b, 0xffe6, 0xff3d, 0xff3e, 0xff3f, 0xff40, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3, 94, 0x2421, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, 0x3168, 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f, 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, 0x3178, 0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x317f, 0x3180, 0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187, 0x3188, 0x3189, 0x318a, 0x318b, 0x318c, 0x318d, 0x318e, 10, 0x2521, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 10, 0x2530, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 24, 0x2541, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 24, 0x2561, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 68, 0x2621, 0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, 0x252c, 0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, 0x251b, 0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, 0x252f, 0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, 0x2542, 0x2512, 0x2511, 0x251a, 0x2519, 0x2516, 0x2515, 0x250e, 0x250d, 0x251e, 0x251f, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, 0x252a, 0x252d, 0x252e, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, 0x253a, 0x253d, 0x253e, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 79, 0x2721, 0x3395, 0x3396, 0x3397, 0x2113, 0x3398, 0x33c4, 0x33a3, 0x33a4, 0x33a5, 0x33a6, 0x3399, 0x339a, 0x339b, 0x339c, 0x339d, 0x339e, 0x339f, 0x33a0, 0x33a1, 0x33a2, 0x33ca, 0x338d, 0x338e, 0x338f, 0x33cf, 0x3388, 0x3389, 0x33c8, 0x33a7, 0x33a8, 0x33b0, 0x33b1, 0x33b2, 0x33b3, 0x33b4, 0x33b5, 0x33b6, 0x33b7, 0x33b8, 0x33b9, 0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33ba, 0x33bb, 0x33bc, 0x33bd, 0x33be, 0x33bf, 0x3390, 0x3391, 0x3392, 0x3393, 0x3394, 0x2126, 0x33c0, 0x33c1, 0x338a, 0x338b, 0x338c, 0x33d6, 0x33c5, 0x33ad, 0x33ae, 0x33af, 0x33db, 0x33a9, 0x33aa, 0x33ab, 0x33ac, 0x33dd, 0x33d0, 0x33d3, 0x33c3, 0x33c9, 0x33dc, 0x33c6, 4, 0x2821, 0x00c6, 0x00d0, 0x00aa, 0x0126, 1, 0x2826, 0x0132, 8, 0x2828, 0x013f, 0x0141, 0x00d8, 0x0152, 0x00ba, 0x00de, 0x0166, 0x014a, 78, 0x2831, 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, 0x3267, 0x3268, 0x3269, 0x326a, 0x326b, 0x326c, 0x326d, 0x326e, 0x326f, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, 0x3277, 0x3278, 0x3279, 0x327a, 0x327b, 0x24d0, 0x24d1, 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, 0x24e2, 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x00bd, 0x2153, 0x2154, 0x00bc, 0x00be, 0x215b, 0x215c, 0x215d, 0x215e, 94, 0x2921, 0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0140, 0x0142, 0x00f8, 0x0153, 0x00df, 0x00fe, 0x0167, 0x014b, 0x0149, 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, 0x3207, 0x3208, 0x3209, 0x320a, 0x320b, 0x320c, 0x320d, 0x320e, 0x320f, 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216, 0x3217, 0x3218, 0x3219, 0x321a, 0x321b, 0x249c, 0x249d, 0x249e, 0x249f, 0x24a0, 0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6, 0x24a7, 0x24a8, 0x24a9, 0x24aa, 0x24ab, 0x24ac, 0x24ad, 0x24ae, 0x24af, 0x24b0, 0x24b1, 0x24b2, 0x24b3, 0x24b4, 0x24b5, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f, 0x2480, 0x2481, 0x2482, 0x00b9, 0x00b2, 0x00b3, 0x2074, 0x207f, 0x2081, 0x2082, 0x2083, 0x2084, 83, 0x2a21, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 86, 0x2b21, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 33, 0x2c21, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 33, 0x2c51, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 94, 0x3021, 0xac00, 0xac01, 0xac04, 0xac07, 0xac08, 0xac09, 0xac0a, 0xac10, 0xac11, 0xac12, 0xac13, 0xac14, 0xac15, 0xac16, 0xac17, 0xac19, 0xac1a, 0xac1b, 0xac1c, 0xac1d, 0xac20, 0xac24, 0xac2c, 0xac2d, 0xac2f, 0xac30, 0xac31, 0xac38, 0xac39, 0xac3c, 0xac40, 0xac4b, 0xac4d, 0xac54, 0xac58, 0xac5c, 0xac70, 0xac71, 0xac74, 0xac77, 0xac78, 0xac7a, 0xac80, 0xac81, 0xac83, 0xac84, 0xac85, 0xac86, 0xac89, 0xac8a, 0xac8b, 0xac8c, 0xac90, 0xac94, 0xac9c, 0xac9d, 0xac9f, 0xaca0, 0xaca1, 0xaca8, 0xaca9, 0xacaa, 0xacac, 0xacaf, 0xacb0, 0xacb8, 0xacb9, 0xacbb, 0xacbc, 0xacbd, 0xacc1, 0xacc4, 0xacc8, 0xaccc, 0xacd5, 0xacd7, 0xace0, 0xace1, 0xace4, 0xace7, 0xace8, 0xacea, 0xacec, 0xacef, 0xacf0, 0xacf1, 0xacf3, 0xacf5, 0xacf6, 0xacfc, 0xacfd, 0xad00, 0xad04, 0xad06, 94, 0x3121, 0xad0c, 0xad0d, 0xad0f, 0xad11, 0xad18, 0xad1c, 0xad20, 0xad29, 0xad2c, 0xad2d, 0xad34, 0xad35, 0xad38, 0xad3c, 0xad44, 0xad45, 0xad47, 0xad49, 0xad50, 0xad54, 0xad58, 0xad61, 0xad63, 0xad6c, 0xad6d, 0xad70, 0xad73, 0xad74, 0xad75, 0xad76, 0xad7b, 0xad7c, 0xad7d, 0xad7f, 0xad81, 0xad82, 0xad88, 0xad89, 0xad8c, 0xad90, 0xad9c, 0xad9d, 0xada4, 0xadb7, 0xadc0, 0xadc1, 0xadc4, 0xadc8, 0xadd0, 0xadd1, 0xadd3, 0xaddc, 0xade0, 0xade4, 0xadf8, 0xadf9, 0xadfc, 0xadff, 0xae00, 0xae01, 0xae08, 0xae09, 0xae0b, 0xae0d, 0xae14, 0xae30, 0xae31, 0xae34, 0xae37, 0xae38, 0xae3a, 0xae40, 0xae41, 0xae43, 0xae45, 0xae46, 0xae4a, 0xae4c, 0xae4d, 0xae4e, 0xae50, 0xae54, 0xae56, 0xae5c, 0xae5d, 0xae5f, 0xae60, 0xae61, 0xae65, 0xae68, 0xae69, 0xae6c, 0xae70, 0xae78, 94, 0x3221, 0xae79, 0xae7b, 0xae7c, 0xae7d, 0xae84, 0xae85, 0xae8c, 0xaebc, 0xaebd, 0xaebe, 0xaec0, 0xaec4, 0xaecc, 0xaecd, 0xaecf, 0xaed0, 0xaed1, 0xaed8, 0xaed9, 0xaedc, 0xaee8, 0xaeeb, 0xaeed, 0xaef4, 0xaef8, 0xaefc, 0xaf07, 0xaf08, 0xaf0d, 0xaf10, 0xaf2c, 0xaf2d, 0xaf30, 0xaf32, 0xaf34, 0xaf3c, 0xaf3d, 0xaf3f, 0xaf41, 0xaf42, 0xaf43, 0xaf48, 0xaf49, 0xaf50, 0xaf5c, 0xaf5d, 0xaf64, 0xaf65, 0xaf79, 0xaf80, 0xaf84, 0xaf88, 0xaf90, 0xaf91, 0xaf95, 0xaf9c, 0xafb8, 0xafb9, 0xafbc, 0xafc0, 0xafc7, 0xafc8, 0xafc9, 0xafcb, 0xafcd, 0xafce, 0xafd4, 0xafdc, 0xafe8, 0xafe9, 0xaff0, 0xaff1, 0xaff4, 0xaff8, 0xb000, 0xb001, 0xb004, 0xb00c, 0xb010, 0xb014, 0xb01c, 0xb01d, 0xb028, 0xb044, 0xb045, 0xb048, 0xb04a, 0xb04c, 0xb04e, 0xb053, 0xb054, 0xb055, 0xb057, 0xb059, 94, 0x3321, 0xb05d, 0xb07c, 0xb07d, 0xb080, 0xb084, 0xb08c, 0xb08d, 0xb08f, 0xb091, 0xb098, 0xb099, 0xb09a, 0xb09c, 0xb09f, 0xb0a0, 0xb0a1, 0xb0a2, 0xb0a8, 0xb0a9, 0xb0ab, 0xb0ac, 0xb0ad, 0xb0ae, 0xb0af, 0xb0b1, 0xb0b3, 0xb0b4, 0xb0b5, 0xb0b8, 0xb0bc, 0xb0c4, 0xb0c5, 0xb0c7, 0xb0c8, 0xb0c9, 0xb0d0, 0xb0d1, 0xb0d4, 0xb0d8, 0xb0e0, 0xb0e5, 0xb108, 0xb109, 0xb10b, 0xb10c, 0xb110, 0xb112, 0xb113, 0xb118, 0xb119, 0xb11b, 0xb11c, 0xb11d, 0xb123, 0xb124, 0xb125, 0xb128, 0xb12c, 0xb134, 0xb135, 0xb137, 0xb138, 0xb139, 0xb140, 0xb141, 0xb144, 0xb148, 0xb150, 0xb151, 0xb154, 0xb155, 0xb158, 0xb15c, 0xb160, 0xb178, 0xb179, 0xb17c, 0xb180, 0xb182, 0xb188, 0xb189, 0xb18b, 0xb18d, 0xb192, 0xb193, 0xb194, 0xb198, 0xb19c, 0xb1a8, 0xb1cc, 0xb1d0, 0xb1d4, 0xb1dc, 0xb1dd, 94, 0x3421, 0xb1df, 0xb1e8, 0xb1e9, 0xb1ec, 0xb1f0, 0xb1f9, 0xb1fb, 0xb1fd, 0xb204, 0xb205, 0xb208, 0xb20b, 0xb20c, 0xb214, 0xb215, 0xb217, 0xb219, 0xb220, 0xb234, 0xb23c, 0xb258, 0xb25c, 0xb260, 0xb268, 0xb269, 0xb274, 0xb275, 0xb27c, 0xb284, 0xb285, 0xb289, 0xb290, 0xb291, 0xb294, 0xb298, 0xb299, 0xb29a, 0xb2a0, 0xb2a1, 0xb2a3, 0xb2a5, 0xb2a6, 0xb2aa, 0xb2ac, 0xb2b0, 0xb2b4, 0xb2c8, 0xb2c9, 0xb2cc, 0xb2d0, 0xb2d2, 0xb2d8, 0xb2d9, 0xb2db, 0xb2dd, 0xb2e2, 0xb2e4, 0xb2e5, 0xb2e6, 0xb2e8, 0xb2eb, 0xb2ec, 0xb2ed, 0xb2ee, 0xb2ef, 0xb2f3, 0xb2f4, 0xb2f5, 0xb2f7, 0xb2f8, 0xb2f9, 0xb2fa, 0xb2fb, 0xb2ff, 0xb300, 0xb301, 0xb304, 0xb308, 0xb310, 0xb311, 0xb313, 0xb314, 0xb315, 0xb31c, 0xb354, 0xb355, 0xb356, 0xb358, 0xb35b, 0xb35c, 0xb35e, 0xb35f, 0xb364, 0xb365, 94, 0x3521, 0xb367, 0xb369, 0xb36b, 0xb36e, 0xb370, 0xb371, 0xb374, 0xb378, 0xb380, 0xb381, 0xb383, 0xb384, 0xb385, 0xb38c, 0xb390, 0xb394, 0xb3a0, 0xb3a1, 0xb3a8, 0xb3ac, 0xb3c4, 0xb3c5, 0xb3c8, 0xb3cb, 0xb3cc, 0xb3ce, 0xb3d0, 0xb3d4, 0xb3d5, 0xb3d7, 0xb3d9, 0xb3db, 0xb3dd, 0xb3e0, 0xb3e4, 0xb3e8, 0xb3fc, 0xb410, 0xb418, 0xb41c, 0xb420, 0xb428, 0xb429, 0xb42b, 0xb434, 0xb450, 0xb451, 0xb454, 0xb458, 0xb460, 0xb461, 0xb463, 0xb465, 0xb46c, 0xb480, 0xb488, 0xb49d, 0xb4a4, 0xb4a8, 0xb4ac, 0xb4b5, 0xb4b7, 0xb4b9, 0xb4c0, 0xb4c4, 0xb4c8, 0xb4d0, 0xb4d5, 0xb4dc, 0xb4dd, 0xb4e0, 0xb4e3, 0xb4e4, 0xb4e6, 0xb4ec, 0xb4ed, 0xb4ef, 0xb4f1, 0xb4f8, 0xb514, 0xb515, 0xb518, 0xb51b, 0xb51c, 0xb524, 0xb525, 0xb527, 0xb528, 0xb529, 0xb52a, 0xb530, 0xb531, 0xb534, 0xb538, 94, 0x3621, 0xb540, 0xb541, 0xb543, 0xb544, 0xb545, 0xb54b, 0xb54c, 0xb54d, 0xb550, 0xb554, 0xb55c, 0xb55d, 0xb55f, 0xb560, 0xb561, 0xb5a0, 0xb5a1, 0xb5a4, 0xb5a8, 0xb5aa, 0xb5ab, 0xb5b0, 0xb5b1, 0xb5b3, 0xb5b4, 0xb5b5, 0xb5bb, 0xb5bc, 0xb5bd, 0xb5c0, 0xb5c4, 0xb5cc, 0xb5cd, 0xb5cf, 0xb5d0, 0xb5d1, 0xb5d8, 0xb5ec, 0xb610, 0xb611, 0xb614, 0xb618, 0xb625, 0xb62c, 0xb634, 0xb648, 0xb664, 0xb668, 0xb69c, 0xb69d, 0xb6a0, 0xb6a4, 0xb6ab, 0xb6ac, 0xb6b1, 0xb6d4, 0xb6f0, 0xb6f4, 0xb6f8, 0xb700, 0xb701, 0xb705, 0xb728, 0xb729, 0xb72c, 0xb72f, 0xb730, 0xb738, 0xb739, 0xb73b, 0xb744, 0xb748, 0xb74c, 0xb754, 0xb755, 0xb760, 0xb764, 0xb768, 0xb770, 0xb771, 0xb773, 0xb775, 0xb77c, 0xb77d, 0xb780, 0xb784, 0xb78c, 0xb78d, 0xb78f, 0xb790, 0xb791, 0xb792, 0xb796, 0xb797, 94, 0x3721, 0xb798, 0xb799, 0xb79c, 0xb7a0, 0xb7a8, 0xb7a9, 0xb7ab, 0xb7ac, 0xb7ad, 0xb7b4, 0xb7b5, 0xb7b8, 0xb7c7, 0xb7c9, 0xb7ec, 0xb7ed, 0xb7f0, 0xb7f4, 0xb7fc, 0xb7fd, 0xb7ff, 0xb800, 0xb801, 0xb807, 0xb808, 0xb809, 0xb80c, 0xb810, 0xb818, 0xb819, 0xb81b, 0xb81d, 0xb824, 0xb825, 0xb828, 0xb82c, 0xb834, 0xb835, 0xb837, 0xb838, 0xb839, 0xb840, 0xb844, 0xb851, 0xb853, 0xb85c, 0xb85d, 0xb860, 0xb864, 0xb86c, 0xb86d, 0xb86f, 0xb871, 0xb878, 0xb87c, 0xb88d, 0xb8a8, 0xb8b0, 0xb8b4, 0xb8b8, 0xb8c0, 0xb8c1, 0xb8c3, 0xb8c5, 0xb8cc, 0xb8d0, 0xb8d4, 0xb8dd, 0xb8df, 0xb8e1, 0xb8e8, 0xb8e9, 0xb8ec, 0xb8f0, 0xb8f8, 0xb8f9, 0xb8fb, 0xb8fd, 0xb904, 0xb918, 0xb920, 0xb93c, 0xb93d, 0xb940, 0xb944, 0xb94c, 0xb94f, 0xb951, 0xb958, 0xb959, 0xb95c, 0xb960, 0xb968, 0xb969, 94, 0x3821, 0xb96b, 0xb96d, 0xb974, 0xb975, 0xb978, 0xb97c, 0xb984, 0xb985, 0xb987, 0xb989, 0xb98a, 0xb98d, 0xb98e, 0xb9ac, 0xb9ad, 0xb9b0, 0xb9b4, 0xb9bc, 0xb9bd, 0xb9bf, 0xb9c1, 0xb9c8, 0xb9c9, 0xb9cc, 0xb9ce, 0xb9cf, 0xb9d0, 0xb9d1, 0xb9d2, 0xb9d8, 0xb9d9, 0xb9db, 0xb9dd, 0xb9de, 0xb9e1, 0xb9e3, 0xb9e4, 0xb9e5, 0xb9e8, 0xb9ec, 0xb9f4, 0xb9f5, 0xb9f7, 0xb9f8, 0xb9f9, 0xb9fa, 0xba00, 0xba01, 0xba08, 0xba15, 0xba38, 0xba39, 0xba3c, 0xba40, 0xba42, 0xba48, 0xba49, 0xba4b, 0xba4d, 0xba4e, 0xba53, 0xba54, 0xba55, 0xba58, 0xba5c, 0xba64, 0xba65, 0xba67, 0xba68, 0xba69, 0xba70, 0xba71, 0xba74, 0xba78, 0xba83, 0xba84, 0xba85, 0xba87, 0xba8c, 0xbaa8, 0xbaa9, 0xbaab, 0xbaac, 0xbab0, 0xbab2, 0xbab8, 0xbab9, 0xbabb, 0xbabd, 0xbac4, 0xbac8, 0xbad8, 0xbad9, 0xbafc, 94, 0x3921, 0xbb00, 0xbb04, 0xbb0d, 0xbb0f, 0xbb11, 0xbb18, 0xbb1c, 0xbb20, 0xbb29, 0xbb2b, 0xbb34, 0xbb35, 0xbb36, 0xbb38, 0xbb3b, 0xbb3c, 0xbb3d, 0xbb3e, 0xbb44, 0xbb45, 0xbb47, 0xbb49, 0xbb4d, 0xbb4f, 0xbb50, 0xbb54, 0xbb58, 0xbb61, 0xbb63, 0xbb6c, 0xbb88, 0xbb8c, 0xbb90, 0xbba4, 0xbba8, 0xbbac, 0xbbb4, 0xbbb7, 0xbbc0, 0xbbc4, 0xbbc8, 0xbbd0, 0xbbd3, 0xbbf8, 0xbbf9, 0xbbfc, 0xbbff, 0xbc00, 0xbc02, 0xbc08, 0xbc09, 0xbc0b, 0xbc0c, 0xbc0d, 0xbc0f, 0xbc11, 0xbc14, 0xbc15, 0xbc16, 0xbc17, 0xbc18, 0xbc1b, 0xbc1c, 0xbc1d, 0xbc1e, 0xbc1f, 0xbc24, 0xbc25, 0xbc27, 0xbc29, 0xbc2d, 0xbc30, 0xbc31, 0xbc34, 0xbc38, 0xbc40, 0xbc41, 0xbc43, 0xbc44, 0xbc45, 0xbc49, 0xbc4c, 0xbc4d, 0xbc50, 0xbc5d, 0xbc84, 0xbc85, 0xbc88, 0xbc8b, 0xbc8c, 0xbc8e, 0xbc94, 0xbc95, 0xbc97, 94, 0x3a21, 0xbc99, 0xbc9a, 0xbca0, 0xbca1, 0xbca4, 0xbca7, 0xbca8, 0xbcb0, 0xbcb1, 0xbcb3, 0xbcb4, 0xbcb5, 0xbcbc, 0xbcbd, 0xbcc0, 0xbcc4, 0xbccd, 0xbccf, 0xbcd0, 0xbcd1, 0xbcd5, 0xbcd8, 0xbcdc, 0xbcf4, 0xbcf5, 0xbcf6, 0xbcf8, 0xbcfc, 0xbd04, 0xbd05, 0xbd07, 0xbd09, 0xbd10, 0xbd14, 0xbd24, 0xbd2c, 0xbd40, 0xbd48, 0xbd49, 0xbd4c, 0xbd50, 0xbd58, 0xbd59, 0xbd64, 0xbd68, 0xbd80, 0xbd81, 0xbd84, 0xbd87, 0xbd88, 0xbd89, 0xbd8a, 0xbd90, 0xbd91, 0xbd93, 0xbd95, 0xbd99, 0xbd9a, 0xbd9c, 0xbda4, 0xbdb0, 0xbdb8, 0xbdd4, 0xbdd5, 0xbdd8, 0xbddc, 0xbde9, 0xbdf0, 0xbdf4, 0xbdf8, 0xbe00, 0xbe03, 0xbe05, 0xbe0c, 0xbe0d, 0xbe10, 0xbe14, 0xbe1c, 0xbe1d, 0xbe1f, 0xbe44, 0xbe45, 0xbe48, 0xbe4c, 0xbe4e, 0xbe54, 0xbe55, 0xbe57, 0xbe59, 0xbe5a, 0xbe5b, 0xbe60, 0xbe61, 0xbe64, 94, 0x3b21, 0xbe68, 0xbe6a, 0xbe70, 0xbe71, 0xbe73, 0xbe74, 0xbe75, 0xbe7b, 0xbe7c, 0xbe7d, 0xbe80, 0xbe84, 0xbe8c, 0xbe8d, 0xbe8f, 0xbe90, 0xbe91, 0xbe98, 0xbe99, 0xbea8, 0xbed0, 0xbed1, 0xbed4, 0xbed7, 0xbed8, 0xbee0, 0xbee3, 0xbee4, 0xbee5, 0xbeec, 0xbf01, 0xbf08, 0xbf09, 0xbf18, 0xbf19, 0xbf1b, 0xbf1c, 0xbf1d, 0xbf40, 0xbf41, 0xbf44, 0xbf48, 0xbf50, 0xbf51, 0xbf55, 0xbf94, 0xbfb0, 0xbfc5, 0xbfcc, 0xbfcd, 0xbfd0, 0xbfd4, 0xbfdc, 0xbfdf, 0xbfe1, 0xc03c, 0xc051, 0xc058, 0xc05c, 0xc060, 0xc068, 0xc069, 0xc090, 0xc091, 0xc094, 0xc098, 0xc0a0, 0xc0a1, 0xc0a3, 0xc0a5, 0xc0ac, 0xc0ad, 0xc0af, 0xc0b0, 0xc0b3, 0xc0b4, 0xc0b5, 0xc0b6, 0xc0bc, 0xc0bd, 0xc0bf, 0xc0c0, 0xc0c1, 0xc0c5, 0xc0c8, 0xc0c9, 0xc0cc, 0xc0d0, 0xc0d8, 0xc0d9, 0xc0db, 0xc0dc, 0xc0dd, 0xc0e4, 94, 0x3c21, 0xc0e5, 0xc0e8, 0xc0ec, 0xc0f4, 0xc0f5, 0xc0f7, 0xc0f9, 0xc100, 0xc104, 0xc108, 0xc110, 0xc115, 0xc11c, 0xc11d, 0xc11e, 0xc11f, 0xc120, 0xc123, 0xc124, 0xc126, 0xc127, 0xc12c, 0xc12d, 0xc12f, 0xc130, 0xc131, 0xc136, 0xc138, 0xc139, 0xc13c, 0xc140, 0xc148, 0xc149, 0xc14b, 0xc14c, 0xc14d, 0xc154, 0xc155, 0xc158, 0xc15c, 0xc164, 0xc165, 0xc167, 0xc168, 0xc169, 0xc170, 0xc174, 0xc178, 0xc185, 0xc18c, 0xc18d, 0xc18e, 0xc190, 0xc194, 0xc196, 0xc19c, 0xc19d, 0xc19f, 0xc1a1, 0xc1a5, 0xc1a8, 0xc1a9, 0xc1ac, 0xc1b0, 0xc1bd, 0xc1c4, 0xc1c8, 0xc1cc, 0xc1d4, 0xc1d7, 0xc1d8, 0xc1e0, 0xc1e4, 0xc1e8, 0xc1f0, 0xc1f1, 0xc1f3, 0xc1fc, 0xc1fd, 0xc200, 0xc204, 0xc20c, 0xc20d, 0xc20f, 0xc211, 0xc218, 0xc219, 0xc21c, 0xc21f, 0xc220, 0xc228, 0xc229, 0xc22b, 0xc22d, 94, 0x3d21, 0xc22f, 0xc231, 0xc232, 0xc234, 0xc248, 0xc250, 0xc251, 0xc254, 0xc258, 0xc260, 0xc265, 0xc26c, 0xc26d, 0xc270, 0xc274, 0xc27c, 0xc27d, 0xc27f, 0xc281, 0xc288, 0xc289, 0xc290, 0xc298, 0xc29b, 0xc29d, 0xc2a4, 0xc2a5, 0xc2a8, 0xc2ac, 0xc2ad, 0xc2b4, 0xc2b5, 0xc2b7, 0xc2b9, 0xc2dc, 0xc2dd, 0xc2e0, 0xc2e3, 0xc2e4, 0xc2eb, 0xc2ec, 0xc2ed, 0xc2ef, 0xc2f1, 0xc2f6, 0xc2f8, 0xc2f9, 0xc2fb, 0xc2fc, 0xc300, 0xc308, 0xc309, 0xc30c, 0xc30d, 0xc313, 0xc314, 0xc315, 0xc318, 0xc31c, 0xc324, 0xc325, 0xc328, 0xc329, 0xc345, 0xc368, 0xc369, 0xc36c, 0xc370, 0xc372, 0xc378, 0xc379, 0xc37c, 0xc37d, 0xc384, 0xc388, 0xc38c, 0xc3c0, 0xc3d8, 0xc3d9, 0xc3dc, 0xc3df, 0xc3e0, 0xc3e2, 0xc3e8, 0xc3e9, 0xc3ed, 0xc3f4, 0xc3f5, 0xc3f8, 0xc408, 0xc410, 0xc424, 0xc42c, 0xc430, 94, 0x3e21, 0xc434, 0xc43c, 0xc43d, 0xc448, 0xc464, 0xc465, 0xc468, 0xc46c, 0xc474, 0xc475, 0xc479, 0xc480, 0xc494, 0xc49c, 0xc4b8, 0xc4bc, 0xc4e9, 0xc4f0, 0xc4f1, 0xc4f4, 0xc4f8, 0xc4fa, 0xc4ff, 0xc500, 0xc501, 0xc50c, 0xc510, 0xc514, 0xc51c, 0xc528, 0xc529, 0xc52c, 0xc530, 0xc538, 0xc539, 0xc53b, 0xc53d, 0xc544, 0xc545, 0xc548, 0xc549, 0xc54a, 0xc54c, 0xc54d, 0xc54e, 0xc553, 0xc554, 0xc555, 0xc557, 0xc558, 0xc559, 0xc55d, 0xc55e, 0xc560, 0xc561, 0xc564, 0xc568, 0xc570, 0xc571, 0xc573, 0xc574, 0xc575, 0xc57c, 0xc57d, 0xc580, 0xc584, 0xc587, 0xc58c, 0xc58d, 0xc58f, 0xc591, 0xc595, 0xc597, 0xc598, 0xc59c, 0xc5a0, 0xc5a9, 0xc5b4, 0xc5b5, 0xc5b8, 0xc5b9, 0xc5bb, 0xc5bc, 0xc5bd, 0xc5be, 0xc5c4, 0xc5c5, 0xc5c6, 0xc5c7, 0xc5c8, 0xc5c9, 0xc5ca, 0xc5cc, 0xc5ce, 94, 0x3f21, 0xc5d0, 0xc5d1, 0xc5d4, 0xc5d8, 0xc5e0, 0xc5e1, 0xc5e3, 0xc5e5, 0xc5ec, 0xc5ed, 0xc5ee, 0xc5f0, 0xc5f4, 0xc5f6, 0xc5f7, 0xc5fc, 0xc5fd, 0xc5fe, 0xc5ff, 0xc600, 0xc601, 0xc605, 0xc606, 0xc607, 0xc608, 0xc60c, 0xc610, 0xc618, 0xc619, 0xc61b, 0xc61c, 0xc624, 0xc625, 0xc628, 0xc62c, 0xc62d, 0xc62e, 0xc630, 0xc633, 0xc634, 0xc635, 0xc637, 0xc639, 0xc63b, 0xc640, 0xc641, 0xc644, 0xc648, 0xc650, 0xc651, 0xc653, 0xc654, 0xc655, 0xc65c, 0xc65d, 0xc660, 0xc66c, 0xc66f, 0xc671, 0xc678, 0xc679, 0xc67c, 0xc680, 0xc688, 0xc689, 0xc68b, 0xc68d, 0xc694, 0xc695, 0xc698, 0xc69c, 0xc6a4, 0xc6a5, 0xc6a7, 0xc6a9, 0xc6b0, 0xc6b1, 0xc6b4, 0xc6b8, 0xc6b9, 0xc6ba, 0xc6c0, 0xc6c1, 0xc6c3, 0xc6c5, 0xc6cc, 0xc6cd, 0xc6d0, 0xc6d4, 0xc6dc, 0xc6dd, 0xc6e0, 0xc6e1, 0xc6e8, 94, 0x4021, 0xc6e9, 0xc6ec, 0xc6f0, 0xc6f8, 0xc6f9, 0xc6fd, 0xc704, 0xc705, 0xc708, 0xc70c, 0xc714, 0xc715, 0xc717, 0xc719, 0xc720, 0xc721, 0xc724, 0xc728, 0xc730, 0xc731, 0xc733, 0xc735, 0xc737, 0xc73c, 0xc73d, 0xc740, 0xc744, 0xc74a, 0xc74c, 0xc74d, 0xc74f, 0xc751, 0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc75c, 0xc760, 0xc768, 0xc76b, 0xc774, 0xc775, 0xc778, 0xc77c, 0xc77d, 0xc77e, 0xc783, 0xc784, 0xc785, 0xc787, 0xc788, 0xc789, 0xc78a, 0xc78e, 0xc790, 0xc791, 0xc794, 0xc796, 0xc797, 0xc798, 0xc79a, 0xc7a0, 0xc7a1, 0xc7a3, 0xc7a4, 0xc7a5, 0xc7a6, 0xc7ac, 0xc7ad, 0xc7b0, 0xc7b4, 0xc7bc, 0xc7bd, 0xc7bf, 0xc7c0, 0xc7c1, 0xc7c8, 0xc7c9, 0xc7cc, 0xc7ce, 0xc7d0, 0xc7d8, 0xc7dd, 0xc7e4, 0xc7e8, 0xc7ec, 0xc800, 0xc801, 0xc804, 0xc808, 0xc80a, 94, 0x4121, 0xc810, 0xc811, 0xc813, 0xc815, 0xc816, 0xc81c, 0xc81d, 0xc820, 0xc824, 0xc82c, 0xc82d, 0xc82f, 0xc831, 0xc838, 0xc83c, 0xc840, 0xc848, 0xc849, 0xc84c, 0xc84d, 0xc854, 0xc870, 0xc871, 0xc874, 0xc878, 0xc87a, 0xc880, 0xc881, 0xc883, 0xc885, 0xc886, 0xc887, 0xc88b, 0xc88c, 0xc88d, 0xc894, 0xc89d, 0xc89f, 0xc8a1, 0xc8a8, 0xc8bc, 0xc8bd, 0xc8c4, 0xc8c8, 0xc8cc, 0xc8d4, 0xc8d5, 0xc8d7, 0xc8d9, 0xc8e0, 0xc8e1, 0xc8e4, 0xc8f5, 0xc8fc, 0xc8fd, 0xc900, 0xc904, 0xc905, 0xc906, 0xc90c, 0xc90d, 0xc90f, 0xc911, 0xc918, 0xc92c, 0xc934, 0xc950, 0xc951, 0xc954, 0xc958, 0xc960, 0xc961, 0xc963, 0xc96c, 0xc970, 0xc974, 0xc97c, 0xc988, 0xc989, 0xc98c, 0xc990, 0xc998, 0xc999, 0xc99b, 0xc99d, 0xc9c0, 0xc9c1, 0xc9c4, 0xc9c7, 0xc9c8, 0xc9ca, 0xc9d0, 0xc9d1, 0xc9d3, 94, 0x4221, 0xc9d5, 0xc9d6, 0xc9d9, 0xc9da, 0xc9dc, 0xc9dd, 0xc9e0, 0xc9e2, 0xc9e4, 0xc9e7, 0xc9ec, 0xc9ed, 0xc9ef, 0xc9f0, 0xc9f1, 0xc9f8, 0xc9f9, 0xc9fc, 0xca00, 0xca08, 0xca09, 0xca0b, 0xca0c, 0xca0d, 0xca14, 0xca18, 0xca29, 0xca4c, 0xca4d, 0xca50, 0xca54, 0xca5c, 0xca5d, 0xca5f, 0xca60, 0xca61, 0xca68, 0xca7d, 0xca84, 0xca98, 0xcabc, 0xcabd, 0xcac0, 0xcac4, 0xcacc, 0xcacd, 0xcacf, 0xcad1, 0xcad3, 0xcad8, 0xcad9, 0xcae0, 0xcaec, 0xcaf4, 0xcb08, 0xcb10, 0xcb14, 0xcb18, 0xcb20, 0xcb21, 0xcb41, 0xcb48, 0xcb49, 0xcb4c, 0xcb50, 0xcb58, 0xcb59, 0xcb5d, 0xcb64, 0xcb78, 0xcb79, 0xcb9c, 0xcbb8, 0xcbd4, 0xcbe4, 0xcbe7, 0xcbe9, 0xcc0c, 0xcc0d, 0xcc10, 0xcc14, 0xcc1c, 0xcc1d, 0xcc21, 0xcc22, 0xcc27, 0xcc28, 0xcc29, 0xcc2c, 0xcc2e, 0xcc30, 0xcc38, 0xcc39, 0xcc3b, 94, 0x4321, 0xcc3c, 0xcc3d, 0xcc3e, 0xcc44, 0xcc45, 0xcc48, 0xcc4c, 0xcc54, 0xcc55, 0xcc57, 0xcc58, 0xcc59, 0xcc60, 0xcc64, 0xcc66, 0xcc68, 0xcc70, 0xcc75, 0xcc98, 0xcc99, 0xcc9c, 0xcca0, 0xcca8, 0xcca9, 0xccab, 0xccac, 0xccad, 0xccb4, 0xccb5, 0xccb8, 0xccbc, 0xccc4, 0xccc5, 0xccc7, 0xccc9, 0xccd0, 0xccd4, 0xcce4, 0xccec, 0xccf0, 0xcd01, 0xcd08, 0xcd09, 0xcd0c, 0xcd10, 0xcd18, 0xcd19, 0xcd1b, 0xcd1d, 0xcd24, 0xcd28, 0xcd2c, 0xcd39, 0xcd5c, 0xcd60, 0xcd64, 0xcd6c, 0xcd6d, 0xcd6f, 0xcd71, 0xcd78, 0xcd88, 0xcd94, 0xcd95, 0xcd98, 0xcd9c, 0xcda4, 0xcda5, 0xcda7, 0xcda9, 0xcdb0, 0xcdc4, 0xcdcc, 0xcdd0, 0xcde8, 0xcdec, 0xcdf0, 0xcdf8, 0xcdf9, 0xcdfb, 0xcdfd, 0xce04, 0xce08, 0xce0c, 0xce14, 0xce19, 0xce20, 0xce21, 0xce24, 0xce28, 0xce30, 0xce31, 0xce33, 0xce35, 94, 0x4421, 0xce58, 0xce59, 0xce5c, 0xce5f, 0xce60, 0xce61, 0xce68, 0xce69, 0xce6b, 0xce6d, 0xce74, 0xce75, 0xce78, 0xce7c, 0xce84, 0xce85, 0xce87, 0xce89, 0xce90, 0xce91, 0xce94, 0xce98, 0xcea0, 0xcea1, 0xcea3, 0xcea4, 0xcea5, 0xceac, 0xcead, 0xcec1, 0xcee4, 0xcee5, 0xcee8, 0xceeb, 0xceec, 0xcef4, 0xcef5, 0xcef7, 0xcef8, 0xcef9, 0xcf00, 0xcf01, 0xcf04, 0xcf08, 0xcf10, 0xcf11, 0xcf13, 0xcf15, 0xcf1c, 0xcf20, 0xcf24, 0xcf2c, 0xcf2d, 0xcf2f, 0xcf30, 0xcf31, 0xcf38, 0xcf54, 0xcf55, 0xcf58, 0xcf5c, 0xcf64, 0xcf65, 0xcf67, 0xcf69, 0xcf70, 0xcf71, 0xcf74, 0xcf78, 0xcf80, 0xcf85, 0xcf8c, 0xcfa1, 0xcfa8, 0xcfb0, 0xcfc4, 0xcfe0, 0xcfe1, 0xcfe4, 0xcfe8, 0xcff0, 0xcff1, 0xcff3, 0xcff5, 0xcffc, 0xd000, 0xd004, 0xd011, 0xd018, 0xd02d, 0xd034, 0xd035, 0xd038, 0xd03c, 94, 0x4521, 0xd044, 0xd045, 0xd047, 0xd049, 0xd050, 0xd054, 0xd058, 0xd060, 0xd06c, 0xd06d, 0xd070, 0xd074, 0xd07c, 0xd07d, 0xd081, 0xd0a4, 0xd0a5, 0xd0a8, 0xd0ac, 0xd0b4, 0xd0b5, 0xd0b7, 0xd0b9, 0xd0c0, 0xd0c1, 0xd0c4, 0xd0c8, 0xd0c9, 0xd0d0, 0xd0d1, 0xd0d3, 0xd0d4, 0xd0d5, 0xd0dc, 0xd0dd, 0xd0e0, 0xd0e4, 0xd0ec, 0xd0ed, 0xd0ef, 0xd0f0, 0xd0f1, 0xd0f8, 0xd10d, 0xd130, 0xd131, 0xd134, 0xd138, 0xd13a, 0xd140, 0xd141, 0xd143, 0xd144, 0xd145, 0xd14c, 0xd14d, 0xd150, 0xd154, 0xd15c, 0xd15d, 0xd15f, 0xd161, 0xd168, 0xd16c, 0xd17c, 0xd184, 0xd188, 0xd1a0, 0xd1a1, 0xd1a4, 0xd1a8, 0xd1b0, 0xd1b1, 0xd1b3, 0xd1b5, 0xd1ba, 0xd1bc, 0xd1c0, 0xd1d8, 0xd1f4, 0xd1f8, 0xd207, 0xd209, 0xd210, 0xd22c, 0xd22d, 0xd230, 0xd234, 0xd23c, 0xd23d, 0xd23f, 0xd241, 0xd248, 0xd25c, 94, 0x4621, 0xd264, 0xd280, 0xd281, 0xd284, 0xd288, 0xd290, 0xd291, 0xd295, 0xd29c, 0xd2a0, 0xd2a4, 0xd2ac, 0xd2b1, 0xd2b8, 0xd2b9, 0xd2bc, 0xd2bf, 0xd2c0, 0xd2c2, 0xd2c8, 0xd2c9, 0xd2cb, 0xd2d4, 0xd2d8, 0xd2dc, 0xd2e4, 0xd2e5, 0xd2f0, 0xd2f1, 0xd2f4, 0xd2f8, 0xd300, 0xd301, 0xd303, 0xd305, 0xd30c, 0xd30d, 0xd30e, 0xd310, 0xd314, 0xd316, 0xd31c, 0xd31d, 0xd31f, 0xd320, 0xd321, 0xd325, 0xd328, 0xd329, 0xd32c, 0xd330, 0xd338, 0xd339, 0xd33b, 0xd33c, 0xd33d, 0xd344, 0xd345, 0xd37c, 0xd37d, 0xd380, 0xd384, 0xd38c, 0xd38d, 0xd38f, 0xd390, 0xd391, 0xd398, 0xd399, 0xd39c, 0xd3a0, 0xd3a8, 0xd3a9, 0xd3ab, 0xd3ad, 0xd3b4, 0xd3b8, 0xd3bc, 0xd3c4, 0xd3c5, 0xd3c8, 0xd3c9, 0xd3d0, 0xd3d8, 0xd3e1, 0xd3e3, 0xd3ec, 0xd3ed, 0xd3f0, 0xd3f4, 0xd3fc, 0xd3fd, 0xd3ff, 0xd401, 94, 0x4721, 0xd408, 0xd41d, 0xd440, 0xd444, 0xd45c, 0xd460, 0xd464, 0xd46d, 0xd46f, 0xd478, 0xd479, 0xd47c, 0xd47f, 0xd480, 0xd482, 0xd488, 0xd489, 0xd48b, 0xd48d, 0xd494, 0xd4a9, 0xd4cc, 0xd4d0, 0xd4d4, 0xd4dc, 0xd4df, 0xd4e8, 0xd4ec, 0xd4f0, 0xd4f8, 0xd4fb, 0xd4fd, 0xd504, 0xd508, 0xd50c, 0xd514, 0xd515, 0xd517, 0xd53c, 0xd53d, 0xd540, 0xd544, 0xd54c, 0xd54d, 0xd54f, 0xd551, 0xd558, 0xd559, 0xd55c, 0xd560, 0xd565, 0xd568, 0xd569, 0xd56b, 0xd56d, 0xd574, 0xd575, 0xd578, 0xd57c, 0xd584, 0xd585, 0xd587, 0xd588, 0xd589, 0xd590, 0xd5a5, 0xd5c8, 0xd5c9, 0xd5cc, 0xd5d0, 0xd5d2, 0xd5d8, 0xd5d9, 0xd5db, 0xd5dd, 0xd5e4, 0xd5e5, 0xd5e8, 0xd5ec, 0xd5f4, 0xd5f5, 0xd5f7, 0xd5f9, 0xd600, 0xd601, 0xd604, 0xd608, 0xd610, 0xd611, 0xd613, 0xd614, 0xd615, 0xd61c, 0xd620, 94, 0x4821, 0xd624, 0xd62d, 0xd638, 0xd639, 0xd63c, 0xd640, 0xd645, 0xd648, 0xd649, 0xd64b, 0xd64d, 0xd651, 0xd654, 0xd655, 0xd658, 0xd65c, 0xd667, 0xd669, 0xd670, 0xd671, 0xd674, 0xd683, 0xd685, 0xd68c, 0xd68d, 0xd690, 0xd694, 0xd69d, 0xd69f, 0xd6a1, 0xd6a8, 0xd6ac, 0xd6b0, 0xd6b9, 0xd6bb, 0xd6c4, 0xd6c5, 0xd6c8, 0xd6cc, 0xd6d1, 0xd6d4, 0xd6d7, 0xd6d9, 0xd6e0, 0xd6e4, 0xd6e8, 0xd6f0, 0xd6f5, 0xd6fc, 0xd6fd, 0xd700, 0xd704, 0xd711, 0xd718, 0xd719, 0xd71c, 0xd720, 0xd728, 0xd729, 0xd72b, 0xd72d, 0xd734, 0xd735, 0xd738, 0xd73c, 0xd744, 0xd747, 0xd749, 0xd750, 0xd751, 0xd754, 0xd756, 0xd757, 0xd758, 0xd759, 0xd760, 0xd761, 0xd763, 0xd765, 0xd769, 0xd76c, 0xd770, 0xd774, 0xd77c, 0xd77d, 0xd781, 0xd788, 0xd789, 0xd78c, 0xd790, 0xd798, 0xd799, 0xd79b, 0xd79d, 94, 0x4a21, 0x4f3d, 0x4f73, 0x5047, 0x50f9, 0x52a0, 0x53ef, 0x5475, 0x54e5, 0x5609, 0x5ac1, 0x5bb6, 0x6687, 0x67b6, 0x67b7, 0x67ef, 0x6b4c, 0x73c2, 0x75c2, 0x7a3c, 0x82db, 0x8304, 0x8857, 0x8888, 0x8a36, 0x8cc8, 0x8dcf, 0x8efb, 0x8fe6, 0x99d5, 0x523b, 0x5374, 0x5404, 0x606a, 0x6164, 0x6bbc, 0x73cf, 0x811a, 0x89ba, 0x89d2, 0x95a3, 0x4f83, 0x520a, 0x58be, 0x5978, 0x59e6, 0x5e72, 0x5e79, 0x61c7, 0x63c0, 0x6746, 0x67ec, 0x687f, 0x6f97, 0x764e, 0x770b, 0x78f5, 0x7a08, 0x7aff, 0x7c21, 0x809d, 0x826e, 0x8271, 0x8aeb, 0x9593, 0x4e6b, 0x559d, 0x66f7, 0x6e34, 0x78a3, 0x7aed, 0x845b, 0x8910, 0x874e, 0x97a8, 0x52d8, 0x574e, 0x582a, 0x5d4c, 0x611f, 0x61be, 0x6221, 0x6562, 0x67d1, 0x6a44, 0x6e1b, 0x7518, 0x75b3, 0x76e3, 0x77b0, 0x7d3a, 0x90af, 0x9451, 0x9452, 0x9f95, 94, 0x4b21, 0x5323, 0x5cac, 0x7532, 0x80db, 0x9240, 0x9598, 0x525b, 0x5808, 0x59dc, 0x5ca1, 0x5d17, 0x5eb7, 0x5f3a, 0x5f4a, 0x6177, 0x6c5f, 0x757a, 0x7586, 0x7ce0, 0x7d73, 0x7db1, 0x7f8c, 0x8154, 0x8221, 0x8591, 0x8941, 0x8b1b, 0x92fc, 0x964d, 0x9c47, 0x4ecb, 0x4ef7, 0x500b, 0x51f1, 0x584f, 0x6137, 0x613e, 0x6168, 0x6539, 0x69ea, 0x6f11, 0x75a5, 0x7686, 0x76d6, 0x7b87, 0x82a5, 0x84cb, 0xf900, 0x93a7, 0x958b, 0x5580, 0x5ba2, 0x5751, 0xf901, 0x7cb3, 0x7fb9, 0x91b5, 0x5028, 0x53bb, 0x5c45, 0x5de8, 0x62d2, 0x636e, 0x64da, 0x64e7, 0x6e20, 0x70ac, 0x795b, 0x8ddd, 0x8e1e, 0xf902, 0x907d, 0x9245, 0x92f8, 0x4e7e, 0x4ef6, 0x5065, 0x5dfe, 0x5efa, 0x6106, 0x6957, 0x8171, 0x8654, 0x8e47, 0x9375, 0x9a2b, 0x4e5e, 0x5091, 0x6770, 0x6840, 0x5109, 0x528d, 0x5292, 0x6aa2, 94, 0x4c21, 0x77bc, 0x9210, 0x9ed4, 0x52ab, 0x602f, 0x8ff2, 0x5048, 0x61a9, 0x63ed, 0x64ca, 0x683c, 0x6a84, 0x6fc0, 0x8188, 0x89a1, 0x9694, 0x5805, 0x727d, 0x72ac, 0x7504, 0x7d79, 0x7e6d, 0x80a9, 0x898b, 0x8b74, 0x9063, 0x9d51, 0x6289, 0x6c7a, 0x6f54, 0x7d50, 0x7f3a, 0x8a23, 0x517c, 0x614a, 0x7b9d, 0x8b19, 0x9257, 0x938c, 0x4eac, 0x4fd3, 0x501e, 0x50be, 0x5106, 0x52c1, 0x52cd, 0x537f, 0x5770, 0x5883, 0x5e9a, 0x5f91, 0x6176, 0x61ac, 0x64ce, 0x656c, 0x666f, 0x66bb, 0x66f4, 0x6897, 0x6d87, 0x7085, 0x70f1, 0x749f, 0x74a5, 0x74ca, 0x75d9, 0x786c, 0x78ec, 0x7adf, 0x7af6, 0x7d45, 0x7d93, 0x8015, 0x803f, 0x811b, 0x8396, 0x8b66, 0x8f15, 0x9015, 0x93e1, 0x9803, 0x9838, 0x9a5a, 0x9be8, 0x4fc2, 0x5553, 0x583a, 0x5951, 0x5b63, 0x5c46, 0x60b8, 0x6212, 0x6842, 0x68b0, 94, 0x4d21, 0x68e8, 0x6eaa, 0x754c, 0x7678, 0x78ce, 0x7a3d, 0x7cfb, 0x7e6b, 0x7e7c, 0x8a08, 0x8aa1, 0x8c3f, 0x968e, 0x9dc4, 0x53e4, 0x53e9, 0x544a, 0x5471, 0x56fa, 0x59d1, 0x5b64, 0x5c3b, 0x5eab, 0x62f7, 0x6537, 0x6545, 0x6572, 0x66a0, 0x67af, 0x69c1, 0x6cbd, 0x75fc, 0x7690, 0x777e, 0x7a3f, 0x7f94, 0x8003, 0x80a1, 0x818f, 0x82e6, 0x82fd, 0x83f0, 0x85c1, 0x8831, 0x88b4, 0x8aa5, 0xf903, 0x8f9c, 0x932e, 0x96c7, 0x9867, 0x9ad8, 0x9f13, 0x54ed, 0x659b, 0x66f2, 0x688f, 0x7a40, 0x8c37, 0x9d60, 0x56f0, 0x5764, 0x5d11, 0x6606, 0x68b1, 0x68cd, 0x6efe, 0x7428, 0x889e, 0x9be4, 0x6c68, 0xf904, 0x9aa8, 0x4f9b, 0x516c, 0x5171, 0x529f, 0x5b54, 0x5de5, 0x6050, 0x606d, 0x62f1, 0x63a7, 0x653b, 0x73d9, 0x7a7a, 0x86a3, 0x8ca2, 0x978f, 0x4e32, 0x5be1, 0x6208, 0x679c, 0x74dc, 94, 0x4e21, 0x79d1, 0x83d3, 0x8a87, 0x8ab2, 0x8de8, 0x904e, 0x934b, 0x9846, 0x5ed3, 0x69e8, 0x85ff, 0x90ed, 0xf905, 0x51a0, 0x5b98, 0x5bec, 0x6163, 0x68fa, 0x6b3e, 0x704c, 0x742f, 0x74d8, 0x7ba1, 0x7f50, 0x83c5, 0x89c0, 0x8cab, 0x95dc, 0x9928, 0x522e, 0x605d, 0x62ec, 0x9002, 0x4f8a, 0x5149, 0x5321, 0x58d9, 0x5ee3, 0x66e0, 0x6d38, 0x709a, 0x72c2, 0x73d6, 0x7b50, 0x80f1, 0x945b, 0x5366, 0x639b, 0x7f6b, 0x4e56, 0x5080, 0x584a, 0x58de, 0x602a, 0x6127, 0x62d0, 0x69d0, 0x9b41, 0x5b8f, 0x7d18, 0x80b1, 0x8f5f, 0x4ea4, 0x50d1, 0x54ac, 0x55ac, 0x5b0c, 0x5da0, 0x5de7, 0x652a, 0x654e, 0x6821, 0x6a4b, 0x72e1, 0x768e, 0x77ef, 0x7d5e, 0x7ff9, 0x81a0, 0x854e, 0x86df, 0x8f03, 0x8f4e, 0x90ca, 0x9903, 0x9a55, 0x9bab, 0x4e18, 0x4e45, 0x4e5d, 0x4ec7, 0x4ff1, 0x5177, 0x52fe, 94, 0x4f21, 0x5340, 0x53e3, 0x53e5, 0x548e, 0x5614, 0x5775, 0x57a2, 0x5bc7, 0x5d87, 0x5ed0, 0x61fc, 0x62d8, 0x6551, 0x67b8, 0x67e9, 0x69cb, 0x6b50, 0x6bc6, 0x6bec, 0x6c42, 0x6e9d, 0x7078, 0x72d7, 0x7396, 0x7403, 0x77bf, 0x77e9, 0x7a76, 0x7d7f, 0x8009, 0x81fc, 0x8205, 0x820a, 0x82df, 0x8862, 0x8b33, 0x8cfc, 0x8ec0, 0x9011, 0x90b1, 0x9264, 0x92b6, 0x99d2, 0x9a45, 0x9ce9, 0x9dd7, 0x9f9c, 0x570b, 0x5c40, 0x83ca, 0x97a0, 0x97ab, 0x9eb4, 0x541b, 0x7a98, 0x7fa4, 0x88d9, 0x8ecd, 0x90e1, 0x5800, 0x5c48, 0x6398, 0x7a9f, 0x5bae, 0x5f13, 0x7a79, 0x7aae, 0x828e, 0x8eac, 0x5026, 0x5238, 0x52f8, 0x5377, 0x5708, 0x62f3, 0x6372, 0x6b0a, 0x6dc3, 0x7737, 0x53a5, 0x7357, 0x8568, 0x8e76, 0x95d5, 0x673a, 0x6ac3, 0x6f70, 0x8a6d, 0x8ecc, 0x994b, 0xf906, 0x6677, 0x6b78, 0x8cb4, 94, 0x5021, 0x9b3c, 0xf907, 0x53eb, 0x572d, 0x594e, 0x63c6, 0x69fb, 0x73ea, 0x7845, 0x7aba, 0x7ac5, 0x7cfe, 0x8475, 0x898f, 0x8d73, 0x9035, 0x95a8, 0x52fb, 0x5747, 0x7547, 0x7b60, 0x83cc, 0x921e, 0xf908, 0x6a58, 0x514b, 0x524b, 0x5287, 0x621f, 0x68d8, 0x6975, 0x9699, 0x50c5, 0x52a4, 0x52e4, 0x61c3, 0x65a4, 0x6839, 0x69ff, 0x747e, 0x7b4b, 0x82b9, 0x83eb, 0x89b2, 0x8b39, 0x8fd1, 0x9949, 0xf909, 0x4eca, 0x5997, 0x64d2, 0x6611, 0x6a8e, 0x7434, 0x7981, 0x79bd, 0x82a9, 0x887e, 0x887f, 0x895f, 0xf90a, 0x9326, 0x4f0b, 0x53ca, 0x6025, 0x6271, 0x6c72, 0x7d1a, 0x7d66, 0x4e98, 0x5162, 0x77dc, 0x80af, 0x4f01, 0x4f0e, 0x5176, 0x5180, 0x55dc, 0x5668, 0x573b, 0x57fa, 0x57fc, 0x5914, 0x5947, 0x5993, 0x5bc4, 0x5c90, 0x5d0e, 0x5df1, 0x5e7e, 0x5fcc, 0x6280, 0x65d7, 0x65e3, 94, 0x5121, 0x671e, 0x671f, 0x675e, 0x68cb, 0x68c4, 0x6a5f, 0x6b3a, 0x6c23, 0x6c7d, 0x6c82, 0x6dc7, 0x7398, 0x7426, 0x742a, 0x7482, 0x74a3, 0x7578, 0x757f, 0x7881, 0x78ef, 0x7941, 0x7947, 0x7948, 0x797a, 0x7b95, 0x7d00, 0x7dba, 0x7f88, 0x8006, 0x802d, 0x808c, 0x8a18, 0x8b4f, 0x8c48, 0x8d77, 0x9321, 0x9324, 0x98e2, 0x9951, 0x9a0e, 0x9a0f, 0x9a65, 0x9e92, 0x7dca, 0x4f76, 0x5409, 0x62ee, 0x6854, 0x91d1, 0x55ab, 0x513a, 0xf90b, 0xf90c, 0x5a1c, 0x61e6, 0xf90d, 0x62cf, 0x62ff, 0xf90e, 0xf90f, 0xf910, 0xf911, 0xf912, 0xf913, 0x90a3, 0xf914, 0xf915, 0xf916, 0xf917, 0xf918, 0x8afe, 0xf919, 0xf91a, 0xf91b, 0xf91c, 0x6696, 0xf91d, 0x7156, 0xf91e, 0xf91f, 0x96e3, 0xf920, 0x634f, 0x637a, 0x5357, 0xf921, 0x678f, 0x6960, 0x6e73, 0xf922, 0x7537, 0xf923, 0xf924, 0xf925, 94, 0x5221, 0x7d0d, 0xf926, 0xf927, 0x8872, 0x56ca, 0x5a18, 0xf928, 0xf929, 0xf92a, 0xf92b, 0xf92c, 0x4e43, 0xf92d, 0x5167, 0x5948, 0x67f0, 0x8010, 0xf92e, 0x5973, 0x5e74, 0x649a, 0x79ca, 0x5ff5, 0x606c, 0x62c8, 0x637b, 0x5be7, 0x5bd7, 0x52aa, 0xf92f, 0x5974, 0x5f29, 0x6012, 0xf930, 0xf931, 0xf932, 0x7459, 0xf933, 0xf934, 0xf935, 0xf936, 0xf937, 0xf938, 0x99d1, 0xf939, 0xf93a, 0xf93b, 0xf93c, 0xf93d, 0xf93e, 0xf93f, 0xf940, 0xf941, 0xf942, 0xf943, 0x6fc3, 0xf944, 0xf945, 0x81bf, 0x8fb2, 0x60f1, 0xf946, 0xf947, 0x8166, 0xf948, 0xf949, 0x5c3f, 0xf94a, 0xf94b, 0xf94c, 0xf94d, 0xf94e, 0xf94f, 0xf950, 0xf951, 0x5ae9, 0x8a25, 0x677b, 0x7d10, 0xf952, 0xf953, 0xf954, 0xf955, 0xf956, 0xf957, 0x80fd, 0xf958, 0xf959, 0x5c3c, 0x6ce5, 0x533f, 0x6eba, 0x591a, 0x8336, 94, 0x5321, 0x4e39, 0x4eb6, 0x4f46, 0x55ae, 0x5718, 0x58c7, 0x5f56, 0x65b7, 0x65e6, 0x6a80, 0x6bb5, 0x6e4d, 0x77ed, 0x7aef, 0x7c1e, 0x7dde, 0x86cb, 0x8892, 0x9132, 0x935b, 0x64bb, 0x6fbe, 0x737a, 0x75b8, 0x9054, 0x5556, 0x574d, 0x61ba, 0x64d4, 0x66c7, 0x6de1, 0x6e5b, 0x6f6d, 0x6fb9, 0x75f0, 0x8043, 0x81bd, 0x8541, 0x8983, 0x8ac7, 0x8b5a, 0x931f, 0x6c93, 0x7553, 0x7b54, 0x8e0f, 0x905d, 0x5510, 0x5802, 0x5858, 0x5e62, 0x6207, 0x649e, 0x68e0, 0x7576, 0x7cd6, 0x87b3, 0x9ee8, 0x4ee3, 0x5788, 0x576e, 0x5927, 0x5c0d, 0x5cb1, 0x5e36, 0x5f85, 0x6234, 0x64e1, 0x73b3, 0x81fa, 0x888b, 0x8cb8, 0x968a, 0x9edb, 0x5b85, 0x5fb7, 0x60b3, 0x5012, 0x5200, 0x5230, 0x5716, 0x5835, 0x5857, 0x5c0e, 0x5c60, 0x5cf6, 0x5d8b, 0x5ea6, 0x5f92, 0x60bc, 0x6311, 0x6389, 0x6417, 0x6843, 94, 0x5421, 0x68f9, 0x6ac2, 0x6dd8, 0x6e21, 0x6ed4, 0x6fe4, 0x71fe, 0x76dc, 0x7779, 0x79b1, 0x7a3b, 0x8404, 0x89a9, 0x8ced, 0x8df3, 0x8e48, 0x9003, 0x9014, 0x9053, 0x90fd, 0x934d, 0x9676, 0x97dc, 0x6bd2, 0x7006, 0x7258, 0x72a2, 0x7368, 0x7763, 0x79bf, 0x7be4, 0x7e9b, 0x8b80, 0x58a9, 0x60c7, 0x6566, 0x65fd, 0x66be, 0x6c8c, 0x711e, 0x71c9, 0x8c5a, 0x9813, 0x4e6d, 0x7a81, 0x4edd, 0x51ac, 0x51cd, 0x52d5, 0x540c, 0x61a7, 0x6771, 0x6850, 0x68df, 0x6d1e, 0x6f7c, 0x75bc, 0x77b3, 0x7ae5, 0x80f4, 0x8463, 0x9285, 0x515c, 0x6597, 0x675c, 0x6793, 0x75d8, 0x7ac7, 0x8373, 0xf95a, 0x8c46, 0x9017, 0x982d, 0x5c6f, 0x81c0, 0x829a, 0x9041, 0x906f, 0x920d, 0x5f97, 0x5d9d, 0x6a59, 0x71c8, 0x767b, 0x7b49, 0x85e4, 0x8b04, 0x9127, 0x9a30, 0x5587, 0x61f6, 0xf95b, 0x7669, 0x7f85, 94, 0x5521, 0x863f, 0x87ba, 0x88f8, 0x908f, 0xf95c, 0x6d1b, 0x70d9, 0x73de, 0x7d61, 0x843d, 0xf95d, 0x916a, 0x99f1, 0xf95e, 0x4e82, 0x5375, 0x6b04, 0x6b12, 0x703e, 0x721b, 0x862d, 0x9e1e, 0x524c, 0x8fa3, 0x5d50, 0x64e5, 0x652c, 0x6b16, 0x6feb, 0x7c43, 0x7e9c, 0x85cd, 0x8964, 0x89bd, 0x62c9, 0x81d8, 0x881f, 0x5eca, 0x6717, 0x6d6a, 0x72fc, 0x7405, 0x746f, 0x8782, 0x90de, 0x4f86, 0x5d0d, 0x5fa0, 0x840a, 0x51b7, 0x63a0, 0x7565, 0x4eae, 0x5006, 0x5169, 0x51c9, 0x6881, 0x6a11, 0x7cae, 0x7cb1, 0x7ce7, 0x826f, 0x8ad2, 0x8f1b, 0x91cf, 0x4fb6, 0x5137, 0x52f5, 0x5442, 0x5eec, 0x616e, 0x623e, 0x65c5, 0x6ada, 0x6ffe, 0x792a, 0x85dc, 0x8823, 0x95ad, 0x9a62, 0x9a6a, 0x9e97, 0x9ece, 0x529b, 0x66c6, 0x6b77, 0x701d, 0x792b, 0x8f62, 0x9742, 0x6190, 0x6200, 0x6523, 0x6f23, 94, 0x5621, 0x7149, 0x7489, 0x7df4, 0x806f, 0x84ee, 0x8f26, 0x9023, 0x934a, 0x51bd, 0x5217, 0x52a3, 0x6d0c, 0x70c8, 0x88c2, 0x5ec9, 0x6582, 0x6bae, 0x6fc2, 0x7c3e, 0x7375, 0x4ee4, 0x4f36, 0x56f9, 0xf95f, 0x5cba, 0x5dba, 0x601c, 0x73b2, 0x7b2d, 0x7f9a, 0x7fce, 0x8046, 0x901e, 0x9234, 0x96f6, 0x9748, 0x9818, 0x9f61, 0x4f8b, 0x6fa7, 0x79ae, 0x91b4, 0x96b7, 0x52de, 0xf960, 0x6488, 0x64c4, 0x6ad3, 0x6f5e, 0x7018, 0x7210, 0x76e7, 0x8001, 0x8606, 0x865c, 0x8def, 0x8f05, 0x9732, 0x9b6f, 0x9dfa, 0x9e75, 0x788c, 0x797f, 0x7da0, 0x83c9, 0x9304, 0x9e7f, 0x9e93, 0x8ad6, 0x58df, 0x5f04, 0x6727, 0x7027, 0x74cf, 0x7c60, 0x807e, 0x5121, 0x7028, 0x7262, 0x78ca, 0x8cc2, 0x8cda, 0x8cf4, 0x96f7, 0x4e86, 0x50da, 0x5bee, 0x5ed6, 0x6599, 0x71ce, 0x7642, 0x77ad, 0x804a, 0x84fc, 94, 0x5721, 0x907c, 0x9b27, 0x9f8d, 0x58d8, 0x5a41, 0x5c62, 0x6a13, 0x6dda, 0x6f0f, 0x763b, 0x7d2f, 0x7e37, 0x851e, 0x8938, 0x93e4, 0x964b, 0x5289, 0x65d2, 0x67f3, 0x69b4, 0x6d41, 0x6e9c, 0x700f, 0x7409, 0x7460, 0x7559, 0x7624, 0x786b, 0x8b2c, 0x985e, 0x516d, 0x622e, 0x9678, 0x4f96, 0x502b, 0x5d19, 0x6dea, 0x7db8, 0x8f2a, 0x5f8b, 0x6144, 0x6817, 0xf961, 0x9686, 0x52d2, 0x808b, 0x51dc, 0x51cc, 0x695e, 0x7a1c, 0x7dbe, 0x83f1, 0x9675, 0x4fda, 0x5229, 0x5398, 0x540f, 0x550e, 0x5c65, 0x60a7, 0x674e, 0x68a8, 0x6d6c, 0x7281, 0x72f8, 0x7406, 0x7483, 0xf962, 0x75e2, 0x7c6c, 0x7f79, 0x7fb8, 0x8389, 0x88cf, 0x88e1, 0x91cc, 0x91d0, 0x96e2, 0x9bc9, 0x541d, 0x6f7e, 0x71d0, 0x7498, 0x85fa, 0x8eaa, 0x96a3, 0x9c57, 0x9e9f, 0x6797, 0x6dcb, 0x7433, 0x81e8, 0x9716, 0x782c, 94, 0x5821, 0x7acb, 0x7b20, 0x7c92, 0x6469, 0x746a, 0x75f2, 0x78bc, 0x78e8, 0x99ac, 0x9b54, 0x9ebb, 0x5bde, 0x5e55, 0x6f20, 0x819c, 0x83ab, 0x9088, 0x4e07, 0x534d, 0x5a29, 0x5dd2, 0x5f4e, 0x6162, 0x633d, 0x6669, 0x66fc, 0x6eff, 0x6f2b, 0x7063, 0x779e, 0x842c, 0x8513, 0x883b, 0x8f13, 0x9945, 0x9c3b, 0x551c, 0x62b9, 0x672b, 0x6cab, 0x8309, 0x896a, 0x977a, 0x4ea1, 0x5984, 0x5fd8, 0x5fd9, 0x671b, 0x7db2, 0x7f54, 0x8292, 0x832b, 0x83bd, 0x8f1e, 0x9099, 0x57cb, 0x59b9, 0x5a92, 0x5bd0, 0x6627, 0x679a, 0x6885, 0x6bcf, 0x7164, 0x7f75, 0x8cb7, 0x8ce3, 0x9081, 0x9b45, 0x8108, 0x8c8a, 0x964c, 0x9a40, 0x9ea5, 0x5b5f, 0x6c13, 0x731b, 0x76f2, 0x76df, 0x840c, 0x51aa, 0x8993, 0x514d, 0x5195, 0x52c9, 0x68c9, 0x6c94, 0x7704, 0x7720, 0x7dbf, 0x7dec, 0x9762, 0x9eb5, 0x6ec5, 94, 0x5921, 0x8511, 0x51a5, 0x540d, 0x547d, 0x660e, 0x669d, 0x6927, 0x6e9f, 0x76bf, 0x7791, 0x8317, 0x84c2, 0x879f, 0x9169, 0x9298, 0x9cf4, 0x8882, 0x4fae, 0x5192, 0x52df, 0x59c6, 0x5e3d, 0x6155, 0x6478, 0x6479, 0x66ae, 0x67d0, 0x6a21, 0x6bcd, 0x6bdb, 0x725f, 0x7261, 0x7441, 0x7738, 0x77db, 0x8017, 0x82bc, 0x8305, 0x8b00, 0x8b28, 0x8c8c, 0x6728, 0x6c90, 0x7267, 0x76ee, 0x7766, 0x7a46, 0x9da9, 0x6b7f, 0x6c92, 0x5922, 0x6726, 0x8499, 0x536f, 0x5893, 0x5999, 0x5edf, 0x63cf, 0x6634, 0x6773, 0x6e3a, 0x732b, 0x7ad7, 0x82d7, 0x9328, 0x52d9, 0x5deb, 0x61ae, 0x61cb, 0x620a, 0x62c7, 0x64ab, 0x65e0, 0x6959, 0x6b66, 0x6bcb, 0x7121, 0x73f7, 0x755d, 0x7e46, 0x821e, 0x8302, 0x856a, 0x8aa3, 0x8cbf, 0x9727, 0x9d61, 0x58a8, 0x9ed8, 0x5011, 0x520e, 0x543b, 0x554f, 0x6587, 94, 0x5a21, 0x6c76, 0x7d0a, 0x7d0b, 0x805e, 0x868a, 0x9580, 0x96ef, 0x52ff, 0x6c95, 0x7269, 0x5473, 0x5a9a, 0x5c3e, 0x5d4b, 0x5f4c, 0x5fae, 0x672a, 0x68b6, 0x6963, 0x6e3c, 0x6e44, 0x7709, 0x7c73, 0x7f8e, 0x8587, 0x8b0e, 0x8ff7, 0x9761, 0x9ef4, 0x5cb7, 0x60b6, 0x610d, 0x61ab, 0x654f, 0x65fb, 0x65fc, 0x6c11, 0x6cef, 0x739f, 0x73c9, 0x7de1, 0x9594, 0x5bc6, 0x871c, 0x8b10, 0x525d, 0x535a, 0x62cd, 0x640f, 0x64b2, 0x6734, 0x6a38, 0x6cca, 0x73c0, 0x749e, 0x7b94, 0x7c95, 0x7e1b, 0x818a, 0x8236, 0x8584, 0x8feb, 0x96f9, 0x99c1, 0x4f34, 0x534a, 0x53cd, 0x53db, 0x62cc, 0x642c, 0x6500, 0x6591, 0x69c3, 0x6cee, 0x6f58, 0x73ed, 0x7554, 0x7622, 0x76e4, 0x76fc, 0x78d0, 0x78fb, 0x792c, 0x7d46, 0x822c, 0x87e0, 0x8fd4, 0x9812, 0x98ef, 0x52c3, 0x62d4, 0x64a5, 0x6e24, 0x6f51, 94, 0x5b21, 0x767c, 0x8dcb, 0x91b1, 0x9262, 0x9aee, 0x9b43, 0x5023, 0x508d, 0x574a, 0x59a8, 0x5c28, 0x5e47, 0x5f77, 0x623f, 0x653e, 0x65b9, 0x65c1, 0x6609, 0x678b, 0x699c, 0x6ec2, 0x78c5, 0x7d21, 0x80aa, 0x8180, 0x822b, 0x82b3, 0x84a1, 0x868c, 0x8a2a, 0x8b17, 0x90a6, 0x9632, 0x9f90, 0x500d, 0x4ff3, 0xf963, 0x57f9, 0x5f98, 0x62dc, 0x6392, 0x676f, 0x6e43, 0x7119, 0x76c3, 0x80cc, 0x80da, 0x88f4, 0x88f5, 0x8919, 0x8ce0, 0x8f29, 0x914d, 0x966a, 0x4f2f, 0x4f70, 0x5e1b, 0x67cf, 0x6822, 0x767d, 0x767e, 0x9b44, 0x5e61, 0x6a0a, 0x7169, 0x71d4, 0x756a, 0xf964, 0x7e41, 0x8543, 0x85e9, 0x98dc, 0x4f10, 0x7b4f, 0x7f70, 0x95a5, 0x51e1, 0x5e06, 0x68b5, 0x6c3e, 0x6c4e, 0x6cdb, 0x72af, 0x7bc4, 0x8303, 0x6cd5, 0x743a, 0x50fb, 0x5288, 0x58c1, 0x64d8, 0x6a97, 0x74a7, 0x7656, 94, 0x5c21, 0x78a7, 0x8617, 0x95e2, 0x9739, 0xf965, 0x535e, 0x5f01, 0x8b8a, 0x8fa8, 0x8faf, 0x908a, 0x5225, 0x77a5, 0x9c49, 0x9f08, 0x4e19, 0x5002, 0x5175, 0x5c5b, 0x5e77, 0x661e, 0x663a, 0x67c4, 0x68c5, 0x70b3, 0x7501, 0x75c5, 0x79c9, 0x7add, 0x8f27, 0x9920, 0x9a08, 0x4fdd, 0x5821, 0x5831, 0x5bf6, 0x666e, 0x6b65, 0x6d11, 0x6e7a, 0x6f7d, 0x73e4, 0x752b, 0x83e9, 0x88dc, 0x8913, 0x8b5c, 0x8f14, 0x4f0f, 0x50d5, 0x5310, 0x535c, 0x5b93, 0x5fa9, 0x670d, 0x798f, 0x8179, 0x832f, 0x8514, 0x8907, 0x8986, 0x8f39, 0x8f3b, 0x99a5, 0x9c12, 0x672c, 0x4e76, 0x4ff8, 0x5949, 0x5c01, 0x5cef, 0x5cf0, 0x6367, 0x68d2, 0x70fd, 0x71a2, 0x742b, 0x7e2b, 0x84ec, 0x8702, 0x9022, 0x92d2, 0x9cf3, 0x4e0d, 0x4ed8, 0x4fef, 0x5085, 0x5256, 0x526f, 0x5426, 0x5490, 0x57e0, 0x592b, 0x5a66, 94, 0x5d21, 0x5b5a, 0x5b75, 0x5bcc, 0x5e9c, 0xf966, 0x6276, 0x6577, 0x65a7, 0x6d6e, 0x6ea5, 0x7236, 0x7b26, 0x7c3f, 0x7f36, 0x8150, 0x8151, 0x819a, 0x8240, 0x8299, 0x83a9, 0x8a03, 0x8ca0, 0x8ce6, 0x8cfb, 0x8d74, 0x8dba, 0x90e8, 0x91dc, 0x961c, 0x9644, 0x99d9, 0x9ce7, 0x5317, 0x5206, 0x5429, 0x5674, 0x58b3, 0x5954, 0x596e, 0x5fff, 0x61a4, 0x626e, 0x6610, 0x6c7e, 0x711a, 0x76c6, 0x7c89, 0x7cde, 0x7d1b, 0x82ac, 0x8cc1, 0x96f0, 0xf967, 0x4f5b, 0x5f17, 0x5f7f, 0x62c2, 0x5d29, 0x670b, 0x68da, 0x787c, 0x7e43, 0x9d6c, 0x4e15, 0x5099, 0x5315, 0x532a, 0x5351, 0x5983, 0x5a62, 0x5e87, 0x60b2, 0x618a, 0x6249, 0x6279, 0x6590, 0x6787, 0x69a7, 0x6bd4, 0x6bd6, 0x6bd7, 0x6bd8, 0x6cb8, 0xf968, 0x7435, 0x75fa, 0x7812, 0x7891, 0x79d5, 0x79d8, 0x7c83, 0x7dcb, 0x7fe1, 0x80a5, 94, 0x5e21, 0x813e, 0x81c2, 0x83f2, 0x871a, 0x88e8, 0x8ab9, 0x8b6c, 0x8cbb, 0x9119, 0x975e, 0x98db, 0x9f3b, 0x56ac, 0x5b2a, 0x5f6c, 0x658c, 0x6ab3, 0x6baf, 0x6d5c, 0x6ff1, 0x7015, 0x725d, 0x73ad, 0x8ca7, 0x8cd3, 0x983b, 0x6191, 0x6c37, 0x8058, 0x9a01, 0x4e4d, 0x4e8b, 0x4e9b, 0x4ed5, 0x4f3a, 0x4f3c, 0x4f7f, 0x4fdf, 0x50ff, 0x53f2, 0x53f8, 0x5506, 0x55e3, 0x56db, 0x58eb, 0x5962, 0x5a11, 0x5beb, 0x5bfa, 0x5c04, 0x5df3, 0x5e2b, 0x5f99, 0x601d, 0x6368, 0x659c, 0x65af, 0x67f6, 0x67fb, 0x68ad, 0x6b7b, 0x6c99, 0x6cd7, 0x6e23, 0x7009, 0x7345, 0x7802, 0x793e, 0x7940, 0x7960, 0x79c1, 0x7be9, 0x7d17, 0x7d72, 0x8086, 0x820d, 0x838e, 0x84d1, 0x86c7, 0x88df, 0x8a50, 0x8a5e, 0x8b1d, 0x8cdc, 0x8d66, 0x8fad, 0x90aa, 0x98fc, 0x99df, 0x9e9d, 0x524a, 0xf969, 0x6714, 0xf96a, 94, 0x5f21, 0x5098, 0x522a, 0x5c71, 0x6563, 0x6c55, 0x73ca, 0x7523, 0x759d, 0x7b97, 0x849c, 0x9178, 0x9730, 0x4e77, 0x6492, 0x6bba, 0x715e, 0x85a9, 0x4e09, 0xf96b, 0x6749, 0x68ee, 0x6e17, 0x829f, 0x8518, 0x886b, 0x63f7, 0x6f81, 0x9212, 0x98af, 0x4e0a, 0x50b7, 0x50cf, 0x511f, 0x5546, 0x55aa, 0x5617, 0x5b40, 0x5c19, 0x5ce0, 0x5e38, 0x5e8a, 0x5ea0, 0x5ec2, 0x60f3, 0x6851, 0x6a61, 0x6e58, 0x723d, 0x7240, 0x72c0, 0x76f8, 0x7965, 0x7bb1, 0x7fd4, 0x88f3, 0x89f4, 0x8a73, 0x8c61, 0x8cde, 0x971c, 0x585e, 0x74bd, 0x8cfd, 0x55c7, 0xf96c, 0x7a61, 0x7d22, 0x8272, 0x7272, 0x751f, 0x7525, 0xf96d, 0x7b19, 0x5885, 0x58fb, 0x5dbc, 0x5e8f, 0x5eb6, 0x5f90, 0x6055, 0x6292, 0x637f, 0x654d, 0x6691, 0x66d9, 0x66f8, 0x6816, 0x68f2, 0x7280, 0x745e, 0x7b6e, 0x7d6e, 0x7dd6, 0x7f72, 94, 0x6021, 0x80e5, 0x8212, 0x85af, 0x897f, 0x8a93, 0x901d, 0x92e4, 0x9ecd, 0x9f20, 0x5915, 0x596d, 0x5e2d, 0x60dc, 0x6614, 0x6673, 0x6790, 0x6c50, 0x6dc5, 0x6f5f, 0x77f3, 0x78a9, 0x84c6, 0x91cb, 0x932b, 0x4ed9, 0x50ca, 0x5148, 0x5584, 0x5b0b, 0x5ba3, 0x6247, 0x657e, 0x65cb, 0x6e32, 0x717d, 0x7401, 0x7444, 0x7487, 0x74bf, 0x766c, 0x79aa, 0x7dda, 0x7e55, 0x7fa8, 0x817a, 0x81b3, 0x8239, 0x861a, 0x87ec, 0x8a75, 0x8de3, 0x9078, 0x9291, 0x9425, 0x994d, 0x9bae, 0x5368, 0x5c51, 0x6954, 0x6cc4, 0x6d29, 0x6e2b, 0x820c, 0x859b, 0x893b, 0x8a2d, 0x8aaa, 0x96ea, 0x9f67, 0x5261, 0x66b9, 0x6bb2, 0x7e96, 0x87fe, 0x8d0d, 0x9583, 0x965d, 0x651d, 0x6d89, 0x71ee, 0xf96e, 0x57ce, 0x59d3, 0x5bac, 0x6027, 0x60fa, 0x6210, 0x661f, 0x665f, 0x7329, 0x73f9, 0x76db, 0x7701, 0x7b6c, 94, 0x6121, 0x8056, 0x8072, 0x8165, 0x8aa0, 0x9192, 0x4e16, 0x52e2, 0x6b72, 0x6d17, 0x7a05, 0x7b39, 0x7d30, 0xf96f, 0x8cb0, 0x53ec, 0x562f, 0x5851, 0x5bb5, 0x5c0f, 0x5c11, 0x5de2, 0x6240, 0x6383, 0x6414, 0x662d, 0x68b3, 0x6cbc, 0x6d88, 0x6eaf, 0x701f, 0x70a4, 0x71d2, 0x7526, 0x758f, 0x758e, 0x7619, 0x7b11, 0x7be0, 0x7c2b, 0x7d20, 0x7d39, 0x852c, 0x856d, 0x8607, 0x8a34, 0x900d, 0x9061, 0x90b5, 0x92b7, 0x97f6, 0x9a37, 0x4fd7, 0x5c6c, 0x675f, 0x6d91, 0x7c9f, 0x7e8c, 0x8b16, 0x8d16, 0x901f, 0x5b6b, 0x5dfd, 0x640d, 0x84c0, 0x905c, 0x98e1, 0x7387, 0x5b8b, 0x609a, 0x677e, 0x6dde, 0x8a1f, 0x8aa6, 0x9001, 0x980c, 0x5237, 0xf970, 0x7051, 0x788e, 0x9396, 0x8870, 0x91d7, 0x4fee, 0x53d7, 0x55fd, 0x56da, 0x5782, 0x58fd, 0x5ac2, 0x5b88, 0x5cab, 0x5cc0, 0x5e25, 0x6101, 94, 0x6221, 0x620d, 0x624b, 0x6388, 0x641c, 0x6536, 0x6578, 0x6a39, 0x6b8a, 0x6c34, 0x6d19, 0x6f31, 0x71e7, 0x72e9, 0x7378, 0x7407, 0x74b2, 0x7626, 0x7761, 0x79c0, 0x7a57, 0x7aea, 0x7cb9, 0x7d8f, 0x7dac, 0x7e61, 0x7f9e, 0x8129, 0x8331, 0x8490, 0x84da, 0x85ea, 0x8896, 0x8ab0, 0x8b90, 0x8f38, 0x9042, 0x9083, 0x916c, 0x9296, 0x92b9, 0x968b, 0x96a7, 0x96a8, 0x96d6, 0x9700, 0x9808, 0x9996, 0x9ad3, 0x9b1a, 0x53d4, 0x587e, 0x5919, 0x5b70, 0x5bbf, 0x6dd1, 0x6f5a, 0x719f, 0x7421, 0x74b9, 0x8085, 0x83fd, 0x5de1, 0x5f87, 0x5faa, 0x6042, 0x65ec, 0x6812, 0x696f, 0x6a53, 0x6b89, 0x6d35, 0x6df3, 0x73e3, 0x76fe, 0x77ac, 0x7b4d, 0x7d14, 0x8123, 0x821c, 0x8340, 0x84f4, 0x8563, 0x8a62, 0x8ac4, 0x9187, 0x931e, 0x9806, 0x99b4, 0x620c, 0x8853, 0x8ff0, 0x9265, 0x5d07, 0x5d27, 94, 0x6321, 0x5d69, 0x745f, 0x819d, 0x8768, 0x6fd5, 0x62fe, 0x7fd2, 0x8936, 0x8972, 0x4e1e, 0x4e58, 0x50e7, 0x52dd, 0x5347, 0x627f, 0x6607, 0x7e69, 0x8805, 0x965e, 0x4f8d, 0x5319, 0x5636, 0x59cb, 0x5aa4, 0x5c38, 0x5c4e, 0x5c4d, 0x5e02, 0x5f11, 0x6043, 0x65bd, 0x662f, 0x6642, 0x67be, 0x67f4, 0x731c, 0x77e2, 0x793a, 0x7fc5, 0x8494, 0x84cd, 0x8996, 0x8a66, 0x8a69, 0x8ae1, 0x8c55, 0x8c7a, 0x57f4, 0x5bd4, 0x5f0f, 0x606f, 0x62ed, 0x690d, 0x6b96, 0x6e5c, 0x7184, 0x7bd2, 0x8755, 0x8b58, 0x8efe, 0x98df, 0x98fe, 0x4f38, 0x4f81, 0x4fe1, 0x547b, 0x5a20, 0x5bb8, 0x613c, 0x65b0, 0x6668, 0x71fc, 0x7533, 0x795e, 0x7d33, 0x814e, 0x81e3, 0x8398, 0x85aa, 0x85ce, 0x8703, 0x8a0a, 0x8eab, 0x8f9b, 0xf971, 0x8fc5, 0x5931, 0x5ba4, 0x5be6, 0x6089, 0x5be9, 0x5c0b, 0x5fc3, 0x6c81, 94, 0x6421, 0xf972, 0x6df1, 0x700b, 0x751a, 0x82af, 0x8af6, 0x4ec0, 0x5341, 0xf973, 0x96d9, 0x6c0f, 0x4e9e, 0x4fc4, 0x5152, 0x555e, 0x5a25, 0x5ce8, 0x6211, 0x7259, 0x82bd, 0x83aa, 0x86fe, 0x8859, 0x8a1d, 0x963f, 0x96c5, 0x9913, 0x9d09, 0x9d5d, 0x580a, 0x5cb3, 0x5dbd, 0x5e44, 0x60e1, 0x6115, 0x63e1, 0x6a02, 0x6e25, 0x9102, 0x9354, 0x984e, 0x9c10, 0x9f77, 0x5b89, 0x5cb8, 0x6309, 0x664f, 0x6848, 0x773c, 0x96c1, 0x978d, 0x9854, 0x9b9f, 0x65a1, 0x8b01, 0x8ecb, 0x95bc, 0x5535, 0x5ca9, 0x5dd6, 0x5eb5, 0x6697, 0x764c, 0x83f4, 0x95c7, 0x58d3, 0x62bc, 0x72ce, 0x9d28, 0x4ef0, 0x592e, 0x600f, 0x663b, 0x6b83, 0x79e7, 0x9d26, 0x5393, 0x54c0, 0x57c3, 0x5d16, 0x611b, 0x66d6, 0x6daf, 0x788d, 0x827e, 0x9698, 0x9744, 0x5384, 0x627c, 0x6396, 0x6db2, 0x7e0a, 0x814b, 0x984d, 94, 0x6521, 0x6afb, 0x7f4c, 0x9daf, 0x9e1a, 0x4e5f, 0x503b, 0x51b6, 0x591c, 0x60f9, 0x63f6, 0x6930, 0x723a, 0x8036, 0xf974, 0x91ce, 0x5f31, 0xf975, 0xf976, 0x7d04, 0x82e5, 0x846f, 0x84bb, 0x85e5, 0x8e8d, 0xf977, 0x4f6f, 0xf978, 0xf979, 0x58e4, 0x5b43, 0x6059, 0x63da, 0x6518, 0x656d, 0x6698, 0xf97a, 0x694a, 0x6a23, 0x6d0b, 0x7001, 0x716c, 0x75d2, 0x760d, 0x79b3, 0x7a70, 0xf97b, 0x7f8a, 0xf97c, 0x8944, 0xf97d, 0x8b93, 0x91c0, 0x967d, 0xf97e, 0x990a, 0x5704, 0x5fa1, 0x65bc, 0x6f01, 0x7600, 0x79a6, 0x8a9e, 0x99ad, 0x9b5a, 0x9f6c, 0x5104, 0x61b6, 0x6291, 0x6a8d, 0x81c6, 0x5043, 0x5830, 0x5f66, 0x7109, 0x8a00, 0x8afa, 0x5b7c, 0x8616, 0x4ffa, 0x513c, 0x56b4, 0x5944, 0x63a9, 0x6df9, 0x5daa, 0x696d, 0x5186, 0x4e88, 0x4f59, 0xf97f, 0xf980, 0xf981, 0x5982, 0xf982, 94, 0x6621, 0xf983, 0x6b5f, 0x6c5d, 0xf984, 0x74b5, 0x7916, 0xf985, 0x8207, 0x8245, 0x8339, 0x8f3f, 0x8f5d, 0xf986, 0x9918, 0xf987, 0xf988, 0xf989, 0x4ea6, 0xf98a, 0x57df, 0x5f79, 0x6613, 0xf98b, 0xf98c, 0x75ab, 0x7e79, 0x8b6f, 0xf98d, 0x9006, 0x9a5b, 0x56a5, 0x5827, 0x59f8, 0x5a1f, 0x5bb4, 0xf98e, 0x5ef6, 0xf98f, 0xf990, 0x6350, 0x633b, 0xf991, 0x693d, 0x6c87, 0x6cbf, 0x6d8e, 0x6d93, 0x6df5, 0x6f14, 0xf992, 0x70df, 0x7136, 0x7159, 0xf993, 0x71c3, 0x71d5, 0xf994, 0x784f, 0x786f, 0xf995, 0x7b75, 0x7de3, 0xf996, 0x7e2f, 0xf997, 0x884d, 0x8edf, 0xf998, 0xf999, 0xf99a, 0x925b, 0xf99b, 0x9cf6, 0xf99c, 0xf99d, 0xf99e, 0x6085, 0x6d85, 0xf99f, 0x71b1, 0xf9a0, 0xf9a1, 0x95b1, 0x53ad, 0xf9a2, 0xf9a3, 0xf9a4, 0x67d3, 0xf9a5, 0x708e, 0x7130, 0x7430, 0x8276, 0x82d2, 94, 0x6721, 0xf9a6, 0x95bb, 0x9ae5, 0x9e7d, 0x66c4, 0xf9a7, 0x71c1, 0x8449, 0xf9a8, 0xf9a9, 0x584b, 0xf9aa, 0xf9ab, 0x5db8, 0x5f71, 0xf9ac, 0x6620, 0x668e, 0x6979, 0x69ae, 0x6c38, 0x6cf3, 0x6e36, 0x6f41, 0x6fda, 0x701b, 0x702f, 0x7150, 0x71df, 0x7370, 0xf9ad, 0x745b, 0xf9ae, 0x74d4, 0x76c8, 0x7a4e, 0x7e93, 0xf9af, 0xf9b0, 0x82f1, 0x8a60, 0x8fce, 0xf9b1, 0x9348, 0xf9b2, 0x9719, 0xf9b3, 0xf9b4, 0x4e42, 0x502a, 0xf9b5, 0x5208, 0x53e1, 0x66f3, 0x6c6d, 0x6fca, 0x730a, 0x777f, 0x7a62, 0x82ae, 0x85dd, 0x8602, 0xf9b6, 0x88d4, 0x8a63, 0x8b7d, 0x8c6b, 0xf9b7, 0x92b3, 0xf9b8, 0x9713, 0x9810, 0x4e94, 0x4f0d, 0x4fc9, 0x50b2, 0x5348, 0x543e, 0x5433, 0x55da, 0x5862, 0x58ba, 0x5967, 0x5a1b, 0x5be4, 0x609f, 0xf9b9, 0x61ca, 0x6556, 0x65ff, 0x6664, 0x68a7, 0x6c5a, 0x6fb3, 94, 0x6821, 0x70cf, 0x71ac, 0x7352, 0x7b7d, 0x8708, 0x8aa4, 0x9c32, 0x9f07, 0x5c4b, 0x6c83, 0x7344, 0x7389, 0x923a, 0x6eab, 0x7465, 0x761f, 0x7a69, 0x7e15, 0x860a, 0x5140, 0x58c5, 0x64c1, 0x74ee, 0x7515, 0x7670, 0x7fc1, 0x9095, 0x96cd, 0x9954, 0x6e26, 0x74e6, 0x7aa9, 0x7aaa, 0x81e5, 0x86d9, 0x8778, 0x8a1b, 0x5a49, 0x5b8c, 0x5b9b, 0x68a1, 0x6900, 0x6d63, 0x73a9, 0x7413, 0x742c, 0x7897, 0x7de9, 0x7feb, 0x8118, 0x8155, 0x839e, 0x8c4c, 0x962e, 0x9811, 0x66f0, 0x5f80, 0x65fa, 0x6789, 0x6c6a, 0x738b, 0x502d, 0x5a03, 0x6b6a, 0x77ee, 0x5916, 0x5d6c, 0x5dcd, 0x7325, 0x754f, 0xf9ba, 0xf9bb, 0x50e5, 0x51f9, 0x582f, 0x592d, 0x5996, 0x59da, 0x5be5, 0xf9bc, 0xf9bd, 0x5da2, 0x62d7, 0x6416, 0x6493, 0x64fe, 0xf9be, 0x66dc, 0xf9bf, 0x6a48, 0xf9c0, 0x71ff, 0x7464, 0xf9c1, 94, 0x6921, 0x7a88, 0x7aaf, 0x7e47, 0x7e5e, 0x8000, 0x8170, 0xf9c2, 0x87ef, 0x8981, 0x8b20, 0x9059, 0xf9c3, 0x9080, 0x9952, 0x617e, 0x6b32, 0x6d74, 0x7e1f, 0x8925, 0x8fb1, 0x4fd1, 0x50ad, 0x5197, 0x52c7, 0x57c7, 0x5889, 0x5bb9, 0x5eb8, 0x6142, 0x6995, 0x6d8c, 0x6e67, 0x6eb6, 0x7194, 0x7462, 0x7528, 0x752c, 0x8073, 0x8338, 0x84c9, 0x8e0a, 0x9394, 0x93de, 0xf9c4, 0x4e8e, 0x4f51, 0x5076, 0x512a, 0x53c8, 0x53cb, 0x53f3, 0x5b87, 0x5bd3, 0x5c24, 0x611a, 0x6182, 0x65f4, 0x725b, 0x7397, 0x7440, 0x76c2, 0x7950, 0x7991, 0x79b9, 0x7d06, 0x7fbd, 0x828b, 0x85d5, 0x865e, 0x8fc2, 0x9047, 0x90f5, 0x91ea, 0x9685, 0x96e8, 0x96e9, 0x52d6, 0x5f67, 0x65ed, 0x6631, 0x682f, 0x715c, 0x7a36, 0x90c1, 0x980a, 0x4e91, 0xf9c5, 0x6a52, 0x6b9e, 0x6f90, 0x7189, 0x8018, 0x82b8, 0x8553, 94, 0x6a21, 0x904b, 0x9695, 0x96f2, 0x97fb, 0x851a, 0x9b31, 0x4e90, 0x718a, 0x96c4, 0x5143, 0x539f, 0x54e1, 0x5713, 0x5712, 0x57a3, 0x5a9b, 0x5ac4, 0x5bc3, 0x6028, 0x613f, 0x63f4, 0x6c85, 0x6d39, 0x6e72, 0x6e90, 0x7230, 0x733f, 0x7457, 0x82d1, 0x8881, 0x8f45, 0x9060, 0xf9c6, 0x9662, 0x9858, 0x9d1b, 0x6708, 0x8d8a, 0x925e, 0x4f4d, 0x5049, 0x50de, 0x5371, 0x570d, 0x59d4, 0x5a01, 0x5c09, 0x6170, 0x6690, 0x6e2d, 0x7232, 0x744b, 0x7def, 0x80c3, 0x840e, 0x8466, 0x853f, 0x875f, 0x885b, 0x8918, 0x8b02, 0x9055, 0x97cb, 0x9b4f, 0x4e73, 0x4f91, 0x5112, 0x516a, 0xf9c7, 0x552f, 0x55a9, 0x5b7a, 0x5ba5, 0x5e7c, 0x5e7d, 0x5ebe, 0x60a0, 0x60df, 0x6108, 0x6109, 0x63c4, 0x6538, 0x6709, 0xf9c8, 0x67d4, 0x67da, 0xf9c9, 0x6961, 0x6962, 0x6cb9, 0x6d27, 0xf9ca, 0x6e38, 0xf9cb, 94, 0x6b21, 0x6fe1, 0x7336, 0x7337, 0xf9cc, 0x745c, 0x7531, 0xf9cd, 0x7652, 0xf9ce, 0xf9cf, 0x7dad, 0x81fe, 0x8438, 0x88d5, 0x8a98, 0x8adb, 0x8aed, 0x8e30, 0x8e42, 0x904a, 0x903e, 0x907a, 0x9149, 0x91c9, 0x936e, 0xf9d0, 0xf9d1, 0x5809, 0xf9d2, 0x6bd3, 0x8089, 0x80b2, 0xf9d3, 0xf9d4, 0x5141, 0x596b, 0x5c39, 0xf9d5, 0xf9d6, 0x6f64, 0x73a7, 0x80e4, 0x8d07, 0xf9d7, 0x9217, 0x958f, 0xf9d8, 0xf9d9, 0xf9da, 0xf9db, 0x807f, 0x620e, 0x701c, 0x7d68, 0x878d, 0xf9dc, 0x57a0, 0x6069, 0x6147, 0x6bb7, 0x8abe, 0x9280, 0x96b1, 0x4e59, 0x541f, 0x6deb, 0x852d, 0x9670, 0x97f3, 0x98ee, 0x63d6, 0x6ce3, 0x9091, 0x51dd, 0x61c9, 0x81ba, 0x9df9, 0x4f9d, 0x501a, 0x5100, 0x5b9c, 0x610f, 0x61ff, 0x64ec, 0x6905, 0x6bc5, 0x7591, 0x77e3, 0x7fa9, 0x8264, 0x858f, 0x87fb, 0x8863, 0x8abc, 94, 0x6c21, 0x8b70, 0x91ab, 0x4e8c, 0x4ee5, 0x4f0a, 0xf9dd, 0xf9de, 0x5937, 0x59e8, 0xf9df, 0x5df2, 0x5f1b, 0x5f5b, 0x6021, 0xf9e0, 0xf9e1, 0xf9e2, 0xf9e3, 0x723e, 0x73e5, 0xf9e4, 0x7570, 0x75cd, 0xf9e5, 0x79fb, 0xf9e6, 0x800c, 0x8033, 0x8084, 0x82e1, 0x8351, 0xf9e7, 0xf9e8, 0x8cbd, 0x8cb3, 0x9087, 0xf9e9, 0xf9ea, 0x98f4, 0x990c, 0xf9eb, 0xf9ec, 0x7037, 0x76ca, 0x7fca, 0x7fcc, 0x7ffc, 0x8b1a, 0x4eba, 0x4ec1, 0x5203, 0x5370, 0xf9ed, 0x54bd, 0x56e0, 0x59fb, 0x5bc5, 0x5f15, 0x5fcd, 0x6e6e, 0xf9ee, 0xf9ef, 0x7d6a, 0x8335, 0xf9f0, 0x8693, 0x8a8d, 0xf9f1, 0x976d, 0x9777, 0xf9f2, 0xf9f3, 0x4e00, 0x4f5a, 0x4f7e, 0x58f9, 0x65e5, 0x6ea2, 0x9038, 0x93b0, 0x99b9, 0x4efb, 0x58ec, 0x598a, 0x59d9, 0x6041, 0xf9f4, 0xf9f5, 0x7a14, 0xf9f6, 0x834f, 0x8cc3, 0x5165, 0x5344, 94, 0x6d21, 0xf9f7, 0xf9f8, 0xf9f9, 0x4ecd, 0x5269, 0x5b55, 0x82bf, 0x4ed4, 0x523a, 0x54a8, 0x59c9, 0x59ff, 0x5b50, 0x5b57, 0x5b5c, 0x6063, 0x6148, 0x6ecb, 0x7099, 0x716e, 0x7386, 0x74f7, 0x75b5, 0x78c1, 0x7d2b, 0x8005, 0x81ea, 0x8328, 0x8517, 0x85c9, 0x8aee, 0x8cc7, 0x96cc, 0x4f5c, 0x52fa, 0x56bc, 0x65ab, 0x6628, 0x707c, 0x70b8, 0x7235, 0x7dbd, 0x828d, 0x914c, 0x96c0, 0x9d72, 0x5b71, 0x68e7, 0x6b98, 0x6f7a, 0x76de, 0x5c91, 0x66ab, 0x6f5b, 0x7bb4, 0x7c2a, 0x8836, 0x96dc, 0x4e08, 0x4ed7, 0x5320, 0x5834, 0x58bb, 0x58ef, 0x596c, 0x5c07, 0x5e33, 0x5e84, 0x5f35, 0x638c, 0x66b2, 0x6756, 0x6a1f, 0x6aa3, 0x6b0c, 0x6f3f, 0x7246, 0xf9fa, 0x7350, 0x748b, 0x7ae0, 0x7ca7, 0x8178, 0x81df, 0x81e7, 0x838a, 0x846c, 0x8523, 0x8594, 0x85cf, 0x88dd, 0x8d13, 0x91ac, 0x9577, 94, 0x6e21, 0x969c, 0x518d, 0x54c9, 0x5728, 0x5bb0, 0x624d, 0x6750, 0x683d, 0x6893, 0x6e3d, 0x6ed3, 0x707d, 0x7e21, 0x88c1, 0x8ca1, 0x8f09, 0x9f4b, 0x9f4e, 0x722d, 0x7b8f, 0x8acd, 0x931a, 0x4f47, 0x4f4e, 0x5132, 0x5480, 0x59d0, 0x5e95, 0x62b5, 0x6775, 0x696e, 0x6a17, 0x6cae, 0x6e1a, 0x72d9, 0x732a, 0x75bd, 0x7bb8, 0x7d35, 0x82e7, 0x83f9, 0x8457, 0x85f7, 0x8a5b, 0x8caf, 0x8e87, 0x9019, 0x90b8, 0x96ce, 0x9f5f, 0x52e3, 0x540a, 0x5ae1, 0x5bc2, 0x6458, 0x6575, 0x6ef4, 0x72c4, 0xf9fb, 0x7684, 0x7a4d, 0x7b1b, 0x7c4d, 0x7e3e, 0x7fdf, 0x837b, 0x8b2b, 0x8cca, 0x8d64, 0x8de1, 0x8e5f, 0x8fea, 0x8ff9, 0x9069, 0x93d1, 0x4f43, 0x4f7a, 0x50b3, 0x5168, 0x5178, 0x524d, 0x526a, 0x5861, 0x587c, 0x5960, 0x5c08, 0x5c55, 0x5edb, 0x609b, 0x6230, 0x6813, 0x6bbf, 0x6c08, 0x6fb1, 94, 0x6f21, 0x714e, 0x7420, 0x7530, 0x7538, 0x7551, 0x7672, 0x7b4c, 0x7b8b, 0x7bad, 0x7bc6, 0x7e8f, 0x8a6e, 0x8f3e, 0x8f49, 0x923f, 0x9293, 0x9322, 0x942b, 0x96fb, 0x985a, 0x986b, 0x991e, 0x5207, 0x622a, 0x6298, 0x6d59, 0x7664, 0x7aca, 0x7bc0, 0x7d76, 0x5360, 0x5cbe, 0x5e97, 0x6f38, 0x70b9, 0x7c98, 0x9711, 0x9b8e, 0x9ede, 0x63a5, 0x647a, 0x8776, 0x4e01, 0x4e95, 0x4ead, 0x505c, 0x5075, 0x5448, 0x59c3, 0x5b9a, 0x5e40, 0x5ead, 0x5ef7, 0x5f81, 0x60c5, 0x633a, 0x653f, 0x6574, 0x65cc, 0x6676, 0x6678, 0x67fe, 0x6968, 0x6a89, 0x6b63, 0x6c40, 0x6dc0, 0x6de8, 0x6e1f, 0x6e5e, 0x701e, 0x70a1, 0x738e, 0x73fd, 0x753a, 0x775b, 0x7887, 0x798e, 0x7a0b, 0x7a7d, 0x7cbe, 0x7d8e, 0x8247, 0x8a02, 0x8aea, 0x8c9e, 0x912d, 0x914a, 0x91d8, 0x9266, 0x92cc, 0x9320, 0x9706, 0x9756, 94, 0x7021, 0x975c, 0x9802, 0x9f0e, 0x5236, 0x5291, 0x557c, 0x5824, 0x5e1d, 0x5f1f, 0x608c, 0x63d0, 0x68af, 0x6fdf, 0x796d, 0x7b2c, 0x81cd, 0x85ba, 0x88fd, 0x8af8, 0x8e44, 0x918d, 0x9664, 0x969b, 0x973d, 0x984c, 0x9f4a, 0x4fce, 0x5146, 0x51cb, 0x52a9, 0x5632, 0x5f14, 0x5f6b, 0x63aa, 0x64cd, 0x65e9, 0x6641, 0x66fa, 0x66f9, 0x671d, 0x689d, 0x68d7, 0x69fd, 0x6f15, 0x6f6e, 0x7167, 0x71e5, 0x722a, 0x74aa, 0x773a, 0x7956, 0x795a, 0x79df, 0x7a20, 0x7a95, 0x7c97, 0x7cdf, 0x7d44, 0x7e70, 0x8087, 0x85fb, 0x86a4, 0x8a54, 0x8abf, 0x8d99, 0x8e81, 0x9020, 0x906d, 0x91e3, 0x963b, 0x96d5, 0x9ce5, 0x65cf, 0x7c07, 0x8db3, 0x93c3, 0x5b58, 0x5c0a, 0x5352, 0x62d9, 0x731d, 0x5027, 0x5b97, 0x5f9e, 0x60b0, 0x616b, 0x68d5, 0x6dd9, 0x742e, 0x7a2e, 0x7d42, 0x7d9c, 0x7e31, 0x816b, 94, 0x7121, 0x8e2a, 0x8e35, 0x937e, 0x9418, 0x4f50, 0x5750, 0x5de6, 0x5ea7, 0x632b, 0x7f6a, 0x4e3b, 0x4f4f, 0x4f8f, 0x505a, 0x59dd, 0x80c4, 0x546a, 0x5468, 0x55fe, 0x594f, 0x5b99, 0x5dde, 0x5eda, 0x665d, 0x6731, 0x67f1, 0x682a, 0x6ce8, 0x6d32, 0x6e4a, 0x6f8d, 0x70b7, 0x73e0, 0x7587, 0x7c4c, 0x7d02, 0x7d2c, 0x7da2, 0x821f, 0x86db, 0x8a3b, 0x8a85, 0x8d70, 0x8e8a, 0x8f33, 0x9031, 0x914e, 0x9152, 0x9444, 0x99d0, 0x7af9, 0x7ca5, 0x4fca, 0x5101, 0x51c6, 0x57c8, 0x5bef, 0x5cfb, 0x6659, 0x6a3d, 0x6d5a, 0x6e96, 0x6fec, 0x710c, 0x756f, 0x7ae3, 0x8822, 0x9021, 0x9075, 0x96cb, 0x99ff, 0x8301, 0x4e2d, 0x4ef2, 0x8846, 0x91cd, 0x537d, 0x6adb, 0x696b, 0x6c41, 0x847a, 0x589e, 0x618e, 0x66fe, 0x62ef, 0x70dd, 0x7511, 0x75c7, 0x7e52, 0x84b8, 0x8b49, 0x8d08, 0x4e4b, 0x53ea, 94, 0x7221, 0x54ab, 0x5730, 0x5740, 0x5fd7, 0x6301, 0x6307, 0x646f, 0x652f, 0x65e8, 0x667a, 0x679d, 0x67b3, 0x6b62, 0x6c60, 0x6c9a, 0x6f2c, 0x77e5, 0x7825, 0x7949, 0x7957, 0x7d19, 0x80a2, 0x8102, 0x81f3, 0x829d, 0x82b7, 0x8718, 0x8a8c, 0xf9fc, 0x8d04, 0x8dbe, 0x9072, 0x76f4, 0x7a19, 0x7a37, 0x7e54, 0x8077, 0x5507, 0x55d4, 0x5875, 0x632f, 0x6422, 0x6649, 0x664b, 0x686d, 0x699b, 0x6b84, 0x6d25, 0x6eb1, 0x73cd, 0x7468, 0x74a1, 0x755b, 0x75b9, 0x76e1, 0x771e, 0x778b, 0x79e6, 0x7e09, 0x7e1d, 0x81fb, 0x852f, 0x8897, 0x8a3a, 0x8cd1, 0x8eeb, 0x8fb0, 0x9032, 0x93ad, 0x9663, 0x9673, 0x9707, 0x4f84, 0x53f1, 0x59ea, 0x5ac9, 0x5e19, 0x684e, 0x74c6, 0x75be, 0x79e9, 0x7a92, 0x81a3, 0x86ed, 0x8cea, 0x8dcc, 0x8fed, 0x659f, 0x6715, 0xf9fd, 0x57f7, 0x6f57, 0x7ddd, 0x8f2f, 94, 0x7321, 0x93f6, 0x96c6, 0x5fb5, 0x61f2, 0x6f84, 0x4e14, 0x4f98, 0x501f, 0x53c9, 0x55df, 0x5d6f, 0x5dee, 0x6b21, 0x6b64, 0x78cb, 0x7b9a, 0xf9fe, 0x8e49, 0x8eca, 0x906e, 0x6349, 0x643e, 0x7740, 0x7a84, 0x932f, 0x947f, 0x9f6a, 0x64b0, 0x6faf, 0x71e6, 0x74a8, 0x74da, 0x7ac4, 0x7c12, 0x7e82, 0x7cb2, 0x7e98, 0x8b9a, 0x8d0a, 0x947d, 0x9910, 0x994c, 0x5239, 0x5bdf, 0x64e6, 0x672d, 0x7d2e, 0x50ed, 0x53c3, 0x5879, 0x6158, 0x6159, 0x61fa, 0x65ac, 0x7ad9, 0x8b92, 0x8b96, 0x5009, 0x5021, 0x5275, 0x5531, 0x5a3c, 0x5ee0, 0x5f70, 0x6134, 0x655e, 0x660c, 0x6636, 0x66a2, 0x69cd, 0x6ec4, 0x6f32, 0x7316, 0x7621, 0x7a93, 0x8139, 0x8259, 0x83d6, 0x84bc, 0x50b5, 0x57f0, 0x5bc0, 0x5be8, 0x5f69, 0x63a1, 0x7826, 0x7db5, 0x83dc, 0x8521, 0x91c7, 0x91f5, 0x518a, 0x67f5, 0x7b56, 94, 0x7421, 0x8cac, 0x51c4, 0x59bb, 0x60bd, 0x8655, 0x501c, 0xf9ff, 0x5254, 0x5c3a, 0x617d, 0x621a, 0x62d3, 0x64f2, 0x65a5, 0x6ecc, 0x7620, 0x810a, 0x8e60, 0x965f, 0x96bb, 0x4edf, 0x5343, 0x5598, 0x5929, 0x5ddd, 0x64c5, 0x6cc9, 0x6dfa, 0x7394, 0x7a7f, 0x821b, 0x85a6, 0x8ce4, 0x8e10, 0x9077, 0x91e7, 0x95e1, 0x9621, 0x97c6, 0x51f8, 0x54f2, 0x5586, 0x5fb9, 0x64a4, 0x6f88, 0x7db4, 0x8f1f, 0x8f4d, 0x9435, 0x50c9, 0x5c16, 0x6cbe, 0x6dfb, 0x751b, 0x77bb, 0x7c3d, 0x7c64, 0x8a79, 0x8ac2, 0x581e, 0x59be, 0x5e16, 0x6377, 0x7252, 0x758a, 0x776b, 0x8adc, 0x8cbc, 0x8f12, 0x5ef3, 0x6674, 0x6df8, 0x807d, 0x83c1, 0x8acb, 0x9751, 0x9bd6, 0xfa00, 0x5243, 0x66ff, 0x6d95, 0x6eef, 0x7de0, 0x8ae6, 0x902e, 0x905e, 0x9ad4, 0x521d, 0x527f, 0x54e8, 0x6194, 0x6284, 0x62db, 0x68a2, 94, 0x7521, 0x6912, 0x695a, 0x6a35, 0x7092, 0x7126, 0x785d, 0x7901, 0x790e, 0x79d2, 0x7a0d, 0x8096, 0x8278, 0x82d5, 0x8349, 0x8549, 0x8c82, 0x8d85, 0x9162, 0x918b, 0x91ae, 0x4fc3, 0x56d1, 0x71ed, 0x77d7, 0x8700, 0x89f8, 0x5bf8, 0x5fd6, 0x6751, 0x90a8, 0x53e2, 0x585a, 0x5bf5, 0x60a4, 0x6181, 0x6460, 0x7e3d, 0x8070, 0x8525, 0x9283, 0x64ae, 0x50ac, 0x5d14, 0x6700, 0x589c, 0x62bd, 0x63a8, 0x690e, 0x6978, 0x6a1e, 0x6e6b, 0x76ba, 0x79cb, 0x82bb, 0x8429, 0x8acf, 0x8da8, 0x8ffd, 0x9112, 0x914b, 0x919c, 0x9310, 0x9318, 0x939a, 0x96db, 0x9a36, 0x9c0d, 0x4e11, 0x755c, 0x795d, 0x7afa, 0x7b51, 0x7bc9, 0x7e2e, 0x84c4, 0x8e59, 0x8e74, 0x8ef8, 0x9010, 0x6625, 0x693f, 0x7443, 0x51fa, 0x672e, 0x9edc, 0x5145, 0x5fe0, 0x6c96, 0x87f2, 0x885d, 0x8877, 0x60b4, 0x81b5, 0x8403, 94, 0x7621, 0x8d05, 0x53d6, 0x5439, 0x5634, 0x5a36, 0x5c31, 0x708a, 0x7fe0, 0x805a, 0x8106, 0x81ed, 0x8da3, 0x9189, 0x9a5f, 0x9df2, 0x5074, 0x4ec4, 0x53a0, 0x60fb, 0x6e2c, 0x5c64, 0x4f88, 0x5024, 0x55e4, 0x5cd9, 0x5e5f, 0x6065, 0x6894, 0x6cbb, 0x6dc4, 0x71be, 0x75d4, 0x75f4, 0x7661, 0x7a1a, 0x7a49, 0x7dc7, 0x7dfb, 0x7f6e, 0x81f4, 0x86a9, 0x8f1c, 0x96c9, 0x99b3, 0x9f52, 0x5247, 0x52c5, 0x98ed, 0x89aa, 0x4e03, 0x67d2, 0x6f06, 0x4fb5, 0x5be2, 0x6795, 0x6c88, 0x6d78, 0x741b, 0x7827, 0x91dd, 0x937c, 0x87c4, 0x79e4, 0x7a31, 0x5feb, 0x4ed6, 0x54a4, 0x553e, 0x58ae, 0x59a5, 0x60f0, 0x6253, 0x62d6, 0x6736, 0x6955, 0x8235, 0x9640, 0x99b1, 0x99dd, 0x502c, 0x5353, 0x5544, 0x577c, 0xfa01, 0x6258, 0xfa02, 0x64e2, 0x666b, 0x67dd, 0x6fc1, 0x6fef, 0x7422, 0x7438, 0x8a17, 94, 0x7721, 0x9438, 0x5451, 0x5606, 0x5766, 0x5f48, 0x619a, 0x6b4e, 0x7058, 0x70ad, 0x7dbb, 0x8a95, 0x596a, 0x812b, 0x63a2, 0x7708, 0x803d, 0x8caa, 0x5854, 0x642d, 0x69bb, 0x5b95, 0x5e11, 0x6e6f, 0xfa03, 0x8569, 0x514c, 0x53f0, 0x592a, 0x6020, 0x614b, 0x6b86, 0x6c70, 0x6cf0, 0x7b1e, 0x80ce, 0x82d4, 0x8dc6, 0x90b0, 0x98b1, 0xfa04, 0x64c7, 0x6fa4, 0x6491, 0x6504, 0x514e, 0x5410, 0x571f, 0x8a0e, 0x615f, 0x6876, 0xfa05, 0x75db, 0x7b52, 0x7d71, 0x901a, 0x5806, 0x69cc, 0x817f, 0x892a, 0x9000, 0x9839, 0x5078, 0x5957, 0x59ac, 0x6295, 0x900f, 0x9b2a, 0x615d, 0x7279, 0x95d6, 0x5761, 0x5a46, 0x5df4, 0x628a, 0x64ad, 0x64fa, 0x6777, 0x6ce2, 0x6d3e, 0x722c, 0x7436, 0x7834, 0x7f77, 0x82ad, 0x8ddb, 0x9817, 0x5224, 0x5742, 0x677f, 0x7248, 0x74e3, 0x8ca9, 0x8fa6, 0x9211, 94, 0x7821, 0x962a, 0x516b, 0x53ed, 0x634c, 0x4f69, 0x5504, 0x6096, 0x6557, 0x6c9b, 0x6d7f, 0x724c, 0x72fd, 0x7a17, 0x8987, 0x8c9d, 0x5f6d, 0x6f8e, 0x70f9, 0x81a8, 0x610e, 0x4fbf, 0x504f, 0x6241, 0x7247, 0x7bc7, 0x7de8, 0x7fe9, 0x904d, 0x97ad, 0x9a19, 0x8cb6, 0x576a, 0x5e73, 0x67b0, 0x840d, 0x8a55, 0x5420, 0x5b16, 0x5e63, 0x5ee2, 0x5f0a, 0x6583, 0x80ba, 0x853d, 0x9589, 0x965b, 0x4f48, 0x5305, 0x530d, 0x530f, 0x5486, 0x54fa, 0x5703, 0x5e03, 0x6016, 0x629b, 0x62b1, 0x6355, 0xfa06, 0x6ce1, 0x6d66, 0x75b1, 0x7832, 0x80de, 0x812f, 0x82de, 0x8461, 0x84b2, 0x888d, 0x8912, 0x900b, 0x92ea, 0x98fd, 0x9b91, 0x5e45, 0x66b4, 0x66dd, 0x7011, 0x7206, 0xfa07, 0x4ff5, 0x527d, 0x5f6a, 0x6153, 0x6753, 0x6a19, 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8c79, 0x98c7, 0x98c4, 0x9a43, 94, 0x7921, 0x54c1, 0x7a1f, 0x6953, 0x8af7, 0x8c4a, 0x98a8, 0x99ae, 0x5f7c, 0x62ab, 0x75b2, 0x76ae, 0x88ab, 0x907f, 0x9642, 0x5339, 0x5f3c, 0x5fc5, 0x6ccc, 0x73cc, 0x7562, 0x758b, 0x7b46, 0x82fe, 0x999d, 0x4e4f, 0x903c, 0x4e0b, 0x4f55, 0x53a6, 0x590f, 0x5ec8, 0x6630, 0x6cb3, 0x7455, 0x8377, 0x8766, 0x8cc0, 0x9050, 0x971e, 0x9c15, 0x58d1, 0x5b78, 0x8650, 0x8b14, 0x9db4, 0x5bd2, 0x6068, 0x608d, 0x65f1, 0x6c57, 0x6f22, 0x6fa3, 0x701a, 0x7f55, 0x7ff0, 0x9591, 0x9592, 0x9650, 0x97d3, 0x5272, 0x8f44, 0x51fd, 0x542b, 0x54b8, 0x5563, 0x558a, 0x6abb, 0x6db5, 0x7dd8, 0x8266, 0x929c, 0x9677, 0x9e79, 0x5408, 0x54c8, 0x76d2, 0x86e4, 0x95a4, 0x95d4, 0x965c, 0x4ea2, 0x4f09, 0x59ee, 0x5ae6, 0x5df7, 0x6052, 0x6297, 0x676d, 0x6841, 0x6c86, 0x6e2f, 0x7f38, 0x809b, 0x822a, 94, 0x7a21, 0xfa08, 0xfa09, 0x9805, 0x4ea5, 0x5055, 0x54b3, 0x5793, 0x595a, 0x5b69, 0x5bb3, 0x61c8, 0x6977, 0x6d77, 0x7023, 0x87f9, 0x89e3, 0x8a72, 0x8ae7, 0x9082, 0x99ed, 0x9ab8, 0x52be, 0x6838, 0x5016, 0x5e78, 0x674f, 0x8347, 0x884c, 0x4eab, 0x5411, 0x56ae, 0x73e6, 0x9115, 0x97ff, 0x9909, 0x9957, 0x9999, 0x5653, 0x589f, 0x865b, 0x8a31, 0x61b2, 0x6af6, 0x737b, 0x8ed2, 0x6b47, 0x96aa, 0x9a57, 0x5955, 0x7200, 0x8d6b, 0x9769, 0x4fd4, 0x5cf4, 0x5f26, 0x61f8, 0x665b, 0x6ceb, 0x70ab, 0x7384, 0x73b9, 0x73fe, 0x7729, 0x774d, 0x7d43, 0x7d62, 0x7e23, 0x8237, 0x8852, 0xfa0a, 0x8ce2, 0x9249, 0x986f, 0x5b51, 0x7a74, 0x8840, 0x9801, 0x5acc, 0x4fe0, 0x5354, 0x593e, 0x5cfd, 0x633e, 0x6d79, 0x72f9, 0x8105, 0x8107, 0x83a2, 0x92cf, 0x9830, 0x4ea8, 0x5144, 0x5211, 0x578b, 94, 0x7b21, 0x5f62, 0x6cc2, 0x6ece, 0x7005, 0x7050, 0x70af, 0x7192, 0x73e9, 0x7469, 0x834a, 0x87a2, 0x8861, 0x9008, 0x90a2, 0x93a3, 0x99a8, 0x516e, 0x5f57, 0x60e0, 0x6167, 0x66b3, 0x8559, 0x8e4a, 0x91af, 0x978b, 0x4e4e, 0x4e92, 0x547c, 0x58d5, 0x58fa, 0x597d, 0x5cb5, 0x5f27, 0x6236, 0x6248, 0x660a, 0x6667, 0x6beb, 0x6d69, 0x6dcf, 0x6e56, 0x6ef8, 0x6f94, 0x6fe0, 0x6fe9, 0x705d, 0x72d0, 0x7425, 0x745a, 0x74e0, 0x7693, 0x795c, 0x7cca, 0x7e1e, 0x80e1, 0x82a6, 0x846b, 0x84bf, 0x864e, 0x865f, 0x8774, 0x8b77, 0x8c6a, 0x93ac, 0x9800, 0x9865, 0x60d1, 0x6216, 0x9177, 0x5a5a, 0x660f, 0x6df7, 0x6e3e, 0x743f, 0x9b42, 0x5ffd, 0x60da, 0x7b0f, 0x54c4, 0x5f18, 0x6c5e, 0x6cd3, 0x6d2a, 0x70d8, 0x7d05, 0x8679, 0x8a0c, 0x9d3b, 0x5316, 0x548c, 0x5b05, 0x6a3a, 0x706b, 0x7575, 94, 0x7c21, 0x798d, 0x79be, 0x82b1, 0x83ef, 0x8a71, 0x8b41, 0x8ca8, 0x9774, 0xfa0b, 0x64f4, 0x652b, 0x78ba, 0x78bb, 0x7a6b, 0x4e38, 0x559a, 0x5950, 0x5ba6, 0x5e7b, 0x60a3, 0x63db, 0x6b61, 0x6665, 0x6853, 0x6e19, 0x7165, 0x74b0, 0x7d08, 0x9084, 0x9a69, 0x9c25, 0x6d3b, 0x6ed1, 0x733e, 0x8c41, 0x95ca, 0x51f0, 0x5e4c, 0x5fa8, 0x604d, 0x60f6, 0x6130, 0x614c, 0x6643, 0x6644, 0x69a5, 0x6cc1, 0x6e5f, 0x6ec9, 0x6f62, 0x714c, 0x749c, 0x7687, 0x7bc1, 0x7c27, 0x8352, 0x8757, 0x9051, 0x968d, 0x9ec3, 0x532f, 0x56de, 0x5efb, 0x5f8a, 0x6062, 0x6094, 0x61f7, 0x6666, 0x6703, 0x6a9c, 0x6dee, 0x6fae, 0x7070, 0x736a, 0x7e6a, 0x81be, 0x8334, 0x86d4, 0x8aa8, 0x8cc4, 0x5283, 0x7372, 0x5b96, 0x6a6b, 0x9404, 0x54ee, 0x5686, 0x5b5d, 0x6548, 0x6585, 0x66c9, 0x689f, 0x6d8d, 0x6dc6, 94, 0x7d21, 0x723b, 0x80b4, 0x9175, 0x9a4d, 0x4faf, 0x5019, 0x539a, 0x540e, 0x543c, 0x5589, 0x55c5, 0x5e3f, 0x5f8c, 0x673d, 0x7166, 0x73dd, 0x9005, 0x52db, 0x52f3, 0x5864, 0x58ce, 0x7104, 0x718f, 0x71fb, 0x85b0, 0x8a13, 0x6688, 0x85a8, 0x55a7, 0x6684, 0x714a, 0x8431, 0x5349, 0x5599, 0x6bc1, 0x5f59, 0x5fbd, 0x63ee, 0x6689, 0x7147, 0x8af1, 0x8f1d, 0x9ebe, 0x4f11, 0x643a, 0x70cb, 0x7566, 0x8667, 0x6064, 0x8b4e, 0x9df8, 0x5147, 0x51f6, 0x5308, 0x6d36, 0x80f8, 0x9ed1, 0x6615, 0x6b23, 0x7098, 0x75d5, 0x5403, 0x5c79, 0x7d07, 0x8a16, 0x6b20, 0x6b3d, 0x6b46, 0x5438, 0x6070, 0x6d3d, 0x7fd5, 0x8208, 0x50d6, 0x51de, 0x559c, 0x566b, 0x56cd, 0x59ec, 0x5b09, 0x5e0c, 0x6199, 0x6198, 0x6231, 0x665e, 0x66e6, 0x7199, 0x71b9, 0x71ba, 0x72a7, 0x79a7, 0x7a00, 0x7fb2, 0x8a70, 0 jade-1.2.1/lib/lib.dsp100444 764 764 121707 6607560514 12310 0ustar jjcjjc# Microsoft Developer Studio Project File - Name="lib" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=lib - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "lib.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "lib.mak" CFG="lib - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "lib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "lib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "lib - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\include" /I "..\generic" /D "NDEBUG" /D "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /Yu"splib.h" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 wininet.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386 /out:"..\bin\sp133.dll" # SUBTRACT LINK32 /profile !ELSEIF "$(CFG)" == "lib - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\Debug" # PROP BASE Intermediate_Dir ".\Debug" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir ".\Debug" # PROP Intermediate_Dir ".\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\include" /I "..\generic" /D "_DEBUG" /D "_WINDOWS" /D "WINSOCK" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /Yu"splib.h" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 # ADD LINK32 wininet.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"..\dbgbin\sp133d.dll" !ENDIF # Begin Target # Name "lib - Win32 Release" # Name "lib - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # Begin Source File SOURCE=.\Allocator.cxx # End Source File # Begin Source File SOURCE=.\app_inst.cxx # ADD CPP /Yu"splib.h" # End Source File # Begin Source File SOURCE=.\app_inst.m4 !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\app_inst.m4 InputName=app_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\app_inst.m4 InputName=app_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\arc_inst.cxx # ADD CPP /Yu"splib.h" # End Source File # Begin Source File SOURCE=.\arc_inst.m4 !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\arc_inst.m4 InputName=arc_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\arc_inst.m4 InputName=arc_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\ArcEngine.cxx # End Source File # Begin Source File SOURCE=.\ArcEngineMessages.msg !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\ArcEngineMessages.msg InputName=ArcEngineMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\ArcEngineMessages.msg InputName=ArcEngineMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\assert.cxx # End Source File # Begin Source File SOURCE=.\Attribute.cxx # End Source File # Begin Source File SOURCE=.\Big5CodingSystem.cxx # End Source File # Begin Source File SOURCE=.\CatalogMessages.msg !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\CatalogMessages.msg InputName=CatalogMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\CatalogMessages.msg InputName=CatalogMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\CharsetDecl.cxx # End Source File # Begin Source File SOURCE=.\CharsetInfo.cxx # End Source File # Begin Source File SOURCE=.\CharsetRegistry.cxx # End Source File # Begin Source File SOURCE=.\CmdLineApp.cxx # End Source File # Begin Source File SOURCE=.\CmdLineAppMessages.msg !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\CmdLineAppMessages.msg InputName=CmdLineAppMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\CmdLineAppMessages.msg InputName=CmdLineAppMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\CodingSystem.cxx # End Source File # Begin Source File SOURCE=.\CodingSystemKit.cxx # End Source File # Begin Source File SOURCE=.\ConsoleOutput.cxx # End Source File # Begin Source File SOURCE=.\ContentState.cxx # End Source File # Begin Source File SOURCE=.\ContentToken.cxx # End Source File # Begin Source File SOURCE=.\DescriptorManager.cxx # End Source File # Begin Source File SOURCE=.\Dtd.cxx # End Source File # Begin Source File SOURCE=.\ElementType.cxx # End Source File # Begin Source File SOURCE=.\Entity.cxx # End Source File # Begin Source File SOURCE=.\EntityApp.cxx # End Source File # Begin Source File SOURCE=.\EntityCatalog.cxx # End Source File # Begin Source File SOURCE=.\EntityDecl.cxx # End Source File # Begin Source File SOURCE=.\EntityManager.cxx # End Source File # Begin Source File SOURCE=.\EntityManagerMessages.msg !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\EntityManagerMessages.msg InputName=EntityManagerMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\EntityManagerMessages.msg InputName=EntityManagerMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\entmgr_inst.cxx # ADD CPP /Yu"splib.h" # End Source File # Begin Source File SOURCE=.\entmgr_inst.m4 !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\entmgr_inst.m4 InputName=entmgr_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\entmgr_inst.m4 InputName=entmgr_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\ErrnoMessageArg.cxx # End Source File # Begin Source File SOURCE=.\ErrorCountEventHandler.cxx # End Source File # Begin Source File SOURCE=.\EUCJPCodingSystem.cxx # End Source File # Begin Source File SOURCE=.\Event.cxx # End Source File # Begin Source File SOURCE=.\EventGenerator.cxx # End Source File # Begin Source File SOURCE=.\ExtendEntityManager.cxx # End Source File # Begin Source File SOURCE=.\ExternalId.cxx # End Source File # Begin Source File SOURCE=.\Fixed2CodingSystem.cxx # End Source File # Begin Source File SOURCE=.\GenericEventHandler.cxx # End Source File # Begin Source File SOURCE=.\Group.cxx # End Source File # Begin Source File SOURCE=.\Hash.cxx # End Source File # Begin Source File SOURCE=.\Id.cxx # End Source File # Begin Source File SOURCE=.\IdentityCodingSystem.cxx # End Source File # Begin Source File SOURCE=.\IListBase.cxx # End Source File # Begin Source File SOURCE=.\InputSource.cxx # End Source File # Begin Source File SOURCE=.\instmac.m4 # End Source File # Begin Source File SOURCE=.\InternalInputSource.cxx # End Source File # Begin Source File SOURCE=.\Link.cxx # End Source File # Begin Source File SOURCE=.\LinkProcess.cxx # End Source File # Begin Source File SOURCE=.\LiteralStorage.cxx # End Source File # Begin Source File SOURCE=.\Location.cxx # End Source File # Begin Source File SOURCE=.\Lpd.cxx # End Source File # Begin Source File SOURCE=.\Markup.cxx # End Source File # Begin Source File SOURCE=.\Message.cxx # End Source File # Begin Source File SOURCE=.\MessageArg.cxx # End Source File # Begin Source File SOURCE=.\MessageEventHandler.cxx # End Source File # Begin Source File SOURCE=.\MessageFormatter.cxx # End Source File # Begin Source File SOURCE=.\MessageFormatterMessages.msg !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\MessageFormatterMessages.msg InputName=MessageFormatterMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\MessageFormatterMessages.msg InputName=MessageFormatterMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\MessageReporter.cxx # End Source File # Begin Source File SOURCE=.\MessageReporterMessages.msg !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\MessageReporterMessages.msg InputName=MessageReporterMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\MessageReporterMessages.msg InputName=MessageReporterMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\MessageTable.cxx # End Source File # Begin Source File SOURCE=.\ModeInfo.cxx # End Source File # Begin Source File SOURCE=.\Notation.cxx # End Source File # Begin Source File SOURCE=.\NotationStorage.cxx # End Source File # Begin Source File SOURCE=.\NumericCharRefOrigin.cxx # End Source File # Begin Source File SOURCE=.\OffsetOrderedList.cxx # End Source File # Begin Source File SOURCE=.\OpenElement.cxx # End Source File # Begin Source File SOURCE=.\OutputByteStream.cxx # End Source File # Begin Source File SOURCE=.\OutputCharStream.cxx # End Source File # Begin Source File SOURCE=.\OutputState.cxx # End Source File # Begin Source File SOURCE=.\Param.cxx # End Source File # Begin Source File SOURCE=.\parseAttribute.cxx # End Source File # Begin Source File SOURCE=.\parseCommon.cxx # End Source File # Begin Source File SOURCE=.\parseDecl.cxx # End Source File # Begin Source File SOURCE=.\parseInstance.cxx # End Source File # Begin Source File SOURCE=.\parseMode.cxx # End Source File # Begin Source File SOURCE=.\parseParam.cxx # End Source File # Begin Source File SOURCE=.\Parser.cxx # End Source File # Begin Source File SOURCE=.\parser_inst.cxx # ADD CPP /Yu"splib.h" # End Source File # Begin Source File SOURCE=.\parser_inst.m4 !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\parser_inst.m4 InputName=parser_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\parser_inst.m4 InputName=parser_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\ParserApp.cxx # End Source File # Begin Source File SOURCE=.\ParserAppMessages.msg !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\ParserAppMessages.msg InputName=ParserAppMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\ParserAppMessages.msg InputName=ParserAppMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\ParserEventGeneratorKit.cxx # End Source File # Begin Source File SOURCE=.\ParserMessages.cxx # End Source File # Begin Source File SOURCE=.\ParserMessages.msg !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\ParserMessages.msg InputName=ParserMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\ParserMessages.msg InputName=ParserMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\ParserOptions.cxx # End Source File # Begin Source File SOURCE=.\ParserState.cxx # End Source File # Begin Source File SOURCE=.\parseSd.cxx # End Source File # Begin Source File SOURCE=.\Partition.cxx # End Source File # Begin Source File SOURCE=.\PosixStorage.cxx # End Source File # Begin Source File SOURCE=.\PosixStorageMessages.msg !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\PosixStorageMessages.msg InputName=PosixStorageMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\PosixStorageMessages.msg InputName=PosixStorageMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\Recognizer.cxx # End Source File # Begin Source File SOURCE=.\RewindStorageObject.cxx # End Source File # Begin Source File SOURCE=.\Sd.cxx # End Source File # Begin Source File SOURCE=.\SdText.cxx # End Source File # Begin Source File SOURCE=.\SearchResultMessageArg.cxx # End Source File # Begin Source File SOURCE=.\SGMLApplication.cxx # End Source File # Begin Source File SOURCE=.\SgmlParser.cxx # End Source File # Begin Source File SOURCE=.\ShortReferenceMap.cxx # End Source File # Begin Source File SOURCE=.\SJISCodingSystem.cxx # End Source File # Begin Source File SOURCE=.\SOEntityCatalog.cxx # End Source File # Begin Source File SOURCE=.\splib.cxx # ADD CPP /Yc"splib.h" # End Source File # Begin Source File SOURCE=.\StdioStorage.cxx # End Source File # Begin Source File SOURCE=.\StdioStorageMessages.msg !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\StdioStorageMessages.msg InputName=StdioStorageMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\StdioStorageMessages.msg InputName=StdioStorageMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\StorageManager.cxx # End Source File # Begin Source File SOURCE=.\StringVectorMessageArg.cxx # End Source File # Begin Source File SOURCE=.\Syntax.cxx # End Source File # Begin Source File SOURCE=.\Text.cxx # End Source File # Begin Source File SOURCE=.\TokenMessageArg.cxx # End Source File # Begin Source File SOURCE=.\TranslateCodingSystem.cxx # End Source File # Begin Source File SOURCE=.\TrieBuilder.cxx # End Source File # Begin Source File SOURCE=.\TypeId.cxx # End Source File # Begin Source File SOURCE=.\Undo.cxx # End Source File # Begin Source File SOURCE=.\UnicodeCodingSystem.cxx # End Source File # Begin Source File SOURCE=.\UnivCharsetDesc.cxx # End Source File # Begin Source File SOURCE=.\URLStorage.cxx # End Source File # Begin Source File SOURCE=.\URLStorageMessages.msg !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\URLStorageMessages.msg InputName=URLStorageMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\URLStorageMessages.msg InputName=URLStorageMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\UTF8CodingSystem.cxx # End Source File # Begin Source File SOURCE=..\VERSION !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Building version.h InputPath=..\VERSION "version.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f version.h perl -w mkversion.pl $(InputPath)>version.h attrib +r version.h # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Building version.h InputPath=..\VERSION "version.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f version.h perl -w mkversion.pl $(InputPath)>version.h attrib +r version.h # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\Win32CodingSystem.cxx # End Source File # Begin Source File SOURCE=.\WinApp.cxx # End Source File # Begin Source File SOURCE=.\WinInetStorage.cxx # End Source File # Begin Source File SOURCE=.\WinInetStorageMessages.msg !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\WinInetStorageMessages.msg InputName=WinInetStorageMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\WinInetStorageMessages.msg InputName=WinInetStorageMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl -l $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\xentmgr_inst.cxx # ADD CPP /Yu"splib.h" # End Source File # Begin Source File SOURCE=.\xentmgr_inst.m4 !IF "$(CFG)" == "lib - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\xentmgr_inst.m4 InputName=xentmgr_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "lib - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\xentmgr_inst.m4 InputName=xentmgr_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\XMLCodingSystem.cxx # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # Begin Source File SOURCE=..\include\Allocator.h # End Source File # Begin Source File SOURCE=..\include\ArcEngine.h # End Source File # Begin Source File SOURCE=.\ArcEngineMessages.h # End Source File # Begin Source File SOURCE=.\ArcProcessor.h # End Source File # Begin Source File SOURCE=..\include\Attribute.h # End Source File # Begin Source File SOURCE=..\include\Attributed.h # End Source File # Begin Source File SOURCE=.\big5.h # End Source File # Begin Source File SOURCE=..\include\Big5CodingSystem.h # End Source File # Begin Source File SOURCE=..\include\Boolean.h # End Source File # Begin Source File SOURCE=.\CatalogEntry.h # End Source File # Begin Source File SOURCE=.\CatalogMessages.h # End Source File # Begin Source File SOURCE=..\include\CharMap.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\CharMap.h # End Source File # Begin Source File SOURCE=..\include\CharsetDecl.h # End Source File # Begin Source File SOURCE=..\include\CharsetInfo.h # End Source File # Begin Source File SOURCE=..\include\CharsetRegistry.h # End Source File # Begin Source File SOURCE=..\include\CmdLineApp.h # End Source File # Begin Source File SOURCE=.\CmdLineAppMessages.h # End Source File # Begin Source File SOURCE=..\include\CodingSystem.h # End Source File # Begin Source File SOURCE=..\include\CodingSystemKit.h # End Source File # Begin Source File SOURCE=..\include\config.h # End Source File # Begin Source File SOURCE=..\include\ConsoleOutput.h # End Source File # Begin Source File SOURCE=..\include\constant.h # End Source File # Begin Source File SOURCE=..\include\ContentState.h # End Source File # Begin Source File SOURCE=..\include\ContentToken.h # End Source File # Begin Source File SOURCE=..\include\CopyOwner.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\CopyOwner.h # End Source File # Begin Source File SOURCE=..\include\DescriptorManager.h # End Source File # Begin Source File SOURCE=..\include\Dtd.h # End Source File # Begin Source File SOURCE=..\include\ElementType.h # End Source File # Begin Source File SOURCE=..\include\Entity.h # End Source File # Begin Source File SOURCE=..\include\EntityApp.h # End Source File # Begin Source File SOURCE=..\include\EntityCatalog.h # End Source File # Begin Source File SOURCE=..\include\EntityDecl.h # End Source File # Begin Source File SOURCE=..\include\EntityManager.h # End Source File # Begin Source File SOURCE=.\EntityManagerMessages.h # End Source File # Begin Source File SOURCE=.\EquivClass.h # End Source File # Begin Source File SOURCE=..\include\ErrnoMessageArg.h # End Source File # Begin Source File SOURCE=..\include\ErrorCountEventHandler.h # End Source File # Begin Source File SOURCE=..\include\EUCJPCodingSystem.h # End Source File # Begin Source File SOURCE=..\include\Event.h # End Source File # Begin Source File SOURCE=.\generic\EventGenerator.h # End Source File # Begin Source File SOURCE=.\EventQueue.h # End Source File # Begin Source File SOURCE=.\events.h # End Source File # Begin Source File SOURCE=..\include\EventsWanted.h # End Source File # Begin Source File SOURCE=..\include\ExtendEntityManager.h # End Source File # Begin Source File SOURCE=..\include\ExternalId.h # End Source File # Begin Source File SOURCE=..\include\Fixed2CodingSystem.h # End Source File # Begin Source File SOURCE=.\gb2312.h # End Source File # Begin Source File SOURCE=..\include\GenericEventHandler.h # End Source File # Begin Source File SOURCE=.\Group.h # End Source File # Begin Source File SOURCE=..\include\Hash.h # End Source File # Begin Source File SOURCE=..\include\HashTable.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\HashTable.h # End Source File # Begin Source File SOURCE=..\include\HashTableItemBase.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\HashTableItemBase.h # End Source File # Begin Source File SOURCE=.\Id.h # End Source File # Begin Source File SOURCE=..\include\IdentityCodingSystem.h # End Source File # Begin Source File SOURCE=..\include\IList.h # End Source File # Begin Source File SOURCE=..\include\IListBase.h # End Source File # Begin Source File SOURCE=..\include\IListIter.h # End Source File # Begin Source File SOURCE=..\include\IListIterBase.h # End Source File # Begin Source File SOURCE=..\include\InputSource.h # End Source File # Begin Source File SOURCE=..\include\InternalInputSource.h # End Source File # Begin Source File SOURCE=..\include\IQueue.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\IQueue.h # End Source File # Begin Source File SOURCE=..\include\ISet.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\ISet.h # End Source File # Begin Source File SOURCE=..\include\ISetIter.h # End Source File # Begin Source File SOURCE=".\iso646-jis.h" # End Source File # Begin Source File SOURCE=".\iso8859-2.h" # End Source File # Begin Source File SOURCE=".\iso8859-3.h" # End Source File # Begin Source File SOURCE=".\iso8859-4.h" # End Source File # Begin Source File SOURCE=".\iso8859-5.h" # End Source File # Begin Source File SOURCE=".\iso8859-6.h" # End Source File # Begin Source File SOURCE=".\iso8859-7.h" # End Source File # Begin Source File SOURCE=".\iso8859-8.h" # End Source File # Begin Source File SOURCE=".\iso8859-9.h" # End Source File # Begin Source File SOURCE=.\jis0201.h # End Source File # Begin Source File SOURCE=.\jis0208.h # End Source File # Begin Source File SOURCE=.\jis0212.h # End Source File # Begin Source File SOURCE=.\ksc5601.h # End Source File # Begin Source File SOURCE=..\include\Link.h # End Source File # Begin Source File SOURCE=..\include\LinkProcess.h # End Source File # Begin Source File SOURCE=..\include\List.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\List.h # End Source File # Begin Source File SOURCE=..\include\ListIter.h # End Source File # Begin Source File SOURCE=..\include\LiteralStorage.h # End Source File # Begin Source File SOURCE=..\include\Location.h # End Source File # Begin Source File SOURCE=..\include\Lpd.h # End Source File # Begin Source File SOURCE=.\LpdEntityRef.h # End Source File # Begin Source File SOURCE=..\include\macros.h # End Source File # Begin Source File SOURCE=..\include\Markup.h # End Source File # Begin Source File SOURCE=.\MarkupScan.h # End Source File # Begin Source File SOURCE=..\include\Message.h # End Source File # Begin Source File SOURCE=..\include\MessageArg.h # End Source File # Begin Source File SOURCE=..\include\MessageBuilder.h # End Source File # Begin Source File SOURCE=..\include\MessageEventHandler.h # End Source File # Begin Source File SOURCE=..\include\MessageFormatter.h # End Source File # Begin Source File SOURCE=.\MessageFormatterMessages.h # End Source File # Begin Source File SOURCE=..\include\MessageReporter.h # End Source File # Begin Source File SOURCE=.\MessageReporterMessages.h # End Source File # Begin Source File SOURCE=..\include\MessageTable.h # End Source File # Begin Source File SOURCE=..\include\Mode.h # End Source File # Begin Source File SOURCE=.\ModeInfo.h # End Source File # Begin Source File SOURCE=.\Mutex.h # End Source File # Begin Source File SOURCE=..\include\Named.h # End Source File # Begin Source File SOURCE=..\include\NamedResource.h # End Source File # Begin Source File SOURCE=..\include\NamedResourceTable.h # End Source File # Begin Source File SOURCE=..\include\NamedTable.h # End Source File # Begin Source File SOURCE=.\NameToken.h # End Source File # Begin Source File SOURCE=..\include\NCVector.h # End Source File # Begin Source File SOURCE=..\include\Notation.h # End Source File # Begin Source File SOURCE=..\include\NotationStorage.h # End Source File # Begin Source File SOURCE=.\NumericCharRefOrigin.h # End Source File # Begin Source File SOURCE=.\OffsetOrderedList.h # End Source File # Begin Source File SOURCE=..\include\OpenElement.h # End Source File # Begin Source File SOURCE=..\include\Options.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\Options.h # End Source File # Begin Source File SOURCE=..\include\OutputByteStream.h # End Source File # Begin Source File SOURCE=..\include\OutputCharStream.h # End Source File # Begin Source File SOURCE=.\OutputState.h # End Source File # Begin Source File SOURCE=..\include\Owner.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\Owner.h # End Source File # Begin Source File SOURCE=..\include\OwnerTable.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\OwnerTable.h # End Source File # Begin Source File SOURCE=.\Param.h # End Source File # Begin Source File SOURCE=.\Parser.h # End Source File # Begin Source File SOURCE=..\include\ParserApp.h # End Source File # Begin Source File SOURCE=.\ParserAppMessages.h # End Source File # Begin Source File SOURCE=.\generic\ParserEventGeneratorKit.h # End Source File # Begin Source File SOURCE=.\ParserMessages.h # End Source File # Begin Source File SOURCE=..\include\ParserOptions.h # End Source File # Begin Source File SOURCE=.\ParserState.h # End Source File # Begin Source File SOURCE=.\Partition.h # End Source File # Begin Source File SOURCE=..\include\PointerTable.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\PointerTable.h # End Source File # Begin Source File SOURCE=..\include\PosixStorage.h # End Source File # Begin Source File SOURCE=.\PosixStorageMessages.h # End Source File # Begin Source File SOURCE=.\Priority.h # End Source File # Begin Source File SOURCE=..\include\Ptr.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\Ptr.h # End Source File # Begin Source File SOURCE=..\include\RangeMap.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\RangeMap.h # End Source File # Begin Source File SOURCE=.\Recognizer.h # End Source File # Begin Source File SOURCE=..\include\Resource.h # End Source File # Begin Source File SOURCE=..\include\RewindStorageObject.h # End Source File # Begin Source File SOURCE=..\include\rtti.h # End Source File # Begin Source File SOURCE=..\include\Sd.h # End Source File # Begin Source File SOURCE=.\SdFormalError.h # End Source File # Begin Source File SOURCE=..\include\SdText.h # End Source File # Begin Source File SOURCE=..\include\SearchResultMessageArg.h # End Source File # Begin Source File SOURCE=.\generic\SGMLApplication.h # End Source File # Begin Source File SOURCE=..\include\SgmlParser.h # End Source File # Begin Source File SOURCE=..\include\ShortReferenceMap.h # End Source File # Begin Source File SOURCE=..\include\SJISCodingSystem.h # End Source File # Begin Source File SOURCE=..\include\SOEntityCatalog.h # End Source File # Begin Source File SOURCE=.\splib.h # End Source File # Begin Source File SOURCE=.\splibpch.h # End Source File # Begin Source File SOURCE=..\include\sptchar.h # End Source File # Begin Source File SOURCE=.\SrInfo.h # End Source File # Begin Source File SOURCE="..\..\..\Program Files\Microsoft Visual Studio\VC98\Include\SYS\STAT.H" # End Source File # Begin Source File SOURCE=..\include\StdioStorage.h # End Source File # Begin Source File SOURCE=.\StdioStorageMessages.h # End Source File # Begin Source File SOURCE=..\include\StorageManager.h # End Source File # Begin Source File SOURCE=.\StorageObjectPosition.h # End Source File # Begin Source File SOURCE=..\include\StringC.h # End Source File # Begin Source File SOURCE=..\include\StringOf.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\StringOf.h # End Source File # Begin Source File SOURCE=..\include\StringResource.h # End Source File # Begin Source File SOURCE=.\StringVectorMessageArg.h # End Source File # Begin Source File SOURCE=..\include\SubstTable.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\SubstTable.h # End Source File # Begin Source File SOURCE=..\include\Syntax.h # End Source File # Begin Source File SOURCE=..\include\Text.h # End Source File # Begin Source File SOURCE=.\token.h # End Source File # Begin Source File SOURCE=.\TokenMessageArg.h # End Source File # Begin Source File SOURCE=..\include\TranslateCodingSystem.h # End Source File # Begin Source File SOURCE=.\Trie.h # End Source File # Begin Source File SOURCE=.\TrieBuilder.h # End Source File # Begin Source File SOURCE=..\include\TypeId.h # End Source File # Begin Source File SOURCE="..\..\..\Program Files\Microsoft Visual Studio\VC98\Include\SYS\TYPES.H" # End Source File # Begin Source File SOURCE=.\Undo.h # End Source File # Begin Source File SOURCE=..\include\UnicodeCodingSystem.h # End Source File # Begin Source File SOURCE=..\include\UnivCharsetDesc.h # End Source File # Begin Source File SOURCE=..\include\URLStorage.h # End Source File # Begin Source File SOURCE=.\URLStorageMessages.h # End Source File # Begin Source File SOURCE=..\include\UTF8CodingSystem.h # End Source File # Begin Source File SOURCE=..\include\Vector.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\Vector.h # End Source File # Begin Source File SOURCE=.\version.h # End Source File # Begin Source File SOURCE=..\include\Win32CodingSystem.h # End Source File # Begin Source File SOURCE=..\include\WinApp.h # End Source File # Begin Source File SOURCE=..\include\WinInetStorage.h # End Source File # Begin Source File SOURCE=.\WinInetStorageMessages.h # End Source File # Begin Source File SOURCE=..\include\XcharMap.cxx # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=..\include\XcharMap.h # End Source File # Begin Source File SOURCE=..\include\XMLCodingSystem.h # End Source File # Begin Source File SOURCE=..\include\xnew.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # Begin Source File SOURCE=.\ArcEngineMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\CatalogMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\CmdLineAppMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\EntityManagerMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\lib.rc # ADD BASE RSC /l 0x809 /i "lib" # ADD RSC /l 0x809 /i "." /i "lib" # End Source File # Begin Source File SOURCE=.\MessageFormatterMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\MessageReporterMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\ParserAppMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\ParserMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\PosixStorageMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\StdioStorageMessages.rc # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\URLStorageMessages.rc # PROP Exclude_From_Build 1 # End Source File # End Group # End Target # End Project jade-1.2.1/lib/lib.rc100444 764 764 1005 6604607566 12060 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #include "ArcEngineMessages.rc" #include "CatalogMessages.rc" #include "CmdLineAppMessages.rc" #include "EntityManagerMessages.rc" #include "MessageFormatterMessages.rc" #include "MessageReporterMessages.rc" #include "ParserAppMessages.rc" #include "ParserMessages.rc" #include "PosixStorageMessages.rc" #include "StdioStorageMessages.rc" #include "URLStorageMessages.rc" #ifdef SP_WININET #include "WinInetStorageMessages.rc" #endif jade-1.2.1/lib/memmove.c100444 764 764 154 6604607566 12561 0ustar jjcjjc#include void *memmove(void *p1, const void *p2, size_t n) { bcopy(p2, p1, n); return p1; } jade-1.2.1/lib/mkversion.pl100444 764 764 145 6606574410 13313 0ustar jjcjjc#! /usr/bin/perl $version = <>; chop $version; print < &newAttDef) { unsigned specLength = 0; AttributeParameter::Type curParm; if (!parseAttributeParameter(inDecl, 0, curParm, netEnabling)) return 0; while (curParm != AttributeParameter::end) { switch (curParm) { case AttributeParameter::name: { Text text; text.addChars(currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), currentLocation()); size_t nameMarkupIndex; if (currentMarkup()) nameMarkupIndex = currentMarkup()->size() - 1; text.subst(*syntax().generalSubstTable(), syntax().space()); if (!parseAttributeParameter(inDecl, 1, curParm, netEnabling)) return 0; if (curParm == AttributeParameter::vi) { specLength += text.size() + syntax().normsep(); if (!parseAttributeValueSpec(inDecl, text.string(), atts, specLength, newAttDef)) return 0; // setup for next attribute if (!parseAttributeParameter(inDecl, 0, curParm, netEnabling)) return 0; } else { if (currentMarkup()) currentMarkup()->changeToAttributeValue(nameMarkupIndex); if (!handleAttributeNameToken(text, atts, specLength)) return 0; } } break; case AttributeParameter::nameToken: { Text text; text.addChars(currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), currentLocation()); text.subst(*syntax().generalSubstTable(), syntax().space()); if (!handleAttributeNameToken(text, atts, specLength)) return 0; if (!parseAttributeParameter(inDecl, 0, curParm, netEnabling)) return 0; } break; case AttributeParameter::recoverUnquoted: { if (!atts.recoverUnquoted(currentToken(), currentLocation(), *this)) { // Don't treat it as an unquoted attribute value. currentInput()->endToken(1); if (!atts.handleAsUnterminated(*this)) message(ParserMessages::attributeSpecCharacter, StringMessageArg(currentToken())); return 0; } if (!parseAttributeParameter(inDecl, 0, curParm, netEnabling)) return 0; } break; default: CANNOT_HAPPEN(); } } atts.finish(*this); if (specLength > syntax().attsplen()) message(ParserMessages::attsplen, NumberMessageArg(syntax().attsplen()), NumberMessageArg(specLength)); return 1; } Boolean Parser::handleAttributeNameToken(Text &text, AttributeList &atts, unsigned &specLength) { unsigned index; if (!atts.tokenIndex(text.string(), index)) { if (atts.handleAsUnterminated(*this)) return 0; atts.noteInvalidSpec(); message(ParserMessages::noSuchAttributeToken, StringMessageArg(text.string())); } else if (sd().www() && !atts.tokenIndexUnique(text.string(), index)) { atts.noteInvalidSpec(); message(ParserMessages::attributeTokenNotUnique, StringMessageArg(text.string())); } else { if (!sd().attributeOmitName()) message(ParserMessages::attributeNameShorttag); else if (options().warnMissingAttributeName) message(ParserMessages::missingAttributeName); atts.setSpec(index, *this); atts.setValueToken(index, text, *this, specLength); } return 1; } Boolean Parser::parseAttributeValueSpec(Boolean inDecl, const StringC &name, AttributeList &atts, unsigned &specLength, Ptr &newAttDef) { Mode mode = inDecl ? asMode : tagMode; Markup *markup = currentMarkup(); Token token = getToken(mode); if (token == tokenS) { if (markup) { do { markup->addS(currentChar()); token = getToken(mode); } while (token == tokenS); } else { do { token = getToken(mode); } while (token == tokenS); } } unsigned index; if (!atts.attributeIndex(name, index)) { if (!implydefAttlist()) message(ParserMessages::noSuchAttribute, StringMessageArg(name)); if (newAttDef.isNull()) newAttDef = new AttributeDefinitionList(atts.def()); newAttDef ->append(new ImpliedAttributeDefinition(name, new CdataDeclaredValue)); atts.changeDef(newAttDef); index = atts.size() - 1; } atts.setSpec(index, *this); Text text; switch (token) { case tokenUnrecognized: if (reportNonSgmlCharacter()) return 0; // fall through case tokenEtago: case tokenStago: case tokenNestc: message(ParserMessages::unquotedAttributeValue); extendUnquotedAttributeValue(); if (markup) markup->addAttributeValue(currentInput()); text.addChars(currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), currentLocation()); break; case tokenEe: message(ParserMessages::attributeSpecEntityEnd); return 0; case tokenTagc: case tokenDsc: case tokenVi: message(ParserMessages::attributeValueExpected); return 0; case tokenNameStart: case tokenDigit: case tokenLcUcNmchar: if (!sd().attributeValueNotLiteral()) message(ParserMessages::attributeValueShorttag); else if (options().warnAttributeValueNotLiteral) message(ParserMessages::attributeValueNotLiteral); extendNameToken(syntax().litlen() >= syntax().normsep() ? syntax().litlen() - syntax().normsep() : 0, ParserMessages::attributeValueLength); if (markup) markup->addAttributeValue(currentInput()); text.addChars(currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), currentLocation()); break; case tokenLit: case tokenLita: Boolean lita; lita = (token == tokenLita); if (!(atts.tokenized(index) ? parseTokenizedAttributeValueLiteral(lita, text) : parseAttributeValueLiteral(lita, text))) return 0; if (markup) markup->addLiteral(text); break; default: CANNOT_HAPPEN(); } return atts.setValue(index, text, *this, specLength); } Boolean Parser::parseAttributeParameter(Boolean inDecl, Boolean allowVi, AttributeParameter::Type &result, Boolean &netEnabling) { Mode mode = inDecl ? asMode : tagMode; Token token = getToken(mode); Markup *markup = currentMarkup(); if (markup) { while (token == tokenS) { markup->addS(currentChar()); token = getToken(mode); } } else { while (token == tokenS) token = getToken(mode); } switch (token) { case tokenUnrecognized: if (reportNonSgmlCharacter()) return 0; extendUnquotedAttributeValue(); result = AttributeParameter::recoverUnquoted; break; case tokenEe: message(ParserMessages::attributeSpecEntityEnd); return 0; case tokenEtago: case tokenStago: if (!sd().startTagUnclosed()) message(ParserMessages::unclosedStartTagShorttag); result = AttributeParameter::end; currentInput()->ungetToken(); netEnabling = 0; break; case tokenNestc: if (markup) markup->addDelim(Syntax::dNESTC); switch (sd().startTagNetEnable()) { case Sd::netEnableNo: message(ParserMessages::netEnablingStartTagShorttag); break; case Sd::netEnableImmednet: if (getToken(econnetMode) != tokenNet) message(ParserMessages::nestcWithoutNet); currentInput()->ungetToken(); break; case Sd::netEnableAll: break; } netEnabling = 1; result = AttributeParameter::end; break; case tokenTagc: if (markup) markup->addDelim(Syntax::dTAGC); netEnabling = 0; result = AttributeParameter::end; break; case tokenDsc: if (markup) markup->addDelim(Syntax::dDSC); result = AttributeParameter::end; break; case tokenNameStart: extendNameToken(syntax().namelen(), ParserMessages::nameTokenLength); if (markup) markup->addName(currentInput()); result = AttributeParameter::name; break; case tokenDigit: case tokenLcUcNmchar: extendNameToken(syntax().namelen(), ParserMessages::nameTokenLength); if (markup) markup->addName(currentInput()); result = AttributeParameter::nameToken; break; case tokenLit: case tokenLita: message(allowVi ? ParserMessages::attributeSpecLiteral : ParserMessages::attributeSpecNameTokenExpected); return 0; case tokenVi: if (!allowVi) { message(ParserMessages::attributeSpecNameTokenExpected); return 0; } if (markup) markup->addDelim(Syntax::dVI); result = AttributeParameter::vi; break; default: CANNOT_HAPPEN(); } return 1; } void Parser::extendUnquotedAttributeValue() { InputSource *in = currentInput(); size_t length = in->currentTokenLength(); const Syntax &syn = syntax(); for (;;) { Xchar c = in->tokenChar(messenger()); if (syn.isS(c) || !syn.isSgmlChar(c) || c == InputSource::eE || c == syn.delimGeneral(Syntax::dTAGC)[0]) break; length++; } in->endToken(length); } Boolean Parser::parseAttributeValueLiteral(Boolean lita, Text &text) { size_t maxLength = (syntax().litlen() > syntax().normsep() ? syntax().litlen() - syntax().normsep() : 0); if (parseLiteral(lita ? alitaMode : alitMode, aliteMode, maxLength, ParserMessages::attributeValueLength, literalNonSgml | (wantMarkup() ? unsigned(literalDelimInfo) : 0), text)) { if (text.size() == 0 && syntax().normsep() > syntax().litlen()) message(ParserMessages::attributeValueLengthNeg, NumberMessageArg(syntax().normsep() - syntax().litlen())); return 1; } else return 0; } Boolean Parser::parseTokenizedAttributeValueLiteral(Boolean lita, Text &text) { size_t maxLength = (syntax().litlen() > syntax().normsep() ? syntax().litlen() - syntax().normsep() : 0); if (parseLiteral(lita ? talitaMode : talitMode, taliteMode, maxLength, ParserMessages::tokenizedAttributeValueLength, literalSingleSpace | (wantMarkup() ? unsigned(literalDelimInfo) : 0), text)) { if (text.size() == 0 && syntax().normsep() > syntax().litlen()) message(ParserMessages::tokenizedAttributeValueLengthNeg, NumberMessageArg(syntax().normsep() - syntax().litlen())); return 1; } else return 0; } Boolean Parser::skipAttributeSpec() { AttributeParameter::Type parm; Boolean netEnabling; if (!parseAttributeParameter(0, 0, parm, netEnabling)) return 0; while (parm != AttributeParameter::end) { if (parm == AttributeParameter::name) { size_t nameMarkupIndex = 0; if (currentMarkup()) nameMarkupIndex = currentMarkup()->size() - 1; if (!parseAttributeParameter(0, 1, parm, netEnabling)) return 0; if (parm == AttributeParameter::vi) { Token token = getToken(tagMode); while (token == tokenS) { if (currentMarkup()) currentMarkup()->addS(currentChar()); token = getToken(tagMode); } switch (token) { case tokenUnrecognized: if (!reportNonSgmlCharacter()) message(ParserMessages::attributeSpecCharacter, StringMessageArg(currentToken())); return 0; case tokenEe: message(ParserMessages::attributeSpecEntityEnd); return 0; case tokenEtago: case tokenStago: case tokenNestc: case tokenTagc: case tokenDsc: case tokenVi: message(ParserMessages::attributeValueExpected); return 0; case tokenNameStart: case tokenDigit: case tokenLcUcNmchar: if (!sd().attributeValueNotLiteral()) message(ParserMessages::attributeValueShorttag); extendNameToken(syntax().litlen() >= syntax().normsep() ? syntax().litlen() - syntax().normsep() : 0, ParserMessages::attributeValueLength); if (currentMarkup()) currentMarkup()->addAttributeValue(currentInput()); break; case tokenLit: case tokenLita: { Text text; if (!parseLiteral(token == tokenLita ? talitaMode : talitMode, taliteMode, syntax().litlen(), ParserMessages::tokenizedAttributeValueLength, (currentMarkup() ? literalDelimInfo : 0) | literalNoProcess, text)) return 0; if (currentMarkup()) currentMarkup()->addLiteral(text); } break; default: CANNOT_HAPPEN(); } if (!parseAttributeParameter(0, 0, parm, netEnabling)) return 0; } else { if (currentMarkup()) currentMarkup()->changeToAttributeValue(nameMarkupIndex); if (!sd().attributeOmitName()) message(ParserMessages::attributeNameShorttag); } } else { // It's a name token. if (!parseAttributeParameter(0, 0, parm, netEnabling)) return 0; if (!sd().attributeOmitName()) message(ParserMessages::attributeNameShorttag); } } if (netEnabling) message(ParserMessages::startTagGroupNet); return 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/parseCommon.cxx100444 764 764 41737 6604607570 14026 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "Parser.h" #include "token.h" #include "MessageArg.h" #include "ParserMessages.h" #include "constant.h" #include "NumericCharRefOrigin.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Boolean Parser::parseProcessingInstruction() { currentInput()->startToken(); Location location(currentLocation()); StringC buf; for (;;) { Token token = getToken(piMode); if (token == tokenPic) break; switch (token) { case tokenEe: message(ParserMessages::processingInstructionEntityEnd); return 0; case tokenUnrecognized: reportNonSgmlCharacter(); // fall through case tokenChar: buf += *currentInput()->currentTokenStart(); if (buf.size()/2 > syntax().pilen()) { message(ParserMessages::processingInstructionLength, NumberMessageArg(syntax().pilen())); message(ParserMessages::processingInstructionClose); return 0; } break; } } if (buf.size() > syntax().pilen()) message(ParserMessages::processingInstructionLength, NumberMessageArg(syntax().pilen())); if (options().warnPiMissingName) { size_t i = 0; if (buf.size() && syntax().isNameStartCharacter(buf[0])) { for (i = 1; i < buf.size(); i++) if (!syntax().isNameCharacter(buf[i])) break; } if (i == 0 || (i < buf.size() && !syntax().isS(buf[i]))) message(ParserMessages::piMissingName); } noteMarkup(); eventHandler().pi(new (eventAllocator()) ImmediatePiEvent(buf, location)); return 1; } Boolean Parser::parseLiteral(Mode litMode, Mode liteMode, size_t maxLength, const MessageType1 &tooLongMessage, unsigned flags, Text &text) { unsigned startLevel = inputLevel(); Mode currentMode = litMode; // If the literal gets to be longer than this, then we assume // that the closing delimiter has been omitted if we're at the end // of a line and at the starting input level. size_t reallyMaxLength = (maxLength > size_t(-1)/2 ? size_t(-1) : maxLength * 2); text.clear(); Location startLoc(currentLocation()); if (flags & literalDelimInfo) text.addStartDelim(currentLocation()); for (;;) { Token token = getToken(currentMode); switch (token) { case tokenEe: if (inputLevel() == startLevel) { message(ParserMessages::literalLevel); return 0; } text.addEntityEnd(currentLocation()); popInputStack(); if (inputLevel() == startLevel) currentMode = litMode; break; case tokenUnrecognized: if (reportNonSgmlCharacter()) break; message(ParserMessages::literalMinimumData, StringMessageArg(currentToken())); break; case tokenRs: text.ignoreChar(currentChar(), currentLocation()); break; case tokenRe: if (text.size() > reallyMaxLength && inputLevel() == startLevel) { #if 0 message(tooLongMessage, NumberMessageArg(maxLength)); #endif // guess that the closing delimiter has been omitted Messenger::setNextLocation(startLoc); message(ParserMessages::literalClosingDelimiter); return 0; } // fall through case tokenSepchar: if ((flags & literalSingleSpace) && (text.size() == 0 || text.lastChar() == syntax().space())) text.ignoreChar(currentChar(), currentLocation()); else text.addChar(syntax().space(), Location(new ReplacementOrigin(currentLocation(), currentChar()), 0)); break; case tokenSpace: if ((flags & literalSingleSpace) && (text.size() == 0 || text.lastChar() == syntax().space())) text.ignoreChar(currentChar(), currentLocation()); else text.addChar(currentChar(), currentLocation()); break; case tokenCroDigit: case tokenHcroHexDigit: { Char c; Location loc; if (!parseNumericCharRef(token== tokenHcroHexDigit, c, loc)) return 0; Boolean isSgmlChar; if (!translateNumericCharRef(c, isSgmlChar)) break; if (!isSgmlChar) { if (flags & literalNonSgml) text.addNonSgmlChar(c, loc); else message(ParserMessages::numericCharRefLiteralNonSgml, NumberMessageArg(c)); break; } if (flags & literalDataTag) { if (!syntax().isSgmlChar(c)) message(ParserMessages::dataTagPatternNonSgml); else if (syntax().charSet(Syntax::functionChar)->contains(c)) message(ParserMessages::dataTagPatternFunction); } if ((flags & literalSingleSpace) && c == syntax().space() && (text.size() == 0 || text.lastChar() == syntax().space())) text.ignoreChar(c, loc); else text.addChar(c, loc); } break; case tokenCroNameStart: if (!parseNamedCharRef()) return 0; break; case tokenEroGrpo: message(inInstance() ? ParserMessages::eroGrpoStartTag : ParserMessages::eroGrpoProlog); break; case tokenLit: case tokenLita: if (flags & literalDelimInfo) text.addEndDelim(currentLocation(), token == tokenLita); goto done; case tokenPeroNameStart: if (options().warnInternalSubsetLiteralParamEntityRef && inputLevel() == 1) message(ParserMessages::internalSubsetLiteralParamEntityRef); // fall through case tokenEroNameStart: { ConstPtr entity; Ptr origin; if (!parseEntityReference(token == tokenPeroNameStart, (flags & literalNoProcess) ? 2 : 0, entity, origin)) return 0; if (!entity.isNull()) entity->litReference(text, *this, origin, (flags & literalSingleSpace) != 0); if (inputLevel() > startLevel) currentMode = liteMode; } break; case tokenPeroGrpo: message(ParserMessages::peroGrpoProlog); break; case tokenCharDelim: message(ParserMessages::dataCharDelim, StringMessageArg(StringC(currentInput()->currentTokenStart(), currentInput()->currentTokenLength()))); // fall through case tokenChar: if (text.size() > reallyMaxLength && inputLevel() == startLevel && currentChar() == syntax().standardFunction(Syntax::fRE)) { #if 0 message(tooLongMessage, NumberMessageArg(maxLength)); #endif // guess that the closing delimiter has been omitted Messenger::setNextLocation(startLoc); message(ParserMessages::literalClosingDelimiter); return 0; } text.addChar(currentChar(), currentLocation()); break; } } done: if ((flags & literalSingleSpace) && text.size() > 0 && text.lastChar() == syntax().space()) text.ignoreLastChar(); if (text.size() > maxLength) { switch (litMode) { case alitMode: case alitaMode: case talitMode: case talitaMode: if (AttributeValue::handleAsUnterminated(text, *this)) return 0; default: break; } message(tooLongMessage, NumberMessageArg(maxLength)); } return 1; } Boolean Parser::parseNamedCharRef() { if (options().warnNamedCharRef) message(ParserMessages::namedCharRef); InputSource *in = currentInput(); Index startIndex = currentLocation().index(); in->discardInitial(); extendNameToken(syntax().namelen(), ParserMessages::nameLength); Char c; Boolean valid; StringC name; getCurrentToken(syntax().generalSubstTable(), name); if (!syntax().lookupFunctionChar(name, &c)) { message(ParserMessages::functionName, StringMessageArg(name)); valid = 0; } else { valid = 1; if (wantMarkup()) getCurrentToken(name); // the original name } NamedCharRef::RefEndType refEndType; switch (getToken(refMode)) { case tokenRefc: refEndType = NamedCharRef::endRefc; break; case tokenRe: refEndType = NamedCharRef::endRE; if (options().warnRefc) message(ParserMessages::refc); break; default: refEndType = NamedCharRef::endOmitted; if (options().warnRefc) message(ParserMessages::refc); break; } in->startToken(); if (valid) in->pushCharRef(c, NamedCharRef(startIndex, refEndType, name)); return 1; } Boolean Parser::parseNumericCharRef(Boolean isHex, Char &ch, Location &loc) { InputSource *in = currentInput(); Location startLocation = currentLocation(); in->discardInitial(); Boolean valid = 1; Char c = 0; if (isHex) { extendHexNumber(); const Char *lim = in->currentTokenEnd(); for (const Char *p = in->currentTokenStart(); p < lim; p++) { int val = sd().hexDigitWeight(*p); if (c <= charMax/16 && (c *= 16) <= charMax - val) c += val; else { message(ParserMessages::characterNumber, StringMessageArg(currentToken())); valid = 0; break; } } } else { extendNumber(syntax().namelen(), ParserMessages::numberLength); const Char *lim = in->currentTokenEnd(); for (const Char *p = in->currentTokenStart(); p < lim; p++) { int val = sd().digitWeight(*p); if (c <= charMax/10 && (c *= 10) <= charMax - val) c += val; else { message(ParserMessages::characterNumber, StringMessageArg(currentToken())); valid = 0; break; } } } if (valid && !sd().docCharsetDecl().charDeclared(c)) { valid = 0; message(ParserMessages::characterNumber, StringMessageArg(currentToken())); } Owner markupPtr; if (wantMarkup()) { markupPtr = new Markup; markupPtr->addDelim(isHex ? Syntax::dHCRO : Syntax::dCRO); markupPtr->addNumber(in); switch (getToken(refMode)) { case tokenRefc: markupPtr->addDelim(Syntax::dREFC); break; case tokenRe: markupPtr->addRefEndRe(); if (options().warnRefc) message(ParserMessages::refc); break; default: if (options().warnRefc) message(ParserMessages::refc); break; } } else if (options().warnRefc) { if (getToken(refMode) != tokenRefc) message(ParserMessages::refc); } else (void)getToken(refMode); if (valid) { ch = c; loc = Location(new NumericCharRefOrigin(startLocation, currentLocation().index() + currentInput()->currentTokenLength() - startLocation.index(), markupPtr), 0); } return valid; } // Translate a character number in the document character set // into the internal character set. // If it's a non-SGML char (ie described as UNUSED in SGML declaration), // return 1 and set sgmlChar to 0. Boolean Parser::translateNumericCharRef(Char &ch, Boolean &isSgmlChar) { if (sd().internalCharsetIsDocCharset()) { if (options().warnNonSgmlCharRef && !syntax().isSgmlChar(ch)) message(ParserMessages::nonSgmlCharRef); isSgmlChar = 1; return 1; } UnivChar univChar; if (!sd().docCharset().descToUniv(ch, univChar)) { const PublicId *pubid; CharsetDeclRange::Type type; Number n; StringC desc; if (sd().docCharsetDecl().getCharInfo(ch, pubid, type, n, desc)) { if (type == CharsetDeclRange::unused) { if (options().warnNonSgmlCharRef) message(ParserMessages::nonSgmlCharRef); isSgmlChar = 0; return 1; } } else CANNOT_HAPPEN(); if (type == CharsetDeclRange::string) message(ParserMessages::numericCharRefUnknownDesc, NumberMessageArg(ch), StringMessageArg(desc)); else message(ParserMessages::numericCharRefUnknownBase, NumberMessageArg(ch), NumberMessageArg(n), StringMessageArg(pubid->string())); } else { WideChar resultChar; ISet resultChars; switch (sd().internalCharset().univToDesc(univChar, resultChar, resultChars)) { case 1: if (resultChar <= charMax) { isSgmlChar = 1; ch = Char(resultChar); return 1; } // fall through case 2: message(ParserMessages::numericCharRefBadInternal, NumberMessageArg(ch)); break; default: message(ParserMessages::numericCharRefNoInternal, NumberMessageArg(ch)); break; } } return 0; } // ignoreLevel: 0 means don't ignore; // 1 means parse name group and ignore if inactive // 2 means ignore Boolean Parser::parseEntityReference(Boolean isParameter, int ignoreLevel, ConstPtr &entity, Ptr &origin) { InputSource *in = currentInput(); Location startLocation(in->currentLocation()); Owner markupPtr; if (wantMarkup()) { markupPtr = new Markup; markupPtr->addDelim(isParameter ? Syntax::dPERO : Syntax::dERO); } if (ignoreLevel == 1) { Markup savedMarkup; Markup *savedCurrentMarkup = currentMarkup(); if (savedCurrentMarkup) savedCurrentMarkup->swap(savedMarkup); Location savedMarkupLocation(markupLocation()); startMarkup(markupPtr != 0, startLocation); if (markupPtr) { markupPtr->addDelim(Syntax::dGRPO); markupPtr->swap(*currentMarkup()); } Boolean ignore; if (!parseEntityReferenceNameGroup(ignore)) return 0; if (markupPtr) currentMarkup()->swap(*markupPtr); startMarkup(savedCurrentMarkup != 0, savedMarkupLocation); if (savedCurrentMarkup) savedMarkup.swap(*currentMarkup()); if (!ignore) ignoreLevel = 0; in->startToken(); Xchar c = in->tokenChar(messenger()); if (!syntax().isNameStartCharacter(c)) { message(ParserMessages::entityReferenceMissingName); return 0; } } in->discardInitial(); if (isParameter) extendNameToken(syntax().penamelen(), ParserMessages::parameterEntityNameLength); else extendNameToken(syntax().namelen(), ParserMessages::nameLength); StringC &name = nameBuffer(); getCurrentToken(syntax().entitySubstTable(), name); if (ignoreLevel) entity = new IgnoredEntity(name, isParameter ? Entity::parameterEntity : Entity::generalEntity); else { entity = lookupEntity(isParameter, name, startLocation, 1); if (entity.isNull()) { if (haveApplicableDtd()) { if (!isParameter) { entity = createUndefinedEntity(name, startLocation); message(ParserMessages::entityUndefined, StringMessageArg(name)); } else message(ParserMessages::parameterEntityUndefined, StringMessageArg(name)); } else message(ParserMessages::entityApplicableDtd); } else if (entity->defaulted() && options().warnDefaultEntityReference) message(ParserMessages::defaultEntityReference, StringMessageArg(name)); } if (markupPtr) { markupPtr->addName(in); switch (getToken(refMode)) { case tokenRefc: markupPtr->addDelim(Syntax::dREFC); break; case tokenRe: markupPtr->addRefEndRe(); if (options().warnRefc) message(ParserMessages::refc); break; default: if (options().warnRefc) message(ParserMessages::refc); break; } } else if (options().warnRefc) { if (getToken(refMode) != tokenRefc) message(ParserMessages::refc); } else (void)getToken(refMode); if (!entity.isNull()) origin = EntityOrigin::make(internalAllocator(), entity, startLocation, currentLocation().index() + currentInput()->currentTokenLength() - startLocation.index(), markupPtr); else origin = (EntityOrigin *)0; return 1; } Boolean Parser::parseComment(Mode mode) { Location startLoc(currentLocation()); Markup *markup = currentMarkup(); if (markup) markup->addCommentStart(); Token token; while ((token = getToken(mode)) != tokenCom) switch (token) { case tokenUnrecognized: if (!reportNonSgmlCharacter()) message(ParserMessages::sdCommentSignificant, StringMessageArg(currentToken())); break; case tokenEe: message(ParserMessages::commentEntityEnd, startLoc); return 0; default: if (markup) markup->addCommentChar(currentChar()); break; } return 1; } void Parser::extendNameToken(size_t maxLength, const MessageType1 &tooLongMessage) { InputSource *in = currentInput(); size_t length = in->currentTokenLength(); const Syntax &syn = syntax(); while (syn.isNameCharacter(in->tokenChar(messenger()))) length++; if (length > maxLength) message(tooLongMessage, NumberMessageArg(maxLength)); in->endToken(length); } void Parser::extendNumber(size_t maxLength, const MessageType1 &tooLongMessage) { InputSource *in = currentInput(); size_t length = in->currentTokenLength(); while (syntax().isDigit(in->tokenChar(messenger()))) length++; if (length > maxLength) message(tooLongMessage, NumberMessageArg(maxLength)); in->endToken(length); } void Parser::extendHexNumber() { InputSource *in = currentInput(); size_t length = in->currentTokenLength(); while (syntax().isHexDigit(in->tokenChar(messenger()))) length++; if (length > syntax().namelen()) message(ParserMessages::hexNumberLength, NumberMessageArg(syntax().namelen())); in->endToken(length); } Boolean Parser::reportNonSgmlCharacter() { // In scanSuppress mode the non-SGML character will have been read. Char c = currentInput()->currentTokenLength() ? currentChar() : getChar(); if (!syntax().isSgmlChar(c)) { message(ParserMessages::nonSgmlCharacter, NumberMessageArg(c)); return 1; } return 0; } void Parser::extendS() { InputSource *in = currentInput(); size_t length = in->currentTokenLength(); while (syntax().isS(in->tokenChar(messenger()))) length++; in->endToken(length); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/parseDecl.cxx100444 764 764 310356 6605103722 13450 0ustar jjcjjc// Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. // Prolog, dtd and declaration parsing. #include "splib.h" #include "Parser.h" #include "Param.h" #include "Markup.h" #include "ParserMessages.h" #include "MessageArg.h" #include "TokenMessageArg.h" #include "token.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif static const AllowedParams allowMdc(Param::mdc); static const AllowedParams allowName(Param::name); static const AllowedParams allowParamLiteral(Param::paramLiteral); static const AllowedParams allowNameNameGroup(Param::name, Param::nameGroup); static const AllowedParams allowDsoMdc(Param::dso, Param::mdc); static AllowedParams allowNameMdc(Param::name, Param::mdc); static AllowedParams allowExplicitLinkRuleMdc(Param::mdc, Param::name, Param::nameGroup, Param::indicatedReservedName + Syntax::rIMPLIED); static AllowedParams allowNameNameGroupMdc(Param::name, Param::nameGroup, Param::mdc); static const AllowedParams allowLinkSetSpec(Param::name, Param::indicatedReservedName + Syntax::rINITIAL, Param::indicatedReservedName + Syntax::rEMPTY, Param::indicatedReservedName + Syntax::rRESTORE); void Parser::doProlog() { const unsigned maxTries = 10; unsigned tries = 0; do { if (cancelled()) { allDone(); return; } Token token = getToken(proMode); switch (token) { case tokenUnrecognized: if (reportNonSgmlCharacter()) break; if (hadDtd()) { currentInput()->ungetToken(); endProlog(); return; } { StringC gi; if (lookingAtStartTag(gi)) { currentInput()->ungetToken(); implyDtd(gi); return; } } if (++tries >= maxTries) { message(ParserMessages::notSgml); giveUp(); return; } message(ParserMessages::prologCharacter, StringMessageArg(currentToken())); prologRecover(); break; case tokenEe: if (hadDtd()) { endProlog(); return; } message(ParserMessages::documentEndProlog); allDone(); return; case tokenMdoMdc: // empty comment emptyCommentDecl(); break; case tokenMdoCom: if (!parseCommentDecl()) prologRecover(); break; case tokenMdoNameStart: setPass2Start(); if (startMarkup(eventsWanted().wantPrologMarkup(), currentLocation())) currentMarkup()->addDelim(Syntax::dMDO); Syntax::ReservedName name; if (parseDeclarationName(&name)) { switch (name) { case Syntax::rDOCTYPE: if (!parseDoctypeDeclStart()) giveUp(); return; case Syntax::rLINKTYPE: if (!parseLinktypeDeclStart()) giveUp(); return; case Syntax::rELEMENT: case Syntax::rATTLIST: case Syntax::rENTITY: case Syntax::rNOTATION: case Syntax::rSHORTREF: case Syntax::rUSEMAP: case Syntax::rUSELINK: case Syntax::rLINK: case Syntax::rIDLINK: message(ParserMessages::prologDeclaration, StringMessageArg(syntax().reservedName(name))); if (!hadDtd()) tries++; prologRecover(); break; default: message(ParserMessages::noSuchDeclarationType, StringMessageArg(syntax().reservedName(name))); prologRecover(); break; } } else prologRecover(); break; case tokenPio: if (!parseProcessingInstruction()) prologRecover(); break; case tokenS: if (eventsWanted().wantPrologMarkup()) { extendS(); eventHandler().sSep(new (eventAllocator()) SSepEvent(currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), currentLocation(), 1)); } break; default: CANNOT_HAPPEN(); } } while (eventQueueEmpty()); } void Parser::endProlog() { if (baseDtd().isNull() #if 0 || baseDtd()->documentElementType()->definition()->undefined() #endif ) { // We could continue, but there's not a lot of point. giveUp(); return; } if (maybeStartPass2()) setPhase(prologPhase); else { if (inputLevel() == 0) { allDone(); return; } if (pass2()) checkEntityStability(); setPhase(instanceStartPhase); startInstance(); ConstPtr lpd; Vector simpleLinkAtts; Vector simpleLinkNames; for (size_t i = 0; i < nActiveLink(); i++) if (activeLpd(i).type() == Lpd::simpleLink) { const SimpleLpd &lpd = (SimpleLpd &)activeLpd(i); simpleLinkNames.push_back(lpd.name()); simpleLinkAtts.resize(simpleLinkAtts.size() + 1); simpleLinkAtts.back().init(lpd.attributeDef()); simpleLinkAtts.back().finish(*this); } else lpd = (ComplexLpd *)&activeLpd(i); eventHandler().endProlog(new (eventAllocator()) EndPrologEvent(baseDtd(), lpd, simpleLinkNames, simpleLinkAtts, currentLocation())); } } void Parser::prologRecover() { unsigned skipCount = 0; const unsigned skipMax = 250; for (;;) { Token token = getToken(proMode); skipCount++; if (token == tokenUnrecognized) { token = getToken(mdMode); if (token == tokenMdc) { token = getToken(proMode); if (token == tokenS) return; } } switch (token) { case tokenUnrecognized: (void)getChar(); break; case tokenEe: return; case tokenMdoMdc: case tokenMdoCom: case tokenMdoNameStart: case tokenPio: currentInput()->ungetToken(); return; case tokenS: if (currentChar() == syntax().standardFunction(Syntax::fRE) && skipCount >= skipMax) return; default: break; } } } void Parser::doDeclSubset() { do { if (cancelled()) { allDone(); return; } Token token = getToken(currentMode()); unsigned startLevel = inputLevel(); Boolean inDtd = !haveDefLpd(); switch (token) { case tokenUnrecognized: if (reportNonSgmlCharacter()) break; message(ParserMessages::declSubsetCharacter, StringMessageArg(currentToken())); declSubsetRecover(startLevel); break; case tokenEe: if (inputLevel() == specialParseInputLevel()) { // FIXME have separate messages for each type of special parse message(ParserMessages::specialParseEntityEnd); } if (eventsWanted().wantPrologMarkup()) eventHandler().entityEnd(new (eventAllocator()) EntityEndEvent(currentLocation())); if (inputLevel() == 2) { const EntityDecl *e = currentLocation().origin()->entityDecl(); if (e && (e->declType() == EntityDecl::doctype || e->declType() == EntityDecl::linktype)) { // popInputStack may destroy e Boolean fake = e->defLocation().origin().isNull(); popInputStack(); if (!(inDtd ? parseDoctypeDeclEnd(fake) : parseLinktypeDeclEnd())) ; // FIXME recover setPhase(prologPhase); return; } } if (inputLevel() == 1) { if (finalPhase() == declSubsetPhase) { checkDtd(defDtd()); endDtd(); } else // Give message before popping stack. message(inDtd ? ParserMessages::documentEndDtdSubset : ParserMessages::documentEndLpdSubset); popInputStack(); allDone(); } else popInputStack(); return; case tokenDsc: // end of declaration subset // FIXME what's the right location? if (!referenceDsEntity(currentLocation())) { if (!(inDtd ? parseDoctypeDeclEnd() : parseLinktypeDeclEnd())) ; // FIXME recover setPhase(prologPhase); } return; case tokenMdoNameStart: // named markup declaration if (startMarkup(eventsWanted().wantPrologMarkup(), currentLocation())) currentMarkup()->addDelim(Syntax::dMDO); Syntax::ReservedName name; Boolean result; if (parseDeclarationName(&name, inDtd && !options().errorAfdr)) { switch (name) { case Syntax::rANY: // used for entity; Ptr origin; if (parseEntityReference(1, token == tokenPeroGrpo, entity, origin)) { if (!entity.isNull()) entity->dsReference(*this, origin); } else declSubsetRecover(startLevel); } break; case tokenPio: // processing instruction if (!parseProcessingInstruction()) declSubsetRecover(startLevel); break; case tokenS: // white space if (eventsWanted().wantPrologMarkup()) { extendS(); eventHandler().sSep(new (eventAllocator()) SSepEvent(currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), currentLocation(), 1)); } break; case tokenIgnoredChar: // from an ignored marked section if (eventsWanted().wantPrologMarkup()) eventHandler().ignoredChars(new (eventAllocator()) IgnoredCharsEvent(currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), currentLocation(), 1)); break; case tokenRe: case tokenRs: case tokenCroNameStart: case tokenCroDigit: case tokenHcroHexDigit: case tokenEroNameStart: case tokenEroGrpo: case tokenChar: // these can occur in a cdata or rcdata marked section message(ParserMessages::dataMarkedSectionDeclSubset); declSubsetRecover(startLevel); break; default: CANNOT_HAPPEN(); } } while (eventQueueEmpty()); } void Parser::declSubsetRecover(unsigned startLevel) { for (;;) { Token token = getToken(currentMode()); switch (token) { case tokenUnrecognized: (void)getChar(); break; case tokenEe: if (inputLevel() <= startLevel) return; popInputStack(); break; case tokenMdoCom: case tokenDsc: case tokenMdoNameStart: case tokenMdoMdc: case tokenMdoDso: case tokenMscMdc: case tokenPio: if (inputLevel() == startLevel) { currentInput()->ungetToken(); return; } break; default: break; } } } Boolean Parser::lookingAtStartTag(StringC &gi) { // This is harder than might be expected since we may not have compiled // the recognizers for the instance yet. const StringC &stago = instanceSyntax().delimGeneral(Syntax::dSTAGO); for (size_t i = currentInput()->currentTokenLength(); i < stago.size(); i++) if (currentInput()->tokenChar(messenger()) == InputSource::eE) return 0; StringC delim; getCurrentToken(instanceSyntax().generalSubstTable(), delim); if (delim != stago) return 0; Xchar c = currentInput()->tokenChar(messenger()); if (!instanceSyntax().isNameStartCharacter(c)) return 0; do { gi += (*instanceSyntax().generalSubstTable())[(Char)c]; c = currentInput()->tokenChar(messenger()); } while (instanceSyntax().isNameCharacter(c)); return 1; } Boolean Parser::parseDeclarationName(Syntax::ReservedName *result, Boolean allowAfdr) { currentInput()->discardInitial(); extendNameToken(syntax().namelen(), ParserMessages::nameLength); StringC &name = nameBuffer(); getCurrentToken(syntax().generalSubstTable(), name); if (!syntax().lookupReservedName(name, result)) { if (allowAfdr && name == sd().execToInternal("AFDR")) { *result = Syntax::rANY; if (currentMarkup()) currentMarkup()->addName(currentInput()); } else { message(ParserMessages::noSuchDeclarationType, StringMessageArg(name)); return 0; } } else if (currentMarkup()) currentMarkup()->addReservedName(*result, currentInput()); return 1; } Boolean Parser::parseElementDecl() { unsigned declInputLevel = inputLevel(); Param parm; if (!parseParam(allowNameNameGroup, declInputLevel, parm)) return 0; Vector nameVector; if (parm.type == Param::nameGroup) { parm.nameTokenVector.swap(nameVector); if (options().warnElementGroupDecl) message(ParserMessages::elementGroupDecl); } else { nameVector.resize(1); parm.token.swap(nameVector[0].name); } static AllowedParams allowRankOmissionContent(Param::number, Param::reservedName + Syntax::rO, Param::minus, Param::reservedName + Syntax::rCDATA, Param::reservedName + Syntax::rRCDATA, Param::reservedName + Syntax::rEMPTY, Param::reservedName + Syntax::rANY, Param::modelGroup); if (!parseParam(allowRankOmissionContent, declInputLevel, parm)) return 0; StringC rankSuffix; Vector elements(nameVector.size()); Vector rankStems; Vector constRankStems; size_t i; if (parm.type == Param::number) { if (options().warnRank) message(ParserMessages::rank); parm.token.swap(rankSuffix); rankStems.resize(nameVector.size()); constRankStems.resize(nameVector.size()); for (i = 0; i < elements.size(); i++) { StringC name(nameVector[i].name); name += rankSuffix; if (name.size() > syntax().namelen() && nameVector[i].name.size() <= syntax().namelen()) message(ParserMessages::genericIdentifierLength, NumberMessageArg(syntax().namelen())); elements[i] = lookupCreateElement(name); rankStems[i] = lookupCreateRankStem(nameVector[i].name); constRankStems[i] = rankStems[i]; } static AllowedParams allowOmissionContent(Param::reservedName + Syntax::rO, Param::minus, Param::reservedName + Syntax::rCDATA, Param::reservedName + Syntax::rRCDATA, Param::reservedName + Syntax::rEMPTY, Param::reservedName + Syntax::rANY, Param::modelGroup); Token token = getToken(mdMinusMode); if (token == tokenNameStart) message(ParserMessages::psRequired); currentInput()->ungetToken(); if (!parseParam(allowOmissionContent, declInputLevel, parm)) return 0; } else { for (i = 0; i < elements.size(); i++) elements[i] = lookupCreateElement(nameVector[i].name); } for (i = 0; i < elements.size(); i++) if (defDtd().lookupRankStem(elements[i]->name()) && validate()) message(ParserMessages::rankStemGenericIdentifier, StringMessageArg(elements[i]->name())); unsigned char omitFlags = 0; if (parm.type == Param::minus || parm.type == Param::reservedName + Syntax::rO) { if (options().warnMinimizationParam) message(ParserMessages::minimizationParam); omitFlags |= ElementDefinition::omitSpec; if (parm.type != Param::minus) omitFlags |= ElementDefinition::omitStart; static AllowedParams allowOmission(Param::reservedName + Syntax::rO, Param::minus); if (!parseParam(allowOmission, declInputLevel, parm)) return 0; if (parm.type != Param::minus) omitFlags |= ElementDefinition::omitEnd; static AllowedParams allowContent(Param::reservedName + Syntax::rCDATA, Param::reservedName + Syntax::rRCDATA, Param::reservedName + Syntax::rEMPTY, Param::reservedName + Syntax::rANY, Param::modelGroup); if (!parseParam(allowContent, declInputLevel, parm)) return 0; } else { if (sd().omittag()) message(ParserMessages::missingTagMinimization); } Ptr def; switch (parm.type) { case Param::reservedName + Syntax::rCDATA: def = new ElementDefinition(markupLocation(), defDtd().allocElementDefinitionIndex(), omitFlags, ElementDefinition::cdata); if (!parseParam(allowMdc, declInputLevel, parm)) return 0; if (options().warnCdataContent) message(ParserMessages::cdataContent); break; case Param::reservedName + Syntax::rRCDATA: def = new ElementDefinition(markupLocation(), defDtd().allocElementDefinitionIndex(), omitFlags, ElementDefinition::rcdata); if (!parseParam(allowMdc, declInputLevel, parm)) return 0; if (options().warnRcdataContent) message(ParserMessages::rcdataContent); break; case Param::reservedName + Syntax::rEMPTY: def = new ElementDefinition(markupLocation(), defDtd().allocElementDefinitionIndex(), omitFlags, ElementDefinition::empty); if ((omitFlags & ElementDefinition::omitSpec) && !(omitFlags & ElementDefinition::omitEnd) && options().warnShould) message(ParserMessages::emptyOmitEndTag); if (!parseParam(allowMdc, declInputLevel, parm)) return 0; break; case Param::reservedName + Syntax::rANY: def = new ElementDefinition(markupLocation(), defDtd().allocElementDefinitionIndex(), omitFlags, ElementDefinition::any); if (!parseExceptions(declInputLevel, def)) return 0; break; case Param::modelGroup: { unsigned long cnt = parm.modelGroupPtr->grpgtcnt(); // The outermost model group isn't formally a content token. if (cnt - 1 > syntax().grpgtcnt()) message(ParserMessages::grpgtcnt, NumberMessageArg(syntax().grpgtcnt())); Owner modelGroup(new CompiledModelGroup(parm.modelGroupPtr)); Vector ambiguities; Boolean pcdataUnreachable; modelGroup->compile(currentDtd().nElementTypeIndex(), ambiguities, pcdataUnreachable); if (pcdataUnreachable && options().warnMixedContent) message(ParserMessages::pcdataUnreachable); if (validate()) { for (i = 0; i < ambiguities.size(); i++) { const ContentModelAmbiguity &a = ambiguities[i]; reportAmbiguity(a.from, a.to1, a.to2, a.andDepth); } } def = new ElementDefinition(markupLocation(), defDtd().allocElementDefinitionIndex(), omitFlags, ElementDefinition::modelGroup, modelGroup); if (!parseExceptions(declInputLevel, def)) return 0; } break; } if (rankSuffix.size() > 0) def->setRank(rankSuffix, constRankStems); ConstPtr constDef(def); for (i = 0; i < elements.size(); i++) { if (elements[i]->definition() != 0) { if (validate()) message(ParserMessages::duplicateElementDefinition, StringMessageArg(elements[i]->name())); } else { elements[i]->setElementDefinition(constDef, i); if (!elements[i]->attributeDef().isNull()) checkElementAttribute(elements[i]); } if (rankStems.size() > 0) rankStems[i]->addDefinition(constDef); } if (currentMarkup()) { Vector v(elements.size()); for (i = 0; i < elements.size(); i++) v[i] = elements[i]; eventHandler().elementDecl(new (eventAllocator()) ElementDeclEvent(v, currentDtdPointer(), markupLocation(), currentMarkup())); } return 1; } void Parser::reportAmbiguity(const LeafContentToken *from, const LeafContentToken *to1, const LeafContentToken *to2, unsigned ambigAndDepth) { StringC toName; const ElementType *toType = to1->elementType(); if (toType) toName = toType->name(); else { toName = syntax().delimGeneral(Syntax::dRNI); toName += syntax().reservedName(Syntax::rPCDATA); } unsigned to1Index = to1->typeIndex() + 1; unsigned to2Index = to2->typeIndex() + 1; if (from->isInitial()) message(ParserMessages::ambiguousModelInitial, StringMessageArg(toName), OrdinalMessageArg(to1Index), OrdinalMessageArg(to2Index)); else { StringC fromName; const ElementType *fromType = from->elementType(); if (fromType) fromName = fromType->name(); else { fromName = syntax().delimGeneral(Syntax::dRNI); fromName += syntax().reservedName(Syntax::rPCDATA); } unsigned fromIndex = from->typeIndex() + 1; unsigned andMatches = from->andDepth() - ambigAndDepth; if (andMatches == 0) message(ParserMessages::ambiguousModel, StringMessageArg(fromName), OrdinalMessageArg(fromIndex), StringMessageArg(toName), OrdinalMessageArg(to1Index), OrdinalMessageArg(to2Index)); else if (andMatches == 1) message(ParserMessages::ambiguousModelSingleAnd, StringMessageArg(fromName), OrdinalMessageArg(fromIndex), StringMessageArg(toName), OrdinalMessageArg(to1Index), OrdinalMessageArg(to2Index)); else message(ParserMessages::ambiguousModelMultipleAnd, StringMessageArg(fromName), OrdinalMessageArg(fromIndex), NumberMessageArg(andMatches), StringMessageArg(toName), OrdinalMessageArg(to1Index), OrdinalMessageArg(to2Index)); } } // Check the compatibility of the attribute definition with // the element definition. void Parser::checkElementAttribute(const ElementType *e, size_t checkFrom) { if (!validate()) return; const AttributeDefinitionList *attDef = e->attributeDef().pointer(); Boolean conref = 0; ASSERT(e != 0); const ElementDefinition *edef = e->definition(); ASSERT(edef != 0); ASSERT(attDef != 0); size_t attDefLength = attDef->size(); for (size_t i = checkFrom; i < attDefLength; i++) { const AttributeDefinition *p = attDef->def(i); if (p->isConref()) conref = 1; if (p->isNotation() && edef->declaredContent() == ElementDefinition::empty) message(ParserMessages::notationEmpty, StringMessageArg(e->name())); } if (conref) { #if 0 if (edef->omittedTagSpec() && !edef->canOmitEndTag() && options().warnShould) message(ParserMessages::conrefOmitEndTag, StringMessageArg(e->name())); #endif if (edef->declaredContent() == ElementDefinition::empty) message(ParserMessages::conrefEmpty, StringMessageArg(e->name())); } } ElementType *Parser::lookupCreateElement(const StringC &name) { ElementType *e = defDtd().lookupElementType(name); if (!e) { if (haveDefLpd()) message(ParserMessages::noSuchSourceElement, StringMessageArg(name)); else { e = new ElementType(name, defDtd().allocElementTypeIndex()); defDtd().insertElementType(e); } } return e; } RankStem *Parser::lookupCreateRankStem(const StringC &name) { RankStem *r = defDtd().lookupRankStem(name); if (!r) { r = new RankStem(name, defDtd().nRankStem()); defDtd().insertRankStem(r); const ElementType *e = defDtd().lookupElementType(name); if (e && e->definition() != 0) message(ParserMessages::rankStemGenericIdentifier, StringMessageArg(name)); } return r; } Boolean Parser::parseExceptions(unsigned declInputLevel, Ptr &def) { Param parm; static AllowedParams allowExceptionsMdc(Param::mdc, Param::exclusions, Param::inclusions); if (!parseParam(allowExceptionsMdc, declInputLevel, parm)) return 0; if (parm.type == Param::exclusions) { if (options().warnExclusion) message(ParserMessages::exclusion); def->setExclusions(parm.elementVector); static AllowedParams allowInclusionsMdc(Param::mdc, Param::inclusions); if (!parseParam(allowInclusionsMdc, declInputLevel, parm)) return 0; } if (parm.type == Param::inclusions) { if (options().warnInclusion) message(ParserMessages::inclusion); def->setInclusions(parm.elementVector); size_t nI = def->nInclusions(); size_t nE = def->nExclusions(); if (nE) { for (size_t i = 0; i < nI; i++) { const ElementType *e = def->inclusion(i); for (size_t j = 0; j < nE; j++) if (def->exclusion(j) == e) message(ParserMessages::excludeIncludeSame, StringMessageArg(e->name())); } } if (!parseParam(allowMdc, declInputLevel, parm)) return 0; } return 1; } Boolean Parser::parseAttlistDecl() { unsigned declInputLevel = inputLevel(); Param parm; size_t attcnt = 0; size_t idIndex = size_t(-1); size_t notationIndex = size_t(-1); Boolean anyCurrent = 0; Boolean isNotation; Vector attributed; if (!parseAttributed(declInputLevel, parm, attributed, isNotation)) return 0; Vector > defs; if (!parseParam(sd().www() ? allowNameMdc : allowName, declInputLevel, parm)) return 0; while (parm.type != Param::mdc) { StringC attributeName; parm.token.swap(attributeName); attcnt++; Boolean duplicate = 0; size_t i; for (i = 0; i < defs.size(); i++) if (defs[i]->name() == attributeName) { message(ParserMessages::duplicateAttributeDef, StringMessageArg(attributeName)); duplicate = 1; break; } Owner declaredValue; if (!parseDeclaredValue(declInputLevel, isNotation, parm, declaredValue)) return 0; if (!duplicate) { if (declaredValue->isId()) { if (idIndex != size_t(-1)) message(ParserMessages::multipleIdAttributes, StringMessageArg(defs[idIndex]->name())); idIndex = defs.size(); } else if (declaredValue->isNotation()) { if (notationIndex != size_t(-1)) message(ParserMessages::multipleNotationAttributes, StringMessageArg(defs[notationIndex]->name())); notationIndex = defs.size(); } } const Vector *tokensPtr = declaredValue->getTokens(); if (tokensPtr) { size_t nTokens = tokensPtr->size(); if (!sd().www()) { Vector::const_iterator tokens = tokensPtr->begin(); for (i = 0; i < nTokens; i++) { for (size_t j = 0; j < defs.size(); j++) if (defs[j]->containsToken(tokens[i])) { message(ParserMessages::duplicateAttributeToken, StringMessageArg(tokens[i])); break; } } } attcnt += nTokens; } Owner def; if (!parseDefaultValue(declInputLevel, isNotation, parm, attributeName, declaredValue, def, anyCurrent)) return 0; if (haveDefLpd() && defLpd().type() == Lpd::simpleLink && !def->isFixed()) message(ParserMessages::simpleLinkFixedAttribute); if (!duplicate) { defs.resize(defs.size() + 1); defs.back() = def.extract(); } static AllowedParams allowNameMdc(Param::name, Param::mdc); if (!parseParam(allowNameMdc, declInputLevel, parm)) return 0; } if (attcnt > syntax().attcnt()) message(ParserMessages::attcnt, NumberMessageArg(attcnt), NumberMessageArg(syntax().attcnt())); if (haveDefLpd() && !isNotation) { if (defLpd().type() == Lpd::simpleLink) { for (size_t i = 0; i < attributed.size(); i++) { const ElementType *e = (const ElementType *)attributed[i]; if (e) { if (e->name() == defLpd().sourceDtd()->name()) { SimpleLpd &lpd = (SimpleLpd &)defLpd(); if (lpd.attributeDef().isNull()) lpd.setAttributeDef(new AttributeDefinitionList(defs, 0)); else message(ParserMessages::duplicateAttlistElement, StringMessageArg(e->name())); } else message(ParserMessages::simpleLinkAttlistElement, StringMessageArg(e->name())); } } } else { Ptr adl(new AttributeDefinitionList(defs, defComplexLpd() .allocAttributeDefinitionListIndex())); for (size_t i = 0; i < attributed.size(); i++) { const ElementType *e = (const ElementType *)attributed[i]; if (e) { if (defComplexLpd().attributeDef(e).isNull()) defComplexLpd().setAttributeDef(e, adl); else message(ParserMessages::duplicateAttlistElement, StringMessageArg(e->name())); } } } } else { Ptr adl(new AttributeDefinitionList(defs, defDtd() .allocAttributeDefinitionListIndex(), anyCurrent, idIndex, notationIndex)); for (size_t i = 0; i < attributed.size(); i++) { if (attributed[i]->attributeDef().isNull()) { attributed[i]->setAttributeDef(adl); if (!isNotation) { ElementType *e = (ElementType *)attributed[i]; if (e->definition() != 0) checkElementAttribute(e); } } else if (options().errorAfdr && !sd().www()) { if (isNotation) message(ParserMessages::duplicateAttlistNotation, StringMessageArg(((Notation *)attributed[i])->name())); else message(ParserMessages::duplicateAttlistElement, StringMessageArg(((ElementType *)attributed[i])->name())); } else { if (!hadAfdrDecl() && !sd().www()) { message(ParserMessages::missingAfdrDecl); setHadAfdrDecl(); } AttributeDefinitionList *curAdl; { // Use block to make sure temporary gets destroyed. curAdl = attributed[i]->attributeDef().pointer(); } size_t oldSize = curAdl->size(); if (curAdl->count() != 1) { Vector > copy(oldSize); for (size_t j = 0; j < oldSize; j++) copy[j] = curAdl->def(j)->copy(); Ptr adlCopy = new AttributeDefinitionList(copy, defDtd().allocAttributeDefinitionListIndex(), curAdl->anyCurrent(), curAdl->idIndex(), curAdl->notationIndex()); attributed[i]->setAttributeDef(adlCopy); curAdl = adlCopy.pointer(); } // FIXME check for multiple ID and NOTATION attributes for (size_t j = 0; j < adl->size(); j++) { unsigned tem; if (!curAdl->attributeIndex(adl->def(j)->name(), tem)) curAdl->append(adl->def(j)->copy()); } if (!isNotation) { ElementType *e = (ElementType *)attributed[i]; if (e->definition() != 0) checkElementAttribute(e, oldSize); } } } } if (currentMarkup()) { if (isNotation) { Vector > v(attributed.size()); for (size_t i = 0; i < attributed.size(); i++) v[i] = (Notation *)attributed[i]; eventHandler() .attlistNotationDecl(new (eventAllocator()) AttlistNotationDeclEvent(v, markupLocation(), currentMarkup())); } else { Vector v(attributed.size()); for (size_t i = 0; i < attributed.size(); i++) v[i] = (ElementType *)attributed[i]; if (haveDefLpd()) eventHandler() .linkAttlistDecl(new (eventAllocator()) LinkAttlistDeclEvent(v, defLpdPointer(), markupLocation(), currentMarkup())); else eventHandler().attlistDecl(new (eventAllocator()) AttlistDeclEvent(v, currentDtdPointer(), markupLocation(), currentMarkup())); } } if (isNotation) { Dtd::EntityIter entityIter(defDtd().generalEntityIter()); for (;;) { Ptr entity(entityIter.next()); if (entity.isNull()) break; const ExternalDataEntity *external = entity->asExternalDataEntity(); if (external) { const Notation *entityNotation = external->notation(); for (size_t i = 0; i < attributed.size(); i++) if ((Notation *)attributed[i] == entityNotation) { AttributeList attributes(entityNotation->attributeDef()); attributes.finish(*this); ((ExternalDataEntity *)entity.pointer()) ->setNotation((Notation *)attributed[i], attributes); } } } } return 1; } Boolean Parser::parseAttributed(unsigned declInputLevel, Param &parm, Vector &attributed, Boolean &isNotation) { static AllowedParams allowNameGroupNotation(Param::name, Param::nameGroup, Param::indicatedReservedName + Syntax::rNOTATION); static AllowedParams allowNameGroupNotationAll(Param::name, Param::nameGroup, Param::indicatedReservedName + Syntax::rNOTATION, Param::indicatedReservedName + Syntax::rALL, Param::indicatedReservedName + Syntax::rIMPLICIT); if (!parseParam(haveDefLpd() ? allowNameGroupNotation : allowNameGroupNotationAll, declInputLevel, parm)) return 0; if (parm.type == Param::indicatedReservedName + Syntax::rNOTATION) { if (options().warnDataAttributes) message(ParserMessages::dataAttributes); isNotation = 1; static AllowedParams allowNameGroupAll(Param::name, Param::nameGroup, Param::indicatedReservedName + Syntax::rALL, Param::indicatedReservedName + Syntax::rIMPLICIT); if (!parseParam(haveDefLpd() ? allowNameNameGroup : allowNameGroupAll, declInputLevel, parm)) return 0; if (parm.type == Param::nameGroup) { attributed.resize(parm.nameTokenVector.size()); for (size_t i = 0; i < attributed.size(); i++) attributed[i] = lookupCreateNotation(parm.nameTokenVector[i].name); } else { if (parm.type != Param::name && !hadAfdrDecl() && !sd().www()) { message(ParserMessages::missingAfdrDecl); setHadAfdrDecl(); } attributed.resize(1); attributed[0] = lookupCreateNotation(parm.type == Param::name ? parm.token : syntax().rniReservedName(Syntax::ReservedName(parm.type - Param::indicatedReservedName))); } } else { isNotation = 0; if (parm.type == Param::nameGroup) { if (options().warnAttlistGroupDecl) message(ParserMessages::attlistGroupDecl); attributed.resize(parm.nameTokenVector.size()); for (size_t i = 0; i < attributed.size(); i++) attributed[i] = lookupCreateElement(parm.nameTokenVector[i].name); } else { if (parm.type != Param::name && !hadAfdrDecl() && !sd().www()) { message(ParserMessages::missingAfdrDecl); setHadAfdrDecl(); } attributed.resize(1); attributed[0] = lookupCreateElement(parm.type == Param::name ? parm.token : syntax().rniReservedName(Syntax::ReservedName(parm.type - Param::indicatedReservedName))); } } return 1; } Boolean Parser::parseDeclaredValue(unsigned declInputLevel, Boolean isNotation, Param &parm, Owner &declaredValue) { static Param::Type declaredValues[] = { Param::reservedName + Syntax::rCDATA, Param::reservedName + Syntax::rENTITY, Param::reservedName + Syntax::rENTITIES, Param::reservedName + Syntax::rID, Param::reservedName + Syntax::rIDREF, Param::reservedName + Syntax::rIDREFS, Param::reservedName + Syntax::rNAME, Param::reservedName + Syntax::rNAMES, Param::reservedName + Syntax::rNMTOKEN, Param::reservedName + Syntax::rNMTOKENS, Param::reservedName + Syntax::rNUMBER, Param::reservedName + Syntax::rNUMBERS, Param::reservedName + Syntax::rNUTOKEN, Param::reservedName + Syntax::rNUTOKENS, Param::reservedName + Syntax::rNOTATION, Param::nameTokenGroup }; static AllowedParams allowDeclaredValue(declaredValues, SIZEOF(declaredValues)); if (!parseParam(allowDeclaredValue, declInputLevel, parm)) return 0; enum { asDataAttribute = 01, asLinkAttribute = 02 }; unsigned allowedFlags = asDataAttribute|asLinkAttribute; switch (parm.type) { case Param::reservedName + Syntax::rCDATA: declaredValue = new CdataDeclaredValue; break; case Param::reservedName + Syntax::rENTITY: declaredValue = new EntityDeclaredValue(0); allowedFlags = asLinkAttribute; break; case Param::reservedName + Syntax::rENTITIES: declaredValue = new EntityDeclaredValue(1); allowedFlags = asLinkAttribute; break; case Param::reservedName + Syntax::rID: declaredValue = new IdDeclaredValue; allowedFlags = 0; break; case Param::reservedName + Syntax::rIDREF: declaredValue = new IdrefDeclaredValue(0); allowedFlags = 0; break; case Param::reservedName + Syntax::rIDREFS: declaredValue = new IdrefDeclaredValue(1); allowedFlags = 0; break; case Param::reservedName + Syntax::rNAME: declaredValue = new TokenizedDeclaredValue(TokenizedDeclaredValue::name, 0); if (options().warnNameDeclaredValue) message(ParserMessages::nameDeclaredValue); break; case Param::reservedName + Syntax::rNAMES: declaredValue = new TokenizedDeclaredValue(TokenizedDeclaredValue::name, 1); if (options().warnNameDeclaredValue) message(ParserMessages::nameDeclaredValue); break; case Param::reservedName + Syntax::rNMTOKEN: declaredValue = new TokenizedDeclaredValue(TokenizedDeclaredValue::nameToken, 0); break; case Param::reservedName + Syntax::rNMTOKENS: declaredValue = new TokenizedDeclaredValue(TokenizedDeclaredValue::nameToken, 1); break; case Param::reservedName + Syntax::rNUMBER: declaredValue = new TokenizedDeclaredValue(TokenizedDeclaredValue::number, 0); if (options().warnNumberDeclaredValue) message(ParserMessages::numberDeclaredValue); break; case Param::reservedName + Syntax::rNUMBERS: declaredValue = new TokenizedDeclaredValue(TokenizedDeclaredValue::number, 1); if (options().warnNumberDeclaredValue) message(ParserMessages::numberDeclaredValue); break; case Param::reservedName + Syntax::rNUTOKEN: declaredValue = new TokenizedDeclaredValue(TokenizedDeclaredValue::numberToken, 0); if (options().warnNutokenDeclaredValue) message(ParserMessages::nutokenDeclaredValue); break; case Param::reservedName + Syntax::rNUTOKENS: declaredValue = new TokenizedDeclaredValue(TokenizedDeclaredValue::numberToken, 1); if (options().warnNutokenDeclaredValue) message(ParserMessages::nutokenDeclaredValue); break; case Param::reservedName + Syntax::rNOTATION: { static AllowedParams allowNameGroup(Param::nameGroup); if (!parseParam(allowNameGroup, declInputLevel, parm)) return 0; Vector group(parm.nameTokenVector.size()); for (size_t i = 0; i < group.size(); i++) parm.nameTokenVector[i].name.swap(group[i]); declaredValue = new NotationDeclaredValue(group); allowedFlags = 0; } break; case Param::nameTokenGroup: { Vector group(parm.nameTokenVector.size()); for (size_t i = 0; i < group.size(); i++) parm.nameTokenVector[i].name.swap(group[i]); declaredValue = new NameTokenGroupDeclaredValue(group); } break; default: CANNOT_HAPPEN(); } if (isNotation) { if (!(allowedFlags & asDataAttribute)) message(ParserMessages::dataAttributeDeclaredValue); } else if (haveDefLpd() && !isNotation && !(allowedFlags & asLinkAttribute)) message(ParserMessages::linkAttributeDeclaredValue); return 1; } Boolean Parser::parseDefaultValue(unsigned declInputLevel, Boolean isNotation, Param &parm, const StringC &attributeName, Owner &declaredValue, Owner &def, Boolean &anyCurrent) { // default value static AllowedParams allowDefaultValue(Param::indicatedReservedName + Syntax::rFIXED, Param::indicatedReservedName + Syntax::rREQUIRED, Param::indicatedReservedName + Syntax::rCURRENT, Param::indicatedReservedName + Syntax::rCONREF, Param::indicatedReservedName + Syntax::rIMPLIED, Param::attributeValue, Param::attributeValueLiteral); static AllowedParams allowTokenDefaultValue(Param::indicatedReservedName + Syntax::rFIXED, Param::indicatedReservedName + Syntax::rREQUIRED, Param::indicatedReservedName + Syntax::rCURRENT, Param::indicatedReservedName + Syntax::rCONREF, Param::indicatedReservedName + Syntax::rIMPLIED, Param::attributeValue, Param::tokenizedAttributeValueLiteral); if (!parseParam(declaredValue->tokenized() ? allowTokenDefaultValue : allowDefaultValue, declInputLevel, parm)) return 0; switch (parm.type) { case Param::indicatedReservedName + Syntax::rFIXED: { static AllowedParams allowValue(Param::attributeValue, Param::attributeValueLiteral); static AllowedParams allowTokenValue(Param::attributeValue, Param::tokenizedAttributeValueLiteral); if (!parseParam(declaredValue->tokenized() ? allowTokenValue : allowValue, declInputLevel, parm)) return 0; unsigned specLength = 0; AttributeValue *value = declaredValue->makeValue(parm.literalText, *this, attributeName, specLength); if (declaredValue->isId()) message(ParserMessages::idDeclaredValue); def = new FixedAttributeDefinition(attributeName, declaredValue.extract(), value); } break; case Param::attributeValue: if (options().warnAttributeValueNotLiteral) message(ParserMessages::attributeValueNotLiteral); // falll through case Param::attributeValueLiteral: case Param::tokenizedAttributeValueLiteral: { unsigned specLength = 0; AttributeValue *value = declaredValue->makeValue(parm.literalText, *this, attributeName, specLength); if (declaredValue->isId()) message(ParserMessages::idDeclaredValue); def = new DefaultAttributeDefinition(attributeName, declaredValue.extract(), value); } break; case Param::indicatedReservedName + Syntax::rREQUIRED: def = new RequiredAttributeDefinition(attributeName, declaredValue.extract()); break; case Param::indicatedReservedName + Syntax::rCURRENT: anyCurrent = 1; if (declaredValue->isId()) message(ParserMessages::idDeclaredValue); def = new CurrentAttributeDefinition(attributeName, declaredValue.extract(), defDtd().allocCurrentAttributeIndex()); if (isNotation) message(ParserMessages::dataAttributeDefaultValue); else if (haveDefLpd()) message(ParserMessages::linkAttributeDefaultValue); else if (options().warnCurrent) message(ParserMessages::currentAttribute); break; case Param::indicatedReservedName + Syntax::rCONREF: if (declaredValue->isId()) message(ParserMessages::idDeclaredValue); def = new ConrefAttributeDefinition(attributeName, declaredValue.extract()); if (isNotation) message(ParserMessages::dataAttributeDefaultValue); else if (haveDefLpd()) message(ParserMessages::linkAttributeDefaultValue); else if (options().warnConref) message(ParserMessages::conrefAttribute); break; case Param::indicatedReservedName + Syntax::rIMPLIED: def = new ImpliedAttributeDefinition(attributeName, declaredValue.extract()); break; default: CANNOT_HAPPEN(); } return 1; } // parm contains either system or public Boolean Parser::parseExternalId(const AllowedParams &sysidAllow, const AllowedParams &endAllow, Boolean maybeWarnMissingSystemId, unsigned declInputLevel, Param &parm, ExternalId &id) { id.setLocation(currentLocation()); if (parm.type == Param::reservedName + Syntax::rPUBLIC) { static AllowedParams allowMinimumLiteral(Param::minimumLiteral); if (!parseParam(allowMinimumLiteral, declInputLevel, parm)) return 0; const MessageType1 *err; if (id.setPublic(parm.literalText, sd().internalCharset(), syntax().space(), err)) { PublicId::TextClass textClass; if (sd().formal() && id.publicId()->getTextClass(textClass) && textClass == PublicId::SD) message(ParserMessages::wwwRequired); } else if (sd().formal()) message(*err, StringMessageArg(*id.publicIdString())); } if (!parseParam(sysidAllow, declInputLevel, parm)) return 0; if (parm.type == Param::systemIdentifier) { id.setSystem(parm.literalText); if (!parseParam(endAllow, declInputLevel, parm)) return 0; } else if (options().warnMissingSystemId && maybeWarnMissingSystemId) message(ParserMessages::missingSystemId); return 1; } Boolean Parser::parseNotationDecl() { unsigned declInputLevel = inputLevel(); Param parm; if (!parseParam(allowName, declInputLevel, parm)) return 0; Notation *nt = lookupCreateNotation(parm.token); if (validate() && nt->defined()) message(ParserMessages::duplicateNotationDeclaration, StringMessageArg(parm.token)); static AllowedParams allowPublicSystem(Param::reservedName + Syntax::rPUBLIC, Param::reservedName + Syntax::rSYSTEM); if (!parseParam(allowPublicSystem, declInputLevel, parm)) return 0; static AllowedParams allowSystemIdentifierMdc(Param::systemIdentifier, Param::mdc); ExternalId id; if (!parseExternalId(allowSystemIdentifierMdc, allowMdc, parm.type == Param::reservedName + Syntax::rSYSTEM, declInputLevel, parm, id)) return 0; if (validate() && sd().formal()) { PublicId::TextClass textClass; const PublicId *publicId = id.publicId(); if (publicId && publicId->getTextClass(textClass) && textClass != PublicId::NOTATION) message(ParserMessages::notationIdentifierTextClass); } if (!nt->defined()) { nt->setExternalId(id, markupLocation()); nt->generateSystemId(*this); if (currentMarkup()) eventHandler().notationDecl(new (eventAllocator()) NotationDeclEvent(nt, markupLocation(), currentMarkup())); } return 1; } Boolean Parser::parseEntityDecl() { unsigned declInputLevel = inputLevel(); Param parm; static AllowedParams allowEntityNamePero(Param::entityName, Param::indicatedReservedName + Syntax::rDEFAULT, Param::pero); if (!parseParam(allowEntityNamePero, declInputLevel, parm)) return 0; Entity::DeclType declType; StringC name; // empty for default entity if (parm.type == Param::pero) { declType = Entity::parameterEntity; static AllowedParams allowParamEntityName(Param::paramEntityName); if (!parseParam(allowParamEntityName, declInputLevel, parm)) return 0; parm.token.swap(name); } else { declType = Entity::generalEntity; if (parm.type == Param::entityName) parm.token.swap(name); else if (options().warnDefaultEntityDecl) message(ParserMessages::defaultEntityDecl); } static AllowedParams allowEntityTextType(Param::paramLiteral, Param::reservedName + Syntax::rCDATA, Param::reservedName + Syntax::rSDATA, Param::reservedName + Syntax::rPI, Param::reservedName + Syntax::rSTARTTAG, Param::reservedName + Syntax::rENDTAG, Param::reservedName + Syntax::rMS, Param::reservedName + Syntax::rMD, Param::reservedName + Syntax::rSYSTEM, Param::reservedName + Syntax::rPUBLIC); if (!parseParam(allowEntityTextType, declInputLevel, parm)) return 0; Location typeLocation(currentLocation()); Entity::DataType dataType = Entity::sgmlText; InternalTextEntity::Bracketed bracketed = InternalTextEntity::none; switch (parm.type) { case Param::reservedName + Syntax::rSYSTEM: case Param::reservedName + Syntax::rPUBLIC: return parseExternalEntity(name, declType, declInputLevel, parm); case Param::reservedName + Syntax::rCDATA: dataType = Entity::cdata; if (options().warnInternalCdataEntity) message(ParserMessages::internalCdataEntity); break; case Param::reservedName + Syntax::rSDATA: dataType = Entity::sdata; if (options().warnInternalSdataEntity) message(ParserMessages::internalSdataEntity); break; case Param::reservedName + Syntax::rPI: dataType = Entity::pi; if (options().warnPiEntity) message(ParserMessages::piEntity); break; case Param::reservedName + Syntax::rSTARTTAG: bracketed = InternalTextEntity::starttag; if (options().warnBracketEntity) message(ParserMessages::bracketEntity); break; case Param::reservedName + Syntax::rENDTAG: bracketed = InternalTextEntity::endtag; if (options().warnBracketEntity) message(ParserMessages::bracketEntity); break; case Param::reservedName + Syntax::rMS: bracketed = InternalTextEntity::ms; if (options().warnBracketEntity) message(ParserMessages::bracketEntity); break; case Param::reservedName + Syntax::rMD: bracketed = InternalTextEntity::md; if (options().warnBracketEntity) message(ParserMessages::bracketEntity); break; } if (parm.type != Param::paramLiteral) { if (!parseParam(allowParamLiteral, declInputLevel, parm)) return 0; } Text text; parm.literalText.swap(text); if (bracketed != InternalTextEntity::none) { StringC open; StringC close; switch (bracketed) { case InternalTextEntity::starttag: open = syntax().delimGeneral(Syntax::dSTAGO); close = syntax().delimGeneral(Syntax::dTAGC); break; case InternalTextEntity::endtag: open = syntax().delimGeneral(Syntax::dETAGO); close = syntax().delimGeneral(Syntax::dTAGC); break; case InternalTextEntity::ms: open = syntax().delimGeneral(Syntax::dMDO); open += syntax().delimGeneral(Syntax::dDSO); close = syntax().delimGeneral(Syntax::dMSC); close += syntax().delimGeneral(Syntax::dMDC); break; case InternalTextEntity::md: open = syntax().delimGeneral(Syntax::dMDO); close = syntax().delimGeneral(Syntax::dMDC); break; default: CANNOT_HAPPEN(); } text.insertChars(open, Location(new BracketOrigin(typeLocation, BracketOrigin::open), 0)); text.addChars(close, Location(new BracketOrigin(typeLocation, BracketOrigin::close), 0)); if (text.size() > syntax().litlen() && text.size() - open.size() - close.size() <= syntax().litlen()) message(ParserMessages::bracketedLitlen, NumberMessageArg(syntax().litlen())); } if (!parseParam(allowMdc, declInputLevel, parm)) return 0; if (declType == Entity::parameterEntity && (dataType == Entity::cdata || dataType == Entity::sdata)) { message(ParserMessages::internalParameterDataEntity, StringMessageArg(name)); return 1; } Ptr entity; switch (dataType) { case Entity::cdata: entity = new InternalCdataEntity(name, markupLocation(), text); break; case Entity::sdata: entity = new InternalSdataEntity(name, markupLocation(), text); break; case Entity::pi: entity = new PiEntity(name, declType, markupLocation(), text); break; case Entity::sgmlText: entity = new InternalTextEntity(name, declType, markupLocation(), text, bracketed); break; default: CANNOT_HAPPEN(); break; } maybeDefineEntity(entity); return 1; } Boolean Parser::parseExternalEntity(StringC &name, Entity::DeclType declType, unsigned declInputLevel, Param &parm) { static AllowedParams allowSystemIdentifierEntityTypeMdc(Param::systemIdentifier, Param::reservedName + Syntax::rSUBDOC, Param::reservedName + Syntax::rCDATA, Param::reservedName + Syntax::rSDATA, Param::reservedName + Syntax::rNDATA, Param::mdc); static AllowedParams allowEntityTypeMdc(Param::reservedName + Syntax::rSUBDOC, Param::reservedName + Syntax::rCDATA, Param::reservedName + Syntax::rSDATA, Param::reservedName + Syntax::rNDATA, Param::mdc); ExternalId id; if (!parseExternalId(allowSystemIdentifierEntityTypeMdc, allowEntityTypeMdc, 1, declInputLevel, parm, id)) return 0; if (parm.type == Param::mdc) { maybeDefineEntity(new ExternalTextEntity(name, declType, markupLocation(), id)); return 1; } Ptr entity; if (parm.type == Param::reservedName + Syntax::rSUBDOC) { if (sd().subdoc() == 0) message(ParserMessages::subdocEntity, StringMessageArg(name)); if (!parseParam(allowMdc, declInputLevel, parm)) return 0; entity = new SubdocEntity(name, markupLocation(), id); } else { Entity::DataType dataType; switch (parm.type) { case Param::reservedName + Syntax::rCDATA: dataType = Entity::cdata; if (options().warnExternalCdataEntity) message(ParserMessages::externalCdataEntity); break; case Param::reservedName + Syntax::rSDATA: dataType = Entity::sdata; if (options().warnExternalSdataEntity) message(ParserMessages::externalSdataEntity); break; case Param::reservedName + Syntax::rNDATA: dataType = Entity::ndata; break; default: CANNOT_HAPPEN(); } if (!parseParam(allowName, declInputLevel, parm)) return 0; Ptr notation(lookupCreateNotation(parm.token)); if (!parseParam(allowDsoMdc, declInputLevel, parm)) return 0; AttributeList attributes(notation->attributeDef()); if (parm.type == Param::dso) { if (attributes.size() == 0) message(ParserMessages::notationNoAttributes, StringMessageArg(notation->name())); Boolean netEnabling; Ptr newAttDef; if (!parseAttributeSpec(1, attributes, netEnabling, newAttDef)) return 0; if (!newAttDef.isNull()) { newAttDef->setIndex(defDtd().allocAttributeDefinitionListIndex()); notation->setAttributeDef(newAttDef); } if (attributes.nSpec() == 0) message(ParserMessages::emptyDataAttributeSpec); if (!parseParam(allowMdc, declInputLevel, parm)) return 0; } else attributes.finish(*this); entity = new ExternalDataEntity(name, dataType, markupLocation(), id, notation, attributes); } if (declType == Entity::parameterEntity) { message(ParserMessages::externalParameterDataSubdocEntity, StringMessageArg(name)); return 1; } maybeDefineEntity(entity); return 1; } Notation *Parser::lookupCreateNotation(const StringC &name) { Ptr nt = defDtd().lookupNotation(name); if (nt.isNull()) { nt = new Notation(name, defDtd().namePointer(), defDtd().isBase()); defDtd().insertNotation(nt); } return nt.pointer(); } void Parser::maybeDefineEntity(const Ptr &entity) { Dtd &dtd = defDtd(); if (haveDefLpd()) entity->setDeclIn(dtd.namePointer(), dtd.isBase(), defLpd().namePointer(), defLpd().active()); else entity->setDeclIn(dtd.namePointer(), dtd.isBase()); Boolean ignored = 0; if (entity->name().size() == 0) { const Entity *oldEntity = dtd.defaultEntity().pointer(); if (oldEntity == 0 || (!oldEntity->declInActiveLpd() && entity->declInActiveLpd())) dtd.setDefaultEntity(entity, *this); else { ignored = 1; if (options().warnDuplicateEntity) message(ParserMessages::duplicateEntityDeclaration, StringMessageArg(syntax().rniReservedName(Syntax::rDEFAULT))); } } else { Ptr oldEntity = dtd.insertEntity(entity); if (oldEntity.isNull()) entity->generateSystemId(*this); else if (oldEntity->defaulted()) { dtd.insertEntity(entity, 1); message(ParserMessages::defaultedEntityDefined, StringMessageArg(entity->name())); entity->generateSystemId(*this); } else { if (entity->declInActiveLpd() && !oldEntity->declInActiveLpd()) { dtd.insertEntity(entity, 1); entity->generateSystemId(*this); } else { ignored = 1; if (options().warnDuplicateEntity) message(entity->declType() == Entity::parameterEntity ? ParserMessages::duplicateParameterEntityDeclaration : ParserMessages::duplicateEntityDeclaration, StringMessageArg(entity->name())); } } } if (currentMarkup()) eventHandler().entityDecl(new (eventAllocator()) EntityDeclEvent(entity, ignored, markupLocation(), currentMarkup())); } Boolean Parser::parseShortrefDecl() { if (!defDtd().isBase()) message(ParserMessages::shortrefOnlyInBaseDtd); unsigned declInputLevel = inputLevel(); Param parm; if (!parseParam(allowName, declInputLevel, parm)) return 0; ShortReferenceMap *map = lookupCreateMap(parm.token); int valid = 1; if (map->defined()) { message(ParserMessages::duplicateShortrefDeclaration, StringMessageArg(parm.token), map->defLocation()); valid = 0; } else map->setDefLocation(markupLocation()); if (!parseParam(allowParamLiteral, declInputLevel, parm)) return 0; Vector vec; do { StringC delim(parm.literalText.string()); const SubstTable *table = instanceSyntax().generalSubstTable(); for (size_t i = 0; i < delim.size(); i++) table->subst(delim[i]); size_t srIndex; if (!defDtd().shortrefIndex(delim, instanceSyntax(), srIndex)) { message(ParserMessages::unknownShortrefDelim, StringMessageArg(prettifyDelim(delim))); valid = 0; } static AllowedParams allowEntityName(Param::entityName); if (!parseParam(allowEntityName, declInputLevel, parm)) return 0; if (valid) { if (srIndex >= vec.size()) vec.resize(srIndex + 1); if (vec[srIndex].size() > 0) { message(ParserMessages::delimDuplicateMap, StringMessageArg(prettifyDelim(delim))); valid = 0; } else parm.token.swap(vec[srIndex]); } static AllowedParams allowParamLiteralMdc(Param::paramLiteral, Param::mdc); if (!parseParam(allowParamLiteralMdc, declInputLevel, parm)) return 0; } while (parm.type != Param::mdc); if (valid) { map->setNameMap(vec); if (currentMarkup()) eventHandler().shortrefDecl(new (eventAllocator()) ShortrefDeclEvent(map, currentDtdPointer(), markupLocation(), currentMarkup())); } return 1; } StringC Parser::prettifyDelim(const StringC &delim) { StringC prettyDelim; for (size_t i = 0; i < delim.size(); i++) { const StringC *nameP; if (syntax().charFunctionName(delim[i], nameP)) { prettyDelim += syntax().delimGeneral(Syntax::dCRO); prettyDelim += *nameP; prettyDelim += syntax().delimGeneral(Syntax::dREFC); } else prettyDelim += delim[i]; } return prettyDelim; } ShortReferenceMap *Parser::lookupCreateMap(const StringC &name) { ShortReferenceMap *map = defDtd().lookupShortReferenceMap(name); if (!map) { map = new ShortReferenceMap(name); defDtd().insertShortReferenceMap(map); } return map; } Boolean Parser::parseUsemapDecl() { if (!inInstance() && !defDtd().isBase()) message(ParserMessages::usemapOnlyInBaseDtd); unsigned declInputLevel = inputLevel(); Param parm; static AllowedParams allowNameEmpty(Param::name, Param::indicatedReservedName + Syntax::rEMPTY); if (!parseParam(allowNameEmpty, declInputLevel, parm)) return 0; const ShortReferenceMap *map; if (parm.type == Param::name) { if (inInstance()) { map = currentDtd().lookupShortReferenceMap(parm.token); if (!map) message(ParserMessages::undefinedShortrefMapInstance, StringMessageArg(parm.token)); } else { ShortReferenceMap *tem = lookupCreateMap(parm.token); tem->setUsed(); map = tem; } } else map = &theEmptyMap; static AllowedParams allowNameNameGroupMdc(Param::name, Param::nameGroup, Param::mdc); if (!parseParam(allowNameNameGroupMdc, declInputLevel, parm)) return 0; if (parm.type != Param::mdc) { if (inInstance()) { message(ParserMessages::usemapAssociatedElementTypeInstance); if (!parseParam(allowMdc, declInputLevel, parm)) return 0; } else { Vector v; if (parm.type == Param::name) { ElementType *e = lookupCreateElement(parm.token); v.push_back(e); if (!e->map()) e->setMap(map); } else { v.resize(parm.nameTokenVector.size()); for (size_t i = 0; i < parm.nameTokenVector.size(); i++) { ElementType *e = lookupCreateElement(parm.nameTokenVector[i].name); v[i] = e; if (!e->map()) e->setMap(map); } } if (!parseParam(allowMdc, declInputLevel, parm)) return 0; if (currentMarkup()) eventHandler().usemap(new (eventAllocator()) UsemapEvent(map, v, currentDtdPointer(), markupLocation(), currentMarkup())); } } else { if (!inInstance()) message(ParserMessages::usemapAssociatedElementTypeDtd); else if (map) { if (map != &theEmptyMap && !map->defined()) message(ParserMessages::undefinedShortrefMapInstance, StringMessageArg(map->name())); else { if (currentMarkup()) { Vector v; eventHandler().usemap(new (eventAllocator()) UsemapEvent(map, v, currentDtdPointer(), markupLocation(), currentMarkup())); } currentElement().setMap(map); } } } return 1; } Boolean Parser::parseDoctypeDeclStart() { if (hadDtd() && !sd().concur() && !sd().explicitLink()) message(ParserMessages::multipleDtds); if (hadLpd()) message(ParserMessages::dtdAfterLpd); unsigned declInputLevel = inputLevel(); Param parm; if (!parseParam(allowName, declInputLevel, parm)) return 0; StringC name; parm.token.swap(name); if (!lookupDtd(name).isNull()) message(ParserMessages::duplicateDtd, StringMessageArg(name)); static AllowedParams allowPublicSystemDsoMdc(Param::reservedName + Syntax::rPUBLIC, Param::reservedName + Syntax::rSYSTEM, Param::dso, Param::mdc); if (!parseParam(allowPublicSystemDsoMdc, declInputLevel, parm)) return 0; ConstPtr entity; if (parm.type == Param::reservedName + Syntax::rPUBLIC || parm.type == Param::reservedName + Syntax::rSYSTEM) { static AllowedParams allowSystemIdentifierDsoMdc(Param::systemIdentifier, Param::dso, Param::mdc); ExternalId id; if (!parseExternalId(allowSystemIdentifierDsoMdc, allowDsoMdc, 1, declInputLevel, parm, id)) return 0; Ptr tem = new ExternalTextEntity(name, Entity::doctype, markupLocation(), id); tem->generateSystemId(*this); entity = tem; #if 0 eventHandler() .externalEntityDecl(new (eventAllocator()) ExternalEntityDeclEvent(entity, 0)); #endif } else if (parm.type == Param::mdc) { if (!sd().implydefElement()) { message(ParserMessages::noDtdSubset); enableImplydef(); } } // Discard mdc or dso if (currentMarkup()) currentMarkup()->resize(currentMarkup()->size() - 1); eventHandler().startDtd(new (eventAllocator()) StartDtdEvent(name, entity, parm.type == Param::dso, markupLocation(), currentMarkup())); startDtd(name); if (parm.type == Param::mdc) { // unget the mdc currentInput()->ungetToken(); if (entity.isNull()) { (void)parseDoctypeDeclEnd(); return 1; } // reference the entity Ptr origin = EntityOrigin::make(internalAllocator(), entity, currentLocation()); entity->dsReference(*this, origin); if (inputLevel() == 1) { // reference failed (void)parseDoctypeDeclEnd(); return 1; } } else if (!entity.isNull()) setDsEntity(entity); setPhase(declSubsetPhase); return 1; } void Parser::implyDtd(const StringC &gi) { startMarkup(eventsWanted().wantPrologMarkup(), Location()); #if 0 if (currentMarkup()) { currentMarkup()->addDelim(Syntax::dMDO); currentMarkup()->addReservedName(Syntax::rDOCTYPE, syntax().reservedName(Syntax::rDOCTYPE)); currentMarkup()->addS(syntax().space()); currentMarkup()->addName(gi.data(), gi.size()); } #endif if (sd().implydefElement() && !sd().implydefDoctype()) { eventHandler().startDtd(new (eventAllocator()) StartDtdEvent(gi, ConstPtr(), 0, markupLocation(), currentMarkup())); startDtd(gi); parseDoctypeDeclEnd(1); return; } ExternalId id; // The null location indicates that this is a fake entity. Entity *tem = new ExternalTextEntity(gi, Entity::doctype, Location(), id); ConstPtr entity(tem); if (sd().implydefDoctype()) tem->generateSystemId(*this); else { // Don't use Entity::generateSystemId because we don't want an error // if it fails. StringC str; if (!entityCatalog().lookup(*entity, syntax(), sd().internalCharset(), messenger(), str)) { message(ParserMessages::noDtd); enableImplydef(); eventHandler().startDtd(new (eventAllocator()) StartDtdEvent(gi, ConstPtr(), 0, markupLocation(), currentMarkup())); startDtd(gi); parseDoctypeDeclEnd(1); return; } id.setEffectiveSystem(str); #if 0 if (currentMarkup()) { currentMarkup()->addS(syntax().space()); currentMarkup()->addReservedName(Syntax::rSYSTEM, syntax().reservedName(Syntax::rSYSTEM)); } #endif entity = new ExternalTextEntity(gi, Entity::doctype, Location(), id); StringC declStr; declStr += syntax().delimGeneral(Syntax::dMDO); declStr += syntax().reservedName(Syntax::rDOCTYPE); declStr += syntax().space(); declStr += gi; declStr += syntax().space(); declStr += syntax().reservedName(Syntax::rSYSTEM); declStr += syntax().delimGeneral(Syntax::dMDC); message(ParserMessages::implyingDtd, StringMessageArg(declStr)); } Ptr origin = EntityOrigin::make(internalAllocator(), entity, currentLocation()); eventHandler().startDtd(new (eventAllocator()) StartDtdEvent(gi, entity, 0, markupLocation(), currentMarkup())); startDtd(gi); entity->dsReference(*this, origin); if (inputLevel() == 1) parseDoctypeDeclEnd(1); else setPhase(declSubsetPhase); } Boolean Parser::parseDoctypeDeclEnd(Boolean fake) { checkDtd(defDtd()); Ptr tem(defDtdPointer()); endDtd(); if (fake) { startMarkup(eventsWanted().wantPrologMarkup(), Location()); #if 0 if (currentMarkup()) currentMarkup()->addDelim(Syntax::dMDC); #endif } else { startMarkup(eventsWanted().wantPrologMarkup(), currentLocation()); Param parm; // End DTD before parsing final param so parameter entity reference // not allowed between ] and >. if (!parseParam(allowMdc, inputLevel(), parm)) return 0; } eventHandler().endDtd(new (eventAllocator()) EndDtdEvent(tem, markupLocation(), currentMarkup())); #if 0 if (fake) { Char c = syntax().standardFunction(Syntax::fRE); eventHandler().sSep(new (eventAllocator()) SSepEvent(&c, 1, Location(), 1)); } #endif return 1; } void Parser::checkDtd(Dtd &dtd) { if (dtd.isBase()) addNeededShortrefs(dtd, instanceSyntax()); if (sd().www() || !options().errorAfdr) addCommonAttributes(dtd); Dtd::ElementTypeIter elementIter(dtd.elementTypeIter()); ElementType *p; ConstPtr def; int i = 0; while ((p = elementIter.next()) != 0) { if (p->definition() == 0) { if (p->name() == dtd.name()) { if (validate() && !implydefElement()) message(ParserMessages::documentElementUndefined); } else if (options().warnUndefinedElement) message(ParserMessages::dtdUndefinedElement, StringMessageArg(p->name())); if (def.isNull()) def = new ElementDefinition(currentLocation(), size_t(ElementDefinition::undefinedIndex), 0, ElementDefinition::any); p->setElementDefinition(def, i++); } const ShortReferenceMap *map = p->map(); if (map != 0 && map != &theEmptyMap && !map->defined()) { if (validate()) message(ParserMessages::undefinedShortrefMapDtd, StringMessageArg(map->name()), StringMessageArg(p->name())); p->setMap(0); } } Dtd::ShortReferenceMapIter mapIter(dtd.shortReferenceMapIter()); int nShortref = dtd.nShortref(); for (;;) { ShortReferenceMap *map = mapIter.next(); if (!map) break; Vector > entityMap(nShortref); for (i = 0; i < nShortref; i++) { const StringC *entityName = map->entityName(i); if (entityName) { ConstPtr entity = lookupEntity(0, *entityName, map->defLocation(), 0); if (entity.isNull()) { setNextLocation(map->defLocation()); message(ParserMessages::mapEntityUndefined, StringMessageArg(*entityName), StringMessageArg(map->name())); } else { if (entity->defaulted() && options().warnDefaultEntityReference) { setNextLocation(map->defLocation()); message(ParserMessages::mapDefaultEntity, StringMessageArg(*entityName), StringMessageArg(map->name())); } entityMap[i] = entity; } } } map->setEntityMap(entityMap); if (options().warnUnusedMap && !map->used()) { setNextLocation(map->defLocation()); message(ParserMessages::unusedMap, StringMessageArg(map->name())); } } if (options().warnUnusedParam) { Dtd::ConstEntityIter entityIter(((const Dtd &)dtd).parameterEntityIter()); for (;;) { ConstPtr entity(entityIter.next()); if (entity.isNull()) break; if (!entity->used() && !maybeStatusKeyword(*entity)) { setNextLocation(entity->defLocation()); message(ParserMessages::unusedParamEntity, StringMessageArg(entity->name())); } } } if (!validate()) return; Dtd::ConstEntityIter entityIter(((const Dtd &)dtd).generalEntityIter()); for (;;) { ConstPtr entity(entityIter.next()); if (entity.isNull()) break; const ExternalDataEntity *external = entity->asExternalDataEntity(); if (external) { const Notation *notation = external->notation(); if (!notation->defined()) { setNextLocation(external->defLocation()); message(ParserMessages::entityNotationUndefined, StringMessageArg(notation->name()), StringMessageArg(external->name())); } } } Dtd::NotationIter notationIter(dtd.notationIter()); for (;;) { ConstPtr notation(notationIter.next()); if (notation.isNull()) break; if (!notation->defined() && !notation->attributeDef().isNull()) message(ParserMessages::attlistNotationUndefined, StringMessageArg(notation->name())); } } void Parser::addCommonAttributes(Dtd &dtd) { Ptr commonAdl[2]; { ElementType *e = dtd.removeElementType(syntax() .rniReservedName(Syntax::rALL)); if (e) { commonAdl[0] = e->attributeDef(); delete e; lookupCreateElement(syntax().rniReservedName(Syntax::rIMPLICIT)); } } { Ptr allNotation = dtd.removeNotation(syntax().rniReservedName(Syntax::rALL)); if (!allNotation.isNull()) { commonAdl[1] = allNotation->attributeDef(); lookupCreateNotation(syntax().rniReservedName(Syntax::rIMPLICIT)); } } Dtd::ElementTypeIter elementIter(dtd.elementTypeIter()); Dtd::NotationIter notationIter(dtd.notationIter()); Vector doneAdl(dtd.nAttributeDefinitionList(), PackedBoolean(0)); for (int isNotation = 0; isNotation < 2; isNotation++) { if (!commonAdl[isNotation].isNull()) { doneAdl[commonAdl[isNotation]->index()] = 1; for (;;) { Attributed *a; if (!isNotation) a = elementIter.next(); else a = notationIter.next().pointer(); if (!a) break; Ptr adl = a->attributeDef(); if (adl.isNull()) a->setAttributeDef(commonAdl[isNotation]); else if (!doneAdl[adl->index()]) { doneAdl[adl->index()] = 1; for (size_t j = 0; j < commonAdl[isNotation]->size(); j++) { unsigned tem; if (!adl->attributeIndex(commonAdl[isNotation]->def(j)->name(), tem)) adl->append(commonAdl[isNotation]->def(j)->copy()); } } } } } { ElementType *e = dtd.removeElementType(syntax() .rniReservedName(Syntax::rIMPLICIT)); if (e) dtd.setImplicitElementAttributeDef(e->attributeDef()); delete e; } { Ptr n = dtd.removeNotation(syntax().rniReservedName(Syntax::rIMPLICIT)); if (!n.isNull()) dtd.setImplicitNotationAttributeDef(n->attributeDef()); } } Boolean Parser::maybeStatusKeyword(const Entity &entity) { const InternalEntity *internal = entity.asInternalEntity(); if (!internal) return 0; const StringC &text = internal->string(); static const Syntax::ReservedName statusKeywords[] = { Syntax::rINCLUDE, Syntax::rIGNORE }; for (size_t i = 0; i < SIZEOF(statusKeywords); i++) { const StringC &keyword = instanceSyntax().reservedName(statusKeywords[i]); size_t j = 0; while (j < text.size() && instanceSyntax().isS(text[j])) j++; size_t k = 0; while (j < text.size() && k < keyword.size() && ((*instanceSyntax().generalSubstTable())[text[j]] == keyword[k])) j++, k++; if (k == keyword.size()) { while (j < text.size() && instanceSyntax().isS(text[j])) j++; if (j == text.size()) return 1; } } return 0; } Boolean Parser::parseLinktypeDeclStart() { if (baseDtd().isNull()) message(ParserMessages::lpdBeforeBaseDtd); unsigned declInputLevel = inputLevel(); Param parm; if (!parseParam(allowName, declInputLevel, parm)) return 0; StringC name; parm.token.swap(name); if (!lookupDtd(name).isNull()) message(ParserMessages::duplicateDtdLpd, StringMessageArg(name)); else if (!lookupLpd(name).isNull()) message(ParserMessages::duplicateLpd, StringMessageArg(name)); static AllowedParams allowSimpleName(Param::indicatedReservedName + Syntax::rSIMPLE, Param::name); if (!parseParam(allowSimpleName, declInputLevel, parm)) return 0; Boolean simple; Ptr sourceDtd; if (parm.type == Param::indicatedReservedName + Syntax::rSIMPLE) { simple = 1; sourceDtd = baseDtd(); if (sourceDtd.isNull()) sourceDtd = new Dtd(StringC(), 1); } else { simple = 0; sourceDtd = lookupDtd(parm.token); if (sourceDtd.isNull()) { message(ParserMessages::noSuchDtd, StringMessageArg(parm.token)); sourceDtd = new Dtd(parm.token, 0); } } static AllowedParams allowImpliedName(Param::indicatedReservedName + Syntax::rIMPLIED, Param::name); if (!parseParam(allowImpliedName, declInputLevel, parm)) return 0; Ptr resultDtd; Boolean implied = 0; if (parm.type == Param::indicatedReservedName + Syntax::rIMPLIED) { if (simple) { if (!sd().simpleLink()) message(ParserMessages::simpleLinkFeature); } else { implied = 1; if (!sd().implicitLink()) message(ParserMessages::implicitLinkFeature); } } else { if (simple) message(ParserMessages::simpleLinkResultNotImplied); else { if (!sd().explicitLink()) message(ParserMessages::explicitLinkFeature); resultDtd = lookupDtd(parm.token); if (resultDtd.isNull()) message(ParserMessages::noSuchDtd, StringMessageArg(parm.token)); } } static AllowedParams allowPublicSystemDsoMdc(Param::reservedName + Syntax::rPUBLIC, Param::reservedName + Syntax::rSYSTEM, Param::dso, Param::mdc); if (!parseParam(allowPublicSystemDsoMdc, declInputLevel, parm)) return 0; ConstPtr entity; if (parm.type == Param::reservedName + Syntax::rPUBLIC || parm.type == Param::reservedName + Syntax::rSYSTEM) { static AllowedParams allowSystemIdentifierDsoMdc(Param::systemIdentifier, Param::dso, Param::mdc); ExternalId id; if (!parseExternalId(allowSystemIdentifierDsoMdc, allowDsoMdc, 1, declInputLevel, parm, id)) return 0; Ptr tem = new ExternalTextEntity(name, Entity::linktype, markupLocation(), id); tem->generateSystemId(*this); entity = tem; #if 0 eventHandler() .externalEntityDecl(new (eventAllocator()) ExternalEntityDeclEvent(entity, 0)); #endif } Ptr lpd; if (simple) lpd = new SimpleLpd(name, markupLocation(), sourceDtd); else lpd = new ComplexLpd(name, implied ? Lpd::implicitLink : Lpd::explicitLink, markupLocation(), syntax(), sourceDtd, resultDtd); if (!baseDtd().isNull() && shouldActivateLink(name)) { size_t nActive = nActiveLink(); if (simple) { size_t nSimple = 0; for (size_t i = 0; i < nActive; i++) if (activeLpd(i).type() == Lpd::simpleLink) nSimple++; if (nSimple == sd().simpleLink()) message(ParserMessages::simpleLinkCount, NumberMessageArg(sd().simpleLink())); lpd->activate(); } else { Boolean haveImplicit = 0; Boolean haveExplicit = 0; size_t i; for (i = 0; i < nActive; i++) { if (activeLpd(i).type() == Lpd::implicitLink) haveImplicit = 1; else if (activeLpd(i).type() == Lpd::explicitLink) haveExplicit = 1; } const Dtd *sourceDtd = lpd->sourceDtd().pointer(); if (implied && haveImplicit) message(ParserMessages::oneImplicitLink); else if (sd().explicitLink() <= 1 && sourceDtd != baseDtd().pointer()) message(sd().explicitLink() == 0 ? ParserMessages::explicitNoRequiresSourceTypeBase : ParserMessages::explicit1RequiresSourceTypeBase, StringMessageArg(lpd->name())); else if (sd().explicitLink() == 1 && haveExplicit && !implied) message(ParserMessages::duplicateExplicitChain); else if (haveExplicit || haveImplicit || sourceDtd != baseDtd().pointer()) message(ParserMessages::sorryLink, StringMessageArg(lpd->name())); else lpd->activate(); } } // Discard mdc or dso if (currentMarkup()) currentMarkup()->resize(currentMarkup()->size() - 1); eventHandler().startLpd(new (eventAllocator()) StartLpdEvent(lpd->active(), name, entity, parm.type == Param::dso, markupLocation(), currentMarkup())); startLpd(lpd); if (parm.type == Param::mdc) { // unget the mdc currentInput()->ungetToken(); if (entity.isNull()) { message(ParserMessages::noLpdSubset, StringMessageArg(name)); (void)parseLinktypeDeclEnd(); return 1; } // reference the entity Ptr origin = EntityOrigin::make(internalAllocator(), entity, currentLocation()); entity->dsReference(*this, origin); if (inputLevel() == 1) { // reference failed (void)parseLinktypeDeclEnd(); return 1; } } else if (!entity.isNull()) setDsEntity(entity); setPhase(declSubsetPhase); return 1; } Boolean Parser::parseLinktypeDeclEnd() { if (defLpd().type() != Lpd::simpleLink) { if (!defComplexLpd().initialLinkSet()->defined()) message(ParserMessages::noInitialLinkSet, StringMessageArg(defLpd().name())); ComplexLpd::ConstLinkSetIter iter = defComplexLpd().linkSetIter(); const LinkSet *linkSet; while ((linkSet = iter.next()) != 0) if (!linkSet->defined()) message(ParserMessages::undefinedLinkSet, StringMessageArg(linkSet->name())); } ConstPtr tem(defLpdPointer()); endLpd(); startMarkup(eventsWanted().wantPrologMarkup(), currentLocation()); Param parm; Boolean result = parseParam(allowMdc, inputLevel(), parm); eventHandler().endLpd(new (eventAllocator()) EndLpdEvent(tem, markupLocation(), currentMarkup())); return result; } Boolean Parser::parseLinkDecl() { return parseLinkSet(0); } Boolean Parser::parseIdlinkDecl() { return parseLinkSet(1); } // This will only get called if we're defining a complex lpd. Boolean Parser::parseLinkSet(Boolean idlink) { if (defLpd().type() == Lpd::simpleLink) { message(idlink ? ParserMessages::idlinkDeclSimple : ParserMessages::linkDeclSimple); return 0; } if (idlink) { if (defComplexLpd().hadIdLinkSet()) message(ParserMessages::duplicateIdLinkSet); else defComplexLpd().setHadIdLinkSet(); } unsigned declInputLevel = inputLevel(); Param parm; Boolean isExplicit = (defLpd().type() == Lpd::explicitLink); LinkSet *linkSet; if (idlink) { if (!parseParam(allowName, declInputLevel, parm)) return 0; linkSet = 0; } else { static AllowedParams allowNameInitial(Param::name, Param::indicatedReservedName + Syntax::rINITIAL); if (!parseParam(allowNameInitial, declInputLevel, parm)) return 0; if (parm.type == Param::name) linkSet = lookupCreateLinkSet(parm.token); else linkSet = defComplexLpd().initialLinkSet(); if (linkSet->defined()) message(ParserMessages::duplicateLinkSet, StringMessageArg(linkSet->name())); static AllowedParams allowExplicitLinkRule(Param::name, Param::nameGroup, Param::indicatedReservedName + Syntax::rIMPLIED); if (!parseParam(isExplicit ? allowExplicitLinkRule : allowNameNameGroup, declInputLevel, parm)) return 0; } do { StringC id; if (idlink) { parm.token.swap(id); if (!parseParam(isExplicit ? allowExplicitLinkRuleMdc : allowNameNameGroupMdc, declInputLevel, parm)) return 0; } if (parm.type == Param::indicatedReservedName + Syntax::rIMPLIED) { if (!parseParam(allowName, declInputLevel, parm)) return 0; Boolean resultImplied; const ElementType *resultType; AttributeList resultAttributes; if (!parseResultElementSpec(declInputLevel, parm, idlink, resultImplied, resultType, resultAttributes)) return 0; if (resultType) { const AttributeList *dummy; if (linkSet->impliedResultAttributes(resultType, dummy)) message(ParserMessages::duplicateImpliedResult, StringMessageArg(resultType->name())); else linkSet->addImplied(resultType, resultAttributes); } } else { SourceLinkRule *linkRule = 0; IdLinkRule idLinkRule; Ptr linkRuleResource; if (idlink) linkRule = &idLinkRule; else { linkRuleResource = new SourceLinkRuleResource; linkRule = linkRuleResource.pointer(); } Vector assocElementTypes; if (parm.type == Param::name) { assocElementTypes.resize(1); assocElementTypes[0] = lookupCreateElement(parm.token); } else { assocElementTypes.resize(parm.nameTokenVector.size()); for (size_t i = 0; i < assocElementTypes.size(); i++) assocElementTypes[i] = lookupCreateElement(parm.nameTokenVector[i].name); } static AllowedParams allow2i(Param::indicatedReservedName + Syntax::rUSELINK, Param::indicatedReservedName + Syntax::rPOSTLINK, Param::dso, Param::mdc, Param::name, Param::nameGroup); static AllowedParams allow2id(Param::indicatedReservedName + Syntax::rUSELINK, Param::indicatedReservedName + Syntax::rPOSTLINK, Param::dso, Param::mdc, Param::name); static AllowedParams allow2e(Param::indicatedReservedName + Syntax::rUSELINK, Param::indicatedReservedName + Syntax::rPOSTLINK, Param::dso, Param::name, Param::indicatedReservedName + Syntax::rIMPLIED); if (!parseParam(isExplicit ? allow2e : (idlink ? allow2id : allow2i), declInputLevel, parm)) return 0; if (parm.type == Param::indicatedReservedName + Syntax::rUSELINK) { static AllowedParams allowLinkSetEmpty(Param::name, Param::indicatedReservedName + Syntax::rINITIAL, Param::indicatedReservedName + Syntax::rEMPTY); if (!parseParam(allowLinkSetEmpty, declInputLevel, parm)) return 0; const LinkSet *uselink; if (parm.type == Param::name) uselink = lookupCreateLinkSet(parm.token); else if (parm.type == Param::indicatedReservedName + Syntax::rINITIAL) uselink = defComplexLpd().initialLinkSet(); else uselink = defComplexLpd().emptyLinkSet(); linkRule->setUselink(uselink); static AllowedParams allow3i(Param::indicatedReservedName + Syntax::rPOSTLINK, Param::dso, Param::mdc, Param::name, Param::nameGroup); static AllowedParams allow3id(Param::indicatedReservedName + Syntax::rPOSTLINK, Param::dso, Param::mdc, Param::name); static AllowedParams allow3e(Param::indicatedReservedName + Syntax::rPOSTLINK, Param::dso, Param::name, Param::indicatedReservedName + Syntax::rIMPLIED); if (!parseParam(isExplicit ? allow3e : (idlink ? allow3id : allow3i), declInputLevel, parm)) return 0; } if (parm.type == Param::indicatedReservedName + Syntax::rPOSTLINK) { if (!parseParam(allowLinkSetSpec, declInputLevel, parm)) return 0; const LinkSet *postlink; if (parm.type == Param::indicatedReservedName + Syntax::rRESTORE) linkRule->setPostlinkRestore(); else { if (parm.type == Param::name) postlink = lookupCreateLinkSet(parm.token); else if (parm.type == Param::indicatedReservedName + Syntax::rINITIAL) postlink = defComplexLpd().initialLinkSet(); else postlink = defComplexLpd().emptyLinkSet(); linkRule->setPostlink(postlink); } static AllowedParams allow4i(Param::dso, Param::mdc, Param::name, Param::nameGroup); static AllowedParams allow4id(Param::dso, Param::mdc, Param::name); static AllowedParams allow4e(Param::dso, Param::name, Param::indicatedReservedName + Syntax::rIMPLIED); if (!parseParam(isExplicit ? allow4e : (idlink ? allow4id : allow4i), declInputLevel, parm)) return 0; } AttributeList attributes; ConstPtr attDef; for (size_t i = 0; i < assocElementTypes.size(); i++) { const ElementType *e = assocElementTypes[i]; if (e) { if (i == 0) attDef = defComplexLpd().attributeDef(e); else if (attDef != defComplexLpd().attributeDef(e)) message(ParserMessages::assocElementDifferentAtts); // FIXME recover from this } } attributes.init(attDef); if (parm.type == Param::dso) { Boolean netEnabling; Ptr newAttDef; if (!parseAttributeSpec(1, attributes, netEnabling, newAttDef)) return 0; if (!newAttDef.isNull()) { newAttDef->setIndex(defComplexLpd().allocAttributeDefinitionListIndex()); for (size_t i = 0; i < assocElementTypes.size(); i++) { const ElementType *e = assocElementTypes[i]; if (e && defComplexLpd().attributeDef(e) == attDef) defComplexLpd().setAttributeDef(e, newAttDef); } } static AllowedParams allow5e(Param::name, Param::indicatedReservedName + Syntax::rIMPLIED); if (!parseParam(isExplicit ? allow5e : (idlink ? allowNameMdc : allowNameNameGroupMdc), declInputLevel, parm)) return 0; } else attributes.finish(*this); linkRule->setLinkAttributes(attributes); if (isExplicit) { Boolean resultImplied; const ElementType *resultType; AttributeList resultAttributes; if (!parseResultElementSpec(declInputLevel, parm, idlink, resultImplied, resultType, resultAttributes)) return 0; if (!resultImplied) linkRule->setResult(resultType, resultAttributes); } // Install the link rule. if (idlink) { idLinkRule.setAssocElementTypes(assocElementTypes); addIdLinkRule(id, idLinkRule); } else { if (!linkSet->defined()) { for (size_t i = 0; i < assocElementTypes.size(); i++) if (assocElementTypes[i]) addLinkRule(linkSet, assocElementTypes[i], linkRuleResource); } } } } while (parm.type != Param::mdc); if (linkSet) linkSet->setDefined(); if (currentMarkup()) { if (idlink) eventHandler().idLinkDecl(new (eventAllocator()) IdLinkDeclEvent(defComplexLpdPointer(), markupLocation(), currentMarkup())); else eventHandler().linkDecl(new (eventAllocator()) LinkDeclEvent(linkSet, defComplexLpdPointer(), markupLocation(), currentMarkup())); } return 1; } void Parser::addIdLinkRule(const StringC &id, IdLinkRule &rule) { IdLinkRuleGroup *group = defComplexLpd().lookupCreateIdLink(id); size_t nRules = group->nLinkRules(); if ((nRules == 1 && group->linkRule(0).attributes().nSpec() == 0) || nRules >= 1 && rule.attributes().nSpec() == 0) message(ParserMessages::multipleIdLinkRuleAttribute, StringMessageArg(id)); group->addLinkRule(rule); } void Parser::addLinkRule(LinkSet *linkSet, const ElementType *sourceElement, const ConstPtr &linkRule) { size_t nRules = linkSet->nLinkRules(sourceElement); if ((nRules == 1 && linkSet->linkRule(sourceElement, 0).attributes().nSpec() == 0) || nRules >= 1 && linkRule->attributes().nSpec() == 0) message(ParserMessages::multipleLinkRuleAttribute, StringMessageArg(sourceElement->name())); linkSet->addLinkRule(sourceElement, linkRule); } class ResultAttributeSpecModeSetter { public: ResultAttributeSpecModeSetter(ParserState *state) : state_(state) { state_->setResultAttributeSpecMode(); } ~ResultAttributeSpecModeSetter() { clear(); } void clear() { if (state_) { state_->clearResultAttributeSpecMode(); state_ = 0; } } private: ParserState *state_; }; Boolean Parser::parseResultElementSpec(unsigned declInputLevel, Param &parm, Boolean idlink, Boolean &implied, const ElementType *&resultType, AttributeList &attributes) { if (parm.type == Param::indicatedReservedName + Syntax::rIMPLIED) { if (!parseParam(idlink ? allowNameMdc : allowExplicitLinkRuleMdc, declInputLevel, parm)) return 0; implied = 1; } else { implied = 0; ElementType *e = lookupResultElementType(parm.token); resultType = e; static AllowedParams allow(Param::dso, Param::mdc, Param::name, Param::nameGroup, Param::indicatedReservedName + Syntax::rIMPLIED); static AllowedParams allowNameDsoMdc(Param::dso, Param::mdc, Param::name); if (!parseParam(idlink ? allowNameDsoMdc : allow, declInputLevel, parm)) return 0; ConstPtr attDef; if (e) attDef = e->attributeDef(); attributes.init(attDef); if (parm.type == Param::dso) { ResultAttributeSpecModeSetter modeSetter(this); Boolean netEnabling; Ptr newAttDef; if (!parseAttributeSpec(1, attributes, netEnabling, newAttDef)) return 0; if (!newAttDef.isNull()) { Ptr r(defComplexLpd().resultDtd()); if (!r.isNull()) { newAttDef->setIndex(r->allocAttributeDefinitionListIndex()); if (e) e->setAttributeDef(newAttDef); } } modeSetter.clear(); if (attributes.nSpec() == 0) message(ParserMessages::emptyResultAttributeSpec); if (!parseParam(idlink ? allowNameMdc : allowExplicitLinkRuleMdc, declInputLevel, parm)) return 0; } else { // For entity and notation attributes. ResultAttributeSpecModeSetter modeSetter(this); attributes.finish(*this); modeSetter.clear(); } } return 1; } ElementType *Parser::lookupResultElementType(const StringC &name) { Dtd *dtd = defComplexLpd().resultDtd().pointer(); if (!dtd) return 0; ElementType *e = dtd->lookupElementType(name); if (!e) message(ParserMessages::noSuchResultElement, StringMessageArg(name)); return e; } Boolean Parser::parseUselinkDecl() { unsigned declInputLevel = inputLevel(); Param parm; if (!parseParam(allowLinkSetSpec, declInputLevel, parm)) return 0; Param parm2; if (!parseParam(allowName, declInputLevel, parm2)) return 0; StringC linkType; parm2.token.swap(linkType); if (!parseParam(allowMdc, declInputLevel, parm2)) return 0; ConstPtr lpd = lookupLpd(linkType); if (lpd.isNull()) message(ParserMessages::uselinkBadLinkType, StringMessageArg(linkType)); else if (lpd->type() == Lpd::simpleLink) message(ParserMessages::uselinkSimpleLpd, StringMessageArg(linkType)); else { const ComplexLpd *complexLpd = (const ComplexLpd *)lpd.pointer(); const LinkSet *linkSet; Boolean restore = 0; if (parm.type == Param::name) { linkSet = complexLpd->lookupLinkSet(parm.token); if (!linkSet) { message(ParserMessages::uselinkBadLinkSet, StringMessageArg(complexLpd->name()), StringMessageArg(parm.token)); return 1; } } else if (parm.type == Param::indicatedReservedName + Syntax::rINITIAL) linkSet = complexLpd->initialLinkSet(); else if (parm.type == Param::indicatedReservedName + Syntax::rEMPTY) linkSet = complexLpd->emptyLinkSet(); else { linkSet = 0; restore = 1; } if (lpd->active()) eventHandler().uselink(new (eventAllocator()) UselinkEvent(lpd, linkSet, restore, markupLocation(), currentMarkup())); else eventHandler().ignoredMarkup(new (eventAllocator()) IgnoredMarkupEvent(markupLocation(), currentMarkup())); } return 1; } LinkSet *Parser::lookupCreateLinkSet(const StringC &name) { LinkSet *linkSet = defComplexLpd().lookupLinkSet(name); if (!linkSet) { linkSet = new LinkSet(name, defComplexLpd().sourceDtd().pointer()); defComplexLpd().insertLinkSet(linkSet); } return linkSet; } Boolean Parser::parseMarkedSectionDeclStart() { if (markedSectionLevel() == syntax().taglvl()) message(ParserMessages::markedSectionLevel, NumberMessageArg(syntax().taglvl())); if (!inInstance() && options().warnInternalSubsetMarkedSection && inputLevel() == 1) message(ParserMessages::internalSubsetMarkedSection); if (markedSectionSpecialLevel() > 0) { startMarkedSection(markupLocation()); if (inInstance() ? eventsWanted().wantMarkedSections() : eventsWanted().wantPrologMarkup()) eventHandler().ignoredChars(new (eventAllocator()) IgnoredCharsEvent(currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), currentLocation(), 0)); return 1; } Boolean discardMarkup; if (startMarkup(inInstance() ? eventsWanted().wantMarkedSections() : eventsWanted().wantPrologMarkup(), currentLocation())) { currentMarkup()->addDelim(Syntax::dMDO); currentMarkup()->addDelim(Syntax::dDSO); discardMarkup = 0; } else if (options().warnInstanceStatusKeywordSpecS && inInstance()) { startMarkup(1, currentLocation()); discardMarkup = 1; } unsigned declInputLevel = inputLevel(); static AllowedParams allowStatusDso(Param::dso, Param::reservedName + Syntax::rCDATA, Param::reservedName + Syntax::rRCDATA, Param::reservedName + Syntax::rIGNORE, Param::reservedName + Syntax::rINCLUDE, Param::reservedName + Syntax::rTEMP); Param parm; MarkedSectionEvent::Status status = MarkedSectionEvent::include; if (!parseParam(allowStatusDso, declInputLevel, parm)) return 0; if (options().warnMissingStatusKeyword && parm.type == Param::dso) message(ParserMessages::missingStatusKeyword); while (parm.type != Param::dso) { switch (parm.type) { case Param::reservedName + Syntax::rCDATA: if (status < MarkedSectionEvent::cdata) status = MarkedSectionEvent::cdata; break; case Param::reservedName + Syntax::rRCDATA: if (status < MarkedSectionEvent::rcdata) status = MarkedSectionEvent::rcdata; if (options().warnRcdataMarkedSection) message(ParserMessages::rcdataMarkedSection); break; case Param::reservedName + Syntax::rIGNORE: if (status < MarkedSectionEvent::ignore) status = MarkedSectionEvent::ignore; if (inInstance() && options().warnInstanceIgnoreMarkedSection) message(ParserMessages::instanceIgnoreMarkedSection); break; case Param::reservedName + Syntax::rINCLUDE: if (inInstance() && options().warnInstanceIncludeMarkedSection) message(ParserMessages::instanceIncludeMarkedSection); break; case Param::reservedName + Syntax::rTEMP: if (options().warnTempMarkedSection) message(ParserMessages::tempMarkedSection); break; } if (!parseParam(allowStatusDso, declInputLevel, parm)) return 0; if (options().warnMultipleStatusKeyword && parm.type != Param::dso) message(ParserMessages::multipleStatusKeyword); } // FIXME this disallows // // ... // // which I think is legal. if (inputLevel() > declInputLevel) message(ParserMessages::parameterEntityNotEnded); switch (status) { case MarkedSectionEvent::include: startMarkedSection(markupLocation()); break; case MarkedSectionEvent::cdata: startSpecialMarkedSection(cmsMode, markupLocation()); break; case MarkedSectionEvent::rcdata: startSpecialMarkedSection(rcmsMode, markupLocation()); break; case MarkedSectionEvent::ignore: startSpecialMarkedSection(imsMode, markupLocation()); break; } if (currentMarkup()) { if (options().warnInstanceStatusKeywordSpecS && inInstance()) { Location loc(markupLocation()); for (MarkupIter iter(*currentMarkup()); iter.valid(); iter.advance(loc, syntaxPointer())) { if (iter.type() == Markup::s) { setNextLocation(loc); message(ParserMessages::instanceStatusKeywordSpecS); } } if (discardMarkup) startMarkup(0, markupLocation()); } eventHandler().markedSectionStart(new (eventAllocator()) MarkedSectionStartEvent(status, markupLocation(), currentMarkup())); } return 1; } void Parser::handleMarkedSectionEnd() { if (markedSectionLevel() == 0) message(ParserMessages::markedSectionEnd); else { if (inInstance() ? eventsWanted().wantMarkedSections() : eventsWanted().wantPrologMarkup()) { if (markedSectionSpecialLevel() > 1) eventHandler().ignoredChars(new (eventAllocator()) IgnoredCharsEvent(currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), currentLocation(), 0)); else { MarkedSectionEvent::Status status; switch (currentMode()) { case cmsMode: status = MarkedSectionEvent::cdata; break; case rcmsMode: status = MarkedSectionEvent::rcdata; break; case imsMode: status = MarkedSectionEvent::ignore; break; default: status = MarkedSectionEvent::include; break; } startMarkup(1, currentLocation()); currentMarkup()->addDelim(Syntax::dMSC); currentMarkup()->addDelim(Syntax::dMDC); eventHandler().markedSectionEnd(new (eventAllocator()) MarkedSectionEndEvent(status, markupLocation(), currentMarkup())); } } endMarkedSection(); } } void Parser::emptyCommentDecl() { if (startMarkup(eventsWanted().wantCommentDecls(), currentLocation())) { currentMarkup()->addDelim(Syntax::dMDO); currentMarkup()->addDelim(Syntax::dMDC); eventHandler().commentDecl(new (eventAllocator()) CommentDeclEvent(markupLocation(), currentMarkup())); } if (options().warnEmptyCommentDecl) message(ParserMessages::emptyCommentDecl); } Boolean Parser::parseCommentDecl() { if (startMarkup(inInstance() ? eventsWanted().wantCommentDecls() : eventsWanted().wantPrologMarkup(), currentLocation())) currentMarkup()->addDelim(Syntax::dMDO); if (!parseComment(comMode)) return 0; for (;;) { Token token = getToken(mdMode); switch (token) { case tokenS: if (currentMarkup()) currentMarkup()->addS(currentChar()); if (options().warnCommentDeclS) message(ParserMessages::commentDeclS); break; case tokenCom: if (!parseComment(comMode)) return 0; if (options().warnCommentDeclMultiple) message(ParserMessages::commentDeclMultiple); break; case tokenMdc: if (currentMarkup()) currentMarkup()->addDelim(Syntax::dMDC); goto done; case tokenEe: message(ParserMessages::declarationLevel); return 0; case tokenUnrecognized: if (reportNonSgmlCharacter()) break; // braces to work round Sun C++ 4.0 bug { message(ParserMessages::commentDeclarationCharacter, StringMessageArg(currentToken()), markupLocation()); } return 0; default: // braces to work round Sun C++ 4.0 bug { message(ParserMessages::commentDeclInvalidToken, TokenMessageArg(token, mdMode, syntaxPointer(), sdPointer()), markupLocation()); } return 0; } } done: if (currentMarkup()) eventHandler().commentDecl(new (eventAllocator()) CommentDeclEvent(markupLocation(), currentMarkup())); return 1; } Boolean Parser::parseAfdrDecl() { unsigned declInputLevel = inputLevel(); static AllowedParams allowMinimumLiteral(Param::minimumLiteral); Param parm; setHadAfdrDecl(); if (!parseParam(allowMinimumLiteral, declInputLevel, parm)) return 0; if (parm.literalText.string() != sd().execToInternal("ISO/IEC 10744:1997")) message(ParserMessages::afdrVersion, StringMessageArg(parm.literalText.string())); if (!parseParam(allowMdc, declInputLevel, parm)) return 0; eventHandler().ignoredMarkup(new (eventAllocator()) IgnoredMarkupEvent(markupLocation(), currentMarkup())); return 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/parseInstance.cxx100444 764 764 116475 6604607570 14364 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "Parser.h" #include "ParserMessages.h" #include "MessageArg.h" #include "TokenMessageArg.h" #include "StringVectorMessageArg.h" #include "token.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif void Parser::doInstanceStart() { if (cancelled()) { allDone(); return; } // FIXME check here that we have a valid dtd compileInstanceModes(); setPhase(contentPhase); Token token = getToken(currentMode()); switch (token) { case tokenEe: case tokenStagoNameStart: case tokenStagoTagc: case tokenStagoGrpo: case tokenEtagoNameStart: case tokenEtagoTagc: case tokenEtagoGrpo: break; default: if (sd().omittag()) { unsigned startImpliedCount = 0; unsigned attributeListIndex = 0; IList undoList; IList eventList; if (!tryImplyTag(currentLocation(), startImpliedCount, attributeListIndex, undoList, eventList)) CANNOT_HAPPEN(); queueElementEvents(eventList); } else message(ParserMessages::instanceStartOmittag); } currentInput()->ungetToken(); } void Parser::endInstance() { // Do checking before popping entity stack so that there's a // current location for error messages. endAllElements(); while (markedSectionLevel() > 0) { message(ParserMessages::unclosedMarkedSection, currentMarkedSectionStartLocation()); endMarkedSection(); } checkIdrefs(); popInputStack(); allDone(); } void Parser::checkIdrefs() { IdTableIter iter(idTableIter()); Id *id; while ((id = iter.next()) != 0) { for (size_t i = 0; i < id->pendingRefs().size(); i++) { Messenger::setNextLocation(id->pendingRefs()[i]); message(ParserMessages::missingId, StringMessageArg(id->name())); } } } void Parser::doContent() { do { if (cancelled()) { allDone(); return; } Token token = getToken(currentMode()); switch (token) { case tokenEe: if (inputLevel() == 1) { endInstance(); return; } if (inputLevel() == specialParseInputLevel()) { // FIXME have separate messages for each type of special parse // perhaps force end of marked section or element message(ParserMessages::specialParseEntityEnd); } if (eventsWanted().wantInstanceMarkup()) eventHandler().entityEnd(new (eventAllocator()) EntityEndEvent(currentLocation())); if (afterDocumentElement()) message(ParserMessages::afterDocumentElementEntityEnd); if (sd().integrallyStored() && tagLevel() && currentElement().index() != currentInputElementIndex()) message(ParserMessages::contentAsyncEntityRef); popInputStack(); break; case tokenCroDigit: case tokenHcroHexDigit: { if (afterDocumentElement()) message(ParserMessages::characterReferenceAfterDocumentElement); Char ch; Location loc; if (parseNumericCharRef(token == tokenHcroHexDigit, ch, loc)) { acceptPcdata(loc); noteData(); Boolean isSgmlChar; if (!translateNumericCharRef(ch, isSgmlChar)) break; if (!isSgmlChar) { eventHandler().nonSgmlChar(new (eventAllocator()) NonSgmlCharEvent(ch, loc)); break; } eventHandler().data(new (eventAllocator()) ImmediateDataEvent(Event::characterData, &ch, 1, loc, 1)); break; } } break; case tokenCroNameStart: if (afterDocumentElement()) message(ParserMessages::characterReferenceAfterDocumentElement); parseNamedCharRef(); break; case tokenEroGrpo: case tokenEroNameStart: { if (afterDocumentElement()) message(ParserMessages::entityReferenceAfterDocumentElement); ConstPtr entity; Ptr origin; if (parseEntityReference(0, token == tokenEroGrpo, entity, origin)) { if (!entity.isNull()) { if (entity->isCharacterData()) acceptPcdata(Location(origin.pointer(), 0)); if (inputLevel() == specialParseInputLevel()) entity->rcdataReference(*this, origin); else entity->contentReference(*this, origin); } } } break; case tokenEtagoNameStart: acceptEndTag(parseEndTag()); break; case tokenEtagoTagc: parseEmptyEndTag(); break; case tokenEtagoGrpo: parseGroupEndTag(); break; case tokenMdoNameStart: if (startMarkup(eventsWanted().wantInstanceMarkup(), currentLocation())) currentMarkup()->addDelim(Syntax::dMDO); Syntax::ReservedName name; Boolean result; unsigned startLevel; startLevel = inputLevel(); if (parseDeclarationName(&name)) { switch (name) { case Syntax::rUSEMAP: if (afterDocumentElement()) message(ParserMessages::declarationAfterDocumentElement, StringMessageArg(syntax().reservedName(name))); result = parseUsemapDecl(); break; case Syntax::rUSELINK: if (afterDocumentElement()) message(ParserMessages::declarationAfterDocumentElement, StringMessageArg(syntax().reservedName(name))); result = parseUselinkDecl(); break; case Syntax::rDOCTYPE: case Syntax::rLINKTYPE: case Syntax::rELEMENT: case Syntax::rATTLIST: case Syntax::rENTITY: case Syntax::rNOTATION: case Syntax::rSHORTREF: case Syntax::rLINK: case Syntax::rIDLINK: message(ParserMessages::instanceDeclaration, StringMessageArg(syntax().reservedName(name))); result = 0; break; default: message(ParserMessages::noSuchDeclarationType, StringMessageArg(syntax().reservedName(name))); result = 0; break; } } else result = 0; if (!result) skipDeclaration(startLevel); noteMarkup(); break; case tokenMdoMdc: // empty comment emptyCommentDecl(); noteMarkup(); break; case tokenMdoCom: parseCommentDecl(); noteMarkup(); break; case tokenMdoDso: if (afterDocumentElement()) message(ParserMessages::markedSectionAfterDocumentElement); parseMarkedSectionDeclStart(); noteMarkup(); break; case tokenMscMdc: handleMarkedSectionEnd(); noteMarkup(); break; case tokenNet: parseNullEndTag(); break; case tokenPio: parseProcessingInstruction(); break; case tokenStagoNameStart: parseStartTag(); break; case tokenStagoTagc: parseEmptyStartTag(); break; case tokenStagoGrpo: parseGroupStartTag(); break; case tokenRe: acceptPcdata(currentLocation()); queueRe(currentLocation()); break; case tokenRs: acceptPcdata(currentLocation()); noteRs(); if (eventsWanted().wantInstanceMarkup()) eventHandler().ignoredRs(new (eventAllocator()) IgnoredRsEvent(currentChar(), currentLocation())); break; case tokenS: extendContentS(); if (eventsWanted().wantInstanceMarkup()) eventHandler().sSep(new (eventAllocator()) SSepEvent(currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), currentLocation(), 0)); break; case tokenIgnoredChar: extendData(); if (eventsWanted().wantMarkedSections()) eventHandler().ignoredChars(new (eventAllocator()) IgnoredCharsEvent(currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), currentLocation(), 0)); break; case tokenUnrecognized: reportNonSgmlCharacter(); parsePcdata(); break; case tokenCharDelim: message(ParserMessages::dataCharDelim, StringMessageArg(StringC(currentInput()->currentTokenStart(), currentInput()->currentTokenLength()))); // fall through case tokenChar: parsePcdata(); break; default: ASSERT(token >= tokenFirstShortref); handleShortref(token - tokenFirstShortref); break; } } while (eventQueueEmpty()); } void Parser::skipDeclaration(unsigned startLevel) { const unsigned skipMax = 250; unsigned skipCount = 0; for (;;) { Token token = getToken(mdMode); if (inputLevel() == startLevel) skipCount++; switch (token) { case tokenUnrecognized: (void)getChar(); break; case tokenEe: if (inputLevel() <= startLevel) return; popInputStack(); return; case tokenMdc: if (inputLevel() == startLevel) return; break; case tokenS: if (inputLevel() == startLevel && skipCount >= skipMax && currentChar() == syntax().standardFunction(Syntax::fRE)) return; break; default: break; } } } void Parser::handleShortref(int index) { const ConstPtr &entity = currentElement().map()->entity(index); if (!entity.isNull()) { Owner markupPtr; if (eventsWanted().wantInstanceMarkup()) { markupPtr = new Markup; markupPtr->addShortref(currentInput()); } Ptr origin = EntityOrigin::make(internalAllocator(), entity, currentLocation(), currentInput()->currentTokenLength(), markupPtr); entity->contentReference(*this, origin); return; } InputSource *in = currentInput(); size_t length = in->currentTokenLength(); const Char *s = in->currentTokenStart(); size_t i = 0; if (currentMode() == econMode || currentMode() == econnetMode) { // FIXME do this in advance (what about B sequence?) for (i = 0; i < length && syntax().isS(s[i]); i++) ; if (i > 0 && eventsWanted().wantInstanceMarkup()) eventHandler().sSep(new (eventAllocator()) SSepEvent(s, i, currentLocation(), 0)); } if (i < length) { Location location(currentLocation()); location += i; s += i; length -= i; acceptPcdata(location); if (sd().keeprsre()) { noteData(); eventHandler().data(new (eventAllocator()) ImmediateDataEvent(Event::characterData, s, length, location, 0)); return; } // FIXME speed this up for (; length > 0; location += 1, length--, s++) { if (*s == syntax().standardFunction(Syntax::fRS)) { noteRs(); if (eventsWanted().wantInstanceMarkup()) eventHandler().ignoredRs(new (eventAllocator()) IgnoredRsEvent(*s, location)); } else if (*s == syntax().standardFunction(Syntax::fRE)) queueRe(location); else { noteData(); eventHandler().data(new (eventAllocator()) ImmediateDataEvent(Event::characterData, s, 1, location, 0)); } } } } void Parser::parsePcdata() { extendData(); acceptPcdata(currentLocation()); noteData(); eventHandler().data(new (eventAllocator()) ImmediateDataEvent(Event::characterData, currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), currentLocation(), 0)); } void Parser::parseStartTag() { InputSource *in = currentInput(); Markup *markup = startMarkup(eventsWanted().wantInstanceMarkup(), in->currentLocation()); in->discardInitial(); extendNameToken(syntax().namelen(), ParserMessages::nameLength); if (markup) { markup->addDelim(Syntax::dSTAGO); markup->addName(in); } StringC &name = nameBuffer(); getCurrentToken(syntax().generalSubstTable(), name); ElementType *e = currentDtdNonConst().lookupElementType(name); if (sd().rank()) { if (!e) e = completeRankStem(name); else if (e->isRankedElement()) handleRankedElement(e); } if (!e) e = lookupCreateUndefinedElement(name, currentLocation(), currentDtdNonConst()); Boolean netEnabling; AttributeList *attributes = allocAttributeList(e->attributeDef(), 0); Token closeToken = getToken(tagMode); if (closeToken == tokenTagc) { if (name.size() > syntax().taglen()) checkTaglen(markupLocation().index()); attributes->finish(*this); netEnabling = 0; if (markup) markup->addDelim(Syntax::dTAGC); } else { in->ungetToken(); Ptr newAttDef; if (parseAttributeSpec(0, *attributes, netEnabling, newAttDef)) { // The difference between the indices will be the difference // in offsets plus 1 for each named character reference. if (in->currentLocation().index() - markupLocation().index() > syntax().taglen()) checkTaglen(markupLocation().index()); } else netEnabling = 0; if (!newAttDef.isNull()) { newAttDef->setIndex(currentDtdNonConst().allocAttributeDefinitionListIndex()); e->setAttributeDef(newAttDef); } } acceptStartTag(e, new (eventAllocator()) StartElementEvent(e, currentDtdPointer(), attributes, markupLocation(), markup), netEnabling); } ElementType *Parser::completeRankStem(const StringC &name) { const RankStem *rankStem = currentDtd().lookupRankStem(name); if (rankStem) { StringC name(rankStem->name()); if (!appendCurrentRank(name, rankStem)) message(ParserMessages::noCurrentRank, StringMessageArg(name)); else return currentDtdNonConst().lookupElementType(name); } return 0; } void Parser::handleRankedElement(const ElementType *e) { StringC rankSuffix(e->definition()->rankSuffix()); const RankStem *rankStem = e->rankedElementRankStem(); for (size_t i = 0; i < rankStem->nDefinitions(); i++) { const ElementDefinition *def = rankStem->definition(i); for (size_t j = 0; j < def->nRankStems(); j++) setCurrentRank(def->rankStem(j), rankSuffix); } } void Parser::checkTaglen(Index tagStartIndex) { const InputSourceOrigin *origin = currentLocation().origin()->asInputSourceOrigin(); ASSERT(origin != 0); if (origin->startOffset(currentLocation().index()) - origin->startOffset(tagStartIndex + syntax().delimGeneral(Syntax::dSTAGO).size()) > syntax().taglen()) message(ParserMessages::taglen, NumberMessageArg(syntax().taglen())); } void Parser::parseEmptyStartTag() { if (options().warnEmptyTag) message(ParserMessages::emptyStartTag); // FIXME error if not in base. const ElementType *e = 0; if (!sd().omittag()) e = lastEndedElementType(); else if (tagLevel() > 0) e = currentElement().type(); if (!e) e = currentDtd().documentElementType(); AttributeList *attributes = allocAttributeList(e->attributeDef(), 0); attributes->finish(*this); Markup *markup = startMarkup(eventsWanted().wantInstanceMarkup(), currentLocation()); if (markup) { markup->addDelim(Syntax::dSTAGO); markup->addDelim(Syntax::dTAGC); } acceptStartTag(e, new (eventAllocator()) StartElementEvent(e, currentDtdPointer(), attributes, markupLocation(), markup), 0); } void Parser::parseGroupStartTag() { if (startMarkup(eventsWanted().wantInstanceMarkup(), currentLocation())) { currentMarkup()->addDelim(Syntax::dSTAGO); currentMarkup()->addDelim(Syntax::dGRPO); } Boolean active; if (!parseTagNameGroup(active)) return; InputSource *in = currentInput(); // Location startLocation = in->currentLocation(); in->startToken(); Xchar c = in->tokenChar(messenger()); if (!syntax().isNameStartCharacter(c)) { message(ParserMessages::startTagMissingName); return; } in->discardInitial(); extendNameToken(syntax().namelen(), ParserMessages::nameLength); if (currentMarkup()) currentMarkup()->addName(currentInput()); skipAttributeSpec(); if (currentMarkup()) eventHandler().ignoredMarkup(new (eventAllocator()) IgnoredMarkupEvent(markupLocation(), currentMarkup())); noteMarkup(); } void Parser::parseGroupEndTag() { if (startMarkup(eventsWanted().wantInstanceMarkup(), currentLocation())) { currentMarkup()->addDelim(Syntax::dSTAGO); currentMarkup()->addDelim(Syntax::dGRPO); } Boolean active; if (!parseTagNameGroup(active)) return; InputSource *in = currentInput(); // Location startLocation = in->currentLocation(); in->startToken(); Xchar c = in->tokenChar(messenger()); if (!syntax().isNameStartCharacter(c)) { message(ParserMessages::endTagMissingName); return; } in->discardInitial(); extendNameToken(syntax().namelen(), ParserMessages::nameLength); if (currentMarkup()) currentMarkup()->addName(currentInput()); parseEndTagClose(); if (currentMarkup()) eventHandler().ignoredMarkup(new (eventAllocator()) IgnoredMarkupEvent(markupLocation(), currentMarkup())); noteMarkup(); } void Parser::acceptPcdata(const Location &startLocation) { if (currentElement().tryTransitionPcdata()) return; // Need to test here since implying tags may turn off pcdataRecovering. if (pcdataRecovering()) return; IList undoList; IList eventList; unsigned startImpliedCount = 0; unsigned attributeListIndex = 0; keepMessages(); while (tryImplyTag(startLocation, startImpliedCount, attributeListIndex, undoList, eventList)) if (currentElement().tryTransitionPcdata()) { queueElementEvents(eventList); return; } discardKeptMessages(); undo(undoList); if (validate() || afterDocumentElement()) message(ParserMessages::pcdataNotAllowed); pcdataRecover(); } void Parser::acceptStartTag(const ElementType *e, StartElementEvent *event, Boolean netEnabling) { if (e->definition()->undefined() && !implydefElement()) message(ParserMessages::undefinedElement, StringMessageArg(e->name())); if (elementIsExcluded(e)) { keepMessages(); if (validate()) checkExclusion(e); } else { if (currentElement().tryTransition(e)) { pushElementCheck(e, event, netEnabling); return; } if (elementIsIncluded(e)) { event->setIncluded(); pushElementCheck(e, event, netEnabling); return; } keepMessages(); } IList undoList; IList eventList; unsigned startImpliedCount = 0; unsigned attributeListIndex = 1; while (tryImplyTag(event->location(), startImpliedCount, attributeListIndex, undoList, eventList)) if (tryStartTag(e, event, netEnabling, eventList)) return; discardKeptMessages(); undo(undoList); if (validate() && !e->definition()->undefined()) handleBadStartTag(e, event, netEnabling); else { if (validate() ? implydefElement() : afterDocumentElement()) message(ParserMessages::elementNotAllowed, StringMessageArg(e->name())); // If element couldn't occur because it was excluded, then // do the transition here. (void)currentElement().tryTransition(e); pushElementCheck(e, event, netEnabling); } } void Parser::undo(IList &undoList) { while (!undoList.empty()) { Undo *p = undoList.get(); p->undo(this); delete p; } } void Parser::queueElementEvents(IList &events) { releaseKeptMessages(); // FIXME provide IList::reverse function // reverse it IList tem; while (!events.empty()) tem.insert(events.get()); while (!tem.empty()) { Event *e = tem.get(); if (e->type() == Event::startElement) { noteStartElement(((StartElementEvent *)e)->included()); eventHandler().startElement((StartElementEvent *)e); } else { noteEndElement(((EndElementEvent *)e)->included()); eventHandler().endElement((EndElementEvent *)e); } } } void Parser::checkExclusion(const ElementType *e) { const LeafContentToken *token = currentElement().invalidExclusion(e); if (token) message(ParserMessages::invalidExclusion, OrdinalMessageArg(token->typeIndex() + 1), StringMessageArg(token->elementType()->name()), StringMessageArg(currentElement().type()->name())); } Boolean Parser::tryStartTag(const ElementType *e, StartElementEvent *event, Boolean netEnabling, IList &impliedEvents) { if (elementIsExcluded(e)) { checkExclusion(e); return 0; } if (currentElement().tryTransition(e)) { queueElementEvents(impliedEvents); pushElementCheck(e, event, netEnabling); return 1; } if (elementIsIncluded(e)) { queueElementEvents(impliedEvents); event->setIncluded(); pushElementCheck(e, event, netEnabling); return 1; } return 0; } Boolean Parser::tryImplyTag(const Location &loc, unsigned &startImpliedCount, unsigned &attributeListIndex, IList &undo, IList &eventList) { if (!sd().omittag()) return 0; if (currentElement().isFinished()) { if (tagLevel() == 0) return 0; #if 1 const ElementDefinition *def = currentElement().type()->definition(); if (def && !def->canOmitEndTag()) return 0; #endif // imply an end tag if (startImpliedCount > 0) { message(ParserMessages::startTagEmptyElement, StringMessageArg(currentElement().type()->name())); startImpliedCount--; } #if 0 const ElementDefinition *def = currentElement().type()->definition(); if (def && !def->canOmitEndTag()) message(ParserMessages::omitEndTagDeclare, StringMessageArg(currentElement().type()->name()), currentElement().startLocation()); #endif EndElementEvent *event = new (eventAllocator()) EndElementEvent(currentElement().type(), currentDtdPointer(), loc, 0); eventList.insert(event); undo.insert(new (internalAllocator()) UndoEndTag(popSaveElement())); return 1; } const LeafContentToken *token = currentElement().impliedStartTag(); if (!token) return 0; const ElementType *e = token->elementType(); if (elementIsExcluded(e)) message(ParserMessages::requiredElementExcluded, OrdinalMessageArg(token->typeIndex() + 1), StringMessageArg(e->name()), StringMessageArg(currentElement().type()->name())); if (tagLevel() != 0) undo.insert(new (internalAllocator()) UndoTransition(currentElement().matchState())); currentElement().doRequiredTransition(); const ElementDefinition *def = e->definition(); if (def->declaredContent() != ElementDefinition::modelGroup && def->declaredContent() != ElementDefinition::any) message(ParserMessages::omitStartTagDeclaredContent, StringMessageArg(e->name())); if (def->undefined()) message(ParserMessages::undefinedElement, StringMessageArg(e->name())); else if (!def->canOmitStartTag()) message(ParserMessages::omitStartTagDeclare, StringMessageArg(e->name())); AttributeList *attributes = allocAttributeList(e->attributeDef(), attributeListIndex++); // this will give an error if the element has a required attribute attributes->finish(*this); startImpliedCount++; StartElementEvent *event = new (eventAllocator()) StartElementEvent(e, currentDtdPointer(), attributes, loc, 0); pushElementCheck(e, event, undo, eventList); const int implyCheckLimit = 30; // this is fairly arbitrary if (startImpliedCount > implyCheckLimit && !checkImplyLoop(startImpliedCount)) return 0; return 1; } void Parser::pushElementCheck(const ElementType *e, StartElementEvent *event, Boolean netEnabling) { if (tagLevel() == syntax().taglvl()) message(ParserMessages::taglvlOpenElements, NumberMessageArg(syntax().taglvl())); noteStartElement(event->included()); if (event->mustOmitEnd()) { if (sd().emptyElementNormal()) { Boolean included = event->included(); Location loc(event->location()); eventHandler().startElement(event); endTagEmptyElement(e, netEnabling, included, loc); } else { EndElementEvent *end = new (eventAllocator()) EndElementEvent(e, currentDtdPointer(), event->location(), 0); if (event->included()) { end->setIncluded(); noteEndElement(1); } else noteEndElement(0); eventHandler().startElement(event); eventHandler().endElement(end); } } else { const ShortReferenceMap *map = e->map(); if (!map) map = currentElement().map(); pushElement(new (internalAllocator()) OpenElement(e, netEnabling, event->included(), map, event->location())); // Can't access event after it's passed to the event handler. eventHandler().startElement(event); } } void Parser::endTagEmptyElement(const ElementType *e, Boolean netEnabling, Boolean included, const Location &startLoc) { Token token = getToken(netEnabling ? econnetMode : econMode); switch (token) { case tokenNet: if (netEnabling) { Markup *markup = startMarkup(eventsWanted().wantInstanceMarkup(), currentLocation()); if (markup) markup->addDelim(Syntax::dNET); EndElementEvent *end = new (eventAllocator()) EndElementEvent(e, currentDtdPointer(), currentLocation(), markup); if (included) end->setIncluded(); eventHandler().endElement(end); noteEndElement(included); return; } break; case tokenEtagoTagc: { if (options().warnEmptyTag) message(ParserMessages::emptyEndTag); Markup *markup = startMarkup(eventsWanted().wantInstanceMarkup(), currentLocation()); if (markup) { markup->addDelim(Syntax::dETAGO); markup->addDelim(Syntax::dTAGC); } EndElementEvent *end = new (eventAllocator()) EndElementEvent(e, currentDtdPointer(), currentLocation(), markup); if (included) end->setIncluded(); eventHandler().endElement(end); noteEndElement(included); return; } case tokenEtagoNameStart: { EndElementEvent *end = parseEndTag(); if (end->elementType() == e) { if (included) end->setIncluded(); eventHandler().endElement(end); noteEndElement(included); return; } if (!elementIsOpen(end->elementType())) { message(ParserMessages::elementNotOpen, StringMessageArg(end->elementType()->name())); delete end; break; } implyEmptyElementEnd(e, included, startLoc); acceptEndTag(end); return; } default: break; } implyEmptyElementEnd(e, included, startLoc); currentInput()->ungetToken(); } void Parser::implyEmptyElementEnd(const ElementType *e, Boolean included, const Location &startLoc) { if (!sd().omittag()) message(ParserMessages::omitEndTagOmittag, StringMessageArg(e->name()), startLoc); else { const ElementDefinition *def = e->definition(); if (def && !def->canOmitEndTag()) message(ParserMessages::omitEndTagDeclare, StringMessageArg(e->name()), startLoc); } EndElementEvent *end = new (eventAllocator()) EndElementEvent(e, currentDtdPointer(), currentLocation(), 0); if (included) end->setIncluded(); noteEndElement(included); eventHandler().endElement(end); } void Parser::pushElementCheck(const ElementType *e, StartElementEvent *event, IList &undoList, IList &eventList) { if (tagLevel() == syntax().taglvl()) message(ParserMessages::taglvlOpenElements, NumberMessageArg(syntax().taglvl())); eventList.insert(event); if (event->mustOmitEnd()) { EndElementEvent *end = new (eventAllocator()) EndElementEvent(e, currentDtdPointer(), event->location(), 0); if (event->included()) end->setIncluded(); eventList.insert(end); } else { undoList.insert(new (internalAllocator()) UndoStartTag); const ShortReferenceMap *map = e->map(); if (!map) map = currentElement().map(); pushElement(new (internalAllocator()) OpenElement(e, 0, event->included(), map, event->location())); } } EndElementEvent *Parser::parseEndTag() { Markup *markup = startMarkup(eventsWanted().wantInstanceMarkup(), currentLocation()); currentInput()->discardInitial(); extendNameToken(syntax().namelen(), ParserMessages::nameLength); if (markup) { markup->addDelim(Syntax::dETAGO); markup->addName(currentInput()); } StringC &name = nameBuffer(); getCurrentToken(syntax().generalSubstTable(), name); const ElementType *e = currentDtd().lookupElementType(name); if (sd().rank()) { if (!e) e = completeRankStem(name); } if (!e) e = lookupCreateUndefinedElement(name, currentLocation(), currentDtdNonConst()); parseEndTagClose(); return new (eventAllocator()) EndElementEvent(e, currentDtdPointer(), markupLocation(), markup); } void Parser::parseEndTagClose() { for (;;) { Token token = getToken(tagMode); switch (token) { case tokenUnrecognized: if (!reportNonSgmlCharacter()) message(ParserMessages::endTagCharacter, StringMessageArg(currentToken())); return; case tokenEe: message(ParserMessages::endTagEntityEnd); return; case tokenEtago: case tokenStago: if (!sd().endTagUnclosed()) message(ParserMessages::unclosedEndTagShorttag); currentInput()->ungetToken(); return; case tokenTagc: if (currentMarkup()) currentMarkup()->addDelim(Syntax::dTAGC); return; case tokenS: if (currentMarkup()) currentMarkup()->addS(currentChar()); break; default: message(ParserMessages::endTagInvalidToken, TokenMessageArg(token, tagMode, syntaxPointer(), sdPointer())); return; } } } void Parser::parseEmptyEndTag() { if (options().warnEmptyTag) message(ParserMessages::emptyEndTag); // FIXME what to do if not in base if (tagLevel() == 0) message(ParserMessages::emptyEndTagNoOpenElements); else { Markup *markup = startMarkup(eventsWanted().wantInstanceMarkup(), currentLocation()); if (markup) { markup->addDelim(Syntax::dETAGO); markup->addDelim(Syntax::dTAGC); } acceptEndTag(new (eventAllocator()) EndElementEvent(currentElement().type(), currentDtdPointer(), currentLocation(), markup)); } } void Parser::parseNullEndTag() { // If a null end tag was recognized, then there must be a net enabling // element on the stack. for (;;) { ASSERT(tagLevel() > 0); if (currentElement().netEnabling()) break; if (!currentElement().isFinished() && validate()) message(ParserMessages::elementNotFinished, StringMessageArg(currentElement().type()->name())); implyCurrentElementEnd(currentLocation()); } if (!currentElement().isFinished() && validate()) message(ParserMessages::elementEndTagNotFinished, StringMessageArg(currentElement().type()->name())); Markup *markup = startMarkup(eventsWanted().wantInstanceMarkup(), currentLocation()); if (markup) markup->addDelim(Syntax::dNET); acceptEndTag(new (eventAllocator()) EndElementEvent(currentElement().type(), currentDtdPointer(), currentLocation(), markup)); } void Parser::endAllElements() { while (tagLevel() > 0) { if (!currentElement().isFinished()) message(ParserMessages::elementNotFinishedDocumentEnd, StringMessageArg(currentElement().type()->name())); implyCurrentElementEnd(currentLocation()); } if (!currentElement().isFinished() && validate()) message(ParserMessages::noDocumentElement); } void Parser::acceptEndTag(EndElementEvent *event) { const ElementType *e = event->elementType(); if (!elementIsOpen(e)) { message(ParserMessages::elementNotOpen, StringMessageArg(e->name())); delete event; return; } for (;;){ if (currentElement().type() == e) break; if (!currentElement().isFinished() && validate()) message(ParserMessages::elementNotFinished, StringMessageArg(currentElement().type()->name())); implyCurrentElementEnd(event->location()); } if (!currentElement().isFinished() && validate()) message(ParserMessages::elementEndTagNotFinished, StringMessageArg(currentElement().type()->name())); if (currentElement().included()) event->setIncluded(); noteEndElement(event->included()); eventHandler().endElement(event); popElement(); } void Parser::implyCurrentElementEnd(const Location &loc) { if (!sd().omittag()) message(ParserMessages::omitEndTagOmittag, StringMessageArg(currentElement().type()->name()), currentElement().startLocation()); else { const ElementDefinition *def = currentElement().type()->definition(); if (def && !def->canOmitEndTag()) message(ParserMessages::omitEndTagDeclare, StringMessageArg(currentElement().type()->name()), currentElement().startLocation()); } EndElementEvent *event = new (eventAllocator()) EndElementEvent(currentElement().type(), currentDtdPointer(), loc, 0); if (currentElement().included()) event->setIncluded(); noteEndElement(event->included()); eventHandler().endElement(event); popElement(); } void Parser::extendData() { XcharMap isNormal(normalMap()); InputSource *in = currentInput(); size_t length = in->currentTokenLength(); // This is one of the parser's inner loops, so it needs to be fast. while (isNormal[in->tokenCharInBuffer(messenger())]) length++; in->endToken(length); } void Parser::extendContentS() { InputSource *in = currentInput(); size_t length = in->currentTokenLength(); XcharMap isNormal(normalMap()); for (;;) { Xchar ch = in->tokenChar(messenger()); if (!syntax().isS(ch) || !isNormal[ch]) break; length++; } in->endToken(length); } void Parser::handleBadStartTag(const ElementType *e, StartElementEvent *event, Boolean netEnabling) { IList undoList; IList eventList; keepMessages(); for (;;) { Vector missing; findMissingTag(e, missing); if (missing.size() == 1) { queueElementEvents(eventList); const ElementType *m = missing[0]; message(ParserMessages::missingElementInferred, StringMessageArg(e->name()), StringMessageArg(m->name())); AttributeList *attributes = allocAttributeList(m->attributeDef(), 1); // this will give an error if the element has a required attribute attributes->finish(*this); StartElementEvent *inferEvent = new (eventAllocator()) StartElementEvent(m, currentDtdPointer(), attributes, event->location(), 0); if (!currentElement().tryTransition(m)) inferEvent->setIncluded(); pushElementCheck(m, inferEvent, 0); if (!currentElement().tryTransition(e)) event->setIncluded(); pushElementCheck(e, event, netEnabling); return; } if (missing.size() > 0) { queueElementEvents(eventList); Vector missingNames; for (size_t i = 0; i < missing.size(); i++) missingNames.push_back(missing[i]->name()); message(ParserMessages::missingElementMultiple, StringMessageArg(e->name()), StringVectorMessageArg(missingNames)); pushElementCheck(e, event, netEnabling); return; } if (!sd().omittag() || !currentElement().isFinished() || tagLevel() == 0 || !currentElement().type()->definition()->canOmitEndTag()) break; EndElementEvent *endEvent = new (eventAllocator()) EndElementEvent(currentElement().type(), currentDtdPointer(), event->location(), 0); eventList.insert(endEvent); undoList.insert(new (internalAllocator()) UndoEndTag(popSaveElement())); } discardKeptMessages(); undo(undoList); message(ParserMessages::elementNotAllowed, StringMessageArg(e->name())); // If element couldn't occur because it was excluded, then // do the transition here. (void)currentElement().tryTransition(e); pushElementCheck(e, event, netEnabling); } void Parser::findMissingTag(const ElementType *e, Vector &v) { if (!currentElement().currentPosition()) { if (!e) v.push_back((const ElementType *)0); return; } if (elementIsExcluded(e)) return; size_t newSize = 0; currentElement().matchState().possibleTransitions(v); // FIXME also get currentInclusions for (size_t i = 0; i < v.size(); i++) { if (v[i] && !elementIsExcluded(v[i])) { Boolean success = 0; switch (v[i]->definition()->declaredContent()) { case ElementDefinition::modelGroup: { const CompiledModelGroup *grp = v[i]->definition()->compiledModelGroup(); MatchState state(grp); if (!e) { if (state.tryTransitionPcdata()) success = 1; } else { if (state.tryTransition(e)) success = 1; if (!success) { for (size_t j = 0; j < v[i]->definition()->nInclusions(); j++) if (v[i]->definition()->inclusion(j) == e) { success = 1; break; } } if (success) { for (size_t j = 0; j < v[i]->definition()->nExclusions(); j++) if (v[i]->definition()->exclusion(j) == e) { success = 0; break; } } } } break; #if 0 case ElementDefinition::any: success = 1; break; #endif case ElementDefinition::cdata: case ElementDefinition::rcdata: if (e == 0) success = 1; break; default: break; } if (success) v[newSize++] = v[i]; } } v.resize(newSize); // Sort them according to the order of their occurrence in the DTD. // Do an insertion sort. for (size_t i = 1; i < v.size(); i++) { const ElementType *tem = v[i]; size_t j; for (j = i; j > 0 && v[j - 1]->index() > tem->index(); j--) v[j] = v[j - 1]; v[j] = tem; } } #if 0 // This produces messages that are too verbose // This doesn't try to be very efficient. // 0 for #pcdata void Parser::getAllowedElementTypes(Vector &v) { v.clear(); // FIXME get a list of all inclusions first // getCurrentInclusions(v); // x says whether each element of v was excluded Vector x(v.size(), 0); unsigned startImpliedCount = 0; IList undoList; for (;;) { if (currentElement().currentPosition()) { // have a model group size_t i = v.size(); currentElement().matchState().possibleTransitions(v); x.resize(v.size()); for (size_t j = i; j < v.size(); j++) x[j] = (v[j] && elementIsExcluded(v[j])); if (!sd().omittag()) break; // Try to imply a tag if (currentElement().isFinished()) { if (tagLevel() == 0) break; if (startImpliedCount) break; const ElementDefinition *def = currentElement().type()->definition(); if (def && def->canOmitEndTag()) undoList.insert(new (internalAllocator()) UndoEndTag(popSaveElement())); else break; } else { const LeafContentToken *token = currentElement().impliedStartTag(); if (!token) break; const ElementType *e = token->elementType(); if (elementIsExcluded(e)) break; const ElementDefinition *def = e->definition(); if (!def || def->undefined() || (def->declaredContent() != ElementDefinition::modelGroup && def->declaredContent() != ElementDefinition::any) || !def->canOmitStartTag()) break; undoList.insert(new (internalAllocator()) UndoStartTag); startImpliedCount++; pushElement(new (internalAllocator()) OpenElement(e, 0, 0, 0, Location())); if (checkImplyLoop(startImpliedCount)) break; for (size_t i = 0; i < def->nInclusions(); i++) if (!elementIsExcluded(def->inclusion(i))) { v.push_back(def->inclusion(i)); x.push_back(0); } } } else { // must be allowed #pcdata v.push_back((const ElementType *)0); x.push_back((PackedBoolean)0); break; } } undo(undoList); // Remove exclusions and duplicates and undefined size_t newSize = 0; for (size_t i = 0; i < v.size(); i++) if (!x[i] && (!v[i] || !v[i]->definition()->undefined())) { Boolean dup = 0; for (size_t j = 0; j < newSize; j++) if (v[i] == v[j]) { dup = 1; break; } if (!dup) v[newSize++] = v[i]; } v.resize(newSize); } #endif #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/parseMode.cxx100444 764 764 36722 6604607570 13460 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "Parser.h" #include "ParserMessages.h" #include "MessageArg.h" #include "TokenMessageArg.h" #include "ModeInfo.h" #include "Partition.h" #include "SrInfo.h" #include "Vector.h" #include "ISetIter.h" #include "token.h" #include "TrieBuilder.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif enum { modeUsedInSd = 01, modeUsedInProlog = 02, modeUsedInInstance = 04, modeUsesSr = 010 }; static struct { Mode mode; unsigned flags; } modeTable[] = { { grpMode, modeUsedInProlog|modeUsedInInstance }, { alitMode, modeUsedInProlog|modeUsedInInstance }, { alitaMode, modeUsedInProlog|modeUsedInInstance }, { aliteMode, modeUsedInProlog|modeUsedInInstance }, { talitMode, modeUsedInProlog|modeUsedInInstance }, { talitaMode, modeUsedInProlog|modeUsedInInstance }, { taliteMode, modeUsedInProlog|modeUsedInInstance }, { mdMode, modeUsedInProlog|modeUsedInInstance }, { mdMinusMode, modeUsedInProlog }, { mdPeroMode, modeUsedInProlog }, { sdMode, modeUsedInSd }, { comMode, modeUsedInProlog|modeUsedInInstance }, { sdcomMode, modeUsedInSd }, { piMode, modeUsedInProlog|modeUsedInInstance }, { refMode, modeUsedInProlog|modeUsedInInstance|modeUsedInSd }, { imsMode, modeUsedInProlog|modeUsedInInstance }, { cmsMode, modeUsedInProlog|modeUsedInInstance }, { rcmsMode, modeUsedInProlog|modeUsedInInstance }, { proMode, modeUsedInProlog }, { dsMode, modeUsedInProlog }, { dsiMode, modeUsedInProlog }, { plitMode, modeUsedInProlog }, { plitaMode, modeUsedInProlog }, { pliteMode, modeUsedInProlog }, { sdplitMode, modeUsedInSd }, { sdplitaMode, modeUsedInSd }, { grpsufMode, modeUsedInProlog }, { mlitMode, modeUsedInProlog|modeUsedInSd }, { mlitaMode, modeUsedInProlog|modeUsedInSd }, { asMode, modeUsedInProlog }, { slitMode, modeUsedInProlog }, { slitaMode, modeUsedInProlog }, { sdslitMode, modeUsedInSd }, { sdslitaMode, modeUsedInSd }, { cconMode, modeUsedInInstance }, { rcconMode, modeUsedInInstance }, { cconnetMode, modeUsedInInstance }, { rcconnetMode, modeUsedInInstance }, { rcconeMode, modeUsedInInstance }, { tagMode, modeUsedInInstance }, { econMode, modeUsedInInstance|modeUsesSr }, { mconMode, modeUsedInInstance|modeUsesSr }, { econnetMode, modeUsedInInstance|modeUsesSr }, { mconnetMode, modeUsedInInstance|modeUsesSr }, }; void Parser::compileSdModes() { Mode modes[nModes]; int n = 0; for (size_t i = 0; i < SIZEOF(modeTable); i++) if (modeTable[i].flags & modeUsedInSd) modes[n++] = modeTable[i].mode; compileModes(modes, n, 0); } void Parser::compilePrologModes() { Boolean scopeInstance = sd().scopeInstance(); Boolean haveSr = syntax().hasShortrefs(); Mode modes[nModes]; int n = 0; for (size_t i = 0; i < SIZEOF(modeTable); i++) { if (scopeInstance) { if (modeTable[i].flags & modeUsedInProlog) modes[n++] = modeTable[i].mode; } else if (haveSr) { if ((modeTable[i].flags & (modeUsedInInstance|modeUsedInProlog)) && !(modeTable[i].flags & modeUsesSr)) modes[n++] = modeTable[i].mode; } else { if (modeTable[i].flags & (modeUsedInInstance|modeUsedInProlog)) modes[n++] = modeTable[i].mode; } } compileModes(modes, n, 0); } void Parser::compileInstanceModes() { Boolean scopeInstance = sd().scopeInstance(); compileNormalMap(); if (!scopeInstance && !syntax().hasShortrefs()) return; Mode modes[nModes]; int n = 0; for (size_t i = 0; i < SIZEOF(modeTable); i++) { if (scopeInstance) { if (modeTable[i].flags & modeUsedInInstance) modes[n++] = modeTable[i].mode; } else { if (modeTable[i].flags & modeUsesSr) modes[n++] = modeTable[i].mode; } } compileModes(modes, n, ¤tDtd()); } void Parser::compileModes(const Mode *modes, int n, const Dtd *dtd) { PackedBoolean sets[Syntax::nSet]; PackedBoolean delims[Syntax::nDelimGeneral]; PackedBoolean functions[3]; int i; Boolean includesShortref = 0; for (i = 0; i < Syntax::nSet; i++) sets[i] = 0; for (i = 0; i < Syntax::nDelimGeneral; i++) delims[i] = 0; for (i = 0; i < 3; i++) functions[i] = 0; for (i = 0; i < n; i++) { ModeInfo iter(modes[i], sd()); TokenInfo ti; while (iter.nextToken(&ti)) { switch (ti.type) { case TokenInfo::delimType: delims[ti.delim1] = 1; break; case TokenInfo::delimDelimType: delims[ti.delim1] = 1; delims[ti.delim2] = 1; break; case TokenInfo::delimSetType: delims[ti.delim1] = 1; // fall through case TokenInfo::setType: sets[ti.set] = 1; break; case TokenInfo::functionType: functions[ti.function] = 1; break; } } if (!includesShortref && iter.includesShortref()) includesShortref = 1; } ISet chars; for (i = 0; i < 3; i++) if (functions[i]) chars.add(syntax().standardFunction(i)); for (i = 0; i < Syntax::nDelimGeneral; i++) if (delims[i]) { const StringC &str = syntax().delimGeneral(i); for (size_t j = 0; j < str.size(); j++) chars.add(str[j]); } if (includesShortref && dtd) { size_t n = dtd->nShortref(); for (size_t i = 0; i < n; i++) { const StringC &delim = dtd->shortref(i); size_t len = delim.size(); for (size_t j = 0; j < len; j++) if (delim[j] == sd().execToInternal('B')) sets[Syntax::blank] = 1; else chars.add(delim[j]); } } const ISet *csets[Syntax::nSet]; int usedSets = 0; for (i = 0; i < Syntax::nSet; i++) if (sets[i]) csets[usedSets++] = syntax().charSet(i); Partition partition(chars, csets, usedSets, *syntax().generalSubstTable()); String setCodes[Syntax::nSet]; int nCodes = 0; for (i = 0; i < Syntax::nSet; i++) if (sets[i]) setCodes[i] = partition.setCodes(nCodes++); String delimCodes[Syntax::nDelimGeneral]; for (i = 0; i < Syntax::nDelimGeneral; i++) if (delims[i]) { StringC str = syntax().delimGeneral(i); for (size_t j = 0; j < str.size(); j++) delimCodes[i] += partition.charCode(str[j]); } String functionCode[3]; for (i = 0; i < 3; i++) if (functions[i]) functionCode[i] += partition.charCode(syntax().standardFunction(i)); Vector srInfo; int nShortref; if (!includesShortref || !dtd) nShortref = 0; else { nShortref = dtd->nShortref(); srInfo.resize(nShortref); for (i = 0; i < nShortref; i++) { const StringC delim = dtd->shortref(i); SrInfo *p = &srInfo[i]; size_t j; for (j = 0; j < delim.size(); j++) { if (delim[j] == sd().execToInternal('B')) break; p->chars += partition.charCode(delim[j]); } if (j < delim.size()) { p->bSequenceLength = 1; for (++j; j < delim.size(); j++) { if (delim[j] != sd().execToInternal('B')) break; p->bSequenceLength += 1; } for (; j < delim.size(); j++) p->chars2 += partition.charCode(delim[j]); } else p->bSequenceLength = 0; } } String dataDelimCodes; if (options().warnDataDelim) { ModeInfo iter(mconMode, sd()); TokenInfo ti; while (iter.nextToken(&ti)) { switch (ti.type) { case TokenInfo::delimType: case TokenInfo::delimDelimType: case TokenInfo::delimSetType: { if (ti.token == tokenMscMdc) break; const StringC &delim = syntax().delimGeneral(ti.delim1); if (!delim.size()) break; EquivCode c = partition.charCode(delim[0]); for (size_t i = 0; ; i++) { if (i >= dataDelimCodes.size()) { dataDelimCodes += c; break; } if (dataDelimCodes[i] == c) break; } } break; default: break; } } } const String emptyString; Boolean multicode = syntax().multicode(); for (i = 0; i < n; i++) { TrieBuilder tb(partition.maxCode() + 1); TrieBuilder::TokenVector ambiguities; Vector suppressTokens; if (multicode) { suppressTokens.assign(partition.maxCode() + 1, 0); suppressTokens[partition.eECode()] = tokenEe; } tb.recognizeEE(partition.eECode(), tokenEe); ModeInfo iter(modes[i], sd()); TokenInfo ti; // We try to handle the possibility that some delimiters may be empty; // this might happen when compiling recognizers for the SGML declaration. while (iter.nextToken(&ti)) { switch (ti.type) { case TokenInfo::delimType: if (delimCodes[ti.delim1].size() > 0) tb.recognize(delimCodes[ti.delim1], ti.token, ti.priority, ambiguities); break; case TokenInfo::delimDelimType: { String str(delimCodes[ti.delim1]); if (str.size() > 0 && delimCodes[ti.delim2].size() > 0) { str += delimCodes[ti.delim2]; tb.recognize(str, ti.token, ti.priority, ambiguities); } } break; case TokenInfo::delimSetType: if (delimCodes[ti.delim1].size() > 0) tb.recognize(delimCodes[ti.delim1], setCodes[ti.set], ti.token, ti.priority, ambiguities); break; case TokenInfo::setType: tb.recognize(emptyString, setCodes[ti.set], ti.token, ti.priority, ambiguities); if (multicode) { const String &equivCodes = setCodes[ti.set]; for (size_t j = 0; j < equivCodes.size(); j++) suppressTokens[equivCodes[j]] = ti.token; } break; case TokenInfo::functionType: tb.recognize(functionCode[ti.function], ti.token, ti.priority, ambiguities); if (multicode) suppressTokens[functionCode[ti.function][0]] = ti.token; break; } } if (iter.includesShortref()) { for (int j = 0; j < nShortref; j++) { const SrInfo *p = &srInfo[j]; if (p->bSequenceLength > 0) tb.recognizeB(p->chars, p->bSequenceLength, syntax().quantity(Syntax::qBSEQLEN), setCodes[Syntax::blank], p->chars2, tokenFirstShortref + j, ambiguities); else tb.recognize(p->chars, tokenFirstShortref + j, Priority::delim, ambiguities); } } if (options().warnDataDelim) { switch (modes[i]) { default: if (!iter.includesShortref()) break; // fall through case alitMode: case alitaMode: case aliteMode: case talitMode: case talitaMode: case taliteMode: for (size_t j = 0; j < dataDelimCodes.size(); j++) { String code; code += dataDelimCodes[j]; tb.recognize(code, tokenCharDelim, Priority::dataDelim, ambiguities); } break; case plitMode: case plitaMode: case pliteMode: { String code; code += partition.charCode(syntax().delimGeneral(Syntax::dPERO)[0]); tb.recognize(code, tokenCharDelim, Priority::dataDelim, ambiguities); } break; } } setRecognizer(modes[i], (multicode ? new Recognizer(tb.extractTrie(), partition.map(), suppressTokens) : new Recognizer(tb.extractTrie(), partition.map()))); // FIXME give more information for (size_t j = 0; j < ambiguities.size(); j += 2) message(ParserMessages::lexicalAmbiguity, TokenMessageArg(ambiguities[j], modes[i], syntaxPointer(), sdPointer()), TokenMessageArg(ambiguities[j + 1], modes[i], syntaxPointer(), sdPointer())); } } void Parser::compileNormalMap() { XcharMap map(0); ISetIter sgmlCharIter(*syntax().charSet(Syntax::sgmlChar)); Char min, max; while (sgmlCharIter.next(min, max)) map.setRange(min, max, 1); ModeInfo iter(mconnetMode, sd()); TokenInfo ti; while (iter.nextToken(&ti)) { switch (ti.type) { case TokenInfo::delimType: case TokenInfo::delimDelimType: case TokenInfo::delimSetType: { const StringC &delim = syntax().delimGeneral(ti.delim1); if (!delim.size()) break; Char c = delim[0]; map.setChar(c, 0); StringC str(syntax().generalSubstTable()->inverse(c)); for (size_t i = 0; i < str.size(); i++) map.setChar(str[i], 0); } break; case TokenInfo::setType: if (ti.token != tokenChar) { ISetIter setIter(*syntax().charSet(ti.set)); Char min, max; while (setIter.next(min, max)) map.setRange(min, max, 0); } break; case TokenInfo::functionType: if (ti.token != tokenChar) map.setChar(syntax().standardFunction(ti.function), 0); break; } } int nShortref = currentDtd().nShortref(); for (int i = 0; i < nShortref; i++) { Char c = currentDtd().shortref(i)[0]; if (c == sd().execToInternal('B')) { ISetIter setIter(*syntax().charSet(Syntax::blank)); Char min, max; while (setIter.next(min, max)) map.setRange(min, max, 0); } else { map.setChar(c, 0); StringC str(syntax().generalSubstTable()->inverse(c)); for (size_t j = 0; j < str.size(); j++) map.setChar(str[j], 0); } } setNormalMap(map); } void Parser::addNeededShortrefs(Dtd &dtd, const Syntax &syntax) { if (!syntax.hasShortrefs()) return; PackedBoolean delimRelevant[Syntax::nDelimGeneral]; size_t i; for (i = 0; i < Syntax::nDelimGeneral; i++) delimRelevant[i] = 0; ModeInfo iter(mconnetMode, sd()); TokenInfo ti; while (iter.nextToken(&ti)) { switch (ti.type) { case TokenInfo::delimType: case TokenInfo::delimDelimType: case TokenInfo::delimSetType: delimRelevant[ti.delim1] = 1; break; default: break; } } // PIO and NET are the only delimiters that are recognized in con // mode without context. If a short reference delimiter is // identical to one of these delimiters, then we'll have an // ambiguity. We make such a short reference delimiter needed // to ensure that this ambiguity is reported. if (syntax.isValidShortref(syntax.delimGeneral(Syntax::dPIO))) dtd.addNeededShortref(syntax.delimGeneral(Syntax::dPIO)); if (syntax.isValidShortref(syntax.delimGeneral(Syntax::dNET))) dtd.addNeededShortref(syntax.delimGeneral(Syntax::dNET)); size_t nShortrefComplex = syntax.nDelimShortrefComplex(); // A short reference delimiter is needed if it is used or if it can // contains some other shorter delimiter that is either a relevant general // delimiter or a shortref delimiter that is used. for (i = 0; i < nShortrefComplex; i++) { size_t j; for (j = 0; j < Syntax::nDelimGeneral; j++) if (delimRelevant[j] && shortrefCanPreemptDelim(syntax.delimShortrefComplex(i), syntax.delimGeneral(j), 0, syntax)) { dtd.addNeededShortref(syntax.delimShortrefComplex(i)); break; } for (j = 0; j < dtd.nShortref(); j++) if (shortrefCanPreemptDelim(syntax.delimShortrefComplex(i), dtd.shortref(j), 1, syntax)) { dtd.addNeededShortref(syntax.delimShortrefComplex(i)); break; } } } Boolean Parser::shortrefCanPreemptDelim(const StringC &sr, const StringC &d, Boolean dIsSr, const Syntax &syntax) { Char letterB = sd().execToInternal('B'); for (size_t i = 0; i < sr.size(); i++) { size_t j = 0; size_t k = i; for (;;) { if (j == d.size()) return 1; if (k >= sr.size()) break; if (sr[k] == letterB) { if (dIsSr && d[j] == letterB) { j++; k++; } else if (syntax.isB(d[j])) { j++; k++; if (k == sr.size() || sr[k] != letterB) { // it was the last B in the sequence while (j < d.size() && syntax.isB(d[j])) j++; } } else break; } else if (dIsSr && d[j] == letterB) { if (syntax.isB(sr[k])) { ++j; ++k; if (j < d.size() && d[j] != letterB) { while (k < sr.size() && syntax.isB(sr[k])) k++; } } else break; } else if (d[j] == sr[k]) { j++; k++; } else break; } } return 0; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/parseParam.cxx100444 764 764 72553 6604607570 13636 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "Parser.h" #include "Param.h" #include "Group.h" #include "Markup.h" #include "ParserMessages.h" #include "MessageArg.h" #include "TokenMessageArg.h" #include "token.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif Boolean Parser::parseParam(const AllowedParams &allow, unsigned declInputLevel, Param &parm) { for (;;) { Token token = getToken(allow.mainMode()); switch (token) { case tokenUnrecognized: if (reportNonSgmlCharacter()) break; { message(ParserMessages::markupDeclarationCharacter, StringMessageArg(currentToken()), AllowedParamsMessageArg(allow, syntaxPointer())); } return 0; case tokenEe: if (inputLevel() <= declInputLevel) { message(ParserMessages::declarationLevel); return 0; } if (currentMarkup()) currentMarkup()->addEntityEnd(); popInputStack(); break; case tokenCom: if (!parseComment(comMode)) return 0; if (options().warnPsComment) message(ParserMessages::psComment); break; case tokenDso: if (!allow.dso()) { paramInvalidToken(tokenDso, allow); return 0; } if (currentMarkup()) currentMarkup()->addDelim(Syntax::dDSO); parm.type = Param::dso; return 1; case tokenGrpo: if (currentMarkup()) currentMarkup()->addDelim(Syntax::dGRPO); switch (allow.group()) { case Param::invalid: paramInvalidToken(tokenGrpo, allow); return 0; case Param::modelGroup: { ModelGroup *group; if (!parseModelGroup(1, declInputLevel, group, grpsufMode)) return 0; parm.type = Param::modelGroup; parm.modelGroupPtr = group; } break; case Param::nameGroup: if (!parseNameGroup(declInputLevel, parm)) return 0; break; case Param::nameTokenGroup: if (!parseNameTokenGroup(declInputLevel, parm)) return 0; break; default: CANNOT_HAPPEN(); } parm.type = allow.group(); return 1; case tokenLita: case tokenLit: parm.type = allow.literal(); parm.lita = token == tokenLita; switch (allow.literal()) { case Param::invalid: paramInvalidToken(token, allow); return 0; case Param::minimumLiteral: if (!parseMinimumLiteral(parm.lita, parm.literalText)) return 0; break; case Param::attributeValueLiteral: if (!parseAttributeValueLiteral(parm.lita, parm.literalText)) return 0; break; case Param::tokenizedAttributeValueLiteral: if (!parseTokenizedAttributeValueLiteral(parm.lita, parm.literalText)) return 0; break; case Param::systemIdentifier: if (!parseSystemIdentifier(parm.lita, parm.literalText)) return 0; break; case Param::paramLiteral: if (!parseParameterLiteral(parm.lita, parm.literalText)) return 0; break; } if (currentMarkup()) currentMarkup()->addLiteral(parm.literalText); return 1; case tokenMdc: if (!allow.mdc()) { paramInvalidToken(tokenMdc, allow); return 0; } if (inputLevel() > declInputLevel) message(ParserMessages::parameterEntityNotEnded); if (currentMarkup()) currentMarkup()->addDelim(Syntax::dMDC); parm.type = Param::mdc; return 1; case tokenMinus: parm.type = Param::minus; if (currentMarkup()) currentMarkup()->addDelim(Syntax::dMINUS); return 1; case tokenMinusGrpo: if (!allow.exclusions()) { paramInvalidToken(tokenMinusGrpo, allow); return 0; } if (currentMarkup()) { currentMarkup()->addDelim(Syntax::dMINUS); currentMarkup()->addDelim(Syntax::dGRPO); } parm.type = Param::exclusions; return parseElementNameGroup(declInputLevel, parm); case tokenPero: parm.type = Param::pero; if (currentMarkup()) currentMarkup()->addDelim(Syntax::dPERO); return 1; case tokenPeroGrpo: if (!inInstance()) message(ParserMessages::peroGrpoProlog); // fall through case tokenPeroNameStart: { if (inInstance()) { if (options().warnInstanceParamEntityRef) message(ParserMessages::instanceParamEntityRef); } else { if (options().warnInternalSubsetPsParamEntityRef && inputLevel() == 1) message(ParserMessages::internalSubsetPsParamEntityRef); } ConstPtr entity; Ptr origin; if (!parseEntityReference(1, token == tokenPeroGrpo, entity, origin)) return 0; if (!entity.isNull()) entity->declReference(*this, origin); } break; case tokenPlusGrpo: if (!allow.inclusions()) { paramInvalidToken(tokenPlusGrpo, allow); return 0; } if (currentMarkup()) { currentMarkup()->addDelim(Syntax::dPLUS); currentMarkup()->addDelim(Syntax::dGRPO); } parm.type = Param::inclusions; return parseElementNameGroup(declInputLevel, parm); case tokenRni: if (!allow.rni()) { paramInvalidToken(tokenRni, allow); return 0; } return parseIndicatedReservedName(allow, parm); case tokenS: if (currentMarkup()) currentMarkup()->addS(currentChar()); break; case tokenNameStart: switch (allow.nameStart()) { case Param::invalid: paramInvalidToken(tokenNameStart, allow); return 0; case Param::reservedName: return parseReservedName(allow, parm); case Param::name: extendNameToken(syntax().namelen(), ParserMessages::nameLength); parm.type = Param::name; getCurrentToken(syntax().generalSubstTable(), parm.token); if (currentMarkup()) currentMarkup()->addName(currentInput()); return 1; case Param::entityName: extendNameToken(syntax().namelen(), ParserMessages::nameLength); parm.type = Param::entityName; getCurrentToken(syntax().entitySubstTable(), parm.token); if (currentMarkup()) currentMarkup()->addName(currentInput()); return 1; case Param::paramEntityName: extendNameToken(syntax().penamelen(), ParserMessages::parameterEntityNameLength); parm.type = Param::paramEntityName; getCurrentToken(syntax().entitySubstTable(), parm.token); if (currentMarkup()) currentMarkup()->addName(currentInput()); return 1; case Param::attributeValue: return parseAttributeValueParam(parm); } break; case tokenDigit: switch (allow.digit()) { case Param::invalid: paramInvalidToken(tokenDigit, allow); return 0; case Param::number: extendNumber(syntax().namelen(), ParserMessages::numberLength); parm.type = Param::number; getCurrentToken(parm.token); if (currentMarkup()) currentMarkup()->addNumber(currentInput()); return 1; case Param::attributeValue: return parseAttributeValueParam(parm); } break; case tokenLcUcNmchar: switch (allow.nmchar()) { case Param::invalid: paramInvalidToken(tokenLcUcNmchar, allow); return 0; case Param::attributeValue: return parseAttributeValueParam(parm); } break; default: CANNOT_HAPPEN(); } } } void Parser::paramInvalidToken(Token token, const AllowedParams &allow) { message(ParserMessages::paramInvalidToken, TokenMessageArg(token, allow.mainMode(), syntaxPointer(), sdPointer()), AllowedParamsMessageArg(allow, syntaxPointer())); } Boolean Parser::parseGroupToken(const AllowedGroupTokens &allow, unsigned nestingLevel, unsigned declInputLevel, unsigned groupInputLevel, GroupToken >) { for (;;) { Token token = getToken(grpMode); switch (token) { case tokenEe: if (inputLevel() <= groupInputLevel) { message(ParserMessages::groupLevel); if (inputLevel() <= declInputLevel) return 0; } else if (!sd().www()) message(ParserMessages::groupEntityEnd); if (currentMarkup()) currentMarkup()->addEntityEnd(); popInputStack(); break; case tokenPeroGrpo: if (!inInstance()) message(ParserMessages::peroGrpoProlog); // fall through case tokenPeroNameStart: { if (options().warnInternalSubsetTsParamEntityRef && inputLevel() == 1) message(ParserMessages::internalSubsetTsParamEntityRef); ConstPtr entity; Ptr origin; if (!parseEntityReference(1, token == tokenPeroGrpo, entity, origin)) return 0; if (!entity.isNull()) entity->declReference(*this, origin); } break; case tokenUnrecognized: if (reportNonSgmlCharacter()) break; { message(ParserMessages::groupCharacter, StringMessageArg(currentToken()), AllowedGroupTokensMessageArg(allow, syntaxPointer())); } return 0; case tokenDtgo: if (!allow.groupToken(GroupToken::dataTagGroup)) { groupTokenInvalidToken(tokenDtgo, allow); return 0; } if (sd().datatag()) message(ParserMessages::datatagNotImplemented); if (currentMarkup()) currentMarkup()->addDelim(Syntax::dDTGO); return parseDataTagGroup(nestingLevel + 1, declInputLevel, gt); case tokenGrpo: if (currentMarkup()) currentMarkup()->addDelim(Syntax::dGRPO); switch (allow.group()) { case GroupToken::modelGroup: { ModelGroup *modelGroup; if (!parseModelGroup(nestingLevel + 1, declInputLevel, modelGroup, grpMode)) return 0; gt.model = modelGroup; gt.type = GroupToken::modelGroup; return 1; } case GroupToken::dataTagTemplateGroup: return parseDataTagTemplateGroup(nestingLevel + 1, declInputLevel, gt); default: groupTokenInvalidToken(tokenGrpo, allow); return 0; } break; case tokenRni: if (!allow.groupToken(GroupToken::pcdata)) { groupTokenInvalidToken(tokenRni, allow); return 0; } Syntax::ReservedName rn; if (!getIndicatedReservedName(&rn)) return 0; if (rn != Syntax::rPCDATA) { StringC token(syntax().delimGeneral(Syntax::dRNI)); token += syntax().reservedName(Syntax::rPCDATA); message(ParserMessages::invalidToken, StringMessageArg(token)); return 0; } gt.type = GroupToken::pcdata; gt.contentToken = new PcdataToken; return 1; case tokenS: if (currentMarkup()) { extendS(); currentMarkup()->addS(currentInput()); } break; case tokenNameStart: switch (allow.nameStart()) { case GroupToken::elementToken: { extendNameToken(syntax().namelen(), ParserMessages::nameLength); gt.type = GroupToken::elementToken; StringC &buffer = nameBuffer(); getCurrentToken(syntax().generalSubstTable(), buffer); if (currentMarkup()) currentMarkup()->addName(currentInput()); const ElementType *e = lookupCreateElement(buffer); ContentToken::OccurrenceIndicator oi = getOccurrenceIndicator(grpMode); gt.contentToken = new ElementToken(e, oi); return 1; } case GroupToken::name: case GroupToken::nameToken: extendNameToken(syntax().namelen(), token == GroupToken::name ? ParserMessages::nameLength : ParserMessages::nameTokenLength); getCurrentToken(syntax().generalSubstTable(), gt.token); gt.type = allow.nameStart(); if (currentMarkup()) { if (gt.type == GroupToken::nameToken) currentMarkup()->addNameToken(currentInput()); else currentMarkup()->addName(currentInput()); } return 1; default: groupTokenInvalidToken(tokenNameStart, allow); return 0; } case tokenDigit: case tokenLcUcNmchar: if (!allow.groupToken(GroupToken::nameToken)) { groupTokenInvalidToken(token, allow); return 0; } extendNameToken(syntax().namelen(), ParserMessages::nameTokenLength); getCurrentToken(syntax().generalSubstTable(), gt.token); gt.type = GroupToken::nameToken; if (currentMarkup()) currentMarkup()->addNameToken(currentInput()); return 1; case tokenLit: case tokenLita: // parameter literal in data tag pattern if (!allow.groupToken(GroupToken::dataTagLiteral)) { groupTokenInvalidToken(token, allow); return 0; } if (!parseDataTagParameterLiteral(token == tokenLita, gt.text)) return 0; gt.type = GroupToken::dataTagLiteral; if (currentMarkup()) currentMarkup()->addLiteral(gt.text); return 1; case tokenAnd: case tokenSeq: case tokenOr: case tokenDtgc: case tokenGrpc: case tokenOpt: case tokenPlus: case tokenRep: groupTokenInvalidToken(token, allow); return 0; } } } void Parser::groupTokenInvalidToken(Token token, const AllowedGroupTokens &allow) { message(ParserMessages::groupTokenInvalidToken, TokenMessageArg(token, grpMode, syntaxPointer(), sdPointer()), AllowedGroupTokensMessageArg(allow, syntaxPointer())); } Boolean Parser::parseGroupConnector(const AllowedGroupConnectors &allow, unsigned declInputLevel, unsigned groupInputLevel, GroupConnector &gc) { for (;;) { Token token = getToken(grpMode); switch (token) { case tokenEe: if (inputLevel() <= groupInputLevel) { message(ParserMessages::groupLevel); if (inputLevel() <= declInputLevel) return 0; } if (currentMarkup()) currentMarkup()->addEntityEnd(); popInputStack(); break; case tokenS: if (currentMarkup()) { extendS(); currentMarkup()->addS(currentInput()); } break; case tokenPeroGrpo: if (inInstance()) { message(ParserMessages::peroGrpoProlog); break; } // fall through case tokenPeroNameStart: if (!sd().www()) message(ParserMessages::groupEntityReference); else { ConstPtr entity; Ptr origin; if (!parseEntityReference(1, token == tokenPeroGrpo, entity, origin)) return 0; if (!entity.isNull()) entity->declReference(*this, origin); } break; case tokenUnrecognized: if (reportNonSgmlCharacter()) break; { message(ParserMessages::groupCharacter, StringMessageArg(currentToken()), AllowedGroupConnectorsMessageArg(allow, syntaxPointer())); } return 0; case tokenAnd: if (!allow.groupConnector(GroupConnector::andGC)) { groupConnectorInvalidToken(tokenAnd, allow); return 0; } gc.type = GroupConnector::andGC; if (currentMarkup()) currentMarkup()->addDelim(Syntax::dAND); return 1; case tokenSeq: if (!allow.groupConnector(GroupConnector::seqGC)) { groupConnectorInvalidToken(tokenSeq, allow); return 0; } gc.type = GroupConnector::seqGC; if (currentMarkup()) currentMarkup()->addDelim(Syntax::dSEQ); return 1; case tokenOr: if (!allow.groupConnector(GroupConnector::orGC)) { groupConnectorInvalidToken(tokenOr, allow); return 0; } gc.type = GroupConnector::orGC; if (currentMarkup()) currentMarkup()->addDelim(Syntax::dOR); return 1; case tokenDtgc: if (!allow.groupConnector(GroupConnector::dtgcGC)) { groupConnectorInvalidToken(tokenDtgc, allow); return 0; } gc.type = GroupConnector::dtgcGC; if (inputLevel() > groupInputLevel) message(ParserMessages::groupParameterEntityNotEnded); if (currentMarkup()) currentMarkup()->addDelim(Syntax::dDTGC); return 1; case tokenGrpc: if (!allow.groupConnector(GroupConnector::grpcGC)) { groupConnectorInvalidToken(tokenGrpc, allow); return 0; } gc.type = GroupConnector::grpcGC; if (inputLevel() > groupInputLevel) message(ParserMessages::groupParameterEntityNotEnded); if (currentMarkup()) currentMarkup()->addDelim(Syntax::dGRPC); return 1; default: groupConnectorInvalidToken(token, allow); return 0; } } } void Parser::groupConnectorInvalidToken(Token token, const AllowedGroupConnectors &allow) { message(ParserMessages::connectorInvalidToken, TokenMessageArg(token, grpMode, syntaxPointer(), sdPointer()), AllowedGroupConnectorsMessageArg(allow, syntaxPointer())); } Boolean Parser::parseElementNameGroup(unsigned declInputLevel, Param &parm) { if (!parseNameGroup(declInputLevel, parm)) return 0; parm.elementVector.resize(parm.nameTokenVector.size()); for (size_t i = 0; i < parm.nameTokenVector.size(); i++) parm.elementVector[i] = lookupCreateElement(parm.nameTokenVector[i].name); return 1; } Boolean Parser::parseEntityReferenceNameGroup(Boolean &ignore) { Param parm; if (!parseNameGroup(inputLevel(), parm)) return 0; if (inInstance()) { for (size_t i = 0; i < parm.nameTokenVector.size(); i++) { const Lpd *lpd = lookupLpd(parm.nameTokenVector[i].name).pointer(); if (lpd && lpd->active()) { ignore = 0; return 1; } } } ignore = 1; return 1; } Boolean Parser::parseTagNameGroup(Boolean &active) { Param parm; if (!parseNameGroup(inputLevel(), parm)) return 0; active = 0; return 1; } Boolean Parser::parseNameGroup(unsigned declInputLevel, Param &parm) { static AllowedGroupTokens allowName(GroupToken::name); return parseGroup(allowName, declInputLevel, parm); } Boolean Parser::parseNameTokenGroup(unsigned declInputLevel, Param &parm) { static AllowedGroupTokens allowNameToken(GroupToken::nameToken); return parseGroup(allowNameToken, declInputLevel, parm); } static Boolean groupContains(const Vector &vec, const StringC &str) { for (size_t i = 0; i < vec.size(); i++) if (vec[i].name == str) return 1; return 0; } Boolean Parser::parseGroup(const AllowedGroupTokens &allowToken, unsigned declInputLevel, Param &parm) { unsigned groupInputLevel = inputLevel(); int nDuplicates = 0; Vector &vec = parm.nameTokenVector; vec.clear(); GroupConnector::Type connector = GroupConnector::grpcGC; GroupToken gt; for (;;) { if (!parseGroupToken(allowToken, 0, declInputLevel, groupInputLevel, gt)) return 0; if (groupContains(vec, gt.token)) { nDuplicates++; message(ParserMessages::duplicateGroupToken, StringMessageArg(gt.token)); } else { vec.resize(vec.size() + 1); gt.token.swap(vec.back().name); getCurrentToken(vec.back().origName); vec.back().loc = currentLocation(); } GroupConnector gc; static AllowedGroupConnectors allowAnyConnectorGrpc(GroupConnector::orGC, GroupConnector::andGC, GroupConnector::seqGC, GroupConnector::grpcGC); if (!parseGroupConnector(allowAnyConnectorGrpc, declInputLevel, groupInputLevel, gc)) return 0; if (gc.type == GroupConnector::grpcGC) break; if (options().warnNameGroupNotOr) { if (gc.type != GroupConnector::orGC) message(ParserMessages::nameGroupNotOr); } else if (options().warnShould) { if (connector == GroupConnector::grpcGC) connector = gc.type; else if (gc.type != connector) { message(ParserMessages::mixedConnectors); connector = gc.type; } } } if (nDuplicates + vec.size() > syntax().grpcnt()) message(ParserMessages::groupCount, NumberMessageArg(syntax().grpcnt())); return 1; } Boolean Parser::parseDataTagGroup(unsigned nestingLevel, unsigned declInputLevel, GroupToken &result) { if (nestingLevel - 1 == syntax().grplvl()) message(ParserMessages::grplvl, NumberMessageArg(syntax().grplvl())); unsigned groupInputLevel = inputLevel(); GroupToken gt; static AllowedGroupTokens allowName(GroupToken::name); if (!parseGroupToken(allowName, nestingLevel, declInputLevel, groupInputLevel, gt)) return 0; const ElementType *element = lookupCreateElement(gt.token); GroupConnector gc; static AllowedGroupConnectors allowSeq(GroupConnector::seqGC); if (!parseGroupConnector(allowSeq, declInputLevel, groupInputLevel, gc)) return 0; static AllowedGroupTokens allowDataTagLiteralDataTagTemplateGroup(GroupToken::dataTagLiteral, GroupToken::dataTagTemplateGroup); if (!parseGroupToken(allowDataTagLiteralDataTagTemplateGroup, nestingLevel, declInputLevel, groupInputLevel, gt)) return 0; Vector templates; if (gt.type == GroupToken::dataTagTemplateGroup) gt.textVector.swap(templates); else { templates.resize(1); gt.text.swap(templates[0]); } static AllowedGroupConnectors allowSeqDtgc(GroupConnector::seqGC, GroupConnector::dtgcGC); if (!parseGroupConnector(allowSeqDtgc, declInputLevel, groupInputLevel, gc)) return 0; NCVector > vec(2); vec[1] = new PcdataToken; if (gc.type != GroupConnector::dtgcGC) { static AllowedGroupTokens allowDataTagLiteral(GroupToken::dataTagLiteral); if (!parseGroupToken(allowDataTagLiteral, nestingLevel, declInputLevel, groupInputLevel, gt)) return 0; vec[0] = new DataTagElementToken(element, templates, gt.text); static AllowedGroupConnectors allowDtgc(GroupConnector::dtgcGC); if (!parseGroupConnector(allowDtgc, declInputLevel, groupInputLevel, gc)) return 0; } else vec[0] = new DataTagElementToken(element, templates); ContentToken::OccurrenceIndicator oi = getOccurrenceIndicator(grpMode); result.contentToken = new DataTagGroup(vec, oi); result.type = GroupToken::dataTagGroup; return 1; } Boolean Parser::parseDataTagTemplateGroup(unsigned nestingLevel, unsigned declInputLevel, GroupToken &result) { if (nestingLevel - 1 == syntax().grplvl()) message(ParserMessages::grplvl, NumberMessageArg(syntax().grplvl())); unsigned groupInputLevel = inputLevel(); Vector &vec = result.textVector; for (;;) { GroupToken gt; static AllowedGroupTokens allowDataTagLiteral(GroupToken::dataTagLiteral); if (!parseGroupToken(allowDataTagLiteral, nestingLevel, declInputLevel, groupInputLevel, gt)) return 0; if (vec.size() == syntax().grpcnt()) message(ParserMessages::groupCount, NumberMessageArg(syntax().grpcnt())); vec.resize(vec.size() + 1); gt.text.swap(vec.back()); static AllowedGroupConnectors allowOrGrpc(GroupConnector::orGC, GroupConnector::grpcGC); GroupConnector gc; if (!parseGroupConnector(allowOrGrpc, declInputLevel, groupInputLevel, gc)) return 0; if (gc.type == GroupConnector::grpcGC) break; } return 1; } Boolean Parser::parseModelGroup(unsigned nestingLevel, unsigned declInputLevel, ModelGroup *&group, Mode oiMode) { if (nestingLevel - 1 == syntax().grplvl()) message(ParserMessages::grplvl, NumberMessageArg(syntax().grplvl())); unsigned groupInputLevel = inputLevel(); GroupToken gt; NCVector > tokenVector; GroupConnector::Type connector = GroupConnector::grpcGC; static AllowedGroupTokens allowContentToken(GroupToken::pcdata, GroupToken::dataTagGroup, GroupToken::elementToken, GroupToken::modelGroup); static AllowedGroupConnectors allowAnyConnectorGrpc(GroupConnector::orGC, GroupConnector::andGC, GroupConnector::seqGC, GroupConnector::grpcGC); static AllowedGroupConnectors allowOrGrpc(GroupConnector::orGC, GroupConnector::grpcGC); static AllowedGroupConnectors allowAndGrpc(GroupConnector::andGC, GroupConnector::grpcGC); static AllowedGroupConnectors allowSeqGrpc(GroupConnector::seqGC, GroupConnector::grpcGC); const AllowedGroupConnectors *connectorp = &allowAnyConnectorGrpc; GroupConnector gc; Boolean pcdataCheck = 0; do { if (!parseGroupToken(allowContentToken, nestingLevel, declInputLevel, groupInputLevel, gt)) return 0; ContentToken *contentToken; if (gt.type == GroupToken::modelGroup) contentToken = gt.model.extract(); else contentToken = gt.contentToken.extract(); if (tokenVector.size() == syntax().grpcnt()) message(ParserMessages::groupCount, NumberMessageArg(syntax().grpcnt())); tokenVector.resize(tokenVector.size() + 1); tokenVector.back() = contentToken; if (!parseGroupConnector(*connectorp, declInputLevel, groupInputLevel, gc)) return 0; if (options().warnMixedContentRepOrGroup && gt.type == GroupToken::pcdata) { if (tokenVector.size() != 1) message(ParserMessages::pcdataNotFirstInGroup); else if (gc.type == GroupConnector::seqGC) message(ParserMessages::pcdataInSeqGroup); else pcdataCheck = 1; if (nestingLevel != 1) message(ParserMessages::pcdataInNestedModelGroup); } else if (pcdataCheck) { if (gt.type == GroupToken::modelGroup) message(ParserMessages::pcdataGroupMemberModelGroup); if (contentToken->occurrenceIndicator() != ContentToken::none) message(ParserMessages::pcdataGroupMemberOccurrenceIndicator); } if (tokenVector.size() == 1) { connector = gc.type; switch (gc.type) { case GroupConnector::orGC: connectorp = &allowOrGrpc; break; case GroupConnector::seqGC: connectorp = &allowSeqGrpc; break; case GroupConnector::andGC: connectorp = &allowAndGrpc; if (options().warnAndGroup) message(ParserMessages::andGroup); break; default: break; } } } while (gc.type != GroupConnector::grpcGC); ContentToken::OccurrenceIndicator oi = getOccurrenceIndicator(oiMode); switch (connector) { case GroupConnector::orGC: group = new OrModelGroup(tokenVector, oi); if (pcdataCheck && oi != ContentToken::rep) message(ParserMessages::pcdataGroupNotRep); break; case GroupConnector::grpcGC: if (pcdataCheck && oi != ContentToken::rep && oi != ContentToken::none) message(ParserMessages::pcdataGroupNotRep); // fall through case GroupConnector::seqGC: group = new SeqModelGroup(tokenVector, oi); break; case GroupConnector::andGC: group = new AndModelGroup(tokenVector, oi); break; default: break; } return 1; } ContentToken::OccurrenceIndicator Parser::getOccurrenceIndicator(Mode oiMode) { Token token = getToken(oiMode); switch (token) { case tokenPlus: if (currentMarkup()) currentMarkup()->addDelim(Syntax::dPLUS); return ContentToken::plus; case tokenOpt: if (currentMarkup()) currentMarkup()->addDelim(Syntax::dOPT); return ContentToken::opt; case tokenRep: if (currentMarkup()) currentMarkup()->addDelim(Syntax::dREP); return ContentToken::rep; default: currentInput()->ungetToken(); return ContentToken::none; } } Boolean Parser::parseMinimumLiteral(Boolean lita, Text &text) { return parseLiteral(lita ? mlitaMode : mlitMode, mlitMode, Syntax::referenceQuantity(Syntax::qLITLEN), ParserMessages::minimumLiteralLength, literalSingleSpace|literalMinimumData |(eventsWanted().wantPrologMarkup() ? literalDelimInfo : 0), text); } Boolean Parser::parseSystemIdentifier(Boolean lita, Text &text) { return parseLiteral(lita ? slitaMode : slitMode, slitMode, syntax().litlen(), ParserMessages::systemIdentifierLength, (eventsWanted().wantPrologMarkup() ? literalDelimInfo : 0), text); } Boolean Parser::parseParameterLiteral(Boolean lita, Text &text) { return parseLiteral(lita ? plitaMode : plitMode, pliteMode, syntax().litlen(), ParserMessages::parameterLiteralLength, (eventsWanted().wantPrologMarkup() ? literalDelimInfo : 0), text); } Boolean Parser::parseDataTagParameterLiteral(Boolean lita, Text &text) { return parseLiteral(lita ? plitaMode : plitMode, pliteMode, syntax().dtemplen(), ParserMessages::dataTagPatternLiteralLength, literalDataTag | (eventsWanted().wantPrologMarkup() ? literalDelimInfo : 0), text); } Boolean Parser::parseIndicatedReservedName(const AllowedParams &allow, Param &parm) { Syntax::ReservedName rn; if (!getIndicatedReservedName(&rn)) return 0; if (!allow.reservedName(rn)) { message(ParserMessages::invalidReservedName, StringMessageArg(currentToken())); return 0; } parm.type = Param::indicatedReservedName + rn; return 1; } Boolean Parser::parseReservedName(const AllowedParams &allow, Param &parm) { Syntax::ReservedName rn; if (!getReservedName(&rn)) return 0; if (!allow.reservedName(rn)) { message(ParserMessages::invalidReservedName, StringMessageArg(syntax().reservedName(rn))); return 0; } parm.type = Param::reservedName + rn; return 1; } Boolean Parser::parseAttributeValueParam(Param &parm) { extendNameToken(syntax().litlen() > syntax().normsep() ? syntax().litlen() - syntax().normsep() : 0, ParserMessages::attributeValueLength); parm.type = Param::attributeValue; Text text; text.addChars(currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), currentLocation()); text.swap(parm.literalText); if (currentMarkup()) currentMarkup()->addAttributeValue(currentInput()); return 1; } Boolean Parser::getIndicatedReservedName(Syntax::ReservedName *result) { if (currentMarkup()) currentMarkup()->addDelim(Syntax::dRNI); InputSource *in = currentInput(); in->startToken(); if (!syntax().isNameStartCharacter(in->tokenChar(messenger()))) { message(ParserMessages::rniNameStart); return 0; } extendNameToken(syntax().namelen(), ParserMessages::nameLength); StringC &buffer = nameBuffer(); getCurrentToken(syntax().generalSubstTable(), buffer); if (!syntax().lookupReservedName(buffer, result)) { message(ParserMessages::noSuchReservedName, StringMessageArg(buffer)); return 0; } if (currentMarkup()) currentMarkup()->addReservedName(*result, currentInput()); return 1; } Boolean Parser::getReservedName(Syntax::ReservedName *result) { extendNameToken(syntax().namelen(), ParserMessages::nameLength); StringC &buffer = nameBuffer(); getCurrentToken(syntax().generalSubstTable(), buffer); if (!syntax().lookupReservedName(buffer, result)) { message(ParserMessages::noSuchReservedName, StringMessageArg(buffer)); return 0; } if (currentMarkup()) currentMarkup()->addReservedName(*result, currentInput()); return 1; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/parseSd.cxx100444 764 764 277426 6606574412 13172 0ustar jjcjjc// Copyright (c) 1994, 1995, 1997 James Clark // See the file COPYING for copying permission. #include "splib.h" #include "Parser.h" #include "macros.h" #include "SdFormalError.h" #include "MessageBuilder.h" #include "ParserMessages.h" #include "MessageArg.h" #include "CharsetRegistry.h" #include "ISetIter.h" #include "token.h" #include "TokenMessageArg.h" #include "constant.h" #include "SdText.h" #include "NumericCharRefOrigin.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class CharSwitcher { public: CharSwitcher(); void addSwitch(WideChar from, WideChar to); SyntaxChar subst(WideChar c); size_t nSwitches() const; Boolean switchUsed(size_t i) const; WideChar switchFrom(size_t i) const; WideChar switchTo(size_t i) const; private: Vector switchUsed_; Vector switches_; }; // Information about the SGML declaration being built. struct SdBuilder { SdBuilder(); void addFormalError(const Location &, const MessageType1 &, const StringC &); Ptr sd; Ptr syntax; CharsetDecl syntaxCharsetDecl; CharsetInfo syntaxCharset; CharSwitcher switcher; Boolean externalSyntax; Boolean enr; Boolean www; Boolean valid; Boolean external; IList formalErrorList; }; class CharsetMessageArg : public MessageArg { public: CharsetMessageArg(const ISet &set); MessageArg *copy() const; void append(MessageBuilder &) const; private: ISet set_; }; struct SdParam { typedef unsigned char Type; enum { invalid, eE, minimumLiteral, mdc, minus, number, capacityName, name, paramLiteral, systemIdentifier, generalDelimiterName, referenceReservedName, quantityName, reservedName // Sd::ReservedName is added to this }; Type type; StringC token; Text literalText; String paramLiteralText; union { Number n; Sd::Capacity capacityIndex; Syntax::Quantity quantityIndex; Syntax::ReservedName reservedNameIndex; Syntax::DelimGeneral delimGeneralIndex; }; }; class AllowedSdParams { public: AllowedSdParams(SdParam::Type, SdParam::Type = SdParam::invalid, SdParam::Type = SdParam::invalid, SdParam::Type = SdParam::invalid, SdParam::Type = SdParam::invalid, SdParam::Type = SdParam::invalid); Boolean param(SdParam::Type) const; SdParam::Type get(int i) const; private: enum { maxAllow = 6 }; SdParam::Type allow_[maxAllow]; }; class AllowedSdParamsMessageArg : public MessageArg { public: AllowedSdParamsMessageArg(const AllowedSdParams &allow, const ConstPtr &sd); MessageArg *copy() const; void append(MessageBuilder &) const; private: AllowedSdParams allow_; ConstPtr sd_; }; struct StandardSyntaxSpec { struct AddedFunction { const char *name; Syntax::FunctionClass functionClass; SyntaxChar syntaxChar; }; const AddedFunction *addedFunction; size_t nAddedFunction; Boolean shortref; }; static StandardSyntaxSpec::AddedFunction coreFunctions[] = { { "TAB", Syntax::cSEPCHAR, 9 }, }; static StandardSyntaxSpec coreSyntax = { coreFunctions, SIZEOF(coreFunctions), 0 }; static StandardSyntaxSpec refSyntax = { coreFunctions, SIZEOF(coreFunctions), 1 }; void Parser::doInit() { if (cancelled()) { allDone(); return; } // When document entity doesn't exist, don't give any errors // other than the cannot open error. if (currentInput()->get(messenger()) == InputSource::eE) { if (currentInput()->accessError()) { allDone(); return; } } else currentInput()->ungetToken(); const CharsetInfo &initCharset = sd().internalCharset(); ISet missing; findMissingMinimum(initCharset, missing); if (!missing.isEmpty()) { message(ParserMessages::sdMissingCharacters, CharsetMessageArg(missing)); giveUp(); return; } Boolean found = 0; StringC systemId; if (scanForSgmlDecl(initCharset)) { if (options().warnExplicitSgmlDecl) message(ParserMessages::explicitSgmlDecl); found = 1; } else { currentInput()->ungetToken(); if (entityCatalog().sgmlDecl(initCharset, messenger(), systemId)) { InputSource *in = entityManager().open(systemId, sd().docCharset(), InputSourceOrigin::make(), 0, messenger()); if (in) { pushInput(in); if (scanForSgmlDecl(initCharset)) found = 1; else { message(ParserMessages::badDefaultSgmlDecl); popInputStack(); } } } } if (found) { if (startMarkup(eventsWanted().wantPrologMarkup(), currentLocation())) { size_t nS = currentInput()->currentTokenLength() - 6; for (size_t i = 0; i < nS; i++) currentMarkup()->addS(currentInput()->currentTokenStart()[i]); currentMarkup()->addDelim(Syntax::dMDO); currentMarkup()->addSdReservedName(Sd::rSGML, currentInput()->currentTokenStart() + (currentInput()->currentTokenLength() - 4), 4); } Syntax *syntaxp = new Syntax(sd()); CharSwitcher switcher; if (!setStandardSyntax(*syntaxp, refSyntax, sd().internalCharset(), switcher, 0)) { giveUp(); return; } syntaxp->implySgmlChar(sd()); setSyntax(syntaxp); compileSdModes(); ConstPtr refSd(sdPointer()); ConstPtr refSyntax(syntaxPointer()); if (!parseSgmlDecl()) { giveUp(); return; } // queue an SGML declaration event eventHandler().sgmlDecl(new (eventAllocator()) SgmlDeclEvent(sdPointer(), syntaxPointer(), instanceSyntaxPointer(), refSd, refSyntax, currentInput()->nextIndex(), systemId, markupLocation(), currentMarkup())); if (inputLevel() == 2) { // FIXME perhaps check for junk after SGML declaration popInputStack(); } } else { if (!implySgmlDecl()) { giveUp(); return; } currentInput()->willNotSetDocCharset(); // queue an SGML declaration event eventHandler().sgmlDecl(new (eventAllocator()) SgmlDeclEvent(sdPointer(), syntaxPointer())); } // Now we have sd and syntax set up, prepare to parse the prolog. compilePrologModes(); setPhase(prologPhase); } Boolean Parser::implySgmlDecl() { Syntax *syntaxp = new Syntax(sd()); const StandardSyntaxSpec *spec; if (options().shortref) spec = &refSyntax; else spec = &coreSyntax; CharSwitcher switcher; if (!setStandardSyntax(*syntaxp, *spec, sd().internalCharset(), switcher, 0)) return 0; syntaxp->implySgmlChar(sd()); for (int i = 0; i < Syntax::nQuantity; i++) syntaxp->setQuantity(i, options().quantity[i]); setSyntax(syntaxp); return 1; } Boolean Parser::setStandardSyntax(Syntax &syn, const StandardSyntaxSpec &spec, const CharsetInfo &internalCharset, CharSwitcher &switcher, Boolean www) { static UnivCharsetDesc::Range syntaxCharsetRanges[] = { { 0, 128, 0 }, }; static UnivCharsetDesc syntaxCharsetDesc(syntaxCharsetRanges, SIZEOF(syntaxCharsetRanges)); static CharsetInfo syntaxCharset(syntaxCharsetDesc); Boolean valid = 1; if (!checkSwitches(switcher, syntaxCharset)) valid = 0; size_t i; for (i = 0; i < switcher.nSwitches(); i++) if (switcher.switchTo(i) >= 128) message(ParserMessages::switchNotInCharset, NumberMessageArg(switcher.switchTo(i))); static const Char shunchar[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 127, 255 }; for (i = 0; i < SIZEOF(shunchar); i++) syn.addShunchar(shunchar[i]); syn.setShuncharControls(); static Syntax::StandardFunction standardFunctions[3] = { Syntax::fRE, Syntax::fRS, Syntax::fSPACE }; static SyntaxChar functionChars[3] = { 13, 10, 32 }; for (i = 0; i < 3; i++) { Char docChar; if (translateSyntax(switcher, syntaxCharset, internalCharset, functionChars[i], docChar) && checkNotFunction(syn, docChar)) syn.setStandardFunction(standardFunctions[i], docChar); else valid = 0; } for (i = 0; i < spec.nAddedFunction; i++) { Char docChar; if (translateSyntax(switcher, syntaxCharset, internalCharset, spec.addedFunction[i].syntaxChar, docChar) && checkNotFunction(syn, docChar)) syn.addFunctionChar(internalCharset.execToDesc(spec.addedFunction[i].name), spec.addedFunction[i].functionClass, docChar); else valid = 0; } static SyntaxChar nameChars[2] = { 45, 46 }; // '-' '.' ISet nameCharSet; for (i = 0; i < 2; i++) { Char docChar; if (translateSyntax(switcher, syntaxCharset, internalCharset, nameChars[i], docChar)) nameCharSet.add(docChar); else valid = 0; } if (!checkNmchars(nameCharSet, syn)) valid = 0; else syn.addNameCharacters(nameCharSet); syn.setNamecaseGeneral(1); syn.setNamecaseEntity(0); if (!setRefDelimGeneral(syn, syntaxCharset, internalCharset, switcher)) valid = 0; setRefNames(syn, internalCharset, www); syn.enterStandardFunctionNames(); if (spec.shortref && !addRefDelimShortref(syn, syntaxCharset, internalCharset, switcher)) valid = 0; return valid; } Boolean Parser::setRefDelimGeneral(Syntax &syntax, const CharsetInfo &syntaxCharset, const CharsetInfo &internalCharset, CharSwitcher &switcher) { // Column 3 from Figure 3 static const char delims[][2] = { { 38 }, { 45, 45 }, { 38, 35 }, { 93 }, { 91 }, { 93 }, { 91 }, { 38 }, { 60, 47 }, { 41 }, { 40 }, { 0 }, // HCRO { 34 }, { 39 }, { 62 }, { 60, 33 }, { 45 }, { 93, 93 }, { 47 }, { 47 }, // NESTC { 63 }, { 124 }, { 37 }, { 62 }, { 60, 63 }, { 43 }, { 59 }, { 42 }, { 35 }, { 44 }, { 60 }, { 62 }, { 61 }, }; Boolean valid = 1; ISet missing; for (int i = 0; i < Syntax::nDelimGeneral; i++) if (syntax.delimGeneral(i).size() == 0) { StringC delim; size_t j; for (j = 0; j < 2 && delims[i][j] != '\0'; j++) { UnivChar univChar = translateUniv(delims[i][j], switcher, syntaxCharset); Char c; if (univToDescCheck(internalCharset, univChar, c)) delim += c; else { missing += univChar; valid = 0; } } if (delim.size() == j) { if (checkGeneralDelim(syntax, delim)) syntax.setDelimGeneral(i, delim); else valid = 0; } } if (!missing.isEmpty()) message(ParserMessages::missingSignificant646, CharsetMessageArg(missing)); return valid; } void Parser::setRefNames(Syntax &syntax, const CharsetInfo &internalCharset, Boolean www) { static const char *const referenceNames[] = { "ALL", "ANY", "ATTLIST", "CDATA", "CONREF", "CURRENT", "DATA", "DEFAULT", "DOCTYPE", "ELEMENT", "EMPTY", "ENDTAG", "ENTITIES", "ENTITY", "FIXED", "ID", "IDLINK", "IDREF", "IDREFS", "IGNORE", "IMPLICIT", "IMPLIED", "INCLUDE", "INITIAL", "LINK", "LINKTYPE", "MD", "MS", "NAME", "NAMES", "NDATA", "NMTOKEN", "NMTOKENS", "NOTATION", "NUMBER", "NUMBERS", "NUTOKEN", "NUTOKENS", "O", "PCDATA", "PI", "POSTLINK", "PUBLIC", "RCDATA", "RE", "REQUIRED", "RESTORE", "RS", "SDATA", "SHORTREF", "SIMPLE", "SPACE", "STARTTAG", "SUBDOC", "SYSTEM", "TEMP", "USELINK", "USEMAP" }; for (int i = 0; i < Syntax::nNames; i++) { switch (i) { case Syntax::rDATA: case Syntax::rIMPLICIT: if (!www) break; // fall through case Syntax::rALL: if (!www && options().errorAfdr) break; // fall through default: { StringC docName(internalCharset.execToDesc(referenceNames[i])); Syntax::ReservedName tem; if (syntax.lookupReservedName(docName, &tem)) message(ParserMessages::nameReferenceReservedName, StringMessageArg(docName)); if (syntax.reservedName(Syntax::ReservedName(i)).size() == 0) syntax.setName(i, docName); break; } } } } Boolean Parser::addRefDelimShortref(Syntax &syntax, const CharsetInfo &syntaxCharset, const CharsetInfo &internalCharset, CharSwitcher &switcher) { // Column 2 from Figure 4 static const char delimShortref[][3] = { { 9 }, { 13 }, { 10 }, { 10, 66 }, { 10, 13 }, { 10, 66, 13 }, { 66, 13 }, { 32 }, { 66, 66 }, { 34 }, { 35 }, { 37 }, { 39 }, { 40 }, { 41 }, { 42 }, { 43 }, { 44 }, { 45 }, { 45, 45 }, { 58 }, { 59 }, { 61 }, { 64 }, { 91 }, { 93 }, { 94 }, { 95 }, { 123 }, { 124 }, { 125 }, { 126 }, }; ISet missing; for (size_t i = 0; i < SIZEOF(delimShortref); i++) { StringC delim; size_t j; for (j = 0; j < 3 && delimShortref[i][j] != '\0'; j++) { Char c; UnivChar univChar = translateUniv(delimShortref[i][j], switcher, syntaxCharset); if (univToDescCheck(internalCharset, univChar, c)) delim += c; else missing += univChar; } if (delim.size() == j) { if (switcher.nSwitches() > 0 && syntax.isValidShortref(delim)) message(ParserMessages::duplicateDelimShortref, StringMessageArg(delim)); else syntax.addDelimShortref(delim, internalCharset); } } if (!missing.isEmpty()) message(ParserMessages::missingSignificant646, CharsetMessageArg(missing)); return 1; } // Determine whether the document starts with an SGML declaration. // There is no current syntax at this point. Boolean Parser::scanForSgmlDecl(const CharsetInfo &initCharset) { Char rs; if (!univToDescCheck(initCharset, UnivCharsetDesc::rs, rs)) return 0; Char re; if (!univToDescCheck(initCharset, UnivCharsetDesc::re, re)) return 0; Char space; if (!univToDescCheck(initCharset, UnivCharsetDesc::space, space)) return 0; Char tab; if (!univToDescCheck(initCharset, UnivCharsetDesc::tab, tab)) return 0; InputSource *in = currentInput(); Xchar c = in->get(messenger()); while (c == rs || c == space || c == re || c == tab) c = in->tokenChar(messenger()); if (c != initCharset.execToDesc('<')) return 0; if (in->tokenChar(messenger()) != initCharset.execToDesc('!')) return 0; c = in->tokenChar(messenger()); if (c != initCharset.execToDesc('S') && c != initCharset.execToDesc('s')) return 0; c = in->tokenChar(messenger()); if (c != initCharset.execToDesc('G') && c != initCharset.execToDesc('g')) return 0; c = in->tokenChar(messenger()); if (c != initCharset.execToDesc('M') && c != initCharset.execToDesc('m')) return 0; c = in->tokenChar(messenger()); if (c != initCharset.execToDesc('L') && c != initCharset.execToDesc('l')) return 0; c = in->tokenChar(messenger()); // Don't recognize this if SGML is followed by a name character. if (c == InputSource::eE) return 1; in->endToken(in->currentTokenLength() - 1); if (c == initCharset.execToDesc('-')) return 0; if (c == initCharset.execToDesc('.')) return 0; UnivChar univ; if (!initCharset.descToUniv(c, univ)) return 1; if (UnivCharsetDesc::a <= univ && univ < UnivCharsetDesc::a + 26) return 0; if (UnivCharsetDesc::A <= univ && univ < UnivCharsetDesc::A + 26) return 0; if (UnivCharsetDesc::zero <= univ && univ < UnivCharsetDesc::zero + 10) return 0; return 1; } void Parser::findMissingMinimum(const CharsetInfo &charset, ISet &missing) { Char to; size_t i; for (i = 0; i < 26; i++) { if (!univToDescCheck(charset, UnivCharsetDesc::A + i, to)) missing += UnivCharsetDesc::A + i; if (!univToDescCheck(charset, UnivCharsetDesc::a + i, to)) missing += UnivCharsetDesc::a + i; } for (i = 0; i < 10; i++) { Char to; if (!univToDescCheck(charset, UnivCharsetDesc::zero + i, to)) missing += UnivCharsetDesc::zero + i; } static const UnivChar special[] = { 39, 40, 41, 43, 44, 45, 46, 47, 58, 61, 63 }; for (i = 0; i < SIZEOF(special); i++) if (!univToDescCheck(charset, special[i], to)) missing += special[i]; } Boolean Parser::parseSgmlDecl() { SdParam parm; SdBuilder sdBuilder; if (!parseSdParam(AllowedSdParams(SdParam::minimumLiteral, SdParam::name), parm)) return 0; if (parm.type == SdParam::name) { sdBuilder.external = 1; Location loc(currentLocation()); StringC name; parm.token.swap(name); ExternalId externalId; if (!sdParseSgmlDeclRef(sdBuilder, parm, externalId)) return 0; ExternalEntity *entity = new ExternalTextEntity(name, EntityDecl::sgml, loc, externalId); ConstPtr entityPtr(entity); entity->generateSystemId(*this); if (entity->externalId().effectiveSystemId().size() == 0) { message(ParserMessages::cannotGenerateSystemIdSgml); return 0; } Ptr origin(EntityOrigin::make(internalAllocator(), entityPtr, loc)); if (currentMarkup()) currentMarkup()->addEntityStart(origin); pushInput(entityManager().open(entity->externalId().effectiveSystemId(), sd().docCharset(), origin.pointer(), 0, messenger())); if (!parseSdParam(AllowedSdParams(SdParam::minimumLiteral), parm)) return 0; } StringC version(sd().execToInternal("ISO 8879:1986")); StringC enrVersion(sd().execToInternal("ISO 8879:1986 (ENR)")); StringC wwwVersion(sd().execToInternal("ISO 8879:1986 (WWW)")); if (parm.literalText.string() == enrVersion) sdBuilder.enr = 1; else if (parm.literalText.string() == wwwVersion) { sdBuilder.enr = 1; sdBuilder.www = 1; } else if (parm.literalText.string() != version) message(ParserMessages::standardVersion, StringMessageArg(parm.literalText.string())); if (sdBuilder.external && !sdBuilder.www) message(ParserMessages::sgmlDeclRefRequiresWww); sdBuilder.sd = new Sd(entityManagerPtr()); if (sdBuilder.www) sdBuilder.sd->setWww(1); typedef Boolean (Parser::*SdParser)(SdBuilder &, SdParam &); static SdParser parsers[] = { &Parser::sdParseDocumentCharset, &Parser::sdParseCapacity, &Parser::sdParseScope, &Parser::sdParseSyntax, &Parser::sdParseFeatures, &Parser::sdParseAppinfo, &Parser::sdParseSeealso, }; for (size_t i = 0; i < SIZEOF(parsers); i++) { if (!(this->*(parsers[i]))(sdBuilder, parm)) return 0; if (!sdBuilder.valid) return 0; } setSdOverrides(*sdBuilder.sd); if (sdBuilder.sd->formal()) { while (!sdBuilder.formalErrorList.empty()) { SdFormalError *p = sdBuilder.formalErrorList.get(); ParserState *state = this; // work around lcc 3.0 bug p->send(*state); delete p; } } setSd(sdBuilder.sd.pointer()); currentInput()->setDocCharset(sd().docCharset(), entityManager().charset()); if (sdBuilder.sd->scopeInstance()) { Syntax *proSyntax = new Syntax(sd()); CharSwitcher switcher; setStandardSyntax(*proSyntax, refSyntax, sd().internalCharset(), switcher, sdBuilder.www); proSyntax->setSgmlChar(*sdBuilder.syntax->charSet(Syntax::sgmlChar)); ISet invalidSgmlChar; proSyntax->checkSgmlChar(*sdBuilder.sd, sdBuilder.syntax.pointer(), 1, // get results in document character set invalidSgmlChar); sdBuilder.syntax->checkSgmlChar(*sdBuilder.sd, proSyntax, 1, // get results in document character set invalidSgmlChar); if (!invalidSgmlChar.isEmpty()) message(ParserMessages::invalidSgmlChar, CharsetMessageArg(invalidSgmlChar)); setSyntaxes(proSyntax, sdBuilder.syntax.pointer()); } else setSyntax(sdBuilder.syntax.pointer()); if (syntax().multicode()) currentInput()->setMarkupScanTable(syntax().markupScanTable()); return 1; } Boolean Parser::sdParseSgmlDeclRef(SdBuilder &sdBuilder, SdParam &parm, ExternalId &id) { id.setLocation(currentLocation()); if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rSYSTEM, SdParam::reservedName + Sd::rPUBLIC, SdParam::mdc), parm)) return 0; if (parm.type == SdParam::mdc) return 1; if (parm.type == SdParam::reservedName + Sd::rPUBLIC) { if (!parseSdParam(AllowedSdParams(SdParam::minimumLiteral), parm)) return 0; const MessageType1 *err; PublicId::TextClass textClass; if (!id.setPublic(parm.literalText, sd().internalCharset(), syntax().space(), err)) sdBuilder.addFormalError(currentLocation(), *err, id.publicId()->string()); else if (id.publicId()->getTextClass(textClass) && textClass != PublicId::SD) sdBuilder.addFormalError(currentLocation(), ParserMessages::sdTextClass, id.publicId()->string()); } if (!parseSdParam(AllowedSdParams(SdParam::systemIdentifier, SdParam::mdc), parm)) return 0; if (parm.type == SdParam::mdc) return 1; id.setSystem(parm.literalText); return parseSdParam(AllowedSdParams(SdParam::mdc), parm); } Boolean Parser::sdParseDocumentCharset(SdBuilder &sdBuilder, SdParam &parm) { if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rCHARSET), parm)) return 0; if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rBASESET), parm)) return 0; CharsetDecl decl; UnivCharsetDesc desc; if (!sdParseCharset(sdBuilder, parm, 1, decl, desc)) return 0; ISet missing; findMissingMinimum(desc, missing); if (!missing.isEmpty()) { message(ParserMessages::missingMinimumChars, CharsetMessageArg(missing)); return 0; } ISet sgmlChar; decl.usedSet(sgmlChar); sdBuilder.sd->setDocCharsetDesc(desc); sdBuilder.sd->setDocCharsetDecl(decl); sdBuilder.syntax = new Syntax(*sdBuilder.sd); if (sd().internalCharsetIsDocCharset()) sdBuilder.syntax->setSgmlChar(sgmlChar); else { ISet internalSgmlChar; translateDocSet(sdBuilder.sd->docCharset(), sdBuilder.sd->internalCharset(), sgmlChar, internalSgmlChar); sdBuilder.syntax->setSgmlChar(internalSgmlChar); } return 1; } void Parser::translateDocSet(const CharsetInfo &fromCharset, const CharsetInfo &toCharset, const ISet &fromSet, ISet &toSet) { ISetIter iter(fromSet); Char min, max; while (iter.next(min, max)) { do { UnivChar univChar; Char internalChar; WideChar count2, alsoMax; if (!fromCharset.descToUniv(min, univChar, alsoMax)) { if (alsoMax >= max) break; min = alsoMax; } else { // FIXME better not to use univToDescCheck here // Maybe OK if multiple internal chars corresponding to doc char int nMap = univToDescCheck(toCharset, univChar, internalChar, count2); if (alsoMax > max) alsoMax = max; if (alsoMax - min > count2 - 1) alsoMax = min + (count2 - 1); if (nMap) toSet.addRange(internalChar, internalChar + (alsoMax - min)); min = alsoMax; } } while (min++ != max); } } Boolean Parser::sdParseCharset(SdBuilder &sdBuilder, SdParam &parm, Boolean isDocument, CharsetDecl &decl, UnivCharsetDesc &desc) { decl.clear(); ISet multiplyDeclared; // This is for checking whether the syntax reference character set // is ISO 646 when SCOPE is INSTANCE. Boolean maybeISO646 = 1; do { if (!parseSdParam(AllowedSdParams(SdParam::minimumLiteral), parm)) return 0; UnivCharsetDesc baseDesc; PublicId id; Boolean found; PublicId::TextClass textClass; const MessageType1 *err; if (!id.init(parm.literalText, sd().internalCharset(), syntax().space(), err)) sdBuilder.addFormalError(currentLocation(), *err, id.string()); else if (id.getTextClass(textClass) && textClass != PublicId::CHARSET) sdBuilder.addFormalError(currentLocation(), ParserMessages::basesetTextClass, id.string()); Boolean givenError; if (referencePublic(id, PublicId::CHARSET, givenError)) found = sdParseExternalCharset(*sdBuilder.sd, baseDesc); else if (!givenError) { found = 0; PublicId::OwnerType ownerType; if (id.getOwnerType(ownerType) && ownerType == PublicId::ISO) { StringC sequence; if (id.getDesignatingSequence(sequence)) { CharsetRegistry::ISORegistrationNumber number = CharsetRegistry::getRegistrationNumber(sequence, sd().internalCharset()); if (number != CharsetRegistry::UNREGISTERED) { Owner iter(CharsetRegistry::makeIter(number)); if (iter) { found = 1; WideChar min; WideChar max; UnivChar univ; while (iter->next(min, max, univ)) baseDesc.addRange(min, max, univ); } } } } if (!found) message(ParserMessages::unknownBaseset, StringMessageArg(id.string())); } else found = 0; if (!found) maybeISO646 = 0; decl.addSection(id); if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rDESCSET), parm)) return 0; if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) return 0; do { WideChar min = parm.n; if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) return 0; Number count = parm.n; Number adjCount; if (options().warnSgmlDecl && count == 0) message(ParserMessages::zeroNumberOfCharacters); decl.rangeDeclared(min, count, multiplyDeclared); if (isDocument && count > 0 && (min > charMax || count - 1 > charMax - min)) { message(ParserMessages::documentCharMax, NumberMessageArg(charMax)); adjCount = min > charMax ? 0 : 1 + (charMax - min); maybeISO646 = 0; } else adjCount = count; if (!parseSdParam(AllowedSdParams(SdParam::number, SdParam::minimumLiteral, SdParam::reservedName + Sd::rUNUSED), parm)) return 0; switch (parm.type) { case SdParam::number: decl.addRange(min, count, parm.n); if (found && adjCount > 0) { ISet baseMissing; desc.addBaseRange(baseDesc, min, min + (adjCount - 1), parm.n, baseMissing); if (!baseMissing.isEmpty() && options().warnSgmlDecl) message(ParserMessages::basesetCharsMissing, CharsetMessageArg(baseMissing)); } break; case SdParam::reservedName + Sd::rUNUSED: decl.addRange(min, count); break; case SdParam::minimumLiteral: { UnivChar c = charNameToUniv(*sdBuilder.sd, parm.literalText.string()); if (adjCount > 256) { message(ParserMessages::tooManyCharsMinimumLiteral); adjCount = 256; } for (Number i = 0; i < adjCount; i++) desc.addRange(min + i, min + i, c); } maybeISO646 = 0; decl.addRange(min, count, parm.literalText.string()); break; default: CANNOT_HAPPEN(); } SdParam::Type follow = (isDocument ? SdParam::reservedName + Sd::rCAPACITY : SdParam::reservedName + Sd::rFUNCTION); if (!parseSdParam(AllowedSdParams(SdParam::number, SdParam::reservedName + Sd::rBASESET, follow), parm)) return 0; } while (parm.type == SdParam::number); } while (parm.type == SdParam::reservedName + Sd::rBASESET); if (!multiplyDeclared.isEmpty()) message(ParserMessages::duplicateCharNumbers, CharsetMessageArg(multiplyDeclared)); ISet declaredSet; decl.declaredSet(declaredSet); ISetIter iter(declaredSet); WideChar min, max, lastMax; if (iter.next(min, max)) { ISet holes; lastMax = max; while (iter.next(min, max)) { if (min - lastMax > 1) holes.addRange(lastMax + 1, min - 1); lastMax = max; } if (!holes.isEmpty()) message(ParserMessages::codeSetHoles, CharsetMessageArg(holes)); } if (!isDocument && sdBuilder.sd->scopeInstance()) { // If scope is INSTANCE, syntax reference character set // must be same as reference. UnivCharsetDescIter iter(desc); WideChar descMin, descMax; UnivChar univMin; Char nextDescMin = 0; while (maybeISO646) { if (!iter.next(descMin, descMax, univMin)) { if (nextDescMin != 128) maybeISO646 = 0; break; } if (descMin != nextDescMin || univMin != descMin) maybeISO646 = 0; nextDescMin = descMax + 1; } if (!maybeISO646) message(ParserMessages::scopeInstanceSyntaxCharset); } return 1; } Boolean Parser::sdParseExternalCharset(Sd &sd, UnivCharsetDesc &desc) { SdParam parm; for (;;) { if (!parseSdParam(AllowedSdParams(SdParam::number, SdParam::eE), parm)) break; if (parm.type == SdParam::eE) return 1; WideChar min = parm.n; if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) break; Number count = parm.n; if (!parseSdParam(AllowedSdParams(SdParam::number, SdParam::minimumLiteral, SdParam::reservedName + Sd::rUNUSED), parm)) break; if (parm.type == SdParam::number) { if (count > 0) desc.addRange(min, min + (count - 1), parm.n); } else if (parm.type == SdParam::minimumLiteral) { UnivChar c = charNameToUniv(sd, parm.literalText.string()); if (count > 256) { message(ParserMessages::tooManyCharsMinimumLiteral); count = 256; } for (Number i = 0; i < count; i++) desc.addRange(min + i, min + i, c); } } popInputStack(); return 0; } UnivChar Parser::charNameToUniv(Sd &sd, const StringC &name) { UnivChar univ; if (entityCatalog().lookupChar(name, sd.internalCharset(), messenger(), univ)) return univ; else return sd.nameToUniv(name); } Boolean Parser::sdParseCapacity(SdBuilder &sdBuilder, SdParam &parm) { if (!parseSdParam(sdBuilder.www ? AllowedSdParams(SdParam::reservedName + Sd::rNONE, SdParam::reservedName + Sd::rPUBLIC, SdParam::reservedName + Sd::rSGMLREF) : AllowedSdParams(SdParam::reservedName + Sd::rPUBLIC, SdParam::reservedName + Sd::rSGMLREF), parm)) return 0; #if _MSC_VER == 1100 // Workaround for Visual C++ 5.0 bug int #else Boolean #endif pushed = 0; if (parm.type == SdParam::reservedName + Sd::rNONE) return parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rSCOPE), parm); if (parm.type == SdParam::reservedName + Sd::rPUBLIC) { if (!parseSdParam(AllowedSdParams(SdParam::minimumLiteral), parm)) return 0; PublicId id; PublicId::TextClass textClass; const MessageType1 *err; if (!id.init(parm.literalText, sd().internalCharset(), syntax().space(), err)) sdBuilder.addFormalError(currentLocation(), *err, id.string()); else if (id.getTextClass(textClass) && textClass != PublicId::CAPACITY) sdBuilder.addFormalError(currentLocation(), ParserMessages::capacityTextClass, id.string()); const StringC &str = id.string(); if (str != sd().execToInternal("ISO 8879-1986//CAPACITY Reference//EN") && str != sd().execToInternal("ISO 8879:1986//CAPACITY Reference//EN")) { Boolean givenError; if (referencePublic(id, PublicId::CAPACITY, givenError)) pushed = 1; else if (!givenError) message(ParserMessages::unknownCapacitySet, StringMessageArg(str)); } if (!pushed) return parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rSCOPE), parm); } PackedBoolean capacitySpecified[Sd::nCapacity]; int i; for (i = 0; i < Sd::nCapacity; i++) capacitySpecified[i] = 0; if (!parseSdParam(AllowedSdParams(SdParam::capacityName), parm)) return 0; do { Sd::Capacity capacityIndex = parm.capacityIndex; if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) return 0; if (!capacitySpecified[capacityIndex]) { sdBuilder.sd->setCapacity(capacityIndex, parm.n); capacitySpecified[capacityIndex] = 1; } else if (options().warnSgmlDecl) message(ParserMessages::duplicateCapacity, StringMessageArg(sd().capacityName(i))); int final = pushed ? int(SdParam::eE) : SdParam::reservedName + Sd::rSCOPE; if (!parseSdParam(AllowedSdParams(SdParam::capacityName, final), parm)) return 0; } while (parm.type == SdParam::capacityName); Number totalcap = sdBuilder.sd->capacity(0); for (i = 1; i < Sd::nCapacity; i++) if (sdBuilder.sd->capacity(i) > totalcap) message(ParserMessages::capacityExceedsTotalcap, StringMessageArg(sd().capacityName(i))); if (pushed) return parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rSCOPE), parm); return 1; } Boolean Parser::referencePublic(const PublicId &id, PublicId::TextClass entityType, Boolean &givenError) { givenError = 0; StringC sysid; if (entityCatalog().lookupPublic(id.string(), sd().internalCharset(), messenger(), sysid)) { Location loc = currentLocation(); eventHandler().sgmlDeclEntity(new (eventAllocator()) SgmlDeclEntityEvent(id, entityType, sysid, loc)); Ptr origin(EntityOrigin::make(internalAllocator(), ConstPtr(0), loc)); if (currentMarkup()) currentMarkup()->addEntityStart(origin); InputSource *in = entityManager().open(sysid, sd().docCharset(), origin.pointer(), 0, messenger()); if (!in) { givenError = 1; return 0; } pushInput(in); return 1; } return 0; } Boolean Parser::sdParseScope(SdBuilder &sdBuilder, SdParam &parm) { if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rINSTANCE, SdParam::reservedName + Sd::rDOCUMENT), parm)) return 0; if (parm.type == SdParam::reservedName + Sd::rINSTANCE) sdBuilder.sd->setScopeInstance(); return 1; } Boolean Parser::sdParseSyntax(SdBuilder &sdBuilder, SdParam &parm) { if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rSYNTAX), parm)) return 0; if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rSHUNCHAR, SdParam::reservedName + Sd::rPUBLIC), parm)) return 0; if (parm.type == SdParam::reservedName + Sd::rPUBLIC) { if (!parseSdParam(AllowedSdParams(SdParam::minimumLiteral), parm)) return 0; PublicId id; const MessageType1 *err; PublicId::TextClass textClass; if (!id.init(parm.literalText, sd().internalCharset(), syntax().space(), err)) sdBuilder.addFormalError(currentLocation(), *err, id.string()); else if (id.getTextClass(textClass) && textClass != PublicId::SYNTAX) sdBuilder.addFormalError(currentLocation(), ParserMessages::syntaxTextClass, id.string()); if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rFEATURES, SdParam::reservedName + Sd::rSWITCHES), parm)) return 0; Vector charSwitches; if (parm.type == SdParam::reservedName + Sd::rSWITCHES) { if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) return 0; for (;;) { SyntaxChar c = parm.n; if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) return 0; sdBuilder.switcher.addSwitch(c, parm.n); if (!parseSdParam(AllowedSdParams(SdParam::number, SdParam::reservedName + Sd::rFEATURES), parm)) return 0; if (parm.type != SdParam::number) break; } } const StandardSyntaxSpec *spec = lookupSyntax(id); if (spec) { if (!setStandardSyntax(*sdBuilder.syntax, *spec, sdBuilder.sd->internalCharset(), sdBuilder.switcher, sdBuilder.www)) sdBuilder.valid = 0; } else { Boolean givenError; if (referencePublic(id, PublicId::SYNTAX, givenError)) { sdBuilder.externalSyntax = 1; SdParam parm2; if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rSHUNCHAR), parm2)) return 0; if (!sdParseExplicitSyntax(sdBuilder, parm2)) return 0; } else { if (!givenError) message(ParserMessages::unknownPublicSyntax, StringMessageArg(id.string())); sdBuilder.valid = 0; } } } else { if (!sdParseExplicitSyntax(sdBuilder, parm)) return 0; } if (!sdBuilder.sd->scopeInstance()) { // we know the significant chars now ISet invalidSgmlChar; sdBuilder.syntax->checkSgmlChar(*sdBuilder.sd, 0, 1, invalidSgmlChar); if (!invalidSgmlChar.isEmpty()) message(ParserMessages::invalidSgmlChar, CharsetMessageArg(invalidSgmlChar)); } checkSyntaxNamelen(*sdBuilder.syntax); checkSwitchesMarkup(sdBuilder.switcher); return 1; } Boolean Parser::sdParseExplicitSyntax(SdBuilder &sdBuilder, SdParam &parm) { typedef Boolean (Parser::*SdParser)(SdBuilder &, SdParam &); static SdParser parsers[] = { &Parser::sdParseShunchar, &Parser::sdParseSyntaxCharset, &Parser::sdParseFunction, &Parser::sdParseNaming, &Parser::sdParseDelim, &Parser::sdParseNames, &Parser::sdParseQuantity }; for (size_t i = 0; i < SIZEOF(parsers); i++) if (!(this->*(parsers[i]))(sdBuilder, parm)) return 0; return 1; } const StandardSyntaxSpec *Parser::lookupSyntax(const PublicId &id) { PublicId::OwnerType ownerType; if (!id.getOwnerType(ownerType) || ownerType != PublicId::ISO) return 0; StringC str; if (!id.getOwner(str)) return 0; if (str != sd().execToInternal("ISO 8879:1986") && str != sd().execToInternal("ISO 8879-1986")) return 0; PublicId::TextClass textClass; if (!id.getTextClass(textClass) || textClass != PublicId::SYNTAX) return 0; if (!id.getDescription(str)) return 0; if (str == sd().execToInternal("Reference")) return &refSyntax; if (str == sd().execToInternal("Core")) return &coreSyntax; return 0; } Boolean Parser::sdParseSyntaxCharset(SdBuilder &sdBuilder, SdParam &parm) { UnivCharsetDesc desc; if (!sdParseCharset(sdBuilder, parm, 0, sdBuilder.syntaxCharsetDecl, desc)) return 0; sdBuilder.syntaxCharset.set(desc); checkSwitches(sdBuilder.switcher, sdBuilder.syntaxCharset); for (size_t i = 0; i < sdBuilder.switcher.nSwitches(); i++) if (!sdBuilder.syntaxCharsetDecl.charDeclared(sdBuilder.switcher.switchTo(i))) message(ParserMessages::switchNotInCharset, NumberMessageArg(sdBuilder.switcher.switchTo(i))); ISet missing; findMissingMinimum(sdBuilder.syntaxCharset, missing); if (!missing.isEmpty()) message(ParserMessages::missingMinimumChars, CharsetMessageArg(missing)); return 1; } Boolean Parser::sdParseShunchar(SdBuilder &sdBuilder, SdParam &parm) { if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rNONE, SdParam::reservedName + Sd::rCONTROLS, SdParam::number), parm)) return 0; if (parm.type == SdParam::reservedName + Sd::rNONE) { if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rBASESET), parm)) return 0; return 1; } if (parm.type == SdParam::reservedName + Sd::rCONTROLS) sdBuilder.syntax->setShuncharControls(); else { if (parm.n <= charMax) sdBuilder.syntax->addShunchar(Char(parm.n)); } for (;;) { if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rBASESET, SdParam::number), parm)) return 0; if (parm.type != SdParam::number) break; if (parm.n <= charMax) sdBuilder.syntax->addShunchar(Char(parm.n)); } return 1; } Boolean Parser::sdParseFunction(SdBuilder &sdBuilder, SdParam &parm) { static Sd::ReservedName standardNames[3] = { Sd::rRE, Sd::rRS, Sd::rSPACE }; for (int i = 0; i < 3; i++) { if (!parseSdParam(AllowedSdParams(SdParam::reservedName + standardNames[i]), parm)) return 0; if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) return 0; Char c; if (translateSyntax(sdBuilder, parm.n, c)) { if (checkNotFunction(*sdBuilder.syntax, c)) sdBuilder.syntax->setStandardFunction(Syntax::StandardFunction(i), c); else sdBuilder.valid = 0; } } Boolean haveMsichar = 0; Boolean haveMsochar = 0; for (;;) { if (!parseSdParam(sdBuilder.externalSyntax ? AllowedSdParams(SdParam::name, SdParam::paramLiteral) : AllowedSdParams(SdParam::name), parm)) return 0; Boolean nameWasLiteral; size_t nameMarkupIndex; if (currentMarkup()) nameMarkupIndex = currentMarkup()->size() - 1; Boolean invalidName = 0; StringC name; if (parm.type == SdParam::paramLiteral) { nameWasLiteral = 1; if (!translateSyntax(sdBuilder, parm.paramLiteralText, name)) invalidName = 1; } else { parm.token.swap(name); nameWasLiteral = 0; } if (!parseSdParam(nameWasLiteral ? AllowedSdParams(SdParam::reservedName + Sd::rFUNCHAR, SdParam::reservedName + Sd::rMSICHAR, SdParam::reservedName + Sd::rMSOCHAR, SdParam::reservedName + Sd::rMSSCHAR, SdParam::reservedName + Sd::rSEPCHAR) : AllowedSdParams(SdParam::reservedName + Sd::rFUNCHAR, SdParam::reservedName + Sd::rMSICHAR, SdParam::reservedName + Sd::rMSOCHAR, SdParam::reservedName + Sd::rMSSCHAR, SdParam::reservedName + Sd::rSEPCHAR, SdParam::reservedName + Sd::rLCNMSTRT), parm)) return 0; if (parm.type == SdParam::reservedName + Sd::rLCNMSTRT) { if (name != sd().reservedName(Sd::rNAMING)) message(ParserMessages::namingBeforeLcnmstrt, StringMessageArg(name)); else if (currentMarkup()) currentMarkup()->changeToSdReservedName(nameMarkupIndex, Sd::rNAMING); break; } if (!nameWasLiteral) { StringC tem; name.swap(tem); if (!translateName(sdBuilder, tem, name)) invalidName = 1; } Syntax::FunctionClass functionClass; switch (parm.type) { case SdParam::reservedName + Sd::rFUNCHAR: functionClass = Syntax::cFUNCHAR; break; case SdParam::reservedName + Sd::rMSICHAR: haveMsichar = 1; functionClass = Syntax::cMSICHAR; break; case SdParam::reservedName + Sd::rMSOCHAR: haveMsochar = 1; functionClass = Syntax::cMSOCHAR; break; case SdParam::reservedName + Sd::rMSSCHAR: functionClass = Syntax::cMSSCHAR; break; case SdParam::reservedName + Sd::rSEPCHAR: functionClass = Syntax::cSEPCHAR; break; default: CANNOT_HAPPEN(); } if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) return 0; Char c; if (translateSyntax(sdBuilder, parm.n, c) && checkNotFunction(*sdBuilder.syntax, c) && !invalidName) { Char tem; if (sdBuilder.syntax->lookupFunctionChar(name, &tem)) message(ParserMessages::duplicateFunctionName, StringMessageArg(name)); else sdBuilder.syntax->addFunctionChar(name, functionClass, c); } } if (haveMsochar && !haveMsichar) message(ParserMessages::msocharRequiresMsichar); return 1; } Boolean Parser::sdParseNaming(SdBuilder &sdBuilder, SdParam &parm) { static Sd::ReservedName keys[6] = { Sd::rUCNMSTRT, Sd::rNAMESTRT, Sd::rLCNMCHAR, Sd::rUCNMCHAR, Sd::rNAMECHAR, Sd::rNAMECASE }; int isNamechar = 0; ISet nameStartChar; ISet nameChar; do { String lc; Vector rangeIndex; enum PrevParam { paramNone, paramNumber, paramOther } prevParam = paramNone; for (;;) { switch (prevParam) { case paramNone: if (!parseSdParam(AllowedSdParams(SdParam::paramLiteral, SdParam::number), parm)) return 0; break; case paramNumber: if (!parseSdParam(AllowedSdParams(SdParam::reservedName + keys[isNamechar * 3], SdParam::paramLiteral, SdParam::number, SdParam::minus), parm)) return 0; break; case paramOther: if (!parseSdParam(AllowedSdParams(SdParam::reservedName + keys[isNamechar * 3], SdParam::paramLiteral, SdParam::number), parm)) return 0; break; } switch (parm.type) { case SdParam::paramLiteral: if (prevParam == paramNone) break; // fall through case SdParam::number: if (!sdBuilder.externalSyntax && !sdBuilder.enr) { message(ParserMessages::enrRequired); sdBuilder.enr = 1; } break; default: break; } prevParam = (parm.type == SdParam::number ? paramNumber : paramOther); if (parm.type == SdParam::minus) { if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) return 0; if (parm.n < lc[lc.size() - 1]) message(ParserMessages::sdInvalidRange); else { if (parm.n > lc[lc.size() - 1] + 1) rangeIndex.push_back(lc.size() - 1); lc += SyntaxChar(parm.n); } } else { sdParamConvertToLiteral(parm); if (parm.type != SdParam::paramLiteral) break; lc += parm.paramLiteralText; } } size_t lcPos = 0; size_t rangeIndexPos = 0; unsigned long rangeLeft = 0; SyntaxChar nextRangeChar; ISet &set = isNamechar ? nameChar : nameStartChar; String chars; Boolean runOut = 0; prevParam = paramNone; for (;;) { switch (prevParam) { case paramNone: if (!parseSdParam(AllowedSdParams(SdParam::paramLiteral, SdParam::number), parm)) return 0; break; case paramNumber: if (!parseSdParam(AllowedSdParams(SdParam::reservedName + keys[isNamechar * 3 + 1], SdParam::reservedName + keys[isNamechar * 3 + 2], SdParam::paramLiteral, SdParam::number, SdParam::minus), parm)) return 0; break; case paramOther: if (!parseSdParam(AllowedSdParams(SdParam::reservedName + keys[isNamechar * 3 + 1], SdParam::reservedName + keys[isNamechar * 3 + 2], SdParam::paramLiteral, SdParam::number), parm)) return 0; break; } switch (parm.type) { case SdParam::paramLiteral: if (prevParam == paramNone) break; // fall through case SdParam::number: if (!sdBuilder.externalSyntax && !sdBuilder.enr) { message(ParserMessages::enrRequired); sdBuilder.enr = 1; } break; default: break; } prevParam = (parm.type == SdParam::number ? paramNumber : paramOther); if (parm.type == SdParam::minus) { if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) return 0; ASSERT(chars.size() == 1); SyntaxChar start = chars[0]; SyntaxChar end = parm.n; if (start > end) message(ParserMessages::sdInvalidRange); else { size_t count = end + 1 - start; while (count > 0) { if (rangeLeft == 0 && rangeIndexPos < rangeIndex.size() && rangeIndex[rangeIndexPos] == lcPos) { rangeLeft = 1 + lc[lcPos + 1] - lc[lcPos]; nextRangeChar = lc[lcPos]; lcPos += 2; rangeIndexPos += 1; } Char c; if (rangeLeft > 0) { rangeLeft--; c = nextRangeChar++; } else if (lcPos < lc.size()) c = lc[lcPos++]; else { c = start; runOut = 1; } if (c == start && count > 1 && (runOut || rangeLeft > 0)) { size_t n; if (runOut) n = count; else if (rangeLeft < count) { // rangeLeft + 1 <= count n = rangeLeft + 1; rangeLeft = 0; } else { // count < rangeLeft + 1 n = count; rangeLeft -= n - 1; nextRangeChar += n - 1; } translateRange(sdBuilder, start, start + (n - 1), set); count -= n; start += n; } else { Char transLc, transUc; if (translateSyntax(sdBuilder, c, transLc) && translateSyntax(sdBuilder, start, transUc)) { set.add(transLc); if (transLc != transUc) { set.add(transUc); sdBuilder.syntax->addSubst(transLc, transUc); } } count--; start++; } } } chars.resize(0); } else { for (size_t i = 0; i < chars.size(); i++) { if (rangeLeft == 0 && rangeIndexPos < rangeIndex.size() && rangeIndex[rangeIndexPos] == lcPos) { rangeLeft = 1 + lc[lcPos + 1] - lc[lcPos]; nextRangeChar = lc[lcPos]; lcPos += 2; rangeIndexPos += 1; } Char c; if (rangeLeft > 0) { rangeLeft--; c = nextRangeChar++; } else if (lcPos < lc.size()) c = lc[lcPos++]; else { runOut = 1; c = chars[i]; } // map from c to chars[i] Char transLc, transUc; if (translateSyntax(sdBuilder, c, transLc) && translateSyntax(sdBuilder, chars[i], transUc)) { set.add(transLc); if (transLc != transUc) { set.add(transUc); sdBuilder.syntax->addSubst(transLc, transUc); } } } sdParamConvertToLiteral(parm); if (parm.type != SdParam::paramLiteral) break; parm.paramLiteralText.swap(chars); } } if ((runOut && !sdBuilder.externalSyntax) || rangeLeft > 0 || lcPos < lc.size()) message(isNamechar ? ParserMessages::nmcharLength : ParserMessages::nmstrtLength); if (parm.type == SdParam::reservedName + keys[isNamechar * 3 + 1]) { if (!sdBuilder.externalSyntax && !sdBuilder.enr) { message(ParserMessages::enrRequired); sdBuilder.enr = 1; } prevParam = paramNone; for (;;) { switch (prevParam) { case paramNone: if (!parseSdParam(AllowedSdParams(SdParam::paramLiteral, SdParam::number), parm)) return 0; break; case paramNumber: if (!parseSdParam(AllowedSdParams(SdParam::reservedName + keys[isNamechar * 3 + 2], SdParam::paramLiteral, SdParam::number, SdParam::minus), parm)) return 0; break; case paramOther: if (!parseSdParam(AllowedSdParams(SdParam::reservedName + keys[isNamechar * 3 + 2], SdParam::paramLiteral, SdParam::number), parm)) return 0; break; } prevParam = (parm.type == SdParam::number ? paramNumber : paramOther); if (parm.type == SdParam::minus) { SyntaxChar prevNumber = parm.n; if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) return 0; if (parm.n < prevNumber) message(ParserMessages::sdInvalidRange); else if (parm.n > prevNumber) translateRange(sdBuilder, prevNumber + 1, parm.n, set); } else { sdParamConvertToLiteral(parm); if (parm.type != SdParam::paramLiteral) break; for (size_t i = 0; i < parm.paramLiteralText.size(); i++) { Char trans; if (translateSyntax(sdBuilder, parm.paramLiteralText[i], trans)) set.add(trans); } } } } if (!checkNmchars(set, *sdBuilder.syntax)) sdBuilder.valid = 0; } while (!isNamechar++); ISet bad; intersectCharSets(nameStartChar, nameChar, bad); if (!bad.isEmpty()) { sdBuilder.valid = 0; message(ParserMessages::nmcharNmstrt, CharsetMessageArg(bad)); } sdBuilder.syntax->addNameStartCharacters(nameStartChar); sdBuilder.syntax->addNameCharacters(nameChar); if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rGENERAL), parm)) return 0; if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rNO, SdParam::reservedName + Sd::rYES), parm)) return 0; sdBuilder.syntax->setNamecaseGeneral(parm.type == SdParam::reservedName + Sd::rYES); if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rENTITY), parm)) return 0; if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rNO, SdParam::reservedName + Sd::rYES), parm)) return 0; sdBuilder.syntax->setNamecaseEntity(parm.type == SdParam::reservedName + Sd::rYES); return 1; } Boolean Parser::checkNmchars(const ISet &set, const Syntax &syntax) { Boolean valid = 1; ISet bad; intersectCharSets(set, *syntax.charSet(Syntax::nameStart), bad); if (!bad.isEmpty()) { message(ParserMessages::nmcharLetter, CharsetMessageArg(bad)); valid = 0; bad.clear(); } intersectCharSets(set, *syntax.charSet(Syntax::digit), bad); if (!bad.isEmpty()) { message(ParserMessages::nmcharDigit, CharsetMessageArg(bad)); valid = 0; bad.clear(); } Char funChar; if (syntax.getStandardFunction(Syntax::fRE, funChar) && set.contains(funChar)) { message(ParserMessages::nmcharRe, NumberMessageArg(funChar)); valid = 0; } if (syntax.getStandardFunction(Syntax::fRS, funChar) && set.contains(funChar)) { message(ParserMessages::nmcharRs, NumberMessageArg(funChar)); valid = 0; } if (syntax.getStandardFunction(Syntax::fSPACE, funChar) && set.contains(funChar)) { message(ParserMessages::nmcharSpace, NumberMessageArg(funChar)); valid = 0; } intersectCharSets(set, *syntax.charSet(Syntax::sepchar), bad); if (!bad.isEmpty()) { message(ParserMessages::nmcharSepchar, CharsetMessageArg(bad)); valid = 0; } return valid; } // Result is a ISet, so it can be used with CharsetMessageArg. void Parser::intersectCharSets(const ISet &s1, const ISet &s2, ISet &inter) { ISetIter i1(s1); ISetIter i2(s2); Char min1, max1, min2, max2; if (!i1.next(min1, max1)) return; if (!i2.next(min2, max2)) return; for (;;) { if (max1 < min2) { if (!i1.next(min1, max1)) break; } else if (max2 < min1) { if (!i2.next(min2, max2)) break; } else { // min2 <= max1 // min1 <= max2 Char min = min1 > min2 ? min1 : min2; Char max = max1 < max2 ? max1 : max2; inter.addRange(min, max); if (max2 > max) { if (!i1.next(min1, max1)) break; } else { if (!i2.next(min2, max2)) break; } } } } Boolean Parser::sdParseDelim(SdBuilder &sdBuilder, SdParam &parm) { if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rDELIM), parm)) return 0; if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rGENERAL), parm)) return 0; if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rSGMLREF), parm)) return 0; PackedBoolean delimGeneralSpecified[Syntax::nDelimGeneral]; for (int i = 0; i < Syntax::nDelimGeneral; i++) delimGeneralSpecified[i] = 0; for (;;) { if (!parseSdParam(AllowedSdParams(SdParam::generalDelimiterName, SdParam::reservedName + Sd::rSHORTREF), parm)) return 0; if (parm.type == SdParam::reservedName + Sd::rSHORTREF) break; Syntax::DelimGeneral delimGeneral = parm.delimGeneralIndex; if (delimGeneralSpecified[delimGeneral]) message(ParserMessages::duplicateDelimGeneral, StringMessageArg(sd().generalDelimiterName(delimGeneral))); switch (delimGeneral) { case Syntax::dHCRO: case Syntax::dNESTC: requireWWW(sdBuilder); break; default: break; } if (!parseSdParam(sdBuilder.externalSyntax ? AllowedSdParams(SdParam::paramLiteral, SdParam::number) : AllowedSdParams(SdParam::paramLiteral), parm)) return 0; sdParamConvertToLiteral(parm); StringC str; if (parm.paramLiteralText.size() == 0) message(ParserMessages::sdEmptyDelimiter); else if (translateSyntax(sdBuilder, parm.paramLiteralText, str)) { const SubstTable *table = sdBuilder.syntax->generalSubstTable(); for (size_t i = 0; i < str.size(); i++) table->subst(str[i]); if (checkGeneralDelim(*sdBuilder.syntax, str) && !delimGeneralSpecified[delimGeneral]) sdBuilder.syntax->setDelimGeneral(delimGeneral, str); else sdBuilder.valid = 0; } delimGeneralSpecified[delimGeneral] = 1; } if (sdBuilder.syntax->delimGeneral(Syntax::dNET).size() && !sdBuilder.syntax->delimGeneral(Syntax::dNESTC).size()) sdBuilder.syntax->setDelimGeneral(Syntax::dNESTC, sdBuilder.syntax->delimGeneral(Syntax::dNET)); if (!setRefDelimGeneral(*sdBuilder.syntax, sdBuilder.syntaxCharset, sdBuilder.sd->internalCharset(), sdBuilder.switcher)) sdBuilder.valid = 0; if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rSGMLREF, SdParam::reservedName + Sd::rNONE), parm)) return 0; if (parm.type == SdParam::reservedName + Sd::rSGMLREF) { if (!addRefDelimShortref(*sdBuilder.syntax, sdBuilder.syntaxCharset, sdBuilder.sd->internalCharset(), sdBuilder.switcher)) sdBuilder.valid = 0; } String lastLiteral; for (;;) { if (!parseSdParam(sdBuilder.externalSyntax ? AllowedSdParams(SdParam::paramLiteral, SdParam::number, SdParam::minus, SdParam::reservedName + Sd::rNAMES) : AllowedSdParams(SdParam::paramLiteral, SdParam::reservedName + Sd::rNAMES), parm)) return 0; sdParamConvertToLiteral(parm); if (parm.type == SdParam::minus) { if (!parseSdParam(AllowedSdParams(SdParam::paramLiteral, SdParam::number), parm)) return 0; sdParamConvertToLiteral(parm); if (parm.paramLiteralText.size() == 0) message(ParserMessages::sdEmptyDelimiter); else if (lastLiteral.size() != 1 || parm.paramLiteralText.size() != 1) message(ParserMessages::sdRangeNotSingleChar); else if (parm.paramLiteralText[0] < lastLiteral[0]) message(ParserMessages::sdInvalidRange); else if (parm.paramLiteralText[0] != lastLiteral[0]) { ISet shortrefChars; translateRange(sdBuilder, lastLiteral[0] + 1, parm.paramLiteralText[0], shortrefChars); ISet duplicates; intersectCharSets(shortrefChars, sdBuilder.syntax->delimShortrefSimple(), duplicates); int nComplexShortrefs = sdBuilder.syntax->nDelimShortrefComplex(); for (int i = 0; i < nComplexShortrefs; i++) { const StringC &delim = sdBuilder.syntax->delimShortrefComplex(i); if (delim.size() == 1 && shortrefChars.contains(delim[0])) duplicates.add(delim[0]); } if (!duplicates.isEmpty()) message(ParserMessages::duplicateDelimShortrefSet, CharsetMessageArg(duplicates)); sdBuilder.syntax->addDelimShortrefs(shortrefChars, sdBuilder.sd->internalCharset()); } lastLiteral.resize(0); } else if (parm.type == SdParam::paramLiteral) { parm.paramLiteralText.swap(lastLiteral); StringC str; if (lastLiteral.size() == 0) message(ParserMessages::sdEmptyDelimiter); else if (translateSyntax(sdBuilder, lastLiteral, str)) { const SubstTable *table = sdBuilder.syntax->generalSubstTable(); for (size_t i = 0; i < str.size(); i++) table->subst(str[i]); if (str.size() == 1 || checkShortrefDelim(*sdBuilder.syntax, sdBuilder.sd->internalCharset(), str)) { if (sdBuilder.syntax->isValidShortref(str)) message(ParserMessages::duplicateDelimShortref, StringMessageArg(str)); else sdBuilder.syntax->addDelimShortref(str, sdBuilder.sd->internalCharset()); } } } else break; } return 1; } Boolean Parser::sdParseNames(SdBuilder &sdBuilder, SdParam &parm) { if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rSGMLREF), parm)) return 0; for (;;) { if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rQUANTITY, SdParam::referenceReservedName), parm)) return 0; if (parm.type == SdParam::reservedName + Sd::rQUANTITY) break; Syntax::ReservedName reservedName = parm.reservedNameIndex; switch (reservedName) { case Syntax::rALL: case Syntax::rDATA: case Syntax::rIMPLICIT: requireWWW(sdBuilder); break; default: break; } if (!parseSdParam(sdBuilder.externalSyntax ? AllowedSdParams(SdParam::name, SdParam::paramLiteral) : AllowedSdParams(SdParam::name), parm)) return 0; StringC transName; if (parm.type == SdParam::name ? translateName(sdBuilder, parm.token, transName) : translateSyntax(sdBuilder, parm.paramLiteralText, transName)) { Syntax::ReservedName tem; if (sdBuilder.syntax->lookupReservedName(transName, &tem)) message(ParserMessages::ambiguousReservedName, StringMessageArg(transName)); else { if (transName.size() == 0 || !sdBuilder.syntax->isNameStartCharacter(transName[0])) { message(ParserMessages::reservedNameSyntax, StringMessageArg(transName)); transName.resize(0); } size_t i; // Check that its a valid name in the declared syntax // (- and . might not be name characters). for (i = 1; i < transName.size(); i++) if (!sdBuilder.syntax->isNameCharacter(transName[i])) { message(ParserMessages::reservedNameSyntax, StringMessageArg(transName)); transName.resize(0); break; } for (i = 0; i < transName.size(); i++) sdBuilder.syntax->generalSubstTable()->subst(transName[i]); if (sdBuilder.syntax->reservedName(reservedName).size() > 0) message(ParserMessages::duplicateReservedName, StringMessageArg(syntax().reservedName(reservedName))); else if (transName.size() > 0) sdBuilder.syntax->setName(reservedName, transName); else sdBuilder.valid = 0; } } } setRefNames(*sdBuilder.syntax, sdBuilder.sd->internalCharset(), sdBuilder.www); static Syntax::ReservedName functionNameIndex[3] = { Syntax::rRE, Syntax::rRS, Syntax::rSPACE }; for (int i = 0; i < 3; i++) { const StringC &functionName = sdBuilder.syntax->reservedName(functionNameIndex[i]); Char tem; if (sdBuilder.syntax->lookupFunctionChar(functionName, &tem)) message(ParserMessages::duplicateFunctionName, StringMessageArg(functionName)); } sdBuilder.syntax->enterStandardFunctionNames(); return 1; } Boolean Parser::sdParseQuantity(SdBuilder &sdBuilder, SdParam &parm) { if (!parseSdParam(sdBuilder.www ? AllowedSdParams(SdParam::reservedName + Sd::rNONE, SdParam::reservedName + Sd::rSGMLREF) : AllowedSdParams(SdParam::reservedName + Sd::rSGMLREF), parm)) return 0; int final = (sdBuilder.externalSyntax ? int(SdParam::eE) : SdParam::reservedName + Sd::rFEATURES); if (parm.type == SdParam::reservedName + Sd::rNONE) { for (int i = 0; i < Syntax::nQuantity; i++) { if (i != Syntax::qNORMSEP) sdBuilder.syntax->setQuantity(Syntax::Quantity(i), Syntax::unlimited); } if (!parseSdParam(AllowedSdParams(final, SdParam::reservedName + Sd::rENTITIES), parm)) return 0; } else { for (;;) { if (!parseSdParam(sdBuilder.www ? AllowedSdParams(SdParam::quantityName, final, SdParam::reservedName + Sd::rENTITIES) : AllowedSdParams(SdParam::quantityName, final), parm)) return 0; if (parm.type != SdParam::quantityName) break; Syntax::Quantity quantity = parm.quantityIndex; if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) return 0; sdBuilder.syntax->setQuantity(quantity, parm.n); } if (sdBuilder.sd->scopeInstance()) { for (int i = 0; i < Syntax::nQuantity; i++) if (sdBuilder.syntax->quantity(Syntax::Quantity(i)) < syntax().quantity(Syntax::Quantity(i))) message(ParserMessages::scopeInstanceQuantity, StringMessageArg(sd().quantityName(Syntax::Quantity(i)))); } } if (parm.type == SdParam::reservedName + Sd::rENTITIES) return sdParseEntities(sdBuilder, parm); else return 1; } Boolean Parser::sdParseEntities(SdBuilder &sdBuilder, SdParam &parm) { int final = (sdBuilder.externalSyntax ? int(SdParam::eE) : SdParam::reservedName + Sd::rFEATURES); for (;;) { if (!parseSdParam(AllowedSdParams(final, SdParam::paramLiteral), parm)) return 0; if (parm.type != SdParam::paramLiteral) break; StringC name; if (!translateSyntax(sdBuilder, parm.paramLiteralText, name)) name.resize(0); else if (name.size() == 0 || !sdBuilder.syntax->isNameStartCharacter(name[0])) { message(ParserMessages::entityNameSyntax, StringMessageArg(name)); name.resize(0); } else { // Check that its a valid name in the declared syntax for (size_t i = 1; i < name.size(); i++) if (!sdBuilder.syntax->isNameCharacter(name[i])) { message(ParserMessages::entityNameSyntax, StringMessageArg(name)); name.resize(0); break; } } if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) return 0; Char c; if (translateSyntax(sdBuilder, parm.n, c) && name.size()) sdBuilder.syntax->addEntity(name, c); } return 1; } Boolean Parser::sdParseFeatures(SdBuilder &sdBuilder, SdParam &parm) { struct FeatureInfo { Sd::ReservedName name; enum { none, boolean, number, netenabl } arg; }; static FeatureInfo features[] = { { Sd::rMINIMIZE, FeatureInfo::none }, { Sd::rDATATAG, FeatureInfo::boolean }, { Sd::rOMITTAG, FeatureInfo::boolean }, { Sd::rRANK, FeatureInfo::boolean }, { Sd::rSHORTTAG, FeatureInfo::none }, { Sd::rSTARTTAG, FeatureInfo::none }, { Sd::rEMPTY, FeatureInfo::boolean }, { Sd::rUNCLOSED, FeatureInfo::boolean }, { Sd::rNETENABL, FeatureInfo::netenabl }, { Sd::rENDTAG, FeatureInfo::none }, { Sd::rEMPTY, FeatureInfo::boolean }, { Sd::rUNCLOSED, FeatureInfo::boolean }, { Sd::rATTRIB, FeatureInfo::none }, { Sd::rDEFAULT, FeatureInfo::boolean }, { Sd::rOMITNAME, FeatureInfo::boolean }, { Sd::rVALUE, FeatureInfo::boolean }, { Sd::rEMPTYNRM, FeatureInfo::boolean }, { Sd::rIMPLYDEF, FeatureInfo::none }, { Sd::rATTLIST, FeatureInfo::boolean }, { Sd::rDOCTYPE, FeatureInfo::boolean }, { Sd::rELEMENT, FeatureInfo::boolean }, { Sd::rENTITY, FeatureInfo::boolean }, { Sd::rNOTATION, FeatureInfo::boolean }, { Sd::rLINK, FeatureInfo::none }, { Sd::rSIMPLE, FeatureInfo::number }, { Sd::rIMPLICIT, FeatureInfo::boolean }, { Sd::rEXPLICIT, FeatureInfo::number }, { Sd::rOTHER, FeatureInfo::none }, { Sd::rCONCUR, FeatureInfo::number }, { Sd::rSUBDOC, FeatureInfo::number }, { Sd::rFORMAL, FeatureInfo::boolean }, { Sd::rURN, FeatureInfo::boolean }, { Sd::rKEEPRSRE, FeatureInfo::boolean }, { Sd::rVALIDITY, FeatureInfo::none }, }; int booleanFeature = 0; int numberFeature = 0; for (size_t i = 0; i < SIZEOF(features); i++) { switch (features[i].name) { case Sd::rSTARTTAG: // SHORTTAG if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rSTARTTAG, SdParam::reservedName + Sd::rNO, SdParam::reservedName + Sd::rYES), parm)) return 0; if (parm.type == SdParam::reservedName + Sd::rSTARTTAG) break; sdBuilder.sd->setShorttag(parm.type == SdParam::reservedName + Sd::rYES); while (features[++i].name != Sd::rEMPTYNRM) if (features[i].arg == FeatureInfo::boolean) booleanFeature++; // fall through case Sd::rEMPTYNRM: if (!parseSdParam(AllowedSdParams(SdParam::reservedName + features[i].name, SdParam::reservedName + features[i + 7].name), parm)) return 0; if (parm.type == SdParam::reservedName + features[i].name) requireWWW(sdBuilder); else { booleanFeature += 6; i += 7; } break; case Sd::rURN: if (!parseSdParam(AllowedSdParams(SdParam::reservedName + features[i].name, SdParam::reservedName + Sd::rAPPINFO), parm)) return 0; if (parm.type == SdParam::reservedName + Sd::rAPPINFO) return 1; requireWWW(sdBuilder); break; default: if (!parseSdParam(AllowedSdParams(SdParam::reservedName + features[i].name), parm)) return 0; break; } switch (features[i].arg) { case FeatureInfo::number: if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rNO, SdParam::reservedName + Sd::rYES), parm)) return 0; if (parm.type == SdParam::reservedName + Sd::rYES) { if (!parseSdParam(AllowedSdParams(SdParam::number), parm)) return 0; sdBuilder.sd->setNumberFeature(Sd::NumberFeature(numberFeature++), parm.n); } else sdBuilder.sd->setNumberFeature(Sd::NumberFeature(numberFeature++), 0); break; case FeatureInfo::netenabl: if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rNO, SdParam::reservedName + Sd::rIMMEDNET, SdParam::reservedName + Sd::rALL), parm)) return 0; switch (parm.type) { case SdParam::reservedName + Sd::rNO: sdBuilder.sd->setStartTagNetEnable(Sd::netEnableNo); break; case SdParam::reservedName + Sd::rIMMEDNET: sdBuilder.sd->setStartTagNetEnable(Sd::netEnableImmednet); break; case SdParam::reservedName + Sd::rALL: sdBuilder.sd->setStartTagNetEnable(Sd::netEnableAll); break; } break; case FeatureInfo::boolean: if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rNO, SdParam::reservedName + Sd::rYES), parm)) return 0; switch (features[i].name) { #if 0 case Sd::rDATATAG: if (parm.type == SdParam::reservedName + Sd::rYES) message(ParserMessages::datatagNotImplemented); break; #endif case Sd::rEMPTYNRM: if (parm.type == SdParam::reservedName + Sd::rNO && sdBuilder.sd->startTagNetEnable() == Sd::netEnableImmednet) { message(ParserMessages::immednetRequiresEmptynrm); sdBuilder.valid = 0; } break; } sdBuilder.sd->setBooleanFeature(Sd::BooleanFeature(booleanFeature++), parm.type == (SdParam::reservedName + Sd::rYES)); break; } } if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rNOASSERT, SdParam::reservedName + Sd::rTYPE), parm)) return 0; switch (parm.type) { case SdParam::reservedName + Sd::rNOASSERT: sdBuilder.sd->setTypeValid(0); break; case SdParam::reservedName + Sd::rTYPE: sdBuilder.sd->setTypeValid(1); break; } if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rENTITIES), parm)) return 0; if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rNOASSERT, SdParam::reservedName + Sd::rREF), parm)) return 0; if (parm.type == SdParam::reservedName + Sd::rNOASSERT) { sdBuilder.sd->setIntegrallyStored(0); sdBuilder.sd->setEntityRef(Sd::entityRefAny); } else { if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rNONE, SdParam::reservedName + Sd::rINTERNAL, SdParam::reservedName + Sd::rANY), parm)) return 0; switch (parm.type) { case SdParam::reservedName + Sd::rNONE: sdBuilder.sd->setEntityRef(Sd::entityRefNone); break; case SdParam::reservedName + Sd::rINTERNAL: sdBuilder.sd->setEntityRef(Sd::entityRefInternal); break; case SdParam::reservedName + Sd::rANY: sdBuilder.sd->setEntityRef(Sd::entityRefAny); break; } if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rINTEGRAL), parm)) return 0; if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rNO, SdParam::reservedName + Sd::rYES), parm)) return 0; sdBuilder.sd->setIntegrallyStored(parm.type == (SdParam::reservedName + Sd::rYES)); } return parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rAPPINFO), parm); } Boolean Parser::sdParseAppinfo(SdBuilder &, SdParam &parm) { Location location(currentLocation()); if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rNONE, SdParam::minimumLiteral), parm)) return 0; AppinfoEvent *event; if (parm.type == SdParam::minimumLiteral) event = new (eventAllocator()) AppinfoEvent(parm.literalText, location); else event = new (eventAllocator()) AppinfoEvent(location); eventHandler().appinfo(event); return 1; } Boolean Parser::sdParseSeealso(SdBuilder &sdBuilder, SdParam &parm) { SdParam::Type final = sdBuilder.external ? SdParam::eE : SdParam::mdc; if (!parseSdParam(AllowedSdParams(SdParam::reservedName + Sd::rSEEALSO, final), parm)) return 0; if (parm.type == final) return 1; requireWWW(sdBuilder); if (!parseSdParam(AllowedSdParams(SdParam::minimumLiteral, SdParam::reservedName + Sd::rNONE), parm)) return 0; if (parm.type == SdParam::reservedName + Sd::rNONE) return parseSdParam(AllowedSdParams(final), parm); do { if (!parseSdParam(AllowedSdParams(SdParam::minimumLiteral, final), parm)) return 0; } while (parm.type != final); return 1; } Boolean Parser::translateSyntax(CharSwitcher &switcher, const CharsetInfo &syntaxCharset, const CharsetInfo &internalCharset, WideChar syntaxChar, Char &docChar) { syntaxChar = switcher.subst(syntaxChar); UnivChar univChar; if (syntaxCharset.descToUniv(syntaxChar, univChar) && univToDescCheck(internalCharset, univChar, docChar)) return 1; message(sd().internalCharsetIsDocCharset() ? ParserMessages::translateSyntaxCharDoc : ParserMessages::translateSyntaxCharInternal, NumberMessageArg(syntaxChar)); return 0; } void Parser::translateRange(SdBuilder &sdBuilder, SyntaxChar start, SyntaxChar end, ISet &chars) { #if 0 do { Char docChar; if (!translateSyntax(sdBuilder, start, docChar)) break; chars.add(docChar); } while (start++ != end); #endif for (;;) { SyntaxChar doneUpTo = end; Boolean gotSwitch = 0; WideChar firstSwitch; for (size_t i = 0; i < sdBuilder.switcher.nSwitches(); i++) { WideChar c = sdBuilder.switcher.switchFrom(i); if (start <= c && c <= end) { if (!gotSwitch) { gotSwitch = 1; firstSwitch = c; } else if (c < firstSwitch) firstSwitch = c; } } if (gotSwitch && firstSwitch == start) { doneUpTo = start; Char docChar; if (translateSyntax(sdBuilder, start, docChar)) chars.add(docChar); } else { if (gotSwitch) doneUpTo = firstSwitch - 1; Char docChar; Number count; if (translateSyntaxNoSwitch(sdBuilder, start, docChar, count)) { if (count - 1 < doneUpTo - start) doneUpTo = start + (count - 1); chars.addRange(docChar, docChar + (doneUpTo - start)); } } if (doneUpTo == end) break; start = doneUpTo + 1; } } Boolean Parser::translateSyntax(SdBuilder &sdBuilder, WideChar syntaxChar, Char &docChar) { Number count; return translateSyntaxNoSwitch(sdBuilder, sdBuilder.switcher.subst(syntaxChar), docChar, count); } Boolean Parser::translateSyntaxNoSwitch(SdBuilder &sdBuilder, WideChar syntaxChar, Char &docChar, Number &count) { Number n; StringC str; CharsetDeclRange::Type type; const PublicId *id; if (sdBuilder.sd->internalCharsetIsDocCharset() && sdBuilder.syntaxCharsetDecl.getCharInfo(syntaxChar, id, type, n, str, count)) { ISet docChars; switch (type) { case CharsetDeclRange::unused: break; case CharsetDeclRange::string: sdBuilder.sd->docCharsetDecl().stringToChar(str, docChars); break; case CharsetDeclRange::number: { Number count2; sdBuilder.sd->docCharsetDecl().numberToChar(id, n, docChars, count2); if (!docChars.isEmpty() && count2 < count) count = count2; } break; default: CANNOT_HAPPEN(); } if (!docChars.isEmpty()) { if (!docChars.isSingleton() && options().warnSgmlDecl) message(ParserMessages::ambiguousDocCharacter, CharsetMessageArg(docChars)); ISetIter iter(docChars); WideChar min, max; if (iter.next(min, max) && min <= charMax) { docChar = Char(min); return 1; } } } UnivChar univChar; WideChar alsoMax, count2; if (sdBuilder.syntaxCharset.descToUniv(syntaxChar, univChar, alsoMax) && univToDescCheck(sdBuilder.sd->internalCharset(), univChar, docChar, count2)) { count = (alsoMax - syntaxChar) + 1; if (count2 < count) count = count2; return 1; } sdBuilder.valid = 0; message(sd().internalCharsetIsDocCharset() ? ParserMessages::translateSyntaxCharDoc : ParserMessages::translateSyntaxCharInternal, NumberMessageArg(syntaxChar)); return 0; } Boolean Parser::translateSyntax(SdBuilder &sdBuilder, const String &syntaxString, StringC &docString) { docString.resize(0); int ret = 1; for (size_t i = 0; i < syntaxString.size(); i++) { Char c; if (translateSyntax(sdBuilder, syntaxString[i], c)) docString += c; else ret = 0; } return ret; } Boolean Parser::translateName(SdBuilder &sdBuilder, const StringC &name, StringC &str) { str.resize(name.size()); for (size_t i = 0; i < name.size(); i++) { UnivChar univChar; Boolean ret = sd().internalCharset().descToUniv(name[i], univChar); // Might switch hyphen or period. univChar = translateUniv(univChar, sdBuilder.switcher, sdBuilder.syntaxCharset); ASSERT(ret != 0); if (!univToDescCheck(sdBuilder.sd->internalCharset(), univChar, str[i])) { message(ParserMessages::translateDocChar, NumberMessageArg(univChar)); sdBuilder.valid = 0; return 0; } } return 1; } UnivChar Parser::translateUniv(UnivChar univChar, CharSwitcher &switcher, const CharsetInfo &syntaxCharset) { WideChar syntaxChar; ISet syntaxChars; if (syntaxCharset.univToDesc(univChar, syntaxChar, syntaxChars) != 1) { message(ParserMessages::missingSyntaxChar, NumberMessageArg(univChar)); return univChar; } SyntaxChar tem = switcher.subst(syntaxChar); if (tem != syntaxChar && !syntaxCharset.descToUniv(tem, univChar)) message(sd().internalCharsetIsDocCharset() ? ParserMessages::translateSyntaxCharDoc : ParserMessages::translateSyntaxCharInternal, NumberMessageArg(tem)); return univChar; } Boolean Parser::checkNotFunction(const Syntax &syn, Char c) { if (syn.charSet(Syntax::functionChar)->contains(c)) { message(ParserMessages::oneFunction, NumberMessageArg(c)); return 0; } else return 1; } // Check that it has at most one B sequence and that it // is not adjacent to a blank sequence. Boolean Parser::checkShortrefDelim(const Syntax &syn, const CharsetInfo &charset, const StringC &delim) { Boolean hadB = 0; Char letterB = charset.execToDesc('B'); const ISet *bSet = syn.charSet(Syntax::blank); for (size_t i = 0; i < delim.size(); i++) if (delim[i] == letterB) { if (hadB) { message(ParserMessages::multipleBSequence, StringMessageArg(delim)); return 0; } hadB = 1; if (i > 0 && bSet->contains(delim[i - 1])) { message(ParserMessages::blankAdjacentBSequence, StringMessageArg(delim)); return 0; } while (i + 1 < delim.size() && delim[i + 1] == letterB) i++; if (i < delim.size() - 1 && bSet->contains(delim[i + 1])) { message(ParserMessages::blankAdjacentBSequence, StringMessageArg(delim)); return 0; } } return 1; } Boolean Parser::checkGeneralDelim(const Syntax &syn, const StringC &delim) { const ISet *functionSet = syn.charSet(Syntax::functionChar); if (delim.size() > 0) { Boolean allFunction = 1; for (size_t i = 0; i < delim.size(); i++) if (!functionSet->contains(delim[i])) allFunction = 0; if (allFunction) { message(ParserMessages::generalDelimAllFunction, StringMessageArg(delim)); return 0; } } return 1; } Boolean Parser::checkSwitches(CharSwitcher &switcher, const CharsetInfo &syntaxCharset) { Boolean valid = 1; for (size_t i = 0; i < switcher.nSwitches(); i++) { WideChar c[2]; c[0] = switcher.switchFrom(i); c[1] = switcher.switchTo(i); for (int j = 0; j < 2; j++) { UnivChar univChar; if (syntaxCharset.descToUniv(c[j], univChar)) { // Check that it is not Digit Lcletter or Ucletter if ((UnivCharsetDesc::a <= univChar && univChar < UnivCharsetDesc::a + 26) || (UnivCharsetDesc::A <= univChar && univChar < UnivCharsetDesc::A + 26) || (UnivCharsetDesc::zero <= univChar && univChar < UnivCharsetDesc::zero + 10)) { message(ParserMessages::switchLetterDigit, NumberMessageArg(univChar)); valid = 0; } } } } return valid; } Boolean Parser::checkSwitchesMarkup(CharSwitcher &switcher) { Boolean valid = 1; size_t nSwitches = switcher.nSwitches(); for (size_t i = 0; i < nSwitches; i++) if (!switcher.switchUsed(i)) { // If the switch wasn't used, // then the character wasn't a markup character. message(ParserMessages::switchNotMarkup, NumberMessageArg(switcher.switchFrom(i))); valid = 0; } return valid; } void Parser::checkSyntaxNamelen(const Syntax &syn) { size_t namelen = syn.namelen(); int i; for (i = 0; i < Syntax::nDelimGeneral; i++) if (syn.delimGeneral(i).size() > namelen) message(ParserMessages::delimiterLength, StringMessageArg(syn.delimGeneral(i)), NumberMessageArg(namelen)); for (i = 0; i < syn.nDelimShortrefComplex(); i++) if (syn.delimShortrefComplex(i).size() > namelen) message(ParserMessages::delimiterLength, StringMessageArg(syn.delimShortrefComplex(i)), NumberMessageArg(namelen)); for (i = 0; i < Syntax::nNames; i++) if (syn.reservedName(Syntax::ReservedName(i)).size() > namelen && options().warnSgmlDecl) message(ParserMessages::reservedNameLength, StringMessageArg(syn.reservedName(Syntax::ReservedName(i))), NumberMessageArg(namelen)); } Boolean Parser::univToDescCheck(const CharsetInfo &charset, UnivChar from, Char &to) { WideChar c; ISet descSet; unsigned ret = charset.univToDesc(from, c, descSet); if (ret > 1) { if (options().warnSgmlDecl) message(ParserMessages::ambiguousDocCharacter, CharsetMessageArg(descSet)); ret = 1; } if (ret && c <= charMax) { to = Char(c); return 1; } return 0; } Boolean Parser::univToDescCheck(const CharsetInfo &charset, UnivChar from, Char &to, WideChar &count) { WideChar c; ISet descSet; unsigned ret = charset.univToDesc(from, c, descSet, count); if (ret > 1) { if (options().warnSgmlDecl) message(ParserMessages::ambiguousDocCharacter, CharsetMessageArg(descSet)); ret = 1; } if (ret && c <= charMax) { to = Char(c); return 1; } return 0; } Boolean Parser::parseSdParam(const AllowedSdParams &allow, SdParam &parm) { for (;;) { Token token = getToken(sdMode); switch (token) { case tokenUnrecognized: if (reportNonSgmlCharacter()) break; { message(ParserMessages::markupDeclarationCharacter, StringMessageArg(currentToken()), AllowedSdParamsMessageArg(allow, sdPointer())); } return 0; case tokenEe: if (allow.param(SdParam::eE)) { parm.type = SdParam::eE; if (currentMarkup()) currentMarkup()->addEntityEnd(); popInputStack(); return 1; } message(ParserMessages::sdEntityEnd, AllowedSdParamsMessageArg(allow, sdPointer())); return 0; case tokenS: if (currentMarkup()) currentMarkup()->addS(currentChar()); break; case tokenCom: if (!parseComment(sdcomMode)) return 0; break; case tokenDso: case tokenGrpo: case tokenMinusGrpo: case tokenPlusGrpo: case tokenRni: case tokenPeroNameStart: case tokenPeroGrpo: sdParamInvalidToken(token, allow); return 0; case tokenMinus: if (allow.param(SdParam::minus)) { parm.type = SdParam::minus; return 1; } sdParamInvalidToken(tokenMinus, allow); return 0; case tokenLita: case tokenLit: { Boolean lita = (token == tokenLita); if (allow.param(SdParam::minimumLiteral)) { if (!parseMinimumLiteral(lita, parm.literalText)) return 0; parm.type = SdParam::minimumLiteral; if (currentMarkup()) currentMarkup()->addLiteral(parm.literalText); } else if (allow.param(SdParam::paramLiteral)) { if (!parseSdParamLiteral(lita, parm.paramLiteralText)) return 0; parm.type = SdParam::paramLiteral; } else if (allow.param(SdParam::systemIdentifier)) { if (!parseSdSystemIdentifier(lita, parm.literalText)) return 0; parm.type = SdParam::systemIdentifier; } else { sdParamInvalidToken(token, allow); return 0; } return 1; } case tokenMdc: if (allow.param(SdParam::mdc)) { parm.type = SdParam::mdc; if (currentMarkup()) currentMarkup()->addDelim(Syntax::dMDC); return 1; } sdParamInvalidToken(tokenMdc, allow); return 0; case tokenNameStart: { extendNameToken(syntax().namelen(), ParserMessages::nameLength); getCurrentToken(syntax().generalSubstTable(), parm.token); if (allow.param(SdParam::capacityName)) { if (sd().lookupCapacityName(parm.token, parm.capacityIndex)) { parm.type = SdParam::capacityName; if (currentMarkup()) currentMarkup()->addName(currentInput()); return 1; } } if (allow.param(SdParam::referenceReservedName)) { if (syntax().lookupReservedName(parm.token, &parm.reservedNameIndex)) { parm.type = SdParam::referenceReservedName; if (currentMarkup()) currentMarkup()->addName(currentInput()); return 1; } } if (allow.param(SdParam::generalDelimiterName)) { if (sd().lookupGeneralDelimiterName(parm.token, parm.delimGeneralIndex)) { parm.type = SdParam::generalDelimiterName; if (currentMarkup()) currentMarkup()->addName(currentInput()); return 1; } } if (allow.param(SdParam::quantityName)) { if (sd().lookupQuantityName(parm.token, parm.quantityIndex)) { parm.type = SdParam::quantityName; if (currentMarkup()) currentMarkup()->addName(currentInput()); return 1; } } for (int i = 0;; i++) { SdParam::Type t = allow.get(i); if (t == SdParam::invalid) break; if (t >= SdParam::reservedName) { Sd::ReservedName sdReservedName = Sd::ReservedName(t - SdParam::reservedName); if (parm.token == sd().reservedName(sdReservedName)) { parm.type = t; if (currentMarkup()) currentMarkup()->addSdReservedName(sdReservedName, currentInput()); return 1; } } } if (allow.param(SdParam::name)) { parm.type = SdParam::name; if (currentMarkup()) currentMarkup()->addName(currentInput()); return 1; } { message(ParserMessages::sdInvalidNameToken, StringMessageArg(parm.token), AllowedSdParamsMessageArg(allow, sdPointer())); } return 0; } case tokenDigit: if (allow.param(SdParam::number)) { extendNumber(syntax().namelen(), ParserMessages::numberLength); parm.type = SdParam::number; unsigned long n; if (!stringToNumber(currentInput()->currentTokenStart(), currentInput()->currentTokenLength(), n) || n > Number(-1)) { message(ParserMessages::numberTooBig, StringMessageArg(currentToken())); parm.n = Number(-1); } else { if (currentMarkup()) currentMarkup()->addNumber(currentInput()); parm.n = Number(n); } Token token = getToken(sdMode); if (token == tokenNameStart) message(ParserMessages::psRequired); currentInput()->ungetToken(); return 1; } sdParamInvalidToken(tokenDigit, allow); return 0; default: CANNOT_HAPPEN(); } } } // This is a separate function, because we might want SyntaxChar // to be bigger than Char. Boolean Parser::parseSdParamLiteral(Boolean lita, String &str) { Location loc(currentLocation()); loc += 1; SdText text(loc, lita); // first character of content str.resize(0); const unsigned refLitlen = Syntax::referenceQuantity(Syntax::qLITLEN); Mode mode = lita ? sdplitaMode : sdplitMode; for (;;) { Token token = getToken(mode); switch (token) { case tokenEe: message(ParserMessages::literalLevel); return 0; case tokenUnrecognized: if (reportNonSgmlCharacter()) break; if (options().errorSignificant) message(ParserMessages::sdLiteralSignificant, StringMessageArg(currentToken())); text.addChar(currentChar(), currentLocation()); break; case tokenCroDigit: { InputSource *in = currentInput(); Location startLocation = currentLocation(); in->discardInitial(); extendNumber(syntax().namelen(), ParserMessages::numberLength); unsigned long n; Boolean valid; if (!stringToNumber(in->currentTokenStart(), in->currentTokenLength(), n) || n > syntaxCharMax) { message(ParserMessages::syntaxCharacterNumber, StringMessageArg(currentToken())); valid = 0; } else valid = 1; Owner markupPtr; if (eventsWanted().wantPrologMarkup()) { markupPtr = new Markup; markupPtr->addDelim(Syntax::dCRO); markupPtr->addNumber(in); switch (getToken(refMode)) { case tokenRefc: markupPtr->addDelim(Syntax::dREFC); break; case tokenRe: markupPtr->addRefEndRe(); if (options().warnRefc) message(ParserMessages::refc); break; default: if (options().warnRefc) message(ParserMessages::refc); break; } } else if (options().warnRefc) { if (getToken(refMode) != tokenRefc) message(ParserMessages::refc); } else (void)getToken(refMode); if (valid) text.addChar(SyntaxChar(n), Location(new NumericCharRefOrigin(startLocation, currentLocation().index() + currentInput()->currentTokenLength() - startLocation.index(), markupPtr), 0)); } break; case tokenCroNameStart: if (!parseNamedCharRef()) return 0; break; case tokenLit: case tokenLita: goto done; case tokenPeroNameStart: case tokenPeroGrpo: message(ParserMessages::sdParameterEntity); { Location loc(currentLocation()); const Char *p = currentInput()->currentTokenStart(); for (size_t count = currentInput()->currentTokenLength(); count > 0; count--) { text.addChar(*p++, loc); loc += 1; } } break; case tokenChar: if (text.string().size() > refLitlen && currentChar() == syntax().standardFunction(Syntax::fRE)) { message(ParserMessages::parameterLiteralLength, NumberMessageArg(refLitlen)); // guess that the closing delimiter has been omitted message(ParserMessages::literalClosingDelimiter); return 0; } text.addChar(currentChar(), currentLocation()); break; } } done: if (text.string().size() > refLitlen) message(ParserMessages::parameterLiteralLength, NumberMessageArg(refLitlen)); str = text.string(); if (currentMarkup()) currentMarkup()->addSdLiteral(text); return 1; } Boolean Parser::parseSdSystemIdentifier(Boolean lita, Text &text) { text.addStartDelim(currentLocation()); const unsigned refLitlen = Syntax::referenceQuantity(Syntax::qLITLEN); Mode mode = lita ? sdslitaMode : sdslitMode; for (;;) { Token token = getToken(mode); switch (token) { case tokenEe: message(ParserMessages::literalLevel); return 0; case tokenUnrecognized: if (reportNonSgmlCharacter()) break; if (options().errorSignificant) message(ParserMessages::sdLiteralSignificant, StringMessageArg(currentToken())); text.addChar(currentChar(), currentLocation()); break; case tokenLit: case tokenLita: text.addEndDelim(currentLocation(), token == tokenLita); goto done; case tokenChar: text.addChar(currentChar(), currentLocation()); break; default: CANNOT_HAPPEN(); } } done: if (text.string().size() > refLitlen) message(ParserMessages::systemIdentifierLength, NumberMessageArg(refLitlen)); if (currentMarkup()) currentMarkup()->addLiteral(text); return 1; } Boolean Parser::stringToNumber(const Char *s, size_t length, unsigned long &result) { unsigned long n = 0; for (; length > 0; length--, s++) { int val = sd().digitWeight(*s); if (n <= ULONG_MAX/10 && (n *= 10) <= ULONG_MAX - val) n += val; else return 0; } result = n; return 1; } void Parser::sdParamInvalidToken(Token token, const AllowedSdParams &allow) { message(ParserMessages::sdParamInvalidToken, TokenMessageArg(token, sdMode, syntaxPointer(), sdPointer()), AllowedSdParamsMessageArg(allow, sdPointer())); } void Parser::sdParamConvertToLiteral(SdParam &parm) { if (parm.type == SdParam::number) { parm.type = SdParam::paramLiteral; parm.paramLiteralText.resize(1); parm.paramLiteralText[0] = parm.n; } } void Parser::requireWWW(SdBuilder &sdBuilder) { if (!sdBuilder.www) { message(ParserMessages::wwwRequired); sdBuilder.www = 1; } } AllowedSdParams::AllowedSdParams(SdParam::Type arg1, SdParam::Type arg2, SdParam::Type arg3, SdParam::Type arg4, SdParam::Type arg5, SdParam::Type arg6) { allow_[0] = arg1; allow_[1] = arg2; allow_[2] = arg3; allow_[3] = arg4; allow_[4] = arg5; allow_[5] = arg6; } Boolean AllowedSdParams::param(SdParam::Type t) const { for (int i = 0; i < maxAllow && allow_[i] != SdParam::invalid; i++) if (t == allow_[i]) return 1; return 0; } SdParam::Type AllowedSdParams::get(int i) const { return i < 0 || i >= maxAllow ? SdParam::Type(SdParam::invalid) : allow_[i]; } AllowedSdParamsMessageArg::AllowedSdParamsMessageArg( const AllowedSdParams &allow, const ConstPtr &sd) : allow_(allow), sd_(sd) { } MessageArg *AllowedSdParamsMessageArg::copy() const { return new AllowedSdParamsMessageArg(*this); } void AllowedSdParamsMessageArg::append(MessageBuilder &builder) const { for (int i = 0;; i++) { SdParam::Type type = allow_.get(i); if (type == SdParam::invalid) break; if (i != 0) builder.appendFragment(ParserMessages::listSep); switch (type) { case SdParam::eE: builder.appendFragment(ParserMessages::entityEnd); break; case SdParam::minimumLiteral: builder.appendFragment(ParserMessages::minimumLiteral); break; case SdParam::mdc: { builder.appendFragment(ParserMessages::delimStart); Char c = sd_->execToInternal('>'); builder.appendChars(&c, 1); builder.appendFragment(ParserMessages::delimEnd); } break; case SdParam::number: builder.appendFragment(ParserMessages::number); break; case SdParam::name: builder.appendFragment(ParserMessages::name); break; case SdParam::paramLiteral: builder.appendFragment(ParserMessages::parameterLiteral); break; case SdParam::systemIdentifier: builder.appendFragment(ParserMessages::systemIdentifier); break; case SdParam::capacityName: builder.appendFragment(ParserMessages::capacityName); break; case SdParam::generalDelimiterName: builder.appendFragment(ParserMessages::generalDelimiteRoleName); break; case SdParam::referenceReservedName: builder.appendFragment(ParserMessages::referenceReservedName); break; case SdParam::quantityName: builder.appendFragment(ParserMessages::quantityName); break; case SdParam::minus: { StringC str(sd_->execToInternal("...")); builder.appendChars(str.data(), str.size()); break; } default: { StringC str(sd_->reservedName(type - SdParam::reservedName)); builder.appendChars(str.data(), str.size()); break; } } } } SdBuilder::SdBuilder() : valid(1), externalSyntax(0), enr(0), www(0), external(0) { } void SdBuilder::addFormalError(const Location &location, const MessageType1 &message, const StringC &id) { formalErrorList.insert(new SdFormalError(location, message, id)); } SdFormalError::SdFormalError(const Location &location, const MessageType1 &message, const StringC &id) : location_(location), message_(&message), id_(id) { } void SdFormalError::send(ParserState &parser) { parser.Messenger::setNextLocation(location_); parser.message(*message_, StringMessageArg(id_)); } CharSwitcher::CharSwitcher() { } void CharSwitcher::addSwitch(WideChar from, WideChar to) { switches_.push_back(from); switches_.push_back(to); switchUsed_.push_back(0); } SyntaxChar CharSwitcher::subst(WideChar c) { for (size_t i = 0; i < switches_.size(); i += 2) if (switches_[i] == c) { switchUsed_[i/2] = 1; return switches_[i + 1]; } return c; } size_t CharSwitcher::nSwitches() const { return switchUsed_.size(); } Boolean CharSwitcher::switchUsed(size_t i) const { return switchUsed_[i]; } WideChar CharSwitcher::switchFrom(size_t i) const { return switches_[i*2]; } WideChar CharSwitcher::switchTo(size_t i) const { return switches_[i*2 + 1]; } CharsetMessageArg::CharsetMessageArg(const ISet &set) : set_(set) { } MessageArg *CharsetMessageArg::copy() const { return new CharsetMessageArg(*this); } void CharsetMessageArg::append(MessageBuilder &builder) const { ISetIter iter(set_); WideChar min, max; Boolean first = 1; while (iter.next(min, max)) { if (first) first = 0; else builder.appendFragment(ParserMessages::listSep); builder.appendNumber(min); if (max != min) { builder.appendFragment(max == min + 1 ? ParserMessages::listSep : ParserMessages::rangeSep); builder.appendNumber(max); } } } #ifdef SP_NAMESPACE } #endif jade-1.2.1/lib/parser_inst.cxx100444 764 764 103462 6606636234 14107 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Owner.h" #include "CopyOwner.h" #include "Vector.h" #include "NCVector.h" #include "Ptr.h" #include "IList.h" #include "IQueue.h" #include "List.h" #include "OwnerTable.h" #include "PointerTable.h" #include "HashTable.h" #include "HashTableItemBase.h" #include "StringOf.h" #include "IListIter.h" #include "ListIter.h" #include "NamedResourceTable.h" #undef SP_DEFINE_TEMPLATES #include #include "Attribute.h" #include "Attributed.h" #include "CharsetDecl.h" #include "ContentToken.h" #include "Dtd.h" #include "ElementType.h" #include "Entity.h" #include "EntityCatalog.h" #include "EntityManager.h" #include "EquivClass.h" #include "Event.h" #include "Hash.h" #include "HashTable.h" #include "HashTableItemBase.h" #include "InputSource.h" #include "LinkProcess.h" #include "Lpd.h" #include "LpdEntityRef.h" #include "Markup.h" #include "NamedResource.h" #include "NamedTable.h" #include "Named.h" #include "NameToken.h" #include "OpenElement.h" #include "OutputState.h" #include "Recognizer.h" #include "Sd.h" #include "SdText.h" #include "SdFormalError.h" #include "SrInfo.h" #include "StringResource.h" #include "Syntax.h" #include "Text.h" #include "Trie.h" #include "Undo.h" #include "Boolean.h" #include "types.h" #include "Id.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_2; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_3; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_4; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_5; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_6; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_7; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_8; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_9; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_10; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_11; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_12; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_13; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_14; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_15; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_16; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_17; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_18; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_19; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_20; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_21; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_22; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_23; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_24; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_25; #endif #endif #endif #ifdef __DECCXX #pragma define_template CopyOwner #else #ifdef __xlC__ #pragma define(CopyOwner) #else #ifdef SP_ANSI_CLASS_INST template class CopyOwner; #else typedef CopyOwner Dummy_26; #endif #endif #endif #ifdef __DECCXX #pragma define_template CopyOwner #else #ifdef __xlC__ #pragma define(CopyOwner) #else #ifdef SP_ANSI_CLASS_INST template class CopyOwner; #else typedef CopyOwner Dummy_27; #endif #endif #endif #ifdef __DECCXX #pragma define_template CopyOwner #else #ifdef __xlC__ #pragma define(CopyOwner) #else #ifdef SP_ANSI_CLASS_INST template class CopyOwner; #else typedef CopyOwner Dummy_28; #endif #endif #endif #ifdef __DECCXX #pragma define_template CopyOwner #else #ifdef __xlC__ #pragma define(CopyOwner) #else #ifdef SP_ANSI_CLASS_INST template class CopyOwner; #else typedef CopyOwner Dummy_29; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector > #else #ifdef __xlC__ #pragma define(NCVector >) #else #ifdef SP_ANSI_CLASS_INST template class NCVector >; #else typedef NCVector > Dummy_30; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_31; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector > #else #ifdef __xlC__ #pragma define(NCVector >) #else #ifdef SP_ANSI_CLASS_INST template class NCVector >; #else typedef NCVector > Dummy_32; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_33; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTableItem #else #ifdef __xlC__ #pragma define(HashTableItem) #else #ifdef SP_ANSI_CLASS_INST template class HashTableItem; #else typedef HashTableItem Dummy_34; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTable #else #ifdef __xlC__ #pragma define(HashTable) #else #ifdef SP_ANSI_CLASS_INST template class HashTable; #else typedef HashTable Dummy_35; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTableItem #else #ifdef __xlC__ #pragma define(HashTableItem) #else #ifdef SP_ANSI_CLASS_INST template class HashTableItem; #else typedef HashTableItem Dummy_36; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTable #else #ifdef __xlC__ #pragma define(HashTable) #else #ifdef SP_ANSI_CLASS_INST template class HashTable; #else typedef HashTable Dummy_37; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_38; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_39; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_40; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_41; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_42; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_43; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_44; #endif #endif #endif #ifdef __DECCXX #pragma define_template IQueue #else #ifdef __xlC__ #pragma define(IQueue) #else #ifdef SP_ANSI_CLASS_INST template class IQueue; #else typedef IQueue Dummy_45; #endif #endif #endif #ifdef __DECCXX #pragma define_template IQueue #else #ifdef __xlC__ #pragma define(IQueue) #else #ifdef SP_ANSI_CLASS_INST template class IQueue; #else typedef IQueue Dummy_46; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTable #else #ifdef __xlC__ #pragma define(OwnerTable) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTable; #else typedef OwnerTable Dummy_47; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTableIter #else #ifdef __xlC__ #pragma define(OwnerTableIter) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTableIter; #else typedef OwnerTableIter Dummy_48; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_49; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_50; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_51; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_52; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_53; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_54; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_55; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_56; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_57; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_58; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_59; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_60; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_61; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_62; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTableIter #else #ifdef __xlC__ #pragma define(PointerTableIter) #else #ifdef SP_ANSI_CLASS_INST template class PointerTableIter; #else typedef PointerTableIter Dummy_63; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable #else #ifdef __xlC__ #pragma define(PointerTable) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable; #else typedef PointerTable Dummy_64; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable,StringC,Hash,NamedResourceKeyFunction> #else #ifdef __xlC__ #pragma define(PointerTable,StringC,Hash,NamedResourceKeyFunction>) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable,StringC,Hash,NamedResourceKeyFunction>; #else typedef PointerTable,StringC,Hash,NamedResourceKeyFunction> Dummy_65; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTableIter,StringC,Hash,NamedResourceKeyFunction> #else #ifdef __xlC__ #pragma define(PointerTableIter,StringC,Hash,NamedResourceKeyFunction>) #else #ifdef SP_ANSI_CLASS_INST template class PointerTableIter,StringC,Hash,NamedResourceKeyFunction>; #else typedef PointerTableIter,StringC,Hash,NamedResourceKeyFunction> Dummy_66; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_67; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_68; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_69; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_70; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_71; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_72; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_73; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_74; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_75; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_76; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_77; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_78; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_79; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_80; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_81; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_82; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_83; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_84; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_85; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_86; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_87; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_88; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_89; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_90; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_91; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_92; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_93; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_94; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_95; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_96; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_97; #endif #endif #endif #ifdef __DECCXX #pragma define_template NamedTable #else #ifdef __xlC__ #pragma define(NamedTable) #else #ifdef SP_ANSI_CLASS_INST template class NamedTable; #else typedef NamedTable Dummy_98; #endif #endif #endif #ifdef __DECCXX #pragma define_template NamedTableIter #else #ifdef __xlC__ #pragma define(NamedTableIter) #else #ifdef SP_ANSI_CLASS_INST template class NamedTableIter; #else typedef NamedTableIter Dummy_99; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_100; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter #else #ifdef __xlC__ #pragma define(IListIter) #else #ifdef SP_ANSI_CLASS_INST template class IListIter; #else typedef IListIter Dummy_101; #endif #endif #endif #ifdef __DECCXX #pragma define_template NamedResourceTable #else #ifdef __xlC__ #pragma define(NamedResourceTable) #else #ifdef SP_ANSI_CLASS_INST template class NamedResourceTable; #else typedef NamedResourceTable Dummy_102; #endif #endif #endif #ifdef __DECCXX #pragma define_template NamedResourceTable #else #ifdef __xlC__ #pragma define(NamedResourceTable) #else #ifdef SP_ANSI_CLASS_INST template class NamedResourceTable; #else typedef NamedResourceTable Dummy_103; #endif #endif #endif #ifdef __DECCXX #pragma define_template NamedResourceTableIter #else #ifdef __xlC__ #pragma define(NamedResourceTableIter) #else #ifdef SP_ANSI_CLASS_INST template class NamedResourceTableIter; #else typedef NamedResourceTableIter Dummy_104; #endif #endif #endif #ifdef __DECCXX #pragma define_template NamedResourceTableIter #else #ifdef __xlC__ #pragma define(NamedResourceTableIter) #else #ifdef SP_ANSI_CLASS_INST template class NamedResourceTableIter; #else typedef NamedResourceTableIter Dummy_105; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstNamedResourceTableIter #else #ifdef __xlC__ #pragma define(ConstNamedResourceTableIter) #else #ifdef SP_ANSI_CLASS_INST template class ConstNamedResourceTableIter; #else typedef ConstNamedResourceTableIter Dummy_106; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstNamedResourceTableIter #else #ifdef __xlC__ #pragma define(ConstNamedResourceTableIter) #else #ifdef SP_ANSI_CLASS_INST template class ConstNamedResourceTableIter; #else typedef ConstNamedResourceTableIter Dummy_107; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_108; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_109; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > > #else #ifdef __xlC__ #pragma define(Vector > >) #else #ifdef SP_ANSI_CLASS_INST template class Vector > >; #else typedef Vector > > Dummy_110; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_111; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_112; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_113; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_114; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable #else #ifdef __xlC__ #pragma define(PointerTable) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable; #else typedef PointerTable Dummy_115; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTableIter #else #ifdef __xlC__ #pragma define(PointerTableIter) #else #ifdef SP_ANSI_CLASS_INST template class PointerTableIter; #else typedef PointerTableIter Dummy_116; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTable #else #ifdef __xlC__ #pragma define(OwnerTable) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTable; #else typedef OwnerTable Dummy_117; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTableIter #else #ifdef __xlC__ #pragma define(OwnerTableIter) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTableIter; #else typedef OwnerTableIter Dummy_118; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList #else #ifdef __xlC__ #pragma define(IList) #else #ifdef SP_ANSI_CLASS_INST template class IList; #else typedef IList Dummy_119; #endif #endif #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/lib/parser_inst.m4100444 764 764 14550 6606574410 13601 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Owner.h" #include "CopyOwner.h" #include "Vector.h" #include "NCVector.h" #include "Ptr.h" #include "IList.h" #include "IQueue.h" #include "List.h" #include "OwnerTable.h" #include "PointerTable.h" #include "HashTable.h" #include "HashTableItemBase.h" #include "StringOf.h" #include "IListIter.h" #include "ListIter.h" #include "NamedResourceTable.h" #undef SP_DEFINE_TEMPLATES #include #include "Attribute.h" #include "Attributed.h" #include "CharsetDecl.h" #include "ContentToken.h" #include "Dtd.h" #include "ElementType.h" #include "Entity.h" #include "EntityCatalog.h" #include "EntityManager.h" #include "EquivClass.h" #include "Event.h" #include "Hash.h" #include "HashTable.h" #include "HashTableItemBase.h" #include "InputSource.h" #include "LinkProcess.h" #include "Lpd.h" #include "LpdEntityRef.h" #include "Markup.h" #include "NamedResource.h" #include "NamedTable.h" #include "Named.h" #include "NameToken.h" #include "OpenElement.h" #include "OutputState.h" #include "Recognizer.h" #include "Sd.h" #include "SdText.h" #include "SdFormalError.h" #include "SrInfo.h" #include "StringResource.h" #include "Syntax.h" #include "Text.h" #include "Trie.h" #include "Undo.h" #include "Boolean.h" #include "types.h" #include "Id.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(CopyOwner) __instantiate(CopyOwner) __instantiate(CopyOwner) __instantiate(CopyOwner) __instantiate(NCVector >) __instantiate(Vector >) __instantiate(NCVector >) __instantiate(Vector) __instantiate(`HashTableItem') __instantiate(`HashTable') __instantiate(`HashTableItem') __instantiate(`HashTable') __instantiate(IList) __instantiate(IList) __instantiate(IList) __instantiate(IList) __instantiate(IList) __instantiate(IList) __instantiate(IList) __instantiate(IQueue) __instantiate(IQueue) __instantiate(`OwnerTable') __instantiate(`OwnerTableIter') __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(`PointerTableIter') __instantiate(`PointerTable') __instantiate(`PointerTable,StringC,Hash,NamedResourceKeyFunction>') __instantiate(`PointerTableIter,StringC,Hash,NamedResourceKeyFunction>') __instantiate(Vector >) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector >) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector >) __instantiate(Vector >) __instantiate(Vector) __instantiate(Vector >) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector >) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector >) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(Vector) __instantiate(NamedTable) __instantiate(NamedTableIter) __instantiate(IListIter) __instantiate(IListIter) __instantiate(NamedResourceTable) __instantiate(NamedResourceTable) __instantiate(NamedResourceTableIter) __instantiate(NamedResourceTableIter) __instantiate(ConstNamedResourceTableIter) __instantiate(ConstNamedResourceTableIter) __instantiate(Vector) __instantiate(Vector >) __instantiate(Vector > >) __instantiate(Vector) __instantiate(Vector >) __instantiate(Vector >) __instantiate(Vector) __instantiate(`PointerTable') __instantiate(`PointerTableIter') __instantiate(`OwnerTable') __instantiate(`OwnerTableIter') __instantiate(IList) #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/lib/splib.cxx100444 764 764 157 6604607572 12605 0ustar jjcjjc// This file is used to build the pre-compiled header on those // systems that support it. #include "splib.h" jade-1.2.1/lib/splib.h100444 764 764 355 6604607572 12232 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. // This file must be included first by all files in lib. #define BUILD_LIBSP #include "config.h" #ifdef SP_PCH #include "splibpch.h" #endif /* SP_PCH */ jade-1.2.1/lib/splibpch.h100444 764 764 7257 6604607572 12755 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. // Include all header files for systems that support pre-compiled headers. #include "Allocator.h" #include "ArcEngine.h" #include "Attribute.h" #include "Attributed.h" #include "Boolean.h" #include "CharMap.h" #include "CharsetDecl.h" #include "CharsetInfo.h" #include "CmdLineApp.h" #include "CodingSystem.h" #include "CodingSystemKit.h" #include "ConsoleOutput.h" #include "ContentState.h" #include "ContentToken.h" #include "CopyOwner.h" #include "DescriptorManager.h" #include "Dtd.h" #include "ElementType.h" #include "Entity.h" #include "EntityApp.h" #include "EntityCatalog.h" #include "EntityDecl.h" #include "EntityManager.h" #include "ErrnoMessageArg.h" #include "ErrorCountEventHandler.h" #include "Event.h" #include "EventsWanted.h" #include "ExtendEntityManager.h" #include "ExternalId.h" #include "GenericEventHandler.h" #include "Hash.h" #include "HashTable.h" #include "HashTableItemBase.h" #include "IList.h" #include "IListBase.h" #include "IListIter.h" #include "IListIterBase.h" #include "IQueue.h" #include "ISet.h" #include "ISetIter.h" #include "IdentityCodingSystem.h" #include "InputSource.h" #include "Link.h" #include "LinkProcess.h" #include "List.h" #include "ListIter.h" #include "LiteralStorage.h" #include "Location.h" #include "Lpd.h" #include "Markup.h" #include "Message.h" #include "MessageArg.h" #include "MessageBuilder.h" #include "MessageEventHandler.h" #include "MessageFormatter.h" #include "MessageReporter.h" #include "Mode.h" #include "NCVector.h" #include "Named.h" #include "NamedResource.h" #include "NamedResourceTable.h" #include "NamedTable.h" #include "Notation.h" #include "NotationStorage.h" #include "OpenElement.h" #include "Options.h" #include "OutputByteStream.h" #include "OutputCharStream.h" #include "Owner.h" #include "OwnerTable.h" #include "ParserApp.h" #include "ParserOptions.h" #include "PointerTable.h" #include "PosixStorage.h" #include "Ptr.h" #include "RangeMap.h" #include "Resource.h" #include "RewindStorageObject.h" #include "SOEntityCatalog.h" #include "Sd.h" #include "SdText.h" #include "SearchResultMessageArg.h" #include "SgmlParser.h" #include "ShortReferenceMap.h" #include "StdioStorage.h" #include "StorageManager.h" #include "StringC.h" #include "StringOf.h" #include "StringResource.h" #include "SubstTable.h" #include "Syntax.h" #include "Text.h" #include "TypeId.h" #include "URLStorage.h" #include "UnivCharsetDesc.h" #include "Vector.h" #include "XcharMap.h" #include "config.h" #include "constant.h" #include "macros.h" #include "rtti.h" #include "sptchar.h" #include "types.h" #include "xnew.h" #ifdef SP_MULTI_BYTE #include "EUCJPCodingSystem.h" #include "Fixed2CodingSystem.h" #include "SJISCodingSystem.h" #include "UnicodeCodingSystem.h" #include "UTF8CodingSystem.h" #ifdef WIN32 #include "Win32CodingSystem.h" #endif #endif /* SP_MULTI_BYTE */ #include "EventGenerator.h" #include "ParserEventGeneratorKit.h" #include "SGMLApplication.h" #include "ArcProcessor.h" #include "CatalogEntry.h" #include "CharsetRegistry.h" #include "EquivClass.h" #include "EventQueue.h" #include "Group.h" #include "Id.h" #include "InternalInputSource.h" #include "LpdEntityRef.h" #include "MarkupScan.h" #include "ModeInfo.h" #include "NameToken.h" #include "NumericCharRefOrigin.h" #include "OutputState.h" #include "Param.h" #include "Parser.h" #include "ParserMessages.h" #include "ParserState.h" #include "Partition.h" #include "Priority.h" #include "Recognizer.h" #include "SdFormalError.h" #include "SrInfo.h" #include "StorageObjectPosition.h" #include "StringVectorMessageArg.h" #include "TokenMessageArg.h" #include "Trie.h" #include "TrieBuilder.h" #include "Undo.h" #include "token.h" jade-1.2.1/lib/strerror.c100444 764 764 544 6604607572 12776 0ustar jjcjjc#include #define INT_DIGITS 19 /* enough for 64 bit integer */ extern int sys_nerr; extern char *sys_errlist[]; char *strerror(n) int n; { static char buf[sizeof("Error ") + 1 + INT_DIGITS]; if (n >= 0 && n < sys_nerr && sys_errlist[n] != 0) return sys_errlist[n]; else { sprintf(buf, "Error %d", n); return buf; } } jade-1.2.1/lib/token.h100444 764 764 3065 6604607572 12262 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef token_INCLUDED #define token_INCLUDED 1 #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif enum EnumToken { // tokenUnrecognized must be 0 tokenUnrecognized, // no token could be recognized tokenEe, // end of entity tokenS, // RS RE SPACE SEPCHAR tokenRe, // RE tokenRs, // RS tokenSpace, // SPACE tokenSepchar, // SEPCHAR tokenNameStart, // X tokenDigit, // 1 tokenLcUcNmchar, // LCNMCHAR or UCNMCHAR tokenChar, // a legal data character tokenCharDelim, // a data character which starts a delimiter tokenIgnoredChar, // character in ignored marked section // delimiters and delimiters in context tokenAnd, tokenCom, tokenCroDigit, tokenCroNameStart, tokenDsc, tokenDso, tokenDtgc, tokenDtgo, tokenEroNameStart, tokenEroGrpo, tokenEtago, tokenEtagoNameStart, tokenEtagoTagc, tokenEtagoGrpo, tokenGrpc, tokenGrpo, tokenHcroHexDigit, tokenLit, tokenLita, tokenMdc, tokenMdoNameStart, tokenMdoMdc, tokenMdoCom, tokenMdoDso, tokenMinus, tokenMinusGrpo, tokenMscMdc, tokenNet, tokenNestc, tokenOpt, tokenOr, tokenPero, tokenPeroNameStart, tokenPeroGrpo, tokenPic, tokenPio, tokenPlus, tokenPlusGrpo, tokenRefc, tokenRep, tokenRni, tokenSeq, tokenStago, tokenStagoNameStart, tokenStagoTagc, tokenStagoGrpo, tokenTagc, tokenVi, // short references start here tokenFirstShortref }; #ifdef SP_NAMESPACE } #endif #endif /* not token_INCLUDED */ jade-1.2.1/lib/version.h100444 764 764 41 6606636232 12553 0ustar jjcjjc#define SP_VERSION SP_T("1.3.3") jade-1.2.1/lib/xentmgr_inst.cxx100444 764 764 33174 6605016306 14250 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "StringOf.h" #include "Vector.h" #include "NCVector.h" #include "ListIter.h" #include "IList.h" #include "List.h" #include "Owner.h" #include "OwnerTable.h" #include "PointerTable.h" #include "HashTableItemBase.h" #include "HashTable.h" #include "Ptr.h" #include "CharMap.h" #undef SP_DEFINE_TEMPLATES #include "StorageManager.h" #include "ExtendEntityManager.h" #include "OffsetOrderedList.h" #include "CodingSystem.h" #include "CodingSystemKit.h" #include "types.h" #include "StringOf.h" #include "DescriptorManager.h" #include "StorageManager.h" #include "Boolean.h" #include "StorageObjectPosition.h" #include "CatalogEntry.h" #include "CharsetRegistry.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template String #else #ifdef __xlC__ #pragma define(String) #else #ifdef SP_ANSI_CLASS_INST template class String; #else typedef String Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector > #else #ifdef __xlC__ #pragma define(NCVector >) #else #ifdef SP_ANSI_CLASS_INST template class NCVector >; #else typedef NCVector > Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_2; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector > #else #ifdef __xlC__ #pragma define(NCVector >) #else #ifdef SP_ANSI_CLASS_INST template class NCVector >; #else typedef NCVector > Dummy_3; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector #else #ifdef __xlC__ #pragma define(NCVector) #else #ifdef SP_ANSI_CLASS_INST template class NCVector; #else typedef NCVector Dummy_4; #endif #endif #endif #ifdef __DECCXX #pragma define_template IList > #else #ifdef __xlC__ #pragma define(IList >) #else #ifdef SP_ANSI_CLASS_INST template class IList >; #else typedef IList > Dummy_5; #endif #endif #endif #ifdef __DECCXX #pragma define_template List #else #ifdef __xlC__ #pragma define(List) #else #ifdef SP_ANSI_CLASS_INST template class List; #else typedef List Dummy_6; #endif #endif #endif #ifdef __DECCXX #pragma define_template ListIter #else #ifdef __xlC__ #pragma define(ListIter) #else #ifdef SP_ANSI_CLASS_INST template class ListIter; #else typedef ListIter Dummy_7; #endif #endif #endif #ifdef __DECCXX #pragma define_template ListItem #else #ifdef __xlC__ #pragma define(ListItem) #else #ifdef SP_ANSI_CLASS_INST template class ListItem; #else typedef ListItem Dummy_8; #endif #endif #endif #ifdef __DECCXX #pragma define_template IListIter > #else #ifdef __xlC__ #pragma define(IListIter >) #else #ifdef SP_ANSI_CLASS_INST template class IListIter >; #else typedef IListIter > Dummy_9; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_10; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_11; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_12; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_13; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_14; #endif #endif #endif #ifdef __DECCXX #pragma define_template NCVector > #else #ifdef __xlC__ #pragma define(NCVector >) #else #ifdef SP_ANSI_CLASS_INST template class NCVector >; #else typedef NCVector > Dummy_15; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTable,CatalogEntry> #else #ifdef __xlC__ #pragma define(HashTable,CatalogEntry>) #else #ifdef SP_ANSI_CLASS_INST template class HashTable,CatalogEntry>; #else typedef HashTable,CatalogEntry> Dummy_16; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTableIter,CatalogEntry> #else #ifdef __xlC__ #pragma define(HashTableIter,CatalogEntry>) #else #ifdef SP_ANSI_CLASS_INST template class HashTableIter,CatalogEntry>; #else typedef HashTableIter,CatalogEntry> Dummy_17; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTableItem,CatalogEntry> #else #ifdef __xlC__ #pragma define(HashTableItem,CatalogEntry>) #else #ifdef SP_ANSI_CLASS_INST template class HashTableItem,CatalogEntry>; #else typedef HashTableItem,CatalogEntry> Dummy_18; #endif #endif #endif #ifdef __DECCXX #pragma define_template HashTableItemBase > #else #ifdef __xlC__ #pragma define(HashTableItemBase >) #else #ifdef SP_ANSI_CLASS_INST template class HashTableItemBase >; #else typedef HashTableItemBase > Dummy_19; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTable >,String,Hash,HashTableKeyFunction > > #else #ifdef __xlC__ #pragma define(OwnerTable >,String,Hash,HashTableKeyFunction > >) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTable >,String,Hash,HashTableKeyFunction > >; #else typedef OwnerTable >,String,Hash,HashTableKeyFunction > > Dummy_20; #endif #endif #endif #ifdef __DECCXX #pragma define_template CopyOwnerTable >,String,Hash,HashTableKeyFunction > > #else #ifdef __xlC__ #pragma define(CopyOwnerTable >,String,Hash,HashTableKeyFunction > >) #else #ifdef SP_ANSI_CLASS_INST template class CopyOwnerTable >,String,Hash,HashTableKeyFunction > >; #else typedef CopyOwnerTable >,String,Hash,HashTableKeyFunction > > Dummy_21; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTableIter >, String, Hash, HashTableKeyFunction > > #else #ifdef __xlC__ #pragma define(OwnerTableIter >, String, Hash, HashTableKeyFunction > >) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTableIter >, String, Hash, HashTableKeyFunction > >; #else typedef OwnerTableIter >, String, Hash, HashTableKeyFunction > > Dummy_22; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTable >*,String,Hash,HashTableKeyFunction > > #else #ifdef __xlC__ #pragma define(PointerTable >*,String,Hash,HashTableKeyFunction > >) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable >*,String,Hash,HashTableKeyFunction > >; #else typedef PointerTable >*,String,Hash,HashTableKeyFunction > > Dummy_23; #endif #endif #endif #ifdef __DECCXX #pragma define_template PointerTableIter > *, String, Hash, HashTableKeyFunction > > #else #ifdef __xlC__ #pragma define(PointerTableIter > *, String, Hash, HashTableKeyFunction > >) #else #ifdef SP_ANSI_CLASS_INST template class PointerTableIter > *, String, Hash, HashTableKeyFunction > >; #else typedef PointerTableIter > *, String, Hash, HashTableKeyFunction > > Dummy_24; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector >*> #else #ifdef __xlC__ #pragma define(Vector >*>) #else #ifdef SP_ANSI_CLASS_INST template class Vector >*>; #else typedef Vector >*> Dummy_25; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_26; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_27; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_28; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_29; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_30; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr #else #ifdef __xlC__ #pragma define(ConstPtr) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr; #else typedef ConstPtr Dummy_31; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr #else #ifdef __xlC__ #pragma define(Ptr) #else #ifdef SP_ANSI_CLASS_INST template class Ptr; #else typedef Ptr Dummy_32; #endif #endif #endif #ifdef __DECCXX #pragma define_template CharMap #else #ifdef __xlC__ #pragma define(CharMap) #else #ifdef SP_ANSI_CLASS_INST template class CharMap; #else typedef CharMap Dummy_33; #endif #endif #endif #ifdef SP_MULTI_BYTE #ifdef __DECCXX #pragma define_template CharMapPage #else #ifdef __xlC__ #pragma define(CharMapPage) #else #ifdef SP_ANSI_CLASS_INST template class CharMapPage; #else typedef CharMapPage Dummy_34; #endif #endif #endif #ifdef __DECCXX #pragma define_template CharMapColumn #else #ifdef __xlC__ #pragma define(CharMapColumn) #else #ifdef SP_ANSI_CLASS_INST template class CharMapColumn; #else typedef CharMapColumn Dummy_35; #endif #endif #endif #endif #ifdef __DECCXX #pragma define_template CharMapResource #else #ifdef __xlC__ #pragma define(CharMapResource) #else #ifdef SP_ANSI_CLASS_INST template class CharMapResource; #else typedef CharMapResource Dummy_36; #endif #endif #endif #ifdef __DECCXX #pragma define_template Ptr > #else #ifdef __xlC__ #pragma define(Ptr >) #else #ifdef SP_ANSI_CLASS_INST template class Ptr >; #else typedef Ptr > Dummy_37; #endif #endif #endif #ifdef __DECCXX #pragma define_template ConstPtr > #else #ifdef __xlC__ #pragma define(ConstPtr >) #else #ifdef SP_ANSI_CLASS_INST template class ConstPtr >; #else typedef ConstPtr > Dummy_38; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_39; #endif #endif #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/lib/xentmgr_inst.m4100444 764 764 6051 6604711356 13746 0ustar jjcjjc// Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. #include "splib.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "StringOf.h" #include "Vector.h" #include "NCVector.h" #include "ListIter.h" #include "IList.h" #include "List.h" #include "Owner.h" #include "OwnerTable.h" #include "PointerTable.h" #include "HashTableItemBase.h" #include "HashTable.h" #include "Ptr.h" #include "CharMap.h" #undef SP_DEFINE_TEMPLATES #include "StorageManager.h" #include "ExtendEntityManager.h" #include "OffsetOrderedList.h" #include "CodingSystem.h" #include "CodingSystemKit.h" #include "types.h" #include "StringOf.h" #include "DescriptorManager.h" #include "StorageManager.h" #include "Boolean.h" #include "StorageObjectPosition.h" #include "CatalogEntry.h" #include "CharsetRegistry.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif __instantiate(String) __instantiate(NCVector >) __instantiate(Vector) __instantiate(NCVector >) __instantiate(NCVector) __instantiate(IList >) __instantiate(List) __instantiate(ListIter) __instantiate(ListItem) __instantiate(IListIter >) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(Owner) __instantiate(NCVector >) __instantiate(`HashTable,CatalogEntry>') __instantiate(`HashTableIter,CatalogEntry>') __instantiate(`HashTableItem,CatalogEntry>') __instantiate(HashTableItemBase >) __instantiate(`OwnerTable >,String,Hash,HashTableKeyFunction > >') __instantiate(`CopyOwnerTable >,String,Hash,HashTableKeyFunction > >') __instantiate(`OwnerTableIter >, String, Hash, HashTableKeyFunction > >') __instantiate(`PointerTable >*,String,Hash,HashTableKeyFunction > >') __instantiate(`PointerTableIter > *, String, Hash, HashTableKeyFunction > >') __instantiate(Vector >*>) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Vector) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(ConstPtr) __instantiate(Ptr) __instantiate(CharMap) #ifdef SP_MULTI_BYTE __instantiate(CharMapPage) __instantiate(CharMapColumn) #endif __instantiate(CharMapResource) __instantiate(Ptr >) __instantiate(ConstPtr >) __instantiate(Owner) #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/msggen.pl100444 764 764 11320 6604607546 12052 0ustar jjcjjc#! /usr/bin/perl # Copyright (c) 1994 James Clark # See the file COPYING for copying permission. $prog = $0; $prog =~ s@.*/@@; $gen_c = 0; do 'getopts.pl'; &Getopts('l'); die "Usage: $prog file\n" unless $#ARGV == 0; $def_file = $ARGV[0]; $file_base = $def_file; $file_base =~ s/\.[^.]*$//; $config_h = $opt_l ? "splib.h" : "config.h"; $class = $file_base; $class =~ s|.*[\\/]||; open(DEF, $def_file) || die "can't open \`$def_file': $!\n"; $num = 0; while () { chop; if (/^!cxx$/) { $gen_c = 1; next; } if (/^=/) { $n = substr($_, 1); &error("= directive must increase message num") if ($n < $num); $num = $n; next; } if (/^-/) { # a deleted message $num++; next; } next if /^[ ]*#/; next if /^[ ]*$/; @field = split('\+', $_, 5); &error("too few fields") if $#field < 3; if ($#field == 4 && $field[4] =~ /^%J/) { $field[3] .= '+'; $field[3] .= substr($field[4], 2); $#field = 3; } if ($field[0] eq "") { $type[$num] = ""; $argc = 0; } else { $field[0] =~ /^[IWQXE][0-9]$/ || &error("invalid first field");; $type[$num] = substr($field[0], 0, 1); $argc = int(substr($field[0], 1, 1)); } $nargs[$num] = $argc; $field[1] =~ /^[a-zA-Z_][a-zA-Z0-9_]+$/ || &error("invalid tag"); $tag[$num] = $field[1]; &error("duplicate tag $field[1]") if defined($tag_used{$field[1]}); $tag_used{$field[1]} = 1; $field[2] =~ /^([0-9]+(\.[0-9]+)*(p[0-9]+)?( [0-9]+(\.[0-9]+)*(p[0-9]+)?)*)?$/ || &error("invalid clauses field"); # push @clauses, $field[2]; if ($argc == 0) { if ($field[0] ne "") { $field[3] =~ /^([^%]|%%)*$/ || &error("invalid character after %"); } } else { $field[3] =~ /^([^%]|%[%1-$argc])*$/ || &error("invalid character after %"); } $auxloc[$num] = ($#field == 4 ? "L" : ""); $message[$num] = $field[3]; $num++; if ($#field == 4) { $message2[$num] = $field[4]; $num++; } } close(DEF); # this is needed on Windows NT chmod 0666, "$file_base.h"; unlink("$file_base.h"); open(OUT, ">$file_base.h"); chmod 0444, "$file_base.h"; select(OUT); print <$file_base.cxx"); chmod 0444, "$file_base.cxx"; select(OUT); print <$file_base.rc"); chmod 0444, "$file_base.rc"; select(OUT); print "STRINGTABLE\nBEGIN\n"; foreach $i (0 .. $#message) { if (defined($message[$i])) { $str = $message[$i]; $str =~ s/"/""/g; printf " %d, \"%s\"\n", $i, $str; } elsif (defined($message2[$i])) { $str = $message2[$i]; $str =~ s/"/""/g; printf " %d, \"%s\"\n", $i, $str; } } print "END\n"; close(OUT); sub error { die "$def_file:$.: $_[0]\n"; } jade-1.2.1/nsgmls/ 40775 764 764 0 6610553420 11416 5ustar jjcjjcjade-1.2.1/nsgmls/Makefile.sub100444 764 764 275 6606574412 13734 0ustar jjcjjcPROG=nsgmls OBJS=nsgmls.o SgmlsEventHandler.o RastEventHandler.o StringSet.o nsgmls_inst.o INCLUDE= XLIBS=../lib/libsp.a GENSRCS=nsgmls_inst.cxx NsgmlsMessages.h RastEventHandlerMessages.h jade-1.2.1/nsgmls/NsgmlsMessages.h100444 764 764 766 6606636512 14615 0ustar jjcjjc// This file was automatically generated from .\NsgmlsMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct NsgmlsMessages { // 0 static const MessageType1 unknownOutputOption; }; const MessageType1 NsgmlsMessages::unknownOutputOption( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 0 #ifndef SP_NO_MESSAGE_TEXT ,"unknown output option %1" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/nsgmls/NsgmlsMessages.msg100444 764 764 246 6606574412 15145 0ustar jjcjjc# Copyright (c) 1994, 1995 James Clark # See the file COPYING for copying permission. # nsgmls message definitions E1+unknownOutputOption++unknown output option %1 jade-1.2.1/nsgmls/NsgmlsMessages.rc100444 764 764 66 6606636512 14743 0ustar jjcjjcSTRINGTABLE BEGIN 0, "unknown output option %1" END jade-1.2.1/nsgmls/RastEventHandler.cxx100444 764 764 54546 6604607574 15517 0ustar jjcjjc// Copyright (c) 1994,1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "config.h" #include "RastEventHandler.h" #include "SgmlParser.h" #include "ParserOptions.h" #include "Entity.h" #include "Notation.h" #include "Attribute.h" #include "Vector.h" #include "Vector.h" #include "MessageArg.h" #include "RastEventHandlerMessages.h" #include #include // This is based on ISO/IEC 13673, Intermediate Editor's Draft, 1994/8/29, // together with editing instructions in ISO/IEC JTC1/SC18/WG8 N1777. #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const OutputCharStream::Newline nl = OutputCharStream::newline; class EventHandlerMessenger : public Messenger { public: EventHandlerMessenger(EventHandler *eh) : eh_(eh) { } void dispatchMessage(const Message &message) { eh_->message(new MessageEvent(message)); } void dispatchMessage(Message &message) { eh_->message(new MessageEvent(message)); } private: EventHandler *eh_; }; #if 0 const #endif RastPrintable RastEventHandler::printable; RastPrintable::RastPrintable() { static const char s[] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; size_t i; for (i = 0; i < sizeof(v_); i++) v_[i] = 0; for (i = 0; s[i] != '\0'; i++) v_[(unsigned char)s[i]] = 32 + i; } // inline void RastEventHandler::flushLine(LineType type) { if (lineLength_ > 0) { os() << char(type) << nl; lineLength_ = 0; } } RastSubdocState::RastSubdocState() { init(0, 0); } RastSubdocState::RastSubdocState(SgmlParser *parser, RastEventHandler *rast) { init(parser, rast); } void RastSubdocState::init(SgmlParser *parser, RastEventHandler *rast) { parser_ = parser; hadActiveLpdOrDtd_ = 0; activeLinkTypes_.clear(); hadDocumentElement_ = 0; linkProcess_.clear(); linkProcess_.setHandler(rast); haveLinkProcess_ = 0; endPrologEvent_.clear(); parseSubdocQueue_.clear(); linkRuleQueue_.clear(); for (int i = 0; i < nAttributeType; i++) attributeSortOrder_[i].clear(); } void RastSubdocState::swap(RastSubdocState &to) { { SgmlParser *tem = to.parser_; to.parser_ = parser_; parser_ = tem; } { Boolean tem = to.hadActiveLpdOrDtd_; to.hadActiveLpdOrDtd_ = hadActiveLpdOrDtd_; hadActiveLpdOrDtd_ = tem; } { Boolean tem = to.hadDocumentElement_; to.hadDocumentElement_ = hadDocumentElement_; hadDocumentElement_ = tem; } activeLpdOrDtdLocation_.swap(to.activeLpdOrDtdLocation_); activeLinkTypes_.swap(to.activeLinkTypes_); linkProcess_.swap(to.linkProcess_); endPrologEvent_.swap(to.endPrologEvent_); parseSubdocQueue_.swap(to.parseSubdocQueue_); linkRuleQueue_.swap(to.linkRuleQueue_); for (int i = 0; i < nAttributeType; i++) attributeSortOrder_[i].swap(to.attributeSortOrder_[i]); } RastEventHandler::RastEventHandler(SgmlParser *parser, Messenger *mgr) : lineLength_(0), os_(0), piErrorCount_(0), RastSubdocState(parser, this), mgr_(mgr) { RastSubdocState::init(parser, this); } void RastEventHandler::end() { if (errorCount() != 0) { truncateOutput(); os() << (piErrorCount_ != 0 ? "#RAST-PI-ERROR" : "#ERROR") << nl; } } void RastEventHandler::truncateOutput() { // This must be handled by derived classes to get conforming output. } void RastEventHandler::sgmlDecl(SgmlDeclEvent *event) { rastParseSubdocYesString_ = event->sd().execToInternal("rast-parse-subdoc:yes"); rastParseSubdocNoString_ = event->sd().execToInternal("rast-parse-subdoc:no"); rastActiveLpdString_ = event->sd().execToInternal("rast-active-lpd:"); rastLinkRuleString_ = event->sd().execToInternal("rast-link-rule:"); delete event; } void RastEventHandler::startElement(StartElementEvent *event) { flushLine(dataLine); if (!hadDocumentElement_) { if (activeLinkTypes_.size() > 0) { activeLinks(); simpleLinkInfo(); } hadDocumentElement_ = 1; } os() << '[' << event->name(); Boolean hadNewline; if (event->attributes().size() > 0) { hadNewline = 1; os() << nl; attributeInfo(event->attributes(), dtdAttribute); } else hadNewline = 0; if (haveLinkProcess_) { const AttributeList *linkAttributes; const ResultElementSpec *resultElementSpec; EventHandlerMessenger messenger(this); linkProcess_.startElement(event->elementType(), event->attributes(), event->location(), messenger, linkAttributes, resultElementSpec); if (linkProcess_.nImpliedLinkRules() > 0) { if (!hadNewline) { os() << nl; hadNewline = 1; } os() << "#LINK-SET-INFO" << nl; impliedSourceLinkRules(); } if (linkAttributes) { if (!hadNewline) { os() << nl; hadNewline = 1; } os() << "#LINK-RULE" << nl; attributeInfo(*linkAttributes, linkAttribute); if (linkProcess_.isExplicit()) { os() << "#RESULT="; if (resultElementSpec && resultElementSpec->elementType) { os() << resultElementSpec->elementType->name() << nl; attributeInfo(resultElementSpec->attributeList, resultAttribute); } else os() << "#IMPLIED" << nl; } } else hadNewline = 0; } os() << ']' << nl; delete event; } void RastEventHandler::activeLinks() { for (size_t i = 0; i < activeLinkTypes_.size(); i++) { os() << "#ACTIVE-LINK=" << activeLinkTypes_[i] << nl; Boolean found = 0; if (haveLinkProcess_ && linkProcess_.name() == activeLinkTypes_[i]) { found = 1; if (linkProcess_.nImpliedLinkRules() > 0) { os() << "#INITIAL" << nl; impliedSourceLinkRules(); } } if (!found) { if (endPrologEvent_) { for (size_t j = 0; j < endPrologEvent_->simpleLinkNames().size(); j++) if (endPrologEvent_->simpleLinkNames()[j] == activeLinkTypes_[i]) { found = 1; break; } } if (!found) { setNextLocation(activeLpdOrDtdLocation_); Messenger::message(RastEventHandlerMessages::invalidActiveLinkType, StringMessageArg(activeLinkTypes_[i])); } } os() << "#END-ACTIVE-LINK" << nl; } } void RastEventHandler::simpleLinkInfo() { if (!endPrologEvent_) return; for (size_t i = 0; i < activeLinkTypes_.size(); i++) { for (size_t j = 0; j < endPrologEvent_->simpleLinkNames().size(); j++) { const StringC &name = endPrologEvent_->simpleLinkNames()[j]; if (name == activeLinkTypes_[i]) { os() << "#SIMPLE-LINK=" << name << nl; if (endPrologEvent_->simpleLinkAttributes()[j].size() > 0) attributeInfo(endPrologEvent_->simpleLinkAttributes()[j], simpleAttribute); os() << "#END-SIMPLE-LINK" << nl; break; } } } } void RastEventHandler::impliedSourceLinkRules() { size_t n = linkProcess_.nImpliedLinkRules(); Vector sortOrder(n); size_t i; for (i = 0; i < n; i++) sortOrder[i] = i; for (i = 1; i < n; i++) { size_t tem = sortOrder[i]; const StringC &name = linkProcess_.impliedLinkRule(tem).elementType->name(); size_t j; for (j = i; j > 0; j--) { if (lexCmp(linkProcess_.impliedLinkRule(j - 1).elementType->name(), name) <= 0) break; sortOrder[j] = sortOrder[j - 1]; } sortOrder[j] = tem; } for (i = 0; i < n; i++) { const ResultElementSpec &result = linkProcess_.impliedLinkRule(sortOrder[i]); os() << '[' << result.elementType->name(); if (result.attributeList.size() > 0) { os() << nl; attributeInfo(result.attributeList, resultAttribute); } os() << ']' << nl; } } void RastEventHandler::endElement(EndElementEvent *event) { if (haveLinkProcess_) linkProcess_.endElement(); flushLine(dataLine); os() << "[/" << event->name() << ']' << nl; if (haveLinkProcess_ && linkProcess_.nImpliedLinkRules() > 0) { os() << "#LINK-SET-INFO" << nl; impliedSourceLinkRules(); os() << "#END-LINK-SET-INFO" << nl; } delete event; } void RastEventHandler::data(DataEvent *event) { lines(dataLine, event->data(), event->dataLength()); delete event; } void RastEventHandler::pi(PiEvent *event) { flushLine(dataLine); os() << "[?"; size_t dataLength = event->dataLength(); if (dataLength > 0) { const Char *data = event->data(); if (dataLength >= 4 && memcmp(data, rastParseSubdocYesString_.data(), 4*sizeof(Char)) == 0 && !interpretRastPi(data, dataLength, event->location())) { setNextLocation(event->location()); Messenger::message(RastEventHandlerMessages::invalidRastPiError); } os() << nl; lines(dataLine, event->data(), dataLength); flushLine(dataLine); } os() << ']' << nl; delete event; } inline Boolean equal(const Char *s1, size_t n1, const StringC &s2) { return (n1 == s2.size() && (n1 == 0 || memcmp(s1, s2.data(), n1*sizeof(Char)) == 0)); } // Is s2 a prefix of s1 of length n1? inline Boolean prefix(const Char *s1, size_t n1, const StringC &s2) { return (n1 >= s2.size() && (n1 == 0 || memcmp(s1, s2.data(), s2.size()*sizeof(Char)) == 0)); } Boolean RastEventHandler::interpretRastPi(const Char *data, size_t dataLength, const Location &loc) { if (equal(data, dataLength, rastParseSubdocNoString_)) { queueParseSubdoc(0); return 1; } if (equal(data, dataLength, rastParseSubdocYesString_)) { queueParseSubdoc(1); return 1; } if (prefix(data, dataLength, rastActiveLpdString_)) { if (hadActiveLpdOrDtd_) return 1; hadActiveLpdOrDtd_ = 1; activeLpdOrDtdLocation_ = loc; const Char *p = data + rastActiveLpdString_.size(); size_t n = dataLength - rastActiveLpdString_.size(); StringC name; for (;;) { if (n == 0 || *p == ',') { if (name.size() == 0) return 0; for (size_t i = 0; i < activeLinkTypes_.size(); i++) if (name == activeLinkTypes_[i]) { setNextLocation(activeLpdOrDtdLocation_); Messenger::message(RastEventHandlerMessages::duplicateActiveLinkType, StringMessageArg(name)); } activeLinkTypes_.resize(activeLinkTypes_.size() + 1); name.swap(activeLinkTypes_.back()); if (n == 0) break; } else name += *p; p++; n--; } for (size_t i = 0; i < activeLinkTypes_.size(); i++) parser_->activateLinkType(activeLinkTypes_[i]); return 1; } if (prefix(data, dataLength, rastLinkRuleString_)) { LinkRulePi *p = new LinkRulePi; p->pi.assign(data + rastLinkRuleString_.size(), dataLength - rastLinkRuleString_.size()); p->loc = loc; linkRuleQueue_.append(p); return 1; } return 0; } void RastEventHandler::sdataEntity(SdataEntityEvent *event) { flushLine(dataLine); os() << "#SDATA-TEXT" << nl; lines(markupLine, event->data(), event->dataLength()); flushLine(markupLine); os() << "#END-SDATA" << nl; delete event; } void RastEventHandler::externalDataEntity(ExternalDataEntityEvent *event) { const ExternalDataEntity *entity = event->entity(); if (!entity) return; flushLine(dataLine); os() << "[&" << entity->name() << nl; externalEntityInfo(entity, dtdAttribute); os() << ']' << nl; delete event; } void RastEventHandler::externalEntityInfo(const ExternalDataEntity *entity, AttributeType attributeType) { char c; switch (entity->dataType()) { case Entity::cdata: c = 'C'; break; case Entity::sdata: c = 'S'; break; case Entity::ndata: c = 'N'; break; default: return; } os() << '#' << c << "DATA-EXTERNAL" << nl; externalIdInfo(entity->externalId()); os() << "#NOTATION=" << entity->notation()->name() << nl; externalIdInfo(entity->notation()->externalId()); attributeInfo(entity->attributes(), (attributeType == resultAttribute ? resultAttribute : dtdAttribute)); } void RastEventHandler::subdocEntity(SubdocEntityEvent *event) { const SubdocEntity *entity = event->entity(); if (!entity) return; flushLine(dataLine); os() << "[&" << entity->name() << nl; Ptr origin(event->entityOrigin()->copy()); subdocEntityInfo(entity, origin, 1); os() << ']' << nl; delete event; } void RastEventHandler::subdocEntityInfo(const SubdocEntity *entity, const Ptr &entityOrigin, Boolean referenced) { os() << "#SUBDOC" << nl; externalIdInfo(entity->externalId()); if (parseNextSubdoc()) { // FIXME subdocuments in entity attributes shouldn't count against // SUBDOC quantity limit. os() << "#PARSED-SUBDOCUMENT" << nl; SgmlParser::Params params; params.entityType = SgmlParser::Params::subdoc; params.subdocInheritActiveLinkTypes = 0; params.subdocReferenced = referenced; params.parent = parser_; params.sysid = entity->externalId().effectiveSystemId(); params.origin = entityOrigin; SgmlParser parser(params); RastSubdocState oldSubdocState; RastSubdocState::swap(oldSubdocState); RastSubdocState::init(&parser, this); parser.parseAll(*this); oldSubdocState.swap(*this); } } void RastEventHandler::queueParseSubdoc(Boolean parseSubdoc) { parseSubdocQueue_.push_back(PackedBoolean(parseSubdoc)); } Boolean RastEventHandler::parseNextSubdoc() { if (parseSubdocQueue_.size() == 0) return 0; Boolean result = parseSubdocQueue_[0]; if (parseSubdocQueue_.size() > 1) { for (size_t i = 1; i < parseSubdocQueue_.size(); i++) parseSubdocQueue_[i - 1] = parseSubdocQueue_[i]; } parseSubdocQueue_.resize(parseSubdocQueue_.size() - 1); return result; } void RastEventHandler::externalIdInfo(const ExternalId &id) { const StringC *systemId = id.systemIdString(); const StringC *publicId = id.publicIdString(); if (publicId) { os() << "#PUBLIC" << nl; if (publicId->size() == 0) os() << "#EMPTY" << nl; else { lines(markupLine, publicId->data(), publicId->size()); flushLine(markupLine); } } if (systemId || !publicId) { os() << "#SYSTEM" << nl; if (!systemId) os() << "#NONE" << nl; else if (systemId->size() == 0) os() << "#EMPTY" << nl; else { lines(markupLine, systemId->data(), systemId->size()); flushLine(markupLine); } } } void RastEventHandler::nonSgmlChar(NonSgmlCharEvent *event) { flushLine(dataLine); os() <<'#' << (unsigned long)event->character() << nl; delete event; } void RastEventHandler::lines(LineType type, const Char *p, size_t length) { // This needs to be fast. while (length != 0) { if (printable(*p)) { size_t lim; switch (lineLength_) { case maxLineLength: os() << char(type) << nl; lineLength_ = 0; // fall through case 0: os() << char(type); lim = maxLineLength; break; default: lim = maxLineLength - lineLength_; break; } if (lim > length) lim = length; size_t n = lim; for (;;) { os().put(*p); p++; if (--n == 0) break; if (!printable(*p)) { lim -= n; break; } } length -= lim; lineLength_ += lim; } else { // *p is an unprintable character print it flushLine(type); switch (*p) { case RS: os() << "#RS" << nl; break; case RE: os() << "#RE" << nl; break; case TAB: os() << "#TAB" << nl; break; default: os() << '#' << (unsigned long)*p << nl; break; } p++; length--; } } } int RastEventHandler::lexCmp(const StringC &s1, const StringC &s2) { const Char *p1 = s1.data(); size_t n1 = s1.size(); const Char *p2 = s2.data(); size_t n2 = s2.size(); for (;;) { if (n1 == 0) return n2 == 0 ? 0 : -1; if (n2 == 0) return 1; if (*p1 != *p2) { // printable characters precede non-printable characters; // printable characters are in ASCII order // non-printable characters are in document character set order int a1 = printable(*p1); int a2 = printable(*p2); if (a1 == 0) { if (a2 == 0) return *p1 < *p2 ? -1 : 1; else return 1; } else if (a2 == 0) return -1; else return a1 - a2; } p1++; p2++; n1--; n2--; } } void RastEventHandler::attributeInfo(const AttributeList &attributes, AttributeType attributeType) { size_t length = attributes.size(); if (length == 0) return; size_t defIndex = attributes.defIndex(); if (defIndex >= attributeSortOrder_[attributeType].size()) attributeSortOrder_[attributeType].resize(defIndex + 1); Vector &sortOrder = attributeSortOrder_[attributeType][defIndex]; if (sortOrder.size() != length || attributeType == simpleAttribute) { sortOrder.resize(length); size_t i; for (i = 0; i < length; i++) sortOrder[i] = i; // insertion sort for (i = 1; i < length; i++) { size_t tem = sortOrder[i]; size_t j; for (j = i; j > 0; j--) { if (lexCmp(attributes.name(sortOrder[j - 1]), attributes.name(tem)) <= 0) break; sortOrder[j] = sortOrder[j - 1]; } sortOrder[j] = tem; } } for (size_t j = 0; j < length; j++) { // Don't use sortOrder because attributeSortOrder_ may be grown // because of data attributes. size_t i = attributeSortOrder_[attributeType][defIndex][j]; os() << attributes.name(i) << '=' << nl; const Text *text; const StringC *string; const AttributeValue *value = attributes.value(i); if (value) { switch (value->info(text, string)) { case AttributeValue::implied: os() << "#IMPLIED" << nl; break; case AttributeValue::tokenized: lines(markupLine, string->data(), string->size()); flushLine(markupLine); break; case AttributeValue::cdata: { TextIter iter(*text); TextItem::Type type; const Char *p; size_t length; const Location *loc; while (iter.next(type, p, length, loc)) switch (type) { case TextItem::data: case TextItem::cdata: lines(markupLine, p, length); break; case TextItem::sdata: flushLine(markupLine); os() << "#SDATA-TEXT" << nl; lines(markupLine, p, length); flushLine(markupLine); os() << "#END-SDATA" << nl; break; case TextItem::nonSgml: flushLine(markupLine); os() << '#' << (unsigned long)*p << nl; break; default: break; } flushLine(markupLine); } break; } } const AttributeSemantics *semantics = attributes.semantics(i); if (semantics) { ConstPtr notation = semantics->notation(); if (!notation.isNull()) externalIdInfo(notation->externalId()); size_t nEntities = semantics->nEntities(); for (size_t i = 0; i < nEntities; i++) { ConstPtr entity = semantics->entity(i); if (!entity.isNull()) { const ExternalDataEntity *externalDataEntity = entity->asExternalDataEntity(); if (externalDataEntity) externalEntityInfo(externalDataEntity, (attributeType == resultAttribute ? resultAttribute : dtdAttribute)); else { const SubdocEntity *subdocEntity = entity->asSubdocEntity(); if (subdocEntity) { Ptr entityOrigin = EntityOrigin::make(entity, ((TokenizedAttributeValue *)value) ->tokenLocation(i)); subdocEntityInfo(subdocEntity, entityOrigin, 0); } else { const InternalEntity *internalEntity = entity->asInternalEntity(); if (internalEntity) internalEntityInfo(internalEntity); } } } os() << "#END-ENTITY" << nl; } } } } void RastEventHandler::internalEntityInfo(const InternalEntity *entity) { if (!entity) return; os() << '#' << char(entity->dataType() == Entity::cdata ? 'C' : 'S') << "DATA-INTERNAL" << nl; const StringC &str = entity->string(); lines(markupLine, str.data(), str.size()); flushLine(markupLine); } void RastEventHandler::endProlog(EndPrologEvent *event) { if (!event->lpdPointer().isNull()) { linkProcess_.init(event->lpdPointer()); haveLinkProcess_ = 1; } if (event->simpleLinkNames().size() > 0) endPrologEvent_ = event; else delete event; } void RastEventHandler::uselink(UselinkEvent *event) { linkProcess_.uselink(event->linkSet(), event->restore(), event->lpd().pointer()); if (haveLinkProcess_ && linkProcess_.nImpliedLinkRules() > 0) { flushLine(dataLine); os() << "#LINK-SET-INFO" << nl; impliedSourceLinkRules(); os() << "#END-LINK-SET-INFO" << nl; } delete event; } void RastEventHandler::initMessage(Message &msg) { mgr_->initMessage(msg); } void RastEventHandler::dispatchMessage(const Message &msg) { if (msg.isError()) piErrorCount_++; if (!cancelled()) { noteMessage(msg); mgr_->dispatchMessage(msg); } } RastLinkProcess::RastLinkProcess() : rast_(0) { } void RastLinkProcess::setHandler(RastEventHandler *rast) { rast_ = rast; } // Always return 1. 0 means not ready. Boolean RastLinkProcess::selectLinkRule(const Vector &linkAttributes, const Location &location, size_t &selected) { if (!rast_->linkRuleQueue_.empty()) { LinkRulePi *p = rast_->linkRuleQueue_.get(); if (!selectLinkRulePi(p->pi, p->loc, linkAttributes, selected)) selected = 0; } else { if (linkAttributes.size() > 0) { rast_->setNextLocation(location); rast_->Messenger::message(RastEventHandlerMessages::multipleLinkRules); } selected = 0; } return 1; } // Return zero for failure (RAST-PI-ERROR). Boolean RastLinkProcess::selectLinkRulePi(const StringC &value, const Location &loc, const Vector &linkAttributes, size_t &selected) { Boolean haveSelection = 0; size_t i; for (i = 0; i < linkAttributes.size(); i++) { const AttributeList &a = *linkAttributes[i]; Boolean matchValue = 0; for (size_t j = 0; j < a.size(); j++) { const Text *textp; const StringC *strp; switch (a.value(j)->info(textp, strp)) { case AttributeValue::cdata: // What if it contains SDATA entities? if (textp->string() == value) matchValue = 1; break; case AttributeValue::tokenized: if (*strp == value) matchValue = 1; break; default: break; } if (matchValue) break; } if (matchValue) { if (haveSelection) { rast_->setNextLocation(loc); rast_->Messenger::message(RastEventHandlerMessages::multipleLinkRuleMatch); return 0; } haveSelection = 1; selected = i; } } if (!haveSelection) { rast_->setNextLocation(loc); rast_->Messenger::message(RastEventHandlerMessages::noLinkRuleMatch); return 0; } return 1; } void RastLinkProcess::swap(RastLinkProcess &to) { LinkProcess::swap(to); RastEventHandler *tem = to.rast_; to.rast_ = rast_; rast_ = tem; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/nsgmls/RastEventHandler.h100444 764 764 11523 6604607574 15130 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef RastEventHandler_INCLUDED #define RastEventHandler_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Event.h" #include "Vector.h" #include "Vector.h" #include "Boolean.h" #include "Vector.h" #include "StringC.h" #include "types.h" #include "OutputCharStream.h" #include "LinkProcess.h" #include "Message.h" #include "Link.h" #include "IQueue.h" #include "ErrorCountEventHandler.h" #include #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class AttributeList; class ExternalDataEntity; class SubdocEntity; class ExternalId; class InternalEntity; class SgmlParser; class RastPrintable { public: RastPrintable(); int operator()(Char c) const; private: char v_[UCHAR_MAX + 1]; }; class RastEventHandler; class RastLinkProcess : public LinkProcess { public: RastLinkProcess(); void setHandler(RastEventHandler *); Boolean selectLinkRule(const Vector &linkAttributes, const Location &location, size_t &selected); void swap(RastLinkProcess &); private: Boolean selectLinkRulePi(const StringC &str, const Location &loc, const Vector &linkAttributes, size_t &selected); RastLinkProcess(const RastLinkProcess &); // undefined void operator=(RastLinkProcess &); // undefined RastEventHandler *rast_; }; struct LinkRulePi : public Link { StringC pi; Location loc; }; class RastSubdocState { public: RastSubdocState(); RastSubdocState(SgmlParser *, RastEventHandler *); void init(SgmlParser *, RastEventHandler *); void swap(RastSubdocState &); protected: SgmlParser *parser_; Boolean hadActiveLpdOrDtd_; Location activeLpdOrDtdLocation_; Vector activeLinkTypes_; Boolean hadDocumentElement_; RastLinkProcess linkProcess_; Boolean haveLinkProcess_; Owner endPrologEvent_; Vector parseSubdocQueue_; IQueue linkRuleQueue_; enum AttributeType { dtdAttribute, linkAttribute, resultAttribute, simpleAttribute }; enum { nAttributeType = simpleAttribute + 1 }; Vector > attributeSortOrder_[nAttributeType]; private: RastSubdocState(const RastSubdocState &); // undefined void operator=(const RastSubdocState &); // undefined friend class RastLinkProcess; }; class RastEventHandler : public ErrorCountEventHandler, private RastSubdocState, private Messenger { public: RastEventHandler(SgmlParser *, Messenger *); void data(DataEvent *); void startElement(StartElementEvent *); void endElement(EndElementEvent *); void pi(PiEvent *); void sdataEntity(SdataEntityEvent *); void externalDataEntity(ExternalDataEntityEvent *); void subdocEntity(SubdocEntityEvent *); void nonSgmlChar(NonSgmlCharEvent *); void sgmlDecl(SgmlDeclEvent *); void endProlog(EndPrologEvent *); void uselink(UselinkEvent *); virtual void truncateOutput(); void end(); void setOutputStream(OutputCharStream *os); static const char *messageText(int); static const char messageSource[]; protected: void initMessage(Message &); void dispatchMessage(const Message &); private: RastEventHandler(const RastEventHandler &); // undefined void operator=(const RastEventHandler &); // undefined enum LineType { dataLine = '|', markupLine = '!' }; void lines(LineType, const Char *p, size_t length); enum { maxLineLength = 60 }; enum { RS = '\n', RE = '\r', TAB = '\t' }; #if 0 static const RastPrintable printable; #else static RastPrintable printable; #endif int lineLength_; OutputCharStream *os_; StringC rastParseSubdocYesString_; StringC rastParseSubdocNoString_; StringC rastActiveLpdString_; StringC rastLinkRuleString_; unsigned piErrorCount_; Messenger *mgr_; int lexCmp(const StringC &s1, const StringC &s2); void flushLine(LineType); void attributeInfo(const AttributeList &, AttributeType); void externalEntityInfo(const ExternalDataEntity *, AttributeType); void subdocEntityInfo(const SubdocEntity *, const Ptr &entityOrigin, Boolean referenced); void externalIdInfo(const ExternalId &); void internalEntityInfo(const InternalEntity *); void queueParseSubdoc(Boolean); Boolean parseNextSubdoc(); Boolean interpretRastPi(const Char *data, size_t dataLength, const Location &); void activeLinks(); void simpleLinkInfo(); void impliedSourceLinkRules(); OutputCharStream &os(); friend class RastLinkProcess; }; inline int RastPrintable::operator()(Char c) const { return c <= UCHAR_MAX ? v_[c] : 0; } inline void RastEventHandler::setOutputStream(OutputCharStream *os) { os_ = os; } inline OutputCharStream &RastEventHandler::os() { return *os_; } #ifdef SP_NAMESPACE } #endif #endif /* not RastEventHandler_INCLUDED */ jade-1.2.1/nsgmls/RastEventHandlerMessages.h100444 764 764 4374 6604610614 16573 0ustar jjcjjc// This file was automatically generated from nsgmls\RastEventHandlerMessages.msg by msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct RastEventHandlerMessages { // 100 static const MessageType0 invalidRastPiError; // 101 static const MessageType1 invalidActiveLinkType; // 102 static const MessageType1 duplicateActiveLinkType; // 103 static const MessageType0 multipleLinkRuleMatch; // 104 static const MessageType0 noLinkRuleMatch; // 105 static const MessageType0 multipleLinkRules; }; const MessageType0 RastEventHandlerMessages::invalidRastPiError( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 100 #ifndef SP_NO_MESSAGE_TEXT ,"invalid RAST processing instruction" #endif ); const MessageType1 RastEventHandlerMessages::invalidActiveLinkType( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 101 #ifndef SP_NO_MESSAGE_TEXT ,"invalid link type %1 in rast-active-lpd processing instruction" #endif ); const MessageType1 RastEventHandlerMessages::duplicateActiveLinkType( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 102 #ifndef SP_NO_MESSAGE_TEXT ,"duplicate link type %1 in rast-active-lpd processing instruction" #endif ); const MessageType0 RastEventHandlerMessages::multipleLinkRuleMatch( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 103 #ifndef SP_NO_MESSAGE_TEXT ,"rast-link-rule: processing instruction matches more than one link rule" #endif ); const MessageType0 RastEventHandlerMessages::noLinkRuleMatch( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 104 #ifndef SP_NO_MESSAGE_TEXT ,"rast-link-rule: processing instruction matches does not match any link rules" #endif ); const MessageType0 RastEventHandlerMessages::multipleLinkRules( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 105 #ifndef SP_NO_MESSAGE_TEXT ,"multiple applicable link rules without disambiguating rast-link-rule: processing instruction" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/nsgmls/RastEventHandlerMessages.msg100444 764 764 1251 6604607574 17134 0ustar jjcjjc# Copyright (c) 1994,1995 James Clark # See the file COPYING for copying permission. # RastEventHandler message definitions =100 E0+invalidRastPiError++invalid RAST processing instruction E1+invalidActiveLinkType++invalid link type %1 in rast-active-lpd processing instruction E1+duplicateActiveLinkType++duplicate link type %1 in rast-active-lpd processing instruction E0+multipleLinkRuleMatch++rast-link-rule: processing instruction matches more than one link rule E0+noLinkRuleMatch++rast-link-rule: processing instruction matches does not match any link rules E0+multipleLinkRules++multiple applicable link rules without disambiguating rast-link-rule: processing instruction jade-1.2.1/nsgmls/RastEventHandlerMessages.rc100444 764 764 741 6604610614 16722 0ustar jjcjjcSTRINGTABLE BEGIN 100, "invalid RAST processing instruction" 101, "invalid link type %1 in rast-active-lpd processing instruction" 102, "duplicate link type %1 in rast-active-lpd processing instruction" 103, "rast-link-rule: processing instruction matches more than one link rule" 104, "rast-link-rule: processing instruction matches does not match any link rules" 105, "multiple applicable link rules without disambiguating rast-link-rule: processing instruction" END jade-1.2.1/nsgmls/SgmlsEventHandler.cxx100444 764 764 36175 6604607574 15671 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "config.h" #include "SgmlsEventHandler.h" #include "SgmlParser.h" #include "ParserOptions.h" #include "Entity.h" #include "Notation.h" #include "Attribute.h" #include "ExtendEntityManager.h" #include "StorageManager.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif const char dataCode = '-'; const char piCode = '?'; const char conformingCode = 'C'; const char appinfoCode = '#'; const char startElementCode = '('; const char endElementCode = ')'; const char referenceEntityCode = '&'; const char attributeCode = 'A'; const char dataAttributeCode = 'D'; const char linkAttributeCode = 'a'; const char defineNotationCode = 'N'; const char defineExternalEntityCode = 'E'; const char defineInternalEntityCode = 'I'; const char defineSubdocEntityCode = 'S'; const char defineExternalTextEntityCode = 'T'; const char pubidCode = 'p'; const char sysidCode = 's'; const char startSubdocCode = '{'; const char endSubdocCode = '}'; const char fileCode = 'f'; const char locationCode = 'L'; const char includedElementCode = 'i'; const char emptyElementCode = 'e'; const OutputCharStream::Newline nl = OutputCharStream::newline; const char space = ' '; const Char re = '\r'; inline void SgmlsEventHandler::startData() { if (!haveData_) { os() << dataCode; haveData_ = 1; } } inline void SgmlsEventHandler::flushData() { if (haveData_) { os() << nl; haveData_ = 0; } } inline void SgmlsEventHandler::outputLocation(const Location &loc) { if (outputLine_) outputLocation1(loc); } SgmlsEventHandler::SgmlsEventHandler(const SgmlParser *parser, OutputCharStream *os, Messenger *messenger, unsigned outputFlags) : SgmlsSubdocState(parser), os_(os), messenger_(messenger), outputLine_((outputFlags & outputLine) != 0), outputEntity_((outputFlags & outputEntity) != 0), outputId_((outputFlags & outputId) != 0), outputNotationSysid_((outputFlags & outputNotationSysid) != 0), outputIncluded_((outputFlags & outputIncluded) != 0), outputNonSgml_((outputFlags & outputNonSgml) != 0), outputEmpty_((outputFlags & outputEmpty) != 0), haveData_(0), lastSos_(0) { os_->setEscaper(escape); } SgmlsEventHandler::~SgmlsEventHandler() { flushData(); if (errorCount() == 0) os() << conformingCode << nl; delete os_; } void SgmlsEventHandler::message(MessageEvent *event) { messenger_->dispatchMessage(event->message()); ErrorCountEventHandler::message(event); } void SgmlsEventHandler::appinfo(AppinfoEvent *event) { const StringC *str; if (event->literal(str)) { outputLocation(event->location()); flushData(); os() << appinfoCode; outputString(*str); os() << nl; } delete event; } void SgmlsEventHandler::endProlog(EndPrologEvent *event) { if (outputEntity_) { flushData(); const Dtd &dtd = event->dtd(); Dtd::ConstEntityIter iter(dtd.generalEntityIter()); for (;;) { const Entity *entity = iter.next().pointer(); if (!entity) break; defineEntity(entity); } } if (!event->lpdPointer().isNull()) { linkProcess_.init(event->lpdPointer()); haveLinkProcess_ = 1; flushData(); } for (size_t i = 0; i < event->simpleLinkNames().size(); i++) { flushData(); attributes(event->simpleLinkAttributes()[i], linkAttributeCode, &event->simpleLinkNames()[i]); } delete event; } void SgmlsEventHandler::entityDefaulted(EntityDefaultedEvent *event) { if (outputEntity_) { flushData(); defineEntity(event->entityPointer().pointer()); } delete event; } void SgmlsEventHandler::uselink(UselinkEvent *event) { linkProcess_.uselink(event->linkSet(), event->restore(), event->lpd().pointer()); delete event; } void SgmlsEventHandler::sgmlDecl(SgmlDeclEvent *event) { sd_ = event->sdPointer(); syntax_ = event->instanceSyntaxPointer(); // FIXME which syntax? delete event; } void SgmlsEventHandler::data(DataEvent *event) { outputLocation(event->location()); startData(); outputString(event->data(), event->dataLength()); delete event; } void SgmlsEventHandler::sdataEntity(SdataEntityEvent *event) { outputLocation(event->location()); startData(); os() << "\\|"; outputString(event->data(), event->dataLength()); os() << "\\|"; delete event; } void SgmlsEventHandler::pi(PiEvent *event) { outputLocation(event->location()); flushData(); os() << piCode; outputString(event->data(), event->dataLength()); os() << nl; delete event; } void SgmlsEventHandler::nonSgmlChar(NonSgmlCharEvent *event) { if (outputNonSgml_) { outputLocation(event->location()); startData(); os() << "\\%" << (unsigned long)event->character() << ';'; } delete event; } void SgmlsEventHandler::startElement(StartElementEvent *event) { flushData(); currentLocation_ = event->location(); if (haveLinkProcess_) { const AttributeList *linkAttributes; const ResultElementSpec *resultElementSpec; linkProcess_.startElement(event->elementType(), event->attributes(), event->location(), *this, // Messenger & linkAttributes, resultElementSpec); if (linkAttributes) attributes(*linkAttributes, linkAttributeCode, &linkProcess_.name()); } attributes(event->attributes(), attributeCode, 0); currentLocation_.clear(); if (outputIncluded_ && event->included()) os() << includedElementCode << nl; if (outputEmpty_ && event->mustOmitEnd()) os() << emptyElementCode << nl; outputLocation(event->location()); os() << startElementCode << event->name() << nl; delete event; } void SgmlsEventHandler::attributes(const AttributeList &attributes, char code, const StringC *ownerName) { size_t nAttributes = attributes.size(); for (size_t i = 0; i < nAttributes; i++) { const Text *text; const StringC *string; const AttributeValue *value = attributes.value(i); if (value) { switch (value->info(text, string)) { case AttributeValue::implied: startAttribute(attributes.name(i), code, ownerName); os() << "IMPLIED" << nl; break; case AttributeValue::tokenized: { const char *typeString = "TOKEN"; const AttributeSemantics *semantics = attributes.semantics(i); if (semantics) { ConstPtr notation = semantics->notation(); if (!notation.isNull()) { defineNotation(notation.pointer()); typeString = "NOTATION"; } else { size_t nEntities = semantics->nEntities(); if (nEntities) { typeString = "ENTITY"; if (!outputEntity_) for (size_t i = 0; i < nEntities; i++) { const Entity *entity = semantics->entity(i).pointer(); if (!markEntity(entity)) defineEntity(entity); } } } } if (outputId_ && attributes.id(i)) typeString = "ID"; startAttribute(attributes.name(i), code, ownerName); os() << typeString << space << *string << nl; } break; case AttributeValue::cdata: { startAttribute(attributes.name(i), code, ownerName); os() << "CDATA "; TextIter iter(*text); TextItem::Type type; const Char *p; size_t length; const Location *loc; while (iter.next(type, p, length, loc)) switch (type) { case TextItem::data: case TextItem::cdata: outputString(p, length); break; case TextItem::sdata: os() << "\\|"; outputString(p, length); os() << "\\|"; break; case TextItem::nonSgml: if (outputNonSgml_) os() << "\\%" << (unsigned long)*p << ';'; break; default: break; } os() << nl; } break; } } } } void SgmlsEventHandler::startAttribute(const StringC &name, char code, const StringC *ownerName) { os() << code; if (ownerName) os() << *ownerName << space; os() << name << space; } void SgmlsEventHandler::endElement(EndElementEvent *event) { flushData(); if (haveLinkProcess_) linkProcess_.endElement(); outputLocation(event->location()); os() << endElementCode << event->name() << nl; delete event; } void SgmlsEventHandler::externalDataEntity(ExternalDataEntityEvent *event) { currentLocation_ = event->location(); outputLocation(event->location()); flushData(); if (!outputEntity_ && !markEntity(event->entity())) defineExternalDataEntity(event->entity()); currentLocation_.clear(); os() << referenceEntityCode << event->entity()->name() << nl; delete event; } void SgmlsEventHandler::subdocEntity(SubdocEntityEvent *event) { currentLocation_ = event->location(); outputLocation(event->location()); flushData(); const SubdocEntity *entity = event->entity(); if (!outputEntity_ && !markEntity(entity)) defineSubdocEntity(entity); currentLocation_.clear(); os() << startSubdocCode << entity->name() << nl; SgmlParser::Params params; params.subdocInheritActiveLinkTypes = 1; params.subdocReferenced = 1; params.origin = event->entityOrigin()->copy(); params.parent = parser_; params.sysid = entity->externalId().effectiveSystemId(); params.entityType = SgmlParser::Params::subdoc; SgmlParser parser(params); SgmlsSubdocState oldState; SgmlsSubdocState::swap(oldState); SgmlsSubdocState::init(&parser); parser.parseAll(*this); oldState.swap(*this); os() << endSubdocCode << entity->name() << nl; delete event; } void SgmlsEventHandler::defineEntity(const Entity *entity) { const InternalEntity *internalEntity = entity->asInternalEntity(); if (internalEntity) defineInternalEntity(internalEntity); else { switch (entity->dataType()) { case Entity::cdata: case Entity::sdata: case Entity::ndata: defineExternalDataEntity(entity->asExternalDataEntity()); break; case Entity::subdoc: defineSubdocEntity(entity->asSubdocEntity()); break; case Entity::sgmlText: defineExternalTextEntity(entity->asExternalEntity()); break; default: CANNOT_HAPPEN(); } } } void SgmlsEventHandler::defineExternalDataEntity(const ExternalDataEntity *entity) { const Notation *notation = entity->notation(); defineNotation(notation); externalId(entity->externalId()); const char *typeString; switch (entity->dataType()) { case Entity::cdata: typeString = "CDATA"; break; case Entity::sdata: typeString = "SDATA"; break; case Entity::ndata: typeString = "NDATA"; break; default: CANNOT_HAPPEN(); } os() << defineExternalEntityCode << entity->name() << space << typeString << space << notation->name() << nl; attributes(entity->attributes(), dataAttributeCode, &entity->name()); } void SgmlsEventHandler::defineSubdocEntity(const SubdocEntity *entity) { externalId(entity->externalId()); os() << defineSubdocEntityCode << entity->name() << nl; } void SgmlsEventHandler::defineExternalTextEntity(const ExternalEntity *entity) { externalId(entity->externalId()); os() << defineExternalTextEntityCode << entity->name() << nl; } void SgmlsEventHandler::defineInternalEntity(const InternalEntity *entity) { os() << defineInternalEntityCode << entity->name() << space; const char *s; switch (entity->dataType()) { case Entity::sdata: s = "SDATA"; break; case Entity::cdata: s = "CDATA"; break; case Entity::sgmlText: s = "TEXT"; break; case Entity::pi: s = "PI"; break; default: CANNOT_HAPPEN(); } os() << s << space; outputString(entity->string()); os() << nl; } void SgmlsEventHandler::defineNotation(const Notation *notation) { if (markNotation(notation)) return; externalId(notation->externalId(), outputNotationSysid_); os() << defineNotationCode << notation->name() << nl; } void SgmlsEventHandler::externalId(const ExternalId &id, Boolean outputFile) { const StringC *str = id.publicIdString(); if (str) { os() << pubidCode; outputString(*str); os() << nl; } str = id.systemIdString(); if (str) { os() << sysidCode; outputString(*str); os() << nl; } if (outputFile && id.effectiveSystemId().size()) { os() << fileCode; outputString(id.effectiveSystemId()); os() << nl; } } Boolean SgmlsEventHandler::markEntity(const Entity *entity) { return definedEntities_.add(entity->name()); } Boolean SgmlsEventHandler::markNotation(const Notation *notation) { return definedNotations_.add(notation->name()); } void SgmlsEventHandler::outputString(const Char *p, size_t n) { for (; n > 0; p++, n--) { switch (*p) { case '\\': // FIXME we're punning Chars and chars os() << "\\\\"; break; case re: os() << "\\n"; if (outputLine_ && haveData_) lastLineno_++; break; default: // FIXME not clear what to do here given possibility of wide characters if (*p < 040) { static const char digits[] = "0123456789"; os() << "\\0" << digits[*p / 8] << digits[*p % 8]; } else os().put(*p); break; } } } void SgmlsEventHandler::escape(OutputCharStream &s, Char c) { s << "\\#" << (unsigned long)c << ";"; } void SgmlsEventHandler::outputLocation1(const Location &loc) { const Origin *origin = loc.origin().pointer(); const InputSourceOrigin *inputSourceOrigin; const ExternalInfo *info; Index index = loc.index(); for (;;) { if (!origin) return; inputSourceOrigin = origin->asInputSourceOrigin(); if (inputSourceOrigin) { info = inputSourceOrigin->externalInfo(); if (info) break; } const Location &loc = origin->parent(); index = loc.index(); origin = loc.origin().pointer(); } Offset off = inputSourceOrigin->startOffset(index); StorageObjectLocation soLoc; if (!ExtendEntityManager::externalize(info, off, soLoc)) return; if (soLoc.lineNumber == (unsigned long)-1) return; if (soLoc.storageObjectSpec == lastSos_) { if (soLoc.lineNumber == lastLineno_) return; flushData(); os() << locationCode << soLoc.lineNumber << nl; lastLineno_ = soLoc.lineNumber; } else { flushData(); os() << locationCode << soLoc.lineNumber << space; outputString(soLoc.actualStorageId); os() << nl; lastLineno_ = soLoc.lineNumber; lastSos_ = soLoc.storageObjectSpec; lastLoc_ = loc; // make sure lastSos_ doesn't get freed } } void SgmlsEventHandler::dispatchMessage(const Message &msg) { if (!cancelled()) { noteMessage(msg); messenger_->dispatchMessage(msg); } } void SgmlsEventHandler::initMessage(Message &msg) { msg.loc = currentLocation_; } SgmlsSubdocState::SgmlsSubdocState() : haveLinkProcess_(0), parser_(0) { } SgmlsSubdocState::SgmlsSubdocState(const SgmlParser *parser) : haveLinkProcess_(0), parser_(parser) { } void SgmlsSubdocState::init(const SgmlParser *parser) { parser_ = parser; definedNotations_.clear(); definedEntities_.clear(); haveLinkProcess_ = 0; linkProcess_.clear(); } void SgmlsSubdocState::swap(SgmlsSubdocState &to) { { const SgmlParser *tem = to.parser_; to.parser_ = parser_; parser_ = tem; } { Boolean tem = to.haveLinkProcess_; to.haveLinkProcess_ = haveLinkProcess_; haveLinkProcess_ = tem; } linkProcess_.swap(to.linkProcess_); definedNotations_.swap(to.definedNotations_); definedEntities_.swap(to.definedEntities_); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/nsgmls/SgmlsEventHandler.h100444 764 764 7374 6604607574 15275 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef SgmlsEventHandler_INCLUDED #define SgmlsEventHandler_INCLUDED 1 #include #include "Event.h" #include "Boolean.h" #include "StringC.h" #include "OutputCharStream.h" #include "StringSet.h" #include "Location.h" #include "Syntax.h" #include "Sd.h" #include "Ptr.h" #include "LinkProcess.h" #include "Message.h" #include "ErrorCountEventHandler.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class SgmlParser; struct StorageObjectSpec; class SgmlsSubdocState { public: SgmlsSubdocState(); SgmlsSubdocState(const SgmlParser *); void init(const SgmlParser *); void swap(SgmlsSubdocState &); protected: const SgmlParser *parser_; StringSet definedEntities_; StringSet definedNotations_; Boolean haveLinkProcess_; LinkProcess linkProcess_; private: SgmlsSubdocState(const SgmlsSubdocState &); // undefined void operator=(const SgmlsSubdocState &); // undefined }; class SgmlsEventHandler : public ErrorCountEventHandler, private SgmlsSubdocState, private Messenger { public: enum { outputLine = 01, outputEntity = 02, outputId = 04, outputIncluded = 010, outputNotationSysid = 020, outputNonSgml = 040, outputEmpty = 0100 }; SgmlsEventHandler(const SgmlParser *, OutputCharStream *, Messenger *, unsigned outputFlags); ~SgmlsEventHandler(); void data(DataEvent *); void startElement(StartElementEvent *); void endElement(EndElementEvent *); void pi(PiEvent *); void sdataEntity(SdataEntityEvent *); void externalDataEntity(ExternalDataEntityEvent *); void subdocEntity(SubdocEntityEvent *); void nonSgmlChar(NonSgmlCharEvent *); void appinfo(AppinfoEvent *); void uselink(UselinkEvent *); void sgmlDecl(SgmlDeclEvent *); void endProlog(EndPrologEvent *); void message(MessageEvent *); void entityDefaulted(EntityDefaultedEvent *event); protected: void dispatchMessage(const Message &); void initMessage(Message &); private: SgmlsEventHandler(const SgmlsEventHandler &); // undefined void operator=(const SgmlsEventHandler &); // undefined void attributes(const AttributeList &attributes, char code, const StringC *ownerName); void startAttribute(const StringC &name, char code, const StringC *ownerName); void defineEntity(const Entity *entity); void defineExternalDataEntity(const ExternalDataEntity *entity); void defineSubdocEntity(const SubdocEntity *entity); void defineExternalTextEntity(const ExternalEntity *entity); void defineInternalEntity(const InternalEntity *entity); void defineNotation(const Notation *notation); void externalId(const ExternalId &id, Boolean outputFile = 1); Boolean markEntity(const Entity *); Boolean markNotation(const Notation *); void startData(); void flushData(); void outputLocation(const Location &loc); void outputLocation1(const Location &loc); void outputString(const StringC &str); void outputString(const Char *, size_t); static void escape(OutputCharStream &, Char); OutputCharStream &os(); Messenger *messenger_; Location currentLocation_; OutputCharStream *os_; Boolean haveData_; ConstPtr sd_; ConstPtr syntax_; const StorageObjectSpec *lastSos_; unsigned long lastLineno_; Location lastLoc_; PackedBoolean outputLine_; PackedBoolean outputIncluded_; PackedBoolean outputEntity_; PackedBoolean outputId_; PackedBoolean outputNotationSysid_; PackedBoolean outputNonSgml_; PackedBoolean outputEmpty_; }; inline void SgmlsEventHandler::outputString(const StringC &str) { outputString(str.data(), str.size()); } inline OutputCharStream &SgmlsEventHandler::os() { return *os_; } #ifdef SP_NAMESPACE } #endif #endif /* not SgmlsEventHandler_INCLUDED */ jade-1.2.1/nsgmls/StringSet.cxx100444 764 764 723 6604607574 14154 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "config.h" #include "StringSet.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif StringSet::StringSet() { } Boolean StringSet::add(const StringC &str) { StringC *p = table_.lookup(str); if (p) return 1; p = new StringC(str); table_.insert(p); return 0; } void StringSet::swap(StringSet &to) { table_.swap(to.table_); } #ifdef SP_NAMESPACE } #endif jade-1.2.1/nsgmls/StringSet.h100444 764 764 1455 6604607574 13624 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #ifndef StringSet_INCLUDED #define StringSet_INCLUDED 1 #include "StringC.h" #include "Hash.h" #include "Boolean.h" #include "OwnerTable.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class StringSetKey { public: static inline const StringC &key(const StringC &str) { return str; } }; class StringSet { public: StringSet(); Boolean add(const StringC &); // return 1 if already there void swap(StringSet &); void clear(); private: StringSet(const StringSet &); // undefined void operator=(const StringSet &); // undefined OwnerTable table_; }; inline void StringSet::clear() { table_.clear(); } #ifdef SP_NAMESPACE } #endif #endif /* not StringSet_INCLUDED */ jade-1.2.1/nsgmls/nsgmls.cxx100444 764 764 14375 6606574412 13601 0ustar jjcjjc// Copyright (c) 1994, 1995 James Clark // See the file COPYING for copying permission. #include "config.h" #include "Event.h" #include "MessageEventHandler.h" #include "SgmlsEventHandler.h" #include "RastEventHandler.h" #include "OutputCharStream.h" #include "Boolean.h" #include "NsgmlsMessages.h" #include "MessageArg.h" #include "ErrnoMessageArg.h" #include "ParserApp.h" #include "sptchar.h" #include "macros.h" #include #include #include #include #ifdef SP_NAMESPACE using namespace SP_NAMESPACE; #endif class NsgmlsApp : public ParserApp { public: NsgmlsApp(); int processArguments(int argc, AppChar **argv); ErrorCountEventHandler *makeEventHandler(); void processOption(AppChar opt, const AppChar *arg); void allLinkTypesActivated(); private: Boolean suppressOutput_; Boolean prologOnly_; unsigned outputFlags_; String rastFile_; const AppChar *rastOption_; Boolean batchMode_; }; SP_DEFINE_APP(NsgmlsApp) class PrologMessageEventHandler : public MessageEventHandler { public: PrologMessageEventHandler(Messenger *messenger); void endProlog(EndPrologEvent *); }; class XRastEventHandler : public RastEventHandler { public: XRastEventHandler(SgmlParser *, const NsgmlsApp::AppChar *filename, const StringC &filenameStr, const OutputCodingSystem *, CmdLineApp *, Messenger *messenger); ~XRastEventHandler(); void message(MessageEvent *); void truncateOutput(); void allLinkTypesActivated(); private: Messenger *messenger_; // file_ must come before os_ so it gets inited first FileOutputByteStream file_; EncodeOutputCharStream os_; const NsgmlsApp::AppChar *filename_; const StringC filenameStr_; CmdLineApp *app_; }; NsgmlsApp::NsgmlsApp() : suppressOutput_(0), batchMode_(0), prologOnly_(0), outputFlags_(0), rastOption_(0) { registerOption('B'); registerOption('d'); registerOption('l'); registerOption('m', SP_T("catalog_sysid")); registerOption('o', SP_T("output_option")); registerOption('p'); registerOption('r'); registerOption('s'); registerOption('t', SP_T("rast_file")); registerOption('u'); } void NsgmlsApp::processOption(AppChar opt, const AppChar *arg) { switch (opt) { case 'B': batchMode_ = 1; break; case 'd': // warn about duplicate entity declarations options_.warnDuplicateEntity = 1; break; case 'l': // output L commands outputFlags_ |= SgmlsEventHandler::outputLine; break; case 'm': processOption(SP_T('c'), arg); break; case 'o': { static struct { // Qualifier works around CodeWarrior bug const CmdLineApp::AppChar *name; unsigned flag; } outputOptions[] = { { SP_T("line"), SgmlsEventHandler::outputLine }, { SP_T("entity"), SgmlsEventHandler::outputEntity }, { SP_T("id"), SgmlsEventHandler::outputId }, { SP_T("included"), SgmlsEventHandler::outputIncluded }, { SP_T("notation-sysid"), SgmlsEventHandler::outputNotationSysid }, { SP_T("nonsgml"), SgmlsEventHandler::outputNonSgml }, { SP_T("empty"), SgmlsEventHandler::outputEmpty }, }; Boolean found = 0; for (size_t i = 0; i < SIZEOF(outputOptions); i++) if (tcscmp(arg, outputOptions[i].name) == 0) { outputFlags_ |= outputOptions[i].flag; found = 1; break; } if (!found) message(NsgmlsMessages::unknownOutputOption, StringMessageArg(convertInput(arg))); } break; case 'p': prologOnly_ = 1; break; case 'r': // warn about defaulted entity reference options_.warnDefaultEntityReference = 1; break; case 's': suppressOutput_ = 1; break; case 't': rastOption_ = arg; break; case 'u': // warn about undefined elements options_.warnUndefinedElement = 1; break; default: ParserApp::processOption(opt, arg); break; } } int NsgmlsApp::processArguments(int argc, AppChar **argv) { if (batchMode_) { int ret = 0; for (int i = 0; i < argc; i++) { if (rastOption_) { rastFile_.assign(rastOption_, tcslen(rastOption_)); rastFile_.append(argv[i], tcslen(argv[i])); rastFile_ += SP_T('\0'); } int tem = ParserApp::processArguments(1, argv + i); if (tem > ret) ret = tem; } return ret; } else return ParserApp::processArguments(argc, argv); } void NsgmlsApp::allLinkTypesActivated() { if (!rastOption_) ParserApp::allLinkTypesActivated(); } ErrorCountEventHandler *NsgmlsApp::makeEventHandler() { if (prologOnly_) return new PrologMessageEventHandler(this); else if (rastOption_) { const AppChar *s = batchMode_ ? rastFile_.data() : rastOption_; return new XRastEventHandler(&parser_, s, convertInput(s), outputCodingSystem_, this, this); } else if (suppressOutput_) return new MessageEventHandler(this, &parser_); else return new SgmlsEventHandler(&parser_, makeStdOut(), this, outputFlags_); } PrologMessageEventHandler::PrologMessageEventHandler(Messenger *messenger) : MessageEventHandler(messenger) { } void PrologMessageEventHandler::endProlog(EndPrologEvent *event) { cancel(); delete event; } XRastEventHandler::XRastEventHandler(SgmlParser *parser, const NsgmlsApp::AppChar *filename, const StringC &filenameStr, const OutputCodingSystem *codingSystem, CmdLineApp *app, Messenger *messenger) : RastEventHandler(parser, messenger), messenger_(messenger), filename_(filename), filenameStr_(filenameStr), app_(app) { errno = 0; if (!file_.open(filename)) { messenger->message(CmdLineApp::openFileErrorMessage(), StringMessageArg(filenameStr), ErrnoMessageArg(errno)); exit(1); } os_.open(&file_, codingSystem); setOutputStream(&os_); } XRastEventHandler::~XRastEventHandler() { end(); } void XRastEventHandler::truncateOutput() { os_.flush(); errno = 0; if (!file_.close()) messenger_->message(CmdLineApp::closeFileErrorMessage(), StringMessageArg(filenameStr_), ErrnoMessageArg(errno)); errno = 0; if (!file_.open(filename_)) { messenger_->message(CmdLineApp::openFileErrorMessage(), StringMessageArg(filenameStr_), ErrnoMessageArg(errno)); exit(1); } } void XRastEventHandler::message(MessageEvent *event) { messenger_->dispatchMessage(event->message()); ErrorCountEventHandler::message(event); } jade-1.2.1/nsgmls/nsgmls.dsp100444 764 764 15662 6606574412 13565 0ustar jjcjjc# Microsoft Developer Studio Project File - Name="nsgmls" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=nsgmls - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "nsgmls.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "nsgmls.mak" CFG="nsgmls - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "nsgmls - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "nsgmls - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "nsgmls - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\include" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 /out:"..\bin\nsgmls.exe" # SUBTRACT LINK32 /profile !ELSEIF "$(CFG)" == "nsgmls - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\Debug" # PROP BASE Intermediate_Dir ".\Debug" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir ".\Debug" # PROP Intermediate_Dir ".\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\include" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\dbgbin\nsgmls.exe" !ENDIF # Begin Target # Name "nsgmls - Win32 Release" # Name "nsgmls - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # Begin Source File SOURCE=.\nsgmls.cxx # End Source File # Begin Source File SOURCE=.\nsgmls_inst.cxx # End Source File # Begin Source File SOURCE=.\nsgmls_inst.m4 !IF "$(CFG)" == "nsgmls - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\nsgmls_inst.m4 InputName=nsgmls_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "nsgmls - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\nsgmls_inst.m4 InputName=nsgmls_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\NsgmlsMessages.msg !IF "$(CFG)" == "nsgmls - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\NsgmlsMessages.msg InputName=NsgmlsMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "nsgmls - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\NsgmlsMessages.msg InputName=NsgmlsMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\RastEventHandler.cxx # End Source File # Begin Source File SOURCE=.\RastEventHandlerMessages.msg !IF "$(CFG)" == "nsgmls - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\RastEventHandlerMessages.msg InputName=RastEventHandlerMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "nsgmls - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\RastEventHandlerMessages.msg InputName=RastEventHandlerMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\SgmlsEventHandler.cxx # End Source File # Begin Source File SOURCE=.\StringSet.cxx # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # Begin Source File SOURCE=.\NsgmlsMessages.h # End Source File # Begin Source File SOURCE=.\RastEventHandler.h # End Source File # Begin Source File SOURCE=.\RastEventHandlerMessages.h # End Source File # Begin Source File SOURCE=.\SgmlsEventHandler.h # End Source File # Begin Source File SOURCE=.\StringSet.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # Begin Source File SOURCE=.\nsgmls.rc # End Source File # Begin Source File SOURCE=.\NsgmlsMessages.rc # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\RastEventHandlerMessages.rc # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # End Group # End Target # End Project jade-1.2.1/nsgmls/nsgmls.rc100444 764 764 227 6606574412 13332 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #include "NsgmlsMessages.rc" #include "RastEventHandlerMessages.rc" jade-1.2.1/nsgmls/nsgmls_inst.cxx100444 764 764 4413 6604610612 14575 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Vector.h" #include "PointerTable.h" #include "OwnerTable.h" #include "Vector.h" #include "IQueue.h" #include "Owner.h" #undef SP_DEFINE_TEMPLATES #include "StringSet.h" #include "RastEventHandler.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template PointerTable #else #ifdef __xlC__ #pragma define(PointerTable) #else #ifdef SP_ANSI_CLASS_INST template class PointerTable; #else typedef PointerTable Dummy_0; #endif #endif #endif #ifdef __DECCXX #pragma define_template OwnerTable #else #ifdef __xlC__ #pragma define(OwnerTable) #else #ifdef SP_ANSI_CLASS_INST template class OwnerTable; #else typedef OwnerTable Dummy_1; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector #else #ifdef __xlC__ #pragma define(Vector) #else #ifdef SP_ANSI_CLASS_INST template class Vector; #else typedef Vector Dummy_2; #endif #endif #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_3; #endif #endif #endif #ifdef __DECCXX #pragma define_template IQueue #else #ifdef __xlC__ #pragma define(IQueue) #else #ifdef SP_ANSI_CLASS_INST template class IQueue; #else typedef IQueue Dummy_4; #endif #endif #endif #ifdef __DECCXX #pragma define_template Vector > #else #ifdef __xlC__ #pragma define(Vector >) #else #ifdef SP_ANSI_CLASS_INST template class Vector >; #else typedef Vector > Dummy_5; #endif #endif #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/nsgmls/nsgmls_inst.m4100444 764 764 1365 6604607574 14333 0ustar jjcjjc// Copyright (c) 1994 James Clark // See the file COPYING for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Vector.h" #include "PointerTable.h" #include "OwnerTable.h" #include "Vector.h" #include "IQueue.h" #include "Owner.h" #undef SP_DEFINE_TEMPLATES #include "StringSet.h" #include "RastEventHandler.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif __instantiate(`PointerTable') __instantiate(`OwnerTable') __instantiate(Vector) __instantiate(Owner) __instantiate(IQueue) __instantiate(Vector >) #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/sgmlnorm/ 40775 764 764 0 6610553420 11751 5ustar jjcjjcjade-1.2.1/sgmlnorm/Makefile.sub100444 764 764 153 6604607574 14266 0ustar jjcjjcPROG=sgmlnorm OBJS=sgmlnorm.o SGMLGenerator.o INCLUDE=-I$(srcdir)/../generic XLIBS=../lib/libsp.a GENSRCS= jade-1.2.1/sgmlnorm/SGMLGenerator.cxx100444 764 764 23446 6604607574 15245 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "config.h" #include "SGMLGenerator.h" const SGMLApplication::Char RE = '\r'; const SGMLApplication::Char RS = '\n'; const SGMLApplication::Char TAB = '\t'; inline SP_NAMESPACE_SCOPE OutputCharStream & operator<<(SP_NAMESPACE_SCOPE OutputCharStream &os, const SGMLApplication::CharString &str) { return os.write(str.ptr, str.len); } inline bool operator==(const SGMLApplication::CharString &str1, const SGMLApplication::CharString &str2) { return (str1.len == str2.len && (str1.len == 0 || memcmp(str1.ptr, str2.ptr, str1.len*sizeof(SGMLApplication::Char)) == 0)); } inline bool operator!=(const SGMLApplication::CharString &str1, const SGMLApplication::CharString &str2) { return !(str1 == str2); } inline SP_NAMESPACE_SCOPE OutputCharStream &SGMLGenerator::os() { return *os_; } inline void SGMLGenerator::outputRe() { os().put(RE); } inline void SGMLGenerator::flushRe() { if (outputState_ == pendingRe) { outputRe(); outputState_ = other; } } inline bool SGMLGenerator::isSgmlChar(Char c) { return c >= 256 || !nonSgml_[c]; } static void escape(SP_NAMESPACE_SCOPE OutputCharStream &s, SP_NAMESPACE_SCOPE Char c) { s << "&#" << (unsigned long)c << ";"; } SGMLGenerator::SGMLGenerator(SP_NAMESPACE_SCOPE OutputCharStream *os, unsigned flags) : os_(os), parseMode_(normalMode), outputState_(other), mustOmitEndTag_(0), inInstance_(0), flags_(flags) { os_->setEscaper(escape); for (size_t i = 0; i < 256; i++) switch (i) { case RE: case RS: case TAB: nonSgml_[i] = 0; break; case 255: nonSgml_[i] = 1; break; default: nonSgml_[i] = (i < 32 || (i >= 127 && i < 160)); break; } } SGMLGenerator::~SGMLGenerator() { outputRe(); delete os_; } void SGMLGenerator::startDtd(const StartDtdEvent &event) { if (!(flags_ & generateDtd)) return; if (event.haveExternalId) { os() << "'; os().put(RE); } } void SGMLGenerator::startElement(const StartElementEvent &event) { // This can happen with OMITTAG. if (parseMode_ != normalMode) os() << "]]> 0 && isElementContentStack_[isElementContentStack_.size() - 1]) outputRe(); isElementContentStack_ += char(event.contentType == StartElementEvent::element); if (event.included) { if (outputState_ == pendingRe) { numCharRef(RE); // would be moved otherwise outputState_ = other; } outputStateStack_ += char(outputState_); } else { outputStateStack_ += char(other); flushRe(); } switch (event.contentType) { case StartElementEvent::cdata: parseMode_ = cdataMode; break; case StartElementEvent::rcdata: parseMode_ = rcdataMode; break; default: parseMode_ = normalMode; break; } outputState_ = afterStartTag; os() << '<' << event.gi; for (size_t i = 0; i < event.nAttributes; i++) { const Attribute &a = event.attributes[i]; switch (a.type) { case Attribute::cdata: if (a.defaulted != Attribute::definition) { os() << ' ' << a.name << '=' << '"'; for (size_t j = 0; j < a.nCdataChunks; j++) if (a.cdataChunks[j].isSdata) entityRef(a.cdataChunks[j].entityName); else if (a.cdataChunks[j].isNonSgml) numCharRefNum(a.cdataChunks[j].nonSgmlChar); else attributeChars(a.cdataChunks[j].data); os() << '"'; } break; case Attribute::tokenized: if (a.defaulted != Attribute::definition) { if (a.isGroup && a.name == a.tokens) os() << ' ' << a.tokens; else os() << ' ' << a.name << '=' << '"' << a.tokens << '"'; } break; default: break; } } os() << '>'; mustOmitEndTag_ = (event.contentType == StartElementEvent::empty); } void SGMLGenerator::attributeChars(const CharString &str) { const Char *p = str.ptr; for (size_t n = str.len; n > 0; n--, p++) switch (*p) { case '"': case '&': case RS: case RE: case TAB: numCharRef(*p); break; default: if (isSgmlChar(*p)) os().put(*p); else numCharRef(*p); break; } } void SGMLGenerator::endElement(const EndElementEvent &event) { if (mustOmitEndTag_) mustOmitEndTag_ = 0; else { if (outputState_ == pendingRe) { outputRe(); outputRe(); } else if (isElementContentStack_[isElementContentStack_.size() - 1]) outputRe(); os() << "'; } outputState_ = outputStateStack_[outputStateStack_.size() - 1]; outputStateStack_.resize(outputStateStack_.size() - 1); parseMode_ = normalMode; isElementContentStack_.resize(isElementContentStack_.size() - 1); } void SGMLGenerator::data(const DataEvent &event) { const Char *p = event.data.ptr; for (size_t len = event.data.len; len > 0; len--, p++) { switch (*p) { case RE: flushRe(); if (outputState_ == afterStartTag) outputRe(); outputState_ = pendingRe; break; case '&': case '<': case '>': // prevents recognition of MSE flushRe(); outputState_ = other; if (parseMode_ == cdataMode) os().put(*p); else numCharRef(*p); break; default: flushRe(); outputState_ = other; if (isSgmlChar(*p)) os().put(*p); else if (parseMode_ == cdataMode) { // The output will not be valid, but I don't think this // situation can arise with valid SGML source. os().put(*p); } else numCharRef(*p); break; } } } void SGMLGenerator::nonSgmlChar(const NonSgmlCharEvent &event) { flushRe(); outputState_ = other; numCharRefNum(event.c); } void SGMLGenerator::sdata(const SdataEvent &event) { flushRe(); entityRef(event.entityName); } void SGMLGenerator::pi(const PiEvent &event) { if (!inInstance_) return; if (outputState_ == pendingRe) { numCharRef(RE); // would be moved otherwise outputState_ = other; } if (event.entityName.len) entityRef(event.entityName); else os() << "'; } void SGMLGenerator::externalDataEntityRef(const ExternalDataEntityRefEvent &event) { flushRe(); entityRef(event.entity.name); } void SGMLGenerator::subdocEntityRef(const SubdocEntityRefEvent &event) { flushRe(); entityRef(event.entity.name); } void SGMLGenerator::endProlog(const EndPrologEvent &) { inInstance_ = 1; } void SGMLGenerator::commentDecl(const CommentDeclEvent &event) { if (!inInstance_) return; if (outputState_ == pendingRe) { numCharRef(RE); // would be moved otherwise outputState_ = other; } os() << " } os() << '>'; } void SGMLGenerator::markedSectionStart(const MarkedSectionStartEvent &event) { if (outputState_ == pendingRe) { numCharRef(RE); // would be moved otherwise outputState_ = other; } os() << ""; parseMode_ = normalMode; } void SGMLGenerator::ignoredChars(const IgnoredCharsEvent &event) { os() << event.data; } void SGMLGenerator::entityRef(const CharString &name) { os() << '&' << name << ';'; } void SGMLGenerator::numCharRef(Char c) { const SP_NAMESPACE_SCOPE StringC *name = charEntityName(c); if (name && name->size()) os() << '&' << *name << ';'; else numCharRefNum(c); } void SGMLGenerator::numCharRefNum(unsigned long n) { os() << "&#" << n << ';'; } void SGMLGenerator::generalEntity(const GeneralEntityEvent &event) { if (event.entity.isInternal && event.entity.text.len == 1 && event.entity.dataType != Entity::sdata) { SP_NAMESPACE_SCOPE StringC *p = charEntityName(event.entity.text.ptr[0]); if (p) p->assign(event.entity.name.ptr, event.entity.name.len); } } SP_NAMESPACE_SCOPE StringC *SGMLGenerator::charEntityName(Char c) { switch (c) { case '<': return <_; case '>': return >_; case '&': return &_; case '"': return "_; default: break; } return 0; } jade-1.2.1/sgmlnorm/SGMLGenerator.h100444 764 764 4061 6604607574 14642 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifndef SGMLGenerator_INCLUDED #define SGMLGenerator_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Boolean.h" #include "OutputCharStream.h" #include "StringOf.h" #include "StringC.h" #include "SGMLApplication.h" class SGMLGenerator : public SGMLApplication { public: enum { generateDtd = 01 }; SGMLGenerator(SP_NAMESPACE_SCOPE OutputCharStream *, unsigned flags = 0); ~SGMLGenerator(); void startElement(const StartElementEvent &); void endElement(const EndElementEvent &); void data(const DataEvent &); void sdata(const SdataEvent &); void pi(const PiEvent &); void externalDataEntityRef(const ExternalDataEntityRefEvent &); void subdocEntityRef(const SubdocEntityRefEvent &); void nonSgmlChar(const NonSgmlCharEvent &); void endProlog(const EndPrologEvent &); void commentDecl(const CommentDeclEvent &); void markedSectionStart(const MarkedSectionStartEvent &); void markedSectionEnd(const MarkedSectionEndEvent &); void ignoredChars(const IgnoredCharsEvent &); void generalEntity(const GeneralEntityEvent &); void startDtd(const StartDtdEvent &); private: SP_NAMESPACE_SCOPE OutputCharStream &os(); void numCharRef(Char); void numCharRefNum(unsigned long n); void entityRef(const CharString &); void flushRe(); void outputRe(); bool isSgmlChar(Char); void attributeChars(const CharString &str); SP_NAMESPACE_SCOPE StringC *charEntityName(Char); SP_NAMESPACE_SCOPE OutputCharStream *os_; enum { other, pendingRe, afterStartTag }; char outputState_; SP_NAMESPACE_SCOPE String outputStateStack_; SP_NAMESPACE_SCOPE String isElementContentStack_; SP_NAMESPACE_SCOPE StringC lt_; SP_NAMESPACE_SCOPE StringC gt_; SP_NAMESPACE_SCOPE StringC amp_; SP_NAMESPACE_SCOPE StringC quot_; bool mustOmitEndTag_; enum { normalMode, cdataMode, rcdataMode } parseMode_; char nonSgml_[256]; // bool bool inInstance_; unsigned flags_; }; #endif /* not SGMLGenerator_INCLUDED */ jade-1.2.1/sgmlnorm/sgmlnorm.cxx100444 764 764 3356 6604607574 14450 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #include "config.h" #include "ParserApp.h" #include "GenericEventHandler.h" #include "SGMLGenerator.h" #ifdef SP_NAMESPACE using namespace SP_NAMESPACE; #endif class SGMLGeneratorEH : public SGMLGenerator, public GenericEventHandler { public: SGMLGeneratorEH(OutputCharStream *, unsigned genFlags, Messenger *); void reportMessage(const Message &msg, StringC &); private: Messenger *mgr_; }; class SgmlnormApp : public ParserApp { public: SgmlnormApp(); void processOption(AppChar opt, const AppChar *arg); ErrorCountEventHandler *makeEventHandler(); private: unsigned genFlags_; Boolean rawOutput_; }; SP_DEFINE_APP(SgmlnormApp) SgmlnormApp::SgmlnormApp() : rawOutput_(0), genFlags_(0) { registerOption('d'); registerOption('m'); registerOption('n'); registerOption('r'); } void SgmlnormApp::processOption(AppChar opt, const AppChar *arg) { switch (opt) { case 'd': genFlags_ |= SGMLGenerator::generateDtd; break; case 'm': options_.eventsWanted.addMarkedSections(); break; case 'n': options_.eventsWanted.addCommentDecls(); break; case 'r': rawOutput_ = 1; break; default: ParserApp::processOption(opt, arg); break; } } ErrorCountEventHandler *SgmlnormApp::makeEventHandler() { OutputCharStream *os = makeStdOut(); if (!rawOutput_) os = new RecordOutputCharStream(os); return new SGMLGeneratorEH(os, genFlags_, this); } SGMLGeneratorEH::SGMLGeneratorEH(OutputCharStream *os, unsigned genFlags, Messenger *mgr) : SGMLGenerator(os, genFlags), GenericEventHandler(*this, 1), mgr_(mgr) { } void SGMLGeneratorEH::reportMessage(const Message &msg, StringC &) { mgr_->dispatchMessage(msg); } jade-1.2.1/sgmlnorm/sgmlnorm.dsp100444 764 764 7720 6607562206 14426 0ustar jjcjjc# Microsoft Developer Studio Project File - Name="sgmlnorm" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=sgmlnorm - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "sgmlnorm.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "sgmlnorm.mak" CFG="sgmlnorm - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "sgmlnorm - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "sgmlnorm - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "sgmlnorm - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\include" /I "..\generic" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 /out:"..\bin\sgmlnorm.exe" # SUBTRACT LINK32 /profile !ELSEIF "$(CFG)" == "sgmlnorm - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\Debug" # PROP BASE Intermediate_Dir ".\Debug" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir ".\Debug" # PROP Intermediate_Dir ".\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\include" /I "..\generic" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\dbgbin\sgmlnorm.exe" !ENDIF # Begin Target # Name "sgmlnorm - Win32 Release" # Name "sgmlnorm - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # Begin Source File SOURCE=.\SGMLGenerator.cxx # End Source File # Begin Source File SOURCE=.\sgmlnorm.cxx # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # Begin Source File SOURCE=.\SGMLGenerator.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # End Group # End Target # End Project jade-1.2.1/spam/ 40775 764 764 0 6610553420 11053 5ustar jjcjjcjade-1.2.1/spam/CopyEventHandler.cxx100444 764 764 63551 6604607574 15151 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "config.h" #include "CopyEventHandler.h" #include "macros.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif inline OutputCharStream &operator<<(OutputCharStream &os, const MarkupIter &iter) { return os.write(iter.charsPointer(), iter.charsLength()); } #ifdef __GNUG__ inline #endif Boolean CopyEventHandler::noOutput() { if (inInstance_) { if (normalizeFlags_ & normalizeExpand) { if (entityLevel_ >= outputEntityLevel_) return 0; } else { if (entityLevel_ == outputEntityLevel_) return 0; } } else if (normalizeFlags_ & normalizeIncludeProlog) { if (normalizeFlags_ & normalizeExpandProlog) { if (entityLevel_ >= outputEntityLevel_) return 0; } else { if (entityLevel_ == outputEntityLevel_) return 0; } } return 1; } inline Boolean CopyEventHandler::doNothing(Event *event) { if (noOutput()) { delete event; return 1; } else return 0; } inline void CopyEventHandler::withNamedCharRef(const StringC &str, const Location &loc) { withNamedCharRef(str.data(), str.size(), loc); } static void escape(OutputCharStream &s, Char c) { s << "&#" << (unsigned long)c << ";"; } CopyEventHandler::CopyEventHandler(OutputCharStream *os, unsigned normalizeFlags, const StringC &outputEntity) : os_(os), topOs_(os), inInstance_(0), entityLevel_(0), normalizeFlags_(normalizeFlags), outputEntity_(outputEntity), omittagHoist_(0), inSpecialMarkedSection_(0), currentAttributes_(0), emptyElementNormal_(0) { outputEntityLevel_ = outputEntity_.size() == 0 ? 0 : unsigned(-1); os_->setEscaper(escape); } CopyEventHandler::~CopyEventHandler() { delete os_; } void CopyEventHandler::markup(const Location &loc, const Markup &markup) { if (!noOutput()) outputMarkup(loc, markup); } void CopyEventHandler::sgmlDecl(SgmlDeclEvent *event) { if (event->implySystemId().size() == 0 && !event->location().origin().isNull() && (normalizeFlags_ & normalizeIncludeProlog)) { syntax_ = event->refSyntaxPointer(); sd_ = event->refSdPointer(); outputMarkup(event->location(), event->markup()); } syntax_ = event->prologSyntaxPointer(); instanceSyntax_ = event->instanceSyntaxPointer(); if (instanceSyntax_->namecaseGeneral()) instanceSyntax_->generalSubstTable()->inverseTable(lowerSubst_); else if (instanceSyntax_->namecaseEntity()) instanceSyntax_->entitySubstTable()->inverseTable(lowerSubst_); sd_ = event->sdPointer(); emptyElementNormal_ = sd_->emptyElementNormal(); delete event; } void CopyEventHandler::endProlog(EndPrologEvent *event) { inInstance_ = 1; syntax_ = instanceSyntax_; delete event; } void CopyEventHandler::data(DataEvent *event) { omittagHoist_ = 0; if (doNothing(event)) return; if (event->entity()) entityRef(event->location().origin()->asEntityOrigin()); else { size_t n = event->dataLength(); unsigned long dummy; if (n > 1 || !event->isRe(dummy)) writeData(event->data(), n, event->location()); } delete event; } void CopyEventHandler::nonSgmlChar(NonSgmlCharEvent *event) { omittagHoist_ = 0; if (doNothing(event)) return; Char c = event->character(); writeData(&c, 1, event->location()); delete event; } void CopyEventHandler::writeData(const Char *p, size_t n, const Location &loc) { const Markup *markupPtr; if (n == 1 && loc.origin()->isNumericCharRef(markupPtr)) { if (markupPtr) outputMarkup(loc.origin()->parent(), *markupPtr); } else withNamedCharRef(p, n, loc); } void CopyEventHandler::withNamedCharRef(const Char *p, size_t n, const Location &loc) { if (n > 0) { const Origin *origin = loc.origin().pointer(); if (origin) { NamedCharRef ref; if (origin->isNamedCharRef(loc.index(), ref)) { Markup markup; markup.addDelim(Syntax::dCRO); markup.addName(ref.origName().data(), ref.origName().size()); switch (ref.refEndType()) { case NamedCharRef::endOmitted: break; case NamedCharRef::endRE: markup.addRefEndRe(); break; case NamedCharRef::endRefc: markup.addDelim(Syntax::dREFC); break; } outputMarkup(Location(loc.origin(), ref.refStartIndex()), markup); p++; n--; } } } os().write(p, n); } void CopyEventHandler::reOrigin(ReOriginEvent *event) { omittagHoist_ = 0; if (doNothing(event)) return; Char c = event->re(); withNamedCharRef(&c, 1, event->location()); delete event; } void CopyEventHandler::sSep(SSepEvent *event) { if (doNothing(event)) return; withNamedCharRef(event->data(), event->dataLength(), event->location()); delete event; } void CopyEventHandler::ignoredRs(IgnoredRsEvent *event) { if (doNothing(event)) return; Char c = event->rs(); withNamedCharRef(&c, 1, event->location()); delete event; } void CopyEventHandler::startElement(StartElementEvent *event) { mustOmitEnd_ = event->mustOmitEnd(); const Markup *markup = event->markupPtr(); if (!markup) { if (normalizeFlags_ & normalizeExpand) { if (outputEntityLevel_ > entityLevel_ - omittagHoist_) { delete event; return; } if (omittagHoist_ >= entityStack_.size()) os_ = topOs_; } else if (entityLevel_ - omittagHoist_ != outputEntityLevel_) { delete event; return; } } else { omittagHoist_ = 0; if (doNothing(event)) return; } if (normalizeFlags_ & normalizeExpandAll) handleChange(); if (markup) { Boolean hadName = 0; Boolean closed = 1; MarkupIter iter(*markup); while (iter.valid()) { switch (iter.type()) { case Markup::delimiter: switch (iter.delimGeneral()) { case Syntax::dTAGC: closed = 1; if (!hadName) { StringC nameBuf; StringC tag(elementTypeOrigName(event->elementType(), nameBuf)); if (normalizeFlags_ & normalizeEmptytag) { handleChange(); os() << tag; tag.resize(0); } unspecifiedAttributeValues(event->attributes(), tag); } os() << syntax_->delimGeneral(iter.delimGeneral()); break; case Syntax::dNESTC: closed = 1; if (normalizeFlags_ & normalizeNet) { handleChange(); os() << syntax_->delimGeneral(Syntax::dTAGC); break; } // fall through default: os() << syntax_->delimGeneral(iter.delimGeneral()); break; } iter.advance(); break; case Markup::name: { ASSERT(!hadName); const ElementType *elementType = event->elementType(); if (elementType->index() >= elementTypeOrigNames_.size()) elementTypeOrigNames_.resize(elementType->index() + 1); StringC &elementTypeOrigName = elementTypeOrigNames_[elementType->index()]; if (elementTypeOrigName.size() == 0) { elementTypeOrigName.assign(iter.charsPointer(), iter.charsLength()); // add rank if missing elementTypeOrigName.append(event->name().data() + elementTypeOrigName.size(), event->name().size() - elementTypeOrigName.size()); } os() << iter; if (normalizeFlags_ & normalizeRank) { for (size_t i = iter.charsLength(); i < event->name().size(); i++) { handleChange(); os().put(event->name()[i]); } } attributeSpecList(iter, event->attributes()); hadName = 1; } break; case Markup::s: os() << iter; iter.advance(); break; default: CANNOT_HAPPEN(); } } if (!closed && (normalizeFlags_ && normalizeUnclosed)) { handleChange(); os() << syntax_->delimGeneral(Syntax::dTAGC); } } else if (normalizeFlags_ & normalizeOmittag) { if (inSpecialMarkedSection_) { reportTagInSpecialMarkedSection(event->location()); return; } handleChange(); StringC nameBuf; os() << syntax_->delimGeneral(Syntax::dSTAGO) << elementTypeOrigName(event->elementType(), nameBuf); unspecifiedAttributeValues(event->attributes(), StringC()); os() << syntax_->delimGeneral(Syntax::dTAGC); } delete event; if (entityStack_.size() > 0 && os_ == topOs_) os_ = &entityStack_.back().str; } void CopyEventHandler::attributeSpecList(MarkupIter &iter, const AttributeList &atts) { size_t nAtt = atts.size(); unsigned i; unsigned *attIndex; if (atts.nSpec()) { attIndex = new unsigned[atts.nSpec()]; for (i = 0; i < atts.nSpec(); i++) attIndex[i] = unsigned(-1); for (i = 0; i < nAtt; i++) if (atts.specified(i)) attIndex[atts.specIndex(i)] = i; } else attIndex = 0; Boolean hadAttname = 0; i = 0; StringC nameBuf; for (iter.advance(); iter.valid(); iter.advance()) switch (iter.type()) { case Markup::name: os() << iter; hadAttname = 1; break; case Markup::s: os() << iter; break; case Markup::attributeValue: if (!hadAttname && attIndex && attIndex[i] != unsigned(-1) && (normalizeFlags_ & (normalizeAttname | normalizeAttvalue))) { handleChange(); os() << generalName(atts.name(attIndex[i]), nameBuf) << syntax_->delimGeneral(Syntax::dVI); } if (normalizeFlags_ & normalizeAttvalue) { handleChange(); os() << syntax_->delimGeneral(Syntax::dLIT) << iter << syntax_->delimGeneral(Syntax::dLIT); } else os() << iter; hadAttname = 0; i++; break; case Markup::literal: literal(iter.text()); i++; hadAttname = 0; break; case Markup::delimiter: if (iter.delimGeneral() == Syntax::dVI) os() << syntax_->delimGeneral(iter.delimGeneral()); else { unspecifiedAttributeValues(atts, StringC()); delete [] attIndex; return; } break; default: CANNOT_HAPPEN(); } } void CopyEventHandler::unspecifiedAttributeValues(const AttributeList &atts, const StringC &beforeFirst) { if (normalizeFlags_ & (normalizeCurrent|normalizeAttspec)) { Boolean first = 1; size_t nAtt = atts.size(); StringC nameBuf; for (unsigned i = 0; i < nAtt; i++) { const Text *text; if (!atts.specified(i) && ((normalizeFlags_ & normalizeAttspec) || atts.current(i)) && atts.value(i) && (text = atts.value(i)->text()) != 0) { if (first) { handleChange(); os() << beforeFirst; first = 0; } os().put(syntax_->standardFunction(Syntax::fSPACE)); os() << generalName(atts.name(i), nameBuf) << syntax_->delimGeneral(Syntax::dVI); Boolean lita; if (text->delimType(lita)) literal(*text); else { if (normalizeFlags_ & normalizeAttvalue) { os() << syntax_->delimGeneral(Syntax::dLIT) << text->string() << syntax_->delimGeneral(Syntax::dLIT); } else os() << text->string(); } } } } } void CopyEventHandler::literal(const Text &text) { TextIter iter(text); TextItem::Type type; const Char *p; size_t n; const Location *loc; StringC delim; Boolean lita; if (!text.delimType(lita)) CANNOT_HAPPEN(); delim = syntax_->delimGeneral(lita ? Syntax::dLITA : Syntax::dLIT); os() << delim; int level = 0; while (iter.next(type, p, n, loc)) { switch (type) { case TextItem::ignore: case TextItem::data: case TextItem::nonSgml: if (!level) { const Char *orig; if (loc->origin()->origChars(orig)) writeData(orig, n, loc->origin()->parent()); else writeData(p, n, *loc); } break; case TextItem::cdata: case TextItem::sdata: if (!level) entityRef(loc->origin()->asEntityOrigin()); break; case TextItem::entityStart: if (!level++) entityRef(loc->origin()->asEntityOrigin()); break; case TextItem::entityEnd: level--; break; case TextItem::startDelim: case TextItem::endDelim: case TextItem::endDelimA: break; } } Location delimLoc; if (!text.endDelimLocation(delimLoc)) CANNOT_HAPPEN(); withNamedCharRef(delim, delimLoc); } void CopyEventHandler::endElement(EndElementEvent *event) { if (!emptyElementNormal_ && mustOmitEnd_) { delete event; mustOmitEnd_ = 0; return; } const Markup *markup = event->markupPtr(); if (!markup) { if (normalizeFlags_ & normalizeExpand) { if (outputEntityLevel_ > entityLevel_ - omittagHoist_) { delete event; return; } if (omittagHoist_ >= entityStack_.size()) os_ = topOs_; } else if (entityLevel_ - omittagHoist_ != outputEntityLevel_) { delete event; return; } } else { omittagHoist_ = 0; if (doNothing(event)) return; } if (normalizeFlags_ & normalizeExpandAll) handleChange(); if (markup) { Boolean closed = 0; Boolean hadAttname = 0; for (MarkupIter iter(*markup); iter.valid(); iter.advance()) switch (iter.type()) { case Markup::s: os() << iter; break; case Markup::name: { os() << iter; for (size_t i = iter.charsLength(); i < event->name().size(); i++) { handleChange(); os().put(event->name()[i]); } hadAttname = 1; } break; case Markup::delimiter: if (iter.delimGeneral() == Syntax::dTAGC) { closed = 1; if (!hadAttname && (normalizeFlags_ & normalizeEmptytag)) { handleChange(); StringC nameBuf; os() << elementTypeOrigName(event->elementType(), nameBuf); } } else if (iter.delimGeneral() == Syntax::dNET) { closed = 1; if (normalizeFlags_ & normalizeNet) { handleChange(); StringC nameBuf; os() << syntax_->delimGeneral(Syntax::dETAGO) << elementTypeOrigName(event->elementType(), nameBuf) << syntax_->delimGeneral(Syntax::dTAGC); break; } } os() << syntax_->delimGeneral(iter.delimGeneral()); break; default: CANNOT_HAPPEN(); } if (!closed && (normalizeFlags_ & normalizeUnclosed)) { handleChange(); os() << syntax_->delimGeneral(Syntax::dTAGC); } } else if (normalizeFlags_ & normalizeOmittag) { if (inSpecialMarkedSection_) { reportTagInSpecialMarkedSection(event->location()); return; } handleChange(); StringC nameBuf; os() << syntax_->delimGeneral(Syntax::dETAGO) << elementTypeOrigName(event->elementType(), nameBuf) << syntax_->delimGeneral(Syntax::dTAGC); } delete event; if (entityStack_.size() > 0 && os_ == topOs_) os_ = &entityStack_.back().str; } void CopyEventHandler::pi(PiEvent *event) { omittagHoist_ = 0; if (doNothing(event)) return; if (event->entity()) entityRef(event->location().origin()->asEntityOrigin()); else { os() << syntax_->delimGeneral(Syntax::dPIO); os().write(event->data(), event->dataLength()); os() << syntax_->delimGeneral(Syntax::dPIC); } delete event; } void CopyEventHandler::sdataEntity(SdataEntityEvent *event) { omittagHoist_ = 0; if (doNothing(event)) return; entityRef(event->location().origin()->asEntityOrigin()); delete event; } void CopyEventHandler::externalDataEntity(ExternalDataEntityEvent *event) { omittagHoist_ = 0; if (doNothing(event)) return; entityRef(event->entityOrigin().pointer()); delete event; } void CopyEventHandler::subdocEntity(SubdocEntityEvent *event) { omittagHoist_ = 0; if (doNothing(event)) return; entityRef(event->entityOrigin().pointer()); delete event; } void CopyEventHandler::markedSectionStart(MarkedSectionStartEvent *event) { omittagHoist_ = 0; switch (event->status()) { case MarkedSectionEvent::rcdata: case MarkedSectionEvent::cdata: inSpecialMarkedSection_ = 1; break; default: break; } if (doNothing(event)) return; if (!(normalizeFlags_ & normalizeMarkedSection) || (inInstance_ && inSpecialMarkedSection_)) outputMarkup(event->location(), event->markup()); else if (inInstance_ && event->status() != MarkedSectionEvent::ignore) { // Put an empty comment so that REs aren't changed. // With an ignored marked section, sufficent to have comment at the end. handleChange(); os() << syntax_->delimGeneral(Syntax::dMDO) << syntax_->delimGeneral(Syntax::dMDC); } delete event; } void CopyEventHandler::markedSectionEnd(MarkedSectionEndEvent *event) { omittagHoist_ = 0; if (doNothing(event)) { inSpecialMarkedSection_ = 0; return; } if (!(normalizeFlags_ & normalizeMarkedSection) || (inInstance_ && inSpecialMarkedSection_)) outputMarkup(event->location(), event->markup()); else if (inInstance_) { // Put an empty comment so that REs aren't changed. handleChange(); os() << syntax_->delimGeneral(Syntax::dMDO) << syntax_->delimGeneral(Syntax::dMDC); } inSpecialMarkedSection_ = 0; delete event; } void CopyEventHandler::ignoredChars(IgnoredCharsEvent *event) { omittagHoist_ = 0; if (doNothing(event)) return; if (!(normalizeFlags_ & normalizeMarkedSection)) os().write(event->data(), event->dataLength()); delete event; } void CopyEventHandler::usemap(UsemapEvent *event) { omittagHoist_ = 0; if (doNothing(event)) return; if (!(normalizeFlags_ & normalizeShortref)) outputMarkup(event->location(), event->markup()); else if (inInstance_) { // Put an empty comment so that REs aren't changed. handleChange(); os() << syntax_->delimGeneral(Syntax::dMDO) << syntax_->delimGeneral(Syntax::dMDC); } delete event; } void CopyEventHandler::uselink(UselinkEvent *event) { omittagHoist_ = 0; markup(event->location(), event->markup()); delete event; } void CopyEventHandler::startDtd(StartDtdEvent *event) { startSubset(event); } void CopyEventHandler::startLpd(StartLpdEvent *event) { startSubset(event); } void CopyEventHandler::startSubset(StartSubsetEvent *event) { if (doNothing(event)) return; if (!event->entity().isNull() && (normalizeFlags_ & normalizeExpandProlog)) { const Markup &m = event->markup(); for (MarkupIter iter(m); iter.valid(); iter.advance()) if (iter.type() == Markup::reservedName && (iter.reservedName() == Syntax::rSYSTEM || iter.reservedName() == Syntax::rPUBLIC)) { Markup copy(m); copy.resize(iter.index()); outputMarkup(event->location(), copy); break; } } else outputMarkup(event->location(), event->markup()); if (event->hasInternalSubset() || (normalizeFlags_ & normalizeExpandProlog)) { os() << syntax_->delimGeneral(Syntax::dDSO); hasInternalSubset_ = 1; } else hasInternalSubset_ = 0; delete event; } void CopyEventHandler::endDtd(EndDtdEvent *event) { endSubset(event); } void CopyEventHandler::endLpd(EndLpdEvent *event) { endSubset(event); } void CopyEventHandler::endSubset(MarkupEvent *event) { if (doNothing(event)) return; if (hasInternalSubset_) os() << syntax_->delimGeneral(Syntax::dDSC); outputMarkup(event->location(), event->markup()); delete event; } void CopyEventHandler::entityDecl(EntityDeclEvent *event) { currentAttributes_ = 0; const ExternalDataEntity *extData = event->entity().asExternalDataEntity(); if (extData) currentAttributes_ = &extData->attributes(); markup(event->location(), event->markup()); currentAttributes_ = 0; delete event; } void CopyEventHandler::shortrefDecl(ShortrefDeclEvent *event) { if (doNothing(event)) return; if (!(normalizeFlags_ & normalizeShortref)) outputMarkup(event->location(), event->markup()); delete event; } void CopyEventHandler::entityStart(EntityStartEvent *event) { if (event->entity()->name() == outputEntity_ && event->entity()->declType() == Entity::generalEntity) outputEntityLevel_ = entityLevel_ + 1; if (inInstance_ && (normalizeFlags_ & normalizeOmittagHoist)) { if (event->entity()->asInternalEntity()) omittagHoist_++; else omittagHoist_ = 0; } if (doNothing(event)) { entityLevel_++; return; } entityLevel_++; if ((normalizeFlags_ & normalizeExpand) && inInstance_ && entityLevel_ > outputEntityLevel_) { entityStack_.resize(entityStack_.size() + 1); entityStack_.back().ref = event->entityOrigin(); os_ = &entityStack_.back().str; } entityOrigin_ = event->entityOrigin(); delete event; } void CopyEventHandler::entityEnd(EntityEndEvent *event) { if (omittagHoist_ > 0) omittagHoist_--; if (entityLevel_-- == outputEntityLevel_) { outputEntityLevel_ = unsigned(-1); outputEntity_.resize(0); } else if (!(normalizeFlags_ & (inInstance_ ? normalizeExpand : normalizeExpandProlog)) && entityLevel_ == outputEntityLevel_) { if (!entityOrigin_.isNull()) { switch (entityOrigin_->entity()->declType()) { case Entity::doctype: case Entity::linktype: break; default: entityRef(entityOrigin_.pointer()); break; } } entityOrigin_.clear(); } else if ((normalizeFlags_ & normalizeExpand) && inInstance_ && entityLevel_ >= outputEntityLevel_) { if (entityStack_.size() > 0) { ConstPtr origin = entityStack_.back().ref; entityStack_.resize(entityStack_.size() - 1); if (entityStack_.size() > 0) os_ = &entityStack_.back().str; else os_ = topOs_; entityRef(origin.pointer()); } } delete event; } void CopyEventHandler::outputMarkup(const Location &loc, const Markup &markup) { int level = 0; Boolean first = 1; MarkupIter iter(markup); while (iter.valid()) { switch (iter.type()) { case Markup::delimiter: if (first) withNamedCharRef(syntax_->delimGeneral(iter.delimGeneral()), loc); else if (!level) { os() << syntax_->delimGeneral(iter.delimGeneral()); // hack, hack! if (iter.delimGeneral() == Syntax::dDSO && currentAttributes_ != 0) { attributeSpecList(iter, *currentAttributes_); first = 0; continue; // skip the advance } } break; case Markup::refEndRe: if (!level) os().put(syntax_->standardFunction(Syntax::fRE)); break; case Markup::sdReservedName: if (!level) { if (normalizeFlags_ & normalizeReserved) os() << sd_->reservedName(iter.sdReservedName()); else os() << iter; } break; case Markup::reservedName: if (!level && (normalizeFlags_ & normalizeReserved)) { os() << syntax_->reservedName(iter.reservedName()); break; } case Markup::shortref: if (first) { withNamedCharRef(iter.charsPointer(), iter.charsLength(), loc); break; } // fall through case Markup::name: case Markup::nameToken: case Markup::attributeValue: case Markup::number: case Markup::s: if (!level) os() << iter; break; case Markup::comment: if (!level) os() << syntax_->delimGeneral(Syntax::dCOM) << iter << syntax_->delimGeneral(Syntax::dCOM); break; case Markup::entityStart: if (!level++) { const EntityOrigin *origin = iter.entityOrigin(); // entityStarts in the SGML declaration don't have explicit references if (origin->entity()) entityRef(origin); } break; case Markup::entityEnd: level--; break; case Markup::literal: if (!level) literal(iter.text()); break; case Markup::sdLiteral: if (!level) sdParamLiteral(iter.sdText()); break; default: CANNOT_HAPPEN(); } iter.advance(); first = 0; } } void CopyEventHandler::sdParamLiteral(const SdText &text) { const StringC &delim = syntax_->delimGeneral(text.lita() ? Syntax::dLITA : Syntax::dLIT); os() << delim; SdTextIter iter(text); const SyntaxChar *p; size_t n; Location loc; while (iter.next(p, n, loc)) { const Markup *markupPtr; if (n == 1 && loc.origin()->isNumericCharRef(markupPtr)) { if (markupPtr) outputMarkup(loc.origin()->parent(), *markupPtr); } else if (n > 0) { Char c = Char(*p); withNamedCharRef(&c, 1, loc); for (++p, --n; n > 0; ++p, --n) os().put(Char(*p)); } } os() << delim; } void CopyEventHandler::entityRef(const EntityOrigin *origin) { const Markup *m = origin->markup(); if (!m) return; MarkupIter iter(*m); if (iter.valid()) { iter.advance(); if (iter.valid() && iter.type() == Markup::shortref && (normalizeFlags_ & normalizeShortref)) { handleChange(); Boolean containsRE = 0; Boolean containsRS = 0; for (size_t i = 0; i < iter.charsLength(); i++) { Char c = iter.charsPointer()[i]; if (c == syntax_->standardFunction(Syntax::fRE)) containsRE = 1; else if (c == syntax_->standardFunction(Syntax::fRS)) containsRS = 1; } if (containsRS) os().put(syntax_->standardFunction(Syntax::fRS)); os() << syntax_->delimGeneral(Syntax::dERO) << origin->entity()->name(); if (containsRE) os().put(syntax_->standardFunction(Syntax::fRE)); else os() << syntax_->delimGeneral(Syntax::dREFC); return; } } outputMarkup(origin->parent(), *m); } const StringC &CopyEventHandler::elementTypeOrigName(const ElementType *type, StringC &buf) { if (type->index() < elementTypeOrigNames_.size() && elementTypeOrigNames_[type->index()].size() > 0) return elementTypeOrigNames_[type->index()]; else return generalName(type->name(), buf); } const StringC &CopyEventHandler::generalName(const StringC &name, StringC &buf) { if ((normalizeFlags_ & normalizeLower) && syntax_->namecaseGeneral()) return lowerCaseName(name, buf); else return name; } const StringC &CopyEventHandler::entityName(const StringC &name, StringC &buf) { if ((normalizeFlags_ & normalizeLower) && syntax_->namecaseEntity()) return lowerCaseName(name, buf); else return name; } const StringC &CopyEventHandler::lowerCaseName(const StringC &name, StringC &buf) { size_t i; for (i = 0; i < name.size(); i++) { Char c = lowerSubst_[name[i]]; if (c != name[i]) { buf = name; buf[i] = c; for (i++; i < name.size(); i++) lowerSubst_.subst(buf[i]); return buf; } } return name; } void CopyEventHandler::handleChange() { if (os_ != topOs_) { os_ = topOs_; for (size_t i = 0; i < entityStack_.size(); i++) { StringC tem; entityStack_[i].str.flush(); entityStack_[i].str.extractString(tem); os() << tem; } entityStack_.resize(0); } } #ifdef SP_NAMESPACE } #endif jade-1.2.1/spam/CopyEventHandler.h100444 764 764 10340 6604607574 14562 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifndef CopyEventHandler_INCLUDED #define CopyEventHandler_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Event.h" #include "OutputCharStream.h" #include "Vector.h" #include "NCVector.h" #include "MarkupEventHandler.h" // This should be local to CopyEventHandler, but some compilers // can't handle this. #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct CopyEventHandlerEntityInfo { StrOutputCharStream str; ConstPtr ref; }; class CopyEventHandler : public MarkupEventHandler { public: enum NormalizeFlags { normalizeOmittag = 01, normalizeShortref = 02, normalizeNet = 04, normalizeEmptytag = 010, normalizeUnclosed = 020, normalizeAttname = 040, normalizeAttvalue = 0100, normalizeAttspec = 0200, normalizeShorttag = (normalizeNet|normalizeEmptytag|normalizeUnclosed |normalizeAttname|normalizeAttvalue|normalizeAttspec), normalizeRank = 0400, normalizeOmittagHoist = 01000, normalizeExpand = 02000, normalizeExpandAll = 04000, normalizeCurrent = 010000, normalizeLower = 020000, normalizeReserved = 040000, normalizeExpandProlog = 0100000, normalizeIncludeProlog = 0200000, normalizeMarkedSection = 0400000 }; CopyEventHandler(OutputCharStream *, unsigned flags, const StringC &outputEntity); ~CopyEventHandler(); void reOrigin(ReOriginEvent *); void sSep(SSepEvent *); void ignoredRs(IgnoredRsEvent *); void data(DataEvent *); void startElement(StartElementEvent *); void endElement(EndElementEvent *); void sdataEntity(SdataEntityEvent *); void externalDataEntity(ExternalDataEntityEvent *); void subdocEntity(SubdocEntityEvent *); void nonSgmlChar(NonSgmlCharEvent *); void pi(PiEvent *); void endProlog(EndPrologEvent *); void markedSectionStart(MarkedSectionStartEvent *); void markedSectionEnd(MarkedSectionEndEvent *); void entityStart(EntityStartEvent *); void entityEnd(EntityEndEvent *); void ignoredChars(IgnoredCharsEvent *); void sgmlDecl(SgmlDeclEvent *); void usemap(UsemapEvent *); void uselink(UselinkEvent *); void startDtd(StartDtdEvent *); void startLpd(StartLpdEvent *); void endDtd(EndDtdEvent *); void endLpd(EndLpdEvent *); void entityDecl(EntityDeclEvent *); void shortrefDecl(ShortrefDeclEvent *); void markup(const Location &loc, const Markup &markup); private: virtual void reportTagInSpecialMarkedSection(const Location &) = 0; OutputCharStream &os(); void startSubset(StartSubsetEvent *); void endSubset(MarkupEvent *); void literal(const Text &text); void attributeSpecList(MarkupIter &, const AttributeList &); void unspecifiedAttributeValues(const AttributeList &atts, const StringC &beforeFirst); void withNamedCharRef(const StringC &, const Location &loc); void withNamedCharRef(const Char *p, size_t n, const Location &loc); void writeData(const Char *p, size_t n, const Location &loc); void sdParamLiteral(const SdText &text); void entityRef(const EntityOrigin *); Boolean doNothing(Event *); Boolean noOutput(); Boolean isSgmlChar(Char); const StringC &elementTypeOrigName(const ElementType *, StringC &buf); const StringC &generalName(const StringC &name, StringC &buf); const StringC &entityName(const StringC &name, StringC &buf); const StringC &lowerCaseName(const StringC &name, StringC &buf); void handleChange(); void outputMarkup(const Location &loc, const Markup &markup); OutputCharStream *os_; OutputCharStream *topOs_; Boolean inInstance_; unsigned entityLevel_; unsigned outputEntityLevel_; ConstPtr syntax_; ConstPtr instanceSyntax_; ConstPtr sd_; SubstTable lowerSubst_; unsigned normalizeFlags_; StringC outputEntity_; Vector elementTypeOrigNames_; unsigned omittagHoist_; ConstPtr entityOrigin_; NCVector entityStack_; Boolean inSpecialMarkedSection_; Boolean hasInternalSubset_; Boolean mustOmitEnd_; Boolean emptyElementNormal_; const AttributeList *currentAttributes_; }; inline OutputCharStream &CopyEventHandler::os() { return *os_; } #ifdef SP_NAMESPACE } #endif #endif /* not CopyEventHandler_INCLUDED */ jade-1.2.1/spam/MarkupEventHandler.cxx100444 764 764 6312 6604607574 15446 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "config.h" #include "MarkupEventHandler.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif MarkupEventHandler::MarkupEventHandler() { } void MarkupEventHandler::startElement(StartElementEvent *event) { if (event->markupPtr()) markup(event->location(), *event->markupPtr()); delete event; } void MarkupEventHandler::endElement(EndElementEvent *event) { if (event->markupPtr()) markup(event->location(), *event->markupPtr()); delete event; } void MarkupEventHandler::uselink(UselinkEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::usemap(UsemapEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::startDtd(StartDtdEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::endDtd(EndDtdEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::startLpd(StartLpdEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::endLpd(EndLpdEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::sgmlDecl(SgmlDeclEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::commentDecl(CommentDeclEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::markedSectionStart(MarkedSectionStartEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::markedSectionEnd(MarkedSectionEndEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::notationDecl(NotationDeclEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::entityDecl(EntityDeclEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::elementDecl(ElementDeclEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::attlistDecl(AttlistDeclEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::linkAttlistDecl(LinkAttlistDeclEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::attlistNotationDecl(AttlistNotationDeclEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::linkDecl(LinkDeclEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::idLinkDecl(IdLinkDeclEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::shortrefDecl(ShortrefDeclEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::ignoredMarkup(IgnoredMarkupEvent *event) { markup(event->location(), event->markup()); delete event; } void MarkupEventHandler::markup(const Location &, const Markup &) { } #ifdef SP_NAMESPACE } #endif jade-1.2.1/spam/MarkupEventHandler.h100444 764 764 2577 6604607574 15104 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #ifndef MarkupEventHandler_INCLUDED #define MarkupEventHandler_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "Event.h" #include "ErrorCountEventHandler.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class MarkupEventHandler : public ErrorCountEventHandler { public: MarkupEventHandler(); void startElement(StartElementEvent *); void endElement(EndElementEvent *); void uselink(UselinkEvent *); void usemap(UsemapEvent *); void startDtd(StartDtdEvent *); void endDtd(EndDtdEvent *); void startLpd(StartLpdEvent *); void endLpd(EndLpdEvent *); void sgmlDecl(SgmlDeclEvent *); void commentDecl(CommentDeclEvent *); void markedSectionStart(MarkedSectionStartEvent *); void markedSectionEnd(MarkedSectionEndEvent *); void notationDecl(NotationDeclEvent *); void entityDecl(EntityDeclEvent *); void elementDecl(ElementDeclEvent *); void attlistDecl(AttlistDeclEvent *); void linkAttlistDecl(LinkAttlistDeclEvent *); void attlistNotationDecl(AttlistNotationDeclEvent *); void linkDecl(LinkDeclEvent *); void idLinkDecl(IdLinkDeclEvent *); void shortrefDecl(ShortrefDeclEvent *); void ignoredMarkup(IgnoredMarkupEvent *); virtual void markup(const Location &, const Markup &); }; #ifdef SP_NAMESPACE } #endif #endif /* not MarkupEventHandler_INCLUDED */ jade-1.2.1/spam/SpamMessages.h100444 764 764 1535 6604610616 13715 0ustar jjcjjc// This file was automatically generated from spam\SpamMessages.msg by msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct SpamMessages { // 0 static const MessageType1 invalidMarkupArgument; // 1 static const MessageType0 tagInSpecialMarkedSection; }; const MessageType1 SpamMessages::invalidMarkupArgument( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 0 #ifndef SP_NO_MESSAGE_TEXT ,"invalid argument for -m option" #endif ); const MessageType0 SpamMessages::tagInSpecialMarkedSection( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 1 #ifndef SP_NO_MESSAGE_TEXT ,"omitted start or end tag implied in CDATA or RCDATA marked section; not normalized" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/spam/SpamMessages.msg100444 764 764 427 6604607574 14244 0ustar jjcjjc# Copyright (c) 1995 James Clark # See the file COPYING for copying permission. # Spam message definitions E1+invalidMarkupArgument++invalid argument for -m option E0+tagInSpecialMarkedSection++omitted start or end tag implied in CDATA or RCDATA marked section; not normalized jade-1.2.1/spam/SpamMessages.rc100444 764 764 226 6604610616 14046 0ustar jjcjjcSTRINGTABLE BEGIN 0, "invalid argument for -m option" 1, "omitted start or end tag implied in CDATA or RCDATA marked section; not normalized" END jade-1.2.1/spam/Makefile.sub100444 764 764 215 6604607574 13367 0ustar jjcjjcPROG=spam OBJS=spam.o CopyEventHandler.o MarkupEventHandler.o spam_inst.o INCLUDE= XLIBS=../lib/libsp.a GENSRCS=spam_inst.cxx SpamMessages.h jade-1.2.1/spam/spam.cxx100444 764 764 10574 6604607574 12674 0ustar jjcjjc// Copyright (c) 1995, 1996 James Clark // See the file COPYING for copying permission. // FIXME usage message for bad -m option. #include "config.h" #include "SgmlParser.h" #include "Event.h" #include "OutputCharStream.h" #include "ParserApp.h" #include "Boolean.h" #include "macros.h" #include "SpamMessages.h" #include "CopyEventHandler.h" #include "InputSource.h" #include "sptchar.h" #include #ifdef SP_NAMESPACE using namespace SP_NAMESPACE; #endif class XCopyEventHandler : public CopyEventHandler { public: XCopyEventHandler(OutputCharStream *os, unsigned normalizeFlags, const StringC &outputEntity, Messenger *); void message(MessageEvent *); private: void reportTagInSpecialMarkedSection(const Location &); Messenger *messenger_; OutputCharStream *os_; }; static struct { const ParserApp::AppChar *name; unsigned flag; } normalizeTable[] = { { SP_T("omittag"), CopyEventHandler::normalizeOmittag }, { SP_T("shortref"), CopyEventHandler::normalizeShortref }, { SP_T("net"), CopyEventHandler::normalizeNet }, { SP_T("emptytag"), CopyEventHandler::normalizeEmptytag }, { SP_T("unclosed"), CopyEventHandler::normalizeUnclosed }, { SP_T("attname"), CopyEventHandler::normalizeAttname }, { SP_T("attvalue"), CopyEventHandler::normalizeAttvalue }, { SP_T("attspec"), CopyEventHandler::normalizeAttspec }, { SP_T("current"), CopyEventHandler::normalizeCurrent }, { SP_T("shorttag"), CopyEventHandler::normalizeShorttag }, { SP_T("rank"), CopyEventHandler::normalizeRank }, { SP_T("reserved"), CopyEventHandler::normalizeReserved }, { SP_T("ms"), CopyEventHandler::normalizeMarkedSection }, }; class SpamApp : public ParserApp { public: SpamApp(); ErrorCountEventHandler *makeEventHandler(); void processOption(AppChar opt, const AppChar *arg); private: unsigned normalizeFlags_; StringC outputEntity_; Boolean rawOutput_; }; SP_DEFINE_APP(SpamApp) SpamApp::SpamApp() : rawOutput_(0), normalizeFlags_(0) { options_.eventsWanted.addInstanceMarkup(); options_.eventsWanted.addPrologMarkup(); registerOption('h'); registerOption('l'); registerOption('m', SP_T("omittag|shortref|net|emptytag|unclosed|attname|attvalue|attspec|current|shorttag|rank|reserved")); registerOption('o', SP_T("entity_name")); registerOption('p'); registerOption('r'); registerOption('x'); } void SpamApp::processOption(AppChar opt, const AppChar *arg) { switch (opt) { case 'h': // hoist omitted tags out of entities normalizeFlags_ |= CopyEventHandler::normalizeOmittagHoist; break; case 'l': // prefer lowercase normalizeFlags_ |= CopyEventHandler::normalizeLower; break; case 'm': { Boolean found = 0; for (size_t i = 0; i < SIZEOF(normalizeTable); i++) if (tcscmp(normalizeTable[i].name, arg) == 0) { found = 1; normalizeFlags_ |= normalizeTable[i].flag; break; } if (!found) { message(SpamMessages::invalidMarkupArgument, StringMessageArg(convertInput(arg))); // usage(kit); } } break; case 'o': outputEntity_ = convertInput(arg); break; case 'p': if (normalizeFlags_ & CopyEventHandler::normalizeIncludeProlog) normalizeFlags_ |= CopyEventHandler::normalizeExpandProlog; else normalizeFlags_ |= CopyEventHandler::normalizeIncludeProlog; break; case 'r': rawOutput_ = 1; break; case 'x': if (normalizeFlags_ & CopyEventHandler::normalizeExpand) normalizeFlags_ |= CopyEventHandler::normalizeExpandAll; else normalizeFlags_ |= CopyEventHandler::normalizeExpand; break; default: ParserApp::processOption(opt, arg); break; } } ErrorCountEventHandler *SpamApp::makeEventHandler() { OutputCharStream *os = makeStdOut(); if (!rawOutput_) os = new RecordOutputCharStream(os); return new XCopyEventHandler(os, normalizeFlags_, outputEntity_, this); } XCopyEventHandler::XCopyEventHandler(OutputCharStream *os, unsigned normalizeFlags, const StringC &outputEntity, Messenger *messenger) : messenger_(messenger), os_(os), CopyEventHandler(os, normalizeFlags, outputEntity) { } void XCopyEventHandler::message(MessageEvent *event) { messenger_->dispatchMessage(event->message()); CopyEventHandler::message(event); } void XCopyEventHandler::reportTagInSpecialMarkedSection(const Location &loc) { messenger_->setNextLocation(loc); messenger_->message(SpamMessages::tagInSpecialMarkedSection); } jade-1.2.1/spam/spam.dsp100444 764 764 13007 6605017042 12634 0ustar jjcjjc# Microsoft Developer Studio Project File - Name="spam" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=spam - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "spam.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "spam.mak" CFG="spam - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "spam - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "spam - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "spam - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\include" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 /out:"..\bin\spam.exe" # SUBTRACT LINK32 /profile !ELSEIF "$(CFG)" == "spam - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\Debug" # PROP BASE Intermediate_Dir ".\Debug" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir ".\Debug" # PROP Intermediate_Dir ".\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\include" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\dbgbin\spam.exe" !ENDIF # Begin Target # Name "spam - Win32 Release" # Name "spam - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # Begin Source File SOURCE=.\CopyEventHandler.cxx # End Source File # Begin Source File SOURCE=.\MarkupEventHandler.cxx # End Source File # Begin Source File SOURCE=.\spam.cxx # End Source File # Begin Source File SOURCE=.\spam_inst.cxx # End Source File # Begin Source File SOURCE=.\spam_inst.m4 !IF "$(CFG)" == "spam - Win32 Release" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "spam - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\spam_inst.m4 InputName=spam_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\SpamMessages.msg !IF "$(CFG)" == "spam - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\SpamMessages.msg InputName=SpamMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "spam - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\SpamMessages.msg InputName=SpamMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ENDIF # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # Begin Source File SOURCE=.\CopyEventHandler.h # End Source File # Begin Source File SOURCE=.\MarkupEventHandler.h # End Source File # Begin Source File SOURCE=.\SpamMessages.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # Begin Source File SOURCE=.\spam.rc # End Source File # Begin Source File SOURCE=.\SpamMessages.rc # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # End Group # End Target # End Project jade-1.2.1/spam/spam.rc100444 764 764 156 6604607574 12431 0ustar jjcjjc// Copyright (c) 1996 James Clark // See the file COPYING for copying permission. #include "SpamMessages.rc" jade-1.2.1/spam/spam_inst.cxx100444 764 764 1354 6604610616 13674 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "NCVector.h" #undef SP_DEFINE_TEMPLATES #include "CopyEventHandler.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template NCVector #else #ifdef __xlC__ #pragma define(NCVector) #else #ifdef SP_ANSI_CLASS_INST template class NCVector; #else typedef NCVector Dummy_0; #endif #endif #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/spam/spam_inst.m4100444 764 764 620 6604607574 13376 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "NCVector.h" #undef SP_DEFINE_TEMPLATES #include "CopyEventHandler.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif __instantiate(NCVector) #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/spent/ 40775 764 764 0 6610553420 11244 5ustar jjcjjcjade-1.2.1/spent/Makefile.sub100444 764 764 66 6604607574 13544 0ustar jjcjjcPROG=spent OBJS=spent.o INCLUDE= XLIBS=../lib/libsp.a jade-1.2.1/spent/spent.cxx100444 764 764 2737 6604607574 13240 0ustar jjcjjc// Copyright (c) 1995 James Clark // See the file COPYING for copying permission. #include "config.h" #include "EntityApp.h" #include "InputSource.h" #include "OutputCharStream.h" #ifdef SP_NAMESPACE using namespace SP_NAMESPACE; #endif class SpentApp : public EntityApp { public: SpentApp(); void processOption(AppChar opt, const AppChar *arg); int processSysid(const StringC &); private: Boolean isNdata_; Boolean rawOutput_; }; SP_DEFINE_APP(SpentApp) SpentApp::SpentApp() : rawOutput_(0), isNdata_(0) { registerOption('n'); registerOption('r'); } void SpentApp::processOption(AppChar opt, const AppChar *arg) { switch (opt) { case 'n': isNdata_ = 1; if (!outputCodingSystem_) outputCodingSystem_ = codingSystemKit_->identityCodingSystem(); rawOutput_ = 1; break; case 'r': rawOutput_ = 1; break; default: EntityApp::processOption(opt, arg); break; } } int SpentApp::processSysid(const StringC &sysid) { InputSource *in = entityManager()->open(sysid, systemCharset(), InputSourceOrigin::make(), isNdata_ ? ExtendEntityManager::isNdata : 0, *this); if (!in) return 1; OutputCharStream *os = makeStdOut(); if (!rawOutput_) os = new RecordOutputCharStream(os); for (;;) { Xchar c = in->get(*this); if (c == InputSource::eE) break; in->extendToBufferEnd(); os->write(in->currentTokenStart(), in->currentTokenLength()); } delete os; return in->accessError(); } jade-1.2.1/spent/spent.dsp100444 764 764 7374 6606574412 13222 0ustar jjcjjc# Microsoft Developer Studio Project File - Name="spent" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=spent - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "spent.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "spent.mak" CFG="spent - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "spent - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "spent - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "spent - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\include" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 /out:"..\bin\spent.exe" # SUBTRACT LINK32 /profile !ELSEIF "$(CFG)" == "spent - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\Debug" # PROP BASE Intermediate_Dir ".\Debug" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir ".\Debug" # PROP Intermediate_Dir ".\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\include" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\dbgbin\spent.exe" !ENDIF # Begin Target # Name "spent - Win32 Release" # Name "spent - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # Begin Source File SOURCE=.\spent.cxx # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # End Group # End Target # End Project jade-1.2.1/sp-generate.mak100444 764 764 2466 6604607546 13134 0ustar jjcjjc# This is a Makefile for nmake that makes all the .cxx and .h files that # are automatically generated. It's too painful to do in the IDE. # You'll need m4 and perl to use this. M4=m4 PERL=perl GENSRCS=lib\entmgr_inst.cxx \ lib\xentmgr_inst.cxx \ lib\parser_inst.cxx \ lib\app_inst.cxx \ lib\arc_inst.cxx \ lib\ArcEngineMessages.h \ lib\EntityManagerMessages.h \ lib\CatalogMessages.h \ lib\MessageFormatterMessages.h \ lib\MessageReporterMessages.h \ lib\PosixStorageMessages.h \ lib\URLStorageMessages.h \ lib\WinInetStorageMessages.h \ lib\StdioStorageMessages.h \ lib\ParserMessages.h \ lib\ParserAppMessages.h \ lib\CmdLineAppMessages.h \ lib\version.h \ nsgmls\nsgmls_inst.cxx \ nsgmls\RastEventHandlerMessages.h \ nsgmls\NsgmlsMessages.h \ spam\SpamMessages.h \ spam\spam_inst.cxx \ sx\SxMessages.h \ sx\XmlOutputMessages.h \ sx\sx_inst.cxx .SUFFIXES: .m4 .msg all: $(GENSRCS) .m4.cxx: rm -f $@ $(M4) lib\instmac.m4 $< >$@ chmod -w $@ {lib}.msg{lib}.h: rm -f $@ $(PERL) -w msggen.pl -l $< chmod -w $@ {nsgmls}.msg{nsgmls}.h: rm -f $@ $(PERL) -w msggen.pl $< chmod -w $@ {spam}.msg{spam}.h: rm -f $@ $(PERL) -w msggen.pl $< chmod -w $@ {sx}.msg{sx}.h: rm -f $@ $(PERL) -w msggen.pl $< chmod -w $@ lib\version.h: lib\mkversion.pl VERSION rm -f $@ $(PERL) -w lib\mkversion.pl VERSION >$@ chmod -w $@ jade-1.2.1/sunfix.sh100444 764 764 370 6604607552 12045 0ustar jjcjjc#!/bin/sh # Sun C++ 4.0.1 gets confused by the macros in include/NCVector.h. cd include mv NCVector.h NCVector.h.dist sed -f NCVector.sed Vector.h >NCVector.h chmod -w NCVector.h sed -f NCVector.sed Vector.cxx >NCVector.cxx chmod -w NCVector.cxx jade-1.2.1/sx/ 40775 764 764 0 6610553420 10545 5ustar jjcjjcjade-1.2.1/sx/Makefile.sub100444 764 764 207 6606574412 13056 0ustar jjcjjcPROG=sx OBJS=sx.o XmlOutputEventHandler.o sx_inst.o INCLUDE= XLIBS=../lib/libsp.a GENSRCS=XmlOutputMessages.h SxMessages.h sx_inst.cxx jade-1.2.1/sx/SxMessages.h100444 764 764 752 6606636520 13065 0ustar jjcjjc// This file was automatically generated from .\SxMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct SxMessages { // 0 static const MessageType1 unknownOutputOption; }; const MessageType1 SxMessages::unknownOutputOption( MessageType::error, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 0 #ifndef SP_NO_MESSAGE_TEXT ,"unknown output option %1" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/sx/SxMessages.msg100444 764 764 234 6606574412 13420 0ustar jjcjjc# Copyright (c) 1997 James Clark # See the file COPYING for copying permission. # Sx message definitions E1+unknownOutputOption++unknown output option %1 jade-1.2.1/sx/SxMessages.rc100444 764 764 66 6606636520 13220 0ustar jjcjjcSTRINGTABLE BEGIN 0, "unknown output option %1" END jade-1.2.1/sx/XmlOutputEventHandler.cxx100444 764 764 42257 6606574412 15706 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifdef __GNUG__ #pragma implementation #endif #include "config.h" #include "XmlOutputEventHandler.h" #include "XmlOutputMessages.h" #include "Message.h" #include "MessageArg.h" #include "macros.h" #if 0 #include "UTF8CodingSystem.h" #endif #include "InputSource.h" #include "StorageManager.h" #include #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif inline void operator+=(StringC &str, const char *s) { while (*s) str += *s++; } inline void XmlOutputEventHandler::closeCdataSection() { useCdata_ = 0; if (inCdata_) { os() << "]]>"; inCdata_ = 0; nCdataEndMatched_ = 0; } } const char RE = '\r'; XmlOutputEventHandler::Options::Options() { memset(this, 0, sizeof(*this)); } static void escape(OutputCharStream &s, Char c) { s << "&#" << (unsigned long)c << ";"; } XmlOutputEventHandler::XmlOutputEventHandler(const Options &options, OutputCharStream *os, const StringC &encodingName, const Ptr &entityManager, const CharsetInfo &systemCharset, Messenger *mgr) : options_(options), os_(os), entityManager_(entityManager), systemCharset_(&systemCharset), mgr_(mgr), inDtd_(0), inCdata_(0), useCdata_(0), nCdataEndMatched_(0), namecaseGeneral_(0) { os_->setEscaper(escape); *os_ << "" << RE; } XmlOutputEventHandler::~XmlOutputEventHandler() { os() << RE; delete os_; } void XmlOutputEventHandler::message(MessageEvent *event) { mgr_->dispatchMessage(event->message()); ErrorCountEventHandler::message(event); } void XmlOutputEventHandler::sgmlDecl(SgmlDeclEvent *event) { const Syntax &syntax = event->instanceSyntax(); if (syntax.namecaseGeneral()) { namecaseGeneral_ = 1; syntax.generalSubstTable()->inverseTable(lowerSubst_); } delete event; } void XmlOutputEventHandler::data(DataEvent *event) { if (useCdata_) outputCdata(event->data(), event->dataLength()); else outputData(event->data(), event->dataLength(), 0); delete event; } void XmlOutputEventHandler::startElement(StartElementEvent *event) { // This shouldn't happen (although useCdata_ can be true). if (inCdata_) { inCdata_ = 0; nCdataEndMatched_ = 0; os() << "]]>"; } os() << '<' << generalName(event->name(), nameBuf_); size_t nAttributes = event->attributes().size(); for (size_t i = 0; i < nAttributes; i++) outputAttribute(event->attributes(), i); if (options_.nlInTag) os() << RE; if (options_.cdata && event->elementType()->definition()->declaredContent() == ElementDefinition::cdata) useCdata_ = 1; if (options_.empty && event->elementType()->definition()->declaredContent() == ElementDefinition::empty) os() << "/>"; else os() << '>'; delete event; } void XmlOutputEventHandler::outputAttribute(const AttributeList &attributes, size_t i) { const AttributeValue *value = attributes.value(i); if (!value) return; const Text *text; const StringC *string; AttributeValue::Type type = value->info(text, string); if (type == AttributeValue::implied) return; if (options_.nlInTag) os() << RE; else os() << ' '; os() << generalName(attributes.name(i), nameBuf_) << "=\""; if (type == AttributeValue::cdata) { TextIter iter(*text); TextItem::Type type; const Char *p; size_t length; const Location *loc; while (iter.next(type, p, length, loc)) { switch (type) { case TextItem::data: case TextItem::cdata: outputData(p, length, 1); break; case TextItem::sdata: { mgr_->setNextLocation(loc->origin()->parent()); const Entity *entity = loc->origin()->asEntityOrigin()->entity(); mgr_->message(XmlOutputMessages::sdataEntityReference, StringMessageArg(entity->name())); os() << '&' << entity->name() << ';'; } break; case TextItem::nonSgml: // FIXME break; default: break; } } } else if (attributes.def()->def(i)->isEntity()) os() << *string; else os() << generalName(*string, nameBuf_); os() << '"'; } void XmlOutputEventHandler::endElement(EndElementEvent *event) { closeCdataSection(); if (options_.empty && event->elementType()->definition()->declaredContent() == ElementDefinition::empty) ; else { os() << "name(), nameBuf_); #if 0 if (options_.nlInTag) os() << RE; #endif os() << '>'; } delete event; } static Boolean isXmlS(Char c) { switch (c) { case ' ': case '\r': case '\n': case '\t': return 1; } return 0; } static Boolean containsQuestionLt(const Char *s, size_t n) { for (; n > 1; n--, s++) if (*s == '?' && s[1] == '>') return 1; return 0; } // These do not handle Unicode chars properly. // They treat all Unicode chars >= 170 as name start characters static Boolean isXmlNameStartChar(Char c) { switch (c) { case ':': case '.': case '_': case '-': return 1; } if (c >= 170) return 1; if ('a' <= c && c <= 'z') return 1; if ('A' <= c && c <= 'Z') return 1; return 0; } static Boolean isXmlNameChar(Char c) { if (isXmlNameStartChar(c)) return 1; if ('0' <= c && c <= '9') return 1; return 0; } static Boolean startsWithXmlName(const Char *s, size_t n) { if (n == 0) return 0; if (!isXmlNameStartChar(*s)) return 0; for (s++, n--; n > 0; n--, s++) { if (isXmlS(*s)) return 1; if (!isXmlNameChar(*s)) return 0; } return 1; } void XmlOutputEventHandler::pi(PiEvent *event) { const Char *s = event->data(); size_t n = event->dataLength(); if (n >= 3 && s[0] == 'x' && s[1] == 'm' && s[2] == 'l' && (n == 3 || isXmlS(s[3]))) ; // Probably came from an encoding PI. else if (!startsWithXmlName(s, n)) { mgr_->setNextLocation(event->location()); mgr_->message(XmlOutputMessages::piNoName); } else if (options_.piEscape) { os() << ""; } else if (containsQuestionLt(s, n)) { mgr_->setNextLocation(event->location()); mgr_->message(XmlOutputMessages::piQuestionLt); } else { os() << ""; } delete event; } void XmlOutputEventHandler::sdataEntity(SdataEntityEvent *event) { mgr_->setNextLocation(event->location().origin()->parent()); mgr_->message(XmlOutputMessages::sdataEntityReference, StringMessageArg(event->entity()->name())); os() << '&' << event->entity()->name() << ';'; delete event; } void XmlOutputEventHandler::externalDataEntity(ExternalDataEntityEvent *event) { mgr_->setNextLocation(event->location().origin()->parent()); mgr_->message(XmlOutputMessages::externalDataEntityReference, StringMessageArg(event->entity()->name())); os() << (options_.lower ? "entity()->name() << "\"/>"; delete event; } void XmlOutputEventHandler::subdocEntity(SubdocEntityEvent *event) { mgr_->setNextLocation(event->location().origin()->parent()); mgr_->message(XmlOutputMessages::subdocEntityReference, StringMessageArg(event->entity()->name())); os() << (options_.lower ? "entity()->name() << "\"/>"; delete event; } void XmlOutputEventHandler::startDtd(StartDtdEvent *event) { inDtd_ = 1; delete event; } void XmlOutputEventHandler::endDtd(EndDtdEvent *event) { inDtd_ = 0; delete event; } void XmlOutputEventHandler::maybeStartDoctype(Boolean &doctypeStarted, const Dtd &dtd) { if (doctypeStarted) return; doctypeStarted = 1; os() << "name() << " [" << RE; } void XmlOutputEventHandler::endProlog(EndPrologEvent *event) { const Dtd &dtd = event->dtd(); Boolean doctypeStarted = 0; if (options_.notation) { Dtd::ConstNotationIter iter(dtd.notationIter()); for (;;) { const Notation *notation = iter.nextTemp(); if (!notation) break; maybeStartDoctype(doctypeStarted, dtd); os() << "name(), nameBuf_); outputExternalId(*notation); os() << ">" << RE; if (notation->attributeDefTemp()) { mgr_->setNextLocation(notation->defLocation()); mgr_->message(XmlOutputMessages::notationAttributes, StringMessageArg(notation->name())); } } } if (options_.ndata) { Dtd::ConstEntityIter iter(dtd.generalEntityIter()); for (;;) { const Entity *entity = iter.nextTemp(); if (!entity) break; const ExternalDataEntity *extDataEntity = entity->asExternalDataEntity(); if (extDataEntity) { maybeStartDoctype(doctypeStarted, dtd); os() << "name(); outputExternalId(*entity); if (extDataEntity->dataType() != EntityDecl::ndata) { mgr_->setNextLocation(entity->defLocation()); mgr_->message(XmlOutputMessages::externalDataNdata, StringMessageArg(entity->name())); } os() << " NDATA " << generalName(extDataEntity->notation()->name(), nameBuf_) << ">" << RE; } } } if (options_.id || options_.attlist) { Dtd::ConstElementTypeIter iter(dtd.elementTypeIter()); for (;;) { const ElementType *elementType = iter.next(); if (!elementType) break; const AttributeDefinitionList *adl = elementType->attributeDefTemp(); if (adl) { if (options_.attlist) { os() << "name(), nameBuf_); for (size_t i = 0; i < adl->size(); i++) { const AttributeDefinition *def = adl->def(i); os() << RE << generalName(def->name(), nameBuf_); AttributeDefinitionDesc desc; def->getDesc(desc); switch (desc.declaredValue) { case AttributeDefinitionDesc::cdata: os() << " CDATA #IMPLIED"; break; case AttributeDefinitionDesc::name: case AttributeDefinitionDesc::number: case AttributeDefinitionDesc::nmtoken: case AttributeDefinitionDesc::nutoken: os() << " NMTOKEN #IMPLIED"; break; case AttributeDefinitionDesc::entity: os() << " ENTITY #IMPLIED"; break; case AttributeDefinitionDesc::idref: os() << " IDREF #IMPLIED"; break; case AttributeDefinitionDesc::names: case AttributeDefinitionDesc::numbers: case AttributeDefinitionDesc::nmtokens: case AttributeDefinitionDesc::nutokens: os() << " NMTOKENS #IMPLIED"; break; case AttributeDefinitionDesc::entities: os() << " ENTITIES #IMPLIED"; break; case AttributeDefinitionDesc::idrefs: os() << " IDREFS #IMPLIED"; break; case AttributeDefinitionDesc::id: os() << " ID #IMPLIED"; break; case AttributeDefinitionDesc::notation: os() << " NOTATION"; // fall through case AttributeDefinitionDesc::nameTokenGroup: { os() << " ("; for (size_t j = 0; j < desc.allowedValues.size(); j++) { if (j > 0) os() << '|'; os() << desc.allowedValues[j]; } os() << ") #IMPLIED"; } break; default: CANNOT_HAPPEN(); } } os() << '>' << RE; } else { size_t idIndex = adl->idIndex(); if (idIndex != size_t(-1)) { maybeStartDoctype(doctypeStarted, dtd); os() << "name(), nameBuf_); os() << ' ' << generalName(adl->def(idIndex)->name(), nameBuf_) << " ID #IMPLIED>" << RE; } } } } } if (doctypeStarted) os() << "]>" << RE; delete event; } void XmlOutputEventHandler::outputExternalId(const EntityDecl &decl) { const StringC *pubIdP = decl.publicIdPointer(); const StringC *sysIdP = decl.effectiveSystemIdPointer(); if (pubIdP) { os() << " PUBLIC \"" << *pubIdP << "\""; if (decl.declType() == EntityDecl::notation && !sysIdP) return; os() << " \""; } else os() << " SYSTEM \""; if (sysIdP) { StringC url; switch(fsiToUrl(*sysIdP, decl.defLocation(), url)) { case 1: os() << url; break; case 0: break; default: mgr_->setNextLocation(decl.defLocation()); mgr_->message(XmlOutputMessages::cannotConvertFsiToUrl, StringMessageArg(*sysIdP)); break; } } os() << "\""; } // Return 1 if OK; return -1 to generate generic error; return 0 if error already generated. int XmlOutputEventHandler::fsiToUrl(const StringC &fsi, const Location &loc, StringC &url) { ParsedSystemId parsedBuf; if (!entityManager_->parseSystemId(fsi, *systemCharset_, 0, 0, *mgr_, parsedBuf)) return 0; if (parsedBuf.size() != 1) return -1; if (strcmp(parsedBuf[0].storageManager->type(), "URL") == 0) { url = parsedBuf[0].specId; return 1; } Owner in(entityManager_->open(fsi, *systemCharset_, InputSourceOrigin::make(), 0, *mgr_)); if (!in) return 0; Xchar c = in->get(*mgr_); StorageObjectLocation soLoc; if (c == InputSource::eE && in->accessError()) { if (parsedBuf[0].baseId.size()) return 0; soLoc.storageObjectSpec = &parsedBuf[0]; soLoc.actualStorageId = parsedBuf[0].specId; } else { const Location &loc = in->currentLocation(); if (loc.origin().isNull()) return -1; const InputSourceOrigin *tem = loc.origin()->asInputSourceOrigin(); if (!tem) return -1; const ParsedSystemId *psi = ExtendEntityManager::externalInfoParsedSystemId(tem->externalInfo()); if (!psi || psi->size() != 1) return -1; if (!ExtendEntityManager::externalize(tem->externalInfo(), 0, soLoc)) return -1; } if (strcmp(soLoc.storageObjectSpec->storageManager->type(), "OSFILE") != 0) return -1; return filenameToUrl(soLoc.actualStorageId, loc, url); } static StringC hexEncode(unsigned char c) { static const char hexDigits[] = "0123456789ABCDEF"; StringC result; result.resize(2); result[0] = hexDigits[c >> 4]; result[1] = hexDigits[c & 0xF]; return result; } static StringC urlEncode(Char c) { if (c >= 0x80) { StringC tem; tem += c; #if 0 // This is what the URN spec says. UTF8CodingSystem utf8; String bytes(utf8.convertOut(tem)); tem.resize(0); for (size_t i = 0; i < bytes.size(); i++) tem += hexEncode(bytes[i]); #endif return tem; } if (strchr("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$-_.+!*'(),", char(c))) { StringC tem; tem += c; return tem; } return hexEncode((unsigned char)c); } int XmlOutputEventHandler::filenameToUrl(const StringC &filename, const Location &loc, StringC &url) { #ifdef SP_MSDOS_FILENAMES if (filename.size() >= 3 && filename[1] == ':' && (('a' <= filename[0] && filename[0] <= 'z') || ('A' <= filename[0] && filename[0] <= 'Z')) && (filename[2] == '/' || filename[2] == '\\')) { url += "file://"; url += filename; return 1; } #endif for (size_t i = 0; i < filename.size(); i++) { if (filename[i] == '/' #ifdef SP_MSDOS_FILENAMES || filename[i] == '\\' #endif ) { url += '/'; } else url += urlEncode(filename[i]); } return 1; } void XmlOutputEventHandler::commentDecl(CommentDeclEvent *event) { if (!inDtd_ && options_.comment) { Boolean started = 0; for (MarkupIter iter(event->markup()); iter.valid(); iter.advance()) { if (iter.type() == Markup::comment) { if (!started) { os() << ""; } delete event; } void XmlOutputEventHandler::markedSectionStart(MarkedSectionStartEvent *event) { if (options_.cdata && event->status() == MarkedSectionEvent::cdata) useCdata_ = 1; delete event; } void XmlOutputEventHandler::markedSectionEnd(MarkedSectionEndEvent *event) { if (event->status() == MarkedSectionEvent::cdata) closeCdataSection(); delete event; } void XmlOutputEventHandler::outputCdata(const Char *s, size_t n) { static const char cdataEnd[] = "]]>"; for (; n > 0; s++, n--) { Char c = *s; if (!inCdata_) { os() << " 0; s++, n--) { Char c = *s; switch (c) { case '&': os() << "&"; break; case '<': os() << "<"; break; case '>': os() << ">"; break; case 9: case 10: case 13: if (inLit) os() << "&#" << int(c) << ';'; else os().put(c); break; case '"': if (inLit) { os() << """; break; } // fall through default: os().put(c); break; } } } const StringC &XmlOutputEventHandler::generalName(const StringC &name, StringC &buf) { if (options_.lower && namecaseGeneral_) { for (size_t i = 0; i < name.size(); i++) { Char c = lowerSubst_[name[i]]; if (c != name[i]) { buf = name; buf[i] = c; for (i++; i < name.size(); i++) lowerSubst_.subst(buf[i]); return buf; } } } return name; } #ifdef SP_NAMESPACE } #endif jade-1.2.1/sx/XmlOutputEventHandler.h100444 764 764 5367 6606574412 15314 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #ifndef XmlOutputEventHandler_INCLUDED #define XmlOutputEventHandler_INCLUDED 1 #ifdef __GNUG__ #pragma interface #endif #include "ErrorCountEventHandler.h" #include "Message.h" #include "OutputCharStream.h" #include "Boolean.h" #include "CharsetInfo.h" #include "ExtendEntityManager.h" #include "Ptr.h" #include "SubstTable.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif class CharsetInfo; class XmlOutputEventHandler : public ErrorCountEventHandler { public: struct Options { Options(); PackedBoolean nlInTag; PackedBoolean id; PackedBoolean notation; PackedBoolean ndata; PackedBoolean comment; PackedBoolean cdata; PackedBoolean lower; PackedBoolean piEscape; PackedBoolean empty; PackedBoolean attlist; }; XmlOutputEventHandler(const Options &, OutputCharStream *, const StringC &encodingName, const Ptr &, const CharsetInfo &, Messenger *); ~XmlOutputEventHandler(); void data(DataEvent *); void startElement(StartElementEvent *); void endElement(EndElementEvent *); void pi(PiEvent *); void startDtd(StartDtdEvent *); void endDtd(EndDtdEvent *); void endProlog(EndPrologEvent *event); void sdataEntity(SdataEntityEvent *); void externalDataEntity(ExternalDataEntityEvent *); void subdocEntity(SubdocEntityEvent *); void commentDecl(CommentDeclEvent *); void markedSectionStart(MarkedSectionStartEvent *); void markedSectionEnd(MarkedSectionEndEvent *); void message(MessageEvent *); void sgmlDecl(SgmlDeclEvent *); private: XmlOutputEventHandler(const XmlOutputEventHandler &); // undefined void operator=(const XmlOutputEventHandler &); // undefined OutputCharStream &os(); void outputData(const Char *s, size_t n, Boolean inLit); void outputCdata(const Char *s, size_t n); void outputExternalId(const EntityDecl &decl); void outputAttribute(const AttributeList &attributes, size_t i); int fsiToUrl(const StringC &fsi, const Location &loc, StringC &url); int filenameToUrl(const StringC &filename, const Location &loc, StringC &url); void maybeStartDoctype(Boolean &doctypeStarted, const Dtd &dtd); void closeCdataSection(); const StringC &generalName(const StringC &name, StringC &buf); Messenger *mgr_; Ptr entityManager_; const CharsetInfo *systemCharset_; OutputCharStream *os_; Boolean inDtd_; Boolean useCdata_; Boolean inCdata_; int nCdataEndMatched_; Options options_; Boolean namecaseGeneral_; SubstTable lowerSubst_; StringC nameBuf_; }; inline OutputCharStream &XmlOutputEventHandler::os() { return *os_; } #ifdef SP_NAMESPACE } #endif #endif /* not XmlOutputEventHandler_INCLUDED */ jade-1.2.1/sx/XmlOutputMessages.h100444 764 764 5425 6606636520 14476 0ustar jjcjjc// This file was automatically generated from .\XmlOutputMessages.msg by ..\msggen.pl. #include "Message.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif struct XmlOutputMessages { // 100 static const MessageType1 sdataEntityReference; // 101 static const MessageType1 externalDataEntityReference; // 102 static const MessageType1 subdocEntityReference; // 103 static const MessageType0 piQuestionLt; // 104 static const MessageType0 piNoName; // 105 static const MessageType1 externalDataNdata; // 106 static const MessageType1 notationAttributes; // 107 static const MessageType1 cannotConvertFsiToUrl; }; const MessageType1 XmlOutputMessages::sdataEntityReference( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 100 #ifndef SP_NO_MESSAGE_TEXT ,"reference to internal SDATA entity %1 not allowed in XML" #endif ); const MessageType1 XmlOutputMessages::externalDataEntityReference( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 101 #ifndef SP_NO_MESSAGE_TEXT ,"reference to external data entity %1 not allowed in XML" #endif ); const MessageType1 XmlOutputMessages::subdocEntityReference( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 102 #ifndef SP_NO_MESSAGE_TEXT ,"reference to subdocument entity %1 not allowed in XML" #endif ); const MessageType0 XmlOutputMessages::piQuestionLt( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 103 #ifndef SP_NO_MESSAGE_TEXT ,"processing instruction containing \"?>\" not allowed in XML" #endif ); const MessageType0 XmlOutputMessages::piNoName( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 104 #ifndef SP_NO_MESSAGE_TEXT ,"XML requires processing instructions to start with a name" #endif ); const MessageType1 XmlOutputMessages::externalDataNdata( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 105 #ifndef SP_NO_MESSAGE_TEXT ,"external data entity %1 is CDATA or SDATA, but XML allows only NDATA" #endif ); const MessageType1 XmlOutputMessages::notationAttributes( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 106 #ifndef SP_NO_MESSAGE_TEXT ,"attributes were defined for notation %1; not allowed in XML" #endif ); const MessageType1 XmlOutputMessages::cannotConvertFsiToUrl( MessageType::warning, #ifdef BUILD_LIBSP MessageFragment::libModule, #else MessageFragment::appModule, #endif 107 #ifndef SP_NO_MESSAGE_TEXT ,"cannot convert formal system identifier %1 to URL" #endif ); #ifdef SP_NAMESPACE } #endif jade-1.2.1/sx/XmlOutputMessages.msg100444 764 764 1374 6606574412 15035 0ustar jjcjjc# Copyright (c) 1997 James Clark # See the file COPYING for copying permission. # XmlOutput message definitions =100 W1+sdataEntityReference++reference to internal SDATA entity %1 not allowed in XML W1+externalDataEntityReference++reference to external data entity %1 not allowed in XML W1+subdocEntityReference++reference to subdocument entity %1 not allowed in XML W0+piQuestionLt++processing instruction containing "?>" not allowed in XML W0+piNoName++XML requires processing instructions to start with a name W1+externalDataNdata++external data entity %1 is CDATA or SDATA, but XML allows only NDATA W1+notationAttributes++attributes were defined for notation %1; not allowed in XML W1+cannotConvertFsiToUrl++cannot convert formal system identifier %1 to URL jade-1.2.1/sx/XmlOutputMessages.rc100444 764 764 1056 6606636520 14647 0ustar jjcjjcSTRINGTABLE BEGIN 100, "reference to internal SDATA entity %1 not allowed in XML" 101, "reference to external data entity %1 not allowed in XML" 102, "reference to subdocument entity %1 not allowed in XML" 103, "processing instruction containing ""?>"" not allowed in XML" 104, "XML requires processing instructions to start with a name" 105, "external data entity %1 is CDATA or SDATA, but XML allows only NDATA" 106, "attributes were defined for notation %1; not allowed in XML" 107, "cannot convert formal system identifier %1 to URL" END jade-1.2.1/sx/sx.cxx100444 764 764 6004 6606574412 12025 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #include "config.h" #include "OutputCharStream.h" #include "ParserApp.h" #include "macros.h" #include "XmlOutputEventHandler.h" #include "SxMessages.h" #include "sptchar.h" #include #ifdef SP_NAMESPACE using namespace SP_NAMESPACE; #endif static struct { const ParserApp::AppChar *name; PackedBoolean XmlOutputEventHandler::Options::*ptr; } outputOptionsTable[] = { { SP_T("nl-in-tag"), &XmlOutputEventHandler::Options::nlInTag }, { SP_T("id"), &XmlOutputEventHandler::Options::id }, { SP_T("notation"), &XmlOutputEventHandler::Options::notation }, { SP_T("ndata"), &XmlOutputEventHandler::Options::ndata }, { SP_T("cdata"), &XmlOutputEventHandler::Options::cdata }, { SP_T("comment"), &XmlOutputEventHandler::Options::comment }, { SP_T("lower"), &XmlOutputEventHandler::Options::lower }, { SP_T("pi-escape"), &XmlOutputEventHandler::Options::piEscape }, { SP_T("empty"), &XmlOutputEventHandler::Options::empty }, { SP_T("attlist"), &XmlOutputEventHandler::Options::attlist }, }; class SxApp : public ParserApp { public: SxApp(); ErrorCountEventHandler *makeEventHandler(); void processOption(AppChar opt, const AppChar *arg); int processSysid(const StringC &); private: XmlOutputEventHandler::Options outputOptions_; StringC encodingName_; }; SP_DEFINE_APP(SxApp) SxApp::SxApp() : ParserApp("unicode") { outputCodingSystem_ = codingSystemKit_->makeCodingSystem("UTF-8", 0); registerOption('x', SP_T("xml_output_option")); outputOptions_.nlInTag = 1; } int SxApp::processSysid(const StringC &sysid) { if (outputOptions_.comment) options_.eventsWanted.addCommentDecls(); if (outputOptions_.notation) options_.warnNotationSystemId = 1; if (outputOptions_.cdata) options_.eventsWanted.addMarkedSections(); return ParserApp::processSysid(sysid); } void SxApp::processOption(AppChar opt, const AppChar *arg) { switch (opt) { case 'x': { PackedBoolean value; if (arg[0] == 'n' && arg[1] == 'o' && arg[2] == '-') { value = 0; arg += 3; } else value = 1; Boolean found = 0; for (size_t i = 0; i < SIZEOF(outputOptionsTable); i++) { if (tcscmp(outputOptionsTable[i].name, arg) == 0) { found = 1; outputOptions_.*(outputOptionsTable[i].ptr) = value; break; } } if (!found) message(SxMessages::unknownOutputOption, StringMessageArg(convertInput(arg))); break; } case 'b': { // Need to generate appropriate encoding declaration. ParserApp::processOption(opt, arg); if (outputCodingSystem_) encodingName_ = convertInput(arg); else encodingName_.resize(0); break; } default: ParserApp::processOption(opt, arg); break; } } ErrorCountEventHandler *SxApp::makeEventHandler() { return new XmlOutputEventHandler(outputOptions_, new RecordOutputCharStream(makeStdOut()), encodingName_, entityManager(), systemCharset(), this); } jade-1.2.1/sx/sx.dsp100444 764 764 15063 6605017044 12026 0ustar jjcjjc# Microsoft Developer Studio Project File - Name="sx" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=sx - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "sx.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "sx.mak" CFG="sx - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "sx - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "sx - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "sx - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"..\bin\sx.exe" !ELSEIF "$(CFG)" == "sx - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\Debug" # PROP BASE Intermediate_Dir ".\Debug" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir ".\Debug" # PROP Intermediate_Dir ".\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D SP_NAMESPACE=James_Clark_SP /D "SP_MULTI_BYTE" /YX /FD /c # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\dbgbin\sx.exe" !ENDIF # Begin Target # Name "sx - Win32 Release" # Name "sx - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # Begin Source File SOURCE=.\sx.cxx # End Source File # Begin Source File SOURCE=.\sx_inst.cxx # End Source File # Begin Source File SOURCE=.\sx_inst.m4 !IF "$(CFG)" == "sx - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\sx_inst.m4 InputName=sx_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ELSEIF "$(CFG)" == "sx - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\sx_inst.m4 InputName=sx_inst "$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" del /f $(InputDir)\$(InputName).cxx m4 ..\lib\instmac.m4 $(InputPath) >$(InputDir)\$(InputName).cxx attrib +r $(InputDir)\$(InputName).cxx # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\SxMessages.msg !IF "$(CFG)" == "sx - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\SxMessages.msg InputName=SxMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "sx - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\SxMessages.msg InputName=SxMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\XmlOutputEventHandler.cxx # End Source File # Begin Source File SOURCE=.\XmlOutputMessages.msg !IF "$(CFG)" == "sx - Win32 Release" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\XmlOutputMessages.msg InputName=XmlOutputMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ELSEIF "$(CFG)" == "sx - Win32 Debug" # Begin Custom Build - Processing $(InputPath) InputDir=. InputPath=.\XmlOutputMessages.msg InputName=XmlOutputMessages "$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -w ..\msggen.pl $(InputPath) # End Custom Build !ENDIF # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # Begin Source File SOURCE=.\SxMessages.h # End Source File # Begin Source File SOURCE=.\XmlOutputEventHandler.h # End Source File # Begin Source File SOURCE=.\XmlOutputMessages.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # Begin Source File SOURCE=.\sx.rc # End Source File # Begin Source File SOURCE=.\SxMessages.rc # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\XmlOutputMessages.rc # PROP BASE Exclude_From_Build 1 # PROP Exclude_From_Build 1 # End Source File # End Group # End Target # End Project jade-1.2.1/sx/sx.rc100444 764 764 214 6606574412 11604 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #include "XmlOutputMessages.rc" #include "SxMessages.rc" jade-1.2.1/sx/sx_inst.cxx100444 764 764 1234 6606636520 13061 0ustar jjcjjc#ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef SP_NAMESPACE } #endif // Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Owner.h" #undef SP_DEFINE_TEMPLATES #include "InputSource.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif #ifdef __DECCXX #pragma define_template Owner #else #ifdef __xlC__ #pragma define(Owner) #else #ifdef SP_ANSI_CLASS_INST template class Owner; #else typedef Owner Dummy_0; #endif #endif #endif #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/sx/sx_inst.m4100444 764 764 566 6606574412 12567 0ustar jjcjjc// Copyright (c) 1997 James Clark // See the file COPYING for copying permission. #include "config.h" #ifdef SP_MANUAL_INST #define SP_DEFINE_TEMPLATES #include "Owner.h" #undef SP_DEFINE_TEMPLATES #include "InputSource.h" #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif __instantiate(Owner) #ifdef SP_NAMESPACE } #endif #endif /* SP_MANUAL_INST */ jade-1.2.1/unicode/ 40775 764 764 0 6610553420 11541 5ustar jjcjjcjade-1.2.1/unicode/catalog100444 764 764 165 6606574412 13162 0ustar jjcjjcPUBLIC "-//SGML Open:TR95xx//SYNTAX Extended (ISO/IEC 10646-1:1993 repertoire)//EN" unicode.syn SGMLDECL unicode.sd jade-1.2.1/unicode/demo.sgm100444 764 764 170 6606574412 13255 0ustar jjcjjc ]> jade-1.2.1/unicode/gensyntax.pl100444 764 764 10037 6606574412 14241 0ustar jjcjjc#! /usr/bin/perl # Feed this ftp://unicode.org/MappingTables/UnicodeData-1.1.4.txt. $compat_start = 0xfb00; # Small Kana $uc[12353] = 12354; $is_uc[12354] = 1; $uc[12355] = 12356; $is_uc[12356] = 1; $uc[12357] = 12358; $is_uc[12358] = 1; $uc[12359] = 12360; $is_uc[12360] = 1; $uc[12361] = 12362; $is_uc[12362] = 1; $uc[12387] = 12388; $is_uc[12388] = 1; $uc[12419] = 12420; $is_uc[12420] = 1; $uc[12421] = 12422; $is_uc[12422] = 1; $uc[12423] = 12424; $is_uc[12424] = 1; $uc[12430] = 12430; $is_uc[12430] = 1; $uc[12449] = 12450; $is_uc[12450] = 1; $uc[12451] = 12452; $is_uc[12452] = 1; $uc[12453] = 12454; $is_uc[12454] = 1; $uc[12455] = 12456; $is_uc[12456] = 1; $uc[12457] = 12458; $is_uc[12458] = 1; $uc[12483] = 12484; $is_uc[12484] = 1; $uc[12515] = 12516; $is_uc[12516] = 1; $uc[12517] = 12518; $is_uc[12518] = 1; $uc[12519] = 12520; $is_uc[12520] = 1; $uc[12526] = 12527; $is_uc[12527] = 1; while (<>) { next if /^#/; @F = split(';'); $code = hex($F[0]); next if $code < 0x200c && $F[2] eq "Cc"; $type[$code] = $F[2]; # 0x17f maps to 0x53, but SGML doesn't allow that. if ($F[12] && hex($F[12]) > 128) { $uc[$code] = hex($F[12]); $is_uc[hex($F[12])] = 1; } if ($F[2] eq "Zs") { $name[$code] = $F[1]; } if ($code == 0x4e00) { foreach $code (0x4e00 .. 0x9fa5) { $type[$code] = $F[2]; } foreach $code (0xf900 .. 0xfa2e) { $type[$code] = $F[2]; } } } print <= 0x200c $is_sr{"Cc"} = 1; # >= 0x200c $is_sr{"Pd"} = 1; $is_sr{"Ps"} = 1; $is_sr{"Pe"} = 1; $is_sr{"Po"} = 1; $is_sr{"Sm"} = 1; $is_sr{"Sc"} = 1; $is_sr{"So"} = 1; $is_sr{"Zs"} = 1; $is_sr{"Zl"} = 1; $is_sr{"Zp"} = 1; print "LCNMSTRT\n"; foreach $code (128 .. $#type) { if ($uc[$code] && $code < $compat_start) { &output($code); } } &flush(); print "UCNMSTRT\n"; foreach $code (128 .. $#type) { if ($uc[$code] && $code < $compat_start) { &output($uc[$code]); } } &flush(); print "NAMESTRT\n"; foreach $code (128 .. $#type) { if (!$uc[$code] && !$is_uc[$code] && $is_nmstrt{$type[$code]} && $code < $compat_start) { &output($code); } } &flush(); print "LCNMCHAR\n"; &output(ord("-")); &output(ord(".")); &flush(); print "UCNMCHAR\n"; &output(ord("-")); &output(ord(".")); &flush(); print "NAMECHAR\n"; foreach $code (128 .. $#type) { if ($is_nmchar{$type[$code]} && $code < $compat_start) { &output($code); } } &flush(); print < 0 && $base + $pending == $ch) { $pending++; } else { &flush; $base = $ch; $pending = 1; } } sub flush { if ($pending > 0) { printf("%d", $base); if ($pending > 1) { if ($pending > 2) { print "-"; } else { print "\n"; } printf("%d", $base + ($pending - 1)); } print "\n"; $count += $pending; $pending = 0; } } jade-1.2.1/unicode/unicode.sd100444 764 764 1364 6606574412 13625 0ustar jjcjjc jade-1.2.1/unicode/unicode.syn100444 764 764 20400 6606574412 14040 0ustar jjcjjcSHUNCHAR CONTROLS BASESET "ISO Registration Number 176//CHARSET ISO/IEC 10646-1:1993 UCS-2 with implementation level 3//ESC 2/5 2/15 4/5" DESCSET 0 65536 0 -- 16 bit -- FUNCTION RE 13 RS 10 SPACE 32 TAB SEPCHAR 9 "NO-BREAK-SPACE" SEPCHAR 160 "EN-QUAD" SEPCHAR 8192 "EM-QUAD" SEPCHAR 8193 "EN-SPACE" SEPCHAR 8194 "EM-SPACE" SEPCHAR 8195 "THREE-PER-EM-SPACE" SEPCHAR 8196 "FOUR-PER-EM-SPACE" SEPCHAR 8197 "SIX-PER-EM-SPACE" SEPCHAR 8198 "FIGURE-SPACE" SEPCHAR 8199 "PUNCTUATION-SPACE" SEPCHAR 8200 "THIN-SPACE" SEPCHAR 8201 "HAIR-SPACE" SEPCHAR 8202 "ZERO-WIDTH-SPACE" SEPCHAR 8203 "IDEOGRAPHIC-SPACE" SEPCHAR 12288 "ZERO-WIDTH-NO-BREAK-SPACE" SEPCHAR 65279 NAMING LCNMSTRT 224-246 248-255 257 259 261 263 265 267 269 271 273 275 277 279 281 283 285 287 289 291 293 295 297 299 301 303 307 309 311 314 316 318 320 322 324 326 328 331 333 335 337 339 341 343 345 347 349 351 353 355 357 359 361 363 365 367 369 371 373 375 378 380 382 387 389 392 396 402 409 417 419 421 424 429 432 436 438 441 445 453 454 456 457 459 460 462 464 466 468 470 472 474 476 479 481 483 485 487 489 491 493 495 498 499 501 507 509 511 513 515 517 519 521 523 525 527 529 531 533 535 595 596 599-601 603 608 611 616 617 623 626 643 648 650 651 658 940-943 945-961 963-974 976 977 981 982 995 997 999 1001 1003 1005 1007-1009 1072-1103 1105-1116 1118 1119 1121 1123 1125 1127 1129 1131 1133 1135 1137 1139 1141 1143 1145 1147 1149 1151 1153 1169 1171 1173 1175 1177 1179 1181 1183 1185 1187 1189 1191 1193 1195 1197 1199 1201 1203 1205 1207 1209 1211 1213 1215 1218 1220 1224 1228 1233 1235 1237 1239 1241 1243 1245 1247 1249 1251 1253 1255 1257 1259 1263 1265 1267 1269 1273 1377-1414 7681 7683 7685 7687 7689 7691 7693 7695 7697 7699 7701 7703 7705 7707 7709 7711 7713 7715 7717 7719 7721 7723 7725 7727 7729 7731 7733 7735 7737 7739 7741 7743 7745 7747 7749 7751 7753 7755 7757 7759 7761 7763 7765 7767 7769 7771 7773 7775 7777 7779 7781 7783 7785 7787 7789 7791 7793 7795 7797 7799 7801 7803 7805 7807 7809 7811 7813 7815 7817 7819 7821 7823 7825 7827 7829 7841 7843 7845 7847 7849 7851 7853 7855 7857 7859 7861 7863 7865 7867 7869 7871 7873 7875 7877 7879 7881 7883 7885 7887 7889 7891 7893 7895 7897 7899 7901 7903 7905 7907 7909 7911 7913 7915 7917 7919 7921 7923 7925 7927 7929 7936-7943 7952-7957 7968-7975 7984-7991 8000-8005 8017 8019 8021 8023 8032-8039 8048-8061 8064-8071 8080-8087 8096-8103 8112 8113 8115 8131 8144 8145 8160 8161 8165 8179 8560-8575 9424-9449 12353 12355 12357 12359 12361 12387 12419 12421 12423 12430 12449 12451 12453 12455 12457 12483 12515 12517 12519 12526 UCNMSTRT 192-214 216-222 376 256 258 260 262 264 266 268 270 272 274 276 278 280 282 284 286 288 290 292 294 296 298 300 302 306 308 310 313 315 317 319 321 323 325 327 330 332 334 336 338 340 342 344 346 348 350 352 354 356 358 360 362 364 366 368 370 372 374 377 379 381 386 388 391 395 401 408 416 418 420 423 428 431 435 437 440 444 452 452 455 455 458 458 461 463 465 467 469 471 473 475 478 480 482 484 486 488 490 492 494 497 497 500 506 508 510 512 514 516 518 520 522 524 526 528 530 532 534 385 390 394 398-400 403 404 407 406 412 413 425 430 433 434 439 902 904-906 913-929 931-939 908 910 911 914 920 934 928 994 996 998 1000 1002 1004 1006 922 929 1040-1071 1025-1036 1038 1039 1120 1122 1124 1126 1128 1130 1132 1134 1136 1138 1140 1142 1144 1146 1148 1150 1152 1168 1170 1172 1174 1176 1178 1180 1182 1184 1186 1188 1190 1192 1194 1196 1198 1200 1202 1204 1206 1208 1210 1212 1214 1217 1219 1223 1227 1232 1234 1236 1238 1240 1242 1244 1246 1248 1250 1252 1254 1256 1258 1262 1264 1266 1268 1272 1329-1366 7680 7682 7684 7686 7688 7690 7692 7694 7696 7698 7700 7702 7704 7706 7708 7710 7712 7714 7716 7718 7720 7722 7724 7726 7728 7730 7732 7734 7736 7738 7740 7742 7744 7746 7748 7750 7752 7754 7756 7758 7760 7762 7764 7766 7768 7770 7772 7774 7776 7778 7780 7782 7784 7786 7788 7790 7792 7794 7796 7798 7800 7802 7804 7806 7808 7810 7812 7814 7816 7818 7820 7822 7824 7826 7828 7840 7842 7844 7846 7848 7850 7852 7854 7856 7858 7860 7862 7864 7866 7868 7870 7872 7874 7876 7878 7880 7882 7884 7886 7888 7890 7892 7894 7896 7898 7900 7902 7904 7906 7908 7910 7912 7914 7916 7918 7920 7922 7924 7926 7928 7944-7951 7960-7965 7976-7983 7992-7999 8008-8013 8025 8027 8029 8031 8040-8047 8122 8123 8136-8139 8154 8155 8184 8185 8170 8171 8186 8187 8072-8079 8088-8095 8104-8111 8120 8121 8124 8140 8152 8153 8168 8169 8172 8188 8544-8559 9398-9423 12354 12356 12358 12360 12362 12388 12420 12422 12424 12430 12450 12452 12454 12456 12458 12484 12516 12518 12520 12527 NAMESTRT 223 304 305 312 329 383 384 393 397 405 410 411 414 415 422 426 427 442 443 446-451 477 496 592-594 597 598 602 604-607 609 610 612-615 618-622 624 625 627-642 644-647 649 652-657 659-680 912 944 962 978-980 986 988 990 992 1010 1011 1216 1415 1488-1514 1520-1522 1569-1594 1600-1610 1649-1719 1722-1726 1728-1742 1744-1747 1749 2309-2361 2392-2401 2437-2444 2447 2448 2451-2472 2474-2480 2482 2486-2489 2524 2525 2527-2529 2544 2545 2565-2570 2575 2576 2579-2600 2602-2608 2610 2611 2613 2614 2616 2617 2649-2652 2654 2693-2699 2701 2703-2705 2707-2728 2730-2736 2738 2739 2741-2745 2784 2821-2828 2831 2832 2835-2856 2858-2864 2866 2867 2870-2873 2908 2909 2911-2913 2949-2954 2958-2960 2962-2965 2969 2970 2972 2974 2975 2979 2980 2984-2986 2990-2997 2999-3001 3056-3058 3077-3084 3086-3088 3090-3112 3114-3123 3125-3129 3168 3169 3205-3212 3214-3216 3218-3240 3242-3251 3253-3257 3294 3296 3297 3333-3340 3342-3344 3346-3368 3370-3385 3424 3425 3585-3632 3634 3635 3648-3654 3663 3674 3675 3713 3714 3716 3719 3720 3722 3725 3732-3735 3737-3743 3745-3747 3749 3751 3754 3755 3757 3758 3760 3762 3763 3773 3776-3780 4256-4293 4304-4342 4352-4441 4447-4514 4520-4601 7830-7834 8016 8018 8020 8022 8114 8116 8118 8119 8130 8132 8134 8135 8146 8147 8150 8151 8162-8164 8166 8167 8178 8180 8182 8183 8204-8207 8234-8238 8298-8303 12295 12321-12329 12363-12386 12389-12418 12425-12429 12431-12436 12459-12482 12485-12514 12521-12525 12528-12538 12549-12588 12593-12686 13312-40869 63744-64046 LCNMCHAR 45 46 UCNMCHAR 45 46 NAMECHAR 168 175 180 184 688-734 736-745 768-837 864 865 890 900 901 1155-1158 1369 1456-1465 1467-1469 1471 1473 1474 1611-1618 1632-1641 1648 1750-1768 1770-1773 1776-1785 2305-2307 2364 2366-2381 2385-2388 2402 2403 2406-2415 2433-2435 2492 2494-2500 2503 2504 2507-2509 2519 2530 2531 2534-2543 2562 2620 2622-2626 2631 2632 2635-2637 2662-2673 2689-2691 2748 2750-2757 2759-2761 2763-2765 2790-2799 2817-2819 2876 2878-2883 2887 2888 2891-2893 2902 2903 2918-2927 2946 2947 3006-3010 3014-3016 3018-3021 3031 3047-3055 3073-3075 3134-3140 3142-3144 3146-3149 3157 3158 3174-3183 3202 3203 3262-3268 3270-3272 3274-3277 3285 3286 3302-3311 3330 3331 3390-3395 3398-3400 3402-3405 3415 3430-3439 3633 3636-3642 3655-3662 3664-3673 3761 3764-3769 3771 3772 3784-3789 3792-3801 8125-8129 8141-8143 8157-8159 8173-8175 8189 8190 8400-8417 9332-9340 9352-9360 9450 12330-12335 12441-12446 12540-12542 NAMECASE GENERAL YES ENTITY NO DELIM GENERAL SGMLREF SHORTREF SGMLREF 160-167 169-174 176-179 181-183 185-191 215 247 884 885 894 903 1154 1370-1375 1417 1470 1472 1475 1523 1524 1548 1563 1567 1642-1645 1748 1769 2365 2384 2404 2405 2416 2546-2554 2674-2676 2749 2768 2877 2928 3647 3759 3782 3804 3805 4347 8192-8238 8240-8262 8298-8304 8308-8334 8352-8362 8448-8504 8531-8578 8592-8682 8704-8945 8960 8962-9082 9216-9252 9280-9290 9312-9331 9341-9351 9361-9449 9472-9621 9632-9711 9728-9747 9754-9839 9985-9988 9990-9993 9996-10023 10025-10059 10061 10063-10066 10070 10072-10078 10081-10087 10102-10132 10136-10159 10161-10174 12288-12294 12296-12320 12336-12343 12351 12539 12688-12703 12800-12828 12832-12867 12896-12923 12927-12976 12992-13003 13008-13054 13056-13174 13179-13277 13280-13310 64297 64830 64831 65072-65092 65097-65106 65108-65126 65128-65131 65279 65281-65295 65306-65312 65339-65344 65371-65374 65377-65381 65392 65438 65439 65504-65510 65512-65518 65533 NAMES SGMLREF QUANTITY SGMLREF -- To be determined -- ATTSPLEN 1920 -- ?? -- LITLEN 240 -- ?? -- NAMELEN 240 -- ?? -- PILEN 1920 -- ?? -- TAGLEN 1920 -- ?? --