actual/packages/node-libofx/OpenSP-1.5.2/spent/spent.cxx

77 lines
1.7 KiB
C++
Raw Permalink Normal View History

2022-04-29 02:44:38 +00:00
// 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();
}