// Process -> center text <- export default function centertext_plugin(md: { inline: { ruler: { before: (arg0: string, arg1: string, arg2: (state: any, silent: any) => boolean) => void; }; ruler2: { before: (arg0: string, arg1: string, arg2: (state: { delimiters: any; tokens?: any }) => void) => void; }; }; }) { function tokenize( state: { posMax: any; pos: number; src: string; scanDelims: (arg0: any, arg1: boolean) => void; push: (arg0: string, arg1: string, arg2: number) => any; delimiters: { marker: any; jump: number; token: number; level: any; end: number; open: boolean; close: boolean; }[]; tokens: string | any[]; level: any; }, silent: any ) { let token; const max = state.posMax; const start = state.pos; const marker = state.src.charCodeAt(start); if (start + 1 > max) { return false; } if (silent) { return false; } // don't run any pairs in validation mode if (marker === 45 /* - */ && state.src.charCodeAt(start + 1) === 62 /* > */) { state.scanDelims(state.pos, true); token = state.push('text', '', 0); token.content = '->'; state.delimiters.push({ marker: token.content, jump: 0, token: state.tokens.length - 1, level: state.level, end: -1, open: true, close: false, }); } else if (marker === 60 /* < */ && state.src.charCodeAt(start + 1) === 45 /* - */) { // found the close marker state.scanDelims(state.pos, true); token = state.push('text', '', 0); token.content = '<-'; state.delimiters.push({ marker: token.content, jump: 0, token: state.tokens.length - 1, level: state.level, end: -1, open: false, close: true, }); } else { // neither return false; } state.pos += 2; // eslint-disable-line no-param-reassign return true; } // Walk through delimiter list and replace text tokens with tags // function postProcess(state: { delimiters: any; tokens?: any }) { let i; let foundStart = false; let foundEnd = false; let delim; let token; const { delimiters } = state; const max = state.delimiters.length; for (i = 0; i < max; i += 1) { delim = delimiters[i]; if (delim.marker === '->') { foundStart = true; } else if (delim.marker === '<-') { foundEnd = true; } } if (foundStart && foundEnd) { for (i = 0; i < max; i += 1) { delim = delimiters[i]; if (delim.marker === '->') { foundStart = true; token = state.tokens[delim.token]; token.type = 'centertext_open'; token.tag = 'center'; token.nesting = 1; token.markup = '->'; token.content = ''; // token.attrs = [['class', 'text-center']]; } else if (delim.marker === '<-') { if (foundStart) { token = state.tokens[delim.token]; token.type = 'centertext_close'; token.tag = 'center'; token.nesting = -1; token.markup = '<-'; token.content = ''; } } } } } md.inline.ruler.before('emphasis', 'centertext', tokenize); md.inline.ruler2.before('emphasis', 'centertext', postProcess); }