ElementXRef::getObject()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
ccs 0
cts 2
cp 0
cc 1
nc 1
nop 0
crap 2
1
<?php
2
3
/**
4
 * @file
5
 *          This file is part of the PdfParser library.
6
 *
7
 * @author  Sébastien MALOT <[email protected]>
8
 *
9
 * @date    2017-01-03
10
 *
11
 * @license LGPLv3
12
 *
13
 * @url     <https://github.com/smalot/pdfparser>
14
 *
15
 *  PdfParser is a pdf library written in PHP, extraction oriented.
16
 *  Copyright (C) 2017 - Sébastien MALOT <[email protected]>
17
 *
18
 *  This program is free software: you can redistribute it and/or modify
19
 *  it under the terms of the GNU Lesser General Public License as published by
20
 *  the Free Software Foundation, either version 3 of the License, or
21
 *  (at your option) any later version.
22
 *
23
 *  This program is distributed in the hope that it will be useful,
24
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
25
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26
 *  GNU Lesser General Public License for more details.
27
 *
28
 *  You should have received a copy of the GNU Lesser General Public License
29
 *  along with this program.
30
 *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
31
 */
32
33
namespace Smalot\PdfParser\Element;
34
35
use Smalot\PdfParser\Document;
36
use Smalot\PdfParser\Element;
37
38
/**
39
 * Class ElementXRef
40
 */
41
class ElementXRef extends Element
42
{
43 75
    public function getId(): string
44
    {
45 75
        return $this->getContent();
46
    }
47
48
    public function getObject()
49
    {
50
        return $this->document->getObjectById($this->getId());
0 ignored issues
show
Bug introduced by
The method getObjectById() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

50
        return $this->document->/** @scrutinizer ignore-call */ getObjectById($this->getId());

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
51
    }
52
53 3
    public function equals($value): bool
54
    {
55
        /**
56
         * In case $value is a number and $this->value is a string like 5_0
57
         *
58
         * Without this if-clause code like:
59
         *
60
         *      $element = new ElementXRef('5_0');
61
         *      $this->assertTrue($element->equals(5));
62
         *
63
         * would fail (= 5_0 and 5 are not equal in PHP 8.0+).
64
         */
65
        if (
66 3
            true === is_numeric($value)
67 3
            && true === \is_string($this->getContent())
68 3
            && 1 === preg_match('/[0-9]+\_[0-9]+/', $this->getContent(), $matches)
69
        ) {
70 3
            return (float) $this->getContent() == $value;
71
        }
72
73 2
        $id = ($value instanceof self) ? $value->getId() : $value;
74
75 2
        return $this->getId() == $id;
76
    }
77
78 1
    public function __toString(): string
79
    {
80 1
        return '#Obj#'.$this->getId();
81
    }
82
83
    /**
84
     * @return bool|ElementXRef
85
     */
86 27
    public static function parse(string $content, ?Document $document = null, int &$offset = 0)
87
    {
88 27
        if (preg_match('/^\s*(?P<id>[0-9]+\s+[0-9]+\s+R)/s', $content, $match)) {
89 24
            $id = $match['id'];
90 24
            $offset += strpos($content, $id) + \strlen($id);
91 24
            $id = str_replace(' ', '_', rtrim($id, ' R'));
92
93 24
            return new self($id, $document);
94
        }
95
96 24
        return false;
97
    }
98
}
99