/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 | | } |