You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.2 KiB
56 lines
1.2 KiB
2 years ago
|
#include <cassert>
|
||
|
#include <string>
|
||
|
|
||
|
#include "ParserEventGeneratorKit.h"
|
||
|
|
||
|
std::string CharStringtostring(const SGMLApplication::CharString source)
|
||
|
{
|
||
|
// The CharString type might have multi-byte characters if SP_MULTI_BYTE was
|
||
|
// defined
|
||
|
std::string result;
|
||
|
result.resize(source.len);
|
||
|
for (size_t i = 0; i < source.len; i++) {
|
||
|
result[i] = static_cast<char>(source.ptr[i]);
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
class OutlineApplication : public SGMLApplication
|
||
|
{
|
||
|
public:
|
||
|
OutlineApplication()
|
||
|
: depth_(0)
|
||
|
{
|
||
|
}
|
||
|
void startElement(const StartElementEvent& event)
|
||
|
{
|
||
|
for (unsigned i = 0; i < depth_; i++)
|
||
|
parsedOutput += "\t";
|
||
|
parsedOutput += CharStringtostring(event.gi);
|
||
|
depth_++;
|
||
|
}
|
||
|
void endElement(const EndElementEvent&) { depth_--; }
|
||
|
std::string parsedOutput;
|
||
|
|
||
|
private:
|
||
|
unsigned depth_;
|
||
|
};
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
std::string expectedOutput = "TESTDOC\tTESTELEMENT";
|
||
|
char file_name[] = "test.sgml";
|
||
|
char* files[] = { file_name, 0 };
|
||
|
|
||
|
ParserEventGeneratorKit parserKit;
|
||
|
EventGenerator* egp = parserKit.makeEventGenerator(1, files);
|
||
|
OutlineApplication app;
|
||
|
unsigned nErrors = egp->run(app);
|
||
|
|
||
|
assert(nErrors == 0);
|
||
|
assert(app.parsedOutput.compare(expectedOutput) == 0);
|
||
|
|
||
|
delete egp;
|
||
|
return 0;
|
||
|
}
|