summaryrefslogtreecommitdiffstats
path: root/src/io/xsltstream.h
blob: 5e293abc66bfeceba2ba99a3cad4f8daee3855a4 (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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#ifndef __INKSCAPE_IO_XSLTSTREAM_H__
#define __INKSCAPE_IO_XSLTSTREAM_H__
/**
 * Xslt-enabled input and output streams
 *
 *
 * Authors:
 *   Bob Jamison <rjamison@titan.com>
 *
 * Copyright (C) 2004 Inkscape.org
 *
 * Released under GNU GPL, read the file 'COPYING' for more information
 */


#include "inkscapestream.h"

#include <libxslt/xslt.h>
#include <libxslt/xsltInternals.h>


namespace Inkscape
{
namespace IO
{

//#########################################################################
//# X S L T    S T Y L E S H E E T
//#########################################################################
/**
 * This is a container for reusing a loaded stylesheet
 */
class XsltStyleSheet
{

public:

    XsltStyleSheet(InputStream &source)  throw (StreamException);
    
    ~XsltStyleSheet();
    
    xsltStylesheetPtr stylesheet;


}; // class XsltStyleSheet


//#########################################################################
//# X S L T    I N P U T    S T R E A M
//#########################################################################

/**
 * This class is for transforming stream input by a given stylesheet
 */
class XsltInputStream : public BasicInputStream
{

public:

    XsltInputStream(InputStream &xmlSource, XsltStyleSheet &stylesheet)
                        throw (StreamException);
    
    virtual ~XsltInputStream() throw (StreamException);
    
    virtual int available() throw (StreamException);
    
    virtual void close() throw (StreamException);
    
    virtual int get() throw (StreamException);
    

private:

    XsltStyleSheet &stylesheet;

    xmlChar *outbuf;
    int outsize;
    int outpos;

}; // class UriInputStream




//#########################################################################
//# X S L T    O U T P U T    S T R E A M
//#########################################################################

/**
 * This class is for transforming stream output by a given stylesheet
 */
class XsltOutputStream : public BasicOutputStream
{

public:

    XsltOutputStream(OutputStream &destination, XsltStyleSheet &stylesheet)
                             throw (StreamException);
    
    virtual ~XsltOutputStream() throw (StreamException);
    
    virtual void close() throw (StreamException);
    
    virtual void flush() throw (StreamException);
    
    virtual void put(int ch) throw (StreamException);

private:

    XsltStyleSheet &stylesheet;

    Glib::ustring outbuf;
    
    bool flushed;

}; // class UriOutputStream



} // namespace IO
} // namespace Inkscape


#endif /* __INKSCAPE_IO_XSLTSTREAM_H__ */