diff --git a/app/Report/ReportParserGenerate.php b/app/Report/ReportParserGenerate.php index b6a5211b0b5..1b868c51ae7 100644 --- a/app/Report/ReportParserGenerate.php +++ b/app/Report/ReportParserGenerate.php @@ -159,6 +159,9 @@ class ReportParserGenerate extends ReportParserBase /** @var int The current generational level */ private $generation = 1; + + /** @var int The current kekule order number */ + private $kekule_number = 1; /** @var array Source data for processing lists */ private $list = []; @@ -1471,6 +1474,8 @@ protected function setVarStartHandler(array $attrs): void $value = $this->desc; } elseif ($value === '@generation') { $value = (string) $this->generation; + } elseif ($value === '@kekule_number') { + $value = (string) $this->kekule_number; } elseif (preg_match("/@(\w+)/", $value, $match)) { $gmatch = []; if (preg_match("/\d $match[1] (.+)/", $this->gedrec, $gmatch)) { @@ -1553,6 +1558,8 @@ protected function ifStartHandler(array $attrs): void $value = '"' . addslashes($this->desc) . '"'; } elseif ($id === 'generation') { $value = '"' . $this->generation . '"'; + } elseif ($id === 'kekule_number') { + $value = '"' . $this->kekule_number .'"'; } else { $level = (int) explode(' ', trim($this->gedrec))[0]; if ($level === 0) { @@ -2546,6 +2553,9 @@ protected function relativesEndHandler(): void if (isset($value->generation)) { $this->generation = $value->generation; } + if (isset($value->kekule_number)) { + $this->kekule_number = $value->kekule_number; + } $tmp = Factory::gedcomRecord()->make((string) $xref, $this->tree); $this->gedrec = $tmp->privatizeGedcom(Auth::accessLevel($this->tree)); @@ -2594,6 +2604,17 @@ protected function generationStartHandler(): void $this->current_element->addText((string) $this->generation); } + /** + * Handle + * Prints the kekule order number + * + * @return void + */ + protected function kekuleNumberStartHandler(): void + { + $this->current_element->addText((string) $this->kekule_number); + } + /** * Handle * Has to be placed in an element (header, body or footer) @@ -2704,9 +2725,12 @@ private function addDescendancy(&$list, $pid, $parents = false, $generations = - private function addAncestors(array &$list, string $pid, bool $children = false, int $generations = -1): void { $genlist = [$pid]; + $kekulelist = [1]; $list[$pid]->generation = 1; + $list[$pid]->kekule_number = 1; while (count($genlist) > 0) { $id = array_shift($genlist); + $kekule_number = array_shift($kekulelist) + 1; if (strpos($id, 'empty') === 0) { continue; // id can be something like “empty7” } @@ -2715,19 +2739,23 @@ private function addAncestors(array &$list, string $pid, bool $children = false, $husband = $family->husband(); $wife = $family->wife(); if ($husband) { - $list[$husband->xref()] = $husband; - $list[$husband->xref()]->generation = $list[$id]->generation + 1; + $list[$husband->xref()] = $husband; + $list[$husband->xref()]->generation = $list[$id]->generation + 1; + $list[$husband->xref()]->kekule_number = $kekule_number; } if ($wife) { - $list[$wife->xref()] = $wife; - $list[$wife->xref()]->generation = $list[$id]->generation + 1; + $list[$wife->xref()] = $wife; + $list[$wife->xref()]->generation = $list[$id]->generation + 1; + $list[$wife->xref()]->kekule_number = $kekule_number + 1; } if ($generations == -1 || $list[$id]->generation + 1 < $generations) { if ($husband) { - $genlist[] = $husband->xref(); + $genlist[] = $husband->xref(); + $kekulelist[] = ($kekule_number) * 2 - 1; } if ($wife) { $genlist[] = $wife->xref(); + $kekulelist[] = ($kekule_number + 1) * 2 - 1; } } if ($children) { diff --git a/resources/xml/reports/ahnentafel_report.xml b/resources/xml/reports/ahnentafel_report.xml index 2447a46647b..512883f9bb6 100644 --- a/resources/xml/reports/ahnentafel_report.xml +++ b/resources/xml/reports/ahnentafel_report.xml @@ -100,8 +100,8 @@ - - . + + .