Annotation of parser3/src/types/pa_vcode_frame.h, revision 1.24
1.2 paf 1: /** @file
1.3 paf 2: Parser: @b code_frame write wrapper write context
1.2 paf 3:
1.24 ! 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 ! paf 11: static const char* IDENT_VCODE_FRAME_H="$Date: 2002/10/31 15:01:55 $";
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
17: class VCodeFrame : public WContext {
1.1 paf 18: public: // Value
19:
20: const char *type() const { return "code_frame"; }
1.9 parser 21: /// VCodeFrame: twice transparent
1.23 paf 22: 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.19 paf 26: /*override*/ bool put_element(const String& aname, Value *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.18 paf 35: void write(const String& string, uchar 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.17 paf 46: void write(Value& avalue, const String* aorigin) {
47: if(const String *fstring=avalue.get_string())
48: write(*fstring, String::UL_PASS_APPENDED);
1.11 parser 49: else
1.17 paf 50: wcontext.write(avalue, aorigin);
1.1 paf 51: }
1.17 paf 52:
1.1 paf 53:
54: public: // usage
55:
1.22 paf 56: VCodeFrame(Pool& apool, WContext& awcontext, WContext *parent) :
57: WContext(apool, &awcontext, parent),
1.9 parser 58: wcontext(awcontext) {
1.1 paf 59: }
1.9 parser 60:
61: private:
62:
63: WContext& wcontext;
1.1 paf 64:
65: };
66:
67: #endif
E-mail: