[relaxng-user] relaxng-driven editing
David Tolpin
dvd at davidashen.net
Sun Nov 2 12:21:15 ICT 2003
> > 1) not just the set of first elements in a pattern, but a set of
> > all elements of particular kind (block-level text markup -- para,
> > title, term, listitem) which do not have the opening tag of a
> > preceding element in this pattern.
>
> I don't understand what you mean by "have the opening tag of a preceding
> element in this pattern".
In the derivative. In other words, any element that is the first block-level
markup element following the current context is allowed. This is how text documents
are normally entered, in my opinion. That is, one types the text, not the markup;
if a new chapter should be started, one types its title. The editor then recognizes
that it can be a title, offers to markup it as such (with other variants being
para or term, for example) and adds structural markup between the previous paragraph
and the current title as </section><section>, for example.
I have a proof-of-concept implementation of this approach
(http://davidashen.net/preti.html), which works for subsets of
docbook, xhtml and DITA; however, the algorithm to determine
structurally allowed elements and derive the group-level markup is
ugly.
Actually, writing a message helps understand the issue
better; I am now feeling I roughly understand the algorithm I need,
and, you are right indeed, it should be based on computing derivatives.
> > <listitem>
> > </itemizedlist>
> > (<para>|<itemizedlist><listitem/>+</itemizedlist>)
> > </section>*
> > <section>
> > <title>
> > ...
>
> Is this a description of a content model or an instance or both?
This is a description of a content model (I forgot asterisk after <listitem> - and sorry
for the syntax, rnc would be more readable but I needed something that shows opening and closing
tags separately); this is a derivative after a listitem is entered.
>
> > should bring '(listitem para title).
>
> Why?
Because the user does not enter markup. It enters text and then confirms, alters or rejects
tags which are offered by the program.
>
> > 2) other contexts where b indirectly follows a, to decide whether it is appropriate to
> > offer to close a group and/or open a new one.
>
> So you are currently in a chapter element, say, and you get a paragraph
> of text indicative of the start of a section and you need to decide
> whether to close the chapter before opening the section? Is that the
> problem? Why can't you do this on the basis of parent/child
> relationships i.e. leave the chapter open iff the chapter can contain a
> section?
You are right; however, if I am inside a listitem and get a title, I need to close the item,
the list, then open a new section (or chapter - the user decides). Whether I should close the
current section is a question the user should answer, because sections can be nested.
I see now that I can compute context based on derivatives. My problem with it is that
it is more convenient for the user to first confirm opening of a new group, then to deal
with closing current groups.
<para/>.<title/>-> <para/>.<section><title/> -> <para/></section>.<section></title> ->
<para/></section></section>.<section><title>
But look like I can simply visit the nodes fro right to left, children first, to get
this sequence for the elements to open.
>
> I don't think I'm going to be able to help without a lot more detail
> about the problem you're trying to solve.
>
You are already helping, thank you.
David Tolpin
http://davidashen.net/
More information about the relaxng-user
mailing list