docs: def parse_case(string, acronyms=None, preserve_case=False):
      """
      Parse a stringiable into a list of words.
  
      Also returns the case type, which can be one of the following:
          - upper: All words are upper-case.
          - lower: All words are lower-case.
          - pascal: All words are title-case or upper-case. Note that the
                    stringiable may still have separators.
          - camel: First word is lower-case, the rest are title-case or
                   upper-case. stringiable may still have separators.
          - mixed: Any other mixing of word casing. Never occurs if there are
                   no separators.
          - unknown: stringiable contains no words.
  
      Also returns the first separator character, or False if there isn't one.
  
      """
      words, separator, was_upper = _separate_words(string)
  
      if acronyms:
          # Use advanced acronym detection with list
          acronyms = _sanitize_acronyms(acronyms)
          check_acronym = _advanced_acronym_detection
      else:
          acronyms = []
          # Fallback to simple acronym detection.
          check_acronym = _simple_acronym_detection
  
      # Letter-run detector
  
      # Index of current word.
      i = 0
      # Index of first letter in run.
      s = None
  
      # Find runs of single upper-case letters.
      while i < len(words):
          word = words[i]
          if word is not None and UPPER.match(word):
              if s is None:
                  s = i
          elif s is not None:
              i = check_acronym(s, i, words, acronyms) + 1
              s = None
  
          i += 1
  
      if s is not None:
          check_acronym(s, i, words, acronyms)
  
      # Separators are no longer needed, so they can be removed. They *should*
      # be removed, since it's supposed to be a *word* list.
      words = [w for w in words if w is not None]
  
      # Determine case type.
      case_type = _determine_case(was_upper, words, string)
  
      if preserve_case:
          if was_upper:
              words = [w.upper() for w in words]
      else:
          words = _normalize_words(words, acronyms)
  
      return words, case_type, separator