⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spam.cxx

📁 SP是一个基于GNU C++编译器
💻 CXX
字号:
// Copyright (c) 1995, 1996 James Clark// See the file COPYING for copying permission.// FIXME usage message for bad -m option.#include "config.h"#include "SgmlParser.h"#include "Event.h"#include "OutputCharStream.h"#include "ParserApp.h"#include "Boolean.h"#include "macros.h"#include "SpamMessages.h"#include "CopyEventHandler.h"#include "InputSource.h"#include "sptchar.h"#include <stdlib.h>#ifdef SP_NAMESPACEusing namespace SP_NAMESPACE;#endifclass XCopyEventHandler : public CopyEventHandler {public:  XCopyEventHandler(OutputCharStream *os, unsigned normalizeFlags,		    const StringC &outputEntity, Messenger *);  void message(MessageEvent *);private:  void reportTagInSpecialMarkedSection(const Location &);  Messenger *messenger_;  OutputCharStream *os_;};staticstruct {  const ParserApp::AppChar *name;  unsigned flag;} normalizeTable[] = {  { SP_T("omittag"), CopyEventHandler::normalizeOmittag },  { SP_T("shortref"), CopyEventHandler::normalizeShortref },  { SP_T("net"), CopyEventHandler::normalizeNet },  { SP_T("emptytag"), CopyEventHandler::normalizeEmptytag },  { SP_T("unclosed"), CopyEventHandler::normalizeUnclosed },  { SP_T("attname"), CopyEventHandler::normalizeAttname },  { SP_T("attvalue"), CopyEventHandler::normalizeAttvalue },  { SP_T("attspec"), CopyEventHandler::normalizeAttspec },  { SP_T("current"), CopyEventHandler::normalizeCurrent },  { SP_T("shorttag"), CopyEventHandler::normalizeShorttag },  { SP_T("rank"), CopyEventHandler::normalizeRank },  { SP_T("reserved"), CopyEventHandler::normalizeReserved },  { SP_T("ms"), CopyEventHandler::normalizeMarkedSection },};class SpamApp : public ParserApp {public:  SpamApp();  ErrorCountEventHandler *makeEventHandler();  void processOption(AppChar opt, const AppChar *arg);private:  unsigned normalizeFlags_;  StringC outputEntity_;  Boolean rawOutput_;};SP_DEFINE_APP(SpamApp)SpamApp::SpamApp(): rawOutput_(0), normalizeFlags_(0){  options_.eventsWanted.addInstanceMarkup();  options_.eventsWanted.addPrologMarkup();  registerOption('h');  registerOption('l');  registerOption('m', SP_T("omittag|shortref|net|emptytag|unclosed|attname|attvalue|attspec|current|shorttag|rank|reserved"));  registerOption('o', SP_T("entity_name"));  registerOption('p');  registerOption('r');  registerOption('x');}void SpamApp::processOption(AppChar opt, const AppChar *arg){  switch (opt) {  case 'h':    // hoist omitted tags out of entities    normalizeFlags_ |= CopyEventHandler::normalizeOmittagHoist;    break;  case 'l':			// prefer lowercase    normalizeFlags_ |= CopyEventHandler::normalizeLower;    break;  case 'm':    {      Boolean found = 0;      for (size_t i = 0; i < SIZEOF(normalizeTable); i++)	if (tcscmp(normalizeTable[i].name, arg) == 0) {	  found = 1;	  normalizeFlags_ |= normalizeTable[i].flag;	  break;	}      if (!found) {	message(SpamMessages::invalidMarkupArgument,		StringMessageArg(convertInput(arg)));	// usage(kit);      }    }    break;  case 'o':    outputEntity_ = convertInput(arg);    break;  case 'p':    if (normalizeFlags_ & CopyEventHandler::normalizeIncludeProlog)      normalizeFlags_ |= CopyEventHandler::normalizeExpandProlog;    else      normalizeFlags_ |= CopyEventHandler::normalizeIncludeProlog;    break;  case 'r':    rawOutput_ = 1;    break;  case 'x':    if (normalizeFlags_ & CopyEventHandler::normalizeExpand)      normalizeFlags_ |= CopyEventHandler::normalizeExpandAll;    else      normalizeFlags_ |= CopyEventHandler::normalizeExpand;    break;  default:    ParserApp::processOption(opt, arg);    break;  }}ErrorCountEventHandler *SpamApp::makeEventHandler(){  OutputCharStream *os = makeStdOut();  if (!rawOutput_)    os = new RecordOutputCharStream(os);  return new XCopyEventHandler(os, normalizeFlags_, outputEntity_, this);}XCopyEventHandler::XCopyEventHandler(OutputCharStream *os,				     unsigned normalizeFlags,				     const StringC &outputEntity,				     Messenger *messenger): messenger_(messenger), os_(os),  CopyEventHandler(os, normalizeFlags, outputEntity){}void XCopyEventHandler::message(MessageEvent *event){  messenger_->dispatchMessage(event->message());  CopyEventHandler::message(event);}void XCopyEventHandler::reportTagInSpecialMarkedSection(const Location &loc){  messenger_->setNextLocation(loc);  messenger_->message(SpamMessages::tagInSpecialMarkedSection);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -