<> <> <> <> DIRECTORY CD, CDPolygons, CDTexts, CDMakeProcPrivate, IO, Rope; CDMakeProcSomeImpl: CEDAR PROGRAM IMPORTS CDMakeProcPrivate, IO, Rope = BEGIN MakePolygon: CDMakeProcPrivate.ExpressionProc = BEGIN r: Rope.ROPE _ "CDPolygons.CreatePolygon[points: "; list: Rope.ROPE _ NIL; ob: CD.Object _ NARROW[x]; pp: CDPolygons.PolygonPtr _ NARROW[ob.specificRef]; n: INT _ 0; CDMakeProcPrivate.IncludeDirectory[env, "CDPolygons"]; FOR pl: LIST OF CD.Position _ pp.points, pl.rest WHILE pl#NIL DO n _ n+1; IF n=1 THEN list _ "LIST[" ELSE list _ Rope.Cat[list, ", "]; list _ Rope.Cat[list, CDMakeProcPrivate.PosToRope[pl.first]]; ENDLOOP; list _ Rope.Cat[list, "]"]; r _ Rope.Cat[r, list, ", lev: ", CDMakeProcPrivate.LayerIdent[env, ob.layer], "].ob"]; RETURN [r]; END; MakeText: CDMakeProcPrivate.ExpressionProc = BEGIN SupportFont: PROC [env: CDMakeProcPrivate.Environment, font: CDTexts.CDFont] RETURNS [r: Rope.ROPE] = BEGIN x: REF; TRUSTED { x _ LOOPHOLE[font] }; r _ CDMakeProcPrivate.GlobalIdent[env, x]; IF r=NIL THEN { decl: Rope.ROPE; r _ CDMakeProcPrivate.RequestGlobalIdent[env, "font", x]; decl _ Rope.Cat[r, ": CDTexts.CDFont _ CDTexts.MakeFont[name: "]; decl _ Rope.Cat[decl, CDMakeProcPrivate.RopeToRope[tp.cdFont.supposedName], ", scale: ", IO.PutFR1["%g", IO.int[tp.cdFont.scaleI]]]; decl _ Rope.Cat[decl, "];"]; CDMakeProcPrivate.GlobalDeclaration1[env, decl]; }; END; r: Rope.ROPE _ "CDTexts.CreateText[text: "; fontIdent: Rope.ROPE; ob: CD.Object _ NARROW[x]; tp: CDTexts.TextPtr _ NARROW[ob.specificRef]; fontIdent _ SupportFont[env, tp.cdFont]; CDMakeProcPrivate.IncludeDirectory[env, "CDTexts"]; r _ Rope.Cat[r, CDMakeProcPrivate.RopeToRope[tp.text], ", font: ", fontIdent]; r _ Rope.Cat[r, ", layer: ", CDMakeProcPrivate.LayerIdent[env, ob.layer], "]"]; RETURN [r]; END; CDMakeProcPrivate.RegisterExpressionProc[$Polygon, MakePolygon]; CDMakeProcPrivate.RegisterExpressionProc[$Text, MakeText]; END.