summaryrefslogtreecommitdiffabout
path: root/include/opkele/tidy.h
blob: 059656d98e65a3d2b157df7f4ae7be16d4a365d4 (plain)
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
#ifndef __OPKELE_TIDY_H
#define __OPKELE_TIDY_H

#include <cassert>
#ifdef HAVE_TIDY_H
# include <tidy.h>
# include <buffio.h>
#elif HAVE_TIDY_TIDY_H
# include <tidy/tidy.h>
# include <tidy/buffio.h>
#else
# error "Don't know where to look for htmltidy headers"
#endif

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 */