No real surprises working through Ink Py. I still don't have the test passing, but it's progressing further. I think it might actually almost pass if I can get through this command implementation, but maybe not.
Answer from the future: Nope! The next step is to actually format the output for display, which is something that I tried to factor out of the traversal logic, and into a separate presentation step (good, I think), which I haven't yet tried to implement (less good).
I know every entry on this has been like, here's a new thing that doesn't work, but formerly, absolutely none of this worked, and after each entry I got a bit more working.
Anyway, once I have a test passing, I'm going to look into refactoring stuff because my __init__.py is a giant horrifying grab-bag. Then, I might consider putting the still highly-incomplete code up online to show off. In spite of my insistence on making the immutability enforced at runtime, and some overly-clever concepts, there are some things I'm noticing that I think could make the C# Ink leaner and better-organized. (For one, some of my Path implementation corresponds to parts of the InkObject implementation, because the function in question basically just manipulates Paths. For another, I don't currently see how the _startOfRoot Pointer ever wouldn't have a null container. And also there's some internal functions that never get called.)
In any case, now I know what to try to implement tomorrow: coercing internally generated text to nicely rendering text. Hmm. Oh dear. My push_to_output_stream() function isn't nearly gnarly enough. I guess that's the first thing to address.