summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbehdad <behdad>2002-08-01 13:39:27 +0000
committerbehdad <behdad>2002-08-01 13:39:27 +0000
commitd3ed07883cc5c4acd77606ef44108bc6931b191a (patch)
treef093afbd3448e4018a2ef63c0bd29e1216fb54dc
parent94b53ca00735f562bd9000acd4ac36b0bfb030af (diff)
Added FRIBIDI_API and FRIBIDI_EXPORT symbols.
-rw-r--r--ChangeLog7
-rw-r--r--Makefile.am29
-rw-r--r--acconfig.h2
-rw-r--r--configure.in8
-rw-r--r--fribidi.c13
-rw-r--r--fribidi.h201
-rw-r--r--fribidi_char_sets.c34
-rw-r--r--fribidi_char_sets.h14
-rw-r--r--fribidi_char_sets.i7
-rw-r--r--fribidi_char_sets_cap_rtl.c2
-rw-r--r--fribidi_char_type.c14
-rw-r--r--fribidi_config.h.in11
-rw-r--r--fribidi_create_char_types.c9
-rw-r--r--fribidi_main.c2
-rw-r--r--fribidi_mirroring.c2
-rw-r--r--fribidi_tab_char_type_2.i2
-rw-r--r--fribidi_tab_char_type_9.i2
-rw-r--r--fribidi_types.c27
-rw-r--r--fribidi_types.h24
-rw-r--r--fribidi_types.i21
-rw-r--r--fribidi_unicode.h8
-rw-r--r--fribidi_utils.c10
-rw-r--r--fribidi_wcwidth.i8
23 files changed, 247 insertions, 210 deletions
diff --git a/ChangeLog b/ChangeLog
index be80f35..eef3a2c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/acconfig.h b/acconfig.h
index 23b1c5b..1714a73 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -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
diff --git a/fribidi.c b/fribidi.c
index 7a85b3f..992c4b7 100644
--- a/fribidi.c
+++ b/fribidi.c
@@ -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
- ;
+;
diff --git a/fribidi.h b/fribidi.h
index 01de0cb..8f7acf6 100644
--- a/fribidi.h
+++ b/fribidi.h
@@ -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