]> git.lyx.org Git - lyx.git/blobdiff - lib/scripts/legacy_lyxpreview2ppm.py
iucr.layout: use Item_Environment for a style as proposed by Jürgen
[lyx.git] / lib / scripts / legacy_lyxpreview2ppm.py
index c9c3081af99e85591e307f5807317720972788dd..38dc825fdd23beac6aa0d76b7c1cf957cca2f398 100644 (file)
@@ -81,8 +81,8 @@
 
 import glob, os, pipes, re, string, sys
 
-from lyxpreview_tools import copyfileobj, error, filter_pages, find_exe, \
-     find_exe_or_terminate, join_metrics_and_rename, latex_commands, \
+from lyxpreview_tools import check_latex_log, copyfileobj, error, filter_pages,\
+     find_exe, find_exe_or_terminate, join_metrics_and_rename, latex_commands, \
      latex_file_re, make_texcolor, mkstemp, pdflatex_commands, progress, \
      run_command, run_latex, warning, write_metrics_info
 
@@ -302,7 +302,7 @@ def legacy_conversion_step1(latex_file, dpi, output_format, fg_color, bg_color,
     # Compile the latex file.
     latex_status, latex_stdout = run_latex(latex, latex_file)
     if latex_status:
-      return (latex_status, [])
+        warning("trying to recover from failed compilation")
 
     if pdf_output:
         return legacy_conversion_step3(latex_file, dpi, output_format, True, skipMetrics)
@@ -325,7 +325,10 @@ def legacy_conversion_pdflatex(latex_file, failed_pages, legacy_metrics,
         filter_pages(latex_file, pdf_latex_file, failed_pages)
 
         # pdflatex call
+        error_pages = []
         pdflatex_status, pdflatex_stdout = run_latex(pdflatex, pdf_latex_file)
+        if pdflatex_status:
+            error_pages = check_latex_log(latex_file_re.sub(".log", pdf_latex_file))
 
         pdf_file = latex_file_re.sub(".pdf", pdf_latex_file)
         latex_file_root = latex_file_re.sub("", pdf_latex_file)
@@ -359,6 +362,12 @@ def legacy_conversion_pdflatex(latex_file, failed_pages, legacy_metrics,
             pdf_log_file = latex_file_re.sub(".log", pdf_latex_file)
             pdf_metrics = legacy_extract_metrics_info(pdf_log_file)
 
+            # Invalidate metrics for pages that produced errors
+            if len(error_pages) > 0:
+                for index in error_pages:
+                    pdf_metrics.pop(index - 1)
+                    pdf_metrics.insert(index - 1, (index, -1.0))
+
             original_bitmap = latex_file_re.sub("%d." + output_format, pdf_latex_file)
             destination_bitmap = latex_file_re.sub("%d." + output_format, latex_file)
 
@@ -414,6 +423,9 @@ def legacy_conversion_step3(latex_file, dpi, output_format, dvips_failed, skipMe
     log_file = latex_file_re.sub(".log", latex_file)
     resolution = extract_resolution(log_file, dpi)
 
+    # Check whether some pages produced errors
+    error_pages = check_latex_log(log_file)
+
     # Older versions of gs have problems with a large degree of
     # anti-aliasing at high resolutions
     alpha = 4
@@ -462,7 +474,7 @@ def legacy_conversion_step3(latex_file, dpi, output_format, dvips_failed, skipMe
     else:
         # Model for calling the converter on each file
         if use_pdftocairo and epstopdf != None:
-            conv_call = '%s -png -transp -singlefile -r %d "%%s.pdf" "%s%%d"' \
+            conv_call = '%s -png -transp -singlefile -r %d "%%s" "%s%%d"' \
                         % (pdftocairo, resolution, latex_file_root)
         else:
             conv_call = '%s -dNOPAUSE -dBATCH -dSAFER -sDEVICE=%s ' \
@@ -482,13 +494,15 @@ def legacy_conversion_step3(latex_file, dpi, output_format, dvips_failed, skipMe
             i = i + 1
             progress("Processing page %s, file %s" % (i, file))
             if use_pdftocairo and epstopdf != None:
-                conv_name = "PdfToCairo"
+                conv_name = "epstopdf"
                 conv_status, conv_stdout = run_command("%s --outfile=%s.pdf %s"
                                                        % (epstopdf, file, file))
                 if not conv_status:
+                    conv_name = "pdftocairo"
+                    file = file + ".pdf"
                     conv_status, conv_stdout = run_command(conv_call % (file, i))
             else:
-                conv_name = "Ghostscript"
+                conv_name = "ghostscript"
                 conv_status, conv_stdout = run_command(conv_call % (i, file))
 
             if conv_status:
@@ -498,10 +512,18 @@ def legacy_conversion_step3(latex_file, dpi, output_format, dvips_failed, skipMe
 
     # Pass failed pages to pdflatex
     if len(failed_pages) > 0:
+        warning("Now trying to obtain failed previews through pdflatex")
         legacy_conversion_pdflatex(latex_file, failed_pages, legacy_metrics,
             use_pdftocairo, conv, gs_device, gs_ext, alpha, resolution,
             output_format)
 
+    # Invalidate metrics for pages that produced errors
+    if len(error_pages) > 0:
+        for index in error_pages:
+            if index not in failed_pages:
+                legacy_metrics.pop(index - 1)
+                legacy_metrics.insert(index - 1, (index, -1.0))
+
     # Crop the ppm images
     if pnmcrop != None and output_format == "ppm":
         crop_files(pnmcrop, latex_file_root)