Codepage mapping
Mapping from one codepage to another can be done using the eZCodePageMapper class,
it provides instantaneous mapping from one character code in one charset to the
code in the other charset.
TODO — Image not available in archive
Title: Codepage Mapping Table (eZCodePageMapper)
File: /doc/images/codepage_mapping.jpg
What this image shows:
Screenshot or rendered output of the eZCodePageMapper class demonstration: a table mapping character codes between two codepages/charsets (e.g., ISO-8859-1 to UTF-8), generated using eZCodePageMapper. Each row shows a source character code alongside its mapped equivalent in the target charset.
Replacement instructions:
Reproduce by running the sample code from sdk/ezi18n/view/codepage_mapping and taking a screenshot of the browser output. Save as /doc/images/codepage_mapping.jpg
See /sdk/missing.html for the full list of missing images.
This table can be produced by the following code.
Table 1 shows the charset to map from, table 2 shows the charset to map to
and table 3 shows the characters that could be mapped.
function displayCharsetTable( $values,
$x_start, $x_stop,
$y_start, $y_stop )
{
print( "<table>\n<tr><td></td>" );
for ( $x = $x_start; $x < $x_stop; ++$x )
print( "<td>$x</td>" );
print( "</tr>\n" );
for ( $y = $y_start; $y < $y_stop; ++$y )
{
print( "<tr><td>$y</td>" );
for ( $x = $x_start; $x < $x_stop; ++$x )
{
if ( isset( $values[$x][$y] ) )
{
$value = $values[$x][$y];
$char_utf8 = htmlspecialchars( $value[0] );
$char_code = $value[1];
print( "<td>$char_utf8</td>" );
}
else
print( "<td></td>" );
}
print( "</tr>\n" );
}
print( "</table>\n" );
}
function generateCharsetTable( &$values, &$codepage,
$x_start, $x_stop,
$y_start, $y_stop )
{
$values = array();
for ( $y = $y_start; $y < $y_stop; ++$y )
{
for ( $x = $x_start; $x < $x_stop; ++$x )
{
$code = ($y*$y_stop) + $x;
$utf8 = $codepage->codeToUtf8( $code );
$values[$x][$y] = array( $utf8, $code );
}
}
}
header( "Content-Type: text/html; charset=utf8" );
include_once( "lib/ezi18n/classes/ezcodepagemapper.php" );
include_once( "lib/ezutils/classes/ezhttptool.php" );
$input_charset = "cyrillic";
$output_charset = "wincyrillic";
$http =& eZHTTPTool::instance();
if ( $http->hasPostVariable( "ChangeCharset" ) )
{
if ( $http->hasPostVariable( "InputCharset" ) )
{
$input_charset = $http->postVariable( "InputCharset" );
}
if ( $http->hasPostVariable( "OutputCharset" ) )
{
$output_charset = $http->postVariable( "OutputCharset" );
}
}
$input_codepage =& eZCodePage::instance( $input_charset );
$output_codepage =& eZCodePage::instance( $output_charset );
$codepage_mapper =& eZCodePageMapper::instance( $input_charset, $output_charset );
print( "
<form action=\"\" method=\"post\" name=\"CodepageMapping\">
<p>
Table <b>1</b> shows the charset to map from, table <b>2</b> shows the charset to map to
and table <b>3</b> shows the characters that could be mapped.
</p>
<p class=\"footnote\">
This page uses utf8 output to allow displaying two different charsets at the same time,
you might not see all characters depending on your font support.
</p>
" );
generateCharsetTable( $input_values, $input_codepage,
0, 16,
0, 16 );
generateCharsetTable( $output_values, $output_codepage,
0, 16,
0, 16 );
$mapped_values = array();
for ( $y = 0; $y < 16; ++$y )
{
for ( $x = 0; $x < 16; ++$x )
{
$input_code = ($y*16) + $x;
$output_code = $codepage_mapper->mapInputCode( $input_code );
$output_utf8 = $output_codepage->codeToUtf8( $output_code );
$output_x = ( $output_code % 16 );
$output_y = ( $output_code / 16 );
$mapped_values[$output_x][$output_y] = array( $output_utf8, $input_code );
}
}
$charset_list = eZCodePage::codepageList();
print( "<table width=\"100%\">
<tr><td>
<select name=\"InputCharset\">" );
foreach( $charset_list as $charset )
{
print( "<option value=\"$charset\" " . ( $input_codepage->charsetCode() == $charset ? "selected=\"selected\"" : "" ) . ">$charset</option>" );
}
print( "</select>
</td><td>
<select name=\"OutputCharset\">" );
foreach( $charset_list as $charset )
{
print( "<option value=\"$charset\" " . ( $output_codepage->charsetCode() == $charset ? "selected=\"selected\"" : "" ) . ">$charset</option>" );
}
print( "</select>
</td><td>
<input class=\"stdbutton\" type=\"submit\" Name=\"ChangeCharset\" value=\"Change charset\">
</td></tr>
<tr><td>" );
print( "<h2>1. " . $input_codepage->charsetCode() );
if ( $input_codepage->charsetCode() != $input_codepage->requestedCharsetCode() )
print( "(" . $input_codepage->requestedCharsetCode() . ")" );
print( "</h2>" );
displayCharsetTable( $input_values,
0, 16,
0, 16 );
print( "</td><td>" );
print( "<h2>2. " . $output_codepage->charsetCode() );
if ( $output_codepage->charsetCode() != $output_codepage->requestedCharsetCode() )
print( "(" . $output_codepage->requestedCharsetCode() . ")" );
print( "</h2>" );
displayCharsetTable( $output_values,
0, 16,
0, 16 );
print( "</td>" );
print( "<td colspan=\"2\">" );
print( "<h2>3. " . $input_codepage->charsetCode() . " => " . $output_codepage->charsetCode() . "</h2>" );
displayCharsetTable( $mapped_values,
0, 16,
0, 16 );
print( "</td></tr>" );
print( "</table>" );
print( "</form>" );
|