diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/generators.c | 278 |
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"); |
