diff --git a/src/Parser/Head.php b/src/Parser/Head.php index c171f846..0a07e4c7 100644 --- a/src/Parser/Head.php +++ b/src/Parser/Head.php @@ -60,7 +60,8 @@ public static function parse(\Gedcom\Parser $parser) $head->setSubn($parser->normalizeIdentifier($record[2])); break; case 'DEST': - $head->setDest(trim((string) $record[2])); + $dest = \Gedcom\Parser\Head\Dest::parse($parser); + $head->setDest($dest); break; case 'FILE': $head->setFile(trim((string) $record[2])); diff --git a/src/Parser/Head/Dest.php b/src/Parser/Head/Dest.php new file mode 100644 index 00000000..7a82d0c0 --- /dev/null +++ b/src/Parser/Head/Dest.php @@ -0,0 +1,37 @@ +getCurrentLineRecord(); + $depth = (int) $record[0]; + $dest = new \Gedcom\Record\Head\Dest(); + $dest->setDest(trim((string) $record[2])); + + $parser->forward(); + + while (!$parser->eof()) { + $record = $parser->getCurrentLineRecord(); + $currentDepth = (int) $record[0]; + $recordType = strtoupper(trim((string) $record[1])); + + if ($currentDepth <= $depth) { + $parser->back(); + break; + } + + switch ($recordType) { + // Add cases for DEST sub-tags here if needed + default: + $parser->logUnhandledRecord(self::class.' @ '.__LINE__); + } + + $parser->forward(); + } + + return $dest; + } +} \ No newline at end of file diff --git a/src/Record/Head/Dest.php b/src/Record/Head/Dest.php new file mode 100644 index 00000000..73de0428 --- /dev/null +++ b/src/Record/Head/Dest.php @@ -0,0 +1,20 @@ +_dest = $dest; + } + + public function getDest() + { + return $this->_dest; + } + + // Add more properties and methods for sub-tags if needed +} \ No newline at end of file diff --git a/src/Writer/Head/Dest.php b/src/Writer/Head/Dest.php new file mode 100644 index 00000000..49bd6893 --- /dev/null +++ b/src/Writer/Head/Dest.php @@ -0,0 +1,19 @@ +getDest(); + if ($_dest) { + $output .= $level.' DEST '.$_dest."\n"; + } + + // Add conversion for sub-tags if needed + + return $output; + } +} \ No newline at end of file