;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
- ;;;; (c) 2004--2008 Carl D. Sorensen <c_sorensen@byu.edu>
+ ;;;; (c) 2004--2009 Carl D. Sorensen <c_sorensen@byu.edu>
-(define (fret-parse-marking-list marking-list fret-count)
- (let* ((fret-range (list 1 fret-count))
- (capo-fret 0)
- (barre-list '())
- (dot-list '())
- (xo-list '())
- (output-alist '()))
- (let parse-item ((mylist marking-list))
- (if (not (null? mylist))
- (let* ((my-item (car mylist)) (my-code (car my-item)))
- (cond
- ((or (eq? my-code 'open)(eq? my-code 'mute))
- (set! xo-list (cons* my-item xo-list)))
- ((eq? my-code 'barre)
- (set! barre-list (cons* (cdr my-item) barre-list)))
- ((eq? my-code 'capo)
- (set! capo-fret (cadr my-item)))
- ((eq? my-code 'place-fret)
- (set! dot-list (cons* (cdr my-item) dot-list))))
- (parse-item (cdr mylist)))))
- ;; calculate fret-range
- (let ((maxfret 0)
- (minfret (if (> capo-fret 0) capo-fret 99)))
- (let updatemax ((fret-list dot-list))
- (if (null? fret-list)
- '()
- (let ((fretval (second (car fret-list))))
- (if (> fretval maxfret) (set! maxfret fretval))
- (if (< fretval minfret) (set! minfret fretval))
- (updatemax (cdr fret-list)))))
- (if (> maxfret fret-count)
- (set! fret-range
- (list minfret
- (let ((upfret (- (+ minfret fret-count) 1)))
- (if (> maxfret upfret) maxfret upfret)))))
- (set! capo-fret (1+ (- capo-fret minfret)))
- ; subtract fret from dots
- (set! dot-list (subtract-base-fret (- (car fret-range) 1) dot-list)))
- (acons 'fret-range fret-range
- (acons 'barre-list barre-list
- (acons 'dot-list dot-list
- (acons 'xo-list xo-list
- (acons 'capo-fret capo-fret '())))))))
+;
+; Utility functions
+;
+;
+
+(define (cons-fret new-value old-list)
+ "Put together a fret-list in the format desired by parse-string"
+ (if (eq? old-list '())
+ (list new-value)
+ (cons* new-value old-list)))
+
+(define (get-numeric-from-key keystring)
+ "Get the numeric value from a key of the form k:val"
+ (string->number (substring keystring 2 (string-length keystring))))
+
+(define (numerify mylist)
+ "Convert string values to numeric or character"
+ (if (null? mylist)
+ '()
+ (let ((numeric-value (string->number (car mylist))))
+ (if numeric-value
+ (cons* numeric-value (numerify (cdr mylist)))
+ (cons* (car (string->list (car mylist)))
+ (numerify (cdr mylist)))))))
+
+(define (stepmag mag)
+ "Calculate the font step necessary to get a desired magnification"
+ (* 6 (/ (log mag) (log 2))))
+
+(define (fret-count fret-range)
+ "Calculate the fret count for the diagram given the range of frets in the diagram."
+ (1+ (- (cdr fret-range) (car fret-range))))
(define (subtract-base-fret base-fret dot-list)
"Subtract @var{base-fret} from every fret in @var{dot-list}"
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
- ;;;; (c) 2003--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ ;;;; (c) 2003--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
+(define-public (translate-stencil stencil coordinate-pair)
+ "Translate @code{stencil} by the distances specified in
+@code{coordinate-pair}."
+ (ly:stencil-translate-axis
+ (ly:stencil-translate-axis stencil (cdr coordinate-pair) Y)
+ (car coordinate-pair) X))
+
(define-public (stack-stencils axis dir padding stils)
"Stack stencils STILS in direction AXIS, DIR, using PADDING."
(cond