-(define (wordwrap-string layout props justify arg)
- (let*
- ((baseline-skip (chain-assoc-get 'baseline-skip props))
- (line-width (chain-assoc-get 'line-width props))
- (word-space (chain-assoc-get 'word-space props))
-
- (para-strings (regexp-split
- (string-regexp-substitute "\r" "\n"
- (string-regexp-substitute "\r\n" "\n" 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))
- (para-lines (map (lambda (words)
- (let*
- ((stencils
- (remove
- ly:stencil-empty? (map
- (lambda (x)
- (interpret-markup layout props x))
- words)))
- (lines (wordwrap-stencils stencils
- justify word-space
- line-width text-dir
- )))
-
- lines))
-
- list-para-words)))
-
- (stack-lines DOWN 0.0 baseline-skip (apply append para-lines))))
-
-(define-builtin-markup-command (wordwrap-string layout props arg) (string?)
- "Wordwrap a string. Paragraphs may be separated with double newlines."
- (wordwrap-string layout props #f arg))
-
-(define-builtin-markup-command (justify-string layout props arg) (string?)
- "Justify a string. Paragraphs may be separated with double newlines"
- (wordwrap-string layout props #t arg))
-
-(define-builtin-markup-command (wordwrap-field layout props symbol) (symbol?)
- "Wordwrap the data which has been assigned to @var{symbol}."
+@lilypond[verbatim,quote]
+\\markup {
+ \\wordwrap {
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed
+ do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+ Ut enim ad minim veniam, quis nostrud exercitation ullamco
+ laboris nisi ut aliquip ex ea commodo consequat.
+ }
+}
+@end lilypond"
+ (stack-lines DOWN 0.0 baseline-skip
+ (wordwrap-internal-markup-list layout props #f args)))
+
+(define-builtin-markup-list-command (wordwrap-string-internal layout props justify arg)
+ (boolean? string?)
+ ((line-width)
+ (word-space)
+ (text-direction RIGHT))
+ "Internal markup list command used to define @code{\\justify-string} and
+@code{\\wordwrap-string}."
+ (let* ((para-strings (regexp-split
+ (string-regexp-substitute
+ "\r" "\n"
+ (string-regexp-substitute "\r\n" "\n" arg))
+ "\n[ \t\n]*\n[ \t\n]*"))
+ (list-para-words (map (lambda (str)
+ (regexp-split str "[ \t\n]+"))
+ para-strings))
+ (para-lines (map (lambda (words)
+ (let* ((stencils
+ (remove ly:stencil-empty?
+ (map (lambda (x)
+ (interpret-markup layout props x))
+ words))))
+ (wordwrap-stencils stencils
+ justify word-space
+ line-width text-direction)))
+ list-para-words)))
+ (apply append para-lines)))
+
+(define-builtin-markup-command (wordwrap-string layout props arg)
+ (string?)
+ align
+ ((baseline-skip)
+ wordwrap-string-internal-markup-list)
+ "Wordwrap a string. Paragraphs may be separated with double newlines.
+
+@lilypond[verbatim,quote]
+\\markup {
+ \\override #'(line-width . 40)
+ \\wordwrap-string #\"Lorem ipsum dolor sit amet, consectetur
+ adipisicing elit, sed do eiusmod tempor incididunt ut labore
+ et dolore magna aliqua.
+
+
+ Ut enim ad minim veniam, quis nostrud exercitation ullamco
+ laboris nisi ut aliquip ex ea commodo consequat.
+
+
+ Excepteur sint occaecat cupidatat non proident, sunt in culpa
+ qui officia deserunt mollit anim id est laborum\"
+}
+@end lilypond"
+ (stack-lines DOWN 0.0 baseline-skip
+ (wordwrap-string-internal-markup-list layout props #f arg)))
+
+(define-builtin-markup-command (justify-string layout props arg)
+ (string?)
+ align
+ ((baseline-skip)
+ wordwrap-string-internal-markup-list)
+ "Justify a string. Paragraphs may be separated with double newlines
+
+@lilypond[verbatim,quote]
+\\markup {
+ \\override #'(line-width . 40)
+ \\justify-string #\"Lorem ipsum dolor sit amet, consectetur
+ adipisicing elit, sed do eiusmod tempor incididunt ut labore
+ et dolore magna aliqua.
+
+
+ Ut enim ad minim veniam, quis nostrud exercitation ullamco
+ laboris nisi ut aliquip ex ea commodo consequat.
+
+
+ Excepteur sint occaecat cupidatat non proident, sunt in culpa
+ qui officia deserunt mollit anim id est laborum\"
+}
+@end lilypond"
+ (stack-lines DOWN 0.0 baseline-skip
+ (wordwrap-string-internal-markup-list layout props #t arg)))
+
+(define-builtin-markup-command (wordwrap-field layout props symbol)
+ (symbol?)
+ align
+ ()
+ "Wordwrap the data which has been assigned to @var{symbol}.
+
+@lilypond[verbatim,quote]
+\\header {
+ title = \"My title\"
+ myText = \"Lorem ipsum dolor sit amet, consectetur adipisicing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
+ laboris nisi ut aliquip ex ea commodo consequat.\"
+}
+
+\\paper {
+ bookTitleMarkup = \\markup {
+ \\column {
+ \\fill-line { \\fromproperty #'header:title }
+ \\null
+ \\wordwrap-field #'header:myText
+ }
+ }
+}
+
+\\markup {
+ \\null
+}
+@end lilypond"