Browse Source

use switch case

Gildas 7 năm trước cách đây
mục cha
commit
f7320401fe
2 tập tin đã thay đổi với 130 bổ sung124 xóa
  1. 3 1
      .eslintrc.js
  2. 127 123
      lib/single-file/css-declarations-parser.js

+ 3 - 1
.eslintrc.js

@@ -11,7 +11,9 @@ module.exports = {
     "rules": {
         "indent": [
             "error",
-            "tab"
+            "tab", {
+                "SwitchCase": 1
+            }
         ],
         "linebreak-style": [
             "error",

+ 127 - 123
lib/single-file/css-declarations-parser.js

@@ -97,133 +97,137 @@ this.parseCss = this.parseCss || (() => {
 		if (whitespace(code)) {
 			while (whitespace(next())) code = consume();
 			return new Token(WHITESPACE_TOKEN_TYPE);
-		}
-		else if (code == 0x22) return consumeAStringToken(consume, next, eof, reconsume, parseerror, donothing, code);
-		else if (code == 0x23) {
-			if (namechar(next()) || areAValidEscape(next(1), next(2))) {
-				const token = new Token(HASH_TOKEN_TYPE);
-				if (wouldStartAnIdentifier(next(1), next(2), next(3))) token.type = "id";
-				token.value = consumeAName(consume, next, eof, reconsume);
-				return token;
-			} else {
-				return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
-			}
-		}
-		else if (code == 0x24) {
-			if (next() == 0x3d) {
-				code = consume();
-				return new Token(SUFFIX_MATCH_TOKEN_TYPE);
-			} else {
-				return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
-			}
-		}
-		else if (code == 0x27) return consumeAStringToken(consume, next, eof, reconsume, parseerror, donothing, code);
-		else if (code == 0x28) return new Token(OPEN_PAREN_TOKEN_TYPE);
-		else if (code == 0x29) return new Token(CLOSE_PAREN_TOKEN_TYPE);
-		else if (code == 0x2a) {
-			if (next() == 0x3d) {
-				code = consume();
-				return new Token(SUBSTRING_MATCH_TOKEN_TYPE);
-			} else {
-				return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
-			}
-		}
-		else if (code == 0x2b) {
-			if (startsWithANumber(next, code)) {
-				reconsume();
-				return consumeANumericToken(consume, next, eof, reconsume);
-			} else {
-				return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
-			}
-		}
-		else if (code == 0x2c) return new Token(COMMA_TOKEN_TYPE);
-		else if (code == 0x2d) {
-			if (startsWithANumber(next, code)) {
-				reconsume();
-				return consumeANumericToken(consume, next, eof, reconsume);
-			} else if (next(1) == 0x2d && next(2) == 0x3e) {
-				consume(2);
-				return new Token(CDC_TOKEN_TYPE);
-			} else if (wouldStartAnIdentifier(code, next(1), next(2))) {
-				reconsume();
-				return consumeAnIdentlikeToken(consume, next, eof, reconsume, parseerror, donothing);
-			} else {
-				return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
-			}
-		}
-		else if (code == 0x2e) {
-			if (startsWithANumber(next, code)) {
-				reconsume();
-				return consumeANumericToken(consume, next, eof, reconsume);
-			} else {
-				return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
-			}
-		}
-		else if (code == 0x3a) return new Token(COLON_TOKEN_TYPE);
-		else if (code == 0x3b) return new Token(SEMICOLON_TOKEN_TYPE);
-		else if (code == 0x3c) {
-			if (next(1) == 0x21 && next(2) == 0x2d && next(3) == 0x2d) {
-				consume(3);
-				return new Token(CDO_TOKEN_TYPE);
-			} else {
-				return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
-			}
-		}
-		else if (code == 0x40) {
-			return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
-		}
-		else if (code == 0x5b) new Token(OPEN_SQUARE_TOKEN_TYPE);
-		else if (code == 0x5c) {
-			if (startsWithAValidEscape(next, code)) {
-				reconsume();
-				return consumeAnIdentlikeToken(consume, next, eof, reconsume, parseerror, donothing);
-			} else {
-				parseerror();
-				return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
-			}
-		}
-		else if (code == 0x5d) new Token(CLOSE_SQUARE_TOKEN_TYPE);
-		else if (code == 0x5e) {
-			if (next() == 0x3d) {
-				code = consume();
-				return new Token(PREFIX_MATCH_TOKEN_TYPE);
-			} else {
-				return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
-			}
-		}
-		else if (code == 0x7b) return new Token(OPEN_CURLY_TOKEN_TYPE);
-		else if (code == 0x7c) {
-			if (next() == 0x3d) {
-				code = consume();
-				return new Token(DASH_MATCH_TOKEN_TYPE);
-			} else if (next() == 0x7c) {
-				code = consume();
-				return new Token(COLUMN_TOKEN_TYPE);
-			} else {
-				return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
-			}
-		}
-		else if (code == 0x7d) return new Token(CLOSE_CURLY_TOKEN_TYPE);
-		else if (code == 0x7e) {
-			if (next() == 0x3d) {
-				code = consume();
-				return new Token(INCLUDE_MATCH_TOKEN_TYPE);
-			} else {
-				return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
+		} else {
+			switch (code) {
+				case 0x22:
+					return consumeAStringToken(consume, next, eof, reconsume, parseerror, donothing, code);
+				case 0x23:
+					if (namechar(next()) || areAValidEscape(next(1), next(2))) {
+						const token = new Token(HASH_TOKEN_TYPE);
+						if (wouldStartAnIdentifier(next(1), next(2), next(3))) token.type = "id";
+						token.value = consumeAName(consume, next, eof, reconsume);
+						return token;
+					} else {
+						return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
+					}
+				case 0x24:
+					if (next() == 0x3d) {
+						code = consume();
+						return new Token(SUFFIX_MATCH_TOKEN_TYPE);
+					} else {
+						return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
+					}
+				case 0x27:
+					return consumeAStringToken(consume, next, eof, reconsume, parseerror, donothing, code);
+				case 0x28:
+					return new Token(OPEN_PAREN_TOKEN_TYPE);
+				case 0x29:
+					return new Token(CLOSE_PAREN_TOKEN_TYPE);
+				case 0x2a:
+					if (next() == 0x3d) {
+						code = consume();
+						return new Token(SUBSTRING_MATCH_TOKEN_TYPE);
+					} else {
+						return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
+					}
+				case 0x2b:
+					if (startsWithANumber(next, code)) {
+						reconsume();
+						return consumeANumericToken(consume, next, eof, reconsume);
+					} else {
+						return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
+					}
+				case 0x2c:
+					return new Token(COMMA_TOKEN_TYPE);
+				case 0x2d:
+					if (startsWithANumber(next, code)) {
+						reconsume();
+						return consumeANumericToken(consume, next, eof, reconsume);
+					} else if (next(1) == 0x2d && next(2) == 0x3e) {
+						consume(2);
+						return new Token(CDC_TOKEN_TYPE);
+					} else if (wouldStartAnIdentifier(code, next(1), next(2))) {
+						reconsume();
+						return consumeAnIdentlikeToken(consume, next, eof, reconsume, parseerror, donothing);
+					} else {
+						return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
+					}
+				case 0x2e:
+					if (startsWithANumber(next, code)) {
+						reconsume();
+						return consumeANumericToken(consume, next, eof, reconsume);
+					} else {
+						return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
+					}
+				case 0x3a:
+					return new Token(COLON_TOKEN_TYPE);
+				case 0x3b:
+					return new Token(SEMICOLON_TOKEN_TYPE);
+				case 0x3c:
+					if (next(1) == 0x21 && next(2) == 0x2d && next(3) == 0x2d) {
+						consume(3);
+						return new Token(CDO_TOKEN_TYPE);
+					} else {
+						return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
+					}
+				case 0x40:
+					return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
+				case 0x5b:
+					return new Token(OPEN_SQUARE_TOKEN_TYPE);
+				case 0x5c:
+					if (startsWithAValidEscape(next, code)) {
+						reconsume();
+						return consumeAnIdentlikeToken(consume, next, eof, reconsume, parseerror, donothing);
+					} else {
+						parseerror();
+						return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
+					}
+				case 0x5d:
+					return new Token(CLOSE_SQUARE_TOKEN_TYPE);
+				case 0x5e:
+					if (next() == 0x3d) {
+						code = consume();
+						return new Token(PREFIX_MATCH_TOKEN_TYPE);
+					} else {
+						return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
+					}
+				case 0x7b:
+					return new Token(OPEN_CURLY_TOKEN_TYPE);
+				case 0x7c:
+					if (next() == 0x3d) {
+						code = consume();
+						return new Token(DASH_MATCH_TOKEN_TYPE);
+					} else if (next() == 0x7c) {
+						code = consume();
+						return new Token(COLUMN_TOKEN_TYPE);
+					} else {
+						return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
+					}
+				case 0x7d:
+					return new Token(CLOSE_CURLY_TOKEN_TYPE);
+				case 0x7e:
+					if (next() == 0x3d) {
+						code = consume();
+						return new Token(INCLUDE_MATCH_TOKEN_TYPE);
+					} else {
+						return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
+					}
+				default:
+					if (digit(code)) {
+						reconsume();
+						return consumeANumericToken(consume, next, eof, reconsume);
+					}
+					else if (namestartchar(code)) {
+						reconsume();
+						return consumeAnIdentlikeToken(consume, next, eof, reconsume, parseerror, donothing);
+					}
+					else if (eof()) return new Token(EOF_TOKEN_TYPE);
+					else return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
 			}
 		}
-		else if (digit(code)) {
-			reconsume();
-			return consumeANumericToken(consume, next, eof, reconsume);
-		}
-		else if (namestartchar(code)) {
-			reconsume();
-			return consumeAnIdentlikeToken(consume, next, eof, reconsume, parseerror, donothing);
-		}
-		else if (eof()) return new Token(EOF_TOKEN_TYPE);
-		else return new Token(DELIM_TOKEN_TYPE, stringFromCode(code));
 	}
 
+
 	function consumeComments(consume, next, eof, parseerror) {
 		while (next(1) == 0x2f && next(2) == 0x2a) {
 			consume(2);