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