tooltip.ts 835 B

1234567891011121314151617181920212223242526272829
  1. import type MarkdownIt from 'markdown-it'
  2. export default (md: MarkdownIt): void => {
  3. md.renderer.rules.tooltip = (tokens, idx) => {
  4. const token = tokens[idx]
  5. return `<api-typing type="${token.content}" details="${token.info}" />`
  6. }
  7. md.inline.ruler.before('emphasis', 'tooltip', (state, silent) => {
  8. const tooltipRegExp = /^\^\[([^\]]*)\](`[^`]*`)?/
  9. const str = state.src.slice(state.pos, state.posMax)
  10. if (!tooltipRegExp.test(str)) return false
  11. if (silent) return true
  12. const result = str.match(tooltipRegExp)
  13. if (!result) return false
  14. const token = state.push('tooltip', 'tooltip', 0)
  15. token.content = result[1].replace(/\\\|/g, '|')
  16. token.info = (result[2] || '').replace(/^`(.*)`$/, '$1')
  17. token.level = state.level
  18. state.pos += result[0].length
  19. return true
  20. })
  21. }