/** * * */ public static function parse(\PhpGedcom\Parser $parser) { $record = $parser->getCurrentLineRecord(); $depth = (int) $record[0]; $sour = new \PhpGedcom\Record\SourRef(); $sour->setSour($record[2]); $parser->forward(); while (!$parser->eof()) { $record = $parser->getCurrentLineRecord(); $recordType = strtoupper(trim($record[1])); $currentDepth = (int) $record[0]; if ($currentDepth <= $depth) { $parser->back(); break; } switch ($recordType) { case 'CONT': $sour->setSour($sour->getSour() . "\n"); if (isset($record[2])) { $sour->setSour($sour->getSour() . $record[2]); } break; case 'CONC': if (isset($record[2])) { $sour->setSour($sour->getSour() . $record[2]); } break; case 'TEXT': $sour->setText($parser->parseMultiLineRecord()); break; case 'NOTE': $note = \PhpGedcom\Parser\NoteRef::parse($parser); if ($note) { $sour->addNote($note); } break; case 'DATA': $sour->setData(\PhpGedcom\Parser\Sour\Data::parse($parser)); break; case 'QUAY': $sour->setQuay(trim($record[2])); break; case 'PAGE': $sour->setPage(trim($record[2])); break; case 'EVEN': $even = \PhpGedcom\Parser\SourRef\Even::parse($parser); $sour->setEven($even); break; default: $parser->logUnhandledRecord(get_class() . ' @ ' . __LINE__); } $parser->forward(); } return $sour; }
/** * * */ public static function parse(\PhpGedcom\Parser $parser) { $record = $parser->getCurrentLineRecord(); $identifier = $parser->normalizeIdentifier($record[1]); $depth = (int) $record[0]; $sour = new \PhpGedcom\Record\Sour(); $sour->setId($identifier); $parser->getGedcom()->addSour($sour); $parser->forward(); while (!$parser->eof()) { $record = $parser->getCurrentLineRecord(); $currentDepth = (int) $record[0]; $recordType = strtoupper(trim($record[1])); if ($currentDepth <= $depth) { $parser->back(); break; } switch ($recordType) { case 'TITL': $sour->setTitl($parser->parseMultilineRecord()); break; case 'RIN': $sour->setRin(trim($record[2])); break; case 'AUTH': $sour->setAuth($parser->parseMultilineRecord()); break; case 'TEXT': $sour->setText($parser->parseMultilineRecord()); break; case 'PUBL': $sour->setPubl($parser->parseMultilineRecord()); break; case 'ABBR': $sour->setAbbr(trim($record[2])); break; case 'REPO': $sour->setRepo(\PhpGedcom\Parser\RepoRef::parse($parser)); break; case 'NOTE': $note = \PhpGedcom\Parser\NoteRef::parse($parser); $sour->addNote($note); break; case 'DATA': $sour->setData(\PhpGedcom\Parser\Sour\Data::parse($parser)); break; case 'OBJE': $obje = \PhpGedcom\Parser\ObjeRef::parse($parser); $sour->addObje($obje); break; case 'REFN': $refn = \PhpGedcom\Parser\Refn::parse($parser); $sour->addRefn($refn); break; case 'CHAN': $chan = \PhpGedcom\Parser\Chan::parse($parser); $sour->setChan($chan); break; default: $parser->logUnhandledRecord(get_class() . ' @ ' . __LINE__); } $parser->forward(); } return $sour; }