Test Failed
Pull Request — master (#614)
by
unknown
02:15
created

ElementHexa   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 22
c 2
b 0
f 0
dl 0
loc 44
ccs 22
cts 22
cp 1
rs 10
wmc 7
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
37
/**
38
 * Class ElementHexa
39
 */
40
class ElementHexa extends ElementString
41
{
42
    /**
43
     * @return bool|ElementHexa|ElementDate
44
     */
45 17
    public static function parse(string $content, Document $document = null, int &$offset = 0)
0 ignored issues
show
Bug introduced by
A parse error occurred: Syntax error, unexpected T_VARIABLE, expecting T_STRING or T_NAME_QUALIFIED or T_NAME_FULLY_QUALIFIED or T_NAME_RELATIVE on line 45 at column 82
Loading history...
46
    {
47 17
        if (preg_match('/^\s*\<(?P<name>[A-F0-9]+)\>/is', $content, $match)) {
48 2
            $name = $match['name'];
49 2
            $offset += strpos($content, '<'.$name) + \strlen($name) + 2; // 1 for '>'
50
            // repackage string as standard
51 2
            $name = '('.self::decode($name).')';
52 2
            $element = ElementDate::parse($name, $document);
53
54 2
            if (!$element) {
55 2
                $element = ElementString::parse($name, $document);
56
            }
57
58 2
            return $element;
59
        }
60
61 17
        return false;
62
    }
63
64 20
    public static function decode(string $value): string
65
    {
66 20
        $text = '';
67 20
        $length = \strlen($value);
68
69 20
        if ('00' === substr($value, 0, 2)) {
70 4
            for ($i = 0; $i < $length; $i += 4) {
71 4
                $hex = substr($value, $i, 4);
72 4
                $text .= '&#'.str_pad(hexdec($hex), 4, '0', \STR_PAD_LEFT).';';
73
            }
74
        } else {
75 19
            for ($i = 0; $i < $length; $i += 2) {
76 19
                $hex = substr($value, $i, 2);
77 19
                $text .= \chr(hexdec($hex));
78
            }
79
        }
80
81 20
        $text = html_entity_decode($text, \ENT_NOQUOTES, 'UTF-8');
82
83 20
        return $text;
84
    }
85
}
86