;ς )δHEc @sρdkZdkZdkZdkZdkZdkZdkZdkZdkl Z l Z dZ ei di dZdZdZdd„Ze d d d d d ddddƒ d„Zddd„Zd„Zed„Zd„Zd„ZdS(N(spacksunpacksimages/s __builtin__s /LatexWikiis.pngscCs!dtt|ƒƒ||fSdS(Ns %s-%spx%s(sabsshashs latexCodessizes extension(s latexCodessizes extension((sF/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/plugins/latexwiki/util.pys fileNameForss !BBBBBBBBi‰iPiNiGi i icCsjt|dƒ}|idƒ}|iƒ|d |jp td‚tt t t d|dd!ƒƒƒSdS(Nsriisin getPngSize, file not a PNG!s!LLi( sfilesfnamesfsreadsbufscloses magicBytessAssertionErrorstuplesmapsintsunpack(sfnames magicBytessfsbuf((sF/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/plugins/latexwiki/util.pys getPngSizes  icCstid|||ƒdS(NsLatexWikiDebugLog(szLOGsLOGsseverityssummarysmessage(smessagessummarysseverity((sF/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/plugins/latexwiki/util.pyslogscCsBti|iƒtiƒ}ti|iƒti|tiBƒdS(N(sfcntlsfsfilenosF_GETFLsflsF_SETFLsoss O_NONBLOCK(sfsfl((sF/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/plugins/latexwiki/util.pysmakeNonBlockingscCs©tidt|dƒ}|o|ii|ƒn|iiƒt |i ƒt |i ƒg} g}t} t} xέ| o| oΝti|i |i gggƒ\}}}xœ|D]”} | |i jo7|i iƒ}|djo t} qK|i|ƒq·| |i jo7|i iƒ}|djo t} qK| i|ƒq·q·WqwW|iƒ}ti|ƒpti|ƒ } | t i!|dƒt i!| dƒfSdS(Nscd %s; is("spopen2sPopen3s workingDirscmdLinesprogramsinputstochildswritesclosesmakeNonBlockings fromchildschilderrsstderrsstdoutsFalseserreofsouteofsselectsreadmeswritmesxmesoutputsreadstextsTruesappendswaitsstatussoss WEXITSTATUSs WIFEXITEDserrorsstringsjoin(scmdLinesinputsstdoutstextswritmesxmesprogramsreadmesstatussouteofserreofsstderrserrorsoutput((sF/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/plugins/latexwiki/util.pys runCommand!s8   *    cstˆg}|it‡d†tidtidƒƒƒƒx/|D]'}ti |ti ƒoPnt }qAW|SdS(Ncstii|ˆƒS(N(sosspathsjoinsxsexe(sx(sexe(sF/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/plugins/latexwiki/util.pys>ss:sPATH( sexespathssextendsmapsressplitsossgetenvspathsaccesssX_OKsNone(sexespathsspath((sexesF/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/plugins/latexwiki/util.pys findinpath;s 1 cCsYt|ƒ}|djogSnh}yx|D]}d||