commit 2b9965aebb7e3a2ae175e36363a287816c48bbee
Author: Enrico Forestieri <for...@lyx.org>
Date:   Wed Mar 1 09:19:18 2017 +0100

    Allow Input of local includes from local layout files
    
    When including files, LyX always searches the user and the system
    directory, in that order. This means that when using local layout
    files broken down into multiple includes, the various includes should
    be specified with a path relative to the user layouts directory
    (typically ~/.lyx/layouts), making this very impractical.
    This commit allows including local files by specifying their path
    as explicitly relative to the main layout file position, i.e., by
    specifying their path with either "./" or "../". If the main layout
    is not loaded from a local file, the usual search order is used,
    even if the path are explicitly relative. So, for system layouts,
    both "Input ./name.inc" and "Input name.inc" are equivalent.
    
    (cherry picked from commit 17ab47b3e6acafae8f11e6363ee64252b26c81e7)
---
 po/pt_BR.gmo       |  Bin 488093 -> 499769 bytes
 po/sk.gmo          |  Bin 491691 -> 491691 bytes
 po/zh_CN.gmo       |  Bin 212035 -> 222881 bytes
 src/LayoutFile.cpp |    6 ++++--
 src/TextClass.cpp  |    7 ++++++-
 src/TextClass.h    |    4 ++++
 status.22x         |    3 +++
 7 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index ea90f6c..a2757e4 100644
Binary files a/po/pt_BR.gmo and b/po/pt_BR.gmo differ
diff --git a/po/sk.gmo b/po/sk.gmo
index d4372ba..76c98a6 100644
Binary files a/po/sk.gmo and b/po/sk.gmo differ
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index c21bc98..c6af000 100644
Binary files a/po/zh_CN.gmo and b/po/zh_CN.gmo differ
diff --git a/src/LayoutFile.cpp b/src/LayoutFile.cpp
index 8cca663..142d566 100644
--- a/src/LayoutFile.cpp
+++ b/src/LayoutFile.cpp
@@ -44,7 +44,8 @@ LayoutFile::LayoutFile(string const & fn, string const & cln,
                       string const & desc, string const & prereq,
                       string const & category, bool texclassavail) 
 {
-       name_ = fn;
+       name_ = onlyFileName(fn);
+       path_ = fn.rfind('/') == string::npos ? string() : onlyPath(fn);
        latexname_ = cln;
        description_ = desc;
        prerequisites_ = prereq;
@@ -332,7 +333,8 @@ LayoutFileIndex  LayoutFileList::addLocalLayout(
                return string();
 
        LayoutFile * tmpl =
-               new LayoutFile(textclass, class_name, textclass, class_prereq, 
category, true);
+               new LayoutFile(addName(moved ? oldpath : path, textclass),
+                       class_name, textclass, class_prereq, category, true);
        //FIXME: The prerequisites are available from the layout file and
        //       can be extracted from the above regex, but for now this
        //       field is simply set to class_name + ".cls"
diff --git a/src/TextClass.cpp b/src/TextClass.cpp
index e1e4027..cb8b8c4 100644
--- a/src/TextClass.cpp
+++ b/src/TextClass.cpp
@@ -447,8 +447,13 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, 
ReadType rt)
 
                case TC_INPUT: // Include file
                        if (lexrc.next()) {
+                               FileName tmp;
                                string const inc = lexrc.getString();
-                               FileName tmp = libFileSearch("layouts", inc,
+                               if (!path().empty() && (prefixIs(inc, "./") ||
+                                                       prefixIs(inc, "../")))
+                                       tmp = fileSearch(path(), inc, "layout");
+                               else
+                                       tmp = libFileSearch("layouts", inc,
                                                            "layout");
 
                                if (tmp.empty()) {
diff --git a/src/TextClass.h b/src/TextClass.h
index 88f9303..f2d3110 100644
--- a/src/TextClass.h
+++ b/src/TextClass.h
@@ -192,6 +192,8 @@ public:
        ///
        std::string const & name() const { return name_; }
        ///
+       std::string const & path() const { return path_; }
+       ///
        std::string const & category() const { return category_; }
        ///
        std::string const & description() const { return description_; }
@@ -238,6 +240,8 @@ protected:
        mutable LayoutList layoutlist_;
        /// Layout file name
        std::string name_;
+       /// Layout file path (empty for system layout files)
+       std::string path_;
        /// Class category
        std::string category_;
        /// document class name
diff --git a/status.22x b/status.22x
index 9ba3589..9f9e1fc 100644
--- a/status.22x
+++ b/status.22x
@@ -18,6 +18,9 @@ What's new
 - Allow use of verbatim and quotation environments with IOP articles
   (bug 10505).
 
+- Search for input files relative to local layout files, when those 
+  are provided and relative paths are used.
+
 
 * TEX2LYX IMPROVEMENTS
 

Reply via email to