]> git.lyx.org Git - lyx.git/blobdiff - src/insets/ExternalTemplate.C
* src/LyXAction.C: mark goto-clear-bookmark as working without buffer
[lyx.git] / src / insets / ExternalTemplate.C
index 5caa2246c002dd2beb6876ac6cfa4b6206339905..b27255d48dabffac411b0459834242459655f2eb 100644 (file)
 
 #include "support/filetools.h"
 #include "support/lstrings.h"
+#include "support/package.h"
 #include "support/path.h"
-#include "support/path_defines.h"
-
-namespace support = lyx::support;
 
 using std::endl;
 using std::for_each;
-
 using std::string;
 using std::ostream;
 using std::vector;
 
-
 namespace lyx {
 namespace external {
 
-namespace {
 
 typedef Translator<TransformID, string> TransformIDTranslator;
-TransformIDTranslator const & transformIDTranslator();
 
-} // namespace anon
+static TransformIDTranslator const initIDTranslator()
+{
+       TransformIDTranslator translator(TransformID(-1), "");
+       translator.addPair(Rotate, "Rotate");
+       translator.addPair(Resize, "Resize");
+       translator.addPair(Clip,   "Clip");
+       translator.addPair(Extra,  "Extra");
+       return translator;
+}
 
+static TransformIDTranslator const & transformIDTranslator()
+{
+       static TransformIDTranslator const translator = initIDTranslator();
+       return translator;
+}
 
 // We have to have dummy default commands for security reasons!
 Template::Template()
@@ -54,7 +61,7 @@ Template::Format::Format()
 
 TemplateManager::TemplateManager()
 {
-       readTemplates(support::user_lyxdir());
+       readTemplates(support::package().user_support());
        if (lyxerr.debugging(Debug::EXTERNAL)) {
                dumpPreambleDefs(lyxerr);
                lyxerr << '\n';
@@ -126,8 +133,14 @@ public:
                ost << "\tFormat " << vt.first << '\n'
                    << "\t\tProduct " << ft.product << '\n'
                    << "\t\tUpdateFormat " << ft.updateFormat << '\n'
-                   << "\t\tUpdateResult " << ft.updateResult << '\n'
-                   << "\t\tRequirement " << ft.requirement << '\n';
+                   << "\t\tUpdateResult " << ft.updateResult << '\n';
+
+               vector<string>::const_iterator qit = ft.requirements.begin();
+               vector<string>::const_iterator qend = ft.requirements.end();
+               for (; qit != qend; ++qit) {
+                       lyxerr << "req:" << *qit << std::endl;
+                       ost << "\t\tRequirement " << *qit << '\n';
+               }
 
                typedef vector<Template::Option> Options;
                Options::const_iterator oit  = ft.options.begin();
@@ -146,6 +159,18 @@ public:
                        ost << "\t\tPreamble " << *pit << '\n';
                }
 
+               typedef Template::Format::FileMap FileMap;
+               FileMap::const_iterator rit  = ft.referencedFiles.begin();
+               FileMap::const_iterator rend = ft.referencedFiles.end();
+               for (; rit != rend; ++rit) {
+                       vector<string>::const_iterator fit  = rit->second.begin();
+                       vector<string>::const_iterator fend = rit->second.end();
+                       for (; fit != fend; ++fit) {
+                               ost << "\t\tReferencedFile " << rit->first
+                                   << " \"" << *fit << "\"\n";
+                       }
+               }
+
                ost << "\tFormatEnd\n";
        }
 private:
@@ -228,7 +253,7 @@ void TemplateManager::readTemplates(string const & path)
 
        LyXLex lex(templatetags, TM_TEMPLATE_END);
 
-       string filename = support::LibFileSearch("", "external_templates");
+       support::FileName const filename = support::libFileSearch("", "external_templates");
        if (filename.empty() || !lex.setFile(filename)) {
                lex.printError("external::TemplateManager::readTemplates: "
                               "No template file");
@@ -452,6 +477,7 @@ void Template::Format::readFormat(LyXLex & lex)
                FO_PREAMBLE,
                FO_TRANSFORMCOMMAND,
                FO_TRANSFORMOPTION,
+               FO_REFERENCEDFILE,
                FO_END
        };
 
@@ -460,6 +486,7 @@ void Template::Format::readFormat(LyXLex & lex)
                { "option", FO_OPTION },
                { "preamble", FO_PREAMBLE },
                { "product", FO_PRODUCT },
+               { "referencedfile", FO_REFERENCEDFILE },
                { "requirement", FO_REQUIREMENT },
                { "transformcommand", FO_TRANSFORMCOMMAND },
                { "transformoption", FO_TRANSFORMOPTION },
@@ -488,7 +515,7 @@ void Template::Format::readFormat(LyXLex & lex)
 
                case FO_REQUIREMENT:
                        lex.next(true);
-                       requirement = lex.getString();
+                       requirements.push_back(lex.getString());
                        break;
 
                case FO_PREAMBLE:
@@ -521,32 +548,20 @@ void Template::Format::readFormat(LyXLex & lex)
                        break;
                }
 
+               case FO_REFERENCEDFILE: {
+                       lex.next(true);
+                       string const format = lex.getString();
+                       lex.next(true);
+                       string const file = lex.getString();
+                       referencedFiles[format].push_back(file);
+                       break;
+               }
+
                case FO_END:
                        return;
                }
        }
 }
 
-namespace {
-
-TransformIDTranslator const initIDTranslator()
-{
-       TransformIDTranslator translator(TransformID(-1), "");
-       translator.addPair(Rotate, "Rotate");
-       translator.addPair(Resize, "Resize");
-       translator.addPair(Clip,   "Clip");
-       translator.addPair(Extra,  "Extra");
-       return translator;
-}
-
-
-TransformIDTranslator const & transformIDTranslator()
-{
-       static TransformIDTranslator const translator = initIDTranslator();
-       return translator;
-}
-
-} // namespace anon
-
 } // namespace external
 } // namespace lyx