lilypond-user
[Top][All Lists]
Advanced

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

Re: Automatically identify beats


From: David Kastrup
Subject: Re: Automatically identify beats
Date: Tue, 09 Oct 2018 00:47:36 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)

Thomas Morley <address@hidden> writes:

> Am Mo., 8. Okt. 2018 um 23:50 Uhr schrieb David Kastrup <address@hidden>:
>
>> ly:get-all-translators gets the _globally_ registered translators, those
>> you can access with a _string_ as reference (should be a symbol,
>> really).
>>
>> > So _registering_ them makes testI/II translators,
>>
>> No, translator creators (which are functions called with a "context"
>> argument).  Some years ago, those were actual translators without a
>> working context and LilyPond created a copy when instantiating a context
>> and then and changed the context in the copy.  That scheme was not
>> suitable for registering Scheme-defined translators/engravers so it had
>> to be changed.
>
> Well, I'm a little confused about translators and translator-creators
> (I use the hyphen to make the wording more obvious).
> Not the least reason is:
> #(pretty-print (filter-map ly:translator? (ly:get-all-translators)))
> returns '()
>
> Could it be the changed implementation details were not really
> reflected in the naming and description of those scheme-function
> related to translators, i.e.: ly:translator-whatever
> ?

Yes, it could be.  The result would have been different in 2.18.

>> Since the implementation details changed under the hood in that time
>> and basically nobody was actually affected, most of those details are
>> pretty academical and are of interest basically to answer questions
>> of the "but how could this possibly work with user-defined engravers"
>> kind.  That no longer has the simple answer "badly".  Scheme_engraver
>> is no longer listed as an engraver (which it was in 2.16 or possibly
>> even 2.18 or so), and several individual Scheme-defined engravers
>> _are_ listed (and previously weren't).  Which is a consequence of
>> changing "badly" into "it's involved".
>
> Yeah...

It's probably been easier to understand.  But the Scheme used previously
just did not map sensibly to Scheme engravers: you could not possibly
have registered them, \consists/\removes was a pretty awkward mess, and
the list of engravers contained "Scheme_engraver" (which you could
actually \consist and get a real mess) but none of the Scheme engravers.

You now get:

address@hidden:/usr/local/tmp/lilypond$ lilypond scheme-sandbox
GNU LilyPond 2.21.0
Processing `/usr/local/share/lilypond/2.21.0/ly/scheme-sandbox.ly'
Parsing...
guile> (ly:get-all-translators)
(#<Translator_creator> #<procedure Measure_counter_engraver (context)> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<procedure Merge_rests_engraver (context)> 
#<Translator_creator> #<Translator_creator> #<procedure Span_stem_engraver 
(ctx)> #<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator> 
#<Translator_creator> #<Translator_creator> #<Translator_creator>)
guile> 

namely a bunch of Translator_creator s creating C++ engravers (maybe the
print expression should at least mention _which_ C++ engraver in order
to make them look less similar) and the procedures registered as
translator-creators.  Which don't really create translators but lists,
but at the point they are called, the list is then further converted to
an actual translator.  If you did not need a closure, you could register
a list in the first place (I think) and then _that_ would be used at the
time of lookup.

In 2.18, this looks like

address@hidden:/usr/local/tmp/lilypond$ /usr/bin/lilypond scheme-sandbox
GNU LilyPond 2.18.2
Processing `/usr/share/lilypond/2.18.2/ly/scheme-sandbox.ly'
Parsing...
guile> (ly:get-all-translators)
(#<Translator Control_track_performer > #<Translator Drum_note_performer > 
#<Translator Key_performer > #<Translator Output_property_engraver > 
#<Translator Timing_translator > #<Translator Text_spanner_engraver > 
#<Translator Multi_measure_rest_engraver > #<Translator Staff_performer > 
#<Translator Pure_from_neighbor_engraver > #<Translator Note_heads_engraver > 
#<Translator Span_bar_engraver > #<Translator Tie_engraver > #<Translator 
Arpeggio_engraver > #<Translator Chord_tremolo_engraver > #<Translator 
Text_engraver > #<Translator Dynamic_performer > #<Translator 
Note_head_line_engraver > #<Translator Cue_clef_engraver > #<Translator 
Span_bar_stub_engraver > #<Translator Pitched_trill_engraver > #<Translator 
Paper_column_engraver > #<Translator Note_performer > #<Translator 
Accidental_engraver > #<Translator Grid_point_engraver > #<Translator 
Melody_engraver > #<Translator Metronome_mark_engraver > #<Translator 
Bar_number_engraver > #<Translator Hyphen_engraver > #<Translator 
Beam_performer > #<Translator Breathing_sign_engraver > #<Translator 
Piano_pedal_engraver > #<Translator Tuplet_engraver > #<Translator 
Lyric_performer > #<Translator Script_engraver > #<Translator Lyric_engraver > 
#<Translator Repeat_tie_engraver > #<Translator Engraver > #<Translator 
Auto_beam_engraver > #<Translator Repeat_acknowledge_engraver > #<Translator 
Staff_symbol_engraver > #<Translator Fingering_column_engraver > #<Translator 
Beam_engraver > #<Translator Dot_column_engraver > #<Translator 
Ligature_bracket_engraver > #<Translator Tweak_engraver > #<Translator 
Slur_engraver > #<Translator Separating_line_group_engraver > #<Translator 
Horizontal_bracket_engraver > #<Translator Page_turn_engraver > #<Translator 
Vaticana_ligature_engraver > #<Translator Dynamic_engraver > #<Translator 
Double_percent_repeat_engraver > #<Translator Axis_group_engraver > 
#<Translator Tie_performer > #<Translator System_start_delimiter_engraver > 
#<Translator Ambitus_engraver > #<Translator Scheme_engraver > #<Translator 
Staff_collecting_engraver > #<Translator Midi_control_function_performer > 
#<Translator Part_combine_engraver > #<Translator Trill_spanner_engraver > 
#<Translator Keep_alive_together_engraver > #<Translator 
Stanza_number_align_engraver > #<Translator Balloon_engraver > #<Translator 
Spacing_engraver > #<Translator Spanner_break_forbid_engraver > #<Translator 
Script_column_engraver > #<Translator Laissez_vibrer_engraver > #<Translator 
Note_spacing_engraver > #<Translator Slur_performer > #<Translator 
Tab_tie_follow_engraver > #<Translator Grid_line_span_engraver > #<Translator 
Cluster_spanner_engraver > #<Translator Grob_pq_engraver > #<Translator 
Fingering_engraver > #<Translator Stanza_number_engraver > #<Translator 
Mark_engraver > #<Translator Grace_auto_beam_engraver > #<Translator 
Ottava_spanner_engraver > #<Translator Chord_name_engraver > #<Translator 
Grace_engraver > #<Translator Grace_beam_engraver > #<Translator 
Note_name_engraver > #<Translator Rhythmic_column_engraver > #<Translator 
Parenthesis_engraver > #<Translator Bend_engraver > #<Translator 
Instrument_switch_engraver > #<Translator Drum_notes_engraver > #<Translator 
Completion_heads_engraver > #<Translator Bar_engraver > #<Translator 
Custos_engraver > #<Translator Episema_engraver > #<Translator 
Piano_pedal_performer > #<Translator Time_signature_performer > #<Translator 
Tempo_performer > #<Translator Pitch_squash_engraver > #<Translator 
Kievan_ligature_engraver > #<Translator Dynamic_align_engraver > #<Translator 
New_fingering_engraver > #<Translator Clef_engraver > #<Translator 
Figured_bass_engraver > #<Translator Slash_repeat_engraver > #<Translator 
Stem_engraver > #<Translator Collision_engraver > #<Translator 
Measure_grouping_engraver > #<Translator Completion_rest_engraver > 
#<Translator Font_size_engraver > #<Translator Instrument_name_engraver > 
#<Translator Volta_engraver > #<Translator Rest_engraver > #<Translator 
Script_row_engraver > #<Translator Glissando_engraver > #<Translator 
Span_arpeggio_engraver > #<Translator Forbid_line_break_engraver > #<Translator 
Concurrent_hairpin_engraver > #<Translator Break_align_engraver > #<Translator 
Rest_collision_engraver > #<Translator Extender_engraver > #<Translator 
Time_signature_engraver > #<Translator Piano_pedal_align_engraver > 
#<Translator Figured_bass_position_engraver > #<Translator 
Tab_staff_symbol_engraver > #<Translator Tab_note_heads_engraver > #<Translator 
Beam_collision_engraver > #<Translator Key_engraver > #<Translator 
Vertical_align_engraver > #<Translator Fretboard_engraver > #<Translator 
Footnote_engraver > #<Translator Mensural_ligature_engraver > #<Translator 
Grace_spacing_engraver > #<Translator Percent_repeat_engraver > #<Translator 
Dots_engraver > #<Translator Default_bar_line_engraver > #<Translator 
Phrasing_slur_engraver > #<Translator Ledger_line_engraver > #<Translator 
Translator >)
guile> 

You'll notice that there is a #<Translator Scheme_engraver > in there,
and (yuch!) a #<Translator Translator > (I have no idea what the latter
did).  Even a #<Translator Engraver > but no #<Translator Performer >.
Walk away slowly, make no sudden movements and avoid eye contact.

-- 
David Kastrup



reply via email to

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