Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
Utils
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 5
110
0.00% covered (danger)
0.00%
0 / 1
 codepointToUtf8
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
12
 hexSequenceToUtf8
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 utf8ToHexSequence
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 utf8ToCodepoint
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
6
 escapeSingleString
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2namespace UtfNormal;
3
4use InvalidArgumentException;
5
6/**
7 * Some of these functions are adapted from places in MediaWiki.
8 * Should probably merge them for consistency.
9 *
10 * Copyright © 2004 Brion Vibber <brion@pobox.com>
11 * https://www.mediawiki.org/
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License along
24 * with this program; if not, write to the Free Software Foundation, Inc.,
25 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
26 * http://www.gnu.org/copyleft/gpl.html
27 *
28 * @file
29 * @ingroup UtfNormal
30 */
31
32class Utils {
33    /**
34     * Return UTF-8 sequence for a given Unicode code point.
35     *
36     * @param int $codepoint
37     * @return string
38     * @throws InvalidArgumentException if fed out of range data.
39     */
40    public static function codepointToUtf8( $codepoint ) {
41        // In PHP 7.2, mb_chr is buggy when $codepoint is 0 (null byte)
42        if ( $codepoint === 0 ) {
43            return "\u{0000}";
44        }
45        $char = mb_chr( $codepoint );
46        if ( $char === false ) {
47            throw new InvalidArgumentException( "Asked for code outside of range ($codepoint)" );
48        }
49
50        return $char;
51    }
52
53    /**
54     * Take a series of space-separated hexadecimal numbers representing
55     * Unicode code points and return a UTF-8 string composed of those
56     * characters. Used by UTF-8 data generation and testing routines.
57     *
58     * @param string $sequence
59     * @return string
60     * @throws InvalidArgumentException if fed out of range data.
61     * @private Used in tests and data table generation
62     */
63    public static function hexSequenceToUtf8( $sequence ) {
64        $utf = '';
65        foreach ( explode( ' ', $sequence ) as $hex ) {
66            $n = hexdec( $hex );
67            $utf .= self::codepointToUtf8( $n );
68        }
69
70        return $utf;
71    }
72
73    /**
74     * Take a UTF-8 string and return a space-separated series of hex
75     * numbers representing Unicode code points. For debugging.
76     *
77     * @param string $str UTF-8 string.
78     * @return string
79     * @private
80     */
81    private static function utf8ToHexSequence( $str ) {
82        $buf = '';
83        foreach ( preg_split( '//u', $str, -1, PREG_SPLIT_NO_EMPTY ) as $cp ) {
84            $buf .= sprintf( '%04x ', mb_ord( $cp ) );
85        }
86
87        return rtrim( $buf );
88    }
89
90    /**
91     * Determine the Unicode codepoint of a single-character UTF-8 sequence.
92     * Does not check for invalid input data.
93     *
94     * @deprecated since 2.1, use mb_ord()
95     *
96     * @param string $char
97     * @return int|false
98     */
99    public static function utf8ToCodepoint( $char ) {
100        return mb_strlen( $char ) > 1 ? false : mb_ord( $char );
101    }
102
103    /**
104     * Escape a string for inclusion in a PHP single-quoted string literal.
105     *
106     * @param string $string String to be escaped.
107     * @return string Escaped string.
108     */
109    public static function escapeSingleString( $string ) {
110        return strtr(
111            $string,
112            [
113                '\\' => '\\\\',
114                '\'' => '\\\''
115            ]
116        );
117    }
118}