I currently manage my Lilypond projects with bash scripts that piece together all of the files to build the score and parts in different editions, page sizes, etc. Here's an example.[1] The automation has many advantages, but it's very messy. I'm using files and directory structures as a substitute for variables and data structures, and as I've hacked on it to accommodate increasingly complex projects it has become more unwieldy and less flexible. Right now I'm engraving an opera for a client, which has required me to extend the bash scripts to handle things like multiple movements with different instrumentations, arias transposed to multiple keys, etc., and while it works, I'm not happy with how complicated it is.
To make things easier on myself in the future, I am starting over from scratch with Python and hindsight. I just started and haven't gotten far yet. I'm taking it slow and trying to make sure I do things "the right way" this time. Here's what I have so far, if you're interested.[2] By the way, I started using git after reading your blog posts about version control, and it has saved my life numerous times. Most recently, for the opera I mentioned, I need to add in some ornamentations to some arias for the purposes of a recording session, but these ornamentations will not be in the final publication. While adding in the ornamentations, I caught some errors that would need to be fixed for both the version with ornamentations *and* the final publication. Doing so was as simple as checking out the master branch, making the changes, checking out the ornamentations branch, and merging. Without version control I would have had to make these changes to both copies of the project in parallel, introducing the risk of discrepancy between the two versions due to human error. Mason [1] https://notabug.org/chaosmonk/untouchable-space [2] https://notabug.org/chaosmonk/lilypond-project-manager On 08/17, Urs Liska wrote: > Hi Mason, > > great that it really worked how I thought it should :-) > > May I ask what you are doing this for? > > Best > Urs > > 17. August 2019 19:25, ma...@masonhock.com schrieb: > > > Thanks Urs, > > > > Seeing how the Document and Cursor classes are used there was enough to > > put me on the right track. I've achieved what I was going for with this: > > > > %%% begin test.py %%% > > import ly.document > > import ly.indent > > > > music = '''\\new Staff << > > \\relative c' { c4 c c c } | > > > >> ''' > > > > d = ly.document.Document(music) > > c = ly.document.Cursor(d) > > i = ly.indent.Indenter() > > > > c.select_all() > > i.indent(c) > > > > print (d.plaintext()) > > %%% end test.py %%% > > > > $ python3 test.py > > \new Staff << > > \relative c' { c4 c c c } | > >> > > > > Best, > > > > Mason > > > > On 08/17, Urs Liska wrote: > > > >> Just shortly: does > >> > >> https://github.com/frescobaldi/python-ly/blob/master/ly/cli/main.py > >> > >> and > >> > >> https://github.com/frescobaldi/python-ly/blob/master/ly/cli/command.py#L116 > >> > >> help you further? I thought it would be best to look how the ly command > >> line program does it. > >> > >> Urs > >> > >> Am 17. August 2019 03:00:47 MESZ schrieb ma...@masonhock.com: > >> Hi all, > >> > >> The command line tools provided by python-ly are very > >> convenient and easy to use, but I'm finding it a little harder to wrap > >> my head around the Python module. > >> > >> For example, it is easy to automatically indent a file with > >> > >> $ ly "indent" file.ly > >> > >> or to indent the output of another command such as > >> > >> $ cat file.ly | ly "indent" > >> > >> I'd like to be able to do something similar in Python, using ly.indent > >> to indent files or (preferably) strings. It seems that ly.indent might > >> be what I want, but I'm having trouble figuring out how it works. The > >> Indenter() class, with an indent() function, is defined here,[1] but > >> I'm > >> don't understand what a cursor object is or how to create and pass one. > >> I next tried looking through Frescobaldi's code for example usage and > >> found this,[2] but I think I would need to learn more about how > >> Frescobaldi works in order to follow what's happening, which is deeper > >> than I want to go to indent a string of Lilypond code. > >> > >> Is there a simple way to use ly.indent similarly to `ly "indent"`, or > >> would I be better off invoking `ly "indent"` externally with > >> os.system()? > >> > >> Thanks, > >> > >> Mason > >> > >> [1] > >> https://github.com/frescobaldi/python-ly/blob/0d91ca2450ba01a8158f53ba05202af3e13bf78d/ly/indent.py > >> > >> [2] > >> https://github.com/frescobaldi/frescobaldi/blob/09cae764126b505dedf0182beccd78d7934b2de4/frescobaldi > >> app/indent.py > >> > >> -- > >> Diese Nachricht wurde von meinem Android-Gerät mit K-9 Mail gesendet. > >> > >> _______________________________________________ > >> lilypond-user mailing list > >> lilypond-user@gnu.org > >> https://lists.gnu.org/mailman/listinfo/lilypond-user
signature.asc
Description: PGP signature
_______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user