function branchConditionalHandler(node, options) {
options = {handler: cleanupTex}
if (node.type !== 'ConditionalNode') {
return node.toTex(options)
}
const deparen = node => node.type === 'ParenthesisNode' ? node.content : node
const conditions = [node]
let curr = node
while (deparen(curr.falseExpr).type === 'ConditionalNode') {
conditions.push(deparen(curr.falseExpr))
curr = deparen(curr.falseExpr)
}
conditions.push(conditions[conditions.length - 1])
const deparenCondition = c => ({...c, condition: deparen(c.condition), trueExpr: deparen(c.trueExpr), falseExpr: deparen(c.falseExpr)})
return conditions.map(deparenCondition).map((c, i) =>
i === 0 ? `\\mathbf{if} \\> ${c.condition.toTex(options)}: \\\\ \\quad ${c.trueExpr.toTex(options)}`
: i !== conditions.length - 1 ? `\\mathbf{elif} \\> ${c.condition.toTex(options)}: \\\\ \\quad ${c.trueExpr.toTex(options)}`
: `\\mathbf{else :} \\\\ \\quad ${c.falseExpr.toTex(options)}`).join('\\\\')
}