Coverage Report

Created: 2026-11-13 08:07

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/serenity/Userland/Libraries/LibTextCodec/Encoder.h
Line
Count
Source
1
/*
2
 * Copyright (c) 2024, Ben Jilks <benjyjilks@gmail.com>
3
 *
4
 * SPDX-License-Identifier: BSD-2-Clause
5
 */
6
7
#pragma once
8
9
#include <AK/Forward.h>
10
#include <AK/Function.h>
11
12
namespace TextCodec {
13
14
class Encoder {
15
public:
16
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) = 0;
17
18
protected:
19
0
    virtual ~Encoder() = default;
20
};
21
22
class UTF8Encoder final : public Encoder {
23
public:
24
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
25
};
26
27
class UTF16BEEncoder final : public Encoder {
28
public:
29
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
30
};
31
32
class UTF16LEEncoder final : public Encoder {
33
public:
34
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
35
};
36
37
class Latin1Encoder final : public Encoder {
38
public:
39
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
40
};
41
42
class EUCJPEncoder final : public Encoder {
43
public:
44
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
45
};
46
47
class ISO2022JPEncoder final : public Encoder {
48
public:
49
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
50
51
private:
52
    enum class State {
53
        ASCII,
54
        Roman,
55
        jis0208,
56
    };
57
58
    ErrorOr<State> process_item(u32 item, State, Function<ErrorOr<void>(u8)>& on_byte, Function<ErrorOr<void>(u32)>& on_error);
59
};
60
61
class ShiftJISEncoder final : public Encoder {
62
public:
63
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
64
};
65
66
class EUCKREncoder final : public Encoder {
67
public:
68
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
69
};
70
71
class Big5Encoder final : public Encoder {
72
public:
73
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
74
};
75
76
class GB18030Encoder final : public Encoder {
77
public:
78
    enum class IsGBK {
79
        Yes,
80
        No,
81
    };
82
83
    GB18030Encoder(IsGBK is_gbk = IsGBK::No);
84
85
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
86
87
private:
88
    IsGBK m_is_gbk { IsGBK::No };
89
};
90
template<Integral ArrayType = u32>
91
class SingleByteEncoder final : public Encoder {
92
public:
93
    SingleByteEncoder(Array<ArrayType, 128> translation_table)
94
1.67k
        : m_translation_table(translation_table)
95
1.67k
    {
96
1.67k
    }
97
98
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
99
100
private:
101
    Array<ArrayType, 128> m_translation_table;
102
};
103
104
Optional<Encoder&> encoder_for_exact_name(StringView encoding);
105
Optional<Encoder&> encoder_for(StringView label);
106
107
}