+ return (ps_pages, page_index, pages_parameter)
+
+def main(argv):
+ # Set defaults.
+ dpi = 128
+ fg_color = "000000"
+ bg_color = "ffffff"
+ bibtex = None
+ latex = None
+ lilypond = False
+ lilypond_book = None
+ output_format = "png"
+ script_name = argv[0]
+
+ # Parse and manipulate the command line arguments.
+ try:
+ (opts, args) = getopt.gnu_getopt(argv[1:], "dhv", ["bibtex=", "bg=",
+ "debug", "dpi=", "fg=", "help", "latex=", "lilypond",
+ "lilypond-book=", "png", "ppm", "verbose"])
+ except getopt.GetoptError, err:
+ error("%s\n%s" % (err, usage(script_name)))
+
+ opts.reverse()
+ for opt, val in opts:
+ if opt in ("-h", "--help"):
+ print usage(script_name)
+ sys.exit(0)
+ elif opt == "--bibtex":
+ bibtex = [val]
+ elif opt == "--bg":
+ bg_color = val
+ elif opt in ("-d", "--debug"):
+ import lyxpreview_tools
+ lyxpreview_tools.debug = True
+ elif opt == "--dpi":
+ try:
+ dpi = string.atoi(val)
+ except:
+ error("Cannot convert %s to an integer value" % val)
+ elif opt == "--fg":
+ fg_color = val
+ elif opt == "--latex":
+ latex = [val]
+ elif opt == "--lilypond":
+ lilypond = True
+ elif opt == "--lilypond-book":
+ lilypond_book = [val]
+ elif opt in ("--png", "--ppm"):
+ output_format = opt[2:]
+ elif opt in ("-v", "--verbose"):
+ import lyxpreview_tools
+ lyxpreview_tools.verbose = True
+
+ # Determine input file
+ if len(args) != 1:
+ err = "A single input file is required, %s given" % (len(args) or "none")
+ error("%s\n%s" % (err, usage(script_name)))
+
+ input_path = args[0]
+ dir, latex_file = os.path.split(input_path)
+
+ # Echo the settings
+ progress("Starting %s..." % script_name)
+ progress("Output format: %s" % output_format)
+ progress("Foreground color: %s" % fg_color)
+ progress("Background color: %s" % bg_color)
+ progress("Resolution (dpi): %s" % dpi)
+ progress("File to process: %s" % input_path)
+
+ # Check for the input file
+ if not os.path.exists(input_path):
+ error('File "%s" not found.' % input_path)
+ if len(dir) != 0:
+ os.chdir(dir)
+
+ fg_color_dvipng = make_texcolor(fg_color, False)
+ bg_color_dvipng = make_texcolor(bg_color, False)
+
+ # External programs used by the script.
+ latex = find_exe_or_terminate(latex or latex_commands)
+ bibtex = find_exe(bibtex or bibtex_commands)
+ if lilypond:
+ lilypond_book = find_exe_or_terminate(lilypond_book or
+ ["lilypond-book --safe"])
+
+ # These flavors of latex are known to produce pdf output
+ pdf_output = latex in pdflatex_commands
+
+ progress("Latex command: %s" % latex)
+ progress("Latex produces pdf output: %s" % pdf_output)
+ progress("Bibtex command: %s" % bibtex)
+ progress("Lilypond-book command: %s" % lilypond_book)
+ progress("Preprocess through lilypond-book: %s" % lilypond)
+ progress("Altering the latex file for font size and colors")
+
+ # Omit font size specification in latex file.
+ if not fix_latex_file(latex_file):
+ warning("Unable to remove font size from the latex file")
+
+ if lilypond:
+ progress("Preprocess the latex file through %s" % lilypond_book)
+ if pdf_output:
+ lilypond_book += " --pdf"
+ lilypond_book += " --latex-program=%s" % latex.split()[0]
+
+ # Make a copy of the latex file
+ lytex_file = latex_file_re.sub(".lytex", latex_file)
+ shutil.copyfile(latex_file, lytex_file)
+
+ # Preprocess the latex file through lilypond-book.
+ lytex_status, lytex_stdout = run_tex(lilypond_book, lytex_file)
+
+ if pdf_output:
+ progress("Using the legacy conversion method (PDF support)")
+ return legacy_conversion_step1(latex_file, dpi, output_format, fg_color,
+ bg_color, latex, pdf_output)
+
+ # This can go once dvipng becomes widespread.
+ dvipng = find_exe(["dvipng"])
+ if dvipng == None:
+ progress("Using the legacy conversion method (dvipng not found)")
+ return legacy_conversion_step1(latex_file, dpi, output_format, fg_color,
+ bg_color, latex, pdf_output)
+
+ dv2dt = find_exe(["dv2dt"])
+ if dv2dt == None:
+ progress("Using the legacy conversion method (dv2dt not found)")
+ return legacy_conversion_step1(latex_file, dpi, output_format, fg_color,
+ bg_color, latex, pdf_output)
+
+ pngtopnm = ""
+ if output_format == "ppm":
+ pngtopnm = find_exe(["pngtopnm"])
+ if pngtopnm == None:
+ progress("Using the legacy conversion method (pngtopnm not found)")
+ return legacy_conversion_step1(latex_file, dpi, output_format,
+ fg_color, bg_color, latex, pdf_output)
+
+ # Compile the latex file.
+ latex_status, latex_stdout = run_latex(latex, latex_file, bibtex)
+
+ # The dvi output file name
+ dvi_file = latex_file_re.sub(".dvi", latex_file)
+
+ # If there's no DVI output, look for PDF and go to legacy or fail
+ if not os.path.isfile(dvi_file):
+ # No DVI, is there a PDF?
+ pdf_file = latex_file_re.sub(".pdf", latex_file)
+ if os.path.isfile(pdf_file):
+ progress("%s produced a PDF output, fallback to legacy." \
+ % (os.path.basename(latex)))
+ progress("Using the legacy conversion method (PDF support)")
+ return legacy_conversion_step1(latex_file, dpi, output_format,
+ fg_color, bg_color, latex, True)
+ else:
+ error("No DVI or PDF output. %s failed." \
+ % (os.path.basename(latex)))
+
+ # Look for PS literals in DVI pages
+ # ps_pages: list of page indexes of pages containing PS literals
+ # page_count: total number of pages
+ # pages_parameter: parameter for dvipng to exclude pages with PostScript
+ (ps_pages, page_count, pages_parameter) = find_ps_pages(dvi_file)
+
+ # If all pages need PostScript, directly use the legacy method.
+ if len(ps_pages) == page_count:
+ progress("Using the legacy conversion method (PostScript support)")
+ return legacy_conversion_step1(latex_file, dpi, output_format, fg_color,
+ bg_color, latex, pdf_output)
+