"for each prog and not_found.")
sys.exit(2)
logger.info('checking for ' + description + '...')
- ## print '(' + ','.join(progs) + ')',
+ logger.debug('(' + ','.join(progs) + ')')
additional_path = path
path = os.environ["PATH"].split(os.pathsep) + additional_path
extlist = ['']
addToRC(rc_entry[idx].replace('%%', ac_prog))
return [ac_dir, ac_word]
# if not successful
- logger.info(msg + ' no')
+ logger.info(msg + ' not in path')
# write rc entries for 'not found'
if len(rc_entry) > 0: # the last one.
addToRC(rc_entry[-1].replace('%%', not_found))
return ['', not_found]
+def check_java():
+ """ Check for Java, don't give up as often as checkProg, using platform-dependent techniques """
+ if os.name == 'nt':
+ # Check in the registry.
+ try: # Python 3.
+ import winreg
+ except ImportError: # Python 2.
+ import _winreg as winreg
+
+ potential_keys_64b = ["SOFTWARE\\JavaSoft\\Java Runtime Environment", "SOFTWARE\\JavaSoft\\Java Development Kit",
+ "SOFTWARE\\JavaSoft\\JDK", "SOFTWARE\\JavaSoft\\JRE"]
+ potential_keys_32b = [k.replace('SOFTWARE', 'SOFTWARE\\WOW6432Node') for k in potential_keys_64b]
+ potential_keys = potential_keys_64b + potential_keys_32b
+
+ reg_hive = winreg.HKEY_LOCAL_MACHINE
+ for key in potential_keys:
+ try:
+ with winreg.OpenKey(reg_hive, key) as reg_key:
+ version = winreg.QueryValueEx(reg_key, "CurrentVersion")[0]
+ with winreg.OpenKey(reg_hive, key + '\\' + version) as reg_key:
+ java_bin = winreg.QueryValueEx(reg_key, "JavaHome")[0] + '\\bin\\java.exe'
+ logger.info('+checking for java: found in Windows registry, ' + str(java_bin))
+ return java_bin
+ except OSError:
+ pass
+
+ # The test failed, no Java found.
+ return ''
+ else:
+ return ''
+
+
def checkProgAlternatives(description, progs, rc_entry=None,
alt_rc_entry=None, path=None, not_found=''):
'''
logger.error("rc entry should have one item or item for each prog and not_found.")
sys.exit(2)
logger.info('checking for ' + description + '...')
- ## print '(' + ','.join(progs) + ')',
+ logger.debug('(' + ','.join(progs) + ')')
additional_path = path
path = os.environ["PATH"].split(os.pathsep) + additional_path
extlist = ['']
break
if found_alt:
break
- if found_alt == False:
+ if not found_alt:
# if not successful
logger.info(msg + ' no')
if found_prime:
\Format docbook5 xml "DocBook 5" "" "" "%%" "document,menu=export" "application/docbook+xml"
\Format dot dot "Graphviz Dot" "" "" "%%" "vector" "text/vnd.graphviz"
\Format dviluatex tex "LaTeX (dviluatex)" "" "" "%%" "document,menu=export" ""
+\Format epub epub ePub "" "" "%%" "document,menu=export" "application/epub+zip"
\Format platex tex "LaTeX (pLaTeX)" "" "" "%%" "document,menu=export" ""
\Format literate nw NoWeb N "" "%%" "document,menu=export" ""
\Format sweave Rnw "Sweave" S "" "%%" "document,menu=export" ""
checkProg('an Open Document (Pandoc) -> LaTeX converter', ['pandoc -s -f odt -o $$o -t latex $$i'],
rc_entry = [ r'\converter odt3 latex "%%" ""' ])
#
- checkProg('DocBook converter -> PDF (docbook)', ['pandoc -f docbook -t latex --latex-engine=lualatex --toc -o $$o $$i'],
- rc_entry = [ r'\converter docbook5 pdf9 "%%" ""' ])
+ checkProg('DocBook converter -> PDF (docbook)',
+ ['pandoc -f docbook -t latex --pdf-engine=lualatex --toc -o $$o $$i', # Since Pandoc 2.0
+ 'pandoc -f docbook -t latex --latex-engine=lualatex --toc -o $$o $$i'], # Up to Pandoc 1.19
+ rc_entry = [ r'\converter docbook5 pdf9 "%%" ""' ])
+ #
+ xpath, xslt_sheet = checkProg('XSLT stylesheets for ePub', ['chunk.xsl'], '', ['/usr/share/xml/docbook/stylesheet/docbook-xsl-ns/epub3'])
+ if xslt_sheet == 'chunk.xsl':
+ xpath = '/usr/share/xml/docbook/stylesheet/docbook-xsl-ns'
+ else:
+ xpath = 'none'
+ global java
+ if xsltproc != '':
+ addToRC(r'\converter docbook5 epub "python $$s/scripts/docbook2epub.py none none \"' + xsltproc + r'\" ' + xpath + ' $$i $$r $$o" ""')
+ elif java != '':
+ addToRC(r'\converter docbook5 epub "python $$s/scripts/docbook2epub.py \"' + java + r'\" none none ' + xpath + ' $$i $$r $$o" ""')
#
checkProg('a MS Word Office Open XML converter -> LaTeX', ['pandoc -s -f docx -o $$o -t latex $$i'],
rc_entry = [ r'\converter word2 latex "%%" ""' ])
logger.info('+ found LilyPond, but could not extract version number.')
#
path, lilypond_book = checkProg('a LilyPond book (LaTeX) -> LaTeX converter', ['lilypond-book'])
- if (lilypond_book):
- version_string = cmdOutput("lilypond-book --version")
- match = re.match('(\S+)$', version_string)
- if match:
- version_number = match.groups()[0]
- version = version_number.split('.')
- if int(version[0]) > 2 or (len(version) > 1 and int(version[0]) == 2 and int(version[1]) >= 13):
- # Note: The --lily-output-dir flag is required because lilypond-book
- # does not process input again unless the input has changed,
- # even if the output format being requested is different. So
- # once a .eps file exists, lilypond-book won't create a .pdf
- # even when requested with --pdf. This is a problem if a user
- # clicks View PDF after having done a View DVI. To circumvent
- # this, use different output folders for eps and pdf outputs.
- addToRC(r'\converter lilypond-book latex "lilypond-book --safe --lily-output-dir=ly-eps $$i" ""')
- addToRC(r'\converter lilypond-book pdflatex "lilypond-book --safe --pdf --latex-program=pdflatex --lily-output-dir=ly-pdf $$i" ""')
- addToRC(r'\converter lilypond-book-ja platex "lilypond-book --safe --pdf --latex-program=platex --lily-output-dir=ly-pdf $$i" ""')
- addToRC(r'\converter lilypond-book xetex "lilypond-book --safe --pdf --latex-program=xelatex --lily-output-dir=ly-pdf $$i" ""')
- addToRC(r'\converter lilypond-book luatex "lilypond-book --safe --pdf --latex-program=lualatex --lily-output-dir=ly-pdf $$i" ""')
- addToRC(r'\converter lilypond-book dviluatex "lilypond-book --safe --latex-program=dvilualatex --lily-output-dir=ly-eps $$i" ""')
- logger.info('+ found LilyPond-book version %s.' % version_number)
- else:
- logger.info('+ found LilyPond-book, but version %s is too old.' % version_number)
- else:
+ if lilypond_book:
+ found_lilypond_book = False
+ # On Windows, the file lilypond-book is not directly callable, it must be passed as argument to python.
+ for cmd in ["lilypond-book", "python \"" + path + "/lilypond-book\""]:
+ version_string = cmdOutput(cmd + " --version")
+ if len(version_string) == 0:
+ continue
+ found_lilypond_book = True
+
+ match = re.match('(\S+)$', version_string)
+ if match:
+ version_number = match.groups()[0]
+ version = version_number.split('.')
+ if int(version[0]) > 2 or (len(version) > 1 and int(version[0]) == 2 and int(version[1]) >= 13):
+ # Note: The --lily-output-dir flag is required because lilypond-book
+ # does not process input again unless the input has changed,
+ # even if the output format being requested is different. So
+ # once a .eps file exists, lilypond-book won't create a .pdf
+ # even when requested with --pdf. This is a problem if a user
+ # clicks View PDF after having done a View DVI. To circumvent
+ # this, use different output folders for eps and pdf outputs.
+ cmd = cmd.replace('"', r'\"')
+ addToRC(r'\converter lilypond-book latex "' + cmd + ' --safe --lily-output-dir=ly-eps $$i" ""')
+ addToRC(r'\converter lilypond-book pdflatex "' + cmd + ' --safe --pdf --latex-program=pdflatex --lily-output-dir=ly-pdf $$i" ""')
+ addToRC(r'\converter lilypond-book-ja platex "' + cmd + ' --safe --pdf --latex-program=platex --lily-output-dir=ly-pdf $$i" ""')
+ addToRC(r'\converter lilypond-book xetex "' + cmd + ' --safe --pdf --latex-program=xelatex --lily-output-dir=ly-pdf $$i" ""')
+ addToRC(r'\converter lilypond-book luatex "' + cmd + ' --safe --pdf --latex-program=lualatex --lily-output-dir=ly-pdf $$i" ""')
+ addToRC(r'\converter lilypond-book dviluatex "' + cmd + ' --safe --latex-program=dvilualatex --lily-output-dir=ly-eps $$i" ""')
+
+ # Also create the entry to apply LilyPond on DocBook files. However,
+ # command must be passed as argument, and it might already have
+ # quoted parts. LyX doesn't yet handle double-quoting of commands.
+ # Hence, pass as argument either cmd (if it's a simple command) or
+ # the Python file that should be called (typical on Windows).
+ docbook_lilypond_cmd = cmd
+ if "python" in docbook_lilypond_cmd:
+ docbook_lilypond_cmd = '"' + path + '/lilypond-book"'
+ addToRC(r'\copier docbook5 "python $$s/scripts/docbook_copy.py ' + docbook_lilypond_cmd.replace('"', r'\"') + r' $$i $$o"')
+
+ logger.info('+ found LilyPond-book version %s.' % version_number)
+ else:
+ logger.info('+ found LilyPond-book, but version %s is too old.' % version_number)
+ if not found_lilypond_book:
logger.info('+ found LilyPond-book, but could not extract version number.')
#
checkProg('a Noteedit -> LilyPond converter', ['noteedit --export-lilypond $$i'],
lyx_check_config = True
lyx_kpsewhich = True
outfile = 'lyxrc.defaults'
- lyxrc_fileformat = 34
+ lyxrc_fileformat = 36
rc_entries = ''
lyx_keep_temps = False
version_suffix = ''
LATEX = checkLatex(dtl_tools)
# check java and perl before any checkProg that may require them
java = checkProg('a java interpreter', ['java'])[1]
+ if java == '':
+ java = check_java()
perl = checkProg('a perl interpreter', ['perl'])[1]
+ xsltproc = checkProg('xsltproc', ['xsltproc'])[1]
(inkscape_path, inkscape_gui) = os.path.split(checkInkscape())
# On Windows, we need to call the "inkscape.com" wrapper
# for command line purposes. Other OSes do not differentiate.