import { defineEnvironment , defineTabularEnvironment , } from './definitions-utils' ; import type { Atom } from '../core/atom-class' ; import { ArrayAtom , ColumnFormat } from '../core-atoms/array' ; import { Dimension } from '../public/core' ; defineEnvironment ( 'math' , '' , ( name , array , rowGaps ) : Atom => new ArrayAtom ( name , array , rowGaps , { mathstyleName : 'textstyle' } ) ) ; defineEnvironment ( 'displaymath' , '' , ( name , array , rowGaps ) : Atom => new ArrayAtom ( name , array , rowGaps , { mathstyleName : 'textstyle' } ) ) ; defineTabularEnvironment ( 'array' , '{columns:colspec}' , ( name , array , rowGaps , args ) : Atom => new ArrayAtom ( name , array , rowGaps , { columns : args [ 0 ] as ColumnFormat [ ] , mathstyleName : 'textstyle' , } ) ) ; defineTabularEnvironment ( [ 'equation' , 'equation*' , 'subequations' ] , '' , ( name , array , rowGaps ) : Atom => new ArrayAtom ( name , array , rowGaps , { columns : [ { align : 'c' } ] , } ) ) ; defineTabularEnvironment ( 'multline' , '' , ( name , array , rowGaps ) : Atom => new ArrayAtom ( name , array , rowGaps , { columns : [ { align : 'm' } ] , } ) ) ; defineTabularEnvironment ( [ 'align' , 'align*' , 'aligned' , 'eqnarray' ] , '' , ( name , array , rowGaps ) : Atom => { let colCount = 0 ; for ( const row of array ) { colCount = Math . max ( colCount , row . length ) ; } const colFormat = [ { gap : 0 } , { align : 'r' } , { gap : 0 } , { align : 'l' } , ] ; let i = 2 ; while ( i < colCount ) { colFormat . push ( { gap : 1 } ) ; colFormat . push ( { align : 'r' } ) ; colFormat . push ( { gap : 0 } ) ; colFormat . push ( { align : 'l' } ) ; i += 2 ; } colFormat . push ( { gap : 0 } ) ; return new ArrayAtom ( name , array , rowGaps , { arraycolsep : 0 , columns : colFormat , colSeparationType : 'align' , jot : 0.3 , } ) ; } ) ; defineTabularEnvironment ( 'split' , '' , ( name , array , rowGaps ) : Atom => new ArrayAtom ( name , array , rowGaps , { columns : [ { align : 'r' } , { align : 'l' } ] , } ) ) ; defineTabularEnvironment ( [ 'gather' , 'gathered' ] , '' , ( name , array , rowGaps ) : Atom => new ArrayAtom ( name , array , rowGaps , { columns : [ { gap : 0.25 } , { align : 'c' } , { gap : 0 } ] , colSeparationType : 'gather' , } ) ) ; defineTabularEnvironment ( [ 'matrix' , 'pmatrix' , 'bmatrix' , 'Bmatrix' , 'vmatrix' , 'Vmatrix' , 'matrix*' , 'pmatrix*' , 'bmatrix*' , 'Bmatrix*' , 'vmatrix*' , 'Vmatrix*' , ] , '[columns:colspec]' , ( name , array , rowGaps , args ) : Atom => { let leftDelim = '.' ; let rightDelim = '.' ; switch ( name ) { case 'pmatrix' : case 'pmatrix*' : leftDelim = '(' ; rightDelim = ')' ; break ; case 'bmatrix' : case 'bmatrix*' : leftDelim = '[' ; rightDelim = ']' ; break ; case 'Bmatrix' : case 'Bmatrix*' : leftDelim = '\\lbrace' ; rightDelim = '\\rbrace' ; break ; case 'vmatrix' : case 'vmatrix*' : leftDelim = '\\vert' ; rightDelim = '\\vert' ; break ; case 'Vmatrix' : case 'Vmatrix*' : leftDelim = '\\Vert' ; rightDelim = '\\Vert' ; break ; case 'matrix' : case 'matrix*' : leftDelim = '.' ; rightDelim = '.' ; break ; default : } return new ArrayAtom ( name , array , rowGaps , { mathstyleName : 'textstyle' , leftDelim , rightDelim , columns : ( args [ 0 ] as ColumnFormat [ ] ) ?? [ { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , ] , } ) ; } ) ; defineTabularEnvironment ( [ 'smallmatrix' , 'smallmatrix*' ] , '[columns:colspec]' , ( name , array , rowGaps , args ) : Atom => { return new ArrayAtom ( name , array , rowGaps , { mathstyleName : 'scriptstyle' , columns : ( args [ 0 ] as ColumnFormat [ ] ) ?? [ { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , { align : 'c' } , ] , colSeparationType : 'small' , arraystretch : 0.5 , } ) ; } ) ; defineTabularEnvironment ( [ 'cases' , 'dcases' ] , '' , ( name , array , rowGaps ) : Atom => { return new ArrayAtom ( name , array , rowGaps , { mathstyleName : name === 'dcases' ? 'displaystyle' : 'textstyle' , arraystretch : 1.2 , leftDelim : '\\lbrace' , rightDelim : '.' , columns : [ { align : 'l' } , { gap : 1 } , { align : 'l' } ] , } ) ; } ) ; defineTabularEnvironment ( 'rcases' , '' , ( name , array , rowGaps ) : Atom => { return new ArrayAtom ( name , array , rowGaps , { arraystretch : 1.2 , leftDelim : '.' , rightDelim : '\\rbrace' , columns : [ { align : 'l' } , { gap : 1 } , { align : 'l' } ] , } ) ; } ) ; defineEnvironment ( 'center' , '' , ( name , array , rowGaps ) : Atom => new ArrayAtom ( name , array , rowGaps , { columns : [ { align : 'c' } ] } ) ) ;