X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fincludable-lexer.cc;h=2eb5df5cb3deaea4a8f29e110d2bff9b67d59e4b;hb=8574d4349026c4ac5a15a27c50e264bf548e29fb;hp=f43feee573a8a7c0aa62a9da5f2e7ca63b759381;hpb=64313890b232c731d432e5b096f30bffc3f3756d;p=lilypond.git diff --git a/lily/includable-lexer.cc b/lily/includable-lexer.cc index f43feee573..2eb5df5cb3 100644 --- a/lily/includable-lexer.cc +++ b/lily/includable-lexer.cc @@ -3,7 +3,7 @@ source file of the LilyPond music typesetter - (c) 1997--2006 Han-Wen Nienhuys + (c) 1997--2009 Han-Wen Nienhuys */ #include "includable-lexer.hh" @@ -13,11 +13,12 @@ using namespace std; #include "config.hh" +#include "file-name.hh" #include "file-path.hh" #include "international.hh" #include "main.hh" #include "source-file.hh" -#include "source.hh" +#include "sources.hh" #include "warn.hh" #ifndef YY_BUF_SIZE @@ -36,31 +37,30 @@ using namespace std; (yy_buffer_stack != 0 ? yy_buffer_stack[yy_buffer_stack_top] : 0) #endif +extern bool relative_includes; + Includable_lexer::Includable_lexer () { #if HAVE_FLEXLEXER_YY_CURRENT_BUFFER yy_current_buffer = 0; #endif - allow_includes_b_ = true; } /** Set the new input file to NAME, remember old file. */ void -Includable_lexer::new_input (std::string name, Sources *sources) +Includable_lexer::new_input (string name, Sources *sources) { - if (!allow_includes_b_) - { - LexerError (_ ("include files are not allowed in safe mode").c_str ()); - return; - } + string current_dir = dir_name (main_input_name_); + if (relative_includes) + current_dir = include_stack_.size () ? dir_name (include_stack_.back ()->name_string ()) : ""; - Source_file *file = sources->get_file (name); + Source_file *file = sources->get_file (name, current_dir); if (!file) { - std::string msg = _f ("can't find file: `%s'", name); + string msg = _f ("cannot find file: `%s'", name); msg += "\n"; msg += _f ("(search path: `%s')", - sources->path_->to_string ().c_str ()); + (current_dir.length () ? (current_dir + PATHSEP) : "") + sources->path_->to_string ().c_str ()); LexerError (msg.c_str ()); return; } @@ -71,7 +71,12 @@ Includable_lexer::new_input (std::string name, Sources *sources) state_stack_.push_back (yy_current_buffer); if (be_verbose_global) - progress_indication (std::string ("[") + name); + { + string spaces = ""; + for (size_t i = 0; i < state_stack_.size (); i++) + spaces += " "; + progress_indication (string ("\n") + spaces + string ("[") + file->name_string ()); + } include_stack_.push_back (file); @@ -83,7 +88,7 @@ Includable_lexer::new_input (std::string name, Sources *sources) } void -Includable_lexer::new_input (std::string name, std::string data, Sources *sources) +Includable_lexer::new_input (string name, string data, Sources *sources) { Source_file *file = new Source_file (name, data); sources->add (file); @@ -94,7 +99,12 @@ Includable_lexer::new_input (std::string name, std::string data, Sources *source state_stack_.push_back (yy_current_buffer); if (be_verbose_global) - progress_indication (std::string ("[") + name); + { + string spaces = ""; + for (size_t i = 0; i < state_stack_.size (); i++) + spaces += " "; + progress_indication (string ("\n") + spaces + string ("[") + name); + } include_stack_.push_back (file); yy_switch_to_buffer (yy_create_buffer (file->get_istream (), YY_BUF_SIZE));