code: def preprocess_section(self, section):
      
      lines = []
      in_codeblock = False
      keyword = None
      components = {}
      for line in section.content.split('\n'):
        line = line.strip()
  
        if line.startswith("```"):
          in_codeblock = not in_codeblock
  
        if not in_codeblock:
          match = re.match(r':(?:param|parameter)\s+(\w+)\s*:(.*)?$', line)
          if match:
            keyword = 'Arguments'
            param = match.group(1)
            text = match.group(2)
            text = text.strip()
  
            component = components.get(keyword, [])
            component.append('- `{}`: {}'.format(param, text))
            components[keyword] = component
            continue
  
          match = re.match(r':(?:return|returns)\s*:(.*)?$', line)
          if match:
            keyword = 'Returns'
            text = match.group(1)
            text = text.strip()
  
            component = components.get(keyword, [])
            component.append(text)
            components[keyword] = component
            continue
  
          match = re.match(':(?:raises|raise)\s+(\w+)\s*:(.*)?$', line)
          if match:
            keyword = 'Raises'
            exception = match.group(1)
            text = match.group(2)
            text = text.strip()
  
            component = components.get(keyword, [])
            component.append('- `{}`: {}'.format(exception, text))
            components[keyword] = component
            continue
  
        if keyword is not None:
          components[keyword].append(line)
        else:
          lines.append(line)
  
      for key in components:
        self._append_section(lines, key, components)
  
      section.content = '\n'.join(lines)
docs: Preprocessors a given section into it's components.