code: function block(toks, i, n, handler) {
      ++i; //  skip over '{'
      if (handler['startBlock']) { handler['startBlock'](); }
      while (i < n) {
        var ch = toks[i].charAt(0);
        if (ch == '}') {
          ++i;
          break;
        }
        if (ch === ' ' || ch === ';') {
          i = i+1;
        } else if (ch === '@') {
          i = atrule(toks, i, n, handler, false);
        } else if (ch === '{') {
          i = block(toks, i, n, handler);
        } else {
          // Instead of using (any* block) to subsume ruleset we allow either
          // blocks or rulesets with a non-blank selector.
          // This is more restrictive but does not require atrule specific
          // parse tree fixup to realize that the contents of the block in
          //    @media print { ... }
          // is a ruleset.  We just don't care about any block carrying at-rules
          // whose body content is not ruleset content.
          i = ruleset(toks, i, n, handler);
        }
      }
      if (handler['endBlock']) { handler['endBlock'](); }
      return i;
    }
docs: block       : '{' S* [ any | block | ATKEYWORD S* | ';' S* ]* '}' S*; Assumes the leading '{' has been verified by callers.