​On Wed, May 4, 2016 at 12:34 PM, Kent Tenney <[email protected]> wrote:

> At present, @auto x.json will only restore properly when the @auto tree 
> was
> > first written with Leo.  So it's one-way initially: from Leo to .json.
>
> Ah, didn't know that. I value Leo so much as a tool to aid in making
> sense of complexity via it's capability to parse on import, I was
> hoping the same would be available here.
>

​It won't be available automatically, that is, via static commands or 
(probably) @auto.  However, it would be straightforward to write a script 
that would create an outline based on outline structure, per your desires.

Furthermore, it would be possible to create a customizable class that would 
make writing such scripts a simple matter of filling in some vars/settings.

> json.loads(file.read()) returns a dict consisting of dicts, lists, 
strings, bools.

Correct. Programming is a snap because  all the parsing has already been 
done. It's also easy to create Leo nodes on the fly.  For example, is a 
simplified version (ignoring clones/traces) of JSON_Scanner.create_nodes, 
in leo/importers/json.py:

def create_nodes(self, parent, parent_d):
    '''Create the tree of nodes rooted in parent.'''
    c, d = self.c, self.gnx_dict
    for child_gnx in parent_d.get('children'):
        d2 = d.get(child_gnx)
        child = parent.insertAsLastChild()
        child.h = d2.get('h') or '<**no h**>'
        child.b = d2.get('b') or g.u('')
        if d2.get('gnx'):
            child.v.findIndex = gnx = d2.get('gnx')
        if d2.get('ua'):
            child.u = d2.get('ua')
        self.create_nodes(child, d2)

Parent is the parent position, parent_d is a dict. As you can see, the 
programming is just a matter of handling dict contents.

The more general case would be more tedious because we have to discover 
whether values are dicts, lists or something else. And unless we are 
willing to have all lists and dicts to produce children, we will want to 
specify which dictionary keys or list items are to create descendants.  A 
little messy, but clearly doable.

Here is where the helper class comes in.  It would contain all the general 
code, asking the "user" to tell it what elements are to create outline 
structure, which elements should be ignored, and which elements are to 
create headline text, body text, or even may uA's.

Kent, let's try this.  Take a .json file that interests you, and consider 
how you would like to have it imported into a Leo file. No need to spend 
lots of time on this--just give a shot.  Then send me the file and your 
thoughts about how you would like it imported.  I'll write a JSON_Importer 
class to make writing such a script easier.  It will be kinda like the 
class RecursiveImportController class.

Edward

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/leo-editor.
For more options, visit https://groups.google.com/d/optout.

Reply via email to