<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);
 
 |