Hi all,
what do you see looking at format string syntax
https://docs.python.org/3/library/string.html#formatstrings ?
In particular, at something like this:
{h[1].red.jumbo-header:Hello, World!}
Yes, this is syntactically correct statement and if we tweak Formatter
methods, we can generate such an output:
<h1 class="red jumbo-header">Hello, World!</h1>
Someone might need a booze to catch sight of arguments and css classes
in the source statement, okay: let it be Aligote markup.
Although I haven't implemented HTML rendering yet (my actual needs were
reST and Markdown), this does generate plain text and Markdown now.
However, I'm discouraged at the moment. Without nested markup the
implementation is very small and nice. With more or less complex
formatting, such as nested lists, there's a need to analyse upper level
statements and to enforce some rules. Also, there's a pain with
indentation, but that's mainly because I was too lazy and based my
implementation on previous work instead of writing a better one from
scratch.
There are some undefined points such as how to render paragraphs. Use
strict {p:text} directive or just split literal text by doubly newlines.
Can't decide whether to cut down all the complexity and revert recursion
level to 2 or proceed with rich markup.
Anyway, below is the rendered specification in plain text. Here's the
source code
https://github.com/declassed-art/clabate/blob/main/clabate/extras/aligote.py
and the specification
https://github.com/declassed-art/clabate/blob/main/clabate/examples/aligote_spec.py
If this looks funny and you have any crazy ideas what can be added to or
changed in the specification, let me know.
Axy.
Aligote markup specification
============================
Headings
--------
{h1:heading}
============
{h2:heading}
------------
{h3:heading}
------------
{h4:heading}
------------
{h5:heading}
------------
{h6:heading}
------------
Styles
------
{b:bold text}
{i:italic text}
{b:bold and {i:italic} text}
{i:italic and {b:bold} text}
{u:underline text}
{s:strike-through text}
{sub:subscript text}
{sup:superscript text}
Links
-----
{link[optional text]:URL}
Examples:
{link:http://declassed.art}
{link[Declassed Art]:http://declassed.art}
Rendered as:
http://declassed.art
Declassed Art (http://declassed.art)
Lists
-----
Unordered lists
---------------
{ul:
{li:item one, can be markup}
{li:item two
can be multi-line}
{li:etc}
}
Rendered as:
* item one, can be {b:markup}
* item two
can be multi-line
* etc
Ordered lists
-------------
{ol:
{li:item one}
{li:item two}
{li:etc}
}
Rendered as:
1. item one
2. item two
3. etc
Nested lists
------------
{ul:
{li:item one}
{li:item two}
{ol:
{li:item one,
multi-line}
{li:item two}
}
{li:etc}
}
Rendered as:
* item one
* item two
1. item one,
multi-line
2. item two
* etc
Optional arguments
------------------
XXX Markdown does not support arbitrary numbering, does it?
{ol:
{li[3]:item 3}
{li[5]:item 5
{ol:
{li:ordinal is rendered as 5.1}
{li[3]:ordinal is rendered as 5.3}
{li[5][5]:ordinal is rendered as 5.5}
{li: ordinal is rendered as 5.6}
}
}
}
Rendered as:
3. item 3
5. item 5
5.1. ordinal is rendered as 5.1
5.3. ordinal is rendered as 5.3
5.5. ordinal is rendered as 5.5
5.6. ordinal is rendered as 5.6
Optional argument for unordered list is the bullet character.
Default is `*`:
{ul:
{li:item 1}
{li[+]:item 2}
{li[-]:item 3}
}
Rendered as:
* item 1
+ item 2
- item 3
Quirks
------
{ol:
{li:item one}
Basically, lists may contain any literal text.
In terms of python formatting this is not an error,
but that's not good for rendering.
{li:item two}
}
Rendered as:
1. item one
Basically, lists may contain any literal text.
In terms of python formatting this is not an error,
but that's not good for rendering.
2. item two
Syntax highlighting
-------------------
{python:
print('Hello, world!')
}
Rendered as:
print('Hello, world!')
--
https://mail.python.org/mailman/listinfo/python-list