o $a @sdZddlmZddlmZddlmZmZmZm Z m Z m Z m Z m Z ddlmZmZmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZzdd lm Z Wne!ymddlm"Z Ynwervddl#m$Z$de%de&fddZ'de%de(fddZ)de e(e%fde%fddZ*de de(de e fddZ+dede%de%fddZ,Gd d!d!Z-e de d"e%d#ed$ede%f d%d&Z.Gd'd(d(eZ/Gd)d*d*eeZ0d+S),z sphinx.jinja2glue ~~~~~~~~~~~~~~~~~ Glue code for the jinja2 templating engine. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. )path)pformat) TYPE_CHECKINGAnyCallableDictIteratorListTupleUnion) BaseLoaderFileSystemLoaderTemplateNotFound) Environment)SandboxedEnvironment)open_if_exists)TemplateBridge)Theme)logging)mtimes_of_files) pass_context)contextfunction)BuildervalreturncCst|tr |dvSt|S)N)true1yeson) isinstancestrlowerboolrr$3/usr/lib/python3/dist-packages/sphinx/jinja2glue.py_tobool"s  r&cCs zt|WStyYdSwNr)int ValueErrorr#r$r$r%_toint(s   r*cCs4|durdSt|rt|dkrdSd|S|S)a Make val a css dimension. In particular the following transformations are performed: - None -> 'initial' (default CSS value) - 0 -> '0' - ints and string representations of ints are interpreted as pixels. Everything else is returned unchanged. Ninitialr0z%spx)r isdigitr(r#r$r$r%_todim/s   r.valuesslicesc cst|}d}|D]}|dt|dd7}q ||}d}t|D]7}d}|} ||dkr3t|}n||dD]}|dt|dd7}|d7}||krQnq9|| |Vq"dS)Nr)listlenrange) r/r0seqlengthvalueitems_per_sliceoffset slice_numbercountstartr$r$r% _slice_indexAs(   r=contextkeycCs>d|vr i|jd<|r||jdvrd|jd|<d|SdS)z+Helper to output each access key only once. _accesskeysr1zaccesskey="%s")vars)r>r?r$r$r% accesskeyVs  rCc@s6eZdZd ddZdefddZdefddZeZdS) idgenrNcCs d|_dSr'idselfr$r$r%__init__as zidgen.__init__cCs|jSNrErGr$r$r%currentdsz idgen.currentcCs|jd7_|jS)Nr1rErGr$r$r%__next__gszidgen.__next__)rN)__name__ __module__ __qualname__rIr(rKrLnextr$r$r$r%rD`s  rDmessageargskwargscOsPd|vr|d|dd}d||f}td}|j|g|Ri|dS)Npagename file_suffixrAzin rendering %s: %sz sphinx.themes)getr getLoggerwarning)r>rQrRrSfilenameloggerr$r$r%rXms   rXc @s0eZdZdZdededeeeeffddZdS)SphinxFileSystemLoaderzd FileSystemLoader subclass that is not so strict about '..' entries in template names. environmenttemplaterc s|jD]@}t||t}|durq|||j}Wdn1s)wYtdtffdd }||fSt |)Nrcs&ztkWStyYdSw)NF)rgetmtimeOSErrorr$rYmtimer$r%uptodates  z3SphinxFileSystemLoader.get_source..uptodate) searchpathrjoinrreaddecodeencodingr^r"r)rHr\r]rcfcontentsrbr$r`r% get_source}s   z!SphinxFileSystemLoader.get_sourceN) rMrNrO__doc__rr r rrjr$r$r$r%r[ws$r[c @seZdZdZddddedeeddfdd Zd ed edefd d Z ded edefddZ de fddZ de d edeeeeffddZdS)BuiltinTemplateLoaderzK Interfaces the rendering environment of jinja2 for use in Sphinx. Nbuilderrthemedirsrc sD|r|}|dd|D}n|rt|}t|}ng}g}tjj|_jjrAfddjjD}||dd<||dd<||_dd|D|_jj du}|rWdgng}t ||d|_ t |j j d<t|j j d <t|j j d <t|j j d <tt|j jd <t|j jd <tt|j jd<t|j jd<|r|j jj dSdS)NcSsg|]}t|dqS)z..)rrd).0pr$r$r% sz.BuiltinTemplateLoader.init..csg|] }tj|qSr$)rrdconfdir)rptprmr$r%rrsrcSsg|]}t|qSr$)r[)rpxr$r$r%rrszjinja2.ext.i18n)loader extensionstobooltointtodim slice_indexdebugrXrCrD)get_theme_dirsr2r3configtemplates_pathtemplatepathlen pathchainloadersapp translatorrr\r&filtersr*r.r=rrglobalsrXrCrDinstall_gettext_translations) rHrmrnror loaderchaincfg_templates_pathuse_i18nrxr$rur%initsB           zBuiltinTemplateLoader.initr]r>cC|j||SrJ)r\ get_templaterender)rHr]r>r$r$r%rzBuiltinTemplateLoader.rendersourcecCrrJ)r\ from_stringr)rHrr>r$r$r% render_stringrz#BuiltinTemplateLoader.render_stringcCstt|jdS)Nz.html)maxrrrGr$r$r%newest_template_mtimesz+BuiltinTemplateLoader.newest_template_mtimer\c Cs`|j}|dr||jd}|dd}|D]}z |||WSty+Yqwt|)N!r1)r startswithrrjr)rHr\r]rrwr$r$r%rjs   z BuiltinTemplateLoader.get_source)NN)rMrNrOrkrr r rrrrfloatrrr rrjr$r$r$r%rls +$rlN)1rkosrpprintrtypingrrrrrr r r jinja2r r rjinja2.environmentrjinja2.sandboxr jinja2.utilsrsphinx.applicationrsphinx.themingr sphinx.utilrsphinx.util.osutilrr ImportErrorrsphinx.buildersrr r"r&r(r*r.r=rCrDrXr[rlr$r$r$r%s: (