X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fsources.cc;h=5d865fe706e565e1fa03365a24daa3ee3174a8a3;hb=90e4d7057f3857da049dfda3d130017d4719bd6b;hp=62ee7a1e9970112aea37d2005ec3ccd23634d97e;hpb=fb9e2de36beaedec7b303d87a443ec24446014e3;p=lilypond.git diff --git a/lily/sources.cc b/lily/sources.cc index 62ee7a1e99..5d865fe706 100644 --- a/lily/sources.cc +++ b/lily/sources.cc @@ -1,9 +1,20 @@ /* - source.cc -- implement Sources + This file is part of LilyPond, the GNU music typesetter. - source file of the LilyPond music typesetter + Copyright (C) 1997--2015 Han-Wen Nienhuys - (c) 1997--2008 Han-Wen Nienhuys + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include "sources.hh" @@ -18,13 +29,6 @@ Sources::Sources () path_ = 0; } - -Sources::Sources (Sources const &) -{ - assert (false); -} - - void Sources::set_path (File_path *f) { @@ -40,27 +44,27 @@ Sources::set_path (File_path *f) working directory. */ Source_file * -Sources::get_file (string file_string, string const& current_dir) -{ +Sources::get_file (string file_string, string const ¤t_dir) +{ if (file_string != "-") { // First, check for a path relative to the directory of the // file currently being parsed. if (current_dir.length () - && file_string.length () - && !File_name (file_string).is_absolute () - && is_file (current_dir + DIRSEP + file_string)) - file_string = current_dir + DIRSEP + file_string; + && file_string.length () + && !File_name (file_string).is_absolute () + && is_file (current_dir + DIRSEP + file_string)) + file_string = current_dir + DIRSEP + file_string; // Otherwise, check the rest of the path. else if (path_) - { - string file_string_o = path_->find (file_string); - if ((file_string_o == "") && (file_string != "")) - return 0; + { + string file_string_o = path_->find (file_string); + if ((file_string_o == "") && (file_string != "")) + return 0; - file_string = file_string_o; - } + file_string = file_string_o; + } } Source_file *f = new Source_file (file_string); @@ -82,3 +86,28 @@ Sources::~Sources () } } +#include "lily-parser.hh" +#include "lily-lexer.hh" +#include "lily-imports.hh" +#include "fluid.hh" + +LY_DEFINE (ly_source_files, "ly:source-files", 0, 1, 0, + (SCM parser_smob), + "A list of LilyPond files being processed;" + "a PARSER may optionally be specified.") +{ + + if (SCM_UNBNDP (parser_smob)) + parser_smob = scm_fluid_ref (Lily::f_parser); + Lily_parser *parser = LY_ASSERT_SMOB (Lily_parser, parser_smob, 1); + Includable_lexer *lex = parser->lexer_; + + SCM lst = SCM_EOL; + for (vector::const_iterator + i = lex->file_name_strings_.begin(); + i != lex->file_name_strings_.end(); ++i) + { + lst = scm_cons (ly_string2scm (*i), lst); + } + return scm_reverse_x (lst, SCM_EOL); +}