Annotation of parser3/src/types/pa_vcode_frame.h, revision 1.24.2.3.2.2
1.2 paf 1: /** @file
1.3 paf 2: Parser: @b code_frame write wrapper write context
1.2 paf 3:
1.24.2.1 paf 4: Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)
1.14 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.1 paf 6: */
7:
8: #ifndef PA_VCODE_FRAME_H
9: #define PA_VCODE_FRAME_H
1.15 paf 10:
1.24.2.3.2.2! paf 11: static const char* IDENT_VCODE_FRAME_H="$Date: 2003/03/18 15:14:20 $";
1.1 paf 12:
1.9 parser 13: #include "pa_wcontext.h"
1.6 parser 14: #include "pa_vvoid.h"
1.1 paf 15:
1.9 parser 16: /// specialized write wrapper, completely transparent, but intercepting string writes
1.24.2.2 paf 17: class VCodeFrame: public WContext {
1.1 paf 18: public: // Value
19:
1.24.2.2 paf 20: override const char* type() const { return "code_frame"; }
1.9 parser 21: /// VCodeFrame: twice transparent
1.24.2.3.2.1 paf 22: override ValuePtr get_element(const String& aname, Value& aself, bool looking_up) {
1.21 paf 23: return wcontext.get_element(aname, aself, looking_up);
1.20 paf 24: }
1.9 parser 25: /// VCodeFrame: twice transparent
1.24.2.3.2.1 paf 26: override bool put_element(const String& aname, ValuePtr avalue, bool replace) {
1.10 parser 27: // $hash[^if(1){$.field[]}]
28: // put goes to $hash
1.19 paf 29: return wcontext.put_element(aname, avalue, replace);
1.10 parser 30: }
1.1 paf 31:
32: public: // WContext
33:
1.2 paf 34: /// VCodeFrame: intercepting string writes
1.24.2.3.2.2! paf 35: override void write(const String& string, Untaint_lang lang) {
1.24.2.2 paf 36: fstring->append(string, lang);
1.9 parser 37: }
38:
1.11 parser 39: /** VCodeFrame: twice transparent
40:
41: if value is VString writes fstring,
42: else writes Value; raises an error if already
1.17 paf 43:
44: $hash[^if(1){$hash}]
1.11 parser 45: */
1.24.2.3.2.1 paf 46: override void write(ValuePtr avalue, const String& aorigin) {
47: if(const String& fstring=avalue->get_string(&apool))
1.17 paf 48: write(*fstring, String::UL_PASS_APPENDED);
1.11 parser 49: else
1.24.2.3.2.2! paf 50: wcontext.write(avalue, aorigin);
1.1 paf 51: }
1.17 paf 52:
1.1 paf 53:
54: public: // usage
55:
1.24.2.2 paf 56: VCodeFrame(WContext& awcontext, WContext *parent):
57: WContext(ValuePtr(&awcontext), parent),
58: wcontext(awcontext) {}
1.9 parser 59:
60: private:
61:
62: WContext& wcontext;
1.1 paf 63:
64: };
65:
66: #endif
E-mail: