summaryrefslogtreecommitdiff
path: root/src/setup.c
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@users.sourceforge.net>2011-06-04 17:30:12 +0200
committerTomas Bzatek <tbzatek@users.sourceforge.net>2011-06-04 17:30:12 +0200
commitfb5a52884dd17d17bab47de7f53c17c05ced6e1b (patch)
treefdb3873d295b615bfb1689c54fb76e3abb4e273f /src/setup.c
parent960c477148cf832f79e89a4cdf9f3ce3389c7b06 (diff)
downloadcataract-fb5a52884dd17d17bab47de7f53c17c05ced6e1b.tar.xz
Introduce conditional system
This is very basic scripting support - simple value retrieval and block conditionals. Defines could be either static from theme setup or programatically added during page generation.
Diffstat (limited to 'src/setup.c')
-rw-r--r--src/setup.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/setup.c b/src/setup.c
index 83c5504..3a2a66d 100644
--- a/src/setup.c
+++ b/src/setup.c
@@ -143,11 +143,12 @@ parse_design_setup_xml (const gchar *filename)
TXMLFile *xml;
gchar *s;
gchar *s2;
+ gchar *s3;
TGalleryDesign *design;
TImageSize *image_size;
TGalleryDesignTheme *theme;
- int count;
- int i;
+ int count, c;
+ int i, j;
xml = xml_parser_load (filename);
if (xml == NULL)
@@ -240,6 +241,19 @@ parse_design_setup_xml (const gchar *filename)
g_free (s2);
}
g_free (s);
+
+ theme->defines = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ s = g_strdup_printf ("/design_setup/theme[%d]/define", i + 1);
+ c = xml_file_node_get_children_count (xml, s);
+ g_free (s);
+ for (j = 0; j < c; j++) {
+ s = g_strdup_printf ("/design_setup/theme[%d]/define[%d]", i + 1, j + 1);
+ s2 = xml_file_get_node_attribute (xml, s, "name");
+ s3 = xml_file_get_node_attribute (xml, s, "value");
+ if (s2)
+ g_hash_table_replace (theme->defines, s2, s3 ? s3 : g_strdup (""));
+ g_free (s);
+ }
}
xml_parser_free (xml);
@@ -397,6 +411,7 @@ free_design_theme_data (TGalleryDesignTheme *theme)
g_free (theme->picture_filename);
g_free (theme->picture_image_size);
g_strfreev (theme->supplemental_files);
+ g_hash_table_destroy (theme->defines);
g_free (theme);
}
}