<> <> <> 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]; 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, flavor: SelectionFlavor]; SelectionFlavor: TYPE ~ {primary, copy, move, kbinput}; <> <> 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]; <> << 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[old: DisplayExpr, new: DisplayExpr]; <> <> <> << Sets TAG[new] = TAG[old]>> << SIGNALS replaceAll if PARENT[old] does not exist.>> <> <<>> <> <<>> unable: ERROR[reason: ATOM]; noSelection: ERROR; invalidReplacement: ERROR; replaceAll: ERROR; END.