DIRECTORY Atom, ViewerClasses, TiogaMenuOps, Convert, Commander, FS, Imager, ImagerInterpress, IO, Rope, TiogaAccess, ImagerArtwork, ImagerTransformation, TEditInputOps, TextNode, TEditDocument; ImagerArtworkImpl: CEDAR PROGRAM IMPORTS Convert, Imager, ImagerInterpress, IO, Rope, TiogaAccess, ImagerTransformation, TEditInputOps EXPORTS ImagerArtwork ~ BEGIN ROPE: TYPE ~ Rope.ROPE; 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 [Imager.Transformation] ~ { RETURN [ImagerTransformation.Scale[metersPerPoint]]; }; CreateInterpressRope: PUBLIC PROC [action: PROC [Imager.Context], bounds: Imager.Rectangle, m: Imager.Transformation, 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: Imager.Transformation, clip: BOOL, fit: BOOL] ~ { interpress: ROPE ~ CreateInterpressRope[action, bounds, m, clip]; tc: TiogaAccess.TiogaChar _ [ charSet: 0, char: '\n, looks: ALL[FALSE], format: NIL, comment: TRUE, endOfNode: FALSE, deltaLevel: 0, propList: NIL ]; 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 _ CONS[NEW[Atom.DottedPairNode _ [key: key, val: val]], tc.propList]; }; sepNeeded: BOOL _ FALSE; Sp: PROC ~ {PutRope[" "]; sepNeeded _ FALSE}; Comma: PROC ~ {IF sepNeeded THEN PutRope[", "]; sepNeeded _ FALSE}; Putmm: PROC [meters: REAL] ~ { PutLooksRope[Convert.RopeFromReal[meters*1000], 'f]; PutLooksRope["mm", 's, 'o]; sepNeeded _ TRUE; }; PutKey: PROC [rope: ROPE] ~ { Comma[]; PutLooksRope[rope, 'o]; PutLooksRope[": ", 'o]; sepNeeded _ TRUE; }; PutKeyMeters: PROC [name: ROPE, meters, defaultMeters: REAL] ~ { IF meters#defaultMeters THEN {PutKey[name]; Putmm[meters]}; }; bb: Imager.Rectangle _ ImagerTransformation.TransformRectangle[m, bounds]; scale: REAL ~ 1000.0; tc.endOfNode _ TRUE; PutRope["\n"]; tc.endOfNode _ FALSE; PutLooksRope[" [Artwork node; type 'ArtworkInterpress 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, "topLeading ", topCalcRope, "topIndent " ].Cat[ Convert.RopeFromReal[bottomSpace], " mm bottomLeading " ]]; PutRopeProp[$Fit, "TRUE"]; } ELSE { PutRopeProp[$Postfix, Rope.Cat[ Convert.RopeFromReal[(bb.h+bb.y)*scale+topSpace], " mm topLeading ", Convert.RopeFromReal[(bb.h+bb.y)*scale+topSpace], " mm topIndent " ].Cat[ Convert.RopeFromReal[(-bb.y)*scale+bottomSpace], " mm bottomLeading " ]]; }; 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; PutLooksRope["", 't]; PutRope[" Insert caption here "]; PutLooksRope["", 't]; tc.endOfNode _ TRUE; tc.char _ '\n; tc.format _ $artworkCaption; TiogaAccess.Put[writer, tc]; tc.format _ NIL; }; PasteArtwork: PUBLIC PROC [action: PROC [Imager.Context], bounds: Imager.Rectangle, m: Imager.Transformation, clip: BOOL, fit: BOOL] ~ { writer: TiogaAccess.Writer _ TiogaAccess.Create[]; locked: PROC [root: TextNode.Ref, tSel:TEditDocument.Selection] ~ { TEditInputOps.Break[]; TiogaAccess.WriteSelection[writer]; }; WriteArtwork[writer: writer, action: action, bounds: bounds, m: m, clip: clip, fit: fit]; 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 c 1985, 1986 by Xerox Corporation. All rights reserved. Michael Plass, August 22, 1986 3:39:37 pm PDT Doug Wyatt, June 6, 1986 2:44:47 pm PDT Bland, August 28, 1986 4:33:18 pm PDT Κ>˜codešœ™Kšœ Οmœ7™BK™-K™'K™%—K˜KšΟk œ8žœžœa˜ΒK˜KšΠlnœžœž˜ Kšžœ$žœ8˜eKšžœ˜Kšœž˜K˜Kšžœžœžœ˜K˜šœžœ˜&K˜—šœ žœ˜K˜—Kšœ žœ˜ šœ žœ˜#K˜—šΟnœžœžœžœ˜7Kšžœ.˜4Kšœ˜K˜—š œžœžœ žœMžœžœžœžœ˜›Kš œžœžœžœžœ˜Kšœe˜ešœ žœ˜.Kšžœžœžœ˜+Kšžœžœ'˜3Kšœ˜Kšœ˜—Kšœ7˜7Kšœ&˜&Kšžœžœ˜Kšœ˜K˜—š   œžœžœ&žœMžΟjœžœ˜€Kšœ žœ1˜Ašœ˜Kšœ ˜ Kšœ ˜ Kšœžœžœ˜Kšœžœ˜ Kšœ žœ˜Kšœ žœ˜K˜Kšœ ž˜ Kšœ˜—š œžœžœ˜JšœE˜EK•StartOfExpansionT[base: ROPE, start: INT _ 0, len: INT _ 2147483647, action: Rope.ActionType]šœ*˜*Kšœ˜—š  œžœžœžœ ˜?Jšœ#˜#Jšžœžœžœ˜-Jšžœžœžœ˜-Jšœ˜Jšœ˜Kšœ˜—š  œžœžœžœ˜,Kšœžœžœ;˜QKšœ˜—Kšœ žœžœ˜Kš œžœžœ˜-Kš  œžœžœ žœžœ˜Cš œžœ žœ˜Kšœ4˜4Kšœ˜Kšœ žœ˜Kšœ˜—š œžœžœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ žœ˜Kšœ˜—š  œžœžœžœ˜@Kšžœžœ˜;Kšœ˜—KšœJ˜JKšœžœ ˜Kšœžœ žœ˜9KšœR˜Ršžœžœ žœ žœ˜'Kšœ žœ#˜3Kšœžœ"˜4Kšœ žœI˜Zšœ˜Kšœ˜Kšœ ˜ Kšœ7˜7K˜—Kšœ˜Kšœ˜—šžœ˜šœ˜KšœD˜DKšœI˜IKšœE˜EK˜—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šœ˜K˜—š   œžœžœ žœMžœžœ˜ˆKšœ2˜2šœžœ7˜CJšœ˜Kšœ#˜#Kšœ˜—KšœY˜YKšœ$˜$Kšœ˜K˜—šœ$˜$Kšœ ˜ Kšœ ˜ Kšœžœžœ˜Kšœžœ˜ Kšœ žœ˜Kšœ žœ˜K˜Kšœ ž˜ Kšœ˜K˜—Kšžœ˜J˜Jšœ,žœMžœ˜†—…—Hb