47 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/perl
 | 
						|
#
 | 
						|
#  Generate C Language Table for UniCode Data
 | 
						|
#  (c) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
 | 
						|
#
 | 
						|
 | 
						|
$name=$ARGV[0];
 | 
						|
$type=$ARGV[1];
 | 
						|
 | 
						|
while (<STDIN>) {
 | 
						|
	chomp;
 | 
						|
	/^#/ && next;
 | 
						|
	/^\s*$/ && next;
 | 
						|
	s/^0x//;
 | 
						|
	($i,$j) = split/\s+/;
 | 
						|
	($i =~ /^(..)(..)$/) || die "Syntax error at $i";
 | 
						|
	$table{$1} = "$name" . "_$1";
 | 
						|
	die if defined $val{$i};
 | 
						|
	$val{$i} = $j;
 | 
						|
}
 | 
						|
 | 
						|
print "/* Generated automatically by gentab. Please don't edit. */\n\n";
 | 
						|
 | 
						|
for($i=0; $i<256; $i++) {
 | 
						|
	$x = sprintf("%02X", $i);
 | 
						|
	if (defined($table{$x})) {
 | 
						|
		print "static const $type $table{$x}\[256\] = \{\n";
 | 
						|
		for($j=0; $j<256; $j++) {
 | 
						|
			$y = $x . sprintf("%02X", $j);
 | 
						|
			if ($val{$y}) { print $val{$y}; }
 | 
						|
			else { print "0"; }
 | 
						|
			if ($j != 255) { print ","; }
 | 
						|
			if ($j % 16 == 15) { print "\n"; }
 | 
						|
		}
 | 
						|
		print "\};\n\n";
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
print "const $type \*$name\[256\] = \{\n";
 | 
						|
for($j=0; $j<256; $j++) {
 | 
						|
	$y = sprintf("%02X", $j);
 | 
						|
	if (defined $table{$y}) { print $table{$y}; }
 | 
						|
	else { print "NULL"; }
 | 
						|
	if ($j != 255) { print ","; }
 | 
						|
	if ($j % 16 == 15) { print "\n"; }
 | 
						|
}
 | 
						|
print "\};\n";
 |