From: Enrico Forestieri Date: Wed, 1 Mar 2017 08:19:18 +0000 (+0100) Subject: Allow Input of local includes from local layout files X-Git-Tag: 2.2.3~54 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=2b9965aebb7e3a2ae175e36363a287816c48bbee;p=features.git 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) --- diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo index ea90f6c6f2..a2757e4768 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 d4372bad24..76c98a6bb6 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 c21bc982cb..c6af0003bb 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 8cca663c4b..142d566302 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 e1e40272ea..cb8b8c43b2 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 88f93036e0..f2d3110583 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 9ba3589fa6..9f9e1fc742 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