X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Fconfigure.py;h=a1fa57a800861c4c720ffd4b87046a90dd5dcba4;hb=90f7007a2e6c78ffd031e4636ff909ab1bc2ddec;hp=59567717b28340f4b8c1b24aaf80c23874700839;hpb=061924e2758fc43aed4b94ee2027026997343a51;p=lyx.git diff --git a/lib/configure.py b/lib/configure.py index 59567717b2..a1fa57a800 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -563,6 +563,7 @@ def checkFormatEntries(dtl_tools): 'pybliographic', 'bibdesk', 'gbib', 'kbib', \ 'kbibtex', 'sixpack', 'bibedit', 'tkbibtex' \ 'xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \ + 'jedit', 'TeXnicCenter', 'WinEdt', 'WinShell', 'PSPad', \ 'nedit', 'gedit', 'notepad', 'geany', 'leafpad', 'mousepad'], rc_entry = [r'''\Format bibtex bib "BibTeX" "" "" "%%" "" "text/x-bibtex"''' ]) # @@ -573,7 +574,7 @@ def checkFormatEntries(dtl_tools): \Format eps2 eps "EPS (uncropped)" "" "%%" "" "vector" "" \Format ps ps Postscript t "%%" "" "document,vector,menu=export" "application/postscript"''']) # for xdg-open issues look here: http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg151818.html - checkViewer('a PDF previewer', ['kpdf', 'okular', 'evince', 'kghostview', 'xpdf', 'acrobat', 'acroread', \ + checkViewer('a PDF previewer', ['pdfview', 'kpdf', 'okular', 'evince', 'kghostview', 'xpdf', 'acrobat', 'acroread', \ 'gv', 'ghostview'], rc_entry = [r'''\Format pdf pdf "PDF (ps2pdf)" P "%%" "" "document,vector,menu=export" "application/pdf" \Format pdf2 pdf "PDF (pdflatex)" F "%%" "" "document,vector,menu=export" "" @@ -646,7 +647,7 @@ def checkConverterEntries(): path, t2l = checkProg('a LaTeX/Noweb -> LyX converter', [in_place, 'tex2lyx' + version_suffix, 'tex2lyx'], rc_entry = [r'''\converter latex lyx "%% -f $$i $$o" "" -\converter literate lyx "%% -n -f $$i $$o" ""'''], not_found = 'tex2lyx') +\converter literate lyx "%% -n -m noweb -f $$i $$o" ""'''], not_found = 'tex2lyx') if path == '': logger.warning("Failed to find tex2lyx on your system.") @@ -1006,17 +1007,29 @@ def checkOtherEntries(): def processLayoutFile(file, bool_docbook): ''' process layout file and get a line of result - Declare lines look like this: (article.layout, scrbook.layout, svjog.layout) + Declare lines look like this: + \DeclareLaTeXClass[]{} + + Optionally, a \DeclareCategory line follows: + + \DeclareCategory{} + + So for example (article.layout, scrbook.layout, svjog.layout) + \DeclareLaTeXClass{article} + \DeclareCategory{Articles} + \DeclareLaTeXClass[scrbook]{book (koma-script)} + \DeclareCategory{Books} + \DeclareLaTeXClass[svjour,svjog.clo]{article (Springer - svjour/jog)} - we expect output: + we'd expect this output: - "article" "article" "article" "false" "article.cls" - "scrbook" "scrbook" "book (koma-script)" "false" "scrbook.cls" - "svjog" "svjour" "article (Springer - svjour/jog)" "false" "svjour.cls,svjog.clo" + "article" "article" "article" "false" "article.cls" "Articles" + "scrbook" "scrbook" "book (koma-script)" "false" "scrbook.cls" "Books" + "svjog" "svjour" "article (Springer - svjour/jog)" "false" "svjour.cls,svjog.clo" "" ''' def checkForClassExtension(x): '''if the extension for a latex class is not @@ -1028,8 +1041,12 @@ def processLayoutFile(file, bool_docbook): 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{(.*)}') + classdeclaration = "" + categorydeclaration = '""' for line in open(file).readlines(): res = p.search(line) + qres = q.search(line) if res != None: (classtype, optAll, opt, opt1, desc) = res.groups() avai = {'LaTeX':'false', 'DocBook':bool_docbook}[classtype] @@ -1042,7 +1059,15 @@ def processLayoutFile(file, bool_docbook): prereq_latex = ','.join(prereq_list) prereq_docbook = {'true':'', 'false':'docbook'}[bool_docbook] prereq = {'LaTeX':prereq_latex, 'DocBook':prereq_docbook}[classtype] - return '"%s" "%s" "%s" "%s" "%s"\n' % (classname, opt, desc, avai, prereq) + classdeclaration = '"%s" "%s" "%s" "%s" "%s"' % (classname, opt, desc, avai, prereq) + if categorydeclaration != '""': + return classdeclaration + " " + categorydeclaration + if qres != None: + categorydeclaration = '"%s"' % (qres.groups()[0]) + if classdeclaration != "": + return classdeclaration + " " + categorydeclaration + if classdeclaration != "": + return classdeclaration + " " + categorydeclaration logger.warning("Layout file " + file + " has no \DeclareXXClass line. ") return "" @@ -1112,6 +1137,7 @@ def checkLatexConfig(check_config, bool_docbook): # 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{(.*)}') empty = re.compile(r'^\s*$') testclasses = list() for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ @@ -1120,14 +1146,23 @@ def checkLatexConfig(check_config, bool_docbook): if not os.path.isfile(file): continue classname = file.split(os.sep)[-1].split('.')[0] + decline = "" + catline = "" for line in open(file).readlines(): if not empty.match(line) and line[0] != '#': - logger.warning("Failed to find valid \Declare line for layout file `" + file + "'.\n\t=> Skipping this file!") - nodeclaration = True + if decline == "": + logger.warning("Failed to find valid \Declare line for layout file `" + file + "'.\n\t=> Skipping this file!") + nodeclaration = True + # A class, but no category declaration. Just break. break - if declare.search(line) == None: + if declare.search(line) != None: + decline = "\\TestDocClass{%s}{%s}" % (classname, line[1:].strip()) + testclasses.append(decline) + elif category.search(line) != None: + catline = "\\DeclareCategory{%s}{%s}" % (classname, category.search(line).groups()[0]) + testclasses.append(catline) + if catline == "" or decline == "": continue - testclasses.append("\\TestDocClass{%s}{%s}" % (classname, line[1:].strip())) break if nodeclaration: continue @@ -1151,7 +1186,7 @@ def checkLatexConfig(check_config, bool_docbook): if rmcopy: removeFiles( [ 'chkconfig.ltx' ] ) # - # currently, values in chhkconfig are only used to set + # currently, values in chkconfig are only used to set # \font_encoding values = {} for line in open('chkconfig.vars').readlines(): @@ -1322,6 +1357,17 @@ def checkTeXAllowSpaces(): removeFiles( [ 'a b.tex', 'a b.log', 'texput.log' ]) +def rescanTeXFiles(): + ''' Run kpsewhich to update information about TeX files ''' + logger.info("+Indexing TeX files... ") + if not os.path.isfile( os.path.join(srcdir, 'scripts', 'TeXFiles.py') ): + logger.error("configure: error: cannot find TeXFiles.py script") + sys.exit(1) + tfp = cmdOutput("python -tt " + os.path.join(srcdir, 'scripts', 'TeXFiles.py')) + logger.info(tfp) + logger.info("\tdone") + + def removeTempFiles(): # Final clean-up if not lyx_keep_temps: @@ -1332,6 +1378,7 @@ def removeTempFiles(): if __name__ == '__main__': lyx_check_config = True + lyx_kpsewhich = True outfile = 'lyxrc.defaults' lyxrc_fileformat = 7 rc_entries = '' @@ -1344,10 +1391,13 @@ if __name__ == '__main__': Options: --help show this help lines --keep-temps keep temporary files (for debug. purposes) + --without-kpsewhich do not update TeX files information via kpsewhich --without-latex-config do not run LaTeX to determine configuration --with-version-suffix=suffix suffix of binary installed files ''' sys.exit(0) + elif op == '--without-kpsewhich': + lyx_kpsewhich = False elif op == '--without-latex-config': lyx_check_config = False elif op == '--keep-temps': @@ -1392,6 +1442,8 @@ Format %i if windows_style_tex_paths != '': addToRC(r'\tex_expects_windows_paths %s' % windows_style_tex_paths) checkOtherEntries() + if lyx_kpsewhich: + rescanTeXFiles() checkModulesConfig() # --without-latex-config can disable lyx_check_config ret = checkLatexConfig(lyx_check_config and LATEX != '', bool_docbook)