76 lines
1.7 KiB
C++
76 lines
1.7 KiB
C++
// Copyright (c) 1995 James Clark
|
|
// See the file COPYING for copying permission.
|
|
|
|
#include "config.h"
|
|
|
|
#include "sptchar.h"
|
|
#include "EntityApp.h"
|
|
#include "InputSource.h"
|
|
#include "OutputCharStream.h"
|
|
#include "SpentMessages.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', SP_T("non-sgml"), SpentMessages::nHelp);
|
|
registerOption('r', SP_T("raw"), SpentMessages::rHelp);
|
|
registerInfo(SpentMessages::info1);
|
|
registerInfo(SpentMessages::info2);
|
|
}
|
|
|
|
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();
|
|
}
|