code: def closest_match(match, specs, depth=0):
      
      new_specs = []
      match_lengths = []
      for i, spec in specs:
          if spec[0] == match[0]:
              new_specs.append((i, spec[1:]))
          else:
              if all(isinstance(s[0], basestring) for s in [spec, match]):
                  match_length = max(i for i in range(len(match[0]))
                                     if match[0].startswith(spec[0][:i]))
              elif is_number(match[0]) and is_number(spec[0]):
                  match_length = -abs(match[0]-spec[0])
              else:
                  match_length = 0
              match_lengths.append((i, match_length, spec[0]))
  
      if len(new_specs) == 1:
          return new_specs[0][0]
      elif new_specs:
          depth = depth+1
          return closest_match(match[1:], new_specs, depth)
      else:
          if depth == 0 or not match_lengths:
              return None
          else:
              return sorted(match_lengths, key=lambda x: -x[1])[0][0]
docs: Recursively iterates over type, group, label and overlay key,
      finding the closest matching spec.