mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 23:47:45 +00:00
LibTextCodec: Add "process" API for allocation-free code point iteration
This commit adds a new process method to all Decoder subclasses which do what to_utf8 used to do, and allows callers to customize the handling of individiual UTF-8 code points through a callback. Decoder::to_utf8 now uses this API to generate a string via StringBuilder, preserving the original behavior.
This commit is contained in:
parent
68bf6db673
commit
e6818388e4
2 changed files with 50 additions and 40 deletions
|
@ -7,12 +7,14 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/Forward.h>
|
||||
#include <AK/Function.h>
|
||||
|
||||
namespace TextCodec {
|
||||
|
||||
class Decoder {
|
||||
public:
|
||||
virtual String to_utf8(const StringView&) = 0;
|
||||
virtual void process(StringView const&, Function<void(u32)> on_code_point) = 0;
|
||||
virtual String to_utf8(StringView const&);
|
||||
|
||||
protected:
|
||||
virtual ~Decoder() = default;
|
||||
|
@ -20,45 +22,47 @@ protected:
|
|||
|
||||
class UTF8Decoder final : public Decoder {
|
||||
public:
|
||||
virtual String to_utf8(const StringView&) override;
|
||||
virtual void process(StringView const&, Function<void(u32)> on_code_point) override;
|
||||
virtual String to_utf8(StringView const&) override;
|
||||
};
|
||||
|
||||
class UTF16BEDecoder final : public Decoder {
|
||||
public:
|
||||
virtual String to_utf8(const StringView&) override;
|
||||
virtual void process(StringView const&, Function<void(u32)> on_code_point) override;
|
||||
virtual String to_utf8(StringView const&) override;
|
||||
};
|
||||
|
||||
class Latin1Decoder final : public Decoder {
|
||||
public:
|
||||
virtual String to_utf8(const StringView&) override;
|
||||
virtual void process(StringView const&, Function<void(u32)> on_code_point) override;
|
||||
};
|
||||
|
||||
class Latin2Decoder final : public Decoder {
|
||||
public:
|
||||
virtual String to_utf8(const StringView&) override;
|
||||
virtual void process(StringView const&, Function<void(u32)> on_code_point) override;
|
||||
};
|
||||
|
||||
class HebrewDecoder final : public Decoder {
|
||||
public:
|
||||
virtual String to_utf8(const StringView&) override;
|
||||
virtual void process(StringView const&, Function<void(u32)> on_code_point) override;
|
||||
};
|
||||
|
||||
class CyrillicDecoder final : public Decoder {
|
||||
public:
|
||||
virtual String to_utf8(const StringView&) override;
|
||||
virtual void process(StringView const&, Function<void(u32)> on_code_point) override;
|
||||
};
|
||||
|
||||
class Latin9Decoder final : public Decoder {
|
||||
public:
|
||||
virtual String to_utf8(const StringView&) override;
|
||||
virtual void process(StringView const&, Function<void(u32)> on_code_point) override;
|
||||
};
|
||||
|
||||
class TurkishDecoder final : public Decoder {
|
||||
public:
|
||||
virtual String to_utf8(const StringView&) override;
|
||||
virtual void process(StringView const&, Function<void(u32)> on_code_point) override;
|
||||
};
|
||||
|
||||
Decoder* decoder_for(const String& encoding);
|
||||
Decoder* decoder_for(String const& encoding);
|
||||
Optional<String> get_standardized_encoding(const String& encoding);
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue