diff options
author | Behdad Esfahbod <behdad@gnome.org> | 2007-01-16 09:52:02 +0000 |
---|---|---|
committer | Behdad Esfahbod <behdad@src.gnome.org> | 2007-01-16 09:52:02 +0000 |
commit | 56e7902a63f2036ea46a386c9d80827d6420f143 (patch) | |
tree | 6363106a16cc800436c945d09d88bbad951b5997 /pango/pango-utils.c | |
parent | 7a102793913cb7a1a0eefbbfc9d5c0d04c9eb868 (diff) | |
download | pango-56e7902a63f2036ea46a386c9d80827d6420f143.tar.gz |
New attribute types PANGO_ATTR_GRAVITY and PANGO_ATTR_GRAVITY_HINT. New
2007-01-16 Behdad Esfahbod <behdad@gnome.org>
* pango/pango-attributes.h:
* pango/pango-attributes.c:
New attribute types PANGO_ATTR_GRAVITY and PANGO_ATTR_GRAVITY_HINT.
New public functions:
pango_attr_gravity_new()
pango_attr_gravity_hint_new()
* pango/pango-context.c (update_attr_iterator),
(itemize_state_init), (itemize_state_add_character),
(get_shaper_and_font), (itemize_state_update_for_new_run):
Handle gravity and gravity_hint attributes.
* pango/pango-utils.h:
* pango/pango-utils.c:
New public function:
pango_parse_enum()
* pango/pango-markup.c (span_parse_func): Parse gravity and
gravity_hint attributes for <span>. Optimize a bit.
* pango/pango-markup.c (parse_absolute_size), (attr_strcmp),
(span_parse_int), (span_parse_boolean), (span_parse_color),
(span_parse_enum), (span_parse_func): Use pango_scan_int(),
pango_color_parse(), and pango_parse_enum(). Also, ignore '-' and
'_' differences when matching attribute names for <span>.
* examples/renderdemo.c (parse_enum), (parse_ellipsis),
(parse_gravity), (parse_gravity_hint), (parse_hinting),
(parse_wrap): Use a generic parse_enum() that uses pango_parse_enum().
* modules/basic/basic-fc.c (basic_engine_shape):
* pango/pangofc-fontmap.c (pango_fc_make_pattern):
Use PANGO_GRAVITY_IS_VERTICAL().
* pango/pango.def:
* docs/pango-sections.txt:
* docs/tmpl/text-attributes.sgml:
* docs/tmpl/utils.sgml:
Update.
svn path=/trunk/; revision=2145
Diffstat (limited to 'pango/pango-utils.c')
-rw-r--r-- | pango/pango-utils.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/pango/pango-utils.c b/pango/pango-utils.c index ce778a8f..01e20403 100644 --- a/pango/pango-utils.c +++ b/pango/pango-utils.c @@ -454,6 +454,8 @@ pango_scan_string (const char **pos, GString *out) case 't': c = '\t'; break; + default: + break; } quoted = FALSE; @@ -720,6 +722,82 @@ pango_get_lib_subdirectory (void) #endif } + +/** + * pango_parse_enum: + * @type: enum type to parse, eg. %PANGO_TYPE_ELLIPSIZE_MODE. + * @str: string to parse. May be %NULL. + * @value: integer to store the result in, or %NULL. + * @warn: if %TRUE, issue a g_warning() on bad input. + * @possible_values: place to store list of possible values on failure, or %NULL. + * + * Parses an enum type and stored the result in @value. + * + * If @str does not match the nick name of any of the possible values for the + * enum, %FALSE is returned, a warning is issued if @warn is %TRUE, and a + * string representing the list of possible values is stored in + * @possible_values. The list is slash-separated, eg. + * "none/start/middle/end". If failed and @possible_values is not %NULL, + * returned string should be freed using g_free(). + * + * Return value: %TRUE if @str was successfully parsed. + * + * Since: 1.16 + **/ +gboolean +pango_parse_enum (GType type, + const char *str, + int *value, + gboolean warn, + char **possible_values) +{ + GEnumClass *class = NULL; + gboolean ret = TRUE; + GEnumValue *v = NULL; + + class = g_type_class_ref (type); + + if (G_LIKELY (str)) + v = g_enum_get_value_by_nick (class, str); + + if (v) + { + if (G_LIKELY (value)) + *value = v->value; + } + else + { + ret = FALSE; + if (warn || possible_values) + { + int i; + GString *s = g_string_new (NULL); + + for (i = 0, v = g_enum_get_value (class, i); v; + i++ , v = g_enum_get_value (class, i)) + { + if (i) + g_string_append_c (s, '/'); + g_string_append (s, v->value_nick); + } + + if (warn) + g_warning ("%s must be one of %s", + G_ENUM_CLASS_TYPE_NAME(class), + s->str); + + if (possible_values) + *possible_values = s->str; + + g_string_free (s, possible_values ? FALSE : TRUE); + } + } + + g_type_class_unref (class); + + return ret; +} + /** * pango_parse_style: * @str: a string to parse. |