parent
623d6d83e3
commit
0d75220574
@ -0,0 +1,185 @@ |
||||
#YAML Parser for the Neo reference |
||||
#Copyright 2009 Martin Roppelt (m.p.roppelt ἢτ web in Germany) |
||||
# |
||||
#This file is part of 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/>. |
||||
''' |
||||
Converts the reference into both human and machine readable and editable files |
||||
for automated creating of keyboard drivers, pictures and references. |
||||
''' |
||||
#Needs at least Phyton 3.0 and PyYAML 3.08 (pyyaml.org) to run. |
||||
# |
||||
#Call with -h|--help to print command line options. |
||||
# |
||||
#Variables: |
||||
#b: box drawing characters as tuple, |
||||
#index bits: (0) left (1) down (2) right (3) up |
||||
##c: control file #for reference |
||||
#f: file iterator |
||||
#i: index-sorted file |
||||
#m: model file |
||||
#min: miniatures |
||||
#n: name/number iterator |
||||
#o: command line options: |
||||
#o.a: auto-completion of file names as boolean |
||||
#o.d: destination file name |
||||
#o.i: index-sorted file name |
||||
#o.m: model file name |
||||
#o.r: paths relative to ./ otherwise to ../A-REFERENZ-A/ as boolean |
||||
#o.s: source file name |
||||
#o.t: destination file types (i/m/p/v) |
||||
#o.v: view file name |
||||
#p: pattern file |
||||
#pm: pre-model |
||||
#r: compiled regular expression |
||||
#s: source file as string |
||||
#v: view file, contains: |
||||
#pv: pre-view |
||||
# string literals |
||||
# replacement commands |
||||
# patterns |
||||
|
||||
from neo20_global import b |
||||
from optparse import OptionParser, make_option |
||||
from sys import stdout |
||||
from unicodedata import category |
||||
import os |
||||
import re |
||||
import yaml |
||||
|
||||
def parse(s, w = 5): |
||||
''' |
||||
Returns a representation of a key field s with the standard with w. |
||||
''' |
||||
#Variables: |
||||
#i: line iterator |
||||
#j: level iterator |
||||
#l: key line iterator |
||||
#y: key level list |
||||
#m: model |
||||
#k: key iterator |
||||
#s: key field as string |
||||
#w: standard key with |
||||
#v: view |
||||
#q: key iterator |
||||
m = []; v = []; y = []; i = 0 |
||||
for l in [l[:s.index(b[3])] for l in s.splitlines()[1:]]: |
||||
if l[0] in (b[12], b[14]): |
||||
m.append([]); v.append([]) |
||||
for j, l in enumerate(y[::-1]): |
||||
q = 0 |
||||
for k in l[1:].split(b[10]): |
||||
if j == 0: |
||||
m[i].append([]); v[i].append([]) |
||||
if len(k) == w: |
||||
if w == 7: |
||||
m[i][q].extend([k[0], k[2:5], k[6:7]]) |
||||
elif w == 5: |
||||
m[i][q].extend(list(k[0:5:2])) |
||||
elif w == 1: |
||||
m[i][q] = k |
||||
else: |
||||
v[i][q] = k |
||||
q += 1 |
||||
i += 1; y = [] |
||||
else: |
||||
y.append(l) |
||||
return m, v |
||||
|
||||
def compare(m, min): |
||||
''' |
||||
Compares the overall and miniature key field and returns their completed |
||||
views. |
||||
''' |
||||
v = [m[1] for m in m] |
||||
return v |
||||
|
||||
#command line options: |
||||
o = OptionParser(usage = 'example: %prog -ti -astest', |
||||
description = 'YAML Parser for the Neo reference', |
||||
option_list = [ |
||||
make_option('-a', action = 'store_true', default = False, help = 'source file \ |
||||
name is inserted into ‘neo20-’ and ‘.txt’'), |
||||
make_option('-r', action = 'store_false', default = True, help = 'source and \ |
||||
destination files are not relative to ../A-REFERENZ-A/'), |
||||
make_option('-t', metavar = 'mxiv', default = 'm', help = 'destination file \ |
||||
types (default = %default)'), |
||||
make_option('-s', metavar = 'source file', default = 'neo20.txt', |
||||
help = 'default = %default'), |
||||
make_option('-d', metavar = 'destination file name', help = 'default = *.*'), |
||||
make_option('-m', metavar = 'model file', help = 'default = *.model'), |
||||
make_option('-x', metavar = 'hex model file', help = 'default = *.x'), |
||||
make_option('-i', metavar = 'index-sorted file', help = 'default = *.index'), |
||||
make_option('-v', metavar = 'view file', help = 'default = *.view')] |
||||
).parse_args()[0] |
||||
|
||||
#evaluate options: |
||||
o.t = o.t.lower() |
||||
if o.d == None: |
||||
o.d = o.s.rsplit('.txt')[0] |
||||
if o.a: |
||||
o.s, o.d = 'neo20-' + o.s + '.txt', 'neo20-' + o.d |
||||
if o.r: |
||||
o.s, o.d = '../A-REFERENZ-A/' + o.s, '../A-REFERENZ-A/' + o.d |
||||
for f in '.model', '.x', '.index', '.view': |
||||
if f[1] in o.t.lower() and eval('o.' + f[1]) == None: |
||||
exec('o.' + f[1] + ' = o.d + f') |
||||
|
||||
#input: |
||||
s = open(o.s, encoding = 'utf8').read() |
||||
|
||||
#processing: |
||||
r = re.compile(b[6] + '.*?' + b[9] + '.*?\n(?=\n)', re.DOTALL | re.MULTILINE) |
||||
p, pm = r.split(s), r.findall(s) #Split into key fields and the rest |
||||
for n in (0, 16): |
||||
p.insert(n, p.pop(n) + pm.pop(n) + p.pop(n)) #Put the legends back into the |
||||
#pattern list |
||||
|
||||
#parse key fields |
||||
m = [parse(pm[9]), parse(pm[20], 7)] |
||||
min = [] |
||||
for n in range(6): |
||||
min.append([parse(pm[10 + n], 1), parse(pm[21+ n], 7)]) |
||||
v = compare(m, min); m = [m[0] for m in m] |
||||
|
||||
#complete view ## |
||||
v = [[v], []] |
||||
|
||||
v.append(p) |
||||
|
||||
#create hex model |
||||
if 'x' in o.t.lower(): |
||||
x = [] |
||||
for f, n in enumerate(m): |
||||
x.append(); ## |
||||
|
||||
#create index |
||||
if 'i' in o.t.lower(): |
||||
i = [] |
||||
for n in m: |
||||
for n in n: |
||||
i.extend(n) |
||||
#output: |
||||
for f in 'mxiv': |
||||
if not stdout.isatty(): |
||||
file = stdout |
||||
else: |
||||
file = open(eval('o.' + f), 'w', encoding = 'utf8') |
||||
if f in o.t: |
||||
if f == 'v': |
||||
yaml.dump_all(v[0:-1], file, allow_unicode = True, |
||||
explicit_start = True, |
||||
explicit_end = True) |
||||
yaml.dump(v.pop(), file, allow_unicode = True, |
||||
explicit_start = True, |
||||
explicit_end = True, |
||||
default_style = '|') |
||||
else: |
||||
yaml.dump(eval(f), file, allow_unicode = True, |
||||
explicit_start = True, |
||||
explicit_end = True) |
@ -0,0 +1,3 @@ |
||||
#define box drawing |
||||
b = None, None, None, '\u2510', None, '\u2500', '\u250C', '\u252C', None, \ |
||||
'\u2518', '\u2502', '\u2524', '\u2514', '\u2534', '\u251C', '\u253C' |
@ -1,267 +0,0 @@ |
||||
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 NEO‐Tastatur 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 NEO‐Tastatur 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) |
||||
|
Loading…
Reference in new issue