]> git.lyx.org Git - features.git/commitdiff
* enable instant preview with XeTeX (requires preview-latex v.11.86) [bug #5577]
authorJürgen Spitzmüller <spitz@lyx.org>
Wed, 24 Feb 2010 10:47:35 +0000 (10:47 +0000)
committerJürgen Spitzmüller <spitz@lyx.org>
Wed, 24 Feb 2010 10:47:35 +0000 (10:47 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@33554 a592a061-630c-0410-9148-cb99ea01b6c8

lib/scripts/lyxpreview2bitmap.py
src/graphics/PreviewLoader.cpp

index 04cada69df8cb2b1e16d5ab6398fb5cd0ad4042d..b14518381d844b59b062feaf79486110fc8a02ed 100755 (executable)
 # Example usage:
 # lyxpreview2bitmap.py png 0lyxpreview.tex 128 000000 faf0e6
 
-# This script takes five arguments:
+# This script takes six arguments:
 # FORMAT:   The desired output format. Either 'png' or 'ppm'.
 # TEXFILE:  the name of the .tex file to be converted.
 # DPI:      a scale factor, used to ascertain the resolution of the
 #           generated image which is then passed to gs.
 # FG_COLOR: the foreground color as a hexadecimal string, eg '000000'.
 # BG_COLOR: the background color as a hexadecimal string, eg 'faf0e6'.
+# CONVERTER: the converter (optional). Default is latex.
 
 # Decomposing TEXFILE's name as DIR/BASE.tex, this script will,
 # if executed successfully, leave in DIR:
@@ -154,7 +155,7 @@ def convert_to_ppm_format(pngtopnm, basename):
 
 def main(argv):
     # Parse and manipulate the command line arguments.
-    if len(argv) != 6:
+    if len(argv) != 6 and len(argv) != 7:
         error(usage(argv[0]))
 
     output_format = string.lower(argv[1])
@@ -171,7 +172,10 @@ def main(argv):
 
     # External programs used by the script.
     path = string.split(os.environ["PATH"], os.pathsep)
-    latex = find_exe_or_terminate(["latex", "pplatex", "platex", "latex2e"], path)
+    if len(argv) == 7:
+        latex = argv[6]
+    else:
+        latex = find_exe_or_terminate(["latex", "pplatex", "platex", "latex2e"], path)
 
     # This can go once dvipng becomes widespread.
     dvipng = find_exe(["dvipng"], path)
@@ -179,7 +183,7 @@ def main(argv):
         # The data is input to legacy_conversion in as similar
         # as possible a manner to that input to the code used in
         # LyX 1.3.x.
-        vec = [ argv[0], argv[2], argv[3], argv[1], argv[4], argv[5] ]
+        vec = [ argv[0], argv[2], argv[3], argv[1], argv[4], argv[5], argv[6] ]
         return legacy_conversion(vec)
 
     pngtopnm = ""
@@ -198,6 +202,11 @@ def main(argv):
         warning("%s failed to compile %s" \
               % (os.path.basename(latex), latex_file))
 
+    if latex == "xelatex":
+        warning("Using XeTeX")
+        # FIXME: skip unnecessary dvips trial in legacy_conversion_step2
+        return legacy_conversion_step2(latex_file, dpi, output_format)
+
     # Run the dvi file through dvipng.
     dvi_file = latex_file_re.sub(".dvi", latex_file)
     dvipng_call = '%s -Ttight -depth -height -D %d -fg "%s" -bg "%s" "%s"' \
@@ -207,6 +216,7 @@ def main(argv):
     if dvipng_status != None:
         warning("%s failed to generate images from %s ... looking for PDF" \
               % (os.path.basename(dvipng), dvi_file))
+        # FIXME: skip unnecessary dvips trial in legacy_conversion_step2
         return legacy_conversion_step2(latex_file, dpi, output_format)
 
     # Extract metrics info from dvipng_stdout.
index f54fb6bc92ed3d1789ec3ebe3933f365c771c6af..cdb11afdebb50cef2e7efec7ebc40c7f42782b17 100644 (file)
@@ -592,6 +592,8 @@ void PreviewLoader::Impl::startLoading()
           << int(font_scaling_factor) << ' '
           << theApp()->hexName(PreviewLoader::foregroundColor()) << ' '
           << theApp()->hexName(PreviewLoader::backgroundColor());
+       if (buffer_.params().useXetex)
+               cs << " xelatex";
 
        string const command = libScriptSearch(cs.str());
 
@@ -704,18 +706,28 @@ void PreviewLoader::Impl::dumpPreamble(odocstream & os) const
        // Use the preview style file to ensure that each snippet appears on a
        // fresh page.
        // Also support PDF output (automatically generated e.g. when
-       // \usepackage[pdftex]{hyperref} is used.
+       // \usepackage[pdftex]{hyperref} is used and XeTeX.
        os << "\n"
+          << "\\newif\\ifxetex\n"
+          << "\\expandafter\\ifx\\csname XeTeXrevision\\endcsname\\relax\n"
+          << "   \\xetexfalse\n"
+          << "\\else\n"
+          << "    \\xetextrue\n"
+          << "\\fi\n"
           << "\\newif\\ifpdf\n"
           << "\\ifx\\pdfoutput\\undefined\n"
           << "\\else\\ifx\\pdfoutput\\relax\n"
           << "\\else\\ifnum0=\\pdfoutput\n"
           << "\\else\\pdftrue\\fi\\fi\\fi\n"
+          << "\\ifxetex\n"
+          << "  \\usepackage[active,delayed,tightpage,showlabels,lyx,xetex]{preview}\n"
+          << "\\else\n"
           << "\\ifpdf\n"
           << "  \\usepackage[active,delayed,tightpage,showlabels,lyx,pdftex]{preview}\n"
           << "\\else\n"
           << "  \\usepackage[active,delayed,showlabels,lyx,dvips]{preview}\n"
           << "\\fi\n"
+          << "\\fi\n"
           << "\n";
 }