return ''
+def checkMacOSappInstalled(prog):
+ '''
+ Use metadata lookup to search for an "installed" macOS application bundle.
+ '''
+ if sys.platform == 'darwin' and len(prog) >= 1:
+ command = r'mdfind "kMDItemContentTypeTree == \"com.apple.application\"c && kMDItemFSName == \"%s\""' % prog
+ result = cmdOutput(command)
+ logger.debug(command + ": " + result)
+ return result != ''
+ return False
+
+
def checkProgAlternatives(description, progs, rc_entry=None,
alt_rc_entry=None, path=None, not_found=''):
'''
continue
msg = '+checking for "' + ac_word + '"... '
found_alt = False
+ if len(alt_rc_entry) >= 1 and ac_word.endswith('.app') and checkMacOSappInstalled(ac_word):
+ logger.info('+add alternative app ' + ac_word)
+ addToRC(alt_rc_entry[0].replace('%%', ac_word))
+ found_alt = True
for ac_dir in path:
if hasattr(os, "access") and not os.access(ac_dir, os.F_OK):
continue
def checkEditorNoRC(description, progs, rc_entry=None, path=None):
- ''' The same as checkViewer, but do not add rc entry '''
+ ''' The same as checkEditor, but do not add rc entry '''
if rc_entry is None:
rc_entry = []
if path is None:
if dtl_tools:
# Windows only: DraftDVI
addToRC(r'''\converter latex dvi2 "%s" "latex,hyperref-driver=dvips"
-\converter dvi2 dvi "python -tt $$s/scripts/clean_dvi.py $$i $$o" ""''' % LATEX)
+\converter dvi2 dvi "$${python} $$s/scripts/clean_dvi.py $$i $$o" ""''' % LATEX)
else:
addToRC(r'\converter latex dvi "%s" "latex,hyperref-driver=dvips"' % LATEX)
# no latex
'xed', 'notepad', 'WinEdt', 'WinShell', 'PSPad']
def checkFormatEntries(dtl_tools):
- ''' Check all formats (\Format entries) '''
+ r''' Check all formats (\Format entries) '''
checkViewerEditor('a Tgif viewer and editor', ['tgif'],
rc_entry = [r'\Format tgif "obj, tgo" Tgif "" "%%" "%%" "vector" "application/x-tgif"'])
#
checkViewer('a PDF previewer',
['pdfview', 'kpdf', 'okular', 'qpdfview --unique',
'evince', 'xreader', 'kghostview', 'xpdf', 'SumatraPDF',
- 'acrobat', 'acroread', 'mupdf',
+ 'acrobat', 'acroread', 'mupdf', 'Skim.app',
'gv', 'ghostview', 'AcroRd32', 'gsview64', 'gsview32'],
rc_entry = [r'''\Format pdf pdf "PDF (ps2pdf)" P "%%" "" "document,vector,menu=export" ""
\Format pdf2 pdf "PDF (pdflatex)" F "%%" "" "document,vector,menu=export" ""
def checkConverterEntries():
- ''' Check all converters (\converter entries) '''
+ r''' Check all converters (\converter entries) '''
checkProg('the pdflatex program', ['pdflatex $$i'],
rc_entry = [ r'\converter pdflatex pdf2 "%%" "latex=pdflatex,hyperref-driver=pdftex"' ])
path, t2l = checkProg('a LaTeX/Noweb -> LyX converter', [quoteIfSpace(in_binary_subdir), quoteIfSpace(in_binary_subdir + version_suffix), quoteIfSpace(in_binary_dir), quoteIfSpace(in_binary_dir + version_suffix), 'tex2lyx' + version_suffix, 'tex2lyx'],
rc_entry = [r'''\converter latex lyx "%% -f $$i $$o" ""
-\converter latexclipboard lyx "%% -fixedenc utf8 -f $$i $$o" ""
+\converter latexclipboard lyx "%% -fixedenc utf8 -c $$c -m $$m -f $$i $$o" ""
\converter literate lyx "%% -n -m noweb -f $$i $$o" ""
\converter sweave lyx "%% -n -m sweave -f $$i $$o" ""
\converter knitr lyx "%% -n -m knitr -f $$i $$o" ""'''], not_found = 'tex2lyx')
checkProg('an HTML -> LaTeX converter', ['html2latex $$i', 'gnuhtml2latex',
'htmltolatex -input $$i -output $$o', 'htmltolatex.jar -input $$i -output $$o'],
rc_entry = [ r'\converter html latex "%%" ""',
- r'\converter html latex "python -tt $$s/scripts/html2latexwrapper.py %% $$i $$o" ""',
+ r'\converter html latex "$${python} $$s/scripts/html2latexwrapper.py %% $$i $$o" ""',
r'\converter html latex "%%" ""',
r'\converter html latex "%%" ""', '' ])
#
['elyxer.py --html --nofooter --unicode --directory $$r $$i $$o', 'elyxer --html --nofooter --unicode --directory $$r $$i $$o'],
rc_entry = [ r'\converter lyx word "%%" ""' ])
if elyxer.find('elyxer') >= 0:
- addToRC(r'''\copier html "python -tt $$s/scripts/ext_copy.py -e html,png,jpg,jpeg,css $$i $$o"''')
- addToRC(r'''\copier wordhtml "python -tt $$s/scripts/ext_copy.py -e html,png,jpg,jpeg,css $$i $$o"''')
+ addToRC(r'''\copier html "$${python} $$s/scripts/ext_copy.py -e html,png,jpg,jpeg,css $$i $$o"''')
+ addToRC(r'''\copier wordhtml "$${python} $$s/scripts/ext_copy.py -e html,png,jpg,jpeg,css $$i $$o"''')
else:
# search for HTML converters other than eLyXer
# On SuSE the scripts have a .sh suffix, and on debian they are in /usr/share/tex4ht/
'latex2html -no_subdir -split 0 -show_section_numbers $$i', 'hevea -s $$i'],
rc_entry = [ r'\converter latex html "%%" "needaux"' ])
if htmlconv.find('htlatex') >= 0 or htmlconv == 'latex2html':
- addToRC(r'''\copier html "python -tt $$s/scripts/ext_copy.py -e html,png,css $$i $$o"''')
+ addToRC(r'''\copier html "$${python} $$s/scripts/ext_copy.py -e html,png,css $$i $$o"''')
else:
- addToRC(r'''\copier html "python -tt $$s/scripts/ext_copy.py $$i $$o"''')
+ addToRC(r'''\copier html "$${python} $$s/scripts/ext_copy.py $$i $$o"''')
path, htmlconv = checkProg('a LaTeX -> HTML (MS Word) converter', ["htlatex $$i 'html,word' 'symbol/!' '-cvalidate'",
"htlatex.sh $$i 'html,word' 'symbol/!' '-cvalidate'",
"/usr/share/tex4ht/htlatex $$i 'html,word' 'symbol/!' '-cvalidate'"],
rc_entry = [ r'\converter latex wordhtml "%%" "needaux"' ])
if htmlconv.find('htlatex') >= 0:
- addToRC(r'''\copier wordhtml "python -tt $$s/scripts/ext_copy.py -e html,png,css $$i $$o"''')
+ addToRC(r'''\copier wordhtml "$${python} $$s/scripts/ext_copy.py -e html,png,css $$i $$o"''')
else:
- addToRC(r'''\copier wordhtml "python -tt $$s/scripts/ext_copy.py $$i $$o"''')
+ addToRC(r'''\copier wordhtml "$${python} $$s/scripts/ext_copy.py $$i $$o"''')
# Check if LyXBlogger is installed
xpath = 'none'
global java
if xsltproc != '':
- addToRC('\\converter docbook5 epub "python $$s/scripts/docbook2epub.py none none \\"' + xsltproc + '\\" ' + xpath + ' $$i $$r $$o" ""')
+ addToRC(r'\converter docbook5 epub "$${python} $$s/scripts/docbook2epub.py none none \"' + xsltproc + r'\" ' + xpath + ' $$i $$r $$o" ""')
elif java != '':
- addToRC('\\converter docbook5 epub "python $$s/scripts/docbook2epub.py \\"' + java + '\\" none none ' + xpath + ' $$i $$r $$o" ""')
+ 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 "%%" ""' ])
# Only define a converter from pdf6 for graphics
checkProg('a PDF to EPS converter', ['pdftops -eps -f 1 -l 1 $$i $$o'],
rc_entry = [ r'\converter pdf6 eps "%%" ""' ])
- # Define a converter from pdf6 to png for Macs where pdftops is missing.
+ # sips:Define a converter from pdf6 to png for Macs where pdftops is missing.
# The converter utility sips allows to force the dimensions of the resulting
# png image. The value of 800 pixel for the width is arbitrary and not
# related to the current screen resolution or width.
# There is no converter parameter for this information.
+ #
+ #pdftoppm: Some systems ban IM eps->png conversion. We will offer eps->pdf->png route instead.
checkProg('a PDF to PNG converter',
- ['sips --resampleWidth 800 --setProperty format png $$i --out $$o'],
+ ['sips --resampleWidth 800 --setProperty format png $$i --out $$o' , 'pdftoppm -r 72 -png -singlefile $$i > $$o'],
rc_entry = [ r'\converter pdf6 png "%%" ""' ])
# Create one converter for a PDF produced using TeX fonts and one for a
# PDF produced using non-TeX fonts. This does not produce non-unique
# PDF produced using non-TeX fonts. This does not produce non-unique
# conversion paths, since a given document either uses TeX fonts or not.
checkProg('Ghostscript', ["gswin32c", "gswin64c", "gs"],
- rc_entry = [ r'''\converter pdf2 pdf8 "python -tt $$s/scripts/convert_pdf.py $$i $$o ebook" ""
-\converter pdf4 pdf8 "python -tt $$s/scripts/convert_pdf.py $$i $$o ebook" ""''' ])
+ rc_entry = [ r'''\converter pdf2 pdf8 "$${python} $$s/scripts/convert_pdf.py $$i $$o ebook" ""
+\converter pdf4 pdf8 "$${python} $$s/scripts/convert_pdf.py $$i $$o ebook" ""''' ])
#
checkProg('a Beamer info extractor', ['makebeamerinfo -p $$i'],
rc_entry = [ r'\converter pdf2 beamer.info "%%" ""' ])
\converter fig ppm "fig2dev -L ppm $$i $$o" ""
\converter fig svg "fig2dev -L svg $$i $$o" ""
\converter fig png "fig2dev -L png $$i $$o" ""
-\converter fig pdftex "python -tt $$s/scripts/fig2pdftex.py $$i $$o" ""
-\converter fig pstex "python -tt $$s/scripts/fig2pstex.py $$i $$o" ""''')
+\converter fig pdftex "$${python} $$s/scripts/fig2pdftex.py $$i $$o" ""
+\converter fig pstex "$${python} $$s/scripts/fig2pstex.py $$i $$o" ""''')
#
if inkscape_stable:
checkProg('a SVG -> PDFTeX converter', [inkscape_cl],
- rc_entry = [ r'\converter svg pdftex "python -tt $$s/scripts/svg2pdftex.py %% $$p$$i $$p$$o" ""'],
+ rc_entry = [ r'\converter svg pdftex "$${python} $$s/scripts/svg2pdftex.py %% $$p$$i $$p$$o" ""'],
path = [inkscape_path])
#
checkProg('a SVG -> PSTeX converter', [inkscape_cl],
- rc_entry = [ r'\converter svg pstex "python -tt $$s/scripts/svg2pstex.py %% $$p$$i $$p$$o" ""'],
+ rc_entry = [ r'\converter svg pstex "$${python} $$s/scripts/svg2pstex.py %% $$p$$i $$p$$o" ""'],
path = [inkscape_path])
else:
checkProg('a SVG -> PDFTeX converter', [inkscape_cl],
- rc_entry = [ r'\converter svg pdftex "python -tt $$s/scripts/svg2pdftex.py --unstable %% $$p$$i $$p$$o" ""'],
+ rc_entry = [ r'\converter svg pdftex "$${python} $$s/scripts/svg2pdftex.py --unstable %% $$p$$i $$p$$o" ""'],
path = [inkscape_path])
#
checkProg('a SVG -> PSTeX converter', [inkscape_cl],
- rc_entry = [ r'\converter svg pstex "python -tt $$s/scripts/svg2pstex.py --unstable %% $$p$$i $$p$$o" ""'],
+ rc_entry = [ r'\converter svg pstex "$${python} $$s/scripts/svg2pstex.py --unstable %% $$p$$i $$p$$o" ""'],
path = [inkscape_path])
#
checkProg('a TIFF -> PS converter', ['tiff2ps $$i > $$o'],
checkProg('an EPS -> PDF converter', ['epstopdf'],
rc_entry = [ r'\converter eps pdf6 "epstopdf --outfile=$$o $$i" ""'])
#
- checkProg('an EPS -> PNG converter', ['magick $$i $$o', 'convert $$i $$o'],
- rc_entry = [ r'\converter eps png "%%" ""'])
+ # Due to more restrictive policies, it is possible that (image)magick
+ # does not allow conversions from eps to png.
+ # So before setting the converter test it it on a mock file
+ _, cmd = checkProg('an EPS -> PNG converter', ['magick', 'convert'])
+ if cmd:
+ writeToFile('mock.eps', r'%!PS')
+ try:
+ subprocess.check_call([cmd, "mock.eps", "mock.png"])
+ removeFiles(['mock.eps', 'mock.png'])
+ rc_entry = r'\converter eps png "%s $$i[0] $$o" ""'
+ addToRC(rc_entry % cmd)
+ except:
+ removeFiles(['mock.eps'])
+ #needs empty record otherwise default converter will be issued
+ rc_entry = r'\converter eps png "" ""'
+ addToRC(rc_entry)
+ logger.info('ImageMagick seems to ban conversions from EPS. Disabling direct EPS->PNG.')
#
# no agr -> pdf6 converter, since the pdf library used by gracebat is not
# free software and therefore not compiled in in many installations.
#
checkProg('Gnuplot', ['gnuplot'],
rc_entry = [ r'''\Format gnuplot "gp, gnuplot" "Gnuplot" "" "" "" "vector" "text/plain"
-\converter gnuplot pdf6 "python -tt $$s/scripts/gnuplot2pdf.py $$i $$o" "needauth"''' ])
+\converter gnuplot pdf6 "$${python} $$s/scripts/gnuplot2pdf.py $$i $$o" "needauth"''' ])
#
# gnumeric/xls/ods to tex
checkProg('a spreadsheet -> latex converter', ['ssconvert'],
\converter oocalc html_table "ssconvert --export-type=Gnumeric_html:html40frag $$i $$o" ""
\converter excel html_table "ssconvert --export-type=Gnumeric_html:html40frag $$i $$o" ""
\converter excel2 html_table "ssconvert --export-type=Gnumeric_html:html40frag $$i $$o" ""
-\converter gnumeric xhtml_table "python $$s/scripts/spreadsheet_to_docbook.py $$i $$o" ""
-\converter oocalc xhtml_table "python $$s/scripts/spreadsheet_to_docbook.py $$i $$o" ""
-\converter excel xhtml_table "python $$s/scripts/spreadsheet_to_docbook.py $$i $$o" ""
-\converter excel2 xhtml_table "python $$s/scripts/spreadsheet_to_docbook.py $$i $$o" ""
+\converter gnumeric xhtml_table "$${python} $$s/scripts/spreadsheet_to_docbook.py $$i $$o" ""
+\converter oocalc xhtml_table "$${python} $$s/scripts/spreadsheet_to_docbook.py $$i $$o" ""
+\converter excel xhtml_table "$${python} $$s/scripts/spreadsheet_to_docbook.py $$i $$o" ""
+\converter excel2 xhtml_table "$${python} $$s/scripts/spreadsheet_to_docbook.py $$i $$o" ""
'''])
path, lilypond = checkProg('a LilyPond -> EPS/PDF/PNG converter', ['lilypond'])
if (lilypond):
version_string = cmdOutput("lilypond --version")
- match = re.match('GNU LilyPond (\S+)', version_string)
+ match = re.match(r'GNU LilyPond (\S+)', version_string)
if match:
version_number = match.groups()[0]
version = version_number.split('.')
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\""]:
+ for cmd in ["lilypond-book", os.path.basename(sys.executable) + ' "' + path + '/lilypond-book"']:
version_string = cmdOutput(cmd + " --version")
if len(version_string) == 0:
continue
found_lilypond_book = True
- match = re.match('(\S+)$', version_string)
+ match = re.match(r'(\S+)$', version_string)
if match:
version_number = match.groups()[0]
version = version_number.split('.')
# 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('"', '\\"')
+ 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)
+
+ # early exit on first match, avoid 2nd try with python call
+ # in case of lilypond-book being an executable or shell script the python call is useless
+ break
else:
logger.info('+ found LilyPond-book, but version %s is too old.' % version_number)
if not found_lilypond_book:
# Currently, lyxpak outputs a gzip compressed tar archive on *nix
# and a zip archive on Windows.
# So, we configure the appropriate version according to the platform.
- cmd = r'\converter lyx %s "python -tt $$s/scripts/lyxpak.py $$r/$$f" ""'
+ cmd = r'\converter lyx %s "$${python} $$s/scripts/lyxpak.py $$r/$$f" ""'
if os.name == 'nt':
addToRC(r'\Format lyxzip zip "LyX Archive (zip)" "" "" "" "document,menu=export" ""')
addToRC(cmd % "lyxzip")
#
# Entries that do not need checkProg
addToRC(r'''
-\converter csv lyx "python -tt $$s/scripts/csv2lyx.py $$i $$o" ""
-\converter fen asciichess "python -tt $$s/scripts/fen2ascii.py $$i $$o" ""
-\converter lyx lyx13x "python -tt $$s/lyx2lyx/lyx2lyx -V 1.3 -o $$o $$i" ""
-\converter lyx lyx14x "python -tt $$s/lyx2lyx/lyx2lyx -V 1.4 -o $$o $$i" ""
-\converter lyx lyx15x "python -tt $$s/lyx2lyx/lyx2lyx -V 1.5 -o $$o $$i" ""
-\converter lyx lyx16x "python -tt $$s/lyx2lyx/lyx2lyx -V 1.6 -o $$o $$i" ""
-\converter lyx lyx20x "python -tt $$s/lyx2lyx/lyx2lyx -V 2.0 -o $$o $$i" ""
-\converter lyx lyx21x "python -tt $$s/lyx2lyx/lyx2lyx -V 2.1 -o $$o $$i" ""
-\converter lyx lyx22x "python -tt $$s/lyx2lyx/lyx2lyx -V 2.2 -o $$o $$i" ""
-\converter lyx lyx23x "python -tt $$s/lyx2lyx/lyx2lyx -V 2.3 -o $$o $$i" ""
-\converter lyx clyx "python -tt $$s/lyx2lyx/lyx2lyx -V 1.4 -o $$o -c big5 $$i" ""
-\converter lyx jlyx "python -tt $$s/lyx2lyx/lyx2lyx -V 1.4 -o $$o -c euc_jp $$i" ""
-\converter lyx klyx "python -tt $$s/lyx2lyx/lyx2lyx -V 1.4 -o $$o -c euc_kr $$i" ""
-\converter clyx lyx "python -tt $$s/lyx2lyx/lyx2lyx -c big5 -o $$o $$i" ""
-\converter jlyx lyx "python -tt $$s/lyx2lyx/lyx2lyx -c euc_jp -o $$o $$i" ""
-\converter klyx lyx "python -tt $$s/lyx2lyx/lyx2lyx -c euc_kr -o $$o $$i" ""
-\converter lyxpreview png "python -tt $$s/scripts/lyxpreview2bitmap.py --png" ""
-\converter lyxpreview ppm "python -tt $$s/scripts/lyxpreview2bitmap.py --ppm" ""
+\converter csv lyx "$${python} $$s/scripts/csv2lyx.py $$i $$o" ""
+\converter fen asciichess "$${python} $$s/scripts/fen2ascii.py $$i $$o" ""
+\converter lyx lyx13x "$${python} $$s/lyx2lyx/lyx2lyx -V 1.3 -o $$o $$i" ""
+\converter lyx lyx14x "$${python} $$s/lyx2lyx/lyx2lyx -V 1.4 -o $$o $$i" ""
+\converter lyx lyx15x "$${python} $$s/lyx2lyx/lyx2lyx -V 1.5 -o $$o $$i" ""
+\converter lyx lyx16x "$${python} $$s/lyx2lyx/lyx2lyx -V 1.6 -o $$o $$i" ""
+\converter lyx lyx20x "$${python} $$s/lyx2lyx/lyx2lyx -V 2.0 -o $$o $$i" ""
+\converter lyx lyx21x "$${python} $$s/lyx2lyx/lyx2lyx -V 2.1 -o $$o $$i" ""
+\converter lyx lyx22x "$${python} $$s/lyx2lyx/lyx2lyx -V 2.2 -o $$o $$i" ""
+\converter lyx lyx23x "$${python} $$s/lyx2lyx/lyx2lyx -V 2.3 -o $$o $$i" ""
+\converter lyx clyx "$${python} $$s/lyx2lyx/lyx2lyx -V 1.4 -o $$o -c big5 $$i" ""
+\converter lyx jlyx "$${python} $$s/lyx2lyx/lyx2lyx -V 1.4 -o $$o -c euc_jp $$i" ""
+\converter lyx klyx "$${python} $$s/lyx2lyx/lyx2lyx -V 1.4 -o $$o -c euc_kr $$i" ""
+\converter clyx lyx "$${python} $$s/lyx2lyx/lyx2lyx -c big5 -o $$o $$i" ""
+\converter jlyx lyx "$${python} $$s/lyx2lyx/lyx2lyx -c euc_jp -o $$o $$i" ""
+\converter klyx lyx "$${python} $$s/lyx2lyx/lyx2lyx -c euc_kr -o $$o $$i" ""
+\converter lyxpreview png "$${python} $$s/scripts/lyxpreview2bitmap.py --png" ""
+\converter lyxpreview ppm "$${python} $$s/scripts/lyxpreview2bitmap.py --ppm" ""
''')
## FIXME: MAPLE is not used anywhere
# path, MAPLE = checkProg('Maple', ['maple'])
# Add the rest of the entries (no checkProg is required)
- addToRC(r'''\citation_search_view "python -tt $$s/scripts/lyxpaperview.py"''')
- addToRC(r'''\copier fig "python -tt $$s/scripts/fig_copy.py $$i $$o"
-\copier pstex "python -tt $$s/scripts/tex_copy.py $$i $$o $$l"
-\copier pdftex "python -tt $$s/scripts/tex_copy.py $$i $$o $$l"
-\copier program "python -tt $$s/scripts/ext_copy.py $$i $$o"
+ addToRC(r'''\citation_search_view "$${python} $$s/scripts/lyxpaperview.py"''')
+ addToRC(r'''\copier fig "$${python} $$s/scripts/fig_copy.py $$i $$o"
+\copier pstex "$${python} $$s/scripts/tex_copy.py $$i $$o $$l"
+\copier pdftex "$${python} $$s/scripts/tex_copy.py $$i $$o $$l"
+\copier program "$${python} $$s/scripts/ext_copy.py $$i $$o"
''')
def _checkForClassExtension(x):
return x.strip()
def processLayoutFile(file):
- """ process layout file and get a line of result
+ r""" process layout file and get a line of result
Declare lines look like this:
"""
classname = file.split(os.sep)[-1].split('.')[0]
# return ('[a,b]', 'a', ',b,c', 'article') for \DeclareLaTeXClass[a,b,c]{article}
- p = re.compile('\s*#\s*\\\\DeclareLaTeXClass\s*(\[([^,]*)(,.*)*])*\s*{(.*)}\s*$')
- q = re.compile('\s*#\s*\\\\DeclareCategory{(.*)}\s*$')
+ p = re.compile('\\s*#\\s*\\\\DeclareLaTeXClass\\s*(\\[([^,]*)(,.*)*])*\\s*{(.*)}\\s*$')
+ q = re.compile('\\s*#\\s*\\\\DeclareCategory{(.*)}\\s*$')
classdeclaration = ""
categorydeclaration = '""'
for line in open(file, 'r', encoding='utf8').readlines():
# Construct the list of classes to test for.
# build the list of available layout files and convert it to commands
# for chkconfig.ltx
- declare = re.compile('\\s*#\\s*\\\\DeclareLaTeXClass\\s*(\[([^,]*)(,.*)*\])*\\s*{(.*)}\\s*$')
+ declare = re.compile('\\s*#\\s*\\\\DeclareLaTeXClass\\s*(\\[([^,]*)(,.*)*\\])*\\s*{(.*)}\\s*$')
category = re.compile('\\s*#\\s*\\\\DeclareCategory{(.*)}\\s*$')
empty = re.compile('\\s*$')
testclasses = list()
for line in open(file, 'r', encoding='utf8').readlines():
if not empty.match(line) and line[0] != '#'[0]:
if decline == "":
- logger.warning("Failed to find valid \Declare line "
+ logger.warning(r"Failed to find valid \Declare line "
"for layout file `%s'.\n\t=> Skipping this file!" % file)
nodeclaration = True
# A class, but no category declaration. Just break.
def processModuleFile(file, filename):
- ''' process module file and get a line of result
+ r''' process module file and get a line of result
The top of a module file should look like this:
#\DeclareLyXModule[LaTeX Packages]{ModuleName}
We expect output:
"ModuleName" "filename" "Description" "Packages" "Requires" "Excludes" "Category"
'''
- remods = re.compile('\s*#\s*\\\\DeclareLyXModule\s*(?:\[([^]]*?)\])?{(.*)}')
- rereqs = re.compile('\s*#+\s*Requires: (.*)')
- reexcs = re.compile('\s*#+\s*Excludes: (.*)')
+ remods = re.compile('\\s*#\\s*\\\\DeclareLyXModule\\s*(?:\\[([^]]*?)\\])?{(.*)}')
+ rereqs = re.compile(r'\s*#+\s*Requires: (.*)')
+ reexcs = re.compile(r'\s*#+\s*Excludes: (.*)')
recaty = re.compile('\\s*#\\s*\\\\DeclareCategory{(.*)}\\s*$')
- redbeg = re.compile('\s*#+\s*DescriptionBegin\s*$')
- redend = re.compile('\s*#+\s*DescriptionEnd\s*$')
+ redbeg = re.compile(r'\s*#+\s*DescriptionBegin\s*$')
+ redend = re.compile(r'\s*#+\s*DescriptionEnd\s*$')
modname = desc = pkgs = req = excl = catgy = ""
readingDescription = False
continue
if modname == "":
- logger.warning("Module file without \DeclareLyXModule line. ")
+ logger.warning(r"Module file without \DeclareLyXModule line. ")
return ""
if pkgs:
def processCiteEngineFile(file, filename):
- ''' process cite engines file and get a line of result
+ r''' process cite engines file and get a line of result
The top of a cite engine file should look like this:
#\DeclareLyXCiteEngine[LaTeX Packages]{CiteEngineName}
We expect output:
"CiteEngineName" "filename" "CiteEngineType" "CiteFramework" "DefaultBiblio" "Description" "Packages"
'''
- remods = re.compile('\s*#\s*\\\\DeclareLyXCiteEngine\s*(?:\[([^]]*?)\])?{(.*)}')
- redbeg = re.compile('\s*#+\s*DescriptionBegin\s*$')
- redend = re.compile('\s*#+\s*DescriptionEnd\s*$')
- recet = re.compile('\s*CiteEngineType\s*(.*)')
- redb = re.compile('\s*DefaultBiblio\s*(.*)')
- resfm = re.compile('\s*CiteFramework\s*(.*)')
+ remods = re.compile('\\s*#\\s*\\\\DeclareLyXCiteEngine\\s*(?:\\[([^]]*?)\\])?{(.*)}')
+ redbeg = re.compile(r'\s*#+\s*DescriptionBegin\s*$')
+ redend = re.compile(r'\s*#+\s*DescriptionEnd\s*$')
+ recet = re.compile(r'\s*CiteEngineType\s*(.*)')
+ redb = re.compile(r'\s*DefaultBiblio\s*(.*)')
+ resfm = re.compile(r'\s*CiteFramework\s*(.*)')
modname = desc = pkgs = cet = db = cfm = ""
readingDescription = False
continue
if modname == "":
- logger.warning("Cite Engine File file without \DeclareLyXCiteEngine line. ")
+ logger.warning(r"Cite Engine File file without \DeclareLyXCiteEngine line. ")
return ""
if pkgs:
lyx_check_config = True
lyx_kpsewhich = True
outfile = 'lyxrc.defaults'
- lyxrc_fileformat = 36
+ lyxrc_fileformat = 37
rc_entries = ''
lyx_keep_temps = False
version_suffix = ''