'''
if os.name == 'nt':
b = False
- cmd = 'cmd /d /c ' + cmd
+ cmd = 'cmd /d /c pushd ' + shortPath(os.getcwdu()) + '&' + cmd
else:
b = True
pipe = subprocess.Popen(cmd, shell=b, close_fds=b, stdin=subprocess.PIPE, \
return output.strip()
+def shortPath(path):
+ ''' On Windows, return the short version of "path" if possible '''
+ if os.name == 'nt':
+ from ctypes import windll, create_unicode_buffer
+ GetShortPathName = windll.kernel32.GetShortPathNameW
+ shortlen = GetShortPathName(path, 0, 0)
+ shortpath = create_unicode_buffer(shortlen)
+ if GetShortPathName(path, shortpath, shortlen):
+ return shortpath.value
+ return path
+
+
def setEnviron():
''' I do not really know why this is useful, but we might as well keep it.
NLS nuisances.
fd, tmpfname = mkstemp(suffix='.ltx')
if os.name == 'nt':
from locale import getdefaultlocale
- from ctypes import windll, create_unicode_buffer
- GetShortPathName = windll.kernel32.GetShortPathNameW
language, encoding = getdefaultlocale()
if encoding == None:
encoding = 'latin1'
- longname = unicode(tmpfname, encoding)
- shortlen = GetShortPathName(longname, 0, 0)
- shortname = create_unicode_buffer(shortlen)
- if GetShortPathName(longname, shortname, shortlen):
- inpname = shortname.value.replace('\\', '/')
- else:
- inpname = tmpfname.replace('\\', '/')
+ inpname = shortPath(unicode(tmpfname, encoding)).replace('\\', '/')
else:
inpname = cmdOutput('cygpath -m ' + tmpfname)
- logname = os.path.basename(inpname.replace('.ltx', '.log'))
+ logname = os.path.basename(re.sub("(?i).ltx", ".log", inpname))
inpname = inpname.replace('~', '\\string~')
os.write(fd, r'\relax')
os.close(fd)
(iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie, iv, ie) )
#
checkViewerEditor('a text editor', ['xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
- 'nedit', 'gedit', 'notepad'],
+ 'nedit', 'gedit', 'notepad', 'geany', 'leafpad', 'mousepad'],
rc_entry = [r'''\Format asciichess asc "Plain text (chess output)" "" "" "%%" "" ""
\Format asciiimage asc "Plain text (image)" "" "" "%%" "" ""
\Format asciixfig asc "Plain text (Xfig output)" "" "" "%%" "" ""
\Format text2 txt "Plain text (pstotext)" "" "" "%%" "document" ""
\Format text3 txt "Plain text (ps2ascii)" "" "" "%%" "document" ""
\Format text4 txt "Plain text (catdvi)" "" "" "%%" "document" ""
-\Format textparagraph txt "Plain Text, Join Lines" "" "" "%%" "document" ""''' ])
+\Format textparagraph txt "Plain Text, Join Lines" "" "" "%%" "document" ""
+\Format beamer.info pdf.info "Info (Beamer)" "" "" "%%" "document,menu=export" ""''' ])
#Spreadsheets using ssconvert from gnumeric
checkViewer('gnumeric spreadsheet software', ['gnumeric'],
rc_entry = [r'''\Format gnumeric gnumeric "Gnumeric spreadsheet" "" "" "%%" "document" "application/x-gnumeric"
'pybliographic', 'bibdesk', 'gbib', 'kbib', \
'kbibtex', 'sixpack', 'bibedit', 'tkbibtex' \
'xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
- 'nedit', 'gedit', 'notepad'],
+ 'nedit', 'gedit', 'notepad', 'geany', 'leafpad', 'mousepad'],
rc_entry = [r'''\Format bibtex bib "BibTeX" "" "" "%%" "" "text/x-bibtex"''' ])
#
#checkProg('a Postscript interpreter', ['gs'],
checkViewerEditor('Noteedit', ['noteedit'],
rc_entry = [r'\Format noteedit not Noteedit "" "%%" "%%" "vector" ""'])
#
- checkViewerEditor('an OpenDocument/OpenOffice viewer', ['libreoffice', 'lwriter', 'swriter', 'oowriter', 'abiword'],
+ checkViewerEditor('an OpenDocument/OpenOffice viewer', ['libreoffice', 'lwriter', 'lowriter', 'oowriter', 'swriter', 'abiword'],
rc_entry = [r'''\Format odt odt OpenDocument "" "%%" "%%" "document,vector,menu=export" "application/vnd.oasis.opendocument.text"
\Format sxw sxw "OpenOffice.Org (sxw)" "" "" "" "document,vector" "application/vnd.sun.xml.writer"'''])
#
- checkViewerEditor('a Rich Text and Word viewer', ['libreoffice', 'lwriter', 'swriter', 'oowriter', 'abiword'],
+ checkViewerEditor('a Rich Text and Word viewer', ['libreoffice', 'lwriter', 'lowriter', 'oowriter', 'swriter', 'abiword'],
rc_entry = [r'''\Format rtf rtf "Rich Text Format" "" "%%" "%%" "document,vector,menu=export" "application/rtf"
\Format word doc "MS Word" W "%%" "%%" "document,vector,menu=export" "application/msword"'''])
#
# Check if LyXBlogger is installed
lyxblogger_found = checkModule('lyxblogger')
if lyxblogger_found:
- addToRC(r'\Format blog blog "LyXBlogger" "" "" "" "document"')
+ addToRC(r'\Format blog blog "LyXBlogger" "" "" "" "document" ""')
addToRC(r'\converter xhtml blog "python -m lyxblogger $$i" ""')
#
checkProg('a PDF to EPS converter', ['pdftops -eps -f 1 -l 1 $$i $$o'],
rc_entry = [ r'\converter pdf eps "%%" ""' ])
#
+ checkProg('a Beamer info extractor', ['makebeamerinfo -p $$i'],
+ rc_entry = [ r'\converter pdf2 beamer.info "%%" ""' ])
+ #
checkProg('a DVI to TXT converter', ['catdvi $$i > $$o'],
rc_entry = [ r'\converter dvi text4 "%%" ""' ])
#
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)
+ Declare lines look like this:
+ \DeclareLaTeXClass[<requirements>]{<description>}
+
+ Optionally, a \DeclareCategory line follows:
+
+ \DeclareCategory{<category>}
+
+ So for example (article.layout, scrbook.layout, svjog.layout)
+
\DeclareLaTeXClass{article}
+ \DeclareCategory{Articles}
+
\DeclareLaTeXClass[scrbook]{book (koma-script)}
+ \DeclareCategory{Books}
+
\DeclareLaTeXClass[svjour,svjog.clo]{article (Springer - svjour/jog)}
- we expect output:
+ we'd expect this 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"
+ "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" ""
'''
def checkForClassExtension(x):
'''if the extension for a latex class is not
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(r'\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}')
+ q = re.compile(r'\DeclareCategory{(.*)}')
+ classdeclaration = ""
+ categorydeclaration = '""'
for line in open(file).readlines():
res = p.search(line)
+ qres = q.search(line)
if res != None:
(classtype, optAll, opt, opt1, desc) = res.groups()
avai = {'LaTeX':'false', 'DocBook':bool_docbook}[classtype]
prereq_latex = ','.join(prereq_list)
prereq_docbook = {'true':'', 'false':'docbook'}[bool_docbook]
prereq = {'LaTeX':prereq_latex, 'DocBook':prereq_docbook}[classtype]
- return '"%s" "%s" "%s" "%s" "%s"\n' % (classname, opt, desc, avai, prereq)
+ classdeclaration = '"%s" "%s" "%s" "%s" "%s"' % (classname, opt, desc, avai, prereq)
+ if categorydeclaration != '""':
+ return classdeclaration + " " + categorydeclaration
+ if qres != 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. ")
return ""
tx.write(retval)
tx.close()
logger.info('\tdone')
+ if not os.path.isfile('packages.lst') or not check_config:
+ logger.info('+generating default list of packages... ')
+ removeFiles(['packages.lst'])
+ tx = open('packages.lst', 'w')
+ tx.close()
+ logger.info('\tdone')
if not check_config:
return None
# the following will generate textclass.lst.tmp, and packages.lst.tmp
# build the list of available layout files and convert it to commands
# for chkconfig.ltx
declare = re.compile(r'\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}')
+ category = re.compile(r'\DeclareCategory{(.*)}')
empty = re.compile(r'^\s*$')
testclasses = list()
for file in glob.glob( os.path.join('layouts', '*.layout') ) + \
if not os.path.isfile(file):
continue
classname = file.split(os.sep)[-1].split('.')[0]
+ decline = ""
+ catline = ""
for line in open(file).readlines():
if not empty.match(line) and line[0] != '#':
- logger.warning("Failed to find valid \Declare line for layout file `" + file + "'.\n\t=> Skipping this file!")
- nodeclaration = True
+ if decline == "":
+ logger.warning("Failed to find valid \Declare line for layout file `" + file + "'.\n\t=> Skipping this file!")
+ nodeclaration = True
+ # A class, but no category declaration. Just break.
break
- if declare.search(line) == None:
+ if declare.search(line) != None:
+ decline = "\\TestDocClass{%s}{%s}" % (classname, line[1:].strip())
+ testclasses.append(decline)
+ elif category.search(line) != None:
+ catline = "\\DeclareCategory{%s}{%s}" % (classname, category.search(line).groups()[0])
+ testclasses.append(catline)
+ if catline == "" or decline == "":
continue
- testclasses.append("\\TestDocClass{%s}{%s}" % (classname, line[1:].strip()))
break
if nodeclaration:
continue
if rmcopy:
removeFiles( [ 'chkconfig.ltx' ] )
#
- # currently, values in chhkconfig are only used to set
+ # currently, values in chkconfig are only used to set
# \font_encoding
values = {}
for line in open('chkconfig.vars').readlines():
removeFiles( [ 'a b.tex', 'a b.log', 'texput.log' ])
+def rescanTeXFiles():
+ ''' Run kpsewhich to update information about TeX files '''
+ logger.info("+Indexing TeX files... ")
+ if not os.path.isfile( os.path.join(srcdir, 'scripts', 'TeXFiles.py') ):
+ logger.error("configure: error: cannot find TeXFiles.py script")
+ sys.exit(1)
+ tfp = cmdOutput("python -tt " + os.path.join(srcdir, 'scripts', 'TeXFiles.py'))
+ logger.info(tfp)
+ logger.info("\tdone")
+
+
def removeTempFiles():
# Final clean-up
if not lyx_keep_temps:
if __name__ == '__main__':
lyx_check_config = True
+ lyx_kpsewhich = True
outfile = 'lyxrc.defaults'
lyxrc_fileformat = 7
rc_entries = ''
Options:
--help show this help lines
--keep-temps keep temporary files (for debug. purposes)
+ --without-kpsewhich do not update TeX files information via kpsewhich
--without-latex-config do not run LaTeX to determine configuration
--with-version-suffix=suffix suffix of binary installed files
'''
sys.exit(0)
+ elif op == '--without-kpsewhich':
+ lyx_kpsewhich = False
elif op == '--without-latex-config':
lyx_check_config = False
elif op == '--keep-temps':
if windows_style_tex_paths != '':
addToRC(r'\tex_expects_windows_paths %s' % windows_style_tex_paths)
checkOtherEntries()
+ if lyx_kpsewhich:
+ rescanTeXFiles()
checkModulesConfig()
# --without-latex-config can disable lyx_check_config
ret = checkLatexConfig(lyx_check_config and LATEX != '', bool_docbook)