Proxima Documentation

Proxima
Editing

  1. initialization

bla bla

  1. structural navigation
  2. structural edit
  3. 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.