summaryrefslogtreecommitdiffstats
path: root/grafik/Php-Skript/neo_svg.php
blob: 2dd67d943bd69801738548514edf164b3b2f69d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
	# Referenz laden
	$reference = file_get_contents('http://neo-layout.org/svn/A-REFERENZ-A/neo20.txt');

	# Haupttastatur finden
	preg_match('/┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────────┐\n(.*)\n└──────┴──────┴──────┴──────────────────────────────────────┴──────┴──────┴──────┴──────┘/s', $reference, $found);
	# Tastaturreihen aufspalten
	$rows = preg_split('/\n├.*\n/', $found[1]);

	$n = 1;
	# Für jede Reihe:
	foreach ($rows as $row) {
		$sub_rows = preg_split('/\n/', $row);

		# Finde Zeichen in beiden Zeilen.
		# U030F ist ein combining-character und tritt zusammen mit einem Leerzeichen auf, damit es angezeigt wird
		preg_match_all('/│(.) (\x{030F} |.) (.)(?=│)/u', $sub_rows[0], $r1);
		preg_match_all('/│(.) (.) (.)(?=│)/u', $sub_rows[1], $r2);

		# Für jede Taste:
		for ($i = 0; $i < count($r1[0]); $i++) {
			# Überspringe Enter-Taste, die nicht dazugehört
			if ($r1[2][$i] == "\xE2\x86\xB2" && $i == 11) {
				$n--;
				continue;
			}
			# Lade die Zeichen der beiden Zeilen in das Array, geordnet nach ihrer Ebene
			$key[$n+$i.'_1'] = $r2[1][$i];
			$key[$n+$i.'_2'] = $r1[1][$i];
			$key[$n+$i.'_3'] = $r2[2][$i];
			$key[$n+$i.'_4'] = $r1[2][$i];
			$key[$n+$i.'_5'] = $r2[3][$i];
			$key[$n+$i.'_6'] = $r1[3][$i];
		}
		$n += $i;
	}

	# Lade das "rohe" SVG
	$svg = file_get_contents('neo_raw.svg');

	# Ersetze die Platzhalter mit den Zeichen aus dem Array
	foreach ($key as $search => $replace) {
		# Die Zeichen werden in HTML-NCRs (numeric character references) umgewandelt, damit sie nicht falsch interpretiert werden.
		$svg = preg_replace('/{'.preg_quote($search).'}/', mb_encode_numericentity ($replace, array (0x0, 0xffff, 0, 0xffff), 'UTF-8'), $svg);
	}

	# Speichern und Fertig
	file_put_contents('neo.svg', $svg);
?>