code: def _make_id(string: str) -> str:
      """Convert `string` into an identifier and return it.
  
      This function is a modified version of ``docutils.nodes.make_id()`` of
      docutils-0.16.
  
      Changes:
  
      * Allow to use capital alphabet characters
      * Allow to use dots (".") and underscores ("_") for an identifier
        without a leading character.
  
      # Author: David Goodger <goodger@python.org>
      # Maintainer: docutils-develop@lists.sourceforge.net
      # Copyright: This module has been placed in the public domain.
      """
      id = string.translate(_non_id_translate_digraphs)
      id = id.translate(_non_id_translate)
      # get rid of non-ascii characters.
      # 'ascii' lowercase to prevent problems with turkish locale.
      id = (
          unicodedata.normalize("NFKD", id)
          .encode("ascii", "ignore")
          .decode("ascii")
      )
      # shrink runs of whitespace and replace by hyphen
      id = _non_id_chars.sub("-", " ".join(id.split()))
      id = _non_id_at_ends.sub("", id)
      return str(id)
  
imports: from __future__ import annotations
  import contextlib
  import re
  import unicodedata
  from typing import TYPE_CHECKING, Any, Callable
  from docutils import nodes
  from sphinx import addnodes
  from sphinx.locale import __
  from sphinx.util import logging
label_desc: Use image node_id 16 for calling a global function with example usage: _make_id(string) and returns: str