<style>
.dump_r li.marked > .lbl {
background: yellow;
}
</style>
<?php
require '../dump_r.php';
use dump_r\Type;
$stuff = [
'imgs/img_1771.jpg',
'data/people.csv',
[
'a' => [1,2,3.5],
'b' => [4,5,6],
'c' => [7,8,[11,12,13]],
'xxx' => true,
'yyy' => 'something',
],
[
['a' => 1, 'b' => 3],
['a' => 2, 'b' => 4],
],
"\x04\x00\xa0\x00\x32\x42\x00\xa0\xff\xff\xff\xff",
];
// exif data
Type::hook('String', function($raw, Type $type, $path) {
// match path-esque strings (containing '/' or '\') trailed by an
// EXIF-capable image extension, then verify this file actually exists
if (preg_match('#[\/]+.+\.(jpe?g|tiff?)$#', $raw) && is_file($raw)) {
$nodes = $exif = exif_read_data($raw, 0, true);
$len = $exif['COMPUTED']['Width'] . 'x' . $exif['COMPUTED']['Height'];
$type->types = ['image'];
$type->nodes = ['EXIF' => $nodes['EXIF']];
$type->length = $len;
return $type;
}
});
// csv records
Type::hook('String', function($raw, Type $type, $path) {
if (preg_match('#[\/]+.+\.csv$#', $raw) && is_file($raw)) {
$type->types = ['csv'];
$type->nodes = csv2array($raw);
$type->length = count($type->nodes);
return $type;
}
});
function csv2array($file) {
$csv = [];
$rows = array_map('str_getcsv', file($file));
$header = array_shift($rows);
foreach ($rows as $row)
$csv[] = array_combine($header, $row);
return $csv;
}
// prevent arrays keyed under 'c' from dumping sub-nodes
Type::hook('Array0', function($raw, Type $type, $path) {
if (end($path) === 'c')
$type->depth = 1;
return $type;
});
// prevent anything keyd under 'xxx' from dumping
Type::hook('*', function($raw, Type $type, $path) {
if (end($path) === 'xxx')
return false;
});
// tag specific keys with addl rend classes
Type::hook('*', function($raw, Type $type, $path) {
if (end($path) === 'yyy') {
$type->classes[] = 'marked';
}
return $type;
});
dump_r($stuff);
|