lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: PDF hyperlinks


From: Dan Eble
Subject: Re: PDF hyperlinks
Date: Mon, 27 Dec 2010 15:14:15 -0500

Here's some prototype code which works for me in 2.13.9.

%%%%%%%%%%%%%%%%%%%%%
% in music-drawing-routines.ps
% llx lly urx ury page
/mark_page_link
{
    /page exch def
    /ury exch def
    /urx exch def
    /lly exch def
    /llx exch def
    [
        /Rect [ llx lly urx ury ]
        /Border [ 0 0 0 ]
        /Page page
        /Subtype /Link
    /ANN
    pdfmark
}
bind def

;;;;;;;;;;;;;;;;;;;;;
; in output-ps.scm
(define (page-link page-no x y)
  (ly:format "~a ~a currentpoint vector_add  ~a ~a currentpoint vector_add ~a 
mark_page_link"
             (car x)
             (car y)
             (cdr x)
             (cdr y)
             page-no))

;;;;;;;;;;;;;;;;;;;;;
; in define-markup-commands.scm
; [poorly named considering there is already a \with-url]
(define-markup-command (with-link layout props label arg)
  (symbol? markup?)
  #:category other
  "
@cindex referencing page numbers in text

Add a link to the page holding label @var{label} around @{arg}. This
only works in the PDF backend."
  (let* ((arg-stencil (interpret-markup layout props arg))
         (x-ext (ly:stencil-extent arg-stencil X))
         (y-ext (ly:stencil-extent arg-stencil Y)))
    (ly:make-stencil
     `(delay-stencil-evaluation
       ,(delay (ly:stencil-expr
                (let* ((table (ly:output-def-lookup layout 'label-page-table))
                       (page-number (if (list? table)
                                        (assoc-get label table)
                                        #f))
                       (link-expr (list 'page-link page-number
                                        `(quote ,x-ext) `(quote ,y-ext))))
                  (ly:stencil-add (ly:make-stencil link-expr x-ext y-ext) 
arg-stencil)))))
     x-ext
     y-ext)))

Thanks,
-- 
Dan




reply via email to

[Prev in Thread] Current Thread [Next in Thread]