function vis_structure($io, $prev_value, &$allSame) { $id = $io['id']; $value = $io['value']; $ios = get_child_ios($id); $result = ''; if (count($ios) == 0) { $result = vis_value($value, $prev_value, $allSame); } else { $childrenSame = true; $result2 = ''; $result2 .= '<table class="table table-condensed">'; $dttoMode = false; $dttoNames = ''; foreach ($ios as $cio) { $childSame = true; $object = get_object($cio['object_id']); $result3 = '<tr><td>'; $result3 .= get_object_link($object, $cio['name'], $cio['operation_id']); $result3 .= '</td><td>'; $result3 .= render_value($cio, $object, $childSame); $result3 .= '</td></tr>'; $childrenSame = $childrenSame && $childSame; if (!$childSame) { if ($dttoMode) { $result2 .= "<tr><td title=\"These members are unchanged: {$dttoNames}\">⋮</td><td></td></tr>"; $dttoMode = false; $dttoNames = ''; } $result2 .= $result3; } else { $dttoMode = true; $dttoNames .= " " . htmlentities($cio['name']); } } $result2 .= '</table>'; if ($childrenSame) { $result = dtto(); } else { $allSame = false; $result = $result2; } } return $result; }
function render_value($io, $io_obj = null, &$allSame = true, $hint = '') { global $prev_ios; $id = $io['id']; $value = $io['value']; if (is_null($io_obj)) { $io_obj = get_object($io['object_id']); } $type = $io_obj['type']; $prev_value = null; if (array_key_exists($io_obj['id'], $prev_ios)) { $prev_value = $prev_ios[$io_obj['id']]; } $result = ''; if ($type == 'std::vector<float>' || $type == 'std::vector<int>' || $type == 'std::vector<double>') { $result .= vis_vector($value, $id, $prev_value, $allSame); } else { if ($type == 'freicore::PeakPreData') { $result .= vis_spectrum($value, $id, $prev_value, $allSame, $hint); } else { if ($type == 'freicore::PeakSpectrum<PeakInfo>') { $result .= vis_spectrum($value, $id, $prev_value, $allSame, $hint); } else { if ($type == 'FragmentTypes') { $fragments = 'abcxyzZ'; $result .= '<pre>' . substr($fragments, intval($value), 1) . '</pre>'; } else { if ($type == 'freicore::myrimatch::MzToleranceRule') { $result .= vis_enum($value, $prev_value, array('0' => 'auto', '1' => 'monoisotopic', '2' => 'average'), $allSame); } else { if ($type == 'char') { if ($value == $prev_value) { $result .= dtto(); } else { $allSame = false; $result .= "<pre>{$value}</pre> " . chr(intval($value)); } } else { if (startsWith($type, 'std::map<') || $type == 'pwiz::proteome::ModificationMap') { $result .= vis_map($id, $allSame); } else { $result .= vis_structure($io, $prev_value, $allSame); } } } } } } } $prev_ios[$io_obj['id']] = $value; return $result; }