[librsvg: 63/95] rsvg_cond.c: Parse attributes with the PHF
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 63/95] rsvg_cond.c: Parse attributes with the PHF
- Date: Thu, 22 Feb 2018 03:18:26 +0000 (UTC)
commit eb4de7d306112a4fdc827d2c4d63cd54343801f6
Author: Federico Mena Quintero <federico gnome org>
Date: Wed Feb 21 11:11:45 2018 -0600
rsvg_cond.c: Parse attributes with the PHF
rsvg-cond.c | 50 ++++++++++++++++++++++++++++++++------------------
1 file changed, 32 insertions(+), 18 deletions(-)
---
diff --git a/rsvg-cond.c b/rsvg-cond.c
index 6243f849..2ba6379d 100644
--- a/rsvg-cond.c
+++ b/rsvg-cond.c
@@ -170,32 +170,46 @@ rsvg_cond_parse_system_language (const char *value)
gboolean
rsvg_eval_switch_attributes (RsvgPropertyBag * atts, gboolean * p_has_cond)
{
- gboolean permitted = TRUE;
+ gboolean required_features_ok = TRUE;
+ gboolean required_extensions_ok = TRUE;
+ gboolean system_language_ok = TRUE;
gboolean has_cond = FALSE;
+ RsvgPropertyBagIter *iter;
+ const char *key;
+ RsvgAttribute attr;
const char *value;
- if ((value = rsvg_property_bag_lookup (atts, "requiredFeatures"))) {
- permitted =
- rsvg_cond_fulfills_requirement (value, implemented_features,
- nb_implemented_features);
- has_cond = TRUE;
- }
-
- if (permitted && (value = rsvg_property_bag_lookup (atts, "requiredExtensions"))) {
- permitted =
- rsvg_cond_fulfills_requirement (value, implemented_extensions,
- nb_implemented_extensions);
- has_cond = TRUE;
+ iter = rsvg_property_bag_iter_begin (atts);
+
+ while (rsvg_property_bag_iter_next (iter, &key, &attr, &value)) {
+ switch (attr) {
+ case RSVG_ATTRIBUTE_REQUIRED_FEATURES:
+ required_features_ok = rsvg_cond_fulfills_requirement (value, implemented_features,
+ nb_implemented_features);
+ has_cond = TRUE;
+ break;
+
+ case RSVG_ATTRIBUTE_REQUIRED_EXTENSIONS:
+ required_extensions_ok = rsvg_cond_fulfills_requirement (value, implemented_extensions,
+ nb_implemented_extensions);
+ has_cond = TRUE;
+ break;
+
+ case RSVG_ATTRIBUTE_SYSTEM_LANGUAGE:
+ system_language_ok = rsvg_cond_parse_system_language (value);
+ has_cond = TRUE;
+ break;
+
+ default:
+ break;
+ }
}
- if (permitted && (value = rsvg_property_bag_lookup (atts, "systemLanguage"))) {
- permitted = rsvg_cond_parse_system_language (value);
- has_cond = TRUE;
- }
+ rsvg_property_bag_iter_end (iter);
if (p_has_cond)
*p_has_cond = has_cond;
- return permitted;
+ return required_features_ok && required_extensions_ok && system_language_ok;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]