lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Proposal: change Grob.id to Grob.output-properties


From: Urs Liska
Subject: Re: Proposal: change Grob.id to Grob.output-properties
Date: Fri, 16 Sep 2016 07:10:22 +0200
User-agent: K-9 Mail for Android


Am 16. September 2016 02:37:53 MESZ, schrieb Paul <address@hidden>:
>Hi all,  I'd like to improve on the "id" grob property but I wanted to 
>ask about the best way to migrate users if/when we made the change I'm 
>thinking of.
>

First of all, I think this is a good idea,  and it comes at a good moment, 
shortly before I/we start fiddling around with new uses for the ID in for 
example going after graphical editing features.

>The "id" property was introduced [0] in January 2012 by commit:
>   ad3a9e6531e32c4403f1bdc6d203d3c94c6d411e
>
>   Adds an ID property to grobs.
>
>This property is intended to group visual elements of a grob in a given
>backend into a container that has `id' as its id.  Currently, it is
>only
>implemented for svg, where grobs are wrapped in a <g> tag with its `id'
>   attribute set to `id.'
>
>As far as I can tell that's still all it does.  I'd like to change its 
>type from a string to an alist (well, "list?") and change its name to 
>something like "output-properties".  And make it so users could do 
>things like:
>
>   \override NoteHead.output-properties =
>     #'((id . 324) (class . "bar") (data-custom-prop . "foo"))
>
>Which would produce in the SVG output:
>
>   <g id="324" class="bar" data-custom-prop="foo"> ... </g>
>
>(The SVG spec allows arbitrary custom properties that start with
>"data-".)
>
>Looking at the code, the changes seem pretty straightforward to do.  
>Assuming we agree this is a good improvement to make, the question I 
>have is about migrating existing user files to the new property.  
>Literal strings are easy enough to handle with convert-ly:  = "abc"  
>converts to  = #'((id . "abc"))
>
>The problem is when users have assigned a procedure (that returns a 
>string) to this property, which is surely a common use case.  I don't 
>see a reasonable way to handle that with convert-ly.  Maybe it is 
>possible but seems like it would get ugly.

Doesn't a conversion to

#`(id . ,(existing-function))

suffice? Otherwise just follow Carl's suggestion. 

Best
Urs



>
>So we could make the new property's type be "string-or-list?". (We'd 
>have to define that predicate.)  Then for strings, output a deprecation
>
>warning, but go ahead and handle the string as the user expects.  That 
>would give users time to rewrite their code and then at some future 
>point we change the type to just "list?" and only support alist values.
>
>Is anyone opposed to this migration strategy?  Any better options I'm 
>missing?
>
>The motivation for the change is that lilypond-html-live-score[1] is 
>overloading the id string with multiple properties and then 
>post-processing that string (in the SVG output file) with python to 
>expand it into different properties.  But I see no reason why LilyPond 
>shouldn't be able to do this directly, saving the post-processing step.
> 
>And it would generally increase the possible uses for SVG output.
>
>(I considered introducing a separate property, but especially after 
>looking at the code, it seems best to redefine the current one.)
>
>(I suppose another option would be to just allow string values (which 
>would be output as the id) in addition to alist values, but I'm not
>sure 
>whether that would be best in the long run.)
>
>Thanks,
>-Paul
>
>[0] 
>http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=commit;h=ad3a9e6531e32c4403f1bdc6d203d3c94c6d411e
>[1] https://gitlab.com/sigmate/lilypond-html-live-score
>
>
>
>_______________________________________________
>lilypond-devel mailing list
>address@hidden
>https://lists.gnu.org/mailman/listinfo/lilypond-devel

-- 
Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail gesendet.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]