parameters: (index_page_html)
return_statement: return symbols
docstring: Parse index page.
    The index page lists all std symbols and hrefs to their detailed pages
    (which contain the defined header). An example:
  
    <a href="abs.html" title="abs"><tt>abs()</tt></a> (int) <br>
    <a href="acos.html" title="acos"><tt>acos()</tt></a> <br>
  
    Returns a list of tuple (symbol_name, relative_path_to_symbol_page, variant).
docstring_summary: Parse index page.
    The index page lists all std symbols and hrefs to their detailed pages
    (which contain the defined header). An example:
docstring_tokens: Parse index page . The index page lists all std symbols and hrefs to their detailed pages ( which contain the defined header ) . An example :
function: def _ParseIndexPage(index_page_html):
    """Parse index page.
    The index page lists all std symbols and hrefs to their detailed pages
    (which contain the defined header). An example:
  
    <a href="abs.html" title="abs"><tt>abs()</tt></a> (int) <br>
    <a href="acos.html" title="acos"><tt>acos()</tt></a> <br>
  
    Returns a list of tuple (symbol_name, relative_path_to_symbol_page, variant).
    """
    symbols = []
    soup = BeautifulSoup(index_page_html, "html.parser")
    for symbol_href in soup.select("a[title]"):
      # Ignore annotated symbols like "acos<>() (std::complex)".
      # These tend to be overloads, and we the primary is more useful.
      # This accidentally accepts begin/end despite the (iterator) caption: the
      # (since C++11) note is first. They are good symbols, so the bug is unfixed.
      caption = symbol_href.next_sibling
      variant = isinstance(caption, NavigableString) and "(" in caption
      symbol_tt = symbol_href.find("tt")
      if symbol_tt:
        symbols.append((symbol_tt.text.rstrip("<>()"), # strip any trailing <>()
                        symbol_href["href"], variant))
    return symbols
function_tokens: def _ParseIndexPage ( index_page_html ) : symbols = [ ] soup = BeautifulSoup ( index_page_html , "html.parser" ) for symbol_href in soup . select ( "a[title]" ) : # Ignore annotated symbols like "acos<>() (std::complex)". # These tend to be overloads, and we the primary is more useful. # This accidentally accepts begin/end despite the (iterator) caption: the # (since C++11) note is first. They are good symbols, so the bug is unfixed. caption = symbol_href . next_sibling variant = isinstance ( caption , NavigableString ) and "(" in caption symbol_tt = symbol_href . find ( "tt" ) if symbol_tt : symbols . append ( ( symbol_tt . text . rstrip ( "<>()" ) , # strip any trailing <>() symbol_href [ "href" ] , variant ) ) return symbols