<> <> <> <> DIRECTORY CD, CDCurves, CDImports, CDTexts, CDMakeProc, IO, Rope; CDMakeProcSomeImpl: CEDAR PROGRAM IMPORTS CDMakeProc, IO, Rope, CDTexts = BEGIN MakeCurves: PROC [env: CDMakeProc.Environment, ob: CD.Object, useW: BOOL, key: Rope.ROPE] RETURNS [Rope.ROPE] = { r: Rope.ROPE _ Rope.Cat["CDCurves.", key, "[points: "]; list: Rope.ROPE _ NIL; pp: CDCurves.CurveSpecific _ NARROW[ob.specific]; n: INT _ 0; CDMakeProc.MakePreamble[env, "CDCurves"]; 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, CDMakeProc.PosToRope[pl.first]]; ENDLOOP; r _ Rope.Cat[r, list, "]"]; IF useW THEN r _ Rope.Cat[r, IO.PutFR[", w: %g", [integer[pp.w]]]]; r _ Rope.Cat[r, ", layer: ", CDMakeProc.MakeLayer[env, ob.layer], "].ob"]; RETURN [r]; }; MakeSplines: CDMakeProc.ObjectExpressionProc = { RETURN [ MakeCurves[env, NARROW[x], TRUE, "CreateSpline"] ]; }; MakeLines: CDMakeProc.ObjectExpressionProc = { RETURN [ MakeCurves[env, NARROW[x], TRUE, "CreateLine"] ]; }; MakePolygon: CDMakeProc.ObjectExpressionProc = { RETURN [ MakeCurves[env, NARROW[x], FALSE, "CreatePolygon"] ]; }; MakeFilledCurve: CDMakeProc.ObjectExpressionProc = { RETURN [ MakeCurves[env, NARROW[x], FALSE, "CreateFilledCurve"] ]; }; MakeText: CDMakeProc.ObjectExpressionProc = { SupportFont: PROC [env: CDMakeProc.Environment, font: CDTexts.CDFont] RETURNS [r: Rope.ROPE] = { x: REF; TRUSTED { x _ LOOPHOLE[font] }; r _ CDMakeProc.GetGlobalIdent[env, x]; IF r=NIL THEN { decl: Rope.ROPE; CDMakeProc.MakePreamble[env, "CDTexts"]; r _ CDMakeProc.ForceGlobalIdent[env, "font", x]; decl _ Rope.Cat[r, ": CDTexts.CDFont _ CDTexts.MakeFont[name: "]; decl _ Rope.Cat[decl, CDMakeProc.RopeToRope[tp.cdFont.supposedName], ", scale: ", IO.PutFR1["%g", IO.int[tp.cdFont.scaleI]]]; decl _ Rope.Cat[decl, "];"]; CDMakeProc.PlaceDeclarationM1[env, decl]; }; }; r: Rope.ROPE _ "CDTexts.Create[text: "; fontIdent: Rope.ROPE; ob: CD.Object _ NARROW[x]; tp: CDTexts.TextSpecific _ NARROW[ob.specific]; flip: BOOL _ CDTexts.IsFlipText[ob]; fontIdent _ SupportFont[env, tp.cdFont]; CDMakeProc.MakePreamble[env, "CDTexts"]; r _ Rope.Cat[r, CDMakeProc.RopeToRope[tp.text], ", font: ", fontIdent]; r _ Rope.Cat[r, ", layer: ", CDMakeProc.MakeLayer[env, ob.layer]]; r _ Rope.Cat[r, ", flip: ", (IF flip THEN "TRUE" ELSE "FALSE"), "]"]; RETURN [r]; }; MakeImport: CDMakeProc.ObjectExpressionProc = { MakeImpGenerator: PROC [env: CDMakeProc.Environment] = { IF CDMakeProc.GetEnvironmentProp[env, $hasImports]=NIL THEN { CDMakeProc.PutEnvironmentProp[env, $hasImports, $hasImports]; CDMakeProc.PlaceDeclarationM2[env, "imports: CDGenerate.Context _ CDGenerate.AssertTable[""IMPORT""];"]; } }; r: Rope.ROPE; ob: CD.Object _ NARROW[x]; ip: CDImports.ImportSpecific _ NARROW[ob.specific]; IF Rope.Find[ip.designName, "."]>=0 THEN RETURN [NIL]; MakeImpGenerator[env]; r _ Rope.Cat["CDGenerate.FetchNCall[imports, design, ", CDMakeProc.RopeToRope[Rope.Cat[ip.designName, ".", ip.objectName]], "]"]; RETURN [r]; }; CDMakeProc.RegisterObjectExpressionProc[$Polygon0, MakePolygon]; CDMakeProc.RegisterObjectExpressionProc[$FilledCurve0, MakeFilledCurve]; CDMakeProc.RegisterObjectExpressionProc[$Line0, MakeLines]; CDMakeProc.RegisterObjectExpressionProc[$Spline0, MakeSplines]; CDMakeProc.RegisterObjectExpressionProc[$RigidText, MakeText]; CDMakeProc.RegisterObjectExpressionProc[$FlipText, MakeText]; CDMakeProc.RegisterObjectExpressionProc[$Import, MakeImport]; END.