From f103fc17513e48fe66966a93696ac732b47acd81 Mon Sep 17 00:00:00 2001 From: Vasilij Schneidermann Date: Thu, 31 Aug 2017 08:01:27 +0200 Subject: Display missing metadata and be more lenient --- nov.el | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/nov.el b/nov.el index dcf4349..06d56a9 100644 --- a/nov.el +++ b/nov.el @@ -174,14 +174,15 @@ Required keys are 'identifier and everything in (car (esxml-node-children node)))) (esxml-query-all "package>metadata>*" content))) (required (mapcar (lambda (tag) - (let ((candidate (assq tag candidates))) - (when (or (not candidate) (not (cdr candidate))) - (error "Required metadatum %s not found" tag)) - candidate)) + (let ((candidate (cdr (assq tag candidates)))) + (when (not candidate) + ;; NOTE: this should ideally be a + ;; warning, but `warn' is too obtrusive + (message "Required metadatum %s not found" tag)) + (cons tag candidate))) nov-required-metadata-tags)) - (optional (->> nov-optional-metadata-tags - (mapcar (lambda (tag) (assq tag candidates))) - (--remove (or (not it) (not (cdr it))))))) + (optional (mapcar (lambda (tag) (cons tag (cdr (assq tag candidates)))) + nov-optional-metadata-tags))) (append `((identifier . ,identifier)) required optional))) (defun nov-content-manifest (directory content) @@ -373,6 +374,9 @@ chapter title." (chapter-title (car (esxml-node-children dom)))) (when (not chapter-title) (setq chapter-title '(:propertize "No title" face italic))) + ;; this shouldn't happen for properly authored EPUBs + (when (not title) + (setq title '(:propertize "No title" face italic))) (setq header-line-format (list title ": " chapter-title)))) (defvar nov-rendering-functions @@ -460,11 +464,13 @@ the HTML is rendered with `shr-render-region'." (dolist (item metadata) (-let [(key . value) item] (insert (format "%s: " (capitalize (symbol-name key)))) - (if (eq key 'description) - (let ((beg (point))) - (insert value) - (shr-render-region beg (point))) - (insert value)) + (if value + (if (eq key 'description) + (let ((beg (point))) + (insert value) + (shr-render-region beg (point))) + (insert value)) + (insert (propertize "None" 'face 'italic))) (insert "\n"))) (goto-char (point-min)))) (display-buffer buffer))) -- cgit v1.2.3