SourceFileOps.mesa
Copyright Ó 1989 by Xerox Corporation. All rights reserved.
Linda Howe October 13, 1989 5:03:21 pm PDT
Coolidge, July 17, 1990 5:17 pm PDT
Christian Jacobi, August 24, 1990 12:35 pm PDT
Last tweaked by Mike Spreitzer on October 3, 1990 8:54 am PDT
Some basic feedback operations on source files. Implemented in the most reasonable way for each world.
DIRECTORY
IO USING [STREAM],
PFSNames USING [PATH],
Rope USING [ROPE];
SourceFileOps: CEDAR DEFINITIONS ~ BEGIN
ROPE: TYPE ~ Rope.ROPE;
Position: TYPE ~ RECORD [
fileName: FileName,
index: ARRAY PosKind OF Range];
A position in a file may be identified by either or both of a line number range and a character index range.
FileName: TYPE ~ PFSNames.PATH;
PosKind: TYPE ~ {char, line};
Index: TYPE ~ INT;
Range: TYPE ~ RECORD [first, last: Index ← noIndex] ← noRange;
noRange: Range ~ [];
[n] is how to talk about a position, rather than a range.
[] is the unspecified range/position.
noPosition: Position ~ [noName, ALL[noRange]];
noName: PFSNames.PATH ~ NIL;
noIndex: Index ~ INT.FIRST;
WhichSelection: TYPE ~ { primary, secondary, feedback };
Denotes choice of what selection to use.
GetSelection: PROC [selection: WhichSelection ← primary] RETURNS [Position];
Returns the file name and position within the file for the selected text viewer.
Returns noPosition if no valid editor viewer is selected.
FormatPosition: PROC [Position] RETURNS [ROPE];
FmtIdxs: PROC [pos: Position] RETURNS [ROPE];
FmtRange: PROC [r: Range, introSingular, introPlural: ROPENIL] RETURNS [ROPE];
Gives answers like introSingular.Cat["5"] and introPlural.Cat["5..6"].
OpenSource: ShowProc;
ShowProc: TYPE ~ PROC [desc: ROPE, pos: Position, feedBack: IO.STREAM, selection: WhichSelection ← feedback];
Directs the user's attention to the given position, describing it as desc when text is used.
END.