1<?php
2
3echo '<pre>';
4$starttime = microtime(true);
5
6$fp = fopen('./jyut6ping3.dict.yaml', 'r');
7$errorcnt = 0;
8$i = 0;
9while($line = fgets($fp)) {
10	if (trim($line) === '' || $line[0] === '#') goto next;
11	if (strpos($line, "\t") === false) goto next;
12
13	list($char, $val) = explode("\t", trim($line), 3);
14
15	$syllable = strtok($val, " ");
16	while ($syllable !== false) {
17		$tone = substr($syllable, -1);
18		if ($tone !== '1' && $tone !== '2' && $tone !== '3' && $tone !== '4' && $tone !== '5' && $tone !== '6') {
19			goto error;
20		}
21
22		$syllable = substr($syllable, 0, -1);
23
24		if ($syllable == 'm' || $syllable == 'ng' || $syllable == 'hm' || $syllable == 'hng') goto success;
25
26		$syllable = strtr($syllable, [
27			'q' => 'qqqq', 'v' => 'qqqq',
28
29			'aang' => 'v', 'aan' => 'v', 'aam' => 'v',
30			'aak' => 'v', 'aat' => 'v', 'aap' => 'v',
31			'aai' => 'v', 'aau' => 'v', 'aa' => 'v',
32
33			'ang' => 'v', 'an' => 'v', 'am' => 'v',
34			'ak' => 'v', 'at' => 'v', 'ap' => 'v',
35			'ai' => 'v', 'au' => 'v', 'a' => 'v',
36
37			'em' => 'v', 'eng' => 'v', 'en' => 'v',
38			'ep' => 'v', 'ek' => 'v', 'et' => 'v',
39			'ei' => 'v', 'eu' => 'v', 'e' => 'v',
40
41			'ing' => 'v', 'in' => 'v', 'im' => 'v',
42			'ik' => 'v', 'it' => 'v', 'ip' => 'v',
43			'iu' => 'v', 'i' => 'v',
44
45			'oi' => 'v', 'ou' => 'v',
46			'ong' => 'v', 'on' => 'v', 'ot' => 'v', 'ok' => 'v', 'om' => 'v',
47			'o' => 'v',
48
49			'eoi' => 'v', 'eon' => 'v', 'eot' => 'v',
50			'oeng' => 'v', 'oet' => 'v', 'oek' => 'v', 'oe' => 'v',
51			'yun' => 'v', 'yut' => 'v', 'yu' => 'v',
52
53			'ui' => 'v', 'ung' => 'v', 'un' => 'v', 'ut' => 'v', 'uk' => 'v',
54			'u' => 'v',
55		]);
56
57		$syllable = strtr($syllable, [
58			'gw' => 'q', 'kw' => 'q',
59			'b' => 'q', 'p' => 'q', 'm' => 'q', 'f' => 'q',
60			'd' => 'q', 't' => 'q', 'n' => 'q', 'l' => 'q',
61			'g' => 'q', 'k' => 'q', 'ng' => 'q', 'h' => 'q',
62			'z' => 'q', 'c' => 'q', 's' => 'q',
63			'j' => 'q', 'w' => 'q'
64		]);
65
66		if ($syllable !== 'qv' && $syllable !== 'v') {
67			echo $syllable . " ";
68			goto error;
69		}
70
71
72		success:
73		$syllable = strtok(" ");
74		continue;
75
76		error:
77		echo "Invalid Jyutping detected on line $i: $line" . "\r\n";
78		$errorcnt++;
79		$syllable = strtok(" ");
80	}
81
82	next:
83	$i++;
84}
85
86echo "Time used: " . (microtime(true) - $starttime) . ' s';
87exit(min($errorcnt, 1));
88