SgmlsEventHandler.cxx revision 7c478bd95313f5f23a4c958a745db2134aa03244
// Copyright (c) 1994 James Clark
// See the file COPYING for copying permission.
#pragma ident "%Z%%M% %I% %E% SMI"
#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 char space = ' ';
inline
void SgmlsEventHandler::startData()
{
if (!haveData_) {
haveData_ = 1;
}
}
inline
void SgmlsEventHandler::flushData()
{
if (haveData_) {
haveData_ = 0;
}
}
inline
{
if (outputLine_)
}
unsigned outputFlags)
{
}
{
flushData();
if (errorCount() == 0)
delete os_;
}
{
}
{
flushData();
os() << appinfoCode;
outputString(*str);
}
delete event;
}
{
if (outputEntity_) {
flushData();
for (;;) {
if (!entity)
break;
}
}
haveLinkProcess_ = 1;
flushData();
}
flushData();
&event->simpleLinkNames()[i]);
}
delete event;
}
{
if (outputEntity_) {
flushData();
}
delete event;
}
{
delete event;
}
{
delete event;
}
{
startData();
delete event;
}
{
startData();
os() << "\\|";
os() << "\\|";
delete event;
}
{
flushData();
delete event;
}
{
if (outputNonSgml_) {
startData();
}
delete event;
}
{
flushData();
if (haveLinkProcess_) {
const AttributeList *linkAttributes;
const ResultElementSpec *resultElementSpec;
event->attributes(),
*this, // Messenger &
if (linkAttributes)
}
delete event;
}
char code,
{
for (size_t i = 0; i < nAttributes; i++) {
if (value) {
case AttributeValue::implied:
break;
case AttributeValue::tokenized:
{
const char *typeString = "TOKEN";
if (semantics) {
typeString = "NOTATION";
}
else {
if (nEntities) {
typeString = "ENTITY";
if (!outputEntity_)
if (!markEntity(entity))
}
}
}
}
typeString = "ID";
}
break;
case AttributeValue::cdata:
{
os() << "CDATA ";
const Char *p;
switch (type) {
outputString(p, length);
break;
os() << "\\|";
outputString(p, length);
os() << "\\|";
break;
if (outputNonSgml_)
break;
default:
break;
}
}
break;
}
}
}
}
char code,
{
if (ownerName)
}
{
flushData();
if (haveLinkProcess_)
delete event;
}
{
flushData();
delete event;
}
{
flushData();
delete event;
}
{
if (internalEntity)
else {
break;
break;
break;
default:
}
}
}
{
const char *typeString;
typeString = "CDATA";
break;
typeString = "SDATA";
break;
typeString = "NDATA";
break;
default:
}
<< space << typeString
<< nl;
}
{
}
{
}
{
const char *s;
s = "SDATA";
break;
s = "CDATA";
break;
s = "TEXT";
break;
s = "PI";
break;
default:
}
}
{
if (markNotation(notation))
return;
}
{
if (str) {
outputString(*str);
}
if (str) {
outputString(*str);
}
}
}
{
}
{
}
{
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";
}
else
break;
}
}
}
{
s << "\\#" << (unsigned long)c << ";";
}
{
const InputSourceOrigin *inputSourceOrigin;
const ExternalInfo *info;
for (;;) {
if (!origin)
return;
if (inputSourceOrigin) {
if (info)
break;
}
}
return;
return;
return;
flushData();
}
else {
flushData();
}
}
{
if (!cancelled()) {
}
}
{
}
: haveLinkProcess_(0), parser_(0)
{
}
{
}
{
haveLinkProcess_ = 0;
}
{
{
}
{
}
}
#ifdef SP_NAMESPACE
}
#endif