This Engineering Notebook post discusses how I created *@jupytext* and its 
companion, *@language jupytext*. As always, please feel free to ignore this 
post.


*@jupytext*


I created @jupytext to solve a specific problem: synchronizing .ipynb files 
with their corresponding .py pseudo files. Long experience has taught me 
that synchronizing files is difficult or impossible.


@jupytext was no stroke of genius. It is a natural extension of @clean. The 
new code practically wrote itself. I added only the following:


- A wrapper class for the jupytext api.

- Two new methods: at.read/writeOneAtJupytextNode.

  These methods merely extend Leo's existing @<file> machinery.

- A one-line hook in the code that detects changes to external files.


No wonder the entire project went smoothly.


*@language jupytext*


In contrast, @language jupytext required arduous work. The inspiration came 
late and required a complete re-imaging of:


- the colorizer's api.

- how the colorizer delegates work.


I set myself an absolute requirement. The work could only *add* methods to 
the JEditColorizer class. *No *substantial changes to *existing *methods 
were permissible.


Two Ahas appeared only after many doomed attempts:


*Aha*: The new pattern matcher should use a predicate instead of a long 
list of kwargs. Doh!


*Aha*: The new pattern pattern matcher *must* use a *secondary colorizer 
main loop* instead of delegation. The colorizer's delegation machinery *can 
not possibly work in a line-oriented context.*


This second Aha immediately lead me to this code in *j*
*edit.restart_match_span_delegated_line*:

n = self.currentState()

self.init()

self.language = self.delegated_lines_language

self.mainLoop(n, s)


The final code looks so simple. You cannot imagine how complex my early 
attempts were.


*Summary*


@jupytext is a straightforward extension of Leo's @<file> machinery. The 
inspiration came first. I needed no other invention. The code practically 
wrote itself.


In contrast, @language jupytext required arduous work. The inspiration came 
late. Significant invention was required. Perhaps nobody else could have 
done what I did. I'm proud of this work.


Edward


P.S. Another ENB, coming soon, will discuss the implications of @language 
jupytext. It's possible to re-imagine Leo's syntax coloring *safely*. There 
will be minimal changes to Leo's colorizer and no changes to any file in 
the leo/modes directory.


EKR

-- 
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 view this discussion visit 
https://groups.google.com/d/msgid/leo-editor/501aa1eb-3ac4-40d2-9e79-accf4d3609afn%40googlegroups.com.

Reply via email to