Annotation of parser3/src/types/pa_vxdoc.h, revision 1.31.4.1
1.1 parser 1: /** @file
1.5 parser 2: Parser: @b xdoc parser class decl.
1.1 parser 3:
1.31 paf 4: Copyright (c) 2001, 2003 ArtLebedev Group (http://www.artlebedev.com)
1.19 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.1 parser 6: */
7:
8: #ifndef PA_VXDOC_H
9: #define PA_VXDOC_H
10:
1.31.4.1! paf 11: static const char* IDENT_VXDOC_H="$Date: 2003/01/21 15:51:21 $";
1.22 paf 12:
1.1 parser 13: #include "classes.h"
14: #include "pa_common.h"
15: #include "pa_vstateless_object.h"
16: #include "pa_vxnode.h"
17:
1.17 paf 18: // defines
19:
20: #define VXDOC_TYPE "xdoc"
21:
22: // externals
23:
1.1 parser 24: extern Methoded *Xdoc_class;
25:
26: void VXdoc_cleanup(void *);
27:
1.25 paf 28: /// value of type 'xdoc'. implemented with libxml & co
1.1 parser 29: class VXdoc : public VXnode {
1.31.4.1! paf 30: friend void VXdoc_destructor(void *, void *);
1.1 parser 31: public: // Value
1.4 parser 32:
1.17 paf 33: const char *type() const { return VXDOC_TYPE; }
1.29 paf 34: /*override*/ Value *as(const char *atype, bool looking_up);
1.24 paf 35:
1.21 paf 36: VStateless_class *get_class() { return Xdoc_class; }
1.6 parser 37:
1.4 parser 38: /// VXdoc: true
39: bool as_bool() const { return true; }
40:
41: /// VXdoc: true
42: Value *as_expr_result(bool return_string_as_is=false) { return NEW VBool(pool(), as_bool()); }
1.1 parser 43:
1.6 parser 44: /// VXnode: $CLASS,$method, fields
1.30 paf 45: Value *get_element(const String& aname, Value& aself, bool /*looking_up*/);
1.6 parser 46:
1.25 paf 47: public: // VXNode
1.1 parser 48:
1.15 paf 49: virtual GdomeNode *get_node(const String *source) {
50: return (GdomeNode *)get_document(source);
1.1 parser 51: }
52:
53: public: // usage
54:
1.15 paf 55: VXdoc(Pool& apool, GdomeDocument *adocument) :
1.21 paf 56: VXnode(apool, 0),
1.15 paf 57: fdocument(adocument/*not adding ref, owning a doc*/) {
1.14 paf 58:
1.13 paf 59: register_cleanup(VXdoc_destructor, this);
1.16 paf 60: memset(&output_options, 0, sizeof(output_options));
1.1 parser 61: }
1.14 paf 62: protected:
1.13 paf 63: ~VXdoc() {
1.14 paf 64: GdomeException exc;
65: if(fdocument)
66: gdome_doc_unref(fdocument, &exc);
1.1 parser 67: }
68: public:
69:
1.14 paf 70: void set_document(GdomeDocument *adocument) {
71: GdomeException exc;
72: if(fdocument)
73: gdome_doc_unref(fdocument, &exc);
1.8 parser 74:
1.14 paf 75: gdome_doc_ref(fdocument=adocument, &exc);
1.8 parser 76: }
1.15 paf 77: GdomeDocument *get_document(const String *source) {
1.1 parser 78: if(!fdocument)
1.20 paf 79: throw Exception(0,
1.1 parser 80: source,
81: "can not be applied to uninitialized instance");
1.14 paf 82: return fdocument;
1.1 parser 83: }
1.13 paf 84:
85: public:
86: struct Output_options {
1.16 paf 87: const String *method; /* the output method */
88: const String *encoding; /* encoding string */
89: const String *mediaType; /* media-type string */
90: const String *doctypeSystem; /* doctype-system string */
91: const String *doctypePublic; /* doctype-public string */
92: bool indent; /* should output being indented */
93: const String *version; /* version string */
94: bool standalone; /* standalone = "yes" | "no" */
95: bool omitXmlDeclaration; /* omit-xml-declaration = "yes" | "no" */
1.13 paf 96: } output_options;
1.1 parser 97: private:
98:
1.14 paf 99: GdomeDocument *fdocument;
1.1 parser 100: };
101:
102: #endif
E-mail: