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;
  }
// Assumes the leading '{' has been verified by callers.
Assumes the leading '{' has been verified by callers.
Assumes the leading ' { ' has been verified by callers .
function block(toks, i, n, handler) {
    ++i; 
    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 {
        i = ruleset(toks, i, n, handler);
      }
    }
    if (handler.endBlock) { handler.endBlock(); }
    return i;
  }
function block ( toks , i , n , handler ) { ++ i ; 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 { i = ruleset ( toks , i , n , handler ) ; } } if ( handler . endBlock ) { handler . endBlock ( ) ; } return i ; }
Assumes the leading '{' has been verified by callers.
Assumes the leading ' { ' has been verified by callers .
//  skip over '{' // 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.