]> git.donarmstrong.com Git - lilypond.git/blob - CHANGES
patch::: 1.3.32.jcn2
[lilypond.git] / CHANGES
1 1.3.32.jcn2
2 ===========
3
4 * Made some small fixes to Coriolan.
5
6 1.3.32.jcn1
7 ===========
8
9 * Removed duplicate lily/output-property-engraver.hh.
10
11 * Removed optional use of vanilla spanner in Dynamic_engraver.
12
13 * Fixed (measured) tremolo for Stem and Beam. Merged declarations
14   stem-engraver.hh and chord-tremolo-engraver.hh into their .cc
15   implementation file.  Also fixed looks of Chord tremolo, input and
16   implementation is still ugly.
17
18 * Added *.yy and *.ll to TAGS, to that tags-find-replace doesn't omit
19   parser and lexer.
20
21 1.3.31.jcn5
22 ===========
23
24 * Fixed and cleaned-up Dynamic_engraver.  Optionionally uses vanilla
25   spanner instead of Dynamic_line_spanner.
26
27 * Made gcc-2.95 compile fix in libc-extension.
28
29 * Various fixes to Coriolan, score starts to look acceptable.
30
31 1.3.31.jcn3
32 ===========
33
34 * Moved optional text of crescendo into Crescendo spanner.  Fixed horizontal
35   and vertical alignment of dynamics.
36
37 * Added new text crescendo spanners to Coriolan and made some fixes.
38   If you're using timidity, use the -EO option to prevent notes get
39   stuck.  I'm not sure whose fault this is, Lily's MIDI output may be
40   stretching the standard a bit.
41
42 1.3.30.jcn4
43 ===========
44
45 * Adjacent dynamic markings are now grouped on a horizontal line, but it's
46   not perfect yet: they're always below the staff and no horizontal spacing
47   is done.  Also, character metrics of dynamics are still not used.
48   See: input/test/crescendi.ly and input/test/dyn-line.ly
49
50 * Cleaned up Span_dynamic_performer.
51
52 1.3.31
53 ======
54 1.3.30.mb1
55 =========
56
57 * Fixed the page layout, reintroducing space for the header and
58   trying to keep piece titles on the same page as the piece.
59   The header and footer can now contain several lines.
60
61 1.3.30.jcn3
62 ===========
63
64 * Lily now also performs crescendi and decrescendi in MIDI output:
65   Span_dynamic_performer (bit scrappy).
66
67 * Added preliminary support for crescendi/decrescendi other than `hairpins',
68   eg: `cresc. poco `a poco -- -- --'
69
70 * Made MIDI tie performance fix.
71
72 1.3.30.jcn2
73 ===========
74
75 * Lily now performs absolute dynamics in MIDI output.
76
77 * Included David's comments on opus47 in TODO.
78
79 1.3.30.jcn1
80 ===========
81
82 * More Coriolan: flute-1,2; oboe-1,2; clarinet-1,2; 
83   fixes and remainder french horn-1,2; trombone-1,2;
84   fagotto-1,2; timpani; and several fixes.
85   
86 1.3.30.uu1
87 ==========
88
89 * Remove some old doco from programmer/ and put on personal homepage.
90
91 * Removed union-find from flower library.
92
93 * Only quantise tie horizontal part inside the staff.
94
95 1.3.30
96 ======
97 1.3.29.hwn1
98 ===========
99
100 * Report type errors for \property. Helps with converting 1.2 input
101
102 * Use Scheme for Align_element; fixed graceAlignPosition 
103 and removed \property alignmentReference in the process.
104
105 * Use generic properties for lyrics too.  This fixes \property
106 Lyrics.textStyle
107
108
109 * Add relative distance for constraints between non-column items.
110
111 * Automatic \marks: use "\mark ; ". The mark numbers or letters are
112 increased automatically.
113
114 * Translators now only change properties of their own context. This
115 removes the 2nd argument to Translator::get_property()
116
117 * Bugfix for Metapost mode
118
119 1.3.29.uu1
120 ==========
121
122 * Updates of glossary  (Christian Mondrup)
123
124 * Bugfix with bar number placement
125
126 * Moved links to bibliography/ and misc/ to main index.
127
128 1.3.29
129 ======
130
131 * Moved Slur-specific code from Bezier_bow to Slur and Slur_bezier_bow.
132   Slurs are now calculated just once.
133
134 * Bezier_bow gets constants from paper.  Still no sensible solution for
135   magic asymmetry gradient step constants.
136
137 * Reinstantiated tangent-controls, more flexible than ever.  You can choose
138   between area asymmetry and tangent-controls.  My guess is, tangent controls
139   will be junked in 1.3.30.
140
141 * Slur area: only look at x-gradient.
142
143 * Added credits for some symbols of as5/9 fonts.
144
145 * Bugfix: don't make almost flat slurs, change in de-uglyfy slur.  
146
147 * Bugfix: midi2ly put out recent version (ugh).
148
149 1.3.28.hwn2
150 ===========
151
152 * Bugfix: don't forget to process staffSpace and numberOfStaffLines
153 properties.
154
155 * Removed Gade score. To appear (shortly?) on Mutopia. 
156
157 * Make Bar_script_engraver look for typeVisibilityFunction (eg
158 property barNumberVisibilityFunction). Changed the names of the Scheme
159 functions to be understandable. See input/test/bar-script-visibility.ly
160
161 * rewrite of class Molecule. It has now reached the ultimate quality
162 plateau. All molecule data is now shared.
163
164 1.3.28
165 ======
166
167 * Update of the glossary by Christian Mondrup 
168
169 * Moved horn-concerto-3 out of tarball to private website, removed
170 W.A.Mozart subdirectory.
171
172 1.3.27.hwn1
173 ===========
174
175 * Bugfix: don't make giant ties if the horizontal part of tie is near
176 the center.
177
178 * Small optimizations to be a little more careful with mem usage. 
179
180 * Website change: put all examples in one directory.
181
182 * Removed Atom as a separate type.  Now use SCM, and since we use
183 function composition, Atoms are immutable, so they don't have to be
184 copied. This makes life easier, hopefully this is quicker and uses
185 less memory.
186
187 1.3.27.jcn1
188 ===========
189
190 * Bezier_bow: minimise_enclosed_area
191
192 1.3.27
193 ======
194
195 1.3.26.hwn4
196 ===========
197
198 * Tuplet-spanner slope calculation now looks better on tupletted rests
199 (patch courtesy Laurent Martelli)
200
201 * Bugfix (Staff_performer::new_instrument_str ()) check type of
202 \property "instrument"
203
204 * New mechanism for breaking lines: do not copy & prune the element
205 property list separately, but combine these steps. Dramatically
206 reduces memory usage for large scores.
207
208 1.3.27
209 ======
210 1.3.26.jcn2
211 ===========
212
213 * Bugfix: font used in volta-spanner calculation.
214
215 * Added simple selection list to webpage, inspired by sawmill.
216  
217 * Devised kludge for ascii 5 character font pitches.
218  
219 * Substitutions: interline, 1997,1998, @stack.nl and small typo fixes.
220
221 1.3.26.hwn1
222 ===========
223
224 * Plug memory leaks related to Moment:
225   - Spacing_engraver::do_pre_move_processing ()
226   - make_rational ()/make-rational
227   - Paper_column::Paper_column ()
228
229 * Plug memory leak in Paper_outputter::output_{String,Real,int}_def()
230
231 * Plug memory leak in Score_engraver::set_columns ()
232
233 * Plug memory leak in Scheme_hash_table::set()
234
235 * Plug memory leak in Score_element::molecule_extent ()
236
237 * Bugfix: don't crash if a slur doesn't span anything.
238
239 * Bugfix: don't crash if doing beams without a staff symbol.
240
241 * Generic element property setting:
242
243         \outputproperty #predicate #'symbol = #value
244
245 Will set the element property symbol to value, for any elements that
246 return true for PREDICATE.  This allows you to virtually tweak *ANY*
247 property of the output. Example in input/test/generic-output-property.ly
248
249 1.3.26
250 ======
251
252 * lilypond as as2ly: --help and --version to stdout.  Regular identify 
253   to stderr.  This fixes help2man's manpage generation.
254
255 * configure: substitute full path for perl and guile in scripts.
256
257 * Added ascii slur and volta.  There seems to be a Lily bug in volta placement.
258
259 * Bugfix: default font now user settable
260
261 * as2text: handle plain ascii font, read from stdin, you can now do:
262
263   echo "\time 4/4; g''1 g2 g4. g8" | lilypond -f as -i init-as.fly - | as2text
264
265 1.3.25.hwn1
266 ===========
267
268 * Bugfix: second half of broken ties now are displayed again.
269
270 * Bugfix: add clef to the support of 8 text in the G_8 clefs. Center
271 it horizontally on the clef.
272
273 * Added Tie_column spanner. Ties in tied chords now get proper directionsa.
274
275 * Bugfix: unbroken repeat barlines now work, eg. |:
276
277 * Added Request_iterator to make more flexible constructions possible.
278
279 1.3.25
280 ======
281 * as2text: catch missing font/character errors, added default font, set text.
282
283 * New ascii fonts and glyphs: as5 as-numeral4 as-braces9
284
285 * Ascii output, minimal support:
286   - AsciiScript Fonts: mf/*.af
287   - Init files: ly/*-as.*ly 
288   - AsciiScript translation to text: scripts/as2text.scm
289   - input/test/as.fly input/test/as1.fly
290   - Output support: lily/lily.scm
291   - Try:
292       lilypond -f as -i init-as.fly input/test/as.fly
293       as2text as.as
294
295 1.3.24.hwn1
296 ===========
297
298 * The horizontal part of ties will avoid collision with staff lines.
299
300 * Plugged memory leak: don't protect Atom function.
301
302 * Lookup cleanups. Made lots of functions static. Moved some code out
303 of Lookup.
304
305
306
307 1.3.24.hwn1
308 ===========
309
310 * Bugfix: ly2dvi.py exits succesfully when encountering --help and
311 does not delete any of the file_ly*.tex.
312
313 * Added header and footer support in ly2dvi.py
314
315 1.3.24
316 ======
317
318 * Added a ROADMAP file explaining the source directory layout.
319
320 * Minor tweak in the feta 6 and 9 numeral
321  
322 * Moved files from lib/ to flower/
323
324 * Removed Note_head_side class.
325
326 * Updated the webpage to be a little more chatty. 
327
328 * Small Local_key_engraver optimization: only lookup timing engraver once.
329
330 * Fixed dashed slurs
331
332 * Rewrite of Slur code.  Be much more picky about slur shapes. We try
333 to offset the slur instead of bending it too much
334
335 * Look at stem directions for tie direction.
336
337 * Compound multimeasure rests. Put measures_i_ variable in an element
338 property.  Made the symbol a lot wider.
339
340 * Time signature small cleanups.
341
342 1.3.22.hwn2
343 ===========
344
345 * Symbols opposite to stem (eg marcato) now get the proper glyph in up
346 version.
347
348 * Breathing marks now have a direction by default.
349
350 * Do set generic script properties.
351
352 * Also put tuplet brackets under notes.
353
354 * Score_element_info: only store origin of element, but not the path
355 to parent translators. Saves a little memory, and removes some complexity.
356
357
358 1.3.22.hwn1
359 ===========
360
361 * Autobeaming in time sigs that don't have 1/4 beats fixed.
362
363 * (De)crescendi should now work. (Thanks Michael)
364
365 * Better error reporting for conflicting time signatures.
366
367 * Line_number_engraver: output locations of note head
368 definitions. Very handy when entering complicated scores.
369
370 * Rewrote multi measure rest support: now they are entered as spanners
371 (\commandspanrequest \start "rest"). RXXXX is an abbreviation for
372
373   { \commandspanrequest \start "rest"
374     SXXXX
375     \commandspanrequest \stop "rest"
376   }
377
378 * Removed support of percent style repetitions. 
379
380 * Put texts outside the staff.
381
382 1.3.21.mb1
383 ==========
384 * Getopt bugfix: don't assert on certain errors.
385
386 * ly2dvi: Remove unnecessary space for the page headers.
387
388 * Bugfix convert-mudela
389
390 1.3.21.hwn1
391 ===========
392
393 * Bugfix in lilypond-mode.el: eval-buffering now uses file name and
394 not buffer name.
395
396 * Scrapped tupletVisibility property. Now use tupletNumberVisibility,
397 tupletBracketVisibility, with Scheme value #t, #f or 'if-no-beam.
398 \property tupletInvisible will stop all tuplet spanner creation.
399
400 * Don't go berserk if tuplet spanner is on only one column.
401
402 * Use SCMs & Smobs for Molecules & atoms.  This uses less
403 scm_(un)protect_object () calls, so the output stage should be faster.
404
405 * Added \property tupletSpannerDuration, to make multiple tuplet signs
406 with one \times.
407
408 * Some programming Errors in spacing are now caught. Lily does not
409 hang when encountering degenerate springs.
410
411 * Allow beams to start and end over rests
412
413 1.3.19.hwn2
414 ===========
415 * Fix disappearing clefs when clefs are not printed with a barline.
416
417 1.3.20.jcn2
418 ==========
419
420 * SCM properties beamHeight and beamVerticalposition now use half-spaces:
421   input/test/beam-control.fly
422 * Added \context Voice to .fly and .sly; the default \context Staff is almost
423   never what you expect
424 * Fixed decision for .sly/.fly in lilypond-mode.
425
426 1.3.19.hwn1
427 ==========
428
429 * Clean up font-metric hierarchy, use Adobe AFM code to parse AFM files.
430 Cleanup mf-to-table.py
431
432 * Fixed embarassing slur bug.
433
434 1.3.19.jcn1
435 ==========
436
437 * lilypond-mode.el: guess init file for lily-*-region, lily-mode-map bindings
438
439 1.3.18.uu2
440 ==========
441
442 * lilypond-mode.el for emacs supersedes mudela-mode.el 
443
444 * Tuplet spanners don't collide with encompassing notes. 
445
446 * Gobbled Adobe parseAFM* code, for future use.
447
448 * Big 1999 to 2000 search/replace.
449
450 * Big interline to staff_space search/replace for mf files.
451
452 * Removed Bow class, and split code into Tie and Slur
453
454 * Don't put scripts on grace notes.
455
456 * Font_metric uses SCM for name field.
457
458 * Various compilation fixes.
459
460 1.3.17.jcn2
461 ===========
462
463 * Bugfix: beams with less than one (visible) stem
464
465 * small fixes to pa.ly
466
467 1.3.17.jcn1
468 ===========
469
470 * Fixed bug that made multi-measure rest barnumber counts go wild.
471 (even more scm2int/int2scm mixups!)
472
473 * mutopia/J.S.Bach/pa.ly: organ score (for my father)
474
475 * small fix to mutopia/J.S.Bach/Duette/violino-ii.ly
476
477 1.3.17.hwn2
478 ===========
479
480 * Remove Paper_def calls in bezier-bow.cc
481
482 * Remove data members of Tuplet_spanner,  Volta_spanner
483
484 * hang_on_clef, property hangOnClef removed
485
486 * Bar::type_str_ mode into element property `glyph'. Use a Scheme
487 function to determine breaking behavior.
488
489 * More Scheme typechecking.
490
491 * Be strict about the difference between strings and symbols for conversion.
492
493 * Fixed bug that made 1st line offset to right fixed. Bugfix courtesy
494 Laurent Martelli.
495
496 * Partial French translation, courtesy Laurent Martelli.
497
498 * Small corrections in NL translation. 
499
500 1.3.17.hwn1
501 ===========
502
503 * Added mensural note heads (noteHeadStyle = "mensural") Additionally,
504 we have a longa note head.  noteHeadStyle = "harmonic" is not
505 supported anymore. (for now, that is)  
506
507 * Reference manual update. Document \properties with examples
508
509 * fix mudela-book --help
510
511 * Use element properties for Text_item::text_str_, Clef_item::symbol_,
512 Key_item::c0_position_
513
514 * Clef_engraver general cleanup. Use alists (\property
515 supportedClefTypes, clefPitches) for clef types.
516
517 * Use progress_indication () for progress. Don't include <iostream.h> directly 
518 Don't include <string.h>, <math.h> from headers.
519
520
521 1.3.16.hwn1
522 ===========
523
524 * \property stemCentered (boolean): centers stem on note head. See
525 input/test/stem-centered.ly
526
527 * input/trip.ly, small test of lots of features.
528
529 * \property Staff.collisionMergeDotted: merge equal noteheads
530 with different dot count. See input/test/collision-merge-dotted.fly
531
532 * Dotted rest bugfix 
533
534 * Don't crash if a slur does not span any notes.
535
536 * Volta repeats fixed.
537
538 * cleanup of Note_heads_engraver
539
540 * removed dots_i_ member of Dots
541
542 1.3.16.jcn1
543 ===========
544 * Fixed cross staff slurs.  It seems that cross-staff sign
545   was swapped.
546
547 1.3.15.hwn1
548 ===========
549
550 * Fixed bug in stem code.  Stem in chords works again.  Small
551 stem cleanups.
552
553 * Use element properties for Staff_symbol.
554
555 * \property sparseTies (boolean).  Only make one tie in the
556 middle for tied chords.
557
558 * Junked Directional_spanner, Column_info.
559 Directional_element now is element interface `Directional_element_interface'
560
561 * cleanup: use to_boolean () iso. gh_boolean_p && gh_bool2scm
562
563 pl 15.jcn4
564         - removed old notename2scm conversion
565         - beam-dir-algorithm through scm
566         - bfs paper-scm
567         - bf: knee-stemlengths
568
569 pl 15.jcn3
570         - moved poor man's stem arrays to scm
571         
572 pl 15.jcn2
573         - beam quanting using scm lists
574
575 pl 14.hwn1jcn1
576         - chord-name uses scm members
577         - bfs: knee with different mults, interstaff knee, auto-knee
578
579 **********
580 pl 14.hwn1
581         - specialize duration.cc for lily, move out of lib/
582         - stem cleanup
583         - more SCM typechecking
584         - stafflineleading -> staff_space
585         - bf: rod distances.
586         - junk some unused code.
587         
588 pl 13.hwn2
589         - paper/score column cleanups. Junk Score_column type
590
591 pl 13.hwn1
592         - Bezier_bow/Bezier cleanups
593         - bf: rest under beam.
594         
595 pl 13.jcn2
596         - untangled Chord_name (item) and Chord (list-of-pitches)
597         
598 pl 13.jcn1
599         - bezier-bow fix
600
601 **********
602 pl 12.hwn1
603         - polynomial.hh
604         - bf: generic properties
605         - quantise_iv () fix.
606         - bezier cleanup
607         - class Polynomial 
608         - use smobs for font metric tables/hashes.
609         - nl.po bf
610
611 **********
612 pl 11.jcn3
613         - small beam fixes (interstaff knees still broken)
614
615 pl 11.hwn1
616         - bf: dots
617         - bf: harmonic note heads
618         - revise stem, notehead, rest
619
620 pl 11.jcn2
621         - included missing scm,ly updates
622         - bf: urg to_dir () takes scm..
623         - bf's: if (Foo b = bar != 1)
624         - beam cleanup
625
626 *********
627 pl 10.uu1
628         - various small bfs
629         - bf: alignment reversed
630         - Staff_symbol_referencer -> Staff_symbol_referencer_interface
631         - bf: staccato pos
632         - Knee fixes (thanks, Jan)
633
634 pl 10.jcn2
635         - fixes for invisible beamed stems
636         - removed steminfo from properties, don't cache Stem_info
637
638 pl 10.jcn1
639         - steminfo to properties
640         - dropped internote dim for stem-beams
641
642 *********
643 pl 9.hwn1
644         - abstracting Staff_symbol_referencer to an interface.
645         - quantised_position for staccato dots.
646         - standchen fixes
647         - junk Score_element::do_{width,height}: set callbacks directly.
648         - merge Score_element, Graphical_element
649         - merge Axis_group_element, Graphical_axis_group
650         - junk pointer fields from Score_element derived classes
651         - junk obsolete do_substitute_dependency code.
652
653 **********
654
655 pl 8.hwn2
656         - staff-support for Crescendi.
657         - padding for accidentals.
658         - cascading offset callbacks
659
660 pl 8.hwn1
661         - note-head-side 
662         - naming Staff_sidify -> Side_position_interface
663
664 ***********
665
666 pl 7.mb1
667         - bf: timeSignatureStyle works again
668
669 pl 7.hwn1
670         - Dirk Latterman key/mmrest patches
671         - Offset callbacks in Dimension_cache
672         - Junked Staff_side_*
673         - Staff_sidify: interface class.
674         - prelude-{1,2} fixes.
675
676 ***********
677 pl 6.uu2
678         - bf: PS font selecting.
679
680 pl 6.uu1
681         - bf: ls-latex
682         - mudela-book --no-pictures
683         - bf: ly2dvi
684         - convert-mudela: beamAuto moment syntax. 
685
686 pl 6.jcn3
687         - fixed scm output
688
689 pl 6.jcn2
690         - half-baken ly-gulp-file in scm
691         - resurrected scm output through guile
692
693 pl 5.mb1
694         - bf: version of init.sly, init.fly
695         - Clarify necessary version of texinfo
696         - bf: texi files, minor errors and syntax compatible with 
697           older makeinfo
698
699 pl 6.jcn1
700         - bf: scm output
701
702 *******
703
704 pl 5.hwn2
705         - Bach preludes: mutopification
706         - dots are Directional_element too; use \property dotDirection
707         - moved some stuff out of Lookup
708         - bf: dots
709         - font selection mechanics changed.
710
711 pl 5.uu1
712         - bf: smob allocation (thanks David!)
713
714 pl 5.hwn1
715         - junked \shape. Now use #'margin-shape 
716         - timing: one_beat -> \property beatLength
717         - bf convert-mudela
718
719 ************
720
721 pl 4.uu1
722         - input/test/ \property fixes.
723         - gcc 2.95 fix
724
725 pl 4.hwn1
726         - Break_align_engraver,
727         break align order from  \property breakAlignOrder
728         - junked Score_priority_engraver
729         - moved Time_description into Timing_translator
730         - use properties for timing, see input/test/timing.fly
731         * removed \cadenza ; now use \property Score.timing
732         * \property measurePosition
733         * \property measureLength
734         * \property currentBarNumber
735         - Note_name_engraver , \context NoteNames
736
737
738 pl 4.jcn1
739         - junked some chord guessing code
740         - bf: lookup size (-1) for chord-name accidentals
741         - bf: ly2dvi's MFINPUTS setting
742
743 *************
744 pl 2.jcn3
745         - chords:
746           * Chord is item
747           * junked TeX hacking
748           * configurable with styled strings from scm
749           * fixes: dim, /no X, tonic != C
750
751 pl 2.jcn2
752         - chords from  scm 
753
754
755 pl 3.hwn2
756         - visibility-lambdas into default elt properties SCM.
757         - clef types in SCM
758         - verticalDirection properties now in SCM.
759
760 pl 3.hwn1
761         - move position_i_ into Staff_symbol_referencer
762         - move dir_ into Directional_element baseclass
763
764 ****************
765
766 pl 2.hwn1
767         - bf: dynamic style.
768         - prepare to move dir_ into SCM. 
769
770 pl 2.jcn2
771         - chord fixes: 
772            * inversion request: no inversion guessing for chord entry
773            * bass request: c/+b to add bass note not part of chord
774            * -dim modifier works on all thirds
775            * colon iso dash as tonic/modifier-additions separator
776            * C:m5- displays as "Cdim"
777            * C:m5-7- displays as "Co"
778
779 pl 2.jcn1
780         - moved bracket vars to params
781         - reverted broken lilypond-devel
782
783 *************
784 pl 1.uu1
785         - David's patches:
786         * mfplain.mp detection
787         * Graphical_element::common_refpoint() robuster.
788         * fixes for mudela-mode.el
789         - Dirk's patches:
790         * key signature placement,
791         * tied accidentals.
792
793 pl 1.hwn2
794         - extra-offset elt property.
795         - junked Chord_tremolo
796
797 pl 1.hwn1
798         - changed calling convention for {get,set,remove}_elt_property()
799         - rm'd some mutopia examples.
800
801 *******
802 pl 0.hwn2,1
803       - Generic properties and Property_engraver. Moved most of the
804 properties.
805
806 0.lu1
807         - resurrected midi2ly
808
809 0.jcn1
810         - bf: lyrics lexer
811         - reverted mup2ly revert
812
813 pl 3.uu1:
814         - frontport of 1.2.17 patches.
815
816 **********
817
818 1.3.0:
819
820 pl 15.hwn2
821         - loads of bfs.
822
823 pl x.jcn3
824         - another workaround: reset buffer state for scm_ftell ()
825         - workaround for broken scm_ftell ()
826
827 pl 15.hwn1
828         - \properties are now SCM s, junk Scalar type
829         - use SCM for strings in parser.
830         - Moment derived from Rational. Moment may be smobified.
831
832 pl 15.jcn4
833         - direct #... to scm parser  (Thanks to Gary Houston)