From 3d27b19317f43d4665832f3eee77f888f40bf31f Mon Sep 17 00:00:00 2001 From: martin_r Date: Mon, 29 Dec 2008 02:46:24 +0000 Subject: Referenz-Parser committet. git-svn-id: https://svn.neo-layout.org@1334 b9310e46-f624-0410-8ea1-cfbb3a30dc96 --- yaml/neo20.py | 16 ---- yaml/neo20.yaml | 226 --------------------------------------------- yaml/ref.parse.py | 80 ++++++++++++++++ yaml/ref.skel | 267 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 347 insertions(+), 242 deletions(-) delete mode 100644 yaml/neo20.py delete mode 100644 yaml/neo20.yaml create mode 100644 yaml/ref.parse.py create mode 100644 yaml/ref.skel (limited to 'yaml') diff --git a/yaml/neo20.py b/yaml/neo20.py deleted file mode 100644 index 7b66a9e..0000000 --- a/yaml/neo20.py +++ /dev/null @@ -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() diff --git a/yaml/neo20.yaml b/yaml/neo20.yaml deleted file mode 100644 index 83bc7d9..0000000 --- a/yaml/neo20.yaml +++ /dev/null @@ -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] \ No newline at end of file diff --git a/yaml/ref.parse.py b/yaml/ref.parse.py new file mode 100644 index 0000000..8a3d2e8 --- /dev/null +++ b/yaml/ref.parse.py @@ -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 . + +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) diff --git a/yaml/ref.skel b/yaml/ref.skel new file mode 100644 index 0000000..746c6d0 --- /dev/null +++ b/yaml/ref.skel @@ -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 + 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) + \ No newline at end of file -- cgit v1.2.3