Skip to content
Snippets Groups Projects
Commit c6a6adba authored by Robert Strandh's avatar Robert Strandh
Browse files

Made the description of the current buffer protocol implementation more

accurate.
parent c63d7660
No related branches found
No related tags found
No related merge requests found
......@@ -23,8 +23,8 @@
\affaddr{London SE14 6NW, UK}\\
\email{c.rhodes@gold.ac.uk}
\alignauthor Robert Strandh\\
\affaddr{Equipe Image et son, LaBRI}\\
\affaddr{Domaine Universitaire}\\
\affaddr{LaBRI}\\
\affaddr{Universit\'{e} Bordeaux 1}\\
\affaddr{351, cours de la Lib\'{e}ration}\\
\affaddr{33405 Talence Cedex}
\affaddr{FRANCE}\\
......@@ -84,12 +84,16 @@ history and an apparent ability to cause passionate argument. Climacs is philoso
Climacs' syntax analysis is a flexible protocol which can be implemented with a full language lexer and parser. GNU Emacs, the most commonly used Emacs-like editor, uses regular expressions for its syntax analysis. Because these regular expressions are applied lazily and not on the whole buffer, constructs such as Common Lisp's nestable \verb+#| |#+ block comments will often confuse the regular expressions. If the parser starts after the opening \verb+#|+ then the closing \verb+|#+ will be treated as the start of an escaped symbol name. Even if the regular expression parses the whole block comment correctly, other expressions can still match on the contents of the comment, leading to issues when the first character in a column in the block comment is the start of a definition. Emacs users quickly learn to insert a space before the open paren to work around Emacs' font-lock deficiencies.
The Climacs text editor is a combination of frameworks for buffer
representation and parsing parsing, loosely coupled with a CLIM-based
display engine. It includes the Flexichain library \cite{flexichain},
which provides an editable sequence representation and mark (cursor)
management based on a linked lists of lines, some of which are represented as a circular gap buffer; and an implementation of a
representation and parsing, loosely coupled with a CLIM-based display
engine. It includes the Flexichain library \cite{flexichain}, which
provides an editable sequence representation and mark (cursor)
management using a simple linked lists used for implementing the
buffer protocol; and an implementation of a
slight modification of the Earley parsing algorithm \cite{earley}, to
assist in the creation of syntax-aware editing modes. An application can combine a particular implementation of the buffer protocol, the syntax protocol, and its own display methods to produce a sophisticated editor for a particular language.
assist in the creation of syntax-aware editing modes. An application
can combine a particular implementation of the buffer protocol, the
syntax protocol, and its own display methods to produce a
sophisticated editor for a particular language.
The Climacs buffer protocol, which provides a standard interface to
common text editor buffer operations, uses the Flexichain library; we
......@@ -115,13 +119,17 @@ object that the syntax protocol can display in the Climacs window. The
buffer protocol is independent of any implementation of the protocol,
which allows flexible representations of buffers.
Climacs provides an implementation of buffers as a 2-3-tree of lines.
A line can be considered opened or closed. Editing operations are
performed on opened lines, which are represented as a cursorchain. A
fixed number of lines are kept opened according to a LRU scheme. When
a line is closed it is converted to a vector. If the line contains
only base-char objects this vector is a base-string; otherwise, it is
unspecialized.
The aim is for Climacs to provide several implementations of the
buffer protocol, one of which will use a sequence of lines organized
into a tree for quick access. In this implementation, a line can be
considered opened or closed. Editing operations are performed on
opened lines, which are represented as a cursorchain (a Flexichain
with an arbitrary number of cursors). A fixed number of lines are kept
opened according to a LRU scheme. When a line is closed it is
converted to a vector. If the line contains only base-char objects
this vector is a base-string; otherwise, it is unspecialized.
Currently, however, Climacs uses a single cursorchain for the entire
buffer, in effect making it a simple gap-buffer implementation.
``Protocol'' is not just an empty claim, as there are already multiple
buffer implementations: Aleksandr Bakic's persistent buffer
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment