function findIndex(input,match,op){
let cleanedInput = input.replace(/\s+/g, '');
let matchIndex = cleanedInput.indexOf(match);
if(op===1 && matchIndex!==-1) matchIndex += match.length-1;
if (matchIndex !== -1) {
let indexInOriginal = 0;
for (let i = 0; i < input.length; i++) {
if (input[i] !== ' ' && input[i] !== '\n' && input[i] !== '\t') {
if (indexInOriginal === matchIndex) {
return i;
}
indexInOriginal++;
}
}
}
return -1;
}
function print(input,l){
document.write(' '.repeat(Math.floor((l-input.length)/2)));
document.write(input);
document.write(' '.repeat(Math.ceil((l-input.length)/2)));
}
function formatting(input){
let cleanedInput = input.replace(/\s+/g, '');
let l = 1, cnt = 1;
const content = new Array(21).fill('').map(() => new Array(21).fill(''));
for(i=0;i<cleanedInput.length;i++){
if(cleanedInput[i]==='&'){
cnt++;
}else if(cleanedInput[i]==='\\'&&cleanedInput[i+1]==='\\'){
i++;
if(i!==cleanedInput.length-1){
l++;
cnt=1;
}
}else{
content[l][cnt]+=cleanedInput[i];
}
}
const maxLength= new Array(21).fill(0);
for(i=1;i<=l;i++){
for(j=1;j<=cnt;j++){
maxLength[j]=Math.max(maxLength[j],content[i][j].length);
}
}
for(i=1;i<=l;i++){
for(j=1;j<=cnt;j++){
print(content[i][j],maxLength[j]+2);
if(j!==cnt) document.write('&');
}
document.write('\\\\\n');
}
}
function solution(input){
l = input.length;
a = findIndex(input,"\\begin{matrix}",1);
b = findIndex(input,"\\begin{pmatrix}",1);
c = findIndex(input,"\\begin{bmatrix}",1);
d = findIndex(input,"\\end{matrix}",2);
e = findIndex(input,"\\end{pmatrix}",2);
f = findIndex(input,"\\end{bmatrix}",2);
let minVal,minVar;
if (a !== -1 && d !== -1) {
minVal = a;
minVar = 'a';
}
if (b !== -1 && e !== -1 && (!minVal || b < minVal)) {
minVal = b;
minVar = 'b';
}
if (c !== -1 && f !== -1 && (!minVal || c < minVal)) {
minVal = c;
minVar = 'c';
}
if(!minVal) return;
if (minVar === 'a') {
document.write(input.slice(0,a+1));
document.write('\n');
formatting(input.slice(a+1,d));
document.write(input.slice(d,l));
} else if (minVar === 'b') {
document.write(input.slice(0,b+1));
document.write('\n');
formatting(input.slice(b+1,e));
document.write(input.slice(e,l));
} else if (minVar === 'c') {
document.write(input.slice(0,c+1));
document.write('\n');
formatting(input.slice(c+1,f));
document.write(input.slice(f,l));
}
}
const input = String.raw`
\[\begin{matrix}
a+b & ds2343 \\
x+r & \math{c^2x} \\
\end{matrix}\]`;
solution(input);
console