-- GriffinToTAPrivateImpl.mesa -- Beach, June 27, 1982 12:54 pm DIRECTORY GFileFormatDefs, GriffinToTA, GriffinToTAPrivate, IO, NameSymbolTable USING [MakeName, Name], PairList, Rope, -- RTTypesBasic USING [NarrowFault], SplineDefs, StyleDefs, TextNode USING [FirstChild, LastChild, NewTextNode, Parent, Previous, Ref, RefTextNode]; GriffinToTAPrivateImpl: PROGRAM IMPORTS GriffinToTA, IO, NameSymbolTable, Rope, TextNode EXPORTS GriffinToTAPrivate = { OPEN GriffinToTA; ROPE: TYPE = Rope.ROPE; FindColor: PUBLIC PROCEDURE[h, s, b: REAL] RETURNS[ColorRef] = { c: ColorRef _ colors; MatchColor: PROCEDURE[c: ColorRef, h, s, b: REAL] RETURNS[BOOLEAN] = INLINE { RETURN[c#NIL AND c.h=h AND c.s=s AND c.b=b]}; MakeColorName: PROCEDURE[n: CARDINAL] RETURNS[ROPE] = INLINE { RETURN[IO.PutFToRope["Color%d", IO.card[n]]]}; WHILE c#NIL DO IF MatchColor[c, h, s, b] THEN RETURN[c]; c _ c.next; ENDLOOP; colorNumber _ colorNumber+1; colors _ NEW[ColorRec _ [colors, MakeColorName[colorNumber], h, s, b]]; RETURN[colors]; }; FindPathStyle: PUBLIC PROCEDURE[areaColor, outlineColor: ColorRef, pathType: ROPE, lineWeight: REAL] RETURNS[PathStyleRef] = { p: PathStyleRef _ pathStyles; MatchPathStyle: PROCEDURE[p: PathStyleRef, areaColor, outlineColor: ColorRef, pathType: ROPE, lineWeight: REAL] RETURNS[match: BOOLEAN] = { match _ p#NIL; IF match AND areaColor#NIL THEN match _ p.areaColor=areaColor; IF match AND outlineColor#NIL THEN match _ p.outlineColor=outlineColor; IF match THEN match _ Rope.Equal[p.pathType,pathType]; IF match AND lineWeight#0 THEN match _ p.lineWeight=lineWeight; RETURN[match]; }; MakePathStyleName: PROCEDURE[n: CARDINAL] RETURNS[NameSymbolTable.Name] = INLINE { RETURN[NameSymbolTable.MakeName[ LOOPHOLE[Rope.Flatten[ IO.PutFToRope["PathStyle%d", IO.card[n]]]]]]; }; WHILE p#NIL DO IF MatchPathStyle[p, areaColor, outlineColor, pathType, lineWeight] THEN RETURN[p]; p _ p.next; ENDLOOP; pathStyleNumber _ pathStyleNumber+1; pathStyles _ NEW[PathStyleRec _ [pathStyles, MakePathStyleName[pathStyleNumber], areaColor, outlineColor, pathType, lineWeight]]; RETURN[pathStyles]; }; FindCaptionStyle: PUBLIC PROCEDURE[family: ROPE, size: REAL, face: ROPE, charRotation: ROPE, lineFormatting: ROPE] RETURNS[CaptionStyleRef] = { p: CaptionStyleRef _ captionStyles; MatchCaptionStyle: PROCEDURE[p: CaptionStyleRef, family: ROPE, size: REAL, face: ROPE, charRotation: ROPE, lineFormatting: ROPE] RETURNS[BOOLEAN] = INLINE { RETURN[p#NIL AND Rope.Equal[p.family, family] AND p.size=size AND Rope.Equal[p.face, face] AND Rope.Equal[p.charRotation, charRotation] AND Rope.Equal[p.lineFormatting, lineFormatting]]; }; MakeCaptionStyleName: PROCEDURE[n: CARDINAL] RETURNS[NameSymbolTable.Name] = INLINE { RETURN[NameSymbolTable.MakeName[ LOOPHOLE[Rope.Flatten[ IO.PutFToRope["CaptionStyle%d", IO.card[n]]]]]]; }; WHILE p#NIL DO IF MatchCaptionStyle[p, family, size, face, charRotation, lineFormatting] THEN RETURN[p]; p _ p.next; ENDLOOP; captionStyleNumber _ captionStyleNumber+1; captionStyles _ NEW[CaptionStyleRec _ [captionStyles, MakeCaptionStyleName[captionStyleNumber], family, size, face, charRotation, lineFormatting]]; RETURN[captionStyles]; }; EqualCardinals: PUBLIC PairList.EqualProc = { l,r: CARDINAL; return _ FALSE; --if not a cardinal, will signal out l _ NARROW[left,REF CARDINAL]^; r _ NARROW[right,REF CARDINAL]^; IF l=r THEN return _ TRUE; }; -- procedures to create Tioga node structures InsertNodeAfterChildrenOf: PUBLIC PROCEDURE[node: TextNode.RefTextNode, newnode: TextNode.RefTextNode _ NIL] RETURNS[TextNode.RefTextNode] = { p: TextNode.Ref; IF newnode = NIL THEN -- create a new node newnode _ TextNode.NewTextNode[] ELSE {-- unhook newnode from the tree p _ TextNode.Parent[newnode]; IF TextNode.FirstChild[p] = newnode THEN { -- newnode is a first sibling IF newnode.last THEN -- it was an only child p.child _ NIL ELSE -- its sibling is now the parents first child p.child _ newnode.next} ELSE { -- unhook newnode from the middle of a chain p _ TextNode.Previous[newnode, p]; p.next _ newnode.next; p.last _ newnode.last}}; -- newnode is unattached IF TextNode.FirstChild[node]=NIL THEN { -- add newnode as a first child node.child _ newnode; newnode.next _ node; newnode.last _ TRUE} ELSE { -- finally, add newnode as sibling of last sibling p _ TextNode.LastChild[node]; newnode.next _ p.next; newnode.last _ p.last; p.next _ newnode; p.last _ FALSE}; RETURN[newnode]; }; InitColors: PUBLIC PROCEDURE[] RETURNS[ColorRef] = { -- create the Griffin color table: "name", h, s, b colors _ NEW[ColorRec _ [NIL, "black", 0, 0, 0]]; colors _ NEW[ColorRec _ [colors, "darkBrown", 7, 255, 59]]; colors _ NEW[ColorRec _ [colors, "brown", 7, 255, 118]]; colors _ NEW[ColorRec _ [colors, "tan", 0, 131, 217]]; colors _ NEW[ColorRec _ [colors, "maroon", 234, 255, 79]]; colors _ NEW[ColorRec _ [colors, "darkRed", 0, 255, 160]]; colors _ NEW[ColorRec _ [colors, "red", 0, 255, 255]]; colors _ NEW[ColorRec _ [colors, "orange", 10, 255, 255]]; colors _ NEW[ColorRec _ [colors, "darkYellow", 25, 255, 255]]; colors _ NEW[ColorRec _ [colors, "yellow", 40, 255, 255]]; colors _ NEW[ColorRec _ [colors, "lightYellow", 40, 190, 255]]; colors _ NEW[ColorRec _ [colors, "darkGreen", 71, 255, 59]]; colors _ NEW[ColorRec _ [colors, "green", 76, 255, 255]]; colors _ NEW[ColorRec _ [colors, "lightGreen", 71, 193, 255]]; colors _ NEW[ColorRec _ [colors, "darkBlue", 150, 255, 170]]; colors _ NEW[ColorRec _ [colors, "blue", 148, 255, 255]]; colors _ NEW[ColorRec _ [colors, "lightBlue", 141, 150, 255]]; colors _ NEW[ColorRec _ [colors, "darkAqua", 107, 255, 98]]; colors _ NEW[ColorRec _ [colors, "aqua", 107, 224, 255]]; colors _ NEW[ColorRec _ [colors, "cyan", 120, 255, 255]]; colors _ NEW[ColorRec _ [colors, "darkPurple", 178, 255, 178]]; colors _ NEW[ColorRec _ [colors, "purple", 170, 224, 255]]; colors _ NEW[ColorRec _ [colors, "violet", 170, 131, 255]]; colors _ NEW[ColorRec _ [colors, "magenta", 200, 255, 255]]; colors _ NEW[ColorRec _ [colors, "pink", 206, 170, 255]]; colors _ NEW[ColorRec _ [colors, "darkGrey", 0, 0, 40]]; colors _ NEW[ColorRec _ [colors, "grey", 0, 0, 120]]; colors _ NEW[ColorRec _ [colors, "lightGrey", 0, 0, 200]]; colors _ NEW[ColorRec _ [colors, "paleGrey", 0, 0, 230]]; colors _ NEW[ColorRec _ [colors, "white", 0, 0, 255]]; RETURN[colors]; }; }. Κ{˜Iprocš¨Οc)œœΟk œLžœ6žœ3žœfžœžœ3žœEΟn œžœ žœžœ'Ÿ œž œžœžœžœžœžœžœžœžœžœ Ÿ œž œžœžœ žœžœ*žœžœžœžœžœžœžœ*žœ=žœŸ œžœAžœžœ3Ÿœž œRžœžœžœžœžœžœ žœžœ"žœžœžœžœ(žœžœ,žœžœžœ$žœŸœž œžœžœžœžœžœGžœžœžœžœBžœžœžœ6žœsžœŸœžœžœ8žœ<Ÿœž œ)žœ8žœžœžœžœžœžœ!žœžœžœ-žœ9Ÿœž œžœžœžœžœžœJžœžœžœžœHžœžœžœ?žœ‚žœŸœϊŸœ„Ÿ œžœ5œ žœ žœ"žœ:žœ8žœ7žœ:žœ9žœ7žœ:žœ=žœ:žœ>žœ;žœ9žœ=žœ<žœ:žœ=žœ;žœ9žœ9žœ>žœ;žœ;žœ;žœ9žœ7žœ5žœ9žœ8žœD˜™3—…—œ