[37;1mpackage[0m[37;40m [0m[96mSyntax::Kamelon[0m[37;40m::[0m[96mWx[0m[37;40m::[0m[96mPluggableTextCtrl[0m[37;40m;[0m
[96muse[0m[37;40m [0m[37;1mstrict[0m[37;40m;[0m
[96muse[0m[37;40m [0m[37;1mwarnings[0m[37;40m;[0m
[96muse[0m[37;40m Carp;[0m
[96muse[0m[37;40m [0m[37;1mvars[0m[37;40m [0m[32mqw([0m[37;40m$VERSION[0m[32m)[0m[37;40m;[0m
[94;1m$VERSION[0m[37;40m=[0m[32m"[0m[31;103m0.01[0m[32m"[0m[37;40m;[0m
[96muse[0m[37;40m Wx [0m[32mqw([0m[37;40m :textctrl :font :colour [0m[32m)[0m[37;40m;[0m
[96muse[0m[37;40m [0m[96mWx::DND[0m[37;40m;[0m
[96muse[0m[37;40m Wx [0m[32mqw([0m[37;40m wxTheClipboard [0m[32m)[0m[37;40m;[0m
[96muse[0m[37;40m base [0m[32mqw([0m[37;40m Wx::TextCtrl [0m[32m)[0m[37;40m;[0m
[96muse[0m[37;40m [0m[96mWx::Event[0m[37;40m [0m[32mqw([0m[37;40m EVT_CHAR [0m[32m)[0m[37;40m;[0m
[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
[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
[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
[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
[37;1mmy[0m[37;40m [0m[94;1m$debug[0m[37;40m = [0m[31;1m0[0m[37;40m;[0m
[37;1mif[0m[37;40m ([0m[94;1m$debug[0m[37;40m) {[0m
[37;40m [0m[96muse[0m[37;40m [0m[96mData::Dumper[0m[37;40m;[0m
[37;40m}[0m
[37;1msub [0m[96mnew[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$class[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m [0m[94;1m$self[0m[37;40m->{CALLBACK} = [0m[37;1msub [0m[37;40m{};[0m
[37;40m [0m[94;1m$self[0m[37;40m->{COMMANDS} = {[0m
[37;40m [0m[32m'[0m[32;103mdoremove[0m[32m'[0m[37;40m => \&DoRemove,[0m
[37;40m [0m[32m'[0m[32;103mdoreplace[0m[32m'[0m[37;40m => \&DoReplace,[0m
[37;40m [0m[32m'[0m[32;103mdowrite[0m[32m'[0m[37;40m => \&DoWrite,[0m
[37;40m };[0m
[37;40m [0m[94;1m$self[0m[37;40m->{LISTENING} = [0m[31;1m0[0m[37;40m;[0m
[37;40m [0m
[37;40m [0m[94;1m$self[0m[37;40m->{OVRMODE} = [0m[31;1m0[0m[37;40m;[0m
[37;40m [0m[94;1m$self[0m[37;40m->{PLUGINS} = [];[0m
[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
[37;40m EVT_CHAR([0m[94;1m$self[0m[37;40m, \&OnChar);[0m
[37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m;[0m
[37;40m}[0m
[37;1msub [0m[96mAppendText[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[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
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mBroadcast[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$plugs[0m[37;40m = [0m[94;1m$self[0m[37;40m->{PLUGINS};[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$flag[0m[37;40m = [0m[31;1m0[0m[37;40m;[0m
[37;40m [0m[37;1mforeach[0m[37;40m ([0m[94;1m@$plugs[0m[37;40m) {[0m
[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
[37;40m [0m[94;1m$flag[0m[37;40m = [0m[31;1m1[0m[37;40m;[0m
[37;40m }[0m
[37;40m }[0m
[37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$flag[0m[37;40m;[0m
[37;40m}[0m
[37;1msub [0m[96mCall2Remove[0m[37;40m {[0m
[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
[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
[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
[37;40m } [0m[37;1melse[0m[37;40m {[0m
[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
[37;40m [0m[37;1mreturn[0m[37;40m [0m[96mundef[0m
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mCall2Replace[0m[37;40m {[0m
[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
[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
[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
[37;40m } [0m[37;1melse[0m[37;40m {[0m
[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
[37;40m [0m[37;1mreturn[0m[37;40m [0m[96mundef[0m
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mCall2WriteText[0m[37;40m {[0m
[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
[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
[37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$txt[0m
[37;40m } [0m[37;1melse[0m[37;40m {[0m
[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
[37;40m [0m[37;1mreturn[0m[37;40m [0m[96mundef[0m
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mCallback[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m->{CALLBACK};[0m
[37;40m}[0m
[37;1msub [0m[96mCanUndo[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m}[0m
[37;1msub [0m[96mCanRedo[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m}[0m
[37;1msub [0m[96mClear[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mClear[0m[37;40m;[0m
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mClearSelection[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[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
[37;40m}[0m
[37;1msub [0m[96mCommand[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$name[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m->{COMMANDS}->{[0m[94;1m$name[0m[37;40m}[0m
[37;40m}[0m
[37;1msub [0m[96mCopy[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mCopy[0m[37;40m;[0m
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mCut[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mCut[0m[37;40m;[0m
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mDoRemove[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mClearSelection[0m[37;40m;[0m
[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
[37;40m [0m[37;1mif[0m[37;40m ([0m[96mdefined[0m[37;40m([0m[94;1m$ins[0m[37;40m)) {[0m
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSetInsertionPoint[0m[37;40m([0m[94;1m$ins[0m[37;40m);[0m
[37;40m }[0m
[37;40m [0m[37;1mreturn[0m[37;40m [0m[31;1m1[0m
[37;40m}[0m
[37;1msub [0m[96mDoReplace[0m[37;40m {[0m
[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
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mClearSelection[0m[37;40m;[0m
[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
[37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$sel[0m[37;40m) {[0m
[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
[37;40m }[0m
[37;40m [0m[37;1mif[0m[37;40m ([0m[96mdefined[0m[37;40m([0m[94;1m$ins[0m[37;40m)) {[0m
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSetInsertionPoint[0m[37;40m([0m[94;1m$ins[0m[37;40m);[0m
[37;40m }[0m
[37;40m [0m[37;1mreturn[0m[37;40m [0m[31;1m1[0m
[37;40m}[0m
[37;1msub [0m[96mDoWrite[0m[37;40m {[0m
[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
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mClearSelection[0m[37;40m;[0m
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSetInsertionPoint[0m[37;40m([0m[94;1m$index[0m[37;40m);[0m
[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
[37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$sel[0m[37;40m) {[0m
[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
[37;40m }[0m
[37;40m [0m[37;1mif[0m[37;40m ([0m[96mdefined[0m[37;40m([0m[94;1m$ins[0m[37;40m)) {[0m
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSetInsertionPoint[0m[37;40m([0m[94;1m$ins[0m[37;40m);[0m
[37;40m }[0m
[37;40m [0m[37;1mreturn[0m[37;40m [0m[31;1m1[0m
[37;40m}[0m
[37;1msub [0m[96mFindPluginId[0m[37;40m {[0m
[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
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$plgs[0m[37;40m = [0m[94;1m$self[0m[37;40m->{PLUGINS};[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$index[0m[37;40m = [0m[31;1m0[0m[37;40m;[0m
[37;40m [0m[37;1mforeach[0m[37;40m ([0m[94;1m@$plgs[0m[37;40m) {[0m
[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
[37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$index[0m
[37;40m }[0m
[37;40m [0m[94;1m$index[0m[37;40m ++;[0m
[37;40m }[0m
[37;1;100m# carp "Plugin $name is not loaded\n";[0m
[37;40m [0m[37;1mreturn[0m[37;40m [0m[96mundef[0m[37;40m;[0m
[37;40m}[0m
[37;1msub [0m[96mFindPlugin[0m[37;40m {[0m
[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
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$plgs[0m[37;40m = [0m[94;1m$self[0m[37;40m->{PLUGINS};[0m
[37;40m [0m[37;1mforeach[0m[37;40m ([0m[94;1m@$plgs[0m[37;40m) {[0m
[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
[37;40m [0m[37;1mreturn[0m[37;40m [0m[94;43m$_[0m
[37;40m }[0m
[37;40m }[0m
[37;40m [0m[37;1mreturn[0m[37;40m [0m[96mundef[0m[37;40m;[0m
[37;40m}[0m
[37;1msub [0m[96mGetClipboardText[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$txt[0m[37;40m = [0m[96mundef[0m[37;40m;[0m
[37;40m [0m[37;1mif[0m[37;40m (wxTheClipboard->Open) {[0m
[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
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$textdata[0m[37;40m = [0m[96mWx::TextDataObject[0m[37;40m->new;[0m
[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
[37;40m [0m[37;1mif[0m[37;40m( [0m[94;1m$ok[0m[37;40m ) {[0m
[37;40m [0m[94;1m$txt[0m[37;40m = [0m[94;1m$textdata[0m[37;40m->[0m[94;1mGetText[0m[37;40m;[0m
[37;40m }[0m
[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
[37;40m wxTheClipboard->Close;[0m
[37;40m }[0m
[37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$txt[0m[37;40m;[0m
[37;40m}[0m
[37;1msub [0m[96mGetLineNumber[0m[37;40m {[0m
[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
[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
[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
[37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$line[0m[37;40m;[0m
[37;40m}[0m
[37;1msub [0m[96mHasSelection[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[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
[37;40m}[0m
[37;1;100m# [0m[37;1;42mTODO[0m[37;1;100m make this unicode compatible[0m
[37;1msub [0m[96mIsWriteable[0m[37;40m {[0m
[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
[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
[37;40m [0m[37;1mreturn[0m[37;40m [0m[31;1m1[0m
[37;40m }[0m
[37;40m [0m[37;1mreturn[0m[37;40m [0m[31;1m0[0m
[37;40m}[0m
[37;1msub [0m[96mListening[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m@_[0m[37;40m) {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$new[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$plgs[0m[37;40m = [0m[94;1m$self[0m[37;40m->{PLUGINS};[0m
[37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$new[0m[37;40m) {[0m
[37;40m [0m[96munshift[0m[37;40m [0m[94;1m@$plgs[0m[37;40m, [0m[94;1m$self[0m
[37;40m } [0m[37;1melse[0m[37;40m {[0m
[37;40m [0m[96mshift[0m[37;40m [0m[94;1m@$plgs[0m
[37;40m }[0m
[37;40m [0m[94;1m$self[0m[37;40m->{LISTENING} = [0m[94;1m$new[0m
[37;40m }[0m
[37;40m }[0m
[37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m->{LISTENING}[0m
[37;40m}[0m
[37;1msub [0m[96mLoadFile[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[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
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mLoadPlugin[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$plug[0m[37;40m = [0m[96mundef[0m[37;40m;[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$name[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[37;40m [0m[37;1;100m#Does anybody have a better idea for this?[0m
[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
[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
[37;40m [0m[37;1mif[0m[37;40m ([0m[96mdefined[0m[37;40m([0m[94;1m$plug[0m[37;40m)) {[0m
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mRegisterPlugin[0m[37;40m([0m[94;1m$plug[0m[37;40m);[0m
[37;40m } [0m[37;1melse[0m[37;40m {[0m
[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
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mName[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[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
[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
[37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$name[0m
[37;40m}[0m
[37;1msub [0m[96mOnChar[0m[37;40m {[0m
[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
[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
[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
[37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m$self[0m[37;40m->[0m[94;1mOvrMode[0m[37;40m) {[0m
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mOvrMode[0m[37;40m([0m[31;1m0[0m[37;40m)[0m
[37;40m } [0m[37;1melse[0m[37;40m {[0m
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mOvrMode[0m[37;40m([0m[31;1m1[0m[37;40m)[0m
[37;40m }[0m
[37;40m }[0m
[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
[37;40m [0m[94;1m$event[0m[37;40m->[0m[94;1mSkip[0m[37;40m;[0m
[37;40m }[0m
[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
[37;40m &[0m[94;1m$callback[0m[37;40m;[0m
[37;40m}[0m
[37;1msub [0m[96mOvrMode[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m->{OVRMODE};[0m
[37;40m}[0m
[37;1msub [0m[96mPaste[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mPaste[0m[37;40m;[0m
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mPlugin[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$id[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$plgs[0m[37;40m = [0m[94;1m$self[0m[37;40m->{PLUGINS};[0m
[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
[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
[37;40m }[0m
[37;40m [0m[37;1mif[0m[37;40m ([0m[94;1m@_[0m[37;40m) { [0m
[37;40m [0m[94;1m$self[0m[37;40m->{PLUGINS}->[[0m[94;1m$id[0m[37;40m] = [0m[96mshift[0m[37;40m; [0m
[37;40m }[0m
[37;40m [0m[37;1mreturn[0m[37;40m [0m[94;1m$self[0m[37;40m->{PLUGINS}->[[0m[94;1m$id[0m[37;40m];[0m
[37;40m}[0m
[37;1msub [0m[96mReceive[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$name[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[37;1;100m# if ($debug) { print "received $name\n"; print Dumper $self->{COMMANDS} }[0m
[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
[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
[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
[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
[37;40m }[0m
[37;40m [0m[37;1mreturn[0m[37;40m [0m[31;1m0[0m
[37;40m}[0m
[37;1msub [0m[96mRedo[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mRedo[0m[37;40m;[0m
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mRegisterPlugin[0m[37;40m {[0m
[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
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$pl[0m[37;40m = [0m[94;1m$self[0m[37;40m->{PLUGINS};[0m
[37;40m [0m[96mpush[0m[37;40m [0m[94;1m@$pl[0m[37;40m, [0m[94;1m$plug[0m[37;40m;[0m
[37;40m}[0m
[37;1msub [0m[96mRemove[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[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
[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
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mRemove2Call[0m[37;40m {[0m
[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
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$sel[0m[37;40m = [0m[31;1m0[0m[37;40m;[0m
[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
[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
[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
[37;40m}[0m
[37;1msub [0m[96mReplace[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[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
[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
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mReplace2Call[0m[37;40m {[0m
[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
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$sel[0m[37;40m = [0m[31;1m0[0m[37;40m;[0m
[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
[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
[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
[37;40m}[0m
[37;1msub [0m[96mSaveFile[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[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
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mNativePlugins[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[37;40m [0m[37;1mreturn[0m[37;40m [0m[32mqw[[0m[37;40m Highlighter KeyEchoes UndoRedo [0m[32m][0m
[37;40m}[0m
[37;1msub [0m[96mSyntax[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m}[0m
[37;1msub [0m[96mUndo[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[37;40m [0m[94;1m$self[0m[37;40m->[0m[94;1mSUPER[0m[37;40m::[0m[94;1mUndo[0m[37;40m;[0m
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mWriteText[0m[37;40m {[0m
[37;40m [0m[37;1mmy[0m[37;40m [0m[94;1m$self[0m[37;40m = [0m[96mshift[0m[37;40m;[0m
[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
[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
[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
[37;40m }[0m
[37;40m}[0m
[37;1msub [0m[96mWriteText2Call[0m[37;40m {[0m
[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
[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
[37;40m}[0m
[31;1m1[0m[37;40m;[0m
[37;1m__END__[0m