parameters: (self, source_line: str)
return_statement: return None
docstring: Extract subscribed/published topics from a source string
          :param src_str: string of C/C++ code with comments and whitespace removed
          :return: if any topic was found, returned as a str.   On error, raise on exception.  On ambiguous line, return `AMBIGUOUS_SITE_TOPIC`.  Otherwise, return `None`
docstring_summary: Extract subscribed/published topics from a source string
          :param src_str: string of C/C++ code with comments and whitespace removed
          :return: if any topic was found, returned as a str.   On error, raise on exception.  On ambiguous line, return `AMBIGUOUS_SITE_TOPIC`.  Otherwise, return `None`
docstring_tokens: Extract subscribed / published topics from a source string : param src_str : string of C / C ++ code with comments and whitespace removed : return : if any topic was found returned as a str . On error raise on exception . On ambiguous line return AMBIGUOUS_SITE_TOPIC . Otherwise return None
function: def match(self, source_line: str) -> str:
          """ Extract subscribed/published topics from a source string
          :param src_str: string of C/C++ code with comments and whitespace removed
          :return: if any topic was found, returned as a str.   On error, raise on exception.  On ambiguous line, return `AMBIGUOUS_SITE_TOPIC`.  Otherwise, return `None`
          """
  
          for regex in self._regexes:
              # just the matches for this particular pattern:
              match = regex.search(source_line)
  
              if match is None:
                  continue
  
              # # all regexes should contain 2 capture groups  (or else this code block crashes)
              route_group, topic_group = match.groups()
  
              log.debug("          ####:{}:  {}, {}".format( self._name, route_group, topic_group))
  
              # # TODO: handle this case... but not sure where, yet
              # if match == 'ORB_ID_VEHICLE_ATTITUDE_CONTROLS': # special case
              #     match = orb_id+orb_id_vehicle_attitude_controls_topic
  
              # match has the form: '[ORB_ID(]<topic_name>'
              if route_group:
                  if route_group == 'ORB_ID':
                      log.debug("            >>> Found ORB_ID topic: " + topic_group +  "    w/regex: " + str(regex.pattern))
                      return self._filter_topic(topic_group)
                  elif route_group == '[':
                      if not topic_group:
                          log.debug("            !! found an ambiguous site => return an empty set")
                          return PubSub.AMBIGUOUS_SITE_TOPIC
                  else:
                      raise SyntaxError('!!! Encountered regex case:  `route_group` contains unrecognized value!: '+ route_group+'  (::'+str(regex.pattern)+')\n'
                                          + "        ("+ route_group+', '+topic_group +")\n"
                                          + "        " + source_line)
              elif route_group.empty() and topic_group.empty():
                  log.debug('!!! Found ambiguous site, without `ORB_ID` or topic (::'+str(regex.pattern))
                  return PubSub.AMBIGUOUS_SITE_TOPIC
  
              else:
                  raise SyntaxError("            !!! unhandled case:  unknown-variant: "+route_group+", " + topic_group + " ....from regex: " + str(regex.pattern))
  
          return None
function_tokens: def match ( self , source_line : str ) -> str : for regex in self . _regexes : # just the matches for this particular pattern: match = regex . search ( source_line ) if match is None : continue # # all regexes should contain 2 capture groups  (or else this code block crashes) route_group , topic_group = match . groups ( ) log . debug ( "          ####:{}:  {}, {}" . format ( self . _name , route_group , topic_group ) ) # # TODO: handle this case... but not sure where, yet # if match == 'ORB_ID_VEHICLE_ATTITUDE_CONTROLS': # special case #     match = orb_id+orb_id_vehicle_attitude_controls_topic # match has the form: '[ORB_ID(]<topic_name>' if route_group : if route_group == 'ORB_ID' : log . debug ( "            >>> Found ORB_ID topic: " + topic_group + "    w/regex: " + str ( regex . pattern ) ) return self . _filter_topic ( topic_group ) elif route_group == '[' : if not topic_group : log . debug ( "            !! found an ambiguous site => return an empty set" ) return PubSub . AMBIGUOUS_SITE_TOPIC else : raise SyntaxError ( '!!! Encountered regex case:  `route_group` contains unrecognized value!: ' + route_group + '  (::' + str ( regex . pattern ) + ')\n' + "        (" + route_group + ', ' + topic_group + ")\n" + "        " + source_line ) elif route_group . empty ( ) and topic_group . empty ( ) : log . debug ( '!!! Found ambiguous site, without `ORB_ID` or topic (::' + str ( regex . pattern ) ) return PubSub . AMBIGUOUS_SITE_TOPIC else : raise SyntaxError ( "            !!! unhandled case:  unknown-variant: " + route_group + ", " + topic_group + " ....from regex: " + str ( regex . pattern ) ) return None