inpname = tmpfname.replace('\\', '/')
else:
inpname = cmdOutput('cygpath -m ' + tmpfname)
+ logname = os.path.basename(inpname.replace('.ltx', '.log'))
inpname = inpname.replace('~', '\\string~')
os.write(fd, r'\relax')
os.close(fd)
else:
print "configure: TeX engine needs windows-style paths in latex files"
windows_style_tex_paths = 'true'
- removeFiles([tmpfname, 'texput.log'])
+ removeFiles([tmpfname, logname, 'texput.log'])
return windows_style_tex_paths
\converter dvi2 dvi "python -tt $$s/scripts/clean_dvi.py $$i $$o" ""'''
else:
converter_entry = r'\converter latex dvi "%%" "latex"'
- path, LATEX = checkProg('a Latex2e program', ['pplatex $$i', 'latex $$i', 'latex2e $$i'],
+ path, LATEX = checkProg('a Latex2e program', ['pplatex $$i', "platex", 'latex $$i', 'latex2e $$i'],
rc_entry = [converter_entry])
# no latex
if LATEX != '':
rc_entry = [r'\Format dvi dvi DVI D "%%" "" "document,vector"'])
if dtl_tools:
# Windows only: DraftDVI
- addToRC(r'\Format dvi2 dvi DraftDVI "" "" "document,vector"')
+ addToRC(r'\Format dvi2 dvi DraftDVI "" "" "" "vector"')
#
checkViewer('an HTML previewer', ['firefox', 'mozilla file://$$p$$i', 'netscape'],
rc_entry = [r'\Format html html HTML H "%%" "" "document"'])
checkViewer('Noteedit', ['noteedit'],
rc_entry = [r'\Format noteedit not Noteedit "" "%%" "%%" "vector"'])
#
+ checkViewer('an OpenDocument viewer', ['oowriter'],
+ rc_entry = [r'\Format odt odt OpenDocument "" "%%" "%%" "document,vector"'])
+ #
# entried that do not need checkProg
addToRC(r'''\Format date "" "date command" "" "" "" ""
\Format fax "" Fax "" "" "" "document"
\Format lyx lyx LyX "" "" "" ""
\Format lyx13x lyx13 "LyX 1.3.x" "" "" "" "document"
\Format lyx14x lyx14 "LyX 1.4.x" "" "" "" "document"
+\Format lyx15x lyx15 "LyX 1.5.x" "" "" "" "document"
\Format clyx cjklyx "CJK LyX 1.4.x (big5)" "" "" "" "document"
\Format jlyx cjklyx "CJK LyX 1.4.x (euc-jp)" "" "" "" "document"
\Format klyx cjklyx "CJK LyX 1.4.x (euc-kr)" "" "" "" "document"
\Format pstex pstex_t PSTEX "" "" "" ""
\Format rtf rtf "Rich Text Format" "" "" "" "document,vector"
\Format sxw sxw "OpenOffice.Org (sxw)" "" "" "" "document,vector"
-\Format odt odt "Open Document" O "" "" "document,vector"
-\Format wmf wmf "Windows Meta File" "" "" "" "vector"
+\Format wmf wmf "Windows Metafile" "" "" "" "vector"
+\Format emf emf "Enhanced Metafile" "" "" "" "vector"
\Format word doc "MS Word" W "" "" "document,vector"
\Format wordhtml html "HTML (MS Word)" "" "" "" "document"
''')
#
checkProg('an MS Word -> LaTeX converter', ['wvCleanLatex $$i $$o'],
rc_entry = [ r'\converter word latex "%%" ""' ])
- #
- path, htmlconv = checkProg('a LaTeX -> HTML converter', ['htlatex $$i', 'tth -t -e2 -L$$b < $$i > $$o', \
+ # On SuSE the scripts have a .sh suffix, and on debian they are in /usr/share/tex4ht/
+ path, htmlconv = checkProg('a LaTeX -> HTML converter', ['htlatex $$i', 'htlatex.sh $$i', \
+ '/usr/share/tex4ht/htlatex $$i', 'tth -t -e2 -L$$b < $$i > $$o', \
'latex2html -no_subdir -split 0 -show_section_numbers $$i', 'hevea -s $$i'],
rc_entry = [ r'\converter latex html "%%" "needaux"' ])
- if htmlconv == 'htlatex' or htmlconv == 'latex2html':
+ if htmlconv.find('htlatex') >= 0 or htmlconv == 'latex2html':
addToRC(r'''\copier html "python -tt $$s/scripts/ext_copy.py -e html,png,css $$i $$o"''')
else:
addToRC(r'''\copier html "python -tt $$s/scripts/ext_copy.py $$i $$o"''')
- #
- path, htmlconv = checkProg('a LaTeX -> MS Word converter', ["htlatex $$i 'html,word' 'symbol/!' '-cvalidate'"],
+ # 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 == 'htlatex':
+ 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'],
#
checkProg('an OpenDocument -> LaTeX converter', ['w2l -clean $$i'],
rc_entry = [ r'\converter odt latex "%%" ""' ])
- #
- checkProg('a LaTeX -> Open Document converter', ['oolatex $$i', 'oolatex.sh $$i'],
- rc_entry = [ r'\converter latex 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\''],
+ 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"' ])
\converter tgif pdf "tgif -stdout -print -color -pdf $$i > $$o" ""''',
''])
#
- checkProg('a WMF -> EPS converter', ['wmf2eps -o $$o $$i'],
- rc_entry = [ r'\converter wmf eps "%%" ""', ''])
+ checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i'],
+ rc_entry = [ r'\converter wmf eps "%%" ""'])
+ #
+ checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i'],
+ rc_entry = [ r'\converter emf eps "%%" ""'])
#
checkProg('an EPS -> PDF converter', ['epstopdf'],
rc_entry = [ r'\converter eps pdf "epstopdf --outfile=$$o $$i" ""', ''])
\converter fig pstex "python -tt $$s/scripts/fig2pstex.py $$i $$o" ""
\converter lyx lyx13x "python -tt $$s/lyx2lyx/lyx2lyx -t 221 $$i > $$o" ""
\converter lyx lyx14x "python -tt $$s/lyx2lyx/lyx2lyx -t 245 $$i > $$o" ""
+\converter lyx lyx15x "python -tt $$s/lyx2lyx/lyx2lyx -t 276 $$i > $$o" ""
\converter lyx clyx "python -tt $$s/lyx2lyx/lyx2lyx -c big5 -t 245 $$i > $$o" ""
\converter lyx jlyx "python -tt $$s/lyx2lyx/lyx2lyx -c euc_jp -t 245 $$i > $$o" ""
\converter lyx klyx "python -tt $$s/lyx2lyx/lyx2lyx -c euc_kr -t 245 $$i > $$o" ""
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"
-\copier program "python -tt $$s/scripts/ext_copy.py $$i $$o"
+\copier program "python -tt $$s/scripts/ext_copy.py $$i $$o"
''')
def checkLatexConfig(check_config, bool_docbook, bool_linuxdoc):
- ''' Explore the LaTeX configuration '''
+ ''' Explore the LaTeX configuration
+ Return None (will be passed to sys.exit()) for success.
+ '''
print 'checking LaTeX configuration... ',
- # First, remove the files that we want to re-create
- removeFiles(['textclass.lst', 'packages.lst', 'chkconfig.sed'])
- #
- if not check_config:
+ # if --without-latex-config is forced, or if there is no previous
+ # version of textclass.lst, re-generate a default file.
+ if not os.path.isfile('textclass.lst') or not check_config:
+ # remove the files only if we want to regenerate
+ removeFiles(['textclass.lst', 'packages.lst'])
+ #
+ # Then, generate a default textclass.lst. In case configure.py
+ # fails, we still have something to start lyx.
print ' default values'
print '+checking list of textclasses... '
tx = open('textclass.lst', 'w')
tx.write(processLayoutFile(file, bool_docbook, bool_linuxdoc))
tx.close()
print '\tdone'
+ if not check_config:
+ return None
+ # the following will generate textclass.lst.tmp, and packages.lst.tmp
else:
print '\tauto'
removeFiles(['wrap_chkconfig.ltx', 'chkconfig.vars', \
'chkconfig.classes', 'chklayouts.tex'])
rmcopy = False
if not os.path.isfile( 'chkconfig.ltx' ):
- shutil.copy( os.path.join(srcdir, 'chkconfig.ltx'), 'chkconfig.ltx' )
+ shutil.copyfile( os.path.join(srcdir, 'chkconfig.ltx'), 'chkconfig.ltx' )
rmcopy = True
writeToFile('wrap_chkconfig.ltx', '%s\n%s\n\\input{chkconfig.ltx}\n' \
% (linuxdoc_cmd, docbook_cmd) )
break;
if re.match('^\+', line):
print line,
- fout.close()
+ # if the command succeeds, None will be returned
+ ret = fout.close()
#
# currently, values in chhkconfig are only used to set
# \font_encoding
pass
if rmcopy: # remove the copied file
removeFiles( [ 'chkconfig.ltx' ] )
-
-
-def createLaTeXConfig():
- ''' create LaTeXConfig.lyx '''
- # if chkconfig.sed does not exist (because LaTeX did not run),
- # then provide a standard version.
- if not os.path.isfile('chkconfig.sed'):
- writeToFile('chkconfig.sed', 's!@.*@!???!g\n')
- print "creating packages.lst"
- # if packages.lst does not exist (because LaTeX did not run),
- # then provide a standard version.
- if not os.path.isfile('packages.lst'):
- writeToFile('packages.lst', '''
-### This file should contain the list of LaTeX packages that have been
-### recognized by LyX. Unfortunately, since configure could not find
-### your LaTeX2e program, the tests have not been run. Run ./configure.py
-### if you need to update it after a configuration change.
+ # if configure successed, move textclass.lst.tmp to textclass.lst
+ # and packages.lst.tmp to packages.lst
+ if os.path.isfile('textclass.lst.tmp') and len(open('textclass.lst.tmp').read()) > 0 \
+ and os.path.isfile('packages.lst.tmp') and len(open('packages.lst.tmp').read()) > 0:
+ shutil.move('textclass.lst.tmp', 'textclass.lst')
+ shutil.move('packages.lst.tmp', 'packages.lst')
+ return ret
+
+
+def checkModulesConfig():
+ removeFiles(['lyxmodules.lst'])
+
+ print '+checking list of modules... '
+ tx = open('lyxmodules.lst', 'w')
+ tx.write('''## This file declares modules and their associated definition files.
+## It has been automatically generated by configure
+## Use "Options/Reconfigure" if you need to update it after a
+## configuration change.
''')
- print 'creating doc/LaTeXConfig.lyx'
- #
- # This is originally done by sed, using a
- # tex-generated file chkconfig.sed
- ##sed -f chkconfig.sed ${srcdir}/doc/LaTeXConfig.lyx.in
- ## >doc/LaTeXConfig.lyx
- # Now, we have to do it by hand (python).
- #
- # add to chekconfig.sed
- writeToFile('chkconfig.sed', '''s!@chk_linuxdoc@!%s!g
-s!@chk_docbook@!%s!g
- ''' % (chk_linuxdoc, chk_docbook) , append=True)
- # process this sed file!!!!
- lyxin = open( os.path.join(srcdir, 'doc', 'LaTeXConfig.lyx.in')).readlines()
- # get the rules
- p = re.compile(r's!(.*)!(.*)!g')
- # process each sed replace.
- for sed in open('chkconfig.sed').readlines():
- if sed.strip() == '':
- continue
- try:
- fr, to = p.match(sed).groups()
- # if latex did not run, change all @name@ to '???'
- if fr == '@.*@':
- for line in range(len(lyxin)):
- lyxin[line] = re.sub('@.*@', to, lyxin[line])
+ # build the list of available modules
+ foundClasses = []
+ for file in glob.glob( os.path.join('layouts', '*.module') ) + \
+ glob.glob( os.path.join(srcdir, 'layouts', '*.module' ) ) :
+ # valid file?
+ print file
+ if not os.path.isfile(file):
+ continue
+ tx.write(processModuleFile(file, bool_docbook, bool_linuxdoc))
+ 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}...
+ We expect output:
+ "ModuleName" "filename" "Description" "Packages"
+ "
+ '''
+ p = re.compile(r'\DeclareLyXModule\s*(?:\[([^]]*)\])?{(.*)}{(.*)}')
+ for line in open(file).readlines():
+ res = p.search(line)
+ if res != None:
+ (packages, desc, modname) = res.groups()
+ #check availability...need to add that
+ if packages == None:
+ packages = ""
else:
- for line in range(len(lyxin)):
- lyxin[line] = lyxin[line].replace(fr, to)
- except: # wrong sed entry?
- print "Wrong sed entry in chkconfig.sed: '" + sed + "'"
- sys.exit(4)
- #
- writeToFile( os.path.join('doc', 'LaTeXConfig.lyx'),
- ''.join(lyxin))
+ 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)
+ print "Module file without \DeclareLyXModule line. "
+ sys.exit(2)
+
+
def checkTeXAllowSpaces():
def removeTempFiles():
# Final clean-up
if not lyx_keep_temps:
- removeFiles(['chkconfig.sed', 'chkconfig.vars', \
+ removeFiles(['chkconfig.vars', \
'wrap_chkconfig.ltx', 'wrap_chkconfig.log', \
'chklayouts.tex', 'missfont.log',
'chklatex.ltx', 'chklatex.log'])
addToRC(r'\tex_expects_windows_paths %s' % windows_style_tex_paths)
checkOtherEntries()
# --without-latex-config can disable lyx_check_config
- checkLatexConfig( lyx_check_config and LATEX != '', bool_docbook, bool_linuxdoc)
- createLaTeXConfig()
+ ret = checkLatexConfig(lyx_check_config and LATEX != '',
+ bool_docbook, bool_linuxdoc)
+ checkModulesConfig() #lyx_check_config and LATEX != '')
removeTempFiles()
+ sys.exit(ret)