mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-13 09:15:50 +00:00
Backport the latest changes to the instant preview scripts.
Also fix a glitch recently reported on the devel list.
No status line as this is a further amendement to b3d2ffc0
.
This commit is contained in:
parent
ebbe6c1924
commit
7013445bdd
@ -233,8 +233,11 @@ def legacy_latex_file(latex_file, fg_color, bg_color):
|
||||
\definecolor{bg}{rgb}{%s}
|
||||
\pagecolor{bg}
|
||||
\usepackage[%s,tightpage]{preview}
|
||||
\IfFileExists{lmodern.sty}{\usepackage{lmodern}}{\usepackage{ae,aecomp}}
|
||||
\makeatletter
|
||||
\def\t@a{cmr}
|
||||
\if\f@family\t@a
|
||||
\IfFileExists{lmodern.sty}{\usepackage{lmodern}}{\usepackage{ae,aecompl}}
|
||||
\fi
|
||||
\g@addto@macro\preview{\begingroup\color{bg}\special{ps::clippath fill}\color{fg}}
|
||||
\g@addto@macro\endpreview{\endgroup}
|
||||
\makeatother
|
||||
@ -302,7 +305,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:
|
||||
warning("trying to recover from failed compilation")
|
||||
progress("Will try to recover from %s failure" % latex)
|
||||
|
||||
if pdf_output:
|
||||
return legacy_conversion_step3(latex_file, dpi, output_format, True, skipMetrics)
|
||||
@ -315,10 +318,13 @@ def legacy_conversion_step1(latex_file, dpi, output_format, fg_color, bg_color,
|
||||
def legacy_conversion_pdflatex(latex_file, failed_pages, legacy_metrics,
|
||||
use_pdftocairo, conv, gs_device, gs_ext, alpha, resolution, output_format):
|
||||
|
||||
error_count = 0
|
||||
|
||||
# Search for pdflatex executable
|
||||
pdflatex = find_exe(["pdflatex"])
|
||||
if pdflatex == None:
|
||||
warning("Can't find pdflatex. Some pages failed with all the possible routes.")
|
||||
failed_pages = []
|
||||
else:
|
||||
# Create a new LaTeX file from the original but only with failed pages
|
||||
pdf_latex_file = latex_file_re.sub("_pdflatex.tex", latex_file)
|
||||
@ -357,6 +363,7 @@ def legacy_conversion_pdflatex(latex_file, failed_pages, legacy_metrics,
|
||||
if conv_status:
|
||||
# Give up!
|
||||
warning("Some pages failed with all the possible routes")
|
||||
failed_pages = []
|
||||
else:
|
||||
# We've done it!
|
||||
pdf_log_file = latex_file_re.sub(".log", pdf_latex_file)
|
||||
@ -367,6 +374,7 @@ def legacy_conversion_pdflatex(latex_file, failed_pages, legacy_metrics,
|
||||
for index in error_pages:
|
||||
pdf_metrics.pop(index - 1)
|
||||
pdf_metrics.insert(index - 1, (index, -1.0))
|
||||
error_count += 1
|
||||
|
||||
original_bitmap = latex_file_re.sub("%d." + output_format, pdf_latex_file)
|
||||
destination_bitmap = latex_file_re.sub("%d." + output_format, latex_file)
|
||||
@ -375,6 +383,8 @@ def legacy_conversion_pdflatex(latex_file, failed_pages, legacy_metrics,
|
||||
join_metrics_and_rename(legacy_metrics, pdf_metrics, failed_pages,
|
||||
original_bitmap, destination_bitmap)
|
||||
|
||||
return error_count
|
||||
|
||||
|
||||
# The file has been processed through latex and we expect dvi output.
|
||||
# Run dvips, taking note whether it was successful.
|
||||
@ -513,9 +523,11 @@ 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)
|
||||
error_count = legacy_conversion_pdflatex(latex_file, failed_pages,
|
||||
legacy_metrics, use_pdftocairo, conv, gs_device, gs_ext, alpha,
|
||||
resolution, output_format)
|
||||
else:
|
||||
error_count = 0
|
||||
|
||||
# Invalidate metrics for pages that produced errors
|
||||
if len(error_pages) > 0:
|
||||
@ -523,6 +535,7 @@ def legacy_conversion_step3(latex_file, dpi, output_format, dvips_failed, skipMe
|
||||
if index not in failed_pages:
|
||||
legacy_metrics.pop(index - 1)
|
||||
legacy_metrics.insert(index - 1, (index, -1.0))
|
||||
error_count += 1
|
||||
|
||||
# Crop the ppm images
|
||||
if pnmcrop != None and output_format == "ppm":
|
||||
@ -534,6 +547,8 @@ def legacy_conversion_step3(latex_file, dpi, output_format, dvips_failed, skipMe
|
||||
# Extract metrics info from the log file.
|
||||
metrics_file = latex_file_re.sub(".metrics", latex_file)
|
||||
write_metrics_info(legacy_metrics, metrics_file)
|
||||
if error_count:
|
||||
warning("Failed to produce %d preview snippet(s)" % error_count)
|
||||
|
||||
return (0, legacy_metrics)
|
||||
|
||||
|
@ -158,12 +158,17 @@ def extract_metrics_info(dvipng_stdout):
|
||||
return results
|
||||
|
||||
|
||||
def fix_latex_file(latex_file):
|
||||
def fix_latex_file(latex_file, pdf_output):
|
||||
documentclass_re = re.compile("(\\\\documentclass\[)(1[012]pt,?)(.+)")
|
||||
newcommandx_re = re.compile("(\\\\newcommandx)(\\\\[a-zA-Z])(.+)")
|
||||
def_re = re.compile(r"(\\newcommandx|\\global\\long\\def)(\\[a-zA-Z])(.+)")
|
||||
usepackage_re = re.compile("\\\\usepackage")
|
||||
userpreamble_re = re.compile("User specified LaTeX commands")
|
||||
enduserpreamble_re = re.compile("\\\\makeatother")
|
||||
|
||||
tmp = mkstemp()
|
||||
|
||||
in_user_preamble = 0
|
||||
usepkg = 0
|
||||
changed = 0
|
||||
macros = []
|
||||
for line in open(latex_file, 'r').readlines():
|
||||
@ -173,7 +178,25 @@ def fix_latex_file(latex_file):
|
||||
tmp.write("%s%s\n" % (match.group(1), match.group(3)))
|
||||
continue
|
||||
|
||||
match = newcommandx_re.match(line)
|
||||
if not pdf_output and not usepkg:
|
||||
if userpreamble_re.search(line) != None:
|
||||
in_user_preamble = 1
|
||||
elif enduserpreamble_re.search(line) != None:
|
||||
in_user_preamble = 0
|
||||
if usepackage_re.match(line) != None and in_user_preamble:
|
||||
usepkg = 1
|
||||
changed = 1
|
||||
tmp.write("\\def\\t@a{microtype}\n")
|
||||
tmp.write("\\let\\oldusepkg\\usepackage\n")
|
||||
tmp.write("\\def\\usepackage{\\@ifnextchar[\\@usepkg{\\@usepkg[]}}\n")
|
||||
tmp.write("\\def\\@usepkg[#1]#2{\\@ifnextchar[")
|
||||
tmp.write("{\\@@usepkg[#1]{#2}}{\\@@usepkg[#1]{#2}[]}}\n")
|
||||
tmp.write("\\def\@@usepkg[#1]#2[#3]{\\def\\t@b{#2}")
|
||||
tmp.write("\\ifx\\t@a\\t@b\\else\\oldusepkg[#1]{#2}[#3]\\fi}\n")
|
||||
tmp.write(line)
|
||||
continue
|
||||
|
||||
match = def_re.match(line)
|
||||
if match == None:
|
||||
tmp.write(line)
|
||||
continue
|
||||
@ -184,8 +207,12 @@ def fix_latex_file(latex_file):
|
||||
tmp.write(line)
|
||||
continue
|
||||
|
||||
changed = 1
|
||||
tmp.write("\\renewcommandx%s%s\n" % (match.group(2), match.group(3)))
|
||||
definecmd = match.group(1)
|
||||
if definecmd == "\\global\\long\\def":
|
||||
tmp.write(line)
|
||||
else:
|
||||
changed = 1
|
||||
tmp.write("\\renewcommandx%s%s\n" % (match.group(2), match.group(3)))
|
||||
|
||||
if changed:
|
||||
copyfileobj(tmp, open(latex_file,"wb"), 1)
|
||||
@ -405,9 +432,9 @@ def main(argv):
|
||||
progress("Preprocess through lilypond-book: %s" % lilypond)
|
||||
progress("Altering the latex file for font size and colors")
|
||||
|
||||
# Omit font size specification in latex file and make sure multiple
|
||||
# defined macros are not an issue.
|
||||
fix_latex_file(latex_file)
|
||||
# Omit font size specification in latex file and make sure that multiple
|
||||
# defined macros and the microtype package don't cause issues.
|
||||
fix_latex_file(latex_file, pdf_output)
|
||||
|
||||
if lilypond:
|
||||
progress("Preprocess the latex file through %s" % lilypond_book)
|
||||
@ -452,7 +479,7 @@ def main(argv):
|
||||
error_pages = []
|
||||
latex_status, latex_stdout = run_latex(latex, latex_file, bibtex)
|
||||
if latex_status:
|
||||
warning("trying to recover from failed compilation")
|
||||
progress("Will try to recover from %s failure" % latex)
|
||||
error_pages = check_latex_log(latex_file_re.sub(".log", latex_file))
|
||||
|
||||
# The dvi output file name
|
||||
@ -549,10 +576,14 @@ def main(argv):
|
||||
|
||||
# Invalidate metrics for pages that produced errors
|
||||
if len(error_pages) > 0:
|
||||
error_count = 0
|
||||
for index in error_pages:
|
||||
if index not in ps_pages and index not in pdf_pages:
|
||||
dvipng_metrics.pop(index - 1)
|
||||
dvipng_metrics.insert(index - 1, (index, -1.0))
|
||||
error_count += 1
|
||||
if error_count:
|
||||
warning("Failed to produce %d preview snippet(s)" % error_count)
|
||||
|
||||
# Convert images to ppm format if necessary.
|
||||
if output_format == "ppm":
|
||||
|
@ -348,7 +348,7 @@ def run_tex(tex, tex_file):
|
||||
|
||||
tex_status, tex_stdout = run_command(tex_call)
|
||||
if tex_status:
|
||||
warning("%s had problems compiling %s" \
|
||||
progress("Warning: %s had problems compiling %s" \
|
||||
% (os.path.basename(tex), tex_file))
|
||||
return tex_status, tex_stdout
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user