summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@gnome.org>2008-04-21 23:56:37 +0000
committerBehdad Esfahbod <behdad@src.gnome.org>2008-04-21 23:56:37 +0000
commit03cab3cab0ca0a48dc712ffce290a259bc2b49c5 (patch)
treeb6b669242caa218684b12ff69deec66b0de57f31
parent30401e22f1a7417ad71045966a51c30e5f126cbb (diff)
downloadpango-03cab3cab0ca0a48dc712ffce290a259bc2b49c5.tar.gz
Bug 515432 – Add function to get bidirectional character type of a
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 * docs/pango-sections.txt: * docs/tmpl/layout.sgml: * docs/tmpl/main.sgml: * docs/tmpl/pangocairo.sgml: * pango/Makefile.am: * pango/pango-bidi-type.c (pango_bidi_type_for_unichar): * pango/pango-bidi-type.h: * pango/pango-types.h: * pango/pango-utils.c (pango_log2vis_get_embedding_levels), (pango_unichar_direction): * pango/pango.def: * pango/pango.h: New public API: enum PangoBidiType; pango_bidi_type_get_type() pango_bidi_type_for_unichar() svn path=/trunk/; revision=2607
-rw-r--r--ChangeLog24
-rw-r--r--docs/pango-sections.txt4
-rw-r--r--docs/tmpl/layout.sgml9
-rw-r--r--docs/tmpl/main.sgml34
-rw-r--r--docs/tmpl/pangocairo.sgml9
-rw-r--r--pango/Makefile.am2
-rw-r--r--pango/pango-bidi-type.c75
-rw-r--r--pango/pango-bidi-type.h88
-rw-r--r--pango/pango-types.h1
-rw-r--r--pango/pango-utils.c14
-rw-r--r--pango/pango.def2
-rw-r--r--pango/pango.h1
12 files changed, 257 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index fc058ecf..4e89d838 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,29 @@
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
+
+ * docs/pango-sections.txt:
+ * docs/tmpl/layout.sgml:
+ * docs/tmpl/main.sgml:
+ * docs/tmpl/pangocairo.sgml:
+ * pango/Makefile.am:
+ * pango/pango-bidi-type.c (pango_bidi_type_for_unichar):
+ * pango/pango-bidi-type.h:
+ * pango/pango-types.h:
+ * pango/pango-utils.c (pango_log2vis_get_embedding_levels),
+ (pango_unichar_direction):
+ * pango/pango.def:
+ * pango/pango.h:
+ New public API:
+
+ enum PangoBidiType;
+ pango_bidi_type_get_type()
+ pango_bidi_type_for_unichar()
+
+2008-04-21 Behdad Esfahbod <behdad@gnome.org>
+
Bug 517119 – Add pango_cairo_create_context()
* docs/pango-sections.txt:
diff --git a/docs/pango-sections.txt b/docs/pango-sections.txt
index 38ee192d..72666c12 100644
--- a/docs/pango-sections.txt
+++ b/docs/pango-sections.txt
@@ -41,7 +41,10 @@ pango_context_list_families
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
@@ -60,6 +63,7 @@ PangoLogAttr
pango_shape
<SUBSECTION Private>
+pango_bidi_type_get_type
pango_direction_get_type
pango_context_get_type
pango_item_get_type
diff --git a/docs/tmpl/layout.sgml b/docs/tmpl/layout.sgml
index afcc6499..c60f9d5a 100644
--- a/docs/tmpl/layout.sgml
+++ b/docs/tmpl/layout.sgml
@@ -561,6 +561,15 @@ The #GObject type for #PangoAlignment.
@height:
+<!-- ##### FUNCTION pango_layout_get_baseline ##### -->
+<para>
+
+</para>
+
+@layout:
+@Returns:
+
+
<!-- ##### FUNCTION pango_layout_get_line_count ##### -->
<para>
diff --git a/docs/tmpl/main.sgml b/docs/tmpl/main.sgml
index 9ab7f578..221bef43 100644
--- a/docs/tmpl/main.sgml
+++ b/docs/tmpl/main.sgml
@@ -373,6 +373,40 @@ The #GObject type for #PangoDirection.
@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/pangocairo.sgml b/docs/tmpl/pangocairo.sgml
index 8cfb836b..edc8b526 100644
--- a/docs/tmpl/pangocairo.sgml
+++ b/docs/tmpl/pangocairo.sgml
@@ -308,6 +308,15 @@ with Pango's Cairo renderer.
@Returns:
+<!-- ##### FUNCTION pango_cairo_create_context ##### -->
+<para>
+
+</para>
+
+@cr:
+@Returns:
+
+
<!-- ##### FUNCTION pango_cairo_update_context ##### -->
<para>
diff --git a/pango/Makefile.am b/pango/Makefile.am
index 79b3bae9..e89b1d5b 100644
--- a/pango/Makefile.am
+++ b/pango/Makefile.am
@@ -66,6 +66,7 @@ libpango_1_0_la_SOURCES = \
glyphstring.c \
modules.c \
pango-attributes.c \
+ pango-bidi-type.c \
pango-color.c \
pango-color-table.h \
pango-context.c \
@@ -97,6 +98,7 @@ libpango_1_0_la_SOURCES = \
pango_headers = \
pango.h \
pango-attributes.h \
+ pango-bidi-type.h \
pango-break.h \
pango-context.h \
pango-coverage.h \
diff --git a/pango/pango-bidi-type.c b/pango/pango-bidi-type.c
new file mode 100644
index 00000000..45d1d936
--- /dev/null
+++ b/pango/pango-bidi-type.c
@@ -0,0 +1,75 @@
+/* Pango
+ * pango-bidi-type.c: Bidirectional Character Types
+ *
+ * Copyright (C) 2008 Jürg Billeter <j@bitron.ch>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+
+#include "pango-bidi-type.h"
+
+#include "mini-fribidi/fribidi.h"
+
+
+
+/**
+ * pango_bidi_type_for_unichar
+ * @ch: a Unicode character
+ *
+ * Determines the normative bidirectional character type of a
+ * character, as specified in the Unicode Character Database.
+ *
+ * A simplified version of this function is available as
+ * pango_unichar_get_direction().
+ *
+ * Return value: the bidirectional character type, as used in the
+ * Unicode bidirectional algorithm.
+ *
+ * Since: 1.22
+ */
+PangoBidiType
+pango_bidi_type_for_unichar (gunichar ch)
+{
+ FriBidiCharType fribidi_ch_type = fribidi_get_type (ch);
+
+ switch (fribidi_ch_type)
+ {
+ case FRIBIDI_TYPE_LTR: return PANGO_BIDI_TYPE_L;
+ case FRIBIDI_TYPE_LRE: return PANGO_BIDI_TYPE_LRE;
+ case FRIBIDI_TYPE_LRO: return PANGO_BIDI_TYPE_LRO;
+ case FRIBIDI_TYPE_RTL: return PANGO_BIDI_TYPE_R;
+ case FRIBIDI_TYPE_AL: return PANGO_BIDI_TYPE_AL;
+ case FRIBIDI_TYPE_RLE: return PANGO_BIDI_TYPE_RLE;
+ case FRIBIDI_TYPE_RLO: return PANGO_BIDI_TYPE_RLO;
+ case FRIBIDI_TYPE_PDF: return PANGO_BIDI_TYPE_PDF;
+ case FRIBIDI_TYPE_EN: return PANGO_BIDI_TYPE_EN;
+ case FRIBIDI_TYPE_ES: return PANGO_BIDI_TYPE_ES;
+ case FRIBIDI_TYPE_ET: return PANGO_BIDI_TYPE_ET;
+ case FRIBIDI_TYPE_AN: return PANGO_BIDI_TYPE_AN;
+ case FRIBIDI_TYPE_CS: return PANGO_BIDI_TYPE_CS;
+ case FRIBIDI_TYPE_NSM: return PANGO_BIDI_TYPE_NSM;
+ case FRIBIDI_TYPE_BN: return PANGO_BIDI_TYPE_BN;
+ case FRIBIDI_TYPE_BS: return PANGO_BIDI_TYPE_B;
+ case FRIBIDI_TYPE_SS: return PANGO_BIDI_TYPE_S;
+ case FRIBIDI_TYPE_WS: return PANGO_BIDI_TYPE_WS;
+ case FRIBIDI_TYPE_ON: return PANGO_BIDI_TYPE_ON;
+ default:
+ g_assert_not_reached ();
+ return PANGO_BIDI_TYPE_ON;
+ }
+}
diff --git a/pango/pango-bidi-type.h b/pango/pango-bidi-type.h
new file mode 100644
index 00000000..a86dd587
--- /dev/null
+++ b/pango/pango-bidi-type.h
@@ -0,0 +1,88 @@
+/* Pango
+ * pango-bidi-type.h: Bidirectional Character Types
+ *
+ * Copyright (C) 2008 Jürg Billeter <j@bitron.ch>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_BIDI_TYPE_H__
+#define __PANGO_BIDI_TYPE_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/**
+ * PangoBidiType:
+ * @PANGO_BIDI_TYPE_L: Left-to-Right
+ * @PANGO_BIDI_TYPE_LRE: Left-to-Right Embedding
+ * @PANGO_BIDI_TYPE_LRO: Left-to-Right Override
+ * @PANGO_BIDI_TYPE_R: Right-to-Left
+ * @PANGO_BIDI_TYPE_AL: Right-to-Left Arabic
+ * @PANGO_BIDI_TYPE_RLE: Right-to-Left Embedding
+ * @PANGO_BIDI_TYPE_RLO: Right-to-Left Override
+ * @PANGO_BIDI_TYPE_PDF: Pop Directional Format
+ * @PANGO_BIDI_TYPE_EN: European Number
+ * @PANGO_BIDI_TYPE_ES: European Number Separator
+ * @PANGO_BIDI_TYPE_ET: European Number Terminator
+ * @PANGO_BIDI_TYPE_AN: Arabic Number
+ * @PANGO_BIDI_TYPE_CS: Common Number Separator
+ * @PANGO_BIDI_TYPE_NSM: Nonspacing Mark
+ * @PANGO_BIDI_TYPE_BN: Boundary Neutral
+ * @PANGO_BIDI_TYPE_B: Paragraph Separator
+ * @PANGO_BIDI_TYPE_S: Segment Separator
+ * @PANGO_BIDI_TYPE_WS: Whitespace
+ * @PANGO_BIDI_TYPE_ON: Other Neutrals
+ *
+ * The #PangoBidiType type represents the bidirectional character
+ * type of a Unicode character as specified by the
+ * <ulink url="http://www.unicode.org/reports/tr9/">Unicode bidirectional algorithm</ulink>.
+ *
+ * Since: 1.22
+ **/
+typedef enum {
+ /* Strong types */
+ 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,
+
+ /* Weak types */
+ 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,
+
+ /* Neutral types */
+ PANGO_BIDI_TYPE_B,
+ PANGO_BIDI_TYPE_S,
+ PANGO_BIDI_TYPE_WS,
+ PANGO_BIDI_TYPE_ON
+} PangoBidiType;
+
+PangoBidiType pango_bidi_type_for_unichar (gunichar ch) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __PANGO_BIDI_TYPE_H__ */
diff --git a/pango/pango-types.h b/pango/pango-types.h
index 41d68e98..9b330494 100644
--- a/pango/pango-types.h
+++ b/pango/pango-types.h
@@ -139,6 +139,7 @@ gboolean pango_get_mirror_char (gunichar ch,
#include <pango/pango-language.h>
#include <pango/pango-matrix.h>
#include <pango/pango-script.h>
+#include <pango/pango-bidi-type.h>
G_END_DECLS
diff --git a/pango/pango-utils.c b/pango/pango-utils.c
index d2e49924..9ade0691 100644
--- a/pango/pango-utils.c
+++ b/pango/pango-utils.c
@@ -1128,10 +1128,8 @@ pango_log2vis_get_embedding_levels (const gchar *text,
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;
@@ -1165,19 +1163,23 @@ pango_log2vis_get_embedding_levels (const gchar *text,
* pango_unichar_direction:
* @ch: a Unicode character
*
- * Determines the direction of a character; either
+ * Determines the inherent direction of a character; either
* %PANGO_DIRECTION_LTR, %PANGO_DIRECTION_RTL, or
* %PANGO_DIRECTION_NEUTRAL.
*
- * Return value: the direction of the character, as used in the
- * Unicode bidirectional algorithm.
+ * 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_LETTER (fribidi_ch_type))
+ if (!FRIBIDI_IS_STRONG (fribidi_ch_type))
return PANGO_DIRECTION_NEUTRAL;
else if (FRIBIDI_IS_RTL (fribidi_ch_type))
return PANGO_DIRECTION_RTL;
diff --git a/pango/pango.def b/pango/pango.def
index 0223facf..df844683 100644
--- a/pango/pango.def
+++ b/pango/pango.def
@@ -48,6 +48,8 @@ EXPORTS
pango_attribute_copy
pango_attribute_destroy
pango_attribute_equal
+ pango_bidi_type_for_unichar
+ pango_bidi_type_get_type
pango_break
pango_color_copy
pango_color_free
diff --git a/pango/pango.h b/pango/pango.h
index 5b5ef1e4..5cc69573 100644
--- a/pango/pango.h
+++ b/pango/pango.h
@@ -23,6 +23,7 @@
#define __PANGO_H__
#include <pango/pango-attributes.h>
+#include <pango/pango-bidi-type.h>
#include <pango/pango-break.h>
#include <pango/pango-context.h>
#include <pango/pango-coverage.h>