Utf8Encoder   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 26
dl 0
loc 34
rs 10
c 1
b 0
f 1
wmc 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B encode() 0 32 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Remorhaz\UniLex\Unicode;
6
7
class Utf8Encoder
8
{
9
    public function encode(int ...$symbolList): string
10
    {
11
        $buffer = '';
12
        foreach ($symbolList as $symbol) {
13
            if (0x00 <= $symbol && $symbol <= 0x7F) {
14
                $buffer .= chr($symbol);
15
                continue;
16
            }
17
            if (0x80 <= $symbol && $symbol <= 0x07FF) {
18
                $buffer .=
19
                    chr(0xC0 | ($symbol >> 0x06)) .
20
                    chr(0x80 | ($symbol & 0x3F));
21
                continue;
22
            }
23
            if (0x0800 <= $symbol && $symbol <= 0xFFFF) {
24
                $buffer .=
25
                    chr(0xE0 | ($symbol >> 0x0C)) .
26
                    chr(0x80 | (($symbol >> 0x06) & 0x3F)) .
27
                    chr(0x80 | ($symbol & 0x3F));
28
                continue;
29
            }
30
            if (0x010000 <= $symbol && $symbol <= 0x10FFFF) {
31
                $buffer .=
32
                    chr(0xF0 | ($symbol >> 0x12)) .
33
                    chr(0x80 | (($symbol >> 0x0C) & 0x3F)) .
34
                    chr(0x80 | (($symbol >> 0x06) & 0x3F)) .
35
                    chr(0x80 | ($symbol & 0x3F));
36
                continue;
37
            }
38
            $buffer .= '�';
39
        }
40
        return $buffer;
41
    }
42
}
43