From ee02cd08e6bf81884323809241013c1834b413ed Mon Sep 17 00:00:00 2001 From: Bertrand Bordage Date: Tue, 12 Apr 2011 12:12:05 +0200 Subject: [PATCH] PDF metadata now handle unclosed parentheses and backslash. Fix issue 1605 --- input/regression/pdfmark-metadata.ly | 1 + scm/framework-ps.scm | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/input/regression/pdfmark-metadata.ly b/input/regression/pdfmark-metadata.ly index 16f47ebb99..cb34f7c655 100644 --- a/input/regression/pdfmark-metadata.ly +++ b/input/regression/pdfmark-metadata.ly @@ -13,6 +13,7 @@ those without the prefix for PDF creation (not for visual display on the page). arranger = \markup { The Arranger \circle f \draw-circle #3 #0.5 ##t } copyright = "The Copyright" keywords = "pdfmark, metadata, DOCINFO, lilypond" + modDate = "Test for special characters : \ ) (" } \layout { ragged-right= ##t } diff --git a/scm/framework-ps.scm b/scm/framework-ps.scm index bd4846654a..eb4e545531 100644 --- a/scm/framework-ps.scm +++ b/scm/framework-ps.scm @@ -399,6 +399,17 @@ (display "%%EndProlog\n" port) (display "%%BeginSetup\ninit-lilypond-parameters\n%%EndSetup\n\n" port)) +(define (ps-quote str) + (fold + (lambda (replacement-list result) + (string-join + (string-split + result + (car replacement-list)) + (cadr replacement-list))) + str + '((#\\ "\\\\") (#\( "\\(") (#\) "\\)")))) + ;;; Create DOCINFO pdfmark containing metadata ;;; header fields with pdf prefix override those without the prefix (define (handle-metadata header port) @@ -407,7 +418,7 @@ (fallbackval (ly:modules-lookup (list header) fallbackvar)) (val (if overrideval overrideval fallbackval))) (if val - (format port "/~a (~a)\n" field (markup->string val))))) + (format port "/~a (~a)\n" field (ps-quote (markup->string val)))))) (display "[ " port) (metadata-lookup-output 'pdfcomposer 'composer "Author") (format port "/Creator (LilyPond ~a)\n" (lilypond-version)) -- 2.39.5