- structural navigation
- structural edit
- presentation edit
Handling of edit events:
Describe which edit events are handled where
All textual editing is performed on the layout level.
up and down key. Why here?
In ArrTranslate, extract the mouseDown attribute that was added by the presentation sheet.
Evaluation and Reduction
Scanning and Parsing
The root type of the document level needs to be named
When a document contains parse errors, it is not entirely clear how to save it, since the parseErr node contains the presentation that failed to parse. Perhaps the XML format needs to support a representation for (parseable) presentations as well.
Currently, extra state is not stored in the XML representation. For the Helium editor, this means that whitespace is not saved. A solution would be to include presentation id's in the XML, and store the whitespace list as some kind of meta data. Perhaps something similar needs to be done for extra state in the enriched document.
HACK: The enriched document has an extra Document parameter, which is required for the generated popup menus for structure editing.
Vertices have an id, which is used to specify edges. Should this id be unique?
If so, we cannot use id's to model equal vertices in different graphs, so document vertices must contain an extra id for each vertex.
Creation of a new vertex on document level must create an id for the vertex. We could rely on the parser to do this, but then after each document edit, a parse present cycle must be performed.
, the attribute grammar
is called. The attribute grammar computes the arrangement in one pass. A previous version took several passes because:
- Fonts have to be collected, and converted to metrics by using an IO-monadic function.
- Formatters in the presentation tree have to be converted to columns of rows before the final arrangement can be computed.
and higher-order attributes, multiple passes are no longer necessary:
- The synthesized
allFonts attribute is used to create
updatedMetrics. By using fixIO, the
updatedMetrics is fed into the AG as an inherited attribute.
- For a
FormatterP node, the available width is used to distribute the children over a column of rows. This column is put in the higher-order attribute
inst.unfoldedFormatter, which is then attributed to yield its arrangement.