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/ref.parse.py | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 yaml/ref.parse.py (limited to 'yaml/ref.parse.py') 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) -- cgit v1.2.3