$l) { if (preg_match('/^#\s*[━─]{2,}\s+([A-Za-z].+?)\s+[━─]{2,}/u', $l, $m)) $hdrs[] = [$i, trim($m[1])]; } $list = in_array('--list', $argv, true); $tally = []; $n = 0; $enums = []; $ranges = []; foreach ($hdrs as $k => [$i, $name]) { $end = $hdrs[$k + 1][0] ?? count($lines); $rows = _vv_conf_parse_field_range($lines, $i + 1, $end, 'master.conf'); if ($list && $rows) printf("\n── %s\n", $name); foreach ($rows as $x) { $n++; $w = $x['widget'] ?? '?'; $tally[$w] = ($tally[$w] ?? 0) + 1; if ($w === 'enum') $enums[] = $x['key'] . ' = ' . implode(' | ', array_column($x['choices'], 'value')); if (isset($x['min'])) $ranges[] = $x['key'] . ' ' . $x['min'] . '-' . $x['max']; if ($list) { $e = []; if (isset($x['unit'])) $e[] = $x['unit']; if (isset($x['min'])) $e[] = $x['min'] . '-' . $x['max']; printf(" %-34s %-7s %s\n", $x['key'], $w, $e ? '[' . implode(' ', $e) . ']' : ''); } } } printf("\nlive master.conf: %d fields across %d sections\n", $n, count($hdrs)); ksort($tally); foreach ($tally as $k => $v) printf(" %-8s %d\n", $k, $v); if ($enums) { echo "\nchoice lists found:\n"; foreach ($enums as $e) echo " $e\n"; } if ($ranges) { echo "\nbounded numbers found:\n"; foreach ($ranges as $e) echo " $e\n"; } exit($fail ? 1 : 0);