File:  [parser3project] / parser3 / src / types / pa_vxnode.h
Revision 1.52: download - view: text, annotated - select for diffs - revision graph
Sat Apr 25 13:38:46 2026 UTC (6 weeks ago) by moko
Branches: MAIN
CVS tags: HEAD
Copyright year updated, websites links changed to https://

/** @file
	Parser: @b xnode parser class decl.

	Copyright (c) 2001-2026 Art. Lebedev Studio (https://www.artlebedev.com)
	Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru>
*/

#ifndef PA_VXNODE_H
#define PA_VXNODE_H

#define IDENT_PA_VXNODE_H "$Id: pa_vxnode.h,v 1.52 2026/04/25 13:38:46 moko Exp $"

#include "classes.h"
#include "pa_common.h"
#include "pa_vstateless_object.h"

#include "libxml/tree.h"

// defines

#define VXNODE_TYPE "xnode"

// externals

extern Methoded* xnode_class;

// forwards

class VXdoc;

/// value of type 'xnode'. implemented with xmlNode
class VXnode: public VStateless_object {
public: // Value

	override const char* type() const { return VXNODE_TYPE; }
	override VStateless_class* get_class() { return xnode_class; }

	/// VXnode: true
	override bool as_bool() const { return true; }

	/// VXnode: true	 
	override Value& as_expr_result();

	/// VXnode: $method, fields
	override Value* get_element(const String& aname);

	/// VXnode: $nodeValue
	override const VJunction* put_element(const String& aname, Value* avalue);

public: // usage

	VXnode(xmlNode& anode) : 
		fnode(anode) {}

public: // VXnode

	virtual xmlNode& get_xmlnode() { 
		return fnode; 
	}

	virtual VXdoc& get_vxdoc() {
		assert(fnode.doc);
		VXdoc* result=static_cast<VXdoc*>(fnode.doc->_private);
		assert(result);
		return *result;
	}

	Request_charsets& charsets();

private:

	xmlNode& fnode;
};

#endif

E-mail: