mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 05:16:21 +00:00
lyxpreview: Simplify the color handling.
Let's have this in trunk for testing. The real difference maker when it comes to color is whether we use dvipng or ghostscript. For dvipng: - The color info is passed as command-line arguments. - The tightpage option is not necessary, and since it adds ps specials to the output, we shouldn't use it. For ghostscript: - The color info needs to be in the latex file. - The foreground color is set for each preview inset. - The background color is set by \pagecolor in the preamble, which is understood by pdflatex, but ignored in dvips mode. Thus dvips is handled with a ps special. - The tightpage option is necessary to crop the images. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@39797 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
873f0f4297
commit
35b580fb30
@ -194,42 +194,45 @@ def extract_resolution(log_file, dpi):
|
||||
return dpi * (10.0 / fontsize) * (1000.0 / magnification)
|
||||
|
||||
|
||||
def legacy_latex_file(latex_file, fg_color, bg_color, bg_color_gr):
|
||||
use_preview_dvi_re = re.compile("(\s*\\\\usepackage\[[^]]+)(dvips\]{preview})")
|
||||
use_preview_pdf_re = re.compile("(\s*\\\\usepackage\[[^]]+)(pdftex\]{preview})")
|
||||
def legacy_latex_file(latex_file, fg_color, bg_color):
|
||||
use_preview_re = re.compile(r"\s*\\usepackage\[([^]]+)\]{preview}")
|
||||
fg_color_gr = make_texcolor(fg_color, True)
|
||||
bg_color_gr = make_texcolor(bg_color, True)
|
||||
|
||||
tmp = mkstemp()
|
||||
|
||||
success = 0
|
||||
try:
|
||||
for line in open(latex_file, 'r').readlines():
|
||||
match = use_preview_dvi_re.match(line)
|
||||
if match == None:
|
||||
match = use_preview_pdf_re.match(line)
|
||||
if match == None:
|
||||
tmp.write(line)
|
||||
continue
|
||||
success = 1
|
||||
tmp.write(" \\usepackage{color}\n" \
|
||||
" \\pagecolor[rgb]{%s}\n" \
|
||||
"%s\n" \
|
||||
% (bg_color_gr, match.group()))
|
||||
continue
|
||||
|
||||
success = 1
|
||||
tmp.write("%stightpage,%s\n" \
|
||||
" \\AtBeginDocument{\\AtBeginDvi{%%\n" \
|
||||
" \\special{!userdict begin/bop-hook{//bop-hook exec\n" \
|
||||
" <%s%s>{255 div}forall setrgbcolor\n" \
|
||||
" clippath fill setrgbcolor}bind def end}}}\n" \
|
||||
% (match.group(1), match.group(2), fg_color, bg_color))
|
||||
|
||||
f = open(latex_file, 'r')
|
||||
except:
|
||||
# Unable to open the file, but do nothing here because
|
||||
# the calling function will act on the value of 'success'.
|
||||
warning('Warning in legacy_latex_file! Unable to open "%s"' % latex_file)
|
||||
warning(`sys.exc_type` + ',' + `sys.exc_value`)
|
||||
|
||||
for line in f.readlines():
|
||||
if success:
|
||||
tmp.write(line)
|
||||
continue
|
||||
match = use_preview_re.match(line)
|
||||
if match == None:
|
||||
tmp.write(line)
|
||||
continue
|
||||
success = 1
|
||||
# Package order: color should be loaded before preview
|
||||
# Preview options: add the options lyx and tightpage
|
||||
tmp.write(r"""
|
||||
\usepackage{color}
|
||||
\definecolor{fg}{rgb}{%s}
|
||||
\definecolor{bg}{rgb}{%s}
|
||||
\pagecolor{bg}
|
||||
\usepackage[%s,lyx,tightpage]{preview}
|
||||
\makeatletter
|
||||
\g@addto@macro\preview{\begingroup\color{bg}\special{ps::clippath fill}\color{fg}}
|
||||
\g@addto@macro\endpreview{\endgroup}
|
||||
\makeatother
|
||||
""" % (fg_color_gr, bg_color_gr, match.group(1)))
|
||||
|
||||
if success:
|
||||
copyfileobj(tmp, open(latex_file,"wb"), 1)
|
||||
|
||||
@ -284,10 +287,10 @@ def legacy_conversion(argv, skipMetrics = False):
|
||||
def legacy_conversion_step1(latex_file, dpi, output_format, fg_color, bg_color,
|
||||
latex, pdf_output = False, skipMetrics = False):
|
||||
|
||||
# Move color information into the latex file.
|
||||
bg_color_gr = make_texcolor(bg_color, True)
|
||||
if not legacy_latex_file(latex_file, fg_color, bg_color, bg_color_gr):
|
||||
error("Unable to move color info into the latex file")
|
||||
# Move color information, lyx and tightpage options into the latex file.
|
||||
if not legacy_latex_file(latex_file, fg_color, bg_color):
|
||||
error("""Unable to move the color information, and the lyx and tightpage
|
||||
options of preview-latex, into the latex file""")
|
||||
|
||||
# Compile the latex file.
|
||||
latex_status, latex_stdout = run_latex(latex, latex_file)
|
||||
|
@ -155,42 +155,6 @@ def extract_metrics_info(dvipng_stdout):
|
||||
return results
|
||||
|
||||
|
||||
def color_pdf(latex_file, bg_color, fg_color):
|
||||
use_preview_pdf_re = re.compile("(\s*\\\\usepackage\[[^]]+)((pdftex|xetex)\]{preview})")
|
||||
|
||||
tmp = mkstemp()
|
||||
|
||||
fg = ""
|
||||
if fg_color != "0.000000,0.000000,0.000000":
|
||||
fg = ' \\AtBeginDocument{\\let\\oldpreview\\preview\\renewcommand\\preview{\\oldpreview\\color[rgb]{%s}}}\n' % (fg_color)
|
||||
|
||||
success = 0
|
||||
try:
|
||||
for line in open(latex_file, 'r').readlines():
|
||||
match = use_preview_pdf_re.match(line)
|
||||
if match == None:
|
||||
tmp.write(line)
|
||||
continue
|
||||
success = 1
|
||||
tmp.write(" \\usepackage{color}\n" \
|
||||
" \\pagecolor[rgb]{%s}\n" \
|
||||
"%s" \
|
||||
"%s\n" \
|
||||
% (bg_color, fg, match.group()))
|
||||
continue
|
||||
|
||||
except:
|
||||
# Unable to open the file, but do nothing here because
|
||||
# the calling function will act on the value of 'success'.
|
||||
warning('Warning in color_pdf! Unable to open "%s"' % latex_file)
|
||||
warning(`sys.exc_type` + ',' + `sys.exc_value`)
|
||||
|
||||
if success:
|
||||
copyfileobj(tmp, open(latex_file,"wb"), 1)
|
||||
|
||||
return success
|
||||
|
||||
|
||||
def fix_latex_file(latex_file):
|
||||
documentclass_re = re.compile("(\\\\documentclass\[)(1[012]pt,?)(.+)")
|
||||
|
||||
@ -385,9 +349,6 @@ def main(argv):
|
||||
fg_color_dvipng = make_texcolor(fg_color, False)
|
||||
bg_color_dvipng = make_texcolor(bg_color, False)
|
||||
|
||||
fg_color_gr = make_texcolor(fg_color, True)
|
||||
bg_color_gr = make_texcolor(bg_color, True)
|
||||
|
||||
# External programs used by the script.
|
||||
latex = find_exe_or_terminate(latex or latex_commands)
|
||||
bibtex = find_exe(bibtex or bibtex_commands)
|
||||
@ -448,10 +409,6 @@ def main(argv):
|
||||
return legacy_conversion_step1(latex_file, dpi, output_format,
|
||||
fg_color, bg_color, latex, pdf_output)
|
||||
|
||||
# Move color information for PDF into the latex file.
|
||||
if not color_pdf(latex_file, bg_color_gr, fg_color_gr):
|
||||
warning("Unable to move color info into the latex file")
|
||||
|
||||
# Compile the latex file.
|
||||
latex_status, latex_stdout = run_latex(latex, latex_file, bibtex)
|
||||
|
||||
|
@ -741,26 +741,7 @@ void PreviewLoader::Impl::dumpPreamble(otexstream & os) const
|
||||
// Also support PDF output (automatically generated e.g. when
|
||||
// \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"
|
||||
<< "\\usepackage[active,delayed,showlabels,lyx]{preview}\n"
|
||||
<< "\n";
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user