Proxima Documentation
Proxima
Editing
- initialization
bla bla
- 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.
RenTranslate
up and down key. Why here?
LayTranslate
del:
backspace:
Alt-MouseDown
In ArrTranslate, extract the mouseDown attribute that was added by the presentation sheet.
Formatters
Single layer
Evaluation and Reduction?
Scanning and Parsing?
Document
The root type of the document level needs to be named
Root.
Enriched Document
Incrementality
Open/Save document
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.
Graphs
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.
Presentation process
Arranger
In
Arranger.hs, the attribute grammar
ArrangerAG.ag 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.
Using
fixIO 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.