]> git.lyx.org Git - features.git/commitdiff
tex2lyx: support for pdfpages
authorUwe Stöhr <uwestoehr@web.de>
Mon, 5 Dec 2011 00:57:42 +0000 (00:57 +0000)
committerUwe Stöhr <uwestoehr@web.de>
Mon, 5 Dec 2011 00:57:42 +0000 (00:57 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40368 a592a061-630c-0410-9148-cb99ea01b6c8

src/tex2lyx/Preamble.cpp
src/tex2lyx/TODO.txt
src/tex2lyx/text.cpp

index 066da83c809d080628827e037ad1a6f731f3b63f..f3f4b5c98812b95e74bbdf61950c7eabcf54df6b 100644 (file)
@@ -722,6 +722,9 @@ void Preamble::handle_package(Parser &p, string const & name,
        else if (name == "textcomp")
                ; // ignore this FIXME: Use the package separator mechanism instead
 
+       else if (name == "pdfpages")
+               ; // ignore this
+
        else if (name == "lyxskak") {
                // ignore this and its options
                if (!options.empty())
index 597beab52b0cbf9404ac1f2f90ff586546ee41d2..ab06cb1c6e8dfc9b680128f2818b118f1818023b 100644 (file)
@@ -13,9 +13,8 @@ Format LaTeX feature                        LyX feature
 224    external insets defined in           InsetExternal
        lib/external_templates.
        (Date and RasterImage cannot be supported
-       (Chess diagram and Spreadsheet are supported)
+       (Chess diagram, PDF pages and Spreadsheet are supported)
        (Xfig figure, Lilypond, Dia diagram can be supported by looking at the file extension)
-       (for PDFpages work is in progress by uwestoehr)
 226    nothing (impossible to import)       InsetBranch, \branch...\end_branch
 226    transformations                      InsetExternal
 228    draft                                InsetExternal
index a5ffc4798a2568fc0de5bd6c27cae07ba37c0fd7..977621d6fceb5f080711cf16b1c26ae571cf1987 100644 (file)
@@ -3913,6 +3913,74 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
                        end_inset(os);
                }
 
+               else if (t.cs() == "includepdf") {
+                       p.skip_spaces();
+                       string const arg = p.getArg('[', ']');
+                       map<string, string> opts;
+                       vector<string> keys;
+                       split_map(arg, opts, keys);
+                       string name = normalize_filename(p.verbatim_item());
+                       string const path = getMasterFilePath();
+                       // We want to preserve relative / absolute filenames,
+                       // therefore path is only used for testing
+                       if (!makeAbsPath(name, path).exists()) {
+                               // The file extension is probably missing.
+                               // Now try to find it out.
+                               char const * const pdfpages_format[] = {"pdf", 0};
+                               string const pdftex_name =
+                                       find_file(name, path, pdfpages_format);
+                               if (!pdftex_name.empty()) {
+                                       name = pdftex_name;
+                                       pdflatex = true;
+                               }
+                       }
+                       if (makeAbsPath(name, path).exists())
+                               fix_relative_filename(name);
+                       else
+                               cerr << "Warning: Could not find file '"
+                                    << name << "'." << endl;
+                       // write output
+                       context.check_layout(os);
+                       begin_inset(os, "External\n\ttemplate ");
+                       os << "PDFPages\n\tfilename "
+                          << name << "\n";
+                       // parse the options
+                       if (opts.find("pages") != opts.end())
+                               os << "\textra LaTeX \"pages="
+                                  << opts["pages"] << "\"\n";
+                       if (opts.find("angle") != opts.end())
+                               os << "\trotateAngle "
+                                  << opts["angle"] << '\n';
+                       if (opts.find("origin") != opts.end()) {
+                               ostringstream ss;
+                               string const opt = opts["origin"];
+                               if (opt == "tl") ss << "topleft";
+                               if (opt == "bl") ss << "bottomleft";
+                               if (opt == "Bl") ss << "baselineleft";
+                               if (opt == "c") ss << "center";
+                               if (opt == "tc") ss << "topcenter";
+                               if (opt == "bc") ss << "bottomcenter";
+                               if (opt == "Bc") ss << "baselinecenter";
+                               if (opt == "tr") ss << "topright";
+                               if (opt == "br") ss << "bottomright";
+                               if (opt == "Br") ss << "baselineright";
+                               if (!ss.str().empty())
+                                       os << "\trotateOrigin " << ss.str() << '\n';
+                               else
+                                       cerr << "Warning: Ignoring unknown includegraphics origin argument '" << opt << "'\n";
+                       }
+                       if (opts.find("width") != opts.end())
+                               os << "\twidth "
+                                  << translate_len(opts["width"]) << '\n';
+                       if (opts.find("height") != opts.end())
+                               os << "\theight "
+                                  << translate_len(opts["height"]) << '\n';
+                       if (opts.find("keepaspectratio") != opts.end())
+                               os << "\tkeepAspectRatio\n";
+                       end_inset(os);
+                       context.check_layout(os);
+               }
+
                else if (t.cs() == "loadgame") {
                        p.skip_spaces();
                        string name = normalize_filename(p.verbatim_item());