Coverage Report

Created: 2025-09-05 06:52

/src/serenity/Userland/Libraries/LibTextCodec/Encoder.h
Line
Count
Source (jump to first uncovered line)
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 EUCJPEncoder 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 ISO2022JPEncoder 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
private:
37
    enum class State {
38
        ASCII,
39
        Roman,
40
        jis0208,
41
    };
42
43
    ErrorOr<State> process_item(u32 item, State, Function<ErrorOr<void>(u8)>& on_byte, Function<ErrorOr<void>(u32)>& on_error);
44
};
45
46
class ShiftJISEncoder final : public Encoder {
47
public:
48
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
49
};
50
51
class EUCKREncoder final : public Encoder {
52
public:
53
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
54
};
55
56
class Big5Encoder final : public Encoder {
57
public:
58
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
59
};
60
61
class GB18030Encoder final : public Encoder {
62
public:
63
    enum class IsGBK {
64
        Yes,
65
        No,
66
    };
67
68
    GB18030Encoder(IsGBK is_gbk = IsGBK::No);
69
70
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
71
72
private:
73
    IsGBK m_is_gbk { IsGBK::No };
74
};
75
template<Integral ArrayType = u32>
76
class SingleByteEncoder final : public Encoder {
77
public:
78
    SingleByteEncoder(Array<ArrayType, 128> translation_table)
79
1.67k
        : m_translation_table(translation_table)
80
1.67k
    {
81
1.67k
    }
82
83
    virtual ErrorOr<void> process(Utf8View, Function<ErrorOr<void>(u8)> on_byte, Function<ErrorOr<void>(u32)> on_error) override;
84
85
private:
86
    Array<ArrayType, 128> m_translation_table;
87
};
88
89
Optional<Encoder&> encoder_for_exact_name(StringView encoding);
90
Optional<Encoder&> encoder_for(StringView label);
91
92
}