diff -U 4 ./origscm/framework-ps.scm ./scm/framework-ps.scm --- ./origscm/framework-ps.scm 2016-11-21 05:26:10.890701666 +0100 +++ ./scm/framework-ps.scm 2017-07-20 06:43:33.177169912 +0200 @@ -108,9 +108,14 @@ (output-entry "page-width" 'paper-width) (if (ly:get-option 'strokeadjust) "true setstrokeadjust\n" "") )) +;; [mkvideo] This version of dump-page is extended for mkvideo. +;; As long as null? videopagelist is true nothing changes. (define (dump-page outputter page page-number page-count landscape?) + (let* ( + (ml (assoc page-number videopagelist)) + (rep? (and (not (null? videopagelist)) (if (pair? ml) (not (null? (cdr ml))) #f)))) (ly:outputter-dump-string outputter (string-append (format #f "%%Page: ~a ~a\n" page-number page-number) @@ -119,8 +124,9 @@ "page-width output-scale lily-output-units mul mul 0 translate 90 rotate\n" "") "%%EndPageSetup\n" "\n" + (format #f (if rep? "/lilypage {\n" "")) "gsave 0 paper-height translate set-ps-scale-to-lily-scale\n" "/helpEmmentaler-Brace where {pop helpEmmentaler-Brace} if\n" "/helpEmmentaler-11 where {pop helpEmmentaler-11} if\n" "/helpEmmentaler-13 where {pop helpEmmentaler-13} if\n" @@ -130,9 +136,15 @@ "/helpEmmentaler-20 where {pop helpEmmentaler-20} if\n" "/helpEmmentaler-23 where {pop helpEmmentaler-23} if\n" "/helpEmmentaler-26 where {pop helpEmmentaler-26} if\n")) (ly:outputter-dump-stencil outputter page) - (ly:outputter-dump-string outputter "stroke grestore\nshowpage\n")) + (ly:outputter-dump-string outputter "stroke grestore\nshowpage\n") + (if rep? (list + (ly:outputter-dump-string outputter (format #f "} def 1 ")) + (do ((i 0 (1+ i))) + ((>= i (length (cdr ml)))) + (ly:outputter-dump-string outputter (format #f "~a " (list-ref (cdr ml) i)))) + (ly:outputter-dump-string outputter (format #f " { /MkVidTime exch def MkVidTime 1 eq { exit } if lilypage } loop\n" )))))) (define (supplies-or-needs paper load-fonts?) (define (extract-names font) (if (ly:pango-font? font) diff -U 4 ./origscm/output-lib.scm ./scm/output-lib.scm --- ./origscm/output-lib.scm 2017-02-03 06:54:22.841211149 +0100 +++ ./scm/output-lib.scm 2017-07-20 06:34:08.286750353 +0200 @@ -703,13 +703,14 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Color +;; [mkvideo] This version of color? does _not_ check that +;; r, g and b are in the range [0.0 .. 1.0]! (define-public (color? x) (and (list? x) (= 3 (length x)) - (every number? x) - (every (lambda (y) (<= 0 y 1)) x))) + (every number? x))) (define-public (rgb-color r g b) (list r g b)) ;; predefined colors diff -U 4 ./origscm/output-ps.scm ./scm/output-ps.scm --- ./origscm/output-ps.scm 2016-11-21 05:26:10.894702197 +0100 +++ ./scm/output-ps.scm 2017-07-20 06:35:48.233783884 +0200 @@ -204,10 +204,11 @@ (ly:format "~4l draw_round_box" (list width height x y blotdiam)))) ;; save current color on stack and set new color +;; [mkvideo] This version of setcolor extends the precision (define (setcolor r g b) - (ly:format "gsave ~4l setrgbcolor\n" + (ly:format "gsave ~9l setrgbcolor\n" (list r g b))) ;; restore color from stack (define (resetcolor) "grestore\n") diff -U 4 ./origscm/paper.scm ./scm/paper.scm --- ./origscm/paper.scm 2016-11-21 05:26:10.898702727 +0100 +++ ./scm/paper.scm 2017-07-14 09:51:45.322354046 +0200 @@ -17,8 +17,10 @@ ;; for define-safe-public when byte-compiling using Guile V2 (use-modules (scm safe-utility-defs)) +(define-public videopagelist '()) + (define-public (set-paper-dimension-variables mod) (module-define! mod 'dimension-variables '(binding-offset blot-diameter diff -U 4 ./origps/music-drawing-routines.ps ./ps/music-drawing-routines.ps --- ./origps/music-drawing-routines.ps 2016-05-22 19:27:33.908557943 +0200 +++ ./ps/music-drawing-routines.ps 2017-07-20 06:21:39.838577836 +0200 @@ -307,5 +307,33 @@ moveto %w 0 rmoveto }repeat }bind def + +/MKVIDcolor { 0.7 0.0 1.0 } def % color to use + % +/MKVIDmagic { 2.0 } def % magic value for our own coloring requests + % +/MKVIDsetrgbcolor { % the extended setrgbcolor + 3 dict begin % start local name space + /Stop exch def % local "blue": stop + /Start exch def % local "green": start + /Red exch def % local "red": magic + Red MKVIDmagic eq % if (Red = MKVIDmagic) ( + { Start MkVidTime eq % if (start = current time) + { MKVIDcolor ORIGsetrgbcolor} % change color to red + { Start MkVidTime gt % else if ((start > current time) + { Stop MkVidTime lt % and (stop < current time)) + { MKVIDcolor ORIGsetrgbcolor } % change color to red + if } % else + if } % do not change color + ifelse } % + { Red Start Stop ORIGsetrgbcolor } % ) else change color as requested + ifelse % + end % stop local namespace +} def % + % +/ORIGsetrgbcolor /setrgbcolor load def % make original setrgbcolor available as /ORIGsetrgbcolor + % +/setrgbcolor { MKVIDsetrgbcolor } bind def % redefine setrgbcolor + %end music-drawing-routines.ps