Also look at jinja_test.leo in contrib branch; it renders a template
to variable "mytest" (with @= mytest, and @cl jinja, declared in
"prelude" node), and assigns the value of variable to node @r mytest.

You can "execute" the outline by alt-x vs-update.

It probably helps to read the docstring of valuespace plugin to
understand how the outline behaves.






On Fri, May 25, 2012 at 10:44 PM, Edward K. Ream <[email protected]> wrote:
> On Fri, May 25, 2012 at 1:36 PM, Kent Tenney <[email protected]> wrote:
>
>> I think I suggested just this ... AWKWARD ...
>
> Don't panic.  A templating script (or plugin) can do just about
> anything as long as it doesn't monkey-patch leoFileCommands.py or
> leoAtFile.py.  But that's never going to be necessary.
>
> Indeed, supporting templates is almost too easy, as I have just
> verified.  The problem isn't supporting templates, the problem is
> choosing between all the various ways that could work.
>
> Ville's jinjarender plugin is one way: it writes to files and uses the
> valuespace plugin to get the Python dict that is passed to
> Template.render.
>
> But there are so many other ways.  I just wrote a script that gets
> key/value pairs from the children of an @jinja-data node and writes
> the output to an @jinja-output node.
>
> The way you suggest, namely passing an explicit dict of key/value
> pairs is also perfectly feasible.
>
>> Meaning the @x path machinery is maxed out?
>
> Not at all.  Let the wild rumpus start.
>
> Edward
>
> P.S.  Here is a first draft of @button jinja-render.  Simply
> copy/paste into an outline.  The code is dead easy, so it will be easy
> to change it to make it do exactly what you want.
>
> =====
>
> <?xml version="1.0" encoding="utf-8"?>
> <!-- Created by Leo (http://webpages.charter.net/edreamleo/front.html) -->
> <?xml-stylesheet ekr_test?>
> <leo_file xmlns:leo="http://www.leo-editor.org/2011/leo"; >
> <leo_header file_format="2"/>
> <vnodes>
> <v t="ekr.20120525134212.10696"><vh>@button jinja-render</vh>
> <v t="ekr.20120525134212.10699"><vh>&lt;&lt; imports &gt;&gt;</vh></v>
> <v t="ekr.20120525134212.10709"><vh>ctor</vh></v>
> <v t="ekr.20120525134212.10714"><vh>error</vh></v>
> <v t="ekr.20120525134212.10713"><vh>get_data</vh></v>
> <v t="ekr.20120525134212.10720"><vh>put</vh></v>
> <v t="ekr.20120525134212.10710"><vh>run</vh></v>
> </v>
> </vnodes>
> <tnodes>
> <t tx="ekr.20120525134212.10696">''' Render @jinja nodes.  Requires
> jinja2 module.
>
> - Writes selected tree to the @jinja-output node in the selected tree.
> - Takes arguments from the @jinja-data node.
> '''
>
> &lt;&lt; imports &gt;&gt;
>
> class JinjaController:
>    @others
>
> if Template:
>    JinjaController(c,p).run()
> </t>
> <t tx="ekr.20120525134212.10699">import leo.core.leoGlobals as g
>
> try:
>    from jinja2 import Template
> except ImportError:
>    Template = None
> </t>
> <t tx="ekr.20120525134212.10709">def __init__ (self,c,p):
>
>    self.c = c
>    self.p = p.copy()</t>
> <t tx="ekr.20120525134212.10710">def run(self):
>
>    c,p = self.c,self.p
>    s = g.getScript(c,p,useSelectedText=False,useSentinels=False)
>    tmpl = Template(s)
>    d = self.get_data()
>    s = tmpl.render(d)
>    self.put(s)
> </t>
> <t tx="ekr.20120525134212.10713">def get_data (self):
>
>    c = self.c
>    p = g.findNodeAnywhere(c,'@jinja-data')
>    d = {}
>    if p:
>        for p in p.children():
>            key = p.h.strip()
>            val = p.b.strip() or None
>            d [key] = val
>    else:
>        self.error('no @jinja-data node')
>    return d
>        </t>
> <t tx="ekr.20120525134212.10714">def error (self,s):
>    g.es_print(s,color='red')</t>
> <t tx="ekr.20120525134212.10720">def put (self,s):
>
>    c,p = self.c,self.p
>    p2 = g.findNodeAnywhere(c,'@jinja-out')
>    if not p2:
>        p2 = p.insertAfter()
>        p2.h = '@jinja-out'
>        c.redraw()
>
>    p2.b = '@language rest\n\n' + s
>    c.selectPosition(p2)
> </t>
> </tnodes>
> </leo_file>
>
> ==============
>
> EKR
>
> --
> You received this message because you are subscribed to the Google Groups 
> "leo-editor" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/leo-editor?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/leo-editor?hl=en.

Reply via email to