{"action":"created","issue":{"url":"https://api.github.com/repos/wbsoft/frescobaldi/issues/599","labels_url":"https://api.github.com/repos/wbsoft/frescobaldi/issues/599/labels{/name}","comments_url":"https://api.github.com/repos/wbsoft/frescobaldi/issues/599/comments","events_url":"https://api.github.com/repos/wbsoft/frescobaldi/issues/599/events","html_url":"https://github.com/wbsoft/frescobaldi/issues/599","id":55697384,"number":599,"title":"Supporting External Libraries","user":{"login":"uliska","id":1812148,"avatar_url":"https://avatars.githubusercontent.com/u/1812148?v=3","gravatar_id":"","url":"https://api.github.com/users/uliska","html_url":"https://github.com/uliska","followers_url":"https://api.github.com/users/uliska/followers","following_url":"https://api.github.com/users/uliska/following{/other_user}","gists_url":"https://api.github.com/users/uliska/gists{/gist_id}","starred_url":"https://api.github.com/users/uliska/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/uliska/subscriptions","organizations_url":"https://api.github.com/users/uliska/orgs","repos_url":"https://api.github.com/users/uliska/repos","events_url":"https://api.github.com/users/uliska/events{/privacy}","received_events_url":"https://api.github.com/users/uliska/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":21,"created_at":"2015-01-28T00:35:44Z","updated_at":"2015-01-29T14:29:19Z","closed_at":null,"body":"This issue was partially discussed in #592 but it was (rightly so) suggested to open a dedicated issue for it.\r\n\r\nThere are things an editor/IDE could do with LilyPond scores that is not in the Python domain but that works on the LilyPond side. The basic approach is somehow injecting LilyPond code in the to-be-compiled score.\r\n\r\nAs an example we have the Layout Control Modes that work that way. For this we have some LilyPond files in the `layoutcontrol` directory. But this approach works only because we don't require any code to be persistent in the LilyPond files.\r\n\r\nHowever, there are things that only work together with code inside the LilyPond files. One example (from my current interest) are annotations that can be entered in LilyPond files using my new [ScholarLY](https://github.com/openlilylib/scholarly) library. I would like to add an GUI for these annotations (annotation editor, annotation browser, context menu integration etc.) because it would be absolutely terrific to have such annotation editing integrated in Frescobaldi\r\nOf course we could include the relevant library code into Frescobaldi like we did with the Layout Control Modes. But that would mean that the files can only be compiled with Frescobaldi - which is of course an inacceptable situation.\r\n\r\nSo the idea for a solution is to \"support\" external libraries. That means Frescobaldi \"knows\" whether a user has a certain library installed and can accordingly provide functionality. So if Frescobaldi knows that, say, ScholarLY is available it can enable related functionality such as the annotation editor and otherwise hide it in some way (by removing menu items or panels, or by greying them out).\r\n\r\nThere are three approaches we could consider:\r\n\r\n* Create a dedicated \"Frescobaldi library\" and make it publicly available separately from Frescobaldi (like python-ly). This may be the cleanest solution.\r\n* Support *one* existing library, presumably openLilyLib. The problem with this is that openLilyLib is by now rather shapeless, and through its quite open attitude it's also comparably volatile.\r\n* Support arbitrary libraries. This would mean that any given functionality would depend on a given library. The responsibility for such support would be on the side of the Frescobaldi developers, not on that of the users.\r\n\r\nIt may be of interest in this context that currently we also have discussions about creating specifications for writing libraries in a consistent way. The hope is that this encourages people to upload their personal solutions and make them more generally available. The overall hope is that one day we'll have an ecosystem of extension packages similar to that of LaTeX (although much smaller of course)."},"comment":{"url":"https://api.github.com/repos/wbsoft/frescobaldi/issues/comments/72033190","html_url":"https://github.com/wbsoft/frescobaldi/issues/599#issuecomment-72033190","issue_url":"https://api.github.com/repos/wbsoft/frescobaldi/issues/599","id":72033190,"user":{"login":"PaulMorris","id":1091693,"avatar_url":"https://avatars.githubusercontent.com/u/1091693?v=3","gravatar_id":"","url":"https://api.github.com/users/PaulMorris","html_url":"https://github.com/PaulMorris","followers_url":"https://api.github.com/users/PaulMorris/followers","following_url":"https://api.github.com/users/PaulMorris/following{/other_user}","gists_url":"https://api.github.com/users/PaulMorris/gists{/gist_id}","starred_url":"https://api.github.com/users/PaulMorris/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PaulMorris/subscriptions","organizations_url":"https://api.github.com/users/PaulMorris/orgs","repos_url":"https://api.github.com/users/PaulMorris/repos","events_url":"https://api.github.com/users/PaulMorris/events{/privacy}","received_events_url":"https://api.github.com/users/PaulMorris/received_events","type":"User","site_admin":false},"created_at":"2015-01-29T14:29:19Z","updated_at":"2015-01-29T14:29:19Z","body":"Sounds good to me."}}