]> git.donarmstrong.com Git - lilypond.git/blobdiff - TODO
release: 1.1.27
[lilypond.git] / TODO
diff --git a/TODO b/TODO
index 4a5d2ecba5a429a0758c9b765f56cd76718d17e1..18ca8899f6485731a0e8c6a6dd7e80fefdf16add 100644 (file)
--- a/TODO
+++ b/TODO
@@ -7,22 +7,209 @@ 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
 
-       * decimal point in \paper {}
+*In a piece such as the Zipoli piece in mutopia/... there is a stray
+`8' over every bar line when processed by LilyPond 1.1.25.
+
+TODO before 1.2
+
+       - cf'able ly2dvi  tagline.
+
+       - make ly2dvi test page.
+
+       - fix dynamics decently, ie. use kerning & ligatures.  Junk
+TeX macros.
+
+
+       - span bars. ->gallina 
+
+*******
+m=\notes\relative c'{
+\voiceone
+c1
+\mark "A"; R1*3 \mark "B";
+<{R1*3}{s1 \mark "C";}>
+}
+
+n=\notes\relative c'{
+\voicetwo
+c1 | c1 | c1 | c1 | c1 | c1 | c1 |
+}
+
+\score{ 
+    \type StaffGroup <
+       \type Staff = m <\m>
+       \type Staff = n <\n>
+    >
+
+        \paper {
+                \translator { \OrchestralScoreContext
+                        markScriptPadding = "4.0";
+               }
+        }
+}
+*********
+
+       * 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
+
+       * make a SMOB of Atom and Molecule
+
+       * sort out directory stuff.
+       - --prefix option?
+       - -I option per filetype?
+       - kpathsea?
+
+       * is \break broken? input/test/hara-kiri.ly
+
+       * fix OrchestralScore and Hara-kiri (i.e., fix Coriolan)
+
+**************
+I also found a few bugs:
+
+* The examples in input/test/bar-scripts.ly and score-bar-scripts.ly
+  don't work. The problem seems to be that you can't define a 
+  a score identifier and then use it in the \score block.
+
+
+       - make separate MF chars for endings of ledger lines, and calc rest of lines.
+
+       * support_l_arr_ empty in staff-margin's G_staff_side_item
+
+       * todo doc left/rightbeamcount
+
+
+       * doc Single_malt_grouping_item
+
+       * ly2dvi/lilypond logfile.
+
+       * remove old preformats in RPM
+
+************
+
+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.  
+
+  \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?
 
-       > I have changed Mark_engraver to use the G_... classes.
-       > My implementation has the following shortcomings at the
-       > moment.
-       > 
-       > - markScriptPadding is not supported, since G_staff_side_item does not
-       >   support padding.
-       > 
-       > - markBreakPriority is not supported. 
-       > 
-       > - Mostly, you want the marks aligned with the bar lines. I don't 
-       >   really understand how to implement that feature.
-       > 
-       > - You get lots of warnings about missing 'number' and 'Large'
+       * 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 <a'4.*2/3  d''4.*2/3 fis''4.*2/3>  [g''8 fis'' e''] d''4 |}
         and=20
@@ -33,36 +220,20 @@ grep for TODO and ugh/ugr/urg
        * sharp /flat on trills (in MIDI ??)
 
        * scm-ify \property values.
-- The direction of textual scripts ('^' or '_') is ignored.
-       * move class Lookup {} into scm
 
-       * read tfms too.
-
-       * update mi2mu for lilypond 1.1
+       * move class Lookup {} into scm
 
 BUGS:
 
-       * AAARG: Rational::Rational (double x) is broken, try:
-           Rational x = (double)0.25;
-           see 'suck me gently...'
-
        * collisions/voices \voiceone \voicetwo are broken; see 
          input/praeludium-fuga-E.ly
          mutopia/J.S.Bach/wtk1-fugue2.ly
 
-       * fix: standchen.
-
-       * fix:  cello suites
+       * fix: text on rests: rediculous dims
 
-       * fix:  text on rests: rediculous dims
-
-       * fix extender
-
-       * fix fingering 'a-5': font direction broken *again*
-
-       * fix braces
-
-       * ly2dvi barfs on linewidth = -1.
+       * ly2dvi
+         - bottomnote for ly2dvi
+         - deps for ly2dvi
 
        * fix midi output:
           - default duration?  duration must be not entered
@@ -79,13 +250,8 @@ BUGS:
        * fix height of / collisions with lyrics (chords), 
           see input/test/vertical-text.ly; input/test/repeat.ly
 
-       * repeat/volta:
-         - one volta spanner per score
-
        * latex bla.tex broken (titles / \lilyfooter stuff?)
 
-       * check/set minimum slur/tie length
-
        * msgfmt -o check?
 
        * \breathmark TeX macro 
@@ -136,19 +302,17 @@ BUGS:
        portato= \script { "portato" 0 -1 0 1 0 }
 
 STUFF
-       * uniformise recent feta contributions.
-
        * check out legal/(c) matters for scores.
 
        * check out GCC signatures?
 
        * Align_element::padding  ?
 
-       * uniformise property names.
-
-       * ydirection <-> yDirection
-
-       * typo checks on property names?
+       * 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.
@@ -177,8 +341,6 @@ STUFF
 
        * mi2mu empty staffs.
 
-       * midi_instrument -> midiInstrument
-
        * horizontal centering of dynamics 
 
        * \font\fontA=feta20.afm (.afm?)
@@ -189,8 +351,6 @@ STUFF
 
        * $DEPENDENCIES_OUTPUT support
 
-       * fix weird behaviour when .AFMs/.SCMs not found.
-
        * Xdvi zooming ?! Try to understand GS garbage collection.
                gs: Error: /undefined in draw_beam
                gs: Operand stack:
@@ -228,7 +388,7 @@ ydirection and hshift preset
        - 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?
+          * < a4 b8 > c <-- duration of c?
 
        * \tempo 4. = 90;
 
@@ -242,8 +402,6 @@ ydirection and hshift preset
 
        * add a Duration_convert member to Duration_iter to set parameters.
        Junk global duration settings. 
-       * deps for ly2dvi
 
        * minimum length second part broken tie
  
@@ -279,16 +437,13 @@ ydirection and hshift preset
        * check for groff / troff/ nroff et
 
        * more intelligent file searching
-       - make LilyPond RPM fully relocatable
 
-       * nicen examples:
-       - break-up heavily-nested score blocks
+       * make LilyPond RPM fully relocatable
 
        * disable spaces in TeX stuff
        
        * handle ^C for tmp/file creation.
 
-       
        * dots & rest collisions.
 
        * documentation
@@ -318,51 +473,46 @@ ydirection and hshift preset
 
        * integrate midi-elts from mi2mu and lily?
 
-       * score-bar-scripts
-       FMR: Free memory read:
-         * This is occurring while in:
-               Bar_column::do_substitute_dependency(Score_element*,Score_element*) [bar
-       -column.cc:29]
-               Score_element::unlink() [score-elem.cc:383]
-               Paper_score::set_breaking(const Array<Column_x_positions>&) [p-score.cc:
-       150]
-               Paper_score::calc_breaking() [p-score.cc:189]
-               Paper_score::process() [p-score.cc:203]
-               Score::run_translator(Music_output_def*) [score.cc:117]
-         * Reading 4 bytes from 0x65d3a0 in the heap.
-         * Address 0x65d3a0 is 160 bytes into a freed  block at 0x65d300 of 208 bytes.
-         * This block was allocated from:
-               malloc         [rtlib.o]
-               __builtin_new  [libgcc.a]
-               Span_score_bar::clone()const [span-score-bar.hh:20]
-               Item::copy_breakable_items() [item.cc:69]
-               Item::do_breakable_col_processing() [item.cc:89]
-               Score_element::calcalute_dependencies(int,int,void(Score_element::*)()*)
-        [score-elem.cc:171]
-         * There have been 22 frees since this block was freed from:
-               free           [rtlib.o]
-               __builtin_delete [libgcc.a]
-               Span_score_bar::~Span_score_bar() [span-score-bar.hh:18]
-               Paper_score::set_breaking(const Array<Column_x_positions>&) [p-score.cc:
-       156]
-               Paper_score::calc_breaking() [p-score.cc:189]
-               Paper_score::process() [p-score.cc:203]
-       Postprocessing elements... 
-       TeX output to score-bar-scripts.tex...
-
 
 3RD PARTY BUGS:
+****************
+/*
+ICE
+*/
+signature S {
+  int foo ();
+};
 
-       * make GCC warn about ctor that leaves member vars  uninitialised.
+signature V {
+  S * s();
+};
 
-       * redhat (v?) graphical install bomb-out?
 
-       * GNU diff 2.7: diff -rN does not see a new directory with empty file
+V*v();
+f ()
+{
+  return v( )->foo ();
+}
+
+/*
 
-       * GNU patch 2.1: <must find simple example> if patch chokes on a
-         hunk, or on allegedly unsorted hunks in a diff, it may stop 
-         without a trace of failure (create .rej file, print error or 
-         dump core) and just ignore any further diffs.
+  egcs-1.1
+
+foo.cc: In function `int f()':
+foo.cc:6: label `b' used but not defined
+*/
+void
+f ()
+{
+  bool b;
+  if (b && && b)
+        ;      
+}
+***************
+
+       * make GCC warn about ctor that leaves member vars  uninitialised.
+
+       * GNU diff 2.7: diff -rN does not see a new directory with empty file
 
        * glibc 2.0:
 
@@ -371,8 +521,6 @@ ydirection and hshift preset
 
 3RD PARTY PROJECTS:
 
-       * GNU indent: handle C++
-
        * GNU patch 
          - 'double-fix' mode: ignore identical fix, rather than suggest 
            to revert patch direction when (more or less? exactly) the same 
@@ -479,8 +627,6 @@ PROJECTS
        - quiet/ignore-version options
        - logfile output
 
-       * piano staff
-
        * elaborate Staff_side baseclass:
        - scripts
        - text
@@ -491,7 +637,6 @@ PROJECTS
        - 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)
@@ -543,8 +688,6 @@ PROJECTS
        - saving them
        - specify number of lines
 
-       * markers
-
 INPUTLANGUAGE
 
        * c4 4 4 4 for c4 c4 c4 c4?
@@ -631,13 +774,6 @@ IDEAS
 
        * move MIDI stuff (including Quantization) to a ANSI C libmidi library.
 
-       * use an embedded language: Python, Scheme
-       for:
-               - Score_elems
-               - Translators
-
-       * y -dims in internote? Staff-space? X-dimensions?
-
        * Spacing_request for manually adjusting spacing
 
        * caching breakpoints
@@ -775,3 +911,48 @@ 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<String,Identifier*>
+> 
+> by
+> 
+>      Hash_table<SCM, Identifier*>
+> 
+> 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)))
+       ((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
+***********************