ac_word = ac_prog.split(' ')[0]
print '+checking for "' + ac_word + '"... ',
path = os.environ["PATH"].split(os.pathsep) + path
+ extlist = ['']
+ if os.environ.has_key("PATHEXT"):
+ extlist = extlist + os.environ["PATHEXT"].split(os.pathsep)
for ac_dir in path:
- # check both ac_word and ac_word.exe (for windows system)
- if os.path.isfile( os.path.join(ac_dir, ac_word) ) or \
- os.path.isfile( os.path.join(ac_dir, ac_word + ".exe") ):
- print ' yes'
- # write rc entries for this command
- if len(rc_entry) == 1:
- addToRC(rc_entry[0].replace('%%', ac_prog))
- elif len(rc_entry) > 1:
- addToRC(rc_entry[idx].replace('%%', ac_prog))
- return [ac_dir, ac_word]
+ for ext in extlist:
+ if os.path.isfile( os.path.join(ac_dir, ac_word + ext) ):
+ print ' yes'
+ # write rc entries for this command
+ if len(rc_entry) == 1:
+ addToRC(rc_entry[0].replace('%%', ac_prog))
+ elif len(rc_entry) > 1:
+ addToRC(rc_entry[idx].replace('%%', ac_prog))
+ return [ac_dir, ac_word]
# if not successful
print ' no'
# write rc entries for 'not found'
def checkLatex(dtl_tools):
''' Check latex, return lyx_check_config '''
+ path, LATEX = checkProg('a Latex2e program', ['latex $$i', 'platex $$i', 'latex2e $$i'])
+ path, PPLATEX = checkProg('a DVI postprocessing program', ['pplatex $$i'])
+ # use LATEX to convert from latex to dvi if PPLATEX is not available
+ if PPLATEX == '':
+ PPLATEX = LATEX
if dtl_tools:
# Windows only: DraftDVI
- converter_entry = r'''\converter latex dvi2 "%%" "latex"
-\converter dvi2 dvi "python -tt $$s/scripts/clean_dvi.py $$i $$o" ""'''
+ addToRC(r'''\converter latex dvi2 "%s" "latex"
+\converter dvi2 dvi "python -tt $$s/scripts/clean_dvi.py $$i $$o" ""''' % PPLATEX)
else:
- converter_entry = r'\converter latex dvi "%%" "latex"'
- path, LATEX = checkProg('a Latex2e program', ['pplatex $$i', 'platex $$i', 'latex $$i', 'latex2e $$i'],
- rc_entry = [converter_entry])
+ addToRC(r'\converter latex dvi "%s" "latex"' % PPLATEX)
# no latex
if LATEX != '':
# Check if latex is usable
\Format xpm xpm XPM "" "%s" "%s" ""''' % \
(iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie) )
#
- checkViewer('a text editor', ['xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
+ checkViewer('a text editor', ['sensible-editor', 'xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
'nedit', 'gedit', 'notepad'],
rc_entry = [r'''\Format asciichess asc "Plain text (chess output)" "" "" "%%" ""
\Format asciiimage asc "Plain text (image)" "" "" "%%" ""
\Format dateout tmp "date (output)" "" "" "%%" ""
\Format docbook sgml DocBook B "" "%%" "document"
\Format docbook-xml xml "Docbook (XML)" "" "" "%%" "document"
+\Format dot dot "Graphviz Dot" "" "" "%%" "vector"
\Format literate nw NoWeb N "" "%%" "document"
\Format lilypond ly "LilyPond music" "" "" "%%" "vector"
\Format latex tex "LaTeX (plain)" L "" "%%" "document"
\Format text3 txt "Plain text (ps2ascii)" "" "" "%%" "document"
\Format text4 txt "Plain text (catdvi)" "" "" "%%" "document"
\Format textparagraph txt "Plain Text, Join Lines" "" "" "%%" "document"''' ])
+ #
+ checkViewer('a BibTeX editor', ['sensible-editor', 'jabref', 'JabRef', \
+ 'pybliographic', 'bibdesk', 'gbib', 'kbib', \
+ 'kbibtex', 'sixpack', 'bibedit', 'tkbibtex' \
+ 'xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
+ 'nedit', 'gedit', 'notepad'],
+ rc_entry = [r'''\Format bibtex bib "BibTeX" "" "" "%%" ""''' ])
#
#checkProg('a Postscript interpreter', ['gs'],
# rc_entry = [ r'\ps_command "%%"' ])
#
# entried that do not need checkProg
addToRC(r'''\Format date "" "date command" "" "" "" ""
+\Format csv csv "Table (CSV)" "" "" "" "document"
\Format fax "" Fax "" "" "" "document"
\Format lyx lyx LyX "" "" "" ""
\Format lyx13x lyx13 "LyX 1.3.x" "" "" "" "document"
checkProg('a Noweb -> LaTeX converter', ['noweave -delay -index $$i > $$o'],
rc_entry = [ r'\converter literate latex "%%" ""' ])
#
- checkProg('an HTML -> LaTeX converter', ['html2latex $$i'],
+ checkProg('an HTML -> LaTeX converter', ['html2latex $$i', 'gnuhtml2latex $$i', \
+ 'htmltolatex -input $$i -output $$o', 'java -jar htmltolatex.jar -input $$i -output $$o'],
rc_entry = [ r'\converter html latex "%%" ""' ])
#
checkProg('an MS Word -> LaTeX converter', ['wvCleanLatex $$i $$o'],
rc_entry = [ r'\converter odt latex "%%" ""' ])
# 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 converter', ['oolatex $$i', 'oolatex.sh $$i', \
- '/usr/share/tex4ht/oolatex $$i', \
- 'htlatex $$i \'xhtml,ooffice\' \'ooffice/! -cmozhtf\' \'-coo\' \'-cvalidate\''],
+ checkProg('a LaTeX -> Open Document converter', [
+ 'htlatex $$i \'xhtml,ooffice\' \'ooffice/! -cmozhtf\' \'-coo\' \'-cvalidate\'', \
+ 'oolatex $$i', 'oolatex.sh $$i', \
+ '/usr/share/tex4ht/oolatex $$i'],
rc_entry = [ r'\converter latex odt "%%" "needaux"' ])
# On windows it is called latex2rt.exe
checkProg('a LaTeX -> RTF converter', ['latex2rtf -p -S -o $$o $$i', 'latex2rt -p -S -o $$o $$i'],
rc_entry = [ r'\converter latex rtf "%%" "needaux"' ])
#
+ checkProg('a RTF -> HTML converter', ['unrtf --html $$i > $$o'],
+ rc_entry = [ r'\converter rtf html "%%" ""' ])
+ #
checkProg('a PS to PDF converter', ['ps2pdf13 $$i $$o'],
rc_entry = [ r'\converter ps pdf "%%" ""' ])
#
checkProg('a PS to TXT converter', ['ps2ascii $$i $$o'],
rc_entry = [ r'\converter ps text3 "%%" ""' ])
#
+ checkProg('a PS to EPS converter', ['ps2eps $$i'],
+ rc_entry = [ r'\converter ps eps "%%" ""' ])
+ #
+ checkProg('a PDF to PS converter', ['pdf2ps $$i $$o', 'pdftops $$i $$o'],
+ rc_entry = [ r'\converter pdf ps "%%" ""' ])
+ #
+ checkProg('a PDF to EPS converter', ['pdftops -eps -f 1 -l 1 $$i $$o'],
+ rc_entry = [ r'\converter pdf eps "%%" ""' ])
+ #
checkProg('a DVI to TXT converter', ['catdvi $$i > $$o'],
rc_entry = [ r'\converter dvi text4 "%%" ""' ])
#
\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 "%%" ""'])
+ #
#
path, lilypond = checkProg('a LilyPond -> EPS/PDF/PNG converter', ['lilypond'])
if (lilypond != ''):
#
# Entries that do not need checkProg
addToRC(r'''\converter lyxpreview ppm "python -tt $$s/scripts/lyxpreview2bitmap.py" ""
+\converter csv lyx "python -tt $$s/scripts/csv2lyx.py $$i $$o" ""
\converter date dateout "python -tt $$s/scripts/date.py %d-%m-%Y > $$o" ""
\converter docbook docbook-xml "cp $$i $$o" "xml"
\converter fen asciichess "python -tt $$s/scripts/fen2ascii.py $$i $$o" ""
r'\plaintext_roff_command ""' ])
checkProg('ChkTeX', ['chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38'],
rc_entry = [ r'\chktex_command "%%"' ])
+ checkProg('BibTeX', ['jbibtex', 'bibtex'],
+ rc_entry = [ r'\bibtex_command "%%"' ])
checkProg('a spellchecker', ['ispell'],
rc_entry = [ r'\spell_command "%%"' ])
## FIXME: OCTAVE is not used anywhere
tx.close()
print '\tdone'
+
def processModuleFile(file, bool_docbook, bool_linuxdoc):
''' process module file and get a line of result
- Declare lines look like this:
- \DeclareLyXModule[LaTeX Packages]{Description}{ModuleName}...
+ The top of a module file should look like this:
+ #\DeclareLyXModule[LaTeX Packages]{ModuleName}
+ #BeginDescription
+ #...body of description...
+ #EndDescription
+ #Requires: [list of required modules]
+ #Excludes: [list of excluded modules]
+ The last two lines are optional
We expect output:
- "ModuleName" "filename" "Description" "Packages"
- "
+ "ModuleName" "filename" "Description" "Packages" "Requires" "Excludes"
'''
- p = re.compile(r'\DeclareLyXModule\s*(?:\[([^]]*)\])?{(.*)}{(.*)}')
+ p = re.compile(r'\DeclareLyXModule\s*(?:\[([^]]*?)\])?{(.*)}')
+ r = re.compile(r'#+\s*Requires: (.*)')
+ x = re.compile(r'#+\s*Excludes: (.*)')
+ b = re.compile(r'#+\s*DescriptionBegin\s*$')
+ e = re.compile(r'#+\s*DescriptionEnd\s*$')
+
+ modname = desc = pkgs = req = excl = ""
+ readingDescription = False
+ descLines = []
+ filename = file.split(os.sep)[-1]
+ filename = filename[:-7]
+
for line in open(file).readlines():
- res = p.search(line)
+ if readingDescription:
+ res = e.search(line)
if res != None:
- (packages, desc, modname) = res.groups()
- #check availability...need to add that
- if packages == None:
- packages = ""
- else:
- pkgs = [s.strip() for s in packages.split(",")]
- packages = ",".join(pkgs)
-
- filename = file.split(os.sep)[-1]
- return '"%s" "%s" "%s" "%s"\n' % (modname, filename, desc, packages)
+ readingDescription = False
+ desc = " ".join(descLines)
+ continue
+ descLines.append(line[1:].strip())
+ continue
+ res = b.search(line)
+ if res != None:
+ readingDescription = True
+ continue
+ res = p.search(line)
+ if res != None:
+ (pkgs, modname) = res.groups()
+ if pkgs == None:
+ pkgs = ""
+ else:
+ tmp = [s.strip() for s in pkgs.split(",")]
+ pkgs = ",".join(tmp)
+ continue
+ res = r.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)
+ if res != None:
+ excl = res.group(1)
+ tmp = [s.strip() for s in excl.split("|")]
+ excl = "|".join(tmp)
+ continue
+ if modname != "":
+ return '"%s" "%s" "%s" "%s" "%s" "%s"\n' % (modname, filename, desc, pkgs, req, excl)
print "Module file without \DeclareLyXModule line. "
sys.exit(2)
-
-
def checkTeXAllowSpaces():
''' Let's check whether spaces are allowed in TeX file names '''
tex_allows_spaces = 'false'
bool_docbook, bool_linuxdoc)
checkModulesConfig() #lyx_check_config and LATEX != '')
removeTempFiles()
- sys.exit(ret)
+ # 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
+ # a None for success, 'ret is not None' is used to exit.
+ sys.exit(ret is not None)