2006-07-19 Han-Wen Nienhuys <hanwen@lilypond.org>
+ * input/regression/bend-after.ly: new file.
+
* Documentation/user/GNUmakefile ($(outdir)/%.pdf): foolproof
recipe for eps -> pdf conversion.
--- /dev/null
+\version "2.9.12"
+
+\header {
+
+ texidoc = "Falls and doits can be created with bendAfter. They run
+ to the next note, or to the next barline."
+
+}
+
+\paper {
+ ragged-right = ##T
+}
+
+\relative c'' {
+ \override Score.SpacingSpanner #'shortest-duration-space = #3.0
+ c4-\bendAfter #+5
+ c4-\bendAfter #+4
+ c4-\bendAfter #+3
+ c4-\bendAfter #+2
+ c4-\bendAfter #+1
+ c4-\bendAfter #-1
+ c4-\bendAfter #-2
+ c4-\bendAfter #-3
+ c4-\bendAfter #-4
+}
typeset_all ();
if (span_)
{
- current_event_->origin ()->warning (_ ("unterminated trill spanner"));
- span_->suicide ();
- span_ = 0;
+ finished_ = span_;
+ typeset_all ();
}
}
"A bass figure text"
'(implicit))
+(ly:add-interface
+ 'bend-after-interface
+ "A doit or drop."
+ '(delta-position))
+
(ly:add-interface
'bass-figure-alignment-interface
""
(thickness . 2.0)
(meta . ((class . Spanner)
(interfaces . (spanner-interface
- fall-interface))))))
+ bend-after-interface))))))
(BreakAlignment
. (
(BendAfterEvent
. ((description . "A drop/fall/doit jazz articulation")
- (types . (general-music fall-event event))))
+ (types . (general-music bend-after-event event))))
(BreakEvent
. (
(dx (- right-x left-x))
(exp (list 'path thickness
`(quote
- (,(- left-x self-x) 0
- rmoveto
+ (rmoveto
+ ,(- left-x self-x) 0
+
+ rcurveto
,(/ dx 3)
0
,dx ,(* 0.66 delta)
,dx ,delta
- rcurveto))))
+ ))))
)
(ly:make-stencil
(str4 dx)
(str4 dy)))
+
(define (path thickness exps)
+ (define (path-exps->ps-path-exps exps)
+ (if (pair? exps)
+ (let*
+ ((head (car exps))
+ (rest (cdr exps))
+ (arity
+ (cond
+ ((memq head '(rmoveto rlineto lineto moveto)) 2)
+ ((memq head '(rcurveto curveto)) 6)
+ (else 1)))
+ (args (take rest arity))
+ )
+
+ ;; WARNING: this is a vulnerability: a user can output arbitrary PS code here.
+ (cons (format "~a ~a "
+ (string-join (map (lambda (x) (format "~a " x)) args) " ")
+ head)
+ (path-exps->ps-path-exps (drop rest arity))))
+ '()))
+
+
(format
"1 setlinecap ~a setlinewidth\n~a stroke"
thickness
- (string-join (map (lambda (x) (format "~a" x)) exps)
- " ")))
+ (string-join (path-exps->ps-path-exps exps) " ")))
(entity 'path ""
'(stroke-linejoin . "round")
'(stroke-linecap . "round")
- `(stroke-width . ,thick)
'(stroke . "currentColor")
'(fill . "currentColor")
+ `(stroke-width . ,thick)
`(d . ,(string-append (svg-bezier first #f)
(svg-bezier second first-c0)))
)))
+(define (path thick commands)
+ (define (ps-path-entries->svg-path entries)
+
+
+ (entity 'path ""
+ `(stroke-width . ,thick)
+ '(stroke-linejoin . "round")
+ '(stroke-linecap . "round")
+ '(stroke . "currentColor")
+ '(fill . "currentColor")
+
+
+ ))
+
+
(define (char font i)
(dispatch
`(fontify ,font ,(entity 'tspan (char->entity (integer->char i))))))