exports.enter = { table: enterTable, tableData: enterCell, tableHeader: enterCell, tableRow: enterRow } exports.exit = { codeText: exitCodeText, table: exitTable, tableData: exit, tableHeader: exit, tableRow: exit } function enterTable(token) { this.enter({type: 'table', align: token._align, children: []}, token) this.setData('inTable', true) } function exitTable(token) { this.exit(token) this.setData('inTable') } function enterRow(token) { this.enter({type: 'tableRow', children: []}, token) } function exit(token) { this.exit(token) } function enterCell(token) { this.enter({type: 'tableCell', children: []}, token) } // Overwrite the default code text data handler to unescape escaped pipes when // they are in tables. function exitCodeText(token) { var value = this.resume() if (this.getData('inTable')) { value = value.replace(/\\([\\|])/g, replace) } this.stack[this.stack.length - 1].value = value this.exit(token) } function replace($0, $1) { // Pipes work, backslashes don’t (but can’t escape pipes). return $1 === '|' ? $1 : $0 }