mirror of
https://github.com/WenPai-org/wp-china-yes.git
synced 2025-08-08 14:59:18 +08:00
62 lines
1.9 KiB
PHP
62 lines
1.9 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Binary MO hex view
|
||
|
*/
|
||
|
$this->extend('view');
|
||
|
$this->start('source');
|
||
|
?>
|
||
|
|
||
|
<div class="notice inline notice-info">
|
||
|
<p>
|
||
|
<?php esc_html_e('File is in binary MO format','loco-translate')?>.
|
||
|
</p>
|
||
|
</div>
|
||
|
|
||
|
<div class="panel">
|
||
|
<pre><?php
|
||
|
// crude hex dump
|
||
|
// TODO make dynamic - flowing to width + clicking bytes highlights right-hand character ranges
|
||
|
|
||
|
$i = 0;
|
||
|
$r = 0;
|
||
|
$cols = 24;
|
||
|
$line = array();
|
||
|
$bytes = strlen($bin);
|
||
|
// establish formatting of row offset, nbased on largest row number
|
||
|
$rowfmt = sprintf( '%%0%uX | ', strlen( sprintf( '%02X', $cols * floor( $bytes / $cols ) ) ) );
|
||
|
|
||
|
for( $b = 0; $b < $bytes; $b++ ){
|
||
|
$c = substr($bin,$b,1);
|
||
|
$n = ord($c);
|
||
|
// print byte offset
|
||
|
if( ! $line ){
|
||
|
printf( $rowfmt, $b );
|
||
|
}
|
||
|
// print actual byte
|
||
|
printf('%02X ', $n );
|
||
|
// add printable to line
|
||
|
if( $n === 9 ){
|
||
|
$line[] = ' '; // <- tab?
|
||
|
}
|
||
|
else if ( $n < 32 || $n > 126 ) {
|
||
|
$line[] = '.'; // <- unprintable
|
||
|
}
|
||
|
else {
|
||
|
$line[] = $params->escape($c); // <- printable
|
||
|
}
|
||
|
// wrap at cols, and print plain text
|
||
|
if( ++$i === $cols ){
|
||
|
echo ' ', implode('', $line ), "\n";
|
||
|
$line = array();
|
||
|
$i = 0;
|
||
|
$r++;
|
||
|
}
|
||
|
}
|
||
|
if( $line ){
|
||
|
if( $r ){
|
||
|
echo str_repeat( ' ', $cols - $i );
|
||
|
}
|
||
|
echo ' ', implode('', $line ), "\n";
|
||
|
}
|
||
|
?></pre>
|
||
|
</div>
|