function addHeaderID()

in beta/scripts/generateHeadingIDs.js [36:55]


function addHeaderID(line, slugger) {
  // check if we're a header at all
  if (!line.startsWith('#')) {
    return line;
  }

  const match = /^(#+\s+)(.+?)(\s*\{(?:\/\*|#)([^\}\*\/]+)(?:\*\/)?\}\s*)?$/.exec(line);
  const before = match[1] + match[2]
  const proc = modules.unified().use(modules.remarkParse).use(modules.remarkSlug)
  const tree = proc.runSync(proc.parse(before))
  const head = tree.children[0]
  assert(head && head.type === 'heading', 'expected `' + before + '` to be a heading, is it using a normal space after `#`?')
  const autoId = head.data.id
  const existingId = match[4]
  const id = existingId || autoId
  // Ignore numbers:
  const cleanExisting = existingId ? existingId.replace(/-\d+$/, '') : undefined
  const cleanAuto = autoId.replace(/-\d+$/, '')

  if (cleanExisting && cleanExisting !== cleanAuto) {