summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@gnome.org>2008-04-22 00:18:41 +0000
committerBehdad Esfahbod <behdad@src.gnome.org>2008-04-22 00:18:41 +0000
commitf9343aa01ff8e71406a167de3ae186b615804f57 (patch)
treea4b7704133b2c044b85d7c9d928cd57032c71d6d
parent03cab3cab0ca0a48dc712ffce290a259bc2b49c5 (diff)
downloadpango-f9343aa01ff8e71406a167de3ae186b615804f57.tar.gz
Group bidi stuff together. Add a section in the docs for them.
2008-04-21 Behdad Esfahbod <behdad@gnome.org> * docs/pango-docs.sgml: * docs/pango-sections.txt: * docs/tmpl/bidi.sgml: * docs/tmpl/main.sgml: * docs/tmpl/vertical.sgml: * pango/pango-bidi-type.c (pango_log2vis_get_embedding_levels), (pango_unichar_direction), (pango_get_mirror_char): * pango/pango-bidi-type.h: * pango/pango-types.h: * pango/pango-utils.c: Group bidi stuff together. Add a section in the docs for them. svn path=/trunk/; revision=2608
-rw-r--r--ChangeLog14
-rw-r--r--docs/pango-docs.sgml2
-rw-r--r--docs/pango-sections.txt31
-rw-r--r--docs/tmpl/bidi.sgml105
-rw-r--r--docs/tmpl/main.sgml75
-rw-r--r--docs/tmpl/vertical.sgml14
-rw-r--r--pango/pango-bidi-type.c125
-rw-r--r--pango/pango-bidi-type.h47
-rw-r--r--pango/pango-types.h47
-rw-r--r--pango/pango-utils.c124
10 files changed, 312 insertions, 272 deletions
diff --git a/ChangeLog b/ChangeLog
index 4e89d838..a3b76246 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,19 @@
2008-04-21 Behdad Esfahbod <behdad@gnome.org>
+ * docs/pango-docs.sgml:
+ * docs/pango-sections.txt:
+ * docs/tmpl/bidi.sgml:
+ * docs/tmpl/main.sgml:
+ * docs/tmpl/vertical.sgml:
+ * pango/pango-bidi-type.c (pango_log2vis_get_embedding_levels),
+ (pango_unichar_direction), (pango_get_mirror_char):
+ * pango/pango-bidi-type.h:
+ * pango/pango-types.h:
+ * pango/pango-utils.c:
+ Group bidi stuff together. Add a section in the docs for them.
+
+2008-04-21 Behdad Esfahbod <behdad@gnome.org>
+
Bug 515432 – Add function to get bidirectional character type of a
unicode character
Patch from Jürg Billeter
diff --git a/docs/pango-docs.sgml b/docs/pango-docs.sgml
index cf57855c..0517ba6e 100644
--- a/docs/pango-docs.sgml
+++ b/docs/pango-docs.sgml
@@ -29,6 +29,7 @@
<!ENTITY pango-querymodules SYSTEM "pango-querymodules.xml">
<!ENTITY pango-Version SYSTEM "xml/pango-version.xml">
<!ENTITY pango-Vertical-Text SYSTEM "xml/vertical.xml">
+<!ENTITY pango-Bidi-Text SYSTEM "xml/bidi.xml">
<!ENTITY version SYSTEM "version.xml">
<!ENTITY pango-tree-index SYSTEM "xml/tree_index.sgml">
]>
@@ -48,6 +49,7 @@
&markup-format;
&pango-Layout-Objects;
&pango-Scripts;
+ &pango-Bidi-Text;
&pango-Vertical-Text;
</chapter>
diff --git a/docs/pango-sections.txt b/docs/pango-sections.txt
index 72666c12..458917d8 100644
--- a/docs/pango-sections.txt
+++ b/docs/pango-sections.txt
@@ -6,7 +6,6 @@ PangoContext
PangoItem
PangoAnalysis
PANGO_ANALYSIS_FLAG_CENTERED_BASELINE
-PangoDirection
PANGO_TYPE_DIRECTION
<SUBSECTION>
pango_itemize
@@ -37,14 +36,7 @@ pango_context_load_font
pango_context_load_fontset
pango_context_get_metrics
pango_context_list_families
-<SUBSECTION>
-pango_get_mirror_char
-pango_unichar_direction
-pango_find_base_dir
-PangoBidiType
-pango_bidi_type_for_unichar
<SUBSECTION Standard>
-PANGO_TYPE_BIDI_TYPE
PANGO_TYPE_CONTEXT
PangoContextClass
PANGO_CONTEXT
@@ -63,8 +55,6 @@ PangoLogAttr
pango_shape
<SUBSECTION Private>
-pango_bidi_type_get_type
-pango_direction_get_type
pango_context_get_type
pango_item_get_type
</SECTION>
@@ -1080,14 +1070,31 @@ pango_version_check
<TITLE>Vertical Text</TITLE>
<FILE>vertical</FILE>
PangoGravity
-PANGO_TYPE_GRAVITY
PangoGravityHint
-PANGO_TYPE_GRAVITY_HINT
PANGO_GRAVITY_IS_VERTICAL
pango_gravity_get_for_matrix
pango_gravity_get_for_script
pango_gravity_to_rotation
+<SUBSECTION Standard>
+PANGO_TYPE_GRAVITY
+PANGO_TYPE_GRAVITY_HINT
<SUBSECTION Private>
pango_gravity_get_type
pango_gravity_hint_get_type
</SECTION>
+
+<SECTION>
+<TITLE>Bidirectional Text</TITLE>
+<FILE>bidi</FILE>
+PangoDirection
+pango_unichar_direction
+pango_find_base_dir
+pango_get_mirror_char
+PangoBidiType
+pango_bidi_type_for_unichar
+<SUBSECTION Standard>
+PANGO_TYPE_BIDI_TYPE
+<SUBSECTION Private>
+pango_bidi_type_get_type
+pango_direction_get_type
+</SECTION>
diff --git a/docs/tmpl/bidi.sgml b/docs/tmpl/bidi.sgml
new file mode 100644
index 00000000..7e5171e9
--- /dev/null
+++ b/docs/tmpl/bidi.sgml
@@ -0,0 +1,105 @@
+<!-- ##### SECTION Title ##### -->
+Bidirectional Text
+
+<!-- ##### SECTION Short_Description ##### -->
+Types and functions to help with handling bidirectional text
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Pango supports bidirectional text (like Arabic and Hebrew) automatically.
+Some applications however, need some help to correctly handle bidirectional
+text.
+</para>
+<para>
+The #PangoDirection type can be used with pango_context_set_base_dir() to
+instruct Pango about direction of text, though in most cases Pango detects
+that correctly and automatically. The rest of the facilities in this section
+are used internally by Pango already, and are provided to help applications
+that need more direct control over bidirectional setting of text.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+pango_context_get_base_dir(),
+pango_context_set_base_dir(),
+pango_itemize_with_base_dir()
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM PangoDirection ##### -->
+<para>
+</para>
+
+@PANGO_DIRECTION_LTR:
+@PANGO_DIRECTION_RTL:
+@PANGO_DIRECTION_TTB_LTR:
+@PANGO_DIRECTION_TTB_RTL:
+@PANGO_DIRECTION_WEAK_LTR:
+@PANGO_DIRECTION_WEAK_RTL:
+@PANGO_DIRECTION_NEUTRAL:
+
+<!-- ##### FUNCTION pango_unichar_direction ##### -->
+<para>
+
+</para>
+
+@ch:
+@Returns:
+
+
+<!-- ##### FUNCTION pango_find_base_dir ##### -->
+<para>
+
+</para>
+
+@text:
+@length:
+@Returns:
+
+
+<!-- ##### FUNCTION pango_get_mirror_char ##### -->
+<para>
+
+</para>
+
+@ch:
+@mirrored_ch:
+@Returns:
+
+
+<!-- ##### ENUM PangoBidiType ##### -->
+<para>
+
+</para>
+
+@PANGO_BIDI_TYPE_L:
+@PANGO_BIDI_TYPE_LRE:
+@PANGO_BIDI_TYPE_LRO:
+@PANGO_BIDI_TYPE_R:
+@PANGO_BIDI_TYPE_AL:
+@PANGO_BIDI_TYPE_RLE:
+@PANGO_BIDI_TYPE_RLO:
+@PANGO_BIDI_TYPE_PDF:
+@PANGO_BIDI_TYPE_EN:
+@PANGO_BIDI_TYPE_ES:
+@PANGO_BIDI_TYPE_ET:
+@PANGO_BIDI_TYPE_AN:
+@PANGO_BIDI_TYPE_CS:
+@PANGO_BIDI_TYPE_NSM:
+@PANGO_BIDI_TYPE_BN:
+@PANGO_BIDI_TYPE_B:
+@PANGO_BIDI_TYPE_S:
+@PANGO_BIDI_TYPE_WS:
+@PANGO_BIDI_TYPE_ON:
+
+<!-- ##### FUNCTION pango_bidi_type_for_unichar ##### -->
+<para>
+
+</para>
+
+@ch:
+@Returns:
+
+
diff --git a/docs/tmpl/main.sgml b/docs/tmpl/main.sgml
index 221bef43..fe37ff91 100644
--- a/docs/tmpl/main.sgml
+++ b/docs/tmpl/main.sgml
@@ -66,18 +66,6 @@ Since: 1.16
-<!-- ##### ENUM PangoDirection ##### -->
-<para>
-</para>
-
-@PANGO_DIRECTION_LTR:
-@PANGO_DIRECTION_RTL:
-@PANGO_DIRECTION_TTB_LTR:
-@PANGO_DIRECTION_TTB_RTL:
-@PANGO_DIRECTION_WEAK_LTR:
-@PANGO_DIRECTION_WEAK_RTL:
-@PANGO_DIRECTION_NEUTRAL:
-
<!-- ##### MACRO PANGO_TYPE_DIRECTION ##### -->
<para>
The #GObject type for #PangoDirection.
@@ -344,69 +332,6 @@ The #GObject type for #PangoDirection.
@n_families:
-<!-- ##### FUNCTION pango_get_mirror_char ##### -->
-<para>
-
-</para>
-
-@ch:
-@mirrored_ch:
-@Returns:
-
-
-<!-- ##### FUNCTION pango_unichar_direction ##### -->
-<para>
-
-</para>
-
-@ch:
-@Returns:
-
-
-<!-- ##### FUNCTION pango_find_base_dir ##### -->
-<para>
-
-</para>
-
-@text:
-@length:
-@Returns:
-
-
-<!-- ##### ENUM PangoBidiType ##### -->
-<para>
-
-</para>
-
-@PANGO_BIDI_TYPE_L:
-@PANGO_BIDI_TYPE_LRE:
-@PANGO_BIDI_TYPE_LRO:
-@PANGO_BIDI_TYPE_R:
-@PANGO_BIDI_TYPE_AL:
-@PANGO_BIDI_TYPE_RLE:
-@PANGO_BIDI_TYPE_RLO:
-@PANGO_BIDI_TYPE_PDF:
-@PANGO_BIDI_TYPE_EN:
-@PANGO_BIDI_TYPE_ES:
-@PANGO_BIDI_TYPE_ET:
-@PANGO_BIDI_TYPE_AN:
-@PANGO_BIDI_TYPE_CS:
-@PANGO_BIDI_TYPE_NSM:
-@PANGO_BIDI_TYPE_BN:
-@PANGO_BIDI_TYPE_B:
-@PANGO_BIDI_TYPE_S:
-@PANGO_BIDI_TYPE_WS:
-@PANGO_BIDI_TYPE_ON:
-
-<!-- ##### FUNCTION pango_bidi_type_for_unichar ##### -->
-<para>
-
-</para>
-
-@ch:
-@Returns:
-
-
<!-- ##### FUNCTION pango_break ##### -->
<para>
diff --git a/docs/tmpl/vertical.sgml b/docs/tmpl/vertical.sgml
index 917641da..5a75d991 100644
--- a/docs/tmpl/vertical.sgml
+++ b/docs/tmpl/vertical.sgml
@@ -84,13 +84,6 @@ pango_attr_gravity_hint_new()
@PANGO_GRAVITY_WEST:
@PANGO_GRAVITY_AUTO:
-<!-- ##### MACRO PANGO_TYPE_GRAVITY ##### -->
-<para>
-The #GObject type for #PangoGravity.
-</para>
-
-
-
<!-- ##### ENUM PangoGravityHint ##### -->
<para>
@@ -100,13 +93,6 @@ The #GObject type for #PangoGravity.
@PANGO_GRAVITY_HINT_STRONG:
@PANGO_GRAVITY_HINT_LINE:
-<!-- ##### MACRO PANGO_TYPE_GRAVITY_HINT ##### -->
-<para>
-The #GObject type for #PangoGravity.
-</para>
-
-
-
<!-- ##### MACRO PANGO_GRAVITY_IS_VERTICAL ##### -->
<para>
diff --git a/pango/pango-bidi-type.c b/pango/pango-bidi-type.c
index 45d1d936..029a030f 100644
--- a/pango/pango-bidi-type.c
+++ b/pango/pango-bidi-type.c
@@ -73,3 +73,128 @@ pango_bidi_type_for_unichar (gunichar ch)
return PANGO_BIDI_TYPE_ON;
}
}
+
+/* Some bidi-related functions */
+
+/**
+ * pango_log2vis_get_embedding_levels:
+ * @text: the text to itemize.
+ * @length: the number of bytes (not characters) to process, or -1
+ * if @text is nul-terminated and the length should be calculated.
+ * @pbase_dir: input base direction, and output resolved direction.
+ *
+ * This will return the bidirectional embedding levels of the input paragraph
+ * as defined by the Unicode Bidirectional Algorithm available at:
+ *
+ * http://www.unicode.org/reports/tr9/
+ *
+ * If the input base direction is a weak direction, the direction of the
+ * characters in the text will determine the final resolved direction.
+ *
+ * Return value: a newly allocated array of embedding levels, one item per
+ * character (not byte), that should be freed using g_free.
+ *
+ * Since: 1.4
+ */
+guint8 *
+pango_log2vis_get_embedding_levels (const gchar *text,
+ int length,
+ PangoDirection *pbase_dir)
+{
+ FriBidiCharType fribidi_base_dir;
+ guint8 *embedding_levels_list;
+
+ switch (*pbase_dir)
+ {
+ case PANGO_DIRECTION_LTR:
+ case PANGO_DIRECTION_TTB_RTL:
+ fribidi_base_dir = FRIBIDI_TYPE_L;
+ break;
+ case PANGO_DIRECTION_RTL:
+ case PANGO_DIRECTION_TTB_LTR:
+ fribidi_base_dir = FRIBIDI_TYPE_R;
+ break;
+ case PANGO_DIRECTION_WEAK_RTL:
+ fribidi_base_dir = FRIBIDI_TYPE_WR;
+ break;
+ case PANGO_DIRECTION_WEAK_LTR:
+ case PANGO_DIRECTION_NEUTRAL:
+ default:
+ fribidi_base_dir = FRIBIDI_TYPE_WL;
+ break;
+ }
+
+#ifdef FRIBIDI_HAVE_UTF8
+ {
+ if (length < 0)
+ length = strlen (text);
+ embedding_levels_list = fribidi_log2vis_get_embedding_levels_new_utf8 (text, length, &fribidi_base_dir);
+ }
+#else
+ {
+ gunichar *text_ucs4;
+ int n_chars;
+ text_ucs4 = g_utf8_to_ucs4_fast (text, length, &n_chars);
+ embedding_levels_list = g_new (guint8, n_chars);
+ fribidi_log2vis_get_embedding_levels ((FriBidiChar*)text_ucs4, n_chars,
+ &fribidi_base_dir,
+ (FriBidiLevel*)embedding_levels_list);
+ g_free (text_ucs4);
+ }
+#endif
+
+ *pbase_dir = (fribidi_base_dir == FRIBIDI_TYPE_L) ? PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL;
+
+ return embedding_levels_list;
+}
+
+/**
+ * pango_unichar_direction:
+ * @ch: a Unicode character
+ *
+ * Determines the inherent direction of a character; either
+ * %PANGO_DIRECTION_LTR, %PANGO_DIRECTION_RTL, or
+ * %PANGO_DIRECTION_NEUTRAL.
+ *
+ * This function is useful to categorize characters into left-to-right
+ * letters, right-to-left letters, and everything else. If full
+ * Unicode bidirectional type of a character is needed,
+ * pango_bidi_type_for_gunichar() can be used instead.
+ *
+ * Return value: the direction of the character.
+ */
+PangoDirection
+pango_unichar_direction (gunichar ch)
+{
+ FriBidiCharType fribidi_ch_type = fribidi_get_type (ch);
+
+ if (!FRIBIDI_IS_STRONG (fribidi_ch_type))
+ return PANGO_DIRECTION_NEUTRAL;
+ else if (FRIBIDI_IS_RTL (fribidi_ch_type))
+ return PANGO_DIRECTION_RTL;
+ else
+ return PANGO_DIRECTION_LTR;
+}
+
+/**
+ * pango_get_mirror_char:
+ * @ch: a Unicode character
+ * @mirrored_ch: location to store the mirrored character
+ *
+ * If @ch has the Unicode mirrored property and there is another Unicode
+ * character that typically has a glyph that is the mirror image of @ch's
+ * glyph, puts that character in the address pointed to by @mirrored_ch.
+ *
+ * Use g_unichar_get_mirror_char() instead; the docs for that function
+ * provide full details.
+ *
+ * Return value: %TRUE if @ch has a mirrored character and @mirrored_ch is
+ * filled in, %FALSE otherwise
+ **/
+gboolean
+pango_get_mirror_char (gunichar ch,
+ gunichar *mirrored_ch)
+{
+ return g_unichar_get_mirror_char (ch, mirrored_ch);
+}
+
diff --git a/pango/pango-bidi-type.h b/pango/pango-bidi-type.h
index a86dd587..c53b1704 100644
--- a/pango/pango-bidi-type.h
+++ b/pango/pango-bidi-type.h
@@ -83,6 +83,53 @@ typedef enum {
PangoBidiType pango_bidi_type_for_unichar (gunichar ch) G_GNUC_CONST;
+/**
+ * PangoDirection:
+ * @PANGO_DIRECTION_LTR: A strong left-to-right direction
+ * @PANGO_DIRECTION_RTL: A strong right-to-left direction
+ * @PANGO_DIRECTION_TTB_LTR: Deprecated value; treated the
+ * same as %PANGO_DIRECTION_RTL.
+ * @PANGO_DIRECTION_TTB_RTL: Deprecated value; treated the
+ * same as %PANGO_DIRECTION_LTR
+ * @PANGO_DIRECTION_WEAK_LTR: A weak left-to-right direction
+ * @PANGO_DIRECTION_WEAK_RTL: A weak right-to-left direction
+ * @PANGO_DIRECTION_NEUTRAL: No direction specified
+ *
+ * The #PangoDirection type represents a direction in the
+ * Unicode bidirectional algorithm; not every value in this
+ * enumeration makes sense for every usage of #PangoDirection;
+ * for example, the return value of pango_unichar_direction()
+ * and pango_find_base_dir() cannot be %PANGO_DIRECTION_WEAK_LTR
+ * or %PANGO_DIRECTION_WEAK_RTL, since every character is either
+ * neutral or has a strong direction; on the other hand
+ * %PANGO_DIRECTION_NEUTRAL doesn't make sense to pass
+ * to pango_itemize_with_base_dir().
+ *
+ * The %PANGO_DIRECTION_TTB_LTR, %PANGO_DIRECTION_TTB_RTL
+ * values come from an earlier interpretation of this
+ * enumeration as the writing direction of a block of
+ * text and are no longer used; See #PangoGravity for how
+ * vertical text is handled in Pango.
+ **/
+typedef enum {
+ PANGO_DIRECTION_LTR,
+ PANGO_DIRECTION_RTL,
+ PANGO_DIRECTION_TTB_LTR,
+ PANGO_DIRECTION_TTB_RTL,
+ PANGO_DIRECTION_WEAK_LTR,
+ PANGO_DIRECTION_WEAK_RTL,
+ PANGO_DIRECTION_NEUTRAL
+} PangoDirection;
+
+PangoDirection pango_unichar_direction (gunichar ch) G_GNUC_CONST;
+PangoDirection pango_find_base_dir (const gchar *text,
+ gint length);
+
+#ifndef PANGO_DISABLE_DEPRECATED
+gboolean pango_get_mirror_char (gunichar ch,
+ gunichar *mirrored_ch);
+#endif
+
G_END_DECLS
#endif /* __PANGO_BIDI_TYPE_H__ */
diff --git a/pango/pango-types.h b/pango/pango-types.h
index 9b330494..c4ef8437 100644
--- a/pango/pango-types.h
+++ b/pango/pango-types.h
@@ -87,53 +87,6 @@ struct _PangoRectangle
void pango_extents_to_pixels (PangoRectangle *inclusive,
PangoRectangle *nearest);
-/**
- * PangoDirection:
- * @PANGO_DIRECTION_LTR: A strong left-to-right direction
- * @PANGO_DIRECTION_RTL: A strong right-to-left direction
- * @PANGO_DIRECTION_TTB_LTR: Deprecated value; treated the
- * same as %PANGO_DIRECTION_RTL.
- * @PANGO_DIRECTION_TTB_RTL: Deprecated value; treated the
- * same as %PANGO_DIRECTION_LTR
- * @PANGO_DIRECTION_WEAK_LTR: A weak left-to-right direction
- * @PANGO_DIRECTION_WEAK_RTL: A weak right-to-left direction
- * @PANGO_DIRECTION_NEUTRAL: No direction specified
- *
- * The #PangoDirection type represents a direction in the
- * Unicode bidirectional algorithm; not every value in this
- * enumeration makes sense for every usage of #PangoDirection;
- * for example, the return value of pango_unichar_direction()
- * and pango_find_base_dir() cannot be %PANGO_DIRECTION_WEAK_LTR
- * or %PANGO_DIRECTION_WEAK_RTL, since every character is either
- * neutral or has a strong direction; on the other hand
- * %PANGO_DIRECTION_NEUTRAL doesn't make sense to pass
- * to pango_itemize_with_base_dir().
- *
- * The %PANGO_DIRECTION_TTB_LTR, %PANGO_DIRECTION_TTB_RTL
- * values come from an earlier interpretation of this
- * enumeration as the writing direction of a block of
- * text and are no longer used; See #PangoGravity for how
- * vertical text is handled in Pango.
- **/
-typedef enum {
- PANGO_DIRECTION_LTR,
- PANGO_DIRECTION_RTL,
- PANGO_DIRECTION_TTB_LTR,
- PANGO_DIRECTION_TTB_RTL,
- PANGO_DIRECTION_WEAK_LTR,
- PANGO_DIRECTION_WEAK_RTL,
- PANGO_DIRECTION_NEUTRAL
-} PangoDirection;
-
-PangoDirection pango_unichar_direction (gunichar ch) G_GNUC_CONST;
-PangoDirection pango_find_base_dir (const gchar *text,
- gint length);
-
-#ifndef PANGO_DISABLE_DEPRECATED
-gboolean pango_get_mirror_char (gunichar ch,
- gunichar *mirrored_ch);
-#endif
-
#include <pango/pango-gravity.h>
#include <pango/pango-language.h>
diff --git a/pango/pango-utils.c b/pango/pango-utils.c
index 9ade0691..9df61673 100644
--- a/pango/pango-utils.c
+++ b/pango/pango-utils.c
@@ -32,8 +32,6 @@
#include <glib/gstdio.h>
-#include "mini-fribidi/fribidi.h"
-
#ifndef HAVE_FLOCKFILE
# define flockfile(f) (void)1
# define funlockfile(f) (void)1
@@ -1087,128 +1085,6 @@ pango_parse_stretch (const char *str,
return FALSE;
}
-/**
- * pango_log2vis_get_embedding_levels:
- * @text: the text to itemize.
- * @length: the number of bytes (not characters) to process, or -1
- * if @text is nul-terminated and the length should be calculated.
- * @pbase_dir: input base direction, and output resolved direction.
- *
- * This will return the bidirectional embedding levels of the input paragraph
- * as defined by the Unicode Bidirectional Algorithm available at:
- *
- * http://www.unicode.org/reports/tr9/
- *
- * If the input base direction is a weak direction, the direction of the
- * characters in the text will determine the final resolved direction.
- *
- * Return value: a newly allocated array of embedding levels, one item per
- * character (not byte), that should be freed using g_free.
- *
- * Since: 1.4
- */
-guint8 *
-pango_log2vis_get_embedding_levels (const gchar *text,
- int length,
- PangoDirection *pbase_dir)
-{
- FriBidiCharType fribidi_base_dir;
- guint8 *embedding_levels_list;
-
- switch (*pbase_dir)
- {
- case PANGO_DIRECTION_LTR:
- case PANGO_DIRECTION_TTB_RTL:
- fribidi_base_dir = FRIBIDI_TYPE_L;
- break;
- case PANGO_DIRECTION_RTL:
- case PANGO_DIRECTION_TTB_LTR:
- fribidi_base_dir = FRIBIDI_TYPE_R;
- break;
- case PANGO_DIRECTION_WEAK_RTL:
- fribidi_base_dir = FRIBIDI_TYPE_WR;
- break;
- case PANGO_DIRECTION_WEAK_LTR:
- case PANGO_DIRECTION_NEUTRAL:
- default:
- fribidi_base_dir = FRIBIDI_TYPE_WL;
- break;
- }
-
-#ifdef FRIBIDI_HAVE_UTF8
- {
- if (length < 0)
- length = strlen (text);
- embedding_levels_list = fribidi_log2vis_get_embedding_levels_new_utf8 (text, length, &fribidi_base_dir);
- }
-#else
- {
- gunichar *text_ucs4;
- int n_chars;
- text_ucs4 = g_utf8_to_ucs4_fast (text, length, &n_chars);
- embedding_levels_list = g_new (guint8, n_chars);
- fribidi_log2vis_get_embedding_levels ((FriBidiChar*)text_ucs4, n_chars,
- &fribidi_base_dir,
- (FriBidiLevel*)embedding_levels_list);
- g_free (text_ucs4);
- }
-#endif
-
- *pbase_dir = (fribidi_base_dir == FRIBIDI_TYPE_L) ? PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL;
-
- return embedding_levels_list;
-}
-
-/**
- * pango_unichar_direction:
- * @ch: a Unicode character
- *
- * Determines the inherent direction of a character; either
- * %PANGO_DIRECTION_LTR, %PANGO_DIRECTION_RTL, or
- * %PANGO_DIRECTION_NEUTRAL.
- *
- * This function is useful to categorize characters into left-to-right
- * letters, right-to-left letters, and everything else. If full
- * Unicode bidirectional type of a character is needed,
- * pango_bidi_type_for_gunichar() can be used instead.
- *
- * Return value: the direction of the character.
- */
-PangoDirection
-pango_unichar_direction (gunichar ch)
-{
- FriBidiCharType fribidi_ch_type = fribidi_get_type (ch);
-
- if (!FRIBIDI_IS_STRONG (fribidi_ch_type))
- return PANGO_DIRECTION_NEUTRAL;
- else if (FRIBIDI_IS_RTL (fribidi_ch_type))
- return PANGO_DIRECTION_RTL;
- else
- return PANGO_DIRECTION_LTR;
-}
-
-/**
- * pango_get_mirror_char:
- * @ch: a Unicode character
- * @mirrored_ch: location to store the mirrored character
- *
- * If @ch has the Unicode mirrored property and there is another Unicode
- * character that typically has a glyph that is the mirror image of @ch's
- * glyph, puts that character in the address pointed to by @mirrored_ch.
- *
- * Use g_unichar_get_mirror_char() instead; the docs for that function
- * provide full details.
- *
- * Return value: %TRUE if @ch has a mirrored character and @mirrored_ch is
- * filled in, %FALSE otherwise
- **/
-gboolean
-pango_get_mirror_char (gunichar ch,
- gunichar *mirrored_ch)
-{
- return g_unichar_get_mirror_char (ch, mirrored_ch);
-}
-
static guint
alias_hash (struct PangoAlias *alias)