From ac78f5da0fe399aa66fa346297e6f0c1089220b0 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Mon, 8 Feb 1999 20:38:08 +0100 Subject: [PATCH] patch::: 1.1.28.jcn1: oudlijn vix + config pl 28.jcn1 - new outline TODO + .emacs setup --- NEWS | 3 + TODO | 1372 ++++++++++++++++----------------- VERSION | 2 +- input/bugs/staff-side-slur.ly | 18 + lily/volta-spanner.cc | 2 +- 5 files changed, 681 insertions(+), 716 deletions(-) create mode 100644 input/bugs/staff-side-slur.ly diff --git a/NEWS b/NEWS index 025a588956..195760abba 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,6 @@ +pl 28.jcn1 + - new outline TODO + .emacs setup + pl 28 pl 27.hwn2 - un-SMOB Atom. Cons and Killing_cons as simple cons replacements. diff --git a/TODO b/TODO index cbad789b41..1e6a7c44fd 100644 --- a/TODO +++ b/TODO @@ -1,721 +1,665 @@ -# -*-outline-*- -* GNU LilyPond TODO -Features you cannot find in the doco as working, should be -mentioned here. This is an assorted collection of stuff that will be -done, might be done, or is an idea that I want to think about - -Most of the items are marked in the code as well, with full explanation. -grep for TODO and ugh/ugr/urg - -** BUGS -*** .ly files -**** input/praeludium-fuga-E.ly -**** mutopia/J.S.Bach/wtk1-fugue2.ly -**** fix: text on rests: rediculous dims -*** fix midi output: -**** default duration? d - duration must be not entered explicitely on first note. -*** fix singleStaffBracket -*** \shape 1st dim skipped? -*** turn slope-damping on/off -*** c4 \! \> c4 -*** tremolo stuff -*** gallina barlines. -*** fix height of / collisions with lyrics (chords), - see input/test/vertical-text.ly; input/test/repeat.ly -*** latex bla.tex broken (titles / \lilyfooter stuff?) -*** fix dynamics decently, ie. use kerning & ligatures. -*** fix "I've been drinking too much" -*** support_l_arr_ empty in staff-margin's G_staff_side_item -*** remove old preformats in RPM -*** declaring \score -*** is \break broken? input/test/hara-kiri.ly -*** fix OrchestralScore and Hara-kiri (i.e., fix Coriolan) - -** TODO before 1.2 -*** do scaled fonts. -*** profile atom smobs -*** make ly2dvi test page. -*** Try to use Killing_cons iso. Pointer_list -*** make dependencies () a virtual function. -*** fix Repeated_music_iterator::ok() (constness.) -*** one big ly2dvi input that includes *all* tests. -*** Don't use boolean properties (0,1), instead check existence -of property. -*** store req -> element, element -> element causes for warnings -*** junk Text_def, use G_text_item in stead. -*** junk Script_def -*** fix partial measures in meaningful way. -*** fix AFM for BlueSky AFM files. -*** working notehead style. -*** add scripts to bars eg. |^"bla" -*** relative mode for mi2mu -*** uniformise recent feta contributions. -**** use SCM and Molecules for {accordeon stuff, } -**** bigger and fatter 4/4 C -*** sort out directory stuff. -**** --prefix option? -**** -I option per filetype? -**** kpathsea? -*** todo doc left/rightbeamcount -*** doc Single_malt_grouping_item -*** ly2dvi/lilypond logfile. -*** How can I specify a chord whose duration is longer than a whole note? - \type ChordNames { \chord{ A1*2-min } } - -gives me a parse error. And \times doesn't work either. I can't use -a spacer note. So it seems to be impossible to have long chords of -general length. Of course, in the example above I can use \breve. -But what if I want a chord that lasts for 3 whole notes? Or what -about 2.5 whole notes? Is there a mechanism for getting this kind of -length? - - -Why does my second extender request get junked in the following: - -\score{ -< \notes \relative c''{ - a4()b()c()d c()d()b()a } - \type Lyrics \lyrics { - foo1 __ bar2. __ _4 } -> } - -It seems that \cr and \decr don't work any more. - -\score{ - \notes{ - a \cr b \rc c } - \paper{linewidth=-1.;} -} - -Gives me - -qq.ly:3:9: warning: can't find (de)crescendo to end: - a \cr - b \rc c } - - - -Use of semicolons is still rather confusing. They are obligatory -after some types of assignments and illegal after others. +-*-outline-layout:(2 (-1 -1 0 :) 0);outline-stylish-prefixes:nil-*- - \property foo=bar illegal - foo = 3 at top level illegal - foo = 3 inside \paper obligatory - foo = \notes{ ...} top level illegal - foo = \translator{ } in \paper obligatory - -As far as I can tell, the sole accomplishment of this syntactic -irregularity is to keep the user as confused as possible. - - -I was trying to get interstaff beams to work and did this: - -\score{ -\type GrandStaff < -\type Staff=one \notes\relative c'{ - \stemup - [c8 c \translator Staff=two \stemup c c] - \translator Staff=one - \stemdown - [ b8 \translator Staff=two a8] - \translator Staff=one - c4 - } -\type Staff=two \notes{ \clef bass; s1 } -> -\paper{ - \translator{ - \GrandStaffContext - minVerticalAlign = 3.0*\staffheight; - maxVerticalAlign = 3.0*\staffheight; - } - linewidth = -1.; -} -} - -The beams are at the right angle, but they aren't in the right place. -*** fractional chord durs. -*** hang Item on Spanner -*** remove Interval dim_ from Dimension_cache and rename the struct. -*** do --safe for PS output? -*** convert-mudela --output -*** Staff_margin (with a partial measure.) -*** fix "I've been drinking too much" -*** fix pletvisibility properties: -**** bracket on/off/no-bracket-when-beam -**** num on/off/no-num-when-beam -*** fix: standchen. -*** junk backlinks? -*** junk text{sharp,flat,etc} -*** fix convert-mudela manpage -*** decimal point in \paper {} -*** { \voiceone [g''8 fis'' e''] d''4 |} - and=20 - { \voicetwo d'4 d'2.*2/3 } spacing -*** tied notes for MIDI -*** sharp /flat on trills (in MIDI ??) -*** scm-ify \property values. -*** move class Lookup {} into scm -*** collisions/voices \voiceone \voicetwo are broken; see -*** msgfmt -o check? -*** \breathmark TeX macro -*** catch GUILE errors? -*** add new glyphs to font.ly -*** formatting of input stuff. -*** \notes{ a \< b \cr } vs \notes{ a \< b \! } -*** if possible, it might be nice for a warning to appear if someone does - \translator with no name and without assigning it to an - identifier. -*** space after bars? -*** 'hinterfleisch' before bar (e.g. wtk1-fugue2)? -*** \type Voice \times 2/3 { [c8 c16 c16 c16 c16] } -*** repeat bars: need distance after ":|" and before "|:" -** Summary of minor spelling irregularities: -*** capitalization/use of underscores in property names -*** fix SkipBars -> skipBars +* GNU LilyPond TODO -*** fix marks/barnumbers/marginal notes -*** broken scripts: - lbheel = \script { "bheel" 0 0 -1 0 0 } - rbheel = \script { "bheel" 0 0 1 0 0 } - lbtoe = \script { "btoe" 0 0 -1 0 0 } - rbtoe = \script { "btoe" 0 0 1 0 0 } - lfheel = \script { "fheel" 0 0 -1 0 0 } - rfheel = \script { "fheel" 0 0 1 0 0 } - lftoe = \script { "ftoe" 0 0 -1 0 0 } - rftoe = \script { "ftoe" 0 0 1 0 0 } - - and also - - portato= \script { "portato" 0 -1 0 1 0 } -*** ly2dvi -**** bottomnote for ly2dvi -**** cf'able ly2dvi tagline. -**** deps for ly2dvi -** STUFF -*** check out legal/(c) matters for scores. -*** check out GCC signatures? -*** Align_element::padding ? -*** uniformise property names... -**** ydirection <-> yDirection -**** rather allow '_' in identifiers first (i.e. junk ^ and _), - and do y_direction? -**** typo checks on property names? -*** use streambufs and iostream - to provide IO handling for TeX stream, mudela stream, data-file. -*** seriously buffer TeX output (do profile of writing .5 mb TeX file.) -*** strip EXEs before installing -*** zip target for binary windows dist (JBR) -*** junking \skip req in lyrics -*** Language: -**** \type -> \context ? -**** \translator -> ? -**** fix \partial -**** \bla {} vs \bla ; -**** mix engraver hacking with music ? -**** \once\property KEY = VAL -**** \addtranslator, \removetranslator -**** junk ^ and _ for scripts -**** junk _ for lyrics. -**** abstract grammar. -*** percussion note heads -*** mi2mu empty staffs. -*** horizontal centering of dynamics -*** gzip RH manpage -*** stable make/config stuff -*** $DEPENDENCIES_OUTPUT support -*** Xdvi zooming ?! Try to understand GS garbage collection. - gs: Error: /undefined in draw_beam - gs: Operand stack: -*** fix vertical alignment and stafflines -*** GrandStaff needs more work -- I want a single word - `harpsichord' to the left of the grandstaff, not one on each - stave. (Organ staff -- with separate pedal -- but common - properties may be something to think about. Of course for - organ you want to be able to give stop indications on the way - through, so the \property Voice.Instrument would be a stop, - and \property GrandStaff.instrument would be PipeOrgan...) -*** revise the Score_priority_align_engraver concept. It sucks. -*** make new VoiceOne, VoiceTwo, VoiceThree contexts with -ydirection and hshift preset -*** *.yo: fix pod manpage layout legacy -*** text-items clash with stems/beams -*** --include, -I option for ly2dvi (pass on to lily) -*** fix placement of beam-less abbrev -*** \meter 3/4; - <{\voiceone cis4. cis8 cis4 | cis4 cis cis | r1 } - {\voicetwo cis,4 r r | r2. | r1 }> | + Features you cannot find in the doco as working, should be + mentioned here. This is an assorted collection of stuff that will be + done, might be done, or is an idea that I want to think about + + Most of the items are marked in the code as well, with full +explanation. + grep for TODO and ugh/ugr/urg + +.* BUGS +. * .ly files +. * input/praeludium-fuga-E.ly +. * mutopia/J.S.Bach/wtk1-fugue2.ly +. * fix: text on rests: rediculous dims +. * fix midi output: +. * default duration? + duration must be not entered explicitely on first note. +. * fix singleStaffBracket +. * \shape 1st dim skipped? +. * turn slope-damping on/off +. * c4 \! \> c4 +. * tremolo stuff +. * gallina barlines. +. * fix height of / collisions with lyrics (chords), + see input/test/vertical-text.ly; input/test/repeat.ly +. * latex bla.tex broken (titles / \lilyfooter stuff?) +. * fix dynamics decently, ie. use kerning & ligatures. +. * fix "I've been drinking too much" +. * support_l_arr_ empty in staff-margin's G_staff_side_item +. * remove old preformats in RPM +. * declaring \score +. * is \break broken? input/test/hara-kiri.ly +. * fix OrchestralScore and Hara-kiri (i.e., fix Coriolan) +.* TODO before 1.2 +. * do scaled fonts. +. * profile atom smobs +. * make ly2dvi test page. +. * Try to use Killing_cons iso. Pointer_list +. * make dependencies () a virtual function. +. * fix Repeated_music_iterator::ok() (constness.) +. * one big ly2dvi input that includes *all* tests. +. * Don't use boolean properties (0,1), instead check existence + of property. +. * store req -> element, element -> element causes for warnings +. * junk Text_def, use G_text_item instead. +. * junk Script_def +. * fix partial measures in meaningful way. +. * fix AFM for BlueSky AFM files. +. * working notehead style. +. * add scripts to bars eg. |^"bla" +. * relative mode for mi2mu +. * uniformise recent feta contributions. +. * use SCM and Molecules for {accordeon stuff, } +. * bigger and fatter 4/4 C +. * sort out directory stuff. +. * --prefix option? +. * -I option per filetype? +. * kpathsea? +. * todo doc left/rightbeamcount +. * doc Single_malt_grouping_item +. * ly2dvi/lilypond logfile. +. * How can I specify a chord whose duration is longer than a whole note? + \type ChordNames { \chord{ A1*2-min } } + + gives me a parse error. And \times doesn't work either. I can't use + a spacer note. So it seems to be impossible to have long chords of + general length. Of course, in the example above I can use \breve. + But what if I want a chord that lasts for 3 whole notes? Or what + about 2.5 whole notes? Is there a mechanism for getting this kind of + length? + + + Why does my second extender request get junked in the following: + + \score{ + < \notes \relative c''{ + a4()b()c()d c()d()b()a } + \type Lyrics \lyrics { + foo1 __ bar2. __ _4 } + > } + + It seems that \cr and \decr don't work any more. + + \score{ + \notes{ + a \cr b \rc c } + \paper{linewidth=-1.;} } -*** try to use template iso MACRO(Type) -**** NEWS: ... Musical_pitch (analogous to Duration and Rhythmic_req) - think about, analogous to pitch: - * { a4 a16 } c <-- duration of c? - * < a4 b8 > c <-- duration of c? -*** \tempo 4. = 90; -*** fix audio-items (don't use (input) requests, but copy data) -*** make sure all ex's have a mudela-version -*** do rest-collisions for Multi_measure_rests as well. -*** split error/warning in error/warning/non_fatal_error -*** add a Duration_convert member to Duration_iter to set parameters. - Junk global duration settings. -*** minimum length second part broken tie -*** en-,discouraged linebreaking: -**** handle DISALLOW < penalty > FORCE -**** discourage breaking of slurs -*** fix variable define/lookup parser global<->paper -*** fix title/instrument placements; see input/test/title.ly -*** <\voiceone c4. \voicetwo c4> -*** add full cello suites to web site (kom op, Maarten!) -*** Rethink Time_description - * \cadenza , \meter, \grouping should all be \properties -*** rename -**** measure -> bar -**** abbrev -> tremolo -**** abbreviation-beam -> (measured/unmeasured) tremolo -**** partial -> anacrouse -*** shared lib -*** robustify Beam (in case of no stems, 32nd notes) -*** decentralised spring factory -*** move paper vars into engraver properties -*** check for groff / troff/ nroff et -*** more intelligent file searching -*** make LilyPond RPM fully relocatable -*** disable spaces in TeX stuff -*** handle ^C for tmp/file creation. -*** dots & rest collisions. -*** documentation -**** introduction? -**** info? -**** LaTeX? -**** more manpages? -*** versioning for Feta -*** the warning about the negative slur/tie length appears twice - which is irritating. -*** The `3' in the meter key is a one or two pixels too thin (at 600dpi) - in the middle: -*** the bracket is ugly (wings are too parabolic, should be more circular) -*** better hshift (dots, distance, head dependent) - * clefs (AG): The "8" should appear closer to the actual clef, - touching it. -*** put errorlevel in Input class -*** junk nesting slurs -*** integrate midi-elts from mi2mu and lily? -** 3RD PARTY BUGS -*** GNU diff 2.7: diff -rN does not see a new directory with empty file -*** glibc 2.0: - f = fopen ("/dev/null", "r") - assert (feof (f)) -** 3RD PARTY PROJECTS: -*** make GCC warn about ctor that leaves member vars uninitialised. -*** GNU patch -**** 'double-fix' mode: ignore identical fix, rather than suggest - to revert patch direction when (more or less? exactly) the same - thing is fixed -** PROJECTS -*** Scripts: -**** fix position of bar number -**** stack scripts in chords: - % fingering: footing: - < a-4 c-2 g-1 > < c-\ltoe e-\lheel > -**** script-spacing -**** slur parts as a script -**** stack parameterised scripts for fingering and footing: - -*** convert-mudela: -**** automatically add a \version if not present. -**** better parsing -**** make smarter -**** convert-mudela -e empty.ly - -*** emacs mudela-mode -**** should handle block comments too. -**** handle lexer modes (\header, \melodic, \lyric) etc. -**** indentation -**** notenames? -**** fontlock: \melodic \melodic - -*** use properties for: -**** plet? -**** Staff_sym size -**** default tempo. -**** font size -**** bartypes (get rid of derived Span_bar_engravers) -**** cadenza mode? - -*** page handling: -**** PS output -**** optimal pagebreaking. - -*** Unicode support? -> man 7 unicode -**** 16 bit Strings -**** -u switch -**** detect of 16/8 bit files -**** examples to go with it. - -*** Spring_spacer: -**** write a faster Spring_spacer (without matrices if possible) -**** relate energybound to linelen unitspace fontsize etc. -**** used fixed point fp? - -*** \header -**** output header info to MIDI too. - -*** a musical dictionary. See Documentation/vocabulary-*, other - languages: -**** explanations -**** italian -**** german -**** dutch -**** swedish - .. ? - -*** chords -**** guitar chords (fret diagrams) -**** other chord name styles (american(?) style) -**** basso continuo -**** MIDI output? - -*** Debug logs: -**** derive lily_stream, Dstream, texstream from ostream? -**** indentable stream as baseclass for TeX stream, lily stream, Dstream. -**** use dstream feature in mi2mu -**** integrate IO checking into stream class - -*** input converters -**** NIFF? -**** ABC? -**** SMDL? - -*** add to MIDI output: -**** tempo change -**** ornaments (and trills?) -**** repeat/volta -**** slurs -**** accents -**** dynamics -**** account for rhythmic position in measure -**** etc. - -*** grace notes -**** make separate class for Grace_*_engravers - (which is at Voice_gravs level) -**** make encapsulated spacing problems. - -*** accidentals per Voice_group - -*** Output class, handles : (smallish) -**** help text /(c) notice? -**** version line -**** warning /errors/progress -**** abort on error/warning; exit status -**** quiet/ignore-version options -**** logfile output - -*** elaborate Staff_side baseclass: -**** scripts -**** text -**** slur start/end - -*** PS -**** speed up PS code. -**** PS lines to .eps files -**** write custom prolog - -*** Output an output format independent (ofi) typeset file; and - make ofi2 TeX, MusiXTex, Display PostScript, PostScript, - Ascii... interpreters. (difficult) - -**** NIFF ? -**** Common Music Notation -**** PostScript output (esp. Beams, Slurs, etc) -**** Move all Score_elems, into libmutype.a -**** SGML - -*** Documentation -**** Doc (C) stuff of sheet music -**** a better format? SGML? TeX? Info? -**** a better tutorial - -*** more spanners (smallish) -**** Glissando -**** trill - -*** Rewrite Stem, Beam and Rhythmic_grouping (hairy) -**** [c8. c32 c32] - **** doc on Rhythmic_grouping -**** general shaving on Beam and Stem -**** use plet grouping -**** separate visual from rhythmic info even more -**** beams over bars - -*** lines: -**** Ledger lines, should be separate item: Ledger_lines, Ledger_lines -**** set different line sizes / thicknesses -**** beam stem showthrough, inter beam sizes (french vs german style) - -*** Collisions -**** left/right note balls should be handled by Collision: - < \multi 2; { \stem 1; } { } > - -*** Keys: -**** merge key{item} & localkey{item}? -**** spacing, national styles? - -*** Support for TAB -**** redo Notehead to allow digits as heads -**** add a \tablature {} lexer mode for easy entering - -*** should adjust stemlength for flag number. - -*** breaking: -**** caching breakpoints -**** saving them -**** specify number of lines -** INPUTLANGUAGE - -*** c4 4 4 4 for c4 c4 c4 c4? -*** neatly (and readably) expressing concurrent - voices -*** 4 ? -*** Viola mode? - - @c c g e g - for - c g es g, - - @A c g e g - for - cis gis e gis -*** relative mode for pitch entering -*** configure pitch_byte -*** rest name configurable - - -** SMALLISH PROJECTS - -*** limit memory usage; the full coriolan takes up too much resources. - -*** fix confusing naming in Engraver vs Engraver_group_engraver (context) - -*** progress when creating MIDI elts. - -*** A range for context errors (eg. mark both { and }. ) -*** lyric in staff (sharpsharp in staff, text below) - -*** half sharps/flats - -*** write Dynamic_line (to group dynamics horizontally) - -*** use Real for all y positions. - -*** half-sharps, half-flats - -*** adaptive accidental spacing. - -*** handle EOF graciously in error messages. - -*** declare notenametab? - -*** midi esp.: use I32 iso int where 32 bits are needed (or assumed...) - -*** stafftypes: voice names/ instrument names. - -*** lily \tempo - -*** C meter iso 4/4, idem for alla breve, etc. - -*** textspanner: center position - - * % toe to bheel four to five - % ^_u 4_5 - % - - % --|x-- --|x-- - % --|--- --|--- - % --|--- --|--- - (where "to" is a tiny bow) - -*** auxilliary file for caching info. - -*** Text_crescendo - -*** clean solution for staffsize in items. - -*** revise calcideal -** IDEAS -*** Output data structures of Mudela in XML/SGML. -*** create libmudela, or liblily_frontend -*** move MIDI stuff (including Quantization) to a ANSI C libmidi library. -*** Spacing_request for manually adjusting spacing -*** caching breakpoints -*** used fixedpoint arithmetic for min. energy. -*** move towards incremental algorithms. -*** far fetched language ideas -**** design meta-language like TeX and Metafont -**** programming/macros input -*** versioning stuff (cvt mudela, mudela, etc.) -*** Klavarskribo? -*** dynamic loading of engravers? -** SMOBS -Han-Wen Nienhuys writes: - -> mcmanus@IDT.NET writes: -> > > I want different C++ objects (with scheme embedded) to be linked by -> > > C++ pointers. I want to access these other objects from the Scheme -> > > code, and I want access to these pointers from C++. -> > -> > You can do this with a combination of smob's and primitive functions, -> > though it may not be be exactly what you wanted. You would have one -> > smob for each class in your application, and then you would write a -> > primitive function that would return the objects that are linked to a -> > base object. -> -> And the smob and the C++ class are interlinked? Like -> -> class Foo_class { -> Foo_smob *smob_ptr_; -> } -> -> struct Foo_smob { -> Foo_class *class_ptr_ -> } - -Usually you can get away without having this interlinked structure. -One piece of information you need when exporting objects to scheme is -the smob tag for your class. You might store this value (a long) into -a class static variable, or a file static variable. I'll use a class -static variable in this example. - -I typically use code that works like this (untested code ahead): - -class Foo_class { - static long *Foo_smob_tag; - SCM obj; // representation as a scheme object, description comes later -} - -// call this once on startup -void init_Foo_class { - static scm_smobfuns type_rec; - - type_rec.mark = foo_mark; - type_rec.free = foo_free; - type_rec.print = foo_display; - type_rec.equalp = 0; - Foo_class::Foo_smob_tag = new int(scm_new_smob(type_rec)); -} - -When you want to export an object to scheme, you put a pointer to the -object itself in the cdr of the cell, and the tag in the car of the -cell. The code looks like this: - -// Is this a Foo? -static int -foo_p(SCM obj) -{ - return(SCM_NIMP(obj) && SCM_CAR(obj) == Foo_class::Foo_smob_tag); -} - -// given a Scheme representation, return, a C++ representation -static Foo_class * -foo_unbox(SCM obj) -{ - return((Foo_class*)SCM_CDR(obj)); -} - -// the SCM representation of the object is stored inside itself -// this will become useful when destructor gets called -static SCM -foo_box(Foo_class *foo) -{ - SCM_DEFER_INTS; - SCM_NEWCELL(foo->obj); - SCM_SETCAR(foo->obj, Foo_class::Foo_smob_tag); - SCM_SETCDR(foo->obj, (SCM)foo); - SCM_ALLOW_INTS; - return foo->obj; -} - -> C++ determines life time, so what is the strategy? - -What happens now when the destructor gets called? Lets set the cdr to -NULL, and then check for that in all of the primitive functions that -use your smob. We'll call this notion 'live'; a scheme object is -'live' if the C++ representation still exists, it's dead if the C++ -object is gone. You can still have references to dead objects in -scheme code; it's just an error to use them. This idea is stolen from -Emacs's handling of buffers ('buffer-live-p' and friends). - -Add another function, foo_live_p: - -static int -foo_live_p(SCM obj) -{ - return(foo_p(obj) && SCM_CDR(obj) != NULL); -} - -In you destructor, you need to do: - -~Foo_class() -{ - SCM_CDR(this->obj, NULL); -} - -When writing new primitives, now just check foo_live_p(). - -I hope the above helps, - --russ - - --- -"Even if you are on the right track, you'll get run over -if you just sit there." - --Will Rogers (1879-1935) - -> I am still muddling along with integrating GUILE in LilyPond, and I -> have a question. I want to replace an existing C++ implementation of -> identifier tables by GUILE's code. I've managed to replace -> -> Hash_table -> -> by -> -> Hash_table -> -> and use interning and GUILE symbols for doing the identifier lookup. -> But I'd like to use GUILE's hash tables as well, and that's were my -> question comes in: is there an interface that allows me to iterate -> through the entries of a GUILE hash table? - -I use the following, which should definitely be provided somewhere -in guile, but isn't, AFAIK: + Gives me + + qq.ly:3:9: warning: can't find (de)crescendo to end: + a \cr + b \rc c } + + + + Use of semicolons is still rather confusing. They are obligatory + after some types of assignments and illegal after others. + + \property foo=bar illegal + foo = 3 at top level illegal + foo = 3 inside \paper obligatory + foo = \notes{ ...} top level illegal + foo = \translator{ } in \paper obligatory + + As far as I can tell, the sole accomplishment of this syntactic + irregularity is to keep the user as confused as possible. + + + I was trying to get interstaff beams to work and did this: + + \score{ + \type GrandStaff < + \type Staff=one \notes\relative c'{ + \stemup + [c8 c \translator Staff=two \stemup c c] + \translator Staff=one + \stemdown + [ b8 \translator Staff=two a8] + \translator Staff=one + c4 + } + \type Staff=two \notes{ \clef bass; s1 } + > + \paper{ + \translator{ + \GrandStaffContext + minVerticalAlign = 3.0*\staffheight; + maxVerticalAlign = 3.0*\staffheight; + } + linewidth = -1.; + } + } -(define (hash-table-for-each fn ht) - (do ((i 0 (+ 1 i))) - ((= i (vector-length ht))) - (do ((alist (vector-ref ht i) (cdr alist))) + The beams are at the right angle, but they aren't in the right place. +. * fractional chord durs. +. * hang Item on Spanner +. * remove Interval dim_ from Dimension_cache and rename the struct. +. * do --safe for PS output? +. * convert-mudela --output +. * Staff_margin (with a partial measure.) +. * fix "I've been drinking too much" + r * fix pletvisibility properties: +. * bracket on/off/no-bracket-when-beam +. * num on/off/no-num-when-beam +. * fix: standchen. +. * junk backlinks? +. * junk text{sharp,flat,etc} +. * fix convert-mudela manpage +. * decimal point in \paper {} +. * { \voiceone [g''8 fis'' e''] d''4 |} + and=20 + { \voicetwo d'4 d'2.*2/3 } spacing +. * tied notes for MIDI +. * sharp /flat on trills (in MIDI ??) +. * scm-ify \property values. +. * move class Lookup {} into scm +. * collisions/voices \voiceone \voicetwo are broken; see +. * msgfmt -o check? +. * \breathmark TeX macro +. * catch GUILE errors? +. * add new glyphs to font.ly +. * formatting of input stuff. +. * \notes{ a \< b \cr } vs \notes{ a \< b \! } +. * if possible, it might be nice for a warning to appear if someone does + \translator with no name and without assigning it to an + identifier. +. * space after bars? +. * 'hinterfleisch' before bar (e.g. wtk1-fugue2)? +. * \type Voice \times 2/3 { [c8 c16 c16 c16 c16] } +. * repeat bars: need distance after ":|" and before "|:" +.* SPELLING IRREGULARITIES +. * capitalization/use of underscores in property names +. * fix SkipBars -> skipBars +. * fix marks/barnumbers/marginal notes +. * broken scripts: + lbheel = \script { "bheel" 0 0 -1 0 0 } + rbheel = \script { "bheel" 0 0 1 0 0 } + lbtoe = \script { "btoe" 0 0 -1 0 0 } + rbtoe = \script { "btoe" 0 0 1 0 0 } + lfheel = \script { "fheel" 0 0 -1 0 0 } + rfheel = \script { "fheel" 0 0 1 0 0 } + lftoe = \script { "ftoe" 0 0 -1 0 0 } + rftoe = \script { "ftoe" 0 0 1 0 0 } + and also + portato= \script { "portato" 0 -1 0 1 0 } +. * ly2dvi +. * bottomnote for ly2dvi +. * cf'able ly2dvi tagline. +. * deps for ly2dvi +.* STUFF +. * check out legal/(c) matters for scores. +. * check out GCC signatures? +. * Align_element::padding ? +. * uniformise property names... +. * ydirection <-> yDirection +. * rather allow '_' in identifiers first (i.e. junk ^ and _), + and do y_direction? +. * typo checks on property names? +. * use streambufs and iostream + to provide IO handling for TeX stream, mudela stream, data-file. +. * seriously buffer TeX output (do profile of writing .5 mb TeX file.) +. * strip EXEs before installing +. * zip target for binary windows dist (JBR) +. * junking \skip req in lyrics +. * Language: +. * \type -> \context ? +. * \translator -> ? +. * fix \partial +. * \bla {} vs \bla ; +. * mix engraver hacking with music ? +. * \once\property KEY = VAL +. * \addtranslator, \removetranslator +. * junk ^ and _ for scripts +. * junk _ for lyrics. +. * abstract grammar. +. * percussion note heads +. * mi2mu empty staffs. +. * horizontal centering of dynamics +. * gzip RH manpage +. * stable make/config stuff +. * $DEPENDENCIES_OUTPUT support +. * Xdvi zooming ?! Try to understand GS garbage collection. + gs: Error: /undefined in draw_beam + gs: Operand stack: +. * fix vertical alignment and stafflines +. * GrandStaff needs more work -- I want a single word + `harpsichord' to the left of the grandstaff, not one on each + stave. (Organ staff -- with separate pedal -- but common + properties may be something to think about. Of course for + organ you want to be able to give stop indications on the way + through, so the \property Voice.Instrument would be a stop, + and \property GrandStaff.instrument would be PipeOrgan...) +. * revise the Score_priority_align_engraver concept. It sucks. +. * make new VoiceOne, VoiceTwo, VoiceThree contexts with + ydirection and hshift preset +. * *.yo: fix pod manpage layout legacy +. * text-items clash with stems/beams +. * --include, -I option for ly2dvi (pass on to lily) +. * fix placement of beam-less abbrev +. * \meter 3/4; + <{\voiceone cis4. cis8 cis4 | cis4 cis cis | r1 } + {\voicetwo cis,4 r r | r2. | r1 }> | + } +. * try to use template iso MACRO(Type) +. * NEWS: ... Musical_pitch (analogous to Duration and Rhythmic_req) + think about, analogous to pitch: + * { a4 a16 } c <-- duration of c? + * < a4 b8 > c <-- duration of c? +. * \tempo 4. = 90; +. * fix audio-items (don't use (input) requests, but copy data) +. * make sure all ex's have a mudela-version +. * do rest-collisions for Multi_measure_rests as well. +. * split error/warning in error/warning/non_fatal_error +. * add a Duration_convert member to Duration_iter to set parameters. + Junk global duration settings. +. * minimum length second part broken tie +. * en-,discouraged linebreaking: +. * handle DISALLOW < penalty > FORCE +. * discourage breaking of slurs +. * fix variable define/lookup parser global<->paper +. * fix title/instrument placements; see input/test/title.ly +. * <\voiceone c4. \voicetwo c4> +. * add full cello suites to web site (kom op, Maarten!) +. * Rethink Time_description + * \cadenza , \meter, \grouping should all be \properties +. * rename +. * measure -> bar +. * abbrev -> tremolo +. * abbreviation-beam -> (measured/unmeasured) tremolo +. * partial -> anacrouse +. * shared lib +. * robustify Beam (in case of no stems, 32nd notes) +. * decentralised spring factory +. * move paper vars into engraver properties +. * check for groff / troff/ nroff et +. * more intelligent file searching +. * make LilyPond RPM fully relocatable +. * disable spaces in TeX stuff +. * handle ^C for tmp/file creation. +. * dots & rest collisions. +. * documentation +. * introduction? +. * info? +. * LaTeX? +. * more manpages? +. * versioning for Feta +. * the warning about the negative slur/tie length appears twice + which is irritating. +. * The `3' in the meter key is a one or two pixels too thin (at 600dpi) + in the middle: +. * the bracket is ugly (wings are too parabolic, should be more circular) +. * better hshift (dots, distance, head dependent) + * clefs (AG): The "8" should appear closer to the actual clef, + touching it. +. * put errorlevel in Input class +. * junk nesting slurs +. * integrate midi-elts from mi2mu and lily? +.* 3RD PARTY BUGS +. * GNU diff 2.7: diff -rN does not see a new directory with empty file +. * glibc 2.0: + f = fopen ("/dev/null", "r") + assert (feof (f)) +.* 3RD PARTY PROJECTS: +. * make GCC warn about ctor that leaves member vars uninitialised. +. * GNU patch +. * 'double-fix' mode: ignore identical fix, rather than suggest + to revert patch direction when (more or less? exactly) the same + thing is fixed +.* PROJECTS +. * Scripts: +. * fix position of bar number +. * stack scripts in chords: + % fingering: footing: + < a-4 c-2 g-1 > < c-\ltoe e-\lheel > +. * script-spacing +. * slur parts as a script +. * stack parameterised scripts for fingering and footing: +. * convert-mudela: +. * automatically add a \version if not present. +. * better parsing +. * make smarter +. * convert-mudela -e empty.ly +. * emacs mudela-mode +. * should handle block comments too. +. * handle lexer modes (\header, \melodic, \lyric) etc. +. * indentation +. * notenames? +. * fontlock: \melodic \melodic +. * use properties for: +. * plet? +. * Staff_sym size +. * default tempo. +. * font size +. * bartypes (get rid of derived Span_bar_engravers) +. * cadenza mode? +. * page handling: +. * PS output +. * optimal pagebreaking. +. * Unicode support? -> man 7 unicode +. * 16 bit Strings +. * -u switch +. * detect of 16/8 bit files +. * examples to go with it. +. * Spring_spacer: +. * write a faster Spring_spacer (without matrices if possible) +. * relate energybound to linelen unitspace fontsize etc. +. * used fixed point fp? +. * \header +. * output header info to MIDI too. +. * a musical dictionary. See Documentation/vocabulary-*, other + languages: +. * explanations +. * italian +. * german +. * dutch +. * swedish + .. ? +. * chords +. * guitar chords (fret diagrams) +. * other chord name styles (american(?) style) +. * basso continuo +. * MIDI output? +. * Debug logs: +. * derive lily_stream, Dstream, texstream from ostream? +. * indentable stream as baseclass for TeX stream, lily stream, Dstream. +. * use dstream feature in mi2mu +. * integrate IO checking into stream class +. * input converters +. * NIFF? +. * ABC? +. * SMDL? +. * add to MIDI output: +. * tempo change +. * ornaments (and trills?) +. * repeat/volta +. * slurs +. * accents +. * dynamics +. * account for rhythmic position in measure +. * etc. +. * grace notes +. * make separate class for Grace_*_engravers + (which is at Voice_gravs level) +. * make encapsulated spacing problems. +. * accidentals per Voice_group +. * Output class, handles : (smallish) +. * help text /(c) notice? +. * version line +. * warning /errors/progress +. * abort on error/warning; exit status +. * quiet/ignore-version options +. * logfile output +. * elaborate Staff_side baseclass: +. * scripts +. * text +. * slur start/end +. * PS +. * speed up PS code. +. * PS lines to .eps files +. * write custom prolog +. * Output an output format independent (ofi) typeset file; and + make ofi2 TeX, MusiXTex, Display PostScript, PostScript, + Ascii... interpreters. (difficult) + +. * NIFF ? +. * Common Music Notation +. * PostScript output (esp. Beams, Slurs, etc) +. * Move all Score_elems, into libmutype.a +. * SGML +. * Documentation +. * Doc (C) stuff of sheet music +. * a better format? SGML? TeX? Info? +. * a better tutorial +. * more spanners (smallish) +. * Glissando +. * trill +. * Rewrite Stem, Beam and Rhythmic_grouping (hairy) +. * [c8. c32 c32] + * * doc on Rhythmic_grouping +. * general shaving on Beam and Stem +. * use plet grouping +. * separate visual from rhythmic info even more +. * beams over bars +. * lines: +. * Ledger lines, should be separate item: Ledger_lines, Ledger_lines +. * set different line sizes / thicknesses +. * beam stem showthrough, inter beam sizes (french vs german style) +. * Collisions +. * left/right note balls should be handled by Collision: + < \multi 2; { \stem 1; } { } > +. * Keys: +. * merge key{item} & localkey{item}? +. * spacing, national styles? +. * Support for TAB +. * redo Notehead to allow digits as heads +. * add a \tablature {} lexer mode for easy entering +. * should adjust stemlength for flag number. +. * breaking: +. * caching breakpoints +. * saving them +. * specify number of lines +.* INPUTLANGUAGE + +. * c4 4 4 4 for c4 c4 c4 c4? +. * neatly (and readably) expressing concurrent + voices +. * 4 ? +. * Viola mode? + @c c g e g + for + c g es g, + @A c g e g + for + cis gis e gis +. * relative mode for pitch entering +. * configure pitch_byte +. * rest name configurable +.* SMALLISH PROJECTS +. * limit memory usage; the full coriolan takes up too much resources. +. * fix confusing naming in Engraver vs Engraver_group_engraver (context) +. * progress when creating MIDI elts. +. * A range for context errors (eg. mark both { and }. ) +. * lyric in staff (sharpsharp in staff, text below) +. * half sharps/flats +. * write Dynamic_line (to group dynamics horizontally) +. * use Real for all y positions. +. * half-sharps, half-flats +. * adaptive accidental spacing. +. * handle EOF graciously in error messages. +. * declare notenametab? +. * midi esp.: use I32 iso int where 32 bits are needed (or assumed...) +. * stafftypes: voice names/ instrument names. +. * lily \tempo +. * C meter iso 4/4, idem for alla breve, etc. +. * textspanner: center position + + * % toe to bheel four to five + % ^_u 4_5 + % - + % --|x-- --|x-- + % --|--- --|--- + % --|--- --|--- + (where "to" is a tiny bow) +. * auxilliary file for caching info. +. * Text_crescendo +. * clean solution for staffsize in items. +. * revise calcideal +.* IDEAS +. * Output data structures of Mudela in XML/SGML. +. * create libmudela, or liblily_frontend +. * move MIDI stuff (including Quantization) to a ANSI C libmidi library. +. * Spacing_request for manually adjusting spacing +. * caching breakpoints +. * used fixedpoint arithmetic for min. energy. +. * move towards incremental algorithms. +. * far fetched language ideas +. * design meta-language like TeX and Metafont +. * programming/macros input +. * versioning stuff (cvt mudela, mudela, etc.) +. * Klavarskribo? +. * dynamic loading of engravers? +.* SMOBS +. * Han-Wen Nienhuys writes: + > mcmanus@IDT.NET writes: + > > > I want different C++ objects (with scheme embedded) to be linked by + > > > C++ pointers. I want to access these other objects from the Scheme + > > > code, and I want access to these pointers from C++. + > > + > > You can do this with a combination of smob's and primitive functions, + > > though it may not be be exactly what you wanted. You would have one + > > smob for each class in your application, and then you would write a + > > primitive function that would return the objects that are linked to a + > > base object. + > + > And the smob and the C++ class are interlinked? Like + > + > class Foo_class { + > Foo_smob *smob_ptr_; + > } + > + > struct Foo_smob { + > Foo_class *class_ptr_ + > } + Usually you can get away without having this interlinked structure. + One piece of information you need when exporting objects to scheme is + the smob tag for your class. You might store this value (a long) into + a class static variable, or a file static variable. I'll use a class + static variable in this example. + I typically use code that works like this (untested code ahead): + class Foo_class { + static long *Foo_smob_tag; + SCM obj; // representation as a scheme object, description comes later + } + // call this once on startup + void init_Foo_class { + static scm_smobfuns type_rec; + type_rec.mark = foo_mark; + type_rec.free = foo_free; + type_rec.print = foo_display; + type_rec.equalp = 0; + Foo_class::Foo_smob_tag = new int(scm_new_smob(type_rec)); + } + When you want to export an object to scheme, you put a pointer to the + object itself in the cdr of the cell, and the tag in the car of the + cell. The code looks like this: + // Is this a Foo? + static int + foo_p(SCM obj) + { + return(SCM_NIMP(obj) && SCM_CAR(obj) == Foo_class::Foo_smob_tag); + } + // given a Scheme representation, return, a C++ representation + static Foo_class * + foo_unbox(SCM obj) + { + return((Foo_class*)SCM_CDR(obj)); + } + // the SCM representation of the object is stored inside itself + // this will become useful when destructor gets called + static SCM + foo_box(Foo_class *foo) + { + SCM_DEFER_INTS; + SCM_NEWCELL(foo->obj); + SCM_SETCAR(foo->obj, Foo_class::Foo_smob_tag); + SCM_SETCDR(foo->obj, (SCM)foo); + SCM_ALLOW_INTS; + return foo->obj; + } + > C++ determines life time, so what is the strategy? + What happens now when the destructor gets called? Lets set the cdr to + NULL, and then check for that in all of the primitive functions that + use your smob. We'll call this notion 'live'; a scheme object is + 'live' if the C++ representation still exists, it's dead if the C++ + object is gone. You can still have references to dead objects in + scheme code; it's just an error to use them. This idea is stolen from + Emacs's handling of buffers ('buffer-live-p' and friends). + Add another function, foo_live_p: + static int + foo_live_p(SCM obj) + { + return(foo_p(obj) && SCM_CDR(obj) != NULL); + } + In you destructor, you need to do: + ~Foo_class() + { + SCM_CDR(this->obj, NULL); + } + When writing new primitives, now just check foo_live_p(). + I hope the above helps, + -russ + -- + "Even if you are on the right track, you'll get run over + if you just sit there." + --Will Rogers (1879-1935) +. * I am still muddling along with integrating GUILE in LilyPond, and I + > have a question. I want to replace an existing C++ implementation of + > identifier tables by GUILE's code. I've managed to replace + > + > Hash_table + > + > by + > + > Hash_table + > + > and use interning and GUILE symbols for doing the identifier lookup. + > But I'd like to use GUILE's hash tables as well, and that's were my + > question comes in: is there an interface that allows me to iterate + > through the entries of a GUILE hash table? + I use the following, which should definitely be provided somewhere + in guile, but isn't, AFAIK: + (define (hash-table-for-each fn ht) + (do ((i 0 (+ 1 i))) + ((= i (vector-length ht))) + (do ((alist (vector-ref ht i) (cdr alist))) ((null? alist) #t) - (fn (car (car alist)) (cdr (car alist)))))) - -(define (hash-table-map fn ht) - (do ((i 0 (+ 1 i)) - (ret-ls '())) - ((= i (vector-length ht)) (reverse ret-ls)) - (do ((alist (vector-ref ht i) (cdr alist))) + (fn (car (car alist)) (cdr (car alist)))))) + (define (hash-table-map fn ht) + (do ((i 0 (+ 1 i)) + (ret-ls '())) + ((= i (vector-length ht)) (reverse ret-ls)) + (do ((alist (vector-ref ht i) (cdr alist))) ((null? alist) #t) - (set! ret-ls (cons (fn (car (car alist)) (cdr (car alist))) ret-ls))))) - -If you want a C version, you can run the above code through hobbit, or -tranlate it to C by hand. - --russ - - --- -"Whenever you find yourself on the side of the majority, it is time to -pause and reflect." - -- Mark Twain - - - + (set! ret-ls (cons (fn (car (car alist)) (cdr (car alist))) ret-ls))))) + If you want a C version, you can run the above code through hobbit, or + tranlate it to C by hand. + -russ + -- + "Whenever you find yourself on the side of the majority, it is time to + pause and reflect." + -- Mark Twain +* OUTLINE SETUP +.* .EMACS +;;; from outline.el +(defvar outline-font-lock-keywords + '(;; Highlight headings according to the level. + ;; must change this to allout node layout + ;;("^\\(\\*+\\)[ \t]*\\(.+\\)?[ \t]*$" + ("^\\([.]*[ ]*[*]\\)[ \t]*\\(.*\\)$" + (1 font-lock-string-face) + (2 (let ((len (- (match-end 1) (match-beginning 1)))) + (or (cdr (assq len '((1 . font-lock-function-name-face) + (2 . font-lock-keyword-face) + (3 . font-lock-comment-face)))) + font-lock-variable-name-face)) + nil t)) + ;; Highlight citations of the form [1] and [Mar94]. + ("\\[\\([A-Z][A-Za-z]+\\)*[0-9]+\\]" . font-lock-type-face)) + "Additional expressions to highlight in Outline mode.") + +(add-hook 'outline-mode-hook + (lambda () + (setq font-lock-maximum-decoration t) + (setq font-lock-maximum-decoration t) + (make-local-variable 'font-lock-defaults) + (setq font-lock-defaults '(outline-font-lock-keywords t)) + (font-lock-mode (global-font-lock-mode)))) + +(require 'allout) +(outline-init 't) diff --git a/VERSION b/VERSION index e7993396d2..660391f3d3 100644 --- a/VERSION +++ b/VERSION @@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=1 PATCH_LEVEL=28 -MY_PATCH_LEVEL= +MY_PATCH_LEVEL=jcn1 # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/input/bugs/staff-side-slur.ly b/input/bugs/staff-side-slur.ly new file mode 100644 index 0000000000..8f00ff0da0 --- /dev/null +++ b/input/bugs/staff-side-slur.ly @@ -0,0 +1,18 @@ +\score{ + \type Staff \notes\relative c''{ + \property Staff.instrument = "Toeters" + c c c c(\break + )c c c c ~\break + c c c c\break + } + \paper{ + linewidth=60.0\mm; +% \translator { \HaraKiriStaffContext } + \translator { \OrchestralScoreContext } + \translator { + \StaffContext + \consists "Staff_margin_engraver"; + } + } +} + diff --git a/lily/volta-spanner.cc b/lily/volta-spanner.cc index 970e2839d7..97cb2e4f75 100644 --- a/lily/volta-spanner.cc +++ b/lily/volta-spanner.cc @@ -81,7 +81,7 @@ Volta_spanner::do_add_processing () set_bounds (RIGHT, column_arr_.top ()); } - number_p_->style_str_ = "number"; // number-1 + number_p_->style_str_ = "number"; } Interval -- 2.39.5