summaryrefslogtreecommitdiff
path: root/src/generators.c
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@users.sourceforge.net>2014-09-18 23:11:43 +0200
committerTomas Bzatek <tbzatek@users.sourceforge.net>2014-09-18 23:11:43 +0200
commit6f6d8002d318d502ca1f645f95a4c018871c70b3 (patch)
tree7f2b3b5c9065709f2cd901c7c491bcf3ed621b05 /src/generators.c
parent8846646f54a3740d272387511b91c3d3e5ae3283 (diff)
downloadcataract-6f6d8002d318d502ca1f645f95a4c018871c70b3.tar.xz
generators: Separate common code out
Diffstat (limited to 'src/generators.c')
-rw-r--r--src/generators.c278
1 files changed, 136 insertions, 142 deletions
diff --git a/src/generators.c b/src/generators.c
index 44aa46c..6728f19 100644
--- a/src/generators.c
+++ b/src/generators.c
@@ -411,6 +411,137 @@ make_navbar_string (TGallerySetup *setup,
return g_string_free (block, FALSE);
}
+static void
+add_support_tags (TGallerySetup *setup,
+ TAlbum *items,
+ ReplaceTable *replace_table)
+{
+ gchar *s1, *s2;
+ int level;
+
+ level = get_root_level (items);
+
+ /* Supportfiles path */
+ s1 = make_string ("../", level);
+ replace_table_add_key (replace_table, "TEMPLATES_PATH", setup->supplemental_files_use_common_root ? s1 : "");
+ g_free (s1);
+
+ /* Atom feeds */
+ if (setup->feed_enabled) {
+ s2 = make_string ("../", level);
+ s1 = g_strdup_printf ("\t<link href=\"%s%s\" type=\"application/atom+xml\" rel=\"alternate\" title=\"%s\" />\n", s2, setup->feed_filename, setup->feed_title);
+ g_free (s2);
+ replace_table_add_key (replace_table, "CGG_ATOM_FEED_TAGS", s1);
+ g_free (s1);
+ }
+}
+
+static void
+add_meta_tags (TGallerySetup *setup,
+ TAlbum *items,
+ ReplaceTable *replace_table,
+ const gchar *item_title)
+{
+ int level;
+ gchar *s1, *s2, *s3;
+ gboolean override_title_meta;
+
+ level = get_root_level (items);
+ override_title_meta = setup->use_title_as_meta && item_title && (strlen (item_title) > 0);
+
+ s1 = g_strdup_printf ("\t<meta name=\"generator\" content=\"%s v%s\" />\n", APP_NAME_FULL, VERSION);
+ if (setup->meta_author || items->meta_author) {
+ s3 = g_strdup (items->meta_author ? items->meta_author : setup->meta_author);
+ adjust_tags_parameter (&s3);
+ s2 = g_strdup_printf ("%s\t<meta name=\"author\" content=\"%s\" />\n", s1, s3);
+ g_free (s3);
+ g_free (s1);
+ s1 = s2;
+ }
+ if (setup->meta_description || items->meta_description || override_title_meta) {
+ s3 = g_strdup (override_title_meta ? item_title : (items->meta_description ? items->meta_description : setup->meta_description));
+ adjust_tags_parameter (&s3);
+ s2 = g_strdup_printf ("%s\t<meta name=\"description\" content=\"%s\" />\n", s1, s3);
+ g_free (s3);
+ g_free (s1);
+ s1 = s2;
+ }
+ if ((setup->meta_keywords || items->meta_keywords) && (! override_title_meta)) {
+ s3 = g_strdup (items->meta_keywords ? items->meta_keywords : setup->meta_keywords);
+ adjust_tags_parameter (&s3);
+ s2 = g_strdup_printf ("%s\t<meta name=\"keywords\" content=\"%s\" />\n", s1, s3);
+ g_free (s3);
+ g_free (s1);
+ s1 = s2;
+ }
+ if (setup->favicon_file && strlen (setup->favicon_file) > 0) {
+ s3 = make_string ("../", level);
+ if (setup->favicon_type)
+ s2 = g_strdup_printf ("%s\t<link rel=\"icon\" type=\"%s\" href=\"%s%s\" />\n", s1, setup->favicon_type, setup->supplemental_files_use_common_root ? s3 : "", setup->favicon_file);
+ else
+ s2 = g_strdup_printf ("%s\t<link rel=\"icon\" href=\"%s%s\" />\n", s1, setup->supplemental_files_use_common_root ? s3 : "", setup->favicon_file);
+ g_free (s1);
+ g_free (s3);
+ s1 = s2;
+ }
+ replace_table_add_key (replace_table, "CGG_META_TAGS", s1);
+ g_free (s1);
+}
+
+static void
+get_item_titles (TGallerySetup *setup,
+ TIndexItem *item,
+ ExifData *exif,
+ gchar **title,
+ gchar **title_desc)
+{
+ gchar *s;
+
+ *title = g_strdup (item->title);
+ *title_desc = g_strdup (item->title_description);
+ if (setup->use_iptc_exif && *title == NULL && *title_desc == NULL && exif != NULL) {
+ *title = get_exif_data_fixed (exif, IPTC_CAPTION);
+ s = get_exif_data_fixed (exif, JPEG_COMMENT);
+ if (s) {
+ if (! *title)
+ *title = g_strdup (s);
+ else
+ *title_desc = g_strdup (s);
+ g_free (s);
+ }
+ s = get_exif_data_fixed (exif, EXIF_IMAGE_DESCRIPTION);
+ if (s) {
+ if (! *title)
+ *title = g_strdup (s);
+/* if (! *title_desc) -- disabled
+ *title_desc = g_strdup (s); */
+ g_free (s);
+ }
+ s = get_exif_data_fixed (exif, EXIF_COMMENT);
+ if (s) {
+ if (! *title)
+ *title = g_strdup (s);
+ if (! *title_desc)
+ *title_desc = g_strdup (s);
+ g_free (s);
+ }
+ /* Convert line breaks to be visible in the HTML code */
+ if (*title) {
+ str_replace (title, "\r\n", "<br />");
+ str_replace (title, "\n", "<br />");
+ }
+ if (*title_desc) {
+ str_replace (title_desc, "\r\n", "<br />");
+ str_replace (title_desc, "\n", "<br />");
+ }
+ }
+ if (*title)
+ *title = g_strstrip (*title);
+ if (*title_desc)
+ *title_desc = g_strstrip (*title_desc);
+}
+
+
/*
* write_html_album: process album and index template files
@@ -514,55 +645,11 @@ write_html_album (TGallerySetup *setup,
/* Supportfiles path */
level = get_root_level (items);
templates_path = setup->supplemental_files_use_common_root ? make_string ("../", level) : g_strdup ("");
- replace_table_add_key (global_replace_table, "TEMPLATES_PATH", templates_path);
/* META tags */
- s1 = g_strdup_printf ("\t<meta name=\"generator\" content=\"%s v%s\" />\n", APP_NAME_FULL, VERSION);
- if (setup->meta_author || items->meta_author) {
- s3 = g_strdup (items->meta_author ? items->meta_author : setup->meta_author);
- adjust_tags_parameter (&s3);
- s2 = g_strdup_printf ("%s\t<meta name=\"author\" content=\"%s\" />\n", s1, s3);
- g_free (s3);
- g_free (s1);
- s1 = s2;
- }
- if (setup->meta_description || items->meta_description) {
- s3 = g_strdup (items->meta_description ? items->meta_description : setup->meta_description);
- adjust_tags_parameter (&s3);
- s2 = g_strdup_printf ("%s\t<meta name=\"description\" content=\"%s\" />\n", s1, s3);
- g_free (s3);
- g_free (s1);
- s1 = s2;
- }
- if (setup->meta_keywords || items->meta_keywords) {
- s3 = g_strdup (items->meta_keywords ? items->meta_keywords : setup->meta_keywords);
- adjust_tags_parameter (&s3);
- s2 = g_strdup_printf ("%s\t<meta name=\"keywords\" content=\"%s\" />\n", s1, s3);
- g_free (s3);
- g_free (s1);
- s1 = s2;
- }
- if (setup->favicon_file && strlen (setup->favicon_file) > 0) {
- s3 = make_string ("../", level);
- if (setup->favicon_type)
- s2 = g_strdup_printf ("%s\t<link rel=\"icon\" type=\"%s\" href=\"%s%s\" />\n", s1, setup->favicon_type, setup->supplemental_files_use_common_root ? s3 : "", setup->favicon_file);
- else
- s2 = g_strdup_printf ("%s\t<link rel=\"icon\" href=\"%s%s\" />\n", s1, setup->supplemental_files_use_common_root ? s3 : "", setup->favicon_file);
- g_free (s1);
- g_free (s3);
- s1 = s2;
- }
- replace_table_add_key (global_replace_table, "CGG_META_TAGS", s1);
- g_free (s1);
+ add_meta_tags (setup, items, global_replace_table, NULL);
- /* Atom feeds */
- if (setup->feed_enabled) {
- s3 = make_string ("../", level);
- s1 = g_strdup_printf ("\t<link href=\"%s%s\" type=\"application/atom+xml\" rel=\"alternate\" title=\"%s\" />\n", s3, setup->feed_filename, setup->feed_title);
- g_free (s3);
- replace_table_add_key (global_replace_table, "CGG_ATOM_FEED_TAGS", s1);
- g_free (s1);
- }
+ add_support_tags (setup, items, global_replace_table);
/* Theming */
/* TODO: "image_size" will be used for album themes showing pictures inpage */
@@ -796,8 +883,6 @@ write_html_image (TGallerySetup *setup,
gchar *title, *title_desc;
gboolean res;
int bb;
- int level;
- gboolean override_title_meta;
gboolean image_fullsize;
gboolean theme_size_is_original;
ReplaceTable *replace_table;
@@ -917,48 +1002,7 @@ write_html_image (TGallerySetup *setup,
}
/* Get title and description from IPTC/EXIF/JPEG if not defined */
- title = g_strdup (item->title);
- title_desc = g_strdup (item->title_description);
- if (setup->use_iptc_exif && title == NULL && title_desc == NULL && exif != NULL) {
- title = get_exif_data_fixed (exif, IPTC_CAPTION);
- s1 = get_exif_data_fixed (exif, JPEG_COMMENT);
- if (s1) {
- if (! title)
- title = g_strdup (s1);
- else
- title_desc = g_strdup (s1);
- g_free (s1);
- }
- s1 = get_exif_data_fixed (exif, EXIF_IMAGE_DESCRIPTION);
- if (s1) {
- if (! title)
- title = g_strdup (s1);
-/* if (! title_desc) -- disabled
- title_desc = g_strdup (s1); */
- g_free (s1);
- }
- s1 = get_exif_data_fixed (exif, EXIF_COMMENT);
- if (s1) {
- if (! title)
- title = g_strdup (s1);
- if (! title_desc)
- title_desc = g_strdup (s1);
- g_free (s1);
- }
- /* Convert line breaks to be visible in the HTML code */
- if (title) {
- str_replace (&title, "\r\n", "<br />");
- str_replace (&title, "\n", "<br />");
- }
- if (title_desc) {
- str_replace (&title_desc, "\r\n", "<br />");
- str_replace (&title_desc, "\n", "<br />");
- }
- }
- if (title)
- title = g_strstrip (title);
- if (title_desc)
- title_desc = g_strstrip (title_desc);
+ get_item_titles (setup, item, exif, &title, &title_desc);
/* Page title */
s1 = (title && strlen (title) > 0) ? g_strdup_printf ("%s | ", title) : NULL;
@@ -988,12 +1032,6 @@ write_html_image (TGallerySetup *setup,
replace_table_add_key (replace_table, "IMG_SRC_FULL", img_orig_dst_page);
}
- /* Supportfiles path */
- level = get_root_level (parent_items);
- s1 = make_string ("../", level);
- replace_table_add_key (replace_table, "TEMPLATES_PATH", setup->supplemental_files_use_common_root ? s1 : "");
- g_free (s1);
-
replace_table_register_function (replace_table, "get_exif_value", get_exif_value_cb, exif);
replace_table_register_function (replace_table, "get_exif_value_fixed", get_exif_value_fixed_cb, exif);
block_parser_register_function (block_parser, "has_exif_key", has_exif_key_cb, exif);
@@ -1020,53 +1058,9 @@ write_html_image (TGallerySetup *setup,
replace_table_add_key (replace_table, "LINK_PREV", get_index_filename (parent_items, theme, NULL, NULL));
/* META tags */
- override_title_meta = setup->use_title_as_meta && title && (strlen (title) > 0);
- s1 = g_strdup_printf ("\t<meta name=\"generator\" content=\"Cataract Gallery Generator v%s\" />\n", VERSION);
- if (setup->meta_author || parent_items->meta_author) {
- s3 = g_strdup (parent_items->meta_author ? parent_items->meta_author : setup->meta_author);
- adjust_tags_parameter (&s3);
- s2 = g_strdup_printf ("%s\t<meta name=\"author\" content=\"%s\" />\n", s1, s3);
- g_free (s3);
- g_free (s1);
- s1 = s2;
- }
- if (setup->meta_description || parent_items->meta_description || override_title_meta) {
- s3 = g_strdup (override_title_meta ? title : (parent_items->meta_description ? parent_items->meta_description : setup->meta_description));
- adjust_tags_parameter (&s3);
- s2 = g_strdup_printf ("%s\t<meta name=\"description\" content=\"%s\" />\n", s1, s3);
- g_free (s3);
- g_free (s1);
- s1 = s2;
- }
- if ((setup->meta_keywords || parent_items->meta_keywords) && (! override_title_meta)) {
- s3 = g_strdup (parent_items->meta_keywords ? parent_items->meta_keywords : setup->meta_keywords);
- adjust_tags_parameter (&s3);
- s2 = g_strdup_printf ("%s\t<meta name=\"keywords\" content=\"%s\" />\n", s1, s3);
- g_free (s3);
- g_free (s1);
- s1 = s2;
- }
- if (setup->favicon_file && strlen (setup->favicon_file) > 0) {
- s3 = make_string ("../", level);
- if (setup->favicon_type)
- s2 = g_strdup_printf ("%s\t<link rel=\"icon\" type=\"%s\" href=\"%s%s\" />\n", s1, setup->favicon_type, setup->supplemental_files_use_common_root ? s3 : "", setup->favicon_file);
- else
- s2 = g_strdup_printf ("%s\t<link rel=\"icon\" href=\"%s%s\" />\n", s1, setup->supplemental_files_use_common_root ? s3 : "", setup->favicon_file);
- g_free (s1);
- g_free (s3);
- s1 = s2;
- }
- replace_table_add_key (replace_table, "CGG_META_TAGS", s1);
- g_free (s1);
+ add_meta_tags (setup, parent_items, replace_table, title);
- /* Atom feeds */
- if (setup->feed_enabled) {
- s3 = make_string ("../", level);
- s1 = g_strdup_printf ("\t<link href=\"%s%s\" type=\"application/atom+xml\" rel=\"alternate\" title=\"%s\" />\n", s3, setup->feed_filename, setup->feed_title);
- g_free (s3);
- replace_table_add_key (replace_table, "CGG_ATOM_FEED_TAGS", s1);
- g_free (s1);
- }
+ add_support_tags (setup, parent_items, replace_table);
/* Setup block parser */
block_parser_register_key (block_parser, "NAV_BAR", "NAV_BAR");