[Python-Dev] The impact of '@' on Leo (original) (raw)

Edward K. Ream edreamleo at charter.net
Fri Aug 6 00:09:32 CEST 2004


> The major concern I have with '@' syntax as it relates to Leo is the > potential for ongoing and never-ending conflicts between Leo's directives > and @x constructs in Python.

Can you give an example of a file that would be difficult to understand under that change? If you allow @foo inside a Python file, it is not Python anymore, is it?

There are two files involved. The .leo file (an xml file) contains the "marked up" code. Leo turns this file into a visual outline containing zero or more "derived files" that could be written in any language.

Here is the entire top-level node in the outline that represents the derived file leoApp.py:

[Node starts]

@first # -- coding: utf-8 --

@language python @tabwidth -4

import leoGlobals as g import os import sys

class LeoApp:

"""A class representing the Leo application itself.

Ivars of this class are Leo's global variables."""

@others

[Node ends]

Everything else is plain Python. When saving the .leo file, Leo produces leoApp.py following the rules of the markup. In particular, Leo writes all descendent nodes in place of the @others directive, indented the same as the @others directive. Most of these descendent nodes will contain few or no Leo directives: descendent nodes inherit most directives from their ancestors.

The problem is that Leo doesn't really understand any language, except to colorize it. Most Leo directives must start with @ in the leftmost column, but the @others and @all directives may contain leading whitespace. If @foo is both a valid Python construct and a valid Leo directive Leo will treat @foo as a Leo directive even if it is "supposed" to be Python.

If @foo is not a valid Leo directive, Leo creates a "verbatim" sentinel line in the derived file to indicate that the next line isn't a directive, even though it sorta looks like one. Like this:

#@verbatim @foo

This is basically how Leo handle's languages with @ signs. There is no problem until @x in the language conflicts with a Leo directive, in which case Leo doesn't have any way of distinguishing which usage was intended.

As I said in another post, Leo doesn't have escape conventions involving @ signs, and that has turned out well. There have been requests to allow strings other than "@" to delimit Leo directives, and that will probably happen, but in general Leo really would rather stick to "@"

Edward

Edward K. Ream email: edreamleo at charter.net Leo: Literate Editor with Outlines Leo: http://webpages.charter.net/edreamleo/front.html



More information about the Python-Dev mailing list