Annotation of parser3/src/types/pa_vcode_frame.h, revision 1.16
1.2 paf 1: /** @file
1.3 paf 2: Parser: @b code_frame write wrapper write context
1.2 paf 3:
1.13 paf 4: Copyright (c) 2001, 2002 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.16 ! paf 11: static const char* IDENT_VCODE_FRAME_H="$Date: pa_vcode_frame.h,v 1.15 2002/08/01 11:26:54 paf Exp $";
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
22: Value *get_element(const String& name) { return wcontext.get_element(name); }
23: /// VCodeFrame: twice transparent
1.10 parser 24: void put_element(const String& name, Value *value){
25: // $hash[^if(1){$.field[]}]
26: // put goes to $hash
27: wcontext.put_element(name, value);
28: }
1.1 paf 29:
30: public: // WContext
31:
1.2 paf 32: /// VCodeFrame: intercepting string writes
1.9 parser 33: virtual void write(const String& string, String::Untaint_lang lang) {
34: fstring.append(string, lang);
35: }
36:
37: /// VCodeFrame: twice transparent
38: virtual void write(Value& value) {
1.10 parser 39: // ^method[^if(1){$hash}]
40: // write goes ^method[here]
1.9 parser 41: wcontext.write(value);
42: }
43:
1.11 parser 44: /** VCodeFrame: twice transparent
45:
46: if value is VString writes fstring,
47: else writes Value; raises an error if already
48: */
1.9 parser 49: virtual void write(Value& value, String::Untaint_lang lang) {
1.11 parser 50: if(const String *fstring=value.get_string())
51: write(*fstring, lang);
52: else
53: wcontext.write(value, lang);
1.1 paf 54: }
55:
56: public: // usage
57:
58: VCodeFrame(Pool& apool, WContext& awcontext) :
1.9 parser 59: WContext(apool, &awcontext),
60: wcontext(awcontext) {
1.1 paf 61: }
1.9 parser 62:
63: private:
64:
65: WContext& wcontext;
1.1 paf 66:
67: };
68:
69: #endif
E-mail: