docs: def _parseAtNamespace(self, src):
          """namespace :
  
          @namespace S* [IDENT S*]? [STRING|URI] S* ';' S*
          """
  
          src = self._parseSCDOCDC(src)
          while isAtRuleIdent(src, 'namespace'):
              ctxsrc = src
              src = stripAtRuleIdent(src)
  
              namespace, src = self._getStringOrURI(src)
              if namespace is None:
                  nsPrefix, src = self._getIdent(src)
                  if nsPrefix is None:
                      raise self.ParseError('@namespace expected an identifier or a URI', src, ctxsrc)
                  namespace, src = self._getStringOrURI(src.lstrip())
                  if namespace is None:
                      raise self.ParseError('@namespace expected a URI', src, ctxsrc)
              else:
                  nsPrefix = None
  
              src = src.lstrip()
              if src[:1] != ';':
                  raise self.ParseError('@namespace expected a terminating \';\'', src, ctxsrc)
              src = src[1:].lstrip()
  
              self.cssBuilder.atNamespace(nsPrefix, namespace)
  
              src = self._parseSCDOCDC(src)
          return src