diff options
author | behdad <behdad> | 2002-08-01 13:39:27 +0000 |
---|---|---|
committer | behdad <behdad> | 2002-08-01 13:39:27 +0000 |
commit | d3ed07883cc5c4acd77606ef44108bc6931b191a (patch) | |
tree | f093afbd3448e4018a2ef63c0bd29e1216fb54dc | |
parent | 94b53ca00735f562bd9000acd4ac36b0bfb030af (diff) |
Added FRIBIDI_API and FRIBIDI_EXPORT symbols.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | Makefile.am | 29 | ||||
-rw-r--r-- | acconfig.h | 2 | ||||
-rw-r--r-- | configure.in | 8 | ||||
-rw-r--r-- | fribidi.c | 13 | ||||
-rw-r--r-- | fribidi.h | 201 | ||||
-rw-r--r-- | fribidi_char_sets.c | 34 | ||||
-rw-r--r-- | fribidi_char_sets.h | 14 | ||||
-rw-r--r-- | fribidi_char_sets.i | 7 | ||||
-rw-r--r-- | fribidi_char_sets_cap_rtl.c | 2 | ||||
-rw-r--r-- | fribidi_char_type.c | 14 | ||||
-rw-r--r-- | fribidi_config.h.in | 11 | ||||
-rw-r--r-- | fribidi_create_char_types.c | 9 | ||||
-rw-r--r-- | fribidi_main.c | 2 | ||||
-rw-r--r-- | fribidi_mirroring.c | 2 | ||||
-rw-r--r-- | fribidi_tab_char_type_2.i | 2 | ||||
-rw-r--r-- | fribidi_tab_char_type_9.i | 2 | ||||
-rw-r--r-- | fribidi_types.c | 27 | ||||
-rw-r--r-- | fribidi_types.h | 24 | ||||
-rw-r--r-- | fribidi_types.i | 21 | ||||
-rw-r--r-- | fribidi_unicode.h | 8 | ||||
-rw-r--r-- | fribidi_utils.c | 10 | ||||
-rw-r--r-- | fribidi_wcwidth.i | 8 |
23 files changed, 247 insertions, 210 deletions
@@ -1,3 +1,10 @@ +2002-08-01 Behdad Esfahbod <fribidi@behdad.org> + * *.c, *.h, fribidi_config.h.in, configure.in, acconfig.h: Applied + and completed the patch from Tomas Frydrych, to add FRIBIDI_EXPORT + and FRIBIDI_API symbols. These symbols are needed for ports of + fribidi to Windows and other platforms. + * fribidi_char_sets.i, fribidi_types.i: Added. + 2002-06-17 Behdad Esfahbod <fribidi@behdad.org> * fribidi_unicode.h: Set Unicode chars based on sizeof FriBidiChar. Now if one changes FriBidiChar to 16bit, and regenerate char_type diff --git a/Makefile.am b/Makefile.am index f0e590b..e8cfa11 100644 --- a/Makefile.am +++ b/Makefile.am @@ -33,8 +33,8 @@ lib_LTLIBRARIES = libfribidi.la libfribidi_la_SOURCES = \ fribidi.c \ fribidi_types.c \ - fribidi_mem.c \ fribidi_env.c \ + fribidi_mem.c \ fribidi_mirroring.c \ fribidi_char_type.c \ fribidi_wcwidth.c \ @@ -49,8 +49,8 @@ libfribidiincdir = $(includedir)/fribidi libfribidiinc_HEADERS = \ fribidi.h \ fribidi_types.h \ - fribidi_mem.h \ fribidi_env.h \ + fribidi_mem.h \ fribidi_unicode.h \ $(libfribidi_charsets_h) \ $(libfribidi_charsets_extra_h) \ @@ -117,7 +117,7 @@ fribidi_SOURCES = fribidi_main.c $(GETOPT_SRC) fribidi_LDADD = libfribidi.la -fribidi_tab_mirroring.i: $(fribidi_create_mirroring_SOURCES) \ +fribidi_tab_mirroring.i: $(fribidi_create_mirroring_SOURCES) fribidi_types.h \ unidata/BidiMirroring.txt $(MAKE) fribidi_create_mirroring if test -d unidata; then UNIDATA=unidata; \ @@ -129,13 +129,10 @@ fribidi_tab_mirroring.i: $(fribidi_create_mirroring_SOURCES) \ $(srcdir)/fribidi_mirroring.c: fribidi_tab_mirroring.i touch "$@" || $(MAKE) clean -fribidi_tab_char_type_small: - $(MAKE) fribidi_tab_char_type_9.i +fribidi_tab_mirroring: fribidi_tab_mirroring.i -fribidi_tab_char_type_large: - $(MAKE) fribidi_tab_char_type_2.i -fribidi_tab_char_type_%.i: $(fribidi_create_char_types_SOURCES) fribidi_types.h \ +fribidi_tab_char_type_%.i: $(fribidi_create_char_types_SOURCES) \ unidata/UnicodeData.txt $(MAKE) fribidi_create_char_types if test -d unidata; then UNIDATA=unidata; \ @@ -150,8 +147,16 @@ fribidi_tab_char_type_stamp: touch "$(srcdir)/fribidi_char_type.c" || $(MAKE) clean touch "$@" -fribidi_tabs: fribidi_tab_mirroring.i \ - fribidi_tab_char_type_2.i fribidi_tab_char_type_9.i +fribidi_tab_char_type_small: + $(MAKE) fribidi_tab_char_type_9.i + +fribidi_tab_char_type_large: + $(MAKE) fribidi_tab_char_type_2.i + +fribidi_tab tab: fribidi_tab_char_type_small \ + fribidi_tab_char_type_large \ + fribidi_tab_mirroring + config.h: fribidi_tab_char_type_stamp ./config.status --recheck @@ -179,9 +184,9 @@ test.reference: test: fribidi "$(srcdir)/run.tests" -.PHONY: test test.reference \ +.PHONY: test test.reference \ fribidi_tab_char_type_small fribidi_tab_char_type_large \ - fribidi_tabs + fribidi_tab_mirroring fribidi_tab tab TESTS = run.tests @@ -7,6 +7,8 @@ #undef FRIBIDI_NO_CHARSETS +#define FRIBIDI_EXPORT + /* Check for fribidi_tab_char_type_*.i files */ #undef HAS_FRIBIDI_TAB_CHAR_TYPE_2_I #undef HAS_FRIBIDI_TAB_CHAR_TYPE_3_I diff --git a/configure.in b/configure.in index 78992a9..3459b26 100644 --- a/configure.in +++ b/configure.in @@ -22,9 +22,9 @@ AC_INIT(fribidi.c) FRIBIDI_MAJOR_VERSION=0 FRIBIDI_MINOR_VERSION=11 FRIBIDI_MICRO_VERSION=0pre -FRIBIDI_INTERFACE_VERSION=3 -FRIBIDI_INTERFACE_AGE=0 -FRIBIDI_BINARY_AGE=0 +FRIBIDI_INTERFACE_VERSION=2 +FRIBIDI_INTERFACE_AGE=4 +FRIBIDI_BINARY_AGE=4 FRIBIDI_RPM_RELEASE=0 FRIBIDI_VERSION=$FRIBIDI_MAJOR_VERSION.$FRIBIDI_MINOR_VERSION.$FRIBIDI_MICRO_VERSION @@ -146,6 +146,8 @@ else fi AC_SUBST(FRIBIDI_NO_CHARSETS) +AC_DEFINE(FRIBIDI_EXPORT) + AC_OUTPUT([ Makefile fribidi_config.h @@ -1071,7 +1071,7 @@ free_rl_list (FriBidiEnv *fribidienv, TypeLink *type_rl_list) * fribidi_remove_bidi_marks() removes bidirectional marks, and returns * the new length, updates each of other inputs if not NULL. *----------------------------------------------------------------------*/ -FriBidiStrIndex +FRIBIDI_API FriBidiStrIndex fribidi_remove_bidi_marks (FriBidiEnv *fribidienv, FriBidiChar *str, FriBidiStrIndex length, FriBidiStrIndex *position_to_this_list, @@ -1130,7 +1130,7 @@ fribidi_remove_bidi_marks (FriBidiEnv *fribidienv, * fribidi_log2vis() calls the function_analyse_string() and then * does reordering and fills in the output strings. *----------------------------------------------------------------------*/ -fribidi_boolean +FRIBIDI_API fribidi_boolean fribidi_log2vis (FriBidiEnv *fribidienv, /* input */ const FriBidiChar *str, FriBidiStrIndex len, @@ -1342,7 +1342,7 @@ fribidi_log2vis (FriBidiEnv *fribidienv, * fribidi_log2vis_get_embedding_levels() is used in order to just get * the embedding levels. *----------------------------------------------------------------------*/ -fribidi_boolean +FRIBIDI_API fribidi_boolean fribidi_log2vis_get_embedding_levels (FriBidiEnv *fribidienv, /* input */ const FriBidiChar *str, @@ -1383,8 +1383,9 @@ fribidi_log2vis_get_embedding_levels (FriBidiEnv *fribidienv, const char *fribidi_version_info = - FRIBIDI_PACKAGE " " FRIBIDI_VERSION "\n" - "interface version " TOSTR (FRIBIDI_INTERFACE_VERSION) "\n" + FRIBIDI_PACKAGE " " FRIBIDI_VERSION "\n" "interface version " + TOSTR (FRIBIDI_INTERFACE_VERSION) + "\n" "Unicode version " FRIBIDI_UNICODE_VERSION "\n" "\n" "Copyright (C) 2002 FriBidi Project (http://fribidi.sf.net/).\n" @@ -1405,4 +1406,4 @@ const char *fribidi_version_info = #ifdef FRIBIDI_NO_CHARSETS "--without-charsts\n" #endif - ; +; @@ -43,72 +43,87 @@ extern "C" { #endif - fribidi_boolean fribidi_log2vis (FriBidiEnv *fribidienv, - /* input */ - const FriBidiChar *str, - FriBidiStrIndex len, - FriBidiCharType *pbase_dirs, - /* output */ - FriBidiChar *visual_str, - FriBidiStrIndex *position_L_to_V_list, - FriBidiStrIndex *position_V_to_L_list, - FriBidiLevel *embedding_level_list); + FRIBIDI_API fribidi_boolean fribidi_log2vis (FriBidiEnv *fribidienv, + /* input */ + const FriBidiChar *str, + FriBidiStrIndex len, + FriBidiCharType *pbase_dirs, + /* output */ + FriBidiChar *visual_str, + FriBidiStrIndex + *position_L_to_V_list, + FriBidiStrIndex + *position_V_to_L_list, + FriBidiLevel + *embedding_level_list); - fribidi_boolean fribidi_log2vis_get_embedding_levels (FriBidiEnv - *fribidienv, - /* input */ - const FriBidiChar - *str, - FriBidiStrIndex len, - FriBidiCharType - *pbase_dir, - /* output */ - FriBidiLevel - *embedding_level_list); + FRIBIDI_API fribidi_boolean fribidi_log2vis_get_embedding_levels (FriBidiEnv + *fribidienv, + /* input */ + const + FriBidiChar + *str, + FriBidiStrIndex + len, + FriBidiCharType + *pbase_dir, + /* output */ + FriBidiLevel + *embedding_level_list); /*====================================================================== * fribidi_remove_bidi_marks() removes bidirectional marks, and returns * the new length, also updates each of other inputs if not NULL. *----------------------------------------------------------------------*/ - FriBidiStrIndex fribidi_remove_bidi_marks (FriBidiEnv *fribidienv, - FriBidiChar *str, - FriBidiStrIndex length, - FriBidiStrIndex - *position_to_this_list, - FriBidiStrIndex - *position_from_this_list, - FriBidiLevel - *embedding_level_list); + FRIBIDI_API FriBidiStrIndex fribidi_remove_bidi_marks (FriBidiEnv + *fribidienv, + FriBidiChar *str, + FriBidiStrIndex + length, + FriBidiStrIndex + *position_to_this_list, + FriBidiStrIndex + *position_from_this_list, + FriBidiLevel + *embedding_level_list); /*====================================================================== * fribidi_get_type() returns bidi type of a character. *----------------------------------------------------------------------*/ - FriBidiCharType fribidi_get_type_internal (FriBidiChar uch); - - /* At present, the fribidienv parameter is not actually used - * by this procedure. - */ -#define fribidi_get_type(fribidienv,uch) fribidi_get_type_internal(uch) + FRIBIDI_API FriBidiCharType fribidi_get_type (FriBidiEnv *fribidienv, + FriBidiChar uch); /*====================================================================== * fribidi_get_types() returns bidi type of a string. *----------------------------------------------------------------------*/ - void fribidi_get_types (FriBidiEnv *fribidienv, - /* input */ - const FriBidiChar *str, FriBidiStrIndex len, - /* output */ - FriBidiCharType *type); + FRIBIDI_API void fribidi_get_types (FriBidiEnv *fribidienv, + /* input */ + const FriBidiChar *str, + FriBidiStrIndex len, + /* output */ + FriBidiCharType *type); + +/*====================================================================== + * fribidi_get_mirror_char() returns the mirrored character, if any. + *----------------------------------------------------------------------*/ + FRIBIDI_API fribidi_boolean fribidi_get_mirror_char (FriBidiEnv *fribidienv, + /* Input */ + FriBidiChar ch, + /* Output */ + FriBidiChar + *mirrored_ch); /*====================================================================== * fribidi_get_mirror_char() returns the mirrored character, if input * character has a mirror, or the input itself. * if mirrored_ch is NULL, just returns if character has a mirror or not. *----------------------------------------------------------------------*/ - fribidi_boolean fribidi_get_mirror_char (FriBidiEnv *fribidienv, - /* Input */ - FriBidiChar ch, - /* Output */ - FriBidiChar *mirrored_ch); + FRIBIDI_API fribidi_boolean fribidi_get_mirror_char (FriBidiEnv *fribidienv, + /* Input */ + FriBidiChar ch, + /* Output */ + FriBidiChar + *mirrored_ch); /*====================================================================== * The following functions were moved to fribidi_env: * - fribidi_mirroring_status() @@ -125,15 +140,15 @@ extern "C" * of characters that need redrawing. It returns the start and the * length of the section in the new string that needs redrawing. *----------------------------------------------------------------------*/ - void fribidi_find_string_changes (FriBidiEnv *fribidienv, - /* input */ - const FriBidiChar *old_str, - FriBidiStrIndex old_len, - const FriBidiChar *new_str, - FriBidiStrIndex new_len, - /* output */ - FriBidiStrIndex *change_start, - FriBidiStrIndex *change_len); + FRIBIDI_API void fribidi_find_string_changes (FriBidiEnv *fribidienv, + /* input */ + const FriBidiChar *old_str, + FriBidiStrIndex old_len, + const FriBidiChar *new_str, + FriBidiStrIndex new_len, + /* output */ + FriBidiStrIndex *change_start, + FriBidiStrIndex *change_len); /*====================================================================== @@ -165,26 +180,28 @@ extern "C" * // output * &num_vis_ranges, *vis_ranges); **----------------------------------------------------------------------*/ - void fribidi_map_range (FriBidiEnv *fribidienv, - /* input */ - FriBidiStrIndex span[2], - FriBidiStrIndex len, - fribidi_boolean is_v2l_map, - const FriBidiStrIndex *position_map, - const FriBidiLevel *embedding_level_list, - /* output */ - int *num_mapped_spans, FriBidiStrIndex spans[3][2]); + FRIBIDI_API void fribidi_map_range (FriBidiEnv *fribidienv, + /* input */ + FriBidiStrIndex span[2], + FriBidiStrIndex len, + fribidi_boolean is_v2l_map, + const FriBidiStrIndex *position_map, + const FriBidiLevel + *embedding_level_list, + /* output */ + int *num_mapped_spans, + FriBidiStrIndex spans[3][2]); /*====================================================================== * fribidi_is_char_rtl() answers the question whether a character * was resolved in the rtl direction. This simply involves asking * if the embedding level for the character is odd. *----------------------------------------------------------------------*/ - fribidi_boolean fribidi_is_char_rtl (FriBidiEnv *fribidienv, - const FriBidiLevel - *embedding_level_list, - FriBidiCharType base_dir, - FriBidiStrIndex idx); + FRIBIDI_API fribidi_boolean fribidi_is_char_rtl (FriBidiEnv *fribidienv, + const FriBidiLevel + *embedding_level_list, + FriBidiCharType base_dir, + FriBidiStrIndex idx); /*====================================================================== * fribidi_xpos_resolve() does the complicated translation of @@ -234,34 +251,36 @@ extern "C" * beyond the end of the line, res_attach_before is true. * *----------------------------------------------------------------------*/ - void fribidi_xpos_resolve (FriBidiEnv *fribidienv, - /* input */ - int x_pos, int x_offset, - FriBidiStrIndex len, - const FriBidiLevel *embedding_level_list, - FriBidiCharType base_dir, - const FriBidiStrIndex *vis2log, - const int *char_widths, - /* output */ - FriBidiStrIndex *res_log_pos, - FriBidiStrIndex *res_vis_pos, - int *res_cursor_x_pos, - fribidi_boolean *res_cursor_dir_is_rtl, - fribidi_boolean *res_attach_before); + FRIBIDI_API void fribidi_xpos_resolve (FriBidiEnv *fribidienv, + /* input */ + int x_pos, int x_offset, + FriBidiStrIndex len, + const FriBidiLevel + *embedding_level_list, + FriBidiCharType base_dir, + const FriBidiStrIndex *vis2log, + const int *char_widths, + /* output */ + FriBidiStrIndex *res_log_pos, + FriBidiStrIndex *res_vis_pos, + int *res_cursor_x_pos, + fribidi_boolean + *res_cursor_dir_is_rtl, + fribidi_boolean *res_attach_before); /*====================================================================== * fribidi_runs_log2vis takes a list of logical runs and returns a * a list of visual runs. A run is defined as a sequence that has * the same attributes. *----------------------------------------------------------------------*/ - void fribidi_runs_log2vis (FriBidiEnv *fribidienv, - /* input */ - const FriBidiList *logical_runs, /* List of FriBidiRunType */ - FriBidiStrIndex len, - const FriBidiStrIndex *log2vis, - FriBidiCharType base_dir, - /* output */ - FriBidiList **visual_runs); + FRIBIDI_API void fribidi_runs_log2vis (FriBidiEnv *fribidienv, + /* input */ + const FriBidiList *logical_runs, /* List of FriBidiRunType */ + FriBidiStrIndex len, + const FriBidiStrIndex *log2vis, + FriBidiCharType base_dir, + /* output */ + FriBidiList **visual_runs); #ifdef __cplusplus diff --git a/fribidi_char_sets.c b/fribidi_char_sets.c index 4951e02..e83d2fc 100644 --- a/fribidi_char_sets.c +++ b/fribidi_char_sets.c @@ -58,7 +58,7 @@ FriBidiCharSetHandler; /* Each charset must define the functions and strings named below (in _FRIBIDI_ADD_CHAR_SET) or define them as NULL, if not any. */ -#define _FRIBIDI_ADD_CHAR_SET(char_set) \ +#define _FRIBIDI_ADD_CHAR_SET(CHAR_SET, char_set) \ { \ fribidi_##char_set##_to_unicode, \ fribidi_unicode_to_##char_set, \ @@ -67,23 +67,17 @@ FriBidiCharSetHandler; fribidi_char_set_desc_##char_set, \ fribidi_char_set_enter_##char_set, \ fribidi_char_set_leave_##char_set, \ - } + }, FriBidiCharSetHandler fribidi_char_sets[FRIBIDI_CHAR_SETS_NUM + 1] = { {NULL, NULL, "Not Implemented", NULL, NULL, NULL}, - _FRIBIDI_ADD_CHAR_SET (utf8), - _FRIBIDI_ADD_CHAR_SET (cap_rtl), - _FRIBIDI_ADD_CHAR_SET (iso8859_6), - _FRIBIDI_ADD_CHAR_SET (iso8859_8), - _FRIBIDI_ADD_CHAR_SET (cp1255), - _FRIBIDI_ADD_CHAR_SET (cp1256), - _FRIBIDI_ADD_CHAR_SET (isiri_3342), +#include "fribidi_char_sets.i" }; #undef _FRIBIDI_ADD_CHAR_SET /* Return the charset which name is "s". */ -FriBidiCharSet +FRIBIDI_API FriBidiCharSet fribidi_parse_charset (char *s) { int i; @@ -92,13 +86,13 @@ fribidi_parse_charset (char *s) if (fribidi_strcasecmp (s, fribidi_char_sets[i].name) == 0) return i; - return FRIBIDI_CHARSET_NOT_FOUND; + return FRIBIDI_CHAR_SET_NOT_FOUND; } /* Convert the character string "s" in charset "char_set" to unicode string "us" and return it's length. */ -int +FRIBIDI_API int fribidi_charset_to_unicode (FriBidiCharSet char_set, char *s, int length, /* output */ FriBidiChar *us) @@ -110,7 +104,7 @@ fribidi_charset_to_unicode (FriBidiCharSet char_set, char *s, int length, /* Convert the unicode string "us" with length "length" to character string "s" in charset "char_set" and return it's length. */ -int +FRIBIDI_API int fribidi_unicode_to_charset (FriBidiCharSet char_set, FriBidiChar *us, int length, /* output */ @@ -122,7 +116,7 @@ fribidi_unicode_to_charset (FriBidiCharSet char_set, FriBidiChar *us, } /* Return the string containing the name of the charset. */ -char * +FRIBIDI_API char * fribidi_char_set_name (FriBidiCharSet char_set) { return fribidi_char_sets[char_set].name == NULL ? (char *) "" : @@ -130,7 +124,7 @@ fribidi_char_set_name (FriBidiCharSet char_set) } /* Return the string containing the title of the charset. */ -char * +FRIBIDI_API char * fribidi_char_set_title (FriBidiCharSet char_set) { return fribidi_char_sets[char_set].title == NULL ? @@ -138,18 +132,18 @@ fribidi_char_set_title (FriBidiCharSet char_set) } /* Return the string containing the comments about the charset, if any. */ -char * +FRIBIDI_API char * fribidi_char_set_desc (FriBidiCharSet char_set) { return fribidi_char_sets[char_set].desc == NULL ? NULL : fribidi_char_sets[char_set].desc (); } -static FriBidiCharSet current_char_set = FRIBIDI_CHARSET_DEFAULT; +static FriBidiCharSet current_char_set = FRIBIDI_CHAR_SET_DEFAULT; /* Some charsets like CapRTL may need to change some fribidis tables, by calling this function, they can do this changes. */ -fribidi_boolean +FRIBIDI_API fribidi_boolean fribidi_char_set_enter (FriBidiCharSet char_set) { if (char_set != current_char_set && fribidi_char_sets[char_set].enter) @@ -165,7 +159,7 @@ fribidi_char_set_enter (FriBidiCharSet char_set) /* Some charsets like CapRTL may need to change some fribidis tables, by calling this function, they can undo their changes, maybe to enter another mode. */ -fribidi_boolean +FRIBIDI_API fribidi_boolean fribidi_char_set_leave (FriBidiCharSet char_set) { if (char_set == current_char_set && fribidi_char_sets[char_set].leave) @@ -176,7 +170,7 @@ fribidi_char_set_leave (FriBidiCharSet char_set) /* Interface version 1, deprecated, just for compatibility. */ -int +FRIBIDI_API int fribidi_charset_to_unicode_1 (FriBidiCharSet char_set, char *s, /* output */ FriBidiChar *us) diff --git a/fribidi_char_sets.h b/fribidi_char_sets.h index 1d0ae9f..3dbf94e 100644 --- a/fribidi_char_sets.h +++ b/fribidi_char_sets.h @@ -49,18 +49,14 @@ extern "C" so it must have no initialization. */ typedef enum { - FRIBIDI_CHARSET_NOT_FOUND, - FRIBIDI_CHARSET_UTF8, - FRIBIDI_CHARSET_CAP_RTL, - FRIBIDI_CHARSET_ISO8859_6, - FRIBIDI_CHARSET_ISO8859_8, - FRIBIDI_CHARSET_CP1255, - FRIBIDI_CHARSET_CP1256, - FRIBIDI_CHARSET_ISIRI_3342, + FRIBIDI_CHAR_SET_NOT_FOUND, +#define _FRIBIDI_ADD_CHAR_SET(CHAR_SET, char_set) FRIBIDI_CHAR_SET_##CHAR_SET, +#include "fribidi_char_sets.i" +#undef _FRIBIDI_ADD_CHAR_SET FRIBIDI_CHAR_SETS_NUM_PLUS_ONE, - FRIBIDI_CHARSET_DEFAULT = FRIBIDI_CHARSET_UTF8 + FRIBIDI_CHAR_SET_DEFAULT = FRIBIDI_CHAR_SET_UTF8 } FriBidiCharSet; diff --git a/fribidi_char_sets.i b/fribidi_char_sets.i new file mode 100644 index 0000000..ec1c018 --- /dev/null +++ b/fribidi_char_sets.i @@ -0,0 +1,7 @@ +_FRIBIDI_ADD_CHAR_SET (UTF8, utf8) +_FRIBIDI_ADD_CHAR_SET (CAP_RTL, cap_rtl) +_FRIBIDI_ADD_CHAR_SET (ISO8859_6, iso8859_6) +_FRIBIDI_ADD_CHAR_SET (ISO8859_8, iso8859_8) +_FRIBIDI_ADD_CHAR_SET (CP1255, cp1255) +_FRIBIDI_ADD_CHAR_SET (CP1256, cp1256) +_FRIBIDI_ADD_CHAR_SET (ISIRI_3342, isiri_3342) diff --git a/fribidi_char_sets_cap_rtl.c b/fribidi_char_sets_cap_rtl.c index db33c28..ff4a19f 100644 --- a/fribidi_char_sets_cap_rtl.c +++ b/fribidi_char_sets_cap_rtl.c @@ -29,6 +29,8 @@ #include <stdio.h> #include "fribidi.h" +FRIBIDI_API FriBidiCharType fribidi_get_type_internal (FriBidiChar uch); + #define WS FRIBIDI_PROP_TYPE_WS #define BS FRIBIDI_PROP_TYPE_BS #define EO FRIBIDI_PROP_TYPE_EO diff --git a/fribidi_char_type.c b/fribidi_char_type.c index 9ce4df6..5d72881 100644 --- a/fribidi_char_type.c +++ b/fribidi_char_type.c @@ -27,10 +27,16 @@ /*====================================================================== * fribidi_get_type() returns the bidi type of a character. *----------------------------------------------------------------------*/ -FriBidiCharType fribidi_get_type_internal (FriBidiChar uch); +FRIBIDI_API FriBidiCharType fribidi_get_type_internal (FriBidiChar uch); -void -fribidi_get_types (FriBidiEnv *fribidienv, +FRIBIDI_API FriBidiCharType +fribidi_get_type (FriBidiEnv *env, FriBidiChar uch) +{ + return fribidi_get_type_internal (uch); +} + +FRIBIDI_API void +fribidi_get_types (FriBidiEnv *env, /* input */ const FriBidiChar *str, FriBidiStrIndex len, /* output */ @@ -39,7 +45,7 @@ fribidi_get_types (FriBidiEnv *fribidienv, FriBidiStrIndex i; for (i = 0; i < len; i++) - type[i] = fribidi_get_type_internal (str[i]); + type[i] = fribidi_get_type (env, str[i]); } #ifdef MEM_OPTIMIZED diff --git a/fribidi_config.h.in b/fribidi_config.h.in index a5876cc..4eb0185 100644 --- a/fribidi_config.h.in +++ b/fribidi_config.h.in @@ -4,7 +4,6 @@ #define FRIBIDI_VERSION "@FRIBIDI_VERSION@" #define FRIBIDI_MAJOR_VERSION @FRIBIDI_MAJOR_VERSION@ #define FRIBIDI_MINOR_VERSION @FRIBIDI_MINOR_VERSION@ -#define FRIBIDI_MICRO_VERSION_STR "@FRIBIDI_MICRO_VERSION@" #define FRIBIDI_INTERFACE_VERSION @FRIBIDI_INTERFACE_VERSION@ #if @FRIBIDI_NO_CHARSETS@ @@ -14,3 +13,13 @@ #endif #define TOSTR(x) #x + +#ifdef WIN32 +#ifdef FRIBIDI_EXPORTS +#define FRIBIDI_API __declspec(dllexport) +#else +#define FRIBIDI_API __declspec(dllimport) +#endif +#else +#define FRIBIDI_API +#endif diff --git a/fribidi_create_char_types.c b/fribidi_create_char_types.c index 05261cd..e2e0cab 100644 --- a/fribidi_create_char_types.c +++ b/fribidi_create_char_types.c @@ -104,6 +104,7 @@ get_type (char *s) #define char_name "FriBidiChar" #define prop_to_type_name "fribidi_prop_to_type" #define default_type "LTR" +#define export_api "FRIBIDI_API" static int table[FRIBIDI_UNICODE_CHARS]; @@ -193,7 +194,7 @@ write_char_type (char *file, int max_depth) fprintf (f, "#define PACKTAB_UINT8 fribidi_uint8\n"); fprintf (f, "#define PACKTAB_UINT16 fribidi_uint16\n"); fprintf (f, "#define PACKTAB_UINT32 fribidi_uint32\n"); - + if (!pack_table (table, FRIBIDI_UNICODE_CHARS, SIZEOF_CHAR, max_depth, 3, names, key_type_name, table_name, macro_name, f)) @@ -207,7 +208,7 @@ write_char_type (char *file, int max_depth) "/*======================================================================\n" " * %s() returns the bidi type of a character.\n" " *----------------------------------------------------------------------*/\n" - "%s\n" + "%s %s\n" "%s (%s uch)\n" "{\n" " if (uch < 0x%x)\n" @@ -217,8 +218,8 @@ write_char_type (char *file, int max_depth) " /* Non-Unicode chars */\n" "}\n" "\n", - function_name, char_type_name, function_name, char_name, - FRIBIDI_UNICODE_CHARS, prop_to_type_name, macro_name, + function_name, export_api, char_type_name, function_name, + char_name, FRIBIDI_UNICODE_CHARS, prop_to_type_name, macro_name, default_type); fprintf (f, "\n#endif /* %s */\n", FILENAME); diff --git a/fribidi_main.c b/fribidi_main.c index b408caa..a3c6fab 100644 --- a/fribidi_main.c +++ b/fribidi_main.c @@ -448,7 +448,7 @@ main (int argc, char *argv[]) wid = break_width; st = idx; #ifndef FRIBIDI_NO_CHARSETS - if (char_set_num != FRIBIDI_CHARSET_CAP_RTL) + if (char_set_num != FRIBIDI_CHAR_SET_CAP_RTL) #endif while (wid > 0 && idx < len) wid -= fribidi_wcwidth (visual[idx++]); diff --git a/fribidi_mirroring.c b/fribidi_mirroring.c index 08c3bdf..9b48a39 100644 --- a/fribidi_mirroring.c +++ b/fribidi_mirroring.c @@ -29,7 +29,7 @@ #include "fribidi_tab_mirroring.i" -fribidi_boolean +FRIBIDI_API fribidi_boolean fribidi_get_mirror_char (FriBidiEnv *fribidienv, /* Input */ FriBidiChar ch, diff --git a/fribidi_tab_char_type_2.i b/fribidi_tab_char_type_2.i index 0004ea6..a7d8dec 100644 --- a/fribidi_tab_char_type_2.i +++ b/fribidi_tab_char_type_2.i @@ -5213,7 +5213,7 @@ static const PACKTAB_UINT16 FriBidiPropertyBlockLevel0[4352*1] = { /*====================================================================== * fribidi_get_type_internal() returns the bidi type of a character. *----------------------------------------------------------------------*/ -FriBidiCharType +FRIBIDI_API FriBidiCharType fribidi_get_type_internal (FriBidiChar uch) { if (uch < 0x110000) diff --git a/fribidi_tab_char_type_9.i b/fribidi_tab_char_type_9.i index fc8fdc8..6643277 100644 --- a/fribidi_tab_char_type_9.i +++ b/fribidi_tab_char_type_9.i @@ -3321,7 +3321,7 @@ static const PACKTAB_UINT8 FriBidiPropertyBlockLevel0[17*1] = { /*====================================================================== * fribidi_get_type_internal() returns the bidi type of a character. *----------------------------------------------------------------------*/ -FriBidiCharType +FRIBIDI_API FriBidiCharType fribidi_get_type_internal (FriBidiChar uch) { if (uch < 0x110000) diff --git a/fribidi_types.c b/fribidi_types.c index 8cfdbec..f1e2c7c 100644 --- a/fribidi_types.c +++ b/fribidi_types.c @@ -118,30 +118,11 @@ fribidi_type_name (FriBidiCharType c) #undef _FRIBIDI_CASE } -/* Map fribidi_prop_types to fribidi_types, the order of types here should - be the same as enum FriBidiPropEnum in fribidi_types.h */ +/* Map fribidi_prop_types to fribidi_types. */ static FriBidiCharType fribidi_prop_to_type_array[] = { - FRIBIDI_TYPE_LTR, /* Strong left to right */ - FRIBIDI_TYPE_RTL, /* Right to left characters */ - FRIBIDI_TYPE_AL, /* Arabic characters */ - FRIBIDI_TYPE_LRE, /* Left-To-Right embedding */ - FRIBIDI_TYPE_RLE, /* Right-To-Left embedding */ - FRIBIDI_TYPE_LRO, /* Left-To-Right override */ - FRIBIDI_TYPE_RLO, /* Right-To-Left override */ - FRIBIDI_TYPE_PDF, /* Pop directional override */ - FRIBIDI_TYPE_EN, /* European digit */ - FRIBIDI_TYPE_AN, /* Arabic digit */ - FRIBIDI_TYPE_ES, /* European number separator */ - FRIBIDI_TYPE_ET, /* European number terminator */ - FRIBIDI_TYPE_CS, /* Common Separator */ - FRIBIDI_TYPE_NSM, /* Non spacing mark */ - FRIBIDI_TYPE_BN, /* Boundary neutral */ - FRIBIDI_TYPE_BS, /* Block separator */ - FRIBIDI_TYPE_SS, /* Segment separator */ - FRIBIDI_TYPE_WS, /* Whitespace */ - FRIBIDI_TYPE_ON, /* Other Neutral */ - FRIBIDI_TYPE_WL, /* Weak left to right */ - FRIBIDI_TYPE_WR, /* Weak right to left */ +#define _FRIBIDI_ADD_TYPE(TYPE) FRIBIDI_TYPE_##TYPE, +#include "fribidi_types.i" +#undef _FRIBIDI_ADD_TYPE }; FriBidiCharType *fribidi_prop_to_type = fribidi_prop_to_type_array; diff --git a/fribidi_types.h b/fribidi_types.h index 558620d..a8340fb 100644 --- a/fribidi_types.h +++ b/fribidi_types.h @@ -275,27 +275,9 @@ extern "C" enum FriBidiPropEnum { - FRIBIDI_PROP_TYPE_LTR, /* Strong left to right */ - FRIBIDI_PROP_TYPE_RTL, /* Right to left characters */ - FRIBIDI_PROP_TYPE_AL, /* Arabic characters */ - FRIBIDI_PROP_TYPE_LRE, /* Left-To-Right embedding */ - FRIBIDI_PROP_TYPE_RLE, /* Right-To-Left embedding */ - FRIBIDI_PROP_TYPE_LRO, /* Left-To-Right override */ - FRIBIDI_PROP_TYPE_RLO, /* Right-To-Left override */ - FRIBIDI_PROP_TYPE_PDF, /* Pop directional override */ - FRIBIDI_PROP_TYPE_EN, /* European digit */ - FRIBIDI_PROP_TYPE_AN, /* Arabic digit */ - FRIBIDI_PROP_TYPE_ES, /* European number separator */ - FRIBIDI_PROP_TYPE_ET, /* European number terminator */ - FRIBIDI_PROP_TYPE_CS, /* Common Separator */ - FRIBIDI_PROP_TYPE_NSM, /* Non spacing mark */ - FRIBIDI_PROP_TYPE_BN, /* Boundary neutral */ - FRIBIDI_PROP_TYPE_BS, /* Block separator */ - FRIBIDI_PROP_TYPE_SS, /* Segment separator */ - FRIBIDI_PROP_TYPE_WS, /* Whitespace */ - FRIBIDI_PROP_TYPE_ON, /* Other Neutral */ - FRIBIDI_PROP_TYPE_WL, /* Weak left to right */ - FRIBIDI_PROP_TYPE_WR, /* Weak right to left */ +#define _FRIBIDI_ADD_TYPE(TYPE) FRIBIDI_PROP_TYPE_##TYPE, +#include "fribidi_types.i" +#undef _FRIBIDI_ADD_TYPE FRIBIDI_TYPES_COUNT /* Number of different character types */ }; diff --git a/fribidi_types.i b/fribidi_types.i new file mode 100644 index 0000000..562bae3 --- /dev/null +++ b/fribidi_types.i @@ -0,0 +1,21 @@ +_FRIBIDI_ADD_TYPE(LTR) /* Strong left to right */ +_FRIBIDI_ADD_TYPE(RTL) /* Right to left characters */ +_FRIBIDI_ADD_TYPE(AL) /* Arabic characters */ +_FRIBIDI_ADD_TYPE(LRE) /* Left-To-Right embedding */ +_FRIBIDI_ADD_TYPE(RLE) /* Right-To-Left embedding */ +_FRIBIDI_ADD_TYPE(LRO) /* Left-To-Right override */ +_FRIBIDI_ADD_TYPE(RLO) /* Right-To-Left override */ +_FRIBIDI_ADD_TYPE(PDF) /* Pop directional override */ +_FRIBIDI_ADD_TYPE(EN) /* European digit */ +_FRIBIDI_ADD_TYPE(AN) /* Arabic digit */ +_FRIBIDI_ADD_TYPE(ES) /* European number separator */ +_FRIBIDI_ADD_TYPE(ET) /* European number terminator */ +_FRIBIDI_ADD_TYPE(CS) /* Common Separator */ +_FRIBIDI_ADD_TYPE(NSM) /* Non spacing mark */ +_FRIBIDI_ADD_TYPE(BN) /* Boundary neutral */ +_FRIBIDI_ADD_TYPE(BS) /* Block separator */ +_FRIBIDI_ADD_TYPE(SS) /* Segment separator */ +_FRIBIDI_ADD_TYPE(WS) /* Whitespace */ +_FRIBIDI_ADD_TYPE(ON) /* Other Neutral */ +_FRIBIDI_ADD_TYPE(WL) /* Weak left to right */ +_FRIBIDI_ADD_TYPE(WR) /* Weak right to left */ diff --git a/fribidi_unicode.h b/fribidi_unicode.h index 6c6a76b..522a674 100644 --- a/fribidi_unicode.h +++ b/fribidi_unicode.h @@ -60,9 +60,11 @@ extern "C" #define UNI_FARSI_ZERO 0x06F0 /* wcwidth functions */ - int fribidi_wcwidth (FriBidiChar ch); - int fribidi_wcswidth (const FriBidiChar *str, FriBidiStrIndex len); - int fribidi_wcswidth_cjk (const FriBidiChar *str, FriBidiStrIndex len); + FRIBIDI_API int fribidi_wcwidth (FriBidiChar ch); + FRIBIDI_API int fribidi_wcswidth (const FriBidiChar *str, + FriBidiStrIndex len); + FRIBIDI_API int fribidi_wcswidth_cjk (const FriBidiChar *str, + FriBidiStrIndex len); #ifdef __cplusplus } diff --git a/fribidi_utils.c b/fribidi_utils.c index 59ddeca..3321d25 100644 --- a/fribidi_utils.c +++ b/fribidi_utils.c @@ -60,7 +60,7 @@ * // output * &num_vis_ranges, *vis_ranges); **----------------------------------------------------------------------*/ -void +FRIBIDI_API void fribidi_map_range (FriBidiEnv *fribidienv, /* input */ FriBidiStrIndex in_span[2], /* Start and end span */ @@ -112,7 +112,7 @@ fribidi_map_range (FriBidiEnv *fribidienv, * of characters that need redrawing. It returns the start and the * length of the section in the new string that needs redrawing. *----------------------------------------------------------------------*/ -void +FRIBIDI_API void fribidi_find_string_changes (FriBidiEnv *fribidienv, /* input */ const FriBidiChar *old_str, @@ -192,7 +192,7 @@ fribidi_find_string_changes (FriBidiEnv *fribidienv, * beyond the end of the line, res_attach_before is true. * *----------------------------------------------------------------------*/ -void +FRIBIDI_API void fribidi_xpos_resolve (FriBidiEnv *fribidienv, /* input */ int x_pos, int x_offset, FriBidiStrIndex len, @@ -301,7 +301,7 @@ fribidi_xpos_resolve (FriBidiEnv *fribidienv, * was resolved in the rtl direction. This simply involves asking * if the embedding level for the character is odd. *----------------------------------------------------------------------*/ -fribidi_boolean +FRIBIDI_API fribidi_boolean fribidi_is_char_rtl (FriBidiEnv *fribidienv, const FriBidiLevel *embedding_level_list, FriBidiCharType base_dir, FriBidiStrIndex idx) @@ -318,7 +318,7 @@ fribidi_is_char_rtl (FriBidiEnv *fribidienv, * a list of visual runs. A run is defined as a sequence that has * the same attributes. *----------------------------------------------------------------------*/ -void +FRIBIDI_API void fribidi_runs_log2vis (FriBidiEnv *fribidienv, /* input */ const FriBidiList *logical_runs, /* List of FriBidiRunType */ diff --git a/fribidi_wcwidth.i b/fribidi_wcwidth.i index 6fc7b92..e04b015 100644 --- a/fribidi_wcwidth.i +++ b/fribidi_wcwidth.i @@ -1,9 +1,9 @@ #include "fribidi.h" -#define mk_wcwidth fribidi_wcwidth -#define mk_wcswidth fribidi_wcswidth -#define mk_wcwidth_cjk fribidi_wcwidth_cjk -#define mk_wcswidth_cjk fribidi_wcswidth_cjk +#define mk_wcwidth FRIBIDI_API fribidi_wcwidth +#define mk_wcswidth FRIBIDI_API fribidi_wcswidth +#define mk_wcwidth_cjk FRIBIDI_API fribidi_wcwidth_cjk +#define mk_wcswidth_cjk FRIBIDI_API fribidi_wcswidth_cjk #define wchar_t FriBidiChar #define size_t FriBidiStrIndex |