--*-outline-layout:(2 (-1 -1 0 :) 0);outline-stylish-prefixes:nil -*-
-* 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
-Grep for TODO and ugh/ugr/urg.
-
-.* BUGS
-. * .ly files
-. * input/star-spangled-banner
-. * mutopia/J.S.Bach/wtk1-fugue2.ly
-. * input/test/grace
-. * fix: text on rests: ridiculous dims
-. * m=\notes\relative c''{
-
-c1 | \break
-R1*5 |
-r2 r4 \bar "||"; \break r |
-c2 c |
-}
-
-\score{
- \type StaffGroup <
- \type Staff = staffi {\m}
- \type Staff = staffii {\m}
- >
-}
-. * m=\notes\relative c'''{
- \time 2/4;
-
- R2*4 | c2 | c2 | c2 | c2 | c2 | c2 | c2 | c2 | c2 | \break
- <{R2*10}{s2 \mark "A"; }> | % Too narrow space for the first rest in
-1.1.29
- r4 r8 [g16 \p ( a ] |
-[ ) g8-. fis16 ( g ][ ) fis8-. f16 ( g ] |
-[ ) f8-. e16 ( f ][ ) e8-. es16 ( f ] |
-[ ) es8 \f c16 ( d][es8 d16 c ] |
-) d4 r8 [g16 \p ( a ] |
-[ ) g8-. fis16 ( g ][ ) fis8-. f16 ( g ] | \break
-) c2 | c2 | c2 | c2 | c2 | c2 | c2 | c2 | c2 |
-}
-
-\score{
- \m
- \paper{
- \translator{
- \ScoreContext
- SkipBars = 1;
- }
- \translator {
- \OrchestralPartStaffContext
- }
- }
-}
-. * - Look at input/test/span-bars.ly. The staff lines extend too far
- to the left on the note systems including the GrandStaff.
-. * 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
-. * tremolo stuff
-. * fix height of / collisions with lyrics (chords),
- see input/test/vertical-text.ly; input/test/repeat.ly
-. * We need feta-din*.mf files for more sizes than 10.
-. * latex bla.tex broken (titles / \lilyfooter stuff?)
-. * fix dynamics decently, ie. use kerning & ligatures.
-. * support_l_arr_ empty in staff-margin's G_staff_side_item
-. * minVerticalAlign for StaffGroups.
-. * declaring \score
-. * fix OrchestralScore and Hara-kiri (i.e., fix Coriolan)
-. * Phrasing: Indicating the textual underlay of a piece, or
-otherwise dividing a piece into phrases.
-
-There are distinct ways of specifying the first two (although at
-present, they're not properly distinguished) but no distinct way to
-specify the third. Should there be?
-
-.* TODO before 1.2
-. * Check gcc 2.8.1 compatibility
-. * make "in-between" engraver (Tie, Extender)
-. * use Drul_array for Interval.
-. * compulsory hshift
-. * ties to tie only notes of the same pitch, so that
- < a~ a,> a
-works as you'd expect it to.
-. * 1. Can Lily be told where to start numbering?
-. * do scaled fonts.
-. * profile atom smobs
-. * Try to use Killing_cons iso. Pointer_list
-. * make dependencies () a virtual function.
-. * fix Repeated_music design
-. * 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?
-
-
-
-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?
-. * convert-mudela --output
-. * Staff_margin (with a partial measure.)
-. * 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
- { \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
-
-. * 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.
-. * 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<Type> iso MACRO(Type)
-. * 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
-. * check out GCC signatures?
-. * 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:
-. * Staff_sym size
-. * default tempo.
-. * 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
-
-. * PS
-. * speed up PS code.
-. * PS lines to .eps files
-. * write custom prolog
-
-. * 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
-. * 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; <b c> } { <f as b> } >
-
-. * 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?
-. * <c f a>4 ?
-. * Viola mode?
-
- @c c g e g
- for
- c g es g,
-
- @A c g e g
- for
- cis gis e gis
-. * configure pitch_byte
-. * rest name configurable
-
-
-.* SMALLISH PROJECTS
-
-. * 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.
-
-. * midi esp.: use I32 iso int where 32 bits are needed (or assumed...)
-
-. * stafftypes: voice names/ instrument names.
-
-. * lily \tempo
-
-. * % 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.
-. * versioning stuff (cvt mudela, mudela, etc.)
-. * dynamic loading of engravers?
-.* SMOBS
-Han-Wen Nienhuys <hanwen@cs.uu.nl> 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)
-
-* 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)
+[see http://www.cs.uu.nl/people/hanwen/lily-devel/index.html]