From 9d472dfefac5306f6901057f5ab174ee21563689 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Sun, 4 May 2008 19:56:34 +0200 Subject: [PATCH] added style for html documentation --HG-- branch : trunk --- .hgignore | 2 +- CHANGES | 221 +--------------------------- docs/_static/headerbg.png | Bin 0 -> 281 bytes docs/_static/jinjabanner.png | Bin 0 -> 10539 bytes docs/_static/style.css | 256 +++++++++++++++++++++++++++++++++ docs/_static/watermark.png | Bin 0 -> 9521 bytes docs/_templates/genindex.html | 44 ++++++ docs/_templates/layout.html | 72 ++++++++++ docs/_templates/opensearch.xml | 9 ++ docs/_templates/page.html | 4 + docs/_templates/search.html | 35 +++++ docs/changelog.rst | 4 + docs/conf.py | 14 +- docs/index.rst | 10 +- docs/jinjaext.py | 41 +++++- 15 files changed, 480 insertions(+), 232 deletions(-) create mode 100644 docs/_static/headerbg.png create mode 100644 docs/_static/jinjabanner.png create mode 100644 docs/_static/style.css create mode 100644 docs/_static/watermark.png create mode 100644 docs/_templates/genindex.html create mode 100644 docs/_templates/layout.html create mode 100644 docs/_templates/opensearch.xml create mode 100644 docs/_templates/page.html create mode 100644 docs/_templates/search.html create mode 100644 docs/changelog.rst diff --git a/.hgignore b/.hgignore index 55d124f..0aa46ee 100644 --- a/.hgignore +++ b/.hgignore @@ -1,7 +1,7 @@ ^instance$ ^instance/ ^jinja2/.*\.so$ -^docs/_.* +^docs/_build ^(build|dist|Jinja2\.egg-info)/ \.py[co]$ \.DS_Store$ diff --git a/CHANGES b/CHANGES index 85ba238..0c8e30e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,221 +1,8 @@ -Jinja Changelog +Jinja2 Changelog =============== -Version 1.3 +Version 2.0 ----------- -(codename to be selected, release around February 2007) +(codename to be selected, release around July 2008) -Version 1.2 ------------ -(codename to be hatsuyuki, released Nov 17th 2007) - -.. admonition:: Backwards Incompatible Changes - - - `call` is a keyword now - - the internal parser AST changed - - `extends` must be the first tag in a template - - the tuple literal yields tuples now, instead of lists. - -- environments now have a `translator_factory` parameter that allows - to change the translator without subclassing the environment. - -- fixed bug in buffet plugin regarding the package loader - -- once again improved debugger. - -- added `groupby` filter. - -- added `sameas` test function. - -- standalone parser. Jinja does not use the python parser any more and will - continue having the same semantics in any future python versions. This - was done in order to simplify updating Jinja to 2.6 and 3.0 and to support - non python syntax. - -- added support for ``expr1 if test else expr2`` (conditional expressions) - -- ``foo.0`` as alias for ``foo[0]`` is possible now. This is mainly for - django compatibility. - -- the filter operators has a much higher priority now which makes it - possible to do ``foo|filter + bar|filter``. - -- new AST. the return value of `Environment.parse` is now a Jinja AST and not - a Jinja-Python AST. This is also the only backwards incompatible change but - should not affect many users because this feature is more or less - undocumented and has few use cases. - -- tuple syntax returns tuples now and not lists any more. - -- the print directive and ``{{ variable }}`` syntax now accepts and implicit - tuple like the `for` and `cycle` tags. (``{{ 1, 2 }}`` is an implicit alias - for ``{{ (1, 2) }}` like ``{% for a, b in seq %}`` is for - ``{% for (a, b) in seq %}``. - -- tests called with *one* parameter don't need parentheses. This gives a more - natural syntax for the `sameas` test and some others: - ``{{ foo is sameas bar }}`` instead of ``{{ foo is sameas(bar) }}``. If you - however want to pass more than one argument you have to use parentheses - because ``{{ foo is sometest bar, baz }}`` is handled as - ``{{ (foo is sometest(bar), baz) }}``, so as tuple expression. - -- removed support for octal character definitions in strings such as - ``'\14'``, use ``'\x0c'`` now. - -- added regular expression literal. ``@/expr/flags`` equals - ``re.compile(r'(?flags)expr')``. This is useful for the `matching` test and - probably some others. - -- added set literal. We do not use python3's {1, 2} syntax because - this conflicts with the dict literal. To be compatible with the regex - literal we use ``@(1, 2)`` instead. - -- fixed bug in `get_attribute` that disallowed retreiving attributes of objects - without a `__class__` such as `_sre.SRE_Pattern`. - -- addded `django.contrib.jinja` which provides advanced support for django. - (thanks Bryan McLemore) - -- debugger is now able to rewrite the whole traceback, not only the first - frame. (requires the optional debugger c module which is compiled - automatically on installation if possible) - -- if the set that is postfixed with a bang (!) it acts like the python 3 - "nonlocal" keyword. This means that you can now override variables - defined in the outer scope from within a loop. - -- ``foo ~ bar`` is now a simpler alternative to ``foo|string + bar|string`` - -- `PackageLoader` can now work without pkg_resources too - -- added `getattribute` and `getitem` filter. - -- added support for the `pretty` library. - -- changed the way the `MemcachedLoaderMixin` creates the class so that it's - possible to hook your own client in. - - -Version 1.1 ------------ -(codename: sinka, released Jun 1, 2007) - -- blocks now support ``{{ super() }}`` to render the parent output. - -- debugging system improved, smaller filesize for the cached files. - Debugging works now well for any module using linecache. - -- ``{{ debug() }}`` can now be used to get a list of filters and - tags. - -- the template lexer keeps not track of brace, parenthesis and - bracket balance in order to not break variable tags apart if they - are configured to look like this: ``${expr}``. This also fixes - the problem with nested dicts in variable expressions. - -- it's now possible to configure the variable blocks to look the - same as the block delimiters. Thus you can set the syntax to something - like ``{ / }`` for both blocks and variables. - -- added whitespace management system for the template designer. - -- some small bugfixes. - -- improved security system regarding function calls and variable - assignment in for loops. - -- added `lipsum` function to generate random text. - -- strings without unicode characters are processed as binary strings now - to workaround problems with `datetime.strftime` which only accepts - binary strings. - -- it's now possible to use newlines in string literals - -- developer friendly traceback is now toggleable - -- the variable failure is now pluggable by replacing the undefined - singleton for an environment instance - -- fixed issue with old-style classes not implementing `__getitem__` - (thanks to Axel Böhm for discovering that bug) - -- added a bunch of new docstrings to the Jinja classes. Makes fun now to - use pydoc :-) - -- fixed severe memcaching bug. Formerly it wasn't possible to use memcaching - without enabling disk cache. - -- fixed a bug that allowed users to override the special names `_`, `true` etc. - -- added `batch` and `slice` filters for batching or slicing sequences - -- added `sum`, `abs`, `round` and `sort` filters. This fixes #238 - -- added `striptags` and `xmlattr` filters for easier SGML/XML processing - -- the trans tag does not need explicit naming for variables with the same - name any more. You can now use ``{% trans foo %}`` instead of the verbose - version ``{% trans foo=foo %}``. - -- reimplemented Buffet plugin so that it works at least for pylons - -- added `Environment.get_translations_for_string` - -- fixed a bug in the parser that didn't unescape keyword arguments. (thanks - to Alexey Melchakov for reporting) - -- You can now use the environment to just tokenize a template. This can - be useful for syntax highlighting or other purposes. - -- added optional C-implementation of the context baseclass. - -- you can now use optional parentheses around macro defintions. Thus it's - possible to write ``{% macro foo(a, b, c) %}`` instead of ``{% macro - foo a, b, c %}``. - -- additional macro arguments now end up in `varargs`. - -- implemented the `{% call %}` block. `call` and `endcall` can still be used - as identifiers until Jinja 1.3 - -- it's now possible to stream templates. - -- fixed a corner case when defining a block inside of a condition - -- the cached loader mixin is now able to cache multiple templates from - different loaders in the same cache folder. - -- Translatable strings returned by ``_()`` will leave their string formatting - signs untouched. Thanks to Stefan Ebner for reporting. - -- ``{% block name "data" %}`` is now an alias for - ``{% block name %}data{% endblock %}``. Note that the second argument can - be an expression. As soon as you specify an expression as second argument - the closing tag has to be omitted. - -- It's now possible to iterate over iterators additionally to sequences. - If the iterator is inifite it will crash however, so makes sure you don't - pass something like that to a template! - -- added `rendetemplate` to render included templates in an isolated - environment and get the outout back. - -- added `simplefilter` decorator. - -- improved ChoiceLoader error reporting (thanks to Bryan McLemore) - -- fixed extended slicing - -- reworked loader layer. All the cached loaders now have "private" non cached - baseclasses so that you can easily mix your own caching layers in. - -- added `MemcachedLoaderMixin` and `MemcachedFileSystemLoader` contributed - by Bryan McLemore. - - -Version 1.0 ------------ -(codename: siyutusan, released Mar 23, 2007) - -- Initial release +- initial release of Jinja2 diff --git a/docs/_static/headerbg.png b/docs/_static/headerbg.png new file mode 100644 index 0000000000000000000000000000000000000000..035f9d4947b0ee8ed87c993222d5bf7eb39f9d7f GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^j6i&Xg9%73n;^3YNO2Z;L>4nJa0`PlBg3pY5H=O_Up`I0-{=sq7`C5A=whwh!W@g+}zZ>5(ej@)Wnk16ovB4k_?5Aj8p}8Pv3y| zDXMuuh5eo`jv*T7dnY*xF)MPg?5u%QWo_8E1MVme`@Brw{Ps_M=)P^&_V1Y| zcb1v_4CeAy-BENu=l@rw$(DELNbh}m??dcAt7&V$|Gg&r{q1q?^{4$5KYf#5duz{r ZhI?ib>J@q!=YdXR@O1TaS?83{1OWExXD9#w literal 0 HcmV?d00001 diff --git a/docs/_static/jinjabanner.png b/docs/_static/jinjabanner.png new file mode 100644 index 0000000000000000000000000000000000000000..c672118065d1caa3bc52d440aecc99441a252fa8 GIT binary patch literal 10539 zcma)ihc{f``}HNn5R!?Al4zsF=tL5|Ow>UzAqavPMDM+ZLG(6=E*NE!=pjV!C5#e= zh?0=ZM{m)h{qFYou=gBJ=tAz}MGT#NNfx)7r|-M#R;_ zE@w;b4ghchnkvc$ez}{$fqrJa{ztC1qu#E~#;G=U#Ts^13v5h|HEKI?)WXS_)CQ== z0q$tS}d&J}z6roD~nuo3_S?e)1tVCxhGYX(imV9mYnPN^xtrlJ7)F0OA<1}2$ z`?3BDN#gz@N8s-4l!LH|;N8@7d4j@(w4IBcZ^-^=%eL$`6wZq;FN&QgEc-%cXt3*` zmd6dfP^iSL3!JR{8&{gCBfM)kEWqPr2egaafPt3}MrU`CEqu z?g9F|5Ma2L8MZ=$Tvf~|ZIWW3d5{nvFZXEDyv7z6FGGOteA0Q)e6u%qx=5&{<&py&S0H@ph8q@*R&)qA z&Y0?9KDATT7kQ*pH!C?J2BU~kd8rNA-Av>6XtHAVU2DERda~drchN%fFK~8r%n_e` zLZPZ(`HZ1gg4P=C=H`~OeVSA@xk?z}g%8*N7S1j;?~&%w z$ygx$SB1gaXnubF7u|;I2nd6!39Y4gm{^#Wz}Vl^1F=2_7VFR<=D7jsOW`mJf~xr> znYBEZD zn-IOzp%QRm>v$-F(V*zX;*oE2WuQ6lkN_2&m$m=o+xJh7x_70+HOeLnOuzUzs}A18 ztT!J?CGO8R2`Ii%)Bxx4_Lb^<@k1tHlqmVJi4`6`CYd17w_s`Vtfygfceeg9@?-*h ziZ7uwezoi9-0q30{N!tBk)6meDfhCdxOf@6@i#|YS!g&wH0;G(L*uA&pzU|Y+e){> zY>}&!nB+${5u+2{@}=tmd3bzj5x>+;cu|BY3p2wh z(MpT<5DnxkLAw2J$E^nEFX^w6ZA|#WPG)s)!B&Kjt0=&Z+*k<`LpDYY%PzGS815L8 z{P<*2QV*%$lHgZ57wc_qMAky6{b1@mSGlEm!QB^6-6ehbjGv+TLqmfP3n|D%Ca;Yr z?+M51+FAf*hXT+IBx=B;G0>xC8xBpq)I(m|q7u)8>$^vb@~LjUNan%qowOy5kB>(n z-q=Zzj<~t$?hQ?~I?sU-G*J8N6q7uq+UW4_^z^b+WiE2PSy7HnU^c6$v9U2j{4mPH zoyRF;vIb)E7)|Ncr+rs~+_*>7Vv^R>%WGhM1q zxqGSXy+rA~>o;y}r=b)&r7yFc=S)jY8}WGJt8AZ5$q8pY!-Mv?Z7sMmyp^RY;X&eU znn=FZ$I_VYpP}%hT+g=}Pl2zCJoRf!aBo88)B5ePhngfTu%7q29)_PV)9? z^J>6ru{pLk5y?m#>*$HFyuAETZgnk91eDyIcv;cjei`$?aa!&g0Cw;J=PLe-tkevV>H!0yJNEWHZ346G{j;r0w1mF~ z@}!l;@VWBm7?qL#+JYOs+Ydg5-T*=mvj{=3?=ybxpDQZRWo(LGZ=9MpA4byNNc&T) zzWa?z@lBmbD}%6W;9Up|65W02%6D)tZ7>0_{g{}bxC0zs{4Im9Nt3_BYdm`RE8Nso z^>a;)lL81rYnz*`b*-(zPYk>2dgDutO&gp}p6xWhfA6?|d@S|U@RJ(R`!{;Py%wFd zRUhkl9Yztfm|3~b?r#1Fj?vJ7hoa{WHBZE-Vb=rlk2bXT#rvK;MLLFQ_sbj)aIfb~ ztXf=AI!h~vkEt6)i8ifQruzH-@a4#EaE^dU3}-~i2kuNPCt3I2HVU)9!)*O@^dv6j zJikeirioF9MIQg~ejC9zXWcA9td6c34H_Jx!OJy+gZ8Rgh^eF=ib|` zCvv8ZE(wv{KXsZM;k~{C zXLx64CwaYD9f!Sz8sY|gJVwDpa^XHH$@IH~io}{vnqQcl+~=tCZ$v&eoH}}nO!)EX z{=>r}vJV0p40;~NZHhv;zk5ktKmEz|JfB$8hb@kU{ljU&aG34WXfo}J+t%?@PmyK9 zHlrK92O;6bSbV&=4sw+mCWowGkL!J@6vY~&!X>Vta3KLhn<29(#Ds9#tIZcteSLkU zzxHrg5dH%nI)C?ivD0Q_QcChSqNAhB0s;8IWaQghtVbdJwjuoQ;h_jkBqEbkiNi8q zo^Mkf0LnZ7J?9&eKZm`u^T_Gl^PS(Bq6Kf%ww>H^)sj#|>1EowgH2b$Es?w@?X6%m zBQMMHWPM$Vv6U4of!_Vgb1oJ&T?>!xO+T)WD&ph)a@5;HG_!3Iw`rB8A^!% zdu+=)C!SdjQFfZUsIf5_Y1<|O<%AFipoA>`eqWm%vziLgdq`ScCht$%wuRN)VWk;M zhE1e7am06{kip%Y3E-=+a-MtQ?dA1D8Gim`iyh|`@42Nr^=!Bn5*7)dOsJ(uAckFu zuZjBcY5SCrv@u(Ezg&{-vvJ;&U}RwU=}-0SWLLlM zX24UhFN+%=@Q!n3cgrt`|JZD@K8M-bpL+T9!ZUICj8x&eI{5D8Xl#S?HK4z?Ae=JW z#w0T-F;QXs+qe1wZ*wr$a-%7Qn%zbknM3Ytb zqY4kn4-`*g9*J6SJnt6kQnF1@hRY{;wp~?HE;|aoTpvW&3ev|^7gA{QrA6bg2Oy3T zZz0yGVczjIyt(_2)VOY@avO{qOS>+#L|OMInpf}-EegaI3C5;2&S=3?kT|!$|BcJ) z_I_D!z5vl~Ph}-H$uHkm6w>r?MvDTbr@e0=Spm!o3p22^H@*XB6*(9v0WJ|A(mwy7 zZQIp{mDEP>tmppY;J;VCav{%sHLmL43`ds<=K(Ls#8QPH9W}|*$C$Ci^*TUcdWN?@ zeflIA9UWa@+8%Q5OAUje+un*-k%8luk{Zxr_GHYvV zTpjLHt~E5w9j}osfzp5f{vFfcL0Qr+=PFJwEVOOwhjG6eChMRr{tN+>e6_Ub!szf& z$G6z`WJ33|bBtWiR_@)iuWmMd{tS;WQ^Pr3sm21{xyh$hK`SZR=lRi#^8fgMEuJng zg+6@97=tt^zV_}5c8?%xkx#FLgzkOlo*C(##A$9m|FlM~Go%PZRgzb~MY8O|*)DrV z^Qt(QnLmFQi;vsezK4rfJlhd%SPa}g(8aIustnb=fm(6lP~5yW2q+)#0sOax@u#6Q ztW0Xn_)e|OQR_v+oEO6#)tvm$i<9)p6S@-Ys`vVIUVU#HiXP2|`Fn!wk)=_)yQeLmnYOMYn8?XH4vjZn z0yFLY_Zx!ubIOBHY;x0(&IYA!OSzU#BMOs2` z=|G^sl^SCUSJ&;JNl918MgDSk_l@mlQhvK>Hu6D~RJ07;4M(!2^7YEo-`>QZxx=FU z(wXL00WqC@!FykGBezc@faj$-ZOrLh10sDh7tPJhzdK?!*)Y&o*%_feT!Mk_7lmYc z5VAhwg~>-L8lQ9bsYjc-rH`aZ2;{0JeE!4tZ|SH+^0$+kL9VW@5%$>ykhUa}{}C8( z2R5SD3~D8oI!wq#1yG4o$01U_kD=tHI@8}hkd5Tb;+S&Eun+tS`$in+|FLY~GOPVw z{fDW^@5)U}UtW$&#IOB6)!ttRO7~<>^F(^o+7HL zkDBj<{#&M}921j?jT+bAI3M-3l$2bGr@K28ted6;fopE97NMSh==pcBevf4ld6V;f z9YL1XRzB1mhT+DzMMBw0xp6|kanp77<3(j#fk#4^H`7y7=8OqybTA4vHMOf!BqD6t zN0HW&=e?2?ZcK9XJ~)OlvfO6q*AL8+@P2RtU zqFui??brN@m4aOn!9nPIoE)B);~fIq@=*UO*BAWC%gTHdU=OyI1|8j| zn(bN_4yz!M*TIDN`u_cU*?X+lyS>d>WxQU=!dArLzi+~NZlWbEtO5Gj_9jA4%pux1 z!#f}Piwp6lQ<@5f&T*bAn@Vp6iK!@E_h%VD!hXw_?{jneo&o;h@C+!|_sPjgS|Bs{ z=*#hM*~L|g;WTVGC4?9EVS9DezHQ^nVsF*LZX&tFh^P7eLFPjd^Vmoxi}-0R(a5m_ z!T&u7zrU5iczR z^QNb#sn{tVvOk^D<(N2lz3=k*r|TV~55{(*Ii$>Nalb*H`O|d^^~0dcQ#!lt`S)Vz z63xkB(dEc~_U^U!RSVZTvamH2QY7`#G#3GbcutUYuD)F}F)||dgW8&GuW}*D>3jWZ zAC2KiN?s+J$XNGXUBMJRFW^G={A2LqVm1=jW{mZkFyns3FR8QdSZW_4?8_!gVlBM4 z)Lg>vkf?`&s&J*W)V)Lx(ib*9D)9Q;!06F^wPouuN4WmeG;xDOrVyR^T|b(RdoHF; z9*Z#Z_TpLhmrAA9D0tZ(eF%JHhPjqv5ZM`&bQB!g;XR*3-Z2spK>!AtzMl~oe*Yd1 z*lIfd)_!>!mD%-^LpbN{tE&<&Leak4QR~f*KA6<~d3`HgpE@^ntQeE*-{f!Y>utWIes2HA;CDeBBZ$ z?*S#B+0qNh>Z%LCeEsjC=J+^~*r;7q<%-}+360LB7?<1>_1T!&{fL%0xkyaBUM1x! zji!sH1MV0ixF~Pf6?Wn&o@9eM5)O!1#6w!5kQrTLXrO1I0x z?Q30leD8NdQXg*XszG4QmF*y%D{pK(T01;EeB68B)mX2R1r2?#aq>jK21_nO_V+C| zn~&mY0mPLf?TbFz_hx5iV?ko^YQptl7E+b?oTfn9nhEa(S%pkIiH@S zov;Ii;8Mm|G2fs#xaj4?K)b~hWW>ahot&Lpd5_svIH}>rB}|XWW5QuA+UhA7R_e86 zY9(8V-XbO8Yb7L%2H+1D6BFBUF(+=L<43q(`(XF3f@y~iJ5k^=*RUz??Ccy2l0%yG zJyAoL0`u*c_QmTDiOrP?2RTgPEsPK@TuTJBHWBJUoy@{(Xc$?<|DeJ^fO=^i*uy_V zXtc49Hi_a`8-&))G0A~kDR18NzKklhhax!Bk>=8pl03i}3gW)`-+%vwYHMrfw!RuK z;sg0f=%p25{{;i$%u!dDKzQghvvX01*CQVIW0DU+8_yXGxJ4{#fj+KxbUEp9$dsr9Ugk4leW;u z=H~NfUNQ+ODJf)#fo>4$;XV{!FZU2{B*TgU_Dqxr10skuETt}4Hu1hPr{mBj08 zs&V3wG?Th9^lZ5ru+mnWG~j{cXB>-?wP{WhC@Mrj?NCWRr<%+O7<5BHFSV)!yErYm zS+snkm&Mej{k*exkmvnwFy#Q$y4{L43BTr|Jg}?)6V*Um2c#&LIKzr%NV+sj2lXn! zW#so-uhuvRf@ZrS`HncJtMKLYpOKt)gWLv<@Xvsn^W34(@W1C0S(0Qet`}z~*UX5$ zGcz-fO0Wf=oO4VwY=BqO-g%UzkY2@l#*usn7ARdX=H9KEqhbGGlFG_g%%apZC1YMctrS)W5Bs9{w^Pz<7EJZESe&Fy~JkJMPkNe`zW0>4TNS+k!vBJC{Bo z{s$#Q@je%HJmtN-(D~Wf3Jv%TEqD@_<4t0HyaV_9Uk9~EpuYZWV`7nldXW~)SAuPQ zouGXej!RN49zQ$FgwoGfTXjD}t67TR%rXS;4!jQ_Y;0@8zy{rK_Y4LVxdA1|5v*m#D~hK8aF zq}t&ZH*c^udTSymtZW!zO67%)43vKa5wI*kL!8?+M?pIR#p#cxBv8S%uyw$6CKa$VtvN!Y_*dqL>P1N^g*Hdx)m(tWjTd$T|D|2L z_?59ve;<#>KOcWp&j?8Bbhr5Lzqp6-V*?q-pmM!= z%v(Npgqt7NXqqwQI(GRx##*y^da-FOnm?TuZd08=fkx3 z`MlB}br<7?4bkg%BOE~3hmKiU+)v>YGXJ>&)NFj+r-7i-StgPO+yde z+r|x$kp3){9-V^ojr)I6mPPbK_%Xetf>3YJTEzdV=hah!N*~A)sBLZd{{~yIad2?N zsTGS8y?c9lddQF!2)H2}CxiP|h!w~#h56FHUX}t29zWc8>h6eT%vI$hZ;u8@k>-xJ z7ZNWFaDD<=th1_fF&ZWs$>9$)#!PMk z<@o8V>h}eBKQ99*8kGqLO@CDk9ccpKFfW-nui@I%xkgvrn=l%xC!p=ZlOJv$g8%q& zlZjH5>Z%EOSZ1}CZhYclV0_a+08LJR;?MNOGd1&8FZ)?xESO+7?^xcJ{IS1OHaR&( zL%37N^#<#KTW=05!HO>)sS2bw-^_BZZ`w?|31ohonrc;~k6}h3!S}f`h~85}%lVRV zGSEbBy>f7nnLG;i%Rk}_b8eD(=(-RzbwVoOpc;b!ZQHt1iIcW-J`=S<>7H$$z^Dr2 ztXzK*pO7$5v1E^?HM7^5%#TyyvLbqerH4K3g*s4L4_~=*C0bJFRKVIPpX4uJxgJsi zzSL?KcDZ?L6Qnn)kP6urPf`SG=!o<5E~HPzO}E)T+d_htdwa>aF{lX{weO-?h$)wo zogYwp_LT}zZrWVW`SE48_>>q8xwdYkfxrQo9eM?cE~^2SbhYEcrXh(4g?T4|!New@(31(fdww}7tt@nBNuSynXlNrmoe8t`l2l|ZIG+^7O!Hvix0 zFcS`?(>Y=oyS+SfO;lxkR=O!)S_x;a6BUty1Pbfw>a_H+X9$Had51(W1=0c;HmW$R z@4#~0=sYhM`vjLT;}u}8p>=;$mYteEGfJG1GP&AW_7RPxx_^YBy1mszteWJQ|FY zDYxSoS18^dPBau3KUVPHSyG^Ya80f<)OMc4>LbFn@pxHwj^^Or*m+GP6Q*{;UXx3I z`_^8cd*4E`-c+$>-$XX_>yn%kT{_x6(oOe33yD0M*=k9bFL;aUV$NYul`cD=#^>3E|F7ml zZHY`@@k;jOIH`e#e!R-m7R&Yc;NYp9(AM8Ji)v1hOvblabzJc5CtPCu=}Mh zfE)Aad-;@sQkz@1-XlynL{*XB{wY)(oNJa*#tXzY5+p4&?>DRpEw&Faa~J_iS#Op0 zc777sm23G`lWqHqt36Q^L2sa(8a^;7d&Ow1#I`_+VfxiMoj9hA+0Dk^h=1C{_O2qz zVRaEtsVey8{`)W>%|Rz4D3ka!u)0Zl@uZLXU5HZnaa$~^h`Gg!|{xGnZ^aSkW> zuh#xga2Y)^gn+6zl2Yg;rzv?3-T6kR3;>Xt|D6Sx-#s=4UFFF3Yth>h(u!4s?u;z6 ztsA+}5_sg}ih`F;UfPDY*l~((@Xf1Za`ZHA!%9|Lrjh=gp#Q;OFzLBT*KKUUgL_{^C#Q|Nf8yf8=`mW;TmB14oNcBscA-ju9tC4ikukZEG>)c z?6^$UA(`l_J1^avLC=CdUEUB&G`hvq=FdQapihGf7N`0hQb+Na)S}n$G_efr**>?(Wxcyc@x1SL5th(VY zE339(WSgmry1M!uKqlm3Uy}^p;4=R&3Y0i!zF_5d9=jRWU-q8dqL4bJfDS!BuPc=~ zd^KBe!Ajcjxww>+AHN?XQX)$zkldJ8fA9fBFPoERht*^_(0s{1pR^ULj&|LW;gZvHaYNlY{P$;T2=-eJP_TP$Zr&!+n8ik$1R2fwP{ z&n~0$8jt(RylkdOBozKT?5?pk3fT>07-u|Kto=|22nl-JvL9Ly<(IW&70TdL_psw) zv;sv63_Ve_WAN?^PSvoa<=wdZUZnsP-E!gZ3_Rwqv8Eo}C>ybIwA+m33OJk%)uYHt z5S><>Tq%#?l&B)6GJ6r0|YTpRegpBgdYCqdQP^ezSL=ayjQ@qNCY=c+^d4w#wG=$9|8LX0@Wn7V!%vG%<jAz3i=+p1Am$-yl87(k^{k@l6@MY@i9JlsLBx*>bzf$t|47E+3!- zac_kF@&yjzv3nn1NjB30;E@u_4%e{wx?fRrcRxe9bgNlw!mr21*O0?uxE@gIh{IF_ zNJ%!?wsls_+1sb!{$x-5(rj?Otx6EZ_2={r9Ua;0Fo%-{GO1Gh>Xp)_#dm-69^JU! z#y5J6@V^m%le(OmK!Y{^^+oTJhG%b?UT82`xRFU+Mr2!!ICOurw6i0Da;mA9_dsqt zqQP15j&@_n`Ml#+Lk~%;IOR1vw|RWkjj{4cM2aSg^9moUks*^O zZvAROu3Cls4oR;B^B6u6&zl;bfP;HW;iwCeFaPqlzL#Y$c;?k%beA7`U)m@&{%4pK ztJCM5E;r%gJ|7cyh%Zow+)tZvT3%K-|Yrj$JXd^tapS5y)mnHCQABz3;(# zz9wwM7QMnwcmsPBHA2H!lNSRL7r*UbBdzpt0 z53YEcABh8HiJTDDpaSo0W7EGunr?Llg;z+IH9~O?*?qBQ`r+ktGFvuG^CvqGFv;Ih zab6TZOdzoFA1-Yh1|NPoENuCi(Sj|fG^TXwJsGHq6y_!-_OhQY=0h%Jz_S=28kEbj zGXd3}q|wRw66tOy>eNh5Tzn8Fndq23t(U9Gc=(4O=Y^yWr&X@!dX#EehzT#G1B>D~ z8S~EH7s<)o{Twp3!ph<5tjR_Eewbt}wtkjfIbER8WL2pIt4yzAPP9=^WSzYNi`G@O4iJ0;(g5FSQ3&E@Yu_QDTXCoM}A$hy}yT_Lq> zR1#2cH>2REGd0!(E^Fm`sG)Fqdc>P`RD}TrOGUEhO{)Q+TrzY~G4OV;g9^Dii=Ft@ zVb|#+*tSi&@n}=s94qqGH#W9YEJfYI z1%9%6MloA!GknhP-fVxpNk_jN_xg=MOJW6{P(5*e+bn?hOL&J&7QpjI2q=Rm s0cr6R6-BWU<@DekLxumZj-|^hWaicm2Jn11c-j%rRDGgSiLea+KRL)tCjbBd literal 0 HcmV?d00001 diff --git a/docs/_static/style.css b/docs/_static/style.css new file mode 100644 index 0000000..7675bc2 --- /dev/null +++ b/docs/_static/style.css @@ -0,0 +1,256 @@ +body { + background-color: #333; + margin: 0; + padding: 0; + font-family: 'Georgia', serif; + font-size: 15px; + color: #eee; +} + +div.footer { + padding: 5px; + text-align: center; +} + +div.footer a { + color: #eee; +} + +div.header { + background: url(headerbg.png) repeat-x; + border-top: 6px solid #D20000; + border-bottom: 1px solid #ACACAC; + margin: -10px -10px 0 -10px; +} + +div.relnav { + border-top: 1px solid #F1F1F1; + border-bottom: 1px solid #ACACAC; + background-color: #ECECEC; + padding: 4px 20px 4px 28px; + margin: 0 -10px 10px -10px; + font-size: 13px; +} + +#content { + background-color: white; + color: #111; + background-image: url(watermark.png); + padding: 10px; + margin: 0; +} + +h1.heading { + margin: 0; + padding: 0; + height: 80px; + background-image: url(jinjabanner.png); + background-repeat: no-repeat; +} + +h1.heading a { + display: block; + width: 200px; + height: 80px; +} + +h1.heading span { + display: none; +} + +h2.subheading { + margin: -55px 0 35px 200px; + font-weight: normal; + font-size: 30px; + color: #444; +} + +h2.plain { + margin: 0; +} + +#jinjalogo { + background-image: url(jinjalogo.png); + background-repeat: no-repeat; + width: 400px; + height: 160px; +} + +#contentwrapper { + max-width: 700px; + padding: 0 0 20px 18px; +} + +#contentwrapper h3, +#contentwrapper h3 a { + color: #b41717; + font-size: 26px; + margin: 20px 0 0 -5px; +} + +#contentwrapper h4, +#contentwrapper h4 a { + color: #b41717; + font-size: 20px; + margin: 20px 0 0 0; +} + +table.docutils { + border-collapse: collapse; + border: 2px solid #aaa; + margin: 0.5em 1.5em 0.5em 1.5em; +} + +table.docutils td { + padding: 2px; + border: 1px solid #ddd; +} + +p, li, dd, dt, blockquote { + color: #333; +} + +p { + line-height: 150%; + margin-bottom: 0; + margin-top: 10px; + text-align: justify; +} + +hr { + border-top: 1px solid #ccc; + border-bottom: 0; + border-right: 0; + border-left: 0; + margin-bottom: 10px; + margin-top: 20px; +} + +dl { + margin-left: 10px; +} + +li, dt { + margin-top: 5px; +} + +dt { + font-weight: bold; +} + +th { + text-align: left; + padding: 3px; + background-color: #f2f2f2; +} + +a { + color: #b41717; +} + +a:hover { + color: #444; +} + +pre { + background-color: #f9f9f9; + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; + padding: 5px; + font-size: 13px; + font-family: 'Bitstream Vera Sans Mono', 'Monaco', monospace; +} + +tt { + font-size: 13px; + font-family: 'Bitstream Vera Sans Mono', 'Monaco', monospace; + color: black; + padding: 1px 2px 1px 2px; + background-color: #f0f0f0; +} + +cite { + /* abusing , it's generated by ReST for `x` */ + font-size: 13px; + font-family: 'Bitstream Vera Sans Mono', 'Monaco', monospace; + font-weight: bold; + font-style: normal; +} + +div.admonition { + margin: 10px 0 10px 0; + padding: 10px; + border: 1px solid #ccc; + background-color: #f8f8f8; +} + +div.admonition p.admonition-title { + margin: -3px 0 5px 0; + font-weight: bold; + color: #b41717; + font-size: 16px; +} + +div.admonition p { + margin: 0 0 0 40px; +} + +#toc { + margin: 20px -10px 10px 15px; + padding: 10px; + width: 200px; + float: right; + background-color: #f8f8f8; + border: 1px solid #ccc; + border-right: none; +} + +#toc h3 { + font-size: 20px; + margin: 0 0 10px 0; + padding: 0; + color: #444; +} + +#toc ul { + margin: 0 0 0 30px; + padding: 0; +} + +#toc ul li { + padding: 0; + margin: 2px 0 2px 0; +} + +a.headerlink { + color: #A70000; + font-size: 0.8em; + margin-left: 8px; + padding: 0 4px 0 4px; + text-decoration: none!important; + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: visible; +} + +a.headerlink:hover { + background-color: #A70000; + color: white!important; +} + +table.indextable { + width: 100%; +} + +table.indextable td { + vertical-align: top; + width: 50%; +} diff --git a/docs/_static/watermark.png b/docs/_static/watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..297d8990c5a23df6f98f811e183171399904aec2 GIT binary patch literal 9521 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 BPksOZ literal 0 HcmV?d00001 diff --git a/docs/_templates/genindex.html b/docs/_templates/genindex.html new file mode 100644 index 0000000..2df98b6 --- /dev/null +++ b/docs/_templates/genindex.html @@ -0,0 +1,44 @@ +{% extends "layout.html" %} +{% title = 'Index' %} +{% block body %} + +

Index

+ + {% for key, dummy in genindexentries -%} + {{ key }} {% if not loop.last %}| {% endif %} + {%- endfor %} + +
+ + {% for key, entries in genindexentries %} +

{{ key }}

+
+
+{%- breakat = genindexcounts[loop.index0] // 2 %} +{%- numcols = 1 %} +{%- numitems = 0 %} +{% for entryname, (links, subitems) in entries %} +
{%- if links -%}{{ entryname|e }} + {%- for link in links[1:] %}, [Link]{% endfor -%} + {%- else -%} +{{ entryname|e }} + {%- endif -%}
+ {%- if subitems %} +
+ {%- for subentryname, subentrylinks in subitems %} +
{{ subentryname|e }} + {%- for link in subentrylinks[1:] %}, [Link]{% endfor -%} +
+ {%- endfor %} +
+ {%- endif -%} +{%- numitems = numitems + 1 + len(subitems) -%} +{%- if numcols < 2 and numitems > breakat -%} +{%- numcols = numcols+1 -%} +
+{%- endif -%} +{%- endfor %} +
+{% endfor %} + +{% endblock %} diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html new file mode 100644 index 0000000..83e48ae --- /dev/null +++ b/docs/_templates/layout.html @@ -0,0 +1,72 @@ + + + + Jinja2 Documentation + + + + {%- if builder != 'htmlhelp' %} + + + + + {%- endif %} + {%- if use_opensearch and builder != 'htmlhelp' %} + + {%- endif %} + {%- if hasdoc('about') %} + + {%- endif %} + + + + {%- if hasdoc('copyright') %} + + {%- endif %} + + {%- if parents %} + + {%- endif %} + {%- if next %} + + {%- endif %} + {%- if prev %} + + {%- endif %} + + +
+
+

Jinja

+
+
+ {%- if prev %} + « {{ prev.title }} | + {%- endif %} + {{ title }} + {%- if next %} + | {{ next.title }} » + {%- endif %} +
+ {%- if display_toc %} +
+

Table Of Contents

+ {{ toc }} +
+ {%- endif %} +
+ {% block body %}{% endblock %} +
+
+ + + diff --git a/docs/_templates/opensearch.xml b/docs/_templates/opensearch.xml new file mode 100644 index 0000000..9f2fa42 --- /dev/null +++ b/docs/_templates/opensearch.xml @@ -0,0 +1,9 @@ + + + {{ project }} + Search {{ docstitle }} + utf-8 + + {{ docstitle }} + diff --git a/docs/_templates/page.html b/docs/_templates/page.html new file mode 100644 index 0000000..ee6cad3 --- /dev/null +++ b/docs/_templates/page.html @@ -0,0 +1,4 @@ +{% extends 'layout.html' %} +{% block body %} + {{ body }} +{% endblock %} diff --git a/docs/_templates/search.html b/docs/_templates/search.html new file mode 100644 index 0000000..82a78d0 --- /dev/null +++ b/docs/_templates/search.html @@ -0,0 +1,35 @@ +{% extends "layout.html" %} +{% title = 'Search' %} +{% block extrahead %} + +{% endblock %} +{% block body %} +

Search

+

+ From here you can search these documents. Enter your search + words into the box below and click "search". Note that the search + function will automatically search for all of the words. Pages + containing less words won't appear in the result list. +

+
+ + +
+ {% if search_performed %} +

Search Results

+ {% if not search_results %} +

Your search did not match any results.

+ {% endif %} + {% endif %} +
+ {% if search_results %} +
    + {% for href, caption, context in search_results %} +
  • {{ caption }} +
    {{ context|e }}
    +
  • + {% endfor %} +
+ {% endif %} +
+{% endblock %} diff --git a/docs/changelog.rst b/docs/changelog.rst new file mode 100644 index 0000000..6e514be --- /dev/null +++ b/docs/changelog.rst @@ -0,0 +1,4 @@ +Changelog +========= + +.. jinjachangelog:: diff --git a/docs/conf.py b/docs/conf.py index 8a41874..91e1ca4 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -76,7 +76,7 @@ pygments_style = 'jinjaext.JinjaStyle' # The style sheet to use for HTML and HTML Help pages. A file of that name # must exist either in Sphinx' static/ path, or in one of the custom paths # given in html_static_path. -html_style = 'default.css' +html_style = 'style.css' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". @@ -95,15 +95,11 @@ html_last_updated_fmt = '%b %d, %Y' # typographically correct entities. #html_use_smartypants = True -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} +# use jinja2 for templates +template_bridge = 'jinjaext.Jinja2Bridge' -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_use_modindex = True +# no modindex +html_use_modindex = False # If true, the reST sources are included in the HTML build as _sources/. #html_copy_source = True diff --git a/docs/index.rst b/docs/index.rst index d7b4d89..db5c1b5 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,7 +1,7 @@ -Welcome to Jinja2's documentation! -================================== +Jinja2 Documentation +==================== -Contents: +Welcome in the Jinja2 documentation. .. toctree:: :maxdepth: 2 @@ -9,3 +9,7 @@ Contents: intro api templates + + changelog + +* :ref:`genindex` diff --git a/docs/jinjaext.py b/docs/jinjaext.py index 57c7097..78aacf8 100644 --- a/docs/jinjaext.py +++ b/docs/jinjaext.py @@ -8,17 +8,20 @@ :copyright: Copyright 2008 by Armin Ronacher. :license: BSD. """ +import os import re import inspect +import jinja2 +from itertools import islice from types import BuiltinFunctionType from docutils import nodes from docutils.statemachine import ViewList from sphinx.ext.autodoc import prepare_docstring - - +from sphinx.application import TemplateBridge from pygments.style import Style from pygments.token import Keyword, Name, Comment, String, Error, \ Number, Operator, Generic +from jinja2 import Environment, FileSystemLoader class JinjaStyle(Style): @@ -60,6 +63,17 @@ class JinjaStyle(Style): Error: '#F00 bg:#FAA' } + +class Jinja2Bridge(TemplateBridge): + + def init(self, builder): + path = builder.config.templates_path + self.env = Environment(loader=FileSystemLoader(path)) + + def render(self, template, context): + return self.env.get_template(template).render(context) + + _sig_re = re.compile(r'^[a-zA-Z_][a-zA-Z0-9_]*(\(.*?\))') @@ -112,6 +126,28 @@ def dump_functions(mapping): return directive +def jinja_changelog(dirname, arguments, options, content, lineno, + content_offset, block_text, state, state_machine): + doc = ViewList() + changelog = file(os.path.join(os.path.dirname(jinja2.__file__), '..', + 'CHANGES')) + try: + for line in islice(changelog, 3, None): + doc.append(line.rstrip(), '') + finally: + changelog.close() + node = nodes.section() + # hack around title style bookkeeping + surrounding_title_styles = state.memo.title_styles + surrounding_section_level = state.memo.section_level + state.memo.title_styles = [] + state.memo.section_level = 0 + state.nested_parse(doc, content_offset, node, match_titles=1) + state.memo.title_styles = surrounding_title_styles + state.memo.section_level = surrounding_section_level + return node.children + + from jinja2.defaults import DEFAULT_FILTERS, DEFAULT_TESTS jinja_filters = dump_functions(DEFAULT_FILTERS) jinja_tests = dump_functions(DEFAULT_TESTS) @@ -120,3 +156,4 @@ jinja_tests = dump_functions(DEFAULT_TESTS) def setup(app): app.add_directive('jinjafilters', jinja_filters, 0, (0, 0, 0)) app.add_directive('jinjatests', jinja_tests, 0, (0, 0, 0)) + app.add_directive('jinjachangelog', jinja_changelog, 0, (0, 0, 0)) -- 2.26.2