<> <> <> DIRECTORY MathExpr USING [EXPR, AtomEXPR, CompoundEXPR, AtomClass, CompoundClass, MatrixClass], MathBox USING [BOX], MathTypes USING [Style], 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; Size: TYPE ~ MathRules.Size; AtomClass: TYPE ~ MathExpr.AtomClass; CompoundClass: TYPE ~ MathExpr.CompoundClass; MatrixClass: TYPE ~ MathExpr.MatrixClass; <> <> 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: ROPE, 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, class: MatrixClass, 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]; <> << All Display formatting information is set to default values.>> <<>> 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]; <> << Returns NIL if no subexpressions exist.>> <<>> GetDisplayExpr: PROC[tag: ATOM, exprs: LIST OF DisplayExpr] RETURNS[DisplayExpr]; <> << SIGNALS exprNotFound if no association exists.>> <<>> <<>> <> <<>> Paint: PROC[expr: DisplayExpr, context: Imager.Context, absBox: BOX, selections: LIST OF Selection]; <> <> << Updates absolute bounding boxes (viewer coords).>> << SIGNALS unable[reason: ATOM] if Painting cannot be completed.>> <<>> Format: PROC[expr: DisplayExpr, size: Size] RETURNS[BOX]; <> <> << Returns a bounding box for expr.>> << SIGNALS unable[reason: ATOM] if Formatting can not be completed.>> <<>> <> <<>> DisplayExprFromCoords: PROC[expr: DisplayExpr, x, y: REAL] RETURNS[DisplayExpr]; <> << SIGNALS noSelection if no association exists.>> <<>> Selectable: PROC[expr: DisplayExpr] RETURNS[BOOL]; <> <<>> SelectableParent: PROC[expr: DisplayExpr] RETURNS[DisplayExpr]; <> << SIGNALS noSelection if no selectable parent exists.>> <<>> SelectableChild: PROC[expr: DisplayExpr] RETURNS[DisplayExpr]; <> << SIGNALS noSelection if no selectable child exists.>> SelectableSibling: PROC[expr: DisplayExpr] RETURNS[DisplayExpr]; <> << SIGNALS noSelection if no selectable sibling exists.>> <<>> Replace: PROC[expr, old, new: DisplayExpr] RETURNS[DisplayExpr]; <> <> << Note that new is used (not a copy).>> <<>> ReplacePair: TYPE ~ RECORD[old, new: DisplayExpr]; ReplaceN: PROC[expr: DisplayExpr, replacements: LIST OF ReplacePair] RETURNS[DisplayExpr]; <> << new substitured for old for each pair in replacements. >> <> << Note that the "new" components of replace pairs are used (not copies).>> <<>> <<>> <> <<>> unable: ERROR[reason: ATOM]; noSelection: ERROR; END.