X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Fconfigure.py;h=0dcc4ce1058128edf25a6f0eb3e0565bb92b7b88;hb=0430132aa049f2a97280bcbcff69f71d42ed7d98;hp=1554ee5ae8d1bff2f1bc0f2c18aa31ed81d602f4;hpb=92b08869b2403b4091e7081e1001a33fd5f9c68b;p=lyx.git diff --git a/lib/configure.py b/lib/configure.py index 1554ee5ae8..0dcc4ce105 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -166,7 +166,7 @@ def checkUpgrade(): logger.debug('previous = ' + previous) if os.path.isdir( previous ): logger.info('Found directory "%s".', previous) - copy_tree( previous, cwd, true ) + copy_tree( previous, cwd, True ) logger.info('Content copied to directory "%s".', cwd) return @@ -229,7 +229,7 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''): for searching but the whole string is used to replace %% for a rc_entry. So, feel free to add '$$i' etc for programs. - path: additional pathes + path: additional paths (will be prepended to the program name) rc_entry: entry to outfile, can be 1. emtpy: no rc entry will be added @@ -278,6 +278,8 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''): ac_prog = ac_prog.replace(ac_word, r'%s -jar \"%s\"' % (java, os.path.join(ac_dir, ac_word))) elif ac_word.endswith('.pl'): ac_prog = ac_prog.replace(ac_word, r'%s -w \"%s\"' % (perl, os.path.join(ac_dir, ac_word))) + elif ac_dir in additional_path: + ac_prog = ac_prog.replace(ac_word, r'\"%s\"' % (os.path.join(ac_dir, ac_word))) # write rc entries for this command if len(rc_entry) == 1: addToRC(rc_entry[0].replace('%%', ac_prog)) @@ -337,6 +339,8 @@ def checkProgAlternatives(description, progs, rc_entry = [], alt_rc_entry = [], ac_prog = ac_prog.replace(ac_word, r'%s -jar \"%s\"' % (java, os.path.join(ac_dir, ac_word))) elif ac_word.endswith('.pl'): ac_prog = ac_prog.replace(ac_word, r'%s -w \"%s\"' % (perl, os.path.join(ac_dir, ac_word))) + elif ac_dir in additional_path: + ac_prog = ac_prog.replace(ac_word, r'\"%s\"' % (os.path.join(ac_dir, ac_word))) # write rc entries for this command if found_prime == False: if len(rc_entry) == 1: @@ -468,6 +472,23 @@ def checkDTLtools(): dtl_tools = False return dtl_tools +def checkInkscape(): + ''' Check whether Inkscape is available and return the full path (Windows only) ''' + if os.name != 'nt': + return 'inkscape' + import _winreg + aReg = _winreg.ConnectRegistry(None, _winreg.HKEY_CLASSES_ROOT) + try: + aKey = _winreg.OpenKey(aReg, r"inkscape.svg\DefaultIcon") + val = _winreg.QueryValueEx(aKey, "") + return str(val[0]).split('"')[1].replace('.exe', '') + except EnvironmentError: + try: + aKey = _winreg.OpenKey(aReg, r"Applications\inkscape.exe\shell\open\command") + val = _winreg.QueryValueEx(aKey, "") + return str(val[0]).split('"')[1].replace('.exe', '') + except EnvironmentError: + return 'inkscape' def checkLatex(dtl_tools): ''' Check latex, return lyx_check_config ''' @@ -583,8 +604,9 @@ def checkFormatEntries(dtl_tools): checkViewerEditor('a FEN viewer and editor', ['xboard -lpf $$i -mode EditPosition'], rc_entry = [r'\Format fen fen FEN "" "%%" "%%" "" ""']) # - checkViewerEditor('a SVG viewer and editor', ['inkscape'], - rc_entry = [r'\Format svg "svg, svgz" SVG "" "%%" "%%" "vector,zipped=native" "image/svg+xml"']) + checkViewerEditor('a SVG viewer and editor', [inkscape_name], + rc_entry = [r'\Format svg "svg, svgz" SVG "" "%%" "%%" "vector,zipped=native" "image/svg+xml"'], + path = [inkscape_path]) # imageformats = r'''\Format bmp bmp BMP "" "%s" "%s" "" "image/x-bmp" \Format gif gif GIF "" "%s" "%s" "" "image/gif" @@ -688,7 +710,7 @@ def checkFormatEntries(dtl_tools): checkViewerEditor('a Rich Text and Word viewer', ['libreoffice', 'lwriter', 'lowriter', 'oowriter', 'swriter', 'abiword'], rc_entry = [r'''\Format rtf rtf "Rich Text Format" "" "%%" "%%" "document,vector,menu=export" "application/rtf" \Format word doc "MS Word" W "%%" "%%" "document,vector,menu=export" "application/msword" -\Format word2 docx "MS Word Office Open XML" W "%%" "%%" "document,vector,menu=export" "application/vnd.openxmlformats-officedocument.wordprocessingml.document"''']) +\Format word2 docx "MS Word Office Open XML" O "%%" "%%" "document,vector,menu=export" "application/vnd.openxmlformats-officedocument.wordprocessingml.document"''']) # # entries that do not need checkProg addToRC(r'''\Format date "" "date command" "" "" "" "" "" @@ -832,6 +854,9 @@ def checkConverterEntries(): checkProg('an OpenDocument -> LaTeX converter', ['w2l -clean $$i'], rc_entry = [ r'\converter odt latex "%%" ""' ]) # + checkProg('an Open Document (Pandoc) -> LaTeX converter', ['pandoc -s -f odt -o $$o -t latex $$i'], + rc_entry = [ r'\converter odt3 latex "%%" ""' ]) + # 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 to pdf6, otherwise the odt format could be @@ -879,7 +904,7 @@ def checkConverterEntries(): checkProg('a PS to EPS converter', ['ps2eps -- < $$i > $$o'], rc_entry = [ r'\converter eps2 eps "%%" ""' ]) # - checkProg('a PDF to PS converter', ['pdf2ps $$i $$o', 'pdftops $$i $$o'], + checkProg('a PDF to PS converter', ['pdftops $$i $$o', 'pdf2ps $$i $$o'], rc_entry = [ r'\converter pdf ps "%%" ""' ]) # Only define a converter from pdf6 for graphics checkProg('a PDF to EPS converter', ['pdftops -eps -f 1 -l 1 $$i $$o'], @@ -932,11 +957,17 @@ def checkConverterEntries(): \converter tgif png "tgif -print -color -png -o $$d $$i" "" \converter tgif pdf6 "tgif -print -color -pdf -stdout $$i > $$o" ""''']) # - checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i'], + checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i', inkscape_name + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'], rc_entry = [ r'\converter wmf eps "%%" ""']) # - checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i'], + checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i', inkscape_name + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'], rc_entry = [ r'\converter emf eps "%%" ""']) + # + checkProg('a WMF -> PDF converter', [inkscape_name + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'], + rc_entry = [ r'\converter wmf pdf6 "%%" ""']) + # + checkProg('an EMF -> PDF converter', [inkscape_name + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'], + rc_entry = [ r'\converter emf pdf6 "%%" ""']) # Only define a converter to pdf6 for graphics checkProg('an EPS -> PDF converter', ['epstopdf'], rc_entry = [ r'\converter eps pdf6 "epstopdf --outfile=$$o $$i" ""']) @@ -972,14 +1003,18 @@ def checkConverterEntries(): checkProg('an OpenDocument -> EPS converter', ['libreoffice -headless -nologo -convert-to eps $$i', 'unoconv -f eps --stdout $$i > $$o'], rc_entry = [ r'\converter odg eps2 "%%" ""']) # Only define a converter to pdf6 for graphics - checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', 'inkscape --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'], - rc_entry = [ r'\converter svg pdf6 "%%" ""']) + # Prefer rsvg-convert over inkscape since it is faster (see http://www.lyx.org/trac/ticket/9891) + checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', inkscape_name + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'], + rc_entry = [ r'\converter svg pdf6 "%%" ""'], + path = ['', inkscape_path]) # - checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', 'inkscape --file=$$i --export-area-drawing --without-gui --export-eps=$$o'], - rc_entry = [ r'\converter svg eps "%%" ""']) + checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', inkscape_name + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'], + rc_entry = [ r'\converter svg eps "%%" ""'], + path = ['', inkscape_path]) # - checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', 'inkscape --without-gui --file=$$i --export-png=$$o'], - rc_entry = [ r'\converter svg png "%%" ""']) + checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', inkscape_name + ' --without-gui --file=$$i --export-png=$$o'], + rc_entry = [ r'\converter svg png "%%" ""'], + path = ['', inkscape_path]) # # gnumeric/xls/ods to tex @@ -1163,8 +1198,8 @@ def processLayoutFile(file, bool_docbook): return x.strip() classname = file.split(os.sep)[-1].split('.')[0] # return ('LaTeX', '[a,b]', 'a', ',b,c', 'article') for \DeclareLaTeXClass[a,b,c]{article} - p = re.compile(r'\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}') - q = re.compile(r'\DeclareCategory{(.*)}') + p = re.compile(r'^\s*#\s*\\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}\s*$') + q = re.compile(r'^\s*#\s*\\DeclareCategory{(.*)}\s*$') classdeclaration = "" categorydeclaration = '""' for line in open(file).readlines(): @@ -1259,8 +1294,8 @@ def checkLatexConfig(check_config, bool_docbook): # 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(r'\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}') - category = re.compile(r'\DeclareCategory{(.*)}') + declare = re.compile(r'^\s*#\s*\\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}\s*$') + category = re.compile(r'^\s*#\s*\\DeclareCategory{(.*)}\s*$') empty = re.compile(r'^\s*$') testclasses = list() for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ @@ -1564,6 +1599,7 @@ Format %i # check java and perl before any checkProg that may require them java = checkProg('a java interpreter', ['java'])[1] perl = checkProg('a perl interpreter', ['perl'])[1] + (inkscape_path, inkscape_name) = os.path.split(checkInkscape()) checkFormatEntries(dtl_tools) checkConverterEntries() (chk_docbook, bool_docbook, docbook_cmd) = checkDocBook()