<<-- AbbrevExpand.mesa>> <<-- written by Bill Paxton, August 1981>> <<-- last edit by Bill Paxton, April 5, 1982 1:35 pm>> <<-- This is the interface for abbreviation expansion in Tioga>> DIRECTORY Rope, TextNode, RopeReader, UndoEvent; AbbrevExpand: CEDAR DEFINITIONS = BEGIN RefTextNode: TYPE = TextNode.RefTextNode; Ref: TYPE = TextNode.Ref; Offset: TYPE = TextNode.Offset; MaxLen: Offset = TextNode.MaxLen; ROPE: TYPE = Rope.ROPE; Event: TYPE = UndoEvent.Ref; <<-- the following take an atom as the name of the dictionary to operate on>> <<-- will automatically try to load file with extension "Abbreviations">> <<-- only tries this once per session>> <<-- must explicitly load it>> Load: PROC [fileName, dictName: ROPE, start: Offset _ 0, len: Offset _ MaxLen] RETURNS [count: NAT]; <<-- reads the file and adds the abbreviations to the specified dictionary>> <<-- returns number of abbreviations>> Clear: PROC [dictName: ROPE]; <<-- removes all entries from the dictionary>> IllFormedDef: ERROR; <<-- if when try to Expand, definition not of form =, then get error>> <<-- key must be 1 or more alphadigits>> <<-- optionally can have blanks (spaces/tabs/cr's) between key and "=">> Expand: PROC [keyNode: RefTextNode, keyEnd: Offset, dict: ROPE, event: Event _ NIL] RETURNS [foundIt: BOOLEAN, keyDeterminesDict: BOOLEAN, keyStart, keyLen, resultLen: Offset, commands: LIST OF REF ANY]; <<-- looks in dictionary for entry with matching key>> <<-- match ignores capitalization of keys>> <<-- unless key is of form .>> <<-- in which case it only looks in the specified dictionary>> <<-- and returns with keyDeterminesDict=TRUE>> <<-- if finds a matching entry, then>> <<-- replace key text by text from entry>> <<-- if key in entry is followed by blanks before "=",>> <<-- then skip one blank in text after the "=">> <<-- if key text was all upper case, force new text uppercase also>> <<-- if key text not all upper but had initial cap, >> <<-- make new text have an initial cap>> <<-- otherwise, don't change capitalization of new text>> <<-- if first character of key had looks, add those looks to new text>> <<-- if entry node has a nonnull type name, set key node type name>> <<-- if entry node has children, insert copies of them as children of key node>> <<-- return start and len of new text>> <<-- can optionally have command list enclosed in ( )'s between key name and '=>> <<-- ***** Initialization>> Start: PROC; -- for initialization only END.