Files
xahaud/src/quickjs/quickjs-textcode.h
2024-07-11 11:31:29 +10:00

87 lines
1.8 KiB
C

#ifndef QUICKJS_TEXTCODE_H
#define QUICKJS_TEXTCODE_H
#include "utils.h"
#include "ringbuffer.h"
/**
* \defgroup quickjs-textdecoder quickjs-textdecoder: String Decoder
* @{
*/
typedef enum utf_encoding { UNKNOWN = 0, UTF8, UTF16, UTF32 } UTFCharset;
typedef enum text_encoding {
UTF16LE = 2,
UTF32LE = 3,
UTF16BE = 6,
UTF32BE = 7,
ISO_8859_1,
ISO_8859_2,
ISO_8859_3,
ISO_8859_4,
ISO_8859_5,
ISO_8859_6,
ISO_8859_7,
ISO_8859_8,
ISO_8859_9,
ISO_8859_10,
ISO_8859_11,
ISO_8859_13,
ISO_8859_14,
ISO_8859_15,
ISO_8859_16,
WINDOWS_1250,
WINDOWS_1251,
WINDOWS_1252,
WINDOWS_1253,
WINDOWS_1254,
WINDOWS_1255,
WINDOWS_1256,
WINDOWS_1257,
WINDOWS_1258,
} TextEncoding;
#define TextcodeType \
PACK union { \
struct { \
UTFCharset encoding : 2; \
Endian endian : 1; \
}; \
TextEncoding type_code; \
}; \
ENDPACK
struct text_coder {
RingBuffer buffer;
TextcodeType
};
typedef struct text_coder TextEncoder;
typedef struct text_coder TextDecoder;
extern VISIBLE JSClassID js_decoder_class_id, js_encoder_class_id;
extern VISIBLE JSValue textdecoder_proto, textdecoder_ctor, textencoder_proto, textencoder_ctor;
extern const char* const textcode_encodings[];
size_t textdecoder_length(TextDecoder*);
JSValue textdecoder_read(TextDecoder*, JSContext* ctx);
int js_code_init(JSContext*, JSModuleDef* m);
size_t textencoder_length(TextEncoder*);
JSValue textencoder_read(TextEncoder*, JSContext* ctx);
int js_encoder_init(JSContext*, JSModuleDef* m);
static inline TextDecoder*
js_decoder_data(JSContext* ctx, JSValueConst value) {
return JS_GetOpaque(value, js_decoder_class_id);
}
static inline TextEncoder*
js_encoder_data(JSContext* ctx, JSValueConst value) {
return JS_GetOpaque(value, js_encoder_class_id);
}
/**
* @}
*/
#endif /* defined(QUICKJS_TEXTCODE_H) */