123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- MODULE WMRussianIME; (** AUTHOR "tf"; PURPOSE "Write cyrillic characters"; *)
- IMPORT
- Strings, WMInputMethods, Texts, KernelLog;
- CONST
- imeName* = "Russian";
- TYPE
- IME* = OBJECT(WMInputMethods.IME)
- PROCEDURE GetName*() : Strings.String;
- BEGIN
- RETURN Strings.NewString(imeName);
- END GetName;
- (* Map characters from US-Keyboard to cyrillic keyboard *)
- PROCEDURE KeyEvent*(ucs : LONGINT; flags : SET; keysym : LONGINT);
- BEGIN
- CASE ucs OF
- (* unshifted *)
- | 60H : InsertChar(00000451H) (*`*)
- (* first row: qwertyuiop[] *)
- | 71H : InsertChar(00000439H) (*q*)
- | 77H : InsertChar(00000446H) (*w*)
- | 65H : InsertChar(00000443H) (*e*)
- | 72H : InsertChar(0000043AH) (*r*)
- | 74H : InsertChar(00000435H) (*t*)
- | 79H : InsertChar(0000043DH) (*y*)
- | 75H : InsertChar(00000433H) (*u*)
- | 69H : InsertChar(00000448H) (*i*)
- | 6FH : InsertChar(00000449H) (*o*)
- | 70H : InsertChar(00000437H) (*p*)
- | 5BH : InsertChar(00000445H) (*[*)
- | 5DH : InsertChar(0000044AH) (*]*)
- (* second row : asdfghjkl;' *)
- | 61H : InsertChar(00000444H) (*a*)
- | 73H : InsertChar(0000044BH) (*s*)
- | 64H : InsertChar(00000432H) (*d*)
- | 66H : InsertChar(00000430H) (*f*)
- | 67H : InsertChar(0000043FH) (*g*)
- | 68H : InsertChar(00000440H) (*h*)
- | 6AH : InsertChar(0000043EH) (*j*)
- | 6BH : InsertChar(0000043BH) (*k*)
- | 6CH : InsertChar(00000434H) (*l*)
- | 3BH : InsertChar(00000436H) (*;*)
- | 27H : InsertChar(0000044DH) (*'*)
- (* third row : zxcvbnm,./;' *)
- | 7AH : InsertChar(0000044FH) (*z*)
- | 78H : InsertChar(00000447H) (*x*)
- | 63H : InsertChar(00000441H) (*c*)
- | 76H : InsertChar(0000043CH) (*v*)
- | 62H : InsertChar(00000438H) (*b*)
- | 6EH : InsertChar(00000442H) (*n*)
- | 6DH : InsertChar(0000044CH) (*m*)
- | 2CH : InsertChar(00000431H) (*,*)
- | 2EH : InsertChar(0000044EH) (*.*)
- | 2FH : InsertChar(0000002EH) (*/*)
- (* shifted *)
- | 7EH : InsertChar(00000401H) (*~*)
- | 40H : InsertChar(00000022H) (**@*)
- | 23H : InsertChar(00002116H) (**#*)
- | 24H : InsertChar(0000003BH) (*$*)
- | 5EH : InsertChar(0000003AH) (*^*)
- | 26H : InsertChar(0000003FH) (*&*)
- (* first row: QWERTYUIOP{} *)
- | 51H : InsertChar(00000419H) (*Q*)
- | 57H : InsertChar(00000426H) (*W*)
- | 45H : InsertChar(00000423H) (*E*)
- | 52H : InsertChar(0000041AH) (*R*)
- | 54H : InsertChar(00000415H) (*T*)
- | 59H : InsertChar(0000041DH) (*Y*)
- | 55H : InsertChar(00000413H) (*U*)
- | 49H : InsertChar(00000428H) (*I*)
- | 4FH : InsertChar(00000429H) (*O*)
- | 50H : InsertChar(00000417H) (*P*)
- | 7BH : InsertChar(00000425H) (*{*)
- | 7DH : InsertChar(0000042AH) (*}*)
- (* second row : ASDFGHJKL:"| *)
- | 41H : InsertChar(00000424H) (*A*)
- | 53H : InsertChar(0000042BH) (*S*)
- | 44H : InsertChar(00000412H) (*D*)
- | 46H : InsertChar(00000410H) (*F*)
- | 47H : InsertChar(0000041FH) (*G*)
- | 48H : InsertChar(00000420H) (*H*)
- | 4AH : InsertChar(0000041EH) (*J*)
- | 4BH : InsertChar(0000041BH) (*K*)
- | 4CH : InsertChar(00000414H) (*L*)
- | 3AH : InsertChar(00000416H) (*:*)
- | 22H : InsertChar(0000042DH) (*"*)
- | 7CH : InsertChar(0000002FH) (*|*)
- (* third row : ZXCVBNM<>? *)
- | 5AH : InsertChar(0000042FH) (*Z*)
- | 58H : InsertChar(00000427H) (*X*)
- | 43H : InsertChar(00000421H) (*C*)
- | 56H : InsertChar(0000041CH) (*V*)
- | 42H : InsertChar(00000418H) (*B*)
- | 4EH : InsertChar(00000422H) (*N*)
- | 4DH : InsertChar(0000042CH) (*M*)
- | 3CH : InsertChar(00000411H) (*<*)
- | 3EH : InsertChar(0000042EH) (*>*)
- | 3FH : InsertChar(0000002CH) (*?*)
- ELSE
- InsertChar(ucs)
- END
- END KeyEvent;
- END IME;
- (* installs the Russian IME *)
- PROCEDURE Install*;
- VAR ime : IME;
- BEGIN
- NEW(ime);
- WMInputMethods.InstallIME(ime);
- END Install;
- (* helper procedure for development : return the UCS code of a selected character in a text *)
- PROCEDURE SelectedCharToUCS*;
- VAR r : Texts.TextReader;
- selectionText: Texts.Text;
- ucs : LONGINT;
- from, to : Texts.TextPosition;
- BEGIN
- IF Texts.GetLastSelection(selectionText, from, to) THEN
- selectionText.AcquireRead;
- NEW(r, selectionText);
- r.SetPosition(MIN(from.GetPosition(), to.GetPosition()));
- r.ReadCh(ucs);
- selectionText.ReleaseRead;
- KernelLog.String("InsertChar("); KernelLog.Hex(ucs, 0); KernelLog.String("H) (**)"); KernelLog.Ln;
- END;
- END SelectedCharToUCS;
- END WMRussianIME.Install~
- System.Free WMRussianIME~
- WMRussianIME.SelectedCharToUCS ~
- WMKeyCode.Open ~
|