+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
+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.
g_unichar_isdefined
g_unichar_iswide
g_unichar_iswide_cjk
+g_unichar_iszerowidth
g_unichar_toupper
g_unichar_tolower
g_unichar_totitle
</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>
@key_file:
@group_name:
@key:
+@list:
+@length:
<!-- ##### FUNCTION g_key_file_set_locale_string_list ##### -->
@group_name:
@key:
@locale:
+@list:
+@length:
<!-- ##### FUNCTION g_key_file_set_boolean_list ##### -->
-<!-- ##### 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
@...:
+@...:
+
@...:
@...:
+@...:
+
@...:
@...:
+@...:
+
@...:
@...:
+@...:
+
@...:
@...:
+@...:
+
@...:
@Since: 2.6
@Returns:
+<!-- ##### FUNCTION g_unichar_iszerowidth ##### -->
+<para>
+
+</para>
+
+@c:
+@Returns:
+
+
<!-- ##### FUNCTION g_unichar_toupper ##### -->
<para>
</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 ##### -->
</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 ##### -->
@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.
@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.
@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 ##### -->
@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 ##### -->
@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
@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
+
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
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. */
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
return TYPE (c) != G_UNICODE_UNASSIGNED;
}
+/**
+ * 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