X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fframework-tex.scm;h=f0e3321a2ca9c3f6194f9244fc630e82a6b56f37;hb=d9fd01f2dc9ffb43038028859703f0788d1e384e;hp=048dc3f996a491dcbb9d0f955f8e35b93d23522a;hpb=77d57deeda3d823072e877601f6a7fac07b0a65a;p=lilypond.git diff --git a/scm/framework-tex.scm b/scm/framework-tex.scm index 048dc3f996..f0e3321a2c 100644 --- a/scm/framework-tex.scm +++ b/scm/framework-tex.scm @@ -25,7 +25,7 @@ (if (ly:get-option 'safe) (regexp-substitute/global #f "\\\\" - (regexp-substitute/global #f "([{}])" "bla{}" 'pre "\\" 1 'post ) + (regexp-substitute/global #f "([{}])" s 'pre "\\" 1 'post ) 'pre "$\\backslash$" 'post) s)) @@ -60,7 +60,8 @@ "\n" "\\def\\" (tex-font-command font) "{%\n" ;; UGH. Should be handled via alist. - (if (equal? "Extended-TeX-Font-Encoding---Latin" font-encoding) + (if (or (equal? "Extended-TeX-Font-Encoding---Latin" font-encoding) + (not font-encoding)) " \\lilypondfontencoding{T1}" " ") "\\lilypond" (tex-font-command font) @@ -139,7 +140,7 @@ "lilypondpaper" 'linewidth (ly:number->string (* scale (ly:output-def-lookup paper 'linewidth)))) "\\def\\lilyponddocumentclassoptions{" - texpaper + (sanitize-tex-string texpaper) (if landscape? ",landscape" "") "}%\n" (tex-string-def @@ -202,13 +203,11 @@ (define (dump-line putter line last?) (ly:outputter-dump-string putter - (string-append "\\lybox{" - (ly:number->string - (interval-length (ly:paper-system-extent line X))) - "}{" - (ly:number->string - (interval-length (ly:paper-system-extent line Y))) - "}{%\n")) + (format "\\lybox{~a}{~a}{%\n" + (ly:number->string + (max 0 (interval-end (ly:paper-system-extent line X)))) + (ly:number->string + (interval-length (ly:paper-system-extent line Y))))) (ly:outputter-dump-stencil putter (ly:paper-system-stencil line)) (ly:outputter-dump-string @@ -272,6 +271,13 @@ (ly:get-option 'resolution)) (string-append (basename name ".tex") ".ps")))) + +;; +;; ugh - double check this. We are leaking +;; untrusted (user-settable) info to a command-line +;; + + (define-public (convert-to-ps book name) (let* ((paper (ly:paper-book-paper book)) (preview? (string-contains name ".preview")) @@ -281,27 +287,24 @@ (cmd (string-append "dvips " (if preview? " -E " - (string-append " -t " papersizename)) + (string-append + " -t " + (sanitize-command-option papersizename))) + (if landscape? " -t landscape " " ") " -u+ec-mftrace.map -u+lilypond.map -Ppdf " - base - - (if (ly:get-option 'verbose) - " " - " 2>&1 1>& /dev/null ") - ))) - - (if (ly:get-option 'verbose) - (begin - (newline (current-error-port)) - - (display (format #f (_ "Invoking ~S") cmd) (current-error-port)) - (newline (current-error-port))) - (display (format #f "Converting to `~a.ps'...\n" base) (current-error-port)) - ) - (system cmd))) + base))) + + (let ((ps-name (string-append base ".ps"))) + (if (access? ps-name W_OK) + (delete-file ps-name))) + (if (not (ly:get-option 'verbose)) + (begin + (format (current-error-port) (_ "Converting to `~a.ps'...") base) + (newline (current-error-port)))) + (ly:system cmd))) (define-public (convert-to-dvi book name) (let* ((curr-extra-mem @@ -312,25 +315,21 @@ 'pre "" 'post))) (base (basename name ".tex")) (cmd (string-append - "latex \\\\nonstopmode \\\\input " name - (if (ly:get-option 'verbose) - " " - " 2>&1 1>& /dev/null ") - - ))) + "latex \\\\nonstopmode \\\\input " name))) (setenv "extra_mem_top" (number->string (max curr-extra-mem 1024000))) - (if (ly:get-option 'verbose) - (begin - (newline (current-error-port)) - (display (format #f (_ "Invoking ~S") cmd) (current-error-port)) - (newline (current-error-port))) - (format (current-error-port) "Converting to `~a.dvi'...\n" base)) + (let ((dvi-name (string-append base ".dvi"))) + (if (access? dvi-name W_OK) + (delete-file dvi-name))) + (if (not (ly:get-option 'verbose)) + (begin + (format (current-error-port) (_ "Converting to `~a.dvi'...") base) + (newline (current-error-port)))) ;; fixme: set in environment? (if (ly:get-option 'safe) (set! cmd (string-append "openout_any=p " cmd))) - (system cmd))) + (ly:system cmd))) (define-public (convert-to-tex book name) #t)