I am proposing an approach to the issue "Manual barlines overwrite repeat 
barlines,” https://code.google.com/p/lilypond/issues/detail?id=3688 .

I think this issue could be addressed by introducing the concept of bar line 
layers.  The bar lines created automatically at measure boundaries would be in 
one layer.  The bar lines created automatically by repeat structures would be 
in a layer on top of them.

  top      bar lines created specially by user (is it useful?)
  repeat   bar lines created automatically by repeat structures
  main     bar lines created with \bar x
  timing   bar lines created automatically at measure boundaries
  bottom   bar lines created specially by the user (use described later)

I’m not sure that the “timing" layer should be separate from the “main” layer, 
but let’s start with this.

The definition of the set of glyphs to use for a bar line type (normal, 
end-of-line, beginning-of-line) would need to indicate when the lower layer 
should show through.  Whether this would need to be a new option (e.g. #f) or 
just a new meaning for “” is discussed later.

The bar engraver would compose the bar types from all layers into a set of 
glyphs to assign to the BarLine.  For the example in the issue,

               norm   eol   bol
   repeat     (“.|:”,  #f, “.|:”)
   main       (“||”, “||”, “||”)
   timing     (“|”,   “|”, “|”)
   -------------------------
   result     (“.|:”, “||”, “.|:”)

BOTTOM-LAYER USE CASE: I want a bar line which

  1. does not have the problems with repeat bar lines
     that are described in the tracker

  2. looks different than an automatic bar line

  3. does not require me to pay attention to the measure
     position to avoid clobbering automatic bar lines

  4. is visible at the end of the line only

I’ve seen this in hymns where lines are broken in mid-measure with a double bar 
or a thick bar when the break corresponds to the end of a line of the poem.  I 
currently use a command \meterBar which takes care of 2-4 with some 
hoop-jumping and code that seems fragile.  It think bar line layers would solve 
the whole problem more easily.

BAR ERASURE: \bar “” currently erases automatic bar lines.  Is this important 
or just a side effect?  What should \bar “” mean in a layered scheme?

Option 1. The intended use of \bar “” is just to allow a line break; erasing an 
automatic bar line is a side effect nobody cares for.  It is fine if \bar “” is 
changed to allow a lower-layer bar to appear.  There are separate layers for 
“timing” and “main” bar lines, and \bar “” adds a transparent bar line to the 
“main” layer.  We do not need to add #f as an option in the glyph sets.

Option 2. Erasing an automatic bar line with \bar “” is useful, but it is not 
generally useful to allow one layer to hide what is under it without drawing 
anything in its place.  There is one combined layer for “timing” and “main” bar 
lines, and \bar “” overrides the type of bar in this layer (like the current 
code).  We do not need to add #f as an option in the glyph sets.

Option 3. It is generally useful to allow one layer to hide what is under it 
without drawing anything in its place, and this is what \bar “” does in a 
separate “main” layer above the “timing” layer.  This needs to be represented 
in the glyph sets.

There’s a lot more to consider, but that’s enough for now.  Thanks for your 
feedback.
— 
Dan
_______________________________________________
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to