[Doc-SIG] Alternative inline markup

Alan Jaffray jaffray@pobox.com
Tue, 6 Nov 2001 01:56:30 -0500 (EST)


Here are my suggested changes to the current inline markup system.

1) Inline markup can be nested:
   ::

      `*US vs. Miller* (1939)`_

   does what you expect.  Ambiguity is resolved with close tags first,
   then maximal munch.  Simple.  If you are sick enough to try::

      ***Strong enclosing emphasis***
      **Strong enclosing *emphasis***
      *Emphasis enclosing **strong***

   then the first two will work and the third won't.  If the user expects
   any of them to work without consulting documentation, they're foolish.
   Besides, if you want the third, you can do::

      `Emphasis enclosing **strong**`__

       __ emphasis

   See below.

2) An underscore suffix currently modifies the preceding text by 
   making it a link.  This notion is extended - the suffix indicates
   that the text is to be tagged in some way, indicated by a directive
   or destination URL in the target::

      I had lunch with Jonathan_ today.  We talked about Zope_.

      .. _Jonathan: lj [user=jhl]
      .. _Zope: http://www.zope.org/

   becomes the equivalent of::

      I had lunch with
      .. lj:: [user=jhl]
         Jonathan
      today.  We talked about
      .. link:: [refuri=`http://www.zope.org/`]
         Zope
      .

   in the current syntax (if directives inlined, which they don't).
   Link targets which are also legal directive names must be enclosed
   in backquotes.

3) Substitution becomes a directive:
   ::

      +----------------+
      |      TOP_      |
      +-------+--------+
      | LEFT_ | RIGHT_ |
      +-------+--------+

      .. _top: sub
         My First Playbook

      .. _left: sub
         Hail Mary

      .. _right: sub
         - 16!
         - 4!
         - 23!
         - hut!

   is equivalent to::

      +--------------------+
      | My First Playbook  |
      +-----------+--------+
      | Hail Mary | - 16!  |
      |           | - 4!   |
      |           | - 23!  |
      |           | - hut! |
      +-----------+--------+

4) Inside markup delimited by backquotes or curly braces, curly braces
   may be used as delimiters equivalent to backquotes::

      `Photos of {Bob Johnson}_ and {Sue Fernandez}_ dancing`__

      .. _Bob Johnson: grad 1989
      .. _Sue Fernandez: grad 1991
      __ images/dscn0018.jpg

   This is because backquotes don't nest.  Open-curly-brace must be
   escaped to be literal in single-backquoted text.

5) Roles can go away.  We don't need them.  Optionally if we want
   the ability to put short directive names inline, we could declare ::

      `foo:: bar bar bar`

   to be the equivalent of ::

      `bar bar bar`__

      __ foo

   Compared to the current options ::

      `bar bar bar`:foo:
      :foo:`bar bar bar`

   we're way ahead on both readability and lack of ambiguity either way.

Summary:

- We gain nesting.
- We gain arbitrary extensibility of inline markup.
- We gain substitutions.
- We retain unobtrusive markup.
- We lose by occasionally having to escape a curly brace inside
  backquotes, or quote a hyperlink target with no ``/`` or ``#``
  characters to distinguish it from a directive name.

Alan