DIRECTORY Rope USING [ROPE, Text]; Atom: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; Text: TYPE = Rope.Text; PropList: TYPE = LIST OF DottedPair; DottedPair: TYPE = REF DottedPairNode; DottedPairNode: TYPE = RECORD [key, val: REF ANY]; EmptyAtom: PROC RETURNS [ATOM]; MakeAtom: PROC [pName: ROPE, start: INT ¬ 0, len: INT ¬ INT.LAST] RETURNS [ATOM]; MakeAtomFromChar: PROC [char: CHAR] RETURNS [ATOM]; MakeAtomFromChars: PROC [PROC [PROC [CHAR]]] RETURNS [ATOM]; MakeAtomFromRefText: PROC [rt: REF READONLY TEXT] RETURNS [ATOM]; GetPName: PROC [atom: ATOM] RETURNS [pName: Text]; GetPropertyList: PROC [atom: ATOM] RETURNS [PropList]; -- gets entire property list GetProp: PROC [atom: ATOM, prop: REF ANY] RETURNS [REF ANY]; GetPropFromList: PROC [propList: PropList, prop: REF ANY] RETURNS [REF ANY]; PutProp: PROC [atom: ATOM, prop: REF ANY, val: REF ANY]; PutPropOnList: PROC [propList: PropList, prop: REF ANY, val: REF ANY] RETURNS [PropList]; RemProp: PROC [atom: ATOM, prop: REF ANY]; RemPropFromList: PROC [propList: PropList, prop: REF ANY] RETURNS [PropList]; MapAtoms: PROC [proc: PROC [atom: ATOM]]; FindAction: TYPE ~ PROC [atom: ATOM] RETURNS [stop: BOOL ¬ FALSE]; FindAtom: PROC [proc: FindAction] RETURNS [ATOM]; NILNotAnAtom: ERROR; END. $ Atom.mesa Copyright Σ 1985, 1986, 1991 by Xerox Corporation. All rights reserved. Warren Teitelman, October 26, 1982 4:15 pm Paul Rovner September 19, 1983 8:43 pm Russ Atkinson (RRA) January 31, 1985 2:30:17 pm PST Beach, February 23, 1985 9:33:07 am PST Doug Wyatt, November 14, 1986 4:19:01 pm PST Michael Plass, February 21, 1992 5:09 pm PST Atoms provide a means for canonicalizing ropes. Because of the support for ATOM literals, atoms provide a fast and easy means for testing against a small set of keywords. As in Lisp, atoms can also have property lists, although this usage is discouraged, since multiple applications can have their property lists collide to mutual discomfort. An alternative (and usually preferable) way of associating information with unique keys that can be arbitrary REFS, in a non-global fashion using specific structures (hash tables) is provided by RefTab. Types Creating Atoms ... returns the atom with pname = "" The following identity holds: Rope.Equal[r1,r2] <=> MakeAtom[r1] = MakeAtom[r2]. In particular, MakeAtom[""] = MakeAtom[NIL] = emptyAtom. Note that NIL # MakeAtom[NIL]. start and len parameters are like Rope.Substr ... calls a generating proc which calls its argument proc once for each CHAR PNames Property list operations Enumeration of atoms Errors Κ}–(cedarcode) style•NewlineDelimiter ™codešœ ™ Kšœ Οeœ=™HKšœ*™*Kšœ&™&K™3J™'K™,K™,—K˜šΟk ˜ Kšœžœžœ˜—K˜KšΠblœžœž ˜Kšœž˜K˜KšœLžœ[™«K™Kšœ›žœX™χheadšΟn™Kšžœžœžœ˜Kšœžœ ˜K˜Kšœ žœžœžœ ˜$Kšœ žœžœ˜&Kš œžœžœ žœžœ˜2—š ™š  œžœžœžœ˜Kšœ$™$K™—š œžœ žœ žœ žœžœžœžœžœ˜QKšœxžœ™‰Kšœ žœ žœ™K™-K™—š  œžœžœžœžœ˜3K˜—š œžœžœžœžœžœžœ˜