DIRECTORY MathExpr USING [EXPR, AtomEXPR, CompoundEXPR, AtomClass, CompoundClass, MatrixFlavor], MathBox USING [BOX], MathTypes USING [Style, AtomValue], MathRules USING [Size], Rope USING [ROPE], Imager USING [Context, Color]; MathDisplayExpr: CEDAR DEFINITIONS ~ BEGIN ROPE: TYPE ~ Rope.ROPE; EXPR: TYPE ~ MathExpr.EXPR; AtomEXPR: TYPE ~ MathExpr.AtomEXPR; CompoundEXPR: TYPE ~ MathExpr.CompoundEXPR; BOX: TYPE ~ MathBox.BOX; Style: TYPE ~ MathTypes.Style; AtomClass: TYPE ~ MathExpr.AtomClass; CompoundClass: TYPE ~ MathExpr.CompoundClass; AtomValue: TYPE ~ MathTypes.AtomValue; Size: TYPE ~ MathRules.Size; MatrixFlavor: TYPE ~ MathExpr.MatrixFlavor; DisplayExpr: TYPE ~ REF DisplayExprRep; -- external abstract type DisplayExprRep: TYPE; -- internal concrete rep Selection: TYPE ~ RECORD[expr: DisplayExpr, color: Imager.Color]; MakeAtomicDisplayExpr: PROC[tag: ATOM, class: AtomClass, value: AtomValue, relBox, absBox: BOX, parent: DisplayExpr _ NIL] RETURNS[DisplayExpr]; MakeCompoundDisplayExpr: PROC[tag: ATOM, class: CompoundClass, subExprs: LIST OF DisplayExpr, relBox, absBox: BOX, parent: DisplayExpr _ NIL] RETURNS[DisplayExpr]; MakeMatrixDisplayExpr: PROC[tag: ATOM, flavor: MatrixFlavor, nRows, nCols: INT, elements: LIST OF DisplayExpr, relBox, absBox: BOX, openSym, closeSym, space: DisplayExpr, parent: DisplayExpr _ NIL] RETURNS[DisplayExpr]; ASRopeFromDisplayExpr: PROC[expr: DisplayExpr] RETURNS[ROPE]; DisplayExprFromExpr: PROC[expr: EXPR] RETURNS[DisplayExpr]; ExprFromDisplayExpr: PROC[expr: DisplayExpr] RETURNS[EXPR]; Copy: PROC[expr: DisplayExpr] RETURNS[DisplayExpr]; Tag: PROC[expr: DisplayExpr] RETURNS[ATOM]; Class: PROC[expr: DisplayExpr] RETURNS[ATOM]; GetSubExprs: PROC[expr: DisplayExpr] RETURNS[LIST OF DisplayExpr]; GetDisplayExpr: PROC[tag: ATOM, exprs: LIST OF DisplayExpr] RETURNS[DisplayExpr]; Paint: PROC[expr: DisplayExpr, context: Imager.Context, absBox: BOX, selections: LIST OF Selection]; Format: PROC[expr: DisplayExpr, size: Size] RETURNS[BOX]; DisplayExprFromCoords: PROC[expr: DisplayExpr, x, y: REAL] RETURNS[DisplayExpr]; Selectable: PROC[expr: DisplayExpr] RETURNS[BOOL]; SelectableParent: PROC[expr: DisplayExpr] RETURNS[DisplayExpr]; SelectableChild: PROC[expr: DisplayExpr] RETURNS[DisplayExpr]; SelectableSibling: PROC[expr: DisplayExpr] RETURNS[DisplayExpr]; Replace: PROC[old: DisplayExpr, new: DisplayExpr]; unable: ERROR[reason: ATOM]; noSelection: ERROR; invalidReplacement: ERROR; replaceAll: ERROR; END. πMathDisplayExpr.mesa Carl Waldspurger, August 17, 1986 5:54:33 pm PDT Definitions for Mathematics Display Expressions Abbreviations form Imported Interfaces Display Expression Type Definitions A DisplayExpr is a MUTABLE math expression which is mapped to a viewer. Selection Type Definitions Operations on DisplayExpr Display Expression Constructors effects: Constructs and returns a new atomic display expression. effects: Constructs and returns a new compound display expression. effects: Constructs and returns a new matrix display expression. effects: Returns a ROPE in Dennis Arnon's AlgebraStructures form from expr. effects: Constructs and returns a new display expression from expr. All Display formatting information is set to default values. effects: Constructs and returns a new EXPR from expr. effects: Returns a distinct copy of expr. Selectors effects: Returns tag associated with expr. effects: Returns class of expr. effects: Returns subexpressions for expr. Returns NIL if no subexpressions exist. effects: Returns the DisplayExpr in exprs associated with tag. SIGNALS exprNotFound if no association exists. Display & Formatting modifies: expr effects: Displays expr in context, bounded by absBox. Updates absolute bounding boxes (viewer coords). SIGNALS unable[reason: ATOM] if Painting cannot be completed. modifies: expr effects: expr is updated into a "paintable" form. Returns a bounding box for expr. SIGNALS unable[reason: ATOM] if Formatting can not be completed. Selection Operations effects: Returns the subexpression associated with coordinates [x, y] in expression expr. SIGNALS noSelection if no association exists. effects: Returns TRUE iff expr is selectable. effects: Returns the parent (enclosing expression) of expr. SIGNALS noSelection if no selectable parent exists. effects: Returns a child expressions (subexpression) for expr. SIGNALS noSelection if no selectable child exists. effects: Returns the "next" sibling expression from expr. SIGNALS noSelection if no selectable sibling exists. expects: old is a subexpression enclosed by some expresion, call it PARENT[old] modifies: PARENT[old] effects: Substitutes new for old as a subexpression of PARENT[old]. Sets TAG[new] = TAG[old] SIGNALS replaceAll if PARENT[old] does not exist. caveats: Enclosing expression must be reformatted before Paint[]'ing Signals & Errors Κ?˜Jšœ™Jšœ0™0J˜JšΟn/™/J˜šΟk ˜ Jšœ žœžœB˜VJšœžœžœ˜Jšœ žœ˜#Jšœ žœ˜Jšœžœžœ˜Jšœžœ˜—J˜šœžœž œ˜$J˜Jšž˜J˜š&™&J˜Jšžœžœžœ˜Jšžœžœ žœ˜Jšœ žœ˜#Jšœžœ˜+Jšžœžœ žœ˜Jšœžœ˜J˜Jšœ žœ˜%Jšœžœ˜-Jšœ žœ˜&J˜Jšœžœ˜Jšœžœ˜+J˜—J˜š#™#J˜JšœG™GIcode˜Kšœ žœžœΟc˜BKšœžœŸ˜/—K˜š™K™Kšœ žœžœ)˜AK˜—š™K˜Kš™K˜š œžœžœ6žœžœžœ˜‘KšœA™AK˜—šœžœžœ"žœžœžœžœžœ˜£KšœC™C—K™šœžœžœ&žœ žœžœžœ?žœžœ˜άKšœA™A—™K™—šœžœžœžœ˜=KšœL™L—K™šœžœžœžœ˜;KšœD™D—K™IK™šœžœžœžœ˜;Kšœ6™6—K˜šœžœžœ˜3Kšœ*™*K™—K™Kš ™ K™šœžœžœžœ˜+Kšœ+™+—K™šœžœžœžœ˜-Kšœ ™ —K™š  œžœžœžœžœ˜BKšœ*™*Kšœ1™1—K™š œžœžœ žœžœžœ˜QKšœ>™>Kšœ7™7K˜K™—K™Kš™K™š œžœ5žœžœžœ ˜eKšœ™Kšœ6™6Kšœ:™:KšœG™G—K™šœžœ žœžœ˜9Kšœ™Kšœ3™3Kšœ*™*KšœJ™J—K˜K™š™K™—šœžœžœžœ˜PKšœ\™\K™7—K™š œžœžœžœ˜2Kšœ-™-—K™šœžœžœ˜?Kšœ;™;Kšœ<™Kšœ?™?Kšœ<™™>—K™šœžœ%˜2KšœP™PKšœ™KšœD™DK™"Kšœ;™;K™DK™K˜——š™K™Kšœžœ žœ˜Kšœ žœ˜Kšœžœ˜Kšœ žœ˜K˜K˜—Kšžœ˜K˜˜K˜J˜J˜———…— Κω