code: def process(c, request, name=None):
          
          # make sure we're loaded & sorted
          c.load_menus()
          c.sort_menus()
  
          if name is None:
              # special case, process all menus
              items = {}
              for name in c.items:
                  items[name] = c.process(request, name)
              return items
  
          if name not in c.items:
              return []
  
          items = copy.deepcopy(c.items[name])
          curitem = None
          for item in items:
              item.process(request)
              if item.visible:
                  item.selected = False
                  if item.match_url(request):
                      if curitem is None or len(curitem.url) < len(item.url):
                          curitem = item
  
          if curitem is not None:
              curitem.selected = True
  
          # return only visible items
          visible = [
              item
              for item in items
              if item.visible
          ]
  
          # determine if we should apply 'selected' to parents when one of their
          # children is the 'selected' menu
          if getattr(settings, 'MENU_SELECT_PARENTS', False):
              def is_child_selected(item):
                  for child in item.children:
                      if child.selected or is_child_selected(child):
                          return True
  
              for item in visible:
                  if is_child_selected(item):
                      item.selected = True
  
          return visible
docs: process uses the current request to determine which menus
          should be visible, which are selected, etc.