Annotation of parser3/src/types/pa_vxdoc.h, revision 1.56
1.1 parser 1: /** @file
1.5 parser 2: Parser: @b xdoc parser class decl.
1.1 parser 3:
1.54 moko 4: Copyright (c) 2001-2015 Art. Lebedev Studio (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.56 ! moko 11: #define IDENT_PA_VXDOC_H "$Id: pa_vxdoc.h,v 1.55 2016/11/06 20:25:24 moko Exp $"
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"
1.39 paf 17: #include "pa_vhash.h"
1.1 parser 18:
1.17 paf 19: // defines
20:
21: #define VXDOC_TYPE "xdoc"
22:
23: // externals
24:
1.32 paf 25: extern Methoded* xdoc_class;
1.1 parser 26:
1.46 misha 27: struct XDocOutputOptions {
28: const String* method; /* the output method */
29: const String* encoding; /* encoding string */
30: const String* mediaType; /* media-type string */
31: int indent; /* should output being indented */
32: const String* version; /* version string */
33: int standalone; /* standalone = "yes" | "no" */
34: int omitXmlDeclaration; /* omit-xml-declaration = "yes" | "no" */
1.48 misha 35: const String* filename; /* Parser3 option: filename */
1.46 misha 36:
37: XDocOutputOptions() {
38: memset(this, 0, sizeof(*this));
39: indent=standalone=omitXmlDeclaration=-1;
40: };
41:
1.52 moko 42: void append(Request& r, HashStringValue* options, bool with_filename=false);
1.46 misha 43: };
44:
1.56 ! moko 45: typedef struct _xsltStylesheet xsltStylesheet;
1.46 misha 46:
1.25 paf 47: /// value of type 'xdoc'. implemented with libxml & co
1.32 paf 48: class VXdoc: public VXnode {
1.1 parser 49: public: // Value
1.4 parser 50:
1.32 paf 51: override const char* type() const { return VXDOC_TYPE; }
1.45 misha 52: override Value* as(const char* atype);
1.24 paf 53:
1.32 paf 54: override VStateless_class* get_class() { return xdoc_class; }
1.6 parser 55:
1.4 parser 56: /// VXdoc: true
1.32 paf 57: override bool as_bool() const { return true; }
1.4 parser 58:
1.43 misha 59: /// VXdoc: true
1.50 moko 60: override Value& as_expr_result();
1.43 misha 61:
1.46 misha 62: /// VFile: json-string
1.51 moko 63: override const String* get_json_string(Json_options& options);
1.46 misha 64:
1.53 misha 65: /// VXdoc: $method, fields
1.45 misha 66: override Value* get_element(const String& aname);
1.6 parser 67:
1.25 paf 68: public: // VXNode
1.1 parser 69:
1.55 moko 70: override xmlNode& get_xmlnode() {
1.41 paf 71: return *reinterpret_cast<xmlNode*>(&get_xmldoc());
1.1 parser 72: }
73:
1.41 paf 74: override VXdoc& get_vxdoc() {
1.39 paf 75: return *this;
76: }
77:
1.1 parser 78: public: // usage
79:
1.56 ! moko 80: VXdoc() : VXnode(*this), fcharsets(0), fdocument(0), stylesheet(0) {}
1.32 paf 81:
1.41 paf 82: VXdoc(Request_charsets& acharsets, xmlDoc& adocument) : VXnode(*this) {
83: set_xmldoc(acharsets, adocument);
1.1 parser 84: }
85:
1.32 paf 86: public: // VXdoc
87:
1.41 paf 88: void set_xmldoc(Request_charsets& acharsets, xmlDoc& adocument) {
89: fcharsets=&acharsets;
90: fdocument=&adocument;
91: fdocument->_private=this;
1.56 ! moko 92: stylesheet=0;
1.8 parser 93: }
1.56 ! moko 94:
1.55 moko 95: xmlDoc& get_xmldoc() {
1.37 paf 96: if(!fdocument)
1.55 moko 97: throw Exception(PARSER_RUNTIME, 0, "using unitialized xdoc object");
98: return *fdocument;
1.41 paf 99: }
100:
1.55 moko 101: Request_charsets& charsets() {
1.41 paf 102: if(!fcharsets)
1.55 moko 103: throw Exception(PARSER_RUNTIME, 0, "using unitialized xdoc object");
104: return *fcharsets;
1.1 parser 105: }
1.13 paf 106:
1.41 paf 107: VXnode& wrap(xmlNode& anode);
108:
1.13 paf 109: public:
1.39 paf 110:
111: VHash search_namespaces;
1.32 paf 112:
1.52 moko 113: XDocOutputOptions output_options;
114:
1.56 ! moko 115: xsltStylesheet *stylesheet;
! 116:
1.32 paf 117: private:
118:
1.41 paf 119: Request_charsets* fcharsets;
120: xmlDoc* fdocument;
1.1 parser 121: };
122:
123: #endif
E-mail: