001 [37;1mpackage[0m[37;40m [0m[96mSyntax::Kamelon[0m[37;40m::[0m[96mWx[0m[37;40m::[0m[96mPluggableTextCtrl[0m[37;40m;[0m
002
003 [96muse[0m[37;40m [0m[37;1mstrict[0m[37;40m;[0m
004 [96muse[0m[37;40m [0m[37;1mwarnings[0m[37;40m;[0m
005 [96muse[0m[37;40m Carp;[0m
006
007 [96muse[0m[37;40m [0m[37;1mvars[0m[37;40m [0m[32mqw([0m[37;40m$VERSION[0m[32m)[0m[37;40m;[0m
008 [94;1m$VERSION[0m[37;40m=[0m[32m"[0m[31;103m0.01[0m[32m"[0m[37;40m;[0m
009
010 [96muse[0m[37;40m Wx [0m[32mqw([0m[37;40m :textctrl :font :colour [0m[32m)[0m[37;40m;[0m
011 [96muse[0m[37;40m [0m[96mWx::DND[0m[37;40m;[0m
012 [96muse[0m[37;40m Wx [0m[32mqw([0m[37;40m wxTheClipboard [0m[32m)[0m[37;40m;[0m
013 [96muse[0m[37;40m base [0m[32mqw([0m[37;40m Wx::TextCtrl [0m[32m)[0m[37;40m;[0m
014 [96muse[0m[37;40m [0m[96mWx::Event[0m[37;40m [0m[32mqw([0m[37;40m EVT_CHAR [0m[32m)[0m[37;40m;[0m
015
016 [96mrequire[0m[37;40m [0m[96mSyntax::Kamelon[0m[37;40m::[0m[96mWx[0m[37;40m::[0m[96mPluggableTextCtrl[0m[37;40m::[0m[96mKeyEchoes[0m[37;40m;[0m
017 [96mrequire[0m[37;40m [0m[96mSyntax::Kamelon[0m[37;40m::[0m[96mWx[0m[37;40m::[0m[96mPluggableTextCtrl[0m[37;40m::[0m[96mUndoRedo[0m[37;40m;[0m
018 [96mrequire[0m[37;40m [0m[96mSyntax::Kamelon[0m[37;40m::[0m[96mWx[0m[37;40m::[0m[96mPluggableTextCtrl[0m[37;40m::[0m[96mHighlighter[0m[37;40m;[0m
019
020 [37;1mmy[0m[37;40m [0m[94;1m$defaultfont[0m[37;40m = [[0m[31;1m10[0m[37;40m, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, [0m[31;1m0[0m[37;40m];[0m
021
022 [37;1mmy[0m[37;40m [0m[94;1m$debug[0m[37;40m = [0m[31;1m0[0m[37;40m;[0m
023
024 [37;1mif[0m[37;40m ([0m[94;1m$debug[0m[37;40m) {[0m
025 [37;40m [0m[96muse[0m[37;40m [0m[96mData::Dumper[0m[37;40m;[0m
026 [37;40m}[0m
027
028 [37;1msub [0m[96mnew[0m[37;40m {[0m
029 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$class[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
030 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[94;1m$class[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mnew[0m[37;40m([0m[94;1m@_[0m[37;40m);[0m
031
032 [37;40m [0m[94;1m$self[0m[37;40m->{CALLBACK} = [0m[37;1msub [0m[37;40m{};[0m
033 [37;40m [0m[94;1m$self[0m[37;40m->{COMMANDS} = {[0m
034 [37;40m [0m[32m'[0m[32;103mdoremove[0m[32m'[0m[37;40m => \&DoRemove,[0m
035 [37;40m [0m[32m'[0m[32;103mdoreplace[0m[32m'[0m[37;40m => \&DoReplace,[0m
036 [37;40m [0m[32m'[0m[32;103mdowrite[0m[32m'[0m[37;40m => \&DoWrite,[0m
037 [37;40m };[0m
038 [37;40m [0m[94;1m$self[0m[37;40m->{LISTENING} = [0m[31;1m0[0m[37;40m;[0m
039 [37;40m [0m
040 [37;40m [0m[94;1m$self[0m[37;40m->{OVRMODE} = [0m[31;1m0[0m[37;40m;[0m
041 [37;40m [0m[94;1m$self[0m[37;40m->{PLUGINS} = [];[0m
042
043 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSetFont[0m[37;40m( [0m[96mWx::Font[0m[37;40m->new([0m[94;1m@$defaultfont[0m[37;40m) );[0m
044 [37;40m EVT_CHAR([0m[94;1m$self[0m[37;40m, \&OnChar);[0m
045
046 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m;[0m
047 [37;40m}[0m
048
049 [37;1msub [0m[96mAppendText[0m[37;40m {[0m
050 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
051 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[32m'[0m[32;103mappend[0m[32m'[0m[37;40m, [0m[94;1m@_[0m[37;40m)) {[0m
052 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mAppend[0m[37;40m([0m[94;1m@_[0m[37;40m);[0m
053 [37;40m }[0m
054 [37;40m}[0m
055
056 [37;1msub [0m[96mBroadcast[0m[37;40m {[0m
057 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
058 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$plugs[0m[37;40m = [0m[94;1m$self[0m[37;40m->{PLUGINS};[0m
059 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$flag[0m[37;40m = [0m[31;1m0[0m[37;40m;[0m
060 [37;40m [0m[37;1mforeach[0m[37;40m ([0m[94;1m@$plugs[0m[37;40m) {[0m
061 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;43m$_[0m[37;40m->[0m[94;1mReceive[0m[37;40m([0m[94;1m@_[0m[37;40m)) {[0m
062 [37;40m [0m[94;1m$flag[0m[37;40m = [0m[31;1m1[0m[37;40m;[0m
063 [37;40m }[0m
064 [37;40m }[0m
065 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$flag[0m[37;40m;[0m
066 [37;40m}[0m
067
068 [37;1msub [0m[96mCall2Remove[0m[37;40m {[0m
069 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$call[0m[37;40m, [0m[94;1m$index[0m[37;40m, [0m[94;1m$txt[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
070 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$call[0m[37;40m =~ [0m[32m/[0m[36;1m.[0m[36;1;103m*[0m[36;1mremove[0m[36;1;103m$[0m[32m/[0m[37;40m) {[0m
071 [37;40m [0m[37;1mreturn[0m[37;40m ([0m[94;1m$index[0m[37;40m, [0m[94;1m$index[0m[37;40m + [0m[96mlength[0m[37;40m([0m[94;1m$txt[0m[37;40m))[0m
072 [37;40m } [0m[37;1melse[0m[37;40m {[0m
073 [37;40m carp [0m[32m"[0m[31;103mCall '[0m[94;1m$call[0m[32m'[0m[31;103m is not a remove type[0m[32m"[0m[37;40m;[0m
074 [37;40m [0m[37;1mreturn[0m[37;40m [0m[96mundef[0m
075 [37;40m }[0m
076 [37;40m}[0m
077
078 [37;1msub [0m[96mCall2Replace[0m[37;40m {[0m
079 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$call[0m[37;40m, [0m[94;1m$index[0m[37;40m, [0m[94;1m$old[0m[37;40m, [0m[94;1m$txt[0m[37;40m, [0m[94;1m$sel[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
080 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$call[0m[37;40m =~ [0m[32m/[0m[36;1m.[0m[36;1;103m*[0m[36;1mreplace[0m[36;1;103m$[0m[32m/[0m[37;40m) {[0m
081 [37;40m [0m[37;1mreturn[0m[37;40m ([0m[94;1m$index[0m[37;40m, [0m[94;1m$index[0m[37;40m + [0m[96mlength[0m[37;40m([0m[94;1m$old[0m[37;40m), [0m[94;1m$txt[0m[37;40m)[0m
082 [37;40m } [0m[37;1melse[0m[37;40m {[0m
083 [37;40m carp [0m[32m"[0m[31;103mCall '[0m[94;1m$call[0m[32m'[0m[31;103m is not a replace type[0m[32m"[0m[37;40m;[0m
084 [37;40m [0m[37;1mreturn[0m[37;40m [0m[96mundef[0m
085 [37;40m }[0m
086 [37;40m}[0m
087
088 [37;1msub [0m[96mCall2WriteText[0m[37;40m {[0m
089 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$call[0m[37;40m, [0m[94;1m$index[0m[37;40m, [0m[94;1m$txt[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
090 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$call[0m[37;40m =~ [0m[32m/[0m[36;1m.[0m[36;1;103m*[0m[36;1mwrite[0m[36;1;103m$[0m[32m/[0m[37;40m) {[0m
091 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$txt[0m
092 [37;40m } [0m[37;1melse[0m[37;40m {[0m
093 [37;40m carp [0m[32m"[0m[31;103mCall '[0m[94;1m$call[0m[32m'[0m[31;103m is not a write type[0m[32m"[0m[37;40m;[0m
094 [37;40m [0m[37;1mreturn[0m[37;40m [0m[96mundef[0m
095 [37;40m }[0m
096 [37;40m}[0m
097
098 [37;1msub [0m[96mCallback[0m[37;40m {[0m
099 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
100 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m@_[0m[37;40m) { [0m[94;1m$self[0m[37;40m->{CALLBACK} = [0m[96mshift[0m[37;40m; }[0m
101 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m->{CALLBACK};[0m
102 [37;40m}[0m
103
104 [37;1msub [0m[96mCanUndo[0m[37;40m {[0m
105 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
106 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[32m'[0m[32;103mcanundo[0m[32m'[0m[37;40m);[0m
107 [37;40m}[0m
108
109 [37;1msub [0m[96mCanRedo[0m[37;40m {[0m
110 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
111 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[32m'[0m[32;103mcanredo[0m[32m'[0m[37;40m);[0m
112 [37;40m}[0m
113
114 [37;1msub [0m[96mClear[0m[37;40m {[0m
115 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
116 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[32m'[0m[32;103mclear[0m[32m'[0m[37;40m)) {[0m
117 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mClear[0m[37;40m;[0m
118 [37;40m }[0m
119 [37;40m}[0m
120
121 [37;1msub [0m[96mClearSelection[0m[37;40m {[0m
122 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
123 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$ins[0m[37;40m = [0m[94;1m$self[0m[37;40m->[0m[94;1mGetInsertionPoint[0m[37;40m;[0m
124 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSetSelection[0m[37;40m([0m[94;1m$ins[0m[37;40m, [0m[94;1m$ins[0m[37;40m);[0m
125 [37;40m}[0m
126
127 [37;1msub [0m[96mCommand[0m[37;40m {[0m
128 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
129 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$name[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
130 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m@_[0m[37;40m) { [0m[94;1m$self[0m[37;40m->{COMMANDS}->{[0m[94;1m$name[0m[37;40m} = [0m[96mshift[0m[37;40m }[0m
131 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m->{COMMANDS}->{[0m[94;1m$name[0m[37;40m}[0m
132 [37;40m}[0m
133
134 [37;1msub [0m[96mCopy[0m[37;40m {[0m
135 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
136 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[32m'[0m[32;103mcopy[0m[32m'[0m[37;40m)) {[0m
137 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mCopy[0m[37;40m;[0m
138 [37;40m }[0m
139 [37;40m}[0m
140
141 [37;1msub [0m[96mCut[0m[37;40m {[0m
142 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
143 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[32m'[0m[32;103mcut[0m[32m'[0m[37;40m)) {[0m
144 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mCut[0m[37;40m;[0m
145 [37;40m }[0m
146 [37;40m}[0m
147
148 [37;1msub [0m[96mDoRemove[0m[37;40m {[0m
149 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
150 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$index[0m[37;40m, [0m[94;1m$txt[0m[37;40m, [0m[94;1m$sel[0m[37;40m, [0m[94;1m$ins[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
151 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mClearSelection[0m[37;40m;[0m
152 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mRemove[0m[37;40m([0m[94;1m$index[0m[37;40m, [0m[94;1m$index[0m[37;40m + [0m[96mlength[0m[37;40m([0m[94;1m$txt[0m[37;40m));[0m
153 [37;40m [0m[37;1mif[0m[37;40m ([0m[96mdefined[0m[37;40m([0m[94;1m$ins[0m[37;40m)) {[0m
154 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSetInsertionPoint[0m[37;40m([0m[94;1m$ins[0m[37;40m);[0m
155 [37;40m }[0m
156 [37;40m [0m[37;1mreturn[0m[37;40m [0m[31;1m1[0m
157 [37;40m}[0m
158
159 [37;1msub [0m[96mDoReplace[0m[37;40m {[0m
160 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$index[0m[37;40m, [0m[94;1m$old[0m[37;40m, [0m[94;1m$txt[0m[37;40m, [0m[94;1m$sel[0m[37;40m, [0m[94;1m$ins[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
161 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mClearSelection[0m[37;40m;[0m
162 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mReplace[0m[37;40m([0m[94;1m$index[0m[37;40m, [0m[94;1m$index[0m[37;40m + [0m[96mlength[0m[37;40m([0m[94;1m$old[0m[37;40m), [0m[94;1m$txt[0m[37;40m);[0m
163 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$sel[0m[37;40m) {[0m
164 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSetSelection[0m[37;40m([0m[94;1m$index[0m[37;40m, [0m[94;1m$index[0m[37;40m + [0m[96mlength[0m[37;40m([0m[94;1m$txt[0m[37;40m));[0m
165 [37;40m }[0m
166 [37;40m [0m[37;1mif[0m[37;40m ([0m[96mdefined[0m[37;40m([0m[94;1m$ins[0m[37;40m)) {[0m
167 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSetInsertionPoint[0m[37;40m([0m[94;1m$ins[0m[37;40m);[0m
168 [37;40m }[0m
169 [37;40m [0m[37;1mreturn[0m[37;40m [0m[31;1m1[0m
170 [37;40m}[0m
171
172 [37;1msub [0m[96mDoWrite[0m[37;40m {[0m
173 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$index[0m[37;40m, [0m[94;1m$txt[0m[37;40m, [0m[94;1m$sel[0m[37;40m, [0m[94;1m$ins[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
174 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mClearSelection[0m[37;40m;[0m
175 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSetInsertionPoint[0m[37;40m([0m[94;1m$index[0m[37;40m);[0m
176 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mWriteText[0m[37;40m([0m[94;1m$txt[0m[37;40m);[0m
177 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$sel[0m[37;40m) {[0m
178 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSetSelection[0m[37;40m([0m[94;1m$index[0m[37;40m, [0m[94;1m$index[0m[37;40m + [0m[96mlength[0m[37;40m([0m[94;1m$txt[0m[37;40m));[0m
179 [37;40m }[0m
180 [37;40m [0m[37;1mif[0m[37;40m ([0m[96mdefined[0m[37;40m([0m[94;1m$ins[0m[37;40m)) {[0m
181 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSetInsertionPoint[0m[37;40m([0m[94;1m$ins[0m[37;40m);[0m
182 [37;40m }[0m
183 [37;40m [0m[37;1mreturn[0m[37;40m [0m[31;1m1[0m
184 [37;40m}[0m
185
186 [37;1msub [0m[96mFindPluginId[0m[37;40m {[0m
187 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$name[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
188 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$plgs[0m[37;40m = [0m[94;1m$self[0m[37;40m->{PLUGINS};[0m
189 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$index[0m[37;40m = [0m[31;1m0[0m[37;40m;[0m
190 [37;40m [0m[37;1mforeach[0m[37;40m ([0m[94;1m@$plgs[0m[37;40m) {[0m
191 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$name[0m[37;40m [0m[32meq[0m[37;40m [0m[94;1m$plgs[0m[37;40m->[[0m[94;1m$index[0m[37;40m]->Name) {[0m
192 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$index[0m
193 [37;40m }[0m
194 [37;40m [0m[94;1m$index[0m[37;40m ++;[0m
195 [37;40m }[0m
196 [37;1;100m# carp "Plugin $name is not loaded\n";[0m
197 [37;40m [0m[37;1mreturn[0m[37;40m [0m[96mundef[0m[37;40m;[0m
198 [37;40m}[0m
199
200 [37;1msub [0m[96mFindPlugin[0m[37;40m {[0m
201 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$name[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
202 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$plgs[0m[37;40m = [0m[94;1m$self[0m[37;40m->{PLUGINS};[0m
203 [37;40m [0m[37;1mforeach[0m[37;40m ([0m[94;1m@$plgs[0m[37;40m) {[0m
204 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$name[0m[37;40m [0m[32meq[0m[37;40m [0m[94;43m$_[0m[37;40m->[0m[94;1mName[0m[37;40m) {[0m
205 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;43m$_[0m
206 [37;40m }[0m
207 [37;40m }[0m
208 [37;40m [0m[37;1mreturn[0m[37;40m [0m[96mundef[0m[37;40m;[0m
209 [37;40m}[0m
210
211 [37;1msub [0m[96mGetClipboardText[0m[37;40m {[0m
212 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
213 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$txt[0m[37;40m = [0m[96mundef[0m[37;40m;[0m
214 [37;40m [0m[37;1mif[0m[37;40m (wxTheClipboard->Open) {[0m
215 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$debug[0m[37;40m) { [0m[96mprint[0m[37;40m [0m[32m"[0m[31;103mClipboard open[0m[36;1;103m\n[0m[32m"[0m[37;40m }[0m
216 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$textdata[0m[37;40m = [0m[96mWx::TextDataObject[0m[37;40m->new;[0m
217 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$ok[0m[37;40m = wxTheClipboard->GetData( [0m[94;1m$textdata[0m[37;40m );[0m
218 [37;40m [0m[37;1mif[0m[37;40m( [0m[94;1m$ok[0m[37;40m ) {[0m
219 [37;40m [0m[94;1m$txt[0m[37;40m = [0m[94;1m$textdata[0m[37;40m->[0m[94;1mGetText[0m[37;40m;[0m
220 [37;40m }[0m
221 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$debug[0m[37;40m [0m[32mand[0m[37;40m [0m[96mdefined[0m[37;40m([0m[94;1m$txt[0m[37;40m)) { [0m[96mprint[0m[37;40m [0m[32m"[0m[31;103mClipboard text: [0m[94;1m$txt[0m[36;1;103m\n[0m[32m"[0m[37;40m }[0m
222 [37;40m wxTheClipboard->Close;[0m
223 [37;40m }[0m
224 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$txt[0m[37;40m;[0m
225 [37;40m}[0m
226
227 [37;1msub [0m[96mGetLineNumber[0m[37;40m {[0m
228 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$index[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
229 [37;40m [0m[37;1munless[0m[37;40m ([0m[96mdefined[0m[37;40m([0m[94;1m$index[0m[37;40m)) { [0m[94;1m$index[0m[37;40m = [0m[94;1m$self[0m[37;40m->[0m[94;1mGetInsertionPoint[0m[37;40m };[0m
230 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$col[0m[37;40m, [0m[94;1m$line[0m[37;40m) = [0m[94;1m$self[0m[37;40m->[0m[94;1mPositionToXY[0m[37;40m([0m[94;1m$index[0m[37;40m);[0m
231 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$line[0m[37;40m;[0m
232 [37;40m}[0m
233
234 [37;1msub [0m[96mHasSelection[0m[37;40m {[0m
235 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
236 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$selb[0m[37;40m, [0m[94;1m$sele[0m[37;40m) = [0m[94;1m$self[0m[37;40m->[0m[94;1mGetSelection[0m[37;40m;[0m
237 [37;40m [0m[37;1mreturn[0m[37;40m ([0m[94;1m$selb[0m[37;40m [0m[32mne[0m[37;40m [0m[94;1m$sele[0m[37;40m)[0m
238 [37;40m}[0m
239
240 [37;1;100m# [0m[37;1;42mTODO[0m[37;1;100m make this unicode compatible[0m
241 [37;1msub [0m[96mIsWriteable[0m[37;40m {[0m
242 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$key[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
243 [37;40m [0m[37;1mif[0m[37;40m ((([0m[94;1m$key[0m[37;40m >= [0m[31;1m32[0m[37;40m) [0m[32mand[0m[37;40m ([0m[94;1m$key[0m[37;40m < [0m[31;1m127[0m[37;40m)) [0m[32mor[0m[37;40m (([0m[94;1m$key[0m[37;40m > [0m[31;1m127[0m[37;40m) [0m[32mand[0m[37;40m ([0m[94;1m$key[0m[37;40m < [0m[31;1m256[0m[37;40m))) {[0m
244 [37;40m [0m[37;1mreturn[0m[37;40m [0m[31;1m1[0m
245 [37;40m }[0m
246 [37;40m [0m[37;1mreturn[0m[37;40m [0m[31;1m0[0m
247 [37;40m}[0m
248
249 [37;1msub [0m[96mListening[0m[37;40m {[0m
250 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
251 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m@_[0m[37;40m) {[0m
252 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$new[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
253 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$new[0m[37;40m [0m[32meq[0m[37;40m [0m[94;1m$self[0m[37;40m->{LISTENING}) {[0m
254 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$plgs[0m[37;40m = [0m[94;1m$self[0m[37;40m->{PLUGINS};[0m
255 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$new[0m[37;40m) {[0m
256 [37;40m [0m[96munshift[0m[37;40m [0m[94;1m@$plgs[0m[37;40m, [0m[94;1m$self[0m
257 [37;40m } [0m[37;1melse[0m[37;40m {[0m
258 [37;40m [0m[96mshift[0m[37;40m [0m[94;1m@$plgs[0m
259 [37;40m }[0m
260 [37;40m [0m[94;1m$self[0m[37;40m->{LISTENING} = [0m[94;1m$new[0m
261 [37;40m }[0m
262 [37;40m }[0m
263 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m->{LISTENING}[0m
264 [37;40m}[0m
265
266 [37;1msub [0m[96mLoadFile[0m[37;40m {[0m
267 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
268 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[32m'[0m[32;103mload[0m[32m'[0m[37;40m, [0m[94;1m@_[0m[37;40m)) {[0m
269 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mLoadFile[0m[37;40m([0m[94;1m@_[0m[37;40m);[0m
270 [37;40m }[0m
271 [37;40m}[0m
272
273 [37;1msub [0m[96mLoadPlugin[0m[37;40m {[0m
274 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
275 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$plug[0m[37;40m = [0m[96mundef[0m[37;40m;[0m
276 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$name[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
277 [37;40m [0m[37;1;100m#Does anybody have a better idea for this?[0m
278 [37;40m [0m[94;1m$name[0m[37;40m = [0m[32m"[0m[31;103mSyntax::Kamelon::Wx::PluggableTextCtrl::[0m[94;1m$name[0m[32m"[0m[37;40m;[0m
279 [37;40m [0m[94;1m$plug[0m[37;40m = [0m[94;1m$name[0m[37;40m->[0m[94;1mnew[0m[37;40m([0m[94;1m$self[0m[37;40m, [0m[94;1m@_[0m[37;40m);[0m
280 [37;40m [0m[37;1mif[0m[37;40m ([0m[96mdefined[0m[37;40m([0m[94;1m$plug[0m[37;40m)) {[0m
281 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mRegisterPlugin[0m[37;40m([0m[94;1m$plug[0m[37;40m);[0m
282 [37;40m } [0m[37;1melse[0m[37;40m {[0m
283 [37;40m carp [0m[32m"[0m[31;103munable to load plugin [0m[94;1m$name[0m[36;1;103m\n[0m[32m"[0m[37;40m;[0m
284 [37;40m }[0m
285 [37;40m}[0m
286
287 [37;1msub [0m[96mName[0m[37;40m {[0m
288 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
289 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$name[0m[37;40m = [0m[96mref[0m[37;40m [0m[94;1m$self[0m[37;40m;[0m
290 [37;40m [0m[94;1m$name[0m[37;40m =~[0m[32ms/[0m[36;1m.[0m[36;1;103m*[0m[36;1m::[0m[32m//[0m[37;40m;[0m
291 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$debug[0m[37;40m) { [0m[96mprint[0m[37;40m [0m[32m"[0m[31;103mplugin name is [0m[94;1m$name[0m[36;1;103m\n[0m[32m"[0m[37;40m }[0m
292 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$name[0m
293 [37;40m}[0m
294
295 [37;1msub [0m[96mOnChar[0m[37;40m {[0m
296 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$event[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
297 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$k[0m[37;40m = [0m[94;1m$event[0m[37;40m->[0m[94;1mGetKeyCode[0m[37;40m;[0m
298 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$k[0m[37;40m [0m[32meq[0m[37;40m [0m[31;1m322[0m[37;40m) { [0m[37;1;100m#Insert key pressed, record flip insert/ovr mode.[0m
299 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mOvrMode[0m[37;40m) {[0m
300 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mOvrMode[0m[37;40m([0m[31;1m0[0m[37;40m)[0m
301 [37;40m } [0m[37;1melse[0m[37;40m {[0m
302 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mOvrMode[0m[37;40m([0m[31;1m1[0m[37;40m)[0m
303 [37;40m }[0m
304 [37;40m }[0m
305 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[32m'[0m[32;103mkey[0m[32m'[0m[37;40m, [0m[94;1m$event[0m[37;40m)) {[0m
306 [37;40m [0m[94;1m$event[0m[37;40m->[0m[94;1mSkip[0m[37;40m;[0m
307 [37;40m }[0m
308 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$callback[0m[37;40m = [0m[94;1m$self[0m[37;40m->[0m[94;1mCallback[0m[37;40m;[0m
309 [37;40m &[0m[94;1m$callback[0m[37;40m;[0m
310 [37;40m}[0m
311
312 [37;1msub [0m[96mOvrMode[0m[37;40m {[0m
313 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
314 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m@_[0m[37;40m) { [0m[94;1m$self[0m[37;40m->{OVRMODE} = [0m[96mshift[0m[37;40m; }[0m
315 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m->{OVRMODE};[0m
316 [37;40m}[0m
317
318 [37;1msub [0m[96mPaste[0m[37;40m {[0m
319 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
320 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[32m'[0m[32;103mpaste[0m[32m'[0m[37;40m)) {[0m
321 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mPaste[0m[37;40m;[0m
322 [37;40m }[0m
323 [37;40m}[0m
324
325 [37;1msub [0m[96mPlugin[0m[37;40m {[0m
326 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
327 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$id[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
328 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$plgs[0m[37;40m = [0m[94;1m$self[0m[37;40m->{PLUGINS};[0m
329 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$id[0m[37;40m =~ [0m[32m/[0m[36;1;103m^[0m[92m\d[0m[36;1;103m+$[0m[32m/[0m[37;40m) {[0m
330 [37;40m [0m[94;1m$id[0m[37;40m = [0m[94;1m$self[0m[37;40m->[0m[94;1mFindPluginId[0m[37;40m([0m[94;1m$id[0m[37;40m);[0m
331 [37;40m }[0m
332 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m@_[0m[37;40m) { [0m
333 [37;40m [0m[94;1m$self[0m[37;40m->{PLUGINS}->[[0m[94;1m$id[0m[37;40m] = [0m[96mshift[0m[37;40m; [0m
334 [37;40m }[0m
335 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m->{PLUGINS}->[[0m[94;1m$id[0m[37;40m];[0m
336 [37;40m}[0m
337
338 [37;1msub [0m[96mReceive[0m[37;40m {[0m
339 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
340 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$name[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
341 [37;1;100m# if ($debug) { print "received $name\n"; print Dumper $self->{COMMANDS} }[0m
342 [37;40m [0m[37;1mif[0m[37;40m ([0m[96mexists[0m[37;40m [0m[94;1m$self[0m[37;40m->{COMMANDS}->{[0m[94;1m$name[0m[37;40m}) {[0m
343 [37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$debug[0m[37;40m) { [0m[96mprint[0m[37;40m [0m[32m"[0m[31;103mexecuting [0m[94;1m$name[0m[36;1;103m\n[0m[32m"[0m[37;40m }[0m
344 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$cmd[0m[37;40m = [0m[94;1m$self[0m[37;40m->[0m[94;1mCommand[0m[37;40m([0m[94;1m$name[0m[37;40m);[0m
345 [37;40m [0m[37;1mreturn[0m[37;40m &[0m[94;1m$cmd[0m[37;40m([0m[94;1m$self[0m[37;40m, [0m[94;1m@_[0m[37;40m);[0m
346 [37;40m }[0m
347 [37;40m [0m[37;1mreturn[0m[37;40m [0m[31;1m0[0m
348 [37;40m}[0m
349
350 [37;1msub [0m[96mRedo[0m[37;40m {[0m
351 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
352 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[32m'[0m[32;103mredo[0m[32m'[0m[37;40m)) {[0m
353 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mRedo[0m[37;40m;[0m
354 [37;40m }[0m
355 [37;40m}[0m
356
357 [37;1msub [0m[96mRegisterPlugin[0m[37;40m {[0m
358 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$plug[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
359 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$pl[0m[37;40m = [0m[94;1m$self[0m[37;40m->{PLUGINS};[0m
360 [37;40m [0m[96mpush[0m[37;40m [0m[94;1m@$pl[0m[37;40m, [0m[94;1m$plug[0m[37;40m;[0m
361 [37;40m}[0m
362
363 [37;1msub [0m[96mRemove[0m[37;40m {[0m
364 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
365 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m@call[0m[37;40m = [0m[94;1m$self[0m[37;40m->[0m[94;1mRemove2Call[0m[37;40m([0m[94;1m@_[0m[37;40m);[0m
366 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[94;1m@call[0m[37;40m)) {[0m
367 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mRemove[0m[37;40m([0m[94;1m@_[0m[37;40m);[0m
368 [37;40m }[0m
369 [37;40m}[0m
370
371 [37;1msub [0m[96mRemove2Call[0m[37;40m {[0m
372 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$begin[0m[37;40m, [0m[94;1m$end[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
373 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$sel[0m[37;40m = [0m[31;1m0[0m[37;40m;[0m
374 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$selb[0m[37;40m, [0m[94;1m$sele[0m[37;40m) = [0m[94;1m$self[0m[37;40m->[0m[94;1mGetSelection[0m[37;40m;[0m
375 [37;40m [0m[37;1mif[0m[37;40m (([0m[94;1m$selb[0m[37;40m [0m[32meq[0m[37;40m [0m[94;1m$begin[0m[37;40m) [0m[32mand[0m[37;40m ([0m[94;1m$sele[0m[37;40m [0m[32meq[0m[37;40m [0m[94;1m$end[0m[37;40m)) { [0m[94;1m$sel[0m[37;40m = [0m[31;1m1[0m[37;40m }[0m
376 [37;40m [0m[37;1mreturn[0m[37;40m ([0m[32m'[0m[32;103mremove[0m[32m'[0m[37;40m, [0m[94;1m$begin[0m[37;40m, [0m[94;1m$self[0m[37;40m->[0m[94;1mGetRange[0m[37;40m([0m[94;1m$begin[0m[37;40m, [0m[94;1m$end[0m[37;40m), [0m[94;1m$sel[0m[37;40m)[0m
377 [37;40m}[0m
378
379 [37;1msub [0m[96mReplace[0m[37;40m {[0m
380 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
381 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m@call[0m[37;40m = [0m[94;1m$self[0m[37;40m->[0m[94;1mReplace2Call[0m[37;40m([0m[94;1m@_[0m[37;40m);[0m
382 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[94;1m@call[0m[37;40m)) {[0m
383 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mReplace[0m[37;40m([0m[94;1m@_[0m[37;40m);[0m
384 [37;40m }[0m
385 [37;40m}[0m
386
387 [37;1msub [0m[96mReplace2Call[0m[37;40m {[0m
388 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$begin[0m[37;40m, [0m[94;1m$end[0m[37;40m, [0m[94;1m$txt[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
389 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$sel[0m[37;40m = [0m[31;1m0[0m[37;40m;[0m
390 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$selb[0m[37;40m, [0m[94;1m$sele[0m[37;40m) = [0m[94;1m$self[0m[37;40m->[0m[94;1mGetSelection[0m[37;40m;[0m
391 [37;40m [0m[37;1mif[0m[37;40m (([0m[94;1m$selb[0m[37;40m [0m[32meq[0m[37;40m [0m[94;1m$begin[0m[37;40m) [0m[32mand[0m[37;40m ([0m[94;1m$sele[0m[37;40m [0m[32meq[0m[37;40m [0m[94;1m$end[0m[37;40m)) { [0m[94;1m$sel[0m[37;40m = [0m[31;1m1[0m[37;40m }[0m
392 [37;40m [0m[37;1mreturn[0m[37;40m ([0m[32m'[0m[32;103mreplace[0m[32m'[0m[37;40m, [0m[94;1m$begin[0m[37;40m, [0m[94;1m$txt[0m[37;40m, [0m[94;1m$self[0m[37;40m->[0m[94;1mGetRange[0m[37;40m([0m[94;1m$begin[0m[37;40m, [0m[94;1m$end[0m[37;40m), [0m[94;1m$sel[0m[37;40m)[0m
393 [37;40m}[0m
394
395 [37;1msub [0m[96mSaveFile[0m[37;40m {[0m
396 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
397 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[32m'[0m[32;103msave[0m[32m'[0m[37;40m, [0m[94;1m@_[0m[37;40m)) {[0m
398 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mSaveFile[0m[37;40m([0m[94;1m@_[0m[37;40m);[0m
399 [37;40m }[0m
400 [37;40m}[0m
401
402 [37;1msub [0m[96mNativePlugins[0m[37;40m {[0m
403 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
404 [37;40m [0m[37;1mreturn[0m[37;40m [0m[32mqw[[0m[37;40m Highlighter KeyEchoes UndoRedo [0m[32m][0m
405 [37;40m}[0m
406
407 [37;1msub [0m[96mSyntax[0m[37;40m {[0m
408 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
409 [37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[32m'[0m[32;103msyntax[0m[32m'[0m[37;40m, [0m[94;1m@_[0m[37;40m);[0m
410 [37;40m}[0m
411
412 [37;1msub [0m[96mUndo[0m[37;40m {[0m
413 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
414 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[32m'[0m[32;103mundo[0m[32m'[0m[37;40m)) {[0m
415 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mUndo[0m[37;40m;[0m
416 [37;40m }[0m
417 [37;40m}[0m
418
419 [37;1msub [0m[96mWriteText[0m[37;40m {[0m
420 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
421 [37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m@call[0m[37;40m = [0m[94;1m$self[0m[37;40m->[0m[94;1mWriteText2Call[0m[37;40m([0m[94;1m@_[0m[37;40m);[0m
422 [37;40m [0m[37;1munless[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mBroadcast[0m[37;40m([0m[94;1m@call[0m[37;40m)) {[0m
423 [37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mWriteText[0m[37;40m([0m[94;1m@_[0m[37;40m);[0m
424 [37;40m }[0m
425 [37;40m}[0m
426
427 [37;1msub [0m[96mWriteText2Call[0m[37;40m {[0m
428 [37;40m [0m[37;1mmy[0m[37;40m ([0m[94;1m$self[0m[37;40m, [0m[94;1m$txt[0m[37;40m) = [0m[94;1m@_[0m[37;40m;[0m
429 [37;40m [0m[37;1mreturn[0m[37;40m ([0m[32m'[0m[32;103mwrite[0m[32m'[0m[37;40m, [0m[94;1m$self[0m[37;40m->[0m[94;1mGetInsertionPoint[0m[37;40m, [0m[94;1m$txt[0m[37;40m, [0m[31;1m0[0m[37;40m);[0m
430 [37;40m}[0m
431
432
433 [31;1m1[0m[37;40m;[0m
434 [37;1m__END__[0m