OpenMS
Loading...
Searching...
No Matches
SAX2HandlerAdapter.h
Go to the documentation of this file.
1// Copyright (c) 2002-present, OpenMS Inc. -- EKU Tuebingen, ETH Zurich, and FU Berlin
2// SPDX-License-Identifier: BSD-3-Clause
3//
4// --------------------------------------------------------------------------
5// $Maintainer: Timo Sachsenberg $
6// $Authors: Timo Sachsenberg $
7// --------------------------------------------------------------------------
8
9// NOTE: This is a private (non-installed) libOpenMS header. It bridges the
10// Xerces SAX2 interface to OpenMS' Xerces-free XMLHandler callbacks and must only
11// be included from libOpenMS .cpp translation units (never from a public header).
12
13#pragma once
14
18
19#include <xercesc/sax2/Attributes.hpp>
20#include <xercesc/sax2/DefaultHandler.hpp>
21#include <xercesc/sax/SAXParseException.hpp>
22
23namespace OpenMS::Internal
24{
38 class SAX2HandlerAdapter : public xercesc::DefaultHandler
39 {
40 public:
41 explicit SAX2HandlerAdapter(XMLHandler& handler) : handler_(handler) {}
42
43 void startElement(const XMLCh* const /*uri*/, const XMLCh* const /*localname*/,
44 const XMLCh* const qname, const xercesc::Attributes& attrs) override
45 {
46 handler_.onStartElement(reinterpret_cast<const char16_t*>(qname), XMLAttributes(static_cast<const void*>(&attrs)));
47 }
48
49 void endElement(const XMLCh* const /*uri*/, const XMLCh* const /*localname*/,
50 const XMLCh* const qname) override
51 {
52 handler_.onEndElement(reinterpret_cast<const char16_t*>(qname));
53 }
54
55 void characters(const XMLCh* const chars, const XMLSize_t length) override
56 {
57 handler_.onCharacters(reinterpret_cast<const char16_t*>(chars), length);
58 }
59
60 void fatalError(const xercesc::SAXParseException& e) override
61 {
62 handler_.fatalError(XMLHandler::LOAD, message_(e), (UInt)e.getLineNumber(), (UInt)e.getColumnNumber());
63 }
64
65 void error(const xercesc::SAXParseException& e) override
66 {
67 handler_.error(XMLHandler::LOAD, message_(e), (UInt)e.getLineNumber(), (UInt)e.getColumnNumber());
68 }
69
70 void warning(const xercesc::SAXParseException& e) override
71 {
72 handler_.warning(XMLHandler::LOAD, message_(e), (UInt)e.getLineNumber(), (UInt)e.getColumnNumber());
73 }
74
75 private:
76 static std::string message_(const xercesc::SAXParseException& e)
77 {
78 return StringManager::convert(reinterpret_cast<const char16_t*>(e.getMessage()));
79 }
80
82 };
83
84} // namespace OpenMS::Internal
char16_t XMLCh
Definition ClassTest.h:30
Adapts an OpenMS XMLHandler to the Xerces SAX2 DefaultHandler interface.
Definition SAX2HandlerAdapter.h:39
void error(const xercesc::SAXParseException &e) override
Definition SAX2HandlerAdapter.h:65
void warning(const xercesc::SAXParseException &e) override
Definition SAX2HandlerAdapter.h:70
static std::string message_(const xercesc::SAXParseException &e)
Definition SAX2HandlerAdapter.h:76
SAX2HandlerAdapter(XMLHandler &handler)
Definition SAX2HandlerAdapter.h:41
XMLHandler & handler_
Definition SAX2HandlerAdapter.h:81
void characters(const XMLCh *const chars, const XMLSize_t length) override
Definition SAX2HandlerAdapter.h:55
void endElement(const XMLCh *const, const XMLCh *const, const XMLCh *const qname) override
Definition SAX2HandlerAdapter.h:49
void startElement(const XMLCh *const, const XMLCh *const, const XMLCh *const qname, const xercesc::Attributes &attrs) override
Definition SAX2HandlerAdapter.h:43
void fatalError(const xercesc::SAXParseException &e) override
Definition SAX2HandlerAdapter.h:60
static XercesString convert(const char *str)
Transcode the supplied C string to a UTF-16 string.
Xerces-free, lightweight view over the attribute list of an XML element.
Definition XMLAttributes.h:32
Base class for XML handlers.
Definition XMLHandler.h:42
void warning(ActionMode mode, const std::string &msg, UInt line=0, UInt column=0) const
Warning handler.
virtual void onCharacters(const char16_t *chars, Size length)
Parsing method for character data.
void fatalError(ActionMode mode, const std::string &msg, UInt line=0, UInt column=0) const
Fatal error handler. Throws a ParseError exception.
@ LOAD
Loading a file.
Definition XMLHandler.h:60
virtual void onStartElement(const char16_t *qname, const XMLAttributes &attributes)
Parsing method for opening tags.
void error(ActionMode mode, const std::string &msg, UInt line=0, UInt column=0) const
Error handler for recoverable errors.
virtual void onEndElement(const char16_t *qname)
Parsing method for closing tags.
unsigned int UInt
Unsigned integer type.
Definition Types.h:64
Namespace used to hide implementation details from users.
Definition BayesianProteinInferenceAlgorithm.h:26