X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Fconfigure.py;h=152844fac9a6e5468a98e3d3a59d52b1a3965695;hb=8d0d3ea0905172b4a1fba7fbfadba83ff61671c6;hp=bd8d43594967968ae579e93e23233ae375096c0d;hpb=1bf18368cfcbb9d2c371a3f2f53a58cc037d5585;p=lyx.git diff --git a/lib/configure.py b/lib/configure.py index bd8d435949..152844fac9 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -1,4 +1,4 @@ -#! /usr/bin/python +#! /usr/bin/python3 # -*- coding: utf-8 -*- # # file configure.py @@ -217,7 +217,7 @@ def checkTeXPaths(): if sys.version_info[0] < 3: inpname = shortPath(unicode(tmpfname, encoding)).replace('\\', '/') else: - inpname = shortPath(tmpfname).replace('\\', '/') + inpname = shortPath(tmpfname).replace('\\', '/') else: inpname = cmdOutput('cygpath -m ' + tmpfname) logname = os.path.basename(re.sub("(?i).ltx", ".log", inpname)) @@ -680,8 +680,7 @@ def checkFormatEntries(dtl_tools): # checkViewerEditor('a text editor', texteditors, rc_entry = [r'''\Format asciichess asc "Plain text (chess output)" "" "" "%%" "" "" -\Format docbook sgml DocBook B "" "%%" "document,menu=export" "" -\Format docbook-xml xml "DocBook (XML)" "" "" "%%" "document,menu=export" "application/docbook+xml" +\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 platex tex "LaTeX (pLaTeX)" "" "" "%%" "document,menu=export" "" @@ -713,6 +712,7 @@ def checkFormatEntries(dtl_tools): rc_entry = [r'''\Format gnumeric gnumeric "Gnumeric spreadsheet" "" "" "%%" "document" "application/x-gnumeric" \Format excel xls "Excel spreadsheet" "" "" "%%" "document" "application/vnd.ms-excel" \Format excel2 xlsx "MS Excel Office Open XML" "" "" "%%" "document" "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" +\Format xhtml_table xhtml "XHTML Table (for spreadsheets)" "" "" "%%" "document" "" \Format html_table html "HTML Table (for spreadsheets)" "" "" "%%" "document" "" \Format oocalc ods "OpenDocument spreadsheet" "" "" "%%" "document" "application/vnd.oasis.opendocument.spreadsheet"''']) # @@ -750,7 +750,8 @@ def checkFormatEntries(dtl_tools): \Format pdf5 pdf "PDF (LuaTeX)" u "%%" "" "document,vector,menu=export" "" \Format pdf6 pdf "PDF (graphics)" "" "%%" "" "vector" "application/pdf" \Format pdf7 pdf "PDF (cropped)" "" "%%" "" "document,vector" "" -\Format pdf8 pdf "PDF (lower resolution)" "" "%%" "" "document,vector" ""''']) +\Format pdf8 pdf "PDF (lower resolution)" "" "%%" "" "document,vector" "" +\Format pdf9 pdf "PDF (DocBook)" "" "%%" "" "document,vector,menu=export" ""''']) # checkViewer('a DVI previewer', ['xdvi', 'kdvi', 'okular', 'evince', 'xreader', @@ -931,6 +932,9 @@ def checkConverterEntries(): 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('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 @@ -944,7 +948,7 @@ def checkConverterEntries(): # On SuSE the scripts have a .sh suffix, and on debian they are in /usr/share/tex4ht/ # Both SuSE and debian have oolatex checkProg('a LaTeX -> Open Document (tex4ht) converter', [ - 'oolatex $$i', 'mk4ht oolatex $$i', 'oolatex.sh $$i', '/usr/share/tex4ht/oolatex $$i', + 'oolatex $$i', 'make4ht -f odt $$i', 'oolatex.sh $$i', '/usr/share/tex4ht/oolatex $$i', 'htlatex $$i \'xhtml,ooffice\' \'ooffice/! -cmozhtf\' \'-coo\' \'-cvalidate\''], rc_entry = [ r'\converter latex odt "%%" "needaux"' ]) # On windows it is called latex2rt.exe @@ -1158,7 +1162,7 @@ def checkConverterEntries(): \converter svgz png "%%" ""'''], path = ['', inkscape_path]) # - checkProg('Gnuplot', ['gnuplot'], + 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"''' ]) # @@ -1172,6 +1176,10 @@ def checkConverterEntries(): \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" "" ''']) path, lilypond = checkProg('a LilyPond -> EPS/PDF/PNG converter', ['lilypond']) @@ -1245,7 +1253,6 @@ def checkConverterEntries(): # Entries that do not need checkProg addToRC(r''' \converter csv lyx "python -tt $$s/scripts/csv2lyx.py $$i $$o" "" -\converter docbook docbook-xml "cp $$i $$o" "xml" \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" "" @@ -1263,29 +1270,10 @@ def checkConverterEntries(): \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 docbook docbook5 "cp $$i $$o" "xml" ''') -def checkDocBook(): - ''' Check docbook ''' - path, DOCBOOK = checkProg('SGML-tools 2.x (DocBook), db2x scripts or xsltproc', ['sgmltools', 'db2dvi', 'xsltproc'], - rc_entry = [ - r'''\converter docbook dvi "sgmltools -b dvi $$i" "" -\converter docbook html "sgmltools -b html $$i" "" -\converter docbook ps "sgmltools -b ps $$i" ""''', - r'''\converter docbook dvi "db2dvi $$i" "" -\converter docbook html "db2html $$i" ""''', - r'''\converter docbook dvi "" "" -\converter docbook html "" ""''', - r'''\converter docbook dvi "" "" -\converter docbook html "" ""''']) - # - if DOCBOOK: - return ('yes', 'true', '\\def\\hasdocbook{yes}') - else: - return ('no', 'false', '') - - def checkOtherEntries(): ''' entries other than Format and Converter ''' checkProg('ChkTeX', ['chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38'], @@ -1316,6 +1304,7 @@ def checkOtherEntries(): ## 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" @@ -1330,8 +1319,8 @@ def _checkForClassExtension(x): else: return x.strip() -def processLayoutFile(file, bool_docbook): - ''' process layout file and get a line of result +def processLayoutFile(file): + """ process layout file and get a line of result Declare lines look like this: @@ -1356,43 +1345,40 @@ def processLayoutFile(file, bool_docbook): "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" "" - ''' + """ 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('\s*#\s*\\\\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}\s*$') + # 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*$') classdeclaration = "" categorydeclaration = '""' for line in open(file, 'r', encoding='utf8').readlines(): res = p.match(line) qres = q.match(line) - if res != None: - (classtype, optAll, opt, opt1, desc) = res.groups() - avai = {'LaTeX': 'false', 'DocBook': bool_docbook}[classtype] - if opt == None: + if res is not None: + (optAll, opt, opt1, desc) = res.groups() + if opt is None: opt = classname - prereq_latex = _checkForClassExtension(classname) + prereq = _checkForClassExtension(classname) else: prereq_list = optAll[1:-1].split(',') prereq_list = list(map(_checkForClassExtension, prereq_list)) - prereq_latex = ','.join(prereq_list) - prereq_docbook = {'true':'', 'false':'docbook'}[bool_docbook] - prereq = {'LaTeX':prereq_latex, 'DocBook':prereq_docbook}[classtype] + prereq = ','.join(prereq_list) classdeclaration = ('"%s" "%s" "%s" "%s" "%s"' - % (classname, opt, desc, avai, prereq)) + % (classname, opt, desc, 'false', prereq)) if categorydeclaration != '""': return classdeclaration + " " + categorydeclaration - if qres != None: - categorydeclaration = '"%s"' % (qres.groups()[0]) - if classdeclaration: - return classdeclaration + " " + categorydeclaration + if qres is not 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. ") + logger.warning("Layout file " + file + " has no \\DeclareLaTeXClass line. ") return "" -def checkLatexConfig(check_config, bool_docbook): +def checkLatexConfig(check_config): ''' Explore the LaTeX configuration Return None (will be passed to sys.exit()) for success. ''' @@ -1430,7 +1416,7 @@ def checkLatexConfig(check_config, bool_docbook): # make sure the same class is not considered twice if foundClasses.count(cleanclass) == 0: # not found before foundClasses.append(cleanclass) - retval = processLayoutFile(file, bool_docbook) + retval = processLayoutFile(file) if retval: tx.write(retval + os.linesep) tx.close() @@ -1451,11 +1437,11 @@ def checkLatexConfig(check_config, bool_docbook): if not os.path.isfile( 'chkconfig.ltx' ): shutil.copyfile( os.path.join(srcdir, 'chkconfig.ltx'), 'chkconfig.ltx' ) rmcopy = True - writeToFile('wrap_chkconfig.ltx', '%s\n\\input{chkconfig.ltx}\n' % docbook_cmd) + writeToFile('wrap_chkconfig.ltx', '\\def\\hasdocbook{yes}\n\\input{chkconfig.ltx}\n') # 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*\\\\Declare(LaTeX|DocBook)Class\\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() @@ -1476,10 +1462,10 @@ def checkLatexConfig(check_config, bool_docbook): nodeclaration = True # A class, but no category declaration. Just break. break - if declare.match(line) != None: + if declare.match(line) is not None: decline = "\\TestDocClass{%s}{%s}" % (classname, line[1:].strip()) testclasses.append(decline) - elif category.match(line) != None: + elif category.match(line) is not None: catline = ("\\DeclareCategory{%s}{%s}" % (classname, category.match(line).groups()[0])) testclasses.append(catline) @@ -1564,14 +1550,22 @@ def checkModulesConfig(): continue seen.append(filename) - retval = processModuleFile(file, filename, bool_docbook) - if retval: - tx.write(retval) + try: + retval = processModuleFile(file, filename) + if retval: + tx.write(retval) + except UnicodeDecodeError: + logger.warning("**************************************************\n" + "Module file '%s'\n" + "cannot be decoded in utf-8.\n" + "Please check if the file has the correct encoding.\n" + "Skipping this file!\n" + "**************************************************" % filename) tx.close() logger.info('\tdone') -def processModuleFile(file, filename, bool_docbook): +def processModuleFile(file, filename): ''' process module file and get a line of result The top of a module file should look like this: @@ -1695,14 +1689,14 @@ def checkCiteEnginesConfig(): continue seen.append(filename) - retval = processCiteEngineFile(file, filename, bool_docbook) + retval = processCiteEngineFile(file, filename) if retval: tx.write(retval) tx.close() logger.info('\tdone') -def processCiteEngineFile(file, filename, bool_docbook): +def processCiteEngineFile(file, filename): ''' process cite engines file and get a line of result The top of a cite engine file should look like this: @@ -1869,7 +1863,7 @@ if __name__ == '__main__': lyx_check_config = True lyx_kpsewhich = True outfile = 'lyxrc.defaults' - lyxrc_fileformat = 31 + lyxrc_fileformat = 34 rc_entries = '' lyx_keep_temps = False version_suffix = '' @@ -1939,7 +1933,6 @@ Format %i inkscape_stable = checkInkscapeStable() checkFormatEntries(dtl_tools) checkConverterEntries() - (chk_docbook, bool_docbook, docbook_cmd) = checkDocBook() checkTeXAllowSpaces() windows_style_tex_paths = checkTeXPaths() if windows_style_tex_paths: @@ -1951,7 +1944,7 @@ Format %i checkCiteEnginesConfig() checkXTemplates() # --without-latex-config can disable lyx_check_config - ret = checkLatexConfig(lyx_check_config and LATEX, bool_docbook) + ret = checkLatexConfig(lyx_check_config and LATEX) removeTempFiles() # The return error code can be 256. Because most systems expect an error code # in the range 0-127, 256 can be interpretted as 'success'. Because we expect