Changeset 1677

Show
Ignore:
Timestamp:
02/20/09 16:23:51 (4 years ago)
Author:
mösi
Message:

Dynamisches Compose implementiert – allerdings noch recht starr und nicht EXE-tauglich.

Location:
windows/neo-vars/src
Files:
2 modified
1 copied

Legend:

Unmodified
Added
Removed
  • windows/neo-vars/src/neo20-all.ahk

    r1247 r1677  
    1010#include *i source\compose-tainted.generated.ahk 
    1111#include    source\neovarscompose.ahk 
     12#include    source\compose-gen.ahk 
    1213 
    1314; Hier liegt die Tastaturbelegung 
  • windows/neo-vars/src/source/compose-gen.ahk

    r1675 r1677  
    1 ; -*- encoding:utf-8 -*- 
    2 ; AHK versteht zwar kein utf-8, aber so lässt sich’s doch leichter eingeben. 
    3  
     1; äöü 
    42 
    53DefineXKBSym(name,val) { 
     
    17761774  SS := X . " " 
    17771775  pos := InStr(KSYM%nlen%,SS,true) 
    1778 ;  MsgBox,% X . ": " . nlen . ": " . pos 
    17791776  if (pos>0) { 
    17801777    poscd := 5*(pos-1)/(nlen+1)+1 
    17811778    X := SubStr(KSCD%nlen%,poscd,5) 
    1782 ;    MsgBox,% X 
    17831779    return X 
    17841780  } else if (SubStr(X,1,1) == "U") 
     
    17921788} 
    17931789 
    1794 DecodeUni(Uni) { 
     1790EncodeUniCompose(str) { 
     1791SetFormat, Integer, hex 
    17951792  result := "" 
    17961793  loop { 
    1797     code := "0x" . SubStr(Uni,2,4) 
    1798     Uni := SubStr(Uni,6) 
    1799     if (code < 0x0080) 
    1800       result := result . chr(code) 
    1801     else if (code < 0x0800) 
    1802       result := result . chr(0xC0 + (code >> 6)) . chr(0x80 + (code & 0x3F)) 
    1803     else 
    1804       result := result . chr(0xE0 + (code >> 12)) . chr(0x80 + ((code >> 6) & 0x3F)) . chr(0x80 + (code & 0x3F))  
    1805     if (Uni == "") 
    1806       break 
    1807   } 
    1808   return result 
    1809 } 
    1810  
    1811 EncodeUni(str) { 
    1812 SetFormat, Integer, hex 
    1813 ;  MsgBox % Asc(SubStr(str,1,1)) . Asc(SubStr(str,2,1)) 
    1814   result := "" 
    1815   loop { 
    1816     char := SubStr(str,1,1) 
     1794    char := asc(SubStr(str,1,1)) 
    18171795    str  := SubStr(str,2) 
    1818     if (asc(char) < 0x80) 
    1819       result := result . "U" . SubStr("0000" . SubStr(asc(char),3),-3) 
    1820     else if (asc(char) < 0xC0) { 
     1796    if (char < 0x80) 
     1797      result .= "U" . SubStr("0000" . SubStr(char,3),-3) 
     1798    else if (char < 0xC0) { 
    18211799      ; error 
    1822     } else if (asc(char) < 0xE0) { 
    1823        char2 := Substr(str,1,1) 
     1800    } else if (char < 0xE0) { 
     1801       char2 := asc(Substr(str,1,1)) 
    18241802       str   := SubStr(str,2) 
    1825        if ((asc(char2) < 0x80) or (asc(char2) > 0xBF)) { 
     1803       if ((char2 < 0x80) or (char2 > 0xBF)) { 
    18261804         ; error 
    18271805       } else { 
    1828          result := result . "U" . SubStr("0000" . SubStr((((asc(char) & 0x1F) << 6) + (asc(char2) & 0x3F)),3),-3) 
     1806         result .= "U" . SubStr("0000" . SubStr((((char & 0x1F) << 6) + (char2 & 0x3F)),3),-3) 
    18291807       } 
    1830     } else if (asc(char) < 0xF8) { 
    1831        char2 := SubStr(str,1,1) 
    1832        char3 := SubStr(str,2,1) 
     1808    } else if (char < 0xF8) { 
     1809       char2 := asc(SubStr(str,1,1)) 
     1810       char3 := asc(SubStr(str,2,1)) 
    18331811       str   := SubStr(str,3) 
    1834 ;       MsgBox % "chars: " . char . ", " . char2 . ", " . char3 . ", str: " . str 
    1835        if ((asc(char2) < 0x80) or (asc(char2) > 0xBF) 
    1836            or (asc(char3) < 0x80) or (asc(char3) > 0xBF)) { 
     1812       if ((char2 < 0x80) or (char2 > 0xBF) 
     1813           or (char3 < 0x80) or (char3 > 0xBF)) { 
    18371814         ; error 
    18381815       } else { 
    1839 ;         MsgBox % asc(char) . asc(char2) . asc(char3) 
    1840 ;         MsgBox % (((asc(char) & 0x0F) << 12) + ((asc(char2) & 0x3F) << 6) + (asc(char3) & 0x3F)) 
    1841          result := result . "U" . SubStr("0000" . SubStr((((asc(char) & 0x0F) << 12) + ((asc(char2) & 0x3F) << 6) + (asc(char3) & 0x3F)),3),-3) 
     1816         result .= "U" . SubStr("0000" . SubStr((((char & 0x0F) << 12) + ((char2 & 0x3F) << 6) + (char3 & 0x3F)),3),-3) 
    18421817       } 
    18431818    } 
     
    18521827VarSetCapacity(Composita,10240000) ; 10 MB 
    18531828 
    1854 EncodeUnicodeFile(FFrom,FTo) { 
    1855   Composita := "" 
    1856   Miss := 0 
     1829ProcessComposeFile(FFrom) { 
     1830  global 
     1831 
    18571832  FileRead, FileContents, %FFrom% 
    1858   ProgressTop := "Converting " . FFrom . "..." 
    18591833 
    18601834  Loop, parse, FileContents, `n, `r  ; Specifying `n prior to `r allows both Windows and Unix files to be parsed. 
     
    18631837  } 
    18641838 
    1865   Count := 0 
    18661839  Loop, parse, FileContents, `n, `r  ; Specifying `n prior to `r allows both Windows and Unix files to be parsed. 
    18671840  { 
    1868     Count := Count + 1 
    1869     ProgressVal := Count/NumLines*100 
    1870     ProgressInd := "Lines: " . Count . ", Errors: " . Miss 
    1871     Progress,%ProgressVal%,%ProgressInd%,%ProgressTop% 
    18721841    Line := A_LoopField 
    18731842    if ((Line == "") or (SubStr(Line,1,5) == "XCOMM") or (SubStr(Line,1,1) == "#")) 
     
    19051874        } 
    19061875        modkeys := modkeys . modkey  
    1907         if (ReplaceLeft != "") { 
    1908           if (CM%modkeys% != 1) { 
    1909             CM%modkeys% := 1 
    1910             Composita := Composita . "  CM" modkeys . ":=1`r`n" 
    1911           } 
    1912         } 
    1913         else 
     1876        if (ReplaceLeft == "") 
    19141877          break 
     1878        if (CM%modkeys% != 1) 
     1879          CM%modkeys% := 1 
    19151880      } 
    19161881      else { 
    1917         Xkbsym := "*entry*" ; make a non-fancy name from parsing error 
    19181882        modkeys := "" ; invalidate whole line 
    19191883        break 
     
    19211885    } 
    19221886    if (modkeys != "") { 
    1923       ressymb := EncodeUni(ReplaceRight) 
    1924       Composita .= "  CD" . modkeys . ":="""  . ressymb . """`r`n" 
     1887      ressymb := EncodeUniCompose(ReplaceRight) 
     1888      CD%modkeys% := ressymb 
    19251889      if (StrLen(ressymb)==5) 
    1926         Composita .= "  CRC" . ressymb . ".="" " . modkeys . """`r`n"  
    1927     } else { 
    1928       Composita .= "  `; illegal " . Xkbsym . " in " . A_LoopField . "`r`n" 
    1929       Miss := Miss + 1 
     1890        CRC%ressymb% .= modkeys 
    19301891    } 
    19311892  } 
    1932   Progress,off 
    1933   FileAppend,%Composita%,%FTo% 
     1893 
    19341894} 
    19351895 
    1936 DefineXKBSyms() 
    1937  
    1938 NumPars = %0% 
    1939 if (NumPars < 2) { 
    1940   MsgBox,Zu wenige Parameter`, Minimum=2 
    1941   exit 
     1896LoadCurrentComposeFile(FIn) { 
     1897  global 
     1898  if (!CurrentComposeLoaded) { 
     1899    DefineXKBSyms() 
     1900    CurrentComposeLoaded := 1 
     1901  } 
     1902  ProcessComposeFile(Fin) 
    19421903} 
    19431904 
    1944 CompRevision = %1% 
    1945 OutputFile = %2% 
     1905LoadCurrentCompose() { 
     1906  global 
     1907  ; setup a new thread to start immediately in the background 
     1908  SetTimer,ConvertCompose,-1 
     1909  return 
    19461910 
    1947 FileDelete,%OutputFile% 
    1948 FileAppend,CompRevision := "%CompRevision%"`r`n`r`nLoadDefaultCompose() {`r`n  global`r`n`r`n, %OutputFile%    ; } 
    1949  
    1950 loop %Numpars% { 
    1951   if (A_Index < 3) 
    1952     continue 
    1953   EncodeUnicodeFile(%A_Index%, OutputFile) 
     1911  ConvertCompose: 
     1912    ComposePath := "..\..\..\Compose" 
     1913    LoadCurrentComposeFile(ComposePath . "\en_US.UTF-8") 
     1914    LoadCurrentComposeFile(ComposePath . "\Compose.neo") 
     1915    TrayTip,Compose-Konvertierung,Konvertierung abgeschlossen!,10,1 
     1916  return 
    19541917} 
    1955  
    1956 ; { 
    1957 FileAppend,},%OutputFile% 
    1958  
    1959 ; MsgBox % EncodeUni(DecodeUni("U20ACU0041U0070")) 
    1960  
    1961 ; MsgBox % ConvertXkbsym("KP_5") . ConvertXkbsym("a") 
  • windows/neo-vars/src/source/initialize.ahk

    r1675 r1677  
    5050IniRead,UseMod4Light,%ini%,Global,UseMod4Light,1 
    5151IniRead,striktesMod2Lock,%ini%,Global,striktesMod2Lock,0 
     52IniRead,dynamischesCompose,%ini%,Global,dynamischesCompose,0 
    5253 
    5354regread,inputlocale,HKEY_CURRENT_USER,Keyboard Layout\Preload,1 
     
    8485IsMod4Locked := 0 
    8586EbeneAktualisieren() 
    86 LoadDefaultCompose() 
     87 
     88 
     89if (dynamischesCompose) 
     90  LoadCurrentCompose() 
     91else 
     92  LoadDefaultCompose()