"Create a box of the same height as the space in the current font."
(let ((m (Text_interface::interpret_markup layout props " ")))
(ly:make-stencil (ly:stencil-expr m)
+ '(1000 . -1000)
(ly:stencil-extent m X)
- '(1000 . -1000))))
+ )))
;; todo: fix negative space
(ly:warning (_"no systems found in \\score markup, does it have a \\layout block?"))
empty-stencil))))
+(def-markup-command (null layout props) ()
+ "An empty markup with extents of a single point"
+
+ point-stencil)
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; basic formatting.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(interval-length (ly:stencil-extent stc X))))
stencils))
(text-width (apply + text-widths))
+ (text-dir (chain-assoc-get 'text-direction props RIGHT))
(word-count (length stencils))
(word-space (chain-assoc-get 'word-space props))
(line-width (chain-assoc-get 'linewidth props))
(- line-width text-width)))
(else
(get-fill-space word-count line-width text-widths))))
- (fill-space-normal
- (map (lambda (x)
- (if (< x word-space)
- word-space
- x))
- fill-space))
+ (fill-space-normal
+ (map (lambda (x)
+ (if (< x word-space)
+ word-space
+ x))
+ fill-space))
(line-stencils (if (= word-count 1)
(list
point-stencil)
stencils)))
+ (if (= text-dir LEFT)
+ (set! line-stencils (reverse line-stencils)))
+
(if (null? (remove ly:stencil-empty? orig-stencils))
empty-stencil
- (stack-stencils-padding-list X RIGHT fill-space-normal line-stencils))))
+ (stack-stencils-padding-list X
+ RIGHT fill-space-normal line-stencils))))
(def-markup-command (line layout props args) (markup-list?)
"Put @var{args} in a horizontal line. The property @code{word-space}
determines the space between each markup in @var{args}."
(let*
((stencils (map (lambda (m) (interpret-markup layout props m)) args))
- (space (chain-assoc-get 'word-space props)))
+ (space (chain-assoc-get 'word-space props))
+ (text-dir (chain-assoc-get 'text-direction props RIGHT))
+ )
- (stack-stencil-line
- space
- (remove ly:stencil-empty? stencils))))
+
+ (if (= text-dir LEFT)
+ (set! stencils (reverse stencils)))
+
+
+ (stack-stencil-line
+ space
+ (remove ly:stencil-empty? stencils))))
(define (wordwrap-stencils stencils
- justify base-space line-width
- )
+ justify base-space line-width text-dir)
"Perform simple wordwrap, return stencil of each line."
+
(define space (if justify
;; justify only stretches lines.
(line (stack-stencil-line
line-word-space
- (reverse line-stencils))))
+ (if (= text-dir RIGHT)
+ (reverse line-stencils)
+ line-stencils))))
(if (pair? (cdr line-break))
(loop (cons line lines)
(cdr line-break))
- (reverse (cons line lines))
- ))
+ (begin
+ (if (= text-dir LEFT)
+ (set! line
+ (ly:stencil-translate-axis line
+ (- line-width (interval-end (ly:stencil-extent line X)))
+ X)))
+ (reverse (cons line lines))
+
+ )))
))
((baseline-skip (chain-assoc-get 'baseline-skip props))
(line-width (chain-assoc-get 'linewidth props))
(word-space (chain-assoc-get 'word-space props))
+ (text-dir (chain-assoc-get 'text-direction props RIGHT))
(lines (wordwrap-stencils
(remove ly:stencil-empty?
(map (lambda (m) (interpret-markup layout props m)) args))
- justify word-space line-width)
+ justify word-space line-width
+ text-dir)
))
(stack-lines DOWN 0.0 baseline-skip lines)))
(word-space (chain-assoc-get 'word-space props))
(para-strings (regexp-split arg "\n[ \t\n]*\n[ \t\n]*"))
+ (text-dir (chain-assoc-get 'text-direction props RIGHT))
(list-para-words (map (lambda (str)
(regexp-split str "[ \t\n]+"))
para-strings))
(interpret-markup layout props x))
words)))
(lines (wordwrap-stencils stencils
- justify word-space line-width)))
+ justify word-space
+ line-width text-dir
+ )))
lines))
"Set all font related properties (except the size) to get the default normal text font, no matter what font was used earlier."
;; ugh - latin1
(interpret-markup layout
- (cons '((font-family . roman) (font-shape . upright) (font-series . medium) (font-encoding . latin1)) props)
- arg))
+ (cons '((font-family . roman) (font-shape . upright)
+ (font-series . medium) (font-encoding . latin1))
+ props)
+ arg))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; symbols.