root/windows/neo-vars/src/source/tools.ahk @ 1788

Revision 1788, 23.1 KB (checked in by mösi, 4 years ago)

Erste Implementierung von UTF-16-Unterstützung mit Surrogates.
Sämtliche Variablen sind nun um 2 Zeichen breiter, um den erweiterten Coderaum zu unterstützen.

Line 
1; ���
2
3; R�mische Zahlen
4CMS__Comp := 1
5CMS__CompU000072 := 1
6CMS__CompU000052 := 1
7CDS__CompU000072U000072 := "P_Rom1"
8CDS__CompU000072U000031 := "P_Rom1"
9CDS__CompU000052U000031 := "P_Rom1"
10CDS__CompU000072U000052 := "P_Rom2"
11CDS__CompU000072U000032 := "P_Rom2"
12CDS__CompU000052U000032 := "P_Rom2"
13CDS__CompU000052U000072 := "P_Rom3"
14CDS__CompU000072U000033 := "P_Rom3"
15CDS__CompU000052U000033 := "P_Rom3"
16CDS__CompU000052U000052 := "P_Rom4"
17CDS__CompU000072U000034 := "P_Rom4"
18CDS__CompU000052U000034 := "P_Rom4"
19
20CharProc_Rom1() {
21  global
22  ; starte gro� geschriebene r�mische Zahlen, verwende U2160++
23  PressHookProc := "Roman"
24  RomanMode := 1
25  RomanSum := 0
26}
27
28CharProc_Rom2() {
29  global
30  ; starte klein geschriebene r�mische Zahlen, verwende U2160++
31  PressHookProc := "Roman"
32  RomanMode := 2
33  RomanSum := 0
34}
35
36CharProc_Rom3() {
37  global
38  ; starte gro� geschriebene r�mische Zahlen, verwende Buchstaben
39  PressHookProc := "Roman"
40  RomanMode := 3
41  RomanSum := 0
42}
43
44CharProc_Rom4() {
45  global
46  ; starte klein geschriebene r�mische Zahlen, verwende Buchstaben
47  PressHookProc := "Roman"
48  RomanMode := 4
49  RomanSum := 0
50}
51
52GenRomanDigit(Pos, DigitIs, DigitTest, str0, str1, str2, str3, str4, str5) {
53  res := ""
54  if (DigitIs == DigitTest)
55    res := str%Pos%
56  return res
57}
58
59PressHookRoman(PhysKey, ActKey, Char) {
60  global
61  if (SubStr(Char,1,1) == "P")
62    CharStarDown(PhysKey, ActKey, Char)
63  else if ((Char == "U000030") or (Char == "S__N__0"))
64    RomanSum := 10*RomanSum
65  else if ((Char == "U000031") or (Char == "S__N__1"))
66    RomanSum := 10*RomanSum + 1
67  else if ((Char == "U000032") or (Char == "S__N__2"))
68    RomanSum := 10*RomanSum + 2
69  else if ((Char == "U000033") or (Char == "S__N__3"))
70    RomanSum := 10*RomanSum + 3
71  else if ((Char == "U000034") or (Char == "S__N__4"))
72    RomanSum := 10*RomanSum + 4
73  else if ((Char == "U000035") or (Char == "S__N__5"))
74    RomanSum := 10*RomanSum + 5
75  else if ((Char == "U000036") or (Char == "S__N__6"))
76    RomanSum := 10*RomanSum + 6
77  else if ((Char == "U000037") or (Char == "S__N__7"))
78    RomanSum := 10*RomanSum + 7
79  else if ((Char == "U000038") or (Char == "S__N__8"))
80    RomanSum := 10*RomanSum + 8
81  else if ((Char == "U000039") or (Char == "S__N__9"))
82    RomanSum := 10*RomanSum + 9
83  else if ((Char == "U00000D") or (Char == "U000020")) {
84    RomanSum := mod(RomanSum,400000)
85    RomanStr := ""
86    RomanPos := 0
87    if (RomanMode == 1)
88      loop {
89        RomanDigit := mod(RomanSum,10)
90        RomanSum := RomanSum//10
91        RomanStr := GenRomanDigit(RomanPos,RomanDigit,1,"U002170","U002179","U00217D","U00217F","U002182","U002188") . RomanStr
92        RomanStr := GenRomanDigit(RomanPos,RomanDigit,2,"U002170U002170","U002179U002179","U00217DU00217D","U00217FU00217F","U002182U002182","U002188U002188") . RomanStr
93        RomanStr := GenRomanDigit(RomanPos,RomanDigit,3,"U002170U002170U002170","U002179U002179U002179","U00217DU00217DU00217D","U00217FU00217FU00217F","U002182U002182U002182","U002188U002188U002188") . RomanStr
94        RomanStr := GenRomanDigit(RomanPos,RomanDigit,4,"U002170U002174","U002179U00217C","U00217DU00217E","U002180U002181","U002182U002187","") . RomanStr
95        RomanStr := GenRomanDigit(RomanPos,RomanDigit,5,"U002174","U00217C","U00217E","U002181","U002187","") . RomanStr
96        RomanStr := GenRomanDigit(RomanPos,RomanDigit,6,"U002174U002170","U00217CU002179","U00217EU00217D","U002181U002180","U002187U002182","") . RomanStr
97        RomanStr := GenRomanDigit(RomanPos,RomanDigit,7,"U002174U002170U002170","U00217CU002179U002179","U00217EU00217DU00217D","U002181U002180U002180","U002187U002182U002182","") . RomanStr
98        RomanStr := GenRomanDigit(RomanPos,RomanDigit,8,"U002174U002170U002170U002170","U00217CU002179U002179U002179","U00217EU00217DU00217DU00217D","U002181U002180U002180U002180","U002187U002182U002182U002182","") . RomanStr
99        RomanStr := GenRomanDigit(RomanPos,RomanDigit,9,"U002178","U002179U00217D","U00217DU00217F","U002180U002182","U002182U002188","") . RomanStr
100        if (RomanSum == 0)
101          break
102        RomanPos := RomanPos + 1
103      }
104    else if (RomanMode == 2)
105      loop {
106        RomanDigit := mod(RomanSum,10)
107        RomanSum := RomanSum//10
108        RomanStr := GenRomanDigit(RomanPos,RomanDigit,1,"U002160","U002169","U00216D","U00216F","U002182","U002188") . RomanStr
109        RomanStr := GenRomanDigit(RomanPos,RomanDigit,2,"U002160U002160","U002169U002169","U00216DU00216D","U00216FU00216F","U002182U002182","U002188U002188") . RomanStr
110        RomanStr := GenRomanDigit(RomanPos,RomanDigit,3,"U002160U002160U002160","U002169U002169U002169","U00216DU00216DU00216D","U00216FU00216FU00216F","U002182U002182U002182","U002188U002188U002188") . RomanStr
111        RomanStr := GenRomanDigit(RomanPos,RomanDigit,4,"U002160U002164","U002169U00216C","U00216DU00216E","U002180U002181","U002182U002187","") . RomanStr
112        RomanStr := GenRomanDigit(RomanPos,RomanDigit,5,"U002164","U00216C","U00216E","U002181","U002187","") . RomanStr
113        RomanStr := GenRomanDigit(RomanPos,RomanDigit,6,"U002164U002160","U00216CU002169","U00216EU00216D","U002181U002180","U002187U002182","") . RomanStr
114        RomanStr := GenRomanDigit(RomanPos,RomanDigit,7,"U002164U002160U002160","U00216CU002169U002169","U00216EU00216DU00216D","U002181U002180U002180","U002187U002182U002182","") . RomanStr
115        RomanStr := GenRomanDigit(RomanPos,RomanDigit,8,"U002164U002160U002160U002160","U00216CU002169U002169U002169","U00216EU00216DU00216DU00216D","U002181U002180U002180U002180","U002187U002182U002182U002182","") . RomanStr
116        RomanStr := GenRomanDigit(RomanPos,RomanDigit,9,"U002160U002169","U002169U00216D","U00216DU00216F","U002180U002182","U002182U002188","") . RomanStr
117        if (RomanSum == 0)
118          break
119        RomanPos := RomanPos + 1
120      }
121    else if (RomanMode == 3)
122      loop {
123        RomanDigit := mod(RomanSum,10)
124        RomanSum := RomanSum//10
125        RomanStr := GenRomanDigit(RomanPos,RomanDigit,1,"U000069","U000078","U000063","U00006D","","") . RomanStr
126        RomanStr := GenRomanDigit(RomanPos,RomanDigit,2,"U000069U000069","U000078U000078","U000063U000063","U00006DU00006D","","") . RomanStr
127        RomanStr := GenRomanDigit(RomanPos,RomanDigit,3,"U000069U000069U000069","U000078U000078U000078","U000063U000063U000063","U00006DU00006DU00006D","","") . RomanStr
128        RomanStr := GenRomanDigit(RomanPos,RomanDigit,4,"U000069U000076","U000078U00006C","U000063U000064","","","") . RomanStr
129        RomanStr := GenRomanDigit(RomanPos,RomanDigit,5,"U000076","U00006C","U000064","","","") . RomanStr
130        RomanStr := GenRomanDigit(RomanPos,RomanDigit,6,"U000076U000069","U00006CU000078","U000064U000063","","","") . RomanStr
131        RomanStr := GenRomanDigit(RomanPos,RomanDigit,7,"U000076U000069U000069","U00006CU000078U000078","U000064U000063U000063","","","") . RomanStr
132        RomanStr := GenRomanDigit(RomanPos,RomanDigit,8,"U000076U000069U000069U000069","U00006CU000078U000078U000078","U000064U000063U000063U000063","","","") . RomanStr
133        RomanStr := GenRomanDigit(RomanPos,RomanDigit,9,"U000069U000078","U000078U000063","U000063U00006D","","","") . RomanStr
134        if (RomanSum == 0)
135          break
136        RomanPos := RomanPos + 1
137      }
138    else if (RomanMode == 4)
139      loop {
140        RomanDigit := mod(RomanSum,10)
141        RomanSum := RomanSum//10
142        RomanStr := GenRomanDigit(RomanPos,RomanDigit,1,"U000049","U000058","U000043","U00004D","","") . RomanStr
143        RomanStr := GenRomanDigit(RomanPos,RomanDigit,2,"U000049U000049","U000058U000058","U000043U000043","U00004DU00004D","","") . RomanStr
144        RomanStr := GenRomanDigit(RomanPos,RomanDigit,3,"U000049U000049U000049","U000058U000058U000058","U000043U000043U000043","U00004DU00004DU00004D","","") . RomanStr
145        RomanStr := GenRomanDigit(RomanPos,RomanDigit,4,"U000049U000056","U000058U00004C","U000043U000044","","","") . RomanStr
146        RomanStr := GenRomanDigit(RomanPos,RomanDigit,5,"U000056","U00004C","U000044","","","") . RomanStr
147        RomanStr := GenRomanDigit(RomanPos,RomanDigit,6,"U000056U000049","U00004CU000058","U000044U000043","","","") . RomanStr
148        RomanStr := GenRomanDigit(RomanPos,RomanDigit,7,"U000056U000049U000049","U00004CU000058U000058","U000044U000043U000043","","","") . RomanStr
149        RomanStr := GenRomanDigit(RomanPos,RomanDigit,8,"U000056U000049U000049U000049","U00004CU000058U000058U000058","U000044U000043U000043U000043","","","") . RomanStr
150        RomanStr := GenRomanDigit(RomanPos,RomanDigit,9,"U000049U000058","U000058U000043","U000043U00004D","","","") . RomanStr
151        if (RomanSum == 0)
152          break
153        RomanPos := RomanPos + 1
154      }
155    loop {
156      if (RomanStr == "")
157        break ; erledigt
158      CharOut(SubStr(RomanStr,1,7))
159      RomanStr := SubStr(RomanStr,8)
160    }
161    PressHookProc := ""
162  } else
163    PressHookProc := ""
164}
165
166CMS__CompU000075 := 1
167CMS__CompU000055 := 1
168CDS__CompU000075U000075 := "P___Uni"
169CDS__CompU000075U000055 := "P___Uni"
170CDS__CompU000055U000075 := "P___Uni"
171CDS__CompU000055U000055 := "P___Uni"
172CMS__CompU000064 := 1
173CMS__CompU000044 := 1
174CDS__CompU000064U000064 := "P__DUni"
175CDS__CompU000064U000044 := "P__DUni"
176CDS__CompU000044U000064 := "P__DUni"
177CDS__CompU000044U000044 := "P__DUni"
178
179CP5VK41SC01E := "P___Uni"
180
181CharProc___Uni() {
182  global
183  ; starte Unicode-Hex-in-Zeichen-Umwandlung
184  PressHookProc := "Uni"
185  UniSum := ""
186}
187
188CharProc__DUni() {
189  global
190  ; starte Unicode-Zeichen-in-Hex-Umwandlung
191  CharOutFilterProc := "DUni"
192}
193
194PressHookUni(PhysKey, ActKey, Char) {
195  global
196  if (SubStr(Char,1,1) == "P")
197    CharStarDown(PhysKey, ActKey, Char)
198  else if ((Char == "U000030") or (Char == "S__N__0"))
199    UniSum := UniSum . "0"
200  else if ((Char == "U000031") or (Char == "S__N__1"))
201    UniSum := UniSum . "1"
202  else if ((Char == "U000032") or (Char == "S__N__2"))
203    UniSum := UniSum . "2"
204  else if ((Char == "U000033") or (Char == "S__N__3"))
205    UniSum := UniSum . "3"
206  else if ((Char == "U000034") or (Char == "S__N__4"))
207    UniSum := UniSum . "4"
208  else if ((Char == "U000035") or (Char == "S__N__5"))
209    UniSum := UniSum . "5"
210  else if ((Char == "U000036") or (Char == "S__N__6"))
211    UniSum := UniSum . "6"
212  else if ((Char == "U000037") or (Char == "S__N__7"))
213    UniSum := UniSum . "7"
214  else if ((Char == "U000038") or (Char == "S__N__8"))
215    UniSum := UniSum . "8"
216  else if ((Char == "U000039") or (Char == "S__N__9"))
217    UniSum := UniSum . "9"
218  else if ((Char == "U000041") or (Char == "U000061"))
219    UniSum := UniSum . "A"
220  else if ((Char == "U000042") or (Char == "U000062"))
221    UniSum := UniSum . "B"
222  else if ((Char == "U000043") or (Char == "U000063"))
223    UniSum := UniSum . "C"
224  else if ((Char == "U000044") or (Char == "U000064"))
225    UniSum := UniSum . "D"
226  else if ((Char == "U000045") or (Char == "U000065"))
227    UniSum := UniSum . "E"
228  else if ((Char == "U000046") or (Char == "U000066"))
229    UniSum := UniSum . "F"
230  else if ((Char == "U00000D") or (Char == "U000020")) {
231    UniSum := "U" . SubStr("000000" . UniSum, -5)
232    PP%PhysKey% := UniSum
233    PR%PhysKey% := UniSum
234    CharOutDown(UniSum)
235    PressHookProc := ""
236  } else
237    PressHookProc := ""
238}
239
240CharOutFilterDUni(char,down,up) {
241  global
242  if (!down or char == "S__L_M2" or char == "S__R_M2")
243    return char
244  CharOutFilterProc := ""
245  dchar := char
246  if (substr(dchar,1,3) == "U00")
247    dchar := "U" . substr(dchar,4)
248  TrayTip,Unicode-Zeichen,%dchar%,10,1
249  return char
250}
251
252EncodeUni(str) {
253SetFormat, Integer, hex
254;  MsgBox % Asc(SubStr(str,1,1)) . Asc(SubStr(str,2,1))
255  result := ""
256  loop {
257    char := asc(SubStr(str,1,1))
258    str  := SubStr(str,2)
259    if (char < 0x80)
260      result .= "U" . SubStr("000000" . SubStr(char,3),-5)
261    else if (char < 0xC0) {
262      ; error
263    } else if (char < 0xE0) {
264       char2 := asc(Substr(str,1,1))
265       str   := SubStr(str,2)
266       if ((char2 < 0x80) or (char2 > 0xBF)) {
267         ; error
268       } else {
269         result .= "U" . SubStr("000000" . SubStr((((char & 0x1F) << 6) + (char2 & 0x3F)),3),-5)
270       }
271    } else if (char < 0xF8) {
272       char2 := asc(SubStr(str,1,1))
273       char3 := asc(SubStr(str,2,1))
274       str   := SubStr(str,3)
275       if ((char2 < 0x80) or (char2 > 0xBF)
276           or (char3 < 0x80) or (char3 > 0xBF)) {
277         ; error
278       } else {
279         result .= "U" . SubStr("000000" . SubStr((((char & 0x0F) << 12) + ((char2 & 0x3F) << 6) + (char3 & 0x3F)),3),-5)
280       }
281    } else if (char < 0xFC) {
282       char2 := asc(SubStr(str,1,1))
283       char3 := asc(SubStr(str,2,1))
284       char3 := asc(SubStr(str,3,1))
285       str   := SubStr(str,4)
286       if (   (char2 < 0x80) or (char2 > 0xBF)
287           or (char3 < 0x80) or (char3 > 0xBF)
288           or (char4 < 0x80) or (char4 > 0xBF)) {
289         ; error
290       } else {
291         result .= "U" . SubStr("000000" . SubStr((((char & 0x07) << 18) + ((char2 & 0x3F) << 12) + ((char3 & 0x3F) << 6) + (char4 & 0x3F)),3),-5)
292       }
293    }
294    if (str == "")
295      break
296  }
297  SetFormat, Integer, d
298  StringUpper,result,result
299  return result
300}
301
302
303; Simple calculator
304
305CDS__CompU000075U000063 := "P__Cal1"
306CDS__CompU000055U000043 := "P__Cal2"
307
308CharProc__Cal1() {
309  global
310  ; starte Calculator ohne Echo
311  PressHookProc := "Calc"
312  CalcEcho := 0
313  CalcVar1 := ""
314  CalcVar2 := ""
315  CalcOp := ""
316  CalcPhase := 0
317  CalcHexOut := 0
318}
319
320CharProc__Cal2() {
321  global
322  ; starte Calculator mit Echo
323  PressHookProc := "Calc"
324  CalcEcho := 1
325  CalcVar1 := ""
326  CalcVar2 := ""
327  CalcOp := ""
328  CalcPhase := 0
329  CalcHexOut := 0
330}
331
332PressHookCalc(PhysKey, ActKey, Char) {
333  global
334  if (SubStr(Char,1,1) == "P")
335    CharStarDown(PhysKey, ActKey, Char)
336  else if (CalcPhase == 0) {
337    if      ((Char == "U000030") or (Char == "S__N__0"))
338      CalcVar1 := CalcVar1 . "0"
339    else if ((Char == "U000031") or (Char == "S__N__1"))
340      CalcVar1 := CalcVar1 . "1"
341    else if ((Char == "U000032") or (Char == "S__N__2"))
342      CalcVar1 := CalcVar1 . "2"
343    else if ((Char == "U000033") or (Char == "S__N__3"))
344      CalcVar1 := CalcVar1 . "3"
345    else if ((Char == "U000034") or (Char == "S__N__4"))
346      CalcVar1 := CalcVar1 . "4"
347    else if ((Char == "U000035") or (Char == "S__N__5"))
348      CalcVar1 := CalcVar1 . "5"
349    else if ((Char == "U000036") or (Char == "S__N__6"))
350      CalcVar1 := CalcVar1 . "6"
351    else if ((Char == "U000037") or (Char == "S__N__7"))
352      CalcVar1 := CalcVar1 . "7"
353    else if ((Char == "U000038") or (Char == "S__N__8"))
354      CalcVar1 := CalcVar1 . "8"
355    else if ((Char == "U000039") or (Char == "S__N__9"))
356      CalcVar1 := CalcVar1 . "9"
357    else if ((Char == "U000039") or (Char == "S__N__9"))
358      CalcVar1 := CalcVar1 . "9"
359    else if ((Char == "U000041") or (Char == "U000061"))
360      CalcVar1 := CalcVar1 . "A"
361    else if ((Char == "U000042") or (Char == "U000062"))
362      CalcVar1 := CalcVar1 . "B"
363    else if ((Char == "U000043") or (Char == "U000063"))
364      CalcVar1 := CalcVar1 . "C"
365    else if ((Char == "U000044") or (Char == "U000064"))
366      CalcVar1 := CalcVar1 . "D"
367    else if ((Char == "U000045") or (Char == "U000065"))
368      CalcVar1 := CalcVar1 . "E"
369    else if ((Char == "U000046") or (Char == "U000066"))
370      CalcVar1 := CalcVar1 . "F"
371    else if ((Char == "U00002E") or (Char == "U00002C") or (Char=="S__NDot"))
372      CalcVar1 := CalcVar1 . "."
373    else if ((Char == "U000078") or (Char == "U000058")) {
374      CalcVar1 := CalcVar1 . "x"
375      CalcHexOut := 1
376    } else if ((Char == "U00002B") or (Char == "S__NAdd")) {
377      CalcOp := "+"
378      CalcPhase := 1
379    } else if ((Char == "U00002D") or (Char == "S__NSub")) {
380      CalcOp := "-"
381      CalcPhase := 1
382    } else if ((Char == "U00002A") or (Char == "S__NMul")) {
383      CalcOp := "*"
384      CalcPhase := 1
385    } else if ((Char == "U00002F") or (Char == "S__NDiv")) {
386      CalcOp := "/"
387      CalcPhase := 1
388    } else if (Char == "U000026") {
389      CalcOp := "&"
390      CalcPhase := 1
391    } else if (Char == "U00007C") {
392      CalcOp := "|"
393      CalcPhase := 1
394    } else
395      PressHookProc := ""
396    if (CalcEcho) {
397      PP%PhysKey% := Char
398      PR%PhysKey% := Char
399      CharOutDown(Char)
400    }
401  } else if (CalcPhase == 1) {
402    if      ((Char == "U000030") or (Char == "S__N__0"))
403      CalcVar2 := CalcVar2 . "0"
404    else if ((Char == "U000031") or (Char == "S__N__1"))
405      CalcVar2 := CalcVar2 . "1"
406    else if ((Char == "U000032") or (Char == "S__N__2"))
407      CalcVar2 := CalcVar2 . "2"
408    else if ((Char == "U000033") or (Char == "S__N__3"))
409      CalcVar2 := CalcVar2 . "3"
410    else if ((Char == "U000034") or (Char == "S__N__4"))
411      CalcVar2 := CalcVar2 . "4"
412    else if ((Char == "U000035") or (Char == "S__N__5"))
413      CalcVar2 := CalcVar2 . "5"
414    else if ((Char == "U000036") or (Char == "S__N__6"))
415      CalcVar2 := CalcVar2 . "6"
416    else if ((Char == "U000037") or (Char == "S__N__7"))
417      CalcVar2 := CalcVar2 . "7"
418    else if ((Char == "U000038") or (Char == "S__N__8"))
419      CalcVar2 := CalcVar2 . "8"
420    else if ((Char == "U000039") or (Char == "S__N__9"))
421      CalcVar2 := CalcVar2 . "9"
422    else if ((Char == "U000041") or (Char == "U000061"))
423      CalcVar2 := CalcVar2 . "A"
424    else if ((Char == "U000042") or (Char == "U000062"))
425      CalcVar2 := CalcVar2 . "B"
426    else if ((Char == "U000043") or (Char == "U000063"))
427      CalcVar2 := CalcVar2 . "C"
428    else if ((Char == "U000044") or (Char == "U000064"))
429      CalcVar2 := CalcVar2 . "D"
430    else if ((Char == "U000045") or (Char == "U000065"))
431      CalcVar2 := CalcVar2 . "E"
432    else if ((Char == "U000046") or (Char == "U000066"))
433      CalcVar2 := CalcVar2 . "F"
434    else if ((Char == "U00002E") or (Char == "U00002C") or (Char=="S__NDot"))
435      CalcVar2 := CalcVar2 . "."
436    else if ((Char == "U000078") or (Char == "U000058")) {
437      CalcVar2 := CalcVar2 . "x"
438      CalcHexOut := 1
439    } else if ((Char == "U00000D") or (Char == "S__NEnt") or (Char=="U000020") or (Char=="U00003D")) {
440      if      (CalcOp == "+")
441        CalcResult := CalcVar1 + CalcVar2
442      else if (CalcOp == "-")
443        CalcResult := CalcVar1 - CalcVar2
444      else if (CalcOp == "*")
445        CalcResult := CalcVar1 * CalcVar2
446      else if (CalcOp == "/")
447        CalcResult := CalcVar1 / CalcVar2
448      else if (CalcOp == "&")
449        CalcResult := CalcVar1 & CalcVar2
450      else if (CalcOp == "|")
451        CalcResult := CalcVar1 | CalcVar2
452      else
453        CalcResult := "Invalid"
454      if (CalcHexOut and (CalcResult != "")) {
455        SetFormat,Integer,h
456        CalcResult := CalcResult + 0
457        SetFormat,Integer,d
458      }
459      tosend := EncodeUni(CalcResult)
460      if (CalcEcho) {
461        Char := "U00003D"
462        PP%PhysKey% := Char
463        PR%PhysKey% := Char
464        CharOutDown(Char)
465      }
466      loop {
467        if (SubStr(tosend,1,1)=="P") {
468          SubProc := SubStr(tosend,2,6)
469          CharProc%SubProc%()
470        } else {
471          CharOut(SubStr(tosend,1,7))
472        }
473        tosend := SubStr(tosend,8)
474        if (tosend == "")
475          break                ; erledigt
476      }
477      PressHookProc := ""
478      return ; vermeide, bei CharEcho das aktuelle Zeichen nach dem Ergebnis noch einmal auszugeben
479    } else
480      PressHookProc := ""
481    if (CalcEcho) {
482      PP%PhysKey% := Char
483      PR%PhysKey% := Char
484      CharOutDown(Char)
485    }
486  } else {
487    PressHookProc := ""
488    if (CalcEcho) {
489      PP%PhysKey% := Char
490      PR%PhysKey% := Char
491      CharOutDown(Char)
492    }
493  }
494}
495
496CDS__CompU000055U000057 := "P___WMN"
497CDS__CompU000075U000077 := "P___WMN"
498
499CharProc___WMN() {
500  global
501  ok := DllCall("OpenClipboard")
502  if (!ok) {
503    TrayTip,Wie mit NEO,Fehler in OpenClipboard,10,1
504    return
505  }
506  uclph:=DllCall("GetClipboardData","uint",CF_UNICODETEXT:=13)
507  if (uclph == 0) {
508    DllCall("CloseClipboard")
509    TrayTip,Wie mit NEO,Fehler in GetClipboardData,10,1
510    return
511  }
512  uclp := DllCall("GlobalLock","uint",uclph)
513  if (uclp == 0) {
514    DllCall("CloseClipboard")
515    TrayTip,Wie mit NEO,Fehler in GlobalLock,10,1
516    return
517  }
518  a := *(uclp+0)
519  b := *(uclp+1)
520
521  a += 256*b
522
523  if ((a >= 0xD800) and (a <= 0xDBFF)) {
524    c := *(uclp+2)
525    d := *(uclp+3)
526
527    c += 256*d
528    if ((c >= 0xDC00) and (c <= 0xDFFF)) {
529      a := (a & 0x3FF) * 1024 + (c & 0x3FF) + 65536
530    }
531  }
532
533  DllCall("GlobalUnlock","uint",uclph)
534  DllCall("CloseClipboard")
535
536SetFormat,Integer,h
537  a += 0
538SetFormat,Integer,d
539  if (a < 0x10000) {
540    ap := "U" . substr("000000" . substr(a,3),-3)
541    a  := "U" . substr("000000" . substr(a,3),-5)
542  } else {
543    ap := "U" . substr("000000" . substr(a,3),-5)
544    a  := ap
545  }
546
547  Gui,2:Destroy
548  Gui,2:Font,,DejaVu Sans
549  Gui,2:Margin,10,0
550  Gui,2:Add,Text,,% "`r`nDas Zeichen " . ap . " kann wie folgt eingegeben werden:"
551  loop,parse,CRC%a%,%A_Space%
552  {
553    this_wmn := ""
554    this_wmnk := ""
555    nthis := 0
556    this_wtt := A_LoopField
557    if (this_wtt == "")
558      continue ; probably at first or last entry
559    loop {
560      if (this_wtt == "")
561        break
562      this_char7 := substr(this_wtt,1,7)
563      this_char  := this_char7
564      this_wtt := substr(this_wtt,8)
565      if (CB%this_char% != "")
566        this_char := CB%this_char%
567      else if (CS%this_char% != "")
568        this_char := CS%this_char%
569      ; this_char will contain Uxxxx if no shortcut is present. Fix this here.
570      this_wmn .= " <" . this_char . ">"
571      if (CRK%this_char7% == "") {
572        nthis := 1
573        this_wmnk .= " <" . this_char7 . ">"
574      } else
575        this_wmnk .= " " . KeyLong(CRK%this_char7%)
576    }
577    if (this_wmn != "")
578      this_wmn := SubStr(this_wmn,2)
579    if (this_wmnk != "")
580      this_wmnk := SubStr(this_wmnk,2)
581    Gui,2:Font,,Dejavu Sans Bold
582    if (nthis == 1)
583      Gui,2:Add,Text,,% "Wegen fehlender Tastenbelegung nicht als Compose:"
584    else
585      Gui,2:Add,Text,,% "Als Compose:"
586    Gui,2:Font,,Dejavu Sans
587    Gui,2:Add,Text,,% this_wmn . "`r`noder`r`n" . this_wmnk
588  }
589
590  wmnk := KeyLong(CRK%a%)
591  Gui,2:Font,,Dejavu Sans Bold
592  if (wmnk != "") {
593    Gui,2:Add,Text,,% "Als Tastendruck:"
594    Gui,2:Font,,Dejavu Sans
595    Gui,2:Add,Text,,% wmnk
596  } else
597    Gui,2:Add,Text,,% "Als Tastendruck nicht verf�gbar"
598
599  Gui,2:Add, Button, Default xp+100 yp+40, OK
600  Gui,2:Show
601  return
602
603  2ButtonOK:
604  2GuiEscape:
605    Gui,2:Destroy
606    return
607}
608
609KeyLong(key) {
610  global
611  num := 0
612  twmnk := ""
613  loop,parse,key,%A_Space%
614  {
615    tis_wmn := ""
616    tis_wtt := A_LoopField
617    if (tis_wtt == "")
618      continue ; probably at first or last entry
619    tis_layer := substr(tis_wtt,3,1)
620    base_key_pos := "CP1" . substr(tis_wtt,4)
621
622    base_key := %base_key_pos%
623    if (CB%base_key_pos% != "")
624      base_key := CB%base_key_pos%
625    else if (CB%base_key% != "")
626      base_key := CB%base_key%
627    else if (CS%base_key% != "")
628      base_key := CS%base_key%
629
630    twmnk .= "/<" . CBS____M%tis_layer% . base_key . ">"
631    num := num + 1
632  }
633  if (num == 0)
634    return ""
635  else if (num == 1)
636    return SubStr(twmnk,2)
637  else
638    return "(" . SubStr(twmnk,2) . ")"
639}
Note: See TracBrowser for help on using the browser.