Add g_unichar_iszerowidth(). (#347645)
authorBehdad Esfahbod <behdad@gnome.org>
Wed, 3 Jan 2007 20:48:24 +0000 (20:48 +0000)
committerBehdad Esfahbod <behdad@src.gnome.org>
Wed, 3 Jan 2007 20:48:24 +0000 (20:48 +0000)
2007-01-03  Behdad Esfahbod  <behdad@gnome.org>

        * glib/glib.symbols:
        * glib/gunicode.h:
        * glib/guniprop.c: Add g_unichar_iszerowidth(). (#347645)

svn path=/trunk/; revision=5202

13 files changed:
ChangeLog
docs/reference/ChangeLog
docs/reference/glib/glib-sections.txt
docs/reference/glib/tmpl/glib-unused.sgml
docs/reference/glib/tmpl/keyfile.sgml
docs/reference/glib/tmpl/macros_misc.sgml
docs/reference/glib/tmpl/messages.sgml
docs/reference/glib/tmpl/unicode.sgml
docs/reference/gobject/tmpl/enumerations_flags.sgml
docs/reference/gobject/tmpl/gtypemodule.sgml
glib/glib.symbols
glib/gunicode.h
glib/guniprop.c

index e93a451..24e9384 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2007-01-03  Behdad Esfahbod  <behdad@gnome.org>
 
+       * glib/glib.symbols:
+       * glib/gunicode.h:
+       * glib/guniprop.c: Add g_unichar_iszerowidth(). (#347645)
+
+2007-01-03  Behdad Esfahbod  <behdad@gnome.org>
+
        * glib/gutils.h: Fix bug in g_bit_nth_lsf (#371631) and use
        __builtin_clzl for g_bit_storage if available (#371670).
 
index 58b5254..baeeeea 100644 (file)
@@ -1,3 +1,14 @@
+2007-01-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * glib/glib-sections.txt: Add g_unichar_iszerowidth.
+
+       * glib/tmpl/glib-unused.sgml:
+       * glib/tmpl/keyfile.sgml:
+       * glib/tmpl/macros_misc.sgml:
+       * glib/tmpl/messages.sgml:
+       * glib/tmpl/unicode.sgml:
+       Template changes.
+
 2007-01-02  Matthias Clasen  <mclasen@redhat.com>
        
        * glib/running.sgml: Remove C99ism from example.
index 92d85c7..739507a 100644 (file)
@@ -2264,6 +2264,7 @@ g_unichar_istitle
 g_unichar_isdefined
 g_unichar_iswide
 g_unichar_iswide_cjk
+g_unichar_iszerowidth
 g_unichar_toupper
 g_unichar_tolower
 g_unichar_totitle
index b089e66..de6993d 100644 (file)
@@ -203,6 +203,15 @@ error domains.
 </para>
 
 
+<!-- ##### MACRO G_HAVE_GNUC_VISIBILITY ##### -->
+<para>
+This macro is defined as 1 if the the compiler supports ELF visibility 
+attributes (currently only <command>gcc</command>).
+</para>
+
+Since: 2.6
+
+
 <!-- ##### MACRO G_HOOK_DEFERRED_DESTROY ##### -->
 <para>
 
index efd1696..7045dcd 100644 (file)
@@ -504,6 +504,8 @@ Flags which influence the parsing.
 @key_file: 
 @group_name: 
 @key: 
+@list: 
+@length: 
 
 
 <!-- ##### FUNCTION g_key_file_set_locale_string_list ##### -->
@@ -515,6 +517,8 @@ Flags which influence the parsing.
 @group_name: 
 @key: 
 @locale: 
+@list: 
+@length: 
 
 
 <!-- ##### FUNCTION g_key_file_set_boolean_list ##### -->
index 580aebc..c8cd293 100644 (file)
@@ -297,16 +297,6 @@ See the GNU C documentation for details.
 
 
 
-<!-- ##### MACRO G_HAVE_GNUC_VISIBILITY ##### -->
-<para>
-This macro is defined as 1 if the the compiler supports ELF visibility 
-attributes (currently only <command>gcc</command>).
-</para>
-
-Since: 2.6
-
-
-
 <!-- ##### MACRO G_GNUC_INTERNAL ##### -->
 <para>
 Expands to the GNU C <literal>visibility(hidden)</literal> attribute if the 
index 35c85da..1beec00 100644 (file)
@@ -144,6 +144,8 @@ A convenience function/macro to log a normal message.
 
 @...:
 
+@...:
+
 @...: 
 
 
@@ -187,6 +189,8 @@ variable (see <ulink url="glib-running.html">Running GLib Applications</ulink>).
 
 @...:
 
+@...:
+
 @...: 
 
 
@@ -235,6 +239,8 @@ the %G_DEBUG environment variable (see
 
 @...:
 
+@...:
+
 @...: 
 
 
@@ -278,6 +284,8 @@ assertion failure.
 
 @...:
 
+@...:
+
 @...: 
 
 
@@ -316,6 +324,8 @@ A convenience function/macro to log a debug message.
 
 @...:
 
+@...:
+
 @...: 
 @Since: 2.6
 
index ccae912..dde9943 100644 (file)
@@ -201,6 +201,15 @@ will correctly interpret surrogate pairs.</footnote>.
 @Returns: 
 
 
+<!-- ##### FUNCTION g_unichar_iszerowidth ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
 <!-- ##### FUNCTION g_unichar_toupper ##### -->
 <para>
 
index 1293d2f..2b72931 100644 (file)
@@ -232,13 +232,11 @@ than to write one yourself using g_enum_register_static().
 </para>
 
 @name: A nul-terminated string used as the name of the new type.
-@_static_values: 
-@Returns: The new type identifier.
-<!-- # Unused Parameters # -->
 @const_static_values: An array of #GEnumValue structs for the possible
   enumeration values. The array is terminated by a struct with all 
   members being 0. GObject keeps a reference to the data, so it cannot
   be stack-allocated.
+@Returns: The new type identifier.
 
 
 <!-- ##### FUNCTION g_flags_register_static ##### -->
@@ -252,12 +250,10 @@ than to write one yourself using g_flags_register_static().
 </para>
 
 @name: A nul-terminated string used as the name of the new type.
-@_static_values: 
-@Returns: The new type identifier.
-<!-- # Unused Parameters # -->
 @const_static_values: An array of #GFlagsValue structs for the possible
   flags values. The array is terminated by a struct with all members being 0.
   GObject keeps a reference to the data, so it cannot be stack-allocated.
+@Returns: The new type identifier.
 
 
 <!-- ##### FUNCTION g_enum_complete_type_info ##### -->
@@ -286,8 +282,6 @@ my_enum_complete_type_info (GTypePlugin     *plugin,
 
 @g_enum_type: the type identifier of the type being completed
 @info: the #GTypeInfo struct to be filled in
-@_values: 
-<!-- # Unused Parameters # -->
 @const_values: An array of #GEnumValue structs for the possible
   enumeration values. The array is terminated by a struct with all 
   members being 0.
@@ -302,8 +296,6 @@ g_enumeration_complete_type_info() above.
 
 @g_flags_type: the type identifier of the type being completed
 @info: the #GTypeInfo struct to be filled in
-@_values: 
-<!-- # Unused Parameters # -->
 @const_values: An array of #GFlagsValue structs for the possible
   enumeration values. The array is terminated by a struct with all 
   members being 0.
index 550d2dd..71ce8f1 100644 (file)
@@ -164,13 +164,11 @@ not be unloaded.
 
 @module:              a #GTypeModule
 @name:                name for the type
-@_static_values: 
-@Returns: the new or existing type ID
-@Since: 2.6
-<!-- # Unused Parameters # -->
 @const_static_values: an array of #GEnumValue structs for the possible
   enumeration values. The array is terminated by a struct with all 
   members being 0.
+@Returns: the new or existing type ID
+@Since: 2.6
 
 
 <!-- ##### FUNCTION g_type_module_register_flags ##### -->
@@ -187,13 +185,11 @@ not be unloaded.
 
 @module:              a #GTypeModule
 @name:                name for the type
-@_static_values: 
-@Returns: the new or existing type ID
-@Since: 2.6
-<!-- # Unused Parameters # -->
 @const_static_values: an array of #GFlagsValue structs for the possible
   flags values. The array is terminated by a struct with all 
   members being 0.
+@Returns: the new or existing type ID
+@Since: 2.6
 
 
 <!-- ##### MACRO G_DEFINE_DYNAMIC_TYPE ##### -->
@@ -212,7 +208,6 @@ See G_DEFINE_DYNAMIC_TYPE_EXTENDED() for an example.
 @t_n: The name of the new type, in lowercase, with words
   separated by '_'.
 @T_P: The #GType of the parent type.
-
 @Since: 2.14
 
 
@@ -286,6 +281,6 @@ gtk_gadget_register_type (GTypeModule *type_module)
 @TYPE_PARENT: The #GType of the parent type.
 @flags: #GTypeFlags to pass to g_type_register_static()
 @CODE: Custom code that gets inserted in the *_get_type() function.
-
 @Since: 2.14
 
+
index bfad3e2..2649bd4 100644 (file)
@@ -1256,6 +1256,7 @@ g_unichar_isupper G_GNUC_CONST
 g_unichar_iswide G_GNUC_CONST
 g_unichar_iswide_cjk G_GNUC_CONST
 g_unichar_isxdigit G_GNUC_CONST
+g_unichar_iszerowidth G_GNUC_CONST
 g_unichar_tolower G_GNUC_CONST
 g_unichar_totitle G_GNUC_CONST
 g_unichar_toupper G_GNUC_CONST
index b024a6a..050045f 100644 (file)
@@ -215,6 +215,7 @@ gboolean g_unichar_istitle   (gunichar c) G_GNUC_CONST;
 gboolean g_unichar_isdefined (gunichar c) G_GNUC_CONST;
 gboolean g_unichar_iswide    (gunichar c) G_GNUC_CONST;
 gboolean g_unichar_iswide_cjk(gunichar c) G_GNUC_CONST;
+gboolean g_unichar_iszerowidth(gunichar c) G_GNUC_CONST;
 
 /* More <ctype.h> functions.  These convert between the three cases.
  * See the Unicode book to understand title case.  */
index f2f6417..2292e76 100644 (file)
                            OR (G_UNICODE_COMBINING_MARK,       \
                            OR (G_UNICODE_ENCLOSING_MARK,       0))))
 
+#define ISZEROWIDTHTYPE(Type)  IS ((Type),                     \
+                           OR (G_UNICODE_NON_SPACING_MARK,     \
+                           OR (G_UNICODE_ENCLOSING_MARK,       \
+                           OR (G_UNICODE_FORMAT,               0))))
+
 /**
  * g_unichar_isalnum:
  * @c: a Unicode character
@@ -352,6 +357,40 @@ g_unichar_isdefined (gunichar c)
 }
 
 /**
+ * g_unichar_iszerowidth:
+ * @c: a Unicode character
+ * 
+ * Determines if a given character typically takes zero width when rendered.
+ * The return value is %TRUE for all non-spacing and enclosing marks
+ * (e.g., combining accents), format characters, zero-width
+ * space, but not U+00AD SOFT HYPHEN.
+ *
+ * A typical use of this function is with one of g_unichar_iswide() or
+ * g_unichar_iswide_cjk() to determine the number of cells a string occupies
+ * when displayed on a grid display (terminals).  However, note that not all
+ * terminals support zero-width rendering of zero-width marks.
+ *
+ * Return value: %TRUE if the character has zero width
+ *
+ * Since: 2.14
+ **/
+gboolean
+g_unichar_iszerowidth (gunichar c)
+{
+  if (G_UNLIKELY (c == 0x00AD))
+    return FALSE;
+
+  if (G_UNLIKELY (ISZEROWIDTHTYPE (c)))
+    return TRUE;
+
+  if (G_UNLIKELY ((c >= 0x1160 && c < 0x1200) ||
+                 c == 0x200B))
+    return TRUE;
+
+  return FALSE;
+}
+
+/**
  * g_unichar_iswide:
  * @c: a Unicode character
  *