<> <> <> <> DIRECTORY CD, CDCurves, CDImports, CDTexts, CDTextsExtras, CDMakeProcPrivate, IO, Rope; CDMakeProcSomeImpl: CEDAR PROGRAM IMPORTS CDMakeProcPrivate, IO, Rope, CDTextsExtras = BEGIN MakeCurves: PROC [env: CDMakeProcPrivate.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.CurvePtr _ NARROW[ob.specificRef]; n: INT _ 0; CDMakeProcPrivate.IncludeDirectory[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, CDMakeProcPrivate.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: ", CDMakeProcPrivate.LayerIdent[env, ob.layer], "].ob"]; RETURN [r]; }; MakeSplines: CDMakeProcPrivate.ExpressionProc = { RETURN [ MakeCurves[env, NARROW[x], TRUE, "CreateSpline"] ]; }; MakeLines: CDMakeProcPrivate.ExpressionProc = { RETURN [ MakeCurves[env, NARROW[x], TRUE, "CreateLine"] ]; }; MakePolygon: CDMakeProcPrivate.ExpressionProc = { RETURN [ MakeCurves[env, NARROW[x], FALSE, "CreatePolygon"] ]; }; MakeFilledCurve: CDMakeProcPrivate.ExpressionProc = { RETURN [ MakeCurves[env, NARROW[x], FALSE, "CreateFilledCurve"] ]; }; MakeText: CDMakeProcPrivate.ExpressionProc = { SupportFont: PROC [env: CDMakeProcPrivate.Environment, font: CDTexts.CDFont] RETURNS [r: Rope.ROPE] = { x: REF; TRUSTED { x _ LOOPHOLE[font] }; r _ CDMakeProcPrivate.GlobalIdent[env, x]; IF r=NIL THEN { decl: Rope.ROPE; CDMakeProcPrivate.IncludeDirectory[env, "CDTexts"]; 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]; }; }; r: Rope.ROPE _ "CDTextsExtras.Create[text: "; fontIdent: Rope.ROPE; ob: CD.Object _ NARROW[x]; tp: CDTexts.TextPtr _ NARROW[ob.specificRef]; flip: BOOL _ CDTextsExtras.IsFlipText[ob]; fontIdent _ SupportFont[env, tp.cdFont]; CDMakeProcPrivate.IncludeDirectory[env, "CDTextsExtras"]; r _ Rope.Cat[r, CDMakeProcPrivate.RopeToRope[tp.text], ", font: ", fontIdent]; r _ Rope.Cat[r, ", layer: ", CDMakeProcPrivate.LayerIdent[env, ob.layer]]; r _ Rope.Cat[r, ", flip: ", (IF flip THEN "TRUE" ELSE "FALSE"), "]"]; RETURN [r]; }; MakeImport: CDMakeProcPrivate.ExpressionProc = { MakeImpGenerator: PROC [env: CDMakeProcPrivate.Environment] = { IF CDMakeProcPrivate.GetEnvironmentProp[env, $hasImports]=NIL THEN { CDMakeProcPrivate.PutEnvironmentProp[env, $hasImports, $hasImports]; CDMakeProcPrivate.GlobalDeclaration2[env, "imports: CDGenerate.Table _ CDGenerate.AssertTable[""IMPORT""];"]; } }; r: Rope.ROPE; ob: CD.Object _ NARROW[x]; ip: CDImports.ImportPtr _ NARROW[ob.specificRef]; IF Rope.Find[ip.designName, "."]>=0 THEN RETURN [NIL]; MakeImpGenerator[env]; r _ Rope.Cat["CDGenerate.FetchNCall[imports, design, ", CDMakeProcPrivate.RopeToRope[Rope.Cat[ip.designName, ".", ip.objectName]], "]"]; RETURN [r]; }; CDMakeProcPrivate.RegisterExpressionProc[$Polygon0, MakePolygon]; CDMakeProcPrivate.RegisterExpressionProc[$FilledCurve0, MakeFilledCurve]; CDMakeProcPrivate.RegisterExpressionProc[$Line0, MakeLines]; CDMakeProcPrivate.RegisterExpressionProc[$Spline0, MakeSplines]; CDMakeProcPrivate.RegisterExpressionProc[$RigidText, MakeText]; CDMakeProcPrivate.RegisterExpressionProc[$FlipText, MakeText]; CDMakeProcPrivate.RegisterExpressionProc[$Import, MakeImport]; END.