1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
<?php /** * Binary MO hex view */ $this->extend('view'); $this->start('source');
/* @var Loco_mvc_ViewParams $params */ /* @var string $bin */ ?>
<div class="panel panel-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 = []; $bytes = strlen($bin); // establish formatting of row offset, based 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 = []; $i = 0; $r++; } } if( $line ){ if( $r ){ echo str_repeat( ' ', $cols - $i ); } echo ' ', implode('', $line ), "\n"; } ?></pre> </div>
|