utf8proc

A clean C library for processing UTF-8 Unicode data
git clone https://git.sinitax.com/juliastrings/utf8proc
Log | Files | Refs | README | LICENSE | sfeed.txt

commit df71da45dfbdf68bcc6fd656d1260d609c728ad7
parent a733c7feb489ebea9ec39750cde497fbc6d84b4a
Author: Steven G. Johnson <stevenj@mit.edu>
Date:   Wed, 24 Sep 2014 14:26:13 -0400

Merge pull request #17 from JuliaLang/tk/dllexport

RFC: add DLLEXPORT to utf8proc_get_property
Diffstat:
MMakefile | 2+-
Mmojibake.h | 42+++++++++++++++++++++++++++---------------
Mutf8proc.c | 30+++++++++++++++---------------
3 files changed, 43 insertions(+), 31 deletions(-)

diff --git a/Makefile b/Makefile @@ -6,7 +6,7 @@ MAKE=make # settings -cflags = -O2 -std=c99 -pedantic -Wall -fpic $(CFLAGS) +cflags = -O2 -std=c99 -pedantic -Wall -fpic -DMOJIBAKE_EXPORTS $(CFLAGS) cc = $(CC) $(cflags) AR = ar diff --git a/mojibake.h b/mojibake.h @@ -75,6 +75,18 @@ enum {false, true}; #endif #include <limits.h> +#ifdef _WIN32 +# ifdef MOJIBAKE_EXPORTS +# define DLLEXPORT __declspec(dllexport) +# else +# define DLLEXPORT __declspec(dllimport) +# endif +#elif __GNUC__ >= 4 +# define DLLEXPORT __attribute__ ((visibility("default"))) +#else +# define DLLEXPORT +#endif + #ifdef __cplusplus extern "C" { #endif @@ -241,16 +253,16 @@ typedef struct utf8proc_property_struct { #define UTF8PROC_DECOMP_TYPE_FRACTION 15 #define UTF8PROC_DECOMP_TYPE_COMPAT 16 -extern const int8_t utf8proc_utf8class[256]; +DLLEXPORT extern const int8_t utf8proc_utf8class[256]; -const char *utf8proc_version(void); +DLLEXPORT const char *utf8proc_version(void); -const char *utf8proc_errmsg(ssize_t errcode); +DLLEXPORT const char *utf8proc_errmsg(ssize_t errcode); /* * Returns a static error string for the given error code. */ -ssize_t utf8proc_iterate(const uint8_t *str, ssize_t strlen, int32_t *dst); +DLLEXPORT ssize_t utf8proc_iterate(const uint8_t *str, ssize_t strlen, int32_t *dst); /* * Reads a single char from the UTF-8 sequence being pointed to by 'str'. * The maximum number of bytes read is 'strlen', unless 'strlen' is @@ -261,12 +273,12 @@ ssize_t utf8proc_iterate(const uint8_t *str, ssize_t strlen, int32_t *dst); * negative error code is returned. */ -bool utf8proc_codepoint_valid(int32_t uc); +DLLEXPORT bool utf8proc_codepoint_valid(int32_t uc); /* * Returns 1, if the given unicode code-point is valid, otherwise 0. */ -ssize_t utf8proc_encode_char(int32_t uc, uint8_t *dst); +DLLEXPORT ssize_t utf8proc_encode_char(int32_t uc, uint8_t *dst); /* * Encodes the unicode char with the code point 'uc' as an UTF-8 string in * the byte array being pointed to by 'dst'. This array has to be at least @@ -276,7 +288,7 @@ ssize_t utf8proc_encode_char(int32_t uc, uint8_t *dst); * This function does not check if 'uc' is a valid unicode code point. */ -const utf8proc_property_t *utf8proc_get_property(int32_t uc); +DLLEXPORT const utf8proc_property_t *utf8proc_get_property(int32_t uc); /* * Returns a pointer to a (constant) struct containing information about * the unicode char with the given code point 'uc'. @@ -286,7 +298,7 @@ const utf8proc_property_t *utf8proc_get_property(int32_t uc); * 0x10FFFF, otherwise the program might crash! */ -ssize_t utf8proc_decompose_char( +DLLEXPORT ssize_t utf8proc_decompose_char( int32_t uc, int32_t *dst, ssize_t bufsize, int options, int *last_boundclass ); @@ -314,7 +326,7 @@ ssize_t utf8proc_decompose_char( * 0x10FFFF, otherwise the program might crash! */ -ssize_t utf8proc_decompose( +DLLEXPORT ssize_t utf8proc_decompose( const uint8_t *str, ssize_t strlen, int32_t *buffer, ssize_t bufsize, int options ); @@ -332,7 +344,7 @@ ssize_t utf8proc_decompose( * buffer size is returned. */ -ssize_t utf8proc_reencode(int32_t *buffer, ssize_t length, int options); +DLLEXPORT ssize_t utf8proc_reencode(int32_t *buffer, ssize_t length, int options); /* * Reencodes the sequence of unicode characters given by the pointer * 'buffer' and 'length' as UTF-8. @@ -355,7 +367,7 @@ ssize_t utf8proc_reencode(int32_t *buffer, ssize_t length, int options); * crash! */ -ssize_t utf8proc_map( +DLLEXPORT ssize_t utf8proc_map( const uint8_t *str, ssize_t strlen, uint8_t **dstptr, int options ); /* @@ -374,10 +386,10 @@ ssize_t utf8proc_map( * 'malloc', and has theirfore to be freed with 'free'. */ -uint8_t *utf8proc_NFD(const uint8_t *str); -uint8_t *utf8proc_NFC(const uint8_t *str); -uint8_t *utf8proc_NFKD(const uint8_t *str); -uint8_t *utf8proc_NFKC(const uint8_t *str); +DLLEXPORT uint8_t *utf8proc_NFD(const uint8_t *str); +DLLEXPORT uint8_t *utf8proc_NFC(const uint8_t *str); +DLLEXPORT uint8_t *utf8proc_NFKD(const uint8_t *str); +DLLEXPORT uint8_t *utf8proc_NFKC(const uint8_t *str); /* * Returns a pointer to newly allocated memory of a NFD, NFC, NFKD or NFKC * normalized version of the null-terminated string 'str'. diff --git a/utf8proc.c b/utf8proc.c @@ -43,7 +43,7 @@ #include "utf8proc_data.c" -const int8_t utf8proc_utf8class[256] = { +DLLEXPORT const int8_t utf8proc_utf8class[256] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -95,11 +95,11 @@ const int8_t utf8proc_utf8class[256] = { #define UTF8PROC_BOUNDCLASS_LVT 10 -const char *utf8proc_version(void) { +DLLEXPORT const char *utf8proc_version(void) { return "1.1.6"; } -const char *utf8proc_errmsg(ssize_t errcode) { +DLLEXPORT const char *utf8proc_errmsg(ssize_t errcode) { switch (errcode) { case UTF8PROC_ERROR_NOMEM: return "Memory for processing UTF-8 data could not be allocated."; @@ -116,7 +116,7 @@ const char *utf8proc_errmsg(ssize_t errcode) { } } -ssize_t utf8proc_iterate( +DLLEXPORT ssize_t utf8proc_iterate( const uint8_t *str, ssize_t strlen, int32_t *dst ) { int length; @@ -156,14 +156,14 @@ ssize_t utf8proc_iterate( return length; } -bool utf8proc_codepoint_valid(int32_t uc) { +DLLEXPORT bool utf8proc_codepoint_valid(int32_t uc) { if (uc < 0 || uc >= 0x110000 || ((uc & 0xFFFF) >= 0xFFFE) || (uc >= 0xD800 && uc < 0xE000) || (uc >= 0xFDD0 && uc < 0xFDF0)) return false; else return true; } -ssize_t utf8proc_encode_char(int32_t uc, uint8_t *dst) { +DLLEXPORT ssize_t utf8proc_encode_char(int32_t uc, uint8_t *dst) { if (uc < 0x00) { return 0; } else if (uc < 0x80) { @@ -193,7 +193,7 @@ ssize_t utf8proc_encode_char(int32_t uc, uint8_t *dst) { } else return 0; } -const utf8proc_property_t *utf8proc_get_property(int32_t uc) { +DLLEXPORT const utf8proc_property_t *utf8proc_get_property(int32_t uc) { /* ASSERT: uc >= 0 && uc < 0x110000 */ return utf8proc_properties + ( utf8proc_stage2table[ @@ -206,7 +206,7 @@ const utf8proc_property_t *utf8proc_get_property(int32_t uc) { return utf8proc_decompose_char((replacement_uc), dst, bufsize, \ options & ~UTF8PROC_LUMP, last_boundclass) -ssize_t utf8proc_decompose_char(int32_t uc, int32_t *dst, ssize_t bufsize, +DLLEXPORT ssize_t utf8proc_decompose_char(int32_t uc, int32_t *dst, ssize_t bufsize, int options, int *last_boundclass) { /* ASSERT: uc >= 0 && uc < 0x110000 */ const utf8proc_property_t *property; @@ -351,7 +351,7 @@ ssize_t utf8proc_decompose_char(int32_t uc, int32_t *dst, ssize_t bufsize, return 1; } -ssize_t utf8proc_decompose( +DLLEXPORT ssize_t utf8proc_decompose( const uint8_t *str, ssize_t strlen, int32_t *buffer, ssize_t bufsize, int options ) { @@ -413,7 +413,7 @@ ssize_t utf8proc_decompose( return wpos; } -ssize_t utf8proc_reencode(int32_t *buffer, ssize_t length, int options) { +DLLEXPORT ssize_t utf8proc_reencode(int32_t *buffer, ssize_t length, int options) { /* UTF8PROC_NULLTERM option will be ignored, 'length' is never ignored ASSERT: 'buffer' has one spare byte of free space at the end! */ if (options & (UTF8PROC_NLF2LS | UTF8PROC_NLF2PS | UTF8PROC_STRIPCC)) { @@ -528,7 +528,7 @@ ssize_t utf8proc_reencode(int32_t *buffer, ssize_t length, int options) { } } -ssize_t utf8proc_map( +DLLEXPORT ssize_t utf8proc_map( const uint8_t *str, ssize_t strlen, uint8_t **dstptr, int options ) { int32_t *buffer; @@ -557,28 +557,28 @@ ssize_t utf8proc_map( return result; } -uint8_t *utf8proc_NFD(const uint8_t *str) { +DLLEXPORT uint8_t *utf8proc_NFD(const uint8_t *str) { uint8_t *retval; utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_DECOMPOSE); return retval; } -uint8_t *utf8proc_NFC(const uint8_t *str) { +DLLEXPORT uint8_t *utf8proc_NFC(const uint8_t *str) { uint8_t *retval; utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_COMPOSE); return retval; } -uint8_t *utf8proc_NFKD(const uint8_t *str) { +DLLEXPORT uint8_t *utf8proc_NFKD(const uint8_t *str) { uint8_t *retval; utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_DECOMPOSE | UTF8PROC_COMPAT); return retval; } -uint8_t *utf8proc_NFKC(const uint8_t *str) { +DLLEXPORT uint8_t *utf8proc_NFKC(const uint8_t *str) { uint8_t *retval; utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT);