Commit 8dd36f4d authored by Kiste's avatar Kiste
Browse files

Remove unneeded stuff

parent 7e9c801b
#ifdef USE_XERCES
#include "bulletmlparser.h"
#include "bulletmlparser-xerces.h"
#include "bulletmlerror.h"
#include "bulletmltree.h"
#include <xercesc/sax/HandlerBase.hpp>
#include <xercesc/sax/AttributeList.hpp>
#include <xercesc/parsers/SAXParser.hpp>
#include <xercesc/util/PlatformUtils.hpp>
#include <string>
#include <memory>
#include <sstream>
class BulletMLParserXercesSAXHandler : public HandlerBase {
public:
BulletMLParserXercesSAXHandler(BulletMLParserXerces* parser);
virtual void characters(const XMLCh* const chars,
const unsigned int length);
virtual void startElement(const XMLCh* const name,
AttributeList& attributes);
virtual void endElement(const XMLCh* const name);
virtual void error(const SAXParseException& e) {
handleError(e);
}
virtual void fatalError(const SAXParseException& e) {
handleError(e);
}
virtual void warning(const SAXParseException& e) {
handleError(e);
}
private:
void handleError(const SAXParseException& e) {
std::ostringstream oss;
oss << "Error at file " << parser_->uc2string(e.getSystemId())
<< ", line " << e.getLineNumber()
<< ", char " << e.getColumnNumber()
<< "\nMessage: " << parser_->uc2string(e.getMessage()) << endl;
throw BulletMLError(oss.str());
}
private:
BulletMLParserXerces* parser_;
BulletMLNode* curNode_;
};
BulletMLParserXercesSAXHandler::BulletMLParserXercesSAXHandler(
BulletMLParserXerces* parser)
: parser_(parser), curNode_(0)
{}
void BulletMLParserXercesSAXHandler::characters(const XMLCh* const chars,
const unsigned int length)
{
curNode_->setValue(parser_->uc2string(chars, length));
}
void BulletMLParserXercesSAXHandler::startElement(const XMLCh* const name,
AttributeList& attributes)
{
BulletMLNode* node = parser_->addContent(parser_->uc2string(name));
if (node->getName() == BulletMLNode::bulletml) {
for (unsigned int i = 0; i < attributes.getLength(); i++) {
if (parser_->uc2string(attributes.getName(i)) == "type" &&
parser_->uc2string(attributes.getValue(i)) == "horizontal")
{
parser_->setHorizontal();
}
}
}
else {
BulletMLParserXerces::MyAttributes mattr;
for (unsigned int i = 0; i < attributes.getLength(); i++) {
mattr.push_back(parser_->uc2string(attributes.getName(i)));
mattr.push_back(parser_->uc2string(attributes.getValue(i)));
}
parser_->addAttribute(mattr, node);
}
if (curNode_ != 0) curNode_->addChild(node);
curNode_ = node;
}
void BulletMLParserXercesSAXHandler::endElement(const XMLCh* const) {
curNode_ = curNode_->getParent();
}
BulletMLParserXerces::BulletMLParserXerces(const char* filename)
{
setName(filename);
}
BulletMLParserXerces::~BulletMLParserXerces() {}
void BulletMLParserXerces::parse() {
try {
XMLPlatformUtils::Initialize();
std::auto_ptr<SAXParser> parser(new SAXParser);
parser->setValidationScheme(SAXParser::Val_Always);
parser->setDoNamespaces(false);
parser->setDoSchema(false);
parser->setValidationSchemaFullChecking(false);
BulletMLParserXercesSAXHandler handler(this);
parser->setDocumentHandler(&handler);
parser->setErrorHandler(&handler);
parser->parse(name_);
parser.reset(0);
}
catch (const XMLException& toCatch) {
throw BulletMLError(uc2string(toCatch.getMessage()));
}
XMLPlatformUtils::Terminate();
}
#endif // USE_XERCES
/// BulletML のパーサ・ツリー by Xerces
/**
* Xerces による BulletML のパーサ
*/
#ifndef BULLETMLPARSER_XERCES_H_
#define BULLETMLPARSER_XERCES_H_
#ifdef USE_XERCES
class BulletMLParserXerces : public BulletMLParser {
public:
explicit BulletMLParserXerces(const char* filename);
virtual ~BulletMLParserXerces();
virtual void parse();
private:
friend class BulletMLParserXercesSAXHandler;
};
#endif // USE_XERCES
#endif // ! BULLETMLPARSER_XERCES_H_
#include "bulletmlparser.h"
#include "bulletmlparser-ygg.h"
#include "bulletmlerror.h"
#include "bulletmltree.h"
#include "ygg/ygg.h"
#include <string>
#include <cstdio>
using namespace yggdrasil;
void BulletMLParserYggdrasil::on_error(yggdrasil::ygg_error* parse_error) {
if (parse_error->is_error()) {
char buf[2000];
sprintf(buf,
"BulletML sox error !!!\n"
"\tlocation %d:%d\n"
"\tcode %02x:%02x:%02x:%02x\n"
"\tmessage %s\n",
parse_error->get_line(),
parse_error->get_row(),
parse_error->get_genre(),
parse_error->get_category(),
parse_error->get_sequence(),
parse_error->get_sequence_case(),
parse_error->get_message().c_str());
throw BulletMLError(buf);
}
}
void BulletMLParserYggdrasil::start_document(yggdrasil::ygg_node) {
}
void BulletMLParserYggdrasil::end_document(yggdrasil::ygg_node&) {
}
void BulletMLParserYggdrasil::start_element(yggdrasil::ygg_node element) {
BulletMLNode* xmlNode = addContent(trimString(element.get_name()));
if (xmlNode->getName() != BulletMLNode::bulletml) {
MyAttributes mattr;
for (ygg_iterator ite = element["@*"].begin(); ite.is_not_end(); ++ite)
{
mattr.push_back(trimString(ite->get_name()));
mattr.push_back(trimString(ite->get_value()));
}
if (!mattr.empty()) addAttribute(mattr, xmlNode);
if (curNode_ != 0) curNode_->addChild(xmlNode);
}
curNode_ = xmlNode;
}
void BulletMLParserYggdrasil::end_element(yggdrasil::ygg_node element) {
// @todo if (element.get_name() != curNode_
if (curNode_ != 0) curNode_ = curNode_->getParent();
}
void BulletMLParserYggdrasil::catch_text(yggdrasil::ygg_node text) {
curNode_->setValue(trimString(text.get_text()));
}
BulletMLParserYggdrasil::BulletMLParserYggdrasil(const char* filename)
: curNode_(0)
{
setName(filename);
}
BulletMLParserYggdrasil::~BulletMLParserYggdrasil() {}
void BulletMLParserYggdrasil::parse() {
std::string f(name_);
sox_file(f).read(this);
}
std::string BulletMLParserYggdrasil::trimString(const std::string& str) {
std::string ret(str);
if (!ret.empty() && ret[0] == ' ')
ret.erase(0, ret.find_first_not_of(' '));
if (!ret.empty() && ret[str.length()-1] == ' ')
ret.erase(ret.find_last_not_of(' ') + 1);
return ret;
}
/// BulletML のパーサ・ツリー by yggdrasil
/**
* Yggdrasil による BulletML のパーサ
*/
#ifndef BULLETMLPARSER_YGG_H_
#define BULLETMLPARSER_YGG_H_
#include <string>
#include "bulletmlcommon.h"
#include "ygg/ygg.h"
class BulletMLParserYggdrasil
: public BulletMLParser, public yggdrasil::sax_handler
{
public:
void on_error(yggdrasil::ygg_error* parse_error);
void start_document(yggdrasil::ygg_node root);
void end_document(yggdrasil::ygg_node &root);
void start_element(yggdrasil::ygg_node element);
void end_element(yggdrasil::ygg_node element);
void catch_text(yggdrasil::ygg_node text);
public:
DECLSPEC explicit BulletMLParserYggdrasil(const char* filename);
DECLSPEC virtual ~BulletMLParserYggdrasil();
DECLSPEC virtual void parse();
protected:
std::string trimString(const std::string& str);
private:
class BulletMLNode* curNode_;
};
#endif // ! BULLETMLPARSER_YGG_H_
......@@ -16,18 +16,12 @@ bulletml = library('bulletml',
)
install_headers(
'auto_ptr_fix.h',
'bulletmlcommon.h',
'bulletmlerror.h',
'bulletmlparser-tinyxml.h',
'bulletmlparser-xerces.h',
'bulletmlparser-ygg.h',
'bulletmlparser.h',
'bulletmlrunner.h',
'bulletmlrunnerimpl.h',
'bulletmltree.h',
'calc.h',
'formula-variables.h',
'formula.h',
'tree.h',
subdir : 'bulletml'
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment