actual/packages/node-libofx/OpenSP-1.5.2/sgmlnorm/sgmlnorm.cxx
2022-04-28 22:44:38 -04:00

89 lines
2.2 KiB
C++

// Copyright (c) 1996 James Clark
// See the file COPYING for copying permission.
#include "config.h"
#include "sptchar.h"
#include "ParserApp.h"
#include "GenericEventHandler.h"
#include "SGMLGenerator.h"
#include "SgmlnormMessages.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)
{
changeOptionRegistration('n', AppChar(255));
registerOption('d', SP_T("dtd"), SgmlnormMessages::dHelp);
registerOption('m', SP_T("marked-sections"), SgmlnormMessages::mHelp);
registerOption('n', SP_T("comments"), SgmlnormMessages::nHelp);
registerOption('r', SP_T("raw"), SgmlnormMessages::rHelp);
registerInfo(SgmlnormMessages::info1);
registerInfo(SgmlnormMessages::info2);
registerInfo(SgmlnormMessages::info3);
}
void SgmlnormApp::processOption(AppChar opt, const AppChar *arg)
{
switch (opt) {
case AppChar(255):
ParserApp::processOption('n', arg);
break;
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);
}