This class provides a text editor specialized for editing Esterel files. The editor is invoked automatically when opening any file with the ".strl" extension appended to its name. The EditEsterel class, which implements the editor, is derived from the EditProgram class, and therefore inherits all of its features. Its facility for tagging comments, strings, and keywords is inherited from this base class.
A somewhat complicated feature of the editor is its management of indenting. A line is automatically indented in response to a Tab character, and a selected region can be indented with the "Indent Region" command in the "Format" menu. Previous lines are used as a reference to determine how much indenting to do. There is no assurance that all correct Esterel code will be given reasonable indenting, but a reasonable coding style should result in good indenting. The indenting policy is illustrated below schematically for each Esterel construct by example, where "..." is an arbitrary section of code.
There is no indenting for module bodies:
module
...;
...
end
Various simple constructs have indented bodies:
abort
...
when ...
await ... do
...
end
do
...
upto ...
do
...
watching ...
every ... do
...
end
if ... then
...
end
loop
...
end
loop
...
each ...
present ... then
...
end
repeat ... times
...
end
signal ... in
...
end
suspend
...
when ...
trap ... in
...
end
var ... in
...
end
weak abort
...
when...
Slightly more complicated constructs are handled similarly:
abort
...
when ... do
...
end
do
...
watching ... timeout
...
end
if ... then
...
else
...
end
if ... then
...
elsif ... then
...
else
...
end
present ... then
...
else
...
end
weak abort
...
when ... do
...
end
Case and handle statements are treated specially.
They are aligned with the preceding control statement.
abort
...
when
case ... do
...
case
case ... do
...
end
present
case ... do
...
case
case ... do
...
end
trap ... in
...
handle ... do
...
handle ...
handle ... do
...
end trap
Also, parallel operators alone on a line are shifted to the left:
await ... do
...
||
...
end
Incomplete statements have extra indenting on the subsequent
lines, as in:
input A,
B,
C;