| 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 | ?> |
|---|