|
Packit |
8a864e |
// Copyright (c) 1994 James Clark
|
|
Packit |
8a864e |
// See the file COPYING for copying permission.
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
#ifndef ExternalId_INCLUDED
|
|
Packit |
8a864e |
#define ExternalId_INCLUDED 1
|
|
Packit |
8a864e |
#ifdef __GNUG__
|
|
Packit |
8a864e |
#pragma interface
|
|
Packit |
8a864e |
#endif
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
#include "Boolean.h"
|
|
Packit |
8a864e |
#include "StringC.h"
|
|
Packit |
8a864e |
#include "Text.h"
|
|
Packit |
8a864e |
#include "types.h"
|
|
Packit |
8a864e |
#include "Message.h"
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
#ifdef SP_NAMESPACE
|
|
Packit |
8a864e |
namespace SP_NAMESPACE {
|
|
Packit |
8a864e |
#endif
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
class CharsetInfo;
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
class SP_API PublicId {
|
|
Packit |
8a864e |
public:
|
|
Packit |
8a864e |
enum Type {
|
|
Packit |
8a864e |
informal,
|
|
Packit |
8a864e |
fpi,
|
|
Packit |
8a864e |
urn
|
|
Packit |
8a864e |
};
|
|
Packit |
8a864e |
enum TextClass {
|
|
Packit |
8a864e |
CAPACITY,
|
|
Packit |
8a864e |
CHARSET,
|
|
Packit |
8a864e |
DOCUMENT,
|
|
Packit |
8a864e |
DTD,
|
|
Packit |
8a864e |
ELEMENTS,
|
|
Packit |
8a864e |
ENTITIES,
|
|
Packit |
8a864e |
LPD,
|
|
Packit |
8a864e |
NONSGML,
|
|
Packit |
8a864e |
NOTATION,
|
|
Packit |
8a864e |
SD,
|
|
Packit |
8a864e |
SHORTREF,
|
|
Packit |
8a864e |
SUBDOC,
|
|
Packit |
8a864e |
SYNTAX,
|
|
Packit |
8a864e |
TEXT
|
|
Packit |
8a864e |
};
|
|
Packit |
8a864e |
enum OwnerType {
|
|
Packit |
8a864e |
ISO,
|
|
Packit |
8a864e |
registered,
|
|
Packit |
8a864e |
unregistered
|
|
Packit |
8a864e |
};
|
|
Packit |
8a864e |
PublicId();
|
|
Packit |
8a864e |
// FPI parts
|
|
Packit |
8a864e |
Boolean getOwnerType(OwnerType &) const;
|
|
Packit |
8a864e |
Boolean getOwner(StringC &) const;
|
|
Packit |
8a864e |
Boolean getTextClass(TextClass &) const;
|
|
Packit |
8a864e |
Boolean getUnavailable(Boolean &) const;
|
|
Packit |
8a864e |
Boolean getDescription(StringC &) const;
|
|
Packit |
8a864e |
Boolean getLanguage(StringC &) const;
|
|
Packit |
8a864e |
Boolean getDesignatingSequence(StringC &) const;
|
|
Packit |
8a864e |
Boolean getDisplayVersion(StringC &) const;
|
|
Packit |
8a864e |
// URN parts
|
|
Packit |
8a864e |
Boolean getNamespaceIdentifier(StringC &) const;
|
|
Packit |
8a864e |
Boolean getNamespaceSpecificString(StringC &) const;
|
|
Packit |
8a864e |
// The return value describes what has been successfully parsed
|
|
Packit |
8a864e |
// charset describes the character set to use for parsing the
|
|
Packit |
8a864e |
// id.
|
|
Packit |
8a864e |
Type init(Text &, const CharsetInfo &, Char space,
|
|
Packit |
8a864e |
const MessageType1 *&fpierror,
|
|
Packit |
8a864e |
const MessageType1 *&urnerror);
|
|
Packit |
8a864e |
const StringC &string() const;
|
|
Packit |
8a864e |
const Text &text() const;
|
|
Packit |
8a864e |
const Type type() const { return type_; }
|
|
Packit |
8a864e |
private:
|
|
Packit |
8a864e |
Boolean initFpi(const StringC &, const CharsetInfo &, Char,
|
|
Packit |
8a864e |
const MessageType1 *&);
|
|
Packit |
8a864e |
Boolean initUrn(const StringC &, const CharsetInfo &, Char,
|
|
Packit |
8a864e |
const MessageType1 *&);
|
|
Packit |
8a864e |
static Boolean nextField(Char solidus,
|
|
Packit |
8a864e |
const Char *&next,
|
|
Packit |
8a864e |
const Char *lim,
|
|
Packit |
8a864e |
const Char *&fieldStart,
|
|
Packit |
8a864e |
size_t &fieldLength,
|
|
Packit |
8a864e |
Boolean dup = 1);
|
|
Packit |
8a864e |
static Boolean lookupTextClass(const StringC &, const CharsetInfo &,
|
|
Packit |
8a864e |
TextClass &);
|
|
Packit |
8a864e |
static const char *const textClasses[];
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
Type type_;
|
|
Packit |
8a864e |
OwnerType ownerType_;
|
|
Packit |
8a864e |
StringC owner_;
|
|
Packit |
8a864e |
TextClass textClass_;
|
|
Packit |
8a864e |
PackedBoolean unavailable_;
|
|
Packit |
8a864e |
StringC description_;
|
|
Packit |
8a864e |
StringC languageOrDesignatingSequence_;
|
|
Packit |
8a864e |
PackedBoolean haveDisplayVersion_;
|
|
Packit |
8a864e |
StringC displayVersion_;
|
|
Packit |
8a864e |
Text text_;
|
|
Packit |
8a864e |
StringC nid_;
|
|
Packit |
8a864e |
StringC nss_;
|
|
Packit |
8a864e |
};
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
class SP_API ExternalId {
|
|
Packit |
8a864e |
public:
|
|
Packit |
8a864e |
ExternalId();
|
|
Packit |
8a864e |
const StringC *systemIdString() const;
|
|
Packit |
8a864e |
const StringC *publicIdString() const;
|
|
Packit |
8a864e |
const StringC &effectiveSystemId() const;
|
|
Packit |
8a864e |
const Text *systemIdText() const;
|
|
Packit |
8a864e |
const Text *publicIdText() const;
|
|
Packit |
8a864e |
const PublicId *publicId() const;
|
|
Packit |
8a864e |
void setSystem(Text &);
|
|
Packit |
8a864e |
void setEffectiveSystem(StringC &);
|
|
Packit |
8a864e |
// The return value tells what has been successfully parsed.
|
|
Packit |
8a864e |
// charset describes the character set to use for parsing the
|
|
Packit |
8a864e |
// id.
|
|
Packit |
8a864e |
PublicId::Type setPublic(Text &, const CharsetInfo &, Char space,
|
|
Packit |
8a864e |
const MessageType1 *&fpierror,
|
|
Packit |
8a864e |
const MessageType1 *&urnerror);
|
|
Packit |
8a864e |
void setLocation(const Location &);
|
|
Packit |
8a864e |
// location of keyword
|
|
Packit |
8a864e |
const Location &location() const;
|
|
Packit |
8a864e |
private:
|
|
Packit |
8a864e |
PackedBoolean haveSystem_;
|
|
Packit |
8a864e |
PackedBoolean havePublic_;
|
|
Packit |
8a864e |
Text system_;
|
|
Packit |
8a864e |
PublicId public_;
|
|
Packit |
8a864e |
Location loc_;
|
|
Packit |
8a864e |
StringC effectiveSystem_;
|
|
Packit |
8a864e |
};
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
inline
|
|
Packit |
8a864e |
const StringC &PublicId::string() const
|
|
Packit |
8a864e |
{
|
|
Packit |
8a864e |
return text_.string();
|
|
Packit |
8a864e |
}
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
inline
|
|
Packit |
8a864e |
const Text &PublicId::text() const
|
|
Packit |
8a864e |
{
|
|
Packit |
8a864e |
return text_;
|
|
Packit |
8a864e |
}
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
inline
|
|
Packit |
8a864e |
const StringC *ExternalId::systemIdString() const
|
|
Packit |
8a864e |
{
|
|
Packit |
8a864e |
return haveSystem_ ? &system_.string() : 0;
|
|
Packit |
8a864e |
}
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
inline
|
|
Packit |
8a864e |
const StringC *ExternalId::publicIdString() const
|
|
Packit |
8a864e |
{
|
|
Packit |
8a864e |
return havePublic_ ? &public_.string() : 0;
|
|
Packit |
8a864e |
}
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
inline
|
|
Packit |
8a864e |
const Text *ExternalId::systemIdText() const
|
|
Packit |
8a864e |
{
|
|
Packit |
8a864e |
return haveSystem_ ? &system_ : 0;
|
|
Packit |
8a864e |
}
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
inline
|
|
Packit |
8a864e |
const Text *ExternalId::publicIdText() const
|
|
Packit |
8a864e |
{
|
|
Packit |
8a864e |
return havePublic_ ? &public_.text() : 0;
|
|
Packit |
8a864e |
}
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
inline
|
|
Packit |
8a864e |
const PublicId *ExternalId::publicId() const
|
|
Packit |
8a864e |
{
|
|
Packit |
8a864e |
return havePublic_ ? &public_ : 0;
|
|
Packit |
8a864e |
}
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
inline
|
|
Packit |
8a864e |
const Location &ExternalId::location() const
|
|
Packit |
8a864e |
{
|
|
Packit |
8a864e |
return loc_;
|
|
Packit |
8a864e |
}
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
inline
|
|
Packit |
8a864e |
const StringC &ExternalId::effectiveSystemId() const
|
|
Packit |
8a864e |
{
|
|
Packit |
8a864e |
return effectiveSystem_;
|
|
Packit |
8a864e |
}
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
inline
|
|
Packit |
8a864e |
void ExternalId::setEffectiveSystem(StringC &str)
|
|
Packit |
8a864e |
{
|
|
Packit |
8a864e |
str.swap(effectiveSystem_);
|
|
Packit |
8a864e |
}
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
#ifdef SP_NAMESPACE
|
|
Packit |
8a864e |
}
|
|
Packit |
8a864e |
#endif
|
|
Packit |
8a864e |
|
|
Packit |
8a864e |
#endif /* not ExternalId_INCLUDED */
|