Referenz-Parser committet.

This commit is contained in:
martin_r 2008-12-29 02:46:24 +00:00
parent 694bcad845
commit 59153536ee
4 changed files with 347 additions and 242 deletions

View File

@ -1,16 +0,0 @@
import yaml, sys
try:
quelle = open("neo20.yaml")
try:
wurzel = yaml.load(quelle) #_all entfernen
finally:
quelle.close()
except IOError:
pass
except yaml.YAMLError, exc:
if hasattr(exc, 'problem_mark'):
mark = exc.problem_mark
print "YAML-Parserfehler: (%s:%s)" % (mark.line+1, mark.column+1)
sys.stdin.read()

View File

@ -1,226 +0,0 @@
# (?, QWERTZ-^): [xkb, mOd, kbd, ahk, [
# {?: [lin, kbd, ahk, {x,y: grafikpositionen, e: erläuterung in der referenz}*],
# {b: breite, v: vollbreite, h: höhe, w: vollhöhe, x,y: grafik, f: farbe, c: capslock(False), e: s.o.}]
[
[
(ˆ, QWERTZ-^): [TLDE, 49, VK_OEM_1, VKDCSC029, [
{ˆ: [dead_circumflex, WCH_DEAD, Tcflx, {e: "Toter Zirkumflex (sieht aus wie U+02C6 MODIFIER LETTER CIRCUMFLEX ACCENT)"}]},
{˜: [dead_tilde, WCH_DEAD, Ttlde, "Tote Tilde (sieht aus wie U+02DC SMALL TILDE)"]},
{°: [dead_abovering, WCH_DEAD, Tobrg, "Toter Ring (sieht aus wie U+02DA RING ABOVE)"]},
{ˇ: [dead_caron]},
{˘: [dead_breve]},
{¯: [dead_macron]}],
# {7: NoSymbol},
{e: "T1 („Tote Taste 1“: Taste links neben der 1)",
c: False}],
(1, QWERTZ-1): [ AE01, 10, [
{1: [1]},
{°: [degree]},
{¹: [onesuperior]},
{ª: [ordfeminine]},
{: [onesubscript]},
{¬: [notsign]}],
{c: False}]
]
]
---
-
-
-
- [2, AE02, 11]
- [2, 2]
- [§, section]
- [², twosuperior]
- [º, masculine]
- [₂, twosubscript]
- [, logicalor]
-
- [3, AE03, 12]
- [3, 3]
- [, U2213]
- [³, threesuperior]
- [№, numerosign]
- [₃, threesubscript]
- [∧, logicaland]
-
- [4, AE04, 13]
- [4, 4]
- [»]
- []
- [⇞]
- [†]
- [⊥]
-
- [5, AE05, 14]
- [5, 5]
- [«]
- []
- [‧]
- [♀]
- [∡]
-
- [6, AE06, 15]
- [6, 6]
- [€]
- [¢]
- [£]
- [♂]
- [∥]
-
- [7, AE07, 16]
- [7, 7]
- [$]
- [¥]
- [¤]
- [κ]
- [→]
-
- [8, AE08, 17]
- [8, 8]
- [„]
- []
- [/]
- [⟨]
- [∞]
-
- [9, AE09, 18]
- [9, 9]
-
- [0, AE10, 19]
- [0, 0]
-
- [-, AE11, 20]
-
- ["`", AE12, 21]
-
- [⌫, BKSP, 22]
-
-
- [Tab, TAB, 23]
-
- [x, AD01, 24]
-
- [v, AD02, 25]
-
- [l, AD03, 26]
-
- [c, AD04, 27]
-
- [w, AD05, 28]
-
- [k, AD06, 29]
-
- [h, AD07, 30]
-
- [g, AD08, 31]
-
- [f, AD09, 32]
-
- [q, AD10, 33]
-
- [ß, AD11, 34]
-
- [Enter, AD13, 36] #?
-
-
- [Mod3, CAPS, 66]
-
- [u, AC01, 38]
-
- [i, AC02, 39]
-
- [a, AC03, 40]
-
- [e, AC04, 41]
-
- [o, AC05, 42]
-
- [s, AC06, 43]
-
- [n, AC07, 44]
-
- [r, AC08, 45]
-
- [t, AC09, 46]
-
- [d, AC10, 47]
-
- [y, AC11, 48]
-
- [Mod3, AC01, 51]
-
- Mod2
- Mod4
-
- [ü, AB01, 52]
-
- [ö, AB02, 53]
-
- [ä, AB03, 54]
-
- [p, AB04, 55]
-
- [z, AB05, 56]
-
- [b, AB06, 57]
-
- [m, AB07, 58]
-
- [Komma, AB08, 59]
-
- [Punkt, AB09, 60]
-
- [j, AB10, 61]
- Mod2
-
- Strg
- Fenster
- Alt
-
- [Leertaste, SPCE, 65]
-
- [Mod4]
- Fenster
- Menü
- Strg
]
-
-
-
- [Tab, NMLK]
-
- [Geteilt, KPDV]
-
- [Mal, KPMU]
-
- [Minus, KPSU]
-
-
- [7, KP7]
-
- [8, KP8]
-
- [9, KP9]
-
- [Plus, KPAD]
-
-
- [4, KP4]
-
- [5, KP5]
-
- [6, KP6]
-
-
- [1, KP1]
-
- [2, KP2]
-
- [3, KP3]
-
- [Return, KPEN]
-
-
- [0, KP0]
-
- [Komma, KPDL]

80
yaml/ref.parse.py Normal file
View File

@ -0,0 +1,80 @@
# Parser für die NEO-Referenz, erzeugt eine YAML-Datei.
# Copyright 2008 Martin Roppelt
# E-Mail: m.p.roppelt@web.de
# This file is part of the German NEO-Layout Version 2.
# German NEO-Layout Version 2 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
# You should have received a copy of the GNU General Public License along with German NEO-Layout Version 2. If not, see <http://www.gnu.org/licenses/>.
import io, yaml
a = [[0, 2, 6], [1, 5, 7]]
try:
# s: Quelldatei (source) öffnen:
s = io.open('../A-REFERENZ-A/neo20.txt', 'r', 2, 'utf8').readlines()
# g: Wörterbuch-Datei (Gerüst) öffnen:
g = yaml.load(open('ref.skel'))
# Tastaturfelder parsen:
# Erzeuge Liste für die Tastaturfelder:
# d: Liste der kombinierten Tastaturfelder („Alle Ebenen“)
# m: Liste der Mini-Tastaturfelder
d = m = [[], []]
# Durchlaufe Tastaturfelder („Alle Ebenen“):
# f: Iterator Tastaturfeld (field)
# q: Feld der Such-Schlüssel (query)
q = ['Ha', 'Za']
for f in range(2):
# Bestimme Zeile l (line): Position des Schlüssels q[f] in der Quelldatei (Beginn des Tastaturfeldes)
l = s.index(g[q[f]])
# Durchlaufe die Tastaturreihen:
# r: Iterator Tastaturreihe (row)
for r in range(6):
# Erzeuge Liste für Tastaturreihe:
d[f].append([])
# Erzeuge Liste für die zeilenweise Beschriftung der Tasten der Tastaturreihe:
z = [[], []]
# i: Iterator Tastenzeile (iterator)
for i in range(2):
z[i] = s[l + (r + 1) * 3 - 1 -i].split(u'')[1:-1]
# Wenn die Zeilen einer Tastenreihe nicht gleich viele Tasten enthalten, gebe eine Fehlermeldung aus und beende das Skript:
if len(z[0]) != len(z[1]):
print u'Die Zeilen der %s. Reihe im Feld »%s« enthalten unterschiedlich viele Tasten!' % (1 + r, f)
quit()
# Durchlaufe die Zeilen der Tastaturreihe:
# k: Iterator Tasten (key)
for k in range(len(z[0])):
# Erzeuge Wörterbuch für Taste:
d[f][r].append({})
# Schreibe Vollbreite der Taste:
d[f][r][k]['v'] = len(z[0][k])
# Wenn die Breite der Taste 5 bzw 7 ist (Normale Taste),
# schreibe die Zeichen der Ebenen der Taste:
# schreibe die Beschriftung der Taste:
if len(z[0][k]) == 5 + 2 * f:
# i: Iterator Tastenzeile
for i in range(2):
# j: Iterator Ebene
for j in range(3):
# Erzeuge Wörterbuch für Ebene der Taste:
d[f][r][k][1 + i * 3 + j] = {}
if f:
if z[i][k][0] == ' ' and z[i][k][-1] == ' ':
d[f][r][k][1 + i * 3 + j]['i'] = z[i][k][j * 2 + 1]
else:
d[f][r][k][1 + i * 3 + j]['i'] = z[i][k][a[0][j]: a[1][j]]
else:
d[f][r][k][1 + i * 3 + j]['i'] = z[i][k][j * 2]
# Kopiere das Zeichen der 1. Ebene in die Beschriftung der Taste:
# d[f][r][k]['i'] = d[f][r][k][1]['i']
else:
d[f][r][k]['i'] = z[1][k] + z[0][k]
yaml.dump(d, open('ref.parse', 'w'))
except IOError:
print "I/O-Fehler"
except yaml.YAMLError, exc:
if hasattr(exc, 'problem_mark'):
mark = exc.problem_mark
print "YAML-Parserfehler: (%s:%s)" % (mark.line+1, mark.column+1)

267
yaml/ref.skel Normal file
View File

@ -0,0 +1,267 @@
Ia: |
-------------------------------------------------------------------------------
ACHTUNG:
Damit alles ordentlich dargestellt wird, muss man für die Darstellung z. B. im
Texteditor eine dicktengleiche Schrift einstellen!
Im Browser (Firefox) muss man unter Ansicht, Zeichenkodierung auf Unicode
(UTF-8) stellen.
Unter Windows ist in der Grundinstallation leider keine dicktengleiche Schrift
installiert, die befriedigend viele Unicodezeichen beinhaltet.
Abhilfe schafft z. B. DejaVu Sans Mono (ist z. B. bei OpenOffice dabei):
http://dejavu.sourceforge.net/
-------------------------------------------------------------------------------
== Haupttastatur ==
=== Legende Haupttastatur ===
┌─────┐ 1 … 1. Ebene (kein Mod) │ 4 … 4. Ebene (Mod4)
│2 4 6│ 2 … 2. Ebene (Umschalt) │ 5 … 5. Ebene (Mod3+Umschalt)
│1 3 5│ 3 … 3. Ebene (Mod3) │ 6 … 6. Ebene (Mod3+Mod4)
└─────┘
• Ebene 1: Kleinbuchstaben (kein Mod)
• Ebene 2: Großbuchstaben (Umschalt)
• Ebene 3: Sonderzeichen (Mod3)
• Ebene 4: Navigation und Ziffernblock (Mod4)
• Ebene 5: Griechische Kleinbuchstaben (Mod3+Umschalt)
• Ebene 6: Griechische Großbuchstaben (Mod3+Mod4)
• Kombo/Compose: Zusammensetzen von Zeichen (Mod3+Tab)
Beispiel:
»Compose« »Compose loslassen« »o« »c« = ©
• Feststellen/Capslock: Dauergroßschreiben (Umschalt+Umschalt)
Zum Lösen der Feststellung nochmals gleiche Kombination
• Feststellen der Ebene 4: (Mod4+Mod4) oder (Umschalt+Mod3+Tab)
Zum Lösen der Feststellung nochmals gleiche Kombination
HINWEIS: Unter Linux ist es momentan noch nicht möglich die Feststellung
zu lösen, indem man beide Mods drückt. Man muss dort nur einen drücken!
=== Maustastatursteuerung ===
Die Maustastatursteuerung schaltet man über Shift+Mod4+T1 ein und ebenso wieder aus.
Mit dieser kann man den Mauszeiger über die Tastatur steuern. Dies kann sinnvoll sein, falls
die Maus oder das Touchpad streikt oder keine solches Medium vorhanden ist.
Am besten geeignet ist dazu die Ebene 4 des Keypads (z.B. mit Mod4_Lock). Verzichtet man auf
Markierungen ist auch Ebene 1 des Keypads geeignet.
Des Weiteren kann man die Zahlen auf Ebene 4 des Haupttastaturfelds benutzen, jedoch ist die
Bedienung dort weniger komfortabel.
=== Symbole ===
⇞⇟ … Bild auf/Bild ab
⇱⇲ … Pos1/Ende
⌫ ⌦ … Backspace/Entf
⌧ … Esc
⎀ … Einf
⇠⇡⇢⇣ … Links/Hoch/Rechts/Runter
♫ … Steht als Symbol für die Kombotaste (Compose)
╌ … Weicher Trennstrich (U+00AD SOFT HYPHEN)
␣ … Leerzeichen (SPACE)
⍽ … Geschütztes Leerzeichen (U+00A0 NO-BREAK SPACE)
¦ … Schmales, geschütztes Leerzeichen (U+202F NARROW NO-BREAK SPACE)
↶ … undo-Funktion
Beg … Klick mit der Tastaturmaus
=== Akzenttasten ===
Zu den Akzenten siehe auch
• http://unicode.e-workers.de/
• http://de.wikipedia.org/wiki/Diakritisches_Zeichen
• http://de.wikipedia.org/wiki/Liste_lateinisch-basierter_Alphabete
Ta: |
T1 („Tote Taste 1“: Taste links neben der 1)
Tb: |
T2 („Tote Taste 2“: zwei Tasten rechts neben der 0)
Tc: |
T3 („Tote Taste 3“: Taste rechts neben dem scharfen S (ß))
Ib: |
ACHTUNG: „Tote Tasten“ (Tasten zum Erzeugen toter Zeichen also Zeichen die nicht
gleich erscheinen, sondern nur in Kombination mit einem weiteren Buchstaben) werden
folgendermaßen bedient (Beispiel):
1. Tote Tilde »~« eingeben.
2. Danach »n«.
3. Es erscheint das »ñ«.
TIPP: Mit den toten Tasten Zirkumflex und Querstrich kann man hoch(ˆ)- und tiefgestellte(/) Ziffern erzeugen.
=== Taste mit Bindestrichen, Gedankenstrich usw. ===
Zu den Gedankenstrichen usw. siehe:
• http://www.matthias-kammerer.de/SonsTypo3.htm
• http://de.wikipedia.org/wiki/Weicher_Trennstrich
S: |
Taste rechts neben der 0
Ic: |
Außerdem gibt es noch
• den (echten) Hyphen (U+2010 HYPHEN), der über <dead_stroke> + <space> erzugt wird
• das (echte) Minuszeichen (U+2212 MINUS SIGN) auf dem Keypad
• den (deutschen) Gedankenstrich (U+2013 EN DASH)
• den Bindestrich/Minusersatz (U+002D HYPHEN-MINUS)
A: |
=== Anführungszeichen ===
Id: |
Siehe auch http://de.wikipedia.org/wiki/Anf%C3%BChrungszeichen
Ie: |
=== Dezimaltrennzeichen ===
Das Dezimaltrennzeichen ist auf englischen und südamerikanischen Systemen ein Punkt ».«.
Auf deutschen, französischen, spanischen, schweizerischen und anderen ein Komma »,«.
Siehe auch http://de.wikipedia.org/wiki/Dezimaltrennzeichen
=== Ziffern ===
Die Ziffern auf der Ersten Ebene sind die »normalen« Zahlen (also nicht die KP_-Variante),
wogegen für den Ziffernblock auf der vierten Ebene stets die KP_Varianten verwendet werden
sollten, um die Vielseitigkeit und Funktionsfähigkeit der NEOTastatur zu gewährleisten.
=== Alle Ebenen Haupttastatur ===
Ha: |
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────────┐
Hb: |
├─────┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──────┤
Hc: |
├────────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ │
Hd: |
├──────┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴─────┴─────┤
He: |
├──────┼─────┴┬────┴─┬───┴─────┴─────┴─────┴─────┴─────┴────┬┴─────┼─────┴┬──────┬──────┤
Hf: |
└──────┴──────┴──────┴──────────────────────────────────────┴──────┴──────┴──────┴──────┘
M1: |
=== Erste Ebene Miniatur ===
Ma: |
┌───┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬──────┐
Mb: |
├───┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬─────┤
Mc: |
├────┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴─┐ │
Md: |
├───┬─┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴──┴───┤
Me: |
├───┼──┼─┴┬┴─┴─┴─┴─┴─┴┬┴─┼─┴┬──┬───┤
Mf: |
└───┴──┴──┴───────────┴──┴──┴──┴───┘
M2: |
=== Zweite Ebene Miniatur ===
M3: |
=== Dritte Ebene Miniatur ===
M4: |
=== Vierte Ebene Miniatur ===
M5: |
=== Fünfte Ebene Miniatur ===
M6: |
=== Sechste Ebene Miniatur ===
If: |
== Ziffernblock ==
Um die Vielseitigkeit und Funktionsfähigkeit der NEOTastatur zu gewährleisten,
sollten für alle Elemente auf dem Keypad wenn möglich die KP_Variante verwendet werden!
=== Legende Ziffernblock ===
┌───────┐ 1 … 1. Ebene (kein Mod) 4 … 4. Ebene (Mod4)
│ 2 4 6 │ 2 … 2. Ebene (Umschalt) 5 … 5. Ebene (Mod3+Umschalt)
│ 1 3 5 │ 3 … 3. Ebene (Mod3) 6 … 6. Ebene (Mod3+Mod4)
└───────┘
=== Rechenzeichen ===
Z: |
=== Alle Ebenen Ziffernblock ===
Za: |
┌───────┬───────┬───────┬───────┐
Zb: |
├───────┼───────┼───────┼───────┤
Zc: |
├───────┼───────┼───────┤ │
Zd: |
├───────┴───────┼───────┤ │
Ze: |
└───────────────┴───────┴───────┘
N1: |
=== Erste Ebene Miniatur ===
Na: |
┌───┬───┬───┬───┐
Nb: |
├───┼───┼───┼───┤
Nc: |
├───┼───┼───┤ │
Nd: |
├───┴───┼───┤ │
Ne: |
└───────┴───┴───┘
N2: |
=== Zweite Ebene Miniatur ===
N3: |
=== Dritte Ebene Miniatur ===
25: |
=== Vierte Ebene Miniatur ===
26: |
=== Fünfte Ebene Miniatur ===
27: |
=== Sechste Ebene Miniatur ===
Ig: |
== Tipp ==
Trägt man unter Linux/Mac/BSD folgende Zeilen in die ~/.bashrc, ~/.zshrc oder
vergleichbares ein, bekommt man anschließend mittels Eingabe von »neo« oder
»num« die aktuelle Belegung in der Konsole angezeigt:
alias num='grep -m 1 -B 15 "┴───────┘" PFAD_ZUR_DATEI/neo20.txt'
alias neo='grep -m 1 -B 15 "┴──────┘" PFAD_ZUR_DATEI/neo20.txt'
Dazu muss »PFAD_ZUR_DATEI« durch den Pfad zu dieser Datei ersetzt werden.
Im Verzeichnis linux/bin sind umfangreichere Skripte mit größerer Funktionalität.
== Zeichenerläuterungen ==
Ξ … Xi, griechischer Majuskel (U039E)
≙ … entspricht (U2259)
Λ … Lambda, griechischer Majuskel (U039B)
… Menge der komplexen Zahlen (U2102)
Ω … Omega, griechischer Majuskel (U03A9)
√ … Wurzel aus (U221A)
Ψ … Psi, griechischer Majuskel (U03A8)
Γ … Gamma, griechischer Majuskel (U0393)
Φ … Phi, griechischer Majuskel (U03A6)
… Menge der rationalen Zahlen (U211A)
∘ … Verknüpfungsoperator (U2218)
∮ … Integral über eine geschlossene Kurve (U222E)
∫ … Integral (U222B)
∀ … Allquantor ; für alle (U2200)
∃ … Existenzquantor ; es gibt (U2203)
∈ … Element von (U2208)
Σ … Sigma, griechischer Majuskel (U03A3)
… Menge der natürlichen Zahlen (U2115)
… Menge der reellen Zahlen (U211D)
∂ … partielle Ableitung (U2202)
Δ … Delta, griechischer Majuskel (U0394)
∇ … Nablaoperator (Gradient, Divergenz, Rotation) (U2207)
∝ … proportional zu (U221D)
… Imaginärteil einer komplexen Zahl (U2111)
… Realteil einer komplexen Zahl (U211C)
ℵ … Kardinalzahlen, Aleph-Symbol (U2135)
Π … Pi, griechischer Majuskel (U03A0)
… Menge der ganzen Zahlen (U2124)
⇒ … Implikation ; daraus folgt ; hinreichend für (U21D2)
⇔ … Äquivalenzzeichen (U21D4)
⇐ … notwendig für ; nur dann, wenn (U21D0)
Θ … Theta, griechischer Majuskel (U0398)
≡ … identisch (U2261)
□ … Beweisende (qed) (U25A1)
⊙ … direkte Summe ; Vektor aus der Ebene zeigend (U2299)
⊗ … Tensorprodukt ; Vektor in die Ebene zeigend (U2297)
∞ … unendlich (U221E)
∋ … enthält das Element (U220B)
ª … weiblicher Ordinalindikator (2ª) (U00AA)
º … männlicher Ordinalindikator (1º) (U00BA)
== Hinweise zu Doppelbelegungen in Unicode ==
Griechische Minuskel und Majuskel besitzten in der Regel eine weitere Bedeutung, z.B.
• Δ für Differenz oder Fehler
• Θ für homöopathische Urtinktur
• Γ für Gammafunktion
Einige finden sich darum an mehreren Stellen im Unicode, um (eventuelle) Unterschiede
deutliche machen zu können. Zur Platzersparnis haben wir stets eines (das einfachste
und allgemeinste) Zeichen aufgenommen:
• Ω (U03A9) ; Einheit des Widerstandes Ohm (U2126)
• Σ (U03A3) ; Summenzeichen (U2211)
• Δ (U0394) ; Laplaceoperator (U2206) ; Dreieck, symmetrische Differenz (U25B3)
• ∇ (U2207) ; Dreieck (U25BD)
• Π (U03A0) ; Produktzeichen ∏ (U220F)
• µ (U03BC) ; SI-Vorsilbe micro (U00B5)