-- TAPropertiesImpl.mesa -- written by Beach, June 22, 1982 8:57 pm -- last edited by Stone, November 19, 1982 5:09 pm DIRECTORY IO, NodeProps USING [PutProp, GetSpecs, GetProp], Rope, TAProperties, TextNode USING [Ref]; TAPropertiesImpl: PROGRAM IMPORTS IO, NodeProps, Rope EXPORTS TAProperties = { OPEN TAProperties; ROPE: TYPE = Rope.ROPE; artworkAtom: ATOM = $ArtworkClass; artworkFileNameAtom: ATOM = $ArtworkFileName; artworkPathAtom: ATOM = $ArtworkPath; artworkImageAtom: ATOM = $ArtworkImage; boundingBoxAtom: ATOM = $BoundingBox; originAtom: ATOM = $Origin; trueRope: ROPE = "TRUE"; artworkNode: ROPE = "ArtworkNode"; artworkFileName: ROPE = "ArtworkFileName"; artworkImage: ROPE = "ArtworkImage"; AnArtworkNode: PUBLIC PROCEDURE [node: TextNode.Ref] RETURNS [BOOLEAN] = { propValue: REF; IF node#NIL THEN IF (propValue _ NodeProps.GetProp[node, artworkAtom])#NIL THEN IF Rope.Equal[artworkNode, NodeProps.GetSpecs[artworkAtom, propValue]] THEN RETURN[TRUE]; RETURN[FALSE]; }; SetArtworkProp: PUBLIC PROCEDURE [node: TextNode.Ref] = { NodeProps.PutProp[node, artworkAtom, artworkNode]}; AnArtworkFileName: PUBLIC PROCEDURE [node: TextNode.Ref] RETURNS [BOOLEAN] = { propValue: REF; IF node#NIL THEN IF (propValue _ NodeProps.GetProp[node, artworkAtom])#NIL THEN IF Rope.Equal[artworkFileName, NodeProps.GetSpecs[artworkAtom, propValue]] THEN RETURN[TRUE]; RETURN[FALSE]; }; SetArtworkFileNameProp: PUBLIC PROCEDURE [node: TextNode.Ref] = { NodeProps.PutProp[node, artworkAtom, artworkFileName]}; AnArtworkImage: PUBLIC PROCEDURE [node: TextNode.Ref] RETURNS [BOOLEAN] = { propValue: REF; IF node#NIL THEN IF (propValue _ NodeProps.GetProp[node, artworkAtom])#NIL THEN IF Rope.Equal[artworkImage, NodeProps.GetSpecs[artworkAtom, propValue]] THEN RETURN[TRUE]; RETURN[FALSE]; }; SetArtworkImageProp: PUBLIC PROCEDURE [node: TextNode.Ref] = { NodeProps.PutProp[node, artworkAtom, artworkImage]}; AnArtworkPath: PUBLIC PROCEDURE [node: TextNode.Ref] RETURNS [BOOLEAN] = { propValue: REF; IF node#NIL THEN IF (propValue _ NodeProps.GetProp[node, artworkPathAtom])#NIL THEN IF Rope.Equal[trueRope, NodeProps.GetSpecs[artworkPathAtom, propValue]] THEN RETURN[TRUE]; RETURN[FALSE]; }; SetArtworkPathProp: PUBLIC PROCEDURE [node: TextNode.Ref] = { NodeProps.PutProp[node, artworkPathAtom, trueRope]}; GetBoundingBox: PUBLIC PROCEDURE [node: TextNode.Ref] RETURNS [x,y: REAL _ 0] = { propValue: REF; IF node#NIL THEN IF (propValue _ NodeProps.GetProp[node, boundingBoxAtom])#NIL THEN { h: IO.Handle _ IO.CreateInputStreamFromRope[ NodeProps.GetSpecs[boundingBoxAtom, propValue]]; x _ h.GetReal[]; y _ h.GetReal[]}; RETURN[x,y]}; SetBoundingBoxProp: PUBLIC PROCEDURE [node: TextNode.Ref, x,y: REAL] = { NodeProps.PutProp[node, boundingBoxAtom, IO.PutFToRope["%g %g", IO.real[x], IO.real[y]]]}; GetOrigin: PUBLIC PROCEDURE [node: TextNode.Ref] RETURNS [x,y: REAL _ 0] = { propValue: REF; IF node#NIL THEN IF (propValue _ NodeProps.GetProp[node, originAtom])#NIL THEN { h: IO.Handle _ IO.CreateInputStreamFromRope[ NodeProps.GetSpecs[originAtom, propValue]]; x _ h.GetReal[]; y _ h.GetReal[]}; RETURN[x,y]}; SetOriginProp: PUBLIC PROCEDURE [node: TextNode.Ref, x,y: REAL] = { NodeProps.PutProp[node, originAtom, IO.PutFToRope["%g %g", IO.real[x], IO.real[y]]]}; }.