]> git.lyx.org Git - lyx.git/blobdiff - lib/configure.py
remove unused include of FuncRequest
[lyx.git] / lib / configure.py
index 4a041efef032f39c401db8b343da91cee90669d1..f26c4f885b9f2b8ca5c48cd44d9262ae1fe4144e 100644 (file)
@@ -378,7 +378,7 @@ def checkDTLtools():
 
 def checkLatex(dtl_tools):
     ''' Check latex, return lyx_check_config '''
-    path, LATEX = checkProg('a Latex2e program', ['latex $$i', 'platex $$i', 'latex2e $$i'])
+    path, LATEX = checkProg('a Latex2e program', ['latex $$i', 'latex2e $$i'])
     path, PPLATEX = checkProg('a DVI postprocessing program', ['pplatex $$i'])
     #-----------------------------------------------------------------
     path, PLATEX = checkProg('pLaTeX, the Japanese LaTeX', ['platex $$i'])
@@ -392,7 +392,6 @@ def checkLatex(dtl_tools):
         if cmdOutput(PLATEX + ' chklatex.ltx').find('pLaTeX2e') != -1:
             # We have the Japanese pLaTeX2e
             addToRC(r'\converter platex   dvi       "%s"   "latex"' % PLATEX)
-            LATEX = PLATEX
         else:
             PLATEX = ''
             removeFiles(['chklatex.ltx', 'chklatex.log'])
@@ -621,6 +620,7 @@ def checkConverterEntries():
     #
     checkProg('an MS Word -> LaTeX converter', ['wvCleanLatex $$i $$o'],
         rc_entry = [ r'\converter word       latex      "%%"   ""' ])
+
     # eLyXer: search as a Python module and then as an executable (elyxer.py, elyxer)
     elyxerfound = checkModule('elyxer')
     if elyxerfound:
@@ -651,15 +651,31 @@ def checkConverterEntries():
       ['lyxblogger $$i'], rc_entry = [])
     if lyxblogger.find('lyxblogger') >= 0:
       addToRC(r'\Format    blog       blog       "LyxBlogger"           "" "" ""  "document"')
-                       addToRC(r'\converter xhtml      blog       "lyxblogger $$i"       ""')
+      addToRC(r'\converter xhtml      blog       "lyxblogger $$i"       ""')
+
+    if elyxerfound:
+      addToRC(r'''\converter lyx      wordhtml       "python -m elyxer --html --directory $$r $$i $$o" ""''')
+    else:
+      path, elyxer = checkProg('a LyX -> MS Word converter',
+        ['elyxer.py --directory $$r $$i $$o', 'elyxer --html --directory $$r $$i $$o'],
+        rc_entry = [ r'\converter lyx      wordhtml       "%%" ""' ])
+      if elyxer.find('elyxer') >= 0:
+        elyxerfound = True
+
+    if elyxerfound:
+      addToRC(r'''\copier    wordhtml       "python -tt $$s/scripts/ext_copy.py -e html,png,jpg,jpeg,css $$i $$o"''')
+    else:
+      # search for other converters than eLyXer
+      # On SuSE the scripts have a .sh suffix, and on debian they are in /usr/share/tex4ht/
+      path, htmlconv = checkProg('a LaTeX -> 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"''')
+      else:
+        addToRC(r'''\copier    wordhtml       "python -tt $$s/scripts/ext_copy.py $$i $$o"''')
 
-    # On SuSE the scripts have a .sh suffix, and on debian they are in /usr/share/tex4ht/
-    path, htmlconv = checkProg('a LaTeX -> 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"''')
     #
     checkProg('an OpenOffice.org -> LaTeX converter', ['w2l -clean $$i'],
         rc_entry = [ r'\converter sxw        latex      "%%"   ""' ])
@@ -757,8 +773,12 @@ def checkConverterEntries():
 \converter agr        ppm        "gracebat -hardcopy -printfile $$o -hdevice PNM $$i 2>/dev/null"      ""''',
             ''])
     #
-    checkProg('a Dot -> PDF converter', ['dot -Tpdf $$i -o $$o'],
-        rc_entry = [ r'\converter dot        pdf        "%%"   ""'])
+    checkProg('a Dot -> Image converter', ['dot'],
+        rc_entry = [
+            r'''\converter dot        eps        "dot -Teps $$i -o $$o"        ""
+\converter dot        pdf        "dot -Tpdf $$i -o $$o"        ""
+\converter dot        png        "dot -Tpng $$i -o $$o"        ""''',
+            ''])
     #
     checkProg('a Dia -> PNG converter', ['dia -e $$o -t png $$i'],
         rc_entry = [ r'\converter dia        png        "%%"   ""'])
@@ -853,7 +873,7 @@ def checkOtherEntries():
     checkProgAlternatives('BibTeX or alternative programs', ['bibtex', 'bibtex8', 'biber'],
         rc_entry = [ r'\bibtex_command "%%"' ],
         alt_rc_entry = [ r'\bibtex_alternatives "%%"' ])
-    checkProg('JBibTeX, the Japanese BibTeX', ['jbibtex', 'bibtex'],
+    checkProg('a specific Japanese BibTeX variant', ['pbibtex', 'jbibtex', 'bibtex'],
         rc_entry = [ r'\jbibtex_command "%%"' ])
     checkProgAlternatives('available index processors', ['texindy', 'makeindex -c -q'],
         rc_entry = [ r'\index_command "%%"' ],
@@ -988,7 +1008,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
-    p1 = re.compile(r'\Declare(LaTeX|DocBook)Class')
+    declare = re.compile(r'\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}')
+    empty = re.compile(r'^\s*$')
     testclasses = list()
     for file in glob.glob( os.path.join('layouts', '*.layout') ) + \
         glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) :
@@ -996,11 +1017,11 @@ def checkLatexConfig(check_config, bool_docbook):
             continue
         classname = file.split(os.sep)[-1].split('.')[0]
         for line in open(file).readlines():
-            if p1.search(line) == None:
-                continue
-            if line[0] != '#':
-                logger.error("Wrong input layout file with line '" + line)
+            if not empty.match(line) and line[0] != '#':
+                logger.error("Failed to find \Declare line for layout file `" + file + "'")
                 sys.exit(3)
+            if declare.search(line) == None:
+                continue
             testclasses.append("\\TestDocClass{%s}{%s}" % (classname, line[1:].strip()))
             break
     testclasses.sort()
@@ -1084,12 +1105,12 @@ def processModuleFile(file, bool_docbook):
         We expect output:
           "ModuleName" "filename" "Description" "Packages" "Requires" "Excludes" "Category"
     '''
-    p = re.compile(r'\DeclareLyXModule\s*(?:\[([^]]*?)\])?{(.*)}')
-    r = re.compile(r'#+\s*Requires: (.*)')
-    x = re.compile(r'#+\s*Excludes: (.*)')
-    c = re.compile(r'#+\s*Category: (.*)')
-    b = re.compile(r'#+\s*DescriptionBegin\s*$')
-    e = re.compile(r'#+\s*DescriptionEnd\s*$')
+    remods = re.compile(r'\DeclareLyXModule\s*(?:\[([^]]*?)\])?{(.*)}')
+    rereqs = re.compile(r'#+\s*Requires: (.*)')
+    reexcs = re.compile(r'#+\s*Excludes: (.*)')
+    recaty = re.compile(r'#+\s*Category: (.*)')
+    redbeg = re.compile(r'#+\s*DescriptionBegin\s*$')
+    redend = re.compile(r'#+\s*DescriptionEnd\s*$')
 
     modname = desc = pkgs = req = excl = catgy = ""
     readingDescription = False
@@ -1099,18 +1120,20 @@ def processModuleFile(file, bool_docbook):
 
     for line in open(file).readlines():
       if readingDescription:
-        res = e.search(line)
+        res = redend.search(line)
         if res != None:
           readingDescription = False
           desc = " ".join(descLines)
+          # Escape quotes.
+          desc = desc.replace('"', '\\"')
           continue
         descLines.append(line[1:].strip())
         continue
-      res = b.search(line)
+      res = redbeg.search(line)
       if res != None:
         readingDescription = True
         continue
-      res = p.search(line)
+      res = remods.search(line)
       if res != None:
           (pkgs, modname) = res.groups()
           if pkgs == None:
@@ -1119,42 +1142,46 @@ def processModuleFile(file, bool_docbook):
             tmp = [s.strip() for s in pkgs.split(",")]
             pkgs = ",".join(tmp)
           continue
-      res = r.search(line)
+      res = rereqs.search(line)
       if res != None:
         req = res.group(1)
         tmp = [s.strip() for s in req.split("|")]
         req = "|".join(tmp)
         continue
-      res = x.search(line)
+      res = reexcs.search(line)
       if res != None:
         excl = res.group(1)
         tmp = [s.strip() for s in excl.split("|")]
         excl = "|".join(tmp)
         continue
-      res = c.search(line)
+      res = recaty.search(line)
       if res != None:
         catgy = res.group(1)
         continue
-    if modname != "":
-        if pkgs != "":
-            # this module has some latex dependencies:
-            # append the dependencies to chkmodules.tex,
-            # which is \input'ed by chkconfig.ltx
-            testpackages = list()
-            for pkg in pkgs.split(","):
-                if "->" in pkg:
-                    # this is a converter dependency: skip
-                    continue
-                if pkg.endswith(".sty"):
-                    pkg = pkg[:-4]
-                testpackages.append("\\TestPackage{%s}" % (pkg,))
-            cm = open('chkmodules.tex', 'a')
-            for line in testpackages:
-                cm.write(line + '\n')
-            cm.close()
-        return '"%s" "%s" "%s" "%s" "%s" "%s" "%s"\n' % (modname, filename, desc, pkgs, req, excl, catgy)
-    logger.warning("Module file without \DeclareLyXModule line. ")
-    return ""
+
+    if modname == "":
+      logger.warning("Module file without \DeclareLyXModule line. ")
+      return ""
+
+    if pkgs != "":
+        # this module has some latex dependencies:
+        # append the dependencies to chkmodules.tex,
+        # which is \input'ed by chkconfig.ltx
+        testpackages = list()
+        for pkg in pkgs.split(","):
+            if "->" in pkg:
+                # this is a converter dependency: skip
+                continue
+            if pkg.endswith(".sty"):
+                pkg = pkg[:-4]
+            testpackages.append("\\TestPackage{%s}" % (pkg,))
+        cm = open('chkmodules.tex', 'a')
+        for line in testpackages:
+            cm.write(line + '\n')
+        cm.close()
+
+    return '"%s" "%s" "%s" "%s" "%s" "%s" "%s"\n' % (modname, filename, desc, pkgs, req, excl, catgy)
+    
 
 
 def checkTeXAllowSpaces():