@@ -21,7 +21,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2121THE SOFTWARE.
2222
2323*/
24- /* Build time: 1 -November-2011 12 :11:55 */
24+ /* Build time: 16 -November-2011 01 :11:51 */
2525var parserlib = { } ;
2626( function ( ) {
2727
@@ -925,7 +925,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
925925THE SOFTWARE.
926926
927927*/
928- /* Build time: 1 -November-2011 12 :11:55 */
928+ /* Build time: 16 -November-2011 01 :11:51 */
929929( function ( ) {
930930var EventTarget = parserlib . util . EventTarget ,
931931TokenStreamBase = parserlib . util . TokenStreamBase ,
@@ -1258,6 +1258,7 @@ Parser.prototype = function(){
12581258
12591259 var tokenStream = this . _tokenStream ,
12601260 charset = null ,
1261+ count ,
12611262 token ,
12621263 tt ;
12631264
@@ -1304,7 +1305,36 @@ Parser.prototype = function(){
13041305 case Tokens . KEYFRAMES_SYM :
13051306 this . _keyframes ( ) ;
13061307 this . _skipCruft ( ) ;
1307- break ;
1308+ break ;
1309+ case Tokens . UNKNOWN_SYM : //unknown @ rule
1310+ tokenStream . get ( ) ;
1311+ if ( ! this . options . strict ) {
1312+
1313+ //fire error event
1314+ this . fire ( {
1315+ type : "error" ,
1316+ error : null ,
1317+ message : "Unknown @ rule: " + tokenStream . LT ( 0 ) . value + "." ,
1318+ line : tokenStream . LT ( 0 ) . startLine ,
1319+ col : tokenStream . LT ( 0 ) . startCol
1320+ } ) ;
1321+
1322+ //skip braces
1323+ count = 0 ;
1324+ while ( tokenStream . advance ( [ Tokens . LBRACE , Tokens . RBRACE ] ) == Tokens . LBRACE ) {
1325+ count ++ ; //keep track of nesting depth
1326+ }
1327+
1328+ while ( count ) {
1329+ tokenStream . advance ( [ Tokens . RBRACE ] ) ;
1330+ count -- ;
1331+ }
1332+
1333+ } else {
1334+ //not a syntax error, rethrow it
1335+ throw new SyntaxError ( "Unknown @ rule." , tokenStream . LT ( 0 ) . startLine , tokenStream . LT ( 0 ) . startCol ) ; ;
1336+ }
1337+ break ;
13081338 case Tokens . S :
13091339 this . _readWhitespace ( ) ;
13101340 break ;
@@ -4728,9 +4758,13 @@ TokenStream.prototype = mix(new TokenStreamBase(), {
47284758
47294759 //if it's not valid, use the first character only and reset the reader
47304760 if ( tt == Tokens . CHAR || tt == Tokens . UNKNOWN ) {
4731- tt = Tokens . CHAR ;
4732- rule = first ;
4733- reader . reset ( ) ;
4761+ if ( rule . length > 1 ) {
4762+ tt = Tokens . UNKNOWN_SYM ;
4763+ } else {
4764+ tt = Tokens . CHAR ;
4765+ rule = first ;
4766+ reader . reset ( ) ;
4767+ }
47344768 }
47354769
47364770 return this . createToken ( tt , rule , startLine , startCol ) ;
@@ -5396,6 +5430,7 @@ var Tokens = [
53965430 { name : "FONT_FACE_SYM" , text : "@font-face" } ,
53975431 { name : "CHARSET_SYM" , text : "@charset" } ,
53985432 { name : "NAMESPACE_SYM" , text : "@namespace" } ,
5433+ { name : "UNKNOWN_SYM" } ,
53995434 //{ name: "ATKEYWORD"},
54005435
54015436 //CSS3 animations
0 commit comments