Passed
Branch master (6a7148)
by Curtis
01:48
created

Repo   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 58
dl 0
loc 80
rs 10
c 0
b 0
f 0
wmc 15

1 Method

Rating   Name   Duplication   Size   Complexity  
C parse() 0 73 15
1
<?php
2
/**
3
 * php-gedcom
4
 *
5
 * php-gedcom is a library for parsing, manipulating, importing and exporting
6
 * GEDCOM 5.5 files in PHP 5.3+.
7
 *
8
 * @author          Kristopher Wilson <[email protected]>
9
 * @copyright       Copyright (c) 2010-2013, Kristopher Wilson
10
 * @package         php-gedcom
11
 * @license         MIT
12
 * @link            http://github.com/mrkrstphr/php-gedcom
13
 */
14
15
namespace PhpGedcom\Parser;
16
17
/**
18
 *
19
 *
20
 */
21
class Repo extends \PhpGedcom\Parser\Component
22
{
23
24
    /**
25
     *
26
     *
27
     */
28
    public static function parse(\PhpGedcom\Parser $parser)
29
    {
30
        $record = $parser->getCurrentLineRecord();
31
        $depth = (int)$record[0];
32
        if(isset($record[1])){
33
          $identifier = $parser->normalizeIdentifier($record[1]);
34
        }
35
        else{
36
           $parser->skipToNextLevel($depth);
37
           return null;
38
        }
39
40
        $repo = new \PhpGedcom\Record\Repo();
41
        $repo->setRepo($identifier);
42
43
        $parser->getGedcom()->addRepo($repo);
44
45
        $parser->forward();
46
47
        while (!$parser->eof()) {
48
            $record = $parser->getCurrentLineRecord();
49
            $currentDepth = (int)$record[0];
50
            $recordType = strtoupper(trim($record[1]));
51
52
            if ($currentDepth <= $depth) {
53
                $parser->back();
54
                break;
55
            }
56
57
            switch ($recordType) {
58
                case 'NAME':
59
                    $repo->setName(trim($record[2]));
60
                    break;
61
                case 'ADDR':
62
                    $addr = \PhpGedcom\Parser\Addr::parse($parser);
63
                    $repo->setAddr($addr);
64
                    break;
65
                case 'PHON':
66
                    $repo->addPhon(trim($record[2]));
67
                    break;
68
                case 'EMAIL':
69
                    $repo->addEmail(trim($record[2]));
70
                    break;
71
                case 'FAX':
72
                    $repo->addFax(trim($record[2]));
73
                    break;
74
                case 'WWW':
75
                    $repo->addWww(trim($record[2]));
76
                    break;
77
                case 'NOTE':
78
                    if ($note = \PhpGedcom\Parser\NoteRef::parse($parser)) {
79
                        $repo->addNote($note);
80
                    }
81
                    break;
82
                case 'REFN':
83
                    $refn = \PhpGedcom\Parser\Refn::parse($parser);
84
                    $repo->addRefn($refn);
85
                    break;
86
                case 'RIN':
87
                    $repo->setRin(trim($record[2]));
88
                    break;
89
                case 'CHAN':
90
                    $chan = \PhpGedcom\Parser\Chan::parse($parser);
91
                    $repo->setChan($chan);
92
                    break;
93
                default:
94
                    $parser->logUnhandledRecord(get_class() . ' @ ' . __LINE__);
95
            }
96
97
            $parser->forward();
98
        }
99
100
        return $repo;
101
    }
102
}
103