DIRECTORY Convert, Imager, ImagerArtwork, ImagerInterpress, ImagerTransformation, IO, Prop, Rope, TEditDocument, TEditInputOps, TEditSelection, TextNode, TiogaAccess, TiogaAccessViewers; ImagerArtworkImpl: CEDAR PROGRAM IMPORTS Convert, Imager, ImagerInterpress, ImagerTransformation, IO, Prop, Rope, TEditInputOps, TEditSelection, TiogaAccess, TiogaAccessViewers EXPORTS ImagerArtwork ~ BEGIN ROPE: TYPE ~ Rope.ROPE; Transformation: TYPE ~ ImagerTransformation.Transformation; metersPerPoint: REAL ¬ 254.0/720000.0; mmPerPoint: REAL ¬ 254.0/720.0; topSpace: REAL ¬ 8.0*mmPerPoint; bottomSpace: REAL ¬ 4.0*mmPerPoint; Points: PUBLIC PROC RETURNS [Transformation] ~ { RETURN[ImagerTransformation.Scale[metersPerPoint]]; }; CreateInterpressRope: PUBLIC PROC [ action: PROC [Imager.Context], bounds: Imager.Rectangle, m: Transformation ¬ NIL, clip: BOOL ¬ TRUE] RETURNS [ROPE] ~ { ros: IO.STREAM ~ IO.ROS[]; outputMaster: ImagerInterpress.Ref ~ ImagerInterpress.CreateFromStream[ros, "Interpress/Xerox/3.0 "]; pageAction: PROC [context: Imager.Context] ~ { IF m # NIL THEN Imager.ConcatT[context, m]; IF clip THEN Imager.ClipRectangle[context, bounds]; action[context]; }; ImagerInterpress.DoPage[outputMaster, pageAction, 1.0]; ImagerInterpress.Finish[outputMaster]; RETURN[IO.RopeFromROS[ros]]; }; WriteArtwork: PUBLIC PROC [ writer: TiogaAccess.Writer, action: PROC [Imager.Context], bounds: Imager.Rectangle, m: Transformation ¬ NIL, clip: BOOL ¬ TRUE, fit: BOOL ¬ FALSE, caption: BOOL ¬ TRUE] ~ { PutRope: PROC [rope: ROPE] ~ { action: Rope.ActionType ~ {tc.char ¬ c; TiogaAccess.Put[writer, tc]}; [] ¬ Rope.Map[base: rope, action: action]; }; PutLooksRope: PROC [rope: ROPE, look1, look2: CHAR ¬ '\000] ~ { save: TiogaAccess.Looks ~ tc.looks; IF look1 # '\000 THEN tc.looks[look1] ¬ TRUE; IF look2 # '\000 THEN tc.looks[look2] ¬ TRUE; PutRope[rope]; tc.looks ¬ save; }; PutRopeProp: PROC [key: ATOM, val: ROPE] ~ { tc.propList ¬ Prop.Put[propList: tc.propList, key: key, val: val]; }; interpress: ROPE ~ CreateInterpressRope[action, bounds, m, clip]; tc: TiogaAccess.TiogaChar ¬ vanillaTC; bb: Imager.Rectangle ¬ ImagerTransformation.TransformRectangle[m, bounds]; scale: REAL ~ 1000.0; tc.comment ¬ TRUE; PutLooksRope[" [Artwork node; type 'Artwork on' to command tool] ", 'n]; IF fit AND bb.h > 0 AND bb.w > 0 THEN { aspectRope: ROPE ~ Convert.RopeFromReal[bb.h/bb.w]; topSpaceRope: ROPE ~ Convert.RopeFromReal[topSpace]; topCalcRope: ROPE ~ Rope.Cat[aspectRope, " the lineLength .mul ", topSpaceRope, " .add "]; PutRopeProp[$Postfix, Rope.Cat[ topCalcRope, "bigger topLeading ", topCalcRope, "bigger topIndent " ].Cat[ Convert.RopeFromReal[bottomSpace], " mm bigger bottomLeading ", "0.5 0.3 0.95 backgroundColor the topLeading 6 pt .sub backgroundAscent 3 pt backgroundDescent 4 pt outlineBoxThickness 1 pt outlineBoxBearoff" ]]; PutRopeProp[$Fit, "TRUE"]; } ELSE { PutRopeProp[$Postfix, Rope.Cat[ Convert.RopeFromReal[(bb.h+bb.y)*scale+topSpace], " mm bigger topLeading ", Convert.RopeFromReal[(bb.h+bb.y)*scale+topSpace], " mm bigger topIndent " ].Cat[ Convert.RopeFromReal[(-bb.y)*scale+bottomSpace], " mm bigger bottomLeading ", "0.5 0.3 0.95 backgroundColor the topLeading 6 pt .sub backgroundAscent 3 pt backgroundDescent 4 pt outlineBoxThickness 1 pt outlineBoxBearoff" ]]; }; PutRopeProp[$Bounds, Rope.Cat[ Convert.RopeFromReal[bb.x*scale], " mm xmin ", Convert.RopeFromReal[bb.y*scale], " mm ymin " ].Cat[ Convert.RopeFromReal[(bb.x+bb.w)*scale], " mm xmax ", Convert.RopeFromReal[(bb.y+bb.h)*scale], " mm ymax " ]]; PutRopeProp[$Artwork, "Interpress"]; PutRopeProp[$Interpress, interpress]; tc.endOfNode ¬ TRUE; tc.deltaLevel ¬ 1; tc.char ¬ '\n; tc.format ¬ $artworkFigure; TiogaAccess.Put[writer, tc]; tc.format ¬ NIL; tc ¬ vanillaTC; IF caption THEN { PutLooksRope["", 't]; PutRope[" Insert caption here "]; PutLooksRope["", 't]; tc.endOfNode ¬ TRUE; tc.char ¬ '\n; tc.format ¬ $artworkCaption; TiogaAccess.Put[writer, tc]; tc.format ¬ NIL; tc.endOfNode ¬ FALSE; IF TEditSelection.pSel.granularity < node THEN { tc.endOfNode ¬ TRUE; PutRope["\n"]; tc.endOfNode ¬ FALSE; }; }; }; PasteArtwork: PUBLIC PROC [ action: PROC [Imager.Context], bounds: Imager.Rectangle, m: Transformation ¬ NIL, clip: BOOL ¬ TRUE, fit: BOOL ¬ FALSE, caption: BOOL ¬ TRUE] ~ { Locked: PROC [root: TextNode.Ref, tSel: TEditDocument.Selection] ~ { AddSelection: PROC ~ { reader: TiogaAccess.Reader ¬ TiogaAccessViewers.FromSelection[]; WHILE NOT TiogaAccess.EndOf[reader] DO TiogaAccess.Put[writer, TiogaAccess.Get[reader]]; ENDLOOP; }; writer: TiogaAccess.Writer ¬ TiogaAccess.Create[]; IF NOT tSel.pendingDelete AND tSel.insertion = after THEN AddSelection[]; IF tSel.granularity < node OR NOT tSel.pendingDelete THEN { tc: TiogaAccess.TiogaChar ¬ vanillaTC; tc.comment ¬ tc.endOfNode ¬ TRUE; tc.char ¬ '\n; TiogaAccess.Put[writer, tc]; }; WriteArtwork[writer, action, bounds, m, clip, fit, caption]; IF NOT tSel.pendingDelete AND tSel.insertion = before THEN AddSelection[]; TiogaAccessViewers.WriteSelection[writer]; }; TEditInputOps.CallWithLocks[Locked]; }; vanillaTC: TiogaAccess.TiogaChar ~ [ charSet: 0, char: '\n, looks: ALL[FALSE], format: NIL, comment: FALSE, endOfNode: FALSE, deltaLevel: 0, propList: NIL ]; END. CreateButton p ¬ ImagerArtwork.PasteArtwork[LOOPHOLE[ImagerExamplesImpl.Text], [0,0,0.08,0.05], ImagerTransformation.Scale[0.5], TRUE] Œ ImagerArtworkImpl.mesa Copyright Σ 1985, 1986, 1987, 1992 by Xerox Corporation. All rights reserved. Michael Plass, March 24, 1992 12:17 pm PST Bland, August 28, 1986 4:33:18 pm PDT Bier, March 11, 1988 4:01:45 pm PST Pier, October 24, 1988 12:17:41 pm PDT Added ImagerArtworkExtras code, October 24, 1988 Bloomenthal, May 29, 1990 2:52:30 pm PDT Doug Wyatt, October 1, 1991 4:28 pm PDT Κο•NewlineDelimiter –(cedarcode) style™codešœ™Kšœ ΟeœC™NK™*K™%K™#™&K™0—K™(K™'—K˜KšΟk œœGžžœœœœœœœ œ œ˜ΊK˜šΠlnœžœž˜ Kš žœœ9žœœœœœœ œ˜Kšžœ˜—šœž˜K˜Kšžœžœžœ˜Kšœžœ'˜;K˜šœžœ˜&K˜—šœ žœ˜ K˜—Kšœ žœ˜"šœžœ˜$K˜——šΟnœžœžœžœ˜0Kšžœ-˜3Kšœ˜K˜—š œžœžœ˜#Kšœžœ˜Kšœ˜Kšœžœ˜Kšœžœžœ˜Kšžœžœ˜Kšœ˜Kš œžœžœžœžœ˜Kšœe˜ešœ žœ˜.Kšžœžœžœ˜+Kšžœžœ'˜3Kšœ˜Kšœ˜—Kšœ7˜7Kšœ&˜&Kšžœžœ˜Kšœ˜K˜—š  œžœžœ˜Kšœ˜Kšœžœ˜Kšœ˜Kšœžœ˜KšœžœžΟj˜Kšœžœžœ˜Kšœ žœžœ˜Kšœ˜š œžœžœ˜K˜EK•StartOfExpansionT[base: ROPE, start: INT _ 0, len: INT _ 2147483647, action: Rope.ActionType]˜*Kšœ˜—š  œžœžœžœ ˜?Kšœ#˜#Kšžœžœžœ˜-Kšžœžœžœ˜-Kšœ˜K˜Kšœ˜—š  œžœžœžœ˜,K˜BKšœ˜—Kšœ žœ1˜AK˜&K˜JKšœžœ ˜Kšœ žœ˜KšœH˜Hšžœžœ žœ ˜ šžœ˜Kšœ žœ#˜3Kšœžœ"˜4Kšœ žœI˜Zšœ˜Kšœ"˜"Kšœ'˜'Kšœ?˜?Kšœ˜K˜—Kšœ˜Kšœ˜—šžœ˜šœ˜KšœK˜KKšœP˜PKšœM˜MKšœ˜K˜—Kšœ˜——šœ˜Kšœ.˜.Kšœ4˜4Kšœ5˜5Kšœ4˜4K˜—Kšœ$˜$Kšœ%˜%Kšœžœ˜K˜K˜K˜Kšœ˜Kšœ žœ˜K˜šžœ žœ˜Kšœ˜Kšœ!˜!Kšœ˜Kšœžœ˜K˜K˜Kšœ˜Kšœ žœ˜Kšœžœ˜šžœ(žœ˜0Kšœžœ˜Kšœ˜Kšœžœ˜K˜—K˜—Kšœ˜K˜—š  œžœžœ˜Kšœžœ˜Kšœ˜Kšœžœ˜Kšœžœžœ˜Kšœžœžœ˜Kšœ žœžœ˜Kšœ˜š œžœ8˜Dš  œžœ˜K˜@šžœžœž˜&Kšœ1˜1Kšžœ˜—K˜—K˜2Kšžœžœžœžœ˜Išžœžœžœžœ˜;K˜&Kšœžœ˜!K˜Kšœ˜K˜—Kšœ<˜