Completed
Pull Request — master (#93)
by Michele
04:08
created

Strings::toPo()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
c 2
b 1
f 0
dl 0
loc 12
rs 9.4285
cc 1
eloc 9
nc 1
nop 1
1
<?php
2
3
namespace Gettext\Utils;
4
5
class Strings
6
{
7
    /**
8
     * Decodes a T_CONSTANT_ENCAPSED_STRING string.
9
     *
10
     * @param string $value
11
     *
12
     * @return string
13
     */
14
    public static function fromPhp($value)
15
    {
16
        if ($value[0] === "'" || strpos($value, '$') === false) {
17
            if (strpos($value, '\\') === false) {
18
                return substr($value, 1, -1);
19
            }
20
21
            return eval("return $value;");
22
        }
23
24
        $result = '';
25
        $value = substr($value, 1, -1);
26
27
        while (($p = strpos($value, '\\')) !== false) {
28
            if (!isset($value[$p + 1])) {
29
                break;
30
            }
31
32
            if ($p > 0) {
33
                $result .= substr($value, 0, $p);
34
            }
35
36
            $value = substr($value, $p + 1);
37
            $p = strpos($value, '$');
38
39
            if ($p === false) {
40
                $result .= eval('return "\\'.$value.'";');
41
                $value = '';
42
                break;
43
            }
44
45
            if ($p === 0) {
46
                $result .= '$';
47
                $value = substr($value, 1);
48
            } else {
49
                $result .= eval('return "\\'.substr($value, 0, $p).'";');
50
                $value = substr($value, $p);
51
            }
52
        }
53
54
        return $result.$value;
55
    }
56
57
    /**
58
     * Convert a string to its PO representation.
59
     *
60
     * @param string $value
61
     *
62
     * @return string
63
     */
64
    public static function toPo($value)
65
    {
66
        return '"'.strtr(
67
            $value,
68
            array(
69
                "\x00" => '',
70
                '\\' => '\\\\',
71
                "\t" => '\t',
72
                "\n" => '\n',
73
            )
74
        ).'"';
75
    }
76
77
    /**
78
     * Convert a string from its PO representation.
79
     *
80
     * @param string $value
81
     *
82
     * @return string
83
     */
84
    public static function fromPo($value)
85
    {
86
        if (!$value) {
87
            return '';
88
        }
89
90
        if ($value[0] === '"') {
91
            $value = substr($value, 1, -1);
92
        }
93
94
        return strtr(
95
            $value,
96
            array(
97
                '\\\\' => '\\',
98
                '\\a' => "\x07",
99
                '\\b' => "\x08",
100
                '\\t' => "\t",
101
                '\\n' => "\n",
102
                '\\v' => "\x0b",
103
                '\\f' => "\x0c",
104
                '\\r' => "\r",
105
                '\\"' => '"',
106
            )
107
        );
108
    }
109
}
110