Update of /project/climacs/cvsroot/papers/ilc2005/syntax In directory common-lisp.net:/tmp/cvs-serv15544
Modified Files: climacssyntax.tex Log Message: Made the description of the current buffer protocol implementation more accurate.
Date: Sun May 22 12:53:59 2005 Author: rstrandh
Index: papers/ilc2005/syntax/climacssyntax.tex diff -u papers/ilc2005/syntax/climacssyntax.tex:1.11 papers/ilc2005/syntax/climacssyntax.tex:1.12 --- papers/ilc2005/syntax/climacssyntax.tex:1.11 Sat May 21 22:14:00 2005 +++ papers/ilc2005/syntax/climacssyntax.tex Sun May 22 12:53:59 2005 @@ -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 @@ 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 @@ 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