diff options
Diffstat (limited to 'office/zathura-pdf-mupdf/patches/0006-Parse-entries-in-the-document-information-dictionary.patch')
-rw-r--r-- | office/zathura-pdf-mupdf/patches/0006-Parse-entries-in-the-document-information-dictionary.patch | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/office/zathura-pdf-mupdf/patches/0006-Parse-entries-in-the-document-information-dictionary.patch b/office/zathura-pdf-mupdf/patches/0006-Parse-entries-in-the-document-information-dictionary.patch new file mode 100644 index 0000000000..5101a90cde --- /dev/null +++ b/office/zathura-pdf-mupdf/patches/0006-Parse-entries-in-the-document-information-dictionary.patch @@ -0,0 +1,147 @@ +From 99bff723291f5aa2558e5c8b475f496025105f4a Mon Sep 17 00:00:00 2001 +From: Moritz Lipp <mlq@pwmt.org> +Date: Mon, 20 Apr 2015 00:30:54 +0200 +Subject: [PATCH 6/6] Parse entries in the document information dictionary + +--- + document.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + plugin.c | 4 +-- + 2 files changed, 99 insertions(+), 3 deletions(-) + +diff --git a/document.c b/document.c +index de805bb..873866c 100644 +--- a/document.c ++++ b/document.c +@@ -6,8 +6,12 @@ + #include <mupdf/xps.h> + #include <mupdf/pdf.h> + ++#include <glib-2.0/glib.h> ++ + #include "plugin.h" + ++#define LENGTH(x) (sizeof(x)/sizeof((x)[0])) ++ + zathura_error_t + pdf_document_open(zathura_document_t* document) + { +@@ -118,3 +122,97 @@ pdf_document_save_as(zathura_document_t* document, mupdf_document_t* + return ZATHURA_ERROR_OK; + } + ++girara_list_t* ++pdf_document_get_information(zathura_document_t* document, mupdf_document_t* ++ mupdf_document, zathura_error_t* error) ++{ ++ if (document == NULL || mupdf_document == NULL || error == NULL) { ++ if (error != NULL) { ++ *error = ZATHURA_ERROR_INVALID_ARGUMENTS; ++ } ++ } ++ ++ girara_list_t* list = zathura_document_information_entry_list_new(); ++ if (list == NULL) { ++ if (error != NULL) { ++ *error = ZATHURA_ERROR_UNKNOWN; ++ } ++ return NULL; ++ } ++ ++ fz_try (mupdf_document->ctx) { ++ pdf_obj* trailer = pdf_trailer(mupdf_document->ctx, (pdf_document*) mupdf_document->document); ++ pdf_obj* info_dict = pdf_dict_get(mupdf_document->ctx, trailer, PDF_NAME_Info); ++ ++ /* get string values */ ++ typedef struct info_value_s { ++ const char* property; ++ zathura_document_information_type_t type; ++ } info_value_t; ++ ++ static const info_value_t string_values[] = { ++ { "Title", ZATHURA_DOCUMENT_INFORMATION_TITLE }, ++ { "Author", ZATHURA_DOCUMENT_INFORMATION_AUTHOR }, ++ { "Subject", ZATHURA_DOCUMENT_INFORMATION_SUBJECT }, ++ { "Keywords", ZATHURA_DOCUMENT_INFORMATION_KEYWORDS }, ++ { "Creator", ZATHURA_DOCUMENT_INFORMATION_CREATOR }, ++ { "Producer", ZATHURA_DOCUMENT_INFORMATION_PRODUCER } ++ }; ++ ++ for (unsigned int i = 0; i < LENGTH(string_values); i++) { ++ pdf_obj* value = pdf_dict_gets(mupdf_document->ctx, info_dict, string_values[i].property); ++ if (value == NULL) { ++ continue; ++ } ++ ++ char* str_value = pdf_to_str_buf(mupdf_document->ctx, value); ++ if (str_value == NULL || strlen(str_value) == 0) { ++ continue; ++ } ++ ++ zathura_document_information_entry_t* entry = ++ zathura_document_information_entry_new( ++ string_values[i].type, ++ str_value ++ ); ++ ++ if (entry != NULL) { ++ girara_list_append(list, entry); ++ } ++ } ++ ++ static const info_value_t time_values[] = { ++ { "CreationDate", ZATHURA_DOCUMENT_INFORMATION_CREATION_DATE }, ++ { "ModDate", ZATHURA_DOCUMENT_INFORMATION_MODIFICATION_DATE } ++ }; ++ ++ for (unsigned int i = 0; i < LENGTH(time_values); i++) { ++ pdf_obj* value = pdf_dict_gets(mupdf_document->ctx, info_dict, time_values[i].property); ++ if (value == NULL) { ++ continue; ++ } ++ ++ char* str_value = pdf_to_str_buf(mupdf_document->ctx, value); ++ if (str_value == NULL || strlen(str_value) == 0) { ++ continue; ++ } ++ ++ zathura_document_information_entry_t* entry = ++ zathura_document_information_entry_new( ++ time_values[i].type, ++ str_value // FIXME: Convert to common format ++ ); ++ ++ if (entry != NULL) { ++ girara_list_append(list, entry); ++ } ++ } ++ } fz_catch (mupdf_document->ctx) { ++ if (error != NULL) { ++ *error = ZATHURA_ERROR_UNKNOWN; ++ } ++ return NULL; ++ } ++ ++ return list; ++} +diff --git a/plugin.c b/plugin.c +index fef2c6a..2efae6f 100644 +--- a/plugin.c ++++ b/plugin.c +@@ -11,13 +11,11 @@ register_functions(zathura_plugin_functions_t* functions) + functions->document_free = (zathura_plugin_document_free_t) pdf_document_free; + functions->document_save_as = (zathura_plugin_document_save_as_t) pdf_document_save_as; + functions->document_index_generate = (zathura_plugin_document_index_generate_t) pdf_document_index_generate; ++ functions->document_get_information = (zathura_plugin_document_get_information_t) pdf_document_get_information; + functions->page_init = (zathura_plugin_page_init_t) pdf_page_init; + functions->page_clear = (zathura_plugin_page_clear_t) pdf_page_clear; + functions->page_search_text = (zathura_plugin_page_search_text_t) pdf_page_search_text; + functions->page_links_get = (zathura_plugin_page_links_get_t) pdf_page_links_get; +-#if 0 +- functions->document_get_information = (zathura_plugin_document_get_information_t) pdf_document_get_information; +-#endif + functions->page_images_get = (zathura_plugin_page_images_get_t) pdf_page_images_get; + functions->page_get_text = (zathura_plugin_page_get_text_t) pdf_page_get_text; + functions->page_render = (zathura_plugin_page_render_t) pdf_page_render; +-- +1.8.4 + |