From faaccd6605b88503934f00b07bc17ab6a1944523 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Uwe=20St=C3=B6hr?= Date: Mon, 5 Dec 2011 00:57:42 +0000 Subject: [PATCH] tex2lyx: support for pdfpages git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40368 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/tex2lyx/Preamble.cpp | 3 ++ src/tex2lyx/TODO.txt | 3 +- src/tex2lyx/text.cpp | 68 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 2 deletions(-) diff --git a/src/tex2lyx/Preamble.cpp b/src/tex2lyx/Preamble.cpp index 066da83c80..f3f4b5c988 100644 --- a/src/tex2lyx/Preamble.cpp +++ b/src/tex2lyx/Preamble.cpp @@ -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()) diff --git a/src/tex2lyx/TODO.txt b/src/tex2lyx/TODO.txt index 597beab52b..ab06cb1c6e 100644 --- a/src/tex2lyx/TODO.txt +++ b/src/tex2lyx/TODO.txt @@ -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 diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp index a5ffc4798a..977621d6fc 100644 --- a/src/tex2lyx/text.cpp +++ b/src/tex2lyx/text.cpp @@ -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 opts; + vector 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()); -- 2.39.2