]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/sources.cc
Doc-es: various updates.
[lilypond.git] / lily / sources.cc
index bfcc7f88cf078e6a2e7db008811eedc3f217f7cc..5d865fe706e565e1fa03365a24daa3ee3174a8a3 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 1997--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  Copyright (C) 1997--2015 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
@@ -29,13 +29,6 @@ Sources::Sources ()
   path_ = 0;
 }
 
-
-Sources::Sources (Sources const &)
-{
-  assert (false);
-}
-
-
 void
 Sources::set_path (File_path *f)
 {
@@ -51,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);
@@ -93,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);
+}