docs: def rebuild_index(self):
          """Rebuild index database from cplusplus.com and cppreference.com."""
          try:
              os.remove(environ.index_db_re)
          except:
              pass
  
          self.db_conn = sqlite3.connect(environ.index_db_re)
          self.db_cursor = self.db_conn.cursor()
          self.db_cursor.execute('CREATE TABLE "cplusplus.com" '
                                 '(name VARCHAR(255), url VARCHAR(255), std VARCHAR(255))')
          self.db_cursor.execute('CREATE TABLE "cppreference.com" '
                                 '(name VARCHAR(255), url VARCHAR(255), std VARCHAR(255))')
  
          try:
              self.add_url_filter('\.(jpg|jpeg|gif|png|js|css|swf|svg)$')
              self.set_follow_mode(Crawler.F_SAME_PATH)
  
              # cplusplus.com
              self.crawl('http://www.cplusplus.com/reference/')
              for name, url, std in self.results:
                  self.insert_index('cplusplus.com', name, url, std)
              self.db_conn.commit()
  
              # Rename duplicate entries
              duplicates = self.db_cursor.execute('SELECT name, COUNT(name) '
                                                  'AS NON '
                                                  'FROM "cplusplus.com" '
                                                  'GROUP BY NAME '
                                                  'HAVING (NON > 1)').fetchall()
              for name, num in duplicates:
                  dump = self.db_cursor.execute('SELECT name, url FROM '
                                                '"cplusplus.com" WHERE name="%s"'
                                                % name).fetchall()
                  for n, u in dump:
                      if u not in self.name_exceptions:
                          n2 = n[5:] if n.startswith('std::') else n
                          try:
                              group = re.search('/([^/]+)/%s/$' % n2, u).group(1)
                          except Exception:
                              group = re.search('/([^/]+)/[^/]+/$', u).group(1)
  
                          new_name = '%s (%s)' % (n, group)
                          self.db_cursor.execute('UPDATE "cplusplus.com" '
                                                 'SET name="%s", url="%s" '
                                                 'WHERE url="%s"' %
                                                 (new_name, u, u))
              self.db_conn.commit()
  
              # cppreference.com
              self.results = set()
              self.crawl('https://en.cppreference.com/w/cpp', '/w/cpp')
  
              for name, url, std in self.results:
                  self.insert_index('cppreference.com', name, url, std)
              self.db_conn.commit()
  
          except KeyboardInterrupt:
              os.remove(environ.index_db_re)
              raise KeyboardInterrupt
          finally:
              self.db_conn.close()