90 lines
2.2 KiB
C++
90 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);
|
||
|
}
|