File: sgmlnorm.cxx

package info (click to toggle)
opensp 1.5.2-15.2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 9,168 kB
  • sloc: cpp: 65,784; ansic: 17,124; sh: 11,193; xml: 2,704; makefile: 895; perl: 561; yacc: 288; sed: 16
file content (89 lines) | stat: -rw-r--r-- 2,236 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// 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);
}