📄 sx.cxx
字号:
// Copyright (c) 1997 James Clark// See the file COPYING for copying permission.#include "config.h"#include "OutputCharStream.h"#include "ParserApp.h"#include "macros.h"#include "XmlOutputEventHandler.h"#include "SxMessages.h"#include "sptchar.h"#include <stdlib.h>#ifdef SP_NAMESPACEusing namespace SP_NAMESPACE;#endifstaticstruct { const ParserApp::AppChar *name; PackedBoolean XmlOutputEventHandler::Options::*ptr;} outputOptionsTable[] = { { SP_T("nl-in-tag"), &XmlOutputEventHandler::Options::nlInTag }, { SP_T("id"), &XmlOutputEventHandler::Options::id }, { SP_T("notation"), &XmlOutputEventHandler::Options::notation }, { SP_T("ndata"), &XmlOutputEventHandler::Options::ndata }, { SP_T("cdata"), &XmlOutputEventHandler::Options::cdata }, { SP_T("comment"), &XmlOutputEventHandler::Options::comment }, { SP_T("lower"), &XmlOutputEventHandler::Options::lower }, { SP_T("pi-escape"), &XmlOutputEventHandler::Options::piEscape }, { SP_T("empty"), &XmlOutputEventHandler::Options::empty }, { SP_T("attlist"), &XmlOutputEventHandler::Options::attlist },};class SxApp : public ParserApp {public: SxApp(); ErrorCountEventHandler *makeEventHandler(); void processOption(AppChar opt, const AppChar *arg); int processSysid(const StringC &);private: XmlOutputEventHandler::Options outputOptions_; StringC encodingName_;};SP_DEFINE_APP(SxApp)SxApp::SxApp(): ParserApp("unicode"){ outputCodingSystem_ = codingSystemKit_->makeCodingSystem("UTF-8", 0); registerOption('x', SP_T("xml_output_option")); outputOptions_.nlInTag = 1;}int SxApp::processSysid(const StringC &sysid){ if (outputOptions_.comment) options_.eventsWanted.addCommentDecls(); if (outputOptions_.notation) options_.warnNotationSystemId = 1; if (outputOptions_.cdata) options_.eventsWanted.addMarkedSections(); return ParserApp::processSysid(sysid);}void SxApp::processOption(AppChar opt, const AppChar *arg){ switch (opt) { case 'x': { PackedBoolean value; if (arg[0] == 'n' && arg[1] == 'o' && arg[2] == '-') { value = 0; arg += 3; } else value = 1; Boolean found = 0; for (size_t i = 0; i < SIZEOF(outputOptionsTable); i++) { if (tcscmp(outputOptionsTable[i].name, arg) == 0) { found = 1; outputOptions_.*(outputOptionsTable[i].ptr) = value; break; } } if (!found) message(SxMessages::unknownOutputOption, StringMessageArg(convertInput(arg))); break; } case 'b': { // Need to generate appropriate encoding declaration. ParserApp::processOption(opt, arg); if (outputCodingSystem_) encodingName_ = convertInput(arg); else encodingName_.resize(0); break; } default: ParserApp::processOption(opt, arg); break; }}ErrorCountEventHandler *SxApp::makeEventHandler(){ return new XmlOutputEventHandler(outputOptions_, new RecordOutputCharStream(makeStdOut()), encodingName_, entityManager(), systemCharset(), this);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -