]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/sources.cc
Release: bump Welcome versions.
[lilypond.git] / lily / sources.cc
index 62ee7a1e9970112aea37d2005ec3ccd23634d97e..5d865fe706e565e1fa03365a24daa3ee3174a8a3 100644 (file)
@@ -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 <hanwen@xs4all.nl>
 
-  (c) 1997--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  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 <http://www.gnu.org/licenses/>.
 */
 
 #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 constcurrent_dir)
-{  
+Sources::get_file (string file_string, string const &current_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<string>::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);
+}