-rw-r--r-- | configure.ac | 13 | ||||
-rw-r--r-- | include/Makefile.am | 2 | ||||
-rw-r--r-- | include/opkele/exception.h | 11 | ||||
-rw-r--r-- | include/opkele/tidy.h | 73 | ||||
-rw-r--r-- | lib/exception.cc | 6 | ||||
-rw-r--r-- | libopkele.pc.in | 4 |
6 files changed, 106 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac index 51bacd5..5772ead 100644 --- a/configure.ac +++ b/configure.ac @@ -111,12 +111,25 @@ AC_CHECK_HEADER([expat.h],[ AC_MSG_ERROR([no required expat library. get one from http://expat.sourceforge.net/]) ]) ],[ AC_MSG_ERROR([no required expat library. get one from http://expat.sourceforge.net/]) ]) +AC_CHECK_HEADER([tidy.h],[ + AC_CHECK_LIB([tidy],[tidyParseBuffer],[ + TIDY_LIBS=-ltidy + TIDY_CFLAGS= + AC_SUBST([TIDY_LIBS]) + AC_SUBST([TIDY_CFLAGS]) + ],[ + AC_MSG_ERROR([no required htmltidy library found. get one from http://tidy.sourceforge.nt/]) + ]) +],[ + AC_MSG_ERROR([no required htmltidy library found. get one from http://tidy.sourceforge.nt/]) +]) + if test -n "$PCRE_LIBS" -a -n "$PCRE_CFLAGS" ; then AC_SUBST([PCRE_CFLAGS]) AC_SUBST([PCRE_LIBS]) : else PKG_CHECK_MODULES([PCRE],[libpcre],,[ diff --git a/include/Makefile.am b/include/Makefile.am index 1076c12..51dcea1 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -13,9 +13,9 @@ nobase_include_HEADERS = \ opkele/xserver.h \ opkele/discovery.h \ opkele/uris.h \ opkele/tr1-mem.h EXTRA_DIST = \ opkele/data.h \ - opkele/curl.h opkele/expat.h \ + opkele/curl.h opkele/expat.h opkele/tidy.h \ opkele/util.h \ opkele/debug.h diff --git a/include/opkele/exception.h b/include/opkele/exception.h index c200a13..a8c3339 100644 --- a/include/opkele/exception.h +++ b/include/opkele/exception.h @@ -250,12 +250,23 @@ namespace opkele { exception_curl(OPKELE_E_PARS); exception_curl(OPKELE_E_PARS,CURLcode e); ~exception_curl() throw() { } }; /** + * htmltidy related error occured + */ + class exception_tidy : public exception { + public: + int _rc; + exception_tidy(OPKELE_E_PARS); + exception_tidy(OPKELE_E_PARS,int r); + ~exception_tidy() throw() { } + }; + + /** * exception thrown in case of failed discovery */ class failed_discovery : public exception { public: failed_discovery(OPKELE_E_PARS) : exception(OPKELE_E_CONS) { } diff --git a/include/opkele/tidy.h b/include/opkele/tidy.h new file mode 100644 index 0000000..888e7d4 --- a/dev/null +++ b/include/opkele/tidy.h @@ -0,0 +1,73 @@ +#ifndef __OPKELE_TIDY_H +#define __OPKELE_TIDY_H + +#include <cassert> +#include <tidy.h> +#include <buffio.h> + +namespace opkele { + namespace util { + + class tidy_buf_t { + public: + TidyBuffer _x; + + tidy_buf_t() { tidyBufInit(&_x); } + virtual ~tidy_buf_t() throw() { + tidyBufFree(&_x); } + + inline operator const TidyBuffer&(void) const { return _x; } + inline operator TidyBuffer&(void) { return _x; } + + inline operator const char*(void) const { return (const char*)_x.bp; } + inline operator char*(void) { return (char*)_x.bp; } + + inline const char *c_str() const { + return (const char*)_x.bp; } + inline size_t size() const { + return _x.size; } + }; + + class tidy_doc_t { + public: + TidyDoc _x; + + tidy_doc_t() : _x(0) { } + tidy_doc_t(TidyDoc x) : _x(x) { } + virtual ~tidy_doc_t() throw() { + if(_x) tidyRelease(_x); } + + tidy_doc_t& operator=(TidyDoc x) { + if(_x) tidyRelease(_x); + _x = x; + return *this; + } + + operator const TidyDoc(void) const { return _x; } + operator TidyDoc(void) { return _x; } + + inline bool opt_set(TidyOptionId o,bool v) { + assert(_x); + return tidyOptSetBool(_x,o,v?yes:no); } + inline bool opt_set(TidyOptionId o,int v) { + assert(_x); + return tidyOptSetInt(_x,o,v); } + + inline int parse_string(const string& s) { + assert(_x); + return tidyParseString(_x,s.c_str()); } + inline int clean_and_repair() { + assert(_x); + return tidyCleanAndRepair(_x); } + inline int save_buffer(TidyBuffer& ob) { + assert(_x); + return tidySaveBuffer(_x,&ob); } + + static inline TidyDoc create() { + return tidyCreate(); } + }; + + } +} + +#endif /* __OPKELE_TIDY_H */ diff --git a/lib/exception.cc b/lib/exception.cc index 0b775f7..e32594b 100644 --- a/lib/exception.cc +++ b/lib/exception.cc @@ -39,7 +39,13 @@ namespace opkele { exception_curl::exception_curl(OPKELE_E_PARS) : exception_network(OPKELE_E_CONS), _error(CURLE_OK) { } exception_curl::exception_curl(OPKELE_E_PARS,CURLcode e) : exception_network(OPKELE_E_CONS_ w+" ["+curl_easy_strerror(e)+']'), _error(e), _curl_string(curl_easy_strerror(e)) { } + exception_tidy::exception_tidy(OPKELE_E_PARS) + : exception(OPKELE_E_CONS), _rc(0) { } + exception_tidy::exception_tidy(OPKELE_E_PARS,int r) + : exception(OPKELE_E_CONS), + _rc(r) { } + } diff --git a/libopkele.pc.in b/libopkele.pc.in index 0a95e96..011f2fe 100644 --- a/libopkele.pc.in +++ b/libopkele.pc.in @@ -4,8 +4,8 @@ libdir=@libdir@ includedir=@includedir@ Name: libopkele Description: C++ implementation of OpenID protocol Version: @VERSION@ Requires: openssl libpcre @KONFORKA_KONFORKA@ -Cflags: -I${includedir} @LIBCURL_CPPFLAGS@ @PCRE_CFLAGS@ @EXPAT_CFLAGS@ -Libs: -L${libdir} -lopkele @LIBCURL@ @PCRE_LIBS@ @EXPAT_LIBS@ +Cflags: -I${includedir} @LIBCURL_CPPFLAGS@ @PCRE_CFLAGS@ @EXPAT_CFLAGS@ @TIDY_CFLAGS@ +Libs: -L${libdir} -lopkele @LIBCURL@ @PCRE_LIBS@ @EXPAT_LIBS@ @TIDY_LIBS@ |