]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/file-path.cc
Web-ja: update introduction
[lilypond.git] / flower / file-path.cc
index c896a650feb4621edec08c82218d5e34ba0ecd3d..65cd517e5a07247fc798277631be1857601679e0 100644 (file)
@@ -1,19 +1,27 @@
 /*
-  file-path.cc - implement File_path
+  This file is part of LilyPond, the GNU music typesetter.
 
-  source file of the Flower Library
-
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  Copyright (C) 1997--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
+
+  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 "file-path.hh"
 
-#include "std-string.hh"
-
 #include <cstdio>
 #include <cerrno>
-using namespace std;
 
 #include "config.hh"
 #if HAVE_SYS_STAT_H
@@ -31,34 +39,22 @@ using namespace std;
 #define PATHSEP ':'
 #endif
 
-std::vector<std::string>
+#include <algorithm>
+
+vector<string>
 File_path::directories () const
 {
   return dirs_;
 }
 
-/*
-  TODO: use split_string.
-  
- */
-
-#include <algorithm>
 void
-File_path::parse_path (std::string p)
+File_path::parse_path (const string &p)
 {
-  ssize len;
-  while ((len = p.length ()))
-    {
-      ssize i = p.find (PATHSEP);
-      if (i == NPOS)
-       i = len;
-      append (p.substr (0, i));
-      p = p.substr (std::min (len, i + 1));
-    }
+  concat (dirs_, string_split (p, PATHSEP));
 }
 
 bool
-is_file (std::string file_name)
+is_file (const string &file_name)
 {
 #if !STAT_MACROS_BROKEN
   struct stat sbuf;
@@ -78,8 +74,13 @@ is_file (std::string file_name)
 }
 
 bool
-is_dir (std::string file_name)
+is_dir (string file_name)
 {
+  /*
+    canonicalize; in particular, trailing slashes should disappear.
+   */
+  file_name = File_name (file_name).to_string ();
+
 #if !STAT_MACROS_BROKEN
   struct stat sbuf;
   if (stat (file_name.c_str (), &sbuf) != 0)
@@ -105,8 +106,8 @@ directory, in this order.
 @return
 The file name if found, or empty string if not found. */
 
-std::string
-File_path::find (std::string name) const
+string
+File_path::find (const string &name) const
 {
   if (!name.length () || (name == "-"))
     return name;
@@ -124,16 +125,16 @@ File_path::find (std::string name) const
   for (vsize i = 0; i < dirs_.size (); i++)
     {
       File_name file_name (name);
-      File_name dir = (std::string) dirs_[i];
+      File_name dir = (string) dirs_[i];
       file_name.root_ = dir.root_;
       dir.root_ = "";
       if (file_name.dir_.empty ())
-       file_name.dir_ = dir.to_string ();
+        file_name.dir_ = dir.to_string ();
       else if (!dir.to_string ().empty ())
-       file_name.dir_ = dir.to_string ()
-         + std::to_string (DIRSEP) + file_name.dir_;
+        file_name.dir_ = dir.to_string ()
+                         + ::to_string (DIRSEP) + file_name.dir_;
       if (is_file (file_name.to_string ()))
-       return file_name.to_string ();
+        return file_name.to_string ();
     }
   return "";
 }
@@ -145,31 +146,31 @@ File_path::find (std::string name) const
 
   where EXT is from EXTENSIONS.
 */
-std::string
-File_path::find (std::string name, char const *extensions[])
+string
+File_path::find (const string &name, char const *extensions[])
 {
   if (name.empty () || name == "-")
     return name;
-  
+
   File_name file_name (name);
-  std::string orig_ext = file_name.ext_;
+  string orig_ext = file_name.ext_;
   for (int i = 0; extensions[i]; i++)
     {
       file_name.ext_ = orig_ext;
       if (*extensions[i] && !file_name.ext_.empty ())
-       file_name.ext_ += ".";
+        file_name.ext_ += ".";
       file_name.ext_ += extensions[i];
-      std::string found = find (file_name.to_string ());
+      string found = find (file_name.to_string ());
       if (!found.empty ())
-       return found;
+        return found;
     }
-  
+
   return "";
 }
 
 /** Append a directory, return false if failed.  */
 bool
-File_path::try_append (std::string s)
+File_path::try_append (string s)
 {
   if (s == "")
     s = ".";
@@ -181,27 +182,27 @@ File_path::try_append (std::string s)
   return false;
 }
 
-std::string
+string
 File_path::to_string () const
 {
-  std::string s;
+  string s;
   for (vsize i = 0; i < dirs_.size (); i++)
     {
       s = s + dirs_[i];
       if (i < dirs_.size () - 1)
-       s += std::to_string (PATHSEP);
+        s += ::to_string (PATHSEP);
     }
   return s;
 }
 
 void
-File_path::append (std::string str)
+File_path::append (const string &str)
 {
   dirs_.push_back (str);
 }
 
 void
-File_path::prepend (std::string str)
+File_path::prepend (const string &str)
 {
   dirs_.insert (dirs_.begin (), str);
 }