source file of the GNU LilyPond music typesetter
- (c) 1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include "config.h"
#include "source.hh"
#include "lily-version.hh"
#include "scm-hash.hh"
+#include "ly-modules.hh"
+bool store_locations_global_b;
-LY_DEFINE(ly_set_point_and_click_x, "set-point-and-click!", 1, 0, 0,
+
+/*
+ no ! suffix since it doesn't modify 1st argument.
+ */
+LY_DEFINE(ly_set_point_and_click, "ly:set-point-and-click", 1, 0, 0,
(SCM what),
- "Set the options for Point-and-click source specials output. The
-argument is a symbol. Possible options are @code{none} (no source specials),
-@code{line} and @code{line-column}")
+ "Set the options for Point-and-click source specials output. The\n"
+"argument is a symbol. Possible options are @code{none} (no source specials),\n"
+"@code{line} and @code{line-column}")
{
/*
UGH.
else if (what == ly_symbol2scm ("line"))
val = gh_eval_str ("line-location");
- /*
- UGH.
+ extern SCM lily_module;
+ scm_module_define (lily_module, ly_symbol2scm ("point-and-click"), val);
- How do you do set! from C ?
- */
- scm_primitive_eval (scm_list_n (ly_symbol2scm ("set!"),
- ly_symbol2scm ("point-and-click"), val, SCM_UNDEFINED));
+ store_locations_global_b =gh_procedure_p (val);
return SCM_UNSPECIFIED;
}
out = " ";
}
String dep = deps[i];
- if (!dependency_prefix_global.empty_b ())
+ if (!dependency_prefix_global.is_empty ())
{
-#if 0//thinko?
- if (stat (dep.to_str0 (), &stat_buf) == -1 && errno == ENOENT)
- ; //make emacs happy
-#else
if (dep.index ('/') < 0)
-#endif
dep = dependency_prefix_global + dep;
}
out += " " + dep;
void
-Input_file_results::do_deps ()
+Input_file_results::do_deps (String output)
{
if (dependency_global_b)
{
- Path p = split_path (output_name_global);
+ Path p = split_path (output);
p.ext = "dep";
- write_dependency_file (p.string (),
+ write_dependency_file (p.to_string (),
target_strings_,
inclusion_names_);
}
}
-
-void
-Input_file_results::do_scores ()
-{
- if (header_ == SCM_EOL)
- header_ = ly_make_anonymous_module ();
-
- for (int i=0; i < scores_.size (); i++)
- {
- Score* is = scores_[i];
- is->input_file_ = this;
-
- if (is->errorlevel_)
- {
- is->warning (_ ("Score contains errors; will not process it"));
- exit_status_global |= 1;
- }
- else
- {
- is->process ();
- }
- }
- do_deps ();
-}
-
Input_file_results::~Input_file_results ()
{
- for (int i=0; i < scores_.size (); i++)
- scm_gc_unprotect_object (scores_[i]->self_scm ());
- scores_.clear ();
-
inclusion_names_.clear ();
if (header_)
header_ = SCM_EOL;
global_input_file =0;
+
+ ly_clear_anonymous_modules();
}
+
Input_file_results* global_input_file;
-Input_file_results::Input_file_results (String init_string, String file_string)
+Input_file_results::Input_file_results (String init, String in_file, String out_file)
{
- header_ = SCM_EOL;
+ header_ = ly_make_anonymous_module ();
global_input_file = this;
- ly_set_point_and_click_x (SCM_BOOL_F);
-
+ score_count_ = 0;
sources_.set_path (&global_path);
- My_lily_parser parser (this);
- progress_indication (_f ("Now processing: `%s'", file_string.to_str0 ()));
+ progress_indication (_f ("Now processing: `%s'", in_file.to_str0 ()));
progress_indication ("\n");
- parser.parse_file (init_string, file_string);
+
+ My_lily_parser parser (this);
+ parser.parse_file (init, in_file, out_file);
if (parser.error_level_)
{
exit_status_global = 1;
+ failed_files.push (in_file);
}
- else
- do_scores ();
+
+ do_deps (out_file);
}
void
-do_one_file (String init_string, String file_string)
+do_one_file (String init, String in_file, String out_file)
{
- if (init_string.length () && global_path.find (init_string).empty_b ())
+ if (init.length () && global_path.find (init).is_empty ())
{
- warning (_f ("can't find file: `%s'", init_string));
- warning (_f ("(search path: `%s')", global_path.string ().to_str0 ()));
+ warning (_f ("can't find file: `%s'", init));
+ warning (_f ("(search path: `%s')", global_path.to_string ().to_str0 ()));
return;
}
- if ((file_string != "-") && global_path.find (file_string).empty_b ())
+
+ if ((in_file != "-") && global_path.find (in_file).is_empty ())
{
- warning (_f ("can't find file: `%s'", file_string));
+ warning (_f ("can't find file: `%s'", in_file));
return;
}
- Input_file_results inp_file(init_string, file_string);
+ Input_file_results inp_file (init, in_file, out_file);
}