diff options
author | Behdad Esfahbod <behdad@gnome.org> | 2008-04-21 23:56:37 +0000 |
---|---|---|
committer | Behdad Esfahbod <behdad@src.gnome.org> | 2008-04-21 23:56:37 +0000 |
commit | 03cab3cab0ca0a48dc712ffce290a259bc2b49c5 (patch) | |
tree | b6b669242caa218684b12ff69deec66b0de57f31 | |
parent | 30401e22f1a7417ad71045966a51c30e5f126cbb (diff) | |
download | pango-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-- | ChangeLog | 24 | ||||
-rw-r--r-- | docs/pango-sections.txt | 4 | ||||
-rw-r--r-- | docs/tmpl/layout.sgml | 9 | ||||
-rw-r--r-- | docs/tmpl/main.sgml | 34 | ||||
-rw-r--r-- | docs/tmpl/pangocairo.sgml | 9 | ||||
-rw-r--r-- | pango/Makefile.am | 2 | ||||
-rw-r--r-- | pango/pango-bidi-type.c | 75 | ||||
-rw-r--r-- | pango/pango-bidi-type.h | 88 | ||||
-rw-r--r-- | pango/pango-types.h | 1 | ||||
-rw-r--r-- | pango/pango-utils.c | 14 | ||||
-rw-r--r-- | pango/pango.def | 2 | ||||
-rw-r--r-- | pango/pango.h | 1 |
12 files changed, 257 insertions, 6 deletions
@@ -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> |