def checkTeXPaths():
''' Determine the path-style needed by the TeX engine on Win32 (Cygwin) '''
windows_style_tex_paths = ''
+ if LATEX == '':
+ return windows_style_tex_paths
if os.name == 'nt' or sys.platform == 'cygwin':
from tempfile import mkstemp
fd, tmpfname = mkstemp(suffix='.ltx')
if os.name == 'nt':
- inpname = tmpfname.replace('\\', '/')
+ from ctypes import windll, create_unicode_buffer
+ GetShortPathName = windll.kernel32.GetShortPathNameW
+ longname = unicode(tmpfname)
+ shortlen = GetShortPathName(longname, 0, 0)
+ shortname = create_unicode_buffer(shortlen)
+ if GetShortPathName(longname, shortname, shortlen):
+ inpname = shortname.value.replace('\\', '/')
+ else:
+ inpname = tmpfname.replace('\\', '/')
else:
inpname = cmdOutput('cygpath -m ' + tmpfname)
logname = os.path.basename(inpname.replace('.ltx', '.log'))
os.write(fd, r'\relax')
os.close(fd)
latex_out = cmdOutput(r'latex "\nonstopmode\input{%s}"' % inpname)
+ if 'Error' in latex_out:
+ latex_out = cmdOutput(r'latex "\nonstopmode\input{\"%s\"}"' % inpname)
if 'Error' in latex_out:
logger.warning("configure: TeX engine needs posix-style paths in latex files")
windows_style_tex_paths = 'false'
1. emtpy: no rc entry will be added
2. one pattern: %% will be replaced by the first found program,
or '' if no program is found.
- 3. several patterns for each prog and not_found. This is used
- when different programs have different usages. If you do not
- want not_found entry to be added to the RC file, you can specify
+ 3. several patterns for each prog and not_found. This is used
+ when different programs have different usages. If you do not
+ want not_found entry to be added to the RC file, you can specify
an entry for each prog and use '' for the not_found entry.
not_found: the value that should be used instead of '' if no program
def checkProgAlternatives(description, progs, rc_entry = [], alt_rc_entry = [], path = [], not_found = ''):
- '''
+ '''
The same as checkProg, but additionally, all found programs will be added
as alt_rc_entries
'''
return ['', not_found]
-def addViewerAlternatives(rcs):
- r = re.compile(r'\\Format (\S+).*$')
- m = None
- alt = ''
- for idxx in range(len(rcs)):
- if len(rcs) == 1:
- m = r.match(rcs[0])
- if m:
- alt = r'\viewer_alternatives ' + m.group(1) + " %%"
- elif len(rcs) > 1:
- m = r.match(rcs[idxx])
- if m:
- if idxx > 0:
- alt += '\n'
- alt += r'\viewer_alternatives ' + m.group(1) + " %%"
- return alt
-
-
-def addEditorAlternatives(rcs):
+def addAlternatives(rcs, alt_type):
+ '''
+ Returns a \\prog_alternatives string to be used as an alternative
+ rc entry. alt_type can be a string or a list of strings.
+ '''
r = re.compile(r'\\Format (\S+).*$')
m = None
alt = ''
+ alt_token = '\\%s_alternatives '
+ if isinstance(alt_type, str):
+ alt_tokens = [alt_token % alt_type]
+ else:
+ alt_tokens = map(lambda s: alt_token % s, alt_type)
for idxx in range(len(rcs)):
if len(rcs) == 1:
m = r.match(rcs[0])
if m:
- alt = r'\editor_alternatives ' + m.group(1) + " %%"
+ alt = '\n'.join([s + m.group(1) + " %%" for s in alt_tokens])
elif len(rcs) > 1:
m = r.match(rcs[idxx])
if m:
if idxx > 0:
alt += '\n'
- alt += r'\editor_alternatives ' + m.group(1) + " %%"
+ alt += '\n'.join([s + m.group(1) + " %%" for s in alt_tokens])
return alt
-def checkViewer(description, progs, rc_entry = [], path = []):
- ''' The same as checkProgAlternatives, but for viewers '''
+def listAlternatives(progs, alt_type, rc_entry = []):
+ '''
+ Returns a list of \\prog_alternatives strings to be used as alternative
+ rc entries. alt_type can be a string or a list of strings.
+ '''
if len(rc_entry) > 1 and len(rc_entry) != len(progs) + 1:
logger.error("rc entry should have one item or item for each prog and not_found.")
sys.exit(2)
for idx in range(len(progs)):
if len(rc_entry) == 1:
rcs = rc_entry[0].split('\n')
- alt = addViewerAlternatives(rcs)
+ alt = addAlternatives(rcs, alt_type)
alt_rc_entry.insert(0, alt)
elif len(rc_entry) > 1:
rcs = rc_entry[idx].split('\n')
- alt = addViewerAlternatives(rcs)
+ alt = addAlternatives(rcs, alt_type)
alt_rc_entry.insert(idx, alt)
+ return alt_rc_entry
+
+
+def checkViewer(description, progs, rc_entry = [], path = []):
+ ''' The same as checkProgAlternatives, but for viewers '''
+ alt_rc_entry = listAlternatives(progs, 'viewer', rc_entry)
return checkProgAlternatives(description, progs, rc_entry, alt_rc_entry, path, not_found = 'auto')
def checkEditor(description, progs, rc_entry = [], path = []):
''' The same as checkProgAlternatives, but for editors '''
- if len(rc_entry) > 1 and len(rc_entry) != len(progs) + 1:
- logger.error("rc entry should have one item or item for each prog and not_found.")
- sys.exit(2)
- alt_rc_entry = []
- for idx in range(len(progs)):
- if len(rc_entry) == 1:
- rcs = rc_entry[0].split('\n')
- alt = addEditorAlternatives(rcs)
- alt_rc_entry.insert(0, alt)
- elif len(rc_entry) > 1:
- rcs = rc_entry[idx].split('\n')
- alt = addEditorAlternatives(rcs)
- alt_rc_entry.insert(idx, alt)
+ alt_rc_entry = listAlternatives(progs, 'editor', rc_entry)
return checkProgAlternatives(description, progs, rc_entry, alt_rc_entry, path, not_found = 'auto')
def checkViewerNoRC(description, progs, rc_entry = [], path = []):
''' The same as checkViewer, but do not add rc entry '''
- if len(rc_entry) > 1 and len(rc_entry) != len(progs) + 1:
- logger.error("rc entry should have one item or item for each prog and not_found.")
- sys.exit(2)
- alt_rc_entry = []
- for idx in range(len(progs)):
- if len(rc_entry) == 1:
- rcs = rc_entry[0].split('\n')
- alt = addViewerAlternatives(rcs)
- alt_rc_entry.insert(0, alt)
- elif len(rc_entry) > 1:
- rcs = rc_entry[idx].split('\n')
- alt = addViewerAlternatives(rcs)
- alt_rc_entry.insert(idx, alt)
+ alt_rc_entry = listAlternatives(progs, 'viewer', rc_entry)
rc_entry = []
return checkProgAlternatives(description, progs, rc_entry, alt_rc_entry, path, not_found = 'auto')
def checkEditorNoRC(description, progs, rc_entry = [], path = []):
''' The same as checkViewer, but do not add rc entry '''
- if len(rc_entry) > 1 and len(rc_entry) != len(progs) + 1:
- logger.error("rc entry should have one item or item for each prog and not_found.")
- sys.exit(2)
- alt_rc_entry = []
- for idx in range(len(progs)):
- if len(rc_entry) == 1:
- rcs = rc_entry[0].split('\n')
- alt = addEditorAlternatives(rcs)
- alt_rc_entry.insert(0, alt)
- elif len(rc_entry) > 1:
- rcs = rc_entry[idx].split('\n')
- alt = addEditorAlternatives(rcs)
- alt_rc_entry.insert(idx, alt)
+ alt_rc_entry = listAlternatives(progs, 'editor', rc_entry)
rc_entry = []
return checkProgAlternatives(description, progs, rc_entry, alt_rc_entry, path, not_found = 'auto')
def checkViewerEditor(description, progs, rc_entry = [], path = []):
''' The same as checkProgAlternatives, but for viewers and editors '''
- checkEditorNoRC(description, progs, rc_entry, path)
- return checkViewer(description, progs, rc_entry, path)
+ alt_rc_entry = listAlternatives(progs, ['editor', 'viewer'], rc_entry)
+ return checkProgAlternatives(description, progs, rc_entry, alt_rc_entry, path, not_found = 'auto')
def checkDTLtools():
PLATEX = ''
removeFiles(['chklatex.ltx', 'chklatex.log'])
#-----------------------------------------------------------------
- # use LATEX to convert from latex to dvi if PPLATEX is not available
+ # use LATEX to convert from latex to dvi if PPLATEX is not available
if PPLATEX == '':
PPLATEX = LATEX
if dtl_tools:
return ''
+def checkLuatex():
+ ''' Check if luatex is there and usable '''
+ path, LUATEX = checkProg('LuaTeX', ['lualatex $$i'])
+ path, DVILUATEX = checkProg('LuaTeX (DVI)', ['dvilualatex $$i'])
+ if LUATEX != '':
+ # luatex binary is there
+ msg = "checking if LuaTeX is usable ..."
+ # Check if luatex is usable
+ writeToFile('luatest.tex', '''
+\\nonstopmode\\documentclass{minimal}
+\\usepackage{fontspec}
+\\begin{document}
+.
+\\end{document}
+''')
+ # run lualatex on luatest.tex and check result
+ luatest = cmdOutput(LUATEX + ' luatest.tex')
+ if luatest.find('XeTeX is required to compile this document') != -1:
+ # fontspec/luatex too old! We do not support this version.
+ logger.info(msg + ' no (probably not recent enough)')
+ elif luatest.find('! LaTeX Error: File `fontspec.sty\' not found') != -1:
+ # fontspec missing
+ logger.info(msg + ' no (missing fontspec)')
+ else:
+ # working luatex
+ logger.info(msg + ' yes')
+ addToRC(r'\converter luatex pdf5 "%s" "latex=lualatex"' % LUATEX)
+ if DVILUATEX != '':
+ addToRC(r'\converter luatex dvi3 "%s" "latex=lualatex"' % DVILUATEX)
+ # remove temporary files
+ removeFiles(['luatest.tex', 'luatest.log', 'luatest.aux', 'luatest.pdf'])
+
+
def checkModule(module):
''' Check for a Python module, return the status '''
msg = 'checking for "' + module + ' module"... '
return False
-def checkFormatEntries(dtl_tools):
+def checkFormatEntries(dtl_tools):
''' Check all formats (\Format entries) '''
checkViewerEditor('a Tgif viewer and editor', ['tgif'],
rc_entry = [r'\Format tgif obj Tgif "" "%%" "%%" "vector"'])
\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) )
#
- checkViewerEditor('a text editor', ['sensible-editor', 'xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
+ checkViewerEditor('a text 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 literate nw NoWeb N "" "%%" "document,menu=export"
\Format sweave Rnw "Sweave" S "" "%%" "document,menu=export"
\Format lilypond ly "LilyPond music" "" "" "%%" "vector"
-\Format lilypond-book lytex "LilyPond book (LaTeX)" "" "" "%%" "document"
+\Format lilypond-book lytex "LilyPond book (LaTeX)" "" "" "%%" "document,menu=export"
\Format latex tex "LaTeX (plain)" L "" "%%" "document,menu=export"
\Format luatex tex "LaTeX (LuaTeX)" "" "" "%%" "document,menu=export"
\Format pdflatex tex "LaTeX (pdflatex)" "" "" "%%" "document,menu=export"
\Format text4 txt "Plain text (catdvi)" "" "" "%%" "document"
\Format textparagraph txt "Plain Text, Join Lines" "" "" "%%" "document"''' ])
#Spreadsheets using ssconvert from gnumeric
- checkViewer('gnumeric spreadsheet software', ['gnumeric'],
- rc_entry = [r'''\Format gnumeric gnumeric "Gnumeric spreadsheet" "" "" "%%" "document"
-\Format excel xls "Excel spreadsheet" "" "" "%%" "document"
-\Format oocalc ods "OpenOffice spreadsheet" "" "" "%%" "document"'''])
+ checkViewer('gnumeric spreadsheet software', ['gnumeric'],
+ rc_entry = [r'''\Format gnumeric gnumeric "Gnumeric spreadsheet" "" "" "%%" "document"
+\Format excel xls "Excel spreadsheet" "" "" "%%" "document"
+\Format oocalc ods "OpenOffice spreadsheet" "" "" "%%" "document"'''])
#
path, xhtmlview = checkViewer('an HTML previewer', ['firefox', 'mozilla file://$$p$$i', 'netscape'],
rc_entry = [r'\Format xhtml xhtml "LyXHTML" y "%%" "" "document,menu=export"'])
if xhtmlview == "":
addToRC(r'\Format xhtml xhtml "LyXHTML" y "" "" "document,menu=export"')
#
- checkEditor('a BibTeX editor', ['sensible-editor', 'jabref', 'JabRef', \
+ checkEditor('a BibTeX editor', ['jabref', 'JabRef', \
'pybliographic', 'bibdesk', 'gbib', 'kbib', \
'kbibtex', 'sixpack', 'bibedit', 'tkbibtex' \
'xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
# rc_entry = [ r'\ps_command "%%"' ])
checkViewer('a Postscript previewer', ['kghostview', 'okular', 'evince', 'gv', 'ghostview -swap'],
rc_entry = [r'''\Format eps eps EPS "" "%%" "" "vector"
-\Format ps ps Postscript t "%%" "" "document,vector"'''])
+\Format ps ps Postscript t "%%" "" "document,vector,menu=export"'''])
# 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', \
'gv', 'ghostview'],
checkViewerEditor('an OpenDocument/OpenOffice viewer', ['swriter', 'oowriter', 'abiword'],
rc_entry = [r'''\Format odt odt OpenDocument "" "%%" "%%" "document,vector,menu=export"
\Format sxw sxw "OpenOffice.Org (sxw)" "" "" "" "document,vector"'''])
- #
+ #
checkViewerEditor('a Rich Text and Word viewer', ['swriter', 'oowriter', 'abiword'],
rc_entry = [r'''\Format rtf rtf "Rich Text Format" "" "%%" "%%" "document,vector,menu=export"
\Format word doc "MS Word" W "%%" "%%" "document,vector,menu=export"'''])
\Format lyx14x 14.lyx "LyX 1.4.x" "" "" "" "document"
\Format lyx15x 15.lyx "LyX 1.5.x" "" "" "" "document"
\Format lyx16x 16.lyx "LyX 1.6.x" "" "" "" "document,menu=export"
+\Format lyx20x 20.lyx "LyX 2.0.x" "" "" "" "document,menu=export"
\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"
checkProg('XeTeX', ['xelatex $$i'],
rc_entry = [ r'\converter xetex pdf4 "%%" "latex=xelatex"' ])
- checkProg('LuaTeX', ['lualatex $$i'],
- rc_entry = [ r'\converter luatex pdf5 "%%" "latex=lualatex"' ])
+ checkLuatex()
- checkProg('LuaTeX (DVI)', ['dvilualatex $$i'],
- rc_entry = [ r'\converter luatex dvi3 "%%" "latex=lualatex"' ])
-
''' If we're running LyX in-place then tex2lyx will be found in
../src/tex2lyx. Add this directory to the PATH temporarily and
search for tex2lyx.
rc_entry = [r'''\converter literate latex "%%" ""
\converter literate pdflatex "%%" ""'''])
#
- checkProg('a Sweave -> LaTeX converter', ['Rscript --no-save --no-restore $$s/scripts/lyxsweave.R $$p$$i $$e $$r'],
+ checkProg('a Sweave -> LaTeX converter', ['Rscript --verbose --no-save --no-restore $$s/scripts/lyxsweave.R $$p$$i $$p$$o $$e $$r'],
rc_entry = [r'''\converter sweave latex "%%" ""
-\converter sweave pdflatex "%%" ""'''])
+\converter sweave pdflatex "%%" ""
+\converter sweave xetex "%%" ""
+\converter sweave luatex "%%" ""'''])
#
checkProg('an HTML -> LaTeX converter', ['html2latex $$i', 'gnuhtml2latex $$i', \
'htmltolatex -input $$i -output $$o', 'java -jar htmltolatex.jar -input $$i -output $$o'],
else:
# set empty converter to override the default imagemagick
addToRC(r'\converter lyxpreview ppm "" ""')
- #
+ #
checkProg('a fax program', ['kdeprintfax $$i', 'ksendfax $$i', 'hylapex $$i'],
rc_entry = [ r'\converter ps fax "%%" ""'])
#
checkProg('a Dia -> EPS converter', ['dia -e $$o -t eps $$i'],
rc_entry = [ r'\converter dia eps "%%" ""'])
#
- checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', 'inkscape --file=$$p/$$i --export-area-drawing --without-gui --export-pdf=$$p/$$o'],
+ checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', 'inkscape --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
rc_entry = [ r'\converter svg pdf "%%" ""'])
#
- checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', 'inkscape --file=$$p/$$i --export-area-drawing --without-gui --export-eps=$$p/$$o'],
+ checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', 'inkscape --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
rc_entry = [ r'\converter svg eps "%%" ""'])
- # the PNG export via Inkscape must not have the full path ($$p) for the file
+ #
checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', 'inkscape --without-gui --file=$$i --export-png=$$o'],
rc_entry = [ r'\converter svg png "%%" ""'])
-
+
#
# gnumeric/xls/ods to tex
- checkProg('a spreadsheet -> latex converter', ['ssconvert'],
- rc_entry = [ r'''\converter gnumeric latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""
-\converter ods latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""
-\converter xls latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""''',
-''])
+ checkProg('a spreadsheet -> latex converter', ['ssconvert'],
+ rc_entry = [ r'''\converter gnumeric latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""
+\converter ods latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""
+\converter xls latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""''',
+''])
path, lilypond = checkProg('a LilyPond -> EPS/PDF/PNG converter', ['lilypond'])
if (lilypond != ''):
# this, use different output folders for eps and pdf outputs.
addToRC(r'\converter lilypond-book latex "lilypond-book --safe --lily-output-dir=ly-eps $$i" ""')
addToRC(r'\converter lilypond-book pdflatex "lilypond-book --safe --pdf --latex-program=pdflatex --lily-output-dir=ly-pdf $$i" ""')
+ addToRC(r'\converter lilypond-book xetex "lilypond-book --safe --pdf --latex-program=xelatex --lily-output-dir=ly-pdf $$i" ""')
+ addToRC(r'\converter lilypond-book luatex "lilypond-book --safe --pdf --latex-program=lualatex --lily-output-dir=ly-pdf $$i" ""')
logger.info('+ found LilyPond-book version %s.' % version_number)
else:
logger.info('+ found LilyPond-book, but version %s is too old.' % version_number)
else:
addToRC(r'\Format lyxgz gz "LyX Archive (tar.gz)" "" "" "" "document,menu=export"')
addToRC(cmd % "lyxgz")
-
+
#
# FIXME: no rc_entry? comment it out
# checkProg('Image converter', ['convert $$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 lyx16x "python -tt $$s/lyx2lyx/lyx2lyx -t 345 $$i > $$o" ""
+\converter lyx lyx20x "python -tt $$s/lyx2lyx/lyx2lyx -t 413 $$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" ""
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)
-
+
\DeclareLaTeXClass{article}
\DeclareLaTeXClass[scrbook]{book (koma-script)}
\DeclareLaTeXClass[svjour,svjog.clo]{article (Springer - svjour/jog)}
we expect 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"
def checkLatexConfig(check_config, bool_docbook):
- ''' Explore the LaTeX configuration
+ ''' Explore the LaTeX configuration
Return None (will be passed to sys.exit()) for success.
'''
msg = 'checking LaTeX configuration... '
- # if --without-latex-config is forced, or if there is no previous
+ # 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
for file in glob.glob( os.path.join('layouts', '*.layout') ) + \
glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) :
# valid file?
- if not os.path.isfile(file):
+ if not os.path.isfile(file):
continue
# get stuff between /xxxx.layout .
classname = file.split(os.sep)[-1].split('.')[0]
return None
# the following will generate textclass.lst.tmp, and packages.lst.tmp
logger.info(msg + '\tauto')
- removeFiles(['wrap_chkconfig.ltx', 'chkconfig.vars', \
- 'chkconfig.classes', 'chklayouts.tex'])
+ removeFiles(['chkconfig.classes', 'chkconfig.vars', 'chklayouts.tex',
+ 'wrap_chkconfig.ltx'])
rmcopy = False
if not os.path.isfile( 'chkconfig.ltx' ):
shutil.copyfile( os.path.join(srcdir, 'chkconfig.ltx'), 'chkconfig.ltx' )
testclasses = list()
for file in glob.glob( os.path.join('layouts', '*.layout') ) + \
glob.glob( os.path.join(srcdir, 'layouts', '*.layout' ) ) :
+ nodeclaration = False
if not os.path.isfile(file):
continue
classname = file.split(os.sep)[-1].split('.')[0]
for line in open(file).readlines():
if not empty.match(line) and line[0] != '#':
- logger.error("Failed to find \Declare line for layout file `" + file + "'")
- sys.exit(3)
+ logger.warning("Failed to find valid \Declare line for layout file `" + file + "'.\n\t=> Skipping this file!")
+ nodeclaration = True
+ break
if declare.search(line) == None:
continue
testclasses.append("\\TestDocClass{%s}{%s}" % (classname, line[1:].strip()))
break
+ if nodeclaration:
+ continue
testclasses.sort()
cl = open('chklayouts.tex', 'w')
for line in testclasses:
key, val = re.sub('-', '_', line).split('=')
val = val.strip()
values[key] = val.strip("'")
- # chk_fontenc may not exist
+ # chk_fontenc may not exist
try:
addToRC(r'\font_encoding "%s"' % values["chk_fontenc"])
except:
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.
+## configuration change.
## "ModuleName" "filename" "Description" "Packages" "Requires" "Excludes" "Category"
''')
+
# build the list of available modules
- foundClasses = []
+ seen = []
+ # note that this searches the local directory first, then the
+ # system directory. that way, we pick up the user's version first.
for file in glob.glob( os.path.join('layouts', '*.module') ) + \
glob.glob( os.path.join(srcdir, 'layouts', '*.module' ) ) :
# valid file?
logger.info(file)
- if not os.path.isfile(file):
+ if not os.path.isfile(file):
continue
- retval = processModuleFile(file, bool_docbook)
+
+ filename = file.split(os.sep)[-1]
+ filename = filename[:-7]
+ if seen.count(filename):
+ continue
+
+ seen.append(filename)
+ retval = processModuleFile(file, filename, bool_docbook)
if retval != "":
tx.write(retval)
tx.close()
logger.info('\tdone')
-def processModuleFile(file, bool_docbook):
+def processModuleFile(file, filename, bool_docbook):
''' process module file and get a line of result
The top of a module file should look like this:
modname = desc = pkgs = req = excl = catgy = ""
readingDescription = False
descLines = []
- filename = file.split(os.sep)[-1]
- filename = filename[:-7]
for line in open(file).readlines():
if readingDescription:
cm.close()
return '"%s" "%s" "%s" "%s" "%s" "%s" "%s"\n' % (modname, filename, desc, pkgs, req, excl, catgy)
-
def checkTeXAllowSpaces():
msg = "Checking whether TeX allows spaces in file names... "
writeToFile('a b.tex', r'\message{working^^J}' )
if LATEX != '':
- if os.name == 'nt':
+ if os.name == 'nt' or sys.platform == 'cygwin':
latex_out = cmdOutput(LATEX + r""" "\nonstopmode\input{\"a b\"}" """)
else:
latex_out = cmdOutput(LATEX + r""" '\nonstopmode\input{"a b"}' """)
def removeTempFiles():
# Final clean-up
if not lyx_keep_temps:
- removeFiles(['chkconfig.vars', \
- 'wrap_chkconfig.ltx', 'wrap_chkconfig.log', \
- 'chklayouts.tex', 'chkmodules.tex', 'missfont.log',
- 'chklatex.ltx', 'chklatex.log'])
+ removeFiles(['chkconfig.vars', 'chklatex.ltx', 'chklatex.log',
+ 'chklayouts.tex', 'chkmodules.tex', 'missfont.log',
+ 'wrap_chkconfig.ltx', 'wrap_chkconfig.log'])
if __name__ == '__main__':
lyx_check_config = True
outfile = 'lyxrc.defaults'
+ lyxrc_fileformat = 1
rc_entries = ''
lyx_keep_temps = False
version_suffix = ''
sys.exit(1)
setEnviron()
createDirectories()
- windows_style_tex_paths = checkTeXPaths()
dtl_tools = checkDTLtools()
## Write the first part of outfile
writeToFile(outfile, '''# This file has been automatically generated by LyX' lib/configure.py
# script. It contains default settings that have been determined by
# examining your system. PLEASE DO NOT MODIFY ANYTHING HERE! If you
-# want to customize LyX, use LyX' Preferences dialog or modify directly
+# want to customize LyX, use LyX' Preferences dialog or modify directly
# the "preferences" file instead. Any setting in that file will
# override the values given here.
-''')
+
+Format %i
+
+''' % lyxrc_fileformat)
# check latex
LATEX = checkLatex(dtl_tools)
checkFormatEntries(dtl_tools)
checkConverterEntries()
(chk_docbook, bool_docbook, docbook_cmd) = checkDocBook()
checkTeXAllowSpaces()
+ windows_style_tex_paths = checkTeXPaths()
if windows_style_tex_paths != '':
addToRC(r'\tex_expects_windows_paths %s' % windows_style_tex_paths)
checkOtherEntries()