Ticket #80: neo_svg.php

File neo_svg.php, 2.1 KB (added by stephan, 17 years ago)

PHP-Skript für das Erstellen der SVG-Grafik

Line 
1<?php
2 # Referenz laden
3 $reference = file_get_contents('http://neo-layout.org/svn/A-REFERENZ-A/neo20.txt');
4
5 # Haupttastatur finden
6 preg_match('/┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────────┐\n(.*)\n└──────┴──────┴──────┴──────────────────────────────────────┴──────┴──────┴──────┴──────┘/s', $reference, $found);
7 # Tastaturreihen aufspalten
8 $rows = preg_split('/\n├.*\n/', $found[1]);
9
10 $n = 1;
11 # Für jede Reihe:
12 foreach ($rows as $row) {
13 $sub_rows = preg_split('/\n/', $row);
14
15 # Finde Zeichen in beiden Zeilen.
16 # U030F ist ein combining-character und tritt zusammen mit einem Leerzeichen auf, damit es angezeigt wird
17 preg_match_all('/│(.) (\x{030F} |.) (.)(?=│)/u', $sub_rows[0], $r1);
18 preg_match_all('/│(.) (.) (.)(?=│)/u', $sub_rows[1], $r2);
19
20 # Für jede Taste:
21 for ($i = 0; $i < count($r1[0]); $i++) {
22 # Überspringe Enter-Taste, die nicht dazugehört
23 if ($r1[2][$i] == "\xE2\x86\xB2" && $i == 11) {
24 $n--;
25 continue;
26 }
27 # Lade die Zeichen der beiden Zeilen in das Array, geordnet nach ihrer Ebene
28 $key[$n+$i.'_1'] = $r2[1][$i];
29 $key[$n+$i.'_2'] = $r1[1][$i];
30 $key[$n+$i.'_3'] = $r2[2][$i];
31 $key[$n+$i.'_4'] = $r1[2][$i];
32 $key[$n+$i.'_5'] = $r2[3][$i];
33 $key[$n+$i.'_6'] = $r1[3][$i];
34 }
35 $n += $i;
36 }
37
38 # Lade das "rohe" SVG
39 $svg = file_get_contents('neo_raw.svg');
40
41 # Ersetze die Platzhalter mit den Zeichen aus dem Array
42 foreach ($key as $search => $replace) {
43 # Die Zeichen werden in HTML-NCRs (numeric character references) umgewandelt, damit sie nicht falsch interpretiert werden.
44 $svg = preg_replace('/{'.preg_quote($search).'}/', mb_encode_numericentity ($replace, array (0x0, 0xffff, 0, 0xffff), 'UTF-8'), $svg);
45 }
46
47 # Speichern und Fertig
48 file_put_contents('neo.svg', $svg);
49?>