*.midi
\#*
lily-[0-9][0-9][0-9]*
+gcstat*.scm
+*.aux
+*.svg
+*.pyc
+*.log
+.htaccess
+*.tfm
+*.afm
+
-2006-11-01 Han-Wen Nienhuys <hanwen@lilypond.org>
-
- * python/midi.c:
- init running_status
-
- * python/midi.c:
- trim warning messages.
-
- * configure.in:
- strip -Werror.
-
- * input/regression/utf-8.ly:
- document utf-8 meaning of phrases.
-
- * scm/define-markup-commands.scm:
- make \caps markup default to smallCaps
-
- * lily/pango-font.cc:
- * lily/ttf.cc:
- use glyph indexing for glyph name .notdef
-
-2006-11-02 Jan Nieuwenhuizen <janneke@gnu.org>
-
- * input/regression/utf-8.ly: Fix doc to match order of language
- fonts.
-
2006-11-01 Joe Neeman <joeneeman@gmail.com>
* lily/optimal-page-breaking.cc (try_page_spacing): don't average
* flower/polynomial.cc (check_sol): no empty if bodies.
+2006-10-30 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * stepmake/stepmake/po-vars.make: Resolve.
+
+2006-10-29 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * stepmake/stepmake/po-vars.make: test change for GIT gateway.
+
+2006-10-29 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * buildscripts/git-update-changelog.py (main): write .msg and cvs
+ command.
+
+ * scm/define-grobs.scm:
+ separation-items have width
+
+ * VERSION:
+ bump version
+
+ * .gitignore:
+ * Documentation/topdocs/NEWS.tely:
+ * lily/separating-group-spanner.cc:
+ * lily/slur-engraver.cc:
+ * lily/slur-scoring.cc:
+ * scm/define-grobs.scm:
+ * input/regression/slur-clef.ly:
+ add breakableSeparationItem to extra encompass for slurs. This
+ fixes slur/clef slur/key collisions etc. Should fix #49
+
+ * lily/include/slur-scoring.hh:
+ * lily/slur-scoring.cc:
+ Use X of separation item as slur start. Fixes #120
+
+2006-10-29 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * buildscripts/git-update-changelog.py (changelog_body): don't
+ write committishes.
+
+ * lily/grob.cc: add avoid-slur
+
+2006-10-28 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * emacsclient.patch:
+ * server.el.patch:
+ move server/emacsclient to elisp/
+
+ * buildscripts/git-update-changelog.py (Commit.note_del_file):
+ apply patches too
+
+ * elisp/server.el.patch:
+ move emacs patches.
+
+ * elisp/emacsclient.patch:
+ emacsclient too.
+
+ * buildscripts/git-update-changelog.py:
+ ignore ChangeLog
+
+ * .gitignore:
+ update
+
+ * ChangeLog:
+ * buildscripts/git-update-changelog.py:
+ script to update ChangeLog with Git messages.
+
+ * lily/beam-engraver.cc:
+ * input/regression/rest-pitched-beam.ly:
+ don't set callback if staff-position set. Fixes #126.
+
+ * lily/bar-number-engraver.cc:
+ * lily/beam.cc:
+ * lily/fingering-engraver.cc:
+ * lily/grob-property.cc:
+ * lily/grob.cc:
+ * lily/include/grob.hh:
+ * lily/include/lily-guile-macros.hh:
+ * lily/mark-engraver.cc:
+ * lily/melody-engraver.cc:
+ * lily/script-column.cc:
+ * lily/tie-formatting-problem.cc:
+ * lily/tie.cc:
+ internal_get_property_data() using ly_symbol2scm()
+
+ * stepmake/stepmake/generic-targets.make:
+ create .gitignore in outdir.
+
+ * .gitignore:
+ new file.
+
+2006-10-28 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * input/test/vertical-extent.ly:
+ * python/convertrules.py (conv): verticalExtent -> VerticalAxisGroup.
+
+2006-10-28 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * stepmake/bin/add-html-footer.py (compose): remove setgcos
+
+2006-10-28 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * GNUmakefile.in (install-help2man): install-help2man target.
+
+2006-10-27 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * SConstruct (configure): Do not check for /bin/sh.
+
+2006-10-27 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * mf/GNUmakefile: explicit dependencies for emmentaler .otf-table
+ files.
+
+ * Documentation/topdocs/NEWS.tely (Top): add FretBoards example.
+
+ * input/regression/fret-boards.ly: new file.
+
+ * po/de.po: new po courtesy translation team.
+
+ * scripts/lilypond-book.py (get_option_parser): add newline to doc
+ string.
+
+2006-10-27 Mats Bengtsson <mabe@drongo.s3.kth.se>
+
+ * ly/gregorian-init.ly (neumeDemoLayout): update
+ minimumVerticalExtent -> VerticalAxisGroup #'minimum-Y-extent
+
+ * scm/define-context-properties.scm, ly/engraver-init.ly: Remove
+ obsolete verticalExtent / extraVerticalExtent / minumumVerticalExtent
+
+2006-10-27 Erlend Aasland <erlenda@gmail.com>
+
+ * GNUmakefile.in ($(tree-share-prefix)/mf-link-tree link-mf-tree):
+ Yet another build fix.
+
+2006-10-26 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * SConstruct (lilypondprefix): use sorted() for list_sort()
+ indent 4
+
+2006-10-26 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * flower/SConscript: Unit test rules.
+
+ * flower/test-std.cc: Compile fix.
+
+2006-10-26 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * python/midi.c (pymidi_parse_track): warning fixes.
+
+ * lily/dot-column.cc (struct Dot_position): initialize extremal_head_
+ include dot-column.hh
+
+2006-10-26 Graham Percival <gpermus@gmail.com>
+
+ * Documentation/user/{basic-, global}: minor changes from mailist.
+
+2006-10-26 Erlend Aasland <erlenda@gmail.com>
+
+ * scm/define-grobs.scm: trivial beautification
+
+ * lily/tie-performer.cc: no need to #include "pqueue.hh"
+
+ * lily/source-file.cc: put multibyte var inside #if clause
+
+ * scm/define-grob-interfaces.scm:
+ * scm/define-grob-properties.scm:
+ Build fix (string-fret-finger-combinations)
+
+ * Documentation/topdocs/INSTALL.texi: Remove obsolete info about
+ lexer-gcc-3.1.sh
+
+ * Documentation/user/lilypond-book.itely: Build fix.
+
+2006-10-26 Joe Neeman <joeneeman@gmail.com>
+
+ * lily/system.cc (get_paper_system):
+ * lily/paper-book.cc (systems):
+ move most of the backwards compatibility stuff into
+ Paper_book::systems
+
+ * Documentation/topdocs/NEWS.tely: add 2 entries for the
+ page breaking stuff
+
+ * Documentation/user/page.itely: remove time-scaled-music
+ bug for the Page_turn_engraver
+
+ * lily/paper-book.cc (set_system_penalty): backwards
+ compatibility (breakbefore) for the old page breaker
+
+2006-10-25 Graham Percival <gpermus@gmail.com>
+
+ * Diocumentation/user/instrument-notation.itely: added more
+ info about stanzas; thanks Geoff!
+
+ * Documentation/user/ {basic, advanced}: small fixes from
+ mailist.
+
+ * THANKS: add some bug reporters.
+
+2006-10-25 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * scm/define-context-properties.scm (all-user-translation-properties):
+ noteToFretFunction: Add.
+
+ * scm/define-grobs.scm (all-grob-descriptions): FretBoard: use
+ fret-diagram-interface (WAS: fret-board-interface). Fixes build.
+
+2006-10-23 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * flower/file-name.cc (dos_to_posix): Help std::string.copy with
+ trailing zero.
+
+ * GNUmakefile.in ($(tree-share-prefix)/mf-link-tree link-mf-tree):
+ Remove bashism in delete.
+
+2006-10-25 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * scm/define-grobs.scm (all-grob-descriptions): set finger-code.
+
+ * scm/translation-functions.scm (determine-frets-mf): flatten let*
+
+ * scm/define-context-properties.scm
+ (all-user-translation-properties): add maximumFretStretch property.
+
+ * scm/translation-functions.scm (tunings): read and use maximumFretStretch.
+
+ * lily/source-file.cc (get_counts): use multibyte variable.
+
+ * scm/translation-functions.scm (determine-frets-mf): new
+ function: compute fret numbers.
+
+ * scm/output-lib.scm (string-frets->description) new function.
+ (fret-board::calc-stencil): new function
+
+ * scm/fret-diagrams.scm (fret-diagram-verbose): update doc string.
+
+ * scm/define-grobs.scm (all-grob-descriptions): add FretBoard grob.
+
+ * lily/include/lily-guile.hh (ly_cxx_vector_to_list): new function.
+
+ * lily/tab-note-heads-engraver.cc: cleanups.
+
+ * lily/fretboard-engraver.cc: new file
+
+ * ly/engraver-init.ly: add FretBoards context
+
+2006-10-24 Joe Neeman <joeneeman@gmail.com>
+
+ * lily/grob.cc (pure_relative_y_coordinate)
+ (pure_height): use the new call_pure_function stuff
+
+ * lily/grob-property.cc (call_pure_function): wrapper for the scheme
+ call-pure-function
+
+ * lily/side-position-interface.cc (pure_y_aligned_side): add an
+ optarg
+
+ * lily/simple-closure.cc (ly_eval_simple_closure): make
+ simple-closure evaluatable from scheme
+ (evaluate_with_simple_closure): make simple-closures pure-
+ evaluatable
+
+ * lily/slur.cc (pure_outside_slur_callback): new function
+
+ * ly/paper-defaults.ly: change default blank-page-force to 2 (this
+ fits in with previous changes that made the page forces much
+ smaller)
+
+ * scm/define-grobs.scm (call-pure-function): generalise pure-Y-offset
+ and pure-Y-extent into this new function.
+ (pure-conversions-alist): add outside-slur-callback
+
+2006-10-24 Mats Bengtsson <mabe@drongo.s3.kth.se>
+
+ * Documentation/user/advanced-notation.itely (Instrument names):
+ Remove obsolete bug workaround for instrument names on piano
+ staff.
+
+2006-10-24 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * Documentation/user/lilypond-book.itely (Integrating DocBook and
+ music): patch by Bertalan Fodor for docbook.
+
+ * Documentation/topdocs/GNUmakefile (LILYPOND_BINARY): use instead
+ of $(LILYPOND). Prevents lilypond run for .txt files.
+
+ * INSTALL.txt: gitness.
+
+ * .cvsignore: update to force gitness.
+
+2006-10-23 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * lily/tuplet-bracket.cc (calc_position_and_height): robustness:
+ detect suicide in nested tuplets.
+
+2006-10-23 Werner Lemberg <wl@gnu.org>
+
+ * lily/pango-font.cc (Pango_font::pango_item_string_stencil): Fix
+ typo in argument to FT_Get_X11_Font_Format.
+
+2006-10-23 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * stepmake/stepmake/po-vars.make: more gitness.
+
+ * flower/polynomial.cc (check_sol): no empty if bodies.
+
2006-10-22 Han-Wen Nienhuys <hanwen@lilypond.org>
* stepmake/stepmake/po-vars.make: test change for GIT gateway.
わがよたれぞ つねならむ
うゐのおくや まけふこえて
あさきゆめみじ ゑひもせず
- }
+}
% "a legal song to you"
portuguese = \lyricmode {
SCM
Context_def::mark_smob (SCM smob)
{
+ ASSERT_LIVE_IS_ALLOWED();
+
Context_def *me = (Context_def *) SCM_CELL_WORD_1 (smob);
scm_gc_mark (me->description_);
if (to_boolean (get_property ("ignoreFiguredBassRest")))
{
new_event_found_ = true;
- ASSIGN_EVENT_ONCE (rest_event_, ev);
+
+ /*
+ No ASSIGN_EVENT_ONCE() ; otherwise we get warnings about
+ polyphonic rests.
+ */
+ rest_event_ = ev;
}
}
int identifier_type (SCM);
char escaped_char (char) const;
+ Lily_parser *parser_;
Keyword_table *keytable_;
SCM scopes_;
SCM start_module_;
void *lexval;
Input *lexloc;
bool is_main_input_;
-
+
Sources *sources_;
/* Scheme hash tables with (oct name acc) values, and symbol keys. */
int error_level_;
Input last_input_;
- Lily_lexer (Sources *);
+ Lily_lexer (Sources *, Lily_parser *);
Lily_lexer (Lily_lexer const &);
int yylex ();
void add_scope (SCM);
SCM set_current_scope ();
+ bool has_scope () const;
SCM remove_scope ();
void start_main_input ();
DECLARE_SCHEME_CALLBACK (layout_description, ());
+ void clear ();
void do_init_file ();
void do_yyparse ();
void parse_file (string init, string name, string out_name);
#include "lily-guile.hh"
extern bool parse_protect_global;
+extern bool parsed_objects_should_be_dead;
struct Parse_start
{
SCM ly_get_option (SCM);
SCM ly_set_option (SCM, SCM);
+bool get_program_option (const char *);
+
#endif /* SCM_OPTION_HH */
#include "lily-guile.hh"
#include "virtual-methods.hh"
+#include "warn.hh"
/*
Smobs are GUILEs mechanism of exporting C(++) objects to the Scheme
void protect_smob (SCM smob, SCM *prot_cons);
void unprotect_smob (SCM smob, SCM *prot_cons);
+extern bool parsed_objects_should_be_dead;
+
+#define ASSERT_LIVE_IS_ALLOWED() \
+ static bool passed_here_once;\
+ if (parsed_objects_should_be_dead && !passed_here_once) { \
+ programming_error (string ("Parsed object should be dead: ") + __PRETTY_FUNCTION__ ); \
+ passed_here_once = true;\
+ }
+
#endif /* SMOBS_HH */
/* A set of sourcefiles. */
class Sources
{
- Sources (Sources const &) {}
+ Sources (Sources const &);
vector<Source_file*> sourcefiles_;
- bool is_binary_;
public:
Sources ();
Source_file *get_sourcefile (char const *);
void add (Source_file *sourcefile);
void set_path (File_path *);
- void set_binary (bool);
const File_path *path_;
};
Translator *get_translator (SCM s);
Moment get_event_length (Stream_event *s);
DECLARE_UNSMOB (Translator, translator);
+
+
+/*
+ This helper is only meaningful inside listen_* methods.
+*/
+extern bool internal_event_assignment (Stream_event **old_ev, Stream_event *new_ev, const char *function);
+#define ASSIGN_EVENT_ONCE(o,n) internal_event_assignment (&o, n, __FUNCTION__)
+
+
#endif // TRANSLATOR_HH
listen_ ## m (ev); \
}
-/*
- This helper is only meaningful inside listen_* methods.
-*/
-extern bool internal_event_assignment (Stream_event **old_ev, Stream_event *new_ev, const char *function);
-#define ASSIGN_EVENT_ONCE(o,n) internal_event_assignment (&o, n, __FUNCTION__)
-
#endif /* TRANSLATOR_ICC */
(*(YYLTYPE*)lexloc)
#define YY_USER_ACTION add_lexed_char (YYLeng ());
-/*
-
-LYRICS ({AA}|{TEX})[^0-9 \t\n\f]*
-
-*/
SCM scan_fraction (string);
%x sourcefilename
%x version
-A [a-zA-Z]
+A [a-zA-Z\200-\377]
AA {A}|_
N [0-9]
AN {AA}|{N}
ANY_CHAR (.|\n)
PUNCT [?!:'`]
ACCENT \\[`'"^]
-NATIONAL [\001-\006\021-\027\031\036\200-\377]
+NATIONAL [\001-\006\021-\027\031\036]
TEX {AA}|-|{PUNCT}|{ACCENT}|{NATIONAL}
WORD {A}{AN}*
DASHED_WORD {A}({AN}|-)*
DASHED_KEY_WORD \\{DASHED_WORD}
+
+
+
ALPHAWORD {A}+
DIGIT {N}
UNSIGNED {N}+
EXTENDER __
HYPHEN --
BOM_UTF8 \357\273\277
+
%%
int i;
sscanf (YYText (), "%d", &i);
-// this->set_debug (1);
yy_pop_state ();
this->here_input ().get_source_file ()->set_line (here_input ().start (), i);
}
#include "scm-hash.hh"
#include "source-file.hh"
#include "warn.hh"
+#include "program-option.hh"
+#include "lily-parser.hh"
static Keyword_ent the_key_tab[]
= {
{0, 0}
};
-Lily_lexer::Lily_lexer (Sources *sources)
+Lily_lexer::Lily_lexer (Sources *sources, Lily_parser *parser)
{
+ parser_ = parser;
keytable_ = new Keyword_table (the_key_tab);
chordmodifier_tab_ = SCM_EOL;
pitchname_tab_stack_ = SCM_EOL;
set_current_scope ();
}
+bool
+Lily_lexer::has_scope () const
+{
+ return scm_is_pair (scopes_);
+}
SCM
Lily_lexer::remove_scope ()
void
Lily_lexer::start_main_input ()
{
- // yy_flex_debug = 1;
+ yy_flex_debug = get_program_option ("debug-lexer");
+ parser_->set_yydebug (get_program_option ("debug-parser"));
+
+
new_input (main_input_name_, sources_);
/* Do not allow \include in --safe-mode */
SCM
Lily_lexer::mark_smob (SCM s)
{
+ ASSERT_LIVE_IS_ALLOWED();
+
Lily_lexer *lexer = (Lily_lexer *) SCM_CELL_WORD_1 (s);
scm_gc_mark (lexer->chordmodifier_tab_);
+ if (lexer->parser_)
+ scm_gc_mark (lexer->parser_->self_scm ());
scm_gc_mark (lexer->pitchname_tab_stack_);
scm_gc_mark (lexer->start_module_);
return lexer->scopes_;
exit (2);
}
+
+ bool error = false;
if ((file_name != "-") && file_name.empty ())
{
warning (_f ("can't find file: `%s'", file));
- scm_throw (ly_symbol2scm ("ly-file-failed"),
- scm_list_1 (scm_makfrom0str (file_name.c_str ())));
+ error = true;
}
else
{
parser->parse_file (init, file_name, out_file);
- bool error = parser->error_level_;
+ error = parser->error_level_;
+ parser->clear ();
parser->unprotect ();
- if (error)
- /* TODO: pass renamed input file too. */
- scm_throw (ly_symbol2scm ("ly-file-failed"),
- scm_list_1 (scm_makfrom0str (file_name.c_str ())));
}
+
+ /*
+ outside the if-else to ensure cleanup fo Sources object,
+ */
+ if (error)
+ /* TODO: pass renamed input file too. */
+ scm_throw (ly_symbol2scm ("ly-file-failed"),
+ scm_list_1 (scm_makfrom0str (file_name.c_str ())));
+
return SCM_UNSPECIFIED;
}
smobify_self ();
- lexer_ = new Lily_lexer (sources_);
+ lexer_ = new Lily_lexer (sources_, this);
lexer_->unprotect ();
}
lexer_->main_input_name_ = name;
message (_ ("Parsing..."));
- // progress_indication ("\n");
set_yydebug (0);
}
error_level_ = error_level_ | lexer_->error_level_;
- lexer_ = 0;
+ clear ();
}
void
error_level_ = error_level_ | lexer_->error_level_;
}
+void
+Lily_parser::clear ()
+{
+ if (lexer_)
+ {
+ while (lexer_->has_scope ())
+ lexer_->remove_scope ();
+ }
+
+ lexer_ = 0;
+}
+
char const *
Lily_parser::here_str0 () const
{
}
bool parse_protect_global = true;
+bool parsed_objects_should_be_dead = false;
/* Try parsing. Upon failure return SCM_UNDEFINED.
FIXME: shouldn't we return SCM_UNSCPECIFIED -- jcn */
protected:
virtual void derived_substitute (Context *f, Context *t);
virtual void derived_mark () const;
- Part_combine_iterator (Part_combine_iterator const &);
virtual void construct_children ();
virtual Moment pending_moment () const;
SCM split_list_;
+ Stream_event *unisono_event_;
+ Stream_event *solo_one_event_;
+ Stream_event *solo_two_event_;
+ Stream_event *mmrest_event_;
+
enum Status
{
APART,
Part_combine_iterator::Part_combine_iterator ()
{
+ mmrest_event_ = 0;
+ unisono_event_ = 0;
+ solo_two_event_ = 0;
+ solo_one_event_= 0;
+
first_iter_ = 0;
second_iter_ = 0;
split_list_ = SCM_EOL;
scm_gc_mark (first_iter_->self_scm ());
if (second_iter_)
scm_gc_mark (second_iter_->self_scm ());
+
+ Stream_event *ptrs[] = {
+ unisono_event_,
+ mmrest_event_,
+ solo_two_event_,
+ solo_one_event_,
+ 0
+ };
+ for (int i = 0; ptrs[i]; i++)
+ if (ptrs[i])
+ scm_gc_mark (ptrs[i]->self_scm ());
}
void
void
Part_combine_iterator::kill_mmrest (int in)
{
- static Stream_event *mmrest;
- if (!mmrest)
+
+ if (!mmrest_event_)
{
- mmrest = new Stream_event (ly_symbol2scm ("multi-measure-rest-event"));
- mmrest->set_property ("duration", SCM_EOL);
+ mmrest_event_ = new Stream_event (ly_symbol2scm ("multi-measure-rest-event"));
+ mmrest_event_->set_property ("duration", SCM_EOL);
+ mmrest_event_->unprotect ();
}
- handles_[in].get_outlet ()->event_source ()->broadcast (mmrest);
+ handles_[in].get_outlet ()->event_source ()->broadcast (mmrest_event_);
}
void
if (playing_state_ != SOLO1)
{
- static Stream_event *event;
- if (!event)
- event = new Stream_event (ly_symbol2scm ("solo-one-event"));
+ if (!solo_one_event_)
+ {
+ solo_one_event_ = new Stream_event (ly_symbol2scm ("solo-one-event"));
+ solo_one_event_->unprotect ();
+ }
- first_iter_->get_outlet ()->event_source ()->broadcast (event);
+ first_iter_->get_outlet ()->event_source ()->broadcast (solo_one_event_);
}
playing_state_ = SOLO1;
}
if (playing_state_ != UNISONO
&& newstate == UNISONO)
{
- static Stream_event *event;
- if (!event)
- event = new Stream_event (ly_symbol2scm ("unisono-event"));
-
+ if (!unisono_event_)
+ {
+ unisono_event_ = new Stream_event (ly_symbol2scm ("unisono-event"));
+ unisono_event_->unprotect ();
+ }
+
Context *out = (last_playing_ == SOLO2 ? second_iter_ : first_iter_)
->get_outlet ();
- out->event_source ()->broadcast (event);
+ out->event_source ()->broadcast (unisono_event_);
playing_state_ = UNISONO;
}
state_ = newstate;
if (playing_state_ != SOLO2)
{
- static Stream_event *event;
- if (!event)
- event = new Stream_event (ly_symbol2scm ("solo-two-event"));
-
- second_iter_->get_outlet ()->event_source ()->broadcast (event);
+ if (!solo_two_event_)
+ {
+ solo_two_event_ = new Stream_event (ly_symbol2scm ("solo-two-event"));
+ solo_two_event_->unprotect ();
+ }
+
+ second_iter_->get_outlet ()->event_source ()->broadcast (solo_two_event_);
playing_state_ = SOLO2;
}
}
}
/*
-* Processes a moment in an iterator, and returns whether any new music was reported.
+ Processes a moment in an iterator, and returns whether any new music
+ was reported.
*/
bool
Part_combine_iterator::try_process (Music_iterator *i, Moment m)
SCM
Prob::mark_smob (SCM smob)
{
+ ASSERT_LIVE_IS_ALLOWED();
+
Prob *system = (Prob *) SCM_CELL_WORD_1 (smob);
scm_gc_mark (system->mutable_property_alist_);
system->derived_mark ();
bool do_internal_type_checking_global;
bool strict_infinity_checking = false;
-
static SCM option_hash;
void internal_set_option (SCM var, SCM val)
do_internal_type_checking_global = to_boolean (val);
val = scm_from_bool (to_boolean (val));
}
+ else if (var == ly_symbol2scm ("debug-gc-assert-parsed-dead"))
+ {
+ parsed_objects_should_be_dead = to_boolean (val);
+ val = scm_from_bool (parsed_objects_should_be_dead);
+ }
else if (var == ly_symbol2scm ("old-relative"))
{
lily_1_8_relative = to_boolean (val);
return scm_from_bool (be_verbose_global);
}
+
+
+
LY_DEFINE (ly_get_option, "ly:get-option", 1, 0, 0, (SCM var),
"Get a global option setting.")
{
SCM_ARG1, __FUNCTION__, "symbol");
return scm_hashq_ref (option_hash, var, SCM_BOOL_F);
}
+
+
+bool
+get_program_option (const char *s)
+{
+ SCM sym = ly_symbol2scm (s);
+
+ return to_boolean (ly_get_option (sym));
+}
description.end_rods_.push_back (Rod_description (j, scm_to_double (scm_cdar (s))));
}
}
+
if (!line_starter && to_boolean (col->get_property ("keep-inside-line")))
description.keep_inside_line_ = col->extent (col, X_AXIS);
+
description.break_permission_ = col->get_property ("line-break-permission");
return description;
}
Sources::Sources ()
{
path_ = 0;
- is_binary_ = false;
}
-void
-Sources::set_binary (bool bo)
+
+Sources::Sources (Sources const &)
{
- is_binary_ = bo;
+ assert (false);
}
+
void
Sources::set_path (File_path *f)
{
}
}
-Source_file *
-Sources::get_sourcefile (char const *str0)
-{
- for (vector<Source_file*>::iterator i = sourcefiles_.begin();
- i != sourcefiles_.end (); i++)
- {
- if ((*i)->contains (str0))
- return *i;
- }
-
- return 0;
-}
-
return column_ranks_[RIGHT] - column_ranks_[LEFT];
}
-int
-Tie_configuration::column_span_length () const
-{
- return column_ranks_[RIGHT] - column_ranks_[LEFT];
-}
-
Real
Tie_configuration::distance (Tie_configuration const &a,
Tie_configuration const &b)
(void) get_grob_direction (me);
Grob *yparent = me->get_parent (Y_AXIS);
- if ((Tie_column::has_interface (yparent)
- || Semi_tie_column::has_interface (yparent))
+ if (Tie_column::has_interface (yparent)
&& unsmob_grob_array (yparent->get_object ("ties"))
&& unsmob_grob_array (yparent->get_object ("ties"))->size () > 1)
{
new_ev->self_scm ())))
{
/* extract event class from function name */
- const char *prefix = "listen_";
string ev_class = function;
+
/* This assertion fails if EVENT_ASSIGNMENT was called outside a
translator listener. Don't do that. */
+ const char *prefix = "listen_";
assert (0 == ev_class.find (prefix));
/* "listen_foo_bar" -> "foo-bar" */
}
ADD_TRANSLATOR (Translator,
- "Base class. Unused",
+ "Base class. Not instantiated.",
"",
"",
"");
}
}
-#(set-part-combine-listener partCombineListener)
-
\include "dynamic-scripts-init.ly"
\include "spanners-init.ly"
\include "property-init.ly"
addquote =
#(define-music-function (parser location name music) (string? ly:music?)
"Add a piece of music to be quoted "
- (add-quotable name music)
+ (add-quotable parser name music)
(make-music 'SequentialMusic 'void #t))
autochange =
#(define-music-function (parser location music) (ly:music?)
- (make-autochange-music music))
+ (make-autochange-music parser music))
applyContext =
#(define-music-function (parser location proc) (procedure?)
))
partcombine =
#(define-music-function (parser location part1 part2) (ly:music? ly:music?)
- (make-part-combine-music (list part1 part2)))
+ (make-part-combine-music parser
+ (list part1 part2)))
pitchedTrill =
}
#(define (first-page layout props arg)
- (if (= (chain-assoc-get 'page:page-number props -1)
- (ly:output-def-lookup layout 'first-page-number)) (interpret-markup layout props arg)
- empty-stencil))
+ (if (= (chain-assoc-get 'page:page-number props -1)
+ (ly:output-def-lookup layout 'first-page-number))
+ (interpret-markup layout props arg)
+ empty-stencil))
#(define (last-page layout props arg)
(if (chain-assoc-get 'page:last? props #f)
(interpret-markup layout props arg)
empty-stencil))
-#(define (print-page-number layout props arg)
+#(define (create-page-number-stencil layout props arg)
(if (eq? (ly:output-def-lookup layout 'print-page-number) #t)
(interpret-markup layout props arg)
empty-stencil))
(if (or (not (= (chain-assoc-get 'page:page-number props -1)
(ly:output-def-lookup layout 'first-page-number)))
(eq? (ly:output-def-lookup layout 'print-first-page-number) #t))
- (print-page-number layout props arg)
+ (create-page-number-stencil layout props arg)
empty-stencil))
oddHeaderMarkup = \markup
$(outdir)/aybabtu.otf $(outdir)/aybabtu.svg: $(outdir)/aybabtu.pe $(foreach s,$(BRACES),$(outdir)/feta-braces-$(s).pfa) $(outdir)/aybabtu.otf-table $(outdir)/aybabtu.otf-gtable
cd $(outdir) && $(FONTFORGE) -script aybabtu.pe
- -rm -f $(outdir)/*.scale.{pfa,afm}
$(outdir)/%.pfa: $(outdir)/%.log
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; autochange - fairly related to part combining.
-(define-public (make-autochange-music music)
+(define-public (make-autochange-music parser music)
(define (generate-split-list change-moment event-list acc)
(if (null? event-list)
acc
(let* ((m (make-music 'AutoChangeMusic))
(m1 (make-non-relative-music (context-spec-music music 'Voice "one")))
- (context-list (recording-group-emulate music part-combine-listener))
+ (context-list (recording-group-emulate music
+ (ly:parser-lookup parser 'partCombineListener)))
(evs (car context-list))
(rev (reverse! (cdar context-list)))
(split (reverse! (generate-split-list
(clip-systems #f "Generate cut-out snippets of a score")
(debug-gc #f
"dump memory debugging statistics")
+ (debug-gc-assert-parsed-dead #f
+ "for memory debugging: ensure that all refs to parsed objects are dead.")
+
+ (debug-midi #f "generate human readable MIDI")
+ (debug-parser #f "debug the bison parser")
+ (debug-lexer #f "debug the flex lexer")
(debug-midi #f "generate human readable MIDI")
(delete-intermediate-files #f
"delete unusable PostScript files")
(display "Live object statistics: GC'ing\n")
(gc)
(gc)
+ (ly:set-option 'debug-gc-assert-parsed-dead #t)
+ (gc)
(set! stats (gc-live-object-stats))
(display "Dumping live object statistics.\n")
(for-each
(lambda (x)
+ (ly:set-option 'debug-gc-assert-parsed-dead #f)
(lilypond-file handler x)
(ly:clear-anonymous-modules)
(if (ly:get-option 'debug-gc)
(lambda () (ly:parse-file file-name))
(lambda (x . args) (handler x file-name))))
-(use-modules (scm editor)
- )
+(use-modules (scm editor))
(define-public (gui-main files)
(if (null? files)
(ly:interpret-music-expression (make-non-relative-music music) global)
context-list))
-(define noticed '())
-;; todo: junk this, extract $defaultlayout from parser instead
-(define part-combine-listener '())
-
-; UGH - should pass noticed setter to part-combine-listener
-(define-safe-public (set-part-combine-listener x)
- (set! part-combine-listener x))
-
-(define-public (notice-the-events-for-pc context lst)
- "add CONTEXT-ID, EVENT list to NOTICED variable."
-
- (set! noticed (acons (ly:context-id context) lst noticed)))
-
-(define-public (make-part-combine-music music-list)
+(define-public (make-part-combine-music parser music-list)
(let* ((m (make-music 'PartCombineMusic))
(m1 (make-non-relative-music (context-spec-music (first music-list) 'Voice "one")))
(m2 (make-non-relative-music (context-spec-music (second music-list) 'Voice "two")))
- (evs2 (recording-group-emulate m2 part-combine-listener))
- (evs1 (recording-group-emulate m1 part-combine-listener)))
+ (listener (ly:parser-lookup parser 'partCombineListener))
+ (evs2 (recording-group-emulate m2 listener))
+ (evs1 (recording-group-emulate m1 listener)))
(set! (ly:music-property m 'elements) (list m1 m2))
(set! (ly:music-property m 'split-list)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(define-public (add-quotable name mus)
- (set! noticed '())
+(define-public (add-quotable parser name mus)
(let* ((tab (eval 'musicQuotes (current-module)))
(context-list (recording-group-emulate (context-spec-music mus 'Voice)
- part-combine-listener)))
+ (ly:parser-lookup parser 'partCombineListener))))
(if (pair? context-list)
(hash-set! tab name
;; cdr : skip name string
ALL_LDFLAGS = $(LDFLAGS) $(CONFIG_LDFLAGS) $($(PACKAGE)_LDFLAGS) $(MODULE_LDFLAGS) $(CONFIG_LDFLAGS)
-PIC_FLAGS = -fpic -fPIC
ifeq ($(MINGW_BUILD),)
+PIC_FLAGS = -fpic -fPIC
SHARED_FLAGS = -shared
else
SHARED_FLAGS = -mdll