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.