diff --git a/Libraries/LibTextCodec/CMakeLists.txt b/Libraries/LibTextCodec/CMakeLists.txt index 5c08221d131..04aac4622f8 100644 --- a/Libraries/LibTextCodec/CMakeLists.txt +++ b/Libraries/LibTextCodec/CMakeLists.txt @@ -11,4 +11,4 @@ set(GENERATED_SOURCES LookupTables.cpp ) -ladybird_lib(LibTextCodec textcodec) +ladybird_lib(LibTextCodec textcodec EXPLICIT_SYMBOL_EXPORT) diff --git a/Libraries/LibTextCodec/Decoder.h b/Libraries/LibTextCodec/Decoder.h index 16a961d5b97..9428c11de99 100644 --- a/Libraries/LibTextCodec/Decoder.h +++ b/Libraries/LibTextCodec/Decoder.h @@ -12,10 +12,11 @@ #include #include #include +#include namespace TextCodec { -class Decoder { +class TEXTCODEC_API Decoder { public: virtual bool validate(StringView); virtual ErrorOr to_utf8(StringView); @@ -25,14 +26,14 @@ protected: virtual ErrorOr process(StringView, Function(u32)> on_code_point) = 0; }; -class UTF8Decoder final : public Decoder { +class TEXTCODEC_API UTF8Decoder final : public Decoder { public: virtual ErrorOr process(StringView, Function(u32)> on_code_point) override; virtual bool validate(StringView) override; virtual ErrorOr to_utf8(StringView) override; }; -class UTF16BEDecoder final : public Decoder { +class TEXTCODEC_API UTF16BEDecoder final : public Decoder { public: virtual bool validate(StringView) override; virtual ErrorOr to_utf8(StringView) override; @@ -41,7 +42,7 @@ private: virtual ErrorOr process(StringView, Function(u32)>) override { VERIFY_NOT_REACHED(); } }; -class UTF16LEDecoder final : public Decoder { +class TEXTCODEC_API UTF16LEDecoder final : public Decoder { public: virtual bool validate(StringView) override; virtual ErrorOr to_utf8(StringView) override; @@ -64,55 +65,55 @@ private: Array m_translation_table; }; -class Latin1Decoder final : public Decoder { +class TEXTCODEC_API Latin1Decoder final : public Decoder { public: virtual ErrorOr process(StringView, Function(u32)> on_code_point) override; virtual bool validate(StringView) override { return true; } }; -class PDFDocEncodingDecoder final : public Decoder { +class TEXTCODEC_API PDFDocEncodingDecoder final : public Decoder { public: virtual ErrorOr process(StringView, Function(u32)> on_code_point) override; virtual bool validate(StringView) override { return true; } }; -class XUserDefinedDecoder final : public Decoder { +class TEXTCODEC_API XUserDefinedDecoder final : public Decoder { public: virtual ErrorOr process(StringView, Function(u32)> on_code_point) override; virtual bool validate(StringView) override { return true; } }; -class GB18030Decoder final : public Decoder { +class TEXTCODEC_API GB18030Decoder final : public Decoder { public: virtual ErrorOr process(StringView, Function(u32)> on_code_point) override; }; -class Big5Decoder final : public Decoder { +class TEXTCODEC_API Big5Decoder final : public Decoder { public: virtual ErrorOr process(StringView, Function(u32)> on_code_point) override; }; -class EUCJPDecoder final : public Decoder { +class TEXTCODEC_API EUCJPDecoder final : public Decoder { public: virtual ErrorOr process(StringView, Function(u32)> on_code_point) override; }; -class ISO2022JPDecoder final : public Decoder { +class TEXTCODEC_API ISO2022JPDecoder final : public Decoder { public: virtual ErrorOr process(StringView, Function(u32)> on_code_point) override; }; -class ShiftJISDecoder final : public Decoder { +class TEXTCODEC_API ShiftJISDecoder final : public Decoder { public: virtual ErrorOr process(StringView, Function(u32)> on_code_point) override; }; -class EUCKRDecoder final : public Decoder { +class TEXTCODEC_API EUCKRDecoder final : public Decoder { public: virtual ErrorOr process(StringView, Function(u32)> on_code_point) override; }; -class ReplacementDecoder final : public Decoder { +class TEXTCODEC_API ReplacementDecoder final : public Decoder { public: virtual ErrorOr process(StringView, Function(u32)> on_code_point) override; virtual bool validate(StringView input) override { return input.is_empty(); } @@ -120,18 +121,18 @@ public: // This will return a decoder for the exact name specified, skipping get_standardized_encoding. // Use this when you want ISO-8859-1 instead of windows-1252. -Optional decoder_for_exact_name(StringView encoding); +TEXTCODEC_API Optional decoder_for_exact_name(StringView encoding); -Optional decoder_for(StringView encoding); -Optional get_standardized_encoding(StringView encoding); +TEXTCODEC_API Optional decoder_for(StringView encoding); +TEXTCODEC_API Optional get_standardized_encoding(StringView encoding); // This returns the appropriate Unicode decoder for the sniffed BOM or nothing if there is no appropriate decoder. -Optional bom_sniff_to_decoder(StringView); +TEXTCODEC_API Optional bom_sniff_to_decoder(StringView); // NOTE: This has an obnoxious name to discourage usage. Only use this if you absolutely must! For example, XHR in LibWeb uses this. // This will use the given decoder unless there is a byte order mark in the input, in which we will instead use the appropriate Unicode decoder. -ErrorOr convert_input_to_utf8_using_given_decoder_unless_there_is_a_byte_order_mark(Decoder&, StringView); +TEXTCODEC_API ErrorOr convert_input_to_utf8_using_given_decoder_unless_there_is_a_byte_order_mark(Decoder&, StringView); -StringView get_output_encoding(StringView encoding); +TEXTCODEC_API StringView get_output_encoding(StringView encoding); } diff --git a/Libraries/LibTextCodec/Encoder.h b/Libraries/LibTextCodec/Encoder.h index 32bc0212715..db7282dbdbc 100644 --- a/Libraries/LibTextCodec/Encoder.h +++ b/Libraries/LibTextCodec/Encoder.h @@ -8,10 +8,11 @@ #include #include +#include namespace TextCodec { -class Encoder { +class TEXTCODEC_API Encoder { public: virtual ErrorOr process(Utf8View, Function(u8)> on_byte, Function(u32)> on_error) = 0; @@ -19,17 +20,17 @@ protected: virtual ~Encoder() = default; }; -class UTF8Encoder final : public Encoder { +class TEXTCODEC_API UTF8Encoder final : public Encoder { public: virtual ErrorOr process(Utf8View, Function(u8)> on_byte, Function(u32)> on_error) override; }; -class EUCJPEncoder final : public Encoder { +class TEXTCODEC_API EUCJPEncoder final : public Encoder { public: virtual ErrorOr process(Utf8View, Function(u8)> on_byte, Function(u32)> on_error) override; }; -class ISO2022JPEncoder final : public Encoder { +class TEXTCODEC_API ISO2022JPEncoder final : public Encoder { public: virtual ErrorOr process(Utf8View, Function(u8)> on_byte, Function(u32)> on_error) override; @@ -43,22 +44,22 @@ private: ErrorOr process_item(u32 item, State, Function(u8)>& on_byte, Function(u32)>& on_error); }; -class ShiftJISEncoder final : public Encoder { +class TEXTCODEC_API ShiftJISEncoder final : public Encoder { public: virtual ErrorOr process(Utf8View, Function(u8)> on_byte, Function(u32)> on_error) override; }; -class EUCKREncoder final : public Encoder { +class TEXTCODEC_API EUCKREncoder final : public Encoder { public: virtual ErrorOr process(Utf8View, Function(u8)> on_byte, Function(u32)> on_error) override; }; -class Big5Encoder final : public Encoder { +class TEXTCODEC_API Big5Encoder final : public Encoder { public: virtual ErrorOr process(Utf8View, Function(u8)> on_byte, Function(u32)> on_error) override; }; -class GB18030Encoder final : public Encoder { +class TEXTCODEC_API GB18030Encoder final : public Encoder { public: enum class IsGBK { Yes, @@ -86,7 +87,7 @@ private: Array m_translation_table; }; -Optional encoder_for_exact_name(StringView encoding); -Optional encoder_for(StringView label); +TEXTCODEC_API Optional encoder_for_exact_name(StringView encoding); +TEXTCODEC_API Optional encoder_for(StringView label); } diff --git a/Libraries/LibTextCodec/Forward.h b/Libraries/LibTextCodec/Forward.h new file mode 100644 index 00000000000..03abab90303 --- /dev/null +++ b/Libraries/LibTextCodec/Forward.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2025, ayeteadoe + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace TextCodec { + +class Decoder; +class Encoder; + +}