Переглянути джерело

#11638: Ending an imported SCSS file with a comment causes an error in

the Sass

Change-Id: Ib498f68caa7e87e2d9a21b29c9bfb2f30f35c701
tags/7.1.1
Haijian Wang 11 роки тому
джерело
коміт
e37464cecc

+ 8169
- 7265
theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 12
- 19
theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj Переглянути файл

@@ -467,24 +467,15 @@ TOKEN :
< S : ( [ " ", "\t" , "\n" , "\r", "\f" ] )+ >
{ image = Parser.SPACE; }
}
<DEFAULT>
MORE :
{
"//" : IN_SINGLE_LINE_COMMENT
}

<IN_SINGLE_LINE_COMMENT>
MORE :
{
< ~["\n","\r"] > : IN_SINGLE_LINE_COMMENT
}

<IN_SINGLE_LINE_COMMENT>
SKIP :
{
< "\n"|"\r"|"\r\n" > : DEFAULT
}
/*
* for fixing #11638: Ending an imported SCSS file with a comment causes an error in the Sass.
* now the single line comment is parsed as special token, before, they were simply skipped.
* solution got from http://www.engr.mun.ca/~theo/JavaCC-FAQ/javacc-faq-moz.htm#tth_sEc3.15
*/
<DEFAULT>
SPECIAL_TOKEN : {
< SINGLE_LINE_COMMENT: "//"(~["\n","\r"])* ("\n"|"\r"|"\r\n")? > }

<DEFAULT>
MORE :
@@ -2111,7 +2102,8 @@ void declarationOrNestedProperties() :
skipStatement();
next = getToken(1);
}
if(token.specialToken!=null){
//only add special token kept for sprites '/**'
if(token.specialToken!=null && token.specialToken!=null && token.specialToken.image.startsWith("/**")){
documentHandler.property(name, exp, important, token.specialToken.image);
}else{
documentHandler.property(name, exp, important, null);
@@ -2904,7 +2896,8 @@ String convertString(String s) {

JAVACODE
void comments(){
if (token.specialToken != null){
/*keeps only the multiple line comments, single line comments are skipped*/
if (token.specialToken != null && token.specialToken.image!=null && token.specialToken.image.startsWith("/*")){
Token tmp_t = token.specialToken;
while (tmp_t.specialToken != null) tmp_t = tmp_t.specialToken;
while (tmp_t != null) {

+ 282
- 368
theme-compiler/src/com/vaadin/sass/internal/parser/ParserConstants.java Переглянути файл

@@ -1,379 +1,293 @@
/*
* Copyright 2000-2013 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
/* Generated By:JavaCC: Do not edit this line. ParserConstants.java */
package com.vaadin.sass.internal.parser;


/**
* Token literal values and constants.
* Generated by org.javacc.parser.OtherFilesGen#start()
* Token literal values and constants. Generated by
* org.javacc.parser.OtherFilesGen#start()
*/
public interface ParserConstants {

/** End of File. */
int EOF = 0;
/** RegularExpression Id. */
int S = 1;
/** RegularExpression Id. */
int FORMAL_COMMENT = 7;
/** RegularExpression Id. */
int MULTI_LINE_COMMENT = 8;
/** RegularExpression Id. */
int CDO = 10;
/** RegularExpression Id. */
int CDC = 11;
/** RegularExpression Id. */
int LBRACE = 12;
/** RegularExpression Id. */
int RBRACE = 13;
/** RegularExpression Id. */
int DASHMATCH = 14;
/** RegularExpression Id. */
int CARETMATCH = 15;
/** RegularExpression Id. */
int DOLLARMATCH = 16;
/** RegularExpression Id. */
int STARMATCH = 17;
/** RegularExpression Id. */
int INCLUDES = 18;
/** RegularExpression Id. */
int EQ = 19;
/** RegularExpression Id. */
int PLUS = 20;
/** RegularExpression Id. */
int MINUS = 21;
/** RegularExpression Id. */
int COMMA = 22;
/** RegularExpression Id. */
int SEMICOLON = 23;
/** RegularExpression Id. */
int PRECEDES = 24;
/** RegularExpression Id. */
int SIBLING = 25;
/** RegularExpression Id. */
int SUCCEEDS = 26;
/** RegularExpression Id. */
int DIV = 27;
/** RegularExpression Id. */
int LBRACKET = 28;
/** RegularExpression Id. */
int RBRACKET = 29;
/** RegularExpression Id. */
int ANY = 30;
/** RegularExpression Id. */
int MOD = 31;
/** RegularExpression Id. */
int PARENT = 32;
/** RegularExpression Id. */
int DOT = 33;
/** RegularExpression Id. */
int LPARAN = 34;
/** RegularExpression Id. */
int RPARAN = 35;
/** RegularExpression Id. */
int COMPARE = 36;
/** RegularExpression Id. */
int OR = 37;
/** RegularExpression Id. */
int AND = 38;
/** RegularExpression Id. */
int NOT_EQ = 39;
/** RegularExpression Id. */
int COLON = 40;
/** RegularExpression Id. */
int INTERPOLATION = 41;
/** RegularExpression Id. */
int NONASCII = 42;
/** RegularExpression Id. */
int H = 43;
/** RegularExpression Id. */
int UNICODE = 44;
/** RegularExpression Id. */
int ESCAPE = 45;
/** RegularExpression Id. */
int NMSTART = 46;
/** RegularExpression Id. */
int NMCHAR = 47;
/** RegularExpression Id. */
int STRINGCHAR = 48;
/** RegularExpression Id. */
int D = 49;
/** RegularExpression Id. */
int NAME = 50;
/** RegularExpression Id. */
int TO = 51;
/** RegularExpression Id. */
int THROUGH = 52;
/** RegularExpression Id. */
int EACH_IN = 53;
/** RegularExpression Id. */
int FROM = 54;
/** RegularExpression Id. */
int MIXIN_SYM = 55;
/** RegularExpression Id. */
int INCLUDE_SYM = 56;
/** RegularExpression Id. */
int FUNCTION_SYM = 57;
/** RegularExpression Id. */
int RETURN_SYM = 58;
/** RegularExpression Id. */
int DEBUG_SYM = 59;
/** RegularExpression Id. */
int WARN_SYM = 60;
/** RegularExpression Id. */
int FOR_SYM = 61;
/** RegularExpression Id. */
int EACH_SYM = 62;
/** RegularExpression Id. */
int WHILE_SYM = 63;
/** RegularExpression Id. */
int IF_SYM = 64;
/** RegularExpression Id. */
int ELSE_SYM = 65;
/** RegularExpression Id. */
int EXTEND_SYM = 66;
/** RegularExpression Id. */
int MOZ_DOCUMENT_SYM = 67;
/** RegularExpression Id. */
int SUPPORTS_SYM = 68;
/** RegularExpression Id. */
int CONTENT_SYM = 69;
/** RegularExpression Id. */
int MICROSOFT_RULE = 70;
/** RegularExpression Id. */
int IF = 71;
/** RegularExpression Id. */
int GUARDED_SYM = 72;
/** RegularExpression Id. */
int STRING = 73;
/** RegularExpression Id. */
int IDENT = 74;
/** RegularExpression Id. */
int NUMBER = 75;
/** RegularExpression Id. */
int _URL = 76;
/** RegularExpression Id. */
int URL = 77;
/** RegularExpression Id. */
int VARIABLE = 78;
/** RegularExpression Id. */
int PERCENTAGE = 79;
/** RegularExpression Id. */
int PT = 80;
/** RegularExpression Id. */
int MM = 81;
/** RegularExpression Id. */
int CM = 82;
/** RegularExpression Id. */
int PC = 83;
/** RegularExpression Id. */
int IN = 84;
/** RegularExpression Id. */
int PX = 85;
/** RegularExpression Id. */
int EMS = 86;
/** RegularExpression Id. */
int LEM = 87;
/** RegularExpression Id. */
int REM = 88;
/** RegularExpression Id. */
int EXS = 89;
/** RegularExpression Id. */
int DEG = 90;
/** RegularExpression Id. */
int RAD = 91;
/** RegularExpression Id. */
int GRAD = 92;
/** RegularExpression Id. */
int MS = 93;
/** RegularExpression Id. */
int SECOND = 94;
/** RegularExpression Id. */
int HZ = 95;
/** RegularExpression Id. */
int KHZ = 96;
/** RegularExpression Id. */
int DIMEN = 97;
/** RegularExpression Id. */
int HASH = 98;
/** RegularExpression Id. */
int IMPORT_SYM = 99;
/** RegularExpression Id. */
int MEDIA_SYM = 100;
/** RegularExpression Id. */
int CHARSET_SYM = 101;
/** RegularExpression Id. */
int PAGE_SYM = 102;
/** RegularExpression Id. */
int FONT_FACE_SYM = 103;
/** RegularExpression Id. */
int KEY_FRAME_SYM = 104;
/** RegularExpression Id. */
int ATKEYWORD = 105;
/** RegularExpression Id. */
int IMPORTANT_SYM = 106;
/** RegularExpression Id. */
int RANGE0 = 107;
/** RegularExpression Id. */
int RANGE1 = 108;
/** RegularExpression Id. */
int RANGE2 = 109;
/** RegularExpression Id. */
int RANGE3 = 110;
/** RegularExpression Id. */
int RANGE4 = 111;
/** RegularExpression Id. */
int RANGE5 = 112;
/** RegularExpression Id. */
int RANGE6 = 113;
/** RegularExpression Id. */
int RANGE = 114;
/** RegularExpression Id. */
int UNI = 115;
/** RegularExpression Id. */
int UNICODERANGE = 116;
/** RegularExpression Id. */
int REMOVE = 117;
/** RegularExpression Id. */
int APPEND = 118;
/** RegularExpression Id. */
int CONTAINS = 119;
/** RegularExpression Id. */
int FUNCTION = 120;
/** RegularExpression Id. */
int UNKNOWN = 121;
/** End of File. */
int EOF = 0;
/** RegularExpression Id. */
int S = 1;
/** RegularExpression Id. */
int SINGLE_LINE_COMMENT = 2;
/** RegularExpression Id. */
int FORMAL_COMMENT = 5;
/** RegularExpression Id. */
int MULTI_LINE_COMMENT = 6;
/** RegularExpression Id. */
int CDO = 8;
/** RegularExpression Id. */
int CDC = 9;
/** RegularExpression Id. */
int LBRACE = 10;
/** RegularExpression Id. */
int RBRACE = 11;
/** RegularExpression Id. */
int DASHMATCH = 12;
/** RegularExpression Id. */
int CARETMATCH = 13;
/** RegularExpression Id. */
int DOLLARMATCH = 14;
/** RegularExpression Id. */
int STARMATCH = 15;
/** RegularExpression Id. */
int INCLUDES = 16;
/** RegularExpression Id. */
int EQ = 17;
/** RegularExpression Id. */
int PLUS = 18;
/** RegularExpression Id. */
int MINUS = 19;
/** RegularExpression Id. */
int COMMA = 20;
/** RegularExpression Id. */
int SEMICOLON = 21;
/** RegularExpression Id. */
int PRECEDES = 22;
/** RegularExpression Id. */
int SIBLING = 23;
/** RegularExpression Id. */
int SUCCEEDS = 24;
/** RegularExpression Id. */
int DIV = 25;
/** RegularExpression Id. */
int LBRACKET = 26;
/** RegularExpression Id. */
int RBRACKET = 27;
/** RegularExpression Id. */
int ANY = 28;
/** RegularExpression Id. */
int MOD = 29;
/** RegularExpression Id. */
int PARENT = 30;
/** RegularExpression Id. */
int DOT = 31;
/** RegularExpression Id. */
int LPARAN = 32;
/** RegularExpression Id. */
int RPARAN = 33;
/** RegularExpression Id. */
int COMPARE = 34;
/** RegularExpression Id. */
int OR = 35;
/** RegularExpression Id. */
int AND = 36;
/** RegularExpression Id. */
int NOT_EQ = 37;
/** RegularExpression Id. */
int COLON = 38;
/** RegularExpression Id. */
int INTERPOLATION = 39;
/** RegularExpression Id. */
int NONASCII = 40;
/** RegularExpression Id. */
int H = 41;
/** RegularExpression Id. */
int UNICODE = 42;
/** RegularExpression Id. */
int ESCAPE = 43;
/** RegularExpression Id. */
int NMSTART = 44;
/** RegularExpression Id. */
int NMCHAR = 45;
/** RegularExpression Id. */
int STRINGCHAR = 46;
/** RegularExpression Id. */
int D = 47;
/** RegularExpression Id. */
int NAME = 48;
/** RegularExpression Id. */
int TO = 49;
/** RegularExpression Id. */
int THROUGH = 50;
/** RegularExpression Id. */
int EACH_IN = 51;
/** RegularExpression Id. */
int FROM = 52;
/** RegularExpression Id. */
int MIXIN_SYM = 53;
/** RegularExpression Id. */
int INCLUDE_SYM = 54;
/** RegularExpression Id. */
int FUNCTION_SYM = 55;
/** RegularExpression Id. */
int RETURN_SYM = 56;
/** RegularExpression Id. */
int DEBUG_SYM = 57;
/** RegularExpression Id. */
int WARN_SYM = 58;
/** RegularExpression Id. */
int FOR_SYM = 59;
/** RegularExpression Id. */
int EACH_SYM = 60;
/** RegularExpression Id. */
int WHILE_SYM = 61;
/** RegularExpression Id. */
int IF_SYM = 62;
/** RegularExpression Id. */
int ELSE_SYM = 63;
/** RegularExpression Id. */
int EXTEND_SYM = 64;
/** RegularExpression Id. */
int MOZ_DOCUMENT_SYM = 65;
/** RegularExpression Id. */
int SUPPORTS_SYM = 66;
/** RegularExpression Id. */
int CONTENT_SYM = 67;
/** RegularExpression Id. */
int MICROSOFT_RULE = 68;
/** RegularExpression Id. */
int IF = 69;
/** RegularExpression Id. */
int GUARDED_SYM = 70;
/** RegularExpression Id. */
int STRING = 71;
/** RegularExpression Id. */
int IDENT = 72;
/** RegularExpression Id. */
int NUMBER = 73;
/** RegularExpression Id. */
int _URL = 74;
/** RegularExpression Id. */
int URL = 75;
/** RegularExpression Id. */
int VARIABLE = 76;
/** RegularExpression Id. */
int PERCENTAGE = 77;
/** RegularExpression Id. */
int PT = 78;
/** RegularExpression Id. */
int MM = 79;
/** RegularExpression Id. */
int CM = 80;
/** RegularExpression Id. */
int PC = 81;
/** RegularExpression Id. */
int IN = 82;
/** RegularExpression Id. */
int PX = 83;
/** RegularExpression Id. */
int EMS = 84;
/** RegularExpression Id. */
int LEM = 85;
/** RegularExpression Id. */
int REM = 86;
/** RegularExpression Id. */
int EXS = 87;
/** RegularExpression Id. */
int DEG = 88;
/** RegularExpression Id. */
int RAD = 89;
/** RegularExpression Id. */
int GRAD = 90;
/** RegularExpression Id. */
int MS = 91;
/** RegularExpression Id. */
int SECOND = 92;
/** RegularExpression Id. */
int HZ = 93;
/** RegularExpression Id. */
int KHZ = 94;
/** RegularExpression Id. */
int DIMEN = 95;
/** RegularExpression Id. */
int HASH = 96;
/** RegularExpression Id. */
int IMPORT_SYM = 97;
/** RegularExpression Id. */
int MEDIA_SYM = 98;
/** RegularExpression Id. */
int CHARSET_SYM = 99;
/** RegularExpression Id. */
int PAGE_SYM = 100;
/** RegularExpression Id. */
int FONT_FACE_SYM = 101;
/** RegularExpression Id. */
int KEY_FRAME_SYM = 102;
/** RegularExpression Id. */
int ATKEYWORD = 103;
/** RegularExpression Id. */
int IMPORTANT_SYM = 104;
/** RegularExpression Id. */
int RANGE0 = 105;
/** RegularExpression Id. */
int RANGE1 = 106;
/** RegularExpression Id. */
int RANGE2 = 107;
/** RegularExpression Id. */
int RANGE3 = 108;
/** RegularExpression Id. */
int RANGE4 = 109;
/** RegularExpression Id. */
int RANGE5 = 110;
/** RegularExpression Id. */
int RANGE6 = 111;
/** RegularExpression Id. */
int RANGE = 112;
/** RegularExpression Id. */
int UNI = 113;
/** RegularExpression Id. */
int UNICODERANGE = 114;
/** RegularExpression Id. */
int REMOVE = 115;
/** RegularExpression Id. */
int APPEND = 116;
/** RegularExpression Id. */
int CONTAINS = 117;
/** RegularExpression Id. */
int FUNCTION = 118;
/** RegularExpression Id. */
int UNKNOWN = 119;

/** Lexical state. */
int DEFAULT = 0;
/** Lexical state. */
int IN_SINGLE_LINE_COMMENT = 1;
/** Lexical state. */
int IN_FORMAL_COMMENT = 2;
/** Lexical state. */
int IN_MULTI_LINE_COMMENT = 3;
/** Lexical state. */
int DEFAULT = 0;
/** Lexical state. */
int IN_FORMAL_COMMENT = 1;
/** Lexical state. */
int IN_MULTI_LINE_COMMENT = 2;

/** Literal token values. */
String[] tokenImage = {
"<EOF>",
"<S>",
"\"//\"",
"<token of kind 3>",
"<token of kind 4>",
"<token of kind 5>",
"\"/*\"",
"\"*/\"",
"\"*/\"",
"<token of kind 9>",
"\"<!--\"",
"\"-->\"",
"\"{\"",
"\"}\"",
"\"|=\"",
"\"^=\"",
"\"$=\"",
"\"*=\"",
"\"~=\"",
"\"=\"",
"\"+\"",
"\"-\"",
"\",\"",
"\";\"",
"\">\"",
"\"~\"",
"\"<\"",
"\"/\"",
"\"[\"",
"\"]\"",
"\"*\"",
"\"%\"",
"\"&\"",
"\".\"",
"\"(\"",
"\")\"",
"\"==\"",
"\"||\"",
"\"&&\"",
"\"!=\"",
"\":\"",
"<INTERPOLATION>",
"<NONASCII>",
"<H>",
"<UNICODE>",
"<ESCAPE>",
"<NMSTART>",
"<NMCHAR>",
"<STRINGCHAR>",
"<D>",
"<NAME>",
"\"to\"",
"\"through\"",
"\"in\"",
"\"from\"",
"\"@mixin\"",
"\"@include\"",
"\"@function\"",
"\"@return\"",
"\"@debug\"",
"\"@warn\"",
"\"@for\"",
"\"@each\"",
"\"@while\"",
"\"@if\"",
"\"@else\"",
"\"@extend\"",
"\"@-moz-document\"",
"\"@supports\"",
"\"@content\"",
"<MICROSOFT_RULE>",
"\"if\"",
"<GUARDED_SYM>",
"<STRING>",
"<IDENT>",
"<NUMBER>",
"<_URL>",
"<URL>",
"<VARIABLE>",
"<PERCENTAGE>",
"<PT>",
"<MM>",
"<CM>",
"<PC>",
"<IN>",
"<PX>",
"<EMS>",
"<LEM>",
"<REM>",
"<EXS>",
"<DEG>",
"<RAD>",
"<GRAD>",
"<MS>",
"<SECOND>",
"<HZ>",
"<KHZ>",
"<DIMEN>",
"<HASH>",
"\"@import\"",
"\"@media\"",
"\"@charset\"",
"\"@page\"",
"\"@font-face\"",
"<KEY_FRAME_SYM>",
"<ATKEYWORD>",
"<IMPORTANT_SYM>",
"<RANGE0>",
"<RANGE1>",
"<RANGE2>",
"<RANGE3>",
"<RANGE4>",
"<RANGE5>",
"<RANGE6>",
"<RANGE>",
"<UNI>",
"<UNICODERANGE>",
"<REMOVE>",
"<APPEND>",
"<CONTAINS>",
"<FUNCTION>",
"<UNKNOWN>",
};
/** Literal token values. */
String[] tokenImage = { "<EOF>", "<S>", "<SINGLE_LINE_COMMENT>",
"<token of kind 3>", "\"/*\"", "\"*/\"", "\"*/\"",
"<token of kind 7>", "\"<!--\"", "\"-->\"", "\"{\"", "\"}\"",
"\"|=\"", "\"^=\"", "\"$=\"", "\"*=\"", "\"~=\"", "\"=\"", "\"+\"",
"\"-\"", "\",\"", "\";\"", "\">\"", "\"~\"", "\"<\"", "\"/\"",
"\"[\"", "\"]\"", "\"*\"", "\"%\"", "\"&\"", "\".\"", "\"(\"",
"\")\"", "\"==\"", "\"||\"", "\"&&\"", "\"!=\"", "\":\"",
"<INTERPOLATION>", "<NONASCII>", "<H>", "<UNICODE>", "<ESCAPE>",
"<NMSTART>", "<NMCHAR>", "<STRINGCHAR>", "<D>", "<NAME>", "\"to\"",
"\"through\"", "\"in\"", "\"from\"", "\"@mixin\"", "\"@include\"",
"\"@function\"", "\"@return\"", "\"@debug\"", "\"@warn\"",
"\"@for\"", "\"@each\"", "\"@while\"", "\"@if\"", "\"@else\"",
"\"@extend\"", "\"@-moz-document\"", "\"@supports\"",
"\"@content\"", "<MICROSOFT_RULE>", "\"if\"", "<GUARDED_SYM>",
"<STRING>", "<IDENT>", "<NUMBER>", "<_URL>", "<URL>", "<VARIABLE>",
"<PERCENTAGE>", "<PT>", "<MM>", "<CM>", "<PC>", "<IN>", "<PX>",
"<EMS>", "<LEM>", "<REM>", "<EXS>", "<DEG>", "<RAD>", "<GRAD>",
"<MS>", "<SECOND>", "<HZ>", "<KHZ>", "<DIMEN>", "<HASH>",
"\"@import\"", "\"@media\"", "\"@charset\"", "\"@page\"",
"\"@font-face\"", "<KEY_FRAME_SYM>", "<ATKEYWORD>",
"<IMPORTANT_SYM>", "<RANGE0>", "<RANGE1>", "<RANGE2>", "<RANGE3>",
"<RANGE4>", "<RANGE5>", "<RANGE6>", "<RANGE>", "<UNI>",
"<UNICODERANGE>", "<REMOVE>", "<APPEND>", "<CONTAINS>",
"<FUNCTION>", "<UNKNOWN>", };

}

+ 3973
- 3011
theme-compiler/src/com/vaadin/sass/internal/parser/ParserTokenManager.java
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 3
- 0
theme-compiler/tests/resources/automatic/css/import-file-which-contains-comment-in-last-line.css Переглянути файл

@@ -0,0 +1,3 @@
.foo{
foo: bar;
}

+ 4
- 0
theme-compiler/tests/resources/automatic/scss/import-file-which-contains-comment-in-last-line.scss Переглянути файл

@@ -0,0 +1,4 @@
@import "to-be-imported/imported-file-contains-comments-in-last-line.scss";
.foo{
foo: $foo;
}

+ 2
- 0
theme-compiler/tests/resources/automatic/scss/to-be-imported/imported-file-contains-comments-in-last-line.scss Переглянути файл

@@ -0,0 +1,2 @@
$foo: bar;
// This will cause an error

Завантаження…
Відмінити
Зберегти