<<-- NodeProps.Mesa>> <<-- written by Paxton. January 1981>> <<-- last written by Paxton. December 28, 1982 11:11 am>> DIRECTORY TextNode, PGSupport, NameSymbolTable, Rope; NodeProps: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; true, false: REF BOOLEAN; PutProp: PROCEDURE [n: TextNode.Ref, name: ATOM, value: REF]; <> GetProp: PROCEDURE [n: TextNode.Ref, name: ATOM] RETURNS [REF]; RemProp: PROCEDURE [n: TextNode.Ref, name: ATOM]; MapProps: PROC [n: TextNode.Ref, action: MapPropsAction, typeFlag, commentFlag: BOOLEAN _ TRUE] RETURNS [BOOLEAN]; <<-- apply the action to each name & value pair for the node>> <<-- returns true if&when an action returns true>> <<-- if commentFlag is false, skips Comment property; ditto for typeFlag>> <<-- hack to accelerate Inherit and PutFile operations>> MapPropsAction: TYPE = PROC [name: ATOM, value: REF] RETURNS [BOOLEAN]; <<-- ***** read, write, copy props>> Register: PROC [name: ATOM, reader: ReadSpecsProc, writer: WriteSpecsProc, copier: CopyInfoProc]; <<-- registers these procs for this property name>> <<-- they will be called by DoSpecs, GetSpecs, and CopyInfo >> ReadSpecsProc: TYPE = PROC [name: ATOM, specs: ROPE] RETURNS [value: REF]; WriteSpecsProc: TYPE = PROC [name: ATOM, value: REF] RETURNS [specs: ROPE]; CopyInfoProc: TYPE = PROC [name: ATOM, value: REF] RETURNS [new: REF]; NullRead: ReadSpecsProc; -- returns NIL always NullWrite: WriteSpecsProc; -- returns NIL always NullCopy: CopyInfoProc; -- returns NIL always DoSpecs: ReadSpecsProc; <<-- used when reading files>> <<-- calls the registered reader for this property name>> <<-- returns specs if no reader is registered>> GetSpecs: WriteSpecsProc; <<-- used when writing files>> <<-- calls the registered writer for this property name>> <<-- if no writer is registered, returns value if it is a rope, NIL otherwise>> CopyInfo: CopyInfoProc; <<-- used when copying nodes>> <<-- calls the registered copier for this property name>> <<-- if no copier is registered, returns old value>> <<-- ***** special procs for internal use by Tioga>> Object: TYPE = NameSymbolTable.Object; GetPrefixObject: PROC [n: TextNode.Ref] RETURNS [ob: Object]; PrefixName: PROC RETURNS [ROPE]; <<-- the name of the prefix property>> PrefixAtom: PROC RETURNS [ATOM]; <<-- the atom used as name for prefix property>> GetPostfixObject: PROCEDURE [n: TextNode.Ref] RETURNS [ob: Object]; PostfixName: PROC RETURNS [ROPE]; <<-- the name of the postfix property>> PostfixAtom: PROC RETURNS [ATOM]; <<-- the atom used as name for postfix prop >> <<-- ***** Initialization>> StartNodeProps: PROC; -- for initialization only END.