# Testing Khmer Unicode character combinations/fonts # TestKhmerFont.pl; Maurice Bauhahn 27 December 2003 use open ':utf8'; $\ = undef; @signs = ( 0, 6091, 6093, 6094, 6095, 6096, 6097, 6109 ); %reg1 = ( 6016, 1, 6017, 1, 6021, 1, 6022, 1, 6026, 1, 6027, 1, 6030, 1, 6031, 1, 6032, 1, 6036, 1, 6037, 1, 6047, 1, 6048, 1, 6049, 1, 6050, 1 ); %reg2 = ( 6018, 2, 6019, 2, 6020, 2, 6023, 2, 6024, 2, 6025, 2, 6028, 2, 6029, 2, 6033, 2, 6034, 2, 6035, 2, 6036, 2, 6038, 2, 6039, 2, 6040, 2, 6041, 2, 6042, 2, 6043, 2, 6044, 2, 6045, 2, 6046, 2 ) ; # CONSONANT # for (my $consonant = 6016 ; $consonant < 6051 ; $consonant++) { for (my $consonant = 6016 ; $consonant < 6018 ; $consonant++) { $filename="Khmer" . $consonant . ".txt" ; $columns = 0 ; $totalcols = 8; $line = 0; open (FH, "+>", $filename) ; # ROBAT for (my $robat = 6091; $robat <6093; $robat ) { # add logic to omit $robat if it equals 6091 # REGISTER SHIFTER for (my $register = 6088; $register < 6091; $register++) { # add logic to omit $register if it equals 6088; also ensure that register = 6089 (triisap) is # associated with a register two (o) base; 6090 (muusekatoan) is associated with # register one (a) base. # FIRST SUBSCRIPT for (my $subscript1 = 6015; $subscript1 < 6051; $subscript1++) { # add logic to ensure $subscript1 6015 is no subscript 1 and no subscript 2 # SECOND SUBSCRIPT for (my $subscript2 = 6015; $subscript2 < 6051; $subscript2++) { # add logic to ensure $subscript2 6015 is no subscript 2 # DEPENDENT VOWEL for (my $vowel = 6069; $vowel < 6086; $vowel++) { # add logic to ensure $vowel= 6069 means omit dependent vowel # SIGNS foreach $sign (@signs) { # Generating output $output = chr($consonant) ; if ($robat != 6091) { $output .= chr($robat); } if ( $register == 6089 && exists($reg2{$consonant}) ) { $output .= chr($register); } if ( $register == 6090 && exists($reg1{$consonant}) ) { $output .= chr($register); } if ( $subscript1 != 6015 ) { $output .= chr(6098); $output .= chr($subscript1); } # chr(6098) is COENG if ( $subscript2 != 6015 && $subscript1 != 6015 ) { $output .= chr(6098); $output .= chr($subscript2); } if ( $vowel != 6069 ) { $output .= chr($vowel); } if ( $sign != 0 ) { $output .= chr($sign); } # print FH "\n Output = $output ; Old output = $output_previous \n"; # First entry if ($line == 0 && $columns == 0) {print FH "\n", "1. ", chr(9), chr(9), chr(6016), "$output", chr(9); $line =1; $columns=1; $output_previous = $output; } # End of line if ( ( $columns >= $totalcols ) && !($line == 0 && $columns == 0) ) { $line += 1; $columns=1; if ( $output eq $output_previous ) { print FH "\n", $line, ". ", chr(9), chr(9) ; } else {print FH chr(6050), "$output" ,"\n", $line, ". ", chr(9), chr(9) ; $output_previous = $output; } } # Body of line if ( ( $columns < $totalcols ) && !($line == 0 && $columns == 0) ) { if ($output eq $output_previous) { } else { if ($columns==1) {print FH chr(6016), "$output", chr(9) ; } if ($columns==2) {print FH chr(6023), "$output", chr(9) ; } if ($columns==3) {print FH chr(6025), "$output", chr(9) ; } if ($columns==4) {print FH chr(6026), "$output", chr(9) ; } if ($columns==5) {print FH chr(6027), "$output", chr(9) ; } if ($columns==6) {print FH chr(6042), "$output", chr(9) ; } if ($columns==7) {print FH chr(6049), "$output", chr(9) ; } if ($columns > 7) {print FH chr(6049), "$output", chr(9) ; } $columns += 1; $output_previous = $output; } } } # signs } # vowel } # subscript2 } # subscript1 } # register } # robat close FH; } # consonant