Robert Schmaus <[email protected]> writes: > Am 10/22/12 7:42 PM, schrieb David Kastrup: >> Robert Schmaus <[email protected]> writes: >> >>> Dear all, >>> >>> I'd like to create a scheme function with one ly:music argument which >>> does the following: insert the music expression at the current place >>> and display the source code (ie the argument passed to the function) >>> verbatim above the respective place in the score. >>> And I need to use that in a ChordNames context. >>> >>> Thus, I'd like to have the following: >>> >>> << >>> \new ChordNames { >>> \chordmode{ \fn{ c1:7.5+ } \fn{ c1:maj7.9 } } >>> } >>>>> >>> >>> should produce something like >>> >>> c1:7.5+ c1:maj7.9 >>> C7(#5) | Cmaj9 >>> >>> >>> Just passing the music expression is easy: >>> >>> fn = #(define-music-function (parser location myChord) (ly:music?) >>> #{ >>> $myChord >>> #} >>> ) >>> >>> Is it possible to add a markup part to display myChord verbatim? >> >> Tricky. You can use \displayLilyMusic (or its Scheme equivalent) for >> recreating a representation of the input, but it will not in general be >> the same as your input. >> >> Alternatively, you can try harvesting the location argument for reading >> the actual source file via >> >> -- Function: ly:input-both-locations sip >> Return input location in SIP as `(file-name first-line >> first-column last-line last-column)'. >> >> but this depends on the function argument being in a more or less direct >> rather than a computed form. >> >> Another possibility is to pass a string into the function in the first >> place and then use it both as a markup string as well as running one of >> the string-interpreting functions on it for getting interpretation from >> LilyPond.
> I looked for information on those string-interpreting functions in the > online docs and found this (at > http://lilypond.org/doc/v2.15/Documentation/notation/scheme-functions): > > --- > Function: ly:parse-string-expression parser-smob ly-code filename line > Parse the string ly-code with parser-smob. Return the contained music > expression. filename and line are optional source indicators. > --- > > That looks about right ... but I have no idea how to use it, and > cannot find anything about that in the documentation. Where would I > have to look? Information for that is thin. Inside of a music function you would use (ly:parse-string-expression (ly:parser-clone parser) "c'") or similar. You don't have useful filename and line data to supply (this is for error messages in the implementation of #{ ... #}), and you need a freshly cloned parser for parsing a string, and you clone from the parser passed to the music function. -- David Kastrup _______________________________________________ lilypond-user mailing list [email protected] https://lists.gnu.org/mailman/listinfo/lilypond-user
