docs: def create_rule(self, txtrule=None, regex=None, extension=None, cmd=None, codes=[0, None], recurse=True):
          '''
          Adds a set of rules to the extraction rule list.
  
          @txtrule   - Rule string, or list of rule strings, in the format <regular expression>:<file extension>[:<command to run>]
          @regex     - If rule string is not specified, this is the regular expression string to use.
          @extension - If rule string is not specified, this is the file extension to use.
          @cmd       - If rule string is not specified, this is the command to run.
                       Alternatively a callable object may be specified, which will be passed one argument: the path to the file to extract.
          @codes     - A list of valid return codes for the extractor.
          @recurse   - If False, extracted directories will not be recursed into when the matryoshka option is enabled.
  
          Returns None.
          '''
          rules = []
          created_rules = []
          match = False
          r = {
              'extension': '',
              'cmd': '',
              'regex': None,
              'codes': codes,
              'recurse': recurse,
          }
  
          # Process single explicitly specified rule
          if not txtrule and regex and extension:
              r['extension'] = extension
              r['regex'] = re.compile(regex)
              if cmd:
                  r['cmd'] = cmd
  
              return [r]
  
          # Process rule string, or list of rule strings
          if not isinstance(txtrule, type([])):
              rules = [txtrule]
          else:
              rules = txtrule
  
          for rule in rules:
              r['cmd'] = ''
              r['extension'] = ''
  
              try:
                  values = self._parse_rule(rule)
                  match = values[0]
                  r['regex'] = re.compile(values[0])
                  r['extension'] = values[1]
                  r['cmd'] = values[2]
                  r['codes'] = values[3]
                  r['recurse'] = values[4]
              except KeyboardInterrupt as e:
                  raise e
              except Exception:
                  pass
  
              # Verify that the match string was retrieved.
              if match:
                  created_rules.append(r)
  
          return created_rules