Annotation of parser3/src/types/pa_vcode_frame.h, revision 1.32
1.2 paf 1: /** @file
1.3 paf 2: Parser: @b code_frame write wrapper write context
1.2 paf 3:
1.32 ! paf 4: Copyright (c) 2001-2005 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.32 ! paf 11: static const char * const IDENT_VCODE_FRAME_H="$Date: 2005/08/08 08:41:51 $";
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.25 paf 17: class VCodeFrame: public WContext {
1.1 paf 18: public: // Value
19:
1.25 paf 20: override const char* type() const { return "code_frame"; }
1.9 parser 21: /// VCodeFrame: twice transparent
1.25 paf 22: override Value* 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.31 paf 26: override const VJunction* put_element(Value& aself, const String& aname, Value* avalue, bool areplace) {
1.10 parser 27: // $hash[^if(1){$.field[]}]
28: // put goes to $hash
1.30 paf 29: return wcontext.put_element(aself, aname, avalue, areplace);
1.10 parser 30: }
1.1 paf 31:
32: public: // WContext
33:
1.2 paf 34: /// VCodeFrame: intercepting string writes
1.25 paf 35: override void write(const String& string, String::Language lang) {
1.9 parser 36: fstring.append(string, lang);
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.25 paf 46: override void write(Value& avalue) {
47: if(const String* lstring=avalue.get_string())
48: write(*lstring, String::L_PASS_APPENDED);
1.11 parser 49: else
1.25 paf 50: wcontext.write(avalue);
1.1 paf 51: }
1.17 paf 52:
1.1 paf 53:
54: public: // usage
55:
1.25 paf 56: VCodeFrame(WContext& awcontext, WContext *parent):
57: WContext(&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: