Example #1
0
function dump_pub($filetype, $filename, $formatfile, $prefix)
{
    $format = pub_format_parse_file($formatfile);
    $reader = new PubReader($format, $filename);
    $header = $reader->readHeader();
    $names = new NameManager();
    if ($header['type'] != $filetype) {
        throw new Exception("{$filetype} file is not an {$filetype} file!");
    }
    for ($i = 0; $i < $header['num']; ++$i) {
        $entry = $reader->readNextEntry();
        if ($entry['name'] == 'eof') {
            break;
        }
        $gender = null;
        if ($filetype == 'EIF') {
            if ($entry['type'] == 'Armor') {
                $gender = $entry['spec2'];
            }
        }
        $idname = $names->generateName($entry['name'], $gender);
        // Re-order unknowns to the bottom
        foreach (array_keys($entry) as $k) {
            if (substr($k, 0, 7) == 'unknown') {
                $v = $entry[$k];
                unset($entry[$k]);
                $entry[$k] = $v;
            }
            if (substr($k, 0, 5) == 'Xdrop') {
                unset($entry[$k]);
            }
        }
        // Re-order ID and name to the top...
        $name = $entry['name'];
        unset($entry['name']);
        if ($filetype == 'ESF') {
            $shout = $entry['shout'];
        }
        if ($filetype == 'EIF') {
            $size = $entry['size'];
        }
        if ($filetype == 'EIF') {
            $weight = $entry['weight'];
        }
        if ($filetype == 'ESF') {
            unset($entry['shout']);
        }
        if ($filetype == 'EIF') {
            unset($entry['size']);
        }
        if ($filetype == 'EIF') {
            unset($entry['weight']);
        }
        $entry = array_reverse($entry);
        $entry['name'] = $name;
        if ($filetype == 'ESF') {
            $entry['shout'] = $shout;
        }
        if ($filetype == 'EIF') {
            $entry['size'] = $size;
        }
        if ($filetype == 'EIF') {
            $entry['weight'] = $weight;
        }
        $entry['id'] = $i + 1;
        $entry = array_reverse($entry);
        $cleanup = array();
        foreach ($entry as $k => $v) {
            if ($v === 0) {
                $cleanup[$k] = $k;
            }
        }
        if ($filetype == 'EIF') {
            $cleanup['unknown3'] = 'unknown3';
        }
        foreach ($cleanup as $k) {
            unset($entry[$k]);
        }
        $filename = "{$prefix}{$idname}.json";
        echo "Dumping: {$filename}\n";
        file_put_contents($filename, json_encode($entry, JSON_PRETTY_PRINT));
    }
}